Merge commit 'v2.6.35-rc3' into for-linus

This commit is contained in:
Dmitry Torokhov 2010-06-22 11:32:04 -07:00
commit 0e789314f8
1029 changed files with 83569 additions and 7903 deletions

1
.gitignore vendored
View File

@ -28,6 +28,7 @@ modules.builtin
*.gz *.gz
*.bz2 *.bz2
*.lzma *.lzma
*.lzo
*.patch *.patch
*.gcno *.gcno

7
Documentation/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
filesystems/dnotify_test
laptops/dslm
timers/hpet_example
vm/hugepage-mmap
vm/hugepage-shm
vm/map_hugetlb

View File

@ -133,46 +133,6 @@ Description:
The symbolic link points to the PCI device sysfs entry of the The symbolic link points to the PCI device sysfs entry of the
Physical Function this device associates with. Physical Function this device associates with.
What: /sys/bus/pci/slots/...
Date: April 2005 (possibly older)
KernelVersion: 2.6.12 (possibly older)
Contact: linux-pci@vger.kernel.org
Description:
When the appropriate driver is loaded, it will create a
directory per claimed physical PCI slot in
/sys/bus/pci/slots/. The names of these directories are
specific to the driver, which in turn, are specific to the
platform, but in general, should match the label on the
machine's physical chassis.
The drivers that can create slot directories include the
PCI hotplug drivers, and as of 2.6.27, the pci_slot driver.
The slot directories contain, at a minimum, a file named
'address' which contains the PCI bus:device:function tuple.
Other files may appear as well, but are specific to the
driver.
What: /sys/bus/pci/slots/.../function[0-7]
Date: March 2010
KernelVersion: 2.6.35
Contact: linux-pci@vger.kernel.org
Description:
If PCI slot directories (as described above) are created,
and the physical slot is actually populated with a device,
symbolic links in the slot directory pointing to the
device's PCI functions are created as well.
What: /sys/bus/pci/devices/.../slot
Date: March 2010
KernelVersion: 2.6.35
Contact: linux-pci@vger.kernel.org
Description:
If PCI slot directories (as described above) are created,
a symbolic link pointing to the slot directory will be
created as well.
What: /sys/bus/pci/slots/.../module What: /sys/bus/pci/slots/.../module
Date: June 2009 Date: June 2009
Contact: linux-pci@vger.kernel.org Contact: linux-pci@vger.kernel.org

View File

@ -389,7 +389,7 @@
</para> </para>
<para> <para>
If your driver supports memory management (it should!), you'll If your driver supports memory management (it should!), you'll
need to set that up at load time as well. How you intialize need to set that up at load time as well. How you initialize
it depends on which memory manager you're using, TTM or GEM. it depends on which memory manager you're using, TTM or GEM.
</para> </para>
<sect3> <sect3>
@ -399,7 +399,7 @@
aperture space for graphics devices. TTM supports both UMA devices aperture space for graphics devices. TTM supports both UMA devices
and devices with dedicated video RAM (VRAM), i.e. most discrete and devices with dedicated video RAM (VRAM), i.e. most discrete
graphics devices. If your device has dedicated RAM, supporting graphics devices. If your device has dedicated RAM, supporting
TTM is desireable. TTM also integrates tightly with your TTM is desirable. TTM also integrates tightly with your
driver specific buffer execution function. See the radeon driver specific buffer execution function. See the radeon
driver for examples. driver for examples.
</para> </para>
@ -443,7 +443,7 @@
likely eventually calling ttm_bo_global_init and likely eventually calling ttm_bo_global_init and
ttm_bo_global_release, respectively. Also like the previous ttm_bo_global_release, respectively. Also like the previous
object, ttm_global_item_ref is used to create an initial reference object, ttm_global_item_ref is used to create an initial reference
count for the TTM, which will call your initalization function. count for the TTM, which will call your initialization function.
</para> </para>
</sect3> </sect3>
<sect3> <sect3>
@ -557,7 +557,7 @@ void intel_crt_init(struct drm_device *dev)
CRT connector and encoder combination is created. A device CRT connector and encoder combination is created. A device
specific i2c bus is also created, for fetching EDID data and specific i2c bus is also created, for fetching EDID data and
performing monitor detection. Once the process is complete, performing monitor detection. Once the process is complete,
the new connector is regsitered with sysfs, to make its the new connector is registered with sysfs, to make its
properties available to applications. properties available to applications.
</para> </para>
<sect4> <sect4>
@ -581,12 +581,12 @@ void intel_crt_init(struct drm_device *dev)
<para> <para>
For each encoder, CRTC and connector, several functions must For each encoder, CRTC and connector, several functions must
be provided, depending on the object type. Encoder objects be provided, depending on the object type. Encoder objects
need should provide a DPMS (basically on/off) function, mode fixup need to provide a DPMS (basically on/off) function, mode fixup
(for converting requested modes into native hardware timings), (for converting requested modes into native hardware timings),
and prepare, set and commit functions for use by the core DRM and prepare, set and commit functions for use by the core DRM
helper functions. Connector helpers need to provide mode fetch and helper functions. Connector helpers need to provide mode fetch and
validity functions as well as an encoder matching function for validity functions as well as an encoder matching function for
returing an ideal encoder for a given connector. The core returning an ideal encoder for a given connector. The core
connector functions include a DPMS callback, (deprecated) connector functions include a DPMS callback, (deprecated)
save/restore routines, detection, mode probing, property handling, save/restore routines, detection, mode probing, property handling,
and cleanup functions. and cleanup functions.

View File

@ -58,7 +58,7 @@ MPEG stream embedded, sliced VBI data format in this specification.
</contrib> </contrib>
<affiliation> <affiliation>
<address> <address>
<email>awalls@radix.net</email> <email>awalls@md.metrocast.net</email>
</address> </address>
</affiliation> </affiliation>
</author> </author>

View File

@ -53,8 +53,10 @@ input</refpurpose>
automatically, similar to sensing the video standard. To do so, applications automatically, similar to sensing the video standard. To do so, applications
call <constant> VIDIOC_QUERY_DV_PRESET</constant> with a pointer to a call <constant> VIDIOC_QUERY_DV_PRESET</constant> with a pointer to a
&v4l2-dv-preset; type. Once the hardware detects a preset, that preset is &v4l2-dv-preset; type. Once the hardware detects a preset, that preset is
returned in the preset field of &v4l2-dv-preset;. When detection is not returned in the preset field of &v4l2-dv-preset;. If the preset could not be
possible or fails, the value V4L2_DV_INVALID is returned.</para> detected because there was no signal, or the signal was unreliable, or the
signal did not map to a supported preset, then the value V4L2_DV_INVALID is
returned.</para>
</refsect1> </refsect1>
<refsect1> <refsect1>

View File

@ -6,6 +6,8 @@ Written by Doug Thompson <dougthompson@xmission.com>
7 Dec 2005 7 Dec 2005
17 Jul 2007 Updated 17 Jul 2007 Updated
(c) Mauro Carvalho Chehab <mchehab@redhat.com>
05 Aug 2009 Nehalem interface
EDAC is maintained and written by: EDAC is maintained and written by:
@ -717,3 +719,153 @@ unique drivers for their hardware systems.
The 'test_device_edac' sample driver is located at the The 'test_device_edac' sample driver is located at the
bluesmoke.sourceforge.net project site for EDAC. bluesmoke.sourceforge.net project site for EDAC.
=======================================================================
NEHALEM USAGE OF EDAC APIs
This chapter documents some EXPERIMENTAL mappings for EDAC API to handle
Nehalem EDAC driver. They will likely be changed on future versions
of the driver.
Due to the way Nehalem exports Memory Controller data, some adjustments
were done at i7core_edac driver. This chapter will cover those differences
1) On Nehalem, there are one Memory Controller per Quick Patch Interconnect
(QPI). At the driver, the term "socket" means one QPI. This is
associated with a physical CPU socket.
Each MC have 3 physical read channels, 3 physical write channels and
3 logic channels. The driver currenty sees it as just 3 channels.
Each channel can have up to 3 DIMMs.
The minimum known unity is DIMMs. There are no information about csrows.
As EDAC API maps the minimum unity is csrows, the driver sequencially
maps channel/dimm into different csrows.
For example, suposing the following layout:
Ch0 phy rd0, wr0 (0x063f4031): 2 ranks, UDIMMs
dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400
dimm 1 1024 Mb offset: 4, bank: 8, rank: 1, row: 0x4000, col: 0x400
Ch1 phy rd1, wr1 (0x063f4031): 2 ranks, UDIMMs
dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400
Ch2 phy rd3, wr3 (0x063f4031): 2 ranks, UDIMMs
dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400
The driver will map it as:
csrow0: channel 0, dimm0
csrow1: channel 0, dimm1
csrow2: channel 1, dimm0
csrow3: channel 2, dimm0
exports one
DIMM per csrow.
Each QPI is exported as a different memory controller.
2) Nehalem MC has the hability to generate errors. The driver implements this
functionality via some error injection nodes:
For injecting a memory error, there are some sysfs nodes, under
/sys/devices/system/edac/mc/mc?/:
inject_addrmatch/*:
Controls the error injection mask register. It is possible to specify
several characteristics of the address to match an error code:
dimm = the affected dimm. Numbers are relative to a channel;
rank = the memory rank;
channel = the channel that will generate an error;
bank = the affected bank;
page = the page address;
column (or col) = the address column.
each of the above values can be set to "any" to match any valid value.
At driver init, all values are set to any.
For example, to generate an error at rank 1 of dimm 2, for any channel,
any bank, any page, any column:
echo 2 >/sys/devices/system/edac/mc/mc0/inject_addrmatch/dimm
echo 1 >/sys/devices/system/edac/mc/mc0/inject_addrmatch/rank
To return to the default behaviour of matching any, you can do:
echo any >/sys/devices/system/edac/mc/mc0/inject_addrmatch/dimm
echo any >/sys/devices/system/edac/mc/mc0/inject_addrmatch/rank
inject_eccmask:
specifies what bits will have troubles,
inject_section:
specifies what ECC cache section will get the error:
3 for both
2 for the highest
1 for the lowest
inject_type:
specifies the type of error, being a combination of the following bits:
bit 0 - repeat
bit 1 - ecc
bit 2 - parity
inject_enable starts the error generation when something different
than 0 is written.
All inject vars can be read. root permission is needed for write.
Datasheet states that the error will only be generated after a write on an
address that matches inject_addrmatch. It seems, however, that reading will
also produce an error.
For example, the following code will generate an error for any write access
at socket 0, on any DIMM/address on channel 2:
echo 2 >/sys/devices/system/edac/mc/mc0/inject_addrmatch/channel
echo 2 >/sys/devices/system/edac/mc/mc0/inject_type
echo 64 >/sys/devices/system/edac/mc/mc0/inject_eccmask
echo 3 >/sys/devices/system/edac/mc/mc0/inject_section
echo 1 >/sys/devices/system/edac/mc/mc0/inject_enable
dd if=/dev/mem of=/dev/null seek=16k bs=4k count=1 >& /dev/null
For socket 1, it is needed to replace "mc0" by "mc1" at the above
commands.
The generated error message will look like:
EDAC MC0: UE row 0, channel-a= 0 channel-b= 0 labels "-": NON_FATAL (addr = 0x0075b980, socket=0, Dimm=0, Channel=2, syndrome=0x00000040, count=1, Err=8c0000400001009f:4000080482 (read error: read ECC error))
3) Nehalem specific Corrected Error memory counters
Nehalem have some registers to count memory errors. The driver uses those
registers to report Corrected Errors on devices with Registered Dimms.
However, those counters don't work with Unregistered Dimms. As the chipset
offers some counters that also work with UDIMMS (but with a worse level of
granularity than the default ones), the driver exposes those registers for
UDIMM memories.
They can be read by looking at the contents of all_channel_counts/
$ for i in /sys/devices/system/edac/mc/mc0/all_channel_counts/*; do echo $i; cat $i; done
/sys/devices/system/edac/mc/mc0/all_channel_counts/udimm0
0
/sys/devices/system/edac/mc/mc0/all_channel_counts/udimm1
0
/sys/devices/system/edac/mc/mc0/all_channel_counts/udimm2
0
What happens here is that errors on different csrows, but at the same
dimm number will increment the same counter.
So, in this memory mapping:
csrow0: channel 0, dimm0
csrow1: channel 0, dimm1
csrow2: channel 1, dimm0
csrow3: channel 2, dimm0
The hardware will increment udimm0 for an error at the first dimm at either
csrow0, csrow2 or csrow3;
The hardware will increment udimm1 for an error at the second dimm at either
csrow0, csrow2 or csrow3;
The hardware will increment udimm2 for an error at the third dimm at either
csrow0, csrow2 or csrow3;
4) Standard error counters
The standard error counters are generated when an mcelog error is received
by the driver. Since, with udimm, this is counted by software, it is
possible that some errors could be lost. With rdimm's, they displays the
contents of the registers

View File

@ -578,15 +578,6 @@ Who: Avi Kivity <avi@redhat.com>
---------------------------- ----------------------------
What: "acpi=ht" boot option
When: 2.6.35
Why: Useful in 2003, implementation is a hack.
Generally invoked by accident today.
Seen as doing more harm than good.
Who: Len Brown <len.brown@intel.com>
----------------------------
What: iwlwifi 50XX module parameters What: iwlwifi 50XX module parameters
When: 2.6.40 When: 2.6.40
Why: The "..50" modules parameters were used to configure 5000 series and Why: The "..50" modules parameters were used to configure 5000 series and

View File

@ -794,11 +794,6 @@ designed.
Roadmap: Roadmap:
2.6.35 Inclusion in mainline as an experimental mount option
=> approximately 2-3 months to merge window
=> needs to be in xfs-dev tree in 4-6 weeks
=> code is nearing readiness for review
2.6.37 Remove experimental tag from mount option 2.6.37 Remove experimental tag from mount option
=> should be roughly 6 months after initial merge => should be roughly 6 months after initial merge
=> enough time to: => enough time to:

View File

@ -65,7 +65,7 @@ CROSS_COMPILE
Specify an optional fixed part of the binutils filename. Specify an optional fixed part of the binutils filename.
CROSS_COMPILE can be a part of the filename or the full path. CROSS_COMPILE can be a part of the filename or the full path.
CROSS_COMPILE is also used for ccache is some setups. CROSS_COMPILE is also used for ccache in some setups.
CF CF
-------------------------------------------------- --------------------------------------------------
@ -162,3 +162,7 @@ For tags/TAGS/cscope targets, you can specify more than one arch
to be included in the databases, separated by blank space. E.g.: to be included in the databases, separated by blank space. E.g.:
$ make ALLSOURCE_ARCHS="x86 mips arm" tags $ make ALLSOURCE_ARCHS="x86 mips arm" tags
To get all available archs you can also specify all. E.g.:
$ make ALLSOURCE_ARCHS=all tags

View File

@ -66,14 +66,14 @@ of advantages of mutexes:
c0377ccb <mutex_lock>: c0377ccb <mutex_lock>:
c0377ccb: f0 ff 08 lock decl (%eax) c0377ccb: f0 ff 08 lock decl (%eax)
c0377cce: 78 0e js c0377cde <.text.lock.mutex> c0377cce: 78 0e js c0377cde <.text..lock.mutex>
c0377cd0: c3 ret c0377cd0: c3 ret
the unlocking fastpath is equally tight: the unlocking fastpath is equally tight:
c0377cd1 <mutex_unlock>: c0377cd1 <mutex_unlock>:
c0377cd1: f0 ff 00 lock incl (%eax) c0377cd1: f0 ff 00 lock incl (%eax)
c0377cd4: 7e 0f jle c0377ce5 <.text.lock.mutex+0x7> c0377cd4: 7e 0f jle c0377ce5 <.text..lock.mutex+0x7>
c0377cd6: c3 ret c0377cd6: c3 ret
- 'struct mutex' semantics are well-defined and are enforced if - 'struct mutex' semantics are well-defined and are enforced if

View File

@ -2,7 +2,7 @@
obj- := dummy.o obj- := dummy.o
# List of programs to build # List of programs to build
hostprogs-y := hpet_example hostprogs-$(CONFIG_X86) := hpet_example
# Tell kbuild to always build the programs # Tell kbuild to always build the programs
always := $(hostprogs-y) always := $(hostprogs-y)

View File

@ -176,5 +176,6 @@
175 -> Leadtek Winfast DTV1000S [107d:6655] 175 -> Leadtek Winfast DTV1000S [107d:6655]
176 -> Beholder BeholdTV 505 RDS [0000:5051] 176 -> Beholder BeholdTV 505 RDS [0000:5051]
177 -> Hawell HW-404M7 177 -> Hawell HW-404M7
179 -> Beholder BeholdTV H7 [5ace:7190] 178 -> Beholder BeholdTV H7 [5ace:7190]
180 -> Beholder BeholdTV A7 [5ace:7090] 179 -> Beholder BeholdTV A7 [5ace:7090]
180 -> Avermedia M733A [1461:4155,1461:4255]

View File

@ -290,6 +290,7 @@ sonixb 0c45:602e Genius VideoCam Messenger
sonixj 0c45:6040 Speed NVC 350K sonixj 0c45:6040 Speed NVC 350K
sonixj 0c45:607c Sonix sn9c102p Hv7131R sonixj 0c45:607c Sonix sn9c102p Hv7131R
sonixj 0c45:60c0 Sangha Sn535 sonixj 0c45:60c0 Sangha Sn535
sonixj 0c45:60ce USB-PC-Camera-168 (TALK-5067)
sonixj 0c45:60ec SN9C105+MO4000 sonixj 0c45:60ec SN9C105+MO4000
sonixj 0c45:60fb Surfer NoName sonixj 0c45:60fb Surfer NoName
sonixj 0c45:60fc LG-LIC300 sonixj 0c45:60fc LG-LIC300

View File

@ -1731,7 +1731,7 @@ S: Maintained
F: sound/pci/cs5535audio/ F: sound/pci/cs5535audio/
CX18 VIDEO4LINUX DRIVER CX18 VIDEO4LINUX DRIVER
M: Andy Walls <awalls@radix.net> M: Andy Walls <awalls@md.metrocast.net>
L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
@ -2978,7 +2978,6 @@ F: drivers/net/ixgb/
F: drivers/net/ixgbe/ F: drivers/net/ixgbe/
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
M: Zhu Yi <yi.zhu@intel.com>
M: Reinette Chatre <reinette.chatre@intel.com> M: Reinette Chatre <reinette.chatre@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com> M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
@ -2988,7 +2987,6 @@ F: Documentation/networking/README.ipw2100
F: drivers/net/wireless/ipw2x00/ipw2100.* F: drivers/net/wireless/ipw2x00/ipw2100.*
INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
M: Zhu Yi <yi.zhu@intel.com>
M: Reinette Chatre <reinette.chatre@intel.com> M: Reinette Chatre <reinette.chatre@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com> M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
@ -3019,8 +3017,8 @@ F: drivers/net/wimax/i2400m/
F: include/linux/wimax/i2400m.h F: include/linux/wimax/i2400m.h
INTEL WIRELESS WIFI LINK (iwlwifi) INTEL WIRELESS WIFI LINK (iwlwifi)
M: Zhu Yi <yi.zhu@intel.com>
M: Reinette Chatre <reinette.chatre@intel.com> M: Reinette Chatre <reinette.chatre@intel.com>
M: Wey-Yi Guy <wey-yi.w.guy@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com> M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
W: http://intellinuxwireless.org W: http://intellinuxwireless.org
@ -3030,7 +3028,6 @@ F: drivers/net/wireless/iwlwifi/
INTEL WIRELESS MULTICOMM 3200 WIFI (iwmc3200wifi) INTEL WIRELESS MULTICOMM 3200 WIFI (iwmc3200wifi)
M: Samuel Ortiz <samuel.ortiz@intel.com> M: Samuel Ortiz <samuel.ortiz@intel.com>
M: Zhu Yi <yi.zhu@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com> M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
S: Supported S: Supported
@ -3165,7 +3162,7 @@ F: Documentation/hwmon/it87
F: drivers/hwmon/it87.c F: drivers/hwmon/it87.c
IVTV VIDEO4LINUX DRIVER IVTV VIDEO4LINUX DRIVER
M: Andy Walls <awalls@radix.net> M: Andy Walls <awalls@md.metrocast.net>
L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
@ -3242,7 +3239,7 @@ L: autofs@linux.kernel.org
S: Maintained S: Maintained
F: fs/autofs4/ F: fs/autofs4/
KERNEL BUILD KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
M: Michal Marek <mmarek@suse.cz> M: Michal Marek <mmarek@suse.cz>
T: git git://repo.or.cz/linux-kbuild.git for-next T: git git://repo.or.cz/linux-kbuild.git for-next
T: git git://repo.or.cz/linux-kbuild.git for-linus T: git git://repo.or.cz/linux-kbuild.git for-linus
@ -3251,6 +3248,9 @@ S: Maintained
F: Documentation/kbuild/ F: Documentation/kbuild/
F: Makefile F: Makefile
F: scripts/Makefile.* F: scripts/Makefile.*
F: scripts/basic/
F: scripts/mk*
F: scripts/package/
KERNEL JANITORS KERNEL JANITORS
L: kernel-janitors@vger.kernel.org L: kernel-janitors@vger.kernel.org
@ -3500,9 +3500,8 @@ F: arch/powerpc/platforms/83xx/
LINUX FOR POWERPC PA SEMI PWRFICIENT LINUX FOR POWERPC PA SEMI PWRFICIENT
M: Olof Johansson <olof@lixom.net> M: Olof Johansson <olof@lixom.net>
W: http://www.pasemi.com/
L: linuxppc-dev@ozlabs.org L: linuxppc-dev@ozlabs.org
S: Supported S: Maintained
F: arch/powerpc/platforms/pasemi/ F: arch/powerpc/platforms/pasemi/
F: drivers/*/*pasemi* F: drivers/*/*pasemi*
F: drivers/*/*/*pasemi* F: drivers/*/*/*pasemi*

View File

@ -1,7 +1,7 @@
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 35 SUBLEVEL = 35
EXTRAVERSION = -rc1 EXTRAVERSION = -rc3
NAME = Sheep on Meth NAME = Sheep on Meth
# *DOCUMENTATION* # *DOCUMENTATION*
@ -183,11 +183,14 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
# CROSS_COMPILE can be set on the command line # CROSS_COMPILE can be set on the command line
# make CROSS_COMPILE=ia64-linux- # make CROSS_COMPILE=ia64-linux-
# Alternatively CROSS_COMPILE can be set in the environment. # Alternatively CROSS_COMPILE can be set in the environment.
# A third alternative is to store a setting in .config so that plain
# "make" in the configured kernel build directory always uses that.
# Default value for CROSS_COMPILE is not to prefix executables # Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
export KBUILD_BUILDHOST := $(SUBARCH) export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH) ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= CROSS_COMPILE ?=
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
# Architecture as present in compile.h # Architecture as present in compile.h
UTS_MACHINE := $(ARCH) UTS_MACHINE := $(ARCH)
@ -576,9 +579,6 @@ KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
# disable invalid "can't wrap" optimizations for signed / pointers # disable invalid "can't wrap" optimizations for signed / pointers
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
# revert to pre-gcc-4.4 behaviour of .eh_frame
KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
# conserve stack if available # conserve stack if available
KBUILD_CFLAGS += $(call cc-option,-fconserve-stack) KBUILD_CFLAGS += $(call cc-option,-fconserve-stack)
@ -882,9 +882,6 @@ $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;
PHONY += $(vmlinux-dirs) PHONY += $(vmlinux-dirs)
$(vmlinux-dirs): prepare scripts $(vmlinux-dirs): prepare scripts
$(Q)$(MAKE) $(build)=$@ $(Q)$(MAKE) $(build)=$@
ifdef CONFIG_MODULES
$(Q)$(MAKE) $(modbuiltin)=$@
endif
# Build the kernel release string # Build the kernel release string
# #
@ -907,14 +904,19 @@ endif
# $(localver) # $(localver)
# localversion* (files without backups, containing '~') # localversion* (files without backups, containing '~')
# $(CONFIG_LOCALVERSION) (from kernel config setting) # $(CONFIG_LOCALVERSION) (from kernel config setting)
# $(localver-auto) (only if CONFIG_LOCALVERSION_AUTO is set) # $(LOCALVERSION) (from make command line, if provided)
# ./scripts/setlocalversion (SCM tag, if one exists) # $(localver-extra)
# $(LOCALVERSION) (from make command line if provided) # $(scm-identifier) (unique SCM tag, if one exists)
# ./scripts/setlocalversion (only with CONFIG_LOCALVERSION_AUTO)
# .scmversion (only with CONFIG_LOCALVERSION_AUTO)
# + (only without CONFIG_LOCALVERSION_AUTO
# and without LOCALVERSION= and
# repository is at non-tagged commit)
# #
# Note how the final $(localver-auto) string is included *only* if the # For kernels without CONFIG_LOCALVERSION_AUTO compiled from an SCM that has
# kernel config option CONFIG_LOCALVERSION_AUTO is selected. Also, at the # been revised beyond a tagged commit, `+' is appended to the version string
# moment, only git is supported but other SCMs can edit the script # when not overridden by using "make LOCALVERSION=". This indicates that the
# scripts/setlocalversion and add the appropriate checks as needed. # kernel is not a vanilla release version and has been modified.
pattern = ".*/localversion[^~]*" pattern = ".*/localversion[^~]*"
string = $(shell cat /dev/null \ string = $(shell cat /dev/null \
@ -923,26 +925,32 @@ string = $(shell cat /dev/null \
localver = $(subst $(space),, $(string) \ localver = $(subst $(space),, $(string) \
$(patsubst "%",%,$(CONFIG_LOCALVERSION))) $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
# If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called # scripts/setlocalversion is called to create a unique identifier if the source
# and if the SCM is know a tag from the SCM is appended. # is managed by a known SCM and the repository has been revised since the last
# The appended tag is determined by the SCM used. # tagged (release) commit. The format of the identifier is determined by the
# SCM's implementation.
# #
# .scmversion is used when generating rpm packages so we do not loose # .scmversion is used when generating rpm packages so we do not loose
# the version information from the SCM when we do the build of the kernel # the version information from the SCM when we do the build of the kernel
# from the copied source # from the copied source
ifdef CONFIG_LOCALVERSION_AUTO
ifeq ($(wildcard .scmversion),) ifeq ($(wildcard .scmversion),)
_localver-auto = $(shell $(CONFIG_SHELL) \ scm-identifier = $(shell $(CONFIG_SHELL) \
$(srctree)/scripts/setlocalversion $(srctree)) $(srctree)/scripts/setlocalversion $(srctree))
else else
_localver-auto = $(shell cat .scmversion 2> /dev/null) scm-identifier = $(shell cat .scmversion 2> /dev/null)
endif endif
localver-auto = $(LOCALVERSION)$(_localver-auto) ifdef CONFIG_LOCALVERSION_AUTO
localver-extra = $(scm-identifier)
else
ifneq ($(scm-identifier),)
ifeq ($(LOCALVERSION),)
localver-extra = +
endif
endif
endif endif
localver-full = $(localver)$(localver-auto) localver-full = $(localver)$(LOCALVERSION)$(localver-extra)
# Store (new) KERNELRELASE string in include/config/kernel.release # Store (new) KERNELRELASE string in include/config/kernel.release
kernelrelease = $(KERNELVERSION)$(localver-full) kernelrelease = $(KERNELVERSION)$(localver-full)
@ -1087,13 +1095,18 @@ all: modules
# using awk while concatenating to the final file. # using awk while concatenating to the final file.
PHONY += modules PHONY += modules
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.builtin) > $(objtree)/modules.builtin
@$(kecho) ' Building modules, stage 2.'; @$(kecho) ' Building modules, stage 2.';
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
$(Q)$(AWK) '!x[$$0]++' $^ > $(objtree)/modules.builtin
%/modules.builtin: include/config/auto.conf
$(Q)$(MAKE) $(modbuiltin)=$*
# Target to prepare building external modules # Target to prepare building external modules
PHONY += modules_prepare PHONY += modules_prepare
@ -1247,7 +1260,9 @@ help:
@echo ' firmware_install- Install all firmware to INSTALL_FW_PATH' @echo ' firmware_install- Install all firmware to INSTALL_FW_PATH'
@echo ' (default: $$(INSTALL_MOD_PATH)/lib/firmware)' @echo ' (default: $$(INSTALL_MOD_PATH)/lib/firmware)'
@echo ' dir/ - Build all files in dir and below' @echo ' dir/ - Build all files in dir and below'
@echo ' dir/file.[ois] - Build specified target only' @echo ' dir/file.[oisS] - Build specified target only'
@echo ' dir/file.lst - Build specified mixed source/assembly target only'
@echo ' (requires a recent binutils and recent build (System.map))'
@echo ' dir/file.ko - Build module including final link' @echo ' dir/file.ko - Build module including final link'
@echo ' modules_prepare - Set up for building external modules' @echo ' modules_prepare - Set up for building external modules'
@echo ' tags/TAGS - Generate tags file for editors' @echo ' tags/TAGS - Generate tags file for editors'

View File

@ -951,8 +951,6 @@ static int sa1111_resume(struct platform_device *dev)
if (!save) if (!save)
return 0; return 0;
spin_lock_irqsave(&sachip->lock, flags);
/* /*
* Ensure that the SA1111 is still here. * Ensure that the SA1111 is still here.
* FIXME: shouldn't do this here. * FIXME: shouldn't do this here.
@ -969,6 +967,13 @@ static int sa1111_resume(struct platform_device *dev)
* First of all, wake up the chip. * First of all, wake up the chip.
*/ */
sa1111_wake(sachip); sa1111_wake(sachip);
/*
* Only lock for write ops. Also, sa1111_wake must be called with
* released spinlock!
*/
spin_lock_irqsave(&sachip->lock, flags);
sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0); sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0);
sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1); sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1);

View File

@ -17,6 +17,7 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/completion.h>
#include <mach/dma.h> #include <mach/dma.h>
#define MSM_DMOV_CHANNEL_COUNT 16 #define MSM_DMOV_CHANNEL_COUNT 16

View File

@ -32,7 +32,10 @@ void clk_disable(struct clk *clk)
} }
EXPORT_SYMBOL(clk_disable); EXPORT_SYMBOL(clk_disable);
/* We have a fixed clock alone, for now */ static struct clk clk_24 = {
.rate = 2400000,
};
static struct clk clk_48 = { static struct clk clk_48 = {
.rate = 48 * 1000 * 1000, .rate = 48 * 1000 * 1000,
}; };
@ -50,6 +53,8 @@ static struct clk clk_default;
} }
static struct clk_lookup lookups[] = { static struct clk_lookup lookups[] = {
CLK(&clk_24, "mtu0"),
CLK(&clk_24, "mtu1"),
CLK(&clk_48, "uart0"), CLK(&clk_48, "uart0"),
CLK(&clk_48, "uart1"), CLK(&clk_48, "uart1"),
CLK(&clk_default, "gpio.0"), CLK(&clk_default, "gpio.0"),
@ -59,10 +64,8 @@ static struct clk_lookup lookups[] = {
CLK(&clk_default, "rng"), CLK(&clk_default, "rng"),
}; };
static int __init clk_init(void) int __init clk_init(void)
{ {
clkdev_add_table(lookups, ARRAY_SIZE(lookups)); clkdev_add_table(lookups, ARRAY_SIZE(lookups));
return 0; return 0;
} }
arch_initcall(clk_init);

View File

@ -11,3 +11,5 @@
struct clk { struct clk {
unsigned long rate; unsigned long rate;
}; };
int __init clk_init(void);

View File

@ -31,6 +31,8 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/hardware/cache-l2x0.h> #include <asm/hardware/cache-l2x0.h>
#include "clock.h"
#define __MEM_4K_RESOURCE(x) \ #define __MEM_4K_RESOURCE(x) \
.res = {.start = (x), .end = (x) + SZ_4K - 1, .flags = IORESOURCE_MEM} .res = {.start = (x), .end = (x) + SZ_4K - 1, .flags = IORESOURCE_MEM}
@ -143,6 +145,12 @@ void __init cpu8815_init_irq(void)
/* This modified VIC cell has two register blocks, at 0 and 0x20 */ /* This modified VIC cell has two register blocks, at 0 and 0x20 */
vic_init(io_p2v(NOMADIK_IC_BASE + 0x00), IRQ_VIC_START + 0, ~0, 0); vic_init(io_p2v(NOMADIK_IC_BASE + 0x00), IRQ_VIC_START + 0, ~0, 0);
vic_init(io_p2v(NOMADIK_IC_BASE + 0x20), IRQ_VIC_START + 32, ~0, 0); vic_init(io_p2v(NOMADIK_IC_BASE + 0x20), IRQ_VIC_START + 32, ~0, 0);
/*
* Init clocks here so that they are available for system timer
* initialization.
*/
clk_init();
} }
/* /*

View File

@ -263,11 +263,11 @@ const struct matrix_keymap_data palmtc_keymap_data = {
.keymap_size = ARRAY_SIZE(palmtc_matrix_keys), .keymap_size = ARRAY_SIZE(palmtc_matrix_keys),
}; };
const static unsigned int palmtc_keypad_row_gpios[] = { static const unsigned int palmtc_keypad_row_gpios[] = {
0, 9, 10, 11 0, 9, 10, 11
}; };
const static unsigned int palmtc_keypad_col_gpios[] = { static const unsigned int palmtc_keypad_col_gpios[] = {
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 79, 80 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 79, 80
}; };

View File

@ -818,6 +818,9 @@ static struct i2c_board_info akita_i2c_board_info[] = {
.type = "max7310", .type = "max7310",
.addr = 0x18, .addr = 0x18,
.platform_data = &akita_ioexp, .platform_data = &akita_ioexp,
}, {
.type = "wm8750",
.addr = 0x1b,
}, },
}; };

View File

@ -7,4 +7,5 @@ obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o devices-db5500.o
obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o
obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o
obj-$(CONFIG_MACH_U5500) += board-u5500.o obj-$(CONFIG_MACH_U5500) += board-u5500.o
obj-$(CONFIG_SMP) += platsmp.o headsmp.o localtimer.o obj-$(CONFIG_SMP) += platsmp.o headsmp.o
obj-$(CONFIG_LOCAL_TIMERS) += localtimer.o

View File

@ -16,6 +16,7 @@
#include <asm/clkdev.h> #include <asm/clkdev.h>
#include <plat/mtu.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include "clock.h" #include "clock.h"
@ -59,6 +60,9 @@
#define PRCM_DMACLK_MGT 0x074 #define PRCM_DMACLK_MGT 0x074
#define PRCM_B2R2CLK_MGT 0x078 #define PRCM_B2R2CLK_MGT 0x078
#define PRCM_TVCLK_MGT 0x07C #define PRCM_TVCLK_MGT 0x07C
#define PRCM_TCR 0x1C8
#define PRCM_TCR_STOPPED (1 << 16)
#define PRCM_TCR_DOZE_MODE (1 << 17)
#define PRCM_UNIPROCLK_MGT 0x278 #define PRCM_UNIPROCLK_MGT 0x278
#define PRCM_SSPCLK_MGT 0x280 #define PRCM_SSPCLK_MGT 0x280
#define PRCM_RNGCLK_MGT 0x284 #define PRCM_RNGCLK_MGT 0x284
@ -120,10 +124,95 @@ void clk_disable(struct clk *clk)
} }
EXPORT_SYMBOL(clk_disable); EXPORT_SYMBOL(clk_disable);
/*
* The MTU has a separate, rather complex muxing setup
* with alternative parents (peripheral cluster or
* ULP or fixed 32768 Hz) depending on settings
*/
static unsigned long clk_mtu_get_rate(struct clk *clk)
{
void __iomem *addr = __io_address(U8500_PRCMU_BASE)
+ PRCM_TCR;
u32 tcr = readl(addr);
int mtu = (int) clk->data;
/*
* One of these is selected eventually
* TODO: Replace the constant with a reference
* to the ULP source once this is modeled.
*/
unsigned long clk32k = 32768;
unsigned long mturate;
unsigned long retclk;
/* Get the rate from the parent as a default */
if (clk->parent_periph)
mturate = clk_get_rate(clk->parent_periph);
else if (clk->parent_cluster)
mturate = clk_get_rate(clk->parent_cluster);
else
/* We need to be connected SOMEWHERE */
BUG();
/*
* Are we in doze mode?
* In this mode the parent peripheral or the fixed 32768 Hz
* clock is fed into the block.
*/
if (!(tcr & PRCM_TCR_DOZE_MODE)) {
/*
* Here we're using the clock input from the APE ULP
* clock domain. But first: are the timers stopped?
*/
if (tcr & PRCM_TCR_STOPPED) {
clk32k = 0;
mturate = 0;
} else {
/* Else default mode: 0 and 2.4 MHz */
clk32k = 0;
if (cpu_is_u5500())
/* DB5500 divides by 8 */
mturate /= 8;
else if (cpu_is_u8500ed()) {
/*
* This clocking setting must not be used
* in the ED chip, it is simply not
* connected anywhere!
*/
mturate = 0;
BUG();
} else
/*
* In this mode the ulp38m4 clock is divided
* by a factor 16, on the DB8500 typically
* 38400000 / 16 ~ 2.4 MHz.
* TODO: Replace the constant with a reference
* to the ULP source once this is modeled.
*/
mturate = 38400000 / 16;
}
}
/* Return the clock selected for this MTU */
if (tcr & (1 << mtu))
retclk = clk32k;
else
retclk = mturate;
pr_info("MTU%d clock rate: %lu Hz\n", mtu, retclk);
return retclk;
}
unsigned long clk_get_rate(struct clk *clk) unsigned long clk_get_rate(struct clk *clk)
{ {
unsigned long rate; unsigned long rate;
/*
* If there is a custom getrate callback for this clock,
* it will take precedence.
*/
if (clk->get_rate)
return clk->get_rate(clk);
if (clk->ops && clk->ops->get_rate) if (clk->ops && clk->ops->get_rate)
return clk->ops->get_rate(clk); return clk->ops->get_rate(clk);
@ -341,8 +430,9 @@ static DEFINE_PRCC_CLK(5, usb_v1, 0, 0, NULL);
/* Peripheral Cluster #6 */ /* Peripheral Cluster #6 */
static DEFINE_PRCC_CLK(6, mtu1_v1, 8, -1, NULL); /* MTU ID in data */
static DEFINE_PRCC_CLK(6, mtu0_v1, 7, -1, NULL); static DEFINE_PRCC_CLK_CUSTOM(6, mtu1_v1, 8, -1, NULL, clk_mtu_get_rate, 1);
static DEFINE_PRCC_CLK_CUSTOM(6, mtu0_v1, 7, -1, NULL, clk_mtu_get_rate, 0);
static DEFINE_PRCC_CLK(6, cfgreg_v1, 6, 6, NULL); static DEFINE_PRCC_CLK(6, cfgreg_v1, 6, 6, NULL);
static DEFINE_PRCC_CLK(6, dmc_ed, 6, 6, NULL); static DEFINE_PRCC_CLK(6, dmc_ed, 6, 6, NULL);
static DEFINE_PRCC_CLK(6, hash1, 5, -1, NULL); static DEFINE_PRCC_CLK(6, hash1, 5, -1, NULL);
@ -357,8 +447,9 @@ static DEFINE_PRCC_CLK(6, rng_v1, 0, 0, &clk_rngclk);
/* Peripheral Cluster #7 */ /* Peripheral Cluster #7 */
static DEFINE_PRCC_CLK(7, tzpc0_ed, 4, -1, NULL); static DEFINE_PRCC_CLK(7, tzpc0_ed, 4, -1, NULL);
static DEFINE_PRCC_CLK(7, mtu1_ed, 3, -1, NULL); /* MTU ID in data */
static DEFINE_PRCC_CLK(7, mtu0_ed, 2, -1, NULL); static DEFINE_PRCC_CLK_CUSTOM(7, mtu1_ed, 3, -1, NULL, clk_mtu_get_rate, 1);
static DEFINE_PRCC_CLK_CUSTOM(7, mtu0_ed, 2, -1, NULL, clk_mtu_get_rate, 0);
static DEFINE_PRCC_CLK(7, wdg_ed, 1, -1, NULL); static DEFINE_PRCC_CLK(7, wdg_ed, 1, -1, NULL);
static DEFINE_PRCC_CLK(7, cfgreg_ed, 0, -1, NULL); static DEFINE_PRCC_CLK(7, cfgreg_ed, 0, -1, NULL);
@ -503,15 +594,17 @@ static struct clk_lookup u8500_v1_clks[] = {
CLK(uiccclk, "uicc", NULL), CLK(uiccclk, "uicc", NULL),
}; };
static int __init clk_init(void) int __init clk_init(void)
{ {
if (cpu_is_u8500ed()) { if (cpu_is_u8500ed()) {
clk_prcmu_ops.enable = clk_prcmu_ed_enable; clk_prcmu_ops.enable = clk_prcmu_ed_enable;
clk_prcmu_ops.disable = clk_prcmu_ed_disable; clk_prcmu_ops.disable = clk_prcmu_ed_disable;
clk_per6clk.rate = 100000000;
} else if (cpu_is_u5500()) { } else if (cpu_is_u5500()) {
/* Clock tree for U5500 not implemented yet */ /* Clock tree for U5500 not implemented yet */
clk_prcc_ops.enable = clk_prcc_ops.disable = NULL; clk_prcc_ops.enable = clk_prcc_ops.disable = NULL;
clk_prcmu_ops.enable = clk_prcmu_ops.disable = NULL; clk_prcmu_ops.enable = clk_prcmu_ops.disable = NULL;
clk_per6clk.rate = 26000000;
} }
clkdev_add_table(u8500_common_clks, ARRAY_SIZE(u8500_common_clks)); clkdev_add_table(u8500_common_clks, ARRAY_SIZE(u8500_common_clks));
@ -522,4 +615,3 @@ static int __init clk_init(void)
return 0; return 0;
} }
arch_initcall(clk_init);

View File

@ -28,6 +28,9 @@ struct clkops {
* @ops: pointer to clkops struct used to control this clock * @ops: pointer to clkops struct used to control this clock
* @name: name, for debugging * @name: name, for debugging
* @enabled: refcount. positive if enabled, zero if disabled * @enabled: refcount. positive if enabled, zero if disabled
* @get_rate: custom callback for getting the clock rate
* @data: custom per-clock data for example for the get_rate
* callback
* @rate: fixed rate for clocks which don't implement * @rate: fixed rate for clocks which don't implement
* ops->getrate * ops->getrate
* @prcmu_cg_off: address offset of the combined enable/disable register * @prcmu_cg_off: address offset of the combined enable/disable register
@ -67,6 +70,8 @@ struct clk {
const struct clkops *ops; const struct clkops *ops;
const char *name; const char *name;
unsigned int enabled; unsigned int enabled;
unsigned long (*get_rate)(struct clk *);
void *data;
unsigned long rate; unsigned long rate;
struct list_head list; struct list_head list;
@ -117,9 +122,26 @@ struct clk clk_##_name = { \
.parent_periph = _kernclk \ .parent_periph = _kernclk \
} }
#define DEFINE_PRCC_CLK_CUSTOM(_pclust, _name, _bus_en, _kernel_en, _kernclk, _callback, _data) \
struct clk clk_##_name = { \
.name = #_name, \
.ops = &clk_prcc_ops, \
.cluster = _pclust, \
.prcc_bus = _bus_en, \
.prcc_kernel = _kernel_en, \
.parent_cluster = &clk_per##_pclust##clk, \
.parent_periph = _kernclk, \
.get_rate = _callback, \
.data = (void *) _data \
}
#define CLK(_clk, _devname, _conname) \ #define CLK(_clk, _devname, _conname) \
{ \ { \
.clk = &clk_##_clk, \ .clk = &clk_##_clk, \
.dev_id = _devname, \ .dev_id = _devname, \
.con_id = _conname, \ .con_id = _conname, \
} }
int __init clk_db8500_ed_fixup(void);
int __init clk_init(void);

View File

@ -62,6 +62,12 @@ void __init ux500_init_irq(void)
{ {
gic_dist_init(0, __io_address(UX500_GIC_DIST_BASE), 29); gic_dist_init(0, __io_address(UX500_GIC_DIST_BASE), 29);
gic_cpu_init(0, __io_address(UX500_GIC_CPU_BASE)); gic_cpu_init(0, __io_address(UX500_GIC_CPU_BASE));
/*
* Init clocks here so that they are available for system timer
* initialization.
*/
clk_init();
} }
#ifdef CONFIG_CACHE_L2X0 #ifdef CONFIG_CACHE_L2X0

View File

@ -18,7 +18,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom)
{ {
asm("\ asm("\
stmfd sp!, {r4-r9, lr} \n\ stmfd sp!, {r4-r9, lr} \n\
mov ip, %0 \n\ mov ip, %2 \n\
1: mov lr, r1 \n\ 1: mov lr, r1 \n\
ldmia r1!, {r2 - r9} \n\ ldmia r1!, {r2 - r9} \n\
pld [lr, #32] \n\ pld [lr, #32] \n\
@ -64,7 +64,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom)
mcr p15, 0, ip, c7, c10, 4 @ drain WB\n\ mcr p15, 0, ip, c7, c10, 4 @ drain WB\n\
ldmfd sp!, {r4-r9, pc}" ldmfd sp!, {r4-r9, pc}"
: :
: "I" (PAGE_SIZE)); : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE));
} }
void feroceon_copy_user_highpage(struct page *to, struct page *from, void feroceon_copy_user_highpage(struct page *to, struct page *from,

View File

@ -27,7 +27,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom)
{ {
asm("\ asm("\
stmfd sp!, {r4, lr} @ 2\n\ stmfd sp!, {r4, lr} @ 2\n\
mov r2, %0 @ 1\n\ mov r2, %2 @ 1\n\
ldmia r1!, {r3, r4, ip, lr} @ 4\n\ ldmia r1!, {r3, r4, ip, lr} @ 4\n\
1: mcr p15, 0, r0, c7, c6, 1 @ 1 invalidate D line\n\ 1: mcr p15, 0, r0, c7, c6, 1 @ 1 invalidate D line\n\
stmia r0!, {r3, r4, ip, lr} @ 4\n\ stmia r0!, {r3, r4, ip, lr} @ 4\n\
@ -44,7 +44,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom)
mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB\n\ mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB\n\
ldmfd sp!, {r4, pc} @ 3" ldmfd sp!, {r4, pc} @ 3"
: :
: "I" (PAGE_SIZE / 64)); : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64));
} }
void v4wb_copy_user_highpage(struct page *to, struct page *from, void v4wb_copy_user_highpage(struct page *to, struct page *from,

View File

@ -25,7 +25,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom)
{ {
asm("\ asm("\
stmfd sp!, {r4, lr} @ 2\n\ stmfd sp!, {r4, lr} @ 2\n\
mov r2, %0 @ 1\n\ mov r2, %2 @ 1\n\
ldmia r1!, {r3, r4, ip, lr} @ 4\n\ ldmia r1!, {r3, r4, ip, lr} @ 4\n\
1: stmia r0!, {r3, r4, ip, lr} @ 4\n\ 1: stmia r0!, {r3, r4, ip, lr} @ 4\n\
ldmia r1!, {r3, r4, ip, lr} @ 4+1\n\ ldmia r1!, {r3, r4, ip, lr} @ 4+1\n\
@ -40,7 +40,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom)
mcr p15, 0, r2, c7, c7, 0 @ flush ID cache\n\ mcr p15, 0, r2, c7, c7, 0 @ flush ID cache\n\
ldmfd sp!, {r4, pc} @ 3" ldmfd sp!, {r4, pc} @ 3"
: :
: "I" (PAGE_SIZE / 64)); : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64));
} }
void v4wt_copy_user_highpage(struct page *to, struct page *from, void v4wt_copy_user_highpage(struct page *to, struct page *from,

View File

@ -34,7 +34,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom)
{ {
asm("\ asm("\
stmfd sp!, {r4, r5, lr} \n\ stmfd sp!, {r4, r5, lr} \n\
mov lr, %0 \n\ mov lr, %2 \n\
\n\ \n\
pld [r1, #0] \n\ pld [r1, #0] \n\
pld [r1, #32] \n\ pld [r1, #32] \n\
@ -67,7 +67,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom)
\n\ \n\
ldmfd sp!, {r4, r5, pc}" ldmfd sp!, {r4, r5, pc}"
: :
: "I" (PAGE_SIZE / 64 - 1)); : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64 - 1));
} }
void xsc3_mc_copy_user_highpage(struct page *to, struct page *from, void xsc3_mc_copy_user_highpage(struct page *to, struct page *from,

View File

@ -393,6 +393,9 @@ do_translation_fault(unsigned long addr, unsigned int fsr,
if (addr < TASK_SIZE) if (addr < TASK_SIZE)
return do_page_fault(addr, fsr, regs); return do_page_fault(addr, fsr, regs);
if (user_mode(regs))
goto bad_area;
index = pgd_index(addr); index = pgd_index(addr);
/* /*

View File

@ -48,6 +48,15 @@ void *kmap_atomic(struct page *page, enum km_type type)
debug_kmap_atomic(type); debug_kmap_atomic(type);
#ifdef CONFIG_DEBUG_HIGHMEM
/*
* There is no cache coherency issue when non VIVT, so force the
* dedicated kmap usage for better debugging purposes in that case.
*/
if (!cache_is_vivt())
kmap = NULL;
else
#endif
kmap = kmap_high_get(page); kmap = kmap_high_get(page);
if (kmap) if (kmap)
return kmap; return kmap;

View File

@ -678,10 +678,10 @@ void __init mem_init(void)
void free_initmem(void) void free_initmem(void)
{ {
#ifdef CONFIG_HAVE_TCM #ifdef CONFIG_HAVE_TCM
extern char *__tcm_start, *__tcm_end; extern char __tcm_start, __tcm_end;
totalram_pages += free_area(__phys_to_pfn(__pa(__tcm_start)), totalram_pages += free_area(__phys_to_pfn(__pa(&__tcm_start)),
__phys_to_pfn(__pa(__tcm_end)), __phys_to_pfn(__pa(&__tcm_end)),
"TCM link"); "TCM link");
#endif #endif

View File

@ -13,7 +13,9 @@
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/clk.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/err.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <plat/mtu.h> #include <plat/mtu.h>
@ -124,13 +126,25 @@ static struct irqaction nmdk_timer_irq = {
void __init nmdk_timer_init(void) void __init nmdk_timer_init(void)
{ {
unsigned long rate; unsigned long rate;
u32 cr = MTU_CRn_32BITS;; struct clk *clk0;
struct clk *clk1;
u32 cr;
clk0 = clk_get_sys("mtu0", NULL);
BUG_ON(IS_ERR(clk0));
clk1 = clk_get_sys("mtu1", NULL);
BUG_ON(IS_ERR(clk1));
clk_enable(clk0);
clk_enable(clk1);
/* /*
* Tick rate is 2.4MHz for Nomadik and 110MHz for ux500: * Tick rate is 2.4MHz for Nomadik and 110MHz for ux500:
* use a divide-by-16 counter if it's more than 16MHz * use a divide-by-16 counter if it's more than 16MHz
*/ */
rate = CLOCK_TICK_RATE; cr = MTU_CRn_32BITS;;
rate = clk_get_rate(clk0);
if (rate > 16 << 20) { if (rate > 16 << 20) {
rate /= 16; rate /= 16;
cr |= MTU_CRn_PRESCALE_16; cr |= MTU_CRn_PRESCALE_16;
@ -153,6 +167,14 @@ void __init nmdk_timer_init(void)
nmdk_clksrc.name); nmdk_clksrc.name);
/* Timer 1 is used for events, fix according to rate */ /* Timer 1 is used for events, fix according to rate */
cr = MTU_CRn_32BITS;
rate = clk_get_rate(clk1);
if (rate > 16 << 20) {
rate /= 16;
cr |= MTU_CRn_PRESCALE_16;
} else {
cr |= MTU_CRn_PRESCALE_1;
}
writel(cr | MTU_CRn_ONESHOT, mtu_base + MTU_CR(1)); /* off, currently */ writel(cr | MTU_CRn_ONESHOT, mtu_base + MTU_CR(1)); /* off, currently */
nmdk_clkevt.mult = div_sc(rate, NSEC_PER_SEC, nmdk_clkevt.shift); nmdk_clkevt.mult = div_sc(rate, NSEC_PER_SEC, nmdk_clkevt.shift);
nmdk_clkevt.max_delta_ns = nmdk_clkevt.max_delta_ns =

View File

@ -277,7 +277,7 @@ ENTRY(vfp_put_double)
#ifdef CONFIG_VFPv3 #ifdef CONFIG_VFPv3
@ d16 - d31 registers @ d16 - d31 registers
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1: mcrr p11, 3, r1, r2, c\dr @ fmdrr r1, r2, d\dr 1: mcrr p11, 3, r0, r1, c\dr @ fmdrr r0, r1, d\dr
mov pc, lr mov pc, lr
.org 1b + 8 .org 1b + 8
.endr .endr

View File

@ -19,6 +19,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/miscdevice.h> #include <linux/miscdevice.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/smp_lock.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <linux/capability.h> #include <linux/capability.h>
@ -238,9 +239,7 @@ static unsigned char days_in_mo[] =
/* ioctl that supports RTC_RD_TIME and RTC_SET_TIME (read and set time/date). */ /* ioctl that supports RTC_RD_TIME and RTC_SET_TIME (read and set time/date). */
static int static int rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg)
{ {
unsigned long flags; unsigned long flags;
@ -354,6 +353,17 @@ rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
} }
} }
static long rtc_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
int ret;
lock_kernel();
ret = rtc_ioctl(file, cmd, arg);
unlock_kernel();
return ret;
}
static void static void
print_rtc_status(void) print_rtc_status(void)
{ {
@ -376,7 +386,7 @@ print_rtc_status(void)
static const struct file_operations rtc_fops = { static const struct file_operations rtc_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ioctl = rtc_ioctl, .unlocked_ioctl = rtc_unlocked_ioctl,
}; };
/* Probe for the chip by writing something to its RAM and try reading it back. */ /* Probe for the chip by writing something to its RAM and try reading it back. */

View File

@ -27,6 +27,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/smp_lock.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/system.h> #include <asm/system.h>
@ -53,7 +54,7 @@ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */
static const unsigned char days_in_month[] = static const unsigned char days_in_month[] =
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); static long pcf8563_unlocked_ioctl(struct file *, unsigned int, unsigned long);
/* Cache VL bit value read at driver init since writing the RTC_SECOND /* Cache VL bit value read at driver init since writing the RTC_SECOND
* register clears the VL status. * register clears the VL status.
@ -62,7 +63,7 @@ static int voltage_low;
static const struct file_operations pcf8563_fops = { static const struct file_operations pcf8563_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ioctl = pcf8563_ioctl, .unlocked_ioctl = pcf8563_unlocked_ioctl,
}; };
unsigned char unsigned char
@ -212,8 +213,7 @@ pcf8563_exit(void)
* ioctl calls for this driver. Why return -ENOTTY upon error? Because * ioctl calls for this driver. Why return -ENOTTY upon error? Because
* POSIX says so! * POSIX says so!
*/ */
int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, static int pcf8563_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
unsigned long arg)
{ {
/* Some sanity checks. */ /* Some sanity checks. */
if (_IOC_TYPE(cmd) != RTC_MAGIC) if (_IOC_TYPE(cmd) != RTC_MAGIC)
@ -339,6 +339,17 @@ int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
return 0; return 0;
} }
static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int ret;
lock_kernel();
return pcf8563_ioctl(filp, cmd, arg);
unlock_kernel();
return ret;
}
static int __init pcf8563_register(void) static int __init pcf8563_register(void)
{ {
if (pcf8563_init() < 0) { if (pcf8563_init() < 0) {

View File

@ -17,8 +17,8 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#define mask_irq(irq_nr) (*R_VECT_MASK_CLR = 1 << (irq_nr)); #define crisv10_mask_irq(irq_nr) (*R_VECT_MASK_CLR = 1 << (irq_nr));
#define unmask_irq(irq_nr) (*R_VECT_MASK_SET = 1 << (irq_nr)); #define crisv10_unmask_irq(irq_nr) (*R_VECT_MASK_SET = 1 << (irq_nr));
/* don't use set_int_vector, it bypasses the linux interrupt handlers. it is /* don't use set_int_vector, it bypasses the linux interrupt handlers. it is
* global just so that the kernel gdb can use it. * global just so that the kernel gdb can use it.
@ -116,12 +116,12 @@ static unsigned int startup_crisv10_irq(unsigned int irq)
static void enable_crisv10_irq(unsigned int irq) static void enable_crisv10_irq(unsigned int irq)
{ {
unmask_irq(irq); crisv10_unmask_irq(irq);
} }
static void disable_crisv10_irq(unsigned int irq) static void disable_crisv10_irq(unsigned int irq)
{ {
mask_irq(irq); crisv10_mask_irq(irq);
} }
static void ack_crisv10_irq(unsigned int irq) static void ack_crisv10_irq(unsigned int irq)

View File

@ -1,5 +1,4 @@
/* $Id: dmacopy.c,v 1.1 2001/12/17 13:59:27 bjornw Exp $ /*
*
* memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax * memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax
*/ */
@ -14,7 +13,7 @@ void *dma_memcpy(void *pdst,
{ {
static etrax_dma_descr indma, outdma; static etrax_dma_descr indma, outdma;
D(printk("dma_memcpy %d bytes... ", pn)); D(printk(KERN_DEBUG "dma_memcpy %d bytes... ", pn));
#if 0 #if 0
*R_GEN_CONFIG = genconfig_shadow = *R_GEN_CONFIG = genconfig_shadow =
@ -33,10 +32,10 @@ void *dma_memcpy(void *pdst,
*R_DMA_CH6_CMD = IO_STATE(R_DMA_CH6_CMD, cmd, start); *R_DMA_CH6_CMD = IO_STATE(R_DMA_CH6_CMD, cmd, start);
*R_DMA_CH7_CMD = IO_STATE(R_DMA_CH7_CMD, cmd, start); *R_DMA_CH7_CMD = IO_STATE(R_DMA_CH7_CMD, cmd, start);
while(*R_DMA_CH7_CMD == 1) /* wait for completion */ ; while (*R_DMA_CH7_CMD == 1)
/* wait for completion */;
D(printk("done\n"));
D(printk(KERN_DEBUG "done\n"));
} }

View File

@ -1,6 +1,4 @@
/* /*
* $Id: hw_settings.S,v 1.1 2001/12/17 13:59:27 bjornw Exp $
*
* This table is used by some tools to extract hardware parameters. * This table is used by some tools to extract hardware parameters.
* The table should be included in the kernel and the decompressor. * The table should be included in the kernel and the decompressor.
* Don't forget to update the tools if you change this table. * Don't forget to update the tools if you change this table.

View File

@ -360,24 +360,10 @@ config ETRAX_SER4_DSR_BIT
string "Ser 4 DSR bit (empty = not used)" string "Ser 4 DSR bit (empty = not used)"
depends on ETRAX_SERIAL_PORT4 depends on ETRAX_SERIAL_PORT4
config ETRAX_SER3_CD_BIT config ETRAX_SER4_CD_BIT
string "Ser 4 CD bit (empty = not used)" string "Ser 4 CD bit (empty = not used)"
depends on ETRAX_SERIAL_PORT4 depends on ETRAX_SERIAL_PORT4
config ETRAX_RS485
bool "RS-485 support"
depends on ETRAXFS_SERIAL
help
Enables support for RS-485 serial communication. For a primer on
RS-485, see <http://www.hw.cz/english/docs/rs485/rs485.html>.
config ETRAX_RS485_DISABLE_RECEIVER
bool "Disable serial receiver"
depends on ETRAX_RS485
help
It is necessary to disable the serial receiver to avoid serial
loopback. Not all products are able to do this in software only.
config ETRAX_SYNCHRONOUS_SERIAL config ETRAX_SYNCHRONOUS_SERIAL
bool "Synchronous serial-port support" bool "Synchronous serial-port support"
depends on ETRAX_ARCH_V32 depends on ETRAX_ARCH_V32

View File

@ -649,10 +649,10 @@ i2c_release(struct inode *inode, struct file *filp)
/* Main device API. ioctl's to write or read to/from i2c registers. /* Main device API. ioctl's to write or read to/from i2c registers.
*/ */
static int static long
i2c_ioctl(struct inode *inode, struct file *file, i2c_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
unsigned int cmd, unsigned long arg)
{ {
int ret;
if(_IOC_TYPE(cmd) != ETRAXI2C_IOCTYPE) { if(_IOC_TYPE(cmd) != ETRAXI2C_IOCTYPE) {
return -ENOTTY; return -ENOTTY;
} }
@ -665,9 +665,13 @@ i2c_ioctl(struct inode *inode, struct file *file,
I2C_ARGREG(arg), I2C_ARGREG(arg),
I2C_ARGVALUE(arg))); I2C_ARGVALUE(arg)));
return i2c_writereg(I2C_ARGSLAVE(arg), lock_kernel();
ret = i2c_writereg(I2C_ARGSLAVE(arg),
I2C_ARGREG(arg), I2C_ARGREG(arg),
I2C_ARGVALUE(arg)); I2C_ARGVALUE(arg));
unlock_kernel();
return ret;
case I2C_READREG: case I2C_READREG:
{ {
unsigned char val; unsigned char val;
@ -675,7 +679,9 @@ i2c_ioctl(struct inode *inode, struct file *file,
D(printk("i2cr %d %d ", D(printk("i2cr %d %d ",
I2C_ARGSLAVE(arg), I2C_ARGSLAVE(arg),
I2C_ARGREG(arg))); I2C_ARGREG(arg)));
lock_kernel();
val = i2c_readreg(I2C_ARGSLAVE(arg), I2C_ARGREG(arg)); val = i2c_readreg(I2C_ARGSLAVE(arg), I2C_ARGREG(arg));
unlock_kernel();
D(printk("= %d\n", val)); D(printk("= %d\n", val));
return val; return val;
} }
@ -689,7 +695,7 @@ i2c_ioctl(struct inode *inode, struct file *file,
static const struct file_operations i2c_fops = { static const struct file_operations i2c_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ioctl = i2c_ioctl, .unlocked_ioctl = i2c_ioctl,
.open = i2c_open, .open = i2c_open,
.release = i2c_release, .release = i2c_release,
}; };

View File

@ -24,6 +24,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/ioctl.h> #include <linux/ioctl.h>
#include <linux/smp_lock.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <linux/mutex.h> #include <linux/mutex.h>
@ -49,7 +50,7 @@ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */
static const unsigned char days_in_month[] = static const unsigned char days_in_month[] =
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
/* Cache VL bit value read at driver init since writing the RTC_SECOND /* Cache VL bit value read at driver init since writing the RTC_SECOND
* register clears the VL status. * register clears the VL status.
@ -58,7 +59,7 @@ static int voltage_low;
static const struct file_operations pcf8563_fops = { static const struct file_operations pcf8563_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ioctl = pcf8563_ioctl .unlocked_ioctl = pcf8563_unlocked_ioctl,
}; };
unsigned char unsigned char
@ -208,8 +209,7 @@ pcf8563_exit(void)
* ioctl calls for this driver. Why return -ENOTTY upon error? Because * ioctl calls for this driver. Why return -ENOTTY upon error? Because
* POSIX says so! * POSIX says so!
*/ */
int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, static int pcf8563_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
unsigned long arg)
{ {
/* Some sanity checks. */ /* Some sanity checks. */
if (_IOC_TYPE(cmd) != RTC_MAGIC) if (_IOC_TYPE(cmd) != RTC_MAGIC)
@ -335,6 +335,17 @@ int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
return 0; return 0;
} }
static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int ret;
lock_kernel();
return pcf8563_ioctl(filp, cmd, arg);
unlock_kernel();
return ret;
}
static int __init pcf8563_register(void) static int __init pcf8563_register(void)
{ {
if (pcf8563_init() < 0) { if (pcf8563_init() < 0) {

View File

@ -24,5 +24,5 @@ EXPORT_SYMBOL(crisv32_io_get_name);
EXPORT_SYMBOL(crisv32_io_get); EXPORT_SYMBOL(crisv32_io_get);
/* Functions masking/unmasking interrupts */ /* Functions masking/unmasking interrupts */
EXPORT_SYMBOL(mask_irq); EXPORT_SYMBOL(crisv32_mask_irq);
EXPORT_SYMBOL(unmask_irq); EXPORT_SYMBOL(crisv32_unmask_irq);

View File

@ -280,8 +280,7 @@ out:
return cpu; return cpu;
} }
void void crisv32_mask_irq(int irq)
mask_irq(int irq)
{ {
int cpu; int cpu;
@ -289,8 +288,7 @@ mask_irq(int irq)
block_irq(irq, cpu); block_irq(irq, cpu);
} }
void void crisv32_unmask_irq(int irq)
unmask_irq(int irq)
{ {
unblock_irq(irq, irq_cpu(irq)); unblock_irq(irq, irq_cpu(irq));
} }
@ -298,23 +296,23 @@ unmask_irq(int irq)
static unsigned int startup_crisv32_irq(unsigned int irq) static unsigned int startup_crisv32_irq(unsigned int irq)
{ {
unmask_irq(irq); crisv32_unmask_irq(irq);
return 0; return 0;
} }
static void shutdown_crisv32_irq(unsigned int irq) static void shutdown_crisv32_irq(unsigned int irq)
{ {
mask_irq(irq); crisv32_mask_irq(irq);
} }
static void enable_crisv32_irq(unsigned int irq) static void enable_crisv32_irq(unsigned int irq)
{ {
unmask_irq(irq); crisv32_unmask_irq(irq);
} }
static void disable_crisv32_irq(unsigned int irq) static void disable_crisv32_irq(unsigned int irq)
{ {
mask_irq(irq); crisv32_mask_irq(irq);
} }
static void ack_crisv32_irq(unsigned int irq) static void ack_crisv32_irq(unsigned int irq)

View File

@ -168,8 +168,8 @@ void __init smp_callin(void)
/* Enable IRQ and idle */ /* Enable IRQ and idle */
REG_WR(intr_vect, irq_regs[cpu], rw_mask, vect_mask); REG_WR(intr_vect, irq_regs[cpu], rw_mask, vect_mask);
unmask_irq(IPI_INTR_VECT); crisv32_unmask_irq(IPI_INTR_VECT);
unmask_irq(TIMER0_INTR_VECT); crisv32_unmask_irq(TIMER0_INTR_VECT);
preempt_disable(); preempt_disable();
notify_cpu_starting(cpu); notify_cpu_starting(cpu);
local_irq_enable(); local_irq_enable();

View File

@ -93,7 +93,8 @@ void set_break_vector(int n, irqvectptr addr);
"push $r10\n\t" /* push orig_r10 */ \ "push $r10\n\t" /* push orig_r10 */ \
"clear.d [$sp=$sp-4]\n\t" /* frametype - this is a normal stackframe */ "clear.d [$sp=$sp-4]\n\t" /* frametype - this is a normal stackframe */
/* BLOCK_IRQ and UNBLOCK_IRQ do the same as mask_irq and unmask_irq */ /* BLOCK_IRQ and UNBLOCK_IRQ do the same as
* crisv10_mask_irq and crisv10_unmask_irq */
#define BLOCK_IRQ(mask,nr) \ #define BLOCK_IRQ(mask,nr) \
"move.d " #mask ",$r0\n\t" \ "move.d " #mask ",$r0\n\t" \

View File

@ -23,8 +23,8 @@ struct etrax_interrupt_vector {
extern struct etrax_interrupt_vector *etrax_irv; /* head.S */ extern struct etrax_interrupt_vector *etrax_irv; /* head.S */
void mask_irq(int irq); void crisv32_mask_irq(int irq);
void unmask_irq(int irq); void crisv32_unmask_irq(int irq);
void set_exception_vector(int n, irqvectptr addr); void set_exception_vector(int n, irqvectptr addr);

View File

@ -2,22 +2,9 @@
#define _ASMCRIS_PARAM_H #define _ASMCRIS_PARAM_H
/* Currently we assume that HZ=100 is good for CRIS. */ /* Currently we assume that HZ=100 is good for CRIS. */
#ifdef __KERNEL__
# define HZ CONFIG_HZ /* Internal kernel timer frequency */
# define USER_HZ 100 /* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ) /* like times() */
#endif
#ifndef HZ
#define HZ 100
#endif
#define EXEC_PAGESIZE 8192 #define EXEC_PAGESIZE 8192
#ifndef NOGROUP #include <asm-generic/param.h>
#define NOGROUP (-1)
#endif
#define MAXHOSTNAMELEN 64 /* max length of hostname */ #endif /* _ASMCRIS_PARAM_H */
#endif

View File

@ -21,7 +21,7 @@
# #
# the break handler has its own stack # the break handler has its own stack
# #
.section .bss.stack .section .bss..stack
.globl __break_user_context .globl __break_user_context
.balign THREAD_SIZE .balign THREAD_SIZE
__break_stack: __break_stack:
@ -63,7 +63,7 @@ __break_trace_through_exceptions:
# entry point for Break Exceptions/Interrupts # entry point for Break Exceptions/Interrupts
# #
############################################################################### ###############################################################################
.section .text.break .section .text..break
.balign 4 .balign 4
.globl __entry_break .globl __entry_break
__entry_break: __entry_break:

View File

@ -38,7 +38,7 @@
#define nr_syscalls ((syscall_table_size)/4) #define nr_syscalls ((syscall_table_size)/4)
.section .text.entry .section .text..entry
.balign 4 .balign 4
.macro LEDS val .macro LEDS val

View File

@ -1789,6 +1789,12 @@ void gdbstub(int sigval)
flush_cache = 1; flush_cache = 1;
break; break;
/* pNN: Read value of reg N and return it */
case 'p':
/* return no value, indicating that we don't support
* this command and that gdb should use 'g' instead */
break;
/* PNN,=RRRRRRRR: Write value R to reg N return OK */ /* PNN,=RRRRRRRR: Write value R to reg N return OK */
case 'P': case 'P':
ptr = &input_buffer[1]; ptr = &input_buffer[1];

View File

@ -542,7 +542,7 @@ __head_end:
.size _boot, .-_boot .size _boot, .-_boot
# provide a point for GDB to place a break # provide a point for GDB to place a break
.section .text.start,"ax" .section .text..start,"ax"
.globl _start .globl _start
.balign 4 .balign 4
_start: _start:

View File

@ -57,10 +57,10 @@ SECTIONS
_text = .; _text = .;
_stext = .; _stext = .;
.text : { .text : {
*(.text.start) *(.text..start)
*(.text.entry) *(.text..entry)
*(.text.break) *(.text..break)
*(.text.tlbmiss) *(.text..tlbmiss)
TEXT_TEXT TEXT_TEXT
SCHED_TEXT SCHED_TEXT
LOCK_TEXT LOCK_TEXT
@ -114,7 +114,7 @@ SECTIONS
.sbss : { *(.sbss .sbss.*) } .sbss : { *(.sbss .sbss.*) }
.bss : { *(.bss .bss.*) } .bss : { *(.bss .bss.*) }
.bss.stack : { *(.bss) } .bss..stack : { *(.bss) }
__bss_stop = .; __bss_stop = .;
_end = . ; _end = . ;

View File

@ -257,10 +257,10 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
*/ */
out_of_memory: out_of_memory:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
printk("VM: killing process %s\n", current->comm); if (!user_mode(__frame))
if (user_mode(__frame))
do_group_exit(SIGKILL);
goto no_context; goto no_context;
pagefault_out_of_memory();
return;
do_sigbus: do_sigbus:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);

View File

@ -15,7 +15,7 @@
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/spr-regs.h> #include <asm/spr-regs.h>
.section .text.tlbmiss .section .text..tlbmiss
.balign 4 .balign 4
.globl __entry_insn_mmu_miss .globl __entry_insn_mmu_miss

View File

@ -9,7 +9,7 @@
#define SRAM_START 0xff4000 #define SRAM_START 0xff4000
.section .text.startup .section .text..startup
.global startup .global startup
startup: startup:
mov.l #SRAM_START+0x8000, sp mov.l #SRAM_START+0x8000, sp

View File

@ -4,7 +4,7 @@ SECTIONS
{ {
__stext = . ; __stext = . ;
__text = .; __text = .;
*(.text.startup) *(.text..startup)
*(.text) *(.text)
__etext = . ; __etext = . ;
} }

View File

@ -70,12 +70,12 @@ name:
* path (ivt.S - TLB miss processing) or in places where it might not be * path (ivt.S - TLB miss processing) or in places where it might not be
* safe to use a "tpa" instruction (mca_asm.S - error recovery). * safe to use a "tpa" instruction (mca_asm.S - error recovery).
*/ */
.section ".data.patch.vtop", "a" // declare section & section attributes .section ".data..patch.vtop", "a" // declare section & section attributes
.previous .previous
#define LOAD_PHYSICAL(pr, reg, obj) \ #define LOAD_PHYSICAL(pr, reg, obj) \
[1:](pr)movl reg = obj; \ [1:](pr)movl reg = obj; \
.xdata4 ".data.patch.vtop", 1b-. .xdata4 ".data..patch.vtop", 1b-.
/* /*
* For now, we always put in the McKinley E9 workaround. On CPUs that don't need it, * For now, we always put in the McKinley E9 workaround. On CPUs that don't need it,
@ -84,11 +84,11 @@ name:
#define DO_MCKINLEY_E9_WORKAROUND #define DO_MCKINLEY_E9_WORKAROUND
#ifdef DO_MCKINLEY_E9_WORKAROUND #ifdef DO_MCKINLEY_E9_WORKAROUND
.section ".data.patch.mckinley_e9", "a" .section ".data..patch.mckinley_e9", "a"
.previous .previous
/* workaround for Itanium 2 Errata 9: */ /* workaround for Itanium 2 Errata 9: */
# define FSYS_RETURN \ # define FSYS_RETURN \
.xdata4 ".data.patch.mckinley_e9", 1f-.; \ .xdata4 ".data..patch.mckinley_e9", 1f-.; \
1:{ .mib; \ 1:{ .mib; \
nop.m 0; \ nop.m 0; \
mov r16=ar.pfs; \ mov r16=ar.pfs; \
@ -107,11 +107,11 @@ name:
* If physical stack register size is different from DEF_NUM_STACK_REG, * If physical stack register size is different from DEF_NUM_STACK_REG,
* dynamically patch the kernel for correct size. * dynamically patch the kernel for correct size.
*/ */
.section ".data.patch.phys_stack_reg", "a" .section ".data..patch.phys_stack_reg", "a"
.previous .previous
#define LOAD_PHYS_STACK_REG_SIZE(reg) \ #define LOAD_PHYS_STACK_REG_SIZE(reg) \
[1:] adds reg=IA64_NUM_PHYS_STACK_REG*8+8,r0; \ [1:] adds reg=IA64_NUM_PHYS_STACK_REG*8+8,r0; \
.xdata4 ".data.patch.phys_stack_reg", 1b-. .xdata4 ".data..patch.phys_stack_reg", 1b-.
/* /*
* Up until early 2004, use of .align within a function caused bad unwind info. * Up until early 2004, use of .align within a function caused bad unwind info.

View File

@ -24,6 +24,6 @@
# define SMP_CACHE_BYTES (1 << 3) # define SMP_CACHE_BYTES (1 << 3)
#endif #endif
#define __read_mostly __attribute__((__section__(".data.read_mostly"))) #define __read_mostly __attribute__((__section__(".data..read_mostly")))
#endif /* _ASM_IA64_CACHE_H */ #endif /* _ASM_IA64_CACHE_H */

View File

@ -31,7 +31,7 @@ extern void *per_cpu_init(void);
#endif /* SMP */ #endif /* SMP */
#define PER_CPU_BASE_SECTION ".data.percpu" #define PER_CPU_BASE_SECTION ".data..percpu"
/* /*
* Be extremely careful when taking the address of this variable! Due to virtual * Be extremely careful when taking the address of this variable! Due to virtual

View File

@ -21,7 +21,7 @@ GATECFLAGS_gate-syms.o = -r
$(obj)/gate-syms.o: $(obj)/gate.lds $(obj)/gate.o FORCE $(obj)/gate-syms.o: $(obj)/gate.lds $(obj)/gate.o FORCE
$(call if_changed,gate) $(call if_changed,gate)
# gate-data.o contains the gate DSO image as data in section .data.gate. # gate-data.o contains the gate DSO image as data in section .data..gate.
# We must build gate.so before we can assemble it. # We must build gate.so before we can assemble it.
# Note: kbuild does not track this dependency due to usage of .incbin # Note: kbuild does not track this dependency due to usage of .incbin
$(obj)/gate-data.o: $(obj)/gate.so $(obj)/gate-data.o: $(obj)/gate.so

View File

@ -1,3 +1,3 @@
.section .data.gate, "aw" .section .data..gate, "aw"
.incbin "arch/ia64/kernel/gate.so" .incbin "arch/ia64/kernel/gate.so"

View File

@ -21,18 +21,18 @@
* to targets outside the shared object) and to avoid multi-phase kernel builds, we * to targets outside the shared object) and to avoid multi-phase kernel builds, we
* simply create minimalistic "patch lists" in special ELF sections. * simply create minimalistic "patch lists" in special ELF sections.
*/ */
.section ".data.patch.fsyscall_table", "a" .section ".data..patch.fsyscall_table", "a"
.previous .previous
#define LOAD_FSYSCALL_TABLE(reg) \ #define LOAD_FSYSCALL_TABLE(reg) \
[1:] movl reg=0; \ [1:] movl reg=0; \
.xdata4 ".data.patch.fsyscall_table", 1b-. .xdata4 ".data..patch.fsyscall_table", 1b-.
.section ".data.patch.brl_fsys_bubble_down", "a" .section ".data..patch.brl_fsys_bubble_down", "a"
.previous .previous
#define BRL_COND_FSYS_BUBBLE_DOWN(pr) \ #define BRL_COND_FSYS_BUBBLE_DOWN(pr) \
[1:](pr)brl.cond.sptk 0; \ [1:](pr)brl.cond.sptk 0; \
;; \ ;; \
.xdata4 ".data.patch.brl_fsys_bubble_down", 1b-. .xdata4 ".data..patch.brl_fsys_bubble_down", 1b-.
GLOBAL_ENTRY(__kernel_syscall_via_break) GLOBAL_ENTRY(__kernel_syscall_via_break)
.prologue .prologue

View File

@ -33,21 +33,21 @@ SECTIONS
*/ */
. = GATE_ADDR + 0x600; . = GATE_ADDR + 0x600;
.data.patch : { .data..patch : {
__paravirt_start_gate_mckinley_e9_patchlist = .; __paravirt_start_gate_mckinley_e9_patchlist = .;
*(.data.patch.mckinley_e9) *(.data..patch.mckinley_e9)
__paravirt_end_gate_mckinley_e9_patchlist = .; __paravirt_end_gate_mckinley_e9_patchlist = .;
__paravirt_start_gate_vtop_patchlist = .; __paravirt_start_gate_vtop_patchlist = .;
*(.data.patch.vtop) *(.data..patch.vtop)
__paravirt_end_gate_vtop_patchlist = .; __paravirt_end_gate_vtop_patchlist = .;
__paravirt_start_gate_fsyscall_patchlist = .; __paravirt_start_gate_fsyscall_patchlist = .;
*(.data.patch.fsyscall_table) *(.data..patch.fsyscall_table)
__paravirt_end_gate_fsyscall_patchlist = .; __paravirt_end_gate_fsyscall_patchlist = .;
__paravirt_start_gate_brl_fsys_bubble_down_patchlist = .; __paravirt_start_gate_brl_fsys_bubble_down_patchlist = .;
*(.data.patch.brl_fsys_bubble_down) *(.data..patch.brl_fsys_bubble_down)
__paravirt_end_gate_brl_fsys_bubble_down_patchlist = .; __paravirt_end_gate_brl_fsys_bubble_down_patchlist = .;
} :readable } :readable

View File

@ -23,7 +23,7 @@ static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
* Initial task structure. * Initial task structure.
* *
* We need to make sure that this is properly aligned due to the way process stacks are * We need to make sure that this is properly aligned due to the way process stacks are
* handled. This is done by having a special ".data.init_task" section... * handled. This is done by having a special ".data..init_task" section...
*/ */
#define init_thread_info init_task_mem.s.thread_info #define init_thread_info init_task_mem.s.thread_info

View File

@ -82,7 +82,7 @@
mov r19=n;; /* prepare to save predicates */ \ mov r19=n;; /* prepare to save predicates */ \
br.sptk.many dispatch_to_fault_handler br.sptk.many dispatch_to_fault_handler
.section .text.ivt,"ax" .section .text..ivt,"ax"
.align 32768 // align on 32KB boundary .align 32768 // align on 32KB boundary
.global ia64_ivt .global ia64_ivt

View File

@ -16,7 +16,7 @@
#define ACCOUNT_SYS_ENTER #define ACCOUNT_SYS_ENTER
#endif #endif
.section ".data.patch.rse", "a" .section ".data..patch.rse", "a"
.previous .previous
/* /*
@ -215,7 +215,7 @@
(pUStk) extr.u r17=r18,3,6; \ (pUStk) extr.u r17=r18,3,6; \
(pUStk) sub r16=r18,r22; \ (pUStk) sub r16=r18,r22; \
[1:](pKStk) br.cond.sptk.many 1f; \ [1:](pKStk) br.cond.sptk.many 1f; \
.xdata4 ".data.patch.rse",1b-. \ .xdata4 ".data..patch.rse",1b-. \
;; \ ;; \
cmp.ge p6,p7 = 33,r17; \ cmp.ge p6,p7 = 33,r17; \
;; \ ;; \

View File

@ -28,7 +28,7 @@
#include "entry.h" #include "entry.h"
#define DATA8(sym, init_value) \ #define DATA8(sym, init_value) \
.pushsection .data.read_mostly ; \ .pushsection .data..read_mostly ; \
.align 8 ; \ .align 8 ; \
.global sym ; \ .global sym ; \
sym: ; \ sym: ; \

View File

@ -8,7 +8,7 @@
#define IVT_TEXT \ #define IVT_TEXT \
VMLINUX_SYMBOL(__start_ivt_text) = .; \ VMLINUX_SYMBOL(__start_ivt_text) = .; \
*(.text.ivt) \ *(.text..ivt) \
VMLINUX_SYMBOL(__end_ivt_text) = .; VMLINUX_SYMBOL(__end_ivt_text) = .;
OUTPUT_FORMAT("elf64-ia64-little") OUTPUT_FORMAT("elf64-ia64-little")
@ -54,8 +54,8 @@ SECTIONS
.text2 : AT(ADDR(.text2) - LOAD_OFFSET) .text2 : AT(ADDR(.text2) - LOAD_OFFSET)
{ *(.text2) } { *(.text2) }
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
.text.lock : AT(ADDR(.text.lock) - LOAD_OFFSET) .text..lock : AT(ADDR(.text..lock) - LOAD_OFFSET)
{ *(.text.lock) } { *(.text..lock) }
#endif #endif
_etext = .; _etext = .;
@ -75,10 +75,10 @@ SECTIONS
__stop___mca_table = .; __stop___mca_table = .;
} }
.data.patch.phys_stack_reg : AT(ADDR(.data.patch.phys_stack_reg) - LOAD_OFFSET) .data..patch.phys_stack_reg : AT(ADDR(.data..patch.phys_stack_reg) - LOAD_OFFSET)
{ {
__start___phys_stack_reg_patchlist = .; __start___phys_stack_reg_patchlist = .;
*(.data.patch.phys_stack_reg) *(.data..patch.phys_stack_reg)
__end___phys_stack_reg_patchlist = .; __end___phys_stack_reg_patchlist = .;
} }
@ -110,24 +110,24 @@ SECTIONS
INIT_TEXT_SECTION(PAGE_SIZE) INIT_TEXT_SECTION(PAGE_SIZE)
INIT_DATA_SECTION(16) INIT_DATA_SECTION(16)
.data.patch.vtop : AT(ADDR(.data.patch.vtop) - LOAD_OFFSET) .data..patch.vtop : AT(ADDR(.data..patch.vtop) - LOAD_OFFSET)
{ {
__start___vtop_patchlist = .; __start___vtop_patchlist = .;
*(.data.patch.vtop) *(.data..patch.vtop)
__end___vtop_patchlist = .; __end___vtop_patchlist = .;
} }
.data.patch.rse : AT(ADDR(.data.patch.rse) - LOAD_OFFSET) .data..patch.rse : AT(ADDR(.data..patch.rse) - LOAD_OFFSET)
{ {
__start___rse_patchlist = .; __start___rse_patchlist = .;
*(.data.patch.rse) *(.data..patch.rse)
__end___rse_patchlist = .; __end___rse_patchlist = .;
} }
.data.patch.mckinley_e9 : AT(ADDR(.data.patch.mckinley_e9) - LOAD_OFFSET) .data..patch.mckinley_e9 : AT(ADDR(.data..patch.mckinley_e9) - LOAD_OFFSET)
{ {
__start___mckinley_e9_bundles = .; __start___mckinley_e9_bundles = .;
*(.data.patch.mckinley_e9) *(.data..patch.mckinley_e9)
__end___mckinley_e9_bundles = .; __end___mckinley_e9_bundles = .;
} }
@ -175,17 +175,17 @@ SECTIONS
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
__init_end = .; __init_end = .;
.data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) .data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET)
{ {
PAGE_ALIGNED_DATA(PAGE_SIZE) PAGE_ALIGNED_DATA(PAGE_SIZE)
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
__start_gate_section = .; __start_gate_section = .;
*(.data.gate) *(.data..gate)
__stop_gate_section = .; __stop_gate_section = .;
#ifdef CONFIG_XEN #ifdef CONFIG_XEN
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
__xen_start_gate_section = .; __xen_start_gate_section = .;
*(.data.gate.xen) *(.data..gate.xen)
__xen_stop_gate_section = .; __xen_stop_gate_section = .;
#endif #endif
} }

View File

@ -144,6 +144,7 @@ int kvm_arch_hardware_enable(void *garbage)
VP_INIT_ENV : VP_INIT_ENV_INITALIZE, VP_INIT_ENV : VP_INIT_ENV_INITALIZE,
__pa(kvm_vm_buffer), KVM_VM_BUFFER_BASE, &tmp_base); __pa(kvm_vm_buffer), KVM_VM_BUFFER_BASE, &tmp_base);
if (status != 0) { if (status != 0) {
spin_unlock(&vp_lock);
printk(KERN_WARNING"kvm: Failed to Enable VT Support!!!!\n"); printk(KERN_WARNING"kvm: Failed to Enable VT Support!!!!\n");
return -EINVAL; return -EINVAL;
} }

View File

@ -104,7 +104,7 @@ GLOBAL_ENTRY(kvm_vmm_panic)
br.call.sptk.many b6=vmm_panic_handler; br.call.sptk.many b6=vmm_panic_handler;
END(kvm_vmm_panic) END(kvm_vmm_panic)
.section .text.ivt,"ax" .section .text..ivt,"ax"
.align 32768 // align on 32KB boundary .align 32768 // align on 32KB boundary
.global kvm_ia64_ivt .global kvm_ia64_ivt

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/python
# #
# Usage: unwcheck.py FILE # Usage: unwcheck.py FILE
# #

View File

@ -1,3 +1,3 @@
.section .data.gate.xen, "aw" .section .data..gate.xen, "aw"
.incbin "arch/ia64/xen/gate.so" .incbin "arch/ia64/xen/gate.so"

View File

@ -14,7 +14,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <xen/interface/elfnote.h> #include <xen/interface/elfnote.h>
.section .data.read_mostly .section .data..read_mostly
.align 8 .align 8
.global xen_domain_type .global xen_domain_type
xen_domain_type: xen_domain_type:

View File

@ -188,7 +188,6 @@ good_area:
if ((error_code & ACE_INSTRUCTION) && !(vma->vm_flags & VM_EXEC)) if ((error_code & ACE_INSTRUCTION) && !(vma->vm_flags & VM_EXEC))
goto bad_area; goto bad_area;
survive:
/* /*
* If for any reason at all we couldn't handle the fault, * If for any reason at all we couldn't handle the fault,
* make sure we exit gracefully rather than endlessly redo * make sure we exit gracefully rather than endlessly redo
@ -271,15 +270,10 @@ no_context:
*/ */
out_of_memory: out_of_memory:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
if (is_global_init(tsk)) { if (!(error_code & ACE_USERMODE))
yield();
down_read(&mm->mmap_sem);
goto survive;
}
printk("VM: killing process %s\n", tsk->comm);
if (error_code & ACE_USERMODE)
do_group_exit(SIGKILL);
goto no_context; goto no_context;
pagefault_out_of_memory();
return;
do_sigbus: do_sigbus:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);

View File

@ -57,7 +57,7 @@ SECTIONS {
.romvec : { .romvec : {
__rom_start = . ; __rom_start = . ;
_romvec = .; _romvec = .;
*(.data.initvect) *(.data..initvect)
} > romvec } > romvec
#endif #endif
@ -68,7 +68,7 @@ SECTIONS {
TEXT_TEXT TEXT_TEXT
SCHED_TEXT SCHED_TEXT
LOCK_TEXT LOCK_TEXT
*(.text.lock) *(.text..lock)
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;

View File

@ -280,7 +280,7 @@ _dprbase:
* and then overwritten as needed. * and then overwritten as needed.
*/ */
.section ".data.initvect","awx" .section ".data..initvect","awx"
.long RAMEND /* Reset: Initial Stack Pointer - 0. */ .long RAMEND /* Reset: Initial Stack Pointer - 0. */
.long _start /* Reset: Initial Program Counter - 1. */ .long _start /* Reset: Initial Program Counter - 1. */
.long buserr /* Bus Error - 2. */ .long buserr /* Bus Error - 2. */

View File

@ -291,7 +291,7 @@ _dprbase:
* and then overwritten as needed. * and then overwritten as needed.
*/ */
.section ".data.initvect","awx" .section ".data..initvect","awx"
.long RAMEND /* Reset: Initial Stack Pointer - 0. */ .long RAMEND /* Reset: Initial Stack Pointer - 0. */
.long _start /* Reset: Initial Program Counter - 1. */ .long _start /* Reset: Initial Program Counter - 1. */
.long buserr /* Bus Error - 2. */ .long buserr /* Bus Error - 2. */

View File

@ -34,6 +34,8 @@
/* MS be sure that SLAB allocates aligned objects */ /* MS be sure that SLAB allocates aligned objects */
#define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES #define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES
#define ARCH_SLAB_MINALIGN L1_CACHE_BYTES
#define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) #define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1)))
#define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1))) #define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1)))

View File

@ -90,7 +90,6 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
/* FIXME this part of code is untested */ /* FIXME this part of code is untested */
for_each_sg(sgl, sg, nents, i) { for_each_sg(sgl, sg, nents, i) {
sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev); sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev);
sg->dma_length = sg->length;
__dma_sync_page(page_to_phys(sg_page(sg)), sg->offset, __dma_sync_page(page_to_phys(sg_page(sg)), sg->offset,
sg->length, direction); sg->length, direction);
} }

View File

@ -1277,6 +1277,7 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus)
printk(KERN_WARNING "PCI: Cannot allocate resource region " printk(KERN_WARNING "PCI: Cannot allocate resource region "
"%d of PCI bridge %d, will remap\n", i, bus->number); "%d of PCI bridge %d, will remap\n", i, bus->number);
clear_resource: clear_resource:
res->start = res->end = 0;
res->flags = 0; res->flags = 0;
} }

View File

@ -1,7 +1,7 @@
#include <asm/lasat/head.h> #include <asm/lasat/head.h>
.text .text
.section .text.start, "ax" .section .text..start, "ax"
.set noreorder .set noreorder
.set mips3 .set mips3

View File

@ -4,7 +4,7 @@ SECTIONS
{ {
.text : .text :
{ {
*(.text.start) *(.text..start)
} }
/* Data in ROM */ /* Data in ROM */

View File

@ -338,11 +338,10 @@ no_context:
*/ */
out_of_memory: out_of_memory:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
monitor_signal(regs); if ((fault_code & MMUFCR_xFC_ACCESS) != MMUFCR_xFC_ACCESS_USR)
printk(KERN_ALERT "VM: killing process %s\n", tsk->comm);
if ((fault_code & MMUFCR_xFC_ACCESS) == MMUFCR_xFC_ACCESS_USR)
do_exit(SIGKILL);
goto no_context; goto no_context;
pagefault_out_of_memory();
return;
do_sigbus: do_sigbus:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);

View File

@ -117,6 +117,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list)
* Invalidate the resource to prevent * Invalidate the resource to prevent
* child resource allocations in this * child resource allocations in this
* range. */ * range. */
r->start = r->end = 0;
r->flags = 0; r->flags = 0;
} }
} }

View File

@ -28,7 +28,7 @@
#define SMP_CACHE_BYTES L1_CACHE_BYTES #define SMP_CACHE_BYTES L1_CACHE_BYTES
#define __read_mostly __attribute__((__section__(".data.read_mostly"))) #define __read_mostly __attribute__((__section__(".data..read_mostly")))
void parisc_cache_init(void); /* initializes cache-flushing */ void parisc_cache_init(void); /* initializes cache-flushing */
void disable_sr_hashing_asm(int); /* low level support for above */ void disable_sr_hashing_asm(int); /* low level support for above */

View File

@ -174,7 +174,7 @@ static inline void set_eiem(unsigned long val)
}) })
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
# define __lock_aligned __attribute__((__section__(".data.lock_aligned"))) # define __lock_aligned __attribute__((__section__(".data..lock_aligned")))
#endif #endif
#define arch_align_stack(x) (x) #define arch_align_stack(x) (x)

View File

@ -345,7 +345,7 @@ smp_slave_stext:
ENDPROC(stext) ENDPROC(stext)
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
.section .data.read_mostly .section .data..read_mostly
.align 4 .align 4
.export $global$,data .export $global$,data

View File

@ -53,11 +53,11 @@ union thread_union init_thread_union __init_task_data
* guarantee that global objects will be laid out in memory in the same order * guarantee that global objects will be laid out in memory in the same order
* as the order of declaration, so put these in different sections and use * as the order of declaration, so put these in different sections and use
* the linker script to order them. */ * the linker script to order them. */
pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data.vm0.pmd"), aligned(PAGE_SIZE))); pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data..vm0.pmd"), aligned(PAGE_SIZE)));
#endif #endif
pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data.vm0.pgd"), aligned(PAGE_SIZE))); pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data..vm0.pgd"), aligned(PAGE_SIZE)));
pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data.vm0.pte"), aligned(PAGE_SIZE))); pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data..vm0.pte"), aligned(PAGE_SIZE)));
/* /*
* Initial task structure. * Initial task structure.

View File

@ -94,8 +94,8 @@ SECTIONS
/* PA-RISC locks requires 16-byte alignment */ /* PA-RISC locks requires 16-byte alignment */
. = ALIGN(16); . = ALIGN(16);
.data.lock_aligned : { .data..lock_aligned : {
*(.data.lock_aligned) *(.data..lock_aligned)
} }
/* End of data section */ /* End of data section */
@ -105,10 +105,10 @@ SECTIONS
__bss_start = .; __bss_start = .;
/* page table entries need to be PAGE_SIZE aligned */ /* page table entries need to be PAGE_SIZE aligned */
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
.data.vmpages : { .data..vmpages : {
*(.data.vm0.pmd) *(.data..vm0.pmd)
*(.data.vm0.pgd) *(.data..vm0.pgd)
*(.data.vm0.pte) *(.data..vm0.pte)
} }
.bss : { .bss : {
*(.bss) *(.bss)

View File

@ -351,7 +351,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE
config KEXEC config KEXEC
bool "kexec system call (EXPERIMENTAL)" bool "kexec system call (EXPERIMENTAL)"
depends on PPC_BOOK3S && EXPERIMENTAL depends on (PPC_BOOK3S || (FSL_BOOKE && !SMP)) && EXPERIMENTAL
help help
kexec is a system call that implements the ability to shutdown your kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot current kernel, and to start another kernel. It is like a reboot

View File

@ -112,6 +112,11 @@ KBUILD_CFLAGS += $(call cc-option,-mspe=no)
# kernel considerably. # kernel considerably.
KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time) KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time)
# FIXME: the module load should be taught about the additional relocs
# generated by this.
# revert to pre-gcc-4.4 behaviour of .eh_frame
KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
# Never use string load/store instructions as they are # Never use string load/store instructions as they are
# often slow when they are implemented at all # often slow when they are implemented at all
KBUILD_CFLAGS += -mno-string KBUILD_CFLAGS += -mno-string

View File

@ -519,7 +519,7 @@ void ibm440ep_fixup_clocks(unsigned int sys_clk,
{ {
unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 0); unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 0);
/* serial clocks beed fixup based on int/ext */ /* serial clocks need fixup based on int/ext */
eplike_fixup_uart_clk(0, "/plb/opb/serial@ef600300", ser_clk, plb_clk); eplike_fixup_uart_clk(0, "/plb/opb/serial@ef600300", ser_clk, plb_clk);
eplike_fixup_uart_clk(1, "/plb/opb/serial@ef600400", ser_clk, plb_clk); eplike_fixup_uart_clk(1, "/plb/opb/serial@ef600400", ser_clk, plb_clk);
eplike_fixup_uart_clk(2, "/plb/opb/serial@ef600500", ser_clk, plb_clk); eplike_fixup_uart_clk(2, "/plb/opb/serial@ef600500", ser_clk, plb_clk);
@ -532,7 +532,7 @@ void ibm440gx_fixup_clocks(unsigned int sys_clk,
{ {
unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 1); unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 1);
/* serial clocks beed fixup based on int/ext */ /* serial clocks need fixup based on int/ext */
eplike_fixup_uart_clk(0, "/plb/opb/serial@40000200", ser_clk, plb_clk); eplike_fixup_uart_clk(0, "/plb/opb/serial@40000200", ser_clk, plb_clk);
eplike_fixup_uart_clk(1, "/plb/opb/serial@40000300", ser_clk, plb_clk); eplike_fixup_uart_clk(1, "/plb/opb/serial@40000300", ser_clk, plb_clk);
} }
@ -543,10 +543,10 @@ void ibm440spe_fixup_clocks(unsigned int sys_clk,
{ {
unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 1); unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 1);
/* serial clocks beed fixup based on int/ext */ /* serial clocks need fixup based on int/ext */
eplike_fixup_uart_clk(0, "/plb/opb/serial@10000200", ser_clk, plb_clk); eplike_fixup_uart_clk(0, "/plb/opb/serial@f0000200", ser_clk, plb_clk);
eplike_fixup_uart_clk(1, "/plb/opb/serial@10000300", ser_clk, plb_clk); eplike_fixup_uart_clk(1, "/plb/opb/serial@f0000300", ser_clk, plb_clk);
eplike_fixup_uart_clk(2, "/plb/opb/serial@10000600", ser_clk, plb_clk); eplike_fixup_uart_clk(2, "/plb/opb/serial@f0000600", ser_clk, plb_clk);
} }
void ibm405gp_fixup_clocks(unsigned int sys_clk, unsigned int ser_clk) void ibm405gp_fixup_clocks(unsigned int sys_clk, unsigned int ser_clk)

View File

@ -0,0 +1,447 @@
/*
* Device Tree Source for Mosaix Technologies, Inc. ICON board
*
* Copyright 2010 DENX Software Engineering, Stefan Roese <sr@denx.de>
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without
* any warranty of any kind, whether express or implied.
*/
/dts-v1/;
/ {
#address-cells = <2>;
#size-cells = <2>;
model = "mosaixtech,icon";
compatible = "mosaixtech,icon";
dcr-parent = <&{/cpus/cpu@0}>;
aliases {
ethernet0 = &EMAC0;
serial0 = &UART0;
serial1 = &UART1;
serial2 = &UART2;
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
model = "PowerPC,440SPe";
reg = <0x00000000>;
clock-frequency = <0>; /* Filled in by U-Boot */
timebase-frequency = <0>; /* Filled in by U-Boot */
i-cache-line-size = <32>;
d-cache-line-size = <32>;
i-cache-size = <32768>;
d-cache-size = <32768>;
dcr-controller;
dcr-access-method = "native";
reset-type = <2>; /* Use chip-reset */
};
};
memory {
device_type = "memory";
reg = <0x0 0x00000000 0x0 0x00000000>; /* Filled in by U-Boot */
};
UIC0: interrupt-controller0 {
compatible = "ibm,uic-440spe","ibm,uic";
interrupt-controller;
cell-index = <0>;
dcr-reg = <0x0c0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
};
UIC1: interrupt-controller1 {
compatible = "ibm,uic-440spe","ibm,uic";
interrupt-controller;
cell-index = <1>;
dcr-reg = <0x0d0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */
interrupt-parent = <&UIC0>;
};
UIC2: interrupt-controller2 {
compatible = "ibm,uic-440spe","ibm,uic";
interrupt-controller;
cell-index = <2>;
dcr-reg = <0x0e0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
interrupts = <0xa 0x4 0xb 0x4>; /* cascade */
interrupt-parent = <&UIC0>;
};
UIC3: interrupt-controller3 {
compatible = "ibm,uic-440spe","ibm,uic";
interrupt-controller;
cell-index = <3>;
dcr-reg = <0x0f0 0x009>;
#address-cells = <0>;
#size-cells = <0>;
#interrupt-cells = <2>;
interrupts = <0x10 0x4 0x11 0x4>; /* cascade */
interrupt-parent = <&UIC0>;
};
SDR0: sdr {
compatible = "ibm,sdr-440spe";
dcr-reg = <0x00e 0x002>;
};
CPR0: cpr {
compatible = "ibm,cpr-440spe";
dcr-reg = <0x00c 0x002>;
};
MQ0: mq {
compatible = "ibm,mq-440spe";
dcr-reg = <0x040 0x020>;
};
plb {
compatible = "ibm,plb-440spe", "ibm,plb-440gp", "ibm,plb4";
#address-cells = <2>;
#size-cells = <1>;
/* addr-child addr-parent size */
ranges = <0x4 0x00100000 0x4 0x00100000 0x00001000
0x4 0x00200000 0x4 0x00200000 0x00000400
0x4 0xe0000000 0x4 0xe0000000 0x20000000
0xc 0x00000000 0xc 0x00000000 0x20000000
0xd 0x00000000 0xd 0x00000000 0x80000000
0xd 0x80000000 0xd 0x80000000 0x80000000
0xe 0x00000000 0xe 0x00000000 0x80000000
0xe 0x80000000 0xe 0x80000000 0x80000000
0xf 0x00000000 0xf 0x00000000 0x80000000
0xf 0x80000000 0xf 0x80000000 0x80000000>;
clock-frequency = <0>; /* Filled in by U-Boot */
SDRAM0: sdram {
compatible = "ibm,sdram-440spe", "ibm,sdram-405gp";
dcr-reg = <0x010 0x002>;
};
MAL0: mcmal {
compatible = "ibm,mcmal-440spe", "ibm,mcmal2";
dcr-reg = <0x180 0x062>;
num-tx-chans = <2>;
num-rx-chans = <1>;
interrupt-parent = <&MAL0>;
interrupts = <0x0 0x1 0x2 0x3 0x4>;
#interrupt-cells = <1>;
#address-cells = <0>;
#size-cells = <0>;
interrupt-map = </*TXEOB*/ 0x0 &UIC1 0x6 0x4
/*RXEOB*/ 0x1 &UIC1 0x7 0x4
/*SERR*/ 0x2 &UIC1 0x1 0x4
/*TXDE*/ 0x3 &UIC1 0x2 0x4
/*RXDE*/ 0x4 &UIC1 0x3 0x4>;
};
POB0: opb {
compatible = "ibm,opb-440spe", "ibm,opb-440gp", "ibm,opb";
#address-cells = <1>;
#size-cells = <1>;
ranges = <0xe0000000 0x00000004 0xe0000000 0x20000000>;
clock-frequency = <0>; /* Filled in by U-Boot */
EBC0: ebc {
compatible = "ibm,ebc-440spe", "ibm,ebc-440gp", "ibm,ebc";
dcr-reg = <0x012 0x002>;
#address-cells = <2>;
#size-cells = <1>;
clock-frequency = <0>; /* Filled in by U-Boot */
/* ranges property is supplied by U-Boot */
interrupts = <0x5 0x1>;
interrupt-parent = <&UIC1>;
nor_flash@0,0 {
compatible = "cfi-flash";
bank-width = <2>;
reg = <0x00000000 0x00000000 0x01000000>;
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "kernel";
reg = <0x00000000 0x001e0000>;
};
partition@1e0000 {
label = "dtb";
reg = <0x001e0000 0x00020000>;
};
partition@200000 {
label = "root";
reg = <0x00200000 0x00200000>;
};
partition@400000 {
label = "user";
reg = <0x00400000 0x00b60000>;
};
partition@f60000 {
label = "env";
reg = <0x00f60000 0x00040000>;
};
partition@fa0000 {
label = "u-boot";
reg = <0x00fa0000 0x00060000>;
};
};
SysACE_CompactFlash: sysace@1,0 {
compatible = "xlnx,sysace";
interrupt-parent = <&UIC2>;
interrupts = <24 0x4>;
reg = <0x00000001 0x00000000 0x10000>;
};
};
UART0: serial@f0000200 {
device_type = "serial";
compatible = "ns16550";
reg = <0xf0000200 0x00000008>;
virtual-reg = <0xa0000200>;
clock-frequency = <0>; /* Filled in by U-Boot */
current-speed = <115200>;
interrupt-parent = <&UIC0>;
interrupts = <0x0 0x4>;
};
UART1: serial@f0000300 {
device_type = "serial";
compatible = "ns16550";
reg = <0xf0000300 0x00000008>;
virtual-reg = <0xa0000300>;
clock-frequency = <0>;
current-speed = <0>;
interrupt-parent = <&UIC0>;
interrupts = <0x1 0x4>;
};
UART2: serial@f0000600 {
device_type = "serial";
compatible = "ns16550";
reg = <0xf0000600 0x00000008>;
virtual-reg = <0xa0000600>;
clock-frequency = <0>;
current-speed = <0>;
interrupt-parent = <&UIC1>;
interrupts = <0x5 0x4>;
};
IIC0: i2c@f0000400 {
compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic";
reg = <0xf0000400 0x00000014>;
interrupt-parent = <&UIC0>;
interrupts = <0x2 0x4>;
};
IIC1: i2c@f0000500 {
compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic";
reg = <0xf0000500 0x00000014>;
interrupt-parent = <&UIC0>;
interrupts = <0x3 0x4>;
#address-cells = <1>;
#size-cells = <0>;
rtc@68 {
compatible = "stm,m41t00";
reg = <0x68>;
};
};
EMAC0: ethernet@f0000800 {
linux,network-index = <0x0>;
device_type = "network";
compatible = "ibm,emac-440spe", "ibm,emac4";
interrupt-parent = <&UIC1>;
interrupts = <0x1c 0x4 0x1d 0x4>;
reg = <0xf0000800 0x00000074>;
local-mac-address = [000000000000];
mal-device = <&MAL0>;
mal-tx-channel = <0>;
mal-rx-channel = <0>;
cell-index = <0>;
max-frame-size = <9000>;
rx-fifo-size = <4096>;
tx-fifo-size = <2048>;
phy-mode = "gmii";
phy-map = <0x00000000>;
has-inverted-stacr-oc;
has-new-stacr-staopc;
};
};
PCIX0: pci@c0ec00000 {
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
compatible = "ibm,plb-pcix-440spe", "ibm,plb-pcix";
primary;
large-inbound-windows;
enable-msi-hole;
reg = <0x0000000c 0x0ec00000 0x00000008 /* Config space access */
0x00000000 0x00000000 0x00000000 /* no IACK cycles */
0x0000000c 0x0ed00000 0x00000004 /* Special cycles */
0x0000000c 0x0ec80000 0x00000100 /* Internal registers */
0x0000000c 0x0ec80100 0x000000fc>; /* Internal messaging registers */
/* Outbound ranges, one memory and one IO,
* later cannot be changed
*/
ranges = <0x02000000 0x00000000 0x80000000 0x0000000d 0x80000000 0x00000000 0x80000000
0x01000000 0x00000000 0x00000000 0x0000000c 0x08000000 0x00000000 0x00010000>;
/* Inbound 4GB range starting at 0 */
dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x1 0x00000000>;
/* This drives busses 0 to 0xf */
bus-range = <0x0 0xf>;
/* PCI-X interrupt (SM502) is routed to extIRQ10 (UIC1, 19) */
interrupt-map-mask = <0x0 0x0 0x0 0x0>;
interrupt-map = <0x0 0x0 0x0 0x0 &UIC1 19 0x8>;
};
PCIE0: pciex@d00000000 {
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex";
primary;
port = <0x0>; /* port number */
reg = <0x0000000d 0x00000000 0x20000000 /* Config space access */
0x0000000c 0x10000000 0x00001000>; /* Registers */
dcr-reg = <0x100 0x020>;
sdr-base = <0x300>;
/* Outbound ranges, one memory and one IO,
* later cannot be changed
*/
ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x00000000 0x00000000 0x80000000
0x01000000 0x00000000 0x00000000 0x0000000f 0x80000000 0x00000000 0x00010000>;
/* Inbound 4GB range starting at 0 */
dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x1 0x00000000>;
/* This drives busses 0x10 to 0x1f */
bus-range = <0x10 0x1f>;
/* Legacy interrupts (note the weird polarity, the bridge seems
* to invert PCIe legacy interrupts).
* We are de-swizzling here because the numbers are actually for
* port of the root complex virtual P2P bridge. But I want
* to avoid putting a node for it in the tree, so the numbers
* below are basically de-swizzled numbers.
* The real slot is on idsel 0, so the swizzling is 1:1
*/
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
interrupt-map = <
0x0 0x0 0x0 0x1 &UIC3 0x0 0x4 /* swizzled int A */
0x0 0x0 0x0 0x2 &UIC3 0x1 0x4 /* swizzled int B */
0x0 0x0 0x0 0x3 &UIC3 0x2 0x4 /* swizzled int C */
0x0 0x0 0x0 0x4 &UIC3 0x3 0x4 /* swizzled int D */>;
};
PCIE1: pciex@d20000000 {
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex";
primary;
port = <0x1>; /* port number */
reg = <0x0000000d 0x20000000 0x20000000 /* Config space access */
0x0000000c 0x10001000 0x00001000>; /* Registers */
dcr-reg = <0x120 0x020>;
sdr-base = <0x340>;
/* Outbound ranges, one memory and one IO,
* later cannot be changed
*/
ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x80000000 0x00000000 0x80000000
0x01000000 0x00000000 0x00000000 0x0000000f 0x80010000 0x00000000 0x00010000>;
/* Inbound 4GB range starting at 0 */
dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x1 0x00000000>;
/* This drives busses 0x20 to 0x2f */
bus-range = <0x20 0x2f>;
/* Legacy interrupts (note the weird polarity, the bridge seems
* to invert PCIe legacy interrupts).
* We are de-swizzling here because the numbers are actually for
* port of the root complex virtual P2P bridge. But I want
* to avoid putting a node for it in the tree, so the numbers
* below are basically de-swizzled numbers.
* The real slot is on idsel 0, so the swizzling is 1:1
*/
interrupt-map-mask = <0x0 0x0 0x0 0x7>;
interrupt-map = <
0x0 0x0 0x0 0x1 &UIC3 0x4 0x4 /* swizzled int A */
0x0 0x0 0x0 0x2 &UIC3 0x5 0x4 /* swizzled int B */
0x0 0x0 0x0 0x3 &UIC3 0x6 0x4 /* swizzled int C */
0x0 0x0 0x0 0x4 &UIC3 0x7 0x4 /* swizzled int D */>;
};
I2O: i2o@400100000 {
compatible = "ibm,i2o-440spe";
reg = <0x00000004 0x00100000 0x100>;
dcr-reg = <0x060 0x020>;
};
DMA0: dma0@400100100 {
compatible = "ibm,dma-440spe";
cell-index = <0>;
reg = <0x00000004 0x00100100 0x100>;
dcr-reg = <0x060 0x020>;
interrupt-parent = <&DMA0>;
interrupts = <0 1>;
#interrupt-cells = <1>;
#address-cells = <0>;
#size-cells = <0>;
interrupt-map = <
0 &UIC0 0x14 4
1 &UIC1 0x16 4>;
};
DMA1: dma1@400100200 {
compatible = "ibm,dma-440spe";
cell-index = <1>;
reg = <0x00000004 0x00100200 0x100>;
dcr-reg = <0x060 0x020>;
interrupt-parent = <&DMA1>;
interrupts = <0 1>;
#interrupt-cells = <1>;
#address-cells = <0>;
#size-cells = <0>;
interrupt-map = <
0 &UIC0 0x16 4
1 &UIC1 0x16 4>;
};
xor-accel@400200000 {
compatible = "amcc,xor-accelerator";
reg = <0x00000004 0x00200000 0x400>;
interrupt-parent = <&UIC1>;
interrupts = <0x1f 4>;
};
};
chosen {
linux,stdout-path = "/plb/opb/serial@f0000200";
};
};

View File

@ -44,6 +44,7 @@
d-cache-size = <32768>; d-cache-size = <32768>;
dcr-controller; dcr-controller;
dcr-access-method = "native"; dcr-access-method = "native";
reset-type = <2>; /* Use chip-reset */
}; };
}; };

View File

@ -20,10 +20,8 @@
aliases { aliases {
ethernet0 = &enet0; ethernet0 = &enet0;
ethernet1 = &enet1; ethernet1 = &enet1;
/*
ethernet2 = &enet2; ethernet2 = &enet2;
ethernet3 = &enet3; ethernet3 = &enet3;
*/
serial0 = &serial0; serial0 = &serial0;
serial1 = &serial1; serial1 = &serial1;
pci0 = &pci0; pci0 = &pci0;
@ -254,7 +252,6 @@
}; };
}; };
/* eTSEC 3/4 are currently broken
enet2: ethernet@26000 { enet2: ethernet@26000 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
@ -310,7 +307,6 @@
}; };
}; };
}; };
*/
serial0: serial@4500 { serial0: serial@4500 {
cell-index = <0>; cell-index = <0>;

View File

@ -215,6 +215,18 @@
clock-frequency = <0>; clock-frequency = <0>;
}; };
msi@41600 {
compatible = "fsl,mpc8572-msi", "fsl,mpic-msi";
reg = <0x41600 0x80>;
msi-available-ranges = <0 0x80>;
interrupts = <
0xe0 0
0xe1 0
0xe2 0
0xe3 0>;
interrupt-parent = <&mpic>;
};
global-utilities@e0000 { //global utilities block global-utilities@e0000 { //global utilities block
compatible = "fsl,mpc8572-guts"; compatible = "fsl,mpc8572-guts";
reg = <0xe0000 0x1000>; reg = <0xe0000 0x1000>;
@ -243,8 +255,7 @@
protected-sources = < protected-sources = <
31 32 33 37 38 39 /* enet2 enet3 */ 31 32 33 37 38 39 /* enet2 enet3 */
76 77 78 79 26 42 /* dma2 pci2 serial*/ 76 77 78 79 26 42 /* dma2 pci2 serial*/
0xe0 0xe1 0xe2 0xe3 /* msi */ 0xe4 0xe5 0xe6 0xe7 /* msi */
0xe4 0xe5 0xe6 0xe7
>; >;
}; };
}; };

View File

@ -154,12 +154,8 @@
msi@41600 { msi@41600 {
compatible = "fsl,mpc8572-msi", "fsl,mpic-msi"; compatible = "fsl,mpc8572-msi", "fsl,mpic-msi";
reg = <0x41600 0x80>; reg = <0x41600 0x80>;
msi-available-ranges = <0 0x100>; msi-available-ranges = <0x80 0x80>;
interrupts = < interrupts = <
0xe0 0
0xe1 0
0xe2 0
0xe3 0
0xe4 0 0xe4 0
0xe5 0 0xe5 0
0xe6 0 0xe6 0
@ -190,6 +186,7 @@
0x1 0x2 0x3 0x4 /* pci slot */ 0x1 0x2 0x3 0x4 /* pci slot */
0x9 0xa 0xb 0xc /* usb */ 0x9 0xa 0xb 0xc /* usb */
0x6 0x7 0xe 0x5 /* Audio elgacy SATA */ 0x6 0x7 0xe 0x5 /* Audio elgacy SATA */
0xe0 0xe1 0xe2 0xe3 /* msi */
>; >;
}; };
}; };

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