Merge commit '517ffce4e1a03aea979fe3a18a3dd1761a24fafb' into arch-sparc

Backmerge from the point in mainline where a trivial conflict had been
introduced (arch/sparc/kernel/sys_sparc_64.c had grown sys_kern_features()
right after where kernel_execve() used to be)

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2012-11-16 20:48:13 -05:00
commit 85910c202b
895 changed files with 13194 additions and 11074 deletions

6
.gitignore vendored
View file

@ -14,10 +14,6 @@
*.o.* *.o.*
*.a *.a
*.s *.s
*.ko.unsigned
*.ko.stripped
*.ko.stripped.dig
*.ko.stripped.sig
*.ko *.ko
*.so *.so
*.so.dbg *.so.dbg
@ -95,6 +91,4 @@ GTAGS
extra_certificates extra_certificates
signing_key.priv signing_key.priv
signing_key.x509 signing_key.x509
signing_key.x509.keyid
signing_key.x509.signer
x509.genkey x509.genkey

View file

@ -210,6 +210,8 @@ local_ops.txt
- semantics and behavior of local atomic operations. - semantics and behavior of local atomic operations.
lockdep-design.txt lockdep-design.txt
- documentation on the runtime locking correctness validator. - documentation on the runtime locking correctness validator.
lockup-watchdogs.txt
- info on soft and hard lockup detectors (aka nmi_watchdog).
logo.gif logo.gif
- full colour GIF image of Linux logo (penguin - Tux). - full colour GIF image of Linux logo (penguin - Tux).
logo.txt logo.txt
@ -240,8 +242,6 @@ netlabel/
- directory with information on the NetLabel subsystem. - directory with information on the NetLabel subsystem.
networking/ networking/
- directory with info on various aspects of networking with Linux. - directory with info on various aspects of networking with Linux.
nmi_watchdog.txt
- info on NMI watchdog for SMP systems.
nommu-mmap.txt nommu-mmap.txt
- documentation about no-mmu memory mapping support. - documentation about no-mmu memory mapping support.
numastat.txt numastat.txt

View file

@ -56,15 +56,15 @@ FUNCS = \
write \ write \
IOCTLS = \ IOCTLS = \
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/videodev2.h) \ $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/videodev2.h) \
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/audio.h) \ $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/audio.h) \
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/ca.h) \ $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/ca.h) \
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/dmx.h) \ $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/dmx.h) \
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/frontend.h) \ $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
$(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/net.h) \ $(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/net.h) \
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/video.h) \ $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/video.h) \
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/media.h) \ $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/media.h) \
$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/v4l2-subdev.h) \ $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
VIDIOC_SUBDEV_G_FRAME_INTERVAL \ VIDIOC_SUBDEV_G_FRAME_INTERVAL \
VIDIOC_SUBDEV_S_FRAME_INTERVAL \ VIDIOC_SUBDEV_S_FRAME_INTERVAL \
VIDIOC_SUBDEV_ENUM_MBUS_CODE \ VIDIOC_SUBDEV_ENUM_MBUS_CODE \
@ -74,32 +74,32 @@ IOCTLS = \
VIDIOC_SUBDEV_S_SELECTION \ VIDIOC_SUBDEV_S_SELECTION \
TYPES = \ TYPES = \
$(shell perl -ne 'print "$$1 " if /^typedef\s+[^\s]+\s+([^\s]+)\;/' $(srctree)/include/linux/videodev2.h) \ $(shell perl -ne 'print "$$1 " if /^typedef\s+[^\s]+\s+([^\s]+)\;/' $(srctree)/include/uapi/linux/videodev2.h) \
$(shell perl -ne 'print "$$1 " if /^}\s+([a-z0-9_]+_t)/' $(srctree)/include/linux/dvb/frontend.h) $(shell perl -ne 'print "$$1 " if /^}\s+([a-z0-9_]+_t)/' $(srctree)/include/uapi/linux/dvb/frontend.h)
ENUMS = \ ENUMS = \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/videodev2.h) \ $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/audio.h) \ $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/audio.h) \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/ca.h) \ $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/ca.h) \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/dmx.h) \ $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/dmx.h) \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/frontend.h) \ $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/net.h) \ $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/net.h) \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/video.h) \ $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/video.h) \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/media.h) \ $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-mediabus.h) \ $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h) \
$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-subdev.h) $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h)
STRUCTS = \ STRUCTS = \
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/videodev2.h) \ $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/linux/dvb/audio.h) \ $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/uapi/linux/dvb/audio.h) \
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/ca.h) \ $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/ca.h) \
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/dmx.h) \ $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/dmx.h) \
$(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/frontend.h) \ $(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/frontend.h) \
$(shell perl -ne 'print "$$1 " if (/^struct\s+([A-Z][^\s]+)\s+/)' $(srctree)/include/linux/dvb/net.h) \ $(shell perl -ne 'print "$$1 " if (/^struct\s+([A-Z][^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/net.h) \
$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/video.h) \ $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/video.h) \
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/media.h) \ $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-subdev.h) \ $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
$(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-mediabus.h) $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h)
ERRORS = \ ERRORS = \
E2BIG \ E2BIG \
@ -205,7 +205,7 @@ $(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES)
@(ln -sf $(MEDIA_SRC_DIR)/v4l/*xml $(MEDIA_OBJ_DIR)/) @(ln -sf $(MEDIA_SRC_DIR)/v4l/*xml $(MEDIA_OBJ_DIR)/)
@(ln -sf $(MEDIA_SRC_DIR)/dvb/*xml $(MEDIA_OBJ_DIR)/) @(ln -sf $(MEDIA_SRC_DIR)/dvb/*xml $(MEDIA_OBJ_DIR)/)
$(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml $(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/uapi/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml
@$($(quiet)gen_xml) @$($(quiet)gen_xml)
@( \ @( \
echo "<programlisting>") > $@ echo "<programlisting>") > $@
@ -216,7 +216,7 @@ $(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/linux/videodev2.h $(MEDIA_O
@( \ @( \
echo "</programlisting>") >> $@ echo "</programlisting>") >> $@
$(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml $(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/uapi/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml
@$($(quiet)gen_xml) @$($(quiet)gen_xml)
@( \ @( \
echo "<programlisting>") > $@ echo "<programlisting>") > $@
@ -227,7 +227,7 @@ $(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/linux/dvb/audio.h $(MEDIA_OBJ_D
@( \ @( \
echo "</programlisting>") >> $@ echo "</programlisting>") >> $@
$(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml $(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/uapi/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml
@$($(quiet)gen_xml) @$($(quiet)gen_xml)
@( \ @( \
echo "<programlisting>") > $@ echo "<programlisting>") > $@
@ -238,7 +238,7 @@ $(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4
@( \ @( \
echo "</programlisting>") >> $@ echo "</programlisting>") >> $@
$(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml $(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/uapi/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml
@$($(quiet)gen_xml) @$($(quiet)gen_xml)
@( \ @( \
echo "<programlisting>") > $@ echo "<programlisting>") > $@
@ -249,7 +249,7 @@ $(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/
@( \ @( \
echo "</programlisting>") >> $@ echo "</programlisting>") >> $@
$(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml $(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/uapi/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml
@$($(quiet)gen_xml) @$($(quiet)gen_xml)
@( \ @( \
echo "<programlisting>") > $@ echo "<programlisting>") > $@
@ -260,7 +260,7 @@ $(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/linux/dvb/frontend.h $(MEDIA
@( \ @( \
echo "</programlisting>") >> $@ echo "</programlisting>") >> $@
$(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml $(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/uapi/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml
@$($(quiet)gen_xml) @$($(quiet)gen_xml)
@( \ @( \
echo "<programlisting>") > $@ echo "<programlisting>") > $@
@ -271,7 +271,7 @@ $(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/linux/dvb/net.h $(MEDIA_OBJ_DIR)/
@( \ @( \
echo "</programlisting>") >> $@ echo "</programlisting>") >> $@
$(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml $(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/uapi/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml
@$($(quiet)gen_xml) @$($(quiet)gen_xml)
@( \ @( \
echo "<programlisting>") > $@ echo "<programlisting>") > $@

View file

@ -56,7 +56,7 @@
!Enet/core/filter.c !Enet/core/filter.c
</sect1> </sect1>
<sect1><title>Generic Network Statistics</title> <sect1><title>Generic Network Statistics</title>
!Iinclude/linux/gen_stats.h !Iinclude/uapi/linux/gen_stats.h
!Enet/core/gen_stats.c !Enet/core/gen_stats.c
!Enet/core/gen_estimator.c !Enet/core/gen_estimator.c
</sect1> </sect1>
@ -80,7 +80,7 @@
!Enet/wimax/op-rfkill.c !Enet/wimax/op-rfkill.c
!Enet/wimax/stack.c !Enet/wimax/stack.c
!Iinclude/net/wimax.h !Iinclude/net/wimax.h
!Iinclude/linux/wimax.h !Iinclude/uapi/linux/wimax.h
</sect1> </sect1>
</chapter> </chapter>

View file

@ -42,13 +42,7 @@ The driver interface depends on your hardware. If your system
properly provides the SMBIOS info for IPMI, the driver will detect it properly provides the SMBIOS info for IPMI, the driver will detect it
and just work. If you have a board with a standard interface (These and just work. If you have a board with a standard interface (These
will generally be either "KCS", "SMIC", or "BT", consult your hardware will generally be either "KCS", "SMIC", or "BT", consult your hardware
manual), choose the 'IPMI SI handler' option. A driver also exists manual), choose the 'IPMI SI handler' option.
for direct I2C access to the IPMI management controller. Some boards
support this, but it is unknown if it will work on every board. For
this, choose 'IPMI SMBus handler', but be ready to try to do some
figuring to see if it will work on your system if the SMBIOS/APCI
information is wrong or not present. It is fairly safe to have both
these enabled and let the drivers auto-detect what is present.
You should generally enable ACPI on your system, as systems with IPMI You should generally enable ACPI on your system, as systems with IPMI
can have ACPI tables describing them. can have ACPI tables describing them.
@ -58,8 +52,7 @@ their job correctly, the IPMI controller should be automatically
detected (via ACPI or SMBIOS tables) and should just work. Sadly, detected (via ACPI or SMBIOS tables) and should just work. Sadly,
many boards do not have this information. The driver attempts many boards do not have this information. The driver attempts
standard defaults, but they may not work. If you fall into this standard defaults, but they may not work. If you fall into this
situation, you need to read the section below named 'The SI Driver' or situation, you need to read the section below named 'The SI Driver'.
"The SMBus Driver" on how to hand-configure your system.
IPMI defines a standard watchdog timer. You can enable this with the IPMI defines a standard watchdog timer. You can enable this with the
'IPMI Watchdog Timer' config option. If you compile the driver into 'IPMI Watchdog Timer' config option. If you compile the driver into
@ -104,12 +97,7 @@ driver, each open file for this device ties in to the message handler
as an IPMI user. as an IPMI user.
ipmi_si - A driver for various system interfaces. This supports KCS, ipmi_si - A driver for various system interfaces. This supports KCS,
SMIC, and BT interfaces. Unless you have an SMBus interface or your SMIC, and BT interfaces.
own custom interface, you probably need to use this.
ipmi_smb - A driver for accessing BMCs on the SMBus. It uses the
I2C kernel driver's SMBus interfaces to send and receive IPMI messages
over the SMBus.
ipmi_watchdog - IPMI requires systems to have a very capable watchdog ipmi_watchdog - IPMI requires systems to have a very capable watchdog
timer. This driver implements the standard Linux watchdog timer timer. This driver implements the standard Linux watchdog timer
@ -482,53 +470,6 @@ for specifying an interface. Note that when removing an interface,
only the first three parameters (si type, address type, and address) only the first three parameters (si type, address type, and address)
are used for the comparison. Any options are ignored for removing. are used for the comparison. Any options are ignored for removing.
The SMBus Driver
----------------
The SMBus driver allows up to 4 SMBus devices to be configured in the
system. By default, the driver will register any SMBus interfaces it finds
in the I2C address range of 0x20 to 0x4f on any adapter. You can change this
at module load time (for a module) with:
modprobe ipmi_smb.o
addr=<adapter1>,<i2caddr1>[,<adapter2>,<i2caddr2>[,...]]
dbg=<flags1>,<flags2>...
[defaultprobe=1] [dbg_probe=1]
The addresses are specified in pairs, the first is the adapter ID and the
second is the I2C address on that adapter.
The debug flags are bit flags for each BMC found, they are:
IPMI messages: 1, driver state: 2, timing: 4, I2C probe: 8
Setting smb_defaultprobe to zero disabled the default probing of SMBus
interfaces at address range 0x20 to 0x4f. This means that only the
BMCs specified on the smb_addr line will be detected.
Setting smb_dbg_probe to 1 will enable debugging of the probing and
detection process for BMCs on the SMBusses.
Discovering the IPMI compliant BMC on the SMBus can cause devices
on the I2C bus to fail. The SMBus driver writes a "Get Device ID" IPMI
message as a block write to the I2C bus and waits for a response.
This action can be detrimental to some I2C devices. It is highly recommended
that the known I2c address be given to the SMBus driver in the smb_addr
parameter. The default address range will not be used when a smb_addr
parameter is provided.
When compiled into the kernel, the addresses can be specified on the
kernel command line as:
ipmb_smb.addr=<adapter1>,<i2caddr1>[,<adapter2>,<i2caddr2>[,...]]
ipmi_smb.dbg=<flags1>,<flags2>...
ipmi_smb.defaultprobe=0 ipmi_smb.dbg_probe=1
These are the same options as on the module command line.
Note that you might need some I2C changes if CONFIG_IPMI_PANIC_EVENT
is enabled along with this, so the I2C driver knows to run to
completion during sending a panic event.
Other Pieces Other Pieces
------------ ------------

View file

@ -93,7 +93,7 @@ Valid values for pin and group names are:
With some exceptions, these support nvidia,high-speed-mode, With some exceptions, these support nvidia,high-speed-mode,
nvidia,schmitt, nvidia,low-power-mode, nvidia,pull-down-strength, nvidia,schmitt, nvidia,low-power-mode, nvidia,pull-down-strength,
nvidia,pull-up-strength, nvidia,slew_rate-rising, nvidia,slew_rate-falling. nvidia,pull-up-strength, nvidia,slew-rate-rising, nvidia,slew-rate-falling.
drive_ao1, drive_ao2, drive_at1, drive_at2, drive_cdev1, drive_cdev2, drive_ao1, drive_ao2, drive_at1, drive_at2, drive_cdev1, drive_cdev2,
drive_csus, drive_dap1, drive_dap2, drive_dap3, drive_dap4, drive_dbg, drive_csus, drive_dap1, drive_dap2, drive_dap3, drive_dap4, drive_dbg,

View file

@ -83,7 +83,7 @@ Valid values for pin and group names are:
drive groups: drive groups:
These all support nvidia,pull-down-strength, nvidia,pull-up-strength, These all support nvidia,pull-down-strength, nvidia,pull-up-strength,
nvidia,slew_rate-rising, nvidia,slew_rate-falling. Most but not all nvidia,slew-rate-rising, nvidia,slew-rate-falling. Most but not all
support nvidia,high-speed-mode, nvidia,schmitt, nvidia,low-power-mode. support nvidia,high-speed-mode, nvidia,schmitt, nvidia,low-power-mode.
ao1, ao2, at1, at2, at3, at4, at5, cdev1, cdev2, cec, crt, csus, dap1, ao1, ao2, at1, at2, at3, at4, at5, cdev1, cdev2, cec, crt, csus, dap1,

View file

@ -18,32 +18,40 @@
High level behavior (mixed): High level behavior (mixed):
============================ ============================
kernel(driver): calls request_firmware(&fw_entry, $FIRMWARE, device) 1), kernel(driver):
- calls request_firmware(&fw_entry, $FIRMWARE, device)
- kernel searchs the fimware image with name $FIRMWARE directly
in the below search path of root filesystem:
"/lib/firmware/updates/" UTS_RELEASE,
"/lib/firmware/updates",
"/lib/firmware/" UTS_RELEASE,
"/lib/firmware"
- If found, goto 7), else goto 2)
userspace: 2), userspace:
- /sys/class/firmware/xxx/{loading,data} appear. - /sys/class/firmware/xxx/{loading,data} appear.
- hotplug gets called with a firmware identifier in $FIRMWARE - hotplug gets called with a firmware identifier in $FIRMWARE
and the usual hotplug environment. and the usual hotplug environment.
- hotplug: echo 1 > /sys/class/firmware/xxx/loading - hotplug: echo 1 > /sys/class/firmware/xxx/loading
kernel: Discard any previous partial load. 3), kernel: Discard any previous partial load.
userspace: 4), userspace:
- hotplug: cat appropriate_firmware_image > \ - hotplug: cat appropriate_firmware_image > \
/sys/class/firmware/xxx/data /sys/class/firmware/xxx/data
kernel: grows a buffer in PAGE_SIZE increments to hold the image as it 5), kernel: grows a buffer in PAGE_SIZE increments to hold the image as it
comes in. comes in.
userspace: 6), userspace:
- hotplug: echo 0 > /sys/class/firmware/xxx/loading - hotplug: echo 0 > /sys/class/firmware/xxx/loading
kernel: request_firmware() returns and the driver has the firmware 7), kernel: request_firmware() returns and the driver has the firmware
image in fw_entry->{data,size}. If something went wrong image in fw_entry->{data,size}. If something went wrong
request_firmware() returns non-zero and fw_entry is set to request_firmware() returns non-zero and fw_entry is set to
NULL. NULL.
kernel(driver): Driver code calls release_firmware(fw_entry) releasing 8), kernel(driver): Driver code calls release_firmware(fw_entry) releasing
the firmware image and any related resource. the firmware image and any related resource.
High level behavior (driver code): High level behavior (driver code):

View file

@ -105,6 +105,7 @@ Process Processor TjMax(C)
330/230 125 330/230 125
E680/660/640/620 90 E680/660/640/620 90
E680T/660T/640T/620T 110 E680T/660T/640T/620T 110
CE4170/4150/4110 110
45nm Core2 Processors 45nm Core2 Processors
Solo ULV SU3500/3300 100 Solo ULV SU3500/3300 100

View file

@ -60,8 +60,7 @@ increase the chances of your change being accepted.
* Add the driver to Kconfig and Makefile in alphabetical order. * Add the driver to Kconfig and Makefile in alphabetical order.
* Make sure that all dependencies are listed in Kconfig. For new drivers, it * Make sure that all dependencies are listed in Kconfig.
is most likely prudent to add a dependency on EXPERIMENTAL.
* Avoid forward declarations if you can. Rearrange the code if necessary. * Avoid forward declarations if you can. Rearrange the code if necessary.

View file

@ -116,6 +116,7 @@ On all - write a character to /proc/sysrq-trigger. e.g.:
'w' - Dumps tasks that are in uninterruptable (blocked) state. 'w' - Dumps tasks that are in uninterruptable (blocked) state.
'x' - Used by xmon interface on ppc/powerpc platforms. 'x' - Used by xmon interface on ppc/powerpc platforms.
Show global PMU Registers on sparc64.
'y' - Show global CPU Registers [SPARC-64 specific] 'y' - Show global CPU Registers [SPARC-64 specific]

View file

@ -0,0 +1,39 @@
Chinese translated version of Documentation/IRQ.txt
If you have any comment or update to the content, please contact the
original document maintainer directly. However, if you have a problem
communicating in English you can also ask the Chinese maintainer for
help. Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation.
Maintainer: Eric W. Biederman <ebiederman@xmission.com>
Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
---------------------------------------------------------------------
Documentation/IRQ.txt 的中文翻译
如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
译存在问题,请联系中文版维护者。
英文版维护者: Eric W. Biederman <ebiederman@xmission.com>
中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
以下为正文
---------------------------------------------------------------------
何为 IRQ?
一个 IRQ 是来自某个设备的一个中断请求。目前,它们可以来自一个硬件引脚,
或来自一个数据包。多个设备可能连接到同个硬件引脚,从而共享一个 IRQ。
一个 IRQ 编号是用于告知硬件中断源的内核标识。通常情况下,这是一个
全局 irq_desc 数组的索引,但是除了在 linux/interrupt.h 中的实现,
具体的细节是体系结构特定的。
一个 IRQ 编号是设备上某个可能的中断源的枚举。通常情况下,枚举的编号是
该引脚在系统内中断控制器的所有输入引脚中的编号。对于 ISA 总线中的情况,
枚举的是在两个 i8259 中断控制器中 16 个输入引脚。
架构可以对 IRQ 编号指定额外的含义,在硬件涉及任何手工配置的情况下,
是被提倡的。ISA 的 IRQ 是一个分配这类额外含义的典型例子。

View file

@ -0,0 +1,156 @@
Chinese translated version of Documentation/arm64/booting.txt
If you have any comment or update to the content, please contact the
original document maintainer directly. However, if you have a problem
communicating in English you can also ask the Chinese maintainer for
help. Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation.
Maintainer: Will Deacon <will.deacon@arm.com>
Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
---------------------------------------------------------------------
Documentation/arm64/booting.txt 的中文翻译
如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
译存在问题,请联系中文版维护者。
英文版维护者: Will Deacon <will.deacon@arm.com>
中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
以下为正文
---------------------------------------------------------------------
启动 AArch64 Linux
==================
作者: Will Deacon <will.deacon@arm.com>
日期: 2012 年 09 月 07 日
本文档基于 Russell King 的 ARM 启动文档,且适用于所有公开发布的
AArch64 Linux 内核代码。
AArch64 异常模型由多个异常级别EL0 - EL3组成对于 EL0 和 EL1
异常级有对应的安全和非安全模式。EL2 是系统管理级,且仅存在于
非安全模式下。EL3 是最高特权级,且仅存在于安全模式下。
基于本文档的目的我们将简单地使用引导装载程序boot loader
这个术语来定义在将控制权交给 Linux 内核前 CPU 上执行的所有软件。
这可能包含安全监控和系统管理代码,或者它可能只是一些用于准备最小启动
环境的指令。
基本上,引导装载程序(至少)应实现以下操作:
1、设置和初始化 RAM
2、设置设备树数据
3、解压内核映像
4、调用内核映像
1、设置和初始化 RAM
-----------------
必要性: 强制
引导装载程序应该找到并初始化系统中所有内核用于保持系统变量数据的 RAM。
这个操作的执行是设备依赖的。(它可能使用内部算法来自动定位和计算所有
RAM或可能使用对这个设备已知的 RAM 信息,还可能使用任何引导装载程序
设计者想到的匹配方法。)
2、设置设备树数据
---------------
必要性: 强制
设备树数据块dtb大小必须不大于 2 MB且位于从内核映像起始算起第一个
512MB 内的 2MB 边界上。这使得内核可以通过初始页表中的单个节描述符来
映射此数据块。
3、解压内核映像
-------------
必要性: 可选
AArch64 内核当前没有提供自解压代码,因此如果使用了压缩内核映像文件
(比如 Image.gz则需要通过引导装载程序使用 gzip 等)来进行解压。
若引导装载程序没有实现这个需求,就要使用非压缩内核映像文件。
4、调用内核映像
-------------
必要性: 强制
已解压的内核映像包含一个 32 字节的头,内容如下:
u32 magic = 0x14000008; /* 跳转到 stext, 小端 */
u32 res0 = 0; /* 保留 */
u64 text_offset; /* 映像装载偏移 */
u64 res1 = 0; /* 保留 */
u64 res2 = 0; /* 保留 */
映像必须位于系统 RAM 起始处的特定偏移(当前是 0x80000。系统 RAM
的起始地址必须是以 2MB 对齐的。
在跳转入内核前,必须符合以下状态:
- 停止所有 DMA 设备,这样内存数据就不会因为虚假网络包或磁盘数据而
被破坏。这可能可以节省你许多的调试时间。
- 主 CPU 通用寄存器设置
x0 = 系统 RAM 中设备树数据块dtb的物理地址。
x1 = 0 (保留,将来可能使用)
x2 = 0 (保留,将来可能使用)
x3 = 0 (保留,将来可能使用)
- CPU 模式
所有形式的中断必须在 PSTATE.DAIF 中被屏蔽Debug、SError、IRQ
和 FIQ
CPU 必须处于 EL2推荐可访问虚拟化扩展或非安全 EL1 模式下。
- 高速缓存、MMU
MMU 必须关闭。
指令缓存开启或关闭都可以。
数据缓存必须关闭且无效。
外部高速缓存(如果存在)必须配置并禁用。
- 架构计时器
CNTFRQ 必须设定为计时器的频率。
如果在 EL1 模式下进入内核,则 CNTHCTL_EL2 中的 EL1PCTEN (bit 0)
必须置位。
- 一致性
通过内核启动的所有 CPU 在内核入口地址上必须处于相同的一致性域中。
这可能要根据具体实现来定义初始化过程以使能每个CPU上对维护操作的
接收。
- 系统寄存器
在进入内核映像的异常级中,所有构架中可写的系统寄存器必须通过软件
在一个更高的异常级别下初始化,以防止在 未知 状态下运行。
引导装载程序必须在每个 CPU 处于以下状态时跳入内核入口:
- 主 CPU 必须直接跳入内核映像的第一条指令。通过此 CPU 传递的设备树
数据块必须在每个 CPU 节点中包含以下内容:
1、enable-method属性。目前此字段支持的值仅为字符串“spin-table”。
2、cpu-release-addr标识一个 64-bit、初始化为零的内存位置。
引导装载程序必须生成这些设备树属性,并在跳入内核入口之前将其插入
数据块。
- 任何辅助 CPU 必须在内存保留区(通过设备树中的 /memreserve/ 域传递
给内核)中自旋于内核之外,轮询它们的 cpu-release-addr 位置(必须
包含在保留区中)。可通过插入 wfe 指令来降低忙循环开销,而主 CPU 将
发出 sev 指令。当对 cpu-release-addr 所指位置的读取操作返回非零值
CPU 必须直接跳入此值所指向的地址。
- 辅助 CPU 通用寄存器设置
x0 = 0 (保留,将来可能使用)
x1 = 0 (保留,将来可能使用)
x2 = 0 (保留,将来可能使用)
x3 = 0 (保留,将来可能使用)

View file

@ -0,0 +1,93 @@
Chinese translated version of Documentation/arm64/memory.txt
If you have any comment or update to the content, please contact the
original document maintainer directly. However, if you have a problem
communicating in English you can also ask the Chinese maintainer for
help. Contact the Chinese maintainer if this translation is outdated
or if there is a problem with the translation.
Maintainer: Catalin Marinas <catalin.marinas@arm.com>
Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
---------------------------------------------------------------------
Documentation/arm64/memory.txt 的中文翻译
如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
译存在问题,请联系中文版维护者。
英文版维护者: Catalin Marinas <catalin.marinas@arm.com>
中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
以下为正文
---------------------------------------------------------------------
Linux 在 AArch64 中的内存布局
===========================
作者: Catalin Marinas <catalin.marinas@arm.com>
日期: 2012 年 02 月 20 日
本文档描述 AArch64 Linux 内核所使用的虚拟内存布局。此构架可以实现
页大小为 4KB 的 4 级转换表和页大小为 64KB 的 3 级转换表。
AArch64 Linux 使用页大小为 4KB 的 3 级转换表配置,对于用户和内核
都有 39-bit (512GB) 的虚拟地址空间。对于页大小为 64KB的配置
使用 2 级转换表,但内存布局相同。
用户地址空间的 63:39 位为 0而内核地址空间的相应位为 1。TTBRx 的
选择由虚拟地址的 63 位给出。swapper_pg_dir 仅包含内核(全局)映射,
而用户 pgd 仅包含用户非全局映射。swapper_pgd_dir 地址被写入
TTBR1 中,且从不写入 TTBR0。
AArch64 Linux 内存布局:
起始地址 结束地址 大小 用途
-----------------------------------------------------------------------
0000000000000000 0000007fffffffff 512GB 用户空间
ffffff8000000000 ffffffbbfffcffff ~240GB vmalloc
ffffffbbfffd0000 ffffffbcfffdffff 64KB [防护页]
ffffffbbfffe0000 ffffffbcfffeffff 64KB PCI I/O 空间
ffffffbbffff0000 ffffffbcffffffff 64KB [防护页]
ffffffbc00000000 ffffffbdffffffff 8GB vmemmap
ffffffbe00000000 ffffffbffbffffff ~8GB [防护页,未来用于 vmmemap]
ffffffbffc000000 ffffffbfffffffff 64MB 模块
ffffffc000000000 ffffffffffffffff 256GB 内存空间
4KB 页大小的转换表查找:
+--------+--------+--------+--------+--------+--------+--------+--------+
|63 56|55 48|47 40|39 32|31 24|23 16|15 8|7 0|
+--------+--------+--------+--------+--------+--------+--------+--------+
| | | | | |
| | | | | v
| | | | | [11:0] 页内偏移
| | | | +-> [20:12] L3 索引
| | | +-----------> [29:21] L2 索引
| | +---------------------> [38:30] L1 索引
| +-------------------------------> [47:39] L0 索引 (未使用)
+-------------------------------------------------> [63] TTBR0/1
64KB 页大小的转换表查找:
+--------+--------+--------+--------+--------+--------+--------+--------+
|63 56|55 48|47 40|39 32|31 24|23 16|15 8|7 0|
+--------+--------+--------+--------+--------+--------+--------+--------+
| | | | |
| | | | v
| | | | [15:0] 页内偏移
| | | +----------> [28:16] L3 索引
| | +--------------------------> [41:29] L2 索引 (仅使用 38:29 )
| +-------------------------------> [47:42] L1 索引 (未使用)
+-------------------------------------------------> [63] TTBR0/1

View file

@ -235,6 +235,7 @@ F: drivers/platform/x86/acer-wmi.c
ACPI ACPI
M: Len Brown <lenb@kernel.org> M: Len Brown <lenb@kernel.org>
M: Rafael J. Wysocki <rjw@sisk.pl>
L: linux-acpi@vger.kernel.org L: linux-acpi@vger.kernel.org
W: http://www.lesswatts.org/projects/acpi/ W: http://www.lesswatts.org/projects/acpi/
Q: http://patchwork.kernel.org/project/linux-acpi/list/ Q: http://patchwork.kernel.org/project/linux-acpi/list/
@ -2801,6 +2802,7 @@ F: sound/usb/misc/ua101.c
EXTENSIBLE FIRMWARE INTERFACE (EFI) EXTENSIBLE FIRMWARE INTERFACE (EFI)
M: Matt Fleming <matt.fleming@intel.com> M: Matt Fleming <matt.fleming@intel.com>
L: linux-efi@vger.kernel.org L: linux-efi@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi.git
S: Maintained S: Maintained
F: Documentation/x86/efi-stub.txt F: Documentation/x86/efi-stub.txt
F: arch/ia64/kernel/efi.c F: arch/ia64/kernel/efi.c
@ -4372,7 +4374,7 @@ F: Documentation/scsi/53c700.txt
F: drivers/scsi/53c700* F: drivers/scsi/53c700*
LED SUBSYSTEM LED SUBSYSTEM
M: Bryan Wu <bryan.wu@canonical.com> M: Bryan Wu <cooloney@gmail.com>
M: Richard Purdie <rpurdie@rpsys.net> M: Richard Purdie <rpurdie@rpsys.net>
L: linux-leds@vger.kernel.org L: linux-leds@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds.git
@ -5019,6 +5021,20 @@ F: net/ipv6/
F: include/net/ip* F: include/net/ip*
F: arch/x86/net/* F: arch/x86/net/*
NETWORKING [IPSEC]
M: Steffen Klassert <steffen.klassert@secunet.com>
M: Herbert Xu <herbert@gondor.apana.org.au>
M: "David S. Miller" <davem@davemloft.net>
L: netdev@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
S: Maintained
F: net/xfrm/
F: net/key/
F: net/ipv4/xfrm*
F: net/ipv6/xfrm*
F: include/uapi/linux/xfrm.h
F: include/net/xfrm.h
NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK) NETWORKING [LABELED] (NetLabel, CIPSO, Labeled IPsec, SECMARK)
M: Paul Moore <paul@paul-moore.com> M: Paul Moore <paul@paul-moore.com>
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
@ -7731,6 +7747,13 @@ W: http://www.ideasonboard.org/uvc/
S: Maintained S: Maintained
F: drivers/media/usb/uvc/ F: drivers/media/usb/uvc/
USB WEBCAM GADGET
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
L: linux-usb@vger.kernel.org
S: Maintained
F: drivers/usb/gadget/*uvc*.c
F: drivers/usb/gadget/webcam.c
USB WIRELESS RNDIS DRIVER (rndis_wlan) USB WIRELESS RNDIS DRIVER (rndis_wlan)
M: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> M: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org

View file

@ -1,7 +1,7 @@
VERSION = 3 VERSION = 3
PATCHLEVEL = 7 PATCHLEVEL = 7
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -rc1 EXTRAVERSION = -rc2
NAME = Terrified Chipmunk NAME = Terrified Chipmunk
# *DOCUMENTATION* # *DOCUMENTATION*
@ -437,7 +437,9 @@ endif
PHONY += asm-generic PHONY += asm-generic
asm-generic: asm-generic:
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \ $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
obj=arch/$(SRCARCH)/include/generated/asm src=asm obj=arch/$(SRCARCH)/include/generated/asm
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
src=uapi/asm obj=arch/$(SRCARCH)/include/generated/uapi/asm
# To make sure we do not include .config for any of the *config targets # To make sure we do not include .config for any of the *config targets
# catch them early, and hand them over to scripts/kconfig/Makefile # catch them early, and hand them over to scripts/kconfig/Makefile
@ -717,6 +719,17 @@ endif # INSTALL_MOD_STRIP
export mod_strip_cmd export mod_strip_cmd
ifeq ($(CONFIG_MODULE_SIG),y)
MODSECKEY = ./signing_key.priv
MODPUBKEY = ./signing_key.x509
export MODPUBKEY
mod_sign_cmd = perl $(srctree)/scripts/sign-file $(MODSECKEY) $(MODPUBKEY)
else
mod_sign_cmd = true
endif
export mod_sign_cmd
ifeq ($(KBUILD_EXTMOD),) ifeq ($(KBUILD_EXTMOD),)
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

View file

@ -7,6 +7,7 @@
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/types.h> #include <asm/types.h>
#include <asm/hwrpb.h> #include <asm/hwrpb.h>
#include <asm/sysinfo.h>
#endif #endif
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
@ -21,6 +22,7 @@ struct thread_info {
mm_segment_t addr_limit; /* thread address space */ mm_segment_t addr_limit; /* thread address space */
unsigned cpu; /* current CPU */ unsigned cpu; /* current CPU */
int preempt_count; /* 0 => preemptable, <0 => BUG */ int preempt_count; /* 0 => preemptable, <0 => BUG */
unsigned int status; /* thread-synchronous flags */
int bpt_nsaved; int bpt_nsaved;
unsigned long bpt_addr[2]; /* breakpoint handling */ unsigned long bpt_addr[2]; /* breakpoint handling */
@ -63,8 +65,6 @@ register struct thread_info *__current_thread_info __asm__("$8");
* - these are process state flags and used from assembly * - these are process state flags and used from assembly
* - pending work-to-be-done flags come first and must be assigned to be * - pending work-to-be-done flags come first and must be assigned to be
* within bits 0 to 7 to fit in and immediate operand. * within bits 0 to 7 to fit in and immediate operand.
* - ALPHA_UAC_SHIFT below must be kept consistent with the unaligned
* control flags.
* *
* TIF_SYSCALL_TRACE is known to be 0 via blbs. * TIF_SYSCALL_TRACE is known to be 0 via blbs.
*/ */
@ -72,18 +72,12 @@ register struct thread_info *__current_thread_info __asm__("$8");
#define TIF_NOTIFY_RESUME 1 /* callback before returning to user */ #define TIF_NOTIFY_RESUME 1 /* callback before returning to user */
#define TIF_SIGPENDING 2 /* signal pending */ #define TIF_SIGPENDING 2 /* signal pending */
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ #define TIF_NEED_RESCHED 3 /* rescheduling necessary */
#define TIF_POLLING_NRFLAG 8 /* poll_idle is polling NEED_RESCHED */
#define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */ #define TIF_DIE_IF_KERNEL 9 /* dik recursion lock */
#define TIF_UAC_NOPRINT 10 /* ! Preserve sequence of following */
#define TIF_UAC_NOFIX 11 /* ! flags as they match */
#define TIF_UAC_SIGBUS 12 /* ! userspace part of 'osf_sysinfo' */
#define TIF_MEMDIE 13 /* is terminating due to OOM killer */ #define TIF_MEMDIE 13 /* is terminating due to OOM killer */
#define TIF_RESTORE_SIGMASK 14 /* restore signal mask in do_signal */
#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
#define _TIF_SIGPENDING (1<<TIF_SIGPENDING) #define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
/* Work to do on interrupt/exception return. */ /* Work to do on interrupt/exception return. */
@ -94,29 +88,63 @@ register struct thread_info *__current_thread_info __asm__("$8");
#define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \ #define _TIF_ALLWORK_MASK (_TIF_WORK_MASK \
| _TIF_SYSCALL_TRACE) | _TIF_SYSCALL_TRACE)
#define ALPHA_UAC_SHIFT TIF_UAC_NOPRINT #define TS_UAC_NOPRINT 0x0001 /* ! Preserve the following three */
#define ALPHA_UAC_MASK (1 << TIF_UAC_NOPRINT | 1 << TIF_UAC_NOFIX | \ #define TS_UAC_NOFIX 0x0002 /* ! flags as they match */
1 << TIF_UAC_SIGBUS) #define TS_UAC_SIGBUS 0x0004 /* ! userspace part of 'osf_sysinfo' */
#define TS_RESTORE_SIGMASK 0x0008 /* restore signal mask in do_signal() */
#define TS_POLLING 0x0010 /* idle task polling need_resched,
skip sending interrupt */
#define SET_UNALIGN_CTL(task,value) ({ \ #define tsk_is_polling(t) (task_thread_info(t)->status & TS_POLLING)
task_thread_info(task)->flags = ((task_thread_info(task)->flags & \
~ALPHA_UAC_MASK) \ #ifndef __ASSEMBLY__
| (((value) << ALPHA_UAC_SHIFT) & (1<<TIF_UAC_NOPRINT))\ #define HAVE_SET_RESTORE_SIGMASK 1
| (((value) << (ALPHA_UAC_SHIFT + 1)) & (1<<TIF_UAC_SIGBUS)) \ static inline void set_restore_sigmask(void)
| (((value) << (ALPHA_UAC_SHIFT - 1)) & (1<<TIF_UAC_NOFIX)));\ {
struct thread_info *ti = current_thread_info();
ti->status |= TS_RESTORE_SIGMASK;
WARN_ON(!test_bit(TIF_SIGPENDING, (unsigned long *)&ti->flags));
}
static inline void clear_restore_sigmask(void)
{
current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
}
static inline bool test_restore_sigmask(void)
{
return current_thread_info()->status & TS_RESTORE_SIGMASK;
}
static inline bool test_and_clear_restore_sigmask(void)
{
struct thread_info *ti = current_thread_info();
if (!(ti->status & TS_RESTORE_SIGMASK))
return false;
ti->status &= ~TS_RESTORE_SIGMASK;
return true;
}
#endif
#define SET_UNALIGN_CTL(task,value) ({ \
__u32 status = task_thread_info(task)->status & ~UAC_BITMASK; \
if (value & PR_UNALIGN_NOPRINT) \
status |= TS_UAC_NOPRINT; \
if (value & PR_UNALIGN_SIGBUS) \
status |= TS_UAC_SIGBUS; \
if (value & 4) /* alpha-specific */ \
status |= TS_UAC_NOFIX; \
task_thread_info(task)->status = status; \
0; }) 0; })
#define GET_UNALIGN_CTL(task,value) ({ \ #define GET_UNALIGN_CTL(task,value) ({ \
put_user((task_thread_info(task)->flags & (1 << TIF_UAC_NOPRINT))\ __u32 status = task_thread_info(task)->status & ~UAC_BITMASK; \
>> ALPHA_UAC_SHIFT \ __u32 res = 0; \
| (task_thread_info(task)->flags & (1 << TIF_UAC_SIGBUS))\ if (status & TS_UAC_NOPRINT) \
>> (ALPHA_UAC_SHIFT + 1) \ res |= PR_UNALIGN_NOPRINT; \
| (task_thread_info(task)->flags & (1 << TIF_UAC_NOFIX))\ if (status & TS_UAC_SIGBUS) \
>> (ALPHA_UAC_SHIFT - 1), \ res |= PR_UNALIGN_SIGBUS; \
(int __user *)(value)); \ if (status & TS_UAC_NOFIX) \
res |= 4; \
put_user(res, (int __user *)(value)); \
}) })
#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG)
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* _ALPHA_THREAD_INFO_H */ #endif /* _ALPHA_THREAD_INFO_H */

View file

@ -793,8 +793,7 @@ SYSCALL_DEFINE5(osf_getsysinfo, unsigned long, op, void __user *, buffer,
case GSI_UACPROC: case GSI_UACPROC:
if (nbytes < sizeof(unsigned int)) if (nbytes < sizeof(unsigned int))
return -EINVAL; return -EINVAL;
w = (current_thread_info()->flags >> ALPHA_UAC_SHIFT) & w = current_thread_info()->status & UAC_BITMASK;
UAC_BITMASK;
if (put_user(w, (unsigned int __user *)buffer)) if (put_user(w, (unsigned int __user *)buffer))
return -EFAULT; return -EFAULT;
return 1; return 1;
@ -904,24 +903,20 @@ SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
break; break;
case SSI_NVPAIRS: { case SSI_NVPAIRS: {
unsigned long v, w, i; unsigned __user *p = buffer;
unsigned int old, new; unsigned i;
for (i = 0; i < nbytes; ++i) { for (i = 0, p = buffer; i < nbytes; ++i, p += 2) {
unsigned v, w, status;
if (get_user(v, 2*i + (unsigned int __user *)buffer)) if (get_user(v, p) || get_user(w, p + 1))
return -EFAULT;
if (get_user(w, 2*i + 1 + (unsigned int __user *)buffer))
return -EFAULT; return -EFAULT;
switch (v) { switch (v) {
case SSIN_UACPROC: case SSIN_UACPROC:
again: w &= UAC_BITMASK;
old = current_thread_info()->flags; status = current_thread_info()->status;
new = old & ~(UAC_BITMASK << ALPHA_UAC_SHIFT); status = (status & ~UAC_BITMASK) | w;
new = new | (w & UAC_BITMASK) << ALPHA_UAC_SHIFT; current_thread_info()->status = status;
if (cmpxchg(&current_thread_info()->flags,
old, new) != old)
goto again;
break; break;
default: default:

View file

@ -49,7 +49,7 @@ EXPORT_SYMBOL(pm_power_off);
void void
cpu_idle(void) cpu_idle(void)
{ {
set_thread_flag(TIF_POLLING_NRFLAG); current_thread_info()->status |= TS_POLLING;
while (1) { while (1) {
/* FIXME -- EV6 and LCA45 know how to power down /* FIXME -- EV6 and LCA45 know how to power down

View file

@ -780,17 +780,17 @@ do_entUnaUser(void __user * va, unsigned long opcode,
/* Check the UAC bits to decide what the user wants us to do /* Check the UAC bits to decide what the user wants us to do
with the unaliged access. */ with the unaliged access. */
if (!test_thread_flag (TIF_UAC_NOPRINT)) { if (!(current_thread_info()->status & TS_UAC_NOPRINT)) {
if (__ratelimit(&ratelimit)) { if (__ratelimit(&ratelimit)) {
printk("%s(%d): unaligned trap at %016lx: %p %lx %ld\n", printk("%s(%d): unaligned trap at %016lx: %p %lx %ld\n",
current->comm, task_pid_nr(current), current->comm, task_pid_nr(current),
regs->pc - 4, va, opcode, reg); regs->pc - 4, va, opcode, reg);
} }
} }
if (test_thread_flag (TIF_UAC_SIGBUS)) if ((current_thread_info()->status & TS_UAC_SIGBUS))
goto give_sigbus; goto give_sigbus;
/* Not sure why you'd want to use this, but... */ /* Not sure why you'd want to use this, but... */
if (test_thread_flag (TIF_UAC_NOFIX)) if ((current_thread_info()->status & TS_UAC_NOFIX))
return; return;
/* Don't bother reading ds in the access check since we already /* Don't bother reading ds in the access check since we already

View file

@ -1603,8 +1603,8 @@ config NR_CPUS
default "4" default "4"
config HOTPLUG_CPU config HOTPLUG_CPU
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)" bool "Support for hot-pluggable CPUs"
depends on SMP && HOTPLUG && EXPERIMENTAL depends on SMP && HOTPLUG
help help
Say Y here to experiment with turning CPUs off and on. CPUs Say Y here to experiment with turning CPUs off and on. CPUs
can be controlled through /sys/devices/system/cpu. can be controlled through /sys/devices/system/cpu.
@ -1645,8 +1645,8 @@ config HZ
default 100 default 100
config THUMB2_KERNEL config THUMB2_KERNEL
bool "Compile the kernel in Thumb-2 mode (EXPERIMENTAL)" bool "Compile the kernel in Thumb-2 mode"
depends on CPU_V7 && !CPU_V6 && !CPU_V6K && EXPERIMENTAL depends on CPU_V7 && !CPU_V6 && !CPU_V6K
select AEABI select AEABI
select ARM_ASM_UNIFIED select ARM_ASM_UNIFIED
select ARM_UNWIND select ARM_UNWIND
@ -1850,6 +1850,7 @@ config XEN_DOM0
config XEN config XEN
bool "Xen guest support on ARM (EXPERIMENTAL)" bool "Xen guest support on ARM (EXPERIMENTAL)"
depends on EXPERIMENTAL && ARM && OF depends on EXPERIMENTAL && ARM && OF
depends on CPU_V7 && !CPU_V6
help help
Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.

View file

@ -21,8 +21,6 @@ endif
OBJCOPYFLAGS :=-O binary -R .comment -S OBJCOPYFLAGS :=-O binary -R .comment -S
GZFLAGS :=-9 GZFLAGS :=-9
#KBUILD_CFLAGS +=-pipe #KBUILD_CFLAGS +=-pipe
# Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
KBUILD_CFLAGS +=$(call cc-option,-marm,)
# Never generate .eh_frame # Never generate .eh_frame
KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm) KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
@ -105,17 +103,20 @@ endif
ifeq ($(CONFIG_THUMB2_KERNEL),y) ifeq ($(CONFIG_THUMB2_KERNEL),y)
AFLAGS_AUTOIT :=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it) AFLAGS_AUTOIT :=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it)
AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W) AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
CFLAGS_THUMB2 :=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN) CFLAGS_ISA :=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)
AFLAGS_THUMB2 :=$(CFLAGS_THUMB2) -Wa$(comma)-mthumb AFLAGS_ISA :=$(CFLAGS_ISA) -Wa$(comma)-mthumb
# Work around buggy relocation from gas if requested: # Work around buggy relocation from gas if requested:
ifeq ($(CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11),y) ifeq ($(CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11),y)
CFLAGS_MODULE +=-fno-optimize-sibling-calls CFLAGS_MODULE +=-fno-optimize-sibling-calls
endif endif
else
CFLAGS_ISA :=$(call cc-option,-marm,)
AFLAGS_ISA :=$(CFLAGS_ISA)
endif endif
# Need -Uarm for gcc < 3.x # Need -Uarm for gcc < 3.x
KBUILD_CFLAGS +=$(CFLAGS_ABI) $(CFLAGS_THUMB2) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm KBUILD_CFLAGS +=$(CFLAGS_ABI) $(CFLAGS_ISA) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_THUMB2) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float KBUILD_AFLAGS +=$(CFLAGS_ABI) $(AFLAGS_ISA) $(arch-y) $(tune-y) -include asm/unified.h -msoft-float
CHECKFLAGS += -D__arm__ CHECKFLAGS += -D__arm__

View file

@ -33,7 +33,7 @@ ifeq ($(CONFIG_XIP_KERNEL),y)
$(obj)/xipImage: vmlinux FORCE $(obj)/xipImage: vmlinux FORCE
$(call if_changed,objcopy) $(call if_changed,objcopy)
@echo ' Kernel: $@ is ready (physical address: $(CONFIG_XIP_PHYS_ADDR))' $(kecho) ' Kernel: $@ is ready (physical address: $(CONFIG_XIP_PHYS_ADDR))'
$(obj)/Image $(obj)/zImage: FORCE $(obj)/Image $(obj)/zImage: FORCE
@echo 'Kernel configured for XIP (CONFIG_XIP_KERNEL=y)' @echo 'Kernel configured for XIP (CONFIG_XIP_KERNEL=y)'
@ -48,14 +48,14 @@ $(obj)/xipImage: FORCE
$(obj)/Image: vmlinux FORCE $(obj)/Image: vmlinux FORCE
$(call if_changed,objcopy) $(call if_changed,objcopy)
@echo ' Kernel: $@ is ready' $(kecho) ' Kernel: $@ is ready'
$(obj)/compressed/vmlinux: $(obj)/Image FORCE $(obj)/compressed/vmlinux: $(obj)/Image FORCE
$(Q)$(MAKE) $(build)=$(obj)/compressed $@ $(Q)$(MAKE) $(build)=$(obj)/compressed $@
$(obj)/zImage: $(obj)/compressed/vmlinux FORCE $(obj)/zImage: $(obj)/compressed/vmlinux FORCE
$(call if_changed,objcopy) $(call if_changed,objcopy)
@echo ' Kernel: $@ is ready' $(kecho) ' Kernel: $@ is ready'
endif endif
@ -90,7 +90,7 @@ fi
$(obj)/uImage: $(obj)/zImage FORCE $(obj)/uImage: $(obj)/zImage FORCE
@$(check_for_multiple_loadaddr) @$(check_for_multiple_loadaddr)
$(call if_changed,uimage) $(call if_changed,uimage)
@echo ' Image $@ is ready' $(kecho) ' Image $@ is ready'
$(obj)/bootp/bootp: $(obj)/zImage initrd FORCE $(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
$(Q)$(MAKE) $(build)=$(obj)/bootp $@ $(Q)$(MAKE) $(build)=$(obj)/bootp $@
@ -98,7 +98,7 @@ $(obj)/bootp/bootp: $(obj)/zImage initrd FORCE
$(obj)/bootpImage: $(obj)/bootp/bootp FORCE $(obj)/bootpImage: $(obj)/bootp/bootp FORCE
$(call if_changed,objcopy) $(call if_changed,objcopy)
@echo ' Kernel: $@ is ready' $(kecho) ' Kernel: $@ is ready'
PHONY += initrd FORCE PHONY += initrd FORCE
initrd: initrd:

View file

@ -25,6 +25,8 @@ dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \
exynos4210-trats.dtb \ exynos4210-trats.dtb \
exynos5250-smdk5250.dtb exynos5250-smdk5250.dtb
dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb
dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \
integratorcp.dtb
dtb-$(CONFIG_ARCH_LPC32XX) += ea3250.dtb phy3250.dtb dtb-$(CONFIG_ARCH_LPC32XX) += ea3250.dtb phy3250.dtb
dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-dns320.dtb \ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-dns320.dtb \
kirkwood-dns325.dtb \ kirkwood-dns325.dtb \

View file

@ -4,21 +4,32 @@
compatible = "marvell,dove"; compatible = "marvell,dove";
model = "Marvell Armada 88AP510 SoC"; model = "Marvell Armada 88AP510 SoC";
interrupt-parent = <&intc>; soc@f1000000 {
intc: interrupt-controller {
compatible = "marvell,orion-intc";
interrupt-controller;
#interrupt-cells = <1>;
reg = <0xf1020204 0x04>,
<0xf1020214 0x04>;
};
mbus@f1000000 {
compatible = "simple-bus"; compatible = "simple-bus";
ranges = <0 0xf1000000 0x4000000>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
interrupt-parent = <&intc>;
ranges = <0xc8000000 0xc8000000 0x0100000 /* CESA SRAM 1M */
0xe0000000 0xe0000000 0x8000000 /* PCIe0 Mem 128M */
0xe8000000 0xe8000000 0x8000000 /* PCIe1 Mem 128M */
0xf0000000 0xf0000000 0x0100000 /* ScratchPad 1M */
0x00000000 0xf1000000 0x1000000 /* SB/NB regs 16M */
0xf2000000 0xf2000000 0x0100000 /* PCIe0 I/O 1M */
0xf2100000 0xf2100000 0x0100000 /* PCIe0 I/O 1M */
0xf8000000 0xf8000000 0x8000000>; /* BootROM 128M */
l2: l2-cache {
compatible = "marvell,tauros2-cache";
marvell,tauros2-cache-features = <0>;
};
intc: interrupt-controller {
compatible = "marvell,orion-intc";
interrupt-controller;
#interrupt-cells = <1>;
reg = <0x20204 0x04>, <0x20214 0x04>;
};
uart0: serial@12000 { uart0: serial@12000 {
compatible = "ns16550a"; compatible = "ns16550a";
@ -56,11 +67,6 @@
status = "disabled"; status = "disabled";
}; };
wdt: wdt@20300 {
compatible = "marvell,orion-wdt";
reg = <0x20300 0x28>;
};
gpio0: gpio@d0400 { gpio0: gpio@d0400 {
compatible = "marvell,orion-gpio"; compatible = "marvell,orion-gpio";
#gpio-cells = <2>; #gpio-cells = <2>;
@ -139,5 +145,14 @@
nr-ports = <1>; nr-ports = <1>;
status = "disabled"; status = "disabled";
}; };
crypto: crypto@30000 {
compatible = "marvell,orion-crypto";
reg = <0x30000 0x10000>,
<0xc8000000 0x800>;
reg-names = "regs", "sram";
interrupts = <31>;
status = "okay";
};
}; };
}; };

View file

@ -37,6 +37,13 @@
pinctrl_hog: hoggrp { pinctrl_hog: hoggrp {
fsl,pins = < fsl,pins = <
176 0x80000000 /* MX6Q_PAD_EIM_D25__GPIO_3_25 */ 176 0x80000000 /* MX6Q_PAD_EIM_D25__GPIO_3_25 */
>;
};
};
arm2 {
pinctrl_usdhc3_arm2: usdhc3grp-arm2 {
fsl,pins = <
1363 0x80000000 /* MX6Q_PAD_NANDF_CS0__GPIO_6_11 */ 1363 0x80000000 /* MX6Q_PAD_NANDF_CS0__GPIO_6_11 */
1369 0x80000000 /* MX6Q_PAD_NANDF_CS1__GPIO_6_14 */ 1369 0x80000000 /* MX6Q_PAD_NANDF_CS1__GPIO_6_14 */
>; >;
@ -58,7 +65,8 @@
wp-gpios = <&gpio6 14 0>; wp-gpios = <&gpio6 14 0>;
vmmc-supply = <&reg_3p3v>; vmmc-supply = <&reg_3p3v>;
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&pinctrl_usdhc3_1>; pinctrl-0 = <&pinctrl_usdhc3_1
&pinctrl_usdhc3_arm2>;
status = "okay"; status = "okay";
}; };

View file

@ -48,17 +48,19 @@
#size-cells = <0>; #size-cells = <0>;
button@1 { button@1 {
label = "Function Button"; label = "Function Button";
linux,code = <132>; linux,code = <357>;
gpios = <&gpio1 9 1>; gpios = <&gpio1 9 1>;
}; };
button@2 { button@2 {
label = "Power-on Switch"; label = "Power-on Switch";
linux,code = <116>; linux,code = <0>;
linux,input-type = <5>;
gpios = <&gpio1 10 1>; gpios = <&gpio1 10 1>;
}; };
button@3 { button@3 {
label = "Power-auto Switch"; label = "Power-auto Switch";
linux,code = <142>; linux,code = <1>;
linux,input-type = <5>;
gpios = <&gpio1 11 1>; gpios = <&gpio1 11 1>;
}; };
}; };
@ -67,28 +69,28 @@
compatible = "gpio-leds"; compatible = "gpio-leds";
led@1 { led@1 {
label = "lschlv2:blue:func"; label = "lsxl:blue:func";
gpios = <&gpio1 4 1>; gpios = <&gpio1 4 1>;
}; };
led@2 { led@2 {
label = "lschlv2:red:alarm"; label = "lsxl:red:alarm";
gpios = <&gpio1 5 1>; gpios = <&gpio1 5 1>;
}; };
led@3 { led@3 {
label = "lschlv2:amber:info"; label = "lsxl:amber:info";
gpios = <&gpio1 6 1>; gpios = <&gpio1 6 1>;
}; };
led@4 { led@4 {
label = "lschlv2:blue:power"; label = "lsxl:blue:power";
gpios = <&gpio1 7 1>; gpios = <&gpio1 7 1>;
linux,default-trigger = "default-on"; linux,default-trigger = "default-on";
}; };
led@5 { led@5 {
label = "lschlv2:red:func"; label = "lsxl:red:func";
gpios = <&gpio1 16 1>; gpios = <&gpio1 16 1>;
}; };
}; };

View file

@ -71,13 +71,13 @@
ehci@d8007100 { ehci@d8007100 {
compatible = "via,vt8500-ehci"; compatible = "via,vt8500-ehci";
reg = <0xd8007100 0x200>; reg = <0xd8007100 0x200>;
interrupts = <43>; interrupts = <1>;
}; };
uhci@d8007300 { uhci@d8007300 {
compatible = "platform-uhci"; compatible = "platform-uhci";
reg = <0xd8007300 0x200>; reg = <0xd8007300 0x200>;
interrupts = <43>; interrupts = <0>;
}; };
fb@d8050800 { fb@d8050800 {

View file

@ -8,7 +8,7 @@
#define flat_argvp_envp_on_stack() 1 #define flat_argvp_envp_on_stack() 1
#define flat_old_ram_flag(flags) (flags) #define flat_old_ram_flag(flags) (flags)
#define flat_reloc_valid(reloc, size) ((reloc) <= (size)) #define flat_reloc_valid(reloc, size) ((reloc) <= (size))
#define flat_get_addr_from_rp(rp, relval, flags, persistent) get_unaligned(rp) #define flat_get_addr_from_rp(rp, relval, flags, persistent) ((void)persistent,get_unaligned(rp))
#define flat_put_addr_at_rp(rp, val, relval) put_unaligned(val,rp) #define flat_put_addr_at_rp(rp, val, relval) put_unaligned(val,rp)
#define flat_get_relocate_addr(rel) (rel) #define flat_get_relocate_addr(rel) (rel)
#define flat_set_persistent(relval, p) 0 #define flat_set_persistent(relval, p) 0

View file

@ -200,8 +200,8 @@ extern int __put_user_8(void *, unsigned long long);
#define USER_DS KERNEL_DS #define USER_DS KERNEL_DS
#define segment_eq(a,b) (1) #define segment_eq(a,b) (1)
#define __addr_ok(addr) (1) #define __addr_ok(addr) ((void)(addr),1)
#define __range_ok(addr,size) (0) #define __range_ok(addr,size) ((void)(addr),0)
#define get_fs() (KERNEL_DS) #define get_fs() (KERNEL_DS)
static inline void set_fs(mm_segment_t fs) static inline void set_fs(mm_segment_t fs)

View file

@ -29,16 +29,22 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
/* Explicitly size integers that represent pfns in the interface with /* Explicitly size integers that represent pfns in the interface with
* Xen so that we can have one ABI that works for 32 and 64 bit guests. */ * Xen so that we can have one ABI that works for 32 and 64 bit guests.
* Note that this means that the xen_pfn_t type may be capable of
* representing pfn's which the guest cannot represent in its own pfn
* type. However since pfn space is controlled by the guest this is
* fine since it simply wouldn't be able to create any sure pfns in
* the first place.
*/
typedef uint64_t xen_pfn_t; typedef uint64_t xen_pfn_t;
#define PRI_xen_pfn "llx"
typedef uint64_t xen_ulong_t; typedef uint64_t xen_ulong_t;
#define PRI_xen_ulong "llx"
/* Guest handles for primitive C types. */ /* Guest handles for primitive C types. */
__DEFINE_GUEST_HANDLE(uchar, unsigned char); __DEFINE_GUEST_HANDLE(uchar, unsigned char);
__DEFINE_GUEST_HANDLE(uint, unsigned int); __DEFINE_GUEST_HANDLE(uint, unsigned int);
__DEFINE_GUEST_HANDLE(ulong, unsigned long);
DEFINE_GUEST_HANDLE(char); DEFINE_GUEST_HANDLE(char);
DEFINE_GUEST_HANDLE(int); DEFINE_GUEST_HANDLE(int);
DEFINE_GUEST_HANDLE(long);
DEFINE_GUEST_HANDLE(void); DEFINE_GUEST_HANDLE(void);
DEFINE_GUEST_HANDLE(uint64_t); DEFINE_GUEST_HANDLE(uint64_t);
DEFINE_GUEST_HANDLE(uint32_t); DEFINE_GUEST_HANDLE(uint32_t);

View file

@ -10,7 +10,7 @@
#include <xen/interface/grant_table.h> #include <xen/interface/grant_table.h>
#define pfn_to_mfn(pfn) (pfn) #define pfn_to_mfn(pfn) (pfn)
#define phys_to_machine_mapping_valid (1) #define phys_to_machine_mapping_valid(pfn) (1)
#define mfn_to_pfn(mfn) (mfn) #define mfn_to_pfn(mfn) (mfn)
#define mfn_to_virt(m) (__va(mfn_to_pfn(m) << PAGE_SHIFT)) #define mfn_to_virt(m) (__va(mfn_to_pfn(m) << PAGE_SHIFT))
@ -30,6 +30,8 @@ typedef struct xpaddr {
#define XMADDR(x) ((xmaddr_t) { .maddr = (x) }) #define XMADDR(x) ((xmaddr_t) { .maddr = (x) })
#define XPADDR(x) ((xpaddr_t) { .paddr = (x) }) #define XPADDR(x) ((xpaddr_t) { .paddr = (x) })
#define INVALID_P2M_ENTRY (~0UL)
static inline xmaddr_t phys_to_machine(xpaddr_t phys) static inline xmaddr_t phys_to_machine(xpaddr_t phys)
{ {
unsigned offset = phys.paddr & ~PAGE_MASK; unsigned offset = phys.paddr & ~PAGE_MASK;
@ -74,9 +76,14 @@ static inline int m2p_remove_override(struct page *page, bool clear_pte)
return 0; return 0;
} }
static inline bool __set_phys_to_machine(unsigned long pfn, unsigned long mfn)
{
BUG_ON(pfn != mfn && mfn != INVALID_P2M_ENTRY);
return true;
}
static inline bool set_phys_to_machine(unsigned long pfn, unsigned long mfn) static inline bool set_phys_to_machine(unsigned long pfn, unsigned long mfn)
{ {
BUG(); return __set_phys_to_machine(pfn, mfn);
return false;
} }
#endif /* _ASM_ARM_XEN_PAGE_H */ #endif /* _ASM_ARM_XEN_PAGE_H */

View file

@ -88,9 +88,9 @@ ENTRY(ret_from_fork)
bl schedule_tail bl schedule_tail
cmp r5, #0 cmp r5, #0
movne r0, r4 movne r0, r4
movne lr, pc adrne lr, BSYM(1f)
movne pc, r5 movne pc, r5
get_thread_info tsk 1: get_thread_info tsk
b ret_slow_syscall b ret_slow_syscall
ENDPROC(ret_from_fork) ENDPROC(ret_from_fork)

View file

@ -34,6 +34,7 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/kallsyms.h> #include <linux/kallsyms.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/export.h>
#include <asm/exception.h> #include <asm/exception.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
@ -109,6 +110,7 @@ void set_irq_flags(unsigned int irq, unsigned int iflags)
/* Order is clear bits in "clr" then set bits in "set" */ /* Order is clear bits in "clr" then set bits in "set" */
irq_modify_status(irq, clr, set & ~clr); irq_modify_status(irq, clr, set & ~clr);
} }
EXPORT_SYMBOL_GPL(set_irq_flags);
void __init init_IRQ(void) void __init init_IRQ(void)
{ {

View file

@ -366,7 +366,9 @@ void kprobe_arm_test_cases(void)
TEST_UNSUPPORTED(".word 0xe04f0392 @ umaal r0, pc, r2, r3") TEST_UNSUPPORTED(".word 0xe04f0392 @ umaal r0, pc, r2, r3")
TEST_UNSUPPORTED(".word 0xe0500090 @ undef") TEST_UNSUPPORTED(".word 0xe0500090 @ undef")
TEST_UNSUPPORTED(".word 0xe05fff9f @ undef") TEST_UNSUPPORTED(".word 0xe05fff9f @ undef")
#endif
#if __LINUX_ARM_ARCH__ >= 7
TEST_RRR( "mls r0, r",1, VAL1,", r",2, VAL2,", r",3, VAL3,"") TEST_RRR( "mls r0, r",1, VAL1,", r",2, VAL2,", r",3, VAL3,"")
TEST_RRR( "mlshi r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"") TEST_RRR( "mlshi r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
TEST_RR( "mls lr, r",1, VAL2,", r",2, VAL3,", r13") TEST_RR( "mls lr, r",1, VAL2,", r",2, VAL3,", r13")
@ -456,6 +458,8 @@ void kprobe_arm_test_cases(void)
TEST_UNSUPPORTED(".word 0xe1700090") /* Unallocated space */ TEST_UNSUPPORTED(".word 0xe1700090") /* Unallocated space */
#if __LINUX_ARM_ARCH__ >= 6 #if __LINUX_ARM_ARCH__ >= 6
TEST_UNSUPPORTED("ldrex r2, [sp]") TEST_UNSUPPORTED("ldrex r2, [sp]")
#endif
#if (__LINUX_ARM_ARCH__ >= 7) || defined(CONFIG_CPU_32v6K)
TEST_UNSUPPORTED("strexd r0, r2, r3, [sp]") TEST_UNSUPPORTED("strexd r0, r2, r3, [sp]")
TEST_UNSUPPORTED("ldrexd r2, r3, [sp]") TEST_UNSUPPORTED("ldrexd r2, r3, [sp]")
TEST_UNSUPPORTED("strexb r0, r2, [sp]") TEST_UNSUPPORTED("strexb r0, r2, [sp]")

View file

@ -45,10 +45,9 @@ int machine_kexec_prepare(struct kimage *image)
for (i = 0; i < image->nr_segments; i++) { for (i = 0; i < image->nr_segments; i++) {
current_segment = &image->segment[i]; current_segment = &image->segment[i];
err = memblock_is_region_memory(current_segment->mem, if (!memblock_is_region_memory(current_segment->mem,
current_segment->memsz); current_segment->memsz))
if (err) return -EINVAL;
return - EINVAL;
err = get_user(header, (__be32*)current_segment->buf); err = get_user(header, (__be32*)current_segment->buf);
if (err) if (err)

View file

@ -96,6 +96,10 @@ armpmu_event_set_period(struct perf_event *event,
s64 period = hwc->sample_period; s64 period = hwc->sample_period;
int ret = 0; int ret = 0;
/* The period may have been changed by PERF_EVENT_IOC_PERIOD */
if (unlikely(period != hwc->last_period))
left = period - (hwc->last_period - left);
if (unlikely(left <= -period)) { if (unlikely(left <= -period)) {
left = period; left = period;
local64_set(&hwc->period_left, left); local64_set(&hwc->period_left, left);

View file

@ -294,18 +294,24 @@ static void percpu_timer_setup(void);
asmlinkage void __cpuinit secondary_start_kernel(void) asmlinkage void __cpuinit secondary_start_kernel(void)
{ {
struct mm_struct *mm = &init_mm; struct mm_struct *mm = &init_mm;
unsigned int cpu = smp_processor_id(); unsigned int cpu;
/*
* The identity mapping is uncached (strongly ordered), so
* switch away from it before attempting any exclusive accesses.
*/
cpu_switch_mm(mm->pgd, mm);
enter_lazy_tlb(mm, current);
local_flush_tlb_all();
/* /*
* All kernel threads share the same mm context; grab a * All kernel threads share the same mm context; grab a
* reference and switch to it. * reference and switch to it.
*/ */
cpu = smp_processor_id();
atomic_inc(&mm->mm_count); atomic_inc(&mm->mm_count);
current->active_mm = mm; current->active_mm = mm;
cpumask_set_cpu(cpu, mm_cpumask(mm)); cpumask_set_cpu(cpu, mm_cpumask(mm));
cpu_switch_mm(mm->pgd, mm);
enter_lazy_tlb(mm, current);
local_flush_tlb_all();
printk("CPU%u: Booted secondary processor\n", cpu); printk("CPU%u: Booted secondary processor\n", cpu);

View file

@ -42,10 +42,10 @@ static void twd_set_mode(enum clock_event_mode mode,
switch (mode) { switch (mode) {
case CLOCK_EVT_MODE_PERIODIC: case CLOCK_EVT_MODE_PERIODIC:
/* timer load already set up */
ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE ctrl = TWD_TIMER_CONTROL_ENABLE | TWD_TIMER_CONTROL_IT_ENABLE
| TWD_TIMER_CONTROL_PERIODIC; | TWD_TIMER_CONTROL_PERIODIC;
__raw_writel(twd_timer_rate / HZ, twd_base + TWD_TIMER_LOAD); __raw_writel(DIV_ROUND_CLOSEST(twd_timer_rate, HZ),
twd_base + TWD_TIMER_LOAD);
break; break;
case CLOCK_EVT_MODE_ONESHOT: case CLOCK_EVT_MODE_ONESHOT:
/* period set, and timer enabled in 'next_event' hook */ /* period set, and timer enabled in 'next_event' hook */

View file

@ -45,6 +45,7 @@ int read_current_timer(unsigned long *timer_val)
*timer_val = delay_timer->read_current_timer(); *timer_val = delay_timer->read_current_timer();
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(read_current_timer);
static void __timer_delay(unsigned long cycles) static void __timer_delay(unsigned long cycles)
{ {

View file

@ -32,6 +32,7 @@
#include <linux/irq.h> #include <linux/irq.h>
#include <plat/time.h> #include <plat/time.h>
#include <linux/platform_data/usb-ehci-orion.h> #include <linux/platform_data/usb-ehci-orion.h>
#include <plat/irq.h>
#include <plat/common.h> #include <plat/common.h>
#include <plat/addr-map.h> #include <plat/addr-map.h>
#include "common.h" #include "common.h"
@ -109,8 +110,8 @@ static void __init dove_clk_init(void)
orion_clkdev_add(NULL, "orion-ehci.0", usb0); orion_clkdev_add(NULL, "orion-ehci.0", usb0);
orion_clkdev_add(NULL, "orion-ehci.1", usb1); orion_clkdev_add(NULL, "orion-ehci.1", usb1);
orion_clkdev_add(NULL, "mv643xx_eth.0", ge); orion_clkdev_add(NULL, "mv643xx_eth_port.0", ge);
orion_clkdev_add("0", "sata_mv.0", sata); orion_clkdev_add(NULL, "sata_mv.0", sata);
orion_clkdev_add("0", "pcie", pex0); orion_clkdev_add("0", "pcie", pex0);
orion_clkdev_add("1", "pcie", pex1); orion_clkdev_add("1", "pcie", pex1);
orion_clkdev_add(NULL, "sdhci-dove.0", sdio0); orion_clkdev_add(NULL, "sdhci-dove.0", sdio0);
@ -399,7 +400,7 @@ static void __init dove_dt_init(void)
(dove_tclk + 499999) / 1000000); (dove_tclk + 499999) / 1000000);
#ifdef CONFIG_CACHE_TAUROS2 #ifdef CONFIG_CACHE_TAUROS2
tauros2_init(); tauros2_init(0);
#endif #endif
dove_setup_cpu_mbus(); dove_setup_cpu_mbus();
@ -415,7 +416,6 @@ static void __init dove_dt_init(void)
dove_ehci0_init(); dove_ehci0_init();
dove_ehci1_init(); dove_ehci1_init();
dove_pcie_init(1, 1); dove_pcie_init(1, 1);
dove_crypto_init();
of_platform_populate(NULL, of_default_bus_match_table, of_platform_populate(NULL, of_default_bus_match_table,
dove_auxdata_lookup, NULL); dove_auxdata_lookup, NULL);

View file

@ -10,6 +10,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/clk.h>
#include <video/vga.h> #include <video/vga.h>
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
@ -188,6 +189,10 @@ static void __init add_pcie_port(int index, void __iomem *base)
if (orion_pcie_link_up(base)) { if (orion_pcie_link_up(base)) {
struct pcie_port *pp = &pcie_port[num_pcie_ports++]; struct pcie_port *pp = &pcie_port[num_pcie_ports++];
struct clk *clk = clk_get_sys("pcie", (index ? "1" : "0"));
if (!IS_ERR(clk))
clk_prepare_enable(clk);
printk(KERN_INFO "link up\n"); printk(KERN_INFO "link up\n");

View file

@ -51,9 +51,7 @@ static void __init kirkwood_dt_init(void)
kirkwood_setup_cpu_mbus(); kirkwood_setup_cpu_mbus();
#ifdef CONFIG_CACHE_FEROCEON_L2
kirkwood_l2_init(); kirkwood_l2_init();
#endif
/* Setup root of clk tree */ /* Setup root of clk tree */
kirkwood_clk_init(); kirkwood_clk_init();

View file

@ -633,6 +633,7 @@ char * __init kirkwood_id(void)
void __init kirkwood_l2_init(void) void __init kirkwood_l2_init(void)
{ {
#ifdef CONFIG_CACHE_FEROCEON_L2
#ifdef CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH #ifdef CONFIG_CACHE_FEROCEON_L2_WRITETHROUGH
writel(readl(L2_CONFIG_REG) | L2_WRITETHROUGH, L2_CONFIG_REG); writel(readl(L2_CONFIG_REG) | L2_WRITETHROUGH, L2_CONFIG_REG);
feroceon_l2_init(1); feroceon_l2_init(1);
@ -640,6 +641,7 @@ void __init kirkwood_l2_init(void)
writel(readl(L2_CONFIG_REG) & ~L2_WRITETHROUGH, L2_CONFIG_REG); writel(readl(L2_CONFIG_REG) & ~L2_WRITETHROUGH, L2_CONFIG_REG);
feroceon_l2_init(0); feroceon_l2_init(0);
#endif #endif
#endif
} }
void __init kirkwood_init(void) void __init kirkwood_init(void)
@ -657,9 +659,7 @@ void __init kirkwood_init(void)
kirkwood_setup_cpu_mbus(); kirkwood_setup_cpu_mbus();
#ifdef CONFIG_CACHE_FEROCEON_L2
kirkwood_l2_init(); kirkwood_l2_init();
#endif
/* Setup root of clk tree */ /* Setup root of clk tree */
kirkwood_clk_init(); kirkwood_clk_init();

View file

@ -444,16 +444,28 @@ static struct omap1_cam_platform_data ams_delta_camera_platform_data = {
.lclk_khz_max = 1334, /* results in 5fps CIF, 10fps QCIF */ .lclk_khz_max = 1334, /* results in 5fps CIF, 10fps QCIF */
}; };
static struct platform_device ams_delta_audio_device = {
.name = "ams-delta-audio",
.id = -1,
};
static struct platform_device cx20442_codec_device = {
.name = "cx20442-codec",
.id = -1,
};
static struct platform_device *ams_delta_devices[] __initdata = { static struct platform_device *ams_delta_devices[] __initdata = {
&latch1_gpio_device, &latch1_gpio_device,
&latch2_gpio_device, &latch2_gpio_device,
&ams_delta_kp_device, &ams_delta_kp_device,
&ams_delta_camera_device, &ams_delta_camera_device,
&ams_delta_audio_device,
}; };
static struct platform_device *late_devices[] __initdata = { static struct platform_device *late_devices[] __initdata = {
&ams_delta_nand_device, &ams_delta_nand_device,
&ams_delta_lcd_device, &ams_delta_lcd_device,
&cx20442_codec_device,
}; };
static void __init ams_delta_init(void) static void __init ams_delta_init(void)

View file

@ -3294,7 +3294,7 @@ static struct omap_clk omap44xx_clks[] = {
CLK(NULL, "auxclk5_src_ck", &auxclk5_src_ck, CK_443X), CLK(NULL, "auxclk5_src_ck", &auxclk5_src_ck, CK_443X),
CLK(NULL, "auxclk5_ck", &auxclk5_ck, CK_443X), CLK(NULL, "auxclk5_ck", &auxclk5_ck, CK_443X),
CLK(NULL, "auxclkreq5_ck", &auxclkreq5_ck, CK_443X), CLK(NULL, "auxclkreq5_ck", &auxclkreq5_ck, CK_443X),
CLK(NULL, "gpmc_ck", &dummy_ck, CK_443X), CLK("omap-gpmc", "fck", &dummy_ck, CK_443X),
CLK("omap_i2c.1", "ick", &dummy_ck, CK_443X), CLK("omap_i2c.1", "ick", &dummy_ck, CK_443X),
CLK("omap_i2c.2", "ick", &dummy_ck, CK_443X), CLK("omap_i2c.2", "ick", &dummy_ck, CK_443X),
CLK("omap_i2c.3", "ick", &dummy_ck, CK_443X), CLK("omap_i2c.3", "ick", &dummy_ck, CK_443X),

View file

@ -925,15 +925,18 @@ static int _clkdm_clk_hwmod_enable(struct clockdomain *clkdm)
if (!clkdm || !arch_clkdm || !arch_clkdm->clkdm_clk_enable) if (!clkdm || !arch_clkdm || !arch_clkdm->clkdm_clk_enable)
return -EINVAL; return -EINVAL;
spin_lock_irqsave(&clkdm->lock, flags);
/* /*
* For arch's with no autodeps, clkcm_clk_enable * For arch's with no autodeps, clkcm_clk_enable
* should be called for every clock instance or hwmod that is * should be called for every clock instance or hwmod that is
* enabled, so the clkdm can be force woken up. * enabled, so the clkdm can be force woken up.
*/ */
if ((atomic_inc_return(&clkdm->usecount) > 1) && autodeps) if ((atomic_inc_return(&clkdm->usecount) > 1) && autodeps) {
spin_unlock_irqrestore(&clkdm->lock, flags);
return 0; return 0;
}
spin_lock_irqsave(&clkdm->lock, flags);
arch_clkdm->clkdm_clk_enable(clkdm); arch_clkdm->clkdm_clk_enable(clkdm);
pwrdm_state_switch(clkdm->pwrdm.ptr); pwrdm_state_switch(clkdm->pwrdm.ptr);
spin_unlock_irqrestore(&clkdm->lock, flags); spin_unlock_irqrestore(&clkdm->lock, flags);
@ -950,15 +953,19 @@ static int _clkdm_clk_hwmod_disable(struct clockdomain *clkdm)
if (!clkdm || !arch_clkdm || !arch_clkdm->clkdm_clk_disable) if (!clkdm || !arch_clkdm || !arch_clkdm->clkdm_clk_disable)
return -EINVAL; return -EINVAL;
spin_lock_irqsave(&clkdm->lock, flags);
if (atomic_read(&clkdm->usecount) == 0) { if (atomic_read(&clkdm->usecount) == 0) {
spin_unlock_irqrestore(&clkdm->lock, flags);
WARN_ON(1); /* underflow */ WARN_ON(1); /* underflow */
return -ERANGE; return -ERANGE;
} }
if (atomic_dec_return(&clkdm->usecount) > 0) if (atomic_dec_return(&clkdm->usecount) > 0) {
spin_unlock_irqrestore(&clkdm->lock, flags);
return 0; return 0;
}
spin_lock_irqsave(&clkdm->lock, flags);
arch_clkdm->clkdm_clk_disable(clkdm); arch_clkdm->clkdm_clk_disable(clkdm);
pwrdm_state_switch(clkdm->pwrdm.ptr); pwrdm_state_switch(clkdm->pwrdm.ptr);
spin_unlock_irqrestore(&clkdm->lock, flags); spin_unlock_irqrestore(&clkdm->lock, flags);

View file

@ -341,7 +341,7 @@ static void __init omap_init_dmic(void)
oh = omap_hwmod_lookup("dmic"); oh = omap_hwmod_lookup("dmic");
if (!oh) { if (!oh) {
printk(KERN_ERR "Could not look up mcpdm hw_mod\n"); pr_err("Could not look up dmic hw_mod\n");
return; return;
} }

View file

@ -868,9 +868,9 @@ static void __devexit gpmc_mem_exit(void)
} }
static void __devinit gpmc_mem_init(void) static int __devinit gpmc_mem_init(void)
{ {
int cs; int cs, rc;
unsigned long boot_rom_space = 0; unsigned long boot_rom_space = 0;
/* never allocate the first page, to facilitate bug detection; /* never allocate the first page, to facilitate bug detection;
@ -890,13 +890,21 @@ static void __devinit gpmc_mem_init(void)
if (!gpmc_cs_mem_enabled(cs)) if (!gpmc_cs_mem_enabled(cs))
continue; continue;
gpmc_cs_get_memconf(cs, &base, &size); gpmc_cs_get_memconf(cs, &base, &size);
if (gpmc_cs_insert_mem(cs, base, size) < 0) rc = gpmc_cs_insert_mem(cs, base, size);
BUG(); if (IS_ERR_VALUE(rc)) {
while (--cs >= 0)
if (gpmc_cs_mem_enabled(cs))
gpmc_cs_delete_mem(cs);
return rc;
}
} }
return 0;
} }
static __devinit int gpmc_probe(struct platform_device *pdev) static __devinit int gpmc_probe(struct platform_device *pdev)
{ {
int rc;
u32 l; u32 l;
struct resource *res; struct resource *res;
@ -936,7 +944,13 @@ static __devinit int gpmc_probe(struct platform_device *pdev)
dev_info(gpmc_dev, "GPMC revision %d.%d\n", GPMC_REVISION_MAJOR(l), dev_info(gpmc_dev, "GPMC revision %d.%d\n", GPMC_REVISION_MAJOR(l),
GPMC_REVISION_MINOR(l)); GPMC_REVISION_MINOR(l));
gpmc_mem_init(); rc = gpmc_mem_init();
if (IS_ERR_VALUE(rc)) {
clk_disable_unprepare(gpmc_l3_clk);
clk_put(gpmc_l3_clk);
dev_err(gpmc_dev, "failed to reserve memory\n");
return rc;
}
if (IS_ERR_VALUE(gpmc_setup_irq())) if (IS_ERR_VALUE(gpmc_setup_irq()))
dev_warn(gpmc_dev, "gpmc_setup_irq failed\n"); dev_warn(gpmc_dev, "gpmc_setup_irq failed\n");

View file

@ -467,7 +467,7 @@ OMAP_SYS_TIMER(3_am33xx)
#ifdef CONFIG_ARCH_OMAP4 #ifdef CONFIG_ARCH_OMAP4
#ifdef CONFIG_LOCAL_TIMERS #ifdef CONFIG_LOCAL_TIMERS
static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, static DEFINE_TWD_LOCAL_TIMER(twd_local_timer,
OMAP44XX_LOCAL_TWD_BASE, 29 + OMAP_INTC_START); OMAP44XX_LOCAL_TWD_BASE, 29);
#endif #endif
static void __init omap4_timer_init(void) static void __init omap4_timer_init(void)

View file

@ -1,13 +0,0 @@
#ifndef __MACH_GPIO_H
#define __MACH_GPIO_H
/* Pull up/down values */
enum sirfsoc_gpio_pull {
SIRFSOC_GPIO_PULL_NONE,
SIRFSOC_GPIO_PULL_UP,
SIRFSOC_GPIO_PULL_DOWN,
};
void sirfsoc_gpio_set_pull(unsigned gpio, unsigned mode);
#endif

View file

@ -163,7 +163,7 @@ static struct clk_lookup s3c2440_clk_lookup[] = {
CLKDEV_INIT(NULL, "clk_uart_baud3", &s3c2440_clk_fclk_n), CLKDEV_INIT(NULL, "clk_uart_baud3", &s3c2440_clk_fclk_n),
}; };
static int s3c2440_clk_add(struct device *dev, struct subsys_interface *sif) static int __init_refok s3c2440_clk_add(struct device *dev, struct subsys_interface *sif)
{ {
struct clk *clock_upll; struct clk *clock_upll;
struct clk *clock_h; struct clk *clock_h;

View file

@ -1196,7 +1196,7 @@ static void __init eva_init(void)
#ifdef CONFIG_CACHE_L2X0 #ifdef CONFIG_CACHE_L2X0
/* Early BRESP enable, Shared attribute override enable, 32K*8way */ /* Early BRESP enable, Shared attribute override enable, 32K*8way */
l2x0_init(__io(0xf0002000), 0x40440000, 0x82000fff); l2x0_init(IOMEM(0xf0002000), 0x40440000, 0x82000fff);
#endif #endif
i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices)); i2c_register_board_info(0, i2c0_devices, ARRAY_SIZE(i2c0_devices));

View file

@ -24,17 +24,17 @@
#include <linux/clkdev.h> #include <linux/clkdev.h>
#include <mach/common.h> #include <mach/common.h>
#define FRQMR 0xffc80014 #define FRQMR IOMEM(0xffc80014)
#define MSTPCR0 0xffc80030 #define MSTPCR0 IOMEM(0xffc80030)
#define MSTPCR1 0xffc80034 #define MSTPCR1 IOMEM(0xffc80034)
#define MSTPCR3 0xffc8003c #define MSTPCR3 IOMEM(0xffc8003c)
#define MSTPSR1 0xffc80044 #define MSTPSR1 IOMEM(0xffc80044)
#define MSTPSR4 0xffc80048 #define MSTPSR4 IOMEM(0xffc80048)
#define MSTPSR6 0xffc8004c #define MSTPSR6 IOMEM(0xffc8004c)
#define MSTPCR4 0xffc80050 #define MSTPCR4 IOMEM(0xffc80050)
#define MSTPCR5 0xffc80054 #define MSTPCR5 IOMEM(0xffc80054)
#define MSTPCR6 0xffc80058 #define MSTPCR6 IOMEM(0xffc80058)
#define MSTPCR7 0xffc80040 #define MSTPCR7 IOMEM(0xffc80040)
/* ioremap() through clock mapping mandatory to avoid /* ioremap() through clock mapping mandatory to avoid
* collision with ARM coherent DMA virtual memory range. * collision with ARM coherent DMA virtual memory range.

View file

@ -182,7 +182,7 @@ DT_MACHINE_START(TEGRA_DT, "nVidia Tegra20 (Flattened Device Tree)")
.init_early = tegra20_init_early, .init_early = tegra20_init_early,
.init_irq = tegra_dt_init_irq, .init_irq = tegra_dt_init_irq,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
.timer = &tegra_timer, .timer = &tegra_sys_timer,
.init_machine = tegra_dt_init, .init_machine = tegra_dt_init,
.init_late = tegra_dt_init_late, .init_late = tegra_dt_init_late,
.restart = tegra_assert_system_reset, .restart = tegra_assert_system_reset,

View file

@ -89,7 +89,7 @@ DT_MACHINE_START(TEGRA30_DT, "NVIDIA Tegra30 (Flattened Device Tree)")
.init_early = tegra30_init_early, .init_early = tegra30_init_early,
.init_irq = tegra_dt_init_irq, .init_irq = tegra_dt_init_irq,
.handle_irq = gic_handle_irq, .handle_irq = gic_handle_irq,
.timer = &tegra_timer, .timer = &tegra_sys_timer,
.init_machine = tegra30_dt_init, .init_machine = tegra30_dt_init,
.init_late = tegra_init_late, .init_late = tegra_init_late,
.restart = tegra_assert_system_reset, .restart = tegra_assert_system_reset,

View file

@ -55,5 +55,5 @@ static inline int harmony_pcie_init(void) { return 0; }
void __init tegra_paz00_wifikill_init(void); void __init tegra_paz00_wifikill_init(void);
extern struct sys_timer tegra_timer; extern struct sys_timer tegra_sys_timer;
#endif #endif

View file

@ -953,6 +953,7 @@ PERIPH_CLK(pcie_xclk, NULL, "pcie_xclk", 74, 0, 26000000, mux_clk_m,
static struct clk *tegra_list_clks[] = { static struct clk *tegra_list_clks[] = {
&tegra_apbdma, &tegra_apbdma,
&tegra_rtc, &tegra_rtc,
&tegra_timer,
&tegra_i2s1, &tegra_i2s1,
&tegra_i2s2, &tegra_i2s2,
&tegra_spdif_out, &tegra_spdif_out,

View file

@ -1199,7 +1199,7 @@ static long tegra30_pll_round_rate(struct clk_hw *hw, unsigned long rate,
{ {
struct clk_tegra *c = to_clk_tegra(hw); struct clk_tegra *c = to_clk_tegra(hw);
unsigned long input_rate = *prate; unsigned long input_rate = *prate;
unsigned long output_rate = *prate; u64 output_rate = *prate;
const struct clk_pll_freq_table *sel; const struct clk_pll_freq_table *sel;
struct clk_pll_freq_table cfg; struct clk_pll_freq_table cfg;
int mul; int mul;

View file

@ -1143,6 +1143,7 @@ struct clk *tegra_list_clks[] = {
&tegra_apbdma, &tegra_apbdma,
&tegra_rtc, &tegra_rtc,
&tegra_kbc, &tegra_kbc,
&tegra_timer,
&tegra_kfuse, &tegra_kfuse,
&tegra_fuse, &tegra_fuse,
&tegra_fuse_burn, &tegra_fuse_burn,

View file

@ -245,7 +245,7 @@ static void __init tegra_init_timer(void)
register_persistent_clock(NULL, tegra_read_persistent_clock); register_persistent_clock(NULL, tegra_read_persistent_clock);
} }
struct sys_timer tegra_timer = { struct sys_timer tegra_sys_timer = {
.init = tegra_init_timer, .init = tegra_init_timer,
}; };

View file

@ -856,8 +856,10 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
if (thumb2_32b) { if (thumb2_32b) {
offset.un = 0; offset.un = 0;
handler = do_alignment_t32_to_handler(&instr, regs, &offset); handler = do_alignment_t32_to_handler(&instr, regs, &offset);
} else } else {
offset.un = 0;
handler = do_alignment_ldmstm; handler = do_alignment_ldmstm;
}
break; break;
default: default:

View file

@ -610,7 +610,7 @@ static void *__dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
gfp_t gfp, pgprot_t prot, bool is_coherent, const void *caller) gfp_t gfp, pgprot_t prot, bool is_coherent, const void *caller)
{ {
u64 mask = get_coherent_dma_mask(dev); u64 mask = get_coherent_dma_mask(dev);
struct page *page; struct page *page = NULL;
void *addr; void *addr;
#ifdef CONFIG_DMA_API_DEBUG #ifdef CONFIG_DMA_API_DEBUG

View file

@ -17,7 +17,6 @@ struct arm_vmregion {
struct list_head vm_list; struct list_head vm_list;
unsigned long vm_start; unsigned long vm_start;
unsigned long vm_end; unsigned long vm_end;
void *priv;
int vm_active; int vm_active;
const void *caller; const void *caller;
}; };

View file

@ -16,6 +16,7 @@
#include <linux/smc91x.h> #include <linux/smc91x.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include "../mach-omap2/debug-devices.h"
/* Many OMAP development platforms reuse the same "debug board"; these /* Many OMAP development platforms reuse the same "debug board"; these
* platforms include H2, H3, H4, and Perseus2. * platforms include H2, H3, H4, and Perseus2.

View file

@ -40,10 +40,10 @@
#define OMAP_UART_WER_MOD_WKUP 0X7F #define OMAP_UART_WER_MOD_WKUP 0X7F
/* Enable XON/XOFF flow control on output */ /* Enable XON/XOFF flow control on output */
#define OMAP_UART_SW_TX 0x8 #define OMAP_UART_SW_TX 0x04
/* Enable XON/XOFF flow control on input */ /* Enable XON/XOFF flow control on input */
#define OMAP_UART_SW_RX 0x2 #define OMAP_UART_SW_RX 0x04
#define OMAP_UART_SYSC_RESET 0X07 #define OMAP_UART_SYSC_RESET 0X07
#define OMAP_UART_TCR_TRIG 0X0F #define OMAP_UART_TCR_TRIG 0X0F

View file

@ -5,6 +5,6 @@
# #
include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types include/generated/mach-types.h: $(src)/gen-mach-types $(src)/mach-types
@echo ' Generating $@' $(kecho) ' Generating $@'
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
$(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; } $(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }

View file

@ -33,7 +33,7 @@
#include <xen/page.h> #include <xen/page.h>
#include <xen/grant_table.h> #include <xen/grant_table.h>
int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes, int arch_gnttab_map_shared(xen_pfn_t *frames, unsigned long nr_gframes,
unsigned long max_nr_gframes, unsigned long max_nr_gframes,
void **__shared) void **__shared)
{ {

View file

@ -22,6 +22,7 @@ config ARM64
select HAVE_PERF_EVENTS select HAVE_PERF_EVENTS
select HAVE_SPARSE_IRQ select HAVE_SPARSE_IRQ
select IRQ_DOMAIN select IRQ_DOMAIN
select MODULES_USE_ELF_RELA
select NO_BOOTMEM select NO_BOOTMEM
select OF select OF
select OF_EARLY_FLATTREE select OF_EARLY_FLATTREE

View file

@ -18,7 +18,6 @@ generic-y += ipcbuf.h
generic-y += irq_regs.h generic-y += irq_regs.h
generic-y += kdebug.h generic-y += kdebug.h
generic-y += kmap_types.h generic-y += kmap_types.h
generic-y += linkage.h
generic-y += local.h generic-y += local.h
generic-y += local64.h generic-y += local64.h
generic-y += mman.h generic-y += mman.h

View file

@ -0,0 +1,7 @@
#ifndef __ASM_LINKAGE_H
#define __ASM_LINKAGE_H
#define __ALIGN .align 4
#define __ALIGN_STR ".align 4"
#endif

View file

@ -92,30 +92,20 @@ static inline void start_thread_common(struct pt_regs *regs, unsigned long pc)
static inline void start_thread(struct pt_regs *regs, unsigned long pc, static inline void start_thread(struct pt_regs *regs, unsigned long pc,
unsigned long sp) unsigned long sp)
{ {
unsigned long *stack = (unsigned long *)sp;
start_thread_common(regs, pc); start_thread_common(regs, pc);
regs->pstate = PSR_MODE_EL0t; regs->pstate = PSR_MODE_EL0t;
regs->sp = sp; regs->sp = sp;
regs->regs[2] = stack[2]; /* x2 (envp) */
regs->regs[1] = stack[1]; /* x1 (argv) */
regs->regs[0] = stack[0]; /* x0 (argc) */
} }
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
static inline void compat_start_thread(struct pt_regs *regs, unsigned long pc, static inline void compat_start_thread(struct pt_regs *regs, unsigned long pc,
unsigned long sp) unsigned long sp)
{ {
unsigned int *stack = (unsigned int *)sp;
start_thread_common(regs, pc); start_thread_common(regs, pc);
regs->pstate = COMPAT_PSR_MODE_USR; regs->pstate = COMPAT_PSR_MODE_USR;
if (pc & 1) if (pc & 1)
regs->pstate |= COMPAT_PSR_T_BIT; regs->pstate |= COMPAT_PSR_T_BIT;
regs->compat_sp = sp; regs->compat_sp = sp;
regs->regs[2] = stack[2]; /* x2 (envp) */
regs->regs[1] = stack[1]; /* x1 (argv) */
regs->regs[0] = stack[0]; /* x0 (argc) */
} }
#endif #endif

View file

@ -79,13 +79,14 @@ struct user_fpsimd_state {
struct user_hwdebug_state { struct user_hwdebug_state {
__u32 dbg_info; __u32 dbg_info;
__u32 pad;
struct { struct {
__u64 addr; __u64 addr;
__u32 ctrl; __u32 ctrl;
__u32 pad;
} dbg_regs[16]; } dbg_regs[16];
}; };
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#endif /* _UAPI__ASM_PTRACE_H */ #endif /* _UAPI__ASM_PTRACE_H */

View file

@ -234,28 +234,33 @@ static int ptrace_hbp_fill_attr_ctrl(unsigned int note_type,
struct arch_hw_breakpoint_ctrl ctrl, struct arch_hw_breakpoint_ctrl ctrl,
struct perf_event_attr *attr) struct perf_event_attr *attr)
{ {
int err, len, type; int err, len, type, disabled = !ctrl.enabled;
err = arch_bp_generic_fields(ctrl, &len, &type); if (disabled) {
if (err) len = 0;
return err; type = HW_BREAKPOINT_EMPTY;
} else {
err = arch_bp_generic_fields(ctrl, &len, &type);
if (err)
return err;
switch (note_type) { switch (note_type) {
case NT_ARM_HW_BREAK: case NT_ARM_HW_BREAK:
if ((type & HW_BREAKPOINT_X) != type) if ((type & HW_BREAKPOINT_X) != type)
return -EINVAL;
break;
case NT_ARM_HW_WATCH:
if ((type & HW_BREAKPOINT_RW) != type)
return -EINVAL;
break;
default:
return -EINVAL; return -EINVAL;
break; }
case NT_ARM_HW_WATCH:
if ((type & HW_BREAKPOINT_RW) != type)
return -EINVAL;
break;
default:
return -EINVAL;
} }
attr->bp_len = len; attr->bp_len = len;
attr->bp_type = type; attr->bp_type = type;
attr->disabled = !ctrl.enabled; attr->disabled = disabled;
return 0; return 0;
} }
@ -372,7 +377,7 @@ static int ptrace_hbp_set_addr(unsigned int note_type,
#define PTRACE_HBP_ADDR_SZ sizeof(u64) #define PTRACE_HBP_ADDR_SZ sizeof(u64)
#define PTRACE_HBP_CTRL_SZ sizeof(u32) #define PTRACE_HBP_CTRL_SZ sizeof(u32)
#define PTRACE_HBP_REG_OFF sizeof(u32) #define PTRACE_HBP_PAD_SZ sizeof(u32)
static int hw_break_get(struct task_struct *target, static int hw_break_get(struct task_struct *target,
const struct user_regset *regset, const struct user_regset *regset,
@ -380,7 +385,7 @@ static int hw_break_get(struct task_struct *target,
void *kbuf, void __user *ubuf) void *kbuf, void __user *ubuf)
{ {
unsigned int note_type = regset->core_note_type; unsigned int note_type = regset->core_note_type;
int ret, idx = 0, offset = PTRACE_HBP_REG_OFF, limit; int ret, idx = 0, offset, limit;
u32 info, ctrl; u32 info, ctrl;
u64 addr; u64 addr;
@ -389,11 +394,20 @@ static int hw_break_get(struct task_struct *target,
if (ret) if (ret)
return ret; return ret;
ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, &info, 0, 4); ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, &info, 0,
sizeof(info));
if (ret)
return ret;
/* Pad */
offset = offsetof(struct user_hwdebug_state, pad);
ret = user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf, offset,
offset + PTRACE_HBP_PAD_SZ);
if (ret) if (ret)
return ret; return ret;
/* (address, ctrl) registers */ /* (address, ctrl) registers */
offset = offsetof(struct user_hwdebug_state, dbg_regs);
limit = regset->n * regset->size; limit = regset->n * regset->size;
while (count && offset < limit) { while (count && offset < limit) {
ret = ptrace_hbp_get_addr(note_type, target, idx, &addr); ret = ptrace_hbp_get_addr(note_type, target, idx, &addr);
@ -413,6 +427,13 @@ static int hw_break_get(struct task_struct *target,
if (ret) if (ret)
return ret; return ret;
offset += PTRACE_HBP_CTRL_SZ; offset += PTRACE_HBP_CTRL_SZ;
ret = user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf,
offset,
offset + PTRACE_HBP_PAD_SZ);
if (ret)
return ret;
offset += PTRACE_HBP_PAD_SZ;
idx++; idx++;
} }
@ -425,12 +446,13 @@ static int hw_break_set(struct task_struct *target,
const void *kbuf, const void __user *ubuf) const void *kbuf, const void __user *ubuf)
{ {
unsigned int note_type = regset->core_note_type; unsigned int note_type = regset->core_note_type;
int ret, idx = 0, offset = PTRACE_HBP_REG_OFF, limit; int ret, idx = 0, offset, limit;
u32 ctrl; u32 ctrl;
u64 addr; u64 addr;
/* Resource info */ /* Resource info and pad */
ret = user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf, 0, 4); offset = offsetof(struct user_hwdebug_state, dbg_regs);
ret = user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf, 0, offset);
if (ret) if (ret)
return ret; return ret;
@ -454,6 +476,13 @@ static int hw_break_set(struct task_struct *target,
if (ret) if (ret)
return ret; return ret;
offset += PTRACE_HBP_CTRL_SZ; offset += PTRACE_HBP_CTRL_SZ;
ret = user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf,
offset,
offset + PTRACE_HBP_PAD_SZ);
if (ret)
return ret;
offset += PTRACE_HBP_PAD_SZ;
idx++; idx++;
} }

View file

@ -170,7 +170,19 @@ static void __init setup_machine_fdt(phys_addr_t dt_phys)
void __init early_init_dt_add_memory_arch(u64 base, u64 size) void __init early_init_dt_add_memory_arch(u64 base, u64 size)
{ {
base &= PAGE_MASK;
size &= PAGE_MASK; size &= PAGE_MASK;
if (base + size < PHYS_OFFSET) {
pr_warning("Ignoring memory block 0x%llx - 0x%llx\n",
base, base + size);
return;
}
if (base < PHYS_OFFSET) {
pr_warning("Ignoring memory range 0x%llx - 0x%llx\n",
base, PHYS_OFFSET);
size -= PHYS_OFFSET - base;
base = PHYS_OFFSET;
}
memblock_add(base, size); memblock_add(base, size);
} }

View file

@ -46,7 +46,6 @@
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/mmu_context.h>
/* /*
* as from 2.5, kernels no longer have an init_tasks structure * as from 2.5, kernels no longer have an init_tasks structure

View file

@ -28,6 +28,7 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/timekeeper_internal.h>
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
@ -222,11 +223,10 @@ struct vm_area_struct *get_gate_vma(struct mm_struct *mm)
/* /*
* Update the vDSO data page to keep in sync with kernel timekeeping. * Update the vDSO data page to keep in sync with kernel timekeeping.
*/ */
void update_vsyscall(struct timespec *ts, struct timespec *wtm, void update_vsyscall(struct timekeeper *tk)
struct clocksource *clock, u32 mult)
{ {
struct timespec xtime_coarse; struct timespec xtime_coarse;
u32 use_syscall = strcmp(clock->name, "arch_sys_counter"); u32 use_syscall = strcmp(tk->clock->name, "arch_sys_counter");
++vdso_data->tb_seq_count; ++vdso_data->tb_seq_count;
smp_wmb(); smp_wmb();
@ -237,13 +237,13 @@ void update_vsyscall(struct timespec *ts, struct timespec *wtm,
vdso_data->xtime_coarse_nsec = xtime_coarse.tv_nsec; vdso_data->xtime_coarse_nsec = xtime_coarse.tv_nsec;
if (!use_syscall) { if (!use_syscall) {
vdso_data->cs_cycle_last = clock->cycle_last; vdso_data->cs_cycle_last = tk->clock->cycle_last;
vdso_data->xtime_clock_sec = ts->tv_sec; vdso_data->xtime_clock_sec = tk->xtime_sec;
vdso_data->xtime_clock_nsec = ts->tv_nsec; vdso_data->xtime_clock_nsec = tk->xtime_nsec >> tk->shift;
vdso_data->cs_mult = mult; vdso_data->cs_mult = tk->mult;
vdso_data->cs_shift = clock->shift; vdso_data->cs_shift = tk->shift;
vdso_data->wtm_clock_sec = wtm->tv_sec; vdso_data->wtm_clock_sec = tk->wall_to_monotonic.tv_sec;
vdso_data->wtm_clock_nsec = wtm->tv_nsec; vdso_data->wtm_clock_nsec = tk->wall_to_monotonic.tv_nsec;
} }
smp_wmb(); smp_wmb();

View file

@ -867,8 +867,8 @@ ret_from_fork:
ret_from_kernel_thread: ret_from_kernel_thread:
lddi.p @(gr28,#REG_GR(8)),gr20 lddi.p @(gr28,#REG_GR(8)),gr20
call schedule_tail call schedule_tail
or.p gr20,gr20,gr8 calll.p @(gr21,gr0)
calll @(gr21,gr0) or gr20,gr20,gr8
bra sys_exit bra sys_exit
.globl ret_from_kernel_execve .globl ret_from_kernel_execve

View file

@ -194,7 +194,7 @@ int copy_thread(unsigned long clone_flags,
memset(childregs, 0, sizeof(struct pt_regs)); memset(childregs, 0, sizeof(struct pt_regs));
childregs->gr9 = usp; /* function */ childregs->gr9 = usp; /* function */
childregs->gr8 = arg; childregs->gr8 = arg;
chilregs->psr = PSR_S; childregs->psr = PSR_S;
p->thread.pc = (unsigned long) ret_from_kernel_thread; p->thread.pc = (unsigned long) ret_from_kernel_thread;
save_user_regs(p->thread.user); save_user_regs(p->thread.user);
return 0; return 0;

View file

@ -112,9 +112,11 @@ char __initdata redboot_command_line[COMMAND_LINE_SIZE];
#ifdef CONFIG_PM #ifdef CONFIG_PM
#define __pminit #define __pminit
#define __pminitdata #define __pminitdata
#define __pminitconst
#else #else
#define __pminit __init #define __pminit __init
#define __pminitdata __initdata #define __pminitdata __initdata
#define __pminitconst __initconst
#endif #endif
struct clock_cmode { struct clock_cmode {

View file

@ -1,8 +1,5 @@
include include/asm-generic/Kbuild.asm
header-y += registers.h
header-y += ucontext.h header-y += ucontext.h
header-y += user.h
generic-y += auxvec.h generic-y += auxvec.h
generic-y += bug.h generic-y += bug.h

View file

@ -1,7 +1,7 @@
/* /*
* Atomic operations for the Hexagon architecture * Atomic operations for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify

View file

@ -1,7 +1,7 @@
/* /*
* Memory barrier definitions for the Hexagon architecture * Memory barrier definitions for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* Bit operations for the Hexagon architecture * Bit operations for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify

View file

@ -1,7 +1,7 @@
/* /*
* Cache definitions for the Hexagon architecture * Cache definitions for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* Cache flush operations for the Hexagon architecture * Cache flush operations for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* xchg/cmpxchg operations for the Hexagon architecture * xchg/cmpxchg operations for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* DMA operations for the Hexagon architecture * DMA operations for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* ELF definitions for the Hexagon architecture * ELF definitions for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* Process execution related definitions for the Hexagon architecture * Process execution related definitions for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* Fixmap support for Hexagon - enough to support highmem features * Fixmap support for Hexagon - enough to support highmem features
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* Declarations for to Hexagon Virtal Machine. * Declarations for to Hexagon Virtal Machine.
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* IO definitions for the Hexagon architecture * IO definitions for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* IRQ support for the Hexagon architecture * IRQ support for the Hexagon architecture
* *
* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

View file

@ -1,7 +1,7 @@
/* /*
* arch/hexagon/include/asm/kgdb.h - Hexagon KGDB Support * arch/hexagon/include/asm/kgdb.h - Hexagon KGDB Support
* *
* Copyright (c) 2011, Code Aurora Forum. All rights reserved. * Copyright (c) 2011, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and

Some files were not shown because too many files have changed in this diff Show more