Merge branch 'for-rmk' of git://git.marvell.com/orion into devel
This commit is contained in:
commit
7698fdedcf
264 changed files with 3622 additions and 1516 deletions
|
@ -150,6 +150,11 @@ fan[1-*]_min Fan minimum value
|
||||||
Unit: revolution/min (RPM)
|
Unit: revolution/min (RPM)
|
||||||
RW
|
RW
|
||||||
|
|
||||||
|
fan[1-*]_max Fan maximum value
|
||||||
|
Unit: revolution/min (RPM)
|
||||||
|
Only rarely supported by the hardware.
|
||||||
|
RW
|
||||||
|
|
||||||
fan[1-*]_input Fan input value.
|
fan[1-*]_input Fan input value.
|
||||||
Unit: revolution/min (RPM)
|
Unit: revolution/min (RPM)
|
||||||
RO
|
RO
|
||||||
|
@ -390,6 +395,7 @@ OR
|
||||||
in[0-*]_min_alarm
|
in[0-*]_min_alarm
|
||||||
in[0-*]_max_alarm
|
in[0-*]_max_alarm
|
||||||
fan[1-*]_min_alarm
|
fan[1-*]_min_alarm
|
||||||
|
fan[1-*]_max_alarm
|
||||||
temp[1-*]_min_alarm
|
temp[1-*]_min_alarm
|
||||||
temp[1-*]_max_alarm
|
temp[1-*]_max_alarm
|
||||||
temp[1-*]_crit_alarm
|
temp[1-*]_crit_alarm
|
||||||
|
|
|
@ -18,8 +18,12 @@ Usage
|
||||||
Anonymous finger details are sent sequentially as separate packets of ABS
|
Anonymous finger details are sent sequentially as separate packets of ABS
|
||||||
events. Only the ABS_MT events are recognized as part of a finger
|
events. Only the ABS_MT events are recognized as part of a finger
|
||||||
packet. The end of a packet is marked by calling the input_mt_sync()
|
packet. The end of a packet is marked by calling the input_mt_sync()
|
||||||
function, which generates a SYN_MT_REPORT event. The end of multi-touch
|
function, which generates a SYN_MT_REPORT event. This instructs the
|
||||||
transfer is marked by calling the usual input_sync() function.
|
receiver to accept the data for the current finger and prepare to receive
|
||||||
|
another. The end of a multi-touch transfer is marked by calling the usual
|
||||||
|
input_sync() function. This instructs the receiver to act upon events
|
||||||
|
accumulated since last EV_SYN/SYN_REPORT and prepare to receive a new
|
||||||
|
set of events/packets.
|
||||||
|
|
||||||
A set of ABS_MT events with the desired properties is defined. The events
|
A set of ABS_MT events with the desired properties is defined. The events
|
||||||
are divided into categories, to allow for partial implementation. The
|
are divided into categories, to allow for partial implementation. The
|
||||||
|
@ -27,11 +31,26 @@ minimum set consists of ABS_MT_TOUCH_MAJOR, ABS_MT_POSITION_X and
|
||||||
ABS_MT_POSITION_Y, which allows for multiple fingers to be tracked. If the
|
ABS_MT_POSITION_Y, which allows for multiple fingers to be tracked. If the
|
||||||
device supports it, the ABS_MT_WIDTH_MAJOR may be used to provide the size
|
device supports it, the ABS_MT_WIDTH_MAJOR may be used to provide the size
|
||||||
of the approaching finger. Anisotropy and direction may be specified with
|
of the approaching finger. Anisotropy and direction may be specified with
|
||||||
ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION. Devices with
|
ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION. The
|
||||||
more granular information may specify general shapes as blobs, i.e., as a
|
ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a
|
||||||
sequence of rectangular shapes grouped together by an
|
finger or a pen or something else. Devices with more granular information
|
||||||
ABS_MT_BLOB_ID. Finally, the ABS_MT_TOOL_TYPE may be used to specify
|
may specify general shapes as blobs, i.e., as a sequence of rectangular
|
||||||
whether the touching tool is a finger or a pen or something else.
|
shapes grouped together by an ABS_MT_BLOB_ID. Finally, for the few devices
|
||||||
|
that currently support it, the ABS_MT_TRACKING_ID event may be used to
|
||||||
|
report finger tracking from hardware [5].
|
||||||
|
|
||||||
|
Here is what a minimal event sequence for a two-finger touch would look
|
||||||
|
like:
|
||||||
|
|
||||||
|
ABS_MT_TOUCH_MAJOR
|
||||||
|
ABS_MT_POSITION_X
|
||||||
|
ABS_MT_POSITION_Y
|
||||||
|
SYN_MT_REPORT
|
||||||
|
ABS_MT_TOUCH_MAJOR
|
||||||
|
ABS_MT_POSITION_X
|
||||||
|
ABS_MT_POSITION_Y
|
||||||
|
SYN_MT_REPORT
|
||||||
|
SYN_REPORT
|
||||||
|
|
||||||
|
|
||||||
Event Semantics
|
Event Semantics
|
||||||
|
@ -44,24 +63,24 @@ ABS_MT_TOUCH_MAJOR
|
||||||
|
|
||||||
The length of the major axis of the contact. The length should be given in
|
The length of the major axis of the contact. The length should be given in
|
||||||
surface units. If the surface has an X times Y resolution, the largest
|
surface units. If the surface has an X times Y resolution, the largest
|
||||||
possible value of ABS_MT_TOUCH_MAJOR is sqrt(X^2 + Y^2), the diagonal.
|
possible value of ABS_MT_TOUCH_MAJOR is sqrt(X^2 + Y^2), the diagonal [4].
|
||||||
|
|
||||||
ABS_MT_TOUCH_MINOR
|
ABS_MT_TOUCH_MINOR
|
||||||
|
|
||||||
The length, in surface units, of the minor axis of the contact. If the
|
The length, in surface units, of the minor axis of the contact. If the
|
||||||
contact is circular, this event can be omitted.
|
contact is circular, this event can be omitted [4].
|
||||||
|
|
||||||
ABS_MT_WIDTH_MAJOR
|
ABS_MT_WIDTH_MAJOR
|
||||||
|
|
||||||
The length, in surface units, of the major axis of the approaching
|
The length, in surface units, of the major axis of the approaching
|
||||||
tool. This should be understood as the size of the tool itself. The
|
tool. This should be understood as the size of the tool itself. The
|
||||||
orientation of the contact and the approaching tool are assumed to be the
|
orientation of the contact and the approaching tool are assumed to be the
|
||||||
same.
|
same [4].
|
||||||
|
|
||||||
ABS_MT_WIDTH_MINOR
|
ABS_MT_WIDTH_MINOR
|
||||||
|
|
||||||
The length, in surface units, of the minor axis of the approaching
|
The length, in surface units, of the minor axis of the approaching
|
||||||
tool. Omit if circular.
|
tool. Omit if circular [4].
|
||||||
|
|
||||||
The above four values can be used to derive additional information about
|
The above four values can be used to derive additional information about
|
||||||
the contact. The ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR approximates
|
the contact. The ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR approximates
|
||||||
|
@ -70,14 +89,17 @@ different characteristic widths [1].
|
||||||
|
|
||||||
ABS_MT_ORIENTATION
|
ABS_MT_ORIENTATION
|
||||||
|
|
||||||
The orientation of the ellipse. The value should describe half a revolution
|
The orientation of the ellipse. The value should describe a signed quarter
|
||||||
clockwise around the touch center. The scale of the value is arbitrary, but
|
of a revolution clockwise around the touch center. The signed value range
|
||||||
zero should be returned for an ellipse aligned along the Y axis of the
|
is arbitrary, but zero should be returned for a finger aligned along the Y
|
||||||
surface. As an example, an index finger placed straight onto the axis could
|
axis of the surface, a negative value when finger is turned to the left, and
|
||||||
return zero orientation, something negative when twisted to the left, and
|
a positive value when finger turned to the right. When completely aligned with
|
||||||
something positive when twisted to the right. This value can be omitted if
|
the X axis, the range max should be returned. Orientation can be omitted
|
||||||
the touching object is circular, or if the information is not available in
|
if the touching object is circular, or if the information is not available
|
||||||
the kernel driver.
|
in the kernel driver. Partial orientation support is possible if the device
|
||||||
|
can distinguish between the two axis, but not (uniquely) any values in
|
||||||
|
between. In such cases, the range of ABS_MT_ORIENTATION should be [0, 1]
|
||||||
|
[4].
|
||||||
|
|
||||||
ABS_MT_POSITION_X
|
ABS_MT_POSITION_X
|
||||||
|
|
||||||
|
@ -98,8 +120,35 @@ ABS_MT_BLOB_ID
|
||||||
|
|
||||||
The BLOB_ID groups several packets together into one arbitrarily shaped
|
The BLOB_ID groups several packets together into one arbitrarily shaped
|
||||||
contact. This is a low-level anonymous grouping, and should not be confused
|
contact. This is a low-level anonymous grouping, and should not be confused
|
||||||
with the high-level contactID, explained below. Most kernel drivers will
|
with the high-level trackingID [5]. Most kernel drivers will not have blob
|
||||||
not have this capability, and can safely omit the event.
|
capability, and can safely omit the event.
|
||||||
|
|
||||||
|
ABS_MT_TRACKING_ID
|
||||||
|
|
||||||
|
The TRACKING_ID identifies an initiated contact throughout its life cycle
|
||||||
|
[5]. There are currently only a few devices that support it, so this event
|
||||||
|
should normally be omitted.
|
||||||
|
|
||||||
|
|
||||||
|
Event Computation
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The flora of different hardware unavoidably leads to some devices fitting
|
||||||
|
better to the MT protocol than others. To simplify and unify the mapping,
|
||||||
|
this section gives recipes for how to compute certain events.
|
||||||
|
|
||||||
|
For devices reporting contacts as rectangular shapes, signed orientation
|
||||||
|
cannot be obtained. Assuming X and Y are the lengths of the sides of the
|
||||||
|
touching rectangle, here is a simple formula that retains the most
|
||||||
|
information possible:
|
||||||
|
|
||||||
|
ABS_MT_TOUCH_MAJOR := max(X, Y)
|
||||||
|
ABS_MT_TOUCH_MINOR := min(X, Y)
|
||||||
|
ABS_MT_ORIENTATION := bool(X > Y)
|
||||||
|
|
||||||
|
The range of ABS_MT_ORIENTATION should be set to [0, 1], to indicate that
|
||||||
|
the device can distinguish between a finger along the Y axis (0) and a
|
||||||
|
finger along the X axis (1).
|
||||||
|
|
||||||
|
|
||||||
Finger Tracking
|
Finger Tracking
|
||||||
|
@ -109,14 +158,18 @@ The kernel driver should generate an arbitrary enumeration of the set of
|
||||||
anonymous contacts currently on the surface. The order in which the packets
|
anonymous contacts currently on the surface. The order in which the packets
|
||||||
appear in the event stream is not important.
|
appear in the event stream is not important.
|
||||||
|
|
||||||
The process of finger tracking, i.e., to assign a unique contactID to each
|
The process of finger tracking, i.e., to assign a unique trackingID to each
|
||||||
initiated contact on the surface, is left to user space; preferably the
|
initiated contact on the surface, is left to user space; preferably the
|
||||||
multi-touch X driver [3]. In that driver, the contactID stays the same and
|
multi-touch X driver [3]. In that driver, the trackingID stays the same and
|
||||||
unique until the contact vanishes (when the finger leaves the surface). The
|
unique until the contact vanishes (when the finger leaves the surface). The
|
||||||
problem of assigning a set of anonymous fingers to a set of identified
|
problem of assigning a set of anonymous fingers to a set of identified
|
||||||
fingers is a euclidian bipartite matching problem at each event update, and
|
fingers is a euclidian bipartite matching problem at each event update, and
|
||||||
relies on a sufficiently rapid update rate.
|
relies on a sufficiently rapid update rate.
|
||||||
|
|
||||||
|
There are a few devices that support trackingID in hardware. User space can
|
||||||
|
make use of these native identifiers to reduce bandwidth and cpu usage.
|
||||||
|
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -136,5 +189,7 @@ could be used to derive tilt.
|
||||||
time of writing (April 2009), the MT protocol is not yet merged, and the
|
time of writing (April 2009), the MT protocol is not yet merged, and the
|
||||||
prototype implements finger matching, basic mouse support and two-finger
|
prototype implements finger matching, basic mouse support and two-finger
|
||||||
scrolling. The project aims at improving the quality of current multi-touch
|
scrolling. The project aims at improving the quality of current multi-touch
|
||||||
functionality available in the synaptics X driver, and in addition
|
functionality available in the Synaptics X driver, and in addition
|
||||||
implement more advanced gestures.
|
implement more advanced gestures.
|
||||||
|
[4] See the section on event computation.
|
||||||
|
[5] See the section on finger tracking.
|
||||||
|
|
|
@ -1535,6 +1535,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
register save and restore. The kernel will only save
|
register save and restore. The kernel will only save
|
||||||
legacy floating-point registers on task switch.
|
legacy floating-point registers on task switch.
|
||||||
|
|
||||||
|
noxsave [BUGS=X86] Disables x86 extended register state save
|
||||||
|
and restore using xsave. The kernel will fallback to
|
||||||
|
enabling legacy floating-point and sse state.
|
||||||
|
|
||||||
nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or
|
nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or
|
||||||
wfi(ARM) instruction doesn't work correctly and not to
|
wfi(ARM) instruction doesn't work correctly and not to
|
||||||
use it. This is also useful when using JTAG debugger.
|
use it. This is also useful when using JTAG debugger.
|
||||||
|
|
|
@ -334,6 +334,7 @@ STAC9227/9228/9229/927x
|
||||||
ref-no-jd Reference board without HP/Mic jack detection
|
ref-no-jd Reference board without HP/Mic jack detection
|
||||||
3stack D965 3stack
|
3stack D965 3stack
|
||||||
5stack D965 5stack + SPDIF
|
5stack D965 5stack + SPDIF
|
||||||
|
5stack-no-fp D965 5stack without front panel
|
||||||
dell-3stack Dell Dimension E520
|
dell-3stack Dell Dimension E520
|
||||||
dell-bios Fixes with Dell BIOS setup
|
dell-bios Fixes with Dell BIOS setup
|
||||||
auto BIOS setup (default)
|
auto BIOS setup (default)
|
||||||
|
|
|
@ -104,6 +104,11 @@ card*/pcm*/xrun_debug
|
||||||
When this value is greater than 1, the driver will show the
|
When this value is greater than 1, the driver will show the
|
||||||
stack trace additionally. This may help the debugging.
|
stack trace additionally. This may help the debugging.
|
||||||
|
|
||||||
|
Since 2.6.30, this option also enables the hwptr check using
|
||||||
|
jiffies. This detects spontaneous invalid pointer callback
|
||||||
|
values, but can be lead to too much corrections for a (mostly
|
||||||
|
buggy) hardware that doesn't give smooth pointer updates.
|
||||||
|
|
||||||
card*/pcm*/sub*/info
|
card*/pcm*/sub*/info
|
||||||
The general information of this PCM sub-stream.
|
The general information of this PCM sub-stream.
|
||||||
|
|
||||||
|
|
33
MAINTAINERS
33
MAINTAINERS
|
@ -434,7 +434,7 @@ F: arch/alpha/
|
||||||
|
|
||||||
AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER
|
AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER
|
||||||
P: Thomas Dahlmann
|
P: Thomas Dahlmann
|
||||||
M: thomas.dahlmann@amd.com
|
M: dahlmann.thomas@arcor.de
|
||||||
L: linux-geode@lists.infradead.org (moderated for non-subscribers)
|
L: linux-geode@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/usb/gadget/amd5536udc.*
|
F: drivers/usb/gadget/amd5536udc.*
|
||||||
|
@ -624,6 +624,7 @@ M: paulius.zaleckas@teltonika.lt
|
||||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||||
T: git git://gitorious.org/linux-gemini/mainline.git
|
T: git git://gitorious.org/linux-gemini/mainline.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: arch/arm/mach-gemini/
|
||||||
|
|
||||||
ARM/EBSA110 MACHINE SUPPORT
|
ARM/EBSA110 MACHINE SUPPORT
|
||||||
P: Russell King
|
P: Russell King
|
||||||
|
@ -650,6 +651,7 @@ P: Paulius Zaleckas
|
||||||
M: paulius.zaleckas@teltonika.lt
|
M: paulius.zaleckas@teltonika.lt
|
||||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
F: arch/arm/mm/*-fa*
|
||||||
|
|
||||||
ARM/FOOTBRIDGE ARCHITECTURE
|
ARM/FOOTBRIDGE ARCHITECTURE
|
||||||
P: Russell King
|
P: Russell King
|
||||||
|
@ -1132,17 +1134,17 @@ F: fs/bfs/
|
||||||
F: include/linux/bfs_fs.h
|
F: include/linux/bfs_fs.h
|
||||||
|
|
||||||
BLACKFIN ARCHITECTURE
|
BLACKFIN ARCHITECTURE
|
||||||
P: Bryan Wu
|
P: Mike Frysinger
|
||||||
M: cooloney@kernel.org
|
M: vapier@gentoo.org
|
||||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||||
W: http://blackfin.uclinux.org
|
W: http://blackfin.uclinux.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/blackfin/
|
F: arch/blackfin/
|
||||||
|
|
||||||
BLACKFIN EMAC DRIVER
|
BLACKFIN EMAC DRIVER
|
||||||
P: Bryan Wu
|
P: Michael Hennerich
|
||||||
M: cooloney@kernel.org
|
M: michael.hennerich@analog.com
|
||||||
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||||
W: http://blackfin.uclinux.org
|
W: http://blackfin.uclinux.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/net/bfin_mac.*
|
F: drivers/net/bfin_mac.*
|
||||||
|
@ -1150,7 +1152,7 @@ F: drivers/net/bfin_mac.*
|
||||||
BLACKFIN RTC DRIVER
|
BLACKFIN RTC DRIVER
|
||||||
P: Mike Frysinger
|
P: Mike Frysinger
|
||||||
M: vapier.adi@gmail.com
|
M: vapier.adi@gmail.com
|
||||||
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||||
W: http://blackfin.uclinux.org
|
W: http://blackfin.uclinux.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/rtc/rtc-bfin.c
|
F: drivers/rtc/rtc-bfin.c
|
||||||
|
@ -1158,7 +1160,7 @@ F: drivers/rtc/rtc-bfin.c
|
||||||
BLACKFIN SERIAL DRIVER
|
BLACKFIN SERIAL DRIVER
|
||||||
P: Sonic Zhang
|
P: Sonic Zhang
|
||||||
M: sonic.zhang@analog.com
|
M: sonic.zhang@analog.com
|
||||||
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||||
W: http://blackfin.uclinux.org
|
W: http://blackfin.uclinux.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/serial/bfin_5xx.c
|
F: drivers/serial/bfin_5xx.c
|
||||||
|
@ -1166,7 +1168,7 @@ F: drivers/serial/bfin_5xx.c
|
||||||
BLACKFIN WATCHDOG DRIVER
|
BLACKFIN WATCHDOG DRIVER
|
||||||
P: Mike Frysinger
|
P: Mike Frysinger
|
||||||
M: vapier.adi@gmail.com
|
M: vapier.adi@gmail.com
|
||||||
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||||
W: http://blackfin.uclinux.org
|
W: http://blackfin.uclinux.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/watchdog/bfin_wdt.c
|
F: drivers/watchdog/bfin_wdt.c
|
||||||
|
@ -1174,7 +1176,7 @@ F: drivers/watchdog/bfin_wdt.c
|
||||||
BLACKFIN I2C TWI DRIVER
|
BLACKFIN I2C TWI DRIVER
|
||||||
P: Sonic Zhang
|
P: Sonic Zhang
|
||||||
M: sonic.zhang@analog.com
|
M: sonic.zhang@analog.com
|
||||||
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||||
W: http://blackfin.uclinux.org/
|
W: http://blackfin.uclinux.org/
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/i2c/busses/i2c-bfin-twi.c
|
F: drivers/i2c/busses/i2c-bfin-twi.c
|
||||||
|
@ -1540,6 +1542,13 @@ W: http://www.fi.muni.cz/~kas/cosa/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/wan/cosa*
|
F: drivers/net/wan/cosa*
|
||||||
|
|
||||||
|
CPMAC ETHERNET DRIVER
|
||||||
|
P: Florian Fainelli
|
||||||
|
M: florian@openwrt.org
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/net/cpmac.c
|
||||||
|
|
||||||
CPU FREQUENCY DRIVERS
|
CPU FREQUENCY DRIVERS
|
||||||
P: Dave Jones
|
P: Dave Jones
|
||||||
M: davej@redhat.com
|
M: davej@redhat.com
|
||||||
|
@ -1971,8 +1980,8 @@ F: include/linux/edac.h
|
||||||
|
|
||||||
EDAC-E752X
|
EDAC-E752X
|
||||||
P: Mark Gross
|
P: Mark Gross
|
||||||
P: Doug Thompson
|
|
||||||
M: mark.gross@intel.com
|
M: mark.gross@intel.com
|
||||||
|
P: Doug Thompson
|
||||||
M: dougthompson@xmission.com
|
M: dougthompson@xmission.com
|
||||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||||
W: bluesmoke.sourceforge.net
|
W: bluesmoke.sourceforge.net
|
||||||
|
@ -2249,7 +2258,7 @@ P: Li Yang
|
||||||
M: leoli@freescale.com
|
M: leoli@freescale.com
|
||||||
P: Zhang Wei
|
P: Zhang Wei
|
||||||
M: zw@zh-kernel.org
|
M: zw@zh-kernel.org
|
||||||
L: linuxppc-embedded@ozlabs.org
|
L: linuxppc-dev@ozlabs.org
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/dma/fsldma.*
|
F: drivers/dma/fsldma.*
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 30
|
SUBLEVEL = 30
|
||||||
EXTRAVERSION = -rc7
|
EXTRAVERSION = -rc8
|
||||||
NAME = Man-Eating Seals of Antiquity
|
NAME = Man-Eating Seals of Antiquity
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
|
@ -394,6 +394,7 @@ config ARCH_KIRKWOOD
|
||||||
select CPU_FEROCEON
|
select CPU_FEROCEON
|
||||||
select PCI
|
select PCI
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select GENERIC_TIME
|
select GENERIC_TIME
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select PLAT_ORION
|
select PLAT_ORION
|
||||||
|
@ -415,6 +416,7 @@ config ARCH_MV78XX0
|
||||||
select CPU_FEROCEON
|
select CPU_FEROCEON
|
||||||
select PCI
|
select PCI
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select GENERIC_TIME
|
select GENERIC_TIME
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select PLAT_ORION
|
select PLAT_ORION
|
||||||
|
@ -428,6 +430,7 @@ config ARCH_ORION5X
|
||||||
select CPU_FEROCEON
|
select CPU_FEROCEON
|
||||||
select PCI
|
select PCI
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select GENERIC_TIME
|
select GENERIC_TIME
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select PLAT_ORION
|
select PLAT_ORION
|
||||||
|
|
|
@ -182,6 +182,7 @@ CONFIG_ARCH_KIRKWOOD=y
|
||||||
CONFIG_MACH_DB88F6281_BP=y
|
CONFIG_MACH_DB88F6281_BP=y
|
||||||
CONFIG_MACH_RD88F6192_NAS=y
|
CONFIG_MACH_RD88F6192_NAS=y
|
||||||
CONFIG_MACH_RD88F6281=y
|
CONFIG_MACH_RD88F6281=y
|
||||||
|
CONFIG_MACH_MV88F6281GTW_GE=y
|
||||||
CONFIG_MACH_SHEEVAPLUG=y
|
CONFIG_MACH_SHEEVAPLUG=y
|
||||||
CONFIG_MACH_TS219=y
|
CONFIG_MACH_TS219=y
|
||||||
CONFIG_PLAT_ORION=y
|
CONFIG_PLAT_ORION=y
|
||||||
|
@ -270,7 +271,9 @@ CONFIG_CMDLINE=""
|
||||||
#
|
#
|
||||||
# CPU Power Management
|
# CPU Power Management
|
||||||
#
|
#
|
||||||
# CONFIG_CPU_IDLE is not set
|
CONFIG_CPU_IDLE=y
|
||||||
|
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||||
|
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Floating point emulation
|
# Floating point emulation
|
||||||
|
|
|
@ -903,7 +903,8 @@ CONFIG_UNIX98_PTYS=y
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=16
|
CONFIG_LEGACY_PTY_COUNT=16
|
||||||
# CONFIG_IPMI_HANDLER is not set
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
# CONFIG_HW_RANDOM is not set
|
CONFIG_HW_RANDOM=m
|
||||||
|
CONFIG_HW_RANDOM_TIMERIOMEM=m
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
# CONFIG_APPLICOM is not set
|
# CONFIG_APPLICOM is not set
|
||||||
# CONFIG_RAW_DRIVER is not set
|
# CONFIG_RAW_DRIVER is not set
|
||||||
|
|
|
@ -114,3 +114,16 @@
|
||||||
.align 3; \
|
.align 3; \
|
||||||
.long 9999b,9001f; \
|
.long 9999b,9001f; \
|
||||||
.previous
|
.previous
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SMP data memory barrier
|
||||||
|
*/
|
||||||
|
.macro smp_dmb
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 7
|
||||||
|
dmb
|
||||||
|
#elif __LINUX_ARM_ARCH__ == 6
|
||||||
|
mcr p15, 0, r0, c7, c10, 5 @ dmb
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
|
@ -44,11 +44,29 @@ static inline void atomic_set(atomic_t *v, int i)
|
||||||
: "cc");
|
: "cc");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void atomic_add(int i, atomic_t *v)
|
||||||
|
{
|
||||||
|
unsigned long tmp;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
__asm__ __volatile__("@ atomic_add\n"
|
||||||
|
"1: ldrex %0, [%2]\n"
|
||||||
|
" add %0, %0, %3\n"
|
||||||
|
" strex %1, %0, [%2]\n"
|
||||||
|
" teq %1, #0\n"
|
||||||
|
" bne 1b"
|
||||||
|
: "=&r" (result), "=&r" (tmp)
|
||||||
|
: "r" (&v->counter), "Ir" (i)
|
||||||
|
: "cc");
|
||||||
|
}
|
||||||
|
|
||||||
static inline int atomic_add_return(int i, atomic_t *v)
|
static inline int atomic_add_return(int i, atomic_t *v)
|
||||||
{
|
{
|
||||||
unsigned long tmp;
|
unsigned long tmp;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
__asm__ __volatile__("@ atomic_add_return\n"
|
__asm__ __volatile__("@ atomic_add_return\n"
|
||||||
"1: ldrex %0, [%2]\n"
|
"1: ldrex %0, [%2]\n"
|
||||||
" add %0, %0, %3\n"
|
" add %0, %0, %3\n"
|
||||||
|
@ -59,14 +77,34 @@ static inline int atomic_add_return(int i, atomic_t *v)
|
||||||
: "r" (&v->counter), "Ir" (i)
|
: "r" (&v->counter), "Ir" (i)
|
||||||
: "cc");
|
: "cc");
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void atomic_sub(int i, atomic_t *v)
|
||||||
|
{
|
||||||
|
unsigned long tmp;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
__asm__ __volatile__("@ atomic_sub\n"
|
||||||
|
"1: ldrex %0, [%2]\n"
|
||||||
|
" sub %0, %0, %3\n"
|
||||||
|
" strex %1, %0, [%2]\n"
|
||||||
|
" teq %1, #0\n"
|
||||||
|
" bne 1b"
|
||||||
|
: "=&r" (result), "=&r" (tmp)
|
||||||
|
: "r" (&v->counter), "Ir" (i)
|
||||||
|
: "cc");
|
||||||
|
}
|
||||||
|
|
||||||
static inline int atomic_sub_return(int i, atomic_t *v)
|
static inline int atomic_sub_return(int i, atomic_t *v)
|
||||||
{
|
{
|
||||||
unsigned long tmp;
|
unsigned long tmp;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
__asm__ __volatile__("@ atomic_sub_return\n"
|
__asm__ __volatile__("@ atomic_sub_return\n"
|
||||||
"1: ldrex %0, [%2]\n"
|
"1: ldrex %0, [%2]\n"
|
||||||
" sub %0, %0, %3\n"
|
" sub %0, %0, %3\n"
|
||||||
|
@ -77,6 +115,8 @@ static inline int atomic_sub_return(int i, atomic_t *v)
|
||||||
: "r" (&v->counter), "Ir" (i)
|
: "r" (&v->counter), "Ir" (i)
|
||||||
: "cc");
|
: "cc");
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,6 +124,8 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
|
||||||
{
|
{
|
||||||
unsigned long oldval, res;
|
unsigned long oldval, res;
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
__asm__ __volatile__("@ atomic_cmpxchg\n"
|
__asm__ __volatile__("@ atomic_cmpxchg\n"
|
||||||
"ldrex %1, [%2]\n"
|
"ldrex %1, [%2]\n"
|
||||||
|
@ -95,6 +137,8 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
|
||||||
: "cc");
|
: "cc");
|
||||||
} while (res);
|
} while (res);
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
return oldval;
|
return oldval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,6 +179,7 @@ static inline int atomic_add_return(int i, atomic_t *v)
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
#define atomic_add(i, v) (void) atomic_add_return(i, v)
|
||||||
|
|
||||||
static inline int atomic_sub_return(int i, atomic_t *v)
|
static inline int atomic_sub_return(int i, atomic_t *v)
|
||||||
{
|
{
|
||||||
|
@ -148,6 +193,7 @@ static inline int atomic_sub_return(int i, atomic_t *v)
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
#define atomic_sub(i, v) (void) atomic_sub_return(i, v)
|
||||||
|
|
||||||
static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
|
static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
|
||||||
{
|
{
|
||||||
|
@ -187,10 +233,8 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
|
||||||
}
|
}
|
||||||
#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
|
#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
|
||||||
|
|
||||||
#define atomic_add(i, v) (void) atomic_add_return(i, v)
|
#define atomic_inc(v) atomic_add(1, v)
|
||||||
#define atomic_inc(v) (void) atomic_add_return(1, v)
|
#define atomic_dec(v) atomic_sub(1, v)
|
||||||
#define atomic_sub(i, v) (void) atomic_sub_return(i, v)
|
|
||||||
#define atomic_dec(v) (void) atomic_sub_return(1, v)
|
|
||||||
|
|
||||||
#define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0)
|
#define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0)
|
||||||
#define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0)
|
#define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0)
|
||||||
|
@ -200,11 +244,10 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
|
||||||
|
|
||||||
#define atomic_add_negative(i,v) (atomic_add_return(i, v) < 0)
|
#define atomic_add_negative(i,v) (atomic_add_return(i, v) < 0)
|
||||||
|
|
||||||
/* Atomic operations are already serializing on ARM */
|
#define smp_mb__before_atomic_dec() smp_mb()
|
||||||
#define smp_mb__before_atomic_dec() barrier()
|
#define smp_mb__after_atomic_dec() smp_mb()
|
||||||
#define smp_mb__after_atomic_dec() barrier()
|
#define smp_mb__before_atomic_inc() smp_mb()
|
||||||
#define smp_mb__before_atomic_inc() barrier()
|
#define smp_mb__after_atomic_inc() smp_mb()
|
||||||
#define smp_mb__after_atomic_inc() barrier()
|
|
||||||
|
|
||||||
#include <asm-generic/atomic.h>
|
#include <asm-generic/atomic.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
#ifndef __ARM_FLAT_H__
|
#ifndef __ARM_FLAT_H__
|
||||||
#define __ARM_FLAT_H__
|
#define __ARM_FLAT_H__
|
||||||
|
|
||||||
/* An odd number of words will be pushed after this alignment, so
|
|
||||||
deliberately misalign the value. */
|
|
||||||
#define flat_stack_align(sp) sp = (void *)(((unsigned long)(sp) - 4) | 4)
|
|
||||||
#define flat_argvp_envp_on_stack() 1
|
#define flat_argvp_envp_on_stack() 1
|
||||||
#define flat_old_ram_flag(flags) (flags)
|
#define flat_old_ram_flag(flags) (flags)
|
||||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#define SZ_512 0x00000200
|
#define SZ_512 0x00000200
|
||||||
|
|
||||||
#define SZ_1K 0x00000400
|
#define SZ_1K 0x00000400
|
||||||
|
#define SZ_2K 0x00000800
|
||||||
#define SZ_4K 0x00001000
|
#define SZ_4K 0x00001000
|
||||||
#define SZ_8K 0x00002000
|
#define SZ_8K 0x00002000
|
||||||
#define SZ_16K 0x00004000
|
#define SZ_16K 0x00004000
|
||||||
|
|
|
@ -248,6 +248,8 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
|
||||||
unsigned int tmp;
|
unsigned int tmp;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
switch (size) {
|
switch (size) {
|
||||||
#if __LINUX_ARM_ARCH__ >= 6
|
#if __LINUX_ARM_ARCH__ >= 6
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -307,6 +309,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
|
||||||
__bad_xchg(ptr, size), ret = 0;
|
__bad_xchg(ptr, size), ret = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -316,6 +319,12 @@ extern void enable_hlt(void);
|
||||||
|
|
||||||
#include <asm-generic/cmpxchg-local.h>
|
#include <asm-generic/cmpxchg-local.h>
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ < 6
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
#error "SMP is not supported on this platform"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make
|
* cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make
|
||||||
* them available.
|
* them available.
|
||||||
|
@ -329,6 +338,173 @@ extern void enable_hlt(void);
|
||||||
#include <asm-generic/cmpxchg.h>
|
#include <asm-generic/cmpxchg.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#else /* __LINUX_ARM_ARCH__ >= 6 */
|
||||||
|
|
||||||
|
extern void __bad_cmpxchg(volatile void *ptr, int size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cmpxchg only support 32-bits operands on ARMv6.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
||||||
|
unsigned long new, int size)
|
||||||
|
{
|
||||||
|
unsigned long oldval, res;
|
||||||
|
|
||||||
|
switch (size) {
|
||||||
|
#ifdef CONFIG_CPU_32v6K
|
||||||
|
case 1:
|
||||||
|
do {
|
||||||
|
asm volatile("@ __cmpxchg1\n"
|
||||||
|
" ldrexb %1, [%2]\n"
|
||||||
|
" mov %0, #0\n"
|
||||||
|
" teq %1, %3\n"
|
||||||
|
" strexbeq %0, %4, [%2]\n"
|
||||||
|
: "=&r" (res), "=&r" (oldval)
|
||||||
|
: "r" (ptr), "Ir" (old), "r" (new)
|
||||||
|
: "memory", "cc");
|
||||||
|
} while (res);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
do {
|
||||||
|
asm volatile("@ __cmpxchg1\n"
|
||||||
|
" ldrexh %1, [%2]\n"
|
||||||
|
" mov %0, #0\n"
|
||||||
|
" teq %1, %3\n"
|
||||||
|
" strexheq %0, %4, [%2]\n"
|
||||||
|
: "=&r" (res), "=&r" (oldval)
|
||||||
|
: "r" (ptr), "Ir" (old), "r" (new)
|
||||||
|
: "memory", "cc");
|
||||||
|
} while (res);
|
||||||
|
break;
|
||||||
|
#endif /* CONFIG_CPU_32v6K */
|
||||||
|
case 4:
|
||||||
|
do {
|
||||||
|
asm volatile("@ __cmpxchg4\n"
|
||||||
|
" ldrex %1, [%2]\n"
|
||||||
|
" mov %0, #0\n"
|
||||||
|
" teq %1, %3\n"
|
||||||
|
" strexeq %0, %4, [%2]\n"
|
||||||
|
: "=&r" (res), "=&r" (oldval)
|
||||||
|
: "r" (ptr), "Ir" (old), "r" (new)
|
||||||
|
: "memory", "cc");
|
||||||
|
} while (res);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
__bad_cmpxchg(ptr, size);
|
||||||
|
oldval = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return oldval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned long __cmpxchg_mb(volatile void *ptr, unsigned long old,
|
||||||
|
unsigned long new, int size)
|
||||||
|
{
|
||||||
|
unsigned long ret;
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
ret = __cmpxchg(ptr, old, new, size);
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define cmpxchg(ptr,o,n) \
|
||||||
|
((__typeof__(*(ptr)))__cmpxchg_mb((ptr), \
|
||||||
|
(unsigned long)(o), \
|
||||||
|
(unsigned long)(n), \
|
||||||
|
sizeof(*(ptr))))
|
||||||
|
|
||||||
|
static inline unsigned long __cmpxchg_local(volatile void *ptr,
|
||||||
|
unsigned long old,
|
||||||
|
unsigned long new, int size)
|
||||||
|
{
|
||||||
|
unsigned long ret;
|
||||||
|
|
||||||
|
switch (size) {
|
||||||
|
#ifndef CONFIG_CPU_32v6K
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
ret = __cmpxchg_local_generic(ptr, old, new, size);
|
||||||
|
break;
|
||||||
|
#endif /* !CONFIG_CPU_32v6K */
|
||||||
|
default:
|
||||||
|
ret = __cmpxchg(ptr, old, new, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define cmpxchg_local(ptr,o,n) \
|
||||||
|
((__typeof__(*(ptr)))__cmpxchg_local((ptr), \
|
||||||
|
(unsigned long)(o), \
|
||||||
|
(unsigned long)(n), \
|
||||||
|
sizeof(*(ptr))))
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_32v6K
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note : ARMv7-M (currently unsupported by Linux) does not support
|
||||||
|
* ldrexd/strexd. If ARMv7-M is ever supported by the Linux kernel, it should
|
||||||
|
* not be allowed to use __cmpxchg64.
|
||||||
|
*/
|
||||||
|
static inline unsigned long long __cmpxchg64(volatile void *ptr,
|
||||||
|
unsigned long long old,
|
||||||
|
unsigned long long new)
|
||||||
|
{
|
||||||
|
register unsigned long long oldval asm("r0");
|
||||||
|
register unsigned long long __old asm("r2") = old;
|
||||||
|
register unsigned long long __new asm("r4") = new;
|
||||||
|
unsigned long res;
|
||||||
|
|
||||||
|
do {
|
||||||
|
asm volatile(
|
||||||
|
" @ __cmpxchg8\n"
|
||||||
|
" ldrexd %1, %H1, [%2]\n"
|
||||||
|
" mov %0, #0\n"
|
||||||
|
" teq %1, %3\n"
|
||||||
|
" teqeq %H1, %H3\n"
|
||||||
|
" strexdeq %0, %4, %H4, [%2]\n"
|
||||||
|
: "=&r" (res), "=&r" (oldval)
|
||||||
|
: "r" (ptr), "Ir" (__old), "r" (__new)
|
||||||
|
: "memory", "cc");
|
||||||
|
} while (res);
|
||||||
|
|
||||||
|
return oldval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned long long __cmpxchg64_mb(volatile void *ptr,
|
||||||
|
unsigned long long old,
|
||||||
|
unsigned long long new)
|
||||||
|
{
|
||||||
|
unsigned long long ret;
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
ret = __cmpxchg64(ptr, old, new);
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define cmpxchg64(ptr,o,n) \
|
||||||
|
((__typeof__(*(ptr)))__cmpxchg64_mb((ptr), \
|
||||||
|
(unsigned long long)(o), \
|
||||||
|
(unsigned long long)(n)))
|
||||||
|
|
||||||
|
#define cmpxchg64_local(ptr,o,n) \
|
||||||
|
((__typeof__(*(ptr)))__cmpxchg64((ptr), \
|
||||||
|
(unsigned long long)(o), \
|
||||||
|
(unsigned long long)(n)))
|
||||||
|
|
||||||
|
#else /* !CONFIG_CPU_32v6K */
|
||||||
|
|
||||||
|
#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
|
||||||
|
|
||||||
|
#endif /* CONFIG_CPU_32v6K */
|
||||||
|
|
||||||
|
#endif /* __LINUX_ARM_ARCH__ >= 6 */
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
#define arch_align_stack(x) (x)
|
#define arch_align_stack(x) (x)
|
||||||
|
|
|
@ -78,6 +78,15 @@ int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack)
|
||||||
return 1;
|
return 1;
|
||||||
if (cpu_architecture() < CPU_ARCH_ARMv6)
|
if (cpu_architecture() < CPU_ARCH_ARMv6)
|
||||||
return 1;
|
return 1;
|
||||||
|
#if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT)
|
||||||
|
/*
|
||||||
|
* If we have support for OABI programs, we can never allow NX
|
||||||
|
* support - our signal syscall restart mechanism relies upon
|
||||||
|
* being able to execute code placed on the user stack.
|
||||||
|
*/
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
return 0;
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(arm_elf_read_implies_exec);
|
EXPORT_SYMBOL(arm_elf_read_implies_exec);
|
||||||
|
|
|
@ -815,10 +815,7 @@ __kuser_helper_start:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
__kuser_memory_barrier: @ 0xffff0fa0
|
__kuser_memory_barrier: @ 0xffff0fa0
|
||||||
|
smp_dmb
|
||||||
#if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP)
|
|
||||||
mcr p15, 0, r0, c7, c10, 5 @ dmb
|
|
||||||
#endif
|
|
||||||
usr_ret lr
|
usr_ret lr
|
||||||
|
|
||||||
.align 5
|
.align 5
|
||||||
|
|
|
@ -18,12 +18,14 @@
|
||||||
mov r2, #1
|
mov r2, #1
|
||||||
add r1, r1, r0, lsr #3 @ Get byte offset
|
add r1, r1, r0, lsr #3 @ Get byte offset
|
||||||
mov r3, r2, lsl r3 @ create mask
|
mov r3, r2, lsl r3 @ create mask
|
||||||
|
smp_dmb
|
||||||
1: ldrexb r2, [r1]
|
1: ldrexb r2, [r1]
|
||||||
ands r0, r2, r3 @ save old value of bit
|
ands r0, r2, r3 @ save old value of bit
|
||||||
\instr r2, r2, r3 @ toggle bit
|
\instr r2, r2, r3 @ toggle bit
|
||||||
strexb ip, r2, [r1]
|
strexb ip, r2, [r1]
|
||||||
cmp ip, #0
|
cmp ip, #0
|
||||||
bne 1b
|
bne 1b
|
||||||
|
smp_dmb
|
||||||
cmp r0, #0
|
cmp r0, #0
|
||||||
movne r0, #1
|
movne r0, #1
|
||||||
2: mov pc, lr
|
2: mov pc, lr
|
||||||
|
|
|
@ -15,10 +15,9 @@
|
||||||
/*
|
/*
|
||||||
* Memory Map definitions
|
* Memory Map definitions
|
||||||
*/
|
*/
|
||||||
/* FIXME: Does it really swap SRAM like this? */
|
|
||||||
#ifdef CONFIG_GEMINI_MEM_SWAP
|
#ifdef CONFIG_GEMINI_MEM_SWAP
|
||||||
# define GEMINI_DRAM_BASE 0x00000000
|
# define GEMINI_DRAM_BASE 0x00000000
|
||||||
# define GEMINI_SRAM_BASE 0x20000000
|
# define GEMINI_SRAM_BASE 0x70000000
|
||||||
#else
|
#else
|
||||||
# define GEMINI_SRAM_BASE 0x00000000
|
# define GEMINI_SRAM_BASE 0x00000000
|
||||||
# define GEMINI_DRAM_BASE 0x10000000
|
# define GEMINI_DRAM_BASE 0x10000000
|
||||||
|
|
|
@ -20,6 +20,12 @@ config MACH_RD88F6281
|
||||||
Say 'Y' here if you want your kernel to support the
|
Say 'Y' here if you want your kernel to support the
|
||||||
Marvell RD-88F6281 Reference Board.
|
Marvell RD-88F6281 Reference Board.
|
||||||
|
|
||||||
|
config MACH_MV88F6281GTW_GE
|
||||||
|
bool "Marvell 88F6281 GTW GE Board"
|
||||||
|
help
|
||||||
|
Say 'Y' here if you want your kernel to support the
|
||||||
|
Marvell 88F6281 GTW GE Board.
|
||||||
|
|
||||||
config MACH_SHEEVAPLUG
|
config MACH_SHEEVAPLUG
|
||||||
bool "Marvell SheevaPlug Reference Board"
|
bool "Marvell SheevaPlug Reference Board"
|
||||||
help
|
help
|
||||||
|
|
|
@ -3,5 +3,8 @@ obj-y += common.o addr-map.o irq.o pcie.o mpp.o
|
||||||
obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o
|
obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o
|
||||||
obj-$(CONFIG_MACH_RD88F6192_NAS) += rd88f6192-nas-setup.o
|
obj-$(CONFIG_MACH_RD88F6192_NAS) += rd88f6192-nas-setup.o
|
||||||
obj-$(CONFIG_MACH_RD88F6281) += rd88f6281-setup.o
|
obj-$(CONFIG_MACH_RD88F6281) += rd88f6281-setup.o
|
||||||
|
obj-$(CONFIG_MACH_MV88F6281GTW_GE) += mv88f6281gtw_ge-setup.o
|
||||||
obj-$(CONFIG_MACH_SHEEVAPLUG) += sheevaplug-setup.o
|
obj-$(CONFIG_MACH_SHEEVAPLUG) += sheevaplug-setup.o
|
||||||
obj-$(CONFIG_MACH_TS219) += ts219-setup.o
|
obj-$(CONFIG_MACH_TS219) += ts219-setup.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
*/
|
*/
|
||||||
#define TARGET_DDR 0
|
#define TARGET_DDR 0
|
||||||
#define TARGET_DEV_BUS 1
|
#define TARGET_DEV_BUS 1
|
||||||
|
#define TARGET_SRAM 3
|
||||||
#define TARGET_PCIE 4
|
#define TARGET_PCIE 4
|
||||||
#define ATTR_DEV_SPI_ROM 0x1e
|
#define ATTR_DEV_SPI_ROM 0x1e
|
||||||
#define ATTR_DEV_BOOT 0x1d
|
#define ATTR_DEV_BOOT 0x1d
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
#define ATTR_DEV_CS0 0x3e
|
#define ATTR_DEV_CS0 0x3e
|
||||||
#define ATTR_PCIE_IO 0xe0
|
#define ATTR_PCIE_IO 0xe0
|
||||||
#define ATTR_PCIE_MEM 0xe8
|
#define ATTR_PCIE_MEM 0xe8
|
||||||
|
#define ATTR_SRAM 0x01
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Helpers to get DDR bank info
|
* Helpers to get DDR bank info
|
||||||
|
@ -48,7 +50,6 @@
|
||||||
|
|
||||||
|
|
||||||
struct mbus_dram_target_info kirkwood_mbus_dram_info;
|
struct mbus_dram_target_info kirkwood_mbus_dram_info;
|
||||||
static int __initdata win_alloc_count;
|
|
||||||
|
|
||||||
static int __init cpu_win_can_remap(int win)
|
static int __init cpu_win_can_remap(int win)
|
||||||
{
|
{
|
||||||
|
@ -112,7 +113,11 @@ void __init kirkwood_setup_cpu_mbus(void)
|
||||||
setup_cpu_win(2, KIRKWOOD_NAND_MEM_PHYS_BASE, KIRKWOOD_NAND_MEM_SIZE,
|
setup_cpu_win(2, KIRKWOOD_NAND_MEM_PHYS_BASE, KIRKWOOD_NAND_MEM_SIZE,
|
||||||
TARGET_DEV_BUS, ATTR_DEV_NAND, -1);
|
TARGET_DEV_BUS, ATTR_DEV_NAND, -1);
|
||||||
|
|
||||||
win_alloc_count = 3;
|
/*
|
||||||
|
* Setup window for SRAM.
|
||||||
|
*/
|
||||||
|
setup_cpu_win(3, KIRKWOOD_SRAM_PHYS_BASE, KIRKWOOD_SRAM_SIZE,
|
||||||
|
TARGET_SRAM, ATTR_SRAM, -1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup MBUS dram target info.
|
* Setup MBUS dram target info.
|
||||||
|
@ -140,8 +145,3 @@ void __init kirkwood_setup_cpu_mbus(void)
|
||||||
}
|
}
|
||||||
kirkwood_mbus_dram_info.num_cs = cs;
|
kirkwood_mbus_dram_info.num_cs = cs;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init kirkwood_setup_sram_win(u32 base, u32 size)
|
|
||||||
{
|
|
||||||
setup_cpu_win(win_alloc_count++, base, size, 0x03, 0x00, -1);
|
|
||||||
}
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
#include <linux/mv643xx_i2c.h>
|
#include <linux/mv643xx_i2c.h>
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
|
#include <linux/mtd/nand.h>
|
||||||
#include <linux/spi/orion_spi.h>
|
#include <linux/spi/orion_spi.h>
|
||||||
#include <net/dsa.h>
|
#include <net/dsa.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
@ -29,6 +30,7 @@
|
||||||
#include <plat/mvsdio.h>
|
#include <plat/mvsdio.h>
|
||||||
#include <plat/mv_xor.h>
|
#include <plat/mv_xor.h>
|
||||||
#include <plat/orion_nand.h>
|
#include <plat/orion_nand.h>
|
||||||
|
#include <plat/orion_wdt.h>
|
||||||
#include <plat/time.h>
|
#include <plat/time.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
@ -54,6 +56,13 @@ void __init kirkwood_map_io(void)
|
||||||
iotable_init(kirkwood_io_desc, ARRAY_SIZE(kirkwood_io_desc));
|
iotable_init(kirkwood_io_desc, ARRAY_SIZE(kirkwood_io_desc));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Default clock control bits. Any bit _not_ set in this variable
|
||||||
|
* will be cleared from the hardware after platform devices have been
|
||||||
|
* registered. Some reserved bits must be set to 1.
|
||||||
|
*/
|
||||||
|
unsigned int kirkwood_clk_ctrl = CGC_DUNIT | CGC_RESERVED;
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* EHCI
|
* EHCI
|
||||||
|
@ -95,6 +104,7 @@ static struct platform_device kirkwood_ehci = {
|
||||||
|
|
||||||
void __init kirkwood_ehci_init(void)
|
void __init kirkwood_ehci_init(void)
|
||||||
{
|
{
|
||||||
|
kirkwood_clk_ctrl |= CGC_USB0;
|
||||||
platform_device_register(&kirkwood_ehci);
|
platform_device_register(&kirkwood_ehci);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,10 +154,14 @@ static struct platform_device kirkwood_ge00 = {
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
.resource = kirkwood_ge00_resources,
|
.resource = kirkwood_ge00_resources,
|
||||||
|
.dev = {
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data)
|
void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data)
|
||||||
{
|
{
|
||||||
|
kirkwood_clk_ctrl |= CGC_GE0;
|
||||||
eth_data->shared = &kirkwood_ge00_shared;
|
eth_data->shared = &kirkwood_ge00_shared;
|
||||||
kirkwood_ge00.dev.platform_data = eth_data;
|
kirkwood_ge00.dev.platform_data = eth_data;
|
||||||
|
|
||||||
|
@ -202,10 +216,14 @@ static struct platform_device kirkwood_ge01 = {
|
||||||
.id = 1,
|
.id = 1,
|
||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
.resource = kirkwood_ge01_resources,
|
.resource = kirkwood_ge01_resources,
|
||||||
|
.dev = {
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data)
|
void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data)
|
||||||
{
|
{
|
||||||
|
kirkwood_clk_ctrl |= CGC_GE1;
|
||||||
eth_data->shared = &kirkwood_ge01_shared;
|
eth_data->shared = &kirkwood_ge01_shared;
|
||||||
kirkwood_ge01.dev.platform_data = eth_data;
|
kirkwood_ge01.dev.platform_data = eth_data;
|
||||||
|
|
||||||
|
@ -251,6 +269,43 @@ void __init kirkwood_ge00_switch_init(struct dsa_platform_data *d, int irq)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* NAND flash
|
||||||
|
****************************************************************************/
|
||||||
|
static struct resource kirkwood_nand_resource = {
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
.start = KIRKWOOD_NAND_MEM_PHYS_BASE,
|
||||||
|
.end = KIRKWOOD_NAND_MEM_PHYS_BASE +
|
||||||
|
KIRKWOOD_NAND_MEM_SIZE - 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct orion_nand_data kirkwood_nand_data = {
|
||||||
|
.cle = 0,
|
||||||
|
.ale = 1,
|
||||||
|
.width = 8,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device kirkwood_nand_flash = {
|
||||||
|
.name = "orion_nand",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &kirkwood_nand_data,
|
||||||
|
},
|
||||||
|
.resource = &kirkwood_nand_resource,
|
||||||
|
.num_resources = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init kirkwood_nand_init(struct mtd_partition *parts, int nr_parts,
|
||||||
|
int chip_delay)
|
||||||
|
{
|
||||||
|
kirkwood_clk_ctrl |= CGC_RUNIT;
|
||||||
|
kirkwood_nand_data.parts = parts;
|
||||||
|
kirkwood_nand_data.nr_parts = nr_parts;
|
||||||
|
kirkwood_nand_data.chip_delay = chip_delay;
|
||||||
|
platform_device_register(&kirkwood_nand_flash);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* SoC RTC
|
* SoC RTC
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -295,6 +350,9 @@ static struct platform_device kirkwood_sata = {
|
||||||
|
|
||||||
void __init kirkwood_sata_init(struct mv_sata_platform_data *sata_data)
|
void __init kirkwood_sata_init(struct mv_sata_platform_data *sata_data)
|
||||||
{
|
{
|
||||||
|
kirkwood_clk_ctrl |= CGC_SATA0;
|
||||||
|
if (sata_data->n_ports > 1)
|
||||||
|
kirkwood_clk_ctrl |= CGC_SATA1;
|
||||||
sata_data->dram = &kirkwood_mbus_dram_info;
|
sata_data->dram = &kirkwood_mbus_dram_info;
|
||||||
kirkwood_sata.dev.platform_data = sata_data;
|
kirkwood_sata.dev.platform_data = sata_data;
|
||||||
platform_device_register(&kirkwood_sata);
|
platform_device_register(&kirkwood_sata);
|
||||||
|
@ -340,6 +398,7 @@ void __init kirkwood_sdio_init(struct mvsdio_platform_data *mvsdio_data)
|
||||||
else
|
else
|
||||||
mvsdio_data->clock = 200000000;
|
mvsdio_data->clock = 200000000;
|
||||||
mvsdio_data->dram = &kirkwood_mbus_dram_info;
|
mvsdio_data->dram = &kirkwood_mbus_dram_info;
|
||||||
|
kirkwood_clk_ctrl |= CGC_SDIO;
|
||||||
kirkwood_sdio.dev.platform_data = mvsdio_data;
|
kirkwood_sdio.dev.platform_data = mvsdio_data;
|
||||||
platform_device_register(&kirkwood_sdio);
|
platform_device_register(&kirkwood_sdio);
|
||||||
}
|
}
|
||||||
|
@ -371,6 +430,7 @@ static struct platform_device kirkwood_spi = {
|
||||||
|
|
||||||
void __init kirkwood_spi_init()
|
void __init kirkwood_spi_init()
|
||||||
{
|
{
|
||||||
|
kirkwood_clk_ctrl |= CGC_RUNIT;
|
||||||
platform_device_register(&kirkwood_spi);
|
platform_device_register(&kirkwood_spi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -386,12 +446,10 @@ static struct mv64xxx_i2c_pdata kirkwood_i2c_pdata = {
|
||||||
|
|
||||||
static struct resource kirkwood_i2c_resources[] = {
|
static struct resource kirkwood_i2c_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "i2c",
|
|
||||||
.start = I2C_PHYS_BASE,
|
.start = I2C_PHYS_BASE,
|
||||||
.end = I2C_PHYS_BASE + 0x1f,
|
.end = I2C_PHYS_BASE + 0x1f,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
}, {
|
}, {
|
||||||
.name = "i2c",
|
|
||||||
.start = IRQ_KIRKWOOD_TWSI,
|
.start = IRQ_KIRKWOOD_TWSI,
|
||||||
.end = IRQ_KIRKWOOD_TWSI,
|
.end = IRQ_KIRKWOOD_TWSI,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
|
@ -502,6 +560,43 @@ void __init kirkwood_uart1_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* Cryptographic Engines and Security Accelerator (CESA)
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static struct resource kirkwood_crypto_res[] = {
|
||||||
|
{
|
||||||
|
.name = "regs",
|
||||||
|
.start = CRYPTO_PHYS_BASE,
|
||||||
|
.end = CRYPTO_PHYS_BASE + 0xffff,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
}, {
|
||||||
|
.name = "sram",
|
||||||
|
.start = KIRKWOOD_SRAM_PHYS_BASE,
|
||||||
|
.end = KIRKWOOD_SRAM_PHYS_BASE + KIRKWOOD_SRAM_SIZE - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
}, {
|
||||||
|
.name = "crypto interrupt",
|
||||||
|
.start = IRQ_KIRKWOOD_CRYPTO,
|
||||||
|
.end = IRQ_KIRKWOOD_CRYPTO,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device kirkwood_crypto_device = {
|
||||||
|
.name = "mv_crypto",
|
||||||
|
.id = -1,
|
||||||
|
.num_resources = ARRAY_SIZE(kirkwood_crypto_res),
|
||||||
|
.resource = kirkwood_crypto_res,
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init kirkwood_crypto_init(void)
|
||||||
|
{
|
||||||
|
kirkwood_clk_ctrl |= CGC_CRYPTO;
|
||||||
|
platform_device_register(&kirkwood_crypto_device);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* XOR
|
* XOR
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -593,6 +688,7 @@ static struct platform_device kirkwood_xor01_channel = {
|
||||||
|
|
||||||
static void __init kirkwood_xor0_init(void)
|
static void __init kirkwood_xor0_init(void)
|
||||||
{
|
{
|
||||||
|
kirkwood_clk_ctrl |= CGC_XOR0;
|
||||||
platform_device_register(&kirkwood_xor0_shared);
|
platform_device_register(&kirkwood_xor0_shared);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -691,6 +787,7 @@ static struct platform_device kirkwood_xor11_channel = {
|
||||||
|
|
||||||
static void __init kirkwood_xor1_init(void)
|
static void __init kirkwood_xor1_init(void)
|
||||||
{
|
{
|
||||||
|
kirkwood_clk_ctrl |= CGC_XOR1;
|
||||||
platform_device_register(&kirkwood_xor1_shared);
|
platform_device_register(&kirkwood_xor1_shared);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -708,6 +805,29 @@ static void __init kirkwood_xor1_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* Watchdog
|
||||||
|
****************************************************************************/
|
||||||
|
static struct orion_wdt_platform_data kirkwood_wdt_data = {
|
||||||
|
.tclk = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device kirkwood_wdt_device = {
|
||||||
|
.name = "orion_wdt",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &kirkwood_wdt_data,
|
||||||
|
},
|
||||||
|
.num_resources = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __init kirkwood_wdt_init(void)
|
||||||
|
{
|
||||||
|
kirkwood_wdt_data.tclk = kirkwood_tclk;
|
||||||
|
platform_device_register(&kirkwood_wdt_device);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Time handling
|
* Time handling
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -800,6 +920,49 @@ void __init kirkwood_init(void)
|
||||||
|
|
||||||
/* internal devices that every board has */
|
/* internal devices that every board has */
|
||||||
kirkwood_rtc_init();
|
kirkwood_rtc_init();
|
||||||
|
kirkwood_wdt_init();
|
||||||
kirkwood_xor0_init();
|
kirkwood_xor0_init();
|
||||||
kirkwood_xor1_init();
|
kirkwood_xor1_init();
|
||||||
|
kirkwood_crypto_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __init kirkwood_clock_gate(void)
|
||||||
|
{
|
||||||
|
unsigned int curr = readl(CLOCK_GATING_CTRL);
|
||||||
|
|
||||||
|
printk(KERN_DEBUG "Gating clock of unused units\n");
|
||||||
|
printk(KERN_DEBUG "before: 0x%08x\n", curr);
|
||||||
|
|
||||||
|
/* Make sure those units are accessible */
|
||||||
|
writel(curr | CGC_SATA0 | CGC_SATA1 | CGC_PEX0, CLOCK_GATING_CTRL);
|
||||||
|
|
||||||
|
/* For SATA: first shutdown the phy */
|
||||||
|
if (!(kirkwood_clk_ctrl & CGC_SATA0)) {
|
||||||
|
/* Disable PLL and IVREF */
|
||||||
|
writel(readl(SATA0_PHY_MODE_2) & ~0xf, SATA0_PHY_MODE_2);
|
||||||
|
/* Disable PHY */
|
||||||
|
writel(readl(SATA0_IF_CTRL) | 0x200, SATA0_IF_CTRL);
|
||||||
|
}
|
||||||
|
if (!(kirkwood_clk_ctrl & CGC_SATA1)) {
|
||||||
|
/* Disable PLL and IVREF */
|
||||||
|
writel(readl(SATA1_PHY_MODE_2) & ~0xf, SATA1_PHY_MODE_2);
|
||||||
|
/* Disable PHY */
|
||||||
|
writel(readl(SATA1_IF_CTRL) | 0x200, SATA1_IF_CTRL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For PCIe: first shutdown the phy */
|
||||||
|
if (!(kirkwood_clk_ctrl & CGC_PEX0)) {
|
||||||
|
writel(readl(PCIE_LINK_CTRL) | 0x10, PCIE_LINK_CTRL);
|
||||||
|
while (1)
|
||||||
|
if (readl(PCIE_STATUS) & 0x1)
|
||||||
|
break;
|
||||||
|
writel(readl(PCIE_LINK_CTRL) & ~0x10, PCIE_LINK_CTRL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now gate clock the required units */
|
||||||
|
writel(kirkwood_clk_ctrl, CLOCK_GATING_CTRL);
|
||||||
|
printk(KERN_DEBUG " after: 0x%08x\n", readl(CLOCK_GATING_CTRL));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
late_initcall(kirkwood_clock_gate);
|
||||||
|
|
|
@ -15,6 +15,7 @@ struct dsa_platform_data;
|
||||||
struct mv643xx_eth_platform_data;
|
struct mv643xx_eth_platform_data;
|
||||||
struct mv_sata_platform_data;
|
struct mv_sata_platform_data;
|
||||||
struct mvsdio_platform_data;
|
struct mvsdio_platform_data;
|
||||||
|
struct mtd_partition;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Basic Kirkwood init functions used early by machine-setup.
|
* Basic Kirkwood init functions used early by machine-setup.
|
||||||
|
@ -25,7 +26,6 @@ void kirkwood_init_irq(void);
|
||||||
|
|
||||||
extern struct mbus_dram_target_info kirkwood_mbus_dram_info;
|
extern struct mbus_dram_target_info kirkwood_mbus_dram_info;
|
||||||
void kirkwood_setup_cpu_mbus(void);
|
void kirkwood_setup_cpu_mbus(void);
|
||||||
void kirkwood_setup_sram_win(u32 base, u32 size);
|
|
||||||
|
|
||||||
void kirkwood_pcie_id(u32 *dev, u32 *rev);
|
void kirkwood_pcie_id(u32 *dev, u32 *rev);
|
||||||
|
|
||||||
|
@ -40,9 +40,11 @@ void kirkwood_spi_init(void);
|
||||||
void kirkwood_i2c_init(void);
|
void kirkwood_i2c_init(void);
|
||||||
void kirkwood_uart0_init(void);
|
void kirkwood_uart0_init(void);
|
||||||
void kirkwood_uart1_init(void);
|
void kirkwood_uart1_init(void);
|
||||||
|
void kirkwood_nand_init(struct mtd_partition *parts, int nr_parts, int delay);
|
||||||
|
|
||||||
extern int kirkwood_tclk;
|
extern int kirkwood_tclk;
|
||||||
extern struct sys_timer kirkwood_timer;
|
extern struct sys_timer kirkwood_timer;
|
||||||
|
|
||||||
|
#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
96
arch/arm/mach-kirkwood/cpuidle.c
Normal file
96
arch/arm/mach-kirkwood/cpuidle.c
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
/*
|
||||||
|
* arch/arm/mach-kirkwood/cpuidle.c
|
||||||
|
*
|
||||||
|
* CPU idle Marvell Kirkwood SoCs
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* The cpu idle uses wait-for-interrupt and DDR self refresh in order
|
||||||
|
* to implement two idle states -
|
||||||
|
* #1 wait-for-interrupt
|
||||||
|
* #2 wait-for-interrupt and DDR self refresh
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/cpuidle.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
#include <asm/proc-fns.h>
|
||||||
|
#include <mach/kirkwood.h>
|
||||||
|
|
||||||
|
#define KIRKWOOD_MAX_STATES 2
|
||||||
|
|
||||||
|
static struct cpuidle_driver kirkwood_idle_driver = {
|
||||||
|
.name = "kirkwood_idle",
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
};
|
||||||
|
|
||||||
|
static DEFINE_PER_CPU(struct cpuidle_device, kirkwood_cpuidle_device);
|
||||||
|
|
||||||
|
/* Actual code that puts the SoC in different idle states */
|
||||||
|
static int kirkwood_enter_idle(struct cpuidle_device *dev,
|
||||||
|
struct cpuidle_state *state)
|
||||||
|
{
|
||||||
|
struct timeval before, after;
|
||||||
|
int idle_time;
|
||||||
|
|
||||||
|
local_irq_disable();
|
||||||
|
do_gettimeofday(&before);
|
||||||
|
if (state == &dev->states[0])
|
||||||
|
/* Wait for interrupt state */
|
||||||
|
cpu_do_idle();
|
||||||
|
else if (state == &dev->states[1]) {
|
||||||
|
/*
|
||||||
|
* Following write will put DDR in self refresh.
|
||||||
|
* Note that we have 256 cycles before DDR puts it
|
||||||
|
* self in self-refresh, so the wait-for-interrupt
|
||||||
|
* call afterwards won't get the DDR from self refresh
|
||||||
|
* mode.
|
||||||
|
*/
|
||||||
|
writel(0x7, DDR_OPERATION_BASE);
|
||||||
|
cpu_do_idle();
|
||||||
|
}
|
||||||
|
do_gettimeofday(&after);
|
||||||
|
local_irq_enable();
|
||||||
|
idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
|
||||||
|
(after.tv_usec - before.tv_usec);
|
||||||
|
return idle_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize CPU idle by registering the idle states */
|
||||||
|
static int kirkwood_init_cpuidle(void)
|
||||||
|
{
|
||||||
|
struct cpuidle_device *device;
|
||||||
|
|
||||||
|
cpuidle_register_driver(&kirkwood_idle_driver);
|
||||||
|
|
||||||
|
device = &per_cpu(kirkwood_cpuidle_device, smp_processor_id());
|
||||||
|
device->state_count = KIRKWOOD_MAX_STATES;
|
||||||
|
|
||||||
|
/* Wait for interrupt state */
|
||||||
|
device->states[0].enter = kirkwood_enter_idle;
|
||||||
|
device->states[0].exit_latency = 1;
|
||||||
|
device->states[0].target_residency = 10000;
|
||||||
|
device->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
|
||||||
|
strcpy(device->states[0].name, "WFI");
|
||||||
|
strcpy(device->states[0].desc, "Wait for interrupt");
|
||||||
|
|
||||||
|
/* Wait for interrupt and DDR self refresh state */
|
||||||
|
device->states[1].enter = kirkwood_enter_idle;
|
||||||
|
device->states[1].exit_latency = 10;
|
||||||
|
device->states[1].target_residency = 10000;
|
||||||
|
device->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
|
||||||
|
strcpy(device->states[1].name, "DDR SR");
|
||||||
|
strcpy(device->states[1].desc, "WFI and DDR Self Refresh");
|
||||||
|
|
||||||
|
if (cpuidle_register_device(device)) {
|
||||||
|
printk(KERN_ERR "kirkwood_init_cpuidle: Failed registering\n");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(kirkwood_init_cpuidle);
|
|
@ -11,14 +11,12 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/nand.h>
|
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <mach/kirkwood.h>
|
#include <mach/kirkwood.h>
|
||||||
#include <plat/orion_nand.h>
|
|
||||||
#include <plat/mvsdio.h>
|
#include <plat/mvsdio.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "mpp.h"
|
#include "mpp.h"
|
||||||
|
@ -39,32 +37,6 @@ static struct mtd_partition db88f6281_nand_parts[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource db88f6281_nand_resource = {
|
|
||||||
.flags = IORESOURCE_MEM,
|
|
||||||
.start = KIRKWOOD_NAND_MEM_PHYS_BASE,
|
|
||||||
.end = KIRKWOOD_NAND_MEM_PHYS_BASE +
|
|
||||||
KIRKWOOD_NAND_MEM_SIZE - 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct orion_nand_data db88f6281_nand_data = {
|
|
||||||
.parts = db88f6281_nand_parts,
|
|
||||||
.nr_parts = ARRAY_SIZE(db88f6281_nand_parts),
|
|
||||||
.cle = 0,
|
|
||||||
.ale = 1,
|
|
||||||
.width = 8,
|
|
||||||
.chip_delay = 25,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device db88f6281_nand_flash = {
|
|
||||||
.name = "orion_nand",
|
|
||||||
.id = -1,
|
|
||||||
.dev = {
|
|
||||||
.platform_data = &db88f6281_nand_data,
|
|
||||||
},
|
|
||||||
.resource = &db88f6281_nand_resource,
|
|
||||||
.num_resources = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mv643xx_eth_platform_data db88f6281_ge00_data = {
|
static struct mv643xx_eth_platform_data db88f6281_ge00_data = {
|
||||||
.phy_addr = MV643XX_ETH_PHY_ADDR(8),
|
.phy_addr = MV643XX_ETH_PHY_ADDR(8),
|
||||||
};
|
};
|
||||||
|
@ -92,13 +64,12 @@ static void __init db88f6281_init(void)
|
||||||
kirkwood_init();
|
kirkwood_init();
|
||||||
kirkwood_mpp_conf(db88f6281_mpp_config);
|
kirkwood_mpp_conf(db88f6281_mpp_config);
|
||||||
|
|
||||||
|
kirkwood_nand_init(ARRAY_AND_SIZE(db88f6281_nand_parts), 25);
|
||||||
kirkwood_ehci_init();
|
kirkwood_ehci_init();
|
||||||
kirkwood_ge00_init(&db88f6281_ge00_data);
|
kirkwood_ge00_init(&db88f6281_ge00_data);
|
||||||
kirkwood_sata_init(&db88f6281_sata_data);
|
kirkwood_sata_init(&db88f6281_sata_data);
|
||||||
kirkwood_uart0_init();
|
kirkwood_uart0_init();
|
||||||
kirkwood_sdio_init(&db88f6281_mvsdio_data);
|
kirkwood_sdio_init(&db88f6281_mvsdio_data);
|
||||||
|
|
||||||
platform_device_register(&db88f6281_nand_flash);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init db88f6281_pci_init(void)
|
static int __init db88f6281_pci_init(void)
|
||||||
|
|
|
@ -17,12 +17,15 @@
|
||||||
#define CPU_RESET 0x00000002
|
#define CPU_RESET 0x00000002
|
||||||
|
|
||||||
#define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108)
|
#define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108)
|
||||||
|
#define WDT_RESET_OUT_EN 0x00000002
|
||||||
#define SOFT_RESET_OUT_EN 0x00000004
|
#define SOFT_RESET_OUT_EN 0x00000004
|
||||||
|
|
||||||
#define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c)
|
#define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c)
|
||||||
#define SOFT_RESET 0x00000001
|
#define SOFT_RESET 0x00000001
|
||||||
|
|
||||||
#define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110)
|
#define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110)
|
||||||
|
#define WDT_INT_REQ 0x0008
|
||||||
|
|
||||||
#define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114)
|
#define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114)
|
||||||
#define BRIDGE_INT_TIMER0 0x0002
|
#define BRIDGE_INT_TIMER0 0x0002
|
||||||
#define BRIDGE_INT_TIMER1 0x0004
|
#define BRIDGE_INT_TIMER1 0x0004
|
||||||
|
@ -39,4 +42,22 @@
|
||||||
#define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128)
|
#define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128)
|
||||||
#define L2_WRITETHROUGH 0x00000010
|
#define L2_WRITETHROUGH 0x00000010
|
||||||
|
|
||||||
|
#define CLOCK_GATING_CTRL (BRIDGE_VIRT_BASE | 0x11c)
|
||||||
|
#define CGC_GE0 (1 << 0)
|
||||||
|
#define CGC_PEX0 (1 << 2)
|
||||||
|
#define CGC_USB0 (1 << 3)
|
||||||
|
#define CGC_SDIO (1 << 4)
|
||||||
|
#define CGC_TSU (1 << 5)
|
||||||
|
#define CGC_DUNIT (1 << 6)
|
||||||
|
#define CGC_RUNIT (1 << 7)
|
||||||
|
#define CGC_XOR0 (1 << 8)
|
||||||
|
#define CGC_AUDIO (1 << 9)
|
||||||
|
#define CGC_SATA0 (1 << 14)
|
||||||
|
#define CGC_SATA1 (1 << 15)
|
||||||
|
#define CGC_XOR1 (1 << 16)
|
||||||
|
#define CGC_CRYPTO (1 << 17)
|
||||||
|
#define CGC_GE1 (1 << 19)
|
||||||
|
#define CGC_TDM (1 << 20)
|
||||||
|
#define CGC_RESERVED ((1 << 18) | (0x6 << 21))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -19,6 +19,31 @@ static inline void __iomem *__io(unsigned long addr)
|
||||||
+ KIRKWOOD_PCIE_IO_VIRT_BASE);
|
+ KIRKWOOD_PCIE_IO_VIRT_BASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void __iomem *
|
||||||
|
__arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype)
|
||||||
|
{
|
||||||
|
void __iomem *retval;
|
||||||
|
unsigned long offs = paddr - KIRKWOOD_REGS_PHYS_BASE;
|
||||||
|
if (mtype == MT_DEVICE && size && offs < KIRKWOOD_REGS_SIZE &&
|
||||||
|
size <= KIRKWOOD_REGS_SIZE && offs + size <= KIRKWOOD_REGS_SIZE) {
|
||||||
|
retval = (void __iomem *)KIRKWOOD_REGS_VIRT_BASE + offs;
|
||||||
|
} else {
|
||||||
|
retval = __arm_ioremap(paddr, size, mtype);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
__arch_iounmap(void __iomem *addr)
|
||||||
|
{
|
||||||
|
if (addr < (void __iomem *)KIRKWOOD_REGS_VIRT_BASE ||
|
||||||
|
addr >= (void __iomem *)(KIRKWOOD_REGS_VIRT_BASE + KIRKWOOD_REGS_SIZE))
|
||||||
|
__iounmap(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define __arch_ioremap(p, s, m) __arch_ioremap(p, s, m)
|
||||||
|
#define __arch_iounmap(a) __arch_iounmap(a)
|
||||||
#define __io(a) __io(a)
|
#define __io(a) __io(a)
|
||||||
#define __mem_pci(a) (a)
|
#define __mem_pci(a) (a)
|
||||||
|
|
||||||
|
|
|
@ -20,16 +20,18 @@
|
||||||
* f1000000 on-chip peripheral registers
|
* f1000000 on-chip peripheral registers
|
||||||
* f2000000 PCIe I/O space
|
* f2000000 PCIe I/O space
|
||||||
* f3000000 NAND controller address window
|
* f3000000 NAND controller address window
|
||||||
|
* f4000000 Security Accelerator SRAM
|
||||||
*
|
*
|
||||||
* virt phys size
|
* virt phys size
|
||||||
* fee00000 f1000000 1M on-chip peripheral registers
|
* fee00000 f1000000 1M on-chip peripheral registers
|
||||||
* fef00000 f2000000 1M PCIe I/O space
|
* fef00000 f2000000 1M PCIe I/O space
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define KIRKWOOD_SRAM_PHYS_BASE 0xf4000000
|
||||||
|
#define KIRKWOOD_SRAM_SIZE SZ_2K
|
||||||
|
|
||||||
#define KIRKWOOD_NAND_MEM_PHYS_BASE 0xf3000000
|
#define KIRKWOOD_NAND_MEM_PHYS_BASE 0xf3000000
|
||||||
#define KIRKWOOD_NAND_MEM_SIZE SZ_64K /* 1K is sufficient, but 64K
|
#define KIRKWOOD_NAND_MEM_SIZE SZ_1K
|
||||||
* is the minimal window size
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define KIRKWOOD_PCIE_IO_PHYS_BASE 0xf2000000
|
#define KIRKWOOD_PCIE_IO_PHYS_BASE 0xf2000000
|
||||||
#define KIRKWOOD_PCIE_IO_VIRT_BASE 0xfef00000
|
#define KIRKWOOD_PCIE_IO_VIRT_BASE 0xfef00000
|
||||||
|
@ -48,6 +50,7 @@
|
||||||
*/
|
*/
|
||||||
#define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000)
|
#define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000)
|
||||||
#define DDR_WINDOW_CPU_BASE (DDR_VIRT_BASE | 0x1500)
|
#define DDR_WINDOW_CPU_BASE (DDR_VIRT_BASE | 0x1500)
|
||||||
|
#define DDR_OPERATION_BASE (DDR_VIRT_BASE | 0x1418)
|
||||||
|
|
||||||
#define DEV_BUS_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x10000)
|
#define DEV_BUS_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x10000)
|
||||||
#define DEV_BUS_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x10000)
|
#define DEV_BUS_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x10000)
|
||||||
|
@ -63,7 +66,11 @@
|
||||||
|
|
||||||
#define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x20000)
|
#define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x20000)
|
||||||
|
|
||||||
|
#define CRYPTO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x30000)
|
||||||
|
|
||||||
#define PCIE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x40000)
|
#define PCIE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x40000)
|
||||||
|
#define PCIE_LINK_CTRL (PCIE_VIRT_BASE | 0x70)
|
||||||
|
#define PCIE_STATUS (PCIE_VIRT_BASE | 0x1a04)
|
||||||
|
|
||||||
#define USB_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x50000)
|
#define USB_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x50000)
|
||||||
|
|
||||||
|
@ -80,6 +87,11 @@
|
||||||
#define GE01_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x74000)
|
#define GE01_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x74000)
|
||||||
|
|
||||||
#define SATA_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x80000)
|
#define SATA_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x80000)
|
||||||
|
#define SATA_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x80000)
|
||||||
|
#define SATA0_IF_CTRL (SATA_VIRT_BASE | 0x2050)
|
||||||
|
#define SATA0_PHY_MODE_2 (SATA_VIRT_BASE | 0x2330)
|
||||||
|
#define SATA1_IF_CTRL (SATA_VIRT_BASE | 0x4050)
|
||||||
|
#define SATA1_PHY_MODE_2 (SATA_VIRT_BASE | 0x4330)
|
||||||
|
|
||||||
#define SDIO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x90000)
|
#define SDIO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x90000)
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,9 @@ void __init kirkwood_mpp_conf(unsigned int *mpp_list)
|
||||||
if (!variant_mask)
|
if (!variant_mask)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* Initialize gpiolib. */
|
||||||
|
orion_gpio_init();
|
||||||
|
|
||||||
printk(KERN_DEBUG "initial MPP regs:");
|
printk(KERN_DEBUG "initial MPP regs:");
|
||||||
for (i = 0; i < MPP_NR_REGS; i++) {
|
for (i = 0; i < MPP_NR_REGS; i++) {
|
||||||
mpp_ctrl[i] = readl(MPP_CTRL(i));
|
mpp_ctrl[i] = readl(MPP_CTRL(i));
|
||||||
|
|
173
arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c
Normal file
173
arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
/*
|
||||||
|
* arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c
|
||||||
|
*
|
||||||
|
* Marvell 88F6281 GTW GE Board Setup
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/pci.h>
|
||||||
|
#include <linux/irq.h>
|
||||||
|
#include <linux/mtd/physmap.h>
|
||||||
|
#include <linux/timer.h>
|
||||||
|
#include <linux/mv643xx_eth.h>
|
||||||
|
#include <linux/ethtool.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/leds.h>
|
||||||
|
#include <linux/input.h>
|
||||||
|
#include <linux/gpio_keys.h>
|
||||||
|
#include <linux/spi/flash.h>
|
||||||
|
#include <linux/spi/spi.h>
|
||||||
|
#include <linux/spi/orion_spi.h>
|
||||||
|
#include <net/dsa.h>
|
||||||
|
#include <asm/mach-types.h>
|
||||||
|
#include <asm/mach/arch.h>
|
||||||
|
#include <asm/mach/pci.h>
|
||||||
|
#include <mach/kirkwood.h>
|
||||||
|
#include "common.h"
|
||||||
|
#include "mpp.h"
|
||||||
|
|
||||||
|
static struct mv643xx_eth_platform_data mv88f6281gtw_ge_ge00_data = {
|
||||||
|
.phy_addr = MV643XX_ETH_PHY_NONE,
|
||||||
|
.speed = SPEED_1000,
|
||||||
|
.duplex = DUPLEX_FULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct dsa_chip_data mv88f6281gtw_ge_switch_chip_data = {
|
||||||
|
.port_names[0] = "lan1",
|
||||||
|
.port_names[1] = "lan2",
|
||||||
|
.port_names[2] = "lan3",
|
||||||
|
.port_names[3] = "lan4",
|
||||||
|
.port_names[4] = "wan",
|
||||||
|
.port_names[5] = "cpu",
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct dsa_platform_data mv88f6281gtw_ge_switch_plat_data = {
|
||||||
|
.nr_chips = 1,
|
||||||
|
.chip = &mv88f6281gtw_ge_switch_chip_data,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct flash_platform_data mv88f6281gtw_ge_spi_slave_data = {
|
||||||
|
.type = "mx25l12805d",
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct spi_board_info __initdata mv88f6281gtw_ge_spi_slave_info[] = {
|
||||||
|
{
|
||||||
|
.modalias = "m25p80",
|
||||||
|
.platform_data = &mv88f6281gtw_ge_spi_slave_data,
|
||||||
|
.irq = -1,
|
||||||
|
.max_speed_hz = 50000000,
|
||||||
|
.bus_num = 0,
|
||||||
|
.chip_select = 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_keys_button mv88f6281gtw_ge_button_pins[] = {
|
||||||
|
{
|
||||||
|
.code = KEY_RESTART,
|
||||||
|
.gpio = 47,
|
||||||
|
.desc = "SWR Button",
|
||||||
|
.active_low = 1,
|
||||||
|
}, {
|
||||||
|
.code = KEY_F1,
|
||||||
|
.gpio = 46,
|
||||||
|
.desc = "WPS Button(F1)",
|
||||||
|
.active_low = 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_keys_platform_data mv88f6281gtw_ge_button_data = {
|
||||||
|
.buttons = mv88f6281gtw_ge_button_pins,
|
||||||
|
.nbuttons = ARRAY_SIZE(mv88f6281gtw_ge_button_pins),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device mv88f6281gtw_ge_buttons = {
|
||||||
|
.name = "gpio-keys",
|
||||||
|
.id = -1,
|
||||||
|
.num_resources = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &mv88f6281gtw_ge_button_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_led mv88f6281gtw_ge_led_pins[] = {
|
||||||
|
{
|
||||||
|
.name = "gtw:green:Status",
|
||||||
|
.gpio = 20,
|
||||||
|
.active_low = 0,
|
||||||
|
}, {
|
||||||
|
.name = "gtw:red:Status",
|
||||||
|
.gpio = 21,
|
||||||
|
.active_low = 0,
|
||||||
|
}, {
|
||||||
|
.name = "gtw:green:USB",
|
||||||
|
.gpio = 12,
|
||||||
|
.active_low = 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_led_platform_data mv88f6281gtw_ge_led_data = {
|
||||||
|
.leds = mv88f6281gtw_ge_led_pins,
|
||||||
|
.num_leds = ARRAY_SIZE(mv88f6281gtw_ge_led_pins),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device mv88f6281gtw_ge_leds = {
|
||||||
|
.name = "leds-gpio",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &mv88f6281gtw_ge_led_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned int mv88f6281gtw_ge_mpp_config[] __initdata = {
|
||||||
|
MPP12_GPO, /* Status#_USB pin */
|
||||||
|
MPP20_GPIO, /* Status#_GLED pin */
|
||||||
|
MPP21_GPIO, /* Status#_RLED pin */
|
||||||
|
MPP46_GPIO, /* WPS_Switch pin */
|
||||||
|
MPP47_GPIO, /* SW_Init pin */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __init mv88f6281gtw_ge_init(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Basic setup. Needs to be called early.
|
||||||
|
*/
|
||||||
|
kirkwood_init();
|
||||||
|
kirkwood_mpp_conf(mv88f6281gtw_ge_mpp_config);
|
||||||
|
|
||||||
|
kirkwood_ehci_init();
|
||||||
|
kirkwood_ge00_init(&mv88f6281gtw_ge_ge00_data);
|
||||||
|
kirkwood_ge00_switch_init(&mv88f6281gtw_ge_switch_plat_data, NO_IRQ);
|
||||||
|
spi_register_board_info(mv88f6281gtw_ge_spi_slave_info,
|
||||||
|
ARRAY_SIZE(mv88f6281gtw_ge_spi_slave_info));
|
||||||
|
kirkwood_spi_init();
|
||||||
|
kirkwood_uart0_init();
|
||||||
|
platform_device_register(&mv88f6281gtw_ge_leds);
|
||||||
|
platform_device_register(&mv88f6281gtw_ge_buttons);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __init mv88f6281gtw_ge_pci_init(void)
|
||||||
|
{
|
||||||
|
if (machine_is_mv88f6281gtw_ge())
|
||||||
|
kirkwood_pcie_init();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
subsys_initcall(mv88f6281gtw_ge_pci_init);
|
||||||
|
|
||||||
|
MACHINE_START(MV88F6281GTW_GE, "Marvell 88F6281 GTW GE Board")
|
||||||
|
/* Maintainer: Lennert Buytenhek <buytenh@marvell.com> */
|
||||||
|
.phys_io = KIRKWOOD_REGS_PHYS_BASE,
|
||||||
|
.io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc,
|
||||||
|
.boot_params = 0x00000100,
|
||||||
|
.init_machine = mv88f6281gtw_ge_init,
|
||||||
|
.map_io = kirkwood_map_io,
|
||||||
|
.init_irq = kirkwood_init_irq,
|
||||||
|
.timer = &kirkwood_timer,
|
||||||
|
MACHINE_END
|
|
@ -14,6 +14,7 @@
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mach/pci.h>
|
#include <asm/mach/pci.h>
|
||||||
#include <plat/pcie.h>
|
#include <plat/pcie.h>
|
||||||
|
#include <mach/bridge-regs.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,6 +96,7 @@ static struct pci_ops pcie_ops = {
|
||||||
static int kirkwood_pcie_setup(int nr, struct pci_sys_data *sys)
|
static int kirkwood_pcie_setup(int nr, struct pci_sys_data *sys)
|
||||||
{
|
{
|
||||||
struct resource *res;
|
struct resource *res;
|
||||||
|
extern unsigned int kirkwood_clk_ctrl;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generic PCIe unit setup.
|
* Generic PCIe unit setup.
|
||||||
|
@ -133,6 +135,8 @@ static int kirkwood_pcie_setup(int nr, struct pci_sys_data *sys)
|
||||||
sys->resource[2] = NULL;
|
sys->resource[2] = NULL;
|
||||||
sys->io_offset = 0;
|
sys->io_offset = 0;
|
||||||
|
|
||||||
|
kirkwood_clk_ctrl |= CGC_PEX0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,6 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/nand.h>
|
|
||||||
#include <linux/mtd/partitions.h>
|
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
#include <linux/spi/flash.h>
|
#include <linux/spi/flash.h>
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/mtd/nand.h>
|
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
|
@ -22,7 +21,6 @@
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <mach/kirkwood.h>
|
#include <mach/kirkwood.h>
|
||||||
#include <plat/mvsdio.h>
|
#include <plat/mvsdio.h>
|
||||||
#include <plat/orion_nand.h>
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "mpp.h"
|
#include "mpp.h"
|
||||||
|
|
||||||
|
@ -42,32 +40,6 @@ static struct mtd_partition rd88f6281_nand_parts[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource rd88f6281_nand_resource = {
|
|
||||||
.flags = IORESOURCE_MEM,
|
|
||||||
.start = KIRKWOOD_NAND_MEM_PHYS_BASE,
|
|
||||||
.end = KIRKWOOD_NAND_MEM_PHYS_BASE +
|
|
||||||
KIRKWOOD_NAND_MEM_SIZE - 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct orion_nand_data rd88f6281_nand_data = {
|
|
||||||
.parts = rd88f6281_nand_parts,
|
|
||||||
.nr_parts = ARRAY_SIZE(rd88f6281_nand_parts),
|
|
||||||
.cle = 0,
|
|
||||||
.ale = 1,
|
|
||||||
.width = 8,
|
|
||||||
.chip_delay = 25,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device rd88f6281_nand_flash = {
|
|
||||||
.name = "orion_nand",
|
|
||||||
.id = -1,
|
|
||||||
.dev = {
|
|
||||||
.platform_data = &rd88f6281_nand_data,
|
|
||||||
},
|
|
||||||
.resource = &rd88f6281_nand_resource,
|
|
||||||
.num_resources = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mv643xx_eth_platform_data rd88f6281_ge00_data = {
|
static struct mv643xx_eth_platform_data rd88f6281_ge00_data = {
|
||||||
.phy_addr = MV643XX_ETH_PHY_NONE,
|
.phy_addr = MV643XX_ETH_PHY_NONE,
|
||||||
.speed = SPEED_1000,
|
.speed = SPEED_1000,
|
||||||
|
@ -114,6 +86,7 @@ static void __init rd88f6281_init(void)
|
||||||
kirkwood_init();
|
kirkwood_init();
|
||||||
kirkwood_mpp_conf(rd88f6281_mpp_config);
|
kirkwood_mpp_conf(rd88f6281_mpp_config);
|
||||||
|
|
||||||
|
kirkwood_nand_init(ARRAY_AND_SIZE(rd88f6281_nand_parts), 25);
|
||||||
kirkwood_ehci_init();
|
kirkwood_ehci_init();
|
||||||
|
|
||||||
kirkwood_ge00_init(&rd88f6281_ge00_data);
|
kirkwood_ge00_init(&rd88f6281_ge00_data);
|
||||||
|
@ -129,8 +102,6 @@ static void __init rd88f6281_init(void)
|
||||||
kirkwood_sata_init(&rd88f6281_sata_data);
|
kirkwood_sata_init(&rd88f6281_sata_data);
|
||||||
kirkwood_sdio_init(&rd88f6281_mvsdio_data);
|
kirkwood_sdio_init(&rd88f6281_mvsdio_data);
|
||||||
kirkwood_uart0_init();
|
kirkwood_uart0_init();
|
||||||
|
|
||||||
platform_device_register(&rd88f6281_nand_flash);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init rd88f6281_pci_init(void)
|
static int __init rd88f6281_pci_init(void)
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/nand.h>
|
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
@ -20,7 +19,6 @@
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <mach/kirkwood.h>
|
#include <mach/kirkwood.h>
|
||||||
#include <plat/mvsdio.h>
|
#include <plat/mvsdio.h>
|
||||||
#include <plat/orion_nand.h>
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "mpp.h"
|
#include "mpp.h"
|
||||||
|
|
||||||
|
@ -40,38 +38,12 @@ static struct mtd_partition sheevaplug_nand_parts[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource sheevaplug_nand_resource = {
|
|
||||||
.flags = IORESOURCE_MEM,
|
|
||||||
.start = KIRKWOOD_NAND_MEM_PHYS_BASE,
|
|
||||||
.end = KIRKWOOD_NAND_MEM_PHYS_BASE +
|
|
||||||
KIRKWOOD_NAND_MEM_SIZE - 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct orion_nand_data sheevaplug_nand_data = {
|
|
||||||
.parts = sheevaplug_nand_parts,
|
|
||||||
.nr_parts = ARRAY_SIZE(sheevaplug_nand_parts),
|
|
||||||
.cle = 0,
|
|
||||||
.ale = 1,
|
|
||||||
.width = 8,
|
|
||||||
.chip_delay = 25,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct platform_device sheevaplug_nand_flash = {
|
|
||||||
.name = "orion_nand",
|
|
||||||
.id = -1,
|
|
||||||
.dev = {
|
|
||||||
.platform_data = &sheevaplug_nand_data,
|
|
||||||
},
|
|
||||||
.resource = &sheevaplug_nand_resource,
|
|
||||||
.num_resources = 1,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct mv643xx_eth_platform_data sheevaplug_ge00_data = {
|
static struct mv643xx_eth_platform_data sheevaplug_ge00_data = {
|
||||||
.phy_addr = MV643XX_ETH_PHY_ADDR(0),
|
.phy_addr = MV643XX_ETH_PHY_ADDR(0),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct mvsdio_platform_data sheevaplug_mvsdio_data = {
|
static struct mvsdio_platform_data sheevaplug_mvsdio_data = {
|
||||||
// unfortunately the CD signal has not been connected */
|
/* unfortunately the CD signal has not been connected */
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct gpio_led sheevaplug_led_pins[] = {
|
static struct gpio_led sheevaplug_led_pins[] = {
|
||||||
|
@ -111,6 +83,7 @@ static void __init sheevaplug_init(void)
|
||||||
kirkwood_mpp_conf(sheevaplug_mpp_config);
|
kirkwood_mpp_conf(sheevaplug_mpp_config);
|
||||||
|
|
||||||
kirkwood_uart0_init();
|
kirkwood_uart0_init();
|
||||||
|
kirkwood_nand_init(ARRAY_AND_SIZE(sheevaplug_nand_parts), 25);
|
||||||
|
|
||||||
if (gpio_request(29, "USB Power Enable") != 0 ||
|
if (gpio_request(29, "USB Power Enable") != 0 ||
|
||||||
gpio_direction_output(29, 1) != 0)
|
gpio_direction_output(29, 1) != 0)
|
||||||
|
@ -120,7 +93,6 @@ static void __init sheevaplug_init(void)
|
||||||
kirkwood_ge00_init(&sheevaplug_ge00_data);
|
kirkwood_ge00_init(&sheevaplug_ge00_data);
|
||||||
kirkwood_sdio_init(&sheevaplug_mvsdio_data);
|
kirkwood_sdio_init(&sheevaplug_mvsdio_data);
|
||||||
|
|
||||||
platform_device_register(&sheevaplug_nand_flash);
|
|
||||||
platform_device_register(&sheevaplug_leds);
|
platform_device_register(&sheevaplug_leds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,6 +142,8 @@ static unsigned int qnap_ts219_mpp_config[] __initdata = {
|
||||||
MPP1_SPI_MOSI,
|
MPP1_SPI_MOSI,
|
||||||
MPP2_SPI_SCK,
|
MPP2_SPI_SCK,
|
||||||
MPP3_SPI_MISO,
|
MPP3_SPI_MISO,
|
||||||
|
MPP4_SATA1_ACTn,
|
||||||
|
MPP5_SATA0_ACTn,
|
||||||
MPP8_TW_SDA,
|
MPP8_TW_SDA,
|
||||||
MPP9_TW_SCK,
|
MPP9_TW_SCK,
|
||||||
MPP10_UART0_TXD,
|
MPP10_UART0_TXD,
|
||||||
|
@ -150,10 +152,6 @@ static unsigned int qnap_ts219_mpp_config[] __initdata = {
|
||||||
MPP14_UART1_RXD, /* PIC controller */
|
MPP14_UART1_RXD, /* PIC controller */
|
||||||
MPP15_GPIO, /* USB Copy button */
|
MPP15_GPIO, /* USB Copy button */
|
||||||
MPP16_GPIO, /* Reset button */
|
MPP16_GPIO, /* Reset button */
|
||||||
MPP20_SATA1_ACTn,
|
|
||||||
MPP21_SATA0_ACTn,
|
|
||||||
MPP22_SATA1_PRESENTn,
|
|
||||||
MPP23_SATA0_PRESENTn,
|
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,9 @@ static struct platform_device loki_ge0 = {
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
.resource = loki_ge0_resources,
|
.resource = loki_ge0_resources,
|
||||||
|
.dev = {
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init loki_ge0_init(struct mv643xx_eth_platform_data *eth_data)
|
void __init loki_ge0_init(struct mv643xx_eth_platform_data *eth_data)
|
||||||
|
@ -136,6 +139,9 @@ static struct platform_device loki_ge1 = {
|
||||||
.id = 1,
|
.id = 1,
|
||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
.resource = loki_ge1_resources,
|
.resource = loki_ge1_resources,
|
||||||
|
.dev = {
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init loki_ge1_init(struct mv643xx_eth_platform_data *eth_data)
|
void __init loki_ge1_init(struct mv643xx_eth_platform_data *eth_data)
|
||||||
|
|
|
@ -3,6 +3,11 @@
|
||||||
|
|
||||||
#include <mach/mfp.h>
|
#include <mach/mfp.h>
|
||||||
|
|
||||||
|
#define MFP_DRIVE_VERY_SLOW (0x0 << 13)
|
||||||
|
#define MFP_DRIVE_SLOW (0x1 << 13)
|
||||||
|
#define MFP_DRIVE_MEDIUM (0x2 << 13)
|
||||||
|
#define MFP_DRIVE_FAST (0x3 << 13)
|
||||||
|
|
||||||
/* GPIO */
|
/* GPIO */
|
||||||
#define GPIO0_GPIO MFP_CFG(GPIO0, AF5)
|
#define GPIO0_GPIO MFP_CFG(GPIO0, AF5)
|
||||||
#define GPIO1_GPIO MFP_CFG(GPIO1, AF5)
|
#define GPIO1_GPIO MFP_CFG(GPIO1, AF5)
|
||||||
|
|
|
@ -3,6 +3,11 @@
|
||||||
|
|
||||||
#include <mach/mfp.h>
|
#include <mach/mfp.h>
|
||||||
|
|
||||||
|
#define MFP_DRIVE_VERY_SLOW (0x0 << 13)
|
||||||
|
#define MFP_DRIVE_SLOW (0x2 << 13)
|
||||||
|
#define MFP_DRIVE_MEDIUM (0x4 << 13)
|
||||||
|
#define MFP_DRIVE_FAST (0x8 << 13)
|
||||||
|
|
||||||
/* UART2 */
|
/* UART2 */
|
||||||
#define GPIO47_UART2_RXD MFP_CFG(GPIO47, AF6)
|
#define GPIO47_UART2_RXD MFP_CFG(GPIO47, AF6)
|
||||||
#define GPIO48_UART2_TXD MFP_CFG(GPIO48, AF6)
|
#define GPIO48_UART2_TXD MFP_CFG(GPIO48, AF6)
|
||||||
|
|
|
@ -12,16 +12,13 @@
|
||||||
* possible, we make the following compromise:
|
* possible, we make the following compromise:
|
||||||
*
|
*
|
||||||
* 1. SLEEP_OE_N will always be programmed to '1' (by MFP_LPM_FLOAT)
|
* 1. SLEEP_OE_N will always be programmed to '1' (by MFP_LPM_FLOAT)
|
||||||
* 2. DRIVE strength definitions redefined to include the reserved bit10
|
* 2. DRIVE strength definitions redefined to include the reserved bit
|
||||||
|
* - the reserved bit differs between pxa168 and pxa910, and the
|
||||||
|
* MFP_DRIVE_* macros are individually defined in mfp-pxa{168,910}.h
|
||||||
* 3. Override MFP_CFG() and MFP_CFG_DRV()
|
* 3. Override MFP_CFG() and MFP_CFG_DRV()
|
||||||
* 4. Drop the use of MFP_CFG_LPM() and MFP_CFG_X()
|
* 4. Drop the use of MFP_CFG_LPM() and MFP_CFG_X()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MFP_DRIVE_VERY_SLOW (0x0 << 13)
|
|
||||||
#define MFP_DRIVE_SLOW (0x2 << 13)
|
|
||||||
#define MFP_DRIVE_MEDIUM (0x4 << 13)
|
|
||||||
#define MFP_DRIVE_FAST (0x8 << 13)
|
|
||||||
|
|
||||||
#undef MFP_CFG
|
#undef MFP_CFG
|
||||||
#undef MFP_CFG_DRV
|
#undef MFP_CFG_DRV
|
||||||
#undef MFP_CFG_LPM
|
#undef MFP_CFG_LPM
|
||||||
|
|
|
@ -136,7 +136,7 @@ static struct clock_event_device ckevt = {
|
||||||
.set_mode = timer_set_mode,
|
.set_mode = timer_set_mode,
|
||||||
};
|
};
|
||||||
|
|
||||||
static cycle_t clksrc_read(void)
|
static cycle_t clksrc_read(struct clocksource *cs)
|
||||||
{
|
{
|
||||||
return timer_read();
|
return timer_read();
|
||||||
}
|
}
|
||||||
|
|
|
@ -321,6 +321,9 @@ static struct platform_device mv78xx0_ge00 = {
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
.resource = mv78xx0_ge00_resources,
|
.resource = mv78xx0_ge00_resources,
|
||||||
|
.dev = {
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data)
|
void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data)
|
||||||
|
@ -375,6 +378,9 @@ static struct platform_device mv78xx0_ge01 = {
|
||||||
.id = 1,
|
.id = 1,
|
||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
.resource = mv78xx0_ge01_resources,
|
.resource = mv78xx0_ge01_resources,
|
||||||
|
.dev = {
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data)
|
void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data)
|
||||||
|
@ -429,6 +435,9 @@ static struct platform_device mv78xx0_ge10 = {
|
||||||
.id = 2,
|
.id = 2,
|
||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
.resource = mv78xx0_ge10_resources,
|
.resource = mv78xx0_ge10_resources,
|
||||||
|
.dev = {
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data)
|
void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data)
|
||||||
|
@ -496,6 +505,9 @@ static struct platform_device mv78xx0_ge11 = {
|
||||||
.id = 3,
|
.id = 3,
|
||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
.resource = mv78xx0_ge11_resources,
|
.resource = mv78xx0_ge11_resources,
|
||||||
|
.dev = {
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data)
|
void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data)
|
||||||
|
@ -532,12 +544,10 @@ static struct mv64xxx_i2c_pdata mv78xx0_i2c_0_pdata = {
|
||||||
|
|
||||||
static struct resource mv78xx0_i2c_0_resources[] = {
|
static struct resource mv78xx0_i2c_0_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "i2c 0 base",
|
|
||||||
.start = I2C_0_PHYS_BASE,
|
.start = I2C_0_PHYS_BASE,
|
||||||
.end = I2C_0_PHYS_BASE + 0x1f,
|
.end = I2C_0_PHYS_BASE + 0x1f,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
}, {
|
}, {
|
||||||
.name = "i2c 0 irq",
|
|
||||||
.start = IRQ_MV78XX0_I2C_0,
|
.start = IRQ_MV78XX0_I2C_0,
|
||||||
.end = IRQ_MV78XX0_I2C_0,
|
.end = IRQ_MV78XX0_I2C_0,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
|
@ -567,12 +577,10 @@ static struct mv64xxx_i2c_pdata mv78xx0_i2c_1_pdata = {
|
||||||
|
|
||||||
static struct resource mv78xx0_i2c_1_resources[] = {
|
static struct resource mv78xx0_i2c_1_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "i2c 1 base",
|
|
||||||
.start = I2C_1_PHYS_BASE,
|
.start = I2C_1_PHYS_BASE,
|
||||||
.end = I2C_1_PHYS_BASE + 0x1f,
|
.end = I2C_1_PHYS_BASE + 0x1f,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
}, {
|
}, {
|
||||||
.name = "i2c 1 irq",
|
|
||||||
.start = IRQ_MV78XX0_I2C_1,
|
.start = IRQ_MV78XX0_I2C_1,
|
||||||
.end = IRQ_MV78XX0_I2C_1,
|
.end = IRQ_MV78XX0_I2C_1,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
|
|
|
@ -28,6 +28,9 @@ void __init mv78xx0_init_irq(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
/* Initialize gpiolib. */
|
||||||
|
orion_gpio_init();
|
||||||
|
|
||||||
orion_irq_init(0, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF));
|
orion_irq_init(0, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF));
|
||||||
orion_irq_init(32, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF));
|
orion_irq_init(32, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF));
|
||||||
orion_irq_init(64, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_ERR_OFF));
|
orion_irq_init(64, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_ERR_OFF));
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/mbus.h>
|
#include <linux/mbus.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
@ -44,6 +45,7 @@
|
||||||
#define TARGET_DEV_BUS 1
|
#define TARGET_DEV_BUS 1
|
||||||
#define TARGET_PCI 3
|
#define TARGET_PCI 3
|
||||||
#define TARGET_PCIE 4
|
#define TARGET_PCIE 4
|
||||||
|
#define TARGET_SRAM 9
|
||||||
#define ATTR_PCIE_MEM 0x59
|
#define ATTR_PCIE_MEM 0x59
|
||||||
#define ATTR_PCIE_IO 0x51
|
#define ATTR_PCIE_IO 0x51
|
||||||
#define ATTR_PCIE_WA 0x79
|
#define ATTR_PCIE_WA 0x79
|
||||||
|
@ -53,6 +55,7 @@
|
||||||
#define ATTR_DEV_CS1 0x1d
|
#define ATTR_DEV_CS1 0x1d
|
||||||
#define ATTR_DEV_CS2 0x1b
|
#define ATTR_DEV_CS2 0x1b
|
||||||
#define ATTR_DEV_BOOT 0xf
|
#define ATTR_DEV_BOOT 0xf
|
||||||
|
#define ATTR_SRAM 0x0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Helpers to get DDR bank info
|
* Helpers to get DDR bank info
|
||||||
|
@ -87,13 +90,13 @@ static int __init orion5x_cpu_win_can_remap(int win)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init setup_cpu_win(int win, u32 base, u32 size,
|
static int __init setup_cpu_win(int win, u32 base, u32 size,
|
||||||
u8 target, u8 attr, int remap)
|
u8 target, u8 attr, int remap)
|
||||||
{
|
{
|
||||||
if (win >= 8) {
|
if (win >= 8) {
|
||||||
printk(KERN_ERR "setup_cpu_win: trying to allocate "
|
printk(KERN_ERR "setup_cpu_win: trying to allocate "
|
||||||
"window %d\n", win);
|
"window %d\n", win);
|
||||||
return;
|
return -ENOSPC;
|
||||||
}
|
}
|
||||||
|
|
||||||
writel(base & 0xffff0000, CPU_WIN_BASE(win));
|
writel(base & 0xffff0000, CPU_WIN_BASE(win));
|
||||||
|
@ -107,6 +110,7 @@ static void __init setup_cpu_win(int win, u32 base, u32 size,
|
||||||
writel(remap & 0xffff0000, CPU_WIN_REMAP_LO(win));
|
writel(remap & 0xffff0000, CPU_WIN_REMAP_LO(win));
|
||||||
writel(0, CPU_WIN_REMAP_HI(win));
|
writel(0, CPU_WIN_REMAP_HI(win));
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init orion5x_setup_cpu_mbus_bridge(void)
|
void __init orion5x_setup_cpu_mbus_bridge(void)
|
||||||
|
@ -193,3 +197,9 @@ void __init orion5x_setup_pcie_wa_win(u32 base, u32 size)
|
||||||
setup_cpu_win(win_alloc_count++, base, size,
|
setup_cpu_win(win_alloc_count++, base, size,
|
||||||
TARGET_PCIE, ATTR_PCIE_WA, -1);
|
TARGET_PCIE, ATTR_PCIE_WA, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __init orion5x_setup_sram_win(void)
|
||||||
|
{
|
||||||
|
return setup_cpu_win(win_alloc_count, ORION5X_SRAM_PHYS_BASE,
|
||||||
|
ORION5X_SRAM_SIZE, TARGET_SRAM, ATTR_SRAM, -1);
|
||||||
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include <plat/ehci-orion.h>
|
#include <plat/ehci-orion.h>
|
||||||
#include <plat/mv_xor.h>
|
#include <plat/mv_xor.h>
|
||||||
#include <plat/orion_nand.h>
|
#include <plat/orion_nand.h>
|
||||||
#include <plat/orion5x_wdt.h>
|
#include <plat/orion_wdt.h>
|
||||||
#include <plat/time.h>
|
#include <plat/time.h>
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
@ -188,6 +188,9 @@ static struct platform_device orion5x_eth = {
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
.resource = orion5x_eth_resources,
|
.resource = orion5x_eth_resources,
|
||||||
|
.dev = {
|
||||||
|
.coherent_dma_mask = 0xffffffff,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data)
|
void __init orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data)
|
||||||
|
@ -248,12 +251,10 @@ static struct mv64xxx_i2c_pdata orion5x_i2c_pdata = {
|
||||||
|
|
||||||
static struct resource orion5x_i2c_resources[] = {
|
static struct resource orion5x_i2c_resources[] = {
|
||||||
{
|
{
|
||||||
.name = "i2c base",
|
|
||||||
.start = I2C_PHYS_BASE,
|
.start = I2C_PHYS_BASE,
|
||||||
.end = I2C_PHYS_BASE + 0x1f,
|
.end = I2C_PHYS_BASE + 0x1f,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
}, {
|
}, {
|
||||||
.name = "i2c irq",
|
|
||||||
.start = IRQ_ORION5X_I2C,
|
.start = IRQ_ORION5X_I2C,
|
||||||
.end = IRQ_ORION5X_I2C,
|
.end = IRQ_ORION5X_I2C,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
|
@ -535,16 +536,52 @@ void __init orion5x_xor_init(void)
|
||||||
platform_device_register(&orion5x_xor1_channel);
|
platform_device_register(&orion5x_xor1_channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct resource orion5x_crypto_res[] = {
|
||||||
|
{
|
||||||
|
.name = "regs",
|
||||||
|
.start = ORION5X_CRYPTO_PHYS_BASE,
|
||||||
|
.end = ORION5X_CRYPTO_PHYS_BASE + 0xffff,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
}, {
|
||||||
|
.name = "sram",
|
||||||
|
.start = ORION5X_SRAM_PHYS_BASE,
|
||||||
|
.end = ORION5X_SRAM_PHYS_BASE + SZ_8K - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
}, {
|
||||||
|
.name = "crypto interrupt",
|
||||||
|
.start = IRQ_ORION5X_CESA,
|
||||||
|
.end = IRQ_ORION5X_CESA,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device orion5x_crypto_device = {
|
||||||
|
.name = "mv_crypto",
|
||||||
|
.id = -1,
|
||||||
|
.num_resources = ARRAY_SIZE(orion5x_crypto_res),
|
||||||
|
.resource = orion5x_crypto_res,
|
||||||
|
};
|
||||||
|
|
||||||
|
int __init orion5x_crypto_init(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = orion5x_setup_sram_win();
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return platform_device_register(&orion5x_crypto_device);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Watchdog
|
* Watchdog
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
static struct orion5x_wdt_platform_data orion5x_wdt_data = {
|
static struct orion_wdt_platform_data orion5x_wdt_data = {
|
||||||
.tclk = 0,
|
.tclk = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device orion5x_wdt_device = {
|
static struct platform_device orion5x_wdt_device = {
|
||||||
.name = "orion5x_wdt",
|
.name = "orion_wdt",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &orion5x_wdt_data,
|
.platform_data = &orion5x_wdt_data,
|
||||||
|
|
|
@ -26,6 +26,7 @@ void orion5x_setup_dev0_win(u32 base, u32 size);
|
||||||
void orion5x_setup_dev1_win(u32 base, u32 size);
|
void orion5x_setup_dev1_win(u32 base, u32 size);
|
||||||
void orion5x_setup_dev2_win(u32 base, u32 size);
|
void orion5x_setup_dev2_win(u32 base, u32 size);
|
||||||
void orion5x_setup_pcie_wa_win(u32 base, u32 size);
|
void orion5x_setup_pcie_wa_win(u32 base, u32 size);
|
||||||
|
int orion5x_setup_sram_win(void);
|
||||||
|
|
||||||
void orion5x_ehci0_init(void);
|
void orion5x_ehci0_init(void);
|
||||||
void orion5x_ehci1_init(void);
|
void orion5x_ehci1_init(void);
|
||||||
|
@ -37,6 +38,7 @@ void orion5x_spi_init(void);
|
||||||
void orion5x_uart0_init(void);
|
void orion5x_uart0_init(void);
|
||||||
void orion5x_uart1_init(void);
|
void orion5x_uart1_init(void);
|
||||||
void orion5x_xor_init(void);
|
void orion5x_xor_init(void);
|
||||||
|
int orion5x_crypto_init(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PCIe/PCI functions.
|
* PCIe/PCI functions.
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
|
|
||||||
#define CPU_CTRL (ORION5X_BRIDGE_VIRT_BASE | 0x104)
|
#define CPU_CTRL (ORION5X_BRIDGE_VIRT_BASE | 0x104)
|
||||||
|
|
||||||
#define CPU_RESET_MASK (ORION5X_BRIDGE_VIRT_BASE | 0x108)
|
#define RSTOUTn_MASK (ORION5X_BRIDGE_VIRT_BASE | 0x108)
|
||||||
#define WDT_RESET 0x0002
|
#define WDT_RESET_OUT_EN 0x0002
|
||||||
|
|
||||||
#define CPU_SOFT_RESET (ORION5X_BRIDGE_VIRT_BASE | 0x10c)
|
#define CPU_SOFT_RESET (ORION5X_BRIDGE_VIRT_BASE | 0x10c)
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
* f1000000 on-chip peripheral registers
|
* f1000000 on-chip peripheral registers
|
||||||
* f2000000 PCIe I/O space
|
* f2000000 PCIe I/O space
|
||||||
* f2100000 PCI I/O space
|
* f2100000 PCI I/O space
|
||||||
|
* f2200000 SRAM dedicated for the crypto unit
|
||||||
* f4000000 device bus mappings (boot)
|
* f4000000 device bus mappings (boot)
|
||||||
* fa000000 device bus mappings (cs0)
|
* fa000000 device bus mappings (cs0)
|
||||||
* fa800000 device bus mappings (cs2)
|
* fa800000 device bus mappings (cs2)
|
||||||
|
@ -49,6 +50,9 @@
|
||||||
#define ORION5X_PCI_IO_BUS_BASE 0x00100000
|
#define ORION5X_PCI_IO_BUS_BASE 0x00100000
|
||||||
#define ORION5X_PCI_IO_SIZE SZ_1M
|
#define ORION5X_PCI_IO_SIZE SZ_1M
|
||||||
|
|
||||||
|
#define ORION5X_SRAM_PHYS_BASE (0xf2200000)
|
||||||
|
#define ORION5X_SRAM_SIZE SZ_8K
|
||||||
|
|
||||||
/* Relevant only for Orion-1/Orion-NAS */
|
/* Relevant only for Orion-1/Orion-NAS */
|
||||||
#define ORION5X_PCIE_WA_PHYS_BASE 0xf0000000
|
#define ORION5X_PCIE_WA_PHYS_BASE 0xf0000000
|
||||||
#define ORION5X_PCIE_WA_VIRT_BASE 0xfe000000
|
#define ORION5X_PCIE_WA_VIRT_BASE 0xfe000000
|
||||||
|
@ -94,6 +98,8 @@
|
||||||
#define ORION5X_SATA_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x80000)
|
#define ORION5X_SATA_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x80000)
|
||||||
#define ORION5X_SATA_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x80000)
|
#define ORION5X_SATA_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x80000)
|
||||||
|
|
||||||
|
#define ORION5X_CRYPTO_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x90000)
|
||||||
|
|
||||||
#define ORION5X_USB1_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0xa0000)
|
#define ORION5X_USB1_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0xa0000)
|
||||||
#define ORION5X_USB1_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0xa0000)
|
#define ORION5X_USB1_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0xa0000)
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ static inline void arch_reset(char mode, const char *cmd)
|
||||||
/*
|
/*
|
||||||
* Enable and issue soft reset
|
* Enable and issue soft reset
|
||||||
*/
|
*/
|
||||||
orion5x_setbits(CPU_RESET_MASK, (1 << 2));
|
orion5x_setbits(RSTOUTn_MASK, (1 << 2));
|
||||||
orion5x_setbits(CPU_SOFT_RESET, 1);
|
orion5x_setbits(CPU_SOFT_RESET, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,9 @@ void __init orion5x_mpp_conf(struct orion5x_mpp_mode *mode)
|
||||||
u32 mpp_8_15_ctrl = readl(MPP_8_15_CTRL);
|
u32 mpp_8_15_ctrl = readl(MPP_8_15_CTRL);
|
||||||
u32 mpp_16_19_ctrl = readl(MPP_16_19_CTRL);
|
u32 mpp_16_19_ctrl = readl(MPP_16_19_CTRL);
|
||||||
|
|
||||||
|
/* Initialize gpiolib. */
|
||||||
|
orion_gpio_init();
|
||||||
|
|
||||||
while (mode->mpp >= 0) {
|
while (mode->mpp >= 0) {
|
||||||
u32 *reg;
|
u32 *reg;
|
||||||
int num_type;
|
int num_type;
|
||||||
|
|
|
@ -181,9 +181,9 @@ static void mss2_power_off(void)
|
||||||
/*
|
/*
|
||||||
* Enable and issue soft reset
|
* Enable and issue soft reset
|
||||||
*/
|
*/
|
||||||
reg = readl(CPU_RESET_MASK);
|
reg = readl(RSTOUTn_MASK);
|
||||||
reg |= 1 << 2;
|
reg |= 1 << 2;
|
||||||
writel(reg, CPU_RESET_MASK);
|
writel(reg, RSTOUTn_MASK);
|
||||||
|
|
||||||
reg = readl(CPU_SOFT_RESET);
|
reg = readl(CPU_SOFT_RESET);
|
||||||
reg |= 1;
|
reg |= 1;
|
||||||
|
|
|
@ -25,6 +25,7 @@ struct fpga_devices {
|
||||||
/* Technologic Systems */
|
/* Technologic Systems */
|
||||||
struct fpga_device ts_rtc;
|
struct fpga_device ts_rtc;
|
||||||
struct fpga_device ts_nand;
|
struct fpga_device ts_nand;
|
||||||
|
struct fpga_device ts_rng;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ts78xx_fpga_data {
|
struct ts78xx_fpga_data {
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/m48t86.h>
|
#include <linux/m48t86.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/nand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
#include <linux/timeriomem-rng.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
|
@ -269,6 +270,50 @@ static void ts78xx_ts_nand_unload(void)
|
||||||
platform_device_del(&ts78xx_ts_nand_device);
|
platform_device_del(&ts78xx_ts_nand_device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* HW RNG
|
||||||
|
****************************************************************************/
|
||||||
|
#define TS_RNG_DATA (TS78XX_FPGA_REGS_PHYS_BASE | 0x044)
|
||||||
|
|
||||||
|
static struct resource ts78xx_ts_rng_resource = {
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
.start = TS_RNG_DATA,
|
||||||
|
.end = TS_RNG_DATA + 4 - 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct timeriomem_rng_data ts78xx_ts_rng_data = {
|
||||||
|
.period = 1000000, /* one second */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device ts78xx_ts_rng_device = {
|
||||||
|
.name = "timeriomem_rng",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &ts78xx_ts_rng_data,
|
||||||
|
},
|
||||||
|
.resource = &ts78xx_ts_rng_resource,
|
||||||
|
.num_resources = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int ts78xx_ts_rng_load(void)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if (ts78xx_fpga.supports.ts_rng.init == 0) {
|
||||||
|
rc = platform_device_register(&ts78xx_ts_rng_device);
|
||||||
|
if (!rc)
|
||||||
|
ts78xx_fpga.supports.ts_rng.init = 1;
|
||||||
|
} else
|
||||||
|
rc = platform_device_add(&ts78xx_ts_rng_device);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void ts78xx_ts_rng_unload(void)
|
||||||
|
{
|
||||||
|
platform_device_del(&ts78xx_ts_rng_device);
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* FPGA 'hotplug' support code
|
* FPGA 'hotplug' support code
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -276,6 +321,7 @@ static void ts78xx_fpga_devices_zero_init(void)
|
||||||
{
|
{
|
||||||
ts78xx_fpga.supports.ts_rtc.init = 0;
|
ts78xx_fpga.supports.ts_rtc.init = 0;
|
||||||
ts78xx_fpga.supports.ts_nand.init = 0;
|
ts78xx_fpga.supports.ts_nand.init = 0;
|
||||||
|
ts78xx_fpga.supports.ts_rng.init = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ts78xx_fpga_supports(void)
|
static void ts78xx_fpga_supports(void)
|
||||||
|
@ -289,10 +335,12 @@ static void ts78xx_fpga_supports(void)
|
||||||
case TS7800_REV_5:
|
case TS7800_REV_5:
|
||||||
ts78xx_fpga.supports.ts_rtc.present = 1;
|
ts78xx_fpga.supports.ts_rtc.present = 1;
|
||||||
ts78xx_fpga.supports.ts_nand.present = 1;
|
ts78xx_fpga.supports.ts_nand.present = 1;
|
||||||
|
ts78xx_fpga.supports.ts_rng.present = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ts78xx_fpga.supports.ts_rtc.present = 0;
|
ts78xx_fpga.supports.ts_rtc.present = 0;
|
||||||
ts78xx_fpga.supports.ts_nand.present = 0;
|
ts78xx_fpga.supports.ts_nand.present = 0;
|
||||||
|
ts78xx_fpga.supports.ts_rng.present = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,6 +364,14 @@ static int ts78xx_fpga_load_devices(void)
|
||||||
}
|
}
|
||||||
ret |= tmp;
|
ret |= tmp;
|
||||||
}
|
}
|
||||||
|
if (ts78xx_fpga.supports.ts_rng.present == 1) {
|
||||||
|
tmp = ts78xx_ts_rng_load();
|
||||||
|
if (tmp) {
|
||||||
|
printk(KERN_INFO "TS-78xx: RNG not registered\n");
|
||||||
|
ts78xx_fpga.supports.ts_rng.present = 0;
|
||||||
|
}
|
||||||
|
ret |= tmp;
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -328,6 +384,8 @@ static int ts78xx_fpga_unload_devices(void)
|
||||||
ts78xx_ts_rtc_unload();
|
ts78xx_ts_rtc_unload();
|
||||||
if (ts78xx_fpga.supports.ts_nand.present == 1)
|
if (ts78xx_fpga.supports.ts_nand.present == 1)
|
||||||
ts78xx_ts_nand_unload();
|
ts78xx_ts_nand_unload();
|
||||||
|
if (ts78xx_fpga.supports.ts_rng.present == 1)
|
||||||
|
ts78xx_ts_rng_unload();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
#include <linux/ethtool.h>
|
#include <linux/ethtool.h>
|
||||||
|
#include <net/dsa.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -97,6 +98,20 @@ static struct mv643xx_eth_platform_data wnr854t_eth_data = {
|
||||||
.duplex = DUPLEX_FULL,
|
.duplex = DUPLEX_FULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct dsa_chip_data wnr854t_switch_chip_data = {
|
||||||
|
.port_names[0] = "lan3",
|
||||||
|
.port_names[1] = "lan4",
|
||||||
|
.port_names[2] = "wan",
|
||||||
|
.port_names[3] = "cpu",
|
||||||
|
.port_names[5] = "lan1",
|
||||||
|
.port_names[7] = "lan2",
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct dsa_platform_data wnr854t_switch_plat_data = {
|
||||||
|
.nr_chips = 1,
|
||||||
|
.chip = &wnr854t_switch_chip_data,
|
||||||
|
};
|
||||||
|
|
||||||
static void __init wnr854t_init(void)
|
static void __init wnr854t_init(void)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -110,6 +125,7 @@ static void __init wnr854t_init(void)
|
||||||
* Configure peripherals.
|
* Configure peripherals.
|
||||||
*/
|
*/
|
||||||
orion5x_eth_init(&wnr854t_eth_data);
|
orion5x_eth_init(&wnr854t_eth_data);
|
||||||
|
orion5x_eth_switch_init(&wnr854t_switch_plat_data, NO_IRQ);
|
||||||
orion5x_uart0_init();
|
orion5x_uart0_init();
|
||||||
|
|
||||||
orion5x_setup_dev_boot_win(WNR854T_NOR_BOOT_BASE,
|
orion5x_setup_dev_boot_win(WNR854T_NOR_BOOT_BASE,
|
||||||
|
|
|
@ -111,9 +111,9 @@ static unsigned long ezx_pin_config[] __initdata = {
|
||||||
GPIO25_SSP1_TXD,
|
GPIO25_SSP1_TXD,
|
||||||
GPIO26_SSP1_RXD,
|
GPIO26_SSP1_RXD,
|
||||||
GPIO24_GPIO, /* pcap chip select */
|
GPIO24_GPIO, /* pcap chip select */
|
||||||
GPIO1_GPIO, /* pcap interrupt */
|
GPIO1_GPIO | WAKEUP_ON_EDGE_RISE, /* pcap interrupt */
|
||||||
GPIO4_GPIO, /* WDI_AP */
|
GPIO4_GPIO | MFP_LPM_DRIVE_HIGH, /* WDI_AP */
|
||||||
GPIO55_GPIO, /* SYS_RESTART */
|
GPIO55_GPIO | MFP_LPM_DRIVE_HIGH, /* SYS_RESTART */
|
||||||
|
|
||||||
/* MMC */
|
/* MMC */
|
||||||
GPIO32_MMC_CLK,
|
GPIO32_MMC_CLK,
|
||||||
|
@ -144,20 +144,20 @@ static unsigned long ezx_pin_config[] __initdata = {
|
||||||
#if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680)
|
#if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680)
|
||||||
static unsigned long gen1_pin_config[] __initdata = {
|
static unsigned long gen1_pin_config[] __initdata = {
|
||||||
/* flip / lockswitch */
|
/* flip / lockswitch */
|
||||||
GPIO12_GPIO,
|
GPIO12_GPIO | WAKEUP_ON_EDGE_BOTH,
|
||||||
|
|
||||||
/* bluetooth (bcm2035) */
|
/* bluetooth (bcm2035) */
|
||||||
GPIO14_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
|
GPIO14_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */
|
||||||
GPIO48_GPIO, /* RESET */
|
GPIO48_GPIO, /* RESET */
|
||||||
GPIO28_GPIO, /* WAKEUP */
|
GPIO28_GPIO, /* WAKEUP */
|
||||||
|
|
||||||
/* Neptune handshake */
|
/* Neptune handshake */
|
||||||
GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */
|
GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */
|
||||||
GPIO57_GPIO, /* AP_RDY */
|
GPIO57_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */
|
||||||
GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */
|
GPIO13_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI */
|
||||||
GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI2 */
|
GPIO3_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI2 */
|
||||||
GPIO82_GPIO, /* RESET */
|
GPIO82_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */
|
||||||
GPIO99_GPIO, /* TC_MM_EN */
|
GPIO99_GPIO | MFP_LPM_DRIVE_HIGH, /* TC_MM_EN */
|
||||||
|
|
||||||
/* sound */
|
/* sound */
|
||||||
GPIO52_SSP3_SCLK,
|
GPIO52_SSP3_SCLK,
|
||||||
|
@ -199,21 +199,21 @@ static unsigned long gen1_pin_config[] __initdata = {
|
||||||
defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6)
|
defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6)
|
||||||
static unsigned long gen2_pin_config[] __initdata = {
|
static unsigned long gen2_pin_config[] __initdata = {
|
||||||
/* flip / lockswitch */
|
/* flip / lockswitch */
|
||||||
GPIO15_GPIO,
|
GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH,
|
||||||
|
|
||||||
/* EOC */
|
/* EOC */
|
||||||
GPIO10_GPIO,
|
GPIO10_GPIO | WAKEUP_ON_EDGE_RISE,
|
||||||
|
|
||||||
/* bluetooth (bcm2045) */
|
/* bluetooth (bcm2045) */
|
||||||
GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
|
GPIO13_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */
|
||||||
GPIO37_GPIO, /* RESET */
|
GPIO37_GPIO, /* RESET */
|
||||||
GPIO57_GPIO, /* WAKEUP */
|
GPIO57_GPIO, /* WAKEUP */
|
||||||
|
|
||||||
/* Neptune handshake */
|
/* Neptune handshake */
|
||||||
GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */
|
GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */
|
||||||
GPIO96_GPIO, /* AP_RDY */
|
GPIO96_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */
|
||||||
GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */
|
GPIO3_GPIO | WAKEUP_ON_EDGE_FALL, /* WDI */
|
||||||
GPIO116_GPIO, /* RESET */
|
GPIO116_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */
|
||||||
GPIO41_GPIO, /* BP_FLASH */
|
GPIO41_GPIO, /* BP_FLASH */
|
||||||
|
|
||||||
/* sound */
|
/* sound */
|
||||||
|
|
|
@ -13,8 +13,9 @@ extern void clear_reset_status(unsigned int mask);
|
||||||
/**
|
/**
|
||||||
* init_gpio_reset() - register GPIO as reset generator
|
* init_gpio_reset() - register GPIO as reset generator
|
||||||
* @gpio: gpio nr
|
* @gpio: gpio nr
|
||||||
* @output: set gpio as out/low instead of input during normal work
|
* @output: set gpio as output instead of input during normal work
|
||||||
|
* @level: output level
|
||||||
*/
|
*/
|
||||||
extern int init_gpio_reset(int gpio, int output);
|
extern int init_gpio_reset(int gpio, int output, int level);
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_RESET_H */
|
#endif /* __ASM_ARCH_RESET_H */
|
||||||
|
|
|
@ -322,6 +322,7 @@ static inline void pxa27x_mfp_init(void) {}
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
static unsigned long saved_gafr[2][4];
|
static unsigned long saved_gafr[2][4];
|
||||||
static unsigned long saved_gpdr[4];
|
static unsigned long saved_gpdr[4];
|
||||||
|
static unsigned long saved_pgsr[4];
|
||||||
|
|
||||||
static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state)
|
static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state)
|
||||||
{
|
{
|
||||||
|
@ -332,6 +333,7 @@ static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state)
|
||||||
saved_gafr[0][i] = GAFR_L(i);
|
saved_gafr[0][i] = GAFR_L(i);
|
||||||
saved_gafr[1][i] = GAFR_U(i);
|
saved_gafr[1][i] = GAFR_U(i);
|
||||||
saved_gpdr[i] = GPDR(i * 32);
|
saved_gpdr[i] = GPDR(i * 32);
|
||||||
|
saved_pgsr[i] = PGSR(i);
|
||||||
|
|
||||||
GPDR(i * 32) = gpdr_lpm[i];
|
GPDR(i * 32) = gpdr_lpm[i];
|
||||||
}
|
}
|
||||||
|
@ -346,6 +348,7 @@ static int pxa2xx_mfp_resume(struct sys_device *d)
|
||||||
GAFR_L(i) = saved_gafr[0][i];
|
GAFR_L(i) = saved_gafr[0][i];
|
||||||
GAFR_U(i) = saved_gafr[1][i];
|
GAFR_U(i) = saved_gafr[1][i];
|
||||||
GPDR(i * 32) = saved_gpdr[i];
|
GPDR(i * 32) = saved_gpdr[i];
|
||||||
|
PGSR(i) = saved_pgsr[i];
|
||||||
}
|
}
|
||||||
PSSR = PSSR_RDH | PSSR_PH;
|
PSSR = PSSR_RDH | PSSR_PH;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -374,6 +377,9 @@ static int __init pxa2xx_mfp_init(void)
|
||||||
if (cpu_is_pxa27x())
|
if (cpu_is_pxa27x())
|
||||||
pxa27x_mfp_init();
|
pxa27x_mfp_init();
|
||||||
|
|
||||||
|
/* clear RDH bit to enable GPIO receivers after reset/sleep exit */
|
||||||
|
PSSR = PSSR_RDH;
|
||||||
|
|
||||||
/* initialize gafr_run[], pgsr_lpm[] from existing values */
|
/* initialize gafr_run[], pgsr_lpm[] from existing values */
|
||||||
for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++)
|
for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++)
|
||||||
gpdr_lpm[i] = GPDR(i * 32);
|
gpdr_lpm[i] = GPDR(i * 32);
|
||||||
|
|
|
@ -62,6 +62,8 @@ static unsigned long palmld_pin_config[] __initdata = {
|
||||||
GPIO29_AC97_SDATA_IN_0,
|
GPIO29_AC97_SDATA_IN_0,
|
||||||
GPIO30_AC97_SDATA_OUT,
|
GPIO30_AC97_SDATA_OUT,
|
||||||
GPIO31_AC97_SYNC,
|
GPIO31_AC97_SYNC,
|
||||||
|
GPIO89_AC97_SYSCLK,
|
||||||
|
GPIO95_AC97_nRESET,
|
||||||
|
|
||||||
/* IrDA */
|
/* IrDA */
|
||||||
GPIO108_GPIO, /* ir disable */
|
GPIO108_GPIO, /* ir disable */
|
||||||
|
|
|
@ -64,6 +64,7 @@ static unsigned long palmt5_pin_config[] __initdata = {
|
||||||
GPIO29_AC97_SDATA_IN_0,
|
GPIO29_AC97_SDATA_IN_0,
|
||||||
GPIO30_AC97_SDATA_OUT,
|
GPIO30_AC97_SDATA_OUT,
|
||||||
GPIO31_AC97_SYNC,
|
GPIO31_AC97_SYNC,
|
||||||
|
GPIO89_AC97_SYSCLK,
|
||||||
GPIO95_AC97_nRESET,
|
GPIO95_AC97_nRESET,
|
||||||
|
|
||||||
/* IrDA */
|
/* IrDA */
|
||||||
|
|
|
@ -65,6 +65,7 @@ static unsigned long palmtx_pin_config[] __initdata = {
|
||||||
GPIO29_AC97_SDATA_IN_0,
|
GPIO29_AC97_SDATA_IN_0,
|
||||||
GPIO30_AC97_SDATA_OUT,
|
GPIO30_AC97_SDATA_OUT,
|
||||||
GPIO31_AC97_SYNC,
|
GPIO31_AC97_SYNC,
|
||||||
|
GPIO89_AC97_SYSCLK,
|
||||||
GPIO95_AC97_nRESET,
|
GPIO95_AC97_nRESET,
|
||||||
|
|
||||||
/* IrDA */
|
/* IrDA */
|
||||||
|
|
|
@ -20,7 +20,7 @@ static void do_hw_reset(void);
|
||||||
|
|
||||||
static int reset_gpio = -1;
|
static int reset_gpio = -1;
|
||||||
|
|
||||||
int init_gpio_reset(int gpio, int output)
|
int init_gpio_reset(int gpio, int output, int level)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ int init_gpio_reset(int gpio, int output)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output)
|
if (output)
|
||||||
rc = gpio_direction_output(gpio, 0);
|
rc = gpio_direction_output(gpio, level);
|
||||||
else
|
else
|
||||||
rc = gpio_direction_input(gpio);
|
rc = gpio_direction_input(gpio);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
|
|
|
@ -531,9 +531,15 @@ static int spitz_ohci_init(struct device *dev)
|
||||||
return gpio_direction_output(SPITZ_GPIO_USB_HOST, 1);
|
return gpio_direction_output(SPITZ_GPIO_USB_HOST, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void spitz_ohci_exit(struct device *dev)
|
||||||
|
{
|
||||||
|
gpio_free(SPITZ_GPIO_USB_HOST);
|
||||||
|
}
|
||||||
|
|
||||||
static struct pxaohci_platform_data spitz_ohci_platform_data = {
|
static struct pxaohci_platform_data spitz_ohci_platform_data = {
|
||||||
.port_mode = PMM_NPS_MODE,
|
.port_mode = PMM_NPS_MODE,
|
||||||
.init = spitz_ohci_init,
|
.init = spitz_ohci_init,
|
||||||
|
.exit = spitz_ohci_exit,
|
||||||
.flags = ENABLE_PORT_ALL | NO_OC_PROTECTION,
|
.flags = ENABLE_PORT_ALL | NO_OC_PROTECTION,
|
||||||
.power_budget = 150,
|
.power_budget = 150,
|
||||||
};
|
};
|
||||||
|
@ -731,7 +737,7 @@ static void spitz_restart(char mode, const char *cmd)
|
||||||
|
|
||||||
static void __init common_init(void)
|
static void __init common_init(void)
|
||||||
{
|
{
|
||||||
init_gpio_reset(SPITZ_GPIO_ON_RESET, 1);
|
init_gpio_reset(SPITZ_GPIO_ON_RESET, 1, 0);
|
||||||
pm_power_off = spitz_poweroff;
|
pm_power_off = spitz_poweroff;
|
||||||
arm_pm_restart = spitz_restart;
|
arm_pm_restart = spitz_restart;
|
||||||
|
|
||||||
|
|
|
@ -897,7 +897,7 @@ static void __init tosa_init(void)
|
||||||
gpio_set_wake(MFP_PIN_GPIO1, 1);
|
gpio_set_wake(MFP_PIN_GPIO1, 1);
|
||||||
/* We can't pass to gpio-keys since it will drop the Reset altfunc */
|
/* We can't pass to gpio-keys since it will drop the Reset altfunc */
|
||||||
|
|
||||||
init_gpio_reset(TOSA_GPIO_ON_RESET, 0);
|
init_gpio_reset(TOSA_GPIO_ON_RESET, 0, 0);
|
||||||
|
|
||||||
pm_power_off = tosa_poweroff;
|
pm_power_off = tosa_poweroff;
|
||||||
arm_pm_restart = tosa_restart;
|
arm_pm_restart = tosa_restart;
|
||||||
|
|
|
@ -15,10 +15,9 @@
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <asm/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(gpio_lock);
|
static DEFINE_SPINLOCK(gpio_lock);
|
||||||
static const char *gpio_label[GPIO_MAX]; /* non null for allocated GPIOs */
|
|
||||||
static unsigned long gpio_valid_input[BITS_TO_LONGS(GPIO_MAX)];
|
static unsigned long gpio_valid_input[BITS_TO_LONGS(GPIO_MAX)];
|
||||||
static unsigned long gpio_valid_output[BITS_TO_LONGS(GPIO_MAX)];
|
static unsigned long gpio_valid_output[BITS_TO_LONGS(GPIO_MAX)];
|
||||||
|
|
||||||
|
@ -46,82 +45,54 @@ static void __set_level(unsigned pin, int high)
|
||||||
writel(u, GPIO_OUT(pin));
|
writel(u, GPIO_OUT(pin));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void __set_blinking(unsigned pin, int blink)
|
||||||
|
{
|
||||||
|
u32 u;
|
||||||
|
|
||||||
|
u = readl(GPIO_BLINK_EN(pin));
|
||||||
|
if (blink)
|
||||||
|
u |= 1 << (pin & 31);
|
||||||
|
else
|
||||||
|
u &= ~(1 << (pin & 31));
|
||||||
|
writel(u, GPIO_BLINK_EN(pin));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int orion_gpio_is_valid(unsigned pin, int mode)
|
||||||
|
{
|
||||||
|
if (pin < GPIO_MAX) {
|
||||||
|
if ((mode & GPIO_INPUT_OK) && !test_bit(pin, gpio_valid_input))
|
||||||
|
goto err_out;
|
||||||
|
if ((mode & GPIO_OUTPUT_OK) && !test_bit(pin, gpio_valid_output))
|
||||||
|
goto err_out;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
err_out:
|
||||||
|
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GENERIC_GPIO primitives.
|
* GENERIC_GPIO primitives.
|
||||||
*/
|
*/
|
||||||
int gpio_direction_input(unsigned pin)
|
static int orion_gpio_direction_input(struct gpio_chip *chip, unsigned pin)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid_input)) {
|
if (!orion_gpio_is_valid(pin, GPIO_INPUT_OK))
|
||||||
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
|
|
||||||
spin_lock_irqsave(&gpio_lock, flags);
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
|
||||||
/*
|
/* Configure GPIO direction. */
|
||||||
* Some callers might not have used gpio_request(),
|
|
||||||
* so flag this pin as requested now.
|
|
||||||
*/
|
|
||||||
if (gpio_label[pin] == NULL)
|
|
||||||
gpio_label[pin] = "?";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Configure GPIO direction.
|
|
||||||
*/
|
|
||||||
__set_direction(pin, 1);
|
__set_direction(pin, 1);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&gpio_lock, flags);
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(gpio_direction_input);
|
|
||||||
|
|
||||||
int gpio_direction_output(unsigned pin, int value)
|
static int orion_gpio_get_value(struct gpio_chip *chip, unsigned pin)
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
u32 u;
|
|
||||||
|
|
||||||
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid_output)) {
|
|
||||||
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_lock_irqsave(&gpio_lock, flags);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Some callers might not have used gpio_request(),
|
|
||||||
* so flag this pin as requested now.
|
|
||||||
*/
|
|
||||||
if (gpio_label[pin] == NULL)
|
|
||||||
gpio_label[pin] = "?";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Disable blinking.
|
|
||||||
*/
|
|
||||||
u = readl(GPIO_BLINK_EN(pin));
|
|
||||||
u &= ~(1 << (pin & 31));
|
|
||||||
writel(u, GPIO_BLINK_EN(pin));
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Configure GPIO output value.
|
|
||||||
*/
|
|
||||||
__set_level(pin, value);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Configure GPIO direction.
|
|
||||||
*/
|
|
||||||
__set_direction(pin, 0);
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&gpio_lock, flags);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(gpio_direction_output);
|
|
||||||
|
|
||||||
int gpio_get_value(unsigned pin)
|
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
|
|
||||||
|
@ -132,83 +103,75 @@ int gpio_get_value(unsigned pin)
|
||||||
|
|
||||||
return (val >> (pin & 31)) & 1;
|
return (val >> (pin & 31)) & 1;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(gpio_get_value);
|
|
||||||
|
|
||||||
void gpio_set_value(unsigned pin, int value)
|
static int orion_gpio_direction_output(struct gpio_chip *chip, unsigned pin,
|
||||||
|
int value)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
u32 u;
|
|
||||||
|
if (!orion_gpio_is_valid(pin, GPIO_OUTPUT_OK))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
spin_lock_irqsave(&gpio_lock, flags);
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
|
||||||
/*
|
/* Disable blinking. */
|
||||||
* Disable blinking.
|
__set_blinking(pin, 0);
|
||||||
*/
|
|
||||||
u = readl(GPIO_BLINK_EN(pin));
|
|
||||||
u &= ~(1 << (pin & 31));
|
|
||||||
writel(u, GPIO_BLINK_EN(pin));
|
|
||||||
|
|
||||||
/*
|
/* Configure GPIO output value. */
|
||||||
* Configure GPIO output value.
|
__set_level(pin, value);
|
||||||
*/
|
|
||||||
|
/* Configure GPIO direction. */
|
||||||
|
__set_direction(pin, 0);
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void orion_gpio_set_value(struct gpio_chip *chip, unsigned pin,
|
||||||
|
int value)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
|
||||||
|
/* Configure GPIO output value. */
|
||||||
__set_level(pin, value);
|
__set_level(pin, value);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&gpio_lock, flags);
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(gpio_set_value);
|
|
||||||
|
|
||||||
int gpio_request(unsigned pin, const char *label)
|
static int orion_gpio_request(struct gpio_chip *chip, unsigned pin)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
if (orion_gpio_is_valid(pin, GPIO_INPUT_OK) ||
|
||||||
int ret;
|
orion_gpio_is_valid(pin, GPIO_OUTPUT_OK))
|
||||||
|
return 0;
|
||||||
if (pin >= GPIO_MAX ||
|
return -EINVAL;
|
||||||
!(test_bit(pin, gpio_valid_input) ||
|
|
||||||
test_bit(pin, gpio_valid_output))) {
|
|
||||||
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_lock_irqsave(&gpio_lock, flags);
|
|
||||||
if (gpio_label[pin] == NULL) {
|
|
||||||
gpio_label[pin] = label ? label : "?";
|
|
||||||
ret = 0;
|
|
||||||
} else {
|
|
||||||
pr_debug("%s: GPIO %d already used as %s\n",
|
|
||||||
__func__, pin, gpio_label[pin]);
|
|
||||||
ret = -EBUSY;
|
|
||||||
}
|
|
||||||
spin_unlock_irqrestore(&gpio_lock, flags);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(gpio_request);
|
|
||||||
|
|
||||||
void gpio_free(unsigned pin)
|
static struct gpio_chip orion_gpiochip = {
|
||||||
|
.label = "orion_gpio",
|
||||||
|
.direction_input = orion_gpio_direction_input,
|
||||||
|
.get = orion_gpio_get_value,
|
||||||
|
.direction_output = orion_gpio_direction_output,
|
||||||
|
.set = orion_gpio_set_value,
|
||||||
|
.request = orion_gpio_request,
|
||||||
|
.base = 0,
|
||||||
|
.ngpio = GPIO_MAX,
|
||||||
|
.can_sleep = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
void __init orion_gpio_init(void)
|
||||||
{
|
{
|
||||||
if (pin >= GPIO_MAX ||
|
gpiochip_add(&orion_gpiochip);
|
||||||
!(test_bit(pin, gpio_valid_input) ||
|
|
||||||
test_bit(pin, gpio_valid_output))) {
|
|
||||||
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gpio_label[pin] == NULL)
|
|
||||||
pr_warning("%s: GPIO %d already freed\n", __func__, pin);
|
|
||||||
else
|
|
||||||
gpio_label[pin] = NULL;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(gpio_free);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Orion-specific GPIO API extensions.
|
* Orion-specific GPIO API extensions.
|
||||||
*/
|
*/
|
||||||
void __init orion_gpio_set_unused(unsigned pin)
|
void __init orion_gpio_set_unused(unsigned pin)
|
||||||
{
|
{
|
||||||
/*
|
/* Configure as output, drive low. */
|
||||||
* Configure as output, drive low.
|
|
||||||
*/
|
|
||||||
__set_level(pin, 0);
|
__set_level(pin, 0);
|
||||||
__set_direction(pin, 0);
|
__set_direction(pin, 0);
|
||||||
}
|
}
|
||||||
|
@ -230,21 +193,14 @@ void __init orion_gpio_set_valid(unsigned pin, int mode)
|
||||||
void orion_gpio_set_blink(unsigned pin, int blink)
|
void orion_gpio_set_blink(unsigned pin, int blink)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
u32 u;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&gpio_lock, flags);
|
spin_lock_irqsave(&gpio_lock, flags);
|
||||||
|
|
||||||
/*
|
/* Set output value to zero. */
|
||||||
* Set output value to zero.
|
|
||||||
*/
|
|
||||||
__set_level(pin, 0);
|
__set_level(pin, 0);
|
||||||
|
|
||||||
u = readl(GPIO_BLINK_EN(pin));
|
/* Set blinking. */
|
||||||
if (blink)
|
__set_blinking(pin, blink);
|
||||||
u |= 1 << (pin & 31);
|
|
||||||
else
|
|
||||||
u &= ~(1 << (pin & 31));
|
|
||||||
writel(u, GPIO_BLINK_EN(pin));
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&gpio_lock, flags);
|
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||||
}
|
}
|
||||||
|
@ -368,7 +324,7 @@ static int gpio_irq_set_type(u32 irq, u32 type)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct irq_chip orion_gpio_irq_chip = {
|
struct irq_chip orion_gpio_irq_chip = {
|
||||||
.name = "orion_gpio",
|
.name = "orion_gpio_irq",
|
||||||
.ack = gpio_irq_ack,
|
.ack = gpio_irq_ack,
|
||||||
.mask = gpio_irq_mask,
|
.mask = gpio_irq_mask,
|
||||||
.unmask = gpio_irq_unmask,
|
.unmask = gpio_irq_unmask,
|
||||||
|
|
|
@ -14,12 +14,9 @@
|
||||||
/*
|
/*
|
||||||
* GENERIC_GPIO primitives.
|
* GENERIC_GPIO primitives.
|
||||||
*/
|
*/
|
||||||
int gpio_request(unsigned pin, const char *label);
|
#define gpio_get_value __gpio_get_value
|
||||||
void gpio_free(unsigned pin);
|
#define gpio_set_value __gpio_set_value
|
||||||
int gpio_direction_input(unsigned pin);
|
#define gpio_cansleep __gpio_cansleep
|
||||||
int gpio_direction_output(unsigned pin, int value);
|
|
||||||
int gpio_get_value(unsigned pin);
|
|
||||||
void gpio_set_value(unsigned pin, int value);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Orion-specific GPIO API extensions.
|
* Orion-specific GPIO API extensions.
|
||||||
|
@ -27,11 +24,13 @@ void gpio_set_value(unsigned pin, int value);
|
||||||
void orion_gpio_set_unused(unsigned pin);
|
void orion_gpio_set_unused(unsigned pin);
|
||||||
void orion_gpio_set_blink(unsigned pin, int blink);
|
void orion_gpio_set_blink(unsigned pin, int blink);
|
||||||
|
|
||||||
#define GPIO_BIDI_OK (1 << 0)
|
#define GPIO_INPUT_OK (1 << 0)
|
||||||
#define GPIO_INPUT_OK (1 << 1)
|
#define GPIO_OUTPUT_OK (1 << 1)
|
||||||
#define GPIO_OUTPUT_OK (1 << 2)
|
|
||||||
void orion_gpio_set_valid(unsigned pin, int mode);
|
void orion_gpio_set_valid(unsigned pin, int mode);
|
||||||
|
|
||||||
|
/* Initialize gpiolib. */
|
||||||
|
void __init orion_gpio_init(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPIO interrupt handling.
|
* GPIO interrupt handling.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
/*
|
/*
|
||||||
* arch/arm/plat-orion/include/plat/orion5x_wdt.h
|
* arch/arm/plat-orion/include/plat/orion_wdt.h
|
||||||
*
|
*
|
||||||
* This file is licensed under the terms of the GNU General Public
|
* This file is licensed under the terms of the GNU General Public
|
||||||
* License version 2. This program is licensed "as is" without any
|
* License version 2. This program is licensed "as is" without any
|
||||||
* warranty of any kind, whether express or implied.
|
* warranty of any kind, whether express or implied.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __PLAT_ORION5X_WDT_H
|
#ifndef __PLAT_ORION_WDT_H
|
||||||
#define __PLAT_ORION5X_WDT_H
|
#define __PLAT_ORION_WDT_H
|
||||||
|
|
||||||
struct orion5x_wdt_platform_data {
|
struct orion_wdt_platform_data {
|
||||||
u32 tclk; /* no <linux/clk.h> support yet */
|
u32 tclk; /* no <linux/clk.h> support yet */
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,11 +12,15 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/cnt32_to_63.h>
|
||||||
|
#include <linux/timer.h>
|
||||||
#include <linux/clockchips.h>
|
#include <linux/clockchips.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
#include <mach/bridge-regs.h>
|
#include <mach/bridge-regs.h>
|
||||||
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Number of timer ticks per jiffy.
|
* Number of timer ticks per jiffy.
|
||||||
|
@ -38,6 +42,56 @@ static u32 ticks_per_jiffy;
|
||||||
#define TIMER1_VAL (TIMER_VIRT_BASE + 0x001c)
|
#define TIMER1_VAL (TIMER_VIRT_BASE + 0x001c)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Orion's sched_clock implementation. It has a resolution of
|
||||||
|
* at least 7.5ns (133MHz TCLK) and a maximum value of 834 days.
|
||||||
|
*
|
||||||
|
* Because the hardware timer period is quite short (21 secs if
|
||||||
|
* 200MHz TCLK) and because cnt32_to_63() needs to be called at
|
||||||
|
* least once per half period to work properly, a kernel timer is
|
||||||
|
* set up to ensure this requirement is always met.
|
||||||
|
*/
|
||||||
|
#define TCLK2NS_SCALE_FACTOR 8
|
||||||
|
|
||||||
|
static unsigned long tclk2ns_scale;
|
||||||
|
|
||||||
|
unsigned long long sched_clock(void)
|
||||||
|
{
|
||||||
|
unsigned long long v = cnt32_to_63(0xffffffff - readl(TIMER0_VAL));
|
||||||
|
return (v * tclk2ns_scale) >> TCLK2NS_SCALE_FACTOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct timer_list cnt32_to_63_keepwarm_timer;
|
||||||
|
|
||||||
|
static void cnt32_to_63_keepwarm(unsigned long data)
|
||||||
|
{
|
||||||
|
mod_timer(&cnt32_to_63_keepwarm_timer, round_jiffies(jiffies + data));
|
||||||
|
(void) sched_clock();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init setup_sched_clock(unsigned long tclk)
|
||||||
|
{
|
||||||
|
unsigned long long v;
|
||||||
|
unsigned long data;
|
||||||
|
|
||||||
|
v = NSEC_PER_SEC;
|
||||||
|
v <<= TCLK2NS_SCALE_FACTOR;
|
||||||
|
v += tclk/2;
|
||||||
|
do_div(v, tclk);
|
||||||
|
/*
|
||||||
|
* We want an even value to automatically clear the top bit
|
||||||
|
* returned by cnt32_to_63() without an additional run time
|
||||||
|
* instruction. So if the LSB is 1 then round it up.
|
||||||
|
*/
|
||||||
|
if (v & 1)
|
||||||
|
v++;
|
||||||
|
tclk2ns_scale = v;
|
||||||
|
|
||||||
|
data = (0xffffffffUL / tclk / 2 - 2) * HZ;
|
||||||
|
setup_timer(&cnt32_to_63_keepwarm_timer, cnt32_to_63_keepwarm, data);
|
||||||
|
mod_timer(&cnt32_to_63_keepwarm_timer, round_jiffies(jiffies + data));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clocksource handling.
|
* Clocksource handling.
|
||||||
*/
|
*/
|
||||||
|
@ -176,6 +230,10 @@ void __init orion_time_init(unsigned int irq, unsigned int tclk)
|
||||||
|
|
||||||
ticks_per_jiffy = (tclk + HZ/2) / HZ;
|
ticks_per_jiffy = (tclk + HZ/2) / HZ;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set scale and timer for sched_clock
|
||||||
|
*/
|
||||||
|
setup_sched_clock(tclk);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup free-running clocksource timer (interrupts
|
* Setup free-running clocksource timer (interrupts
|
||||||
|
@ -190,7 +248,6 @@ void __init orion_time_init(unsigned int irq, unsigned int tclk)
|
||||||
orion_clksrc.mult = clocksource_hz2mult(tclk, orion_clksrc.shift);
|
orion_clksrc.mult = clocksource_hz2mult(tclk, orion_clksrc.shift);
|
||||||
clocksource_register(&orion_clksrc);
|
clocksource_register(&orion_clksrc);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup clockevent timer (interrupt-driven.)
|
* Setup clockevent timer (interrupt-driven.)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#
|
#
|
||||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||||
#
|
#
|
||||||
# Last update: Mon Mar 23 20:09:01 2009
|
# Last update: Fri May 29 10:14:20 2009
|
||||||
#
|
#
|
||||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||||
#
|
#
|
||||||
|
@ -916,7 +916,7 @@ nxdb500 MACH_NXDB500 NXDB500 905
|
||||||
apf9328 MACH_APF9328 APF9328 906
|
apf9328 MACH_APF9328 APF9328 906
|
||||||
omap_wipoq MACH_OMAP_WIPOQ OMAP_WIPOQ 907
|
omap_wipoq MACH_OMAP_WIPOQ OMAP_WIPOQ 907
|
||||||
omap_twip MACH_OMAP_TWIP OMAP_TWIP 908
|
omap_twip MACH_OMAP_TWIP OMAP_TWIP 908
|
||||||
palmt650 MACH_PALMT650 PALMT650 909
|
treo650 MACH_TREO650 TREO650 909
|
||||||
acumen MACH_ACUMEN ACUMEN 910
|
acumen MACH_ACUMEN ACUMEN 910
|
||||||
xp100 MACH_XP100 XP100 911
|
xp100 MACH_XP100 XP100 911
|
||||||
fs2410 MACH_FS2410 FS2410 912
|
fs2410 MACH_FS2410 FS2410 912
|
||||||
|
@ -1232,7 +1232,7 @@ ql202b MACH_QL202B QL202B 1226
|
||||||
vpac270 MACH_VPAC270 VPAC270 1227
|
vpac270 MACH_VPAC270 VPAC270 1227
|
||||||
rd129 MACH_RD129 RD129 1228
|
rd129 MACH_RD129 RD129 1228
|
||||||
htcwizard MACH_HTCWIZARD HTCWIZARD 1229
|
htcwizard MACH_HTCWIZARD HTCWIZARD 1229
|
||||||
xscale_treo680 MACH_XSCALE_TREO680 XSCALE_TREO680 1230
|
treo680 MACH_TREO680 TREO680 1230
|
||||||
tecon_tmezon MACH_TECON_TMEZON TECON_TMEZON 1231
|
tecon_tmezon MACH_TECON_TMEZON TECON_TMEZON 1231
|
||||||
zylonite MACH_ZYLONITE ZYLONITE 1233
|
zylonite MACH_ZYLONITE ZYLONITE 1233
|
||||||
gene1270 MACH_GENE1270 GENE1270 1234
|
gene1270 MACH_GENE1270 GENE1270 1234
|
||||||
|
@ -1418,10 +1418,10 @@ looxc550 MACH_LOOXC550 LOOXC550 1417
|
||||||
cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418
|
cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418
|
||||||
app3xx MACH_APP3XX APP3XX 1419
|
app3xx MACH_APP3XX APP3XX 1419
|
||||||
sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420
|
sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420
|
||||||
palmtreo700p MACH_PALMTREO700P PALMTREO700P 1421
|
treo700p MACH_TREO700P TREO700P 1421
|
||||||
palmtreo700w MACH_PALMTREO700W PALMTREO700W 1422
|
treo700w MACH_TREO700W TREO700W 1422
|
||||||
palmtreo750 MACH_PALMTREO750 PALMTREO750 1423
|
treo750 MACH_TREO750 TREO750 1423
|
||||||
palmtreo755p MACH_PALMTREO755P PALMTREO755P 1424
|
treo755p MACH_TREO755P TREO755P 1424
|
||||||
ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425
|
ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425
|
||||||
sarge MACH_SARGE SARGE 1426
|
sarge MACH_SARGE SARGE 1426
|
||||||
a696 MACH_A696 A696 1427
|
a696 MACH_A696 A696 1427
|
||||||
|
@ -1721,7 +1721,7 @@ sapphire MACH_SAPPHIRE SAPPHIRE 1729
|
||||||
csb637xo MACH_CSB637XO CSB637XO 1730
|
csb637xo MACH_CSB637XO CSB637XO 1730
|
||||||
evisiong MACH_EVISIONG EVISIONG 1731
|
evisiong MACH_EVISIONG EVISIONG 1731
|
||||||
stmp37xx MACH_STMP37XX STMP37XX 1732
|
stmp37xx MACH_STMP37XX STMP37XX 1732
|
||||||
stmp378x MACH_STMP38XX STMP38XX 1733
|
stmp378x MACH_STMP378X STMP378X 1733
|
||||||
tnt MACH_TNT TNT 1734
|
tnt MACH_TNT TNT 1734
|
||||||
tbxt MACH_TBXT TBXT 1735
|
tbxt MACH_TBXT TBXT 1735
|
||||||
playmate MACH_PLAYMATE PLAYMATE 1736
|
playmate MACH_PLAYMATE PLAYMATE 1736
|
||||||
|
@ -1817,7 +1817,7 @@ smdkc100 MACH_SMDKC100 SMDKC100 1826
|
||||||
tavorevb MACH_TAVOREVB TAVOREVB 1827
|
tavorevb MACH_TAVOREVB TAVOREVB 1827
|
||||||
saar MACH_SAAR SAAR 1828
|
saar MACH_SAAR SAAR 1828
|
||||||
deister_eyecam MACH_DEISTER_EYECAM DEISTER_EYECAM 1829
|
deister_eyecam MACH_DEISTER_EYECAM DEISTER_EYECAM 1829
|
||||||
at91sam9m10ek MACH_AT91SAM9M10EK AT91SAM9M10EK 1830
|
at91sam9m10g45ek MACH_AT91SAM9M10G45EK AT91SAM9M10G45EK 1830
|
||||||
linkstation_produo MACH_LINKSTATION_PRODUO LINKSTATION_PRODUO 1831
|
linkstation_produo MACH_LINKSTATION_PRODUO LINKSTATION_PRODUO 1831
|
||||||
hit_b0 MACH_HIT_B0 HIT_B0 1832
|
hit_b0 MACH_HIT_B0 HIT_B0 1832
|
||||||
adx_rmu MACH_ADX_RMU ADX_RMU 1833
|
adx_rmu MACH_ADX_RMU ADX_RMU 1833
|
||||||
|
@ -2132,3 +2132,116 @@ apollo MACH_APOLLO APOLLO 2141
|
||||||
at91cap9stk MACH_AT91CAP9STK AT91CAP9STK 2142
|
at91cap9stk MACH_AT91CAP9STK AT91CAP9STK 2142
|
||||||
spc300 MACH_SPC300 SPC300 2143
|
spc300 MACH_SPC300 SPC300 2143
|
||||||
eko MACH_EKO EKO 2144
|
eko MACH_EKO EKO 2144
|
||||||
|
ccw9m2443 MACH_CCW9M2443 CCW9M2443 2145
|
||||||
|
ccw9m2443js MACH_CCW9M2443JS CCW9M2443JS 2146
|
||||||
|
m2m_router_device MACH_M2M_ROUTER_DEVICE M2M_ROUTER_DEVICE 2147
|
||||||
|
str9104nas MACH_STAR9104NAS STAR9104NAS 2148
|
||||||
|
pca100 MACH_PCA100 PCA100 2149
|
||||||
|
z3_dm365_mod_01 MACH_Z3_DM365_MOD_01 Z3_DM365_MOD_01 2150
|
||||||
|
hipox MACH_HIPOX HIPOX 2151
|
||||||
|
omap3_piteds MACH_OMAP3_PITEDS OMAP3_PITEDS 2152
|
||||||
|
bm150r MACH_BM150R BM150R 2153
|
||||||
|
tbone MACH_TBONE TBONE 2154
|
||||||
|
merlin MACH_MERLIN MERLIN 2155
|
||||||
|
falcon MACH_FALCON FALCON 2156
|
||||||
|
davinci_da850_evm MACH_DAVINCI_DA850_EVM DAVINCI_DA850_EVM 2157
|
||||||
|
s5p6440 MACH_S5P6440 S5P6440 2158
|
||||||
|
at91sam9g10ek MACH_AT91SAM9G10EK AT91SAM9G10EK 2159
|
||||||
|
omap_4430sdp MACH_OMAP_4430SDP OMAP_4430SDP 2160
|
||||||
|
lpc313x MACH_LPC313X LPC313X 2161
|
||||||
|
magx_zn5 MACH_MAGX_ZN5 MAGX_ZN5 2162
|
||||||
|
magx_em30 MACH_MAGX_EM30 MAGX_EM30 2163
|
||||||
|
magx_ve66 MACH_MAGX_VE66 MAGX_VE66 2164
|
||||||
|
meesc MACH_MEESC MEESC 2165
|
||||||
|
otc570 MACH_OTC570 OTC570 2166
|
||||||
|
bcu2412 MACH_BCU2412 BCU2412 2167
|
||||||
|
beacon MACH_BEACON BEACON 2168
|
||||||
|
actia_tgw MACH_ACTIA_TGW ACTIA_TGW 2169
|
||||||
|
e4430 MACH_E4430 E4430 2170
|
||||||
|
ql300 MACH_QL300 QL300 2171
|
||||||
|
btmavb101 MACH_BTMAVB101 BTMAVB101 2172
|
||||||
|
btmawb101 MACH_BTMAWB101 BTMAWB101 2173
|
||||||
|
sq201 MACH_SQ201 SQ201 2174
|
||||||
|
quatro45xx MACH_QUATRO45XX QUATRO45XX 2175
|
||||||
|
openpad MACH_OPENPAD OPENPAD 2176
|
||||||
|
tx25 MACH_TX25 TX25 2177
|
||||||
|
omap3_torpedo MACH_OMAP3_TORPEDO OMAP3_TORPEDO 2178
|
||||||
|
htcraphael_k MACH_HTCRAPHAEL_K HTCRAPHAEL_K 2179
|
||||||
|
lal43 MACH_LAL43 LAL43 2181
|
||||||
|
htcraphael_cdma500 MACH_HTCRAPHAEL_CDMA500 HTCRAPHAEL_CDMA500 2182
|
||||||
|
anw6410 MACH_ANW6410 ANW6410 2183
|
||||||
|
htcprophet MACH_HTCPROPHET HTCPROPHET 2185
|
||||||
|
cfa_10022 MACH_CFA_10022 CFA_10022 2186
|
||||||
|
imx27_visstrim_m10 MACH_IMX27_VISSTRIM_M10 IMX27_VISSTRIM_M10 2187
|
||||||
|
px2imx27 MACH_PX2IMX27 PX2IMX27 2188
|
||||||
|
stm3210e_eval MACH_STM3210E_EVAL STM3210E_EVAL 2189
|
||||||
|
dvs10 MACH_DVS10 DVS10 2190
|
||||||
|
portuxg20 MACH_PORTUXG20 PORTUXG20 2191
|
||||||
|
arm_spv MACH_ARM_SPV ARM_SPV 2192
|
||||||
|
smdkc110 MACH_SMDKC110 SMDKC110 2193
|
||||||
|
cabespresso MACH_CABESPRESSO CABESPRESSO 2194
|
||||||
|
hmc800 MACH_HMC800 HMC800 2195
|
||||||
|
sholes MACH_SHOLES SHOLES 2196
|
||||||
|
btmxc31 MACH_BTMXC31 BTMXC31 2197
|
||||||
|
dt501 MACH_DT501 DT501 2198
|
||||||
|
ktx MACH_KTX KTX 2199
|
||||||
|
omap3517evm MACH_OMAP3517EVM OMAP3517EVM 2200
|
||||||
|
netspace_v2 MACH_NETSPACE_V2 NETSPACE_V2 2201
|
||||||
|
netspace_max_v2 MACH_NETSPACE_MAX_V2 NETSPACE_MAX_V2 2202
|
||||||
|
d2net_v2 MACH_D2NET_V2 D2NET_V2 2203
|
||||||
|
net2big_v2 MACH_NET2BIG_V2 NET2BIG_V2 2204
|
||||||
|
net4big_v2 MACH_NET4BIG_V2 NET4BIG_V2 2205
|
||||||
|
net5big_v2 MACH_NET5BIG_V2 NET5BIG_V2 2206
|
||||||
|
endb2443 MACH_ENDB2443 ENDB2443 2207
|
||||||
|
inetspace_v2 MACH_INETSPACE_V2 INETSPACE_V2 2208
|
||||||
|
tros MACH_TROS TROS 2209
|
||||||
|
pelco_homer MACH_PELCO_HOMER PELCO_HOMER 2210
|
||||||
|
ofsp8 MACH_OFSP8 OFSP8 2211
|
||||||
|
at91sam9g45ekes MACH_AT91SAM9G45EKES AT91SAM9G45EKES 2212
|
||||||
|
guf_cupid MACH_GUF_CUPID GUF_CUPID 2213
|
||||||
|
eab1r MACH_EAB1R EAB1R 2214
|
||||||
|
desirec MACH_DESIREC DESIREC 2215
|
||||||
|
cordoba MACH_CORDOBA CORDOBA 2216
|
||||||
|
irvine MACH_IRVINE IRVINE 2217
|
||||||
|
sff772 MACH_SFF772 SFF772 2218
|
||||||
|
pelco_milano MACH_PELCO_MILANO PELCO_MILANO 2219
|
||||||
|
pc7302 MACH_PC7302 PC7302 2220
|
||||||
|
bip6000 MACH_BIP6000 BIP6000 2221
|
||||||
|
silvermoon MACH_SILVERMOON SILVERMOON 2222
|
||||||
|
vc0830 MACH_VC0830 VC0830 2223
|
||||||
|
dt430 MACH_DT430 DT430 2224
|
||||||
|
ji42pf MACH_JI42PF JI42PF 2225
|
||||||
|
gnet_ksm MACH_GNET_KSM GNET_KSM 2226
|
||||||
|
gnet_sgm MACH_GNET_SGM GNET_SGM 2227
|
||||||
|
gnet_sgr MACH_GNET_SGR GNET_SGR 2228
|
||||||
|
omap3_icetekevm MACH_OMAP3_ICETEKEVM OMAP3_ICETEKEVM 2229
|
||||||
|
pnp MACH_PNP PNP 2230
|
||||||
|
ctera_2bay_k MACH_CTERA_2BAY_K CTERA_2BAY_K 2231
|
||||||
|
ctera_2bay_u MACH_CTERA_2BAY_U CTERA_2BAY_U 2232
|
||||||
|
sas_c MACH_SAS_C SAS_C 2233
|
||||||
|
vma2315 MACH_VMA2315 VMA2315 2234
|
||||||
|
vcs MACH_VCS VCS 2235
|
||||||
|
spear600 MACH_SPEAR600 SPEAR600 2236
|
||||||
|
spear300 MACH_SPEAR300 SPEAR300 2237
|
||||||
|
spear1300 MACH_SPEAR1300 SPEAR1300 2238
|
||||||
|
lilly1131 MACH_LILLY1131 LILLY1131 2239
|
||||||
|
arvoo_ax301 MACH_ARVOO_AX301 ARVOO_AX301 2240
|
||||||
|
mapphone MACH_MAPPHONE MAPPHONE 2241
|
||||||
|
legend MACH_LEGEND LEGEND 2242
|
||||||
|
salsa MACH_SALSA SALSA 2243
|
||||||
|
lounge MACH_LOUNGE LOUNGE 2244
|
||||||
|
vision MACH_VISION VISION 2245
|
||||||
|
vmb20 MACH_VMB20 VMB20 2246
|
||||||
|
hy2410 MACH_HY2410 HY2410 2247
|
||||||
|
hy9315 MACH_HY9315 HY9315 2248
|
||||||
|
bullwinkle MACH_BULLWINKLE BULLWINKLE 2249
|
||||||
|
arm_ultimator2 MACH_ARM_ULTIMATOR2 ARM_ULTIMATOR2 2250
|
||||||
|
vs_v210 MACH_VS_V210 VS_V210 2252
|
||||||
|
vs_v212 MACH_VS_V212 VS_V212 2253
|
||||||
|
hmt MACH_HMT HMT 2254
|
||||||
|
suen3 MACH_SUEN3 SUEN3 2255
|
||||||
|
vesper MACH_VESPER VESPER 2256
|
||||||
|
str9 MACH_STR9 STR9 2257
|
||||||
|
omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258
|
||||||
|
simcom MACH_SIMCOM SIMCOM 2259
|
||||||
|
mcwebio MACH_MCWEBIO MCWEBIO 2260
|
||||||
|
|
1
arch/blackfin/include/asm/.gitignore
vendored
1
arch/blackfin/include/asm/.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
+mach
|
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#define flat_stack_align(sp) /* nothing needed */
|
|
||||||
#define flat_argvp_envp_on_stack() 0
|
#define flat_argvp_envp_on_stack() 0
|
||||||
#define flat_old_ram_flag(flags) (flags)
|
#define flat_old_ram_flag(flags) (flags)
|
||||||
|
|
||||||
|
|
|
@ -378,8 +378,10 @@
|
||||||
#define __NR_dup3 363
|
#define __NR_dup3 363
|
||||||
#define __NR_pipe2 364
|
#define __NR_pipe2 364
|
||||||
#define __NR_inotify_init1 365
|
#define __NR_inotify_init1 365
|
||||||
|
#define __NR_preadv 366
|
||||||
|
#define __NR_pwritev 367
|
||||||
|
|
||||||
#define __NR_syscall 366
|
#define __NR_syscall 368
|
||||||
#define NR_syscalls __NR_syscall
|
#define NR_syscalls __NR_syscall
|
||||||
|
|
||||||
/* Old optional stuff no one actually uses */
|
/* Old optional stuff no one actually uses */
|
||||||
|
|
1
arch/blackfin/kernel/.gitignore
vendored
Normal file
1
arch/blackfin/kernel/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
vmlinux.lds
|
|
@ -8,9 +8,8 @@
|
||||||
|
|
||||||
#define strncmp __inline_strncmp
|
#define strncmp __inline_strncmp
|
||||||
#include <asm/string.h>
|
#include <asm/string.h>
|
||||||
#undef strncmp
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
|
#undef strncmp
|
||||||
|
|
||||||
int strncmp(const char *cs, const char *ct, size_t count)
|
int strncmp(const char *cs, const char *ct, size_t count)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1581,6 +1581,8 @@ ENTRY(_sys_call_table)
|
||||||
.long _sys_dup3
|
.long _sys_dup3
|
||||||
.long _sys_pipe2
|
.long _sys_pipe2
|
||||||
.long _sys_inotify_init1 /* 365 */
|
.long _sys_inotify_init1 /* 365 */
|
||||||
|
.long _sys_preadv
|
||||||
|
.long _sys_pwritev
|
||||||
|
|
||||||
.rept NR_syscalls-(.-_sys_call_table)/4
|
.rept NR_syscalls-(.-_sys_call_table)/4
|
||||||
.long _sys_ni_syscall
|
.long _sys_ni_syscall
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
#ifndef __H8300_FLAT_H__
|
#ifndef __H8300_FLAT_H__
|
||||||
#define __H8300_FLAT_H__
|
#define __H8300_FLAT_H__
|
||||||
|
|
||||||
#define flat_stack_align(sp) /* nothing needed */
|
|
||||||
#define flat_argvp_envp_on_stack() 1
|
#define flat_argvp_envp_on_stack() 1
|
||||||
#define flat_old_ram_flag(flags) 1
|
#define flat_old_ram_flag(flags) 1
|
||||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#ifndef __ASM_M32R_FLAT_H
|
#ifndef __ASM_M32R_FLAT_H
|
||||||
#define __ASM_M32R_FLAT_H
|
#define __ASM_M32R_FLAT_H
|
||||||
|
|
||||||
#define flat_stack_align(sp) (*sp += (*sp & 3 ? (4 - (*sp & 3)): 0))
|
|
||||||
#define flat_argvp_envp_on_stack() 0
|
#define flat_argvp_envp_on_stack() 0
|
||||||
#define flat_old_ram_flag(flags) (flags)
|
#define flat_old_ram_flag(flags) (flags)
|
||||||
#define flat_set_persistent(relval, p) 0
|
#define flat_set_persistent(relval, p) 0
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
#ifndef __M68KNOMMU_FLAT_H__
|
#ifndef __M68KNOMMU_FLAT_H__
|
||||||
#define __M68KNOMMU_FLAT_H__
|
#define __M68KNOMMU_FLAT_H__
|
||||||
|
|
||||||
#define flat_stack_align(sp) /* nothing needed */
|
|
||||||
#define flat_argvp_envp_on_stack() 1
|
#define flat_argvp_envp_on_stack() 1
|
||||||
#define flat_old_ram_flag(flags) (flags)
|
#define flat_old_ram_flag(flags) (flags)
|
||||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||||
|
|
|
@ -868,6 +868,18 @@ config TASK_SIZE
|
||||||
default "0x80000000" if PPC_PREP || PPC_8xx
|
default "0x80000000" if PPC_PREP || PPC_8xx
|
||||||
default "0xc0000000"
|
default "0xc0000000"
|
||||||
|
|
||||||
|
config CONSISTENT_SIZE_BOOL
|
||||||
|
bool "Set custom consistent memory pool size"
|
||||||
|
depends on ADVANCED_OPTIONS && NOT_COHERENT_CACHE
|
||||||
|
help
|
||||||
|
This option allows you to set the size of the
|
||||||
|
consistent memory pool. This pool of virtual memory
|
||||||
|
is used to make consistent memory allocations.
|
||||||
|
|
||||||
|
config CONSISTENT_SIZE
|
||||||
|
hex "Size of consistent memory pool" if CONSISTENT_SIZE_BOOL
|
||||||
|
default "0x00200000" if NOT_COHERENT_CACHE
|
||||||
|
|
||||||
config PIN_TLB
|
config PIN_TLB
|
||||||
bool "Pinned Kernel TLBs (860 ONLY)"
|
bool "Pinned Kernel TLBs (860 ONLY)"
|
||||||
depends on ADVANCED_OPTIONS && 8xx
|
depends on ADVANCED_OPTIONS && 8xx
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.28-rc3
|
# Linux kernel version: 2.6.30-rc7
|
||||||
# Tue Nov 11 19:36:51 2008
|
# Mon May 25 14:53:25 2009
|
||||||
#
|
#
|
||||||
# CONFIG_PPC64 is not set
|
# CONFIG_PPC64 is not set
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ CONFIG_6xx=y
|
||||||
# CONFIG_40x is not set
|
# CONFIG_40x is not set
|
||||||
# CONFIG_44x is not set
|
# CONFIG_44x is not set
|
||||||
# CONFIG_E200 is not set
|
# CONFIG_E200 is not set
|
||||||
|
CONFIG_PPC_BOOK3S=y
|
||||||
CONFIG_PPC_FPU=y
|
CONFIG_PPC_FPU=y
|
||||||
CONFIG_ALTIVEC=y
|
CONFIG_ALTIVEC=y
|
||||||
CONFIG_PPC_STD_MMU=y
|
CONFIG_PPC_STD_MMU=y
|
||||||
|
@ -43,7 +44,7 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y
|
||||||
CONFIG_PPC=y
|
CONFIG_PPC=y
|
||||||
CONFIG_EARLY_PRINTK=y
|
CONFIG_EARLY_PRINTK=y
|
||||||
CONFIG_GENERIC_NVRAM=y
|
CONFIG_GENERIC_NVRAM=y
|
||||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
CONFIG_SCHED_OMIT_FRAME_POINTER=y
|
||||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||||
CONFIG_PPC_OF=y
|
CONFIG_PPC_OF=y
|
||||||
CONFIG_OF=y
|
CONFIG_OF=y
|
||||||
|
@ -52,12 +53,14 @@ CONFIG_OF=y
|
||||||
CONFIG_AUDIT_ARCH=y
|
CONFIG_AUDIT_ARCH=y
|
||||||
CONFIG_GENERIC_BUG=y
|
CONFIG_GENERIC_BUG=y
|
||||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||||
|
CONFIG_DTC=y
|
||||||
# CONFIG_DEFAULT_UIMAGE is not set
|
# CONFIG_DEFAULT_UIMAGE is not set
|
||||||
CONFIG_HIBERNATE_32=y
|
CONFIG_HIBERNATE_32=y
|
||||||
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
||||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||||
# CONFIG_PPC_DCR_NATIVE is not set
|
# CONFIG_PPC_DCR_NATIVE is not set
|
||||||
# CONFIG_PPC_DCR_MMIO is not set
|
# CONFIG_PPC_DCR_MMIO is not set
|
||||||
|
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
|
||||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -72,14 +75,24 @@ CONFIG_SWAP=y
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_SYSVIPC_SYSCTL=y
|
CONFIG_SYSVIPC_SYSCTL=y
|
||||||
CONFIG_POSIX_MQUEUE=y
|
CONFIG_POSIX_MQUEUE=y
|
||||||
|
CONFIG_POSIX_MQUEUE_SYSCTL=y
|
||||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
# CONFIG_TASKSTATS is not set
|
# CONFIG_TASKSTATS is not set
|
||||||
# CONFIG_AUDIT is not set
|
# CONFIG_AUDIT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# RCU Subsystem
|
||||||
|
#
|
||||||
|
CONFIG_CLASSIC_RCU=y
|
||||||
|
# CONFIG_TREE_RCU is not set
|
||||||
|
# CONFIG_PREEMPT_RCU is not set
|
||||||
|
# CONFIG_TREE_RCU_TRACE is not set
|
||||||
|
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_LOG_BUF_SHIFT=14
|
CONFIG_LOG_BUF_SHIFT=14
|
||||||
# CONFIG_CGROUPS is not set
|
|
||||||
# CONFIG_GROUP_SCHED is not set
|
# CONFIG_GROUP_SCHED is not set
|
||||||
|
# CONFIG_CGROUPS is not set
|
||||||
CONFIG_SYSFS_DEPRECATED=y
|
CONFIG_SYSFS_DEPRECATED=y
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
# CONFIG_RELAY is not set
|
# CONFIG_RELAY is not set
|
||||||
|
@ -88,23 +101,27 @@ CONFIG_NAMESPACES=y
|
||||||
# CONFIG_IPC_NS is not set
|
# CONFIG_IPC_NS is not set
|
||||||
# CONFIG_USER_NS is not set
|
# CONFIG_USER_NS is not set
|
||||||
# CONFIG_PID_NS is not set
|
# CONFIG_PID_NS is not set
|
||||||
|
# CONFIG_NET_NS is not set
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_INITRAMFS_SOURCE=""
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
CONFIG_RD_GZIP=y
|
||||||
|
CONFIG_RD_BZIP2=y
|
||||||
|
CONFIG_RD_LZMA=y
|
||||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||||
CONFIG_SYSCTL=y
|
CONFIG_SYSCTL=y
|
||||||
|
CONFIG_ANON_INODES=y
|
||||||
# CONFIG_EMBEDDED is not set
|
# CONFIG_EMBEDDED is not set
|
||||||
CONFIG_SYSCTL_SYSCALL=y
|
CONFIG_SYSCTL_SYSCALL=y
|
||||||
CONFIG_KALLSYMS=y
|
CONFIG_KALLSYMS=y
|
||||||
CONFIG_KALLSYMS_ALL=y
|
CONFIG_KALLSYMS_ALL=y
|
||||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||||
|
# CONFIG_STRIP_ASM_SYMS is not set
|
||||||
CONFIG_HOTPLUG=y
|
CONFIG_HOTPLUG=y
|
||||||
CONFIG_PRINTK=y
|
CONFIG_PRINTK=y
|
||||||
CONFIG_BUG=y
|
CONFIG_BUG=y
|
||||||
CONFIG_ELF_CORE=y
|
CONFIG_ELF_CORE=y
|
||||||
# CONFIG_COMPAT_BRK is not set
|
|
||||||
CONFIG_BASE_FULL=y
|
CONFIG_BASE_FULL=y
|
||||||
CONFIG_FUTEX=y
|
CONFIG_FUTEX=y
|
||||||
CONFIG_ANON_INODES=y
|
|
||||||
CONFIG_EPOLL=y
|
CONFIG_EPOLL=y
|
||||||
CONFIG_SIGNALFD=y
|
CONFIG_SIGNALFD=y
|
||||||
CONFIG_TIMERFD=y
|
CONFIG_TIMERFD=y
|
||||||
|
@ -114,10 +131,12 @@ CONFIG_AIO=y
|
||||||
CONFIG_VM_EVENT_COUNTERS=y
|
CONFIG_VM_EVENT_COUNTERS=y
|
||||||
CONFIG_PCI_QUIRKS=y
|
CONFIG_PCI_QUIRKS=y
|
||||||
CONFIG_SLUB_DEBUG=y
|
CONFIG_SLUB_DEBUG=y
|
||||||
|
# CONFIG_COMPAT_BRK is not set
|
||||||
# CONFIG_SLAB is not set
|
# CONFIG_SLAB is not set
|
||||||
CONFIG_SLUB=y
|
CONFIG_SLUB=y
|
||||||
# CONFIG_SLOB is not set
|
# CONFIG_SLOB is not set
|
||||||
CONFIG_PROFILING=y
|
CONFIG_PROFILING=y
|
||||||
|
CONFIG_TRACEPOINTS=y
|
||||||
# CONFIG_MARKERS is not set
|
# CONFIG_MARKERS is not set
|
||||||
CONFIG_OPROFILE=y
|
CONFIG_OPROFILE=y
|
||||||
CONFIG_HAVE_OPROFILE=y
|
CONFIG_HAVE_OPROFILE=y
|
||||||
|
@ -127,10 +146,10 @@ CONFIG_HAVE_IOREMAP_PROT=y
|
||||||
CONFIG_HAVE_KPROBES=y
|
CONFIG_HAVE_KPROBES=y
|
||||||
CONFIG_HAVE_KRETPROBES=y
|
CONFIG_HAVE_KRETPROBES=y
|
||||||
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
||||||
|
# CONFIG_SLOW_WORK is not set
|
||||||
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
||||||
CONFIG_SLABINFO=y
|
CONFIG_SLABINFO=y
|
||||||
CONFIG_RT_MUTEXES=y
|
CONFIG_RT_MUTEXES=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||||
|
@ -138,11 +157,8 @@ CONFIG_MODULE_UNLOAD=y
|
||||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||||
# CONFIG_MODVERSIONS is not set
|
# CONFIG_MODVERSIONS is not set
|
||||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
CONFIG_KMOD=y
|
|
||||||
CONFIG_BLOCK=y
|
CONFIG_BLOCK=y
|
||||||
CONFIG_LBD=y
|
CONFIG_LBD=y
|
||||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
|
||||||
CONFIG_LSF=y
|
|
||||||
CONFIG_BLK_DEV_BSG=y
|
CONFIG_BLK_DEV_BSG=y
|
||||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||||
|
|
||||||
|
@ -158,14 +174,11 @@ CONFIG_DEFAULT_AS=y
|
||||||
# CONFIG_DEFAULT_CFQ is not set
|
# CONFIG_DEFAULT_CFQ is not set
|
||||||
# CONFIG_DEFAULT_NOOP is not set
|
# CONFIG_DEFAULT_NOOP is not set
|
||||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||||
CONFIG_CLASSIC_RCU=y
|
|
||||||
CONFIG_FREEZER=y
|
CONFIG_FREEZER=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Platform support
|
# Platform support
|
||||||
#
|
#
|
||||||
CONFIG_PPC_MULTIPLATFORM=y
|
|
||||||
CONFIG_CLASSIC32=y
|
|
||||||
# CONFIG_PPC_CHRP is not set
|
# CONFIG_PPC_CHRP is not set
|
||||||
# CONFIG_MPC5121_ADS is not set
|
# CONFIG_MPC5121_ADS is not set
|
||||||
# CONFIG_MPC5121_GENERIC is not set
|
# CONFIG_MPC5121_GENERIC is not set
|
||||||
|
@ -178,7 +191,9 @@ CONFIG_PPC_PMAC=y
|
||||||
# CONFIG_PPC_83xx is not set
|
# CONFIG_PPC_83xx is not set
|
||||||
# CONFIG_PPC_86xx is not set
|
# CONFIG_PPC_86xx is not set
|
||||||
# CONFIG_EMBEDDED6xx is not set
|
# CONFIG_EMBEDDED6xx is not set
|
||||||
|
# CONFIG_AMIGAONE is not set
|
||||||
CONFIG_PPC_NATIVE=y
|
CONFIG_PPC_NATIVE=y
|
||||||
|
CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
|
||||||
# CONFIG_IPIC is not set
|
# CONFIG_IPIC is not set
|
||||||
CONFIG_MPIC=y
|
CONFIG_MPIC=y
|
||||||
# CONFIG_MPIC_WEIRD is not set
|
# CONFIG_MPIC_WEIRD is not set
|
||||||
|
@ -212,11 +227,12 @@ CONFIG_CPU_FREQ_PMAC=y
|
||||||
CONFIG_PPC601_SYNC_FIX=y
|
CONFIG_PPC601_SYNC_FIX=y
|
||||||
# CONFIG_TAU is not set
|
# CONFIG_TAU is not set
|
||||||
# CONFIG_FSL_ULI1575 is not set
|
# CONFIG_FSL_ULI1575 is not set
|
||||||
|
# CONFIG_SIMPLE_GPIO is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Kernel options
|
# Kernel options
|
||||||
#
|
#
|
||||||
# CONFIG_HIGHMEM is not set
|
CONFIG_HIGHMEM=y
|
||||||
CONFIG_TICK_ONESHOT=y
|
CONFIG_TICK_ONESHOT=y
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
|
@ -239,6 +255,7 @@ CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||||
CONFIG_ARCH_HAS_WALK_MEMORY=y
|
CONFIG_ARCH_HAS_WALK_MEMORY=y
|
||||||
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
|
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
|
||||||
# CONFIG_KEXEC is not set
|
# CONFIG_KEXEC is not set
|
||||||
|
# CONFIG_CRASH_DUMP is not set
|
||||||
CONFIG_ARCH_FLATMEM_ENABLE=y
|
CONFIG_ARCH_FLATMEM_ENABLE=y
|
||||||
CONFIG_ARCH_POPULATES_NODE_MAP=y
|
CONFIG_ARCH_POPULATES_NODE_MAP=y
|
||||||
CONFIG_SELECT_MEMORY_MODEL=y
|
CONFIG_SELECT_MEMORY_MODEL=y
|
||||||
|
@ -250,12 +267,17 @@ CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
# CONFIG_MIGRATION is not set
|
# CONFIG_MIGRATION is not set
|
||||||
# CONFIG_RESOURCES_64BIT is not set
|
|
||||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||||
CONFIG_ZONE_DMA_FLAG=1
|
CONFIG_ZONE_DMA_FLAG=1
|
||||||
CONFIG_BOUNCE=y
|
CONFIG_BOUNCE=y
|
||||||
CONFIG_VIRT_TO_BUS=y
|
CONFIG_VIRT_TO_BUS=y
|
||||||
CONFIG_UNEVICTABLE_LRU=y
|
CONFIG_UNEVICTABLE_LRU=y
|
||||||
|
CONFIG_HAVE_MLOCK=y
|
||||||
|
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
||||||
|
CONFIG_PPC_4K_PAGES=y
|
||||||
|
# CONFIG_PPC_16K_PAGES is not set
|
||||||
|
# CONFIG_PPC_64K_PAGES is not set
|
||||||
|
# CONFIG_PPC_256K_PAGES is not set
|
||||||
CONFIG_FORCE_MAX_ZONEORDER=11
|
CONFIG_FORCE_MAX_ZONEORDER=11
|
||||||
CONFIG_PROC_DEVICETREE=y
|
CONFIG_PROC_DEVICETREE=y
|
||||||
# CONFIG_CMDLINE_BOOL is not set
|
# CONFIG_CMDLINE_BOOL is not set
|
||||||
|
@ -288,6 +310,8 @@ CONFIG_ARCH_SUPPORTS_MSI=y
|
||||||
# CONFIG_PCI_MSI is not set
|
# CONFIG_PCI_MSI is not set
|
||||||
# CONFIG_PCI_LEGACY is not set
|
# CONFIG_PCI_LEGACY is not set
|
||||||
# CONFIG_PCI_DEBUG is not set
|
# CONFIG_PCI_DEBUG is not set
|
||||||
|
# CONFIG_PCI_STUB is not set
|
||||||
|
# CONFIG_PCI_IOV is not set
|
||||||
CONFIG_PCCARD=m
|
CONFIG_PCCARD=m
|
||||||
# CONFIG_PCMCIA_DEBUG is not set
|
# CONFIG_PCMCIA_DEBUG is not set
|
||||||
CONFIG_PCMCIA=m
|
CONFIG_PCMCIA=m
|
||||||
|
@ -397,6 +421,8 @@ CONFIG_NETFILTER_XTABLES=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||||
# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
|
# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
|
||||||
# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
|
# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
|
||||||
|
CONFIG_NETFILTER_XT_TARGET_HL=m
|
||||||
|
# CONFIG_NETFILTER_XT_TARGET_LED is not set
|
||||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||||
|
@ -405,6 +431,7 @@ CONFIG_NETFILTER_XT_TARGET_RATEEST=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
CONFIG_NETFILTER_XT_TARGET_TRACE=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
|
||||||
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
|
||||||
|
# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
|
||||||
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
|
||||||
# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
|
# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
|
||||||
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
|
||||||
|
@ -415,6 +442,7 @@ CONFIG_NETFILTER_XT_MATCH_DSCP=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
CONFIG_NETFILTER_XT_MATCH_ESP=m
|
||||||
# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
|
# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
|
||||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||||
|
CONFIG_NETFILTER_XT_MATCH_HL=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||||
|
@ -478,17 +506,15 @@ CONFIG_IP_NF_ARPFILTER=m
|
||||||
CONFIG_IP_NF_ARP_MANGLE=m
|
CONFIG_IP_NF_ARP_MANGLE=m
|
||||||
CONFIG_IP_DCCP=m
|
CONFIG_IP_DCCP=m
|
||||||
CONFIG_INET_DCCP_DIAG=m
|
CONFIG_INET_DCCP_DIAG=m
|
||||||
CONFIG_IP_DCCP_ACKVEC=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# DCCP CCIDs Configuration (EXPERIMENTAL)
|
# DCCP CCIDs Configuration (EXPERIMENTAL)
|
||||||
#
|
#
|
||||||
CONFIG_IP_DCCP_CCID2=m
|
|
||||||
# CONFIG_IP_DCCP_CCID2_DEBUG is not set
|
# CONFIG_IP_DCCP_CCID2_DEBUG is not set
|
||||||
CONFIG_IP_DCCP_CCID3=m
|
CONFIG_IP_DCCP_CCID3=y
|
||||||
# CONFIG_IP_DCCP_CCID3_DEBUG is not set
|
# CONFIG_IP_DCCP_CCID3_DEBUG is not set
|
||||||
CONFIG_IP_DCCP_CCID3_RTO=100
|
CONFIG_IP_DCCP_CCID3_RTO=100
|
||||||
CONFIG_IP_DCCP_TFRC_LIB=m
|
CONFIG_IP_DCCP_TFRC_LIB=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# DCCP Kernel Hacking
|
# DCCP Kernel Hacking
|
||||||
|
@ -508,13 +534,16 @@ CONFIG_IP_DCCP_TFRC_LIB=m
|
||||||
# CONFIG_LAPB is not set
|
# CONFIG_LAPB is not set
|
||||||
# CONFIG_ECONET is not set
|
# CONFIG_ECONET is not set
|
||||||
# CONFIG_WAN_ROUTER is not set
|
# CONFIG_WAN_ROUTER is not set
|
||||||
|
# CONFIG_PHONET is not set
|
||||||
# CONFIG_NET_SCHED is not set
|
# CONFIG_NET_SCHED is not set
|
||||||
CONFIG_NET_CLS_ROUTE=y
|
CONFIG_NET_CLS_ROUTE=y
|
||||||
|
# CONFIG_DCB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Network testing
|
# Network testing
|
||||||
#
|
#
|
||||||
# CONFIG_NET_PKTGEN is not set
|
# CONFIG_NET_PKTGEN is not set
|
||||||
|
# CONFIG_NET_DROP_MONITOR is not set
|
||||||
# CONFIG_HAMRADIO is not set
|
# CONFIG_HAMRADIO is not set
|
||||||
# CONFIG_CAN is not set
|
# CONFIG_CAN is not set
|
||||||
CONFIG_IRDA=m
|
CONFIG_IRDA=m
|
||||||
|
@ -577,8 +606,6 @@ CONFIG_BT_HIDP=m
|
||||||
#
|
#
|
||||||
# Bluetooth device drivers
|
# Bluetooth device drivers
|
||||||
#
|
#
|
||||||
CONFIG_BT_HCIUSB=m
|
|
||||||
# CONFIG_BT_HCIUSB_SCO is not set
|
|
||||||
# CONFIG_BT_HCIBTUSB is not set
|
# CONFIG_BT_HCIBTUSB is not set
|
||||||
# CONFIG_BT_HCIUART is not set
|
# CONFIG_BT_HCIUART is not set
|
||||||
CONFIG_BT_HCIBCM203X=m
|
CONFIG_BT_HCIBCM203X=m
|
||||||
|
@ -590,31 +617,27 @@ CONFIG_BT_HCIBFUSB=m
|
||||||
# CONFIG_BT_HCIBTUART is not set
|
# CONFIG_BT_HCIBTUART is not set
|
||||||
# CONFIG_BT_HCIVHCI is not set
|
# CONFIG_BT_HCIVHCI is not set
|
||||||
# CONFIG_AF_RXRPC is not set
|
# CONFIG_AF_RXRPC is not set
|
||||||
# CONFIG_PHONET is not set
|
|
||||||
CONFIG_WIRELESS=y
|
CONFIG_WIRELESS=y
|
||||||
CONFIG_CFG80211=m
|
CONFIG_CFG80211=m
|
||||||
CONFIG_NL80211=y
|
# CONFIG_CFG80211_REG_DEBUG is not set
|
||||||
CONFIG_WIRELESS_OLD_REGULATORY=y
|
CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||||
CONFIG_WIRELESS_EXT=y
|
CONFIG_WIRELESS_EXT=y
|
||||||
CONFIG_WIRELESS_EXT_SYSFS=y
|
CONFIG_WIRELESS_EXT_SYSFS=y
|
||||||
|
# CONFIG_LIB80211 is not set
|
||||||
CONFIG_MAC80211=m
|
CONFIG_MAC80211=m
|
||||||
|
|
||||||
#
|
#
|
||||||
# Rate control algorithm selection
|
# Rate control algorithm selection
|
||||||
#
|
#
|
||||||
CONFIG_MAC80211_RC_PID=y
|
CONFIG_MAC80211_RC_MINSTREL=y
|
||||||
# CONFIG_MAC80211_RC_MINSTREL is not set
|
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
|
||||||
CONFIG_MAC80211_RC_DEFAULT_PID=y
|
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
|
||||||
# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
|
CONFIG_MAC80211_RC_DEFAULT="minstrel"
|
||||||
CONFIG_MAC80211_RC_DEFAULT="pid"
|
|
||||||
# CONFIG_MAC80211_MESH is not set
|
# CONFIG_MAC80211_MESH is not set
|
||||||
CONFIG_MAC80211_LEDS=y
|
CONFIG_MAC80211_LEDS=y
|
||||||
|
# CONFIG_MAC80211_DEBUGFS is not set
|
||||||
# CONFIG_MAC80211_DEBUG_MENU is not set
|
# CONFIG_MAC80211_DEBUG_MENU is not set
|
||||||
CONFIG_IEEE80211=m
|
# CONFIG_WIMAX is not set
|
||||||
# CONFIG_IEEE80211_DEBUG is not set
|
|
||||||
CONFIG_IEEE80211_CRYPT_WEP=m
|
|
||||||
CONFIG_IEEE80211_CRYPT_CCMP=m
|
|
||||||
CONFIG_IEEE80211_CRYPT_TKIP=m
|
|
||||||
# CONFIG_RFKILL is not set
|
# CONFIG_RFKILL is not set
|
||||||
# CONFIG_NET_9P is not set
|
# CONFIG_NET_9P is not set
|
||||||
|
|
||||||
|
@ -662,17 +685,27 @@ CONFIG_BLK_DEV_RAM_SIZE=4096
|
||||||
# CONFIG_BLK_DEV_HD is not set
|
# CONFIG_BLK_DEV_HD is not set
|
||||||
CONFIG_MISC_DEVICES=y
|
CONFIG_MISC_DEVICES=y
|
||||||
# CONFIG_PHANTOM is not set
|
# CONFIG_PHANTOM is not set
|
||||||
# CONFIG_EEPROM_93CX6 is not set
|
|
||||||
# CONFIG_SGI_IOC4 is not set
|
# CONFIG_SGI_IOC4 is not set
|
||||||
# CONFIG_TIFM_CORE is not set
|
# CONFIG_TIFM_CORE is not set
|
||||||
|
# CONFIG_ICS932S401 is not set
|
||||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||||
# CONFIG_HP_ILO is not set
|
# CONFIG_HP_ILO is not set
|
||||||
|
# CONFIG_ISL29003 is not set
|
||||||
|
# CONFIG_C2PORT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# EEPROM support
|
||||||
|
#
|
||||||
|
# CONFIG_EEPROM_AT24 is not set
|
||||||
|
# CONFIG_EEPROM_LEGACY is not set
|
||||||
|
# CONFIG_EEPROM_93CX6 is not set
|
||||||
CONFIG_HAVE_IDE=y
|
CONFIG_HAVE_IDE=y
|
||||||
CONFIG_IDE=y
|
CONFIG_IDE=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Please see Documentation/ide/ide.txt for help/info on IDE drives
|
# Please see Documentation/ide/ide.txt for help/info on IDE drives
|
||||||
#
|
#
|
||||||
|
CONFIG_IDE_XFER_MODE=y
|
||||||
CONFIG_IDE_TIMINGS=y
|
CONFIG_IDE_TIMINGS=y
|
||||||
CONFIG_IDE_ATAPI=y
|
CONFIG_IDE_ATAPI=y
|
||||||
# CONFIG_BLK_DEV_IDE_SATA is not set
|
# CONFIG_BLK_DEV_IDE_SATA is not set
|
||||||
|
@ -684,7 +717,6 @@ CONFIG_BLK_DEV_IDECS=m
|
||||||
CONFIG_BLK_DEV_IDECD=y
|
CONFIG_BLK_DEV_IDECD=y
|
||||||
CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
|
CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
|
||||||
# CONFIG_BLK_DEV_IDETAPE is not set
|
# CONFIG_BLK_DEV_IDETAPE is not set
|
||||||
CONFIG_BLK_DEV_IDESCSI=y
|
|
||||||
# CONFIG_IDE_TASK_IOCTL is not set
|
# CONFIG_IDE_TASK_IOCTL is not set
|
||||||
CONFIG_IDE_PROC_FS=y
|
CONFIG_IDE_PROC_FS=y
|
||||||
|
|
||||||
|
@ -714,6 +746,7 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y
|
||||||
# CONFIG_BLK_DEV_JMICRON is not set
|
# CONFIG_BLK_DEV_JMICRON is not set
|
||||||
# CONFIG_BLK_DEV_SC1200 is not set
|
# CONFIG_BLK_DEV_SC1200 is not set
|
||||||
# CONFIG_BLK_DEV_PIIX is not set
|
# CONFIG_BLK_DEV_PIIX is not set
|
||||||
|
# CONFIG_BLK_DEV_IT8172 is not set
|
||||||
# CONFIG_BLK_DEV_IT8213 is not set
|
# CONFIG_BLK_DEV_IT8213 is not set
|
||||||
# CONFIG_BLK_DEV_IT821X is not set
|
# CONFIG_BLK_DEV_IT821X is not set
|
||||||
# CONFIG_BLK_DEV_NS87415 is not set
|
# CONFIG_BLK_DEV_NS87415 is not set
|
||||||
|
@ -728,7 +761,6 @@ CONFIG_BLK_DEV_SL82C105=y
|
||||||
# CONFIG_BLK_DEV_TC86C001 is not set
|
# CONFIG_BLK_DEV_TC86C001 is not set
|
||||||
CONFIG_BLK_DEV_IDE_PMAC=y
|
CONFIG_BLK_DEV_IDE_PMAC=y
|
||||||
CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
|
CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
|
||||||
CONFIG_BLK_DEV_IDEDMA_PMAC=y
|
|
||||||
CONFIG_BLK_DEV_IDEDMA=y
|
CONFIG_BLK_DEV_IDEDMA=y
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -772,6 +804,7 @@ CONFIG_SCSI_FC_ATTRS=y
|
||||||
# CONFIG_SCSI_SRP_ATTRS is not set
|
# CONFIG_SCSI_SRP_ATTRS is not set
|
||||||
CONFIG_SCSI_LOWLEVEL=y
|
CONFIG_SCSI_LOWLEVEL=y
|
||||||
# CONFIG_ISCSI_TCP is not set
|
# CONFIG_ISCSI_TCP is not set
|
||||||
|
# CONFIG_SCSI_CXGB3_ISCSI is not set
|
||||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||||
# CONFIG_SCSI_3W_9XXX is not set
|
# CONFIG_SCSI_3W_9XXX is not set
|
||||||
# CONFIG_SCSI_ACARD is not set
|
# CONFIG_SCSI_ACARD is not set
|
||||||
|
@ -791,8 +824,12 @@ CONFIG_SCSI_AIC7XXX_OLD=m
|
||||||
# CONFIG_MEGARAID_NEWGEN is not set
|
# CONFIG_MEGARAID_NEWGEN is not set
|
||||||
# CONFIG_MEGARAID_LEGACY is not set
|
# CONFIG_MEGARAID_LEGACY is not set
|
||||||
# CONFIG_MEGARAID_SAS is not set
|
# CONFIG_MEGARAID_SAS is not set
|
||||||
|
# CONFIG_SCSI_MPT2SAS is not set
|
||||||
# CONFIG_SCSI_HPTIOP is not set
|
# CONFIG_SCSI_HPTIOP is not set
|
||||||
# CONFIG_SCSI_BUSLOGIC is not set
|
# CONFIG_SCSI_BUSLOGIC is not set
|
||||||
|
# CONFIG_LIBFC is not set
|
||||||
|
# CONFIG_LIBFCOE is not set
|
||||||
|
# CONFIG_FCOE is not set
|
||||||
# CONFIG_SCSI_DMX3191D is not set
|
# CONFIG_SCSI_DMX3191D is not set
|
||||||
# CONFIG_SCSI_EATA is not set
|
# CONFIG_SCSI_EATA is not set
|
||||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||||
|
@ -822,6 +859,7 @@ CONFIG_SCSI_MAC53C94=y
|
||||||
# CONFIG_SCSI_SRP is not set
|
# CONFIG_SCSI_SRP is not set
|
||||||
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
|
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
|
||||||
# CONFIG_SCSI_DH is not set
|
# CONFIG_SCSI_DH is not set
|
||||||
|
# CONFIG_SCSI_OSD_INITIATOR is not set
|
||||||
# CONFIG_ATA is not set
|
# CONFIG_ATA is not set
|
||||||
CONFIG_MD=y
|
CONFIG_MD=y
|
||||||
CONFIG_BLK_DEV_MD=m
|
CONFIG_BLK_DEV_MD=m
|
||||||
|
@ -881,6 +919,7 @@ CONFIG_THERM_ADT746X=m
|
||||||
# CONFIG_ANSLCD is not set
|
# CONFIG_ANSLCD is not set
|
||||||
CONFIG_PMAC_RACKMETER=m
|
CONFIG_PMAC_RACKMETER=m
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
|
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||||
CONFIG_DUMMY=m
|
CONFIG_DUMMY=m
|
||||||
# CONFIG_BONDING is not set
|
# CONFIG_BONDING is not set
|
||||||
# CONFIG_MACVLAN is not set
|
# CONFIG_MACVLAN is not set
|
||||||
|
@ -898,6 +937,8 @@ CONFIG_BMAC=y
|
||||||
CONFIG_SUNGEM=y
|
CONFIG_SUNGEM=y
|
||||||
# CONFIG_CASSINI is not set
|
# CONFIG_CASSINI is not set
|
||||||
# CONFIG_NET_VENDOR_3COM is not set
|
# CONFIG_NET_VENDOR_3COM is not set
|
||||||
|
# CONFIG_ETHOC is not set
|
||||||
|
# CONFIG_DNET is not set
|
||||||
# CONFIG_NET_TULIP is not set
|
# CONFIG_NET_TULIP is not set
|
||||||
# CONFIG_HP100 is not set
|
# CONFIG_HP100 is not set
|
||||||
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
# CONFIG_IBM_NEW_EMAC_ZMII is not set
|
||||||
|
@ -913,7 +954,6 @@ CONFIG_PCNET32=y
|
||||||
# CONFIG_ADAPTEC_STARFIRE is not set
|
# CONFIG_ADAPTEC_STARFIRE is not set
|
||||||
# CONFIG_B44 is not set
|
# CONFIG_B44 is not set
|
||||||
# CONFIG_FORCEDETH is not set
|
# CONFIG_FORCEDETH is not set
|
||||||
# CONFIG_EEPRO100 is not set
|
|
||||||
# CONFIG_E100 is not set
|
# CONFIG_E100 is not set
|
||||||
# CONFIG_FEALNX is not set
|
# CONFIG_FEALNX is not set
|
||||||
# CONFIG_NATSEMI is not set
|
# CONFIG_NATSEMI is not set
|
||||||
|
@ -923,6 +963,7 @@ CONFIG_PCNET32=y
|
||||||
# CONFIG_R6040 is not set
|
# CONFIG_R6040 is not set
|
||||||
# CONFIG_SIS900 is not set
|
# CONFIG_SIS900 is not set
|
||||||
# CONFIG_EPIC100 is not set
|
# CONFIG_EPIC100 is not set
|
||||||
|
# CONFIG_SMSC9420 is not set
|
||||||
# CONFIG_SUNDANCE is not set
|
# CONFIG_SUNDANCE is not set
|
||||||
# CONFIG_TLAN is not set
|
# CONFIG_TLAN is not set
|
||||||
# CONFIG_VIA_RHINE is not set
|
# CONFIG_VIA_RHINE is not set
|
||||||
|
@ -935,6 +976,7 @@ CONFIG_NETDEV_1000=y
|
||||||
# CONFIG_E1000E is not set
|
# CONFIG_E1000E is not set
|
||||||
# CONFIG_IP1000 is not set
|
# CONFIG_IP1000 is not set
|
||||||
# CONFIG_IGB is not set
|
# CONFIG_IGB is not set
|
||||||
|
# CONFIG_IGBVF is not set
|
||||||
# CONFIG_NS83820 is not set
|
# CONFIG_NS83820 is not set
|
||||||
# CONFIG_HAMACHI is not set
|
# CONFIG_HAMACHI is not set
|
||||||
# CONFIG_YELLOWFIN is not set
|
# CONFIG_YELLOWFIN is not set
|
||||||
|
@ -945,18 +987,20 @@ CONFIG_NETDEV_1000=y
|
||||||
# CONFIG_VIA_VELOCITY is not set
|
# CONFIG_VIA_VELOCITY is not set
|
||||||
# CONFIG_TIGON3 is not set
|
# CONFIG_TIGON3 is not set
|
||||||
# CONFIG_BNX2 is not set
|
# CONFIG_BNX2 is not set
|
||||||
# CONFIG_MV643XX_ETH is not set
|
|
||||||
# CONFIG_QLA3XXX is not set
|
# CONFIG_QLA3XXX is not set
|
||||||
# CONFIG_ATL1 is not set
|
# CONFIG_ATL1 is not set
|
||||||
# CONFIG_ATL1E is not set
|
# CONFIG_ATL1E is not set
|
||||||
|
# CONFIG_ATL1C is not set
|
||||||
# CONFIG_JME is not set
|
# CONFIG_JME is not set
|
||||||
CONFIG_NETDEV_10000=y
|
CONFIG_NETDEV_10000=y
|
||||||
# CONFIG_CHELSIO_T1 is not set
|
# CONFIG_CHELSIO_T1 is not set
|
||||||
|
CONFIG_CHELSIO_T3_DEPENDS=y
|
||||||
# CONFIG_CHELSIO_T3 is not set
|
# CONFIG_CHELSIO_T3 is not set
|
||||||
# CONFIG_ENIC is not set
|
# CONFIG_ENIC is not set
|
||||||
# CONFIG_IXGBE is not set
|
# CONFIG_IXGBE is not set
|
||||||
# CONFIG_IXGB is not set
|
# CONFIG_IXGB is not set
|
||||||
# CONFIG_S2IO is not set
|
# CONFIG_S2IO is not set
|
||||||
|
# CONFIG_VXGE is not set
|
||||||
# CONFIG_MYRI10GE is not set
|
# CONFIG_MYRI10GE is not set
|
||||||
# CONFIG_NETXEN_NIC is not set
|
# CONFIG_NETXEN_NIC is not set
|
||||||
# CONFIG_NIU is not set
|
# CONFIG_NIU is not set
|
||||||
|
@ -966,6 +1010,7 @@ CONFIG_NETDEV_10000=y
|
||||||
# CONFIG_BNX2X is not set
|
# CONFIG_BNX2X is not set
|
||||||
# CONFIG_QLGE is not set
|
# CONFIG_QLGE is not set
|
||||||
# CONFIG_SFC is not set
|
# CONFIG_SFC is not set
|
||||||
|
# CONFIG_BE2NET is not set
|
||||||
# CONFIG_TR is not set
|
# CONFIG_TR is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -974,20 +1019,11 @@ CONFIG_NETDEV_10000=y
|
||||||
# CONFIG_WLAN_PRE80211 is not set
|
# CONFIG_WLAN_PRE80211 is not set
|
||||||
CONFIG_WLAN_80211=y
|
CONFIG_WLAN_80211=y
|
||||||
# CONFIG_PCMCIA_RAYCS is not set
|
# CONFIG_PCMCIA_RAYCS is not set
|
||||||
# CONFIG_IPW2100 is not set
|
|
||||||
# CONFIG_IPW2200 is not set
|
|
||||||
# CONFIG_LIBERTAS is not set
|
# CONFIG_LIBERTAS is not set
|
||||||
# CONFIG_LIBERTAS_THINFIRM is not set
|
# CONFIG_LIBERTAS_THINFIRM is not set
|
||||||
# CONFIG_AIRO is not set
|
# CONFIG_AIRO is not set
|
||||||
CONFIG_HERMES=m
|
|
||||||
CONFIG_APPLE_AIRPORT=m
|
|
||||||
# CONFIG_PLX_HERMES is not set
|
|
||||||
# CONFIG_TMD_HERMES is not set
|
|
||||||
# CONFIG_NORTEL_HERMES is not set
|
|
||||||
CONFIG_PCI_HERMES=m
|
|
||||||
CONFIG_PCMCIA_HERMES=m
|
|
||||||
# CONFIG_PCMCIA_SPECTRUM is not set
|
|
||||||
# CONFIG_ATMEL is not set
|
# CONFIG_ATMEL is not set
|
||||||
|
# CONFIG_AT76C50X_USB is not set
|
||||||
# CONFIG_AIRO_CS is not set
|
# CONFIG_AIRO_CS is not set
|
||||||
# CONFIG_PCMCIA_WL3501 is not set
|
# CONFIG_PCMCIA_WL3501 is not set
|
||||||
CONFIG_PRISM54=m
|
CONFIG_PRISM54=m
|
||||||
|
@ -997,15 +1033,17 @@ CONFIG_PRISM54=m
|
||||||
# CONFIG_RTL8187 is not set
|
# CONFIG_RTL8187 is not set
|
||||||
# CONFIG_ADM8211 is not set
|
# CONFIG_ADM8211 is not set
|
||||||
# CONFIG_MAC80211_HWSIM is not set
|
# CONFIG_MAC80211_HWSIM is not set
|
||||||
|
# CONFIG_MWL8K is not set
|
||||||
CONFIG_P54_COMMON=m
|
CONFIG_P54_COMMON=m
|
||||||
# CONFIG_P54_USB is not set
|
# CONFIG_P54_USB is not set
|
||||||
# CONFIG_P54_PCI is not set
|
# CONFIG_P54_PCI is not set
|
||||||
|
CONFIG_P54_LEDS=y
|
||||||
# CONFIG_ATH5K is not set
|
# CONFIG_ATH5K is not set
|
||||||
# CONFIG_ATH9K is not set
|
# CONFIG_ATH9K is not set
|
||||||
# CONFIG_IWLCORE is not set
|
# CONFIG_AR9170_USB is not set
|
||||||
# CONFIG_IWLWIFI_LEDS is not set
|
# CONFIG_IPW2100 is not set
|
||||||
# CONFIG_IWLAGN is not set
|
# CONFIG_IPW2200 is not set
|
||||||
# CONFIG_IWL3945 is not set
|
# CONFIG_IWLWIFI is not set
|
||||||
# CONFIG_HOSTAP is not set
|
# CONFIG_HOSTAP is not set
|
||||||
CONFIG_B43=m
|
CONFIG_B43=m
|
||||||
CONFIG_B43_PCI_AUTOSELECT=y
|
CONFIG_B43_PCI_AUTOSELECT=y
|
||||||
|
@ -1025,6 +1063,19 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
||||||
# CONFIG_B43LEGACY_PIO_MODE is not set
|
# CONFIG_B43LEGACY_PIO_MODE is not set
|
||||||
# CONFIG_ZD1211RW is not set
|
# CONFIG_ZD1211RW is not set
|
||||||
# CONFIG_RT2X00 is not set
|
# CONFIG_RT2X00 is not set
|
||||||
|
CONFIG_HERMES=m
|
||||||
|
CONFIG_HERMES_CACHE_FW_ON_INIT=y
|
||||||
|
CONFIG_APPLE_AIRPORT=m
|
||||||
|
# CONFIG_PLX_HERMES is not set
|
||||||
|
# CONFIG_TMD_HERMES is not set
|
||||||
|
# CONFIG_NORTEL_HERMES is not set
|
||||||
|
CONFIG_PCI_HERMES=m
|
||||||
|
CONFIG_PCMCIA_HERMES=m
|
||||||
|
# CONFIG_PCMCIA_SPECTRUM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||||
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB Network Adapters
|
# USB Network Adapters
|
||||||
|
@ -1036,6 +1087,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
||||||
CONFIG_USB_USBNET=m
|
CONFIG_USB_USBNET=m
|
||||||
CONFIG_USB_NET_AX8817X=m
|
CONFIG_USB_NET_AX8817X=m
|
||||||
CONFIG_USB_NET_CDCETHER=m
|
CONFIG_USB_NET_CDCETHER=m
|
||||||
|
# CONFIG_USB_NET_CDC_EEM is not set
|
||||||
# CONFIG_USB_NET_DM9601 is not set
|
# CONFIG_USB_NET_DM9601 is not set
|
||||||
# CONFIG_USB_NET_SMSC95XX is not set
|
# CONFIG_USB_NET_SMSC95XX is not set
|
||||||
# CONFIG_USB_NET_GL620A is not set
|
# CONFIG_USB_NET_GL620A is not set
|
||||||
|
@ -1099,7 +1151,7 @@ CONFIG_INPUT_KEYBOARD=y
|
||||||
CONFIG_INPUT_MOUSE=y
|
CONFIG_INPUT_MOUSE=y
|
||||||
# CONFIG_MOUSE_PS2 is not set
|
# CONFIG_MOUSE_PS2 is not set
|
||||||
# CONFIG_MOUSE_SERIAL is not set
|
# CONFIG_MOUSE_SERIAL is not set
|
||||||
# CONFIG_MOUSE_APPLETOUCH is not set
|
CONFIG_MOUSE_APPLETOUCH=y
|
||||||
# CONFIG_MOUSE_BCM5974 is not set
|
# CONFIG_MOUSE_BCM5974 is not set
|
||||||
# CONFIG_MOUSE_VSXXXAA is not set
|
# CONFIG_MOUSE_VSXXXAA is not set
|
||||||
# CONFIG_INPUT_JOYSTICK is not set
|
# CONFIG_INPUT_JOYSTICK is not set
|
||||||
|
@ -1150,10 +1202,13 @@ CONFIG_SERIAL_PMACZILOG_TTYS=y
|
||||||
# CONFIG_SERIAL_JSM is not set
|
# CONFIG_SERIAL_JSM is not set
|
||||||
# CONFIG_SERIAL_OF_PLATFORM is not set
|
# CONFIG_SERIAL_OF_PLATFORM is not set
|
||||||
CONFIG_UNIX98_PTYS=y
|
CONFIG_UNIX98_PTYS=y
|
||||||
|
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
|
# CONFIG_HVC_UDBG is not set
|
||||||
# CONFIG_IPMI_HANDLER is not set
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
CONFIG_HW_RANDOM=m
|
CONFIG_HW_RANDOM=m
|
||||||
|
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
|
||||||
CONFIG_NVRAM=y
|
CONFIG_NVRAM=y
|
||||||
CONFIG_GEN_RTC=y
|
CONFIG_GEN_RTC=y
|
||||||
# CONFIG_GEN_RTC_X is not set
|
# CONFIG_GEN_RTC_X is not set
|
||||||
|
@ -1232,12 +1287,9 @@ CONFIG_I2C_POWERMAC=y
|
||||||
# Miscellaneous I2C Chip support
|
# Miscellaneous I2C Chip support
|
||||||
#
|
#
|
||||||
# CONFIG_DS1682 is not set
|
# CONFIG_DS1682 is not set
|
||||||
# CONFIG_EEPROM_AT24 is not set
|
|
||||||
# CONFIG_EEPROM_LEGACY is not set
|
|
||||||
# CONFIG_SENSORS_PCF8574 is not set
|
# CONFIG_SENSORS_PCF8574 is not set
|
||||||
# CONFIG_PCF8575 is not set
|
# CONFIG_PCF8575 is not set
|
||||||
# CONFIG_SENSORS_PCA9539 is not set
|
# CONFIG_SENSORS_PCA9539 is not set
|
||||||
# CONFIG_SENSORS_PCF8591 is not set
|
|
||||||
# CONFIG_SENSORS_MAX6875 is not set
|
# CONFIG_SENSORS_MAX6875 is not set
|
||||||
# CONFIG_SENSORS_TSL2550 is not set
|
# CONFIG_SENSORS_TSL2550 is not set
|
||||||
# CONFIG_I2C_DEBUG_CORE is not set
|
# CONFIG_I2C_DEBUG_CORE is not set
|
||||||
|
@ -1259,11 +1311,11 @@ CONFIG_BATTERY_PMU=y
|
||||||
# CONFIG_THERMAL is not set
|
# CONFIG_THERMAL is not set
|
||||||
# CONFIG_THERMAL_HWMON is not set
|
# CONFIG_THERMAL_HWMON is not set
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
|
CONFIG_SSB_POSSIBLE=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Sonics Silicon Backplane
|
# Sonics Silicon Backplane
|
||||||
#
|
#
|
||||||
CONFIG_SSB_POSSIBLE=y
|
|
||||||
CONFIG_SSB=m
|
CONFIG_SSB=m
|
||||||
CONFIG_SSB_SPROM=y
|
CONFIG_SSB_SPROM=y
|
||||||
CONFIG_SSB_PCIHOST_POSSIBLE=y
|
CONFIG_SSB_PCIHOST_POSSIBLE=y
|
||||||
|
@ -1281,18 +1333,13 @@ CONFIG_SSB_DRIVER_PCICORE=y
|
||||||
# CONFIG_MFD_CORE is not set
|
# CONFIG_MFD_CORE is not set
|
||||||
# CONFIG_MFD_SM501 is not set
|
# CONFIG_MFD_SM501 is not set
|
||||||
# CONFIG_HTC_PASIC3 is not set
|
# CONFIG_HTC_PASIC3 is not set
|
||||||
|
# CONFIG_TWL4030_CORE is not set
|
||||||
# CONFIG_MFD_TMIO is not set
|
# CONFIG_MFD_TMIO is not set
|
||||||
# CONFIG_PMIC_DA903X is not set
|
# CONFIG_PMIC_DA903X is not set
|
||||||
# CONFIG_MFD_WM8400 is not set
|
# CONFIG_MFD_WM8400 is not set
|
||||||
# CONFIG_MFD_WM8350_I2C is not set
|
# CONFIG_MFD_WM8350_I2C is not set
|
||||||
|
# CONFIG_MFD_PCF50633 is not set
|
||||||
#
|
|
||||||
# Voltage and Current regulators
|
|
||||||
#
|
|
||||||
# CONFIG_REGULATOR is not set
|
# CONFIG_REGULATOR is not set
|
||||||
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
|
||||||
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
|
|
||||||
# CONFIG_REGULATOR_BQ24022 is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Multimedia devices
|
# Multimedia devices
|
||||||
|
@ -1390,6 +1437,7 @@ CONFIG_FB_ATY_BACKLIGHT=y
|
||||||
# CONFIG_FB_KYRO is not set
|
# CONFIG_FB_KYRO is not set
|
||||||
CONFIG_FB_3DFX=y
|
CONFIG_FB_3DFX=y
|
||||||
# CONFIG_FB_3DFX_ACCEL is not set
|
# CONFIG_FB_3DFX_ACCEL is not set
|
||||||
|
CONFIG_FB_3DFX_I2C=y
|
||||||
# CONFIG_FB_VOODOO1 is not set
|
# CONFIG_FB_VOODOO1 is not set
|
||||||
# CONFIG_FB_VT8623 is not set
|
# CONFIG_FB_VT8623 is not set
|
||||||
# CONFIG_FB_TRIDENT is not set
|
# CONFIG_FB_TRIDENT is not set
|
||||||
|
@ -1399,12 +1447,14 @@ CONFIG_FB_3DFX=y
|
||||||
# CONFIG_FB_IBM_GXT4500 is not set
|
# CONFIG_FB_IBM_GXT4500 is not set
|
||||||
# CONFIG_FB_VIRTUAL is not set
|
# CONFIG_FB_VIRTUAL is not set
|
||||||
# CONFIG_FB_METRONOME is not set
|
# CONFIG_FB_METRONOME is not set
|
||||||
|
# CONFIG_FB_MB862XX is not set
|
||||||
|
# CONFIG_FB_BROADSHEET is not set
|
||||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||||
CONFIG_LCD_CLASS_DEVICE=m
|
CONFIG_LCD_CLASS_DEVICE=m
|
||||||
# CONFIG_LCD_ILI9320 is not set
|
# CONFIG_LCD_ILI9320 is not set
|
||||||
# CONFIG_LCD_PLATFORM is not set
|
# CONFIG_LCD_PLATFORM is not set
|
||||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||||
# CONFIG_BACKLIGHT_CORGI is not set
|
CONFIG_BACKLIGHT_GENERIC=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Display device support
|
# Display device support
|
||||||
|
@ -1444,11 +1494,13 @@ CONFIG_SND_MIXER_OSS=m
|
||||||
CONFIG_SND_PCM_OSS=m
|
CONFIG_SND_PCM_OSS=m
|
||||||
CONFIG_SND_PCM_OSS_PLUGINS=y
|
CONFIG_SND_PCM_OSS_PLUGINS=y
|
||||||
CONFIG_SND_SEQUENCER_OSS=y
|
CONFIG_SND_SEQUENCER_OSS=y
|
||||||
|
# CONFIG_SND_HRTIMER is not set
|
||||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||||
CONFIG_SND_SUPPORT_OLD_API=y
|
CONFIG_SND_SUPPORT_OLD_API=y
|
||||||
CONFIG_SND_VERBOSE_PROCFS=y
|
CONFIG_SND_VERBOSE_PROCFS=y
|
||||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||||
# CONFIG_SND_DEBUG is not set
|
# CONFIG_SND_DEBUG is not set
|
||||||
|
CONFIG_SND_VMASTER=y
|
||||||
CONFIG_SND_DRIVERS=y
|
CONFIG_SND_DRIVERS=y
|
||||||
CONFIG_SND_DUMMY=m
|
CONFIG_SND_DUMMY=m
|
||||||
# CONFIG_SND_VIRMIDI is not set
|
# CONFIG_SND_VIRMIDI is not set
|
||||||
|
@ -1486,6 +1538,8 @@ CONFIG_SND_PCI=y
|
||||||
# CONFIG_SND_INDIGO is not set
|
# CONFIG_SND_INDIGO is not set
|
||||||
# CONFIG_SND_INDIGOIO is not set
|
# CONFIG_SND_INDIGOIO is not set
|
||||||
# CONFIG_SND_INDIGODJ is not set
|
# CONFIG_SND_INDIGODJ is not set
|
||||||
|
# CONFIG_SND_INDIGOIOX is not set
|
||||||
|
# CONFIG_SND_INDIGODJX is not set
|
||||||
# CONFIG_SND_EMU10K1 is not set
|
# CONFIG_SND_EMU10K1 is not set
|
||||||
# CONFIG_SND_EMU10K1X is not set
|
# CONFIG_SND_EMU10K1X is not set
|
||||||
# CONFIG_SND_ENS1370 is not set
|
# CONFIG_SND_ENS1370 is not set
|
||||||
|
@ -1551,28 +1605,31 @@ CONFIG_USB_HID=y
|
||||||
#
|
#
|
||||||
# Special HID drivers
|
# Special HID drivers
|
||||||
#
|
#
|
||||||
CONFIG_HID_COMPAT=y
|
|
||||||
CONFIG_HID_A4TECH=y
|
CONFIG_HID_A4TECH=y
|
||||||
CONFIG_HID_APPLE=y
|
CONFIG_HID_APPLE=y
|
||||||
CONFIG_HID_BELKIN=y
|
CONFIG_HID_BELKIN=y
|
||||||
CONFIG_HID_BRIGHT=y
|
|
||||||
CONFIG_HID_CHERRY=y
|
CONFIG_HID_CHERRY=y
|
||||||
CONFIG_HID_CHICONY=y
|
CONFIG_HID_CHICONY=y
|
||||||
CONFIG_HID_CYPRESS=y
|
CONFIG_HID_CYPRESS=y
|
||||||
CONFIG_HID_DELL=y
|
# CONFIG_DRAGONRISE_FF is not set
|
||||||
CONFIG_HID_EZKEY=y
|
CONFIG_HID_EZKEY=y
|
||||||
|
CONFIG_HID_KYE=y
|
||||||
CONFIG_HID_GYRATION=y
|
CONFIG_HID_GYRATION=y
|
||||||
|
CONFIG_HID_KENSINGTON=y
|
||||||
CONFIG_HID_LOGITECH=y
|
CONFIG_HID_LOGITECH=y
|
||||||
# CONFIG_LOGITECH_FF is not set
|
# CONFIG_LOGITECH_FF is not set
|
||||||
# CONFIG_LOGIRUMBLEPAD2_FF is not set
|
# CONFIG_LOGIRUMBLEPAD2_FF is not set
|
||||||
CONFIG_HID_MICROSOFT=y
|
CONFIG_HID_MICROSOFT=y
|
||||||
CONFIG_HID_MONTEREY=y
|
CONFIG_HID_MONTEREY=y
|
||||||
|
CONFIG_HID_NTRIG=y
|
||||||
CONFIG_HID_PANTHERLORD=y
|
CONFIG_HID_PANTHERLORD=y
|
||||||
# CONFIG_PANTHERLORD_FF is not set
|
# CONFIG_PANTHERLORD_FF is not set
|
||||||
CONFIG_HID_PETALYNX=y
|
CONFIG_HID_PETALYNX=y
|
||||||
CONFIG_HID_SAMSUNG=y
|
CONFIG_HID_SAMSUNG=y
|
||||||
CONFIG_HID_SONY=y
|
CONFIG_HID_SONY=y
|
||||||
CONFIG_HID_SUNPLUS=y
|
CONFIG_HID_SUNPLUS=y
|
||||||
|
# CONFIG_GREENASIA_FF is not set
|
||||||
|
CONFIG_HID_TOPSEED=y
|
||||||
# CONFIG_THRUSTMASTER_FF is not set
|
# CONFIG_THRUSTMASTER_FF is not set
|
||||||
# CONFIG_ZEROPLUS_FF is not set
|
# CONFIG_ZEROPLUS_FF is not set
|
||||||
CONFIG_USB_SUPPORT=y
|
CONFIG_USB_SUPPORT=y
|
||||||
|
@ -1603,6 +1660,7 @@ CONFIG_USB_EHCI_HCD=m
|
||||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||||
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||||
# CONFIG_USB_EHCI_HCD_PPC_OF is not set
|
# CONFIG_USB_EHCI_HCD_PPC_OF is not set
|
||||||
|
# CONFIG_USB_OXU210HP_HCD is not set
|
||||||
# CONFIG_USB_ISP116X_HCD is not set
|
# CONFIG_USB_ISP116X_HCD is not set
|
||||||
# CONFIG_USB_ISP1760_HCD is not set
|
# CONFIG_USB_ISP1760_HCD is not set
|
||||||
CONFIG_USB_OHCI_HCD=y
|
CONFIG_USB_OHCI_HCD=y
|
||||||
|
@ -1625,24 +1683,23 @@ CONFIG_USB_PRINTER=m
|
||||||
# CONFIG_USB_TMC is not set
|
# CONFIG_USB_TMC is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# may also be needed; see USB_STORAGE Help for more information
|
# also be needed; see USB_STORAGE Help for more info
|
||||||
#
|
#
|
||||||
CONFIG_USB_STORAGE=m
|
CONFIG_USB_STORAGE=m
|
||||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
# CONFIG_USB_STORAGE_DEBUG is not set
|
||||||
# CONFIG_USB_STORAGE_DATAFAB is not set
|
# CONFIG_USB_STORAGE_DATAFAB is not set
|
||||||
# CONFIG_USB_STORAGE_FREECOM is not set
|
# CONFIG_USB_STORAGE_FREECOM is not set
|
||||||
# CONFIG_USB_STORAGE_ISD200 is not set
|
# CONFIG_USB_STORAGE_ISD200 is not set
|
||||||
# CONFIG_USB_STORAGE_DPCM is not set
|
|
||||||
# CONFIG_USB_STORAGE_USBAT is not set
|
# CONFIG_USB_STORAGE_USBAT is not set
|
||||||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
# CONFIG_USB_STORAGE_SDDR09 is not set
|
||||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
||||||
# CONFIG_USB_STORAGE_ALAUDA is not set
|
# CONFIG_USB_STORAGE_ALAUDA is not set
|
||||||
CONFIG_USB_STORAGE_ONETOUCH=y
|
CONFIG_USB_STORAGE_ONETOUCH=m
|
||||||
# CONFIG_USB_STORAGE_KARMA is not set
|
# CONFIG_USB_STORAGE_KARMA is not set
|
||||||
# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
|
# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
|
||||||
# CONFIG_USB_LIBUSUAL is not set
|
# CONFIG_USB_LIBUSUAL is not set
|
||||||
|
@ -1665,7 +1722,7 @@ CONFIG_USB_EZUSB=y
|
||||||
# CONFIG_USB_SERIAL_CH341 is not set
|
# CONFIG_USB_SERIAL_CH341 is not set
|
||||||
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
||||||
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
|
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
|
||||||
# CONFIG_USB_SERIAL_CP2101 is not set
|
# CONFIG_USB_SERIAL_CP210X is not set
|
||||||
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
|
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
|
||||||
# CONFIG_USB_SERIAL_EMPEG is not set
|
# CONFIG_USB_SERIAL_EMPEG is not set
|
||||||
# CONFIG_USB_SERIAL_FTDI_SIO is not set
|
# CONFIG_USB_SERIAL_FTDI_SIO is not set
|
||||||
|
@ -1701,15 +1758,19 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
|
||||||
# CONFIG_USB_SERIAL_NAVMAN is not set
|
# CONFIG_USB_SERIAL_NAVMAN is not set
|
||||||
# CONFIG_USB_SERIAL_PL2303 is not set
|
# CONFIG_USB_SERIAL_PL2303 is not set
|
||||||
# CONFIG_USB_SERIAL_OTI6858 is not set
|
# CONFIG_USB_SERIAL_OTI6858 is not set
|
||||||
|
# CONFIG_USB_SERIAL_QUALCOMM is not set
|
||||||
# CONFIG_USB_SERIAL_SPCP8X5 is not set
|
# CONFIG_USB_SERIAL_SPCP8X5 is not set
|
||||||
# CONFIG_USB_SERIAL_HP4X is not set
|
# CONFIG_USB_SERIAL_HP4X is not set
|
||||||
# CONFIG_USB_SERIAL_SAFE is not set
|
# CONFIG_USB_SERIAL_SAFE is not set
|
||||||
|
# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
|
||||||
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
|
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
|
||||||
|
# CONFIG_USB_SERIAL_SYMBOL is not set
|
||||||
# CONFIG_USB_SERIAL_TI is not set
|
# CONFIG_USB_SERIAL_TI is not set
|
||||||
# CONFIG_USB_SERIAL_CYBERJACK is not set
|
# CONFIG_USB_SERIAL_CYBERJACK is not set
|
||||||
# CONFIG_USB_SERIAL_XIRCOM is not set
|
# CONFIG_USB_SERIAL_XIRCOM is not set
|
||||||
# CONFIG_USB_SERIAL_OPTION is not set
|
# CONFIG_USB_SERIAL_OPTION is not set
|
||||||
# CONFIG_USB_SERIAL_OMNINET is not set
|
# CONFIG_USB_SERIAL_OMNINET is not set
|
||||||
|
# CONFIG_USB_SERIAL_OPTICON is not set
|
||||||
# CONFIG_USB_SERIAL_DEBUG is not set
|
# CONFIG_USB_SERIAL_DEBUG is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1726,7 +1787,6 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
|
||||||
# CONFIG_USB_LED is not set
|
# CONFIG_USB_LED is not set
|
||||||
# CONFIG_USB_CYPRESS_CY7C63 is not set
|
# CONFIG_USB_CYPRESS_CY7C63 is not set
|
||||||
# CONFIG_USB_CYTHERM is not set
|
# CONFIG_USB_CYTHERM is not set
|
||||||
# CONFIG_USB_PHIDGET is not set
|
|
||||||
# CONFIG_USB_IDMOUSE is not set
|
# CONFIG_USB_IDMOUSE is not set
|
||||||
# CONFIG_USB_FTDI_ELAN is not set
|
# CONFIG_USB_FTDI_ELAN is not set
|
||||||
CONFIG_USB_APPLEDISPLAY=m
|
CONFIG_USB_APPLEDISPLAY=m
|
||||||
|
@ -1738,6 +1798,11 @@ CONFIG_USB_APPLEDISPLAY=m
|
||||||
# CONFIG_USB_ISIGHTFW is not set
|
# CONFIG_USB_ISIGHTFW is not set
|
||||||
# CONFIG_USB_VST is not set
|
# CONFIG_USB_VST is not set
|
||||||
# CONFIG_USB_GADGET is not set
|
# CONFIG_USB_GADGET is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# OTG and related infrastructure
|
||||||
|
#
|
||||||
|
# CONFIG_NOP_USB_XCEIV is not set
|
||||||
# CONFIG_UWB is not set
|
# CONFIG_UWB is not set
|
||||||
# CONFIG_MMC is not set
|
# CONFIG_MMC is not set
|
||||||
# CONFIG_MEMSTICK is not set
|
# CONFIG_MEMSTICK is not set
|
||||||
|
@ -1748,7 +1813,9 @@ CONFIG_LEDS_CLASS=y
|
||||||
# LED drivers
|
# LED drivers
|
||||||
#
|
#
|
||||||
# CONFIG_LEDS_PCA9532 is not set
|
# CONFIG_LEDS_PCA9532 is not set
|
||||||
|
# CONFIG_LEDS_LP5521 is not set
|
||||||
# CONFIG_LEDS_PCA955X is not set
|
# CONFIG_LEDS_PCA955X is not set
|
||||||
|
# CONFIG_LEDS_BD2802 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# LED Triggers
|
# LED Triggers
|
||||||
|
@ -1759,11 +1826,16 @@ CONFIG_LEDS_TRIGGER_IDE_DISK=y
|
||||||
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
|
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
|
||||||
# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
|
# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
|
||||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# iptables trigger is under Netfilter config (LED target)
|
||||||
|
#
|
||||||
# CONFIG_ACCESSIBILITY is not set
|
# CONFIG_ACCESSIBILITY is not set
|
||||||
# CONFIG_INFINIBAND is not set
|
# CONFIG_INFINIBAND is not set
|
||||||
# CONFIG_EDAC is not set
|
# CONFIG_EDAC is not set
|
||||||
# CONFIG_RTC_CLASS is not set
|
# CONFIG_RTC_CLASS is not set
|
||||||
# CONFIG_DMADEVICES is not set
|
# CONFIG_DMADEVICES is not set
|
||||||
|
# CONFIG_AUXDISPLAY is not set
|
||||||
# CONFIG_UIO is not set
|
# CONFIG_UIO is not set
|
||||||
# CONFIG_STAGING is not set
|
# CONFIG_STAGING is not set
|
||||||
|
|
||||||
|
@ -1774,6 +1846,7 @@ CONFIG_EXT2_FS=y
|
||||||
# CONFIG_EXT2_FS_XATTR is not set
|
# CONFIG_EXT2_FS_XATTR is not set
|
||||||
# CONFIG_EXT2_FS_XIP is not set
|
# CONFIG_EXT2_FS_XIP is not set
|
||||||
CONFIG_EXT3_FS=y
|
CONFIG_EXT3_FS=y
|
||||||
|
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||||
CONFIG_EXT3_FS_XATTR=y
|
CONFIG_EXT3_FS_XATTR=y
|
||||||
CONFIG_EXT3_FS_POSIX_ACL=y
|
CONFIG_EXT3_FS_POSIX_ACL=y
|
||||||
# CONFIG_EXT3_FS_SECURITY is not set
|
# CONFIG_EXT3_FS_SECURITY is not set
|
||||||
|
@ -1783,7 +1856,9 @@ CONFIG_EXT4_FS_XATTR=y
|
||||||
# CONFIG_EXT4_FS_POSIX_ACL is not set
|
# CONFIG_EXT4_FS_POSIX_ACL is not set
|
||||||
# CONFIG_EXT4_FS_SECURITY is not set
|
# CONFIG_EXT4_FS_SECURITY is not set
|
||||||
CONFIG_JBD=y
|
CONFIG_JBD=y
|
||||||
|
# CONFIG_JBD_DEBUG is not set
|
||||||
CONFIG_JBD2=y
|
CONFIG_JBD2=y
|
||||||
|
# CONFIG_JBD2_DEBUG is not set
|
||||||
CONFIG_FS_MBCACHE=y
|
CONFIG_FS_MBCACHE=y
|
||||||
# CONFIG_REISERFS_FS is not set
|
# CONFIG_REISERFS_FS is not set
|
||||||
# CONFIG_JFS_FS is not set
|
# CONFIG_JFS_FS is not set
|
||||||
|
@ -1792,6 +1867,7 @@ CONFIG_FILE_LOCKING=y
|
||||||
# CONFIG_XFS_FS is not set
|
# CONFIG_XFS_FS is not set
|
||||||
# CONFIG_GFS2_FS is not set
|
# CONFIG_GFS2_FS is not set
|
||||||
# CONFIG_OCFS2_FS is not set
|
# CONFIG_OCFS2_FS is not set
|
||||||
|
# CONFIG_BTRFS_FS is not set
|
||||||
CONFIG_DNOTIFY=y
|
CONFIG_DNOTIFY=y
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
CONFIG_INOTIFY_USER=y
|
CONFIG_INOTIFY_USER=y
|
||||||
|
@ -1800,6 +1876,11 @@ CONFIG_INOTIFY_USER=y
|
||||||
CONFIG_AUTOFS4_FS=m
|
CONFIG_AUTOFS4_FS=m
|
||||||
CONFIG_FUSE_FS=m
|
CONFIG_FUSE_FS=m
|
||||||
|
|
||||||
|
#
|
||||||
|
# Caches
|
||||||
|
#
|
||||||
|
# CONFIG_FSCACHE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# CD-ROM/DVD Filesystems
|
# CD-ROM/DVD Filesystems
|
||||||
#
|
#
|
||||||
|
@ -1831,10 +1912,7 @@ CONFIG_TMPFS=y
|
||||||
# CONFIG_TMPFS_POSIX_ACL is not set
|
# CONFIG_TMPFS_POSIX_ACL is not set
|
||||||
# CONFIG_HUGETLB_PAGE is not set
|
# CONFIG_HUGETLB_PAGE is not set
|
||||||
# CONFIG_CONFIGFS_FS is not set
|
# CONFIG_CONFIGFS_FS is not set
|
||||||
|
CONFIG_MISC_FILESYSTEMS=y
|
||||||
#
|
|
||||||
# Miscellaneous filesystems
|
|
||||||
#
|
|
||||||
# CONFIG_ADFS_FS is not set
|
# CONFIG_ADFS_FS is not set
|
||||||
# CONFIG_AFFS_FS is not set
|
# CONFIG_AFFS_FS is not set
|
||||||
CONFIG_HFS_FS=m
|
CONFIG_HFS_FS=m
|
||||||
|
@ -1843,6 +1921,7 @@ CONFIG_HFSPLUS_FS=m
|
||||||
# CONFIG_BFS_FS is not set
|
# CONFIG_BFS_FS is not set
|
||||||
# CONFIG_EFS_FS is not set
|
# CONFIG_EFS_FS is not set
|
||||||
# CONFIG_CRAMFS is not set
|
# CONFIG_CRAMFS is not set
|
||||||
|
# CONFIG_SQUASHFS is not set
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_OMFS_FS is not set
|
# CONFIG_OMFS_FS is not set
|
||||||
|
@ -1851,6 +1930,7 @@ CONFIG_HFSPLUS_FS=m
|
||||||
# CONFIG_ROMFS_FS is not set
|
# CONFIG_ROMFS_FS is not set
|
||||||
# CONFIG_SYSV_FS is not set
|
# CONFIG_SYSV_FS is not set
|
||||||
# CONFIG_UFS_FS is not set
|
# CONFIG_UFS_FS is not set
|
||||||
|
# CONFIG_NILFS2_FS is not set
|
||||||
CONFIG_NETWORK_FILESYSTEMS=y
|
CONFIG_NETWORK_FILESYSTEMS=y
|
||||||
CONFIG_NFS_FS=y
|
CONFIG_NFS_FS=y
|
||||||
CONFIG_NFS_V3=y
|
CONFIG_NFS_V3=y
|
||||||
|
@ -1868,7 +1948,6 @@ CONFIG_NFS_ACL_SUPPORT=y
|
||||||
CONFIG_NFS_COMMON=y
|
CONFIG_NFS_COMMON=y
|
||||||
CONFIG_SUNRPC=y
|
CONFIG_SUNRPC=y
|
||||||
CONFIG_SUNRPC_GSS=y
|
CONFIG_SUNRPC_GSS=y
|
||||||
# CONFIG_SUNRPC_REGISTER_V4 is not set
|
|
||||||
CONFIG_RPCSEC_GSS_KRB5=y
|
CONFIG_RPCSEC_GSS_KRB5=y
|
||||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||||
CONFIG_SMB_FS=m
|
CONFIG_SMB_FS=m
|
||||||
|
@ -1940,11 +2019,13 @@ CONFIG_NLS_ISO8859_1=m
|
||||||
# CONFIG_NLS_KOI8_U is not set
|
# CONFIG_NLS_KOI8_U is not set
|
||||||
CONFIG_NLS_UTF8=m
|
CONFIG_NLS_UTF8=m
|
||||||
# CONFIG_DLM is not set
|
# CONFIG_DLM is not set
|
||||||
|
CONFIG_BINARY_PRINTF=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Library routines
|
# Library routines
|
||||||
#
|
#
|
||||||
CONFIG_BITREVERSE=y
|
CONFIG_BITREVERSE=y
|
||||||
|
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||||
CONFIG_CRC_CCITT=y
|
CONFIG_CRC_CCITT=y
|
||||||
CONFIG_CRC16=y
|
CONFIG_CRC16=y
|
||||||
CONFIG_CRC_T10DIF=y
|
CONFIG_CRC_T10DIF=y
|
||||||
|
@ -1954,15 +2035,18 @@ CONFIG_CRC32=y
|
||||||
CONFIG_LIBCRC32C=m
|
CONFIG_LIBCRC32C=m
|
||||||
CONFIG_ZLIB_INFLATE=y
|
CONFIG_ZLIB_INFLATE=y
|
||||||
CONFIG_ZLIB_DEFLATE=y
|
CONFIG_ZLIB_DEFLATE=y
|
||||||
|
CONFIG_DECOMPRESS_GZIP=y
|
||||||
|
CONFIG_DECOMPRESS_BZIP2=y
|
||||||
|
CONFIG_DECOMPRESS_LZMA=y
|
||||||
CONFIG_TEXTSEARCH=y
|
CONFIG_TEXTSEARCH=y
|
||||||
CONFIG_TEXTSEARCH_KMP=m
|
CONFIG_TEXTSEARCH_KMP=m
|
||||||
CONFIG_TEXTSEARCH_BM=m
|
CONFIG_TEXTSEARCH_BM=m
|
||||||
CONFIG_TEXTSEARCH_FSM=m
|
CONFIG_TEXTSEARCH_FSM=m
|
||||||
CONFIG_PLIST=y
|
|
||||||
CONFIG_HAS_IOMEM=y
|
CONFIG_HAS_IOMEM=y
|
||||||
CONFIG_HAS_IOPORT=y
|
CONFIG_HAS_IOPORT=y
|
||||||
CONFIG_HAS_DMA=y
|
CONFIG_HAS_DMA=y
|
||||||
CONFIG_HAVE_LMB=y
|
CONFIG_HAVE_LMB=y
|
||||||
|
CONFIG_NLATTR=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Kernel hacking
|
# Kernel hacking
|
||||||
|
@ -1973,13 +2057,16 @@ CONFIG_ENABLE_MUST_CHECK=y
|
||||||
CONFIG_FRAME_WARN=1024
|
CONFIG_FRAME_WARN=1024
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
# CONFIG_UNUSED_SYMBOLS is not set
|
# CONFIG_UNUSED_SYMBOLS is not set
|
||||||
# CONFIG_DEBUG_FS is not set
|
CONFIG_DEBUG_FS=y
|
||||||
# CONFIG_HEADERS_CHECK is not set
|
# CONFIG_HEADERS_CHECK is not set
|
||||||
CONFIG_DEBUG_KERNEL=y
|
CONFIG_DEBUG_KERNEL=y
|
||||||
# CONFIG_DEBUG_SHIRQ is not set
|
# CONFIG_DEBUG_SHIRQ is not set
|
||||||
CONFIG_DETECT_SOFTLOCKUP=y
|
CONFIG_DETECT_SOFTLOCKUP=y
|
||||||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
|
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
|
||||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
|
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
|
||||||
|
CONFIG_DETECT_HUNG_TASK=y
|
||||||
|
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
|
||||||
|
CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
|
||||||
CONFIG_SCHED_DEBUG=y
|
CONFIG_SCHED_DEBUG=y
|
||||||
CONFIG_SCHEDSTATS=y
|
CONFIG_SCHEDSTATS=y
|
||||||
# CONFIG_TIMER_STATS is not set
|
# CONFIG_TIMER_STATS is not set
|
||||||
|
@ -1994,6 +2081,7 @@ CONFIG_SCHEDSTATS=y
|
||||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||||
CONFIG_STACKTRACE=y
|
CONFIG_STACKTRACE=y
|
||||||
# CONFIG_DEBUG_KOBJECT is not set
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
|
# CONFIG_DEBUG_HIGHMEM is not set
|
||||||
CONFIG_DEBUG_BUGVERBOSE=y
|
CONFIG_DEBUG_BUGVERBOSE=y
|
||||||
# CONFIG_DEBUG_INFO is not set
|
# CONFIG_DEBUG_INFO is not set
|
||||||
# CONFIG_DEBUG_VM is not set
|
# CONFIG_DEBUG_VM is not set
|
||||||
|
@ -2001,6 +2089,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
||||||
CONFIG_DEBUG_MEMORY_INIT=y
|
CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
# CONFIG_DEBUG_LIST is not set
|
# CONFIG_DEBUG_LIST is not set
|
||||||
# CONFIG_DEBUG_SG is not set
|
# CONFIG_DEBUG_SG is not set
|
||||||
|
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||||
# CONFIG_RCU_TORTURE_TEST is not set
|
# CONFIG_RCU_TORTURE_TEST is not set
|
||||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||||
|
@ -2009,7 +2098,14 @@ CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
# CONFIG_FAULT_INJECTION is not set
|
# CONFIG_FAULT_INJECTION is not set
|
||||||
CONFIG_LATENCYTOP=y
|
CONFIG_LATENCYTOP=y
|
||||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||||
|
CONFIG_NOP_TRACER=y
|
||||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||||
|
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
|
||||||
|
CONFIG_HAVE_DYNAMIC_FTRACE=y
|
||||||
|
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
|
||||||
|
CONFIG_RING_BUFFER=y
|
||||||
|
CONFIG_TRACING=y
|
||||||
|
CONFIG_TRACING_SUPPORT=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Tracers
|
# Tracers
|
||||||
|
@ -2017,12 +2113,19 @@ CONFIG_HAVE_FUNCTION_TRACER=y
|
||||||
# CONFIG_FUNCTION_TRACER is not set
|
# CONFIG_FUNCTION_TRACER is not set
|
||||||
# CONFIG_SCHED_TRACER is not set
|
# CONFIG_SCHED_TRACER is not set
|
||||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||||
|
# CONFIG_EVENT_TRACER is not set
|
||||||
# CONFIG_BOOT_TRACER is not set
|
# CONFIG_BOOT_TRACER is not set
|
||||||
|
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||||
# CONFIG_STACK_TRACER is not set
|
# CONFIG_STACK_TRACER is not set
|
||||||
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
|
# CONFIG_KMEMTRACE is not set
|
||||||
|
# CONFIG_WORKQUEUE_TRACER is not set
|
||||||
|
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||||
|
# CONFIG_FTRACE_STARTUP_TEST is not set
|
||||||
|
# CONFIG_DYNAMIC_DEBUG is not set
|
||||||
# CONFIG_SAMPLES is not set
|
# CONFIG_SAMPLES is not set
|
||||||
CONFIG_HAVE_ARCH_KGDB=y
|
CONFIG_HAVE_ARCH_KGDB=y
|
||||||
# CONFIG_KGDB is not set
|
# CONFIG_KGDB is not set
|
||||||
|
CONFIG_PRINT_STACK_DEPTH=64
|
||||||
# CONFIG_DEBUG_STACKOVERFLOW is not set
|
# CONFIG_DEBUG_STACKOVERFLOW is not set
|
||||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||||
# CONFIG_CODE_PATCHING_SELFTEST is not set
|
# CONFIG_CODE_PATCHING_SELFTEST is not set
|
||||||
|
@ -2033,6 +2136,7 @@ CONFIG_XMON_DEFAULT=y
|
||||||
CONFIG_XMON_DISASSEMBLY=y
|
CONFIG_XMON_DISASSEMBLY=y
|
||||||
CONFIG_DEBUGGER=y
|
CONFIG_DEBUGGER=y
|
||||||
CONFIG_IRQSTACKS=y
|
CONFIG_IRQSTACKS=y
|
||||||
|
# CONFIG_VIRQ_DEBUG is not set
|
||||||
# CONFIG_BDI_SWITCH is not set
|
# CONFIG_BDI_SWITCH is not set
|
||||||
CONFIG_BOOTX_TEXT=y
|
CONFIG_BOOTX_TEXT=y
|
||||||
# CONFIG_PPC_EARLY_DEBUG is not set
|
# CONFIG_PPC_EARLY_DEBUG is not set
|
||||||
|
@ -2051,13 +2155,20 @@ CONFIG_CRYPTO=y
|
||||||
#
|
#
|
||||||
# CONFIG_CRYPTO_FIPS is not set
|
# CONFIG_CRYPTO_FIPS is not set
|
||||||
CONFIG_CRYPTO_ALGAPI=y
|
CONFIG_CRYPTO_ALGAPI=y
|
||||||
|
CONFIG_CRYPTO_ALGAPI2=y
|
||||||
CONFIG_CRYPTO_AEAD=y
|
CONFIG_CRYPTO_AEAD=y
|
||||||
|
CONFIG_CRYPTO_AEAD2=y
|
||||||
CONFIG_CRYPTO_BLKCIPHER=y
|
CONFIG_CRYPTO_BLKCIPHER=y
|
||||||
|
CONFIG_CRYPTO_BLKCIPHER2=y
|
||||||
CONFIG_CRYPTO_HASH=y
|
CONFIG_CRYPTO_HASH=y
|
||||||
CONFIG_CRYPTO_RNG=y
|
CONFIG_CRYPTO_HASH2=y
|
||||||
|
CONFIG_CRYPTO_RNG2=y
|
||||||
|
CONFIG_CRYPTO_PCOMP=y
|
||||||
CONFIG_CRYPTO_MANAGER=y
|
CONFIG_CRYPTO_MANAGER=y
|
||||||
|
CONFIG_CRYPTO_MANAGER2=y
|
||||||
# CONFIG_CRYPTO_GF128MUL is not set
|
# CONFIG_CRYPTO_GF128MUL is not set
|
||||||
CONFIG_CRYPTO_NULL=m
|
CONFIG_CRYPTO_NULL=m
|
||||||
|
CONFIG_CRYPTO_WORKQUEUE=y
|
||||||
# CONFIG_CRYPTO_CRYPTD is not set
|
# CONFIG_CRYPTO_CRYPTD is not set
|
||||||
CONFIG_CRYPTO_AUTHENC=y
|
CONFIG_CRYPTO_AUTHENC=y
|
||||||
# CONFIG_CRYPTO_TEST is not set
|
# CONFIG_CRYPTO_TEST is not set
|
||||||
|
@ -2127,6 +2238,7 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m
|
||||||
# Compression
|
# Compression
|
||||||
#
|
#
|
||||||
CONFIG_CRYPTO_DEFLATE=m
|
CONFIG_CRYPTO_DEFLATE=m
|
||||||
|
# CONFIG_CRYPTO_ZLIB is not set
|
||||||
# CONFIG_CRYPTO_LZO is not set
|
# CONFIG_CRYPTO_LZO is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -26,7 +26,9 @@
|
||||||
* allocate the space "normally" and use the cache management functions
|
* allocate the space "normally" and use the cache management functions
|
||||||
* to ensure it is consistent.
|
* to ensure it is consistent.
|
||||||
*/
|
*/
|
||||||
extern void *__dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp);
|
struct device;
|
||||||
|
extern void *__dma_alloc_coherent(struct device *dev, size_t size,
|
||||||
|
dma_addr_t *handle, gfp_t gfp);
|
||||||
extern void __dma_free_coherent(size_t size, void *vaddr);
|
extern void __dma_free_coherent(size_t size, void *vaddr);
|
||||||
extern void __dma_sync(void *vaddr, size_t size, int direction);
|
extern void __dma_sync(void *vaddr, size_t size, int direction);
|
||||||
extern void __dma_sync_page(struct page *page, unsigned long offset,
|
extern void __dma_sync_page(struct page *page, unsigned long offset,
|
||||||
|
@ -37,7 +39,7 @@ extern void __dma_sync_page(struct page *page, unsigned long offset,
|
||||||
* Cache coherent cores.
|
* Cache coherent cores.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define __dma_alloc_coherent(gfp, size, handle) NULL
|
#define __dma_alloc_coherent(dev, gfp, size, handle) NULL
|
||||||
#define __dma_free_coherent(size, addr) ((void)0)
|
#define __dma_free_coherent(size, addr) ((void)0)
|
||||||
#define __dma_sync(addr, size, rw) ((void)0)
|
#define __dma_sync(addr, size, rw) ((void)0)
|
||||||
#define __dma_sync_page(pg, off, sz, rw) ((void)0)
|
#define __dma_sync_page(pg, off, sz, rw) ((void)0)
|
||||||
|
|
|
@ -14,8 +14,6 @@
|
||||||
#ifndef _ASM_FIXMAP_H
|
#ifndef _ASM_FIXMAP_H
|
||||||
#define _ASM_FIXMAP_H
|
#define _ASM_FIXMAP_H
|
||||||
|
|
||||||
extern unsigned long FIXADDR_TOP;
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
@ -24,6 +22,8 @@ extern unsigned long FIXADDR_TOP;
|
||||||
#include <asm/kmap_types.h>
|
#include <asm/kmap_types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Here we define all the compile-time 'special' virtual
|
* Here we define all the compile-time 'special' virtual
|
||||||
* addresses. The point is to have a constant address at
|
* addresses. The point is to have a constant address at
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
extern unsigned long va_to_phys(unsigned long address);
|
extern unsigned long va_to_phys(unsigned long address);
|
||||||
extern pte_t *va_to_pte(unsigned long address);
|
extern pte_t *va_to_pte(unsigned long address);
|
||||||
extern unsigned long ioremap_bot, ioremap_base;
|
extern unsigned long ioremap_bot;
|
||||||
|
|
||||||
#ifdef CONFIG_44x
|
#ifdef CONFIG_44x
|
||||||
extern int icache_44x_need_flush;
|
extern int icache_44x_need_flush;
|
||||||
|
@ -55,9 +55,31 @@ extern int icache_44x_need_flush;
|
||||||
#define pgd_ERROR(e) \
|
#define pgd_ERROR(e) \
|
||||||
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
|
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the bottom of the PKMAP area with HIGHMEM or an arbitrary
|
||||||
|
* value (for now) on others, from where we can start layout kernel
|
||||||
|
* virtual space that goes below PKMAP and FIXMAP
|
||||||
|
*/
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
#define KVIRT_TOP PKMAP_BASE
|
||||||
|
#else
|
||||||
|
#define KVIRT_TOP (0xfe000000UL) /* for now, could be FIXMAP_BASE ? */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ioremap_bot starts at that address. Early ioremaps move down from there,
|
||||||
|
* until mem_init() at which point this becomes the top of the vmalloc
|
||||||
|
* and ioremap space
|
||||||
|
*/
|
||||||
|
#ifdef CONFIG_NOT_COHERENT_CACHE
|
||||||
|
#define IOREMAP_TOP ((KVIRT_TOP - CONFIG_CONSISTENT_SIZE) & PAGE_MASK)
|
||||||
|
#else
|
||||||
|
#define IOREMAP_TOP KVIRT_TOP
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Just any arbitrary offset to the start of the vmalloc VM area: the
|
* Just any arbitrary offset to the start of the vmalloc VM area: the
|
||||||
* current 64MB value just means that there will be a 64MB "hole" after the
|
* current 16MB value just means that there will be a 64MB "hole" after the
|
||||||
* physical memory until the kernel virtual memory starts. That means that
|
* physical memory until the kernel virtual memory starts. That means that
|
||||||
* any out-of-bounds memory accesses will hopefully be caught.
|
* any out-of-bounds memory accesses will hopefully be caught.
|
||||||
* The vmalloc() routines leaves a hole of 4kB between each vmalloced
|
* The vmalloc() routines leaves a hole of 4kB between each vmalloced
|
||||||
|
|
|
@ -32,7 +32,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size,
|
||||||
{
|
{
|
||||||
void *ret;
|
void *ret;
|
||||||
#ifdef CONFIG_NOT_COHERENT_CACHE
|
#ifdef CONFIG_NOT_COHERENT_CACHE
|
||||||
ret = __dma_alloc_coherent(size, dma_handle, flag);
|
ret = __dma_alloc_coherent(dev, size, dma_handle, flag);
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
*dma_handle += get_dma_direct_offset(dev);
|
*dma_handle += get_dma_direct_offset(dev);
|
||||||
|
|
|
@ -18,7 +18,6 @@ obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o \
|
||||||
memcpy_64.o usercopy_64.o mem_64.o string.o
|
memcpy_64.o usercopy_64.o mem_64.o string.o
|
||||||
obj-$(CONFIG_XMON) += sstep.o
|
obj-$(CONFIG_XMON) += sstep.o
|
||||||
obj-$(CONFIG_KPROBES) += sstep.o
|
obj-$(CONFIG_KPROBES) += sstep.o
|
||||||
obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_PPC64),y)
|
ifeq ($(CONFIG_PPC64),y)
|
||||||
obj-$(CONFIG_SMP) += locks.o
|
obj-$(CONFIG_SMP) += locks.o
|
||||||
|
|
|
@ -1,237 +0,0 @@
|
||||||
/*
|
|
||||||
* PowerPC version derived from arch/arm/mm/consistent.c
|
|
||||||
* Copyright (C) 2001 Dan Malek (dmalek@jlc.net)
|
|
||||||
*
|
|
||||||
* Copyright (C) 2000 Russell King
|
|
||||||
*
|
|
||||||
* Consistent memory allocators. Used for DMA devices that want to
|
|
||||||
* share uncached memory with the processor core. The function return
|
|
||||||
* is the virtual address and 'dma_handle' is the physical address.
|
|
||||||
* Mostly stolen from the ARM port, with some changes for PowerPC.
|
|
||||||
* -- Dan
|
|
||||||
*
|
|
||||||
* Reorganized to get rid of the arch-specific consistent_* functions
|
|
||||||
* and provide non-coherent implementations for the DMA API. -Matt
|
|
||||||
*
|
|
||||||
* Added in_interrupt() safe dma_alloc_coherent()/dma_free_coherent()
|
|
||||||
* implementation. This is pulled straight from ARM and barely
|
|
||||||
* modified. -Matt
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/errno.h>
|
|
||||||
#include <linux/string.h>
|
|
||||||
#include <linux/types.h>
|
|
||||||
#include <linux/highmem.h>
|
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
#include <linux/vmalloc.h>
|
|
||||||
|
|
||||||
#include <asm/tlbflush.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Allocate DMA-coherent memory space and return both the kernel remapped
|
|
||||||
* virtual and bus address for that space.
|
|
||||||
*/
|
|
||||||
void *
|
|
||||||
__dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp)
|
|
||||||
{
|
|
||||||
struct page *page;
|
|
||||||
unsigned long order;
|
|
||||||
int i;
|
|
||||||
unsigned int nr_pages = PAGE_ALIGN(size)>>PAGE_SHIFT;
|
|
||||||
unsigned int array_size = nr_pages * sizeof(struct page *);
|
|
||||||
struct page **pages;
|
|
||||||
struct page *end;
|
|
||||||
u64 mask = 0x00ffffff, limit; /* ISA default */
|
|
||||||
struct vm_struct *area;
|
|
||||||
|
|
||||||
BUG_ON(!mem_init_done);
|
|
||||||
size = PAGE_ALIGN(size);
|
|
||||||
limit = (mask + 1) & ~mask;
|
|
||||||
if (limit && size >= limit) {
|
|
||||||
printk(KERN_WARNING "coherent allocation too big (requested "
|
|
||||||
"%#x mask %#Lx)\n", size, mask);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
order = get_order(size);
|
|
||||||
|
|
||||||
if (mask != 0xffffffff)
|
|
||||||
gfp |= GFP_DMA;
|
|
||||||
|
|
||||||
page = alloc_pages(gfp, order);
|
|
||||||
if (!page)
|
|
||||||
goto no_page;
|
|
||||||
|
|
||||||
end = page + (1 << order);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Invalidate any data that might be lurking in the
|
|
||||||
* kernel direct-mapped region for device DMA.
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
unsigned long kaddr = (unsigned long)page_address(page);
|
|
||||||
memset(page_address(page), 0, size);
|
|
||||||
flush_dcache_range(kaddr, kaddr + size);
|
|
||||||
}
|
|
||||||
|
|
||||||
split_page(page, order);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the "dma handle"
|
|
||||||
*/
|
|
||||||
*handle = page_to_phys(page);
|
|
||||||
|
|
||||||
area = get_vm_area_caller(size, VM_IOREMAP,
|
|
||||||
__builtin_return_address(1));
|
|
||||||
if (!area)
|
|
||||||
goto out_free_pages;
|
|
||||||
|
|
||||||
if (array_size > PAGE_SIZE) {
|
|
||||||
pages = vmalloc(array_size);
|
|
||||||
area->flags |= VM_VPAGES;
|
|
||||||
} else {
|
|
||||||
pages = kmalloc(array_size, GFP_KERNEL);
|
|
||||||
}
|
|
||||||
if (!pages)
|
|
||||||
goto out_free_area;
|
|
||||||
|
|
||||||
area->pages = pages;
|
|
||||||
area->nr_pages = nr_pages;
|
|
||||||
|
|
||||||
for (i = 0; i < nr_pages; i++)
|
|
||||||
pages[i] = page + i;
|
|
||||||
|
|
||||||
if (map_vm_area(area, pgprot_noncached(PAGE_KERNEL), &pages))
|
|
||||||
goto out_unmap;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Free the otherwise unused pages.
|
|
||||||
*/
|
|
||||||
page += nr_pages;
|
|
||||||
while (page < end) {
|
|
||||||
__free_page(page);
|
|
||||||
page++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return area->addr;
|
|
||||||
out_unmap:
|
|
||||||
vunmap(area->addr);
|
|
||||||
if (array_size > PAGE_SIZE)
|
|
||||||
vfree(pages);
|
|
||||||
else
|
|
||||||
kfree(pages);
|
|
||||||
goto out_free_pages;
|
|
||||||
out_free_area:
|
|
||||||
free_vm_area(area);
|
|
||||||
out_free_pages:
|
|
||||||
if (page)
|
|
||||||
__free_pages(page, order);
|
|
||||||
no_page:
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(__dma_alloc_coherent);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* free a page as defined by the above mapping.
|
|
||||||
*/
|
|
||||||
void __dma_free_coherent(size_t size, void *vaddr)
|
|
||||||
{
|
|
||||||
vfree(vaddr);
|
|
||||||
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(__dma_free_coherent);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* make an area consistent.
|
|
||||||
*/
|
|
||||||
void __dma_sync(void *vaddr, size_t size, int direction)
|
|
||||||
{
|
|
||||||
unsigned long start = (unsigned long)vaddr;
|
|
||||||
unsigned long end = start + size;
|
|
||||||
|
|
||||||
switch (direction) {
|
|
||||||
case DMA_NONE:
|
|
||||||
BUG();
|
|
||||||
case DMA_FROM_DEVICE:
|
|
||||||
/*
|
|
||||||
* invalidate only when cache-line aligned otherwise there is
|
|
||||||
* the potential for discarding uncommitted data from the cache
|
|
||||||
*/
|
|
||||||
if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1)))
|
|
||||||
flush_dcache_range(start, end);
|
|
||||||
else
|
|
||||||
invalidate_dcache_range(start, end);
|
|
||||||
break;
|
|
||||||
case DMA_TO_DEVICE: /* writeback only */
|
|
||||||
clean_dcache_range(start, end);
|
|
||||||
break;
|
|
||||||
case DMA_BIDIRECTIONAL: /* writeback and invalidate */
|
|
||||||
flush_dcache_range(start, end);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(__dma_sync);
|
|
||||||
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
|
||||||
/*
|
|
||||||
* __dma_sync_page() implementation for systems using highmem.
|
|
||||||
* In this case, each page of a buffer must be kmapped/kunmapped
|
|
||||||
* in order to have a virtual address for __dma_sync(). This must
|
|
||||||
* not sleep so kmap_atomic()/kunmap_atomic() are used.
|
|
||||||
*
|
|
||||||
* Note: yes, it is possible and correct to have a buffer extend
|
|
||||||
* beyond the first page.
|
|
||||||
*/
|
|
||||||
static inline void __dma_sync_page_highmem(struct page *page,
|
|
||||||
unsigned long offset, size_t size, int direction)
|
|
||||||
{
|
|
||||||
size_t seg_size = min((size_t)(PAGE_SIZE - offset), size);
|
|
||||||
size_t cur_size = seg_size;
|
|
||||||
unsigned long flags, start, seg_offset = offset;
|
|
||||||
int nr_segs = 1 + ((size - seg_size) + PAGE_SIZE - 1)/PAGE_SIZE;
|
|
||||||
int seg_nr = 0;
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
|
|
||||||
do {
|
|
||||||
start = (unsigned long)kmap_atomic(page + seg_nr,
|
|
||||||
KM_PPC_SYNC_PAGE) + seg_offset;
|
|
||||||
|
|
||||||
/* Sync this buffer segment */
|
|
||||||
__dma_sync((void *)start, seg_size, direction);
|
|
||||||
kunmap_atomic((void *)start, KM_PPC_SYNC_PAGE);
|
|
||||||
seg_nr++;
|
|
||||||
|
|
||||||
/* Calculate next buffer segment size */
|
|
||||||
seg_size = min((size_t)PAGE_SIZE, size - cur_size);
|
|
||||||
|
|
||||||
/* Add the segment size to our running total */
|
|
||||||
cur_size += seg_size;
|
|
||||||
seg_offset = 0;
|
|
||||||
} while (seg_nr < nr_segs);
|
|
||||||
|
|
||||||
local_irq_restore(flags);
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_HIGHMEM */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* __dma_sync_page makes memory consistent. identical to __dma_sync, but
|
|
||||||
* takes a struct page instead of a virtual address
|
|
||||||
*/
|
|
||||||
void __dma_sync_page(struct page *page, unsigned long offset,
|
|
||||||
size_t size, int direction)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
|
||||||
__dma_sync_page_highmem(page, offset, size, direction);
|
|
||||||
#else
|
|
||||||
unsigned long start = (unsigned long)page_address(page) + offset;
|
|
||||||
__dma_sync((void *)start, size, direction);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(__dma_sync_page);
|
|
|
@ -26,3 +26,4 @@ obj-$(CONFIG_NEED_MULTIPLE_NODES) += numa.o
|
||||||
obj-$(CONFIG_PPC_MM_SLICES) += slice.o
|
obj-$(CONFIG_PPC_MM_SLICES) += slice.o
|
||||||
obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
|
obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o
|
||||||
obj-$(CONFIG_PPC_SUBPAGE_PROT) += subpage-prot.o
|
obj-$(CONFIG_PPC_SUBPAGE_PROT) += subpage-prot.o
|
||||||
|
obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o
|
||||||
|
|
400
arch/powerpc/mm/dma-noncoherent.c
Normal file
400
arch/powerpc/mm/dma-noncoherent.c
Normal file
|
@ -0,0 +1,400 @@
|
||||||
|
/*
|
||||||
|
* PowerPC version derived from arch/arm/mm/consistent.c
|
||||||
|
* Copyright (C) 2001 Dan Malek (dmalek@jlc.net)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Russell King
|
||||||
|
*
|
||||||
|
* Consistent memory allocators. Used for DMA devices that want to
|
||||||
|
* share uncached memory with the processor core. The function return
|
||||||
|
* is the virtual address and 'dma_handle' is the physical address.
|
||||||
|
* Mostly stolen from the ARM port, with some changes for PowerPC.
|
||||||
|
* -- Dan
|
||||||
|
*
|
||||||
|
* Reorganized to get rid of the arch-specific consistent_* functions
|
||||||
|
* and provide non-coherent implementations for the DMA API. -Matt
|
||||||
|
*
|
||||||
|
* Added in_interrupt() safe dma_alloc_coherent()/dma_free_coherent()
|
||||||
|
* implementation. This is pulled straight from ARM and barely
|
||||||
|
* modified. -Matt
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/highmem.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
|
#include "mmu_decl.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This address range defaults to a value that is safe for all
|
||||||
|
* platforms which currently set CONFIG_NOT_COHERENT_CACHE. It
|
||||||
|
* can be further configured for specific applications under
|
||||||
|
* the "Advanced Setup" menu. -Matt
|
||||||
|
*/
|
||||||
|
#define CONSISTENT_BASE (IOREMAP_TOP)
|
||||||
|
#define CONSISTENT_END (CONSISTENT_BASE + CONFIG_CONSISTENT_SIZE)
|
||||||
|
#define CONSISTENT_OFFSET(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the page table (2MB) covering uncached, DMA consistent allocations
|
||||||
|
*/
|
||||||
|
static DEFINE_SPINLOCK(consistent_lock);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* VM region handling support.
|
||||||
|
*
|
||||||
|
* This should become something generic, handling VM region allocations for
|
||||||
|
* vmalloc and similar (ioremap, module space, etc).
|
||||||
|
*
|
||||||
|
* I envisage vmalloc()'s supporting vm_struct becoming:
|
||||||
|
*
|
||||||
|
* struct vm_struct {
|
||||||
|
* struct vm_region region;
|
||||||
|
* unsigned long flags;
|
||||||
|
* struct page **pages;
|
||||||
|
* unsigned int nr_pages;
|
||||||
|
* unsigned long phys_addr;
|
||||||
|
* };
|
||||||
|
*
|
||||||
|
* get_vm_area() would then call vm_region_alloc with an appropriate
|
||||||
|
* struct vm_region head (eg):
|
||||||
|
*
|
||||||
|
* struct vm_region vmalloc_head = {
|
||||||
|
* .vm_list = LIST_HEAD_INIT(vmalloc_head.vm_list),
|
||||||
|
* .vm_start = VMALLOC_START,
|
||||||
|
* .vm_end = VMALLOC_END,
|
||||||
|
* };
|
||||||
|
*
|
||||||
|
* However, vmalloc_head.vm_start is variable (typically, it is dependent on
|
||||||
|
* the amount of RAM found at boot time.) I would imagine that get_vm_area()
|
||||||
|
* would have to initialise this each time prior to calling vm_region_alloc().
|
||||||
|
*/
|
||||||
|
struct ppc_vm_region {
|
||||||
|
struct list_head vm_list;
|
||||||
|
unsigned long vm_start;
|
||||||
|
unsigned long vm_end;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct ppc_vm_region consistent_head = {
|
||||||
|
.vm_list = LIST_HEAD_INIT(consistent_head.vm_list),
|
||||||
|
.vm_start = CONSISTENT_BASE,
|
||||||
|
.vm_end = CONSISTENT_END,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct ppc_vm_region *
|
||||||
|
ppc_vm_region_alloc(struct ppc_vm_region *head, size_t size, gfp_t gfp)
|
||||||
|
{
|
||||||
|
unsigned long addr = head->vm_start, end = head->vm_end - size;
|
||||||
|
unsigned long flags;
|
||||||
|
struct ppc_vm_region *c, *new;
|
||||||
|
|
||||||
|
new = kmalloc(sizeof(struct ppc_vm_region), gfp);
|
||||||
|
if (!new)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&consistent_lock, flags);
|
||||||
|
|
||||||
|
list_for_each_entry(c, &head->vm_list, vm_list) {
|
||||||
|
if ((addr + size) < addr)
|
||||||
|
goto nospc;
|
||||||
|
if ((addr + size) <= c->vm_start)
|
||||||
|
goto found;
|
||||||
|
addr = c->vm_end;
|
||||||
|
if (addr > end)
|
||||||
|
goto nospc;
|
||||||
|
}
|
||||||
|
|
||||||
|
found:
|
||||||
|
/*
|
||||||
|
* Insert this entry _before_ the one we found.
|
||||||
|
*/
|
||||||
|
list_add_tail(&new->vm_list, &c->vm_list);
|
||||||
|
new->vm_start = addr;
|
||||||
|
new->vm_end = addr + size;
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&consistent_lock, flags);
|
||||||
|
return new;
|
||||||
|
|
||||||
|
nospc:
|
||||||
|
spin_unlock_irqrestore(&consistent_lock, flags);
|
||||||
|
kfree(new);
|
||||||
|
out:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct ppc_vm_region *ppc_vm_region_find(struct ppc_vm_region *head, unsigned long addr)
|
||||||
|
{
|
||||||
|
struct ppc_vm_region *c;
|
||||||
|
|
||||||
|
list_for_each_entry(c, &head->vm_list, vm_list) {
|
||||||
|
if (c->vm_start == addr)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
c = NULL;
|
||||||
|
out:
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate DMA-coherent memory space and return both the kernel remapped
|
||||||
|
* virtual and bus address for that space.
|
||||||
|
*/
|
||||||
|
void *
|
||||||
|
__dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp)
|
||||||
|
{
|
||||||
|
struct page *page;
|
||||||
|
struct ppc_vm_region *c;
|
||||||
|
unsigned long order;
|
||||||
|
u64 mask = ISA_DMA_THRESHOLD, limit;
|
||||||
|
|
||||||
|
if (dev) {
|
||||||
|
mask = dev->coherent_dma_mask;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sanity check the DMA mask - it must be non-zero, and
|
||||||
|
* must be able to be satisfied by a DMA allocation.
|
||||||
|
*/
|
||||||
|
if (mask == 0) {
|
||||||
|
dev_warn(dev, "coherent DMA mask is unset\n");
|
||||||
|
goto no_page;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((~mask) & ISA_DMA_THRESHOLD) {
|
||||||
|
dev_warn(dev, "coherent DMA mask %#llx is smaller "
|
||||||
|
"than system GFP_DMA mask %#llx\n",
|
||||||
|
mask, (unsigned long long)ISA_DMA_THRESHOLD);
|
||||||
|
goto no_page;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size = PAGE_ALIGN(size);
|
||||||
|
limit = (mask + 1) & ~mask;
|
||||||
|
if ((limit && size >= limit) ||
|
||||||
|
size >= (CONSISTENT_END - CONSISTENT_BASE)) {
|
||||||
|
printk(KERN_WARNING "coherent allocation too big (requested %#x mask %#Lx)\n",
|
||||||
|
size, mask);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
order = get_order(size);
|
||||||
|
|
||||||
|
/* Might be useful if we ever have a real legacy DMA zone... */
|
||||||
|
if (mask != 0xffffffff)
|
||||||
|
gfp |= GFP_DMA;
|
||||||
|
|
||||||
|
page = alloc_pages(gfp, order);
|
||||||
|
if (!page)
|
||||||
|
goto no_page;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Invalidate any data that might be lurking in the
|
||||||
|
* kernel direct-mapped region for device DMA.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
unsigned long kaddr = (unsigned long)page_address(page);
|
||||||
|
memset(page_address(page), 0, size);
|
||||||
|
flush_dcache_range(kaddr, kaddr + size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate a virtual address in the consistent mapping region.
|
||||||
|
*/
|
||||||
|
c = ppc_vm_region_alloc(&consistent_head, size,
|
||||||
|
gfp & ~(__GFP_DMA | __GFP_HIGHMEM));
|
||||||
|
if (c) {
|
||||||
|
unsigned long vaddr = c->vm_start;
|
||||||
|
struct page *end = page + (1 << order);
|
||||||
|
|
||||||
|
split_page(page, order);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the "dma handle"
|
||||||
|
*/
|
||||||
|
*handle = page_to_phys(page);
|
||||||
|
|
||||||
|
do {
|
||||||
|
SetPageReserved(page);
|
||||||
|
map_page(vaddr, page_to_phys(page),
|
||||||
|
pgprot_noncached(PAGE_KERNEL));
|
||||||
|
page++;
|
||||||
|
vaddr += PAGE_SIZE;
|
||||||
|
} while (size -= PAGE_SIZE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free the otherwise unused pages.
|
||||||
|
*/
|
||||||
|
while (page < end) {
|
||||||
|
__free_page(page);
|
||||||
|
page++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (void *)c->vm_start;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (page)
|
||||||
|
__free_pages(page, order);
|
||||||
|
no_page:
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__dma_alloc_coherent);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* free a page as defined by the above mapping.
|
||||||
|
*/
|
||||||
|
void __dma_free_coherent(size_t size, void *vaddr)
|
||||||
|
{
|
||||||
|
struct ppc_vm_region *c;
|
||||||
|
unsigned long flags, addr;
|
||||||
|
|
||||||
|
size = PAGE_ALIGN(size);
|
||||||
|
|
||||||
|
spin_lock_irqsave(&consistent_lock, flags);
|
||||||
|
|
||||||
|
c = ppc_vm_region_find(&consistent_head, (unsigned long)vaddr);
|
||||||
|
if (!c)
|
||||||
|
goto no_area;
|
||||||
|
|
||||||
|
if ((c->vm_end - c->vm_start) != size) {
|
||||||
|
printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n",
|
||||||
|
__func__, c->vm_end - c->vm_start, size);
|
||||||
|
dump_stack();
|
||||||
|
size = c->vm_end - c->vm_start;
|
||||||
|
}
|
||||||
|
|
||||||
|
addr = c->vm_start;
|
||||||
|
do {
|
||||||
|
pte_t *ptep;
|
||||||
|
unsigned long pfn;
|
||||||
|
|
||||||
|
ptep = pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(addr),
|
||||||
|
addr),
|
||||||
|
addr),
|
||||||
|
addr);
|
||||||
|
if (!pte_none(*ptep) && pte_present(*ptep)) {
|
||||||
|
pfn = pte_pfn(*ptep);
|
||||||
|
pte_clear(&init_mm, addr, ptep);
|
||||||
|
if (pfn_valid(pfn)) {
|
||||||
|
struct page *page = pfn_to_page(pfn);
|
||||||
|
|
||||||
|
ClearPageReserved(page);
|
||||||
|
__free_page(page);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
addr += PAGE_SIZE;
|
||||||
|
} while (size -= PAGE_SIZE);
|
||||||
|
|
||||||
|
flush_tlb_kernel_range(c->vm_start, c->vm_end);
|
||||||
|
|
||||||
|
list_del(&c->vm_list);
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&consistent_lock, flags);
|
||||||
|
|
||||||
|
kfree(c);
|
||||||
|
return;
|
||||||
|
|
||||||
|
no_area:
|
||||||
|
spin_unlock_irqrestore(&consistent_lock, flags);
|
||||||
|
printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n",
|
||||||
|
__func__, vaddr);
|
||||||
|
dump_stack();
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__dma_free_coherent);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* make an area consistent.
|
||||||
|
*/
|
||||||
|
void __dma_sync(void *vaddr, size_t size, int direction)
|
||||||
|
{
|
||||||
|
unsigned long start = (unsigned long)vaddr;
|
||||||
|
unsigned long end = start + size;
|
||||||
|
|
||||||
|
switch (direction) {
|
||||||
|
case DMA_NONE:
|
||||||
|
BUG();
|
||||||
|
case DMA_FROM_DEVICE:
|
||||||
|
/*
|
||||||
|
* invalidate only when cache-line aligned otherwise there is
|
||||||
|
* the potential for discarding uncommitted data from the cache
|
||||||
|
*/
|
||||||
|
if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1)))
|
||||||
|
flush_dcache_range(start, end);
|
||||||
|
else
|
||||||
|
invalidate_dcache_range(start, end);
|
||||||
|
break;
|
||||||
|
case DMA_TO_DEVICE: /* writeback only */
|
||||||
|
clean_dcache_range(start, end);
|
||||||
|
break;
|
||||||
|
case DMA_BIDIRECTIONAL: /* writeback and invalidate */
|
||||||
|
flush_dcache_range(start, end);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__dma_sync);
|
||||||
|
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
/*
|
||||||
|
* __dma_sync_page() implementation for systems using highmem.
|
||||||
|
* In this case, each page of a buffer must be kmapped/kunmapped
|
||||||
|
* in order to have a virtual address for __dma_sync(). This must
|
||||||
|
* not sleep so kmap_atomic()/kunmap_atomic() are used.
|
||||||
|
*
|
||||||
|
* Note: yes, it is possible and correct to have a buffer extend
|
||||||
|
* beyond the first page.
|
||||||
|
*/
|
||||||
|
static inline void __dma_sync_page_highmem(struct page *page,
|
||||||
|
unsigned long offset, size_t size, int direction)
|
||||||
|
{
|
||||||
|
size_t seg_size = min((size_t)(PAGE_SIZE - offset), size);
|
||||||
|
size_t cur_size = seg_size;
|
||||||
|
unsigned long flags, start, seg_offset = offset;
|
||||||
|
int nr_segs = 1 + ((size - seg_size) + PAGE_SIZE - 1)/PAGE_SIZE;
|
||||||
|
int seg_nr = 0;
|
||||||
|
|
||||||
|
local_irq_save(flags);
|
||||||
|
|
||||||
|
do {
|
||||||
|
start = (unsigned long)kmap_atomic(page + seg_nr,
|
||||||
|
KM_PPC_SYNC_PAGE) + seg_offset;
|
||||||
|
|
||||||
|
/* Sync this buffer segment */
|
||||||
|
__dma_sync((void *)start, seg_size, direction);
|
||||||
|
kunmap_atomic((void *)start, KM_PPC_SYNC_PAGE);
|
||||||
|
seg_nr++;
|
||||||
|
|
||||||
|
/* Calculate next buffer segment size */
|
||||||
|
seg_size = min((size_t)PAGE_SIZE, size - cur_size);
|
||||||
|
|
||||||
|
/* Add the segment size to our running total */
|
||||||
|
cur_size += seg_size;
|
||||||
|
seg_offset = 0;
|
||||||
|
} while (seg_nr < nr_segs);
|
||||||
|
|
||||||
|
local_irq_restore(flags);
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_HIGHMEM */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __dma_sync_page makes memory consistent. identical to __dma_sync, but
|
||||||
|
* takes a struct page instead of a virtual address
|
||||||
|
*/
|
||||||
|
void __dma_sync_page(struct page *page, unsigned long offset,
|
||||||
|
size_t size, int direction)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
__dma_sync_page_highmem(page, offset, size, direction);
|
||||||
|
#else
|
||||||
|
unsigned long start = (unsigned long)page_address(page) + offset;
|
||||||
|
__dma_sync((void *)start, size, direction);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__dma_sync_page);
|
|
@ -168,12 +168,8 @@ void __init MMU_init(void)
|
||||||
ppc_md.progress("MMU:mapin", 0x301);
|
ppc_md.progress("MMU:mapin", 0x301);
|
||||||
mapin_ram();
|
mapin_ram();
|
||||||
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
/* Initialize early top-down ioremap allocator */
|
||||||
ioremap_base = PKMAP_BASE;
|
ioremap_bot = IOREMAP_TOP;
|
||||||
#else
|
|
||||||
ioremap_base = 0xfe000000UL; /* for now, could be 0xfffff000 */
|
|
||||||
#endif /* CONFIG_HIGHMEM */
|
|
||||||
ioremap_bot = ioremap_base;
|
|
||||||
|
|
||||||
/* Map in I/O resources */
|
/* Map in I/O resources */
|
||||||
if (ppc_md.progress)
|
if (ppc_md.progress)
|
||||||
|
|
|
@ -380,6 +380,23 @@ void __init mem_init(void)
|
||||||
bsssize >> 10,
|
bsssize >> 10,
|
||||||
initsize >> 10);
|
initsize >> 10);
|
||||||
|
|
||||||
|
#ifdef CONFIG_PPC32
|
||||||
|
pr_info("Kernel virtual memory layout:\n");
|
||||||
|
pr_info(" * 0x%08lx..0x%08lx : fixmap\n", FIXADDR_START, FIXADDR_TOP);
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
pr_info(" * 0x%08lx..0x%08lx : highmem PTEs\n",
|
||||||
|
PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP));
|
||||||
|
#endif /* CONFIG_HIGHMEM */
|
||||||
|
#ifdef CONFIG_NOT_COHERENT_CACHE
|
||||||
|
pr_info(" * 0x%08lx..0x%08lx : consistent mem\n",
|
||||||
|
IOREMAP_TOP, IOREMAP_TOP + CONFIG_CONSISTENT_SIZE);
|
||||||
|
#endif /* CONFIG_NOT_COHERENT_CACHE */
|
||||||
|
pr_info(" * 0x%08lx..0x%08lx : early ioremap\n",
|
||||||
|
ioremap_bot, IOREMAP_TOP);
|
||||||
|
pr_info(" * 0x%08lx..0x%08lx : vmalloc & ioremap\n",
|
||||||
|
VMALLOC_START, VMALLOC_END);
|
||||||
|
#endif /* CONFIG_PPC32 */
|
||||||
|
|
||||||
mem_init_done = 1;
|
mem_init_done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,12 +127,12 @@ static unsigned int steal_context_up(unsigned int id)
|
||||||
|
|
||||||
pr_debug("[%d] steal context %d from mm @%p\n", cpu, id, mm);
|
pr_debug("[%d] steal context %d from mm @%p\n", cpu, id, mm);
|
||||||
|
|
||||||
/* Mark this mm has having no context anymore */
|
|
||||||
mm->context.id = MMU_NO_CONTEXT;
|
|
||||||
|
|
||||||
/* Flush the TLB for that context */
|
/* Flush the TLB for that context */
|
||||||
local_flush_tlb_mm(mm);
|
local_flush_tlb_mm(mm);
|
||||||
|
|
||||||
|
/* Mark this mm has having no context anymore */
|
||||||
|
mm->context.id = MMU_NO_CONTEXT;
|
||||||
|
|
||||||
/* XXX This clear should ultimately be part of local_flush_tlb_mm */
|
/* XXX This clear should ultimately be part of local_flush_tlb_mm */
|
||||||
__clear_bit(id, stale_map[cpu]);
|
__clear_bit(id, stale_map[cpu]);
|
||||||
|
|
||||||
|
|
|
@ -399,8 +399,6 @@ void kernel_map_pages(struct page *page, int numpages, int enable)
|
||||||
#endif /* CONFIG_DEBUG_PAGEALLOC */
|
#endif /* CONFIG_DEBUG_PAGEALLOC */
|
||||||
|
|
||||||
static int fixmaps;
|
static int fixmaps;
|
||||||
unsigned long FIXADDR_TOP = (-PAGE_SIZE);
|
|
||||||
EXPORT_SYMBOL(FIXADDR_TOP);
|
|
||||||
|
|
||||||
void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags)
|
void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags)
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#ifndef __ASM_SH_FLAT_H
|
#ifndef __ASM_SH_FLAT_H
|
||||||
#define __ASM_SH_FLAT_H
|
#define __ASM_SH_FLAT_H
|
||||||
|
|
||||||
#define flat_stack_align(sp) /* nothing needed */
|
|
||||||
#define flat_argvp_envp_on_stack() 0
|
#define flat_argvp_envp_on_stack() 0
|
||||||
#define flat_old_ram_flag(flags) (flags)
|
#define flat_old_ram_flag(flags) (flags)
|
||||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||||
|
|
|
@ -208,8 +208,9 @@ do { unsigned long new_flags = current_thread_info()->flags; \
|
||||||
else \
|
else \
|
||||||
clear_thread_flag(TIF_ABI_PENDING); \
|
clear_thread_flag(TIF_ABI_PENDING); \
|
||||||
/* flush_thread will update pgd cache */ \
|
/* flush_thread will update pgd cache */ \
|
||||||
if (current->personality != PER_LINUX32) \
|
if (personality(current->personality) != PER_LINUX32) \
|
||||||
set_personality(PER_LINUX); \
|
set_personality(PER_LINUX | \
|
||||||
|
(current->personality & (~PER_MASK))); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#endif /* !(__ASM_SPARC64_ELF_H) */
|
#endif /* !(__ASM_SPARC64_ELF_H) */
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
#define EX_LD(x) \
|
#define EX_LD(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
.section .fixup, "ax"; \
|
||||||
.align 4; \
|
.align 4; \
|
||||||
99: retl; \
|
99: retl; \
|
||||||
mov -1, %o0; \
|
mov -1, %o0; \
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
#define EX_ST(x) \
|
#define EX_ST(x) \
|
||||||
98: x; \
|
98: x; \
|
||||||
.section .fixup; \
|
.section .fixup,"ax"; \
|
||||||
.align 4; \
|
.align 4; \
|
||||||
99: retl; \
|
99: retl; \
|
||||||
mov -1, %o0; \
|
mov -1, %o0; \
|
||||||
|
|
|
@ -504,8 +504,11 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym))
|
||||||
if (sym->st_shndx == SHN_ABS) {
|
if (sym->st_shndx == SHN_ABS) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (r_type == R_386_PC32) {
|
if (r_type == R_386_NONE || r_type == R_386_PC32) {
|
||||||
/* PC relative relocations don't need to be adjusted */
|
/*
|
||||||
|
* NONE can be ignored and and PC relative
|
||||||
|
* relocations don't need to be adjusted.
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
else if (r_type == R_386_32) {
|
else if (r_type == R_386_32) {
|
||||||
/* Visit relocations that need to be adjusted */
|
/* Visit relocations that need to be adjusted */
|
||||||
|
|
|
@ -17,11 +17,6 @@
|
||||||
|
|
||||||
#define SMAP 0x534d4150 /* ASCII "SMAP" */
|
#define SMAP 0x534d4150 /* ASCII "SMAP" */
|
||||||
|
|
||||||
struct e820_ext_entry {
|
|
||||||
struct e820entry std;
|
|
||||||
u32 ext_flags;
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
static int detect_memory_e820(void)
|
static int detect_memory_e820(void)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
@ -29,13 +24,21 @@ static int detect_memory_e820(void)
|
||||||
u32 size, id, edi;
|
u32 size, id, edi;
|
||||||
u8 err;
|
u8 err;
|
||||||
struct e820entry *desc = boot_params.e820_map;
|
struct e820entry *desc = boot_params.e820_map;
|
||||||
static struct e820_ext_entry buf; /* static so it is zeroed */
|
static struct e820entry buf; /* static so it is zeroed */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set this here so that if the BIOS doesn't change this field
|
* Note: at least one BIOS is known which assumes that the
|
||||||
* but still doesn't change %ecx, we're still okay...
|
* buffer pointed to by one e820 call is the same one as
|
||||||
|
* the previous call, and only changes modified fields. Therefore,
|
||||||
|
* we use a temporary buffer and copy the results entry by entry.
|
||||||
|
*
|
||||||
|
* This routine deliberately does not try to account for
|
||||||
|
* ACPI 3+ extended attributes. This is because there are
|
||||||
|
* BIOSes in the field which report zero for the valid bit for
|
||||||
|
* all ranges, and we don't currently make any use of the
|
||||||
|
* other attribute bits. Revisit this if we see the extended
|
||||||
|
* attribute bits deployed in a meaningful way in the future.
|
||||||
*/
|
*/
|
||||||
buf.ext_flags = 1;
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
size = sizeof buf;
|
size = sizeof buf;
|
||||||
|
@ -66,13 +69,7 @@ static int detect_memory_e820(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ACPI 3.0 added the extended flags support. If bit 0
|
*desc++ = buf;
|
||||||
in the extended flags is zero, we're supposed to simply
|
|
||||||
ignore the entry -- a backwards incompatible change! */
|
|
||||||
if (size > 20 && !(buf.ext_flags & 1))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
*desc++ = buf.std;
|
|
||||||
count++;
|
count++;
|
||||||
} while (next && count < ARRAY_SIZE(boot_params.e820_map));
|
} while (next && count < ARRAY_SIZE(boot_params.e820_map));
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,13 @@ DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = {
|
||||||
} };
|
} };
|
||||||
EXPORT_PER_CPU_SYMBOL_GPL(gdt_page);
|
EXPORT_PER_CPU_SYMBOL_GPL(gdt_page);
|
||||||
|
|
||||||
|
static int __init x86_xsave_setup(char *s)
|
||||||
|
{
|
||||||
|
setup_clear_cpu_cap(X86_FEATURE_XSAVE);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
__setup("noxsave", x86_xsave_setup);
|
||||||
|
|
||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
static int cachesize_override __cpuinitdata = -1;
|
static int cachesize_override __cpuinitdata = -1;
|
||||||
static int disable_x86_serial_nr __cpuinitdata = 1;
|
static int disable_x86_serial_nr __cpuinitdata = 1;
|
||||||
|
|
|
@ -693,8 +693,8 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
|
||||||
if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE &&
|
if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE &&
|
||||||
policy->cpuinfo.transition_latency > 20 * 1000) {
|
policy->cpuinfo.transition_latency > 20 * 1000) {
|
||||||
policy->cpuinfo.transition_latency = 20 * 1000;
|
policy->cpuinfo.transition_latency = 20 * 1000;
|
||||||
printk_once(KERN_INFO "Capping off P-state tranision"
|
printk_once(KERN_INFO
|
||||||
" latency at 20 uS\n");
|
"P-state transition latency capped at 20 uS\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* table init */
|
/* table init */
|
||||||
|
|
|
@ -168,6 +168,7 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
|
||||||
case 0x0E: /* Core */
|
case 0x0E: /* Core */
|
||||||
case 0x0F: /* Core Duo */
|
case 0x0F: /* Core Duo */
|
||||||
case 0x16: /* Celeron Core */
|
case 0x16: /* Celeron Core */
|
||||||
|
case 0x1C: /* Atom */
|
||||||
p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS;
|
p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS;
|
||||||
return speedstep_get_frequency(SPEEDSTEP_CPU_PCORE);
|
return speedstep_get_frequency(SPEEDSTEP_CPU_PCORE);
|
||||||
case 0x0D: /* Pentium M (Dothan) */
|
case 0x0D: /* Pentium M (Dothan) */
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue