Merge branch 'for-rmk' of git://git.marvell.com/orion into devel
This commit is contained in:
commit
7698fdedcf
|
@ -150,6 +150,11 @@ fan[1-*]_min Fan minimum value
|
|||
Unit: revolution/min (RPM)
|
||||
RW
|
||||
|
||||
fan[1-*]_max Fan maximum value
|
||||
Unit: revolution/min (RPM)
|
||||
Only rarely supported by the hardware.
|
||||
RW
|
||||
|
||||
fan[1-*]_input Fan input value.
|
||||
Unit: revolution/min (RPM)
|
||||
RO
|
||||
|
@ -390,6 +395,7 @@ OR
|
|||
in[0-*]_min_alarm
|
||||
in[0-*]_max_alarm
|
||||
fan[1-*]_min_alarm
|
||||
fan[1-*]_max_alarm
|
||||
temp[1-*]_min_alarm
|
||||
temp[1-*]_max_alarm
|
||||
temp[1-*]_crit_alarm
|
||||
|
|
|
@ -18,8 +18,12 @@ Usage
|
|||
Anonymous finger details are sent sequentially as separate packets of ABS
|
||||
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()
|
||||
function, which generates a SYN_MT_REPORT event. The end of multi-touch
|
||||
transfer is marked by calling the usual input_sync() function.
|
||||
function, which generates a SYN_MT_REPORT event. This instructs the
|
||||
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
|
||||
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
|
||||
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
|
||||
ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION. Devices with
|
||||
more granular information may specify general shapes as blobs, i.e., as a
|
||||
sequence of rectangular shapes grouped together by an
|
||||
ABS_MT_BLOB_ID. Finally, the ABS_MT_TOOL_TYPE may be used to specify
|
||||
whether the touching tool is a finger or a pen or something else.
|
||||
ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION. The
|
||||
ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a
|
||||
finger or a pen or something else. Devices with more granular information
|
||||
may specify general shapes as blobs, i.e., as a sequence of rectangular
|
||||
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
|
||||
|
@ -44,24 +63,24 @@ ABS_MT_TOUCH_MAJOR
|
|||
|
||||
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
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
orientation of the contact and the approaching tool are assumed to be the
|
||||
same.
|
||||
same [4].
|
||||
|
||||
ABS_MT_WIDTH_MINOR
|
||||
|
||||
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 contact. The ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR approximates
|
||||
|
@ -70,14 +89,17 @@ different characteristic widths [1].
|
|||
|
||||
ABS_MT_ORIENTATION
|
||||
|
||||
The orientation of the ellipse. The value should describe half a revolution
|
||||
clockwise around the touch center. The scale of the value is arbitrary, but
|
||||
zero should be returned for an ellipse aligned along the Y axis of the
|
||||
surface. As an example, an index finger placed straight onto the axis could
|
||||
return zero orientation, something negative when twisted to the left, and
|
||||
something positive when twisted to the right. This value can be omitted if
|
||||
the touching object is circular, or if the information is not available in
|
||||
the kernel driver.
|
||||
The orientation of the ellipse. The value should describe a signed quarter
|
||||
of a revolution clockwise around the touch center. The signed value range
|
||||
is arbitrary, but zero should be returned for a finger aligned along the Y
|
||||
axis of the surface, a negative value when finger is turned to the left, and
|
||||
a positive value when finger turned to the right. When completely aligned with
|
||||
the X axis, the range max should be returned. Orientation can be omitted
|
||||
if the touching object is circular, or if the information is not available
|
||||
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
|
||||
|
||||
|
@ -98,8 +120,35 @@ ABS_MT_BLOB_ID
|
|||
|
||||
The BLOB_ID groups several packets together into one arbitrarily shaped
|
||||
contact. This is a low-level anonymous grouping, and should not be confused
|
||||
with the high-level contactID, explained below. Most kernel drivers will
|
||||
not have this capability, and can safely omit the event.
|
||||
with the high-level trackingID [5]. Most kernel drivers will not have blob
|
||||
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
|
||||
|
@ -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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
-----
|
||||
|
||||
|
@ -136,5 +189,7 @@ could be used to derive tilt.
|
|||
time of writing (April 2009), the MT protocol is not yet merged, and the
|
||||
prototype implements finger matching, basic mouse support and two-finger
|
||||
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.
|
||||
[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
|
||||
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
|
||||
wfi(ARM) instruction doesn't work correctly and not to
|
||||
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
|
||||
3stack D965 3stack
|
||||
5stack D965 5stack + SPDIF
|
||||
5stack-no-fp D965 5stack without front panel
|
||||
dell-3stack Dell Dimension E520
|
||||
dell-bios Fixes with Dell BIOS setup
|
||||
auto BIOS setup (default)
|
||||
|
|
|
@ -104,6 +104,11 @@ card*/pcm*/xrun_debug
|
|||
When this value is greater than 1, the driver will show the
|
||||
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
|
||||
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
|
||||
P: Thomas Dahlmann
|
||||
M: thomas.dahlmann@amd.com
|
||||
M: dahlmann.thomas@arcor.de
|
||||
L: linux-geode@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Supported
|
||||
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)
|
||||
T: git git://gitorious.org/linux-gemini/mainline.git
|
||||
S: Maintained
|
||||
F: arch/arm/mach-gemini/
|
||||
|
||||
ARM/EBSA110 MACHINE SUPPORT
|
||||
P: Russell King
|
||||
|
@ -650,6 +651,7 @@ P: Paulius Zaleckas
|
|||
M: paulius.zaleckas@teltonika.lt
|
||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||
S: Maintained
|
||||
F: arch/arm/mm/*-fa*
|
||||
|
||||
ARM/FOOTBRIDGE ARCHITECTURE
|
||||
P: Russell King
|
||||
|
@ -1132,17 +1134,17 @@ F: fs/bfs/
|
|||
F: include/linux/bfs_fs.h
|
||||
|
||||
BLACKFIN ARCHITECTURE
|
||||
P: Bryan Wu
|
||||
M: cooloney@kernel.org
|
||||
P: Mike Frysinger
|
||||
M: vapier@gentoo.org
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
F: arch/blackfin/
|
||||
|
||||
BLACKFIN EMAC DRIVER
|
||||
P: Bryan Wu
|
||||
M: cooloney@kernel.org
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only)
|
||||
P: Michael Hennerich
|
||||
M: michael.hennerich@analog.com
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
F: drivers/net/bfin_mac.*
|
||||
|
@ -1150,7 +1152,7 @@ F: drivers/net/bfin_mac.*
|
|||
BLACKFIN RTC DRIVER
|
||||
P: Mike Frysinger
|
||||
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
|
||||
S: Supported
|
||||
F: drivers/rtc/rtc-bfin.c
|
||||
|
@ -1158,7 +1160,7 @@ F: drivers/rtc/rtc-bfin.c
|
|||
BLACKFIN SERIAL DRIVER
|
||||
P: Sonic Zhang
|
||||
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
|
||||
S: Supported
|
||||
F: drivers/serial/bfin_5xx.c
|
||||
|
@ -1166,7 +1168,7 @@ F: drivers/serial/bfin_5xx.c
|
|||
BLACKFIN WATCHDOG DRIVER
|
||||
P: Mike Frysinger
|
||||
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
|
||||
S: Supported
|
||||
F: drivers/watchdog/bfin_wdt.c
|
||||
|
@ -1174,7 +1176,7 @@ F: drivers/watchdog/bfin_wdt.c
|
|||
BLACKFIN I2C TWI DRIVER
|
||||
P: Sonic Zhang
|
||||
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/
|
||||
S: Supported
|
||||
F: drivers/i2c/busses/i2c-bfin-twi.c
|
||||
|
@ -1540,6 +1542,13 @@ W: http://www.fi.muni.cz/~kas/cosa/
|
|||
S: Maintained
|
||||
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
|
||||
P: Dave Jones
|
||||
M: davej@redhat.com
|
||||
|
@ -1971,8 +1980,8 @@ F: include/linux/edac.h
|
|||
|
||||
EDAC-E752X
|
||||
P: Mark Gross
|
||||
P: Doug Thompson
|
||||
M: mark.gross@intel.com
|
||||
P: Doug Thompson
|
||||
M: dougthompson@xmission.com
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
W: bluesmoke.sourceforge.net
|
||||
|
@ -2249,7 +2258,7 @@ P: Li Yang
|
|||
M: leoli@freescale.com
|
||||
P: Zhang Wei
|
||||
M: zw@zh-kernel.org
|
||||
L: linuxppc-embedded@ozlabs.org
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/dma/fsldma.*
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 30
|
||||
EXTRAVERSION = -rc7
|
||||
EXTRAVERSION = -rc8
|
||||
NAME = Man-Eating Seals of Antiquity
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -394,6 +394,7 @@ config ARCH_KIRKWOOD
|
|||
select CPU_FEROCEON
|
||||
select PCI
|
||||
select GENERIC_GPIO
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select GENERIC_TIME
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select PLAT_ORION
|
||||
|
@ -415,6 +416,7 @@ config ARCH_MV78XX0
|
|||
select CPU_FEROCEON
|
||||
select PCI
|
||||
select GENERIC_GPIO
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select GENERIC_TIME
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select PLAT_ORION
|
||||
|
@ -428,6 +430,7 @@ config ARCH_ORION5X
|
|||
select CPU_FEROCEON
|
||||
select PCI
|
||||
select GENERIC_GPIO
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select GENERIC_TIME
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select PLAT_ORION
|
||||
|
|
|
@ -182,6 +182,7 @@ CONFIG_ARCH_KIRKWOOD=y
|
|||
CONFIG_MACH_DB88F6281_BP=y
|
||||
CONFIG_MACH_RD88F6192_NAS=y
|
||||
CONFIG_MACH_RD88F6281=y
|
||||
CONFIG_MACH_MV88F6281GTW_GE=y
|
||||
CONFIG_MACH_SHEEVAPLUG=y
|
||||
CONFIG_MACH_TS219=y
|
||||
CONFIG_PLAT_ORION=y
|
||||
|
@ -270,7 +271,9 @@ CONFIG_CMDLINE=""
|
|||
#
|
||||
# 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
|
||||
|
|
|
@ -903,7 +903,8 @@ CONFIG_UNIX98_PTYS=y
|
|||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=16
|
||||
# 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_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
|
|
@ -114,3 +114,16 @@
|
|||
.align 3; \
|
||||
.long 9999b,9001f; \
|
||||
.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");
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
unsigned long tmp;
|
||||
int result;
|
||||
|
||||
smp_mb();
|
||||
|
||||
__asm__ __volatile__("@ atomic_add_return\n"
|
||||
"1: ldrex %0, [%2]\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)
|
||||
: "cc");
|
||||
|
||||
smp_mb();
|
||||
|
||||
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)
|
||||
{
|
||||
unsigned long tmp;
|
||||
int result;
|
||||
|
||||
smp_mb();
|
||||
|
||||
__asm__ __volatile__("@ atomic_sub_return\n"
|
||||
"1: ldrex %0, [%2]\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)
|
||||
: "cc");
|
||||
|
||||
smp_mb();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -84,6 +124,8 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
|
|||
{
|
||||
unsigned long oldval, res;
|
||||
|
||||
smp_mb();
|
||||
|
||||
do {
|
||||
__asm__ __volatile__("@ atomic_cmpxchg\n"
|
||||
"ldrex %1, [%2]\n"
|
||||
|
@ -95,6 +137,8 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
|
|||
: "cc");
|
||||
} while (res);
|
||||
|
||||
smp_mb();
|
||||
|
||||
return oldval;
|
||||
}
|
||||
|
||||
|
@ -135,6 +179,7 @@ static inline int atomic_add_return(int i, atomic_t *v)
|
|||
|
||||
return val;
|
||||
}
|
||||
#define atomic_add(i, v) (void) atomic_add_return(i, 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;
|
||||
}
|
||||
#define atomic_sub(i, v) (void) atomic_sub_return(i, v)
|
||||
|
||||
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_add(i, v) (void) atomic_add_return(i, v)
|
||||
#define atomic_inc(v) (void) atomic_add_return(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(v) atomic_add(1, v)
|
||||
#define atomic_dec(v) atomic_sub(1, v)
|
||||
|
||||
#define atomic_inc_and_test(v) (atomic_add_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)
|
||||
|
||||
/* Atomic operations are already serializing on ARM */
|
||||
#define smp_mb__before_atomic_dec() barrier()
|
||||
#define smp_mb__after_atomic_dec() barrier()
|
||||
#define smp_mb__before_atomic_inc() barrier()
|
||||
#define smp_mb__after_atomic_inc() barrier()
|
||||
#define smp_mb__before_atomic_dec() smp_mb()
|
||||
#define smp_mb__after_atomic_dec() smp_mb()
|
||||
#define smp_mb__before_atomic_inc() smp_mb()
|
||||
#define smp_mb__after_atomic_inc() smp_mb()
|
||||
|
||||
#include <asm-generic/atomic.h>
|
||||
#endif
|
||||
|
|
|
@ -5,9 +5,6 @@
|
|||
#ifndef __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_old_ram_flag(flags) (flags)
|
||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#define SZ_512 0x00000200
|
||||
|
||||
#define SZ_1K 0x00000400
|
||||
#define SZ_2K 0x00000800
|
||||
#define SZ_4K 0x00001000
|
||||
#define SZ_8K 0x00002000
|
||||
#define SZ_16K 0x00004000
|
||||
|
|
|
@ -248,6 +248,8 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size
|
|||
unsigned int tmp;
|
||||
#endif
|
||||
|
||||
smp_mb();
|
||||
|
||||
switch (size) {
|
||||
#if __LINUX_ARM_ARCH__ >= 6
|
||||
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;
|
||||
break;
|
||||
}
|
||||
smp_mb();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -316,6 +319,12 @@ extern void enable_hlt(void);
|
|||
|
||||
#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
|
||||
* them available.
|
||||
|
@ -329,6 +338,173 @@ extern void enable_hlt(void);
|
|||
#include <asm-generic/cmpxchg.h>
|
||||
#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__ */
|
||||
|
||||
#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;
|
||||
if (cpu_architecture() < CPU_ARCH_ARMv6)
|
||||
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;
|
||||
#endif
|
||||
}
|
||||
EXPORT_SYMBOL(arm_elf_read_implies_exec);
|
||||
|
|
|
@ -815,10 +815,7 @@ __kuser_helper_start:
|
|||
*/
|
||||
|
||||
__kuser_memory_barrier: @ 0xffff0fa0
|
||||
|
||||
#if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP)
|
||||
mcr p15, 0, r0, c7, c10, 5 @ dmb
|
||||
#endif
|
||||
smp_dmb
|
||||
usr_ret lr
|
||||
|
||||
.align 5
|
||||
|
|
|
@ -18,12 +18,14 @@
|
|||
mov r2, #1
|
||||
add r1, r1, r0, lsr #3 @ Get byte offset
|
||||
mov r3, r2, lsl r3 @ create mask
|
||||
smp_dmb
|
||||
1: ldrexb r2, [r1]
|
||||
ands r0, r2, r3 @ save old value of bit
|
||||
\instr r2, r2, r3 @ toggle bit
|
||||
strexb ip, r2, [r1]
|
||||
cmp ip, #0
|
||||
bne 1b
|
||||
smp_dmb
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
2: mov pc, lr
|
||||
|
|
|
@ -15,10 +15,9 @@
|
|||
/*
|
||||
* Memory Map definitions
|
||||
*/
|
||||
/* FIXME: Does it really swap SRAM like this? */
|
||||
#ifdef CONFIG_GEMINI_MEM_SWAP
|
||||
# define GEMINI_DRAM_BASE 0x00000000
|
||||
# define GEMINI_SRAM_BASE 0x20000000
|
||||
# define GEMINI_SRAM_BASE 0x70000000
|
||||
#else
|
||||
# define GEMINI_SRAM_BASE 0x00000000
|
||||
# define GEMINI_DRAM_BASE 0x10000000
|
||||
|
|
|
@ -20,6 +20,12 @@ config MACH_RD88F6281
|
|||
Say 'Y' here if you want your kernel to support the
|
||||
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
|
||||
bool "Marvell SheevaPlug Reference Board"
|
||||
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_RD88F6192_NAS) += rd88f6192-nas-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_TS219) += ts219-setup.o
|
||||
|
||||
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*/
|
||||
#define TARGET_DDR 0
|
||||
#define TARGET_DEV_BUS 1
|
||||
#define TARGET_SRAM 3
|
||||
#define TARGET_PCIE 4
|
||||
#define ATTR_DEV_SPI_ROM 0x1e
|
||||
#define ATTR_DEV_BOOT 0x1d
|
||||
|
@ -30,6 +31,7 @@
|
|||
#define ATTR_DEV_CS0 0x3e
|
||||
#define ATTR_PCIE_IO 0xe0
|
||||
#define ATTR_PCIE_MEM 0xe8
|
||||
#define ATTR_SRAM 0x01
|
||||
|
||||
/*
|
||||
* Helpers to get DDR bank info
|
||||
|
@ -48,7 +50,6 @@
|
|||
|
||||
|
||||
struct mbus_dram_target_info kirkwood_mbus_dram_info;
|
||||
static int __initdata win_alloc_count;
|
||||
|
||||
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,
|
||||
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.
|
||||
|
@ -140,8 +145,3 @@ void __init kirkwood_setup_cpu_mbus(void)
|
|||
}
|
||||
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_i2c.h>
|
||||
#include <linux/ata_platform.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/spi/orion_spi.h>
|
||||
#include <net/dsa.h>
|
||||
#include <asm/page.h>
|
||||
|
@ -29,6 +30,7 @@
|
|||
#include <plat/mvsdio.h>
|
||||
#include <plat/mv_xor.h>
|
||||
#include <plat/orion_nand.h>
|
||||
#include <plat/orion_wdt.h>
|
||||
#include <plat/time.h>
|
||||
#include "common.h"
|
||||
|
||||
|
@ -54,6 +56,13 @@ void __init kirkwood_map_io(void)
|
|||
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
|
||||
|
@ -95,6 +104,7 @@ static struct platform_device kirkwood_ehci = {
|
|||
|
||||
void __init kirkwood_ehci_init(void)
|
||||
{
|
||||
kirkwood_clk_ctrl |= CGC_USB0;
|
||||
platform_device_register(&kirkwood_ehci);
|
||||
}
|
||||
|
||||
|
@ -144,10 +154,14 @@ static struct platform_device kirkwood_ge00 = {
|
|||
.id = 0,
|
||||
.num_resources = 1,
|
||||
.resource = kirkwood_ge00_resources,
|
||||
.dev = {
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data)
|
||||
{
|
||||
kirkwood_clk_ctrl |= CGC_GE0;
|
||||
eth_data->shared = &kirkwood_ge00_shared;
|
||||
kirkwood_ge00.dev.platform_data = eth_data;
|
||||
|
||||
|
@ -202,10 +216,14 @@ static struct platform_device kirkwood_ge01 = {
|
|||
.id = 1,
|
||||
.num_resources = 1,
|
||||
.resource = kirkwood_ge01_resources,
|
||||
.dev = {
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data)
|
||||
{
|
||||
kirkwood_clk_ctrl |= CGC_GE1;
|
||||
eth_data->shared = &kirkwood_ge01_shared;
|
||||
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
|
||||
****************************************************************************/
|
||||
|
@ -295,6 +350,9 @@ static struct platform_device kirkwood_sata = {
|
|||
|
||||
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;
|
||||
kirkwood_sata.dev.platform_data = sata_data;
|
||||
platform_device_register(&kirkwood_sata);
|
||||
|
@ -340,6 +398,7 @@ void __init kirkwood_sdio_init(struct mvsdio_platform_data *mvsdio_data)
|
|||
else
|
||||
mvsdio_data->clock = 200000000;
|
||||
mvsdio_data->dram = &kirkwood_mbus_dram_info;
|
||||
kirkwood_clk_ctrl |= CGC_SDIO;
|
||||
kirkwood_sdio.dev.platform_data = mvsdio_data;
|
||||
platform_device_register(&kirkwood_sdio);
|
||||
}
|
||||
|
@ -371,6 +430,7 @@ static struct platform_device kirkwood_spi = {
|
|||
|
||||
void __init kirkwood_spi_init()
|
||||
{
|
||||
kirkwood_clk_ctrl |= CGC_RUNIT;
|
||||
platform_device_register(&kirkwood_spi);
|
||||
}
|
||||
|
||||
|
@ -386,12 +446,10 @@ static struct mv64xxx_i2c_pdata kirkwood_i2c_pdata = {
|
|||
|
||||
static struct resource kirkwood_i2c_resources[] = {
|
||||
{
|
||||
.name = "i2c",
|
||||
.start = I2C_PHYS_BASE,
|
||||
.end = I2C_PHYS_BASE + 0x1f,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.name = "i2c",
|
||||
.start = IRQ_KIRKWOOD_TWSI,
|
||||
.end = IRQ_KIRKWOOD_TWSI,
|
||||
.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
|
||||
****************************************************************************/
|
||||
|
@ -593,6 +688,7 @@ static struct platform_device kirkwood_xor01_channel = {
|
|||
|
||||
static void __init kirkwood_xor0_init(void)
|
||||
{
|
||||
kirkwood_clk_ctrl |= CGC_XOR0;
|
||||
platform_device_register(&kirkwood_xor0_shared);
|
||||
|
||||
/*
|
||||
|
@ -691,6 +787,7 @@ static struct platform_device kirkwood_xor11_channel = {
|
|||
|
||||
static void __init kirkwood_xor1_init(void)
|
||||
{
|
||||
kirkwood_clk_ctrl |= CGC_XOR1;
|
||||
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
|
||||
****************************************************************************/
|
||||
|
@ -800,6 +920,49 @@ void __init kirkwood_init(void)
|
|||
|
||||
/* internal devices that every board has */
|
||||
kirkwood_rtc_init();
|
||||
kirkwood_wdt_init();
|
||||
kirkwood_xor0_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 mv_sata_platform_data;
|
||||
struct mvsdio_platform_data;
|
||||
struct mtd_partition;
|
||||
|
||||
/*
|
||||
* 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;
|
||||
void kirkwood_setup_cpu_mbus(void);
|
||||
void kirkwood_setup_sram_win(u32 base, u32 size);
|
||||
|
||||
void kirkwood_pcie_id(u32 *dev, u32 *rev);
|
||||
|
||||
|
@ -40,9 +40,11 @@ void kirkwood_spi_init(void);
|
|||
void kirkwood_i2c_init(void);
|
||||
void kirkwood_uart0_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 struct sys_timer kirkwood_timer;
|
||||
|
||||
#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
|
||||
|
||||
#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/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/ata_platform.h>
|
||||
#include <linux/mv643xx_eth.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <mach/kirkwood.h>
|
||||
#include <plat/orion_nand.h>
|
||||
#include <plat/mvsdio.h>
|
||||
#include "common.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 = {
|
||||
.phy_addr = MV643XX_ETH_PHY_ADDR(8),
|
||||
};
|
||||
|
@ -92,13 +64,12 @@ static void __init db88f6281_init(void)
|
|||
kirkwood_init();
|
||||
kirkwood_mpp_conf(db88f6281_mpp_config);
|
||||
|
||||
kirkwood_nand_init(ARRAY_AND_SIZE(db88f6281_nand_parts), 25);
|
||||
kirkwood_ehci_init();
|
||||
kirkwood_ge00_init(&db88f6281_ge00_data);
|
||||
kirkwood_sata_init(&db88f6281_sata_data);
|
||||
kirkwood_uart0_init();
|
||||
kirkwood_sdio_init(&db88f6281_mvsdio_data);
|
||||
|
||||
platform_device_register(&db88f6281_nand_flash);
|
||||
}
|
||||
|
||||
static int __init db88f6281_pci_init(void)
|
||||
|
|
|
@ -17,12 +17,15 @@
|
|||
#define CPU_RESET 0x00000002
|
||||
|
||||
#define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108)
|
||||
#define WDT_RESET_OUT_EN 0x00000002
|
||||
#define SOFT_RESET_OUT_EN 0x00000004
|
||||
|
||||
#define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c)
|
||||
#define SOFT_RESET 0x00000001
|
||||
|
||||
#define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110)
|
||||
#define WDT_INT_REQ 0x0008
|
||||
|
||||
#define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114)
|
||||
#define BRIDGE_INT_TIMER0 0x0002
|
||||
#define BRIDGE_INT_TIMER1 0x0004
|
||||
|
@ -39,4 +42,22 @@
|
|||
#define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128)
|
||||
#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
|
||||
|
|
|
@ -19,6 +19,31 @@ static inline void __iomem *__io(unsigned long addr)
|
|||
+ 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 __mem_pci(a) (a)
|
||||
|
||||
|
|
|
@ -20,16 +20,18 @@
|
|||
* f1000000 on-chip peripheral registers
|
||||
* f2000000 PCIe I/O space
|
||||
* f3000000 NAND controller address window
|
||||
* f4000000 Security Accelerator SRAM
|
||||
*
|
||||
* virt phys size
|
||||
* fee00000 f1000000 1M on-chip peripheral registers
|
||||
* 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_SIZE SZ_64K /* 1K is sufficient, but 64K
|
||||
* is the minimal window size
|
||||
*/
|
||||
#define KIRKWOOD_NAND_MEM_SIZE SZ_1K
|
||||
|
||||
#define KIRKWOOD_PCIE_IO_PHYS_BASE 0xf2000000
|
||||
#define KIRKWOOD_PCIE_IO_VIRT_BASE 0xfef00000
|
||||
|
@ -48,6 +50,7 @@
|
|||
*/
|
||||
#define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000)
|
||||
#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_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x10000)
|
||||
|
@ -63,7 +66,11 @@
|
|||
|
||||
#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_LINK_CTRL (PCIE_VIRT_BASE | 0x70)
|
||||
#define PCIE_STATUS (PCIE_VIRT_BASE | 0x1a04)
|
||||
|
||||
#define USB_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x50000)
|
||||
|
||||
|
@ -80,6 +87,11 @@
|
|||
#define GE01_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x74000)
|
||||
|
||||
#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)
|
||||
|
||||
|
|
|
@ -48,6 +48,9 @@ void __init kirkwood_mpp_conf(unsigned int *mpp_list)
|
|||
if (!variant_mask)
|
||||
return;
|
||||
|
||||
/* Initialize gpiolib. */
|
||||
orion_gpio_init();
|
||||
|
||||
printk(KERN_DEBUG "initial MPP regs:");
|
||||
for (i = 0; i < MPP_NR_REGS; 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/mach/pci.h>
|
||||
#include <plat/pcie.h>
|
||||
#include <mach/bridge-regs.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)
|
||||
{
|
||||
struct resource *res;
|
||||
extern unsigned int kirkwood_clk_ctrl;
|
||||
|
||||
/*
|
||||
* 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->io_offset = 0;
|
||||
|
||||
kirkwood_clk_ctrl |= CGC_PEX0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,8 +11,6 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/ata_platform.h>
|
||||
#include <linux/mv643xx_eth.h>
|
||||
#include <linux/spi/flash.h>
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/ata_platform.h>
|
||||
#include <linux/mv643xx_eth.h>
|
||||
|
@ -22,7 +21,6 @@
|
|||
#include <asm/mach/arch.h>
|
||||
#include <mach/kirkwood.h>
|
||||
#include <plat/mvsdio.h>
|
||||
#include <plat/orion_nand.h>
|
||||
#include "common.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 = {
|
||||
.phy_addr = MV643XX_ETH_PHY_NONE,
|
||||
.speed = SPEED_1000,
|
||||
|
@ -114,6 +86,7 @@ static void __init rd88f6281_init(void)
|
|||
kirkwood_init();
|
||||
kirkwood_mpp_conf(rd88f6281_mpp_config);
|
||||
|
||||
kirkwood_nand_init(ARRAY_AND_SIZE(rd88f6281_nand_parts), 25);
|
||||
kirkwood_ehci_init();
|
||||
|
||||
kirkwood_ge00_init(&rd88f6281_ge00_data);
|
||||
|
@ -129,8 +102,6 @@ static void __init rd88f6281_init(void)
|
|||
kirkwood_sata_init(&rd88f6281_sata_data);
|
||||
kirkwood_sdio_init(&rd88f6281_mvsdio_data);
|
||||
kirkwood_uart0_init();
|
||||
|
||||
platform_device_register(&rd88f6281_nand_flash);
|
||||
}
|
||||
|
||||
static int __init rd88f6281_pci_init(void)
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mv643xx_eth.h>
|
||||
#include <linux/gpio.h>
|
||||
|
@ -20,7 +19,6 @@
|
|||
#include <asm/mach/arch.h>
|
||||
#include <mach/kirkwood.h>
|
||||
#include <plat/mvsdio.h>
|
||||
#include <plat/orion_nand.h>
|
||||
#include "common.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 = {
|
||||
.phy_addr = MV643XX_ETH_PHY_ADDR(0),
|
||||
};
|
||||
|
||||
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[] = {
|
||||
|
@ -111,6 +83,7 @@ static void __init sheevaplug_init(void)
|
|||
kirkwood_mpp_conf(sheevaplug_mpp_config);
|
||||
|
||||
kirkwood_uart0_init();
|
||||
kirkwood_nand_init(ARRAY_AND_SIZE(sheevaplug_nand_parts), 25);
|
||||
|
||||
if (gpio_request(29, "USB Power Enable") != 0 ||
|
||||
gpio_direction_output(29, 1) != 0)
|
||||
|
@ -120,7 +93,6 @@ static void __init sheevaplug_init(void)
|
|||
kirkwood_ge00_init(&sheevaplug_ge00_data);
|
||||
kirkwood_sdio_init(&sheevaplug_mvsdio_data);
|
||||
|
||||
platform_device_register(&sheevaplug_nand_flash);
|
||||
platform_device_register(&sheevaplug_leds);
|
||||
}
|
||||
|
||||
|
|
|
@ -142,6 +142,8 @@ static unsigned int qnap_ts219_mpp_config[] __initdata = {
|
|||
MPP1_SPI_MOSI,
|
||||
MPP2_SPI_SCK,
|
||||
MPP3_SPI_MISO,
|
||||
MPP4_SATA1_ACTn,
|
||||
MPP5_SATA0_ACTn,
|
||||
MPP8_TW_SDA,
|
||||
MPP9_TW_SCK,
|
||||
MPP10_UART0_TXD,
|
||||
|
@ -150,10 +152,6 @@ static unsigned int qnap_ts219_mpp_config[] __initdata = {
|
|||
MPP14_UART1_RXD, /* PIC controller */
|
||||
MPP15_GPIO, /* USB Copy button */
|
||||
MPP16_GPIO, /* Reset button */
|
||||
MPP20_SATA1_ACTn,
|
||||
MPP21_SATA0_ACTn,
|
||||
MPP22_SATA1_PRESENTn,
|
||||
MPP23_SATA0_PRESENTn,
|
||||
0
|
||||
};
|
||||
|
||||
|
|
|
@ -82,6 +82,9 @@ static struct platform_device loki_ge0 = {
|
|||
.id = 0,
|
||||
.num_resources = 1,
|
||||
.resource = loki_ge0_resources,
|
||||
.dev = {
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
void __init loki_ge0_init(struct mv643xx_eth_platform_data *eth_data)
|
||||
|
@ -136,6 +139,9 @@ static struct platform_device loki_ge1 = {
|
|||
.id = 1,
|
||||
.num_resources = 1,
|
||||
.resource = loki_ge1_resources,
|
||||
.dev = {
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
void __init loki_ge1_init(struct mv643xx_eth_platform_data *eth_data)
|
||||
|
|
|
@ -3,6 +3,11 @@
|
|||
|
||||
#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 */
|
||||
#define GPIO0_GPIO MFP_CFG(GPIO0, AF5)
|
||||
#define GPIO1_GPIO MFP_CFG(GPIO1, AF5)
|
||||
|
|
|
@ -3,6 +3,11 @@
|
|||
|
||||
#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 */
|
||||
#define GPIO47_UART2_RXD MFP_CFG(GPIO47, AF6)
|
||||
#define GPIO48_UART2_TXD MFP_CFG(GPIO48, AF6)
|
||||
|
|
|
@ -12,16 +12,13 @@
|
|||
* possible, we make the following compromise:
|
||||
*
|
||||
* 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()
|
||||
* 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_DRV
|
||||
#undef MFP_CFG_LPM
|
||||
|
|
|
@ -136,7 +136,7 @@ static struct clock_event_device ckevt = {
|
|||
.set_mode = timer_set_mode,
|
||||
};
|
||||
|
||||
static cycle_t clksrc_read(void)
|
||||
static cycle_t clksrc_read(struct clocksource *cs)
|
||||
{
|
||||
return timer_read();
|
||||
}
|
||||
|
|
|
@ -321,6 +321,9 @@ static struct platform_device mv78xx0_ge00 = {
|
|||
.id = 0,
|
||||
.num_resources = 1,
|
||||
.resource = mv78xx0_ge00_resources,
|
||||
.dev = {
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data)
|
||||
|
@ -375,6 +378,9 @@ static struct platform_device mv78xx0_ge01 = {
|
|||
.id = 1,
|
||||
.num_resources = 1,
|
||||
.resource = mv78xx0_ge01_resources,
|
||||
.dev = {
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data)
|
||||
|
@ -429,6 +435,9 @@ static struct platform_device mv78xx0_ge10 = {
|
|||
.id = 2,
|
||||
.num_resources = 1,
|
||||
.resource = mv78xx0_ge10_resources,
|
||||
.dev = {
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data)
|
||||
|
@ -496,6 +505,9 @@ static struct platform_device mv78xx0_ge11 = {
|
|||
.id = 3,
|
||||
.num_resources = 1,
|
||||
.resource = mv78xx0_ge11_resources,
|
||||
.dev = {
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
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[] = {
|
||||
{
|
||||
.name = "i2c 0 base",
|
||||
.start = I2C_0_PHYS_BASE,
|
||||
.end = I2C_0_PHYS_BASE + 0x1f,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.name = "i2c 0 irq",
|
||||
.start = IRQ_MV78XX0_I2C_0,
|
||||
.end = IRQ_MV78XX0_I2C_0,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
|
@ -567,12 +577,10 @@ static struct mv64xxx_i2c_pdata mv78xx0_i2c_1_pdata = {
|
|||
|
||||
static struct resource mv78xx0_i2c_1_resources[] = {
|
||||
{
|
||||
.name = "i2c 1 base",
|
||||
.start = I2C_1_PHYS_BASE,
|
||||
.end = I2C_1_PHYS_BASE + 0x1f,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.name = "i2c 1 irq",
|
||||
.start = IRQ_MV78XX0_I2C_1,
|
||||
.end = IRQ_MV78XX0_I2C_1,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
|
|
|
@ -28,6 +28,9 @@ void __init mv78xx0_init_irq(void)
|
|||
{
|
||||
int i;
|
||||
|
||||
/* Initialize gpiolib. */
|
||||
orion_gpio_init();
|
||||
|
||||
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(64, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_ERR_OFF));
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/mbus.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/errno.h>
|
||||
#include <mach/hardware.h>
|
||||
#include "common.h"
|
||||
|
||||
|
@ -44,6 +45,7 @@
|
|||
#define TARGET_DEV_BUS 1
|
||||
#define TARGET_PCI 3
|
||||
#define TARGET_PCIE 4
|
||||
#define TARGET_SRAM 9
|
||||
#define ATTR_PCIE_MEM 0x59
|
||||
#define ATTR_PCIE_IO 0x51
|
||||
#define ATTR_PCIE_WA 0x79
|
||||
|
@ -53,6 +55,7 @@
|
|||
#define ATTR_DEV_CS1 0x1d
|
||||
#define ATTR_DEV_CS2 0x1b
|
||||
#define ATTR_DEV_BOOT 0xf
|
||||
#define ATTR_SRAM 0x0
|
||||
|
||||
/*
|
||||
* Helpers to get DDR bank info
|
||||
|
@ -87,13 +90,13 @@ static int __init orion5x_cpu_win_can_remap(int win)
|
|||
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)
|
||||
{
|
||||
if (win >= 8) {
|
||||
printk(KERN_ERR "setup_cpu_win: trying to allocate "
|
||||
"window %d\n", win);
|
||||
return;
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
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(0, CPU_WIN_REMAP_HI(win));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
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,
|
||||
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/mv_xor.h>
|
||||
#include <plat/orion_nand.h>
|
||||
#include <plat/orion5x_wdt.h>
|
||||
#include <plat/orion_wdt.h>
|
||||
#include <plat/time.h>
|
||||
#include "common.h"
|
||||
|
||||
|
@ -188,6 +188,9 @@ static struct platform_device orion5x_eth = {
|
|||
.id = 0,
|
||||
.num_resources = 1,
|
||||
.resource = orion5x_eth_resources,
|
||||
.dev = {
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
};
|
||||
|
||||
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[] = {
|
||||
{
|
||||
.name = "i2c base",
|
||||
.start = I2C_PHYS_BASE,
|
||||
.end = I2C_PHYS_BASE + 0x1f,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.name = "i2c irq",
|
||||
.start = IRQ_ORION5X_I2C,
|
||||
.end = IRQ_ORION5X_I2C,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
|
@ -535,16 +536,52 @@ void __init orion5x_xor_init(void)
|
|||
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
|
||||
****************************************************************************/
|
||||
static struct orion5x_wdt_platform_data orion5x_wdt_data = {
|
||||
static struct orion_wdt_platform_data orion5x_wdt_data = {
|
||||
.tclk = 0,
|
||||
};
|
||||
|
||||
static struct platform_device orion5x_wdt_device = {
|
||||
.name = "orion5x_wdt",
|
||||
.name = "orion_wdt",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.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_dev2_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_ehci1_init(void);
|
||||
|
@ -37,6 +38,7 @@ void orion5x_spi_init(void);
|
|||
void orion5x_uart0_init(void);
|
||||
void orion5x_uart1_init(void);
|
||||
void orion5x_xor_init(void);
|
||||
int orion5x_crypto_init(void);
|
||||
|
||||
/*
|
||||
* PCIe/PCI functions.
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
|
||||
#define CPU_CTRL (ORION5X_BRIDGE_VIRT_BASE | 0x104)
|
||||
|
||||
#define CPU_RESET_MASK (ORION5X_BRIDGE_VIRT_BASE | 0x108)
|
||||
#define WDT_RESET 0x0002
|
||||
#define RSTOUTn_MASK (ORION5X_BRIDGE_VIRT_BASE | 0x108)
|
||||
#define WDT_RESET_OUT_EN 0x0002
|
||||
|
||||
#define CPU_SOFT_RESET (ORION5X_BRIDGE_VIRT_BASE | 0x10c)
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
* f1000000 on-chip peripheral registers
|
||||
* f2000000 PCIe I/O space
|
||||
* f2100000 PCI I/O space
|
||||
* f2200000 SRAM dedicated for the crypto unit
|
||||
* f4000000 device bus mappings (boot)
|
||||
* fa000000 device bus mappings (cs0)
|
||||
* fa800000 device bus mappings (cs2)
|
||||
|
@ -49,6 +50,9 @@
|
|||
#define ORION5X_PCI_IO_BUS_BASE 0x00100000
|
||||
#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 */
|
||||
#define ORION5X_PCIE_WA_PHYS_BASE 0xf0000000
|
||||
#define ORION5X_PCIE_WA_VIRT_BASE 0xfe000000
|
||||
|
@ -94,6 +98,8 @@
|
|||
#define ORION5X_SATA_PHYS_BASE (ORION5X_REGS_PHYS_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_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
|
||||
*/
|
||||
orion5x_setbits(CPU_RESET_MASK, (1 << 2));
|
||||
orion5x_setbits(RSTOUTn_MASK, (1 << 2));
|
||||
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_16_19_ctrl = readl(MPP_16_19_CTRL);
|
||||
|
||||
/* Initialize gpiolib. */
|
||||
orion_gpio_init();
|
||||
|
||||
while (mode->mpp >= 0) {
|
||||
u32 *reg;
|
||||
int num_type;
|
||||
|
|
|
@ -181,9 +181,9 @@ static void mss2_power_off(void)
|
|||
/*
|
||||
* Enable and issue soft reset
|
||||
*/
|
||||
reg = readl(CPU_RESET_MASK);
|
||||
reg = readl(RSTOUTn_MASK);
|
||||
reg |= 1 << 2;
|
||||
writel(reg, CPU_RESET_MASK);
|
||||
writel(reg, RSTOUTn_MASK);
|
||||
|
||||
reg = readl(CPU_SOFT_RESET);
|
||||
reg |= 1;
|
||||
|
|
|
@ -25,6 +25,7 @@ struct fpga_devices {
|
|||
/* Technologic Systems */
|
||||
struct fpga_device ts_rtc;
|
||||
struct fpga_device ts_nand;
|
||||
struct fpga_device ts_rng;
|
||||
};
|
||||
|
||||
struct ts78xx_fpga_data {
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <linux/m48t86.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/timeriomem-rng.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
@ -269,6 +270,50 @@ static void ts78xx_ts_nand_unload(void)
|
|||
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
|
||||
****************************************************************************/
|
||||
|
@ -276,6 +321,7 @@ static void ts78xx_fpga_devices_zero_init(void)
|
|||
{
|
||||
ts78xx_fpga.supports.ts_rtc.init = 0;
|
||||
ts78xx_fpga.supports.ts_nand.init = 0;
|
||||
ts78xx_fpga.supports.ts_rng.init = 0;
|
||||
}
|
||||
|
||||
static void ts78xx_fpga_supports(void)
|
||||
|
@ -289,10 +335,12 @@ static void ts78xx_fpga_supports(void)
|
|||
case TS7800_REV_5:
|
||||
ts78xx_fpga.supports.ts_rtc.present = 1;
|
||||
ts78xx_fpga.supports.ts_nand.present = 1;
|
||||
ts78xx_fpga.supports.ts_rng.present = 1;
|
||||
break;
|
||||
default:
|
||||
ts78xx_fpga.supports.ts_rtc.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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@ -328,6 +384,8 @@ static int ts78xx_fpga_unload_devices(void)
|
|||
ts78xx_ts_rtc_unload();
|
||||
if (ts78xx_fpga.supports.ts_nand.present == 1)
|
||||
ts78xx_ts_nand_unload();
|
||||
if (ts78xx_fpga.supports.ts_rng.present == 1)
|
||||
ts78xx_ts_rng_unload();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/mv643xx_eth.h>
|
||||
#include <linux/ethtool.h>
|
||||
#include <net/dsa.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
@ -97,6 +98,20 @@ static struct mv643xx_eth_platform_data wnr854t_eth_data = {
|
|||
.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)
|
||||
{
|
||||
/*
|
||||
|
@ -110,6 +125,7 @@ static void __init wnr854t_init(void)
|
|||
* Configure peripherals.
|
||||
*/
|
||||
orion5x_eth_init(&wnr854t_eth_data);
|
||||
orion5x_eth_switch_init(&wnr854t_switch_plat_data, NO_IRQ);
|
||||
orion5x_uart0_init();
|
||||
|
||||
orion5x_setup_dev_boot_win(WNR854T_NOR_BOOT_BASE,
|
||||
|
|
|
@ -111,9 +111,9 @@ static unsigned long ezx_pin_config[] __initdata = {
|
|||
GPIO25_SSP1_TXD,
|
||||
GPIO26_SSP1_RXD,
|
||||
GPIO24_GPIO, /* pcap chip select */
|
||||
GPIO1_GPIO, /* pcap interrupt */
|
||||
GPIO4_GPIO, /* WDI_AP */
|
||||
GPIO55_GPIO, /* SYS_RESTART */
|
||||
GPIO1_GPIO | WAKEUP_ON_EDGE_RISE, /* pcap interrupt */
|
||||
GPIO4_GPIO | MFP_LPM_DRIVE_HIGH, /* WDI_AP */
|
||||
GPIO55_GPIO | MFP_LPM_DRIVE_HIGH, /* SYS_RESTART */
|
||||
|
||||
/* MMC */
|
||||
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)
|
||||
static unsigned long gen1_pin_config[] __initdata = {
|
||||
/* flip / lockswitch */
|
||||
GPIO12_GPIO,
|
||||
GPIO12_GPIO | WAKEUP_ON_EDGE_BOTH,
|
||||
|
||||
/* bluetooth (bcm2035) */
|
||||
GPIO14_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
|
||||
GPIO14_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */
|
||||
GPIO48_GPIO, /* RESET */
|
||||
GPIO28_GPIO, /* WAKEUP */
|
||||
|
||||
/* Neptune handshake */
|
||||
GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */
|
||||
GPIO57_GPIO, /* AP_RDY */
|
||||
GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */
|
||||
GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI2 */
|
||||
GPIO82_GPIO, /* RESET */
|
||||
GPIO99_GPIO, /* TC_MM_EN */
|
||||
GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */
|
||||
GPIO57_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */
|
||||
GPIO13_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI */
|
||||
GPIO3_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI2 */
|
||||
GPIO82_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */
|
||||
GPIO99_GPIO | MFP_LPM_DRIVE_HIGH, /* TC_MM_EN */
|
||||
|
||||
/* sound */
|
||||
GPIO52_SSP3_SCLK,
|
||||
|
@ -199,21 +199,21 @@ static unsigned long gen1_pin_config[] __initdata = {
|
|||
defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6)
|
||||
static unsigned long gen2_pin_config[] __initdata = {
|
||||
/* flip / lockswitch */
|
||||
GPIO15_GPIO,
|
||||
GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH,
|
||||
|
||||
/* EOC */
|
||||
GPIO10_GPIO,
|
||||
GPIO10_GPIO | WAKEUP_ON_EDGE_RISE,
|
||||
|
||||
/* bluetooth (bcm2045) */
|
||||
GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */
|
||||
GPIO13_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */
|
||||
GPIO37_GPIO, /* RESET */
|
||||
GPIO57_GPIO, /* WAKEUP */
|
||||
|
||||
/* Neptune handshake */
|
||||
GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */
|
||||
GPIO96_GPIO, /* AP_RDY */
|
||||
GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */
|
||||
GPIO116_GPIO, /* RESET */
|
||||
GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */
|
||||
GPIO96_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */
|
||||
GPIO3_GPIO | WAKEUP_ON_EDGE_FALL, /* WDI */
|
||||
GPIO116_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */
|
||||
GPIO41_GPIO, /* BP_FLASH */
|
||||
|
||||
/* sound */
|
||||
|
|
|
@ -13,8 +13,9 @@ extern void clear_reset_status(unsigned int mask);
|
|||
/**
|
||||
* init_gpio_reset() - register GPIO as reset generator
|
||||
* @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 */
|
||||
|
|
|
@ -322,6 +322,7 @@ static inline void pxa27x_mfp_init(void) {}
|
|||
#ifdef CONFIG_PM
|
||||
static unsigned long saved_gafr[2][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)
|
||||
{
|
||||
|
@ -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[1][i] = GAFR_U(i);
|
||||
saved_gpdr[i] = GPDR(i * 32);
|
||||
saved_pgsr[i] = PGSR(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_U(i) = saved_gafr[1][i];
|
||||
GPDR(i * 32) = saved_gpdr[i];
|
||||
PGSR(i) = saved_pgsr[i];
|
||||
}
|
||||
PSSR = PSSR_RDH | PSSR_PH;
|
||||
return 0;
|
||||
|
@ -374,6 +377,9 @@ static int __init pxa2xx_mfp_init(void)
|
|||
if (cpu_is_pxa27x())
|
||||
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 */
|
||||
for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++)
|
||||
gpdr_lpm[i] = GPDR(i * 32);
|
||||
|
|
|
@ -62,6 +62,8 @@ static unsigned long palmld_pin_config[] __initdata = {
|
|||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
GPIO89_AC97_SYSCLK,
|
||||
GPIO95_AC97_nRESET,
|
||||
|
||||
/* IrDA */
|
||||
GPIO108_GPIO, /* ir disable */
|
||||
|
|
|
@ -64,6 +64,7 @@ static unsigned long palmt5_pin_config[] __initdata = {
|
|||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
GPIO89_AC97_SYSCLK,
|
||||
GPIO95_AC97_nRESET,
|
||||
|
||||
/* IrDA */
|
||||
|
|
|
@ -65,6 +65,7 @@ static unsigned long palmtx_pin_config[] __initdata = {
|
|||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
GPIO89_AC97_SYSCLK,
|
||||
GPIO95_AC97_nRESET,
|
||||
|
||||
/* IrDA */
|
||||
|
|
|
@ -20,7 +20,7 @@ static void do_hw_reset(void);
|
|||
|
||||
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;
|
||||
|
||||
|
@ -31,7 +31,7 @@ int init_gpio_reset(int gpio, int output)
|
|||
}
|
||||
|
||||
if (output)
|
||||
rc = gpio_direction_output(gpio, 0);
|
||||
rc = gpio_direction_output(gpio, level);
|
||||
else
|
||||
rc = gpio_direction_input(gpio);
|
||||
if (rc) {
|
||||
|
|
|
@ -531,9 +531,15 @@ static int spitz_ohci_init(struct device *dev)
|
|||
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 = {
|
||||
.port_mode = PMM_NPS_MODE,
|
||||
.init = spitz_ohci_init,
|
||||
.exit = spitz_ohci_exit,
|
||||
.flags = ENABLE_PORT_ALL | NO_OC_PROTECTION,
|
||||
.power_budget = 150,
|
||||
};
|
||||
|
@ -731,7 +737,7 @@ static void spitz_restart(char mode, const char *cmd)
|
|||
|
||||
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;
|
||||
arm_pm_restart = spitz_restart;
|
||||
|
||||
|
|
|
@ -897,7 +897,7 @@ static void __init tosa_init(void)
|
|||
gpio_set_wake(MFP_PIN_GPIO1, 1);
|
||||
/* 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;
|
||||
arm_pm_restart = tosa_restart;
|
||||
|
|
|
@ -15,10 +15,9 @@
|
|||
#include <linux/spinlock.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
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_output[BITS_TO_LONGS(GPIO_MAX)];
|
||||
|
||||
|
@ -46,82 +45,54 @@ static void __set_level(unsigned pin, int high)
|
|||
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.
|
||||
*/
|
||||
int gpio_direction_input(unsigned pin)
|
||||
static int orion_gpio_direction_input(struct gpio_chip *chip, unsigned pin)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid_input)) {
|
||||
pr_debug("%s: invalid GPIO %d\n", __func__, pin);
|
||||
if (!orion_gpio_is_valid(pin, GPIO_INPUT_OK))
|
||||
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] = "?";
|
||||
|
||||
/*
|
||||
* Configure GPIO direction.
|
||||
*/
|
||||
/* Configure GPIO direction. */
|
||||
__set_direction(pin, 1);
|
||||
|
||||
spin_unlock_irqrestore(&gpio_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(gpio_direction_input);
|
||||
|
||||
int gpio_direction_output(unsigned pin, int value)
|
||||
{
|
||||
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)
|
||||
static int orion_gpio_get_value(struct gpio_chip *chip, unsigned pin)
|
||||
{
|
||||
int val;
|
||||
|
||||
|
@ -132,83 +103,75 @@ int gpio_get_value(unsigned pin)
|
|||
|
||||
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;
|
||||
u32 u;
|
||||
|
||||
if (!orion_gpio_is_valid(pin, GPIO_OUTPUT_OK))
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_irqsave(&gpio_lock, flags);
|
||||
|
||||
/*
|
||||
* Disable blinking.
|
||||
*/
|
||||
u = readl(GPIO_BLINK_EN(pin));
|
||||
u &= ~(1 << (pin & 31));
|
||||
writel(u, GPIO_BLINK_EN(pin));
|
||||
/* Disable blinking. */
|
||||
__set_blinking(pin, 0);
|
||||
|
||||
/*
|
||||
* 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);
|
||||
|
||||
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;
|
||||
int ret;
|
||||
|
||||
if (pin >= GPIO_MAX ||
|
||||
!(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;
|
||||
if (orion_gpio_is_valid(pin, GPIO_INPUT_OK) ||
|
||||
orion_gpio_is_valid(pin, GPIO_OUTPUT_OK))
|
||||
return 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
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 ||
|
||||
!(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;
|
||||
gpiochip_add(&orion_gpiochip);
|
||||
}
|
||||
EXPORT_SYMBOL(gpio_free);
|
||||
|
||||
|
||||
/*
|
||||
* Orion-specific GPIO API extensions.
|
||||
*/
|
||||
void __init orion_gpio_set_unused(unsigned pin)
|
||||
{
|
||||
/*
|
||||
* Configure as output, drive low.
|
||||
*/
|
||||
/* Configure as output, drive low. */
|
||||
__set_level(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)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 u;
|
||||
|
||||
spin_lock_irqsave(&gpio_lock, flags);
|
||||
|
||||
/*
|
||||
* Set output value to zero.
|
||||
*/
|
||||
/* Set output value to zero. */
|
||||
__set_level(pin, 0);
|
||||
|
||||
u = readl(GPIO_BLINK_EN(pin));
|
||||
if (blink)
|
||||
u |= 1 << (pin & 31);
|
||||
else
|
||||
u &= ~(1 << (pin & 31));
|
||||
writel(u, GPIO_BLINK_EN(pin));
|
||||
/* Set blinking. */
|
||||
__set_blinking(pin, blink);
|
||||
|
||||
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 = {
|
||||
.name = "orion_gpio",
|
||||
.name = "orion_gpio_irq",
|
||||
.ack = gpio_irq_ack,
|
||||
.mask = gpio_irq_mask,
|
||||
.unmask = gpio_irq_unmask,
|
||||
|
|
|
@ -14,12 +14,9 @@
|
|||
/*
|
||||
* GENERIC_GPIO primitives.
|
||||
*/
|
||||
int gpio_request(unsigned pin, const char *label);
|
||||
void gpio_free(unsigned pin);
|
||||
int gpio_direction_input(unsigned pin);
|
||||
int gpio_direction_output(unsigned pin, int value);
|
||||
int gpio_get_value(unsigned pin);
|
||||
void gpio_set_value(unsigned pin, int value);
|
||||
#define gpio_get_value __gpio_get_value
|
||||
#define gpio_set_value __gpio_set_value
|
||||
#define gpio_cansleep __gpio_cansleep
|
||||
|
||||
/*
|
||||
* 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_blink(unsigned pin, int blink);
|
||||
|
||||
#define GPIO_BIDI_OK (1 << 0)
|
||||
#define GPIO_INPUT_OK (1 << 1)
|
||||
#define GPIO_OUTPUT_OK (1 << 2)
|
||||
#define GPIO_INPUT_OK (1 << 0)
|
||||
#define GPIO_OUTPUT_OK (1 << 1)
|
||||
void orion_gpio_set_valid(unsigned pin, int mode);
|
||||
|
||||
/* Initialize gpiolib. */
|
||||
void __init orion_gpio_init(void);
|
||||
|
||||
/*
|
||||
* 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
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#ifndef __PLAT_ORION5X_WDT_H
|
||||
#define __PLAT_ORION5X_WDT_H
|
||||
#ifndef __PLAT_ORION_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 */
|
||||
};
|
||||
|
|
@ -12,11 +12,15 @@
|
|||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/cnt32_to_63.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/clockchips.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <mach/bridge-regs.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
/*
|
||||
* Number of timer ticks per jiffy.
|
||||
|
@ -38,6 +42,56 @@ static u32 ticks_per_jiffy;
|
|||
#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.
|
||||
*/
|
||||
|
@ -176,6 +230,10 @@ void __init orion_time_init(unsigned int irq, unsigned int tclk)
|
|||
|
||||
ticks_per_jiffy = (tclk + HZ/2) / HZ;
|
||||
|
||||
/*
|
||||
* Set scale and timer for sched_clock
|
||||
*/
|
||||
setup_sched_clock(tclk);
|
||||
|
||||
/*
|
||||
* 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);
|
||||
clocksource_register(&orion_clksrc);
|
||||
|
||||
|
||||
/*
|
||||
* Setup clockevent timer (interrupt-driven.)
|
||||
*/
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#
|
||||
# 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
|
||||
#
|
||||
|
@ -916,7 +916,7 @@ nxdb500 MACH_NXDB500 NXDB500 905
|
|||
apf9328 MACH_APF9328 APF9328 906
|
||||
omap_wipoq MACH_OMAP_WIPOQ OMAP_WIPOQ 907
|
||||
omap_twip MACH_OMAP_TWIP OMAP_TWIP 908
|
||||
palmt650 MACH_PALMT650 PALMT650 909
|
||||
treo650 MACH_TREO650 TREO650 909
|
||||
acumen MACH_ACUMEN ACUMEN 910
|
||||
xp100 MACH_XP100 XP100 911
|
||||
fs2410 MACH_FS2410 FS2410 912
|
||||
|
@ -1232,7 +1232,7 @@ ql202b MACH_QL202B QL202B 1226
|
|||
vpac270 MACH_VPAC270 VPAC270 1227
|
||||
rd129 MACH_RD129 RD129 1228
|
||||
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
|
||||
zylonite MACH_ZYLONITE ZYLONITE 1233
|
||||
gene1270 MACH_GENE1270 GENE1270 1234
|
||||
|
@ -1418,10 +1418,10 @@ looxc550 MACH_LOOXC550 LOOXC550 1417
|
|||
cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418
|
||||
app3xx MACH_APP3XX APP3XX 1419
|
||||
sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420
|
||||
palmtreo700p MACH_PALMTREO700P PALMTREO700P 1421
|
||||
palmtreo700w MACH_PALMTREO700W PALMTREO700W 1422
|
||||
palmtreo750 MACH_PALMTREO750 PALMTREO750 1423
|
||||
palmtreo755p MACH_PALMTREO755P PALMTREO755P 1424
|
||||
treo700p MACH_TREO700P TREO700P 1421
|
||||
treo700w MACH_TREO700W TREO700W 1422
|
||||
treo750 MACH_TREO750 TREO750 1423
|
||||
treo755p MACH_TREO755P TREO755P 1424
|
||||
ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425
|
||||
sarge MACH_SARGE SARGE 1426
|
||||
a696 MACH_A696 A696 1427
|
||||
|
@ -1721,7 +1721,7 @@ sapphire MACH_SAPPHIRE SAPPHIRE 1729
|
|||
csb637xo MACH_CSB637XO CSB637XO 1730
|
||||
evisiong MACH_EVISIONG EVISIONG 1731
|
||||
stmp37xx MACH_STMP37XX STMP37XX 1732
|
||||
stmp378x MACH_STMP38XX STMP38XX 1733
|
||||
stmp378x MACH_STMP378X STMP378X 1733
|
||||
tnt MACH_TNT TNT 1734
|
||||
tbxt MACH_TBXT TBXT 1735
|
||||
playmate MACH_PLAYMATE PLAYMATE 1736
|
||||
|
@ -1817,7 +1817,7 @@ smdkc100 MACH_SMDKC100 SMDKC100 1826
|
|||
tavorevb MACH_TAVOREVB TAVOREVB 1827
|
||||
saar MACH_SAAR SAAR 1828
|
||||
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
|
||||
hit_b0 MACH_HIT_B0 HIT_B0 1832
|
||||
adx_rmu MACH_ADX_RMU ADX_RMU 1833
|
||||
|
@ -2132,3 +2132,116 @@ apollo MACH_APOLLO APOLLO 2141
|
|||
at91cap9stk MACH_AT91CAP9STK AT91CAP9STK 2142
|
||||
spc300 MACH_SPC300 SPC300 2143
|
||||
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>
|
||||
|
||||
#define flat_stack_align(sp) /* nothing needed */
|
||||
#define flat_argvp_envp_on_stack() 0
|
||||
#define flat_old_ram_flag(flags) (flags)
|
||||
|
||||
|
|
|
@ -378,8 +378,10 @@
|
|||
#define __NR_dup3 363
|
||||
#define __NR_pipe2 364
|
||||
#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
|
||||
|
||||
/* 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
|
||||
#include <asm/string.h>
|
||||
#undef strncmp
|
||||
|
||||
#include <linux/module.h>
|
||||
#undef strncmp
|
||||
|
||||
int strncmp(const char *cs, const char *ct, size_t count)
|
||||
{
|
||||
|
|
|
@ -1581,6 +1581,8 @@ ENTRY(_sys_call_table)
|
|||
.long _sys_dup3
|
||||
.long _sys_pipe2
|
||||
.long _sys_inotify_init1 /* 365 */
|
||||
.long _sys_preadv
|
||||
.long _sys_pwritev
|
||||
|
||||
.rept NR_syscalls-(.-_sys_call_table)/4
|
||||
.long _sys_ni_syscall
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#ifndef __H8300_FLAT_H__
|
||||
#define __H8300_FLAT_H__
|
||||
|
||||
#define flat_stack_align(sp) /* nothing needed */
|
||||
#define flat_argvp_envp_on_stack() 1
|
||||
#define flat_old_ram_flag(flags) 1
|
||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#ifndef __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_old_ram_flag(flags) (flags)
|
||||
#define flat_set_persistent(relval, p) 0
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#ifndef __M68KNOMMU_FLAT_H__
|
||||
#define __M68KNOMMU_FLAT_H__
|
||||
|
||||
#define flat_stack_align(sp) /* nothing needed */
|
||||
#define flat_argvp_envp_on_stack() 1
|
||||
#define flat_old_ram_flag(flags) (flags)
|
||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||
|
|
|
@ -868,6 +868,18 @@ config TASK_SIZE
|
|||
default "0x80000000" if PPC_PREP || PPC_8xx
|
||||
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
|
||||
bool "Pinned Kernel TLBs (860 ONLY)"
|
||||
depends on ADVANCED_OPTIONS && 8xx
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.28-rc3
|
||||
# Tue Nov 11 19:36:51 2008
|
||||
# Linux kernel version: 2.6.30-rc7
|
||||
# Mon May 25 14:53:25 2009
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -14,6 +14,7 @@ CONFIG_6xx=y
|
|||
# CONFIG_40x is not set
|
||||
# CONFIG_44x is not set
|
||||
# CONFIG_E200 is not set
|
||||
CONFIG_PPC_BOOK3S=y
|
||||
CONFIG_PPC_FPU=y
|
||||
CONFIG_ALTIVEC=y
|
||||
CONFIG_PPC_STD_MMU=y
|
||||
|
@ -43,7 +44,7 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y
|
|||
CONFIG_PPC=y
|
||||
CONFIG_EARLY_PRINTK=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_PPC_OF=y
|
||||
CONFIG_OF=y
|
||||
|
@ -52,12 +53,14 @@ CONFIG_OF=y
|
|||
CONFIG_AUDIT_ARCH=y
|
||||
CONFIG_GENERIC_BUG=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_DTC=y
|
||||
# CONFIG_DEFAULT_UIMAGE is not set
|
||||
CONFIG_HIBERNATE_32=y
|
||||
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
# CONFIG_PPC_DCR_NATIVE is not set
|
||||
# CONFIG_PPC_DCR_MMIO is not set
|
||||
CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
|
@ -72,14 +75,24 @@ CONFIG_SWAP=y
|
|||
CONFIG_SYSVIPC=y
|
||||
CONFIG_SYSVIPC_SYSCTL=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_POSIX_MQUEUE_SYSCTL=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS 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_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_CGROUPS is not set
|
||||
# CONFIG_GROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
# CONFIG_RELAY is not set
|
||||
|
@ -88,23 +101,27 @@ CONFIG_NAMESPACES=y
|
|||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_USER_NS is not set
|
||||
# CONFIG_PID_NS is not set
|
||||
# CONFIG_NET_NS is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_RD_GZIP=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_LZMA=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SIGNALFD=y
|
||||
CONFIG_TIMERFD=y
|
||||
|
@ -114,10 +131,12 @@ CONFIG_AIO=y
|
|||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_PCI_QUIRKS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
# CONFIG_SLAB is not set
|
||||
CONFIG_SLUB=y
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_TRACEPOINTS=y
|
||||
# CONFIG_MARKERS is not set
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
|
@ -127,10 +146,10 @@ CONFIG_HAVE_IOREMAP_PROT=y
|
|||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_HAVE_KRETPROBES=y
|
||||
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
||||
# CONFIG_SLOW_WORK is not set
|
||||
# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
|
||||
CONFIG_SLABINFO=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
CONFIG_MODULES=y
|
||||
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||
|
@ -138,11 +157,8 @@ CONFIG_MODULE_UNLOAD=y
|
|||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
CONFIG_BLOCK=y
|
||||
CONFIG_LBD=y
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
CONFIG_LSF=y
|
||||
CONFIG_BLK_DEV_BSG=y
|
||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||
|
||||
|
@ -158,14 +174,11 @@ CONFIG_DEFAULT_AS=y
|
|||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
CONFIG_FREEZER=y
|
||||
|
||||
#
|
||||
# Platform support
|
||||
#
|
||||
CONFIG_PPC_MULTIPLATFORM=y
|
||||
CONFIG_CLASSIC32=y
|
||||
# CONFIG_PPC_CHRP is not set
|
||||
# CONFIG_MPC5121_ADS 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_86xx is not set
|
||||
# CONFIG_EMBEDDED6xx is not set
|
||||
# CONFIG_AMIGAONE is not set
|
||||
CONFIG_PPC_NATIVE=y
|
||||
CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
|
||||
# CONFIG_IPIC is not set
|
||||
CONFIG_MPIC=y
|
||||
# CONFIG_MPIC_WEIRD is not set
|
||||
|
@ -212,11 +227,12 @@ CONFIG_CPU_FREQ_PMAC=y
|
|||
CONFIG_PPC601_SYNC_FIX=y
|
||||
# CONFIG_TAU is not set
|
||||
# CONFIG_FSL_ULI1575 is not set
|
||||
# CONFIG_SIMPLE_GPIO is not set
|
||||
|
||||
#
|
||||
# Kernel options
|
||||
#
|
||||
# CONFIG_HIGHMEM is not set
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_TICK_ONESHOT=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
@ -239,6 +255,7 @@ CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
|||
CONFIG_ARCH_HAS_WALK_MEMORY=y
|
||||
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
|
||||
# CONFIG_KEXEC is not set
|
||||
# CONFIG_CRASH_DUMP is not set
|
||||
CONFIG_ARCH_FLATMEM_ENABLE=y
|
||||
CONFIG_ARCH_POPULATES_NODE_MAP=y
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
|
@ -250,12 +267,17 @@ CONFIG_FLAT_NODE_MEM_MAP=y
|
|||
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_MIGRATION is not set
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||
CONFIG_ZONE_DMA_FLAG=1
|
||||
CONFIG_BOUNCE=y
|
||||
CONFIG_VIRT_TO_BUS=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_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
@ -288,6 +310,8 @@ CONFIG_ARCH_SUPPORTS_MSI=y
|
|||
# CONFIG_PCI_MSI is not set
|
||||
# CONFIG_PCI_LEGACY 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_PCMCIA_DEBUG is not set
|
||||
CONFIG_PCMCIA=m
|
||||
|
@ -397,6 +421,8 @@ CONFIG_NETFILTER_XTABLES=m
|
|||
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
|
||||
# CONFIG_NETFILTER_XT_TARGET_CONNMARK 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_NFLOG=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_TCPMSS=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_CONNBYTES is not set
|
||||
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_HASHLIMIT is not set
|
||||
CONFIG_NETFILTER_XT_MATCH_HELPER=m
|
||||
CONFIG_NETFILTER_XT_MATCH_HL=m
|
||||
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
|
||||
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
|
||||
|
@ -478,17 +506,15 @@ CONFIG_IP_NF_ARPFILTER=m
|
|||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
CONFIG_IP_DCCP=m
|
||||
CONFIG_INET_DCCP_DIAG=m
|
||||
CONFIG_IP_DCCP_ACKVEC=y
|
||||
|
||||
#
|
||||
# DCCP CCIDs Configuration (EXPERIMENTAL)
|
||||
#
|
||||
CONFIG_IP_DCCP_CCID2=m
|
||||
# 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_RTO=100
|
||||
CONFIG_IP_DCCP_TFRC_LIB=m
|
||||
CONFIG_IP_DCCP_TFRC_LIB=y
|
||||
|
||||
#
|
||||
# DCCP Kernel Hacking
|
||||
|
@ -508,13 +534,16 @@ CONFIG_IP_DCCP_TFRC_LIB=m
|
|||
# CONFIG_LAPB is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
# CONFIG_PHONET is not set
|
||||
# CONFIG_NET_SCHED is not set
|
||||
CONFIG_NET_CLS_ROUTE=y
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_NET_DROP_MONITOR is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_CAN is not set
|
||||
CONFIG_IRDA=m
|
||||
|
@ -577,8 +606,6 @@ CONFIG_BT_HIDP=m
|
|||
#
|
||||
# Bluetooth device drivers
|
||||
#
|
||||
CONFIG_BT_HCIUSB=m
|
||||
# CONFIG_BT_HCIUSB_SCO is not set
|
||||
# CONFIG_BT_HCIBTUSB is not set
|
||||
# CONFIG_BT_HCIUART is not set
|
||||
CONFIG_BT_HCIBCM203X=m
|
||||
|
@ -590,31 +617,27 @@ CONFIG_BT_HCIBFUSB=m
|
|||
# CONFIG_BT_HCIBTUART is not set
|
||||
# CONFIG_BT_HCIVHCI is not set
|
||||
# CONFIG_AF_RXRPC is not set
|
||||
# CONFIG_PHONET is not set
|
||||
CONFIG_WIRELESS=y
|
||||
CONFIG_CFG80211=m
|
||||
CONFIG_NL80211=y
|
||||
# CONFIG_CFG80211_REG_DEBUG is not set
|
||||
CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||
CONFIG_WIRELESS_EXT=y
|
||||
CONFIG_WIRELESS_EXT_SYSFS=y
|
||||
# CONFIG_LIB80211 is not set
|
||||
CONFIG_MAC80211=m
|
||||
|
||||
#
|
||||
# Rate control algorithm selection
|
||||
#
|
||||
CONFIG_MAC80211_RC_PID=y
|
||||
# CONFIG_MAC80211_RC_MINSTREL is not set
|
||||
CONFIG_MAC80211_RC_DEFAULT_PID=y
|
||||
# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
|
||||
CONFIG_MAC80211_RC_DEFAULT="pid"
|
||||
CONFIG_MAC80211_RC_MINSTREL=y
|
||||
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
|
||||
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
|
||||
CONFIG_MAC80211_RC_DEFAULT="minstrel"
|
||||
# CONFIG_MAC80211_MESH is not set
|
||||
CONFIG_MAC80211_LEDS=y
|
||||
# CONFIG_MAC80211_DEBUGFS is not set
|
||||
# CONFIG_MAC80211_DEBUG_MENU is not set
|
||||
CONFIG_IEEE80211=m
|
||||
# CONFIG_IEEE80211_DEBUG is not set
|
||||
CONFIG_IEEE80211_CRYPT_WEP=m
|
||||
CONFIG_IEEE80211_CRYPT_CCMP=m
|
||||
CONFIG_IEEE80211_CRYPT_TKIP=m
|
||||
# CONFIG_WIMAX is not set
|
||||
# CONFIG_RFKILL 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_MISC_DEVICES=y
|
||||
# CONFIG_PHANTOM is not set
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
# CONFIG_TIFM_CORE is not set
|
||||
# CONFIG_ICS932S401 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES 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_IDE=y
|
||||
|
||||
#
|
||||
# Please see Documentation/ide/ide.txt for help/info on IDE drives
|
||||
#
|
||||
CONFIG_IDE_XFER_MODE=y
|
||||
CONFIG_IDE_TIMINGS=y
|
||||
CONFIG_IDE_ATAPI=y
|
||||
# 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_VERBOSE_ERRORS=y
|
||||
# CONFIG_BLK_DEV_IDETAPE is not set
|
||||
CONFIG_BLK_DEV_IDESCSI=y
|
||||
# CONFIG_IDE_TASK_IOCTL is not set
|
||||
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_SC1200 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_IT821X 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_IDE_PMAC=y
|
||||
CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
|
||||
CONFIG_BLK_DEV_IDEDMA_PMAC=y
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
|
||||
#
|
||||
|
@ -772,6 +804,7 @@ CONFIG_SCSI_FC_ATTRS=y
|
|||
# CONFIG_SCSI_SRP_ATTRS is not set
|
||||
CONFIG_SCSI_LOWLEVEL=y
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_SCSI_CXGB3_ISCSI is not set
|
||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||
# CONFIG_SCSI_3W_9XXX 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_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_MPT2SAS is not set
|
||||
# CONFIG_SCSI_HPTIOP 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_EATA 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_LOWLEVEL_PCMCIA is not set
|
||||
# CONFIG_SCSI_DH is not set
|
||||
# CONFIG_SCSI_OSD_INITIATOR is not set
|
||||
# CONFIG_ATA is not set
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_MD=m
|
||||
|
@ -881,6 +919,7 @@ CONFIG_THERM_ADT746X=m
|
|||
# CONFIG_ANSLCD is not set
|
||||
CONFIG_PMAC_RACKMETER=m
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||
CONFIG_DUMMY=m
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_MACVLAN is not set
|
||||
|
@ -898,6 +937,8 @@ CONFIG_BMAC=y
|
|||
CONFIG_SUNGEM=y
|
||||
# CONFIG_CASSINI 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_HP100 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_B44 is not set
|
||||
# CONFIG_FORCEDETH is not set
|
||||
# CONFIG_EEPRO100 is not set
|
||||
# CONFIG_E100 is not set
|
||||
# CONFIG_FEALNX is not set
|
||||
# CONFIG_NATSEMI is not set
|
||||
|
@ -923,6 +963,7 @@ CONFIG_PCNET32=y
|
|||
# CONFIG_R6040 is not set
|
||||
# CONFIG_SIS900 is not set
|
||||
# CONFIG_EPIC100 is not set
|
||||
# CONFIG_SMSC9420 is not set
|
||||
# CONFIG_SUNDANCE is not set
|
||||
# CONFIG_TLAN is not set
|
||||
# CONFIG_VIA_RHINE is not set
|
||||
|
@ -935,6 +976,7 @@ CONFIG_NETDEV_1000=y
|
|||
# CONFIG_E1000E is not set
|
||||
# CONFIG_IP1000 is not set
|
||||
# CONFIG_IGB is not set
|
||||
# CONFIG_IGBVF is not set
|
||||
# CONFIG_NS83820 is not set
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
|
@ -945,18 +987,20 @@ CONFIG_NETDEV_1000=y
|
|||
# CONFIG_VIA_VELOCITY is not set
|
||||
# CONFIG_TIGON3 is not set
|
||||
# CONFIG_BNX2 is not set
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
# CONFIG_QLA3XXX is not set
|
||||
# CONFIG_ATL1 is not set
|
||||
# CONFIG_ATL1E is not set
|
||||
# CONFIG_ATL1C is not set
|
||||
# CONFIG_JME is not set
|
||||
CONFIG_NETDEV_10000=y
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
CONFIG_CHELSIO_T3_DEPENDS=y
|
||||
# CONFIG_CHELSIO_T3 is not set
|
||||
# CONFIG_ENIC is not set
|
||||
# CONFIG_IXGBE is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
# CONFIG_VXGE is not set
|
||||
# CONFIG_MYRI10GE is not set
|
||||
# CONFIG_NETXEN_NIC is not set
|
||||
# CONFIG_NIU is not set
|
||||
|
@ -966,6 +1010,7 @@ CONFIG_NETDEV_10000=y
|
|||
# CONFIG_BNX2X is not set
|
||||
# CONFIG_QLGE is not set
|
||||
# CONFIG_SFC is not set
|
||||
# CONFIG_BE2NET is not set
|
||||
# CONFIG_TR is not set
|
||||
|
||||
#
|
||||
|
@ -974,20 +1019,11 @@ CONFIG_NETDEV_10000=y
|
|||
# CONFIG_WLAN_PRE80211 is not set
|
||||
CONFIG_WLAN_80211=y
|
||||
# CONFIG_PCMCIA_RAYCS is not set
|
||||
# CONFIG_IPW2100 is not set
|
||||
# CONFIG_IPW2200 is not set
|
||||
# CONFIG_LIBERTAS is not set
|
||||
# CONFIG_LIBERTAS_THINFIRM 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_AT76C50X_USB is not set
|
||||
# CONFIG_AIRO_CS is not set
|
||||
# CONFIG_PCMCIA_WL3501 is not set
|
||||
CONFIG_PRISM54=m
|
||||
|
@ -997,15 +1033,17 @@ CONFIG_PRISM54=m
|
|||
# CONFIG_RTL8187 is not set
|
||||
# CONFIG_ADM8211 is not set
|
||||
# CONFIG_MAC80211_HWSIM is not set
|
||||
# CONFIG_MWL8K is not set
|
||||
CONFIG_P54_COMMON=m
|
||||
# CONFIG_P54_USB is not set
|
||||
# CONFIG_P54_PCI is not set
|
||||
CONFIG_P54_LEDS=y
|
||||
# CONFIG_ATH5K is not set
|
||||
# CONFIG_ATH9K is not set
|
||||
# CONFIG_IWLCORE is not set
|
||||
# CONFIG_IWLWIFI_LEDS is not set
|
||||
# CONFIG_IWLAGN is not set
|
||||
# CONFIG_IWL3945 is not set
|
||||
# CONFIG_AR9170_USB is not set
|
||||
# CONFIG_IPW2100 is not set
|
||||
# CONFIG_IPW2200 is not set
|
||||
# CONFIG_IWLWIFI is not set
|
||||
# CONFIG_HOSTAP is not set
|
||||
CONFIG_B43=m
|
||||
CONFIG_B43_PCI_AUTOSELECT=y
|
||||
|
@ -1025,6 +1063,19 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
|||
# CONFIG_B43LEGACY_PIO_MODE is not set
|
||||
# CONFIG_ZD1211RW 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
|
||||
|
@ -1036,6 +1087,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
|||
CONFIG_USB_USBNET=m
|
||||
CONFIG_USB_NET_AX8817X=m
|
||||
CONFIG_USB_NET_CDCETHER=m
|
||||
# CONFIG_USB_NET_CDC_EEM is not set
|
||||
# CONFIG_USB_NET_DM9601 is not set
|
||||
# CONFIG_USB_NET_SMSC95XX is not set
|
||||
# CONFIG_USB_NET_GL620A is not set
|
||||
|
@ -1099,7 +1151,7 @@ CONFIG_INPUT_KEYBOARD=y
|
|||
CONFIG_INPUT_MOUSE=y
|
||||
# CONFIG_MOUSE_PS2 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_VSXXXAA 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_OF_PLATFORM is not set
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
# CONFIG_HVC_UDBG is not set
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
CONFIG_HW_RANDOM=m
|
||||
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
|
@ -1232,12 +1287,9 @@ CONFIG_I2C_POWERMAC=y
|
|||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_EEPROM_AT24 is not set
|
||||
# CONFIG_EEPROM_LEGACY is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_PCF8575 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_SENSORS_TSL2550 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_HWMON is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
||||
#
|
||||
# Sonics Silicon Backplane
|
||||
#
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
CONFIG_SSB=m
|
||||
CONFIG_SSB_SPROM=y
|
||||
CONFIG_SSB_PCIHOST_POSSIBLE=y
|
||||
|
@ -1281,18 +1333,13 @@ CONFIG_SSB_DRIVER_PCICORE=y
|
|||
# CONFIG_MFD_CORE is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_TWL4030_CORE is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_MFD_WM8400 is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
|
||||
#
|
||||
# Voltage and Current regulators
|
||||
#
|
||||
# CONFIG_MFD_PCF50633 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
|
||||
|
@ -1390,6 +1437,7 @@ CONFIG_FB_ATY_BACKLIGHT=y
|
|||
# CONFIG_FB_KYRO is not set
|
||||
CONFIG_FB_3DFX=y
|
||||
# CONFIG_FB_3DFX_ACCEL is not set
|
||||
CONFIG_FB_3DFX_I2C=y
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_VT8623 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_VIRTUAL 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_LCD_CLASS_DEVICE=m
|
||||
# CONFIG_LCD_ILI9320 is not set
|
||||
# CONFIG_LCD_PLATFORM is not set
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
# CONFIG_BACKLIGHT_CORGI is not set
|
||||
CONFIG_BACKLIGHT_GENERIC=y
|
||||
|
||||
#
|
||||
# Display device support
|
||||
|
@ -1444,11 +1494,13 @@ CONFIG_SND_MIXER_OSS=m
|
|||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_PCM_OSS_PLUGINS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
# CONFIG_SND_HRTIMER is not set
|
||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||
CONFIG_SND_SUPPORT_OLD_API=y
|
||||
CONFIG_SND_VERBOSE_PROCFS=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
CONFIG_SND_VMASTER=y
|
||||
CONFIG_SND_DRIVERS=y
|
||||
CONFIG_SND_DUMMY=m
|
||||
# CONFIG_SND_VIRMIDI is not set
|
||||
|
@ -1486,6 +1538,8 @@ CONFIG_SND_PCI=y
|
|||
# CONFIG_SND_INDIGO is not set
|
||||
# CONFIG_SND_INDIGOIO 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_EMU10K1X is not set
|
||||
# CONFIG_SND_ENS1370 is not set
|
||||
|
@ -1551,28 +1605,31 @@ CONFIG_USB_HID=y
|
|||
#
|
||||
# Special HID drivers
|
||||
#
|
||||
CONFIG_HID_COMPAT=y
|
||||
CONFIG_HID_A4TECH=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_BELKIN=y
|
||||
CONFIG_HID_BRIGHT=y
|
||||
CONFIG_HID_CHERRY=y
|
||||
CONFIG_HID_CHICONY=y
|
||||
CONFIG_HID_CYPRESS=y
|
||||
CONFIG_HID_DELL=y
|
||||
# CONFIG_DRAGONRISE_FF is not set
|
||||
CONFIG_HID_EZKEY=y
|
||||
CONFIG_HID_KYE=y
|
||||
CONFIG_HID_GYRATION=y
|
||||
CONFIG_HID_KENSINGTON=y
|
||||
CONFIG_HID_LOGITECH=y
|
||||
# CONFIG_LOGITECH_FF is not set
|
||||
# CONFIG_LOGIRUMBLEPAD2_FF is not set
|
||||
CONFIG_HID_MICROSOFT=y
|
||||
CONFIG_HID_MONTEREY=y
|
||||
CONFIG_HID_NTRIG=y
|
||||
CONFIG_HID_PANTHERLORD=y
|
||||
# CONFIG_PANTHERLORD_FF is not set
|
||||
CONFIG_HID_PETALYNX=y
|
||||
CONFIG_HID_SAMSUNG=y
|
||||
CONFIG_HID_SONY=y
|
||||
CONFIG_HID_SUNPLUS=y
|
||||
# CONFIG_GREENASIA_FF is not set
|
||||
CONFIG_HID_TOPSEED=y
|
||||
# CONFIG_THRUSTMASTER_FF is not set
|
||||
# CONFIG_ZEROPLUS_FF is not set
|
||||
CONFIG_USB_SUPPORT=y
|
||||
|
@ -1603,6 +1660,7 @@ CONFIG_USB_EHCI_HCD=m
|
|||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
# CONFIG_USB_EHCI_TT_NEWSCHED 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_ISP1760_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
|
@ -1625,24 +1683,23 @@ CONFIG_USB_PRINTER=m
|
|||
# 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_DEBUG is not set
|
||||
# CONFIG_USB_STORAGE_DATAFAB is not set
|
||||
# CONFIG_USB_STORAGE_FREECOM 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_SDDR09 is not set
|
||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||
# CONFIG_USB_STORAGE_JUMPSHOT 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_CYPRESS_ATACB 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_WHITEHEAT 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_EMPEG 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_PL2303 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_HP4X 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_SYMBOL is not set
|
||||
# CONFIG_USB_SERIAL_TI is not set
|
||||
# CONFIG_USB_SERIAL_CYBERJACK is not set
|
||||
# CONFIG_USB_SERIAL_XIRCOM is not set
|
||||
# CONFIG_USB_SERIAL_OPTION is not set
|
||||
# CONFIG_USB_SERIAL_OMNINET is not set
|
||||
# CONFIG_USB_SERIAL_OPTICON 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_CYPRESS_CY7C63 is not set
|
||||
# CONFIG_USB_CYTHERM is not set
|
||||
# CONFIG_USB_PHIDGET is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_FTDI_ELAN is not set
|
||||
CONFIG_USB_APPLEDISPLAY=m
|
||||
|
@ -1738,6 +1798,11 @@ CONFIG_USB_APPLEDISPLAY=m
|
|||
# CONFIG_USB_ISIGHTFW is not set
|
||||
# CONFIG_USB_VST 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_MMC is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
|
@ -1748,7 +1813,9 @@ CONFIG_LEDS_CLASS=y
|
|||
# LED drivers
|
||||
#
|
||||
# CONFIG_LEDS_PCA9532 is not set
|
||||
# CONFIG_LEDS_LP5521 is not set
|
||||
# CONFIG_LEDS_PCA955X is not set
|
||||
# CONFIG_LEDS_BD2802 is not set
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
|
@ -1759,11 +1826,16 @@ CONFIG_LEDS_TRIGGER_IDE_DISK=y
|
|||
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
|
||||
# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
|
||||
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
|
||||
|
||||
#
|
||||
# iptables trigger is under Netfilter config (LED target)
|
||||
#
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_INFINIBAND is not set
|
||||
# CONFIG_EDAC is not set
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_UIO 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_XIP is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_EXT3_FS_XATTR=y
|
||||
CONFIG_EXT3_FS_POSIX_ACL=y
|
||||
# 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_SECURITY is not set
|
||||
CONFIG_JBD=y
|
||||
# CONFIG_JBD_DEBUG is not set
|
||||
CONFIG_JBD2=y
|
||||
# CONFIG_JBD2_DEBUG is not set
|
||||
CONFIG_FS_MBCACHE=y
|
||||
# CONFIG_REISERFS_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_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
|
@ -1800,6 +1876,11 @@ CONFIG_INOTIFY_USER=y
|
|||
CONFIG_AUTOFS4_FS=m
|
||||
CONFIG_FUSE_FS=m
|
||||
|
||||
#
|
||||
# Caches
|
||||
#
|
||||
# CONFIG_FSCACHE is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
|
@ -1831,10 +1912,7 @@ CONFIG_TMPFS=y
|
|||
# CONFIG_TMPFS_POSIX_ACL is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
#
|
||||
CONFIG_MISC_FILESYSTEMS=y
|
||||
# CONFIG_ADFS_FS is not set
|
||||
# CONFIG_AFFS_FS is not set
|
||||
CONFIG_HFS_FS=m
|
||||
|
@ -1843,6 +1921,7 @@ CONFIG_HFSPLUS_FS=m
|
|||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_SQUASHFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_MINIX_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_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
|
@ -1868,7 +1948,6 @@ CONFIG_NFS_ACL_SUPPORT=y
|
|||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
CONFIG_SUNRPC_GSS=y
|
||||
# CONFIG_SUNRPC_REGISTER_V4 is not set
|
||||
CONFIG_RPCSEC_GSS_KRB5=y
|
||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
CONFIG_SMB_FS=m
|
||||
|
@ -1940,11 +2019,13 @@ CONFIG_NLS_ISO8859_1=m
|
|||
# CONFIG_NLS_KOI8_U is not set
|
||||
CONFIG_NLS_UTF8=m
|
||||
# CONFIG_DLM is not set
|
||||
CONFIG_BINARY_PRINTF=y
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_BITREVERSE=y
|
||||
CONFIG_GENERIC_FIND_LAST_BIT=y
|
||||
CONFIG_CRC_CCITT=y
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRC_T10DIF=y
|
||||
|
@ -1954,15 +2035,18 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_DECOMPRESS_GZIP=y
|
||||
CONFIG_DECOMPRESS_BZIP2=y
|
||||
CONFIG_DECOMPRESS_LZMA=y
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
CONFIG_PLIST=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
||||
CONFIG_HAVE_LMB=y
|
||||
CONFIG_NLATTR=y
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
|
@ -1973,13 +2057,16 @@ CONFIG_ENABLE_MUST_CHECK=y
|
|||
CONFIG_FRAME_WARN=1024
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DEBUG_SHIRQ is not set
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
|
||||
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_SCHEDSTATS=y
|
||||
# CONFIG_TIMER_STATS is not set
|
||||
|
@ -1994,6 +2081,7 @@ CONFIG_SCHEDSTATS=y
|
|||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
CONFIG_STACKTRACE=y
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_HIGHMEM is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
|
@ -2001,6 +2089,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
|||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST 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_LATENCYTOP=y
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_NOP_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
|
||||
|
@ -2017,12 +2113,19 @@ CONFIG_HAVE_FUNCTION_TRACER=y
|
|||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||
# CONFIG_EVENT_TRACER is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
# CONFIG_TRACE_BRANCH_PROFILING 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_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
CONFIG_PRINT_STACK_DEPTH=64
|
||||
# CONFIG_DEBUG_STACKOVERFLOW is not set
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
# CONFIG_CODE_PATCHING_SELFTEST is not set
|
||||
|
@ -2033,6 +2136,7 @@ CONFIG_XMON_DEFAULT=y
|
|||
CONFIG_XMON_DISASSEMBLY=y
|
||||
CONFIG_DEBUGGER=y
|
||||
CONFIG_IRQSTACKS=y
|
||||
# CONFIG_VIRQ_DEBUG is not set
|
||||
# CONFIG_BDI_SWITCH is not set
|
||||
CONFIG_BOOTX_TEXT=y
|
||||
# CONFIG_PPC_EARLY_DEBUG is not set
|
||||
|
@ -2051,13 +2155,20 @@ CONFIG_CRYPTO=y
|
|||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
CONFIG_CRYPTO_ALGAPI=y
|
||||
CONFIG_CRYPTO_ALGAPI2=y
|
||||
CONFIG_CRYPTO_AEAD=y
|
||||
CONFIG_CRYPTO_AEAD2=y
|
||||
CONFIG_CRYPTO_BLKCIPHER=y
|
||||
CONFIG_CRYPTO_BLKCIPHER2=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_MANAGER2=y
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
CONFIG_CRYPTO_WORKQUEUE=y
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
CONFIG_CRYPTO_AUTHENC=y
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
|
@ -2127,6 +2238,7 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m
|
|||
# Compression
|
||||
#
|
||||
CONFIG_CRYPTO_DEFLATE=m
|
||||
# CONFIG_CRYPTO_ZLIB is not set
|
||||
# CONFIG_CRYPTO_LZO is not set
|
||||
|
||||
#
|
||||
|
|
|
@ -26,7 +26,9 @@
|
|||
* allocate the space "normally" and use the cache management functions
|
||||
* 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_sync(void *vaddr, size_t size, int direction);
|
||||
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.
|
||||
*/
|
||||
|
||||
#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_sync(addr, size, rw) ((void)0)
|
||||
#define __dma_sync_page(pg, off, sz, rw) ((void)0)
|
||||
|
|
|
@ -14,8 +14,6 @@
|
|||
#ifndef _ASM_FIXMAP_H
|
||||
#define _ASM_FIXMAP_H
|
||||
|
||||
extern unsigned long FIXADDR_TOP;
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/page.h>
|
||||
|
@ -24,6 +22,8 @@ extern unsigned long FIXADDR_TOP;
|
|||
#include <asm/kmap_types.h>
|
||||
#endif
|
||||
|
||||
#define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE))
|
||||
|
||||
/*
|
||||
* Here we define all the compile-time 'special' virtual
|
||||
* addresses. The point is to have a constant address at
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
extern unsigned long va_to_phys(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
|
||||
extern int icache_44x_need_flush;
|
||||
|
@ -55,9 +55,31 @@ extern int icache_44x_need_flush;
|
|||
#define pgd_ERROR(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
|
||||
* 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
|
||||
* any out-of-bounds memory accesses will hopefully be caught.
|
||||
* 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;
|
||||
#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)
|
||||
return NULL;
|
||||
*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
|
||||
obj-$(CONFIG_XMON) += sstep.o
|
||||
obj-$(CONFIG_KPROBES) += sstep.o
|
||||
obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o
|
||||
|
||||
ifeq ($(CONFIG_PPC64),y)
|
||||
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_HUGETLB_PAGE) += hugetlbpage.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);
|
||||
mapin_ram();
|
||||
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
ioremap_base = PKMAP_BASE;
|
||||
#else
|
||||
ioremap_base = 0xfe000000UL; /* for now, could be 0xfffff000 */
|
||||
#endif /* CONFIG_HIGHMEM */
|
||||
ioremap_bot = ioremap_base;
|
||||
/* Initialize early top-down ioremap allocator */
|
||||
ioremap_bot = IOREMAP_TOP;
|
||||
|
||||
/* Map in I/O resources */
|
||||
if (ppc_md.progress)
|
||||
|
|
|
@ -380,6 +380,23 @@ void __init mem_init(void)
|
|||
bsssize >> 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
/* Mark this mm has having no context anymore */
|
||||
mm->context.id = MMU_NO_CONTEXT;
|
||||
|
||||
/* Flush the TLB for that context */
|
||||
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 */
|
||||
__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 */
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#ifndef __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_old_ram_flag(flags) (flags)
|
||||
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
|
||||
|
|
|
@ -208,8 +208,9 @@ do { unsigned long new_flags = current_thread_info()->flags; \
|
|||
else \
|
||||
clear_thread_flag(TIF_ABI_PENDING); \
|
||||
/* flush_thread will update pgd cache */ \
|
||||
if (current->personality != PER_LINUX32) \
|
||||
set_personality(PER_LINUX); \
|
||||
if (personality(current->personality) != PER_LINUX32) \
|
||||
set_personality(PER_LINUX | \
|
||||
(current->personality & (~PER_MASK))); \
|
||||
} while (0)
|
||||
|
||||
#endif /* !(__ASM_SPARC64_ELF_H) */
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#define EX_LD(x) \
|
||||
98: x; \
|
||||
.section .fixup; \
|
||||
.section .fixup, "ax"; \
|
||||
.align 4; \
|
||||
99: retl; \
|
||||
mov -1, %o0; \
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#define EX_ST(x) \
|
||||
98: x; \
|
||||
.section .fixup; \
|
||||
.section .fixup,"ax"; \
|
||||
.align 4; \
|
||||
99: retl; \
|
||||
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) {
|
||||
continue;
|
||||
}
|
||||
if (r_type == R_386_PC32) {
|
||||
/* PC relative relocations don't need to be adjusted */
|
||||
if (r_type == R_386_NONE || r_type == R_386_PC32) {
|
||||
/*
|
||||
* NONE can be ignored and and PC relative
|
||||
* relocations don't need to be adjusted.
|
||||
*/
|
||||
}
|
||||
else if (r_type == R_386_32) {
|
||||
/* Visit relocations that need to be adjusted */
|
||||
|
|
|
@ -17,11 +17,6 @@
|
|||
|
||||
#define SMAP 0x534d4150 /* ASCII "SMAP" */
|
||||
|
||||
struct e820_ext_entry {
|
||||
struct e820entry std;
|
||||
u32 ext_flags;
|
||||
} __attribute__((packed));
|
||||
|
||||
static int detect_memory_e820(void)
|
||||
{
|
||||
int count = 0;
|
||||
|
@ -29,13 +24,21 @@ static int detect_memory_e820(void)
|
|||
u32 size, id, edi;
|
||||
u8 err;
|
||||
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
|
||||
* but still doesn't change %ecx, we're still okay...
|
||||
* Note: at least one BIOS is known which assumes that the
|
||||
* 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 {
|
||||
size = sizeof buf;
|
||||
|
@ -66,13 +69,7 @@ static int detect_memory_e820(void)
|
|||
break;
|
||||
}
|
||||
|
||||
/* ACPI 3.0 added the extended flags support. If bit 0
|
||||
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;
|
||||
*desc++ = buf;
|
||||
count++;
|
||||
} 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);
|
||||
|
||||
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
|
||||
static int cachesize_override __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 &&
|
||||
policy->cpuinfo.transition_latency > 20 * 1000) {
|
||||
policy->cpuinfo.transition_latency = 20 * 1000;
|
||||
printk_once(KERN_INFO "Capping off P-state tranision"
|
||||
" latency at 20 uS\n");
|
||||
printk_once(KERN_INFO
|
||||
"P-state transition latency capped at 20 uS\n");
|
||||
}
|
||||
|
||||
/* table init */
|
||||
|
|
|
@ -168,6 +168,7 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
|
|||
case 0x0E: /* Core */
|
||||
case 0x0F: /* Core Duo */
|
||||
case 0x16: /* Celeron Core */
|
||||
case 0x1C: /* Atom */
|
||||
p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS;
|
||||
return speedstep_get_frequency(SPEEDSTEP_CPU_PCORE);
|
||||
case 0x0D: /* Pentium M (Dothan) */
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue