mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 17:54:13 +08:00
Merge with /pub/scm/linux/kernel/git/torvalds/linux-2.6.git
This commit is contained in:
commit
75ba632a01
@ -212,15 +212,6 @@ Who: Greg Kroah-Hartman <gregkh@suse.de>
|
|||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: Support for NEC DDB5074 and DDB5476 evaluation boards.
|
|
||||||
When: June 2006
|
|
||||||
Why: Board specific code doesn't build anymore since ~2.6.0 and no
|
|
||||||
users have complained indicating there is no more need for these
|
|
||||||
boards. This should really be considered a last call.
|
|
||||||
Who: Ralf Baechle <ralf@linux-mips.org>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: USB driver API moves to EXPORT_SYMBOL_GPL
|
What: USB driver API moves to EXPORT_SYMBOL_GPL
|
||||||
When: Febuary 2008
|
When: Febuary 2008
|
||||||
Files: include/linux/usb.h, drivers/usb/core/driver.c
|
Files: include/linux/usb.h, drivers/usb/core/driver.c
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
IP OVER INFINIBAND
|
IP OVER INFINIBAND
|
||||||
|
|
||||||
The ib_ipoib driver is an implementation of the IP over InfiniBand
|
The ib_ipoib driver is an implementation of the IP over InfiniBand
|
||||||
protocol as specified by the latest Internet-Drafts issued by the
|
protocol as specified by RFC 4391 and 4392, issued by the IETF ipoib
|
||||||
IETF ipoib working group. It is a "native" implementation in the
|
working group. It is a "native" implementation in the sense of
|
||||||
sense of setting the interface type to ARPHRD_INFINIBAND and the
|
setting the interface type to ARPHRD_INFINIBAND and the hardware
|
||||||
hardware address length to 20 (earlier proprietary implementations
|
address length to 20 (earlier proprietary implementations
|
||||||
masqueraded to the kernel as ethernet interfaces).
|
masqueraded to the kernel as ethernet interfaces).
|
||||||
|
|
||||||
Partitions and P_Keys
|
Partitions and P_Keys
|
||||||
@ -53,3 +53,7 @@ References
|
|||||||
|
|
||||||
IETF IP over InfiniBand (ipoib) Working Group
|
IETF IP over InfiniBand (ipoib) Working Group
|
||||||
http://ietf.org/html.charters/ipoib-charter.html
|
http://ietf.org/html.charters/ipoib-charter.html
|
||||||
|
Transmission of IP over InfiniBand (IPoIB) (RFC 4391)
|
||||||
|
http://ietf.org/rfc/rfc4391.txt
|
||||||
|
IP over InfiniBand (IPoIB) Architecture (RFC 4392)
|
||||||
|
http://ietf.org/rfc/rfc4392.txt
|
||||||
|
@ -1402,6 +1402,15 @@ running once the system is up.
|
|||||||
If enabled at boot time, /selinux/disable can be used
|
If enabled at boot time, /selinux/disable can be used
|
||||||
later to disable prior to initial policy load.
|
later to disable prior to initial policy load.
|
||||||
|
|
||||||
|
selinux_compat_net =
|
||||||
|
[SELINUX] Set initial selinux_compat_net flag value.
|
||||||
|
Format: { "0" | "1" }
|
||||||
|
0 -- use new secmark-based packet controls
|
||||||
|
1 -- use legacy packet controls
|
||||||
|
Default value is 0 (preferred).
|
||||||
|
Value can be changed at runtime via
|
||||||
|
/selinux/compat_net.
|
||||||
|
|
||||||
serialnumber [BUGS=IA-32]
|
serialnumber [BUGS=IA-32]
|
||||||
|
|
||||||
sg_def_reserved_size= [SCSI]
|
sg_def_reserved_size= [SCSI]
|
||||||
|
@ -19,6 +19,7 @@ Contents:
|
|||||||
- Control dependencies.
|
- Control dependencies.
|
||||||
- SMP barrier pairing.
|
- SMP barrier pairing.
|
||||||
- Examples of memory barrier sequences.
|
- Examples of memory barrier sequences.
|
||||||
|
- Read memory barriers vs load speculation.
|
||||||
|
|
||||||
(*) Explicit kernel barriers.
|
(*) Explicit kernel barriers.
|
||||||
|
|
||||||
@ -248,7 +249,7 @@ And there are a number of things that _must_ or _must_not_ be assumed:
|
|||||||
we may get either of:
|
we may get either of:
|
||||||
|
|
||||||
STORE *A = X; Y = LOAD *A;
|
STORE *A = X; Y = LOAD *A;
|
||||||
STORE *A = Y;
|
STORE *A = Y = X;
|
||||||
|
|
||||||
|
|
||||||
=========================
|
=========================
|
||||||
@ -344,9 +345,12 @@ Memory barriers come in four basic varieties:
|
|||||||
|
|
||||||
(4) General memory barriers.
|
(4) General memory barriers.
|
||||||
|
|
||||||
A general memory barrier is a combination of both a read memory barrier
|
A general memory barrier gives a guarantee that all the LOAD and STORE
|
||||||
and a write memory barrier. It is a partial ordering over both loads and
|
operations specified before the barrier will appear to happen before all
|
||||||
stores.
|
the LOAD and STORE operations specified after the barrier with respect to
|
||||||
|
the other components of the system.
|
||||||
|
|
||||||
|
A general memory barrier is a partial ordering over both loads and stores.
|
||||||
|
|
||||||
General memory barriers imply both read and write memory barriers, and so
|
General memory barriers imply both read and write memory barriers, and so
|
||||||
can substitute for either.
|
can substitute for either.
|
||||||
@ -546,9 +550,9 @@ write barrier, though, again, a general barrier is viable:
|
|||||||
=============== ===============
|
=============== ===============
|
||||||
a = 1;
|
a = 1;
|
||||||
<write barrier>
|
<write barrier>
|
||||||
b = 2; x = a;
|
b = 2; x = b;
|
||||||
<read barrier>
|
<read barrier>
|
||||||
y = b;
|
y = a;
|
||||||
|
|
||||||
Or:
|
Or:
|
||||||
|
|
||||||
@ -563,6 +567,18 @@ Or:
|
|||||||
Basically, the read barrier always has to be there, even though it can be of
|
Basically, the read barrier always has to be there, even though it can be of
|
||||||
the "weaker" type.
|
the "weaker" type.
|
||||||
|
|
||||||
|
[!] Note that the stores before the write barrier would normally be expected to
|
||||||
|
match the loads after the read barrier or data dependency barrier, and vice
|
||||||
|
versa:
|
||||||
|
|
||||||
|
CPU 1 CPU 2
|
||||||
|
=============== ===============
|
||||||
|
a = 1; }---- --->{ v = c
|
||||||
|
b = 2; } \ / { w = d
|
||||||
|
<write barrier> \ <read barrier>
|
||||||
|
c = 3; } / \ { x = a;
|
||||||
|
d = 4; }---- --->{ y = b;
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES OF MEMORY BARRIER SEQUENCES
|
EXAMPLES OF MEMORY BARRIER SEQUENCES
|
||||||
------------------------------------
|
------------------------------------
|
||||||
@ -600,8 +616,8 @@ STORE B, STORE C } all occuring before the unordered set of { STORE D, STORE E
|
|||||||
| | +------+
|
| | +------+
|
||||||
+-------+ : :
|
+-------+ : :
|
||||||
|
|
|
|
||||||
| Sequence in which stores committed to memory system
|
| Sequence in which stores are committed to the
|
||||||
| by CPU 1
|
| memory system by CPU 1
|
||||||
V
|
V
|
||||||
|
|
||||||
|
|
||||||
@ -683,14 +699,12 @@ then the following will occur:
|
|||||||
| : : | |
|
| : : | |
|
||||||
| : : | CPU 2 |
|
| : : | CPU 2 |
|
||||||
| +-------+ | |
|
| +-------+ | |
|
||||||
\ | X->9 |------>| |
|
| | X->9 |------>| |
|
||||||
\ +-------+ | |
|
| +-------+ | |
|
||||||
----->| B->2 | | |
|
Makes sure all effects ---> \ ddddddddddddddddd | |
|
||||||
+-------+ | |
|
prior to the store of C \ +-------+ | |
|
||||||
Makes sure all effects ---> ddddddddddddddddd | |
|
are perceptible to ----->| B->2 |------>| |
|
||||||
prior to the store of C +-------+ | |
|
subsequent loads +-------+ | |
|
||||||
are perceptible to | B->2 |------>| |
|
|
||||||
successive loads +-------+ | |
|
|
||||||
: : +-------+
|
: : +-------+
|
||||||
|
|
||||||
|
|
||||||
@ -699,73 +713,239 @@ following sequence of events:
|
|||||||
|
|
||||||
CPU 1 CPU 2
|
CPU 1 CPU 2
|
||||||
======================= =======================
|
======================= =======================
|
||||||
|
{ A = 0, B = 9 }
|
||||||
STORE A=1
|
STORE A=1
|
||||||
STORE B=2
|
|
||||||
STORE C=3
|
|
||||||
<write barrier>
|
<write barrier>
|
||||||
STORE D=4
|
STORE B=2
|
||||||
STORE E=5
|
|
||||||
LOAD A
|
|
||||||
LOAD B
|
LOAD B
|
||||||
LOAD C
|
LOAD A
|
||||||
LOAD D
|
|
||||||
LOAD E
|
|
||||||
|
|
||||||
Without intervention, CPU 2 may then choose to perceive the events on CPU 1 in
|
Without intervention, CPU 2 may then choose to perceive the events on CPU 1 in
|
||||||
some effectively random order, despite the write barrier issued by CPU 1:
|
some effectively random order, despite the write barrier issued by CPU 1:
|
||||||
|
|
||||||
+-------+ : :
|
+-------+ : : : :
|
||||||
| | +------+
|
| | +------+ +-------+
|
||||||
| |------>| C=3 | }
|
| |------>| A=1 |------ --->| A->0 |
|
||||||
| | : +------+ }
|
| | +------+ \ +-------+
|
||||||
| | : | A=1 | }
|
| CPU 1 | wwwwwwwwwwwwwwww \ --->| B->9 |
|
||||||
| | : +------+ }
|
| | +------+ | +-------+
|
||||||
| CPU 1 | : | B=2 | }---
|
| |------>| B=2 |--- | : :
|
||||||
| | +------+ } \
|
| | +------+ \ | : : +-------+
|
||||||
| | wwwwwwwwwwwww} \
|
+-------+ : : \ | +-------+ | |
|
||||||
| | +------+ } \ : : +-------+
|
---------->| B->2 |------>| |
|
||||||
| | : | E=5 | } \ +-------+ | |
|
| +-------+ | CPU 2 |
|
||||||
| | : +------+ } \ { | C->3 |------>| |
|
| | A->0 |------>| |
|
||||||
| |------>| D=4 | } \ { +-------+ : | |
|
| +-------+ | |
|
||||||
| | +------+ \ { | E->5 | : | |
|
| : : +-------+
|
||||||
+-------+ : : \ { +-------+ : | |
|
\ : :
|
||||||
Transfer -->{ | A->1 | : | CPU 2 |
|
\ +-------+
|
||||||
from CPU 1 { +-------+ : | |
|
---->| A->1 |
|
||||||
to CPU 2 { | D->4 | : | |
|
+-------+
|
||||||
{ +-------+ : | |
|
: :
|
||||||
{ | B->2 |------>| |
|
|
||||||
+-------+ | |
|
|
||||||
: : +-------+
|
|
||||||
|
|
||||||
|
|
||||||
If, however, a read barrier were to be placed between the load of C and the
|
If, however, a read barrier were to be placed between the load of E and the
|
||||||
load of D on CPU 2, then the partial ordering imposed by CPU 1 will be
|
load of A on CPU 2:
|
||||||
perceived correctly by CPU 2.
|
|
||||||
|
|
||||||
+-------+ : :
|
CPU 1 CPU 2
|
||||||
| | +------+
|
======================= =======================
|
||||||
| |------>| C=3 | }
|
{ A = 0, B = 9 }
|
||||||
| | : +------+ }
|
STORE A=1
|
||||||
| | : | A=1 | }---
|
<write barrier>
|
||||||
| | : +------+ } \
|
STORE B=2
|
||||||
| CPU 1 | : | B=2 | } \
|
LOAD B
|
||||||
| | +------+ \
|
<read barrier>
|
||||||
| | wwwwwwwwwwwwwwww \
|
LOAD A
|
||||||
| | +------+ \ : : +-------+
|
|
||||||
| | : | E=5 | } \ +-------+ | |
|
then the partial ordering imposed by CPU 1 will be perceived correctly by CPU
|
||||||
| | : +------+ }--- \ { | C->3 |------>| |
|
2:
|
||||||
| |------>| D=4 | } \ \ { +-------+ : | |
|
|
||||||
| | +------+ \ -->{ | B->2 | : | |
|
+-------+ : : : :
|
||||||
+-------+ : : \ { +-------+ : | |
|
| | +------+ +-------+
|
||||||
\ { | A->1 | : | CPU 2 |
|
| |------>| A=1 |------ --->| A->0 |
|
||||||
\ +-------+ | |
|
| | +------+ \ +-------+
|
||||||
At this point the read ----> \ rrrrrrrrrrrrrrrrr | |
|
| CPU 1 | wwwwwwwwwwwwwwww \ --->| B->9 |
|
||||||
barrier causes all effects \ +-------+ | |
|
| | +------+ | +-------+
|
||||||
prior to the storage of C \ { | E->5 | : | |
|
| |------>| B=2 |--- | : :
|
||||||
to be perceptible to CPU 2 -->{ +-------+ : | |
|
| | +------+ \ | : : +-------+
|
||||||
{ | D->4 |------>| |
|
+-------+ : : \ | +-------+ | |
|
||||||
+-------+ | |
|
---------->| B->2 |------>| |
|
||||||
: : +-------+
|
| +-------+ | CPU 2 |
|
||||||
|
| : : | |
|
||||||
|
| : : | |
|
||||||
|
At this point the read ----> \ rrrrrrrrrrrrrrrrr | |
|
||||||
|
barrier causes all effects \ +-------+ | |
|
||||||
|
prior to the storage of B ---->| A->1 |------>| |
|
||||||
|
to be perceptible to CPU 2 +-------+ | |
|
||||||
|
: : +-------+
|
||||||
|
|
||||||
|
|
||||||
|
To illustrate this more completely, consider what could happen if the code
|
||||||
|
contained a load of A either side of the read barrier:
|
||||||
|
|
||||||
|
CPU 1 CPU 2
|
||||||
|
======================= =======================
|
||||||
|
{ A = 0, B = 9 }
|
||||||
|
STORE A=1
|
||||||
|
<write barrier>
|
||||||
|
STORE B=2
|
||||||
|
LOAD B
|
||||||
|
LOAD A [first load of A]
|
||||||
|
<read barrier>
|
||||||
|
LOAD A [second load of A]
|
||||||
|
|
||||||
|
Even though the two loads of A both occur after the load of B, they may both
|
||||||
|
come up with different values:
|
||||||
|
|
||||||
|
+-------+ : : : :
|
||||||
|
| | +------+ +-------+
|
||||||
|
| |------>| A=1 |------ --->| A->0 |
|
||||||
|
| | +------+ \ +-------+
|
||||||
|
| CPU 1 | wwwwwwwwwwwwwwww \ --->| B->9 |
|
||||||
|
| | +------+ | +-------+
|
||||||
|
| |------>| B=2 |--- | : :
|
||||||
|
| | +------+ \ | : : +-------+
|
||||||
|
+-------+ : : \ | +-------+ | |
|
||||||
|
---------->| B->2 |------>| |
|
||||||
|
| +-------+ | CPU 2 |
|
||||||
|
| : : | |
|
||||||
|
| : : | |
|
||||||
|
| +-------+ | |
|
||||||
|
| | A->0 |------>| 1st |
|
||||||
|
| +-------+ | |
|
||||||
|
At this point the read ----> \ rrrrrrrrrrrrrrrrr | |
|
||||||
|
barrier causes all effects \ +-------+ | |
|
||||||
|
prior to the storage of B ---->| A->1 |------>| 2nd |
|
||||||
|
to be perceptible to CPU 2 +-------+ | |
|
||||||
|
: : +-------+
|
||||||
|
|
||||||
|
|
||||||
|
But it may be that the update to A from CPU 1 becomes perceptible to CPU 2
|
||||||
|
before the read barrier completes anyway:
|
||||||
|
|
||||||
|
+-------+ : : : :
|
||||||
|
| | +------+ +-------+
|
||||||
|
| |------>| A=1 |------ --->| A->0 |
|
||||||
|
| | +------+ \ +-------+
|
||||||
|
| CPU 1 | wwwwwwwwwwwwwwww \ --->| B->9 |
|
||||||
|
| | +------+ | +-------+
|
||||||
|
| |------>| B=2 |--- | : :
|
||||||
|
| | +------+ \ | : : +-------+
|
||||||
|
+-------+ : : \ | +-------+ | |
|
||||||
|
---------->| B->2 |------>| |
|
||||||
|
| +-------+ | CPU 2 |
|
||||||
|
| : : | |
|
||||||
|
\ : : | |
|
||||||
|
\ +-------+ | |
|
||||||
|
---->| A->1 |------>| 1st |
|
||||||
|
+-------+ | |
|
||||||
|
rrrrrrrrrrrrrrrrr | |
|
||||||
|
+-------+ | |
|
||||||
|
| A->1 |------>| 2nd |
|
||||||
|
+-------+ | |
|
||||||
|
: : +-------+
|
||||||
|
|
||||||
|
|
||||||
|
The guarantee is that the second load will always come up with A == 1 if the
|
||||||
|
load of B came up with B == 2. No such guarantee exists for the first load of
|
||||||
|
A; that may come up with either A == 0 or A == 1.
|
||||||
|
|
||||||
|
|
||||||
|
READ MEMORY BARRIERS VS LOAD SPECULATION
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
Many CPUs speculate with loads: that is they see that they will need to load an
|
||||||
|
item from memory, and they find a time where they're not using the bus for any
|
||||||
|
other loads, and so do the load in advance - even though they haven't actually
|
||||||
|
got to that point in the instruction execution flow yet. This permits the
|
||||||
|
actual load instruction to potentially complete immediately because the CPU
|
||||||
|
already has the value to hand.
|
||||||
|
|
||||||
|
It may turn out that the CPU didn't actually need the value - perhaps because a
|
||||||
|
branch circumvented the load - in which case it can discard the value or just
|
||||||
|
cache it for later use.
|
||||||
|
|
||||||
|
Consider:
|
||||||
|
|
||||||
|
CPU 1 CPU 2
|
||||||
|
======================= =======================
|
||||||
|
LOAD B
|
||||||
|
DIVIDE } Divide instructions generally
|
||||||
|
DIVIDE } take a long time to perform
|
||||||
|
LOAD A
|
||||||
|
|
||||||
|
Which might appear as this:
|
||||||
|
|
||||||
|
: : +-------+
|
||||||
|
+-------+ | |
|
||||||
|
--->| B->2 |------>| |
|
||||||
|
+-------+ | CPU 2 |
|
||||||
|
: :DIVIDE | |
|
||||||
|
+-------+ | |
|
||||||
|
The CPU being busy doing a ---> --->| A->0 |~~~~ | |
|
||||||
|
division speculates on the +-------+ ~ | |
|
||||||
|
LOAD of A : : ~ | |
|
||||||
|
: :DIVIDE | |
|
||||||
|
: : ~ | |
|
||||||
|
Once the divisions are complete --> : : ~-->| |
|
||||||
|
the CPU can then perform the : : | |
|
||||||
|
LOAD with immediate effect : : +-------+
|
||||||
|
|
||||||
|
|
||||||
|
Placing a read barrier or a data dependency barrier just before the second
|
||||||
|
load:
|
||||||
|
|
||||||
|
CPU 1 CPU 2
|
||||||
|
======================= =======================
|
||||||
|
LOAD B
|
||||||
|
DIVIDE
|
||||||
|
DIVIDE
|
||||||
|
<read barrier>
|
||||||
|
LOAD A
|
||||||
|
|
||||||
|
will force any value speculatively obtained to be reconsidered to an extent
|
||||||
|
dependent on the type of barrier used. If there was no change made to the
|
||||||
|
speculated memory location, then the speculated value will just be used:
|
||||||
|
|
||||||
|
: : +-------+
|
||||||
|
+-------+ | |
|
||||||
|
--->| B->2 |------>| |
|
||||||
|
+-------+ | CPU 2 |
|
||||||
|
: :DIVIDE | |
|
||||||
|
+-------+ | |
|
||||||
|
The CPU being busy doing a ---> --->| A->0 |~~~~ | |
|
||||||
|
division speculates on the +-------+ ~ | |
|
||||||
|
LOAD of A : : ~ | |
|
||||||
|
: :DIVIDE | |
|
||||||
|
: : ~ | |
|
||||||
|
: : ~ | |
|
||||||
|
rrrrrrrrrrrrrrrr~ | |
|
||||||
|
: : ~ | |
|
||||||
|
: : ~-->| |
|
||||||
|
: : | |
|
||||||
|
: : +-------+
|
||||||
|
|
||||||
|
|
||||||
|
but if there was an update or an invalidation from another CPU pending, then
|
||||||
|
the speculation will be cancelled and the value reloaded:
|
||||||
|
|
||||||
|
: : +-------+
|
||||||
|
+-------+ | |
|
||||||
|
--->| B->2 |------>| |
|
||||||
|
+-------+ | CPU 2 |
|
||||||
|
: :DIVIDE | |
|
||||||
|
+-------+ | |
|
||||||
|
The CPU being busy doing a ---> --->| A->0 |~~~~ | |
|
||||||
|
division speculates on the +-------+ ~ | |
|
||||||
|
LOAD of A : : ~ | |
|
||||||
|
: :DIVIDE | |
|
||||||
|
: : ~ | |
|
||||||
|
: : ~ | |
|
||||||
|
rrrrrrrrrrrrrrrrr | |
|
||||||
|
+-------+ | |
|
||||||
|
The speculation is discarded ---> --->| A->1 |------>| |
|
||||||
|
and an updated value is +-------+ | |
|
||||||
|
retrieved : : +-------+
|
||||||
|
|
||||||
|
|
||||||
========================
|
========================
|
||||||
@ -901,7 +1081,7 @@ IMPLICIT KERNEL MEMORY BARRIERS
|
|||||||
===============================
|
===============================
|
||||||
|
|
||||||
Some of the other functions in the linux kernel imply memory barriers, amongst
|
Some of the other functions in the linux kernel imply memory barriers, amongst
|
||||||
which are locking, scheduling and memory allocation functions.
|
which are locking and scheduling functions.
|
||||||
|
|
||||||
This specification is a _minimum_ guarantee; any particular architecture may
|
This specification is a _minimum_ guarantee; any particular architecture may
|
||||||
provide more substantial guarantees, but these may not be relied upon outside
|
provide more substantial guarantees, but these may not be relied upon outside
|
||||||
@ -966,6 +1146,20 @@ equivalent to a full barrier, but a LOCK followed by an UNLOCK is not.
|
|||||||
barriers is that the effects instructions outside of a critical section may
|
barriers is that the effects instructions outside of a critical section may
|
||||||
seep into the inside of the critical section.
|
seep into the inside of the critical section.
|
||||||
|
|
||||||
|
A LOCK followed by an UNLOCK may not be assumed to be full memory barrier
|
||||||
|
because it is possible for an access preceding the LOCK to happen after the
|
||||||
|
LOCK, and an access following the UNLOCK to happen before the UNLOCK, and the
|
||||||
|
two accesses can themselves then cross:
|
||||||
|
|
||||||
|
*A = a;
|
||||||
|
LOCK
|
||||||
|
UNLOCK
|
||||||
|
*B = b;
|
||||||
|
|
||||||
|
may occur as:
|
||||||
|
|
||||||
|
LOCK, STORE *B, STORE *A, UNLOCK
|
||||||
|
|
||||||
Locks and semaphores may not provide any guarantee of ordering on UP compiled
|
Locks and semaphores may not provide any guarantee of ordering on UP compiled
|
||||||
systems, and so cannot be counted on in such a situation to actually achieve
|
systems, and so cannot be counted on in such a situation to actually achieve
|
||||||
anything at all - especially with respect to I/O accesses - unless combined
|
anything at all - especially with respect to I/O accesses - unless combined
|
||||||
@ -1016,8 +1210,6 @@ Other functions that imply barriers:
|
|||||||
|
|
||||||
(*) schedule() and similar imply full memory barriers.
|
(*) schedule() and similar imply full memory barriers.
|
||||||
|
|
||||||
(*) Memory allocation and release functions imply full memory barriers.
|
|
||||||
|
|
||||||
|
|
||||||
=================================
|
=================================
|
||||||
INTER-CPU LOCKING BARRIER EFFECTS
|
INTER-CPU LOCKING BARRIER EFFECTS
|
||||||
|
@ -14,8 +14,8 @@ Copyright (C) 2004-2006, Intel Corporation
|
|||||||
|
|
||||||
README.ipw2200
|
README.ipw2200
|
||||||
|
|
||||||
Version: 1.0.8
|
Version: 1.1.2
|
||||||
Date : October 20, 2005
|
Date : March 30, 2006
|
||||||
|
|
||||||
|
|
||||||
Index
|
Index
|
||||||
@ -103,7 +103,7 @@ file.
|
|||||||
|
|
||||||
1.1. Overview of Features
|
1.1. Overview of Features
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
The current release (1.0.8) supports the following features:
|
The current release (1.1.2) supports the following features:
|
||||||
|
|
||||||
+ BSS mode (Infrastructure, Managed)
|
+ BSS mode (Infrastructure, Managed)
|
||||||
+ IBSS mode (Ad-Hoc)
|
+ IBSS mode (Ad-Hoc)
|
||||||
@ -247,8 +247,8 @@ and can set the contents via echo. For example:
|
|||||||
% cat /sys/bus/pci/drivers/ipw2200/debug_level
|
% cat /sys/bus/pci/drivers/ipw2200/debug_level
|
||||||
|
|
||||||
Will report the current debug level of the driver's logging subsystem
|
Will report the current debug level of the driver's logging subsystem
|
||||||
(only available if CONFIG_IPW_DEBUG was configured when the driver was
|
(only available if CONFIG_IPW2200_DEBUG was configured when the driver
|
||||||
built).
|
was built).
|
||||||
|
|
||||||
You can set the debug level via:
|
You can set the debug level via:
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Linux Ethernet Bonding Driver HOWTO
|
Linux Ethernet Bonding Driver HOWTO
|
||||||
|
|
||||||
Latest update: 21 June 2005
|
Latest update: 24 April 2006
|
||||||
|
|
||||||
Initial release : Thomas Davis <tadavis at lbl.gov>
|
Initial release : Thomas Davis <tadavis at lbl.gov>
|
||||||
Corrections, HA extensions : 2000/10/03-15 :
|
Corrections, HA extensions : 2000/10/03-15 :
|
||||||
@ -12,6 +12,8 @@ Corrections, HA extensions : 2000/10/03-15 :
|
|||||||
- Jay Vosburgh <fubar at us dot ibm dot com>
|
- Jay Vosburgh <fubar at us dot ibm dot com>
|
||||||
|
|
||||||
Reorganized and updated Feb 2005 by Jay Vosburgh
|
Reorganized and updated Feb 2005 by Jay Vosburgh
|
||||||
|
Added Sysfs information: 2006/04/24
|
||||||
|
- Mitch Williams <mitch.a.williams at intel.com>
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
============
|
============
|
||||||
@ -38,61 +40,62 @@ Table of Contents
|
|||||||
2. Bonding Driver Options
|
2. Bonding Driver Options
|
||||||
|
|
||||||
3. Configuring Bonding Devices
|
3. Configuring Bonding Devices
|
||||||
3.1 Configuration with sysconfig support
|
3.1 Configuration with Sysconfig Support
|
||||||
3.1.1 Using DHCP with sysconfig
|
3.1.1 Using DHCP with Sysconfig
|
||||||
3.1.2 Configuring Multiple Bonds with sysconfig
|
3.1.2 Configuring Multiple Bonds with Sysconfig
|
||||||
3.2 Configuration with initscripts support
|
3.2 Configuration with Initscripts Support
|
||||||
3.2.1 Using DHCP with initscripts
|
3.2.1 Using DHCP with Initscripts
|
||||||
3.2.2 Configuring Multiple Bonds with initscripts
|
3.2.2 Configuring Multiple Bonds with Initscripts
|
||||||
3.3 Configuring Bonding Manually
|
3.3 Configuring Bonding Manually with Ifenslave
|
||||||
3.3.1 Configuring Multiple Bonds Manually
|
3.3.1 Configuring Multiple Bonds Manually
|
||||||
|
3.4 Configuring Bonding Manually via Sysfs
|
||||||
|
|
||||||
5. Querying Bonding Configuration
|
4. Querying Bonding Configuration
|
||||||
5.1 Bonding Configuration
|
4.1 Bonding Configuration
|
||||||
5.2 Network Configuration
|
4.2 Network Configuration
|
||||||
|
|
||||||
6. Switch Configuration
|
5. Switch Configuration
|
||||||
|
|
||||||
7. 802.1q VLAN Support
|
6. 802.1q VLAN Support
|
||||||
|
|
||||||
8. Link Monitoring
|
7. Link Monitoring
|
||||||
8.1 ARP Monitor Operation
|
7.1 ARP Monitor Operation
|
||||||
8.2 Configuring Multiple ARP Targets
|
7.2 Configuring Multiple ARP Targets
|
||||||
8.3 MII Monitor Operation
|
7.3 MII Monitor Operation
|
||||||
|
|
||||||
9. Potential Trouble Sources
|
8. Potential Trouble Sources
|
||||||
9.1 Adventures in Routing
|
8.1 Adventures in Routing
|
||||||
9.2 Ethernet Device Renaming
|
8.2 Ethernet Device Renaming
|
||||||
9.3 Painfully Slow Or No Failed Link Detection By Miimon
|
8.3 Painfully Slow Or No Failed Link Detection By Miimon
|
||||||
|
|
||||||
10. SNMP agents
|
9. SNMP agents
|
||||||
|
|
||||||
11. Promiscuous mode
|
10. Promiscuous mode
|
||||||
|
|
||||||
12. Configuring Bonding for High Availability
|
11. Configuring Bonding for High Availability
|
||||||
12.1 High Availability in a Single Switch Topology
|
11.1 High Availability in a Single Switch Topology
|
||||||
12.2 High Availability in a Multiple Switch Topology
|
11.2 High Availability in a Multiple Switch Topology
|
||||||
12.2.1 HA Bonding Mode Selection for Multiple Switch Topology
|
11.2.1 HA Bonding Mode Selection for Multiple Switch Topology
|
||||||
12.2.2 HA Link Monitoring for Multiple Switch Topology
|
11.2.2 HA Link Monitoring for Multiple Switch Topology
|
||||||
|
|
||||||
13. Configuring Bonding for Maximum Throughput
|
12. Configuring Bonding for Maximum Throughput
|
||||||
13.1 Maximum Throughput in a Single Switch Topology
|
12.1 Maximum Throughput in a Single Switch Topology
|
||||||
13.1.1 MT Bonding Mode Selection for Single Switch Topology
|
12.1.1 MT Bonding Mode Selection for Single Switch Topology
|
||||||
13.1.2 MT Link Monitoring for Single Switch Topology
|
12.1.2 MT Link Monitoring for Single Switch Topology
|
||||||
13.2 Maximum Throughput in a Multiple Switch Topology
|
12.2 Maximum Throughput in a Multiple Switch Topology
|
||||||
13.2.1 MT Bonding Mode Selection for Multiple Switch Topology
|
12.2.1 MT Bonding Mode Selection for Multiple Switch Topology
|
||||||
13.2.2 MT Link Monitoring for Multiple Switch Topology
|
12.2.2 MT Link Monitoring for Multiple Switch Topology
|
||||||
|
|
||||||
14. Switch Behavior Issues
|
13. Switch Behavior Issues
|
||||||
14.1 Link Establishment and Failover Delays
|
13.1 Link Establishment and Failover Delays
|
||||||
14.2 Duplicated Incoming Packets
|
13.2 Duplicated Incoming Packets
|
||||||
|
|
||||||
15. Hardware Specific Considerations
|
14. Hardware Specific Considerations
|
||||||
15.1 IBM BladeCenter
|
14.1 IBM BladeCenter
|
||||||
|
|
||||||
16. Frequently Asked Questions
|
15. Frequently Asked Questions
|
||||||
|
|
||||||
17. Resources and Links
|
16. Resources and Links
|
||||||
|
|
||||||
|
|
||||||
1. Bonding Driver Installation
|
1. Bonding Driver Installation
|
||||||
@ -156,6 +159,9 @@ you're trying to build it for. Some distros (e.g., Red Hat from 7.1
|
|||||||
onwards) do not have /usr/include/linux symbolically linked to the
|
onwards) do not have /usr/include/linux symbolically linked to the
|
||||||
default kernel source include directory.
|
default kernel source include directory.
|
||||||
|
|
||||||
|
SECOND IMPORTANT NOTE:
|
||||||
|
If you plan to configure bonding using sysfs, you do not need
|
||||||
|
to use ifenslave.
|
||||||
|
|
||||||
2. Bonding Driver Options
|
2. Bonding Driver Options
|
||||||
=========================
|
=========================
|
||||||
@ -270,7 +276,7 @@ mode
|
|||||||
In bonding version 2.6.2 or later, when a failover
|
In bonding version 2.6.2 or later, when a failover
|
||||||
occurs in active-backup mode, bonding will issue one
|
occurs in active-backup mode, bonding will issue one
|
||||||
or more gratuitous ARPs on the newly active slave.
|
or more gratuitous ARPs on the newly active slave.
|
||||||
One gratutious ARP is issued for the bonding master
|
One gratuitous ARP is issued for the bonding master
|
||||||
interface and each VLAN interfaces configured above
|
interface and each VLAN interfaces configured above
|
||||||
it, provided that the interface has at least one IP
|
it, provided that the interface has at least one IP
|
||||||
address configured. Gratuitous ARPs issued for VLAN
|
address configured. Gratuitous ARPs issued for VLAN
|
||||||
@ -377,7 +383,7 @@ mode
|
|||||||
When a link is reconnected or a new slave joins the
|
When a link is reconnected or a new slave joins the
|
||||||
bond the receive traffic is redistributed among all
|
bond the receive traffic is redistributed among all
|
||||||
active slaves in the bond by initiating ARP Replies
|
active slaves in the bond by initiating ARP Replies
|
||||||
with the selected mac address to each of the
|
with the selected MAC address to each of the
|
||||||
clients. The updelay parameter (detailed below) must
|
clients. The updelay parameter (detailed below) must
|
||||||
be set to a value equal or greater than the switch's
|
be set to a value equal or greater than the switch's
|
||||||
forwarding delay so that the ARP Replies sent to the
|
forwarding delay so that the ARP Replies sent to the
|
||||||
@ -498,11 +504,12 @@ not exist, and the layer2 policy is the only policy.
|
|||||||
3. Configuring Bonding Devices
|
3. Configuring Bonding Devices
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
There are, essentially, two methods for configuring bonding:
|
You can configure bonding using either your distro's network
|
||||||
with support from the distro's network initialization scripts, and
|
initialization scripts, or manually using either ifenslave or the
|
||||||
without. Distros generally use one of two packages for the network
|
sysfs interface. Distros generally use one of two packages for the
|
||||||
initialization scripts: initscripts or sysconfig. Recent versions of
|
network initialization scripts: initscripts or sysconfig. Recent
|
||||||
these packages have support for bonding, while older versions do not.
|
versions of these packages have support for bonding, while older
|
||||||
|
versions do not.
|
||||||
|
|
||||||
We will first describe the options for configuring bonding for
|
We will first describe the options for configuring bonding for
|
||||||
distros using versions of initscripts and sysconfig with full or
|
distros using versions of initscripts and sysconfig with full or
|
||||||
@ -530,7 +537,7 @@ $ grep ifenslave /sbin/ifup
|
|||||||
If this returns any matches, then your initscripts or
|
If this returns any matches, then your initscripts or
|
||||||
sysconfig has support for bonding.
|
sysconfig has support for bonding.
|
||||||
|
|
||||||
3.1 Configuration with sysconfig support
|
3.1 Configuration with Sysconfig Support
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
|
|
||||||
This section applies to distros using a version of sysconfig
|
This section applies to distros using a version of sysconfig
|
||||||
@ -538,7 +545,7 @@ with bonding support, for example, SuSE Linux Enterprise Server 9.
|
|||||||
|
|
||||||
SuSE SLES 9's networking configuration system does support
|
SuSE SLES 9's networking configuration system does support
|
||||||
bonding, however, at this writing, the YaST system configuration
|
bonding, however, at this writing, the YaST system configuration
|
||||||
frontend does not provide any means to work with bonding devices.
|
front end does not provide any means to work with bonding devices.
|
||||||
Bonding devices can be managed by hand, however, as follows.
|
Bonding devices can be managed by hand, however, as follows.
|
||||||
|
|
||||||
First, if they have not already been configured, configure the
|
First, if they have not already been configured, configure the
|
||||||
@ -660,7 +667,7 @@ format can be found in an example ifcfg template file:
|
|||||||
Note that the template does not document the various BONDING_
|
Note that the template does not document the various BONDING_
|
||||||
settings described above, but does describe many of the other options.
|
settings described above, but does describe many of the other options.
|
||||||
|
|
||||||
3.1.1 Using DHCP with sysconfig
|
3.1.1 Using DHCP with Sysconfig
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
Under sysconfig, configuring a device with BOOTPROTO='dhcp'
|
Under sysconfig, configuring a device with BOOTPROTO='dhcp'
|
||||||
@ -670,7 +677,7 @@ attempt to obtain the device address from DHCP prior to adding any of
|
|||||||
the slave devices. Without active slaves, the DHCP requests are not
|
the slave devices. Without active slaves, the DHCP requests are not
|
||||||
sent to the network.
|
sent to the network.
|
||||||
|
|
||||||
3.1.2 Configuring Multiple Bonds with sysconfig
|
3.1.2 Configuring Multiple Bonds with Sysconfig
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
The sysconfig network initialization system is capable of
|
The sysconfig network initialization system is capable of
|
||||||
@ -685,7 +692,7 @@ ifcfg-bondX files.
|
|||||||
options in the ifcfg-bondX file, it is not necessary to add them to
|
options in the ifcfg-bondX file, it is not necessary to add them to
|
||||||
the system /etc/modules.conf or /etc/modprobe.conf configuration file.
|
the system /etc/modules.conf or /etc/modprobe.conf configuration file.
|
||||||
|
|
||||||
3.2 Configuration with initscripts support
|
3.2 Configuration with Initscripts Support
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
This section applies to distros using a version of initscripts
|
This section applies to distros using a version of initscripts
|
||||||
@ -756,7 +763,7 @@ options for your configuration.
|
|||||||
will restart the networking subsystem and your bond link should be now
|
will restart the networking subsystem and your bond link should be now
|
||||||
up and running.
|
up and running.
|
||||||
|
|
||||||
3.2.1 Using DHCP with initscripts
|
3.2.1 Using DHCP with Initscripts
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Recent versions of initscripts (the version supplied with
|
Recent versions of initscripts (the version supplied with
|
||||||
@ -768,7 +775,7 @@ above, except replace the line "BOOTPROTO=none" with "BOOTPROTO=dhcp"
|
|||||||
and add a line consisting of "TYPE=Bonding". Note that the TYPE value
|
and add a line consisting of "TYPE=Bonding". Note that the TYPE value
|
||||||
is case sensitive.
|
is case sensitive.
|
||||||
|
|
||||||
3.2.2 Configuring Multiple Bonds with initscripts
|
3.2.2 Configuring Multiple Bonds with Initscripts
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
At this writing, the initscripts package does not directly
|
At this writing, the initscripts package does not directly
|
||||||
@ -784,8 +791,8 @@ Fedora Core kernels, and has been seen on RHEL 4 as well. On kernels
|
|||||||
exhibiting this problem, it will be impossible to configure multiple
|
exhibiting this problem, it will be impossible to configure multiple
|
||||||
bonds with differing parameters.
|
bonds with differing parameters.
|
||||||
|
|
||||||
3.3 Configuring Bonding Manually
|
3.3 Configuring Bonding Manually with Ifenslave
|
||||||
--------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
This section applies to distros whose network initialization
|
This section applies to distros whose network initialization
|
||||||
scripts (the sysconfig or initscripts package) do not have specific
|
scripts (the sysconfig or initscripts package) do not have specific
|
||||||
@ -889,11 +896,139 @@ install bond1 /sbin/modprobe --ignore-install bonding -o bond1 \
|
|||||||
This may be repeated any number of times, specifying a new and
|
This may be repeated any number of times, specifying a new and
|
||||||
unique name in place of bond1 for each subsequent instance.
|
unique name in place of bond1 for each subsequent instance.
|
||||||
|
|
||||||
|
3.4 Configuring Bonding Manually via Sysfs
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
5. Querying Bonding Configuration
|
Starting with version 3.0, Channel Bonding may be configured
|
||||||
|
via the sysfs interface. This interface allows dynamic configuration
|
||||||
|
of all bonds in the system without unloading the module. It also
|
||||||
|
allows for adding and removing bonds at runtime. Ifenslave is no
|
||||||
|
longer required, though it is still supported.
|
||||||
|
|
||||||
|
Use of the sysfs interface allows you to use multiple bonds
|
||||||
|
with different configurations without having to reload the module.
|
||||||
|
It also allows you to use multiple, differently configured bonds when
|
||||||
|
bonding is compiled into the kernel.
|
||||||
|
|
||||||
|
You must have the sysfs filesystem mounted to configure
|
||||||
|
bonding this way. The examples in this document assume that you
|
||||||
|
are using the standard mount point for sysfs, e.g. /sys. If your
|
||||||
|
sysfs filesystem is mounted elsewhere, you will need to adjust the
|
||||||
|
example paths accordingly.
|
||||||
|
|
||||||
|
Creating and Destroying Bonds
|
||||||
|
-----------------------------
|
||||||
|
To add a new bond foo:
|
||||||
|
# echo +foo > /sys/class/net/bonding_masters
|
||||||
|
|
||||||
|
To remove an existing bond bar:
|
||||||
|
# echo -bar > /sys/class/net/bonding_masters
|
||||||
|
|
||||||
|
To show all existing bonds:
|
||||||
|
# cat /sys/class/net/bonding_masters
|
||||||
|
|
||||||
|
NOTE: due to 4K size limitation of sysfs files, this list may be
|
||||||
|
truncated if you have more than a few hundred bonds. This is unlikely
|
||||||
|
to occur under normal operating conditions.
|
||||||
|
|
||||||
|
Adding and Removing Slaves
|
||||||
|
--------------------------
|
||||||
|
Interfaces may be enslaved to a bond using the file
|
||||||
|
/sys/class/net/<bond>/bonding/slaves. The semantics for this file
|
||||||
|
are the same as for the bonding_masters file.
|
||||||
|
|
||||||
|
To enslave interface eth0 to bond bond0:
|
||||||
|
# ifconfig bond0 up
|
||||||
|
# echo +eth0 > /sys/class/net/bond0/bonding/slaves
|
||||||
|
|
||||||
|
To free slave eth0 from bond bond0:
|
||||||
|
# echo -eth0 > /sys/class/net/bond0/bonding/slaves
|
||||||
|
|
||||||
|
NOTE: The bond must be up before slaves can be added. All
|
||||||
|
slaves are freed when the interface is brought down.
|
||||||
|
|
||||||
|
When an interface is enslaved to a bond, symlinks between the
|
||||||
|
two are created in the sysfs filesystem. In this case, you would get
|
||||||
|
/sys/class/net/bond0/slave_eth0 pointing to /sys/class/net/eth0, and
|
||||||
|
/sys/class/net/eth0/master pointing to /sys/class/net/bond0.
|
||||||
|
|
||||||
|
This means that you can tell quickly whether or not an
|
||||||
|
interface is enslaved by looking for the master symlink. Thus:
|
||||||
|
# echo -eth0 > /sys/class/net/eth0/master/bonding/slaves
|
||||||
|
will free eth0 from whatever bond it is enslaved to, regardless of
|
||||||
|
the name of the bond interface.
|
||||||
|
|
||||||
|
Changing a Bond's Configuration
|
||||||
|
-------------------------------
|
||||||
|
Each bond may be configured individually by manipulating the
|
||||||
|
files located in /sys/class/net/<bond name>/bonding
|
||||||
|
|
||||||
|
The names of these files correspond directly with the command-
|
||||||
|
line parameters described elsewhere in in this file, and, with the
|
||||||
|
exception of arp_ip_target, they accept the same values. To see the
|
||||||
|
current setting, simply cat the appropriate file.
|
||||||
|
|
||||||
|
A few examples will be given here; for specific usage
|
||||||
|
guidelines for each parameter, see the appropriate section in this
|
||||||
|
document.
|
||||||
|
|
||||||
|
To configure bond0 for balance-alb mode:
|
||||||
|
# ifconfig bond0 down
|
||||||
|
# echo 6 > /sys/class/net/bond0/bonding/mode
|
||||||
|
- or -
|
||||||
|
# echo balance-alb > /sys/class/net/bond0/bonding/mode
|
||||||
|
NOTE: The bond interface must be down before the mode can be
|
||||||
|
changed.
|
||||||
|
|
||||||
|
To enable MII monitoring on bond0 with a 1 second interval:
|
||||||
|
# echo 1000 > /sys/class/net/bond0/bonding/miimon
|
||||||
|
NOTE: If ARP monitoring is enabled, it will disabled when MII
|
||||||
|
monitoring is enabled, and vice-versa.
|
||||||
|
|
||||||
|
To add ARP targets:
|
||||||
|
# echo +192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target
|
||||||
|
# echo +192.168.0.101 > /sys/class/net/bond0/bonding/arp_ip_target
|
||||||
|
NOTE: up to 10 target addresses may be specified.
|
||||||
|
|
||||||
|
To remove an ARP target:
|
||||||
|
# echo -192.168.0.100 > /sys/class/net/bond0/bonding/arp_ip_target
|
||||||
|
|
||||||
|
Example Configuration
|
||||||
|
---------------------
|
||||||
|
We begin with the same example that is shown in section 3.3,
|
||||||
|
executed with sysfs, and without using ifenslave.
|
||||||
|
|
||||||
|
To make a simple bond of two e100 devices (presumed to be eth0
|
||||||
|
and eth1), and have it persist across reboots, edit the appropriate
|
||||||
|
file (/etc/init.d/boot.local or /etc/rc.d/rc.local), and add the
|
||||||
|
following:
|
||||||
|
|
||||||
|
modprobe bonding
|
||||||
|
modprobe e100
|
||||||
|
echo balance-alb > /sys/class/net/bond0/bonding/mode
|
||||||
|
ifconfig bond0 192.168.1.1 netmask 255.255.255.0 up
|
||||||
|
echo 100 > /sys/class/net/bond0/bonding/miimon
|
||||||
|
echo +eth0 > /sys/class/net/bond0/bonding/slaves
|
||||||
|
echo +eth1 > /sys/class/net/bond0/bonding/slaves
|
||||||
|
|
||||||
|
To add a second bond, with two e1000 interfaces in
|
||||||
|
active-backup mode, using ARP monitoring, add the following lines to
|
||||||
|
your init script:
|
||||||
|
|
||||||
|
modprobe e1000
|
||||||
|
echo +bond1 > /sys/class/net/bonding_masters
|
||||||
|
echo active-backup > /sys/class/net/bond1/bonding/mode
|
||||||
|
ifconfig bond1 192.168.2.1 netmask 255.255.255.0 up
|
||||||
|
echo +192.168.2.100 /sys/class/net/bond1/bonding/arp_ip_target
|
||||||
|
echo 2000 > /sys/class/net/bond1/bonding/arp_interval
|
||||||
|
echo +eth2 > /sys/class/net/bond1/bonding/slaves
|
||||||
|
echo +eth3 > /sys/class/net/bond1/bonding/slaves
|
||||||
|
|
||||||
|
|
||||||
|
4. Querying Bonding Configuration
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
5.1 Bonding Configuration
|
4.1 Bonding Configuration
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
Each bonding device has a read-only file residing in the
|
Each bonding device has a read-only file residing in the
|
||||||
@ -923,7 +1058,7 @@ generally as follows:
|
|||||||
The precise format and contents will change depending upon the
|
The precise format and contents will change depending upon the
|
||||||
bonding configuration, state, and version of the bonding driver.
|
bonding configuration, state, and version of the bonding driver.
|
||||||
|
|
||||||
5.2 Network configuration
|
4.2 Network configuration
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
The network configuration can be inspected using the ifconfig
|
The network configuration can be inspected using the ifconfig
|
||||||
@ -958,7 +1093,7 @@ eth1 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4
|
|||||||
collisions:0 txqueuelen:100
|
collisions:0 txqueuelen:100
|
||||||
Interrupt:9 Base address:0x1400
|
Interrupt:9 Base address:0x1400
|
||||||
|
|
||||||
6. Switch Configuration
|
5. Switch Configuration
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
For this section, "switch" refers to whatever system the
|
For this section, "switch" refers to whatever system the
|
||||||
@ -991,7 +1126,7 @@ transmit policy for an EtherChannel group; all three will interoperate
|
|||||||
with another EtherChannel group.
|
with another EtherChannel group.
|
||||||
|
|
||||||
|
|
||||||
7. 802.1q VLAN Support
|
6. 802.1q VLAN Support
|
||||||
======================
|
======================
|
||||||
|
|
||||||
It is possible to configure VLAN devices over a bond interface
|
It is possible to configure VLAN devices over a bond interface
|
||||||
@ -1042,7 +1177,7 @@ underlying device -- i.e. the bonding interface -- to promiscuous
|
|||||||
mode, which might not be what you want.
|
mode, which might not be what you want.
|
||||||
|
|
||||||
|
|
||||||
8. Link Monitoring
|
7. Link Monitoring
|
||||||
==================
|
==================
|
||||||
|
|
||||||
The bonding driver at present supports two schemes for
|
The bonding driver at present supports two schemes for
|
||||||
@ -1053,7 +1188,7 @@ monitor.
|
|||||||
bonding driver itself, it is not possible to enable both ARP and MII
|
bonding driver itself, it is not possible to enable both ARP and MII
|
||||||
monitoring simultaneously.
|
monitoring simultaneously.
|
||||||
|
|
||||||
8.1 ARP Monitor Operation
|
7.1 ARP Monitor Operation
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
The ARP monitor operates as its name suggests: it sends ARP
|
The ARP monitor operates as its name suggests: it sends ARP
|
||||||
@ -1071,7 +1206,7 @@ those slaves will stay down. If networking monitoring (tcpdump, etc)
|
|||||||
shows the ARP requests and replies on the network, then it may be that
|
shows the ARP requests and replies on the network, then it may be that
|
||||||
your device driver is not updating last_rx and trans_start.
|
your device driver is not updating last_rx and trans_start.
|
||||||
|
|
||||||
8.2 Configuring Multiple ARP Targets
|
7.2 Configuring Multiple ARP Targets
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
While ARP monitoring can be done with just one target, it can
|
While ARP monitoring can be done with just one target, it can
|
||||||
@ -1094,7 +1229,7 @@ alias bond0 bonding
|
|||||||
options bond0 arp_interval=60 arp_ip_target=192.168.0.100
|
options bond0 arp_interval=60 arp_ip_target=192.168.0.100
|
||||||
|
|
||||||
|
|
||||||
8.3 MII Monitor Operation
|
7.3 MII Monitor Operation
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
The MII monitor monitors only the carrier state of the local
|
The MII monitor monitors only the carrier state of the local
|
||||||
@ -1120,14 +1255,14 @@ does not support or had some error in processing both the MII register
|
|||||||
and ethtool requests), then the MII monitor will assume the link is
|
and ethtool requests), then the MII monitor will assume the link is
|
||||||
up.
|
up.
|
||||||
|
|
||||||
9. Potential Sources of Trouble
|
8. Potential Sources of Trouble
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
9.1 Adventures in Routing
|
8.1 Adventures in Routing
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
When bonding is configured, it is important that the slave
|
When bonding is configured, it is important that the slave
|
||||||
devices not have routes that supercede routes of the master (or,
|
devices not have routes that supersede routes of the master (or,
|
||||||
generally, not have routes at all). For example, suppose the bonding
|
generally, not have routes at all). For example, suppose the bonding
|
||||||
device bond0 has two slaves, eth0 and eth1, and the routing table is
|
device bond0 has two slaves, eth0 and eth1, and the routing table is
|
||||||
as follows:
|
as follows:
|
||||||
@ -1154,11 +1289,11 @@ by the state of the routing table.
|
|||||||
|
|
||||||
The solution here is simply to insure that slaves do not have
|
The solution here is simply to insure that slaves do not have
|
||||||
routes of their own, and if for some reason they must, those routes do
|
routes of their own, and if for some reason they must, those routes do
|
||||||
not supercede routes of their master. This should generally be the
|
not supersede routes of their master. This should generally be the
|
||||||
case, but unusual configurations or errant manual or automatic static
|
case, but unusual configurations or errant manual or automatic static
|
||||||
route additions may cause trouble.
|
route additions may cause trouble.
|
||||||
|
|
||||||
9.2 Ethernet Device Renaming
|
8.2 Ethernet Device Renaming
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
On systems with network configuration scripts that do not
|
On systems with network configuration scripts that do not
|
||||||
@ -1207,7 +1342,7 @@ modprobe with --ignore-install to cause the normal action to then take
|
|||||||
place. Full documentation on this can be found in the modprobe.conf
|
place. Full documentation on this can be found in the modprobe.conf
|
||||||
and modprobe manual pages.
|
and modprobe manual pages.
|
||||||
|
|
||||||
9.3. Painfully Slow Or No Failed Link Detection By Miimon
|
8.3. Painfully Slow Or No Failed Link Detection By Miimon
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
|
|
||||||
By default, bonding enables the use_carrier option, which
|
By default, bonding enables the use_carrier option, which
|
||||||
@ -1235,7 +1370,7 @@ carrier state. It has no way to determine the state of devices on or
|
|||||||
beyond other ports of a switch, or if a switch is refusing to pass
|
beyond other ports of a switch, or if a switch is refusing to pass
|
||||||
traffic while still maintaining carrier on.
|
traffic while still maintaining carrier on.
|
||||||
|
|
||||||
10. SNMP agents
|
9. SNMP agents
|
||||||
===============
|
===============
|
||||||
|
|
||||||
If running SNMP agents, the bonding driver should be loaded
|
If running SNMP agents, the bonding driver should be loaded
|
||||||
@ -1281,7 +1416,7 @@ ifDescr, the association between the IP address and IfIndex remains
|
|||||||
and SNMP functions such as Interface_Scan_Next will report that
|
and SNMP functions such as Interface_Scan_Next will report that
|
||||||
association.
|
association.
|
||||||
|
|
||||||
11. Promiscuous mode
|
10. Promiscuous mode
|
||||||
====================
|
====================
|
||||||
|
|
||||||
When running network monitoring tools, e.g., tcpdump, it is
|
When running network monitoring tools, e.g., tcpdump, it is
|
||||||
@ -1308,7 +1443,7 @@ sending to peers that are unassigned or if the load is unbalanced.
|
|||||||
the active slave changes (e.g., due to a link failure), the
|
the active slave changes (e.g., due to a link failure), the
|
||||||
promiscuous setting will be propagated to the new active slave.
|
promiscuous setting will be propagated to the new active slave.
|
||||||
|
|
||||||
12. Configuring Bonding for High Availability
|
11. Configuring Bonding for High Availability
|
||||||
=============================================
|
=============================================
|
||||||
|
|
||||||
High Availability refers to configurations that provide
|
High Availability refers to configurations that provide
|
||||||
@ -1318,7 +1453,7 @@ goal is to provide the maximum availability of network connectivity
|
|||||||
(i.e., the network always works), even though other configurations
|
(i.e., the network always works), even though other configurations
|
||||||
could provide higher throughput.
|
could provide higher throughput.
|
||||||
|
|
||||||
12.1 High Availability in a Single Switch Topology
|
11.1 High Availability in a Single Switch Topology
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
If two hosts (or a host and a single switch) are directly
|
If two hosts (or a host and a single switch) are directly
|
||||||
@ -1332,7 +1467,7 @@ the load will be rebalanced across the remaining devices.
|
|||||||
See Section 13, "Configuring Bonding for Maximum Throughput"
|
See Section 13, "Configuring Bonding for Maximum Throughput"
|
||||||
for information on configuring bonding with one peer device.
|
for information on configuring bonding with one peer device.
|
||||||
|
|
||||||
12.2 High Availability in a Multiple Switch Topology
|
11.2 High Availability in a Multiple Switch Topology
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
|
|
||||||
With multiple switches, the configuration of bonding and the
|
With multiple switches, the configuration of bonding and the
|
||||||
@ -1359,7 +1494,7 @@ switches (ISL, or inter switch link), and multiple ports connecting to
|
|||||||
the outside world ("port3" on each switch). There is no technical
|
the outside world ("port3" on each switch). There is no technical
|
||||||
reason that this could not be extended to a third switch.
|
reason that this could not be extended to a third switch.
|
||||||
|
|
||||||
12.2.1 HA Bonding Mode Selection for Multiple Switch Topology
|
11.2.1 HA Bonding Mode Selection for Multiple Switch Topology
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
|
||||||
In a topology such as the example above, the active-backup and
|
In a topology such as the example above, the active-backup and
|
||||||
@ -1381,7 +1516,7 @@ broadcast: This mode is really a special purpose mode, and is suitable
|
|||||||
necessary for some specific one-way traffic to reach both
|
necessary for some specific one-way traffic to reach both
|
||||||
independent networks, then the broadcast mode may be suitable.
|
independent networks, then the broadcast mode may be suitable.
|
||||||
|
|
||||||
12.2.2 HA Link Monitoring Selection for Multiple Switch Topology
|
11.2.2 HA Link Monitoring Selection for Multiple Switch Topology
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
The choice of link monitoring ultimately depends upon your
|
The choice of link monitoring ultimately depends upon your
|
||||||
@ -1402,10 +1537,10 @@ regardless of which switch is active, the ARP monitor has a suitable
|
|||||||
target to query.
|
target to query.
|
||||||
|
|
||||||
|
|
||||||
13. Configuring Bonding for Maximum Throughput
|
12. Configuring Bonding for Maximum Throughput
|
||||||
==============================================
|
==============================================
|
||||||
|
|
||||||
13.1 Maximizing Throughput in a Single Switch Topology
|
12.1 Maximizing Throughput in a Single Switch Topology
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|
||||||
In a single switch configuration, the best method to maximize
|
In a single switch configuration, the best method to maximize
|
||||||
@ -1476,7 +1611,7 @@ destination to make load balancing decisions. The behavior of each
|
|||||||
mode is described below.
|
mode is described below.
|
||||||
|
|
||||||
|
|
||||||
13.1.1 MT Bonding Mode Selection for Single Switch Topology
|
12.1.1 MT Bonding Mode Selection for Single Switch Topology
|
||||||
-----------------------------------------------------------
|
-----------------------------------------------------------
|
||||||
|
|
||||||
This configuration is the easiest to set up and to understand,
|
This configuration is the easiest to set up and to understand,
|
||||||
@ -1607,7 +1742,7 @@ balance-alb: This mode is everything that balance-tlb is, and more.
|
|||||||
device driver must support changing the hardware address while
|
device driver must support changing the hardware address while
|
||||||
the device is open.
|
the device is open.
|
||||||
|
|
||||||
13.1.2 MT Link Monitoring for Single Switch Topology
|
12.1.2 MT Link Monitoring for Single Switch Topology
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
|
|
||||||
The choice of link monitoring may largely depend upon which
|
The choice of link monitoring may largely depend upon which
|
||||||
@ -1616,7 +1751,7 @@ support the use of the ARP monitor, and are thus restricted to using
|
|||||||
the MII monitor (which does not provide as high a level of end to end
|
the MII monitor (which does not provide as high a level of end to end
|
||||||
assurance as the ARP monitor).
|
assurance as the ARP monitor).
|
||||||
|
|
||||||
13.2 Maximum Throughput in a Multiple Switch Topology
|
12.2 Maximum Throughput in a Multiple Switch Topology
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
|
|
||||||
Multiple switches may be utilized to optimize for throughput
|
Multiple switches may be utilized to optimize for throughput
|
||||||
@ -1651,7 +1786,7 @@ a single 72 port switch.
|
|||||||
can be equipped with an additional network device connected to an
|
can be equipped with an additional network device connected to an
|
||||||
external network; this host then additionally acts as a gateway.
|
external network; this host then additionally acts as a gateway.
|
||||||
|
|
||||||
13.2.1 MT Bonding Mode Selection for Multiple Switch Topology
|
12.2.1 MT Bonding Mode Selection for Multiple Switch Topology
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
|
||||||
In actual practice, the bonding mode typically employed in
|
In actual practice, the bonding mode typically employed in
|
||||||
@ -1664,7 +1799,7 @@ packets has arrived). When employed in this fashion, the balance-rr
|
|||||||
mode allows individual connections between two hosts to effectively
|
mode allows individual connections between two hosts to effectively
|
||||||
utilize greater than one interface's bandwidth.
|
utilize greater than one interface's bandwidth.
|
||||||
|
|
||||||
13.2.2 MT Link Monitoring for Multiple Switch Topology
|
12.2.2 MT Link Monitoring for Multiple Switch Topology
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
|
|
||||||
Again, in actual practice, the MII monitor is most often used
|
Again, in actual practice, the MII monitor is most often used
|
||||||
@ -1674,10 +1809,10 @@ advantages over the MII monitor are mitigated by the volume of probes
|
|||||||
needed as the number of systems involved grows (remember that each
|
needed as the number of systems involved grows (remember that each
|
||||||
host in the network is configured with bonding).
|
host in the network is configured with bonding).
|
||||||
|
|
||||||
14. Switch Behavior Issues
|
13. Switch Behavior Issues
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
14.1 Link Establishment and Failover Delays
|
13.1 Link Establishment and Failover Delays
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
Some switches exhibit undesirable behavior with regard to the
|
Some switches exhibit undesirable behavior with regard to the
|
||||||
@ -1712,7 +1847,7 @@ switches take a long time to go into backup mode, it may be desirable
|
|||||||
to not activate a backup interface immediately after a link goes down.
|
to not activate a backup interface immediately after a link goes down.
|
||||||
Failover may be delayed via the downdelay bonding module option.
|
Failover may be delayed via the downdelay bonding module option.
|
||||||
|
|
||||||
14.2 Duplicated Incoming Packets
|
13.2 Duplicated Incoming Packets
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
It is not uncommon to observe a short burst of duplicated
|
It is not uncommon to observe a short burst of duplicated
|
||||||
@ -1751,14 +1886,14 @@ behavior, it can be induced by clearing the MAC forwarding table (on
|
|||||||
most Cisco switches, the privileged command "clear mac address-table
|
most Cisco switches, the privileged command "clear mac address-table
|
||||||
dynamic" will accomplish this).
|
dynamic" will accomplish this).
|
||||||
|
|
||||||
15. Hardware Specific Considerations
|
14. Hardware Specific Considerations
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
This section contains additional information for configuring
|
This section contains additional information for configuring
|
||||||
bonding on specific hardware platforms, or for interfacing bonding
|
bonding on specific hardware platforms, or for interfacing bonding
|
||||||
with particular switches or other devices.
|
with particular switches or other devices.
|
||||||
|
|
||||||
15.1 IBM BladeCenter
|
14.1 IBM BladeCenter
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
This applies to the JS20 and similar systems.
|
This applies to the JS20 and similar systems.
|
||||||
@ -1861,7 +1996,7 @@ bonding driver.
|
|||||||
avoid fail-over delay issues when using bonding.
|
avoid fail-over delay issues when using bonding.
|
||||||
|
|
||||||
|
|
||||||
16. Frequently Asked Questions
|
15. Frequently Asked Questions
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
1. Is it SMP safe?
|
1. Is it SMP safe?
|
||||||
@ -1925,7 +2060,7 @@ not have special switch requirements, but do need device drivers that
|
|||||||
support specific features (described in the appropriate section under
|
support specific features (described in the appropriate section under
|
||||||
module parameters, above).
|
module parameters, above).
|
||||||
|
|
||||||
In 802.3ad mode, it works with with systems that support IEEE
|
In 802.3ad mode, it works with systems that support IEEE
|
||||||
802.3ad Dynamic Link Aggregation. Most managed and many unmanaged
|
802.3ad Dynamic Link Aggregation. Most managed and many unmanaged
|
||||||
switches currently available support 802.3ad.
|
switches currently available support 802.3ad.
|
||||||
|
|
||||||
|
@ -362,6 +362,13 @@ tcp_workaround_signed_windows - BOOLEAN
|
|||||||
not receive a window scaling option from them.
|
not receive a window scaling option from them.
|
||||||
Default: 0
|
Default: 0
|
||||||
|
|
||||||
|
tcp_slow_start_after_idle - BOOLEAN
|
||||||
|
If set, provide RFC2861 behavior and time out the congestion
|
||||||
|
window after an idle period. An idle period is defined at
|
||||||
|
the current RTO. If unset, the congestion window will not
|
||||||
|
be timed out after an idle period.
|
||||||
|
Default: 1
|
||||||
|
|
||||||
IP Variables:
|
IP Variables:
|
||||||
|
|
||||||
ip_local_port_range - 2 INTEGERS
|
ip_local_port_range - 2 INTEGERS
|
||||||
|
@ -42,9 +42,9 @@ dev->get_stats:
|
|||||||
Context: nominally process, but don't sleep inside an rwlock
|
Context: nominally process, but don't sleep inside an rwlock
|
||||||
|
|
||||||
dev->hard_start_xmit:
|
dev->hard_start_xmit:
|
||||||
Synchronization: dev->xmit_lock spinlock.
|
Synchronization: netif_tx_lock spinlock.
|
||||||
When the driver sets NETIF_F_LLTX in dev->features this will be
|
When the driver sets NETIF_F_LLTX in dev->features this will be
|
||||||
called without holding xmit_lock. In this case the driver
|
called without holding netif_tx_lock. In this case the driver
|
||||||
has to lock by itself when needed. It is recommended to use a try lock
|
has to lock by itself when needed. It is recommended to use a try lock
|
||||||
for this and return -1 when the spin lock fails.
|
for this and return -1 when the spin lock fails.
|
||||||
The locking there should also properly protect against
|
The locking there should also properly protect against
|
||||||
@ -62,12 +62,12 @@ dev->hard_start_xmit:
|
|||||||
Only valid when NETIF_F_LLTX is set.
|
Only valid when NETIF_F_LLTX is set.
|
||||||
|
|
||||||
dev->tx_timeout:
|
dev->tx_timeout:
|
||||||
Synchronization: dev->xmit_lock spinlock.
|
Synchronization: netif_tx_lock spinlock.
|
||||||
Context: BHs disabled
|
Context: BHs disabled
|
||||||
Notes: netif_queue_stopped() is guaranteed true
|
Notes: netif_queue_stopped() is guaranteed true
|
||||||
|
|
||||||
dev->set_multicast_list:
|
dev->set_multicast_list:
|
||||||
Synchronization: dev->xmit_lock spinlock.
|
Synchronization: netif_tx_lock spinlock.
|
||||||
Context: BHs disabled
|
Context: BHs disabled
|
||||||
|
|
||||||
dev->poll:
|
dev->poll:
|
||||||
|
@ -1425,6 +1425,8 @@ P: Jesse Brandeburg
|
|||||||
M: jesse.brandeburg@intel.com
|
M: jesse.brandeburg@intel.com
|
||||||
P: Jeff Kirsher
|
P: Jeff Kirsher
|
||||||
M: jeffrey.t.kirsher@intel.com
|
M: jeffrey.t.kirsher@intel.com
|
||||||
|
P: Auke Kok
|
||||||
|
M: auke-jan.h.kok@intel.com
|
||||||
W: http://sourceforge.net/projects/e1000/
|
W: http://sourceforge.net/projects/e1000/
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
@ -1437,6 +1439,8 @@ P: Jesse Brandeburg
|
|||||||
M: jesse.brandeburg@intel.com
|
M: jesse.brandeburg@intel.com
|
||||||
P: Jeff Kirsher
|
P: Jeff Kirsher
|
||||||
M: jeffrey.t.kirsher@intel.com
|
M: jeffrey.t.kirsher@intel.com
|
||||||
|
P: Auke Kok
|
||||||
|
M: auke-jan.h.kok@intel.com
|
||||||
W: http://sourceforge.net/projects/e1000/
|
W: http://sourceforge.net/projects/e1000/
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
@ -1449,6 +1453,8 @@ P: John Ronciak
|
|||||||
M: john.ronciak@intel.com
|
M: john.ronciak@intel.com
|
||||||
P: Jesse Brandeburg
|
P: Jesse Brandeburg
|
||||||
M: jesse.brandeburg@intel.com
|
M: jesse.brandeburg@intel.com
|
||||||
|
P: Auke Kok
|
||||||
|
M: auke-jan.h.kok@intel.com
|
||||||
W: http://sourceforge.net/projects/e1000/
|
W: http://sourceforge.net/projects/e1000/
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 17
|
SUBLEVEL = 17
|
||||||
EXTRAVERSION =-rc6
|
EXTRAVERSION =
|
||||||
NAME=Crazed Snow-Weasel
|
NAME=Crazed Snow-Weasel
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -453,7 +453,7 @@ config ALPHA_IRONGATE
|
|||||||
|
|
||||||
config GENERIC_HWEIGHT
|
config GENERIC_HWEIGHT
|
||||||
bool
|
bool
|
||||||
default y if !ALPHA_EV6 && !ALPHA_EV67
|
default y if !ALPHA_EV67
|
||||||
|
|
||||||
config ALPHA_AVANTI
|
config ALPHA_AVANTI
|
||||||
bool
|
bool
|
||||||
|
@ -111,21 +111,21 @@ static void __init ts72xx_map_io(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char ts72xx_rtc_readb(unsigned long addr)
|
static unsigned char ts72xx_rtc_readbyte(unsigned long addr)
|
||||||
{
|
{
|
||||||
__raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
|
__raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
|
||||||
return __raw_readb(TS72XX_RTC_DATA_VIRT_BASE);
|
return __raw_readb(TS72XX_RTC_DATA_VIRT_BASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ts72xx_rtc_writeb(unsigned char value, unsigned long addr)
|
static void ts72xx_rtc_writebyte(unsigned char value, unsigned long addr)
|
||||||
{
|
{
|
||||||
__raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
|
__raw_writeb(addr, TS72XX_RTC_INDEX_VIRT_BASE);
|
||||||
__raw_writeb(value, TS72XX_RTC_DATA_VIRT_BASE);
|
__raw_writeb(value, TS72XX_RTC_DATA_VIRT_BASE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct m48t86_ops ts72xx_rtc_ops = {
|
static struct m48t86_ops ts72xx_rtc_ops = {
|
||||||
.readb = ts72xx_rtc_readb,
|
.readbyte = ts72xx_rtc_readbyte,
|
||||||
.writeb = ts72xx_rtc_writeb,
|
.writebyte = ts72xx_rtc_writebyte,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device ts72xx_rtc_device = {
|
static struct platform_device ts72xx_rtc_device = {
|
||||||
|
@ -127,7 +127,7 @@ static void
|
|||||||
imx_gpio_ack_irq(unsigned int irq)
|
imx_gpio_ack_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, irq);
|
DEBUG_IRQ("%s: irq %d\n", __FUNCTION__, irq);
|
||||||
ISR(IRQ_TO_REG(irq)) |= 1 << ((irq - IRQ_GPIOA(0)) % 32);
|
ISR(IRQ_TO_REG(irq)) = 1 << ((irq - IRQ_GPIOA(0)) % 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -232,8 +232,6 @@ static void __init intcp_init_irq(void)
|
|||||||
for (i = IRQ_PIC_START; i <= IRQ_PIC_END; i++) {
|
for (i = IRQ_PIC_START; i <= IRQ_PIC_END; i++) {
|
||||||
if (i == 11)
|
if (i == 11)
|
||||||
i = 22;
|
i = 22;
|
||||||
if (i == IRQ_CP_CPPLDINT)
|
|
||||||
i++;
|
|
||||||
if (i == 29)
|
if (i == 29)
|
||||||
break;
|
break;
|
||||||
set_irq_chip(i, &pic_chip);
|
set_irq_chip(i, &pic_chip);
|
||||||
@ -259,8 +257,7 @@ static void __init intcp_init_irq(void)
|
|||||||
set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
|
set_irq_flags(i, IRQF_VALID | IRQF_PROBE);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_irq_handler(IRQ_CP_CPPLDINT, sic_handle_irq);
|
set_irq_chained_handler(IRQ_CP_CPPLDINT, sic_handle_irq);
|
||||||
pic_unmask_irq(IRQ_CP_CPPLDINT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -371,6 +371,7 @@ static int spitz_ohci_init(struct device *dev)
|
|||||||
static struct pxaohci_platform_data spitz_ohci_platform_data = {
|
static struct pxaohci_platform_data spitz_ohci_platform_data = {
|
||||||
.port_mode = PMM_NPS_MODE,
|
.port_mode = PMM_NPS_MODE,
|
||||||
.init = spitz_ohci_init,
|
.init = spitz_ohci_init,
|
||||||
|
.power_budget = 150,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,6 +59,14 @@ neponset_irq_handler(unsigned int irq, struct irqdesc *desc, struct pt_regs *reg
|
|||||||
if (irr & (IRR_ETHERNET | IRR_USAR)) {
|
if (irr & (IRR_ETHERNET | IRR_USAR)) {
|
||||||
desc->chip->mask(irq);
|
desc->chip->mask(irq);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ack the interrupt now to prevent re-entering
|
||||||
|
* this neponset handler. Again, this is safe
|
||||||
|
* since we'll check the IRR register prior to
|
||||||
|
* leaving.
|
||||||
|
*/
|
||||||
|
desc->chip->ack(irq);
|
||||||
|
|
||||||
if (irr & IRR_ETHERNET) {
|
if (irr & IRR_ETHERNET) {
|
||||||
d = irq_desc + IRQ_NEPONSET_SMC9196;
|
d = irq_desc + IRQ_NEPONSET_SMC9196;
|
||||||
desc_handle_irq(IRQ_NEPONSET_SMC9196, d, regs);
|
desc_handle_irq(IRQ_NEPONSET_SMC9196, d, regs);
|
||||||
|
@ -112,10 +112,9 @@ void __init versatile_init_irq(void)
|
|||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
vic_init(VA_VIC_BASE, IRQ_VIC_START, ~(1 << 31));
|
vic_init(VA_VIC_BASE, IRQ_VIC_START, ~0);
|
||||||
|
|
||||||
set_irq_handler(IRQ_VICSOURCE31, sic_handle_irq);
|
set_irq_chained_handler(IRQ_VICSOURCE31, sic_handle_irq);
|
||||||
enable_irq(IRQ_VICSOURCE31);
|
|
||||||
|
|
||||||
/* Do second interrupt controller */
|
/* Do second interrupt controller */
|
||||||
writel(~0, VA_SIC_BASE + SIC_IRQ_ENABLE_CLEAR);
|
writel(~0, VA_SIC_BASE + SIC_IRQ_ENABLE_CLEAR);
|
||||||
|
@ -5,17 +5,34 @@
|
|||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
#include <linux/acpi.h>
|
||||||
|
|
||||||
#include <asm/pci-direct.h>
|
#include <asm/pci-direct.h>
|
||||||
#include <asm/acpi.h>
|
#include <asm/acpi.h>
|
||||||
#include <asm/apic.h>
|
#include <asm/apic.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI
|
||||||
|
|
||||||
|
static int nvidia_hpet_detected __initdata;
|
||||||
|
|
||||||
|
static int __init nvidia_hpet_check(unsigned long phys, unsigned long size)
|
||||||
|
{
|
||||||
|
nvidia_hpet_detected = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int __init check_bridge(int vendor, int device)
|
static int __init check_bridge(int vendor, int device)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
/* According to Nvidia all timer overrides are bogus. Just ignore
|
/* According to Nvidia all timer overrides are bogus unless HPET
|
||||||
them all. */
|
is enabled. */
|
||||||
if (vendor == PCI_VENDOR_ID_NVIDIA) {
|
if (vendor == PCI_VENDOR_ID_NVIDIA) {
|
||||||
acpi_skip_timer_override = 1;
|
nvidia_hpet_detected = 0;
|
||||||
|
acpi_table_parse(ACPI_HPET, nvidia_hpet_check);
|
||||||
|
if (nvidia_hpet_detected == 0) {
|
||||||
|
acpi_skip_timer_override = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (vendor == PCI_VENDOR_ID_ATI && timer_over_8254 == 1) {
|
if (vendor == PCI_VENDOR_ID_ATI && timer_over_8254 == 1) {
|
||||||
|
@ -104,7 +104,7 @@ acpi_processor_set_performance (
|
|||||||
{
|
{
|
||||||
u16 port = 0;
|
u16 port = 0;
|
||||||
u8 bit_width = 0;
|
u8 bit_width = 0;
|
||||||
int ret = 0;
|
int ret;
|
||||||
u32 value = 0;
|
u32 value = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
struct cpufreq_freqs cpufreq_freqs;
|
struct cpufreq_freqs cpufreq_freqs;
|
||||||
@ -195,7 +195,6 @@ acpi_processor_set_performance (
|
|||||||
udelay(10);
|
udelay(10);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
i = 0;
|
|
||||||
value = (u32) data->acpi_data.states[state].status;
|
value = (u32) data->acpi_data.states[state].status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,14 +443,15 @@ static struct freq_attr* acpi_cpufreq_attr[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct cpufreq_driver acpi_cpufreq_driver = {
|
static struct cpufreq_driver acpi_cpufreq_driver = {
|
||||||
.verify = acpi_cpufreq_verify,
|
.verify = acpi_cpufreq_verify,
|
||||||
.target = acpi_cpufreq_target,
|
.target = acpi_cpufreq_target,
|
||||||
.init = acpi_cpufreq_cpu_init,
|
.init = acpi_cpufreq_cpu_init,
|
||||||
.exit = acpi_cpufreq_cpu_exit,
|
.exit = acpi_cpufreq_cpu_exit,
|
||||||
.resume = acpi_cpufreq_resume,
|
.resume = acpi_cpufreq_resume,
|
||||||
.name = "acpi-cpufreq",
|
.name = "acpi-cpufreq",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.attr = acpi_cpufreq_attr,
|
.attr = acpi_cpufreq_attr,
|
||||||
|
.flags = CPUFREQ_STICKY,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* (C) 2004 Sebastian Witt <se.witt@gmx.net>
|
* (C) 2004-2006 Sebastian Witt <se.witt@gmx.net>
|
||||||
*
|
*
|
||||||
* Licensed under the terms of the GNU GPL License version 2.
|
* Licensed under the terms of the GNU GPL License version 2.
|
||||||
* Based upon reverse engineered information
|
* Based upon reverse engineered information
|
||||||
@ -90,7 +90,7 @@ static int nforce2_calc_pll(unsigned int fsb)
|
|||||||
|
|
||||||
/* Try to calculate multiplier and divider up to 4 times */
|
/* Try to calculate multiplier and divider up to 4 times */
|
||||||
while (((mul == 0) || (div == 0)) && (tried <= 3)) {
|
while (((mul == 0) || (div == 0)) && (tried <= 3)) {
|
||||||
for (xdiv = 1; xdiv <= 0x80; xdiv++)
|
for (xdiv = 2; xdiv <= 0x80; xdiv++)
|
||||||
for (xmul = 1; xmul <= 0xfe; xmul++)
|
for (xmul = 1; xmul <= 0xfe; xmul++)
|
||||||
if (nforce2_calc_fsb(NFORCE2_PLL(xmul, xdiv)) ==
|
if (nforce2_calc_fsb(NFORCE2_PLL(xmul, xdiv)) ==
|
||||||
fsb + tried) {
|
fsb + tried) {
|
||||||
@ -117,8 +117,7 @@ static void nforce2_write_pll(int pll)
|
|||||||
int temp;
|
int temp;
|
||||||
|
|
||||||
/* Set the pll addr. to 0x00 */
|
/* Set the pll addr. to 0x00 */
|
||||||
temp = 0x00;
|
pci_write_config_dword(nforce2_chipset_dev, NFORCE2_PLLADR, 0);
|
||||||
pci_write_config_dword(nforce2_chipset_dev, NFORCE2_PLLADR, temp);
|
|
||||||
|
|
||||||
/* Now write the value in all 64 registers */
|
/* Now write the value in all 64 registers */
|
||||||
for (temp = 0; temp <= 0x3f; temp++)
|
for (temp = 0; temp <= 0x3f; temp++)
|
||||||
@ -266,7 +265,7 @@ static int nforce2_target(struct cpufreq_policy *policy,
|
|||||||
if (freqs.old == freqs.new)
|
if (freqs.old == freqs.new)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
dprintk(KERN_INFO "cpufreq: Old CPU frequency %d kHz, new %d kHz\n",
|
dprintk("Old CPU frequency %d kHz, new %d kHz\n",
|
||||||
freqs.old, freqs.new);
|
freqs.old, freqs.new);
|
||||||
|
|
||||||
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
|
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
|
||||||
@ -278,7 +277,7 @@ static int nforce2_target(struct cpufreq_policy *policy,
|
|||||||
printk(KERN_ERR "cpufreq: Changing FSB to %d failed\n",
|
printk(KERN_ERR "cpufreq: Changing FSB to %d failed\n",
|
||||||
target_fsb);
|
target_fsb);
|
||||||
else
|
else
|
||||||
dprintk(KERN_INFO "cpufreq: Changed FSB successfully to %d\n",
|
dprintk("Changed FSB successfully to %d\n",
|
||||||
target_fsb);
|
target_fsb);
|
||||||
|
|
||||||
/* Enable IRQs */
|
/* Enable IRQs */
|
||||||
|
@ -77,13 +77,17 @@ static char speedbuffer[8];
|
|||||||
|
|
||||||
static char *print_speed(int speed)
|
static char *print_speed(int speed)
|
||||||
{
|
{
|
||||||
if (speed > 1000) {
|
if (speed < 1000) {
|
||||||
if (speed%1000 == 0)
|
snprintf(speedbuffer, sizeof(speedbuffer),"%dMHz", speed);
|
||||||
sprintf (speedbuffer, "%dGHz", speed/1000);
|
return speedbuffer;
|
||||||
else
|
}
|
||||||
sprintf (speedbuffer, "%d.%dGHz", speed/1000, (speed%1000)/100);
|
|
||||||
} else
|
if (speed%1000 == 0)
|
||||||
sprintf (speedbuffer, "%dMHz", speed);
|
snprintf(speedbuffer, sizeof(speedbuffer),
|
||||||
|
"%dGHz", speed/1000);
|
||||||
|
else
|
||||||
|
snprintf(speedbuffer, sizeof(speedbuffer),
|
||||||
|
"%d.%dGHz", speed/1000, (speed%1000)/100);
|
||||||
|
|
||||||
return speedbuffer;
|
return speedbuffer;
|
||||||
}
|
}
|
||||||
@ -675,7 +679,7 @@ static int __init longhaul_init(void)
|
|||||||
|
|
||||||
static void __exit longhaul_exit(void)
|
static void __exit longhaul_exit(void)
|
||||||
{
|
{
|
||||||
int i=0;
|
int i;
|
||||||
|
|
||||||
for (i=0; i < numscales; i++) {
|
for (i=0; i < numscales; i++) {
|
||||||
if (clock_ratio[i] == maxmult) {
|
if (clock_ratio[i] == maxmult) {
|
||||||
|
@ -223,7 +223,6 @@ static unsigned int __init longrun_determine_freqs(unsigned int *low_freq,
|
|||||||
/* set to 0 to try_hi perf_pctg */
|
/* set to 0 to try_hi perf_pctg */
|
||||||
msr_lo &= 0xFFFFFF80;
|
msr_lo &= 0xFFFFFF80;
|
||||||
msr_hi &= 0xFFFFFF80;
|
msr_hi &= 0xFFFFFF80;
|
||||||
msr_lo |= 0;
|
|
||||||
msr_hi |= try_hi;
|
msr_hi |= try_hi;
|
||||||
wrmsr(MSR_TMTA_LONGRUN_CTRL, msr_lo, msr_hi);
|
wrmsr(MSR_TMTA_LONGRUN_CTRL, msr_lo, msr_hi);
|
||||||
|
|
||||||
|
@ -452,23 +452,23 @@ static int powernow_decode_bios (int maxfid, int startvid)
|
|||||||
|
|
||||||
pst = (struct pst_s *) p;
|
pst = (struct pst_s *) p;
|
||||||
|
|
||||||
for (i = 0 ; i <psb->numpst; i++) {
|
for (j=0; j<psb->numpst; j++) {
|
||||||
pst = (struct pst_s *) p;
|
pst = (struct pst_s *) p;
|
||||||
number_scales = pst->numpstates;
|
number_scales = pst->numpstates;
|
||||||
|
|
||||||
if ((etuple == pst->cpuid) && check_fsb(pst->fsbspeed) &&
|
if ((etuple == pst->cpuid) && check_fsb(pst->fsbspeed) &&
|
||||||
(maxfid==pst->maxfid) && (startvid==pst->startvid))
|
(maxfid==pst->maxfid) && (startvid==pst->startvid))
|
||||||
{
|
{
|
||||||
dprintk ("PST:%d (@%p)\n", i, pst);
|
dprintk ("PST:%d (@%p)\n", j, pst);
|
||||||
dprintk (" cpuid: 0x%x fsb: %d maxFID: 0x%x startvid: 0x%x\n",
|
dprintk (" cpuid: 0x%x fsb: %d maxFID: 0x%x startvid: 0x%x\n",
|
||||||
pst->cpuid, pst->fsbspeed, pst->maxfid, pst->startvid);
|
pst->cpuid, pst->fsbspeed, pst->maxfid, pst->startvid);
|
||||||
|
|
||||||
ret = get_ranges ((char *) pst + sizeof (struct pst_s));
|
ret = get_ranges ((char *) pst + sizeof (struct pst_s));
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
unsigned int k;
|
||||||
p = (char *) pst + sizeof (struct pst_s);
|
p = (char *) pst + sizeof (struct pst_s);
|
||||||
for (j=0 ; j < number_scales; j++)
|
for (k=0; k<number_scales; k++)
|
||||||
p+=2;
|
p+=2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -581,10 +581,7 @@ static int __init powernow_cpu_init (struct cpufreq_policy *policy)
|
|||||||
|
|
||||||
rdmsrl (MSR_K7_FID_VID_STATUS, fidvidstatus.val);
|
rdmsrl (MSR_K7_FID_VID_STATUS, fidvidstatus.val);
|
||||||
|
|
||||||
/* recalibrate cpu_khz */
|
recalibrate_cpu_khz();
|
||||||
result = recalibrate_cpu_khz();
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
fsb = (10 * cpu_khz) / fid_codes[fidvidstatus.bits.CFID];
|
fsb = (10 * cpu_khz) / fid_codes[fidvidstatus.bits.CFID];
|
||||||
if (!fsb) {
|
if (!fsb) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* (c) 2003, 2004, 2005 Advanced Micro Devices, Inc.
|
* (c) 2003-2006 Advanced Micro Devices, Inc.
|
||||||
* Your use of this code is subject to the terms and conditions of the
|
* Your use of this code is subject to the terms and conditions of the
|
||||||
* GNU general public license version 2. See "COPYING" or
|
* GNU general public license version 2. See "COPYING" or
|
||||||
* http://www.gnu.org/licenses/gpl.html
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
@ -14,13 +14,13 @@
|
|||||||
* Based upon datasheets & sample CPUs kindly provided by AMD.
|
* Based upon datasheets & sample CPUs kindly provided by AMD.
|
||||||
*
|
*
|
||||||
* Valuable input gratefully received from Dave Jones, Pavel Machek,
|
* Valuable input gratefully received from Dave Jones, Pavel Machek,
|
||||||
* Dominik Brodowski, and others.
|
* Dominik Brodowski, Jacob Shin, and others.
|
||||||
* Originally developed by Paul Devriendt.
|
* Originally developed by Paul Devriendt.
|
||||||
* Processor information obtained from Chapter 9 (Power and Thermal Management)
|
* Processor information obtained from Chapter 9 (Power and Thermal Management)
|
||||||
* of the "BIOS and Kernel Developer's Guide for the AMD Athlon 64 and AMD
|
* of the "BIOS and Kernel Developer's Guide for the AMD Athlon 64 and AMD
|
||||||
* Opteron Processors" available for download from www.amd.com
|
* Opteron Processors" available for download from www.amd.com
|
||||||
*
|
*
|
||||||
* Tables for specific CPUs can be infrerred from
|
* Tables for specific CPUs can be inferred from
|
||||||
* http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/30430.pdf
|
* http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/30430.pdf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
#define PFX "powernow-k8: "
|
#define PFX "powernow-k8: "
|
||||||
#define BFX PFX "BIOS error: "
|
#define BFX PFX "BIOS error: "
|
||||||
#define VERSION "version 1.60.2"
|
#define VERSION "version 2.00.00"
|
||||||
#include "powernow-k8.h"
|
#include "powernow-k8.h"
|
||||||
|
|
||||||
/* serialize freq changes */
|
/* serialize freq changes */
|
||||||
@ -54,6 +54,8 @@ static DEFINE_MUTEX(fidvid_mutex);
|
|||||||
|
|
||||||
static struct powernow_k8_data *powernow_data[NR_CPUS];
|
static struct powernow_k8_data *powernow_data[NR_CPUS];
|
||||||
|
|
||||||
|
static int cpu_family = CPU_OPTERON;
|
||||||
|
|
||||||
#ifndef CONFIG_SMP
|
#ifndef CONFIG_SMP
|
||||||
static cpumask_t cpu_core_map[1];
|
static cpumask_t cpu_core_map[1];
|
||||||
#endif
|
#endif
|
||||||
@ -64,16 +66,36 @@ static u32 find_freq_from_fid(u32 fid)
|
|||||||
return 800 + (fid * 100);
|
return 800 + (fid * 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return a frequency in KHz, given an input fid */
|
/* Return a frequency in KHz, given an input fid */
|
||||||
static u32 find_khz_freq_from_fid(u32 fid)
|
static u32 find_khz_freq_from_fid(u32 fid)
|
||||||
{
|
{
|
||||||
return 1000 * find_freq_from_fid(fid);
|
return 1000 * find_freq_from_fid(fid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return a voltage in miliVolts, given an input vid */
|
/* Return a frequency in MHz, given an input fid and did */
|
||||||
static u32 find_millivolts_from_vid(struct powernow_k8_data *data, u32 vid)
|
static u32 find_freq_from_fiddid(u32 fid, u32 did)
|
||||||
{
|
{
|
||||||
return 1550-vid*25;
|
return 100 * (fid + 0x10) >> did;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 find_khz_freq_from_fiddid(u32 fid, u32 did)
|
||||||
|
{
|
||||||
|
return 1000 * find_freq_from_fiddid(fid, did);
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 find_fid_from_pstate(u32 pstate)
|
||||||
|
{
|
||||||
|
u32 hi, lo;
|
||||||
|
rdmsr(MSR_PSTATE_DEF_BASE + pstate, lo, hi);
|
||||||
|
return lo & HW_PSTATE_FID_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 find_did_from_pstate(u32 pstate)
|
||||||
|
{
|
||||||
|
u32 hi, lo;
|
||||||
|
rdmsr(MSR_PSTATE_DEF_BASE + pstate, lo, hi);
|
||||||
|
return (lo & HW_PSTATE_DID_MASK) >> HW_PSTATE_DID_SHIFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the vco fid for an input fid
|
/* Return the vco fid for an input fid
|
||||||
@ -98,6 +120,9 @@ static int pending_bit_stuck(void)
|
|||||||
{
|
{
|
||||||
u32 lo, hi;
|
u32 lo, hi;
|
||||||
|
|
||||||
|
if (cpu_family)
|
||||||
|
return 0;
|
||||||
|
|
||||||
rdmsr(MSR_FIDVID_STATUS, lo, hi);
|
rdmsr(MSR_FIDVID_STATUS, lo, hi);
|
||||||
return lo & MSR_S_LO_CHANGE_PENDING ? 1 : 0;
|
return lo & MSR_S_LO_CHANGE_PENDING ? 1 : 0;
|
||||||
}
|
}
|
||||||
@ -111,6 +136,14 @@ static int query_current_values_with_pending_wait(struct powernow_k8_data *data)
|
|||||||
u32 lo, hi;
|
u32 lo, hi;
|
||||||
u32 i = 0;
|
u32 i = 0;
|
||||||
|
|
||||||
|
if (cpu_family) {
|
||||||
|
rdmsr(MSR_PSTATE_STATUS, lo, hi);
|
||||||
|
i = lo & HW_PSTATE_MASK;
|
||||||
|
rdmsr(MSR_PSTATE_DEF_BASE + i, lo, hi);
|
||||||
|
data->currfid = lo & HW_PSTATE_FID_MASK;
|
||||||
|
data->currdid = (lo & HW_PSTATE_DID_MASK) >> HW_PSTATE_DID_SHIFT;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
do {
|
do {
|
||||||
if (i++ > 10000) {
|
if (i++ > 10000) {
|
||||||
dprintk("detected change pending stuck\n");
|
dprintk("detected change pending stuck\n");
|
||||||
@ -175,7 +208,7 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid)
|
|||||||
do {
|
do {
|
||||||
wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION);
|
wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION);
|
||||||
if (i++ > 100) {
|
if (i++ > 100) {
|
||||||
printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n");
|
printk(KERN_ERR PFX "Hardware error - pending bit very stuck - no further pstate changes possible\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
} while (query_current_values_with_pending_wait(data));
|
} while (query_current_values_with_pending_wait(data));
|
||||||
@ -255,7 +288,15 @@ static int decrease_vid_code_by_step(struct powernow_k8_data *data, u32 reqvid,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Change the fid and vid, by the 3 phases. */
|
/* Change hardware pstate by single MSR write */
|
||||||
|
static int transition_pstate(struct powernow_k8_data *data, u32 pstate)
|
||||||
|
{
|
||||||
|
wrmsr(MSR_PSTATE_CTRL, pstate, 0);
|
||||||
|
data->currfid = find_fid_from_pstate(pstate);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Change Opteron/Athlon64 fid and vid, by the 3 phases. */
|
||||||
static int transition_fid_vid(struct powernow_k8_data *data, u32 reqfid, u32 reqvid)
|
static int transition_fid_vid(struct powernow_k8_data *data, u32 reqfid, u32 reqvid)
|
||||||
{
|
{
|
||||||
if (core_voltage_pre_transition(data, reqvid))
|
if (core_voltage_pre_transition(data, reqvid))
|
||||||
@ -474,26 +515,35 @@ static int check_supported_cpu(unsigned int cpu)
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE);
|
eax = cpuid_eax(CPUID_PROCESSOR_SIGNATURE);
|
||||||
if ((eax & CPUID_XFAM) != CPUID_XFAM_K8)
|
if (((eax & CPUID_XFAM) != CPUID_XFAM_K8) &&
|
||||||
|
((eax & CPUID_XFAM) < CPUID_XFAM_10H))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (((eax & CPUID_USE_XFAM_XMOD) != CPUID_USE_XFAM_XMOD) ||
|
if ((eax & CPUID_XFAM) == CPUID_XFAM_K8) {
|
||||||
((eax & CPUID_XMOD) > CPUID_XMOD_REV_G)) {
|
if (((eax & CPUID_USE_XFAM_XMOD) != CPUID_USE_XFAM_XMOD) ||
|
||||||
printk(KERN_INFO PFX "Processor cpuid %x not supported\n", eax);
|
((eax & CPUID_XMOD) > CPUID_XMOD_REV_G)) {
|
||||||
goto out;
|
printk(KERN_INFO PFX "Processor cpuid %x not supported\n", eax);
|
||||||
}
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
eax = cpuid_eax(CPUID_GET_MAX_CAPABILITIES);
|
eax = cpuid_eax(CPUID_GET_MAX_CAPABILITIES);
|
||||||
if (eax < CPUID_FREQ_VOLT_CAPABILITIES) {
|
if (eax < CPUID_FREQ_VOLT_CAPABILITIES) {
|
||||||
printk(KERN_INFO PFX
|
printk(KERN_INFO PFX
|
||||||
"No frequency change capabilities detected\n");
|
"No frequency change capabilities detected\n");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, &edx);
|
cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, &edx);
|
||||||
if ((edx & P_STATE_TRANSITION_CAPABLE) != P_STATE_TRANSITION_CAPABLE) {
|
if ((edx & P_STATE_TRANSITION_CAPABLE) != P_STATE_TRANSITION_CAPABLE) {
|
||||||
printk(KERN_INFO PFX "Power state transitions not supported\n");
|
printk(KERN_INFO PFX "Power state transitions not supported\n");
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
} else { /* must be a HW Pstate capable processor */
|
||||||
|
cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, &edx);
|
||||||
|
if ((edx & USE_HW_PSTATE) == USE_HW_PSTATE)
|
||||||
|
cpu_family = CPU_HW_PSTATE;
|
||||||
|
else
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = 1;
|
rc = 1;
|
||||||
@ -547,12 +597,18 @@ static void print_basics(struct powernow_k8_data *data)
|
|||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
for (j = 0; j < data->numps; j++) {
|
for (j = 0; j < data->numps; j++) {
|
||||||
if (data->powernow_table[j].frequency != CPUFREQ_ENTRY_INVALID)
|
if (data->powernow_table[j].frequency != CPUFREQ_ENTRY_INVALID) {
|
||||||
printk(KERN_INFO PFX " %d : fid 0x%x (%d MHz), vid 0x%x (%d mV)\n", j,
|
if (cpu_family) {
|
||||||
|
printk(KERN_INFO PFX " %d : fid 0x%x gid 0x%x (%d MHz)\n", j, (data->powernow_table[j].index & 0xff00) >> 8,
|
||||||
|
(data->powernow_table[j].index & 0xff0000) >> 16,
|
||||||
|
data->powernow_table[j].frequency/1000);
|
||||||
|
} else {
|
||||||
|
printk(KERN_INFO PFX " %d : fid 0x%x (%d MHz), vid 0x%x\n", j,
|
||||||
data->powernow_table[j].index & 0xff,
|
data->powernow_table[j].index & 0xff,
|
||||||
data->powernow_table[j].frequency/1000,
|
data->powernow_table[j].frequency/1000,
|
||||||
data->powernow_table[j].index >> 8,
|
data->powernow_table[j].index >> 8);
|
||||||
find_millivolts_from_vid(data, data->powernow_table[j].index >> 8));
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (data->batps)
|
if (data->batps)
|
||||||
printk(KERN_INFO PFX "Only %d pstates on battery\n", data->batps);
|
printk(KERN_INFO PFX "Only %d pstates on battery\n", data->batps);
|
||||||
@ -702,7 +758,7 @@ static int find_psb_table(struct powernow_k8_data *data)
|
|||||||
#ifdef CONFIG_X86_POWERNOW_K8_ACPI
|
#ifdef CONFIG_X86_POWERNOW_K8_ACPI
|
||||||
static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index)
|
static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index)
|
||||||
{
|
{
|
||||||
if (!data->acpi_data.state_count)
|
if (!data->acpi_data.state_count || cpu_family)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
data->irt = (data->acpi_data.states[index].control >> IRT_SHIFT) & IRT_MASK;
|
data->irt = (data->acpi_data.states[index].control >> IRT_SHIFT) & IRT_MASK;
|
||||||
@ -715,9 +771,8 @@ static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned
|
|||||||
|
|
||||||
static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
|
static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
int cntlofreq = 0;
|
|
||||||
struct cpufreq_frequency_table *powernow_table;
|
struct cpufreq_frequency_table *powernow_table;
|
||||||
|
int ret_val;
|
||||||
|
|
||||||
if (acpi_processor_register_performance(&data->acpi_data, data->cpu)) {
|
if (acpi_processor_register_performance(&data->acpi_data, data->cpu)) {
|
||||||
dprintk("register performance failed: bad ACPI data\n");
|
dprintk("register performance failed: bad ACPI data\n");
|
||||||
@ -746,6 +801,85 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
|
|||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cpu_family)
|
||||||
|
ret_val = fill_powernow_table_pstate(data, powernow_table);
|
||||||
|
else
|
||||||
|
ret_val = fill_powernow_table_fidvid(data, powernow_table);
|
||||||
|
if (ret_val)
|
||||||
|
goto err_out_mem;
|
||||||
|
|
||||||
|
powernow_table[data->acpi_data.state_count].frequency = CPUFREQ_TABLE_END;
|
||||||
|
powernow_table[data->acpi_data.state_count].index = 0;
|
||||||
|
data->powernow_table = powernow_table;
|
||||||
|
|
||||||
|
/* fill in data */
|
||||||
|
data->numps = data->acpi_data.state_count;
|
||||||
|
print_basics(data);
|
||||||
|
powernow_k8_acpi_pst_values(data, 0);
|
||||||
|
|
||||||
|
/* notify BIOS that we exist */
|
||||||
|
acpi_processor_notify_smm(THIS_MODULE);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_out_mem:
|
||||||
|
kfree(powernow_table);
|
||||||
|
|
||||||
|
err_out:
|
||||||
|
acpi_processor_unregister_performance(&data->acpi_data, data->cpu);
|
||||||
|
|
||||||
|
/* data->acpi_data.state_count informs us at ->exit() whether ACPI was used */
|
||||||
|
data->acpi_data.state_count = 0;
|
||||||
|
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int fill_powernow_table_pstate(struct powernow_k8_data *data, struct cpufreq_frequency_table *powernow_table)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < data->acpi_data.state_count; i++) {
|
||||||
|
u32 index;
|
||||||
|
u32 hi = 0, lo = 0;
|
||||||
|
u32 fid;
|
||||||
|
u32 did;
|
||||||
|
|
||||||
|
index = data->acpi_data.states[i].control & HW_PSTATE_MASK;
|
||||||
|
if (index > MAX_HW_PSTATE) {
|
||||||
|
printk(KERN_ERR PFX "invalid pstate %d - bad value %d.\n", i, index);
|
||||||
|
printk(KERN_ERR PFX "Please report to BIOS manufacturer\n");
|
||||||
|
}
|
||||||
|
rdmsr(MSR_PSTATE_DEF_BASE + index, lo, hi);
|
||||||
|
if (!(hi & HW_PSTATE_VALID_MASK)) {
|
||||||
|
dprintk("invalid pstate %d, ignoring\n", index);
|
||||||
|
powernow_table[i].frequency = CPUFREQ_ENTRY_INVALID;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
fid = lo & HW_PSTATE_FID_MASK;
|
||||||
|
did = (lo & HW_PSTATE_DID_MASK) >> HW_PSTATE_DID_SHIFT;
|
||||||
|
|
||||||
|
dprintk(" %d : fid 0x%x, did 0x%x\n", index, fid, did);
|
||||||
|
|
||||||
|
powernow_table[i].index = index | (fid << HW_FID_INDEX_SHIFT) | (did << HW_DID_INDEX_SHIFT);
|
||||||
|
|
||||||
|
powernow_table[i].frequency = find_khz_freq_from_fiddid(fid, did);
|
||||||
|
|
||||||
|
if (powernow_table[i].frequency != (data->acpi_data.states[i].core_frequency * 1000)) {
|
||||||
|
printk(KERN_INFO PFX "invalid freq entries %u kHz vs. %u kHz\n",
|
||||||
|
powernow_table[i].frequency,
|
||||||
|
(unsigned int) (data->acpi_data.states[i].core_frequency * 1000));
|
||||||
|
powernow_table[i].frequency = CPUFREQ_ENTRY_INVALID;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int fill_powernow_table_fidvid(struct powernow_k8_data *data, struct cpufreq_frequency_table *powernow_table)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int cntlofreq = 0;
|
||||||
for (i = 0; i < data->acpi_data.state_count; i++) {
|
for (i = 0; i < data->acpi_data.state_count; i++) {
|
||||||
u32 fid;
|
u32 fid;
|
||||||
u32 vid;
|
u32 vid;
|
||||||
@ -786,7 +920,7 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
|
|||||||
if ((powernow_table[i].frequency != powernow_table[cntlofreq].frequency) ||
|
if ((powernow_table[i].frequency != powernow_table[cntlofreq].frequency) ||
|
||||||
(powernow_table[i].index != powernow_table[cntlofreq].index)) {
|
(powernow_table[i].index != powernow_table[cntlofreq].index)) {
|
||||||
printk(KERN_ERR PFX "Too many lo freq table entries\n");
|
printk(KERN_ERR PFX "Too many lo freq table entries\n");
|
||||||
goto err_out_mem;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintk("double low frequency table entry, ignoring it.\n");
|
dprintk("double low frequency table entry, ignoring it.\n");
|
||||||
@ -804,31 +938,7 @@ static int powernow_k8_cpu_init_acpi(struct powernow_k8_data *data)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
powernow_table[data->acpi_data.state_count].frequency = CPUFREQ_TABLE_END;
|
|
||||||
powernow_table[data->acpi_data.state_count].index = 0;
|
|
||||||
data->powernow_table = powernow_table;
|
|
||||||
|
|
||||||
/* fill in data */
|
|
||||||
data->numps = data->acpi_data.state_count;
|
|
||||||
print_basics(data);
|
|
||||||
powernow_k8_acpi_pst_values(data, 0);
|
|
||||||
|
|
||||||
/* notify BIOS that we exist */
|
|
||||||
acpi_processor_notify_smm(THIS_MODULE);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_out_mem:
|
|
||||||
kfree(powernow_table);
|
|
||||||
|
|
||||||
err_out:
|
|
||||||
acpi_processor_unregister_performance(&data->acpi_data, data->cpu);
|
|
||||||
|
|
||||||
/* data->acpi_data.state_count informs us at ->exit() whether ACPI was used */
|
|
||||||
data->acpi_data.state_count = 0;
|
|
||||||
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data)
|
static void powernow_k8_cpu_exit_acpi(struct powernow_k8_data *data)
|
||||||
@ -844,20 +954,20 @@ static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned
|
|||||||
#endif /* CONFIG_X86_POWERNOW_K8_ACPI */
|
#endif /* CONFIG_X86_POWERNOW_K8_ACPI */
|
||||||
|
|
||||||
/* Take a frequency, and issue the fid/vid transition command */
|
/* Take a frequency, and issue the fid/vid transition command */
|
||||||
static int transition_frequency(struct powernow_k8_data *data, unsigned int index)
|
static int transition_frequency_fidvid(struct powernow_k8_data *data, unsigned int index)
|
||||||
{
|
{
|
||||||
u32 fid;
|
u32 fid = 0;
|
||||||
u32 vid;
|
u32 vid = 0;
|
||||||
int res, i;
|
int res, i;
|
||||||
struct cpufreq_freqs freqs;
|
struct cpufreq_freqs freqs;
|
||||||
|
|
||||||
dprintk("cpu %d transition to index %u\n", smp_processor_id(), index);
|
dprintk("cpu %d transition to index %u\n", smp_processor_id(), index);
|
||||||
|
|
||||||
|
/* fid/vid correctness check for k8 */
|
||||||
/* fid are the lower 8 bits of the index we stored into
|
/* fid are the lower 8 bits of the index we stored into
|
||||||
* the cpufreq frequency table in find_psb_table, vid are
|
* the cpufreq frequency table in find_psb_table, vid
|
||||||
* the upper 8 bits.
|
* are the upper 8 bits.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
fid = data->powernow_table[index].index & 0xFF;
|
fid = data->powernow_table[index].index & 0xFF;
|
||||||
vid = (data->powernow_table[index].index & 0xFF00) >> 8;
|
vid = (data->powernow_table[index].index & 0xFF00) >> 8;
|
||||||
|
|
||||||
@ -881,22 +991,58 @@ static int transition_frequency(struct powernow_k8_data *data, unsigned int inde
|
|||||||
|
|
||||||
dprintk("cpu %d, changing to fid 0x%x, vid 0x%x\n",
|
dprintk("cpu %d, changing to fid 0x%x, vid 0x%x\n",
|
||||||
smp_processor_id(), fid, vid);
|
smp_processor_id(), fid, vid);
|
||||||
|
|
||||||
freqs.cpu = data->cpu;
|
|
||||||
freqs.old = find_khz_freq_from_fid(data->currfid);
|
freqs.old = find_khz_freq_from_fid(data->currfid);
|
||||||
freqs.new = find_khz_freq_from_fid(fid);
|
freqs.new = find_khz_freq_from_fid(fid);
|
||||||
for_each_cpu_mask(i, cpu_core_map[data->cpu]) {
|
|
||||||
|
for_each_cpu_mask(i, *(data->available_cores)) {
|
||||||
freqs.cpu = i;
|
freqs.cpu = i;
|
||||||
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
|
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = transition_fid_vid(data, fid, vid);
|
res = transition_fid_vid(data, fid, vid);
|
||||||
|
|
||||||
freqs.new = find_khz_freq_from_fid(data->currfid);
|
freqs.new = find_khz_freq_from_fid(data->currfid);
|
||||||
for_each_cpu_mask(i, cpu_core_map[data->cpu]) {
|
|
||||||
|
for_each_cpu_mask(i, *(data->available_cores)) {
|
||||||
freqs.cpu = i;
|
freqs.cpu = i;
|
||||||
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
|
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Take a frequency, and issue the hardware pstate transition command */
|
||||||
|
static int transition_frequency_pstate(struct powernow_k8_data *data, unsigned int index)
|
||||||
|
{
|
||||||
|
u32 fid = 0;
|
||||||
|
u32 did = 0;
|
||||||
|
u32 pstate = 0;
|
||||||
|
int res, i;
|
||||||
|
struct cpufreq_freqs freqs;
|
||||||
|
|
||||||
|
dprintk("cpu %d transition to index %u\n", smp_processor_id(), index);
|
||||||
|
|
||||||
|
/* get fid did for hardware pstate transition */
|
||||||
|
pstate = index & HW_PSTATE_MASK;
|
||||||
|
if (pstate > MAX_HW_PSTATE)
|
||||||
|
return 0;
|
||||||
|
fid = (index & HW_FID_INDEX_MASK) >> HW_FID_INDEX_SHIFT;
|
||||||
|
did = (index & HW_DID_INDEX_MASK) >> HW_DID_INDEX_SHIFT;
|
||||||
|
freqs.old = find_khz_freq_from_fiddid(data->currfid, data->currdid);
|
||||||
|
freqs.new = find_khz_freq_from_fiddid(fid, did);
|
||||||
|
|
||||||
|
for_each_cpu_mask(i, *(data->available_cores)) {
|
||||||
|
freqs.cpu = i;
|
||||||
|
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
res = transition_pstate(data, pstate);
|
||||||
|
data->currfid = find_fid_from_pstate(pstate);
|
||||||
|
data->currdid = find_did_from_pstate(pstate);
|
||||||
|
freqs.new = find_khz_freq_from_fiddid(data->currfid, data->currdid);
|
||||||
|
|
||||||
|
for_each_cpu_mask(i, *(data->available_cores)) {
|
||||||
|
freqs.cpu = i;
|
||||||
|
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -933,18 +1079,21 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi
|
|||||||
dprintk("targ: cpu %d, %d kHz, min %d, max %d, relation %d\n",
|
dprintk("targ: cpu %d, %d kHz, min %d, max %d, relation %d\n",
|
||||||
pol->cpu, targfreq, pol->min, pol->max, relation);
|
pol->cpu, targfreq, pol->min, pol->max, relation);
|
||||||
|
|
||||||
if (query_current_values_with_pending_wait(data)) {
|
if (query_current_values_with_pending_wait(data))
|
||||||
ret = -EIO;
|
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
|
||||||
|
|
||||||
dprintk("targ: curr fid 0x%x, vid 0x%x\n",
|
if (cpu_family)
|
||||||
|
dprintk("targ: curr fid 0x%x, did 0x%x\n",
|
||||||
|
data->currfid, data->currvid);
|
||||||
|
else {
|
||||||
|
dprintk("targ: curr fid 0x%x, vid 0x%x\n",
|
||||||
data->currfid, data->currvid);
|
data->currfid, data->currvid);
|
||||||
|
|
||||||
if ((checkvid != data->currvid) || (checkfid != data->currfid)) {
|
if ((checkvid != data->currvid) || (checkfid != data->currfid)) {
|
||||||
printk(KERN_INFO PFX
|
printk(KERN_INFO PFX
|
||||||
"error - out of sync, fix 0x%x 0x%x, vid 0x%x 0x%x\n",
|
"error - out of sync, fix 0x%x 0x%x, vid 0x%x 0x%x\n",
|
||||||
checkfid, data->currfid, checkvid, data->currvid);
|
checkfid, data->currfid, checkvid, data->currvid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpufreq_frequency_table_target(pol, data->powernow_table, targfreq, relation, &newstate))
|
if (cpufreq_frequency_table_target(pol, data->powernow_table, targfreq, relation, &newstate))
|
||||||
@ -954,7 +1103,11 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi
|
|||||||
|
|
||||||
powernow_k8_acpi_pst_values(data, newstate);
|
powernow_k8_acpi_pst_values(data, newstate);
|
||||||
|
|
||||||
if (transition_frequency(data, newstate)) {
|
if (cpu_family)
|
||||||
|
ret = transition_frequency_pstate(data, newstate);
|
||||||
|
else
|
||||||
|
ret = transition_frequency_fidvid(data, newstate);
|
||||||
|
if (ret) {
|
||||||
printk(KERN_ERR PFX "transition frequency failed\n");
|
printk(KERN_ERR PFX "transition frequency failed\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
mutex_unlock(&fidvid_mutex);
|
mutex_unlock(&fidvid_mutex);
|
||||||
@ -962,7 +1115,10 @@ static int powernowk8_target(struct cpufreq_policy *pol, unsigned targfreq, unsi
|
|||||||
}
|
}
|
||||||
mutex_unlock(&fidvid_mutex);
|
mutex_unlock(&fidvid_mutex);
|
||||||
|
|
||||||
pol->cur = find_khz_freq_from_fid(data->currfid);
|
if (cpu_family)
|
||||||
|
pol->cur = find_khz_freq_from_fiddid(data->currfid, data->currdid);
|
||||||
|
else
|
||||||
|
pol->cur = find_khz_freq_from_fid(data->currfid);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
err_out:
|
err_out:
|
||||||
@ -1007,14 +1163,13 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
|
|||||||
* Use the PSB BIOS structure. This is only availabe on
|
* Use the PSB BIOS structure. This is only availabe on
|
||||||
* an UP version, and is deprecated by AMD.
|
* an UP version, and is deprecated by AMD.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((num_online_cpus() != 1) || (num_possible_cpus() != 1)) {
|
if ((num_online_cpus() != 1) || (num_possible_cpus() != 1)) {
|
||||||
printk(KERN_ERR PFX "MP systems not supported by PSB BIOS structure\n");
|
printk(KERN_ERR PFX "MP systems not supported by PSB BIOS structure\n");
|
||||||
kfree(data);
|
kfree(data);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
if (pol->cpu != 0) {
|
if (pol->cpu != 0) {
|
||||||
printk(KERN_ERR PFX "init not cpu 0\n");
|
printk(KERN_ERR PFX "No _PSS objects for CPU other than CPU0\n");
|
||||||
kfree(data);
|
kfree(data);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
@ -1042,20 +1197,28 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
|
|||||||
if (query_current_values_with_pending_wait(data))
|
if (query_current_values_with_pending_wait(data))
|
||||||
goto err_out;
|
goto err_out;
|
||||||
|
|
||||||
fidvid_msr_init();
|
if (!cpu_family)
|
||||||
|
fidvid_msr_init();
|
||||||
|
|
||||||
/* run on any CPU again */
|
/* run on any CPU again */
|
||||||
set_cpus_allowed(current, oldmask);
|
set_cpus_allowed(current, oldmask);
|
||||||
|
|
||||||
pol->governor = CPUFREQ_DEFAULT_GOVERNOR;
|
pol->governor = CPUFREQ_DEFAULT_GOVERNOR;
|
||||||
pol->cpus = cpu_core_map[pol->cpu];
|
if (cpu_family)
|
||||||
|
pol->cpus = cpumask_of_cpu(pol->cpu);
|
||||||
|
else
|
||||||
|
pol->cpus = cpu_core_map[pol->cpu];
|
||||||
|
data->available_cores = &(pol->cpus);
|
||||||
|
|
||||||
/* Take a crude guess here.
|
/* Take a crude guess here.
|
||||||
* That guess was in microseconds, so multiply with 1000 */
|
* That guess was in microseconds, so multiply with 1000 */
|
||||||
pol->cpuinfo.transition_latency = (((data->rvo + 8) * data->vstable * VST_UNITS_20US)
|
pol->cpuinfo.transition_latency = (((data->rvo + 8) * data->vstable * VST_UNITS_20US)
|
||||||
+ (3 * (1 << data->irt) * 10)) * 1000;
|
+ (3 * (1 << data->irt) * 10)) * 1000;
|
||||||
|
|
||||||
pol->cur = find_khz_freq_from_fid(data->currfid);
|
if (cpu_family)
|
||||||
|
pol->cur = find_khz_freq_from_fiddid(data->currfid, data->currdid);
|
||||||
|
else
|
||||||
|
pol->cur = find_khz_freq_from_fid(data->currfid);
|
||||||
dprintk("policy current frequency %d kHz\n", pol->cur);
|
dprintk("policy current frequency %d kHz\n", pol->cur);
|
||||||
|
|
||||||
/* min/max the cpu is capable of */
|
/* min/max the cpu is capable of */
|
||||||
@ -1069,8 +1232,12 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol)
|
|||||||
|
|
||||||
cpufreq_frequency_table_get_attr(data->powernow_table, pol->cpu);
|
cpufreq_frequency_table_get_attr(data->powernow_table, pol->cpu);
|
||||||
|
|
||||||
printk("cpu_init done, current fid 0x%x, vid 0x%x\n",
|
if (cpu_family)
|
||||||
data->currfid, data->currvid);
|
dprintk("cpu_init done, current fid 0x%x, did 0x%x\n",
|
||||||
|
data->currfid, data->currdid);
|
||||||
|
else
|
||||||
|
dprintk("cpu_init done, current fid 0x%x, vid 0x%x\n",
|
||||||
|
data->currfid, data->currvid);
|
||||||
|
|
||||||
powernow_data[pol->cpu] = data;
|
powernow_data[pol->cpu] = data;
|
||||||
|
|
||||||
@ -1156,8 +1323,9 @@ static int __cpuinit powernowk8_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (supported_cpus == num_online_cpus()) {
|
if (supported_cpus == num_online_cpus()) {
|
||||||
printk(KERN_INFO PFX "Found %d AMD Athlon 64 / Opteron "
|
printk(KERN_INFO PFX "Found %d %s "
|
||||||
"processors (" VERSION ")\n", supported_cpus);
|
"processors (" VERSION ")\n", supported_cpus,
|
||||||
|
boot_cpu_data.x86_model_id);
|
||||||
return cpufreq_register_driver(&cpufreq_amd64_driver);
|
return cpufreq_register_driver(&cpufreq_amd64_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* (c) 2003, 2004, 2005 Advanced Micro Devices, Inc.
|
* (c) 2003-2006 Advanced Micro Devices, Inc.
|
||||||
* Your use of this code is subject to the terms and conditions of the
|
* Your use of this code is subject to the terms and conditions of the
|
||||||
* GNU general public license version 2. See "COPYING" or
|
* GNU general public license version 2. See "COPYING" or
|
||||||
* http://www.gnu.org/licenses/gpl.html
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
@ -21,8 +21,8 @@ struct powernow_k8_data {
|
|||||||
u32 plllock; /* pll lock time, units 1 us */
|
u32 plllock; /* pll lock time, units 1 us */
|
||||||
u32 exttype; /* extended interface = 1 */
|
u32 exttype; /* extended interface = 1 */
|
||||||
|
|
||||||
/* keep track of the current fid / vid */
|
/* keep track of the current fid / vid or did */
|
||||||
u32 currvid, currfid;
|
u32 currvid, currfid, currdid;
|
||||||
|
|
||||||
/* the powernow_table includes all frequency and vid/fid pairings:
|
/* the powernow_table includes all frequency and vid/fid pairings:
|
||||||
* fid are the lower 8 bits of the index, vid are the upper 8 bits.
|
* fid are the lower 8 bits of the index, vid are the upper 8 bits.
|
||||||
@ -34,6 +34,10 @@ struct powernow_k8_data {
|
|||||||
* used to determine valid frequency/vid/fid states */
|
* used to determine valid frequency/vid/fid states */
|
||||||
struct acpi_processor_performance acpi_data;
|
struct acpi_processor_performance acpi_data;
|
||||||
#endif
|
#endif
|
||||||
|
/* we need to keep track of associated cores, but let cpufreq
|
||||||
|
* handle hotplug events - so just point at cpufreq pol->cpus
|
||||||
|
* structure */
|
||||||
|
cpumask_t *available_cores;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -43,6 +47,7 @@ struct powernow_k8_data {
|
|||||||
#define CPUID_XFAM_K8 0
|
#define CPUID_XFAM_K8 0
|
||||||
#define CPUID_XMOD 0x000f0000 /* extended model */
|
#define CPUID_XMOD 0x000f0000 /* extended model */
|
||||||
#define CPUID_XMOD_REV_G 0x00060000
|
#define CPUID_XMOD_REV_G 0x00060000
|
||||||
|
#define CPUID_XFAM_10H 0x00100000 /* family 0x10 */
|
||||||
#define CPUID_USE_XFAM_XMOD 0x00000f00
|
#define CPUID_USE_XFAM_XMOD 0x00000f00
|
||||||
#define CPUID_GET_MAX_CAPABILITIES 0x80000000
|
#define CPUID_GET_MAX_CAPABILITIES 0x80000000
|
||||||
#define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
|
#define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
|
||||||
@ -79,6 +84,32 @@ struct powernow_k8_data {
|
|||||||
#define MSR_S_HI_CURRENT_VID 0x0000003f
|
#define MSR_S_HI_CURRENT_VID 0x0000003f
|
||||||
#define MSR_C_HI_STP_GNT_BENIGN 0x00000001
|
#define MSR_C_HI_STP_GNT_BENIGN 0x00000001
|
||||||
|
|
||||||
|
|
||||||
|
/* Hardware Pstate _PSS and MSR definitions */
|
||||||
|
#define USE_HW_PSTATE 0x00000080
|
||||||
|
#define HW_PSTATE_FID_MASK 0x0000003f
|
||||||
|
#define HW_PSTATE_DID_MASK 0x000001c0
|
||||||
|
#define HW_PSTATE_DID_SHIFT 6
|
||||||
|
#define HW_PSTATE_MASK 0x00000007
|
||||||
|
#define HW_PSTATE_VALID_MASK 0x80000000
|
||||||
|
#define HW_FID_INDEX_SHIFT 8
|
||||||
|
#define HW_FID_INDEX_MASK 0x0000ff00
|
||||||
|
#define HW_DID_INDEX_SHIFT 16
|
||||||
|
#define HW_DID_INDEX_MASK 0x00ff0000
|
||||||
|
#define HW_WATTS_MASK 0xff
|
||||||
|
#define HW_PWR_DVR_MASK 0x300
|
||||||
|
#define HW_PWR_DVR_SHIFT 8
|
||||||
|
#define HW_PWR_MAX_MULT 3
|
||||||
|
#define MAX_HW_PSTATE 8 /* hw pstate supports up to 8 */
|
||||||
|
#define MSR_PSTATE_DEF_BASE 0xc0010064 /* base of Pstate MSRs */
|
||||||
|
#define MSR_PSTATE_STATUS 0xc0010063 /* Pstate Status MSR */
|
||||||
|
#define MSR_PSTATE_CTRL 0xc0010062 /* Pstate control MSR */
|
||||||
|
|
||||||
|
/* define the two driver architectures */
|
||||||
|
#define CPU_OPTERON 0
|
||||||
|
#define CPU_HW_PSTATE 1
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* There are restrictions frequencies have to follow:
|
* There are restrictions frequencies have to follow:
|
||||||
* - only 1 entry in the low fid table ( <=1.4GHz )
|
* - only 1 entry in the low fid table ( <=1.4GHz )
|
||||||
@ -182,6 +213,9 @@ static int core_frequency_transition(struct powernow_k8_data *data, u32 reqfid);
|
|||||||
|
|
||||||
static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index);
|
static void powernow_k8_acpi_pst_values(struct powernow_k8_data *data, unsigned int index);
|
||||||
|
|
||||||
|
static int fill_powernow_table_pstate(struct powernow_k8_data *data, struct cpufreq_frequency_table *powernow_table);
|
||||||
|
static int fill_powernow_table_fidvid(struct powernow_k8_data *data, struct cpufreq_frequency_table *powernow_table);
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
static inline void define_siblings(int cpu, cpumask_t cpu_sharedcore_mask[])
|
static inline void define_siblings(int cpu, cpumask_t cpu_sharedcore_mask[])
|
||||||
{
|
{
|
||||||
|
@ -250,7 +250,7 @@ static int centrino_cpu_init_table(struct cpufreq_policy *policy)
|
|||||||
|
|
||||||
if (model->cpu_id == NULL) {
|
if (model->cpu_id == NULL) {
|
||||||
/* No match at all */
|
/* No match at all */
|
||||||
dprintk(KERN_INFO PFX "no support for CPU model \"%s\": "
|
dprintk("no support for CPU model \"%s\": "
|
||||||
"send /proc/cpuinfo to " MAINTAINER "\n",
|
"send /proc/cpuinfo to " MAINTAINER "\n",
|
||||||
cpu->x86_model_id);
|
cpu->x86_model_id);
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
@ -258,10 +258,10 @@ static int centrino_cpu_init_table(struct cpufreq_policy *policy)
|
|||||||
|
|
||||||
if (model->op_points == NULL) {
|
if (model->op_points == NULL) {
|
||||||
/* Matched a non-match */
|
/* Matched a non-match */
|
||||||
dprintk(KERN_INFO PFX "no table support for CPU model \"%s\"\n",
|
dprintk("no table support for CPU model \"%s\"\n",
|
||||||
cpu->x86_model_id);
|
cpu->x86_model_id);
|
||||||
#ifndef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI
|
#ifndef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI
|
||||||
dprintk(KERN_INFO PFX "try compiling with CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI enabled\n");
|
dprintk("try compiling with CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI enabled\n");
|
||||||
#endif
|
#endif
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
@ -368,7 +368,7 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy *policy)
|
|||||||
|
|
||||||
/* register with ACPI core */
|
/* register with ACPI core */
|
||||||
if (acpi_processor_register_performance(&p, cpu)) {
|
if (acpi_processor_register_performance(&p, cpu)) {
|
||||||
dprintk(KERN_INFO PFX "obtaining ACPI data failed\n");
|
dprintk("obtaining ACPI data failed\n");
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,7 +465,7 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy *policy)
|
|||||||
kfree(centrino_model[cpu]);
|
kfree(centrino_model[cpu]);
|
||||||
err_unreg:
|
err_unreg:
|
||||||
acpi_processor_unregister_performance(&p, cpu);
|
acpi_processor_unregister_performance(&p, cpu);
|
||||||
dprintk(KERN_INFO PFX "invalid ACPI data\n");
|
dprintk("invalid ACPI data\n");
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -499,7 +499,7 @@ static int centrino_cpu_init(struct cpufreq_policy *policy)
|
|||||||
centrino_cpu[policy->cpu] = &cpu_ids[i];
|
centrino_cpu[policy->cpu] = &cpu_ids[i];
|
||||||
|
|
||||||
if (!centrino_cpu[policy->cpu]) {
|
if (!centrino_cpu[policy->cpu]) {
|
||||||
dprintk(KERN_INFO PFX "found unsupported CPU with "
|
dprintk("found unsupported CPU with "
|
||||||
"Enhanced SpeedStep: send /proc/cpuinfo to "
|
"Enhanced SpeedStep: send /proc/cpuinfo to "
|
||||||
MAINTAINER "\n");
|
MAINTAINER "\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
@ -1547,15 +1547,18 @@ void __init setup_arch(char **cmdline_p)
|
|||||||
if (efi_enabled)
|
if (efi_enabled)
|
||||||
efi_map_memmap();
|
efi_map_memmap();
|
||||||
|
|
||||||
#ifdef CONFIG_X86_IO_APIC
|
|
||||||
check_acpi_pci(); /* Checks more than just ACPI actually */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
/*
|
/*
|
||||||
* Parse the ACPI tables for possible boot-time SMP configuration.
|
* Parse the ACPI tables for possible boot-time SMP configuration.
|
||||||
*/
|
*/
|
||||||
acpi_boot_table_init();
|
acpi_boot_table_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_X86_IO_APIC
|
||||||
|
check_acpi_pci(); /* Checks more than just ACPI actually */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_ACPI
|
||||||
acpi_boot_init();
|
acpi_boot_init();
|
||||||
|
|
||||||
#if defined(CONFIG_SMP) && defined(CONFIG_X86_PC)
|
#if defined(CONFIG_SMP) && defined(CONFIG_X86_PC)
|
||||||
|
@ -119,6 +119,32 @@ config MIPS_MIRAGE
|
|||||||
select SYS_HAS_CPU_MIPS32_R1
|
select SYS_HAS_CPU_MIPS32_R1
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||||
|
|
||||||
|
config BASLER_EXCITE
|
||||||
|
bool "Basler eXcite smart camera support"
|
||||||
|
select DMA_COHERENT
|
||||||
|
select HW_HAS_PCI
|
||||||
|
select IRQ_CPU
|
||||||
|
select IRQ_CPU_RM7K
|
||||||
|
select IRQ_CPU_RM9K
|
||||||
|
select SERIAL_RM9000
|
||||||
|
select SYS_HAS_CPU_RM9000
|
||||||
|
select SYS_SUPPORTS_32BIT_KERNEL
|
||||||
|
select SYS_SUPPORTS_64BIT_KERNEL
|
||||||
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
|
help
|
||||||
|
The eXcite is a smart camera platform manufactured by
|
||||||
|
Basler Vision Technologies AG
|
||||||
|
|
||||||
|
config BASLER_EXCITE_PROTOTYPE
|
||||||
|
bool "Support for pre-release units"
|
||||||
|
depends on BASLER_EXCITE
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Pre-series (prototype) units are different from later ones in
|
||||||
|
some ways. Select this option if you have one of these. Please
|
||||||
|
note that a kernel built with this option selected will not be
|
||||||
|
able to run on normal units.
|
||||||
|
|
||||||
config MIPS_COBALT
|
config MIPS_COBALT
|
||||||
bool "Cobalt Server"
|
bool "Cobalt Server"
|
||||||
select DMA_NONCOHERENT
|
select DMA_NONCOHERENT
|
||||||
@ -142,6 +168,9 @@ config MACH_DECSTATION
|
|||||||
select SYS_SUPPORTS_32BIT_KERNEL
|
select SYS_SUPPORTS_32BIT_KERNEL
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||||
|
select SYS_SUPPORTS_128HZ
|
||||||
|
select SYS_SUPPORTS_256HZ
|
||||||
|
select SYS_SUPPORTS_1024HZ
|
||||||
help
|
help
|
||||||
This enables support for DEC's MIPS based workstations. For details
|
This enables support for DEC's MIPS based workstations. For details
|
||||||
see the Linux/MIPS FAQ on <http://www.linux-mips.org/> and the
|
see the Linux/MIPS FAQ on <http://www.linux-mips.org/> and the
|
||||||
@ -239,6 +268,7 @@ config MACH_JAZZ
|
|||||||
select SYS_HAS_CPU_R4X00
|
select SYS_HAS_CPU_R4X00
|
||||||
select SYS_SUPPORTS_32BIT_KERNEL
|
select SYS_SUPPORTS_32BIT_KERNEL
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
||||||
|
select SYS_SUPPORTS_100HZ
|
||||||
help
|
help
|
||||||
This a family of machines based on the MIPS R4030 chipset which was
|
This a family of machines based on the MIPS R4030 chipset which was
|
||||||
used by several vendors to build RISC/os and Windows NT workstations.
|
used by several vendors to build RISC/os and Windows NT workstations.
|
||||||
@ -327,6 +357,27 @@ config MIPS_SEAD
|
|||||||
This enables support for the MIPS Technologies SEAD evaluation
|
This enables support for the MIPS Technologies SEAD evaluation
|
||||||
board.
|
board.
|
||||||
|
|
||||||
|
config WR_PPMC
|
||||||
|
bool "Support for Wind River PPMC board"
|
||||||
|
select IRQ_CPU
|
||||||
|
select BOOT_ELF32
|
||||||
|
select DMA_NONCOHERENT
|
||||||
|
select HW_HAS_PCI
|
||||||
|
select MIPS_GT64120
|
||||||
|
select SWAP_IO_SPACE
|
||||||
|
select SYS_HAS_CPU_MIPS32_R1
|
||||||
|
select SYS_HAS_CPU_MIPS32_R2
|
||||||
|
select SYS_HAS_CPU_MIPS64_R1
|
||||||
|
select SYS_HAS_CPU_NEVADA
|
||||||
|
select SYS_HAS_CPU_RM7000
|
||||||
|
select SYS_SUPPORTS_32BIT_KERNEL
|
||||||
|
select SYS_SUPPORTS_64BIT_KERNEL
|
||||||
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
|
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||||
|
help
|
||||||
|
This enables support for the Wind River MIPS32 4KC PPMC evaluation
|
||||||
|
board, which is based on GT64120 bridge chip.
|
||||||
|
|
||||||
config MIPS_SIM
|
config MIPS_SIM
|
||||||
bool 'MIPS simulator (MIPSsim)'
|
bool 'MIPS simulator (MIPSsim)'
|
||||||
select DMA_NONCOHERENT
|
select DMA_NONCOHERENT
|
||||||
@ -438,53 +489,16 @@ config MIPS_XXS1500
|
|||||||
|
|
||||||
config PNX8550_V2PCI
|
config PNX8550_V2PCI
|
||||||
bool "Philips PNX8550 based Viper2-PCI board"
|
bool "Philips PNX8550 based Viper2-PCI board"
|
||||||
|
depends on BROKEN
|
||||||
select PNX8550
|
select PNX8550
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||||
|
|
||||||
config PNX8550_JBS
|
config PNX8550_JBS
|
||||||
bool "Philips PNX8550 based JBS board"
|
bool "Philips PNX8550 based JBS board"
|
||||||
|
depends on BROKEN
|
||||||
select PNX8550
|
select PNX8550
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||||
|
|
||||||
config DDB5074
|
|
||||||
bool "NEC DDB Vrc-5074 (EXPERIMENTAL)"
|
|
||||||
depends on EXPERIMENTAL
|
|
||||||
select DDB5XXX_COMMON
|
|
||||||
select DMA_NONCOHERENT
|
|
||||||
select HAVE_STD_PC_SERIAL_PORT
|
|
||||||
select HW_HAS_PCI
|
|
||||||
select IRQ_CPU
|
|
||||||
select I8259
|
|
||||||
select ISA
|
|
||||||
select SYS_HAS_CPU_R5000
|
|
||||||
select SYS_SUPPORTS_32BIT_KERNEL
|
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
|
||||||
help
|
|
||||||
This enables support for the VR5000-based NEC DDB Vrc-5074
|
|
||||||
evaluation board.
|
|
||||||
|
|
||||||
config DDB5476
|
|
||||||
bool "NEC DDB Vrc-5476"
|
|
||||||
select DDB5XXX_COMMON
|
|
||||||
select DMA_NONCOHERENT
|
|
||||||
select HAVE_STD_PC_SERIAL_PORT
|
|
||||||
select HW_HAS_PCI
|
|
||||||
select IRQ_CPU
|
|
||||||
select I8259
|
|
||||||
select ISA
|
|
||||||
select SYS_HAS_CPU_R5432
|
|
||||||
select SYS_SUPPORTS_32BIT_KERNEL
|
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
|
||||||
help
|
|
||||||
This enables support for the R5432-based NEC DDB Vrc-5476
|
|
||||||
evaluation board.
|
|
||||||
|
|
||||||
Features : kernel debugging, serial terminal, NFS root fs, on-board
|
|
||||||
ether port USB, AC97, PCI, PCI VGA card & framebuffer console,
|
|
||||||
IDE controller, PS2 keyboard, PS2 mouse, etc.
|
|
||||||
|
|
||||||
config DDB5477
|
config DDB5477
|
||||||
bool "NEC DDB Vrc-5477"
|
bool "NEC DDB Vrc-5477"
|
||||||
select DDB5XXX_COMMON
|
select DDB5XXX_COMMON
|
||||||
@ -546,6 +560,20 @@ config QEMU
|
|||||||
simulate actual MIPS hardware platforms. More information on Qemu
|
simulate actual MIPS hardware platforms. More information on Qemu
|
||||||
can be found at http://www.linux-mips.org/wiki/Qemu.
|
can be found at http://www.linux-mips.org/wiki/Qemu.
|
||||||
|
|
||||||
|
config MARKEINS
|
||||||
|
bool "Support for NEC EMMA2RH Mark-eins"
|
||||||
|
select DMA_NONCOHERENT
|
||||||
|
select HW_HAS_PCI
|
||||||
|
select IRQ_CPU
|
||||||
|
select SWAP_IO_SPACE
|
||||||
|
select SYS_SUPPORTS_32BIT_KERNEL
|
||||||
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
|
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||||
|
select SYS_HAS_CPU_R5000
|
||||||
|
help
|
||||||
|
This enables support for the R5432-based NEC Mark-eins
|
||||||
|
boards with R5500 CPU.
|
||||||
|
|
||||||
config SGI_IP22
|
config SGI_IP22
|
||||||
bool "SGI IP22 (Indy/Indigo2)"
|
bool "SGI IP22 (Indy/Indigo2)"
|
||||||
select ARC
|
select ARC
|
||||||
@ -555,6 +583,7 @@ config SGI_IP22
|
|||||||
select HW_HAS_EISA
|
select HW_HAS_EISA
|
||||||
select IP22_CPU_SCACHE
|
select IP22_CPU_SCACHE
|
||||||
select IRQ_CPU
|
select IRQ_CPU
|
||||||
|
select NO_ISA if ISA
|
||||||
select SWAP_IO_SPACE
|
select SWAP_IO_SPACE
|
||||||
select SYS_HAS_CPU_R4X00
|
select SYS_HAS_CPU_R4X00
|
||||||
select SYS_HAS_CPU_R5000
|
select SYS_HAS_CPU_R5000
|
||||||
@ -577,6 +606,7 @@ config SGI_IP27
|
|||||||
select SYS_HAS_CPU_R10000
|
select SYS_HAS_CPU_R10000
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL
|
select SYS_SUPPORTS_64BIT_KERNEL
|
||||||
select SYS_SUPPORTS_BIG_ENDIAN
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
|
select SYS_SUPPORTS_NUMA
|
||||||
help
|
help
|
||||||
This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics
|
This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics
|
||||||
workstations. To compile a Linux kernel that runs on these, say Y
|
workstations. To compile a Linux kernel that runs on these, say Y
|
||||||
@ -707,8 +737,8 @@ config SIBYTE_CRHONE
|
|||||||
|
|
||||||
config SNI_RM200_PCI
|
config SNI_RM200_PCI
|
||||||
bool "SNI RM200 PCI"
|
bool "SNI RM200 PCI"
|
||||||
select ARC
|
select ARC if CPU_LITTLE_ENDIAN
|
||||||
select ARC32
|
select ARC32 if CPU_LITTLE_ENDIAN
|
||||||
select ARCH_MAY_HAVE_PC_FDC
|
select ARCH_MAY_HAVE_PC_FDC
|
||||||
select BOOT_ELF32
|
select BOOT_ELF32
|
||||||
select DMA_NONCOHERENT
|
select DMA_NONCOHERENT
|
||||||
@ -719,10 +749,13 @@ config SNI_RM200_PCI
|
|||||||
select I8253
|
select I8253
|
||||||
select I8259
|
select I8259
|
||||||
select ISA
|
select ISA
|
||||||
|
select SWAP_IO_SPACE if CPU_BIG_ENDIAN
|
||||||
select SYS_HAS_CPU_R4X00
|
select SYS_HAS_CPU_R4X00
|
||||||
|
select SYS_HAS_CPU_R5000
|
||||||
|
select R5000_CPU_SCACHE
|
||||||
select SYS_SUPPORTS_32BIT_KERNEL
|
select SYS_SUPPORTS_32BIT_KERNEL
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
||||||
select SYS_SUPPORTS_BIG_ENDIAN if EXPERIMENTAL
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
select SYS_SUPPORTS_HIGHMEM
|
select SYS_SUPPORTS_HIGHMEM
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||||
help
|
help
|
||||||
@ -979,6 +1012,11 @@ config SOC_PNX8550
|
|||||||
config SWAP_IO_SPACE
|
config SWAP_IO_SPACE
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config EMMA2RH
|
||||||
|
bool
|
||||||
|
depends on MARKEINS
|
||||||
|
default y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Unfortunately not all GT64120 systems run the chip at the same clock.
|
# Unfortunately not all GT64120 systems run the chip at the same clock.
|
||||||
# As the user for the clock rate and try to minimize the available options.
|
# As the user for the clock rate and try to minimize the available options.
|
||||||
@ -1607,6 +1645,28 @@ config ARCH_FLATMEM_ENABLE
|
|||||||
def_bool y
|
def_bool y
|
||||||
depends on !NUMA
|
depends on !NUMA
|
||||||
|
|
||||||
|
config ARCH_DISCONTIGMEM_ENABLE
|
||||||
|
bool
|
||||||
|
default y if SGI_IP27
|
||||||
|
help
|
||||||
|
Say Y to upport efficient handling of discontiguous physical memory,
|
||||||
|
for architectures which are either NUMA (Non-Uniform Memory Access)
|
||||||
|
or have huge holes in the physical address space for other reasons.
|
||||||
|
See <file:Documentation/vm/numa> for more.
|
||||||
|
|
||||||
|
config NUMA
|
||||||
|
bool "NUMA Support"
|
||||||
|
depends on SYS_SUPPORTS_NUMA
|
||||||
|
help
|
||||||
|
Say Y to compile the kernel to support NUMA (Non-Uniform Memory
|
||||||
|
Access). This option improves performance on systems with more
|
||||||
|
than two nodes; on two node systems it is generally better to
|
||||||
|
leave it disabled; on single node systems disable this option
|
||||||
|
disabled.
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_NUMA
|
||||||
|
bool
|
||||||
|
|
||||||
config NODES_SHIFT
|
config NODES_SHIFT
|
||||||
int
|
int
|
||||||
default "6"
|
default "6"
|
||||||
@ -1651,6 +1711,77 @@ config NR_CPUS
|
|||||||
This is purely to save memory - each supported CPU adds
|
This is purely to save memory - each supported CPU adds
|
||||||
approximately eight kilobytes to the kernel image.
|
approximately eight kilobytes to the kernel image.
|
||||||
|
|
||||||
|
#
|
||||||
|
# Timer Interrupt Frequency Configuration
|
||||||
|
#
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "Timer frequency"
|
||||||
|
default HZ_250
|
||||||
|
help
|
||||||
|
Allows the configuration of the timer frequency.
|
||||||
|
|
||||||
|
config HZ_48
|
||||||
|
bool "48 HZ" if SYS_SUPPORTS_48HZ
|
||||||
|
|
||||||
|
config HZ_100
|
||||||
|
bool "100 HZ" if SYS_SUPPORTS_100HZ || SYS_SUPPORTS_ARBIT_HZ
|
||||||
|
|
||||||
|
config HZ_128
|
||||||
|
bool "128 HZ" if SYS_SUPPORTS_128HZ || SYS_SUPPORTS_ARBIT_HZ
|
||||||
|
|
||||||
|
config HZ_250
|
||||||
|
bool "250 HZ" if SYS_SUPPORTS_250HZ || SYS_SUPPORTS_ARBIT_HZ
|
||||||
|
|
||||||
|
config HZ_256
|
||||||
|
bool "256 HZ" if SYS_SUPPORTS_256HZ || SYS_SUPPORTS_ARBIT_HZ
|
||||||
|
|
||||||
|
config HZ_1000
|
||||||
|
bool "1000 HZ" if SYS_SUPPORTS_1000HZ || SYS_SUPPORTS_ARBIT_HZ
|
||||||
|
|
||||||
|
config HZ_1024
|
||||||
|
bool "1024 HZ" if SYS_SUPPORTS_1024HZ || SYS_SUPPORTS_ARBIT_HZ
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_48HZ
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_100HZ
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_128HZ
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_250HZ
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_256HZ
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_1000HZ
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_1024HZ
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_ARBIT_HZ
|
||||||
|
bool
|
||||||
|
default y if !SYS_SUPPORTS_48HZ && !SYS_SUPPORTS_100HZ && \
|
||||||
|
!SYS_SUPPORTS_128HZ && !SYS_SUPPORTS_250HZ && \
|
||||||
|
!SYS_SUPPORTS_256HZ && !SYS_SUPPORTS_1000HZ && \
|
||||||
|
!SYS_SUPPORTS_1024HZ
|
||||||
|
|
||||||
|
config HZ
|
||||||
|
int
|
||||||
|
default 48 if HZ_48
|
||||||
|
default 100 if HZ_100
|
||||||
|
default 128 if HZ_128
|
||||||
|
default 250 if HZ_250
|
||||||
|
default 256 if HZ_256
|
||||||
|
default 1000 if HZ_1000
|
||||||
|
default 1024 if HZ_1024
|
||||||
|
|
||||||
source "kernel/Kconfig.preempt"
|
source "kernel/Kconfig.preempt"
|
||||||
|
|
||||||
config RTC_DS1742
|
config RTC_DS1742
|
||||||
@ -1710,6 +1841,9 @@ source "drivers/pci/Kconfig"
|
|||||||
config ISA
|
config ISA
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config NO_ISA
|
||||||
|
bool
|
||||||
|
|
||||||
config EISA
|
config EISA
|
||||||
bool "EISA support"
|
bool "EISA support"
|
||||||
depends on HW_HAS_EISA
|
depends on HW_HAS_EISA
|
||||||
@ -1840,6 +1974,32 @@ config PM
|
|||||||
bool "Power Management support (EXPERIMENTAL)"
|
bool "Power Management support (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL && SOC_AU1X00
|
depends on EXPERIMENTAL && SOC_AU1X00
|
||||||
|
|
||||||
|
config APM
|
||||||
|
tristate "Advanced Power Management Emulation"
|
||||||
|
depends on PM
|
||||||
|
---help---
|
||||||
|
APM is a BIOS specification for saving power using several different
|
||||||
|
techniques. This is mostly useful for battery powered systems with
|
||||||
|
APM compliant BIOSes. If you say Y here, the system time will be
|
||||||
|
reset after a RESUME operation, the /proc/apm device will provide
|
||||||
|
battery status information, and user-space programs will receive
|
||||||
|
notification of APM "events" (e.g. battery status change).
|
||||||
|
|
||||||
|
In order to use APM, you will need supporting software. For location
|
||||||
|
and more information, read <file:Documentation/pm.txt> and the
|
||||||
|
Battery Powered Linux mini-HOWTO, available from
|
||||||
|
<http://www.tldp.org/docs.html#howto>.
|
||||||
|
|
||||||
|
This driver does not spin down disk drives (see the hdparm(8)
|
||||||
|
manpage ("man 8 hdparm") for that), and it doesn't turn off
|
||||||
|
VESA-compliant "green" monitors.
|
||||||
|
|
||||||
|
Generally, if you don't have a battery in your machine, there isn't
|
||||||
|
much point in using this driver and you should say N. If you get
|
||||||
|
random kernel OOPSes or reboots that don't seem to be related to
|
||||||
|
anything, try disabling/enabling this option (or disabling/enabling
|
||||||
|
APM in your BIOS).
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
source "net/Kconfig"
|
source "net/Kconfig"
|
||||||
|
@ -83,6 +83,8 @@ cflags-y += -msoft-float
|
|||||||
LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
|
LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
|
||||||
MODFLAGS += -mlong-calls
|
MODFLAGS += -mlong-calls
|
||||||
|
|
||||||
|
cflags-y += -ffreestanding
|
||||||
|
|
||||||
#
|
#
|
||||||
# We explicitly add the endianness specifier if needed, this allows
|
# We explicitly add the endianness specifier if needed, this allows
|
||||||
# to compile kernels with a toolchain for the other endianness. We
|
# to compile kernels with a toolchain for the other endianness. We
|
||||||
@ -284,6 +286,13 @@ core-$(CONFIG_MIPS_EV96100) += arch/mips/galileo-boards/ev96100/
|
|||||||
cflags-$(CONFIG_MIPS_EV96100) += -Iinclude/asm-mips/mach-ev96100
|
cflags-$(CONFIG_MIPS_EV96100) += -Iinclude/asm-mips/mach-ev96100
|
||||||
load-$(CONFIG_MIPS_EV96100) += 0xffffffff80100000
|
load-$(CONFIG_MIPS_EV96100) += 0xffffffff80100000
|
||||||
|
|
||||||
|
#
|
||||||
|
# Wind River PPMC Board (4KC + GT64120)
|
||||||
|
#
|
||||||
|
core-$(CONFIG_WR_PPMC) += arch/mips/gt64120/wrppmc/
|
||||||
|
cflags-$(CONFIG_WR_PPMC) += -Iinclude/asm-mips/mach-wrppmc
|
||||||
|
load-$(CONFIG_WR_PPMC) += 0xffffffff80100000
|
||||||
|
|
||||||
#
|
#
|
||||||
# Globespan IVR eval board with QED 5231 CPU
|
# Globespan IVR eval board with QED 5231 CPU
|
||||||
#
|
#
|
||||||
@ -378,6 +387,13 @@ core-$(CONFIG_MOMENCO_OCELOT_3) += arch/mips/momentum/ocelot_3/
|
|||||||
cflags-$(CONFIG_MOMENCO_OCELOT_3) += -Iinclude/asm-mips/mach-ocelot3
|
cflags-$(CONFIG_MOMENCO_OCELOT_3) += -Iinclude/asm-mips/mach-ocelot3
|
||||||
load-$(CONFIG_MOMENCO_OCELOT_3) += 0xffffffff80100000
|
load-$(CONFIG_MOMENCO_OCELOT_3) += 0xffffffff80100000
|
||||||
|
|
||||||
|
#
|
||||||
|
# Basler eXcite
|
||||||
|
#
|
||||||
|
core-$(CONFIG_BASLER_EXCITE) += arch/mips/basler/excite/
|
||||||
|
cflags-$(CONFIG_BASLER_EXCITE) += -Iinclude/asm-mips/mach-excite
|
||||||
|
load-$(CONFIG_BASLER_EXCITE) += 0x80100000
|
||||||
|
|
||||||
#
|
#
|
||||||
# Momentum Jaguar ATX
|
# Momentum Jaguar ATX
|
||||||
#
|
#
|
||||||
@ -394,18 +410,6 @@ load-$(CONFIG_MOMENCO_JAGUAR_ATX) += 0xffffffff80100000
|
|||||||
#
|
#
|
||||||
core-$(CONFIG_DDB5XXX_COMMON) += arch/mips/ddb5xxx/common/
|
core-$(CONFIG_DDB5XXX_COMMON) += arch/mips/ddb5xxx/common/
|
||||||
|
|
||||||
#
|
|
||||||
# NEC DDB Vrc-5074
|
|
||||||
#
|
|
||||||
core-$(CONFIG_DDB5074) += arch/mips/ddb5xxx/ddb5074/
|
|
||||||
load-$(CONFIG_DDB5074) += 0xffffffff80080000
|
|
||||||
|
|
||||||
#
|
|
||||||
# NEC DDB Vrc-5476
|
|
||||||
#
|
|
||||||
core-$(CONFIG_DDB5476) += arch/mips/ddb5xxx/ddb5476/
|
|
||||||
load-$(CONFIG_DDB5476) += 0xffffffff80080000
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# NEC DDB Vrc-5477
|
# NEC DDB Vrc-5477
|
||||||
#
|
#
|
||||||
@ -468,6 +472,15 @@ libs-$(CONFIG_PNX8550_JBS) += arch/mips/philips/pnx8550/jbs/
|
|||||||
#cflags-$(CONFIG_PNX8550_JBS) += -Iinclude/asm-mips/mach-pnx8550
|
#cflags-$(CONFIG_PNX8550_JBS) += -Iinclude/asm-mips/mach-pnx8550
|
||||||
load-$(CONFIG_PNX8550_JBS) += 0xffffffff80060000
|
load-$(CONFIG_PNX8550_JBS) += 0xffffffff80060000
|
||||||
|
|
||||||
|
# NEC EMMA2RH boards
|
||||||
|
#
|
||||||
|
core-$(CONFIG_EMMA2RH) += arch/mips/emma2rh/common/
|
||||||
|
cflags-$(CONFIG_EMMA2RH) += -Iinclude/asm-mips/mach-emma2rh
|
||||||
|
|
||||||
|
# NEC EMMA2RH Mark-eins
|
||||||
|
core-$(CONFIG_MARKEINS) += arch/mips/emma2rh/markeins/
|
||||||
|
load-$(CONFIG_MARKEINS) += 0xffffffff88100000
|
||||||
|
|
||||||
#
|
#
|
||||||
# SGI IP22 (Indy/Indigo2)
|
# SGI IP22 (Indy/Indigo2)
|
||||||
#
|
#
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
* Careful if you change match 2 request!
|
* Careful if you change match 2 request!
|
||||||
* The interrupt handler is called directly from the low level dispatch code.
|
* The interrupt handler is called directly from the low level dispatch code.
|
||||||
*/
|
*/
|
||||||
au1xxx_irq_map_t au1xxx_ic0_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_ic0_map[] = {
|
||||||
|
|
||||||
#if defined(CONFIG_SOC_AU1000)
|
#if defined(CONFIG_SOC_AU1000)
|
||||||
{ AU1000_UART0_INT, INTC_INT_HIGH_LEVEL, 0},
|
{ AU1000_UART0_INT, INTC_INT_HIGH_LEVEL, 0},
|
||||||
@ -220,5 +220,5 @@ au1xxx_irq_map_t au1xxx_ic0_map[] = {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_ic0_nr_irqs = sizeof(au1xxx_ic0_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_ic0_nr_irqs = ARRAY_SIZE(au1xxx_ic0_map);
|
||||||
|
|
||||||
|
@ -40,17 +40,17 @@
|
|||||||
|
|
||||||
/* TBD */
|
/* TBD */
|
||||||
static struct resource pci_io_resource = {
|
static struct resource pci_io_resource = {
|
||||||
"pci IO space",
|
.start = PCI_IO_START,
|
||||||
(u32)PCI_IO_START,
|
.end = PCI_IO_END,
|
||||||
(u32)PCI_IO_END,
|
.name = "PCI IO space",
|
||||||
IORESOURCE_IO
|
.flags = IORESOURCE_IO
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource pci_mem_resource = {
|
static struct resource pci_mem_resource = {
|
||||||
"pci memory space",
|
.start = PCI_MEM_START,
|
||||||
(u32)PCI_MEM_START,
|
.end = PCI_MEM_END,
|
||||||
(u32)PCI_MEM_END,
|
.name = "PCI memory space",
|
||||||
IORESOURCE_MEM
|
.flags = IORESOURCE_MEM
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct pci_ops au1x_pci_ops;
|
extern struct pci_ops au1x_pci_ops;
|
||||||
|
@ -49,17 +49,13 @@ extern void __init board_setup(void);
|
|||||||
extern void au1000_restart(char *);
|
extern void au1000_restart(char *);
|
||||||
extern void au1000_halt(void);
|
extern void au1000_halt(void);
|
||||||
extern void au1000_power_off(void);
|
extern void au1000_power_off(void);
|
||||||
extern struct resource ioport_resource;
|
|
||||||
extern struct resource iomem_resource;
|
|
||||||
extern void (*board_time_init)(void);
|
|
||||||
extern void au1x_time_init(void);
|
extern void au1x_time_init(void);
|
||||||
extern void (*board_timer_setup)(struct irqaction *irq);
|
|
||||||
extern void au1x_timer_setup(struct irqaction *irq);
|
extern void au1x_timer_setup(struct irqaction *irq);
|
||||||
extern void au1xxx_time_init(void);
|
extern void au1xxx_time_init(void);
|
||||||
extern void au1xxx_timer_setup(struct irqaction *irq);
|
extern void au1xxx_timer_setup(struct irqaction *irq);
|
||||||
extern void set_cpuspec(void);
|
extern void set_cpuspec(void);
|
||||||
|
|
||||||
void __init plat_setup(void)
|
void __init plat_mem_setup(void)
|
||||||
{
|
{
|
||||||
struct cpu_spec *sp;
|
struct cpu_spec *sp;
|
||||||
char *argptr;
|
char *argptr;
|
||||||
|
@ -50,10 +50,6 @@
|
|||||||
#include <linux/mc146818rtc.h>
|
#include <linux/mc146818rtc.h>
|
||||||
#include <linux/timex.h>
|
#include <linux/timex.h>
|
||||||
|
|
||||||
extern void do_softirq(void);
|
|
||||||
extern volatile unsigned long wall_jiffies;
|
|
||||||
unsigned long missed_heart_beats = 0;
|
|
||||||
|
|
||||||
static unsigned long r4k_offset; /* Amount to increment compare reg each time */
|
static unsigned long r4k_offset; /* Amount to increment compare reg each time */
|
||||||
static unsigned long r4k_cur; /* What counter should be at next timer irq */
|
static unsigned long r4k_cur; /* What counter should be at next timer irq */
|
||||||
int no_au1xxx_32khz;
|
int no_au1xxx_32khz;
|
||||||
@ -388,10 +384,9 @@ static unsigned long do_fast_pm_gettimeoffset(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void au1xxx_timer_setup(struct irqaction *irq)
|
void __init au1xxx_timer_setup(struct irqaction *irq)
|
||||||
{
|
{
|
||||||
unsigned int est_freq;
|
unsigned int est_freq;
|
||||||
extern unsigned long (*do_gettimeoffset)(void);
|
|
||||||
|
|
||||||
printk("calculating r4koff... ");
|
printk("calculating r4koff... ");
|
||||||
r4k_offset = cal_r4koff();
|
r4k_offset = cal_r4koff();
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/au1000.h>
|
#include <asm/au1000.h>
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
|
|
||||||
{ AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0},
|
{ AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0},
|
||||||
{ AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 },
|
||||||
@ -57,4 +57,4 @@ au1xxx_irq_map_t au1xxx_irq_map[] = {
|
|||||||
{ AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_207, INTC_INT_LOW_LEVEL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
@ -80,7 +80,7 @@ char irq_tab_alchemy[][5] __initdata = {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
|
|
||||||
#ifndef CONFIG_MIPS_MIRAGE
|
#ifndef CONFIG_MIPS_MIRAGE
|
||||||
#ifdef CONFIG_MIPS_DB1550
|
#ifdef CONFIG_MIPS_DB1550
|
||||||
@ -101,4 +101,4 @@ au1xxx_irq_map_t au1xxx_irq_map[] = {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
@ -47,10 +47,10 @@
|
|||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/au1000.h>
|
#include <asm/au1000.h>
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
|
|
||||||
/* { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, */
|
/* { AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 }, */
|
||||||
{ AU1000_GPIO_21, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1000_GPIO_21, INTC_INT_LOW_LEVEL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
@ -58,7 +58,7 @@ char irq_tab_alchemy[][5] __initdata = {
|
|||||||
[7] = { -1, INTD, INTC, INTX, INTX}, /* IDSEL 07 - AdapterD-Slot1 (bottom) */
|
[7] = { -1, INTD, INTC, INTX, INTX}, /* IDSEL 07 - AdapterD-Slot1 (bottom) */
|
||||||
};
|
};
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
{ AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0},
|
{ AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0},
|
||||||
{ AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 },
|
||||||
{ AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 },
|
||||||
@ -66,4 +66,4 @@ au1xxx_irq_map_t au1xxx_irq_map[] = {
|
|||||||
{ AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
@ -47,8 +47,8 @@
|
|||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/mach-au1x00/au1000.h>
|
#include <asm/mach-au1x00/au1000.h>
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
{ AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1000_GPIO_15, INTC_INT_LOW_LEVEL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
@ -47,11 +47,11 @@
|
|||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/mach-au1x00/au1000.h>
|
#include <asm/mach-au1x00/au1000.h>
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
{ AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card Fully_Interted#
|
{ AU1000_GPIO_9, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card Fully_Interted#
|
||||||
{ AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card STSCHG#
|
{ AU1000_GPIO_10, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card STSCHG#
|
||||||
{ AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card IRQ#
|
{ AU1000_GPIO_11, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card IRQ#
|
||||||
{ AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, // DC_IRQ#
|
{ AU1000_GPIO_13, INTC_INT_LOW_LEVEL, 0 }, // DC_IRQ#
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
@ -55,11 +55,11 @@
|
|||||||
#define PB1200_INT_END DB1200_INT_END
|
#define PB1200_INT_END DB1200_INT_END
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
{ AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, // This is exteranl interrupt cascade
|
{ AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, // This is exteranl interrupt cascade
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Support for External interrupts on the PbAu1200 Development platform.
|
* Support for External interrupts on the PbAu1200 Development platform.
|
||||||
|
@ -52,7 +52,7 @@ char irq_tab_alchemy[][5] __initdata = {
|
|||||||
[13] = { -1, INTA, INTB, INTC, INTD}, /* IDSEL 13 - PCI slot */
|
[13] = { -1, INTA, INTB, INTC, INTD}, /* IDSEL 13 - PCI slot */
|
||||||
};
|
};
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
{ AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0},
|
{ AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0},
|
||||||
{ AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 },
|
||||||
{ AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 },
|
||||||
@ -60,4 +60,4 @@ au1xxx_irq_map_t au1xxx_irq_map[] = {
|
|||||||
{ AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_205, INTC_INT_LOW_LEVEL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
@ -52,9 +52,9 @@ char irq_tab_alchemy[][5] __initdata = {
|
|||||||
[13] = { -1, INTA, INTB, INTC, INTD}, /* IDSEL 13 - PCI slot 1 (right) */
|
[13] = { -1, INTA, INTB, INTC, INTD}, /* IDSEL 13 - PCI slot 1 (right) */
|
||||||
};
|
};
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
{ AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 },
|
||||||
{ AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/au1000.h>
|
#include <asm/au1000.h>
|
||||||
|
|
||||||
au1xxx_irq_map_t au1xxx_irq_map[] = {
|
au1xxx_irq_map_t __initdata au1xxx_irq_map[] = {
|
||||||
{ AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0},
|
{ AU1500_GPIO_204, INTC_INT_HIGH_LEVEL, 0},
|
||||||
{ AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_201, INTC_INT_LOW_LEVEL, 0 },
|
||||||
{ AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1500_GPIO_202, INTC_INT_LOW_LEVEL, 0 },
|
||||||
@ -63,4 +63,4 @@ au1xxx_irq_map_t au1xxx_irq_map[] = {
|
|||||||
{ AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 },
|
{ AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
|
int __initdata au1xxx_nr_irqs = ARRAY_SIZE(au1xxx_irq_map);
|
||||||
|
9
arch/mips/basler/excite/Makefile
Normal file
9
arch/mips/basler/excite/Makefile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Makefile for Basler eXcite
|
||||||
|
#
|
||||||
|
|
||||||
|
obj-$(CONFIG_BASLER_EXCITE) += excite_irq.o excite_prom.o excite_setup.o \
|
||||||
|
excite_device.o excite_procfs.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_KGDB) += excite_dbg_io.o
|
||||||
|
obj-m += excite_iodev.o
|
122
arch/mips/basler/excite/excite_dbg_io.c
Normal file
122
arch/mips/basler/excite/excite_dbg_io.c
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2004 by Basler Vision Technologies AG
|
||||||
|
* Author: Thomas Koeller <thomas.koeller@baslerweb.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <asm/gdb-stub.h>
|
||||||
|
#include <asm/rm9k-ocd.h>
|
||||||
|
#include <excite.h>
|
||||||
|
|
||||||
|
#if defined(CONFIG_SERIAL_8250) && CONFIG_SERIAL_8250_NR_UARTS > 1
|
||||||
|
#error Debug port used by serial driver
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define UART_CLK 25000000
|
||||||
|
#define BASE_BAUD (UART_CLK / 16)
|
||||||
|
#define REGISTER_BASE_0 0x0208UL
|
||||||
|
#define REGISTER_BASE_1 0x0238UL
|
||||||
|
|
||||||
|
#define REGISTER_BASE_DBG REGISTER_BASE_1
|
||||||
|
|
||||||
|
#define CPRR 0x0004
|
||||||
|
#define UACFG 0x0200
|
||||||
|
#define UAINTS 0x0204
|
||||||
|
#define UARBR (REGISTER_BASE_DBG + 0x0000)
|
||||||
|
#define UATHR (REGISTER_BASE_DBG + 0x0004)
|
||||||
|
#define UADLL (REGISTER_BASE_DBG + 0x0008)
|
||||||
|
#define UAIER (REGISTER_BASE_DBG + 0x000c)
|
||||||
|
#define UADLH (REGISTER_BASE_DBG + 0x0010)
|
||||||
|
#define UAIIR (REGISTER_BASE_DBG + 0x0014)
|
||||||
|
#define UAFCR (REGISTER_BASE_DBG + 0x0018)
|
||||||
|
#define UALCR (REGISTER_BASE_DBG + 0x001c)
|
||||||
|
#define UAMCR (REGISTER_BASE_DBG + 0x0020)
|
||||||
|
#define UALSR (REGISTER_BASE_DBG + 0x0024)
|
||||||
|
#define UAMSR (REGISTER_BASE_DBG + 0x0028)
|
||||||
|
#define UASCR (REGISTER_BASE_DBG + 0x002c)
|
||||||
|
|
||||||
|
#define PARITY_NONE 0
|
||||||
|
#define PARITY_ODD 0x08
|
||||||
|
#define PARITY_EVEN 0x18
|
||||||
|
#define PARITY_MARK 0x28
|
||||||
|
#define PARITY_SPACE 0x38
|
||||||
|
|
||||||
|
#define DATA_5BIT 0x0
|
||||||
|
#define DATA_6BIT 0x1
|
||||||
|
#define DATA_7BIT 0x2
|
||||||
|
#define DATA_8BIT 0x3
|
||||||
|
|
||||||
|
#define STOP_1BIT 0x0
|
||||||
|
#define STOP_2BIT 0x4
|
||||||
|
|
||||||
|
#define BAUD_DBG 57600
|
||||||
|
#define PARITY_DBG PARITY_NONE
|
||||||
|
#define DATA_DBG DATA_8BIT
|
||||||
|
#define STOP_DBG STOP_1BIT
|
||||||
|
|
||||||
|
/* Initialize the serial port for KGDB debugging */
|
||||||
|
void __init excite_kgdb_init(void)
|
||||||
|
{
|
||||||
|
const u32 divisor = BASE_BAUD / BAUD_DBG;
|
||||||
|
|
||||||
|
/* Take the UART out of reset */
|
||||||
|
titan_writel(0x00ff1cff, CPRR);
|
||||||
|
titan_writel(0x00000000, UACFG);
|
||||||
|
titan_writel(0x00000002, UACFG);
|
||||||
|
|
||||||
|
titan_writel(0x0, UALCR);
|
||||||
|
titan_writel(0x0, UAIER);
|
||||||
|
|
||||||
|
/* Disable FIFOs */
|
||||||
|
titan_writel(0x00, UAFCR);
|
||||||
|
|
||||||
|
titan_writel(0x80, UALCR);
|
||||||
|
titan_writel(divisor & 0xff, UADLL);
|
||||||
|
titan_writel((divisor & 0xff00) >> 8, UADLH);
|
||||||
|
titan_writel(0x0, UALCR);
|
||||||
|
|
||||||
|
titan_writel(DATA_DBG | PARITY_DBG | STOP_DBG, UALCR);
|
||||||
|
|
||||||
|
/* Enable receiver interrupt */
|
||||||
|
titan_readl(UARBR);
|
||||||
|
titan_writel(0x1, UAIER);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getDebugChar(void)
|
||||||
|
{
|
||||||
|
while (!(titan_readl(UALSR) & 0x1));
|
||||||
|
return titan_readl(UARBR);
|
||||||
|
}
|
||||||
|
|
||||||
|
int putDebugChar(int data)
|
||||||
|
{
|
||||||
|
while (!(titan_readl(UALSR) & 0x20));
|
||||||
|
titan_writel(data, UATHR);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* KGDB interrupt handler */
|
||||||
|
asmlinkage void excite_kgdb_inthdl(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
if (unlikely(
|
||||||
|
((titan_readl(UAIIR) & 0x7) == 4)
|
||||||
|
&& ((titan_readl(UARBR) & 0xff) == 0x3)))
|
||||||
|
set_async_breakpoint(®s->cp0_epc);
|
||||||
|
}
|
404
arch/mips/basler/excite/excite_device.c
Normal file
404
arch/mips/basler/excite/excite_device.c
Normal file
@ -0,0 +1,404 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2004 by Basler Vision Technologies AG
|
||||||
|
* Author: Thomas Koeller <thomas.koeller@baslerweb.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/ioport.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <linux/jiffies.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <asm/types.h>
|
||||||
|
#include <asm/rm9k-ocd.h>
|
||||||
|
|
||||||
|
#include <excite.h>
|
||||||
|
#include <rm9k_eth.h>
|
||||||
|
#include <rm9k_wdt.h>
|
||||||
|
#include <rm9k_xicap.h>
|
||||||
|
#include <excite_nandflash.h>
|
||||||
|
|
||||||
|
#include "excite_iodev.h"
|
||||||
|
|
||||||
|
#define RM9K_GE_UNIT 0
|
||||||
|
#define XICAP_UNIT 0
|
||||||
|
#define NAND_UNIT 0
|
||||||
|
|
||||||
|
#define DLL_TIMEOUT 3 /* seconds */
|
||||||
|
|
||||||
|
|
||||||
|
#define RINIT(__start__, __end__, __name__, __parent__) { \
|
||||||
|
.name = __name__ "_0", \
|
||||||
|
.start = (__start__), \
|
||||||
|
.end = (__end__), \
|
||||||
|
.flags = 0, \
|
||||||
|
.parent = (__parent__) \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RINIT_IRQ(__irq__, __name__) { \
|
||||||
|
.name = __name__ "_0", \
|
||||||
|
.start = (__irq__), \
|
||||||
|
.end = (__irq__), \
|
||||||
|
.flags = IORESOURCE_IRQ, \
|
||||||
|
.parent = NULL \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum {
|
||||||
|
slice_xicap,
|
||||||
|
slice_eth
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static struct resource
|
||||||
|
excite_ctr_resource = {
|
||||||
|
.name = "GPI counters",
|
||||||
|
.start = 0,
|
||||||
|
.end = 5,
|
||||||
|
.flags = 0,
|
||||||
|
.parent = NULL,
|
||||||
|
.sibling = NULL,
|
||||||
|
.child = NULL
|
||||||
|
},
|
||||||
|
excite_gpislice_resource = {
|
||||||
|
.name = "GPI slices",
|
||||||
|
.start = 0,
|
||||||
|
.end = 1,
|
||||||
|
.flags = 0,
|
||||||
|
.parent = NULL,
|
||||||
|
.sibling = NULL,
|
||||||
|
.child = NULL
|
||||||
|
},
|
||||||
|
excite_mdio_channel_resource = {
|
||||||
|
.name = "MDIO channels",
|
||||||
|
.start = 0,
|
||||||
|
.end = 1,
|
||||||
|
.flags = 0,
|
||||||
|
.parent = NULL,
|
||||||
|
.sibling = NULL,
|
||||||
|
.child = NULL
|
||||||
|
},
|
||||||
|
excite_fifomem_resource = {
|
||||||
|
.name = "FIFO memory",
|
||||||
|
.start = 0,
|
||||||
|
.end = 767,
|
||||||
|
.flags = 0,
|
||||||
|
.parent = NULL,
|
||||||
|
.sibling = NULL,
|
||||||
|
.child = NULL
|
||||||
|
},
|
||||||
|
excite_scram_resource = {
|
||||||
|
.name = "Scratch RAM",
|
||||||
|
.start = EXCITE_PHYS_SCRAM,
|
||||||
|
.end = EXCITE_PHYS_SCRAM + EXCITE_SIZE_SCRAM - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
.parent = NULL,
|
||||||
|
.sibling = NULL,
|
||||||
|
.child = NULL
|
||||||
|
},
|
||||||
|
excite_fpga_resource = {
|
||||||
|
.name = "System FPGA",
|
||||||
|
.start = EXCITE_PHYS_FPGA,
|
||||||
|
.end = EXCITE_PHYS_FPGA + EXCITE_SIZE_FPGA - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
.parent = NULL,
|
||||||
|
.sibling = NULL,
|
||||||
|
.child = NULL
|
||||||
|
},
|
||||||
|
excite_nand_resource = {
|
||||||
|
.name = "NAND flash control",
|
||||||
|
.start = EXCITE_PHYS_NAND,
|
||||||
|
.end = EXCITE_PHYS_NAND + EXCITE_SIZE_NAND - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
.parent = NULL,
|
||||||
|
.sibling = NULL,
|
||||||
|
.child = NULL
|
||||||
|
},
|
||||||
|
excite_titan_resource = {
|
||||||
|
.name = "TITAN registers",
|
||||||
|
.start = EXCITE_PHYS_TITAN,
|
||||||
|
.end = EXCITE_PHYS_TITAN + EXCITE_SIZE_TITAN - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
.parent = NULL,
|
||||||
|
.sibling = NULL,
|
||||||
|
.child = NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void adjust_resources(struct resource *res, unsigned int n)
|
||||||
|
{
|
||||||
|
struct resource *p;
|
||||||
|
const unsigned long mask = IORESOURCE_IO | IORESOURCE_MEM
|
||||||
|
| IORESOURCE_IRQ | IORESOURCE_DMA;
|
||||||
|
|
||||||
|
for (p = res; p < res + n; p++) {
|
||||||
|
const struct resource * const parent = p->parent;
|
||||||
|
if (parent) {
|
||||||
|
p->start += parent->start;
|
||||||
|
p->end += parent->start;
|
||||||
|
p->flags = parent->flags & mask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(CONFIG_EXCITE_FCAP_GPI) || defined(CONFIG_EXCITE_FCAP_GPI_MODULE)
|
||||||
|
static struct resource xicap_rsrc[] = {
|
||||||
|
RINIT(0x4840, 0x486f, XICAP_RESOURCE_FIFO_RX, &excite_titan_resource),
|
||||||
|
RINIT(0x4940, 0x494b, XICAP_RESOURCE_FIFO_TX, &excite_titan_resource),
|
||||||
|
RINIT(0x5040, 0x5127, XICAP_RESOURCE_XDMA, &excite_titan_resource),
|
||||||
|
RINIT(0x1000, 0x112f, XICAP_RESOURCE_PKTPROC, &excite_titan_resource),
|
||||||
|
RINIT(0x1100, 0x110f, XICAP_RESOURCE_PKT_STREAM, &excite_fpga_resource),
|
||||||
|
RINIT(0x0800, 0x0bff, XICAP_RESOURCE_DMADESC, &excite_scram_resource),
|
||||||
|
RINIT(slice_xicap, slice_xicap, XICAP_RESOURCE_GPI_SLICE, &excite_gpislice_resource),
|
||||||
|
RINIT(0x0100, 0x02ff, XICAP_RESOURCE_FIFO_BLK, &excite_fifomem_resource),
|
||||||
|
RINIT_IRQ(TITAN_IRQ, XICAP_RESOURCE_IRQ)
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device xicap_pdev = {
|
||||||
|
.name = XICAP_NAME,
|
||||||
|
.id = XICAP_UNIT,
|
||||||
|
.num_resources = ARRAY_SIZE(xicap_rsrc),
|
||||||
|
.resource = xicap_rsrc
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a platform device for the GPI port that receives the
|
||||||
|
* image data from the embedded camera.
|
||||||
|
*/
|
||||||
|
static int __init xicap_devinit(void)
|
||||||
|
{
|
||||||
|
unsigned long tend;
|
||||||
|
u32 reg;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
adjust_resources(xicap_rsrc, ARRAY_SIZE(xicap_rsrc));
|
||||||
|
|
||||||
|
/* Power up the slice and configure it. */
|
||||||
|
reg = titan_readl(CPTC1R);
|
||||||
|
reg &= ~(0x11100 << slice_xicap);
|
||||||
|
titan_writel(reg, CPTC1R);
|
||||||
|
|
||||||
|
/* Enable slice & DLL. */
|
||||||
|
reg= titan_readl(CPRR);
|
||||||
|
reg &= ~(0x00030003 << (slice_xicap * 2));
|
||||||
|
titan_writel(reg, CPRR);
|
||||||
|
|
||||||
|
/* Wait for DLLs to lock */
|
||||||
|
tend = jiffies + DLL_TIMEOUT * HZ;
|
||||||
|
while (time_before(jiffies, tend)) {
|
||||||
|
if (!(~titan_readl(CPDSR) & (0x1 << (slice_xicap * 4))))
|
||||||
|
break;
|
||||||
|
yield();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (~titan_readl(CPDSR) & (0x1 << (slice_xicap * 4))) {
|
||||||
|
printk(KERN_ERR "%s: DLL not locked after %u seconds\n",
|
||||||
|
xicap_pdev.name, DLL_TIMEOUT);
|
||||||
|
retval = -ETIME;
|
||||||
|
} else {
|
||||||
|
/* Register platform device */
|
||||||
|
retval = platform_device_register(&xicap_pdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(xicap_devinit);
|
||||||
|
#endif /* defined(CONFIG_EXCITE_FCAP_GPI) || defined(CONFIG_EXCITE_FCAP_GPI_MODULE) */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(CONFIG_WDT_RM9K_GPI) || defined(CONFIG_WDT_RM9K_GPI_MODULE)
|
||||||
|
static struct resource wdt_rsrc[] = {
|
||||||
|
RINIT(0, 0, WDT_RESOURCE_COUNTER, &excite_ctr_resource),
|
||||||
|
RINIT(0x0084, 0x008f, WDT_RESOURCE_REGS, &excite_titan_resource),
|
||||||
|
RINIT_IRQ(TITAN_IRQ, WDT_RESOURCE_IRQ)
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device wdt_pdev = {
|
||||||
|
.name = WDT_NAME,
|
||||||
|
.id = -1,
|
||||||
|
.num_resources = ARRAY_SIZE(wdt_rsrc),
|
||||||
|
.resource = wdt_rsrc
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a platform device for the GPI port that receives the
|
||||||
|
* image data from the embedded camera.
|
||||||
|
*/
|
||||||
|
static int __init wdt_devinit(void)
|
||||||
|
{
|
||||||
|
adjust_resources(wdt_rsrc, ARRAY_SIZE(wdt_rsrc));
|
||||||
|
return platform_device_register(&wdt_pdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(wdt_devinit);
|
||||||
|
#endif /* defined(CONFIG_WDT_RM9K_GPI) || defined(CONFIG_WDT_RM9K_GPI_MODULE) */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static struct resource excite_nandflash_rsrc[] = {
|
||||||
|
RINIT(0x2000, 0x201f, EXCITE_NANDFLASH_RESOURCE_REGS, &excite_nand_resource)
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device excite_nandflash_pdev = {
|
||||||
|
.name = "excite_nand",
|
||||||
|
.id = NAND_UNIT,
|
||||||
|
.num_resources = ARRAY_SIZE(excite_nandflash_rsrc),
|
||||||
|
.resource = excite_nandflash_rsrc
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a platform device for the access to the nand-flash
|
||||||
|
* port
|
||||||
|
*/
|
||||||
|
static int __init excite_nandflash_devinit(void)
|
||||||
|
{
|
||||||
|
adjust_resources(excite_nandflash_rsrc, ARRAY_SIZE(excite_nandflash_rsrc));
|
||||||
|
|
||||||
|
/* nothing to be done here */
|
||||||
|
|
||||||
|
/* Register platform device */
|
||||||
|
return platform_device_register(&excite_nandflash_pdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(excite_nandflash_devinit);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static struct resource iodev_rsrc[] = {
|
||||||
|
RINIT_IRQ(FPGA1_IRQ, IODEV_RESOURCE_IRQ)
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device io_pdev = {
|
||||||
|
.name = IODEV_NAME,
|
||||||
|
.id = -1,
|
||||||
|
.num_resources = ARRAY_SIZE(iodev_rsrc),
|
||||||
|
.resource = iodev_rsrc
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a platform device for the external I/O ports.
|
||||||
|
*/
|
||||||
|
static int __init io_devinit(void)
|
||||||
|
{
|
||||||
|
adjust_resources(iodev_rsrc, ARRAY_SIZE(iodev_rsrc));
|
||||||
|
return platform_device_register(&io_pdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(io_devinit);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(CONFIG_RM9K_GE) || defined(CONFIG_RM9K_GE_MODULE)
|
||||||
|
static struct resource rm9k_ge_rsrc[] = {
|
||||||
|
RINIT(0x2200, 0x27ff, RM9K_GE_RESOURCE_MAC, &excite_titan_resource),
|
||||||
|
RINIT(0x1800, 0x1fff, RM9K_GE_RESOURCE_MSTAT, &excite_titan_resource),
|
||||||
|
RINIT(0x2000, 0x212f, RM9K_GE_RESOURCE_PKTPROC, &excite_titan_resource),
|
||||||
|
RINIT(0x5140, 0x5227, RM9K_GE_RESOURCE_XDMA, &excite_titan_resource),
|
||||||
|
RINIT(0x4870, 0x489f, RM9K_GE_RESOURCE_FIFO_RX, &excite_titan_resource),
|
||||||
|
RINIT(0x494c, 0x4957, RM9K_GE_RESOURCE_FIFO_TX, &excite_titan_resource),
|
||||||
|
RINIT(0x0000, 0x007f, RM9K_GE_RESOURCE_FIFOMEM_RX, &excite_fifomem_resource),
|
||||||
|
RINIT(0x0080, 0x00ff, RM9K_GE_RESOURCE_FIFOMEM_TX, &excite_fifomem_resource),
|
||||||
|
RINIT(0x0180, 0x019f, RM9K_GE_RESOURCE_PHY, &excite_titan_resource),
|
||||||
|
RINIT(0x0000, 0x03ff, RM9K_GE_RESOURCE_DMADESC_RX, &excite_scram_resource),
|
||||||
|
RINIT(0x0400, 0x07ff, RM9K_GE_RESOURCE_DMADESC_TX, &excite_scram_resource),
|
||||||
|
RINIT(slice_eth, slice_eth, RM9K_GE_RESOURCE_GPI_SLICE, &excite_gpislice_resource),
|
||||||
|
RINIT(0, 0, RM9K_GE_RESOURCE_MDIO_CHANNEL, &excite_mdio_channel_resource),
|
||||||
|
RINIT_IRQ(TITAN_IRQ, RM9K_GE_RESOURCE_IRQ_MAIN),
|
||||||
|
RINIT_IRQ(PHY_IRQ, RM9K_GE_RESOURCE_IRQ_PHY)
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device rm9k_ge_pdev = {
|
||||||
|
.name = RM9K_GE_NAME,
|
||||||
|
.id = RM9K_GE_UNIT,
|
||||||
|
.num_resources = ARRAY_SIZE(rm9k_ge_rsrc),
|
||||||
|
.resource = rm9k_ge_rsrc
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a platform device for the Ethernet port.
|
||||||
|
*/
|
||||||
|
static int __init rm9k_ge_devinit(void)
|
||||||
|
{
|
||||||
|
u32 reg;
|
||||||
|
|
||||||
|
adjust_resources(rm9k_ge_rsrc, ARRAY_SIZE(rm9k_ge_rsrc));
|
||||||
|
|
||||||
|
/* Power up the slice and configure it. */
|
||||||
|
reg = titan_readl(CPTC1R);
|
||||||
|
reg &= ~(0x11000 << slice_eth);
|
||||||
|
reg |= 0x100 << slice_eth;
|
||||||
|
titan_writel(reg, CPTC1R);
|
||||||
|
|
||||||
|
/* Take the MAC out of reset, reset the DLLs. */
|
||||||
|
reg = titan_readl(CPRR);
|
||||||
|
reg &= ~(0x00030000 << (slice_eth * 2));
|
||||||
|
reg |= 0x3 << (slice_eth * 2);
|
||||||
|
titan_writel(reg, CPRR);
|
||||||
|
|
||||||
|
return platform_device_register(&rm9k_ge_pdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(rm9k_ge_devinit);
|
||||||
|
#endif /* defined(CONFIG_RM9K_GE) || defined(CONFIG_RM9K_GE_MODULE) */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int __init excite_setup_devs(void)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
u32 reg;
|
||||||
|
|
||||||
|
/* Enable xdma and fifo interrupts */
|
||||||
|
reg = titan_readl(0x0050);
|
||||||
|
titan_writel(reg | 0x18000000, 0x0050);
|
||||||
|
|
||||||
|
res = request_resource(&iomem_resource, &excite_titan_resource);
|
||||||
|
if (res)
|
||||||
|
return res;
|
||||||
|
res = request_resource(&iomem_resource, &excite_scram_resource);
|
||||||
|
if (res)
|
||||||
|
return res;
|
||||||
|
res = request_resource(&iomem_resource, &excite_fpga_resource);
|
||||||
|
if (res)
|
||||||
|
return res;
|
||||||
|
res = request_resource(&iomem_resource, &excite_nand_resource);
|
||||||
|
if (res)
|
||||||
|
return res;
|
||||||
|
excite_fpga_resource.flags = excite_fpga_resource.parent->flags &
|
||||||
|
( IORESOURCE_IO | IORESOURCE_MEM
|
||||||
|
| IORESOURCE_IRQ | IORESOURCE_DMA);
|
||||||
|
excite_nand_resource.flags = excite_nand_resource.parent->flags &
|
||||||
|
( IORESOURCE_IO | IORESOURCE_MEM
|
||||||
|
| IORESOURCE_IRQ | IORESOURCE_DMA);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
arch_initcall(excite_setup_devs);
|
||||||
|
|
294
arch/mips/basler/excite/excite_flashtest.c
Normal file
294
arch/mips/basler/excite/excite_flashtest.c
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005 by Basler Vision Technologies AG
|
||||||
|
* Author: Thies Moeller <thies.moeller@baslerweb.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
#include <linux/ioport.h>
|
||||||
|
#include <linux/device.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
|
||||||
|
#include <excite.h>
|
||||||
|
|
||||||
|
#include <asm/io.h>
|
||||||
|
|
||||||
|
#include <linux/mtd/mtd.h>
|
||||||
|
#include <linux/mtd/nand.h>
|
||||||
|
#include <linux/mtd/nand_ecc.h>
|
||||||
|
#include <linux/mtd/partitions.h>
|
||||||
|
#include <asm/rm9k-ocd.h> // for ocd_write
|
||||||
|
#include <linux/workqueue.h> // for queue
|
||||||
|
|
||||||
|
#include "excite_nandflash.h"
|
||||||
|
#include "nandflash.h"
|
||||||
|
|
||||||
|
#define PFX "excite flashtest: "
|
||||||
|
typedef void __iomem *io_reg_t;
|
||||||
|
|
||||||
|
#define io_readb(__a__) __raw_readb((__a__))
|
||||||
|
#define io_writeb(__v__, __a__) __raw_writeb((__v__), (__a__))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static inline const struct resource *excite_nandflash_get_resource(
|
||||||
|
struct platform_device *d, unsigned long flags, const char *basename)
|
||||||
|
{
|
||||||
|
const char fmt[] = "%s_%u";
|
||||||
|
char buf[80];
|
||||||
|
|
||||||
|
if (unlikely(snprintf(buf, sizeof buf, fmt, basename, d->id) >= sizeof buf))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return platform_get_resource_byname(d, flags, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline io_reg_t
|
||||||
|
excite_nandflash_map_regs(struct platform_device *d, const char *basename)
|
||||||
|
{
|
||||||
|
void *result = NULL;
|
||||||
|
const struct resource *const r =
|
||||||
|
excite_nandflash_get_resource(d, IORESOURCE_MEM, basename);
|
||||||
|
if (r)
|
||||||
|
result = ioremap_nocache(r->start, r->end + 1 - r->start);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* controller and mtd information */
|
||||||
|
|
||||||
|
struct excite_nandflash_drvdata {
|
||||||
|
struct mtd_info board_mtd;
|
||||||
|
struct nand_chip board_chip;
|
||||||
|
io_reg_t regs;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* command and control functions */
|
||||||
|
static void excite_nandflash_hwcontrol(struct mtd_info *mtd, int cmd)
|
||||||
|
{
|
||||||
|
struct nand_chip *this = mtd->priv;
|
||||||
|
io_reg_t regs = container_of(mtd,struct excite_nandflash_drvdata,board_mtd)->regs;
|
||||||
|
|
||||||
|
switch (cmd) {
|
||||||
|
/* Select the command latch */
|
||||||
|
case NAND_CTL_SETCLE: this->IO_ADDR_W = regs + EXCITE_NANDFLASH_CMD;
|
||||||
|
break;
|
||||||
|
/* Deselect the command latch */
|
||||||
|
case NAND_CTL_CLRCLE: this->IO_ADDR_W = regs + EXCITE_NANDFLASH_DATA;
|
||||||
|
break;
|
||||||
|
/* Select the address latch */
|
||||||
|
case NAND_CTL_SETALE: this->IO_ADDR_W = regs + EXCITE_NANDFLASH_ADDR;
|
||||||
|
break;
|
||||||
|
/* Deselect the address latch */
|
||||||
|
case NAND_CTL_CLRALE: this->IO_ADDR_W = regs + EXCITE_NANDFLASH_DATA;
|
||||||
|
break;
|
||||||
|
/* Select the chip -- not used */
|
||||||
|
case NAND_CTL_SETNCE:
|
||||||
|
break;
|
||||||
|
/* Deselect the chip -- not used */
|
||||||
|
case NAND_CTL_CLRNCE:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->IO_ADDR_R = this->IO_ADDR_W;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* excite_nandflash_devready()
|
||||||
|
*
|
||||||
|
* returns 0 if the nand is busy, 1 if it is ready
|
||||||
|
*/
|
||||||
|
static int excite_nandflash_devready(struct mtd_info *mtd)
|
||||||
|
{
|
||||||
|
struct excite_nandflash_drvdata *drvdata =
|
||||||
|
container_of(mtd, struct excite_nandflash_drvdata, board_mtd);
|
||||||
|
|
||||||
|
return io_readb(drvdata->regs + EXCITE_NANDFLASH_STATUS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* device management functions */
|
||||||
|
|
||||||
|
/* excite_nandflash_remove
|
||||||
|
*
|
||||||
|
* called by device layer to remove the driver
|
||||||
|
* the binding to the mtd and all allocated
|
||||||
|
* resources are released
|
||||||
|
*/
|
||||||
|
static int excite_nandflash_remove(struct device *dev)
|
||||||
|
{
|
||||||
|
struct excite_nandflash_drvdata *this = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
pr_info(PFX "remove");
|
||||||
|
|
||||||
|
dev_set_drvdata(dev, NULL);
|
||||||
|
|
||||||
|
if (this == NULL) {
|
||||||
|
pr_debug(PFX "call remove without private data!!");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* free the common resources */
|
||||||
|
if (this->regs != NULL) {
|
||||||
|
iounmap(this->regs);
|
||||||
|
this->regs = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
kfree(this);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int elapsed;
|
||||||
|
|
||||||
|
void my_workqueue_handler(void *arg)
|
||||||
|
{
|
||||||
|
elapsed = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
DECLARE_WORK(sigElapsed, my_workqueue_handler, 0);
|
||||||
|
|
||||||
|
|
||||||
|
/* excite_nandflash_probe
|
||||||
|
*
|
||||||
|
* called by device layer when it finds a device matching
|
||||||
|
* one our driver can handled. This code checks to see if
|
||||||
|
* it can allocate all necessary resources then calls the
|
||||||
|
* nand layer to look for devices
|
||||||
|
*/
|
||||||
|
static int excite_nandflash_probe(struct device *dev)
|
||||||
|
{
|
||||||
|
struct platform_device *pdev = to_platform_device(dev);
|
||||||
|
|
||||||
|
struct excite_nandflash_drvdata *drvdata; /* private driver data */
|
||||||
|
struct nand_chip *board_chip; /* private flash chip data */
|
||||||
|
struct mtd_info *board_mtd; /* mtd info for this board */
|
||||||
|
|
||||||
|
int err = 0;
|
||||||
|
int count = 0;
|
||||||
|
struct timeval tv,endtv;
|
||||||
|
unsigned int dt;
|
||||||
|
|
||||||
|
pr_info(PFX "probe dev: (%p)\n", dev);
|
||||||
|
|
||||||
|
pr_info(PFX "adjust LB timing\n");
|
||||||
|
ocd_writel(0x00000330, LDP2);
|
||||||
|
|
||||||
|
drvdata = kmalloc(sizeof(*drvdata), GFP_KERNEL);
|
||||||
|
if (unlikely(!drvdata)) {
|
||||||
|
printk(KERN_ERR PFX "no memory for drvdata\n");
|
||||||
|
err = -ENOMEM;
|
||||||
|
goto mem_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize structures */
|
||||||
|
memset(drvdata, 0, sizeof(*drvdata));
|
||||||
|
|
||||||
|
/* bind private data into driver */
|
||||||
|
dev_set_drvdata(dev, drvdata);
|
||||||
|
|
||||||
|
/* allocate and map the resource */
|
||||||
|
drvdata->regs =
|
||||||
|
excite_nandflash_map_regs(pdev, EXCITE_NANDFLASH_RESOURCE_REGS);
|
||||||
|
|
||||||
|
if (unlikely(!drvdata->regs)) {
|
||||||
|
printk(KERN_ERR PFX "cannot reserve register region\n");
|
||||||
|
err = -ENXIO;
|
||||||
|
goto io_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialise our chip */
|
||||||
|
board_chip = &drvdata->board_chip;
|
||||||
|
|
||||||
|
board_chip->IO_ADDR_R = drvdata->regs + EXCITE_NANDFLASH_DATA;
|
||||||
|
board_chip->IO_ADDR_W = drvdata->regs + EXCITE_NANDFLASH_DATA;
|
||||||
|
|
||||||
|
board_chip->hwcontrol = excite_nandflash_hwcontrol;
|
||||||
|
board_chip->dev_ready = excite_nandflash_devready;
|
||||||
|
|
||||||
|
board_chip->chip_delay = 25;
|
||||||
|
#if 0
|
||||||
|
/* TODO: speedup the initial scan */
|
||||||
|
board_chip->options = NAND_USE_FLASH_BBT;
|
||||||
|
#endif
|
||||||
|
board_chip->eccmode = NAND_ECC_SOFT;
|
||||||
|
|
||||||
|
/* link chip to mtd */
|
||||||
|
board_mtd = &drvdata->board_mtd;
|
||||||
|
board_mtd->priv = board_chip;
|
||||||
|
|
||||||
|
|
||||||
|
pr_info(PFX "FlashTest\n");
|
||||||
|
elapsed = 0;
|
||||||
|
/* schedule_delayed_work(&sigElapsed, 1*HZ);
|
||||||
|
while (!elapsed) {
|
||||||
|
io_readb(drvdata->regs + EXCITE_NANDFLASH_STATUS);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
pr_info(PFX "reads in 1 sec --> %d\n",count);
|
||||||
|
*/
|
||||||
|
do_gettimeofday(&tv);
|
||||||
|
for (count = 0 ; count < 1000000; count ++) {
|
||||||
|
io_readb(drvdata->regs + EXCITE_NANDFLASH_STATUS);
|
||||||
|
}
|
||||||
|
do_gettimeofday(&endtv);
|
||||||
|
dt = (endtv.tv_sec - tv.tv_sec) * 1000000 + endtv.tv_usec - tv.tv_usec;
|
||||||
|
pr_info(PFX "%8d us timeval\n",dt);
|
||||||
|
pr_info(PFX "EndFlashTest\n");
|
||||||
|
|
||||||
|
/* return with error to unload everything
|
||||||
|
*/
|
||||||
|
io_error:
|
||||||
|
iounmap(drvdata->regs);
|
||||||
|
|
||||||
|
mem_error:
|
||||||
|
kfree(drvdata);
|
||||||
|
|
||||||
|
if (err == 0)
|
||||||
|
err = -EINVAL;
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct device_driver excite_nandflash_driver = {
|
||||||
|
.name = "excite_nand",
|
||||||
|
.bus = &platform_bus_type,
|
||||||
|
.probe = excite_nandflash_probe,
|
||||||
|
.remove = excite_nandflash_remove,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init excite_nandflash_init(void)
|
||||||
|
{
|
||||||
|
pr_info(PFX "register Driver (Rev: $Revision:$)\n");
|
||||||
|
return driver_register(&excite_nandflash_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __exit excite_nandflash_exit(void)
|
||||||
|
{
|
||||||
|
driver_unregister(&excite_nandflash_driver);
|
||||||
|
pr_info(PFX "Driver unregistered");
|
||||||
|
}
|
||||||
|
|
||||||
|
module_init(excite_nandflash_init);
|
||||||
|
module_exit(excite_nandflash_exit);
|
||||||
|
|
||||||
|
MODULE_AUTHOR("Thies Moeller <thies.moeller@baslerweb.com>");
|
||||||
|
MODULE_DESCRIPTION("Basler eXcite NAND-Flash driver");
|
||||||
|
MODULE_LICENSE("GPL");
|
80
arch/mips/basler/excite/excite_fpga.h
Normal file
80
arch/mips/basler/excite/excite_fpga.h
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
#ifndef EXCITE_FPGA_H_INCLUDED
|
||||||
|
#define EXCITE_FPGA_H_INCLUDED
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adress alignment of the individual FPGA bytes.
|
||||||
|
* The address arrangement of the individual bytes of the FPGA is two
|
||||||
|
* byte aligned at the embedded MK2 platform.
|
||||||
|
*/
|
||||||
|
#ifdef EXCITE_CCI_FPGA_MK2
|
||||||
|
typedef unsigned char excite_cci_fpga_align_t __attribute__ ((aligned(2)));
|
||||||
|
#else
|
||||||
|
typedef unsigned char excite_cci_fpga_align_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Size of Dual Ported RAM.
|
||||||
|
*/
|
||||||
|
#define EXCITE_DPR_SIZE 263
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Size of Reserved Status Fields in Dual Ported RAM.
|
||||||
|
*/
|
||||||
|
#define EXCITE_DPR_STATUS_SIZE 7
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FPGA.
|
||||||
|
* Hardware register layout of the FPGA interface. The FPGA must accessed
|
||||||
|
* byte wise solely.
|
||||||
|
* @see EXCITE_CCI_DPR_MK2
|
||||||
|
*/
|
||||||
|
typedef struct excite_fpga {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dual Ported RAM.
|
||||||
|
*/
|
||||||
|
excite_cci_fpga_align_t dpr[EXCITE_DPR_SIZE];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Status.
|
||||||
|
*/
|
||||||
|
excite_cci_fpga_align_t status[EXCITE_DPR_STATUS_SIZE];
|
||||||
|
|
||||||
|
#ifdef EXCITE_CCI_FPGA_MK2
|
||||||
|
/**
|
||||||
|
* RM9000 Interrupt.
|
||||||
|
* Write access initiates interrupt at the RM9000 (MIPS) processor of the eXcite.
|
||||||
|
*/
|
||||||
|
excite_cci_fpga_align_t rm9k_int;
|
||||||
|
#else
|
||||||
|
/**
|
||||||
|
* MK2 Interrupt.
|
||||||
|
* Write access initiates interrupt at the ARM processor of the MK2.
|
||||||
|
*/
|
||||||
|
excite_cci_fpga_align_t mk2_int;
|
||||||
|
|
||||||
|
excite_cci_fpga_align_t gap[0x1000-0x10f];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IRQ Source/Acknowledge.
|
||||||
|
*/
|
||||||
|
excite_cci_fpga_align_t rm9k_irq_src;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* IRQ Mask.
|
||||||
|
* Set bits enable the related interrupt.
|
||||||
|
*/
|
||||||
|
excite_cci_fpga_align_t rm9k_irq_mask;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
} excite_fpga;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* ndef EXCITE_FPGA_H_INCLUDED */
|
183
arch/mips/basler/excite/excite_iodev.c
Normal file
183
arch/mips/basler/excite/excite_iodev.c
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005 by Basler Vision Technologies AG
|
||||||
|
* Author: Thomas Koeller <thomas.koeller@baslerweb.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/wait.h>
|
||||||
|
#include <linux/poll.h>
|
||||||
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/miscdevice.h>
|
||||||
|
|
||||||
|
#include "excite_iodev.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static const struct resource *iodev_get_resource(struct platform_device *, const char *, unsigned int);
|
||||||
|
static int __init iodev_probe(struct device *);
|
||||||
|
static int __exit iodev_remove(struct device *);
|
||||||
|
static int iodev_open(struct inode *, struct file *);
|
||||||
|
static int iodev_release(struct inode *, struct file *);
|
||||||
|
static ssize_t iodev_read(struct file *, char __user *, size_t s, loff_t *);
|
||||||
|
static unsigned int iodev_poll(struct file *, struct poll_table_struct *);
|
||||||
|
static irqreturn_t iodev_irqhdl(int, void *, struct pt_regs *);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static const char iodev_name[] = "iodev";
|
||||||
|
static unsigned int iodev_irq;
|
||||||
|
static DECLARE_WAIT_QUEUE_HEAD(wq);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static struct file_operations fops =
|
||||||
|
{
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.open = iodev_open,
|
||||||
|
.release = iodev_release,
|
||||||
|
.read = iodev_read,
|
||||||
|
.poll = iodev_poll
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct miscdevice miscdev =
|
||||||
|
{
|
||||||
|
.minor = MISC_DYNAMIC_MINOR,
|
||||||
|
.name = iodev_name,
|
||||||
|
.fops = &fops
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct device_driver iodev_driver =
|
||||||
|
{
|
||||||
|
.name = (char *) iodev_name,
|
||||||
|
.bus = &platform_bus_type,
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.probe = iodev_probe,
|
||||||
|
.remove = __exit_p(iodev_remove)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static const struct resource *
|
||||||
|
iodev_get_resource(struct platform_device *pdv, const char *name,
|
||||||
|
unsigned int type)
|
||||||
|
{
|
||||||
|
char buf[80];
|
||||||
|
if (snprintf(buf, sizeof buf, "%s_0", name) >= sizeof buf)
|
||||||
|
return NULL;
|
||||||
|
return platform_get_resource_byname(pdv, type, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* No hotplugging on the platform bus - use __init */
|
||||||
|
static int __init iodev_probe(struct device *dev)
|
||||||
|
{
|
||||||
|
struct platform_device * const pdv = to_platform_device(dev);
|
||||||
|
const struct resource * const ri =
|
||||||
|
iodev_get_resource(pdv, IODEV_RESOURCE_IRQ, IORESOURCE_IRQ);
|
||||||
|
|
||||||
|
if (unlikely(!ri))
|
||||||
|
return -ENXIO;
|
||||||
|
|
||||||
|
iodev_irq = ri->start;
|
||||||
|
return misc_register(&miscdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int __exit iodev_remove(struct device *dev)
|
||||||
|
{
|
||||||
|
return misc_deregister(&miscdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int iodev_open(struct inode *i, struct file *f)
|
||||||
|
{
|
||||||
|
return request_irq(iodev_irq, iodev_irqhdl, SA_INTERRUPT,
|
||||||
|
iodev_name, &miscdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int iodev_release(struct inode *i, struct file *f)
|
||||||
|
{
|
||||||
|
free_irq(iodev_irq, &miscdev);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static ssize_t
|
||||||
|
iodev_read(struct file *f, char __user *d, size_t s, loff_t *o)
|
||||||
|
{
|
||||||
|
ssize_t ret;
|
||||||
|
DEFINE_WAIT(w);
|
||||||
|
|
||||||
|
prepare_to_wait(&wq, &w, TASK_INTERRUPTIBLE);
|
||||||
|
if (!signal_pending(current))
|
||||||
|
schedule();
|
||||||
|
ret = signal_pending(current) ? -ERESTARTSYS : 0;
|
||||||
|
finish_wait(&wq, &w);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static unsigned int iodev_poll(struct file *f, struct poll_table_struct *p)
|
||||||
|
{
|
||||||
|
poll_wait(f, &wq, p);
|
||||||
|
return POLLOUT | POLLWRNORM;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static irqreturn_t iodev_irqhdl(int irq, void *ctxt, struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
wake_up(&wq);
|
||||||
|
return IRQ_HANDLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int __init iodev_init_module(void)
|
||||||
|
{
|
||||||
|
return driver_register(&iodev_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void __exit iodev_cleanup_module(void)
|
||||||
|
{
|
||||||
|
driver_unregister(&iodev_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
module_init(iodev_init_module);
|
||||||
|
module_exit(iodev_cleanup_module);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MODULE_AUTHOR("Thomas Koeller <thomas.koeller@baslerweb.com>");
|
||||||
|
MODULE_DESCRIPTION("Basler eXcite i/o interrupt handler");
|
||||||
|
MODULE_VERSION("0.0");
|
||||||
|
MODULE_LICENSE("GPL");
|
10
arch/mips/basler/excite/excite_iodev.h
Normal file
10
arch/mips/basler/excite/excite_iodev.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef __EXCITE_IODEV_H__
|
||||||
|
#define __EXCITE_IODEV_H__
|
||||||
|
|
||||||
|
/* Device name */
|
||||||
|
#define IODEV_NAME "iodev"
|
||||||
|
|
||||||
|
/* Resource names */
|
||||||
|
#define IODEV_RESOURCE_IRQ "excite_iodev_irq"
|
||||||
|
|
||||||
|
#endif /* __EXCITE_IODEV_H__ */
|
129
arch/mips/basler/excite/excite_irq.c
Normal file
129
arch/mips/basler/excite/excite_irq.c
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) by Basler Vision Technologies AG
|
||||||
|
* Author: Thomas Koeller <thomas.koeller@baslereb.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/errno.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/kernel_stat.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/signal.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/ioport.h>
|
||||||
|
#include <linux/timex.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
#include <linux/random.h>
|
||||||
|
#include <asm/bitops.h>
|
||||||
|
#include <asm/bootinfo.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/irq.h>
|
||||||
|
#include <asm/irq_cpu.h>
|
||||||
|
#include <asm/mipsregs.h>
|
||||||
|
#include <asm/system.h>
|
||||||
|
#include <asm/rm9k-ocd.h>
|
||||||
|
|
||||||
|
#include <excite.h>
|
||||||
|
|
||||||
|
extern asmlinkage void excite_handle_int(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the interrupt handler
|
||||||
|
*/
|
||||||
|
void __init arch_init_irq(void)
|
||||||
|
{
|
||||||
|
mips_cpu_irq_init(0);
|
||||||
|
rm7k_cpu_irq_init(8);
|
||||||
|
rm9k_cpu_irq_init(12);
|
||||||
|
|
||||||
|
#ifdef CONFIG_KGDB
|
||||||
|
excite_kgdb_init();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
const u32
|
||||||
|
interrupts = read_c0_cause() >> 8,
|
||||||
|
mask = ((read_c0_status() >> 8) & 0x000000ff) |
|
||||||
|
(read_c0_intcontrol() & 0x0000ff00),
|
||||||
|
pending = interrupts & mask;
|
||||||
|
u32 msgintflags, msgintmask, msgint;
|
||||||
|
|
||||||
|
/* process timer interrupt */
|
||||||
|
if (pending & (1 << TIMER_IRQ)) {
|
||||||
|
do_IRQ(TIMER_IRQ, regs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Process PCI interrupts */
|
||||||
|
#if USB_IRQ < 10
|
||||||
|
msgintflags = ocd_readl(INTP0Status0 + (USB_MSGINT / 0x20 * 0x10));
|
||||||
|
msgintmask = ocd_readl(INTP0Mask0 + (USB_MSGINT / 0x20 * 0x10));
|
||||||
|
msgint = msgintflags & msgintmask & (0x1 << (USB_MSGINT % 0x20));
|
||||||
|
if ((pending & (1 << USB_IRQ)) && msgint) {
|
||||||
|
#else
|
||||||
|
if (pending & (1 << USB_IRQ)) {
|
||||||
|
#endif
|
||||||
|
do_IRQ(USB_IRQ, regs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Process TITAN interrupts */
|
||||||
|
msgintflags = ocd_readl(INTP0Status0 + (TITAN_MSGINT / 0x20 * 0x10));
|
||||||
|
msgintmask = ocd_readl(INTP0Mask0 + (TITAN_MSGINT / 0x20 * 0x10));
|
||||||
|
msgint = msgintflags & msgintmask & (0x1 << (TITAN_MSGINT % 0x20));
|
||||||
|
if ((pending & (1 << TITAN_IRQ)) && msgint) {
|
||||||
|
ocd_writel(msgint, INTP0Clear0 + (TITAN_MSGINT / 0x20 * 0x10));
|
||||||
|
#if defined(CONFIG_KGDB)
|
||||||
|
excite_kgdb_inthdl(regs);
|
||||||
|
#endif
|
||||||
|
do_IRQ(TITAN_IRQ, regs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Process FPGA line #0 interrupts */
|
||||||
|
msgintflags = ocd_readl(INTP0Status0 + (FPGA0_MSGINT / 0x20 * 0x10));
|
||||||
|
msgintmask = ocd_readl(INTP0Mask0 + (FPGA0_MSGINT / 0x20 * 0x10));
|
||||||
|
msgint = msgintflags & msgintmask & (0x1 << (FPGA0_MSGINT % 0x20));
|
||||||
|
if ((pending & (1 << FPGA0_IRQ)) && msgint) {
|
||||||
|
do_IRQ(FPGA0_IRQ, regs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Process FPGA line #1 interrupts */
|
||||||
|
msgintflags = ocd_readl(INTP0Status0 + (FPGA1_MSGINT / 0x20 * 0x10));
|
||||||
|
msgintmask = ocd_readl(INTP0Mask0 + (FPGA1_MSGINT / 0x20 * 0x10));
|
||||||
|
msgint = msgintflags & msgintmask & (0x1 << (FPGA1_MSGINT % 0x20));
|
||||||
|
if ((pending & (1 << FPGA1_IRQ)) && msgint) {
|
||||||
|
do_IRQ(FPGA1_IRQ, regs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Process PHY interrupts */
|
||||||
|
msgintflags = ocd_readl(INTP0Status0 + (PHY_MSGINT / 0x20 * 0x10));
|
||||||
|
msgintmask = ocd_readl(INTP0Mask0 + (PHY_MSGINT / 0x20 * 0x10));
|
||||||
|
msgint = msgintflags & msgintmask & (0x1 << (PHY_MSGINT % 0x20));
|
||||||
|
if ((pending & (1 << PHY_IRQ)) && msgint) {
|
||||||
|
do_IRQ(PHY_IRQ, regs);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Process spurious interrupts */
|
||||||
|
spurious_interrupt(regs);
|
||||||
|
}
|
81
arch/mips/basler/excite/excite_procfs.c
Normal file
81
arch/mips/basler/excite/excite_procfs.c
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2004, 2005 by Basler Vision Technologies AG
|
||||||
|
* Author: Thomas Koeller <thomas.koeller@baslerweb.com>
|
||||||
|
*
|
||||||
|
* Procfs support for Basler eXcite
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <linux/proc_fs.h>
|
||||||
|
#include <linux/stat.h>
|
||||||
|
#include <asm/page.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/system.h>
|
||||||
|
#include <asm/rm9k-ocd.h>
|
||||||
|
|
||||||
|
#include <excite.h>
|
||||||
|
|
||||||
|
static int excite_get_unit_id(char *buf, char **addr, off_t offs, int size)
|
||||||
|
{
|
||||||
|
const int len = snprintf(buf, PAGE_SIZE, "%06x", unit_id);
|
||||||
|
const int w = len - offs;
|
||||||
|
*addr = buf + offs;
|
||||||
|
return w < size ? w : size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
excite_bootrom_read(char *page, char **start, off_t off, int count,
|
||||||
|
int *eof, void *data)
|
||||||
|
{
|
||||||
|
void __iomem * src;
|
||||||
|
|
||||||
|
if (off >= EXCITE_SIZE_BOOTROM) {
|
||||||
|
*eof = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((off + count) > EXCITE_SIZE_BOOTROM)
|
||||||
|
count = EXCITE_SIZE_BOOTROM - off;
|
||||||
|
|
||||||
|
src = ioremap(EXCITE_PHYS_BOOTROM + off, count);
|
||||||
|
if (src) {
|
||||||
|
memcpy_fromio(page, src, count);
|
||||||
|
iounmap(src);
|
||||||
|
*start = page;
|
||||||
|
} else {
|
||||||
|
count = -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
void excite_procfs_init(void)
|
||||||
|
{
|
||||||
|
/* Create & populate /proc/excite */
|
||||||
|
struct proc_dir_entry * const pdir = proc_mkdir("excite", &proc_root);
|
||||||
|
if (pdir) {
|
||||||
|
struct proc_dir_entry * e;
|
||||||
|
|
||||||
|
e = create_proc_info_entry("unit_id", S_IRUGO, pdir,
|
||||||
|
excite_get_unit_id);
|
||||||
|
if (e) e->size = 6;
|
||||||
|
|
||||||
|
e = create_proc_read_entry("bootrom", S_IRUGO, pdir,
|
||||||
|
excite_bootrom_read, NULL);
|
||||||
|
if (e) e->size = EXCITE_SIZE_BOOTROM;
|
||||||
|
}
|
||||||
|
}
|
148
arch/mips/basler/excite/excite_prom.c
Normal file
148
arch/mips/basler/excite/excite_prom.c
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2004, 2005 by Thomas Koeller (thomas.koeller@baslerweb.com)
|
||||||
|
* Based on the PMC-Sierra Yosemite board support by Ralf Baechle and
|
||||||
|
* Manish Lachwani.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/mm.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/smp.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/pgtable.h>
|
||||||
|
#include <asm/processor.h>
|
||||||
|
#include <asm/reboot.h>
|
||||||
|
#include <asm/system.h>
|
||||||
|
#include <asm/bootinfo.h>
|
||||||
|
#include <asm/string.h>
|
||||||
|
|
||||||
|
#include <excite.h>
|
||||||
|
|
||||||
|
/* This struct is used by Redboot to pass arguments to the kernel */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
char *val;
|
||||||
|
} t_env_var;
|
||||||
|
|
||||||
|
struct parmblock {
|
||||||
|
t_env_var memsize;
|
||||||
|
t_env_var modetty0;
|
||||||
|
t_env_var ethaddr;
|
||||||
|
t_env_var env_end;
|
||||||
|
char *argv[2];
|
||||||
|
char text[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned int prom_argc;
|
||||||
|
static const char ** prom_argv;
|
||||||
|
static const t_env_var * prom_env;
|
||||||
|
|
||||||
|
static void prom_halt(void) __attribute__((noreturn));
|
||||||
|
static void prom_exit(void) __attribute__((noreturn));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const char *get_system_type(void)
|
||||||
|
{
|
||||||
|
return "Basler eXcite";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Halt the system
|
||||||
|
*/
|
||||||
|
static void prom_halt(void)
|
||||||
|
{
|
||||||
|
printk(KERN_NOTICE "\n** System halted.\n");
|
||||||
|
while (1)
|
||||||
|
asm volatile (
|
||||||
|
"\t.set\tmips3\n"
|
||||||
|
"\twait\n"
|
||||||
|
"\t.set\tmips0\n"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reset the CPU and re-enter Redboot
|
||||||
|
*/
|
||||||
|
static void prom_exit(void)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
volatile unsigned char * const flg =
|
||||||
|
(volatile unsigned char *) (EXCITE_ADDR_FPGA + EXCITE_FPGA_DPR);
|
||||||
|
|
||||||
|
/* Clear the watchdog reset flag, set the reboot flag */
|
||||||
|
*flg &= ~0x01;
|
||||||
|
*flg |= 0x80;
|
||||||
|
|
||||||
|
for (i = 0; i < 10; i++) {
|
||||||
|
*(volatile unsigned char *) (EXCITE_ADDR_FPGA + EXCITE_FPGA_SYSCTL) = 0x02;
|
||||||
|
iob();
|
||||||
|
mdelay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
printk(KERN_NOTICE "Reset failed\n");
|
||||||
|
prom_halt();
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char __init *prom_getenv(char *name)
|
||||||
|
{
|
||||||
|
const t_env_var * p;
|
||||||
|
for (p = prom_env; p->name != NULL; p++)
|
||||||
|
if(strcmp(name, p->name) == 0)
|
||||||
|
break;
|
||||||
|
return p->val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Init routine which accepts the variables from Redboot
|
||||||
|
*/
|
||||||
|
void __init prom_init(void)
|
||||||
|
{
|
||||||
|
const struct parmblock * const pb = (struct parmblock *) fw_arg2;
|
||||||
|
|
||||||
|
prom_argc = fw_arg0;
|
||||||
|
prom_argv = (const char **) fw_arg1;
|
||||||
|
prom_env = &pb->memsize;
|
||||||
|
|
||||||
|
/* Callbacks for halt, restart */
|
||||||
|
_machine_restart = (void (*)(char *)) prom_exit;
|
||||||
|
_machine_halt = prom_halt;
|
||||||
|
|
||||||
|
#ifdef CONFIG_32BIT
|
||||||
|
/* copy command line */
|
||||||
|
strcpy(arcs_cmdline, prom_argv[1]);
|
||||||
|
memsize = simple_strtol(prom_getenv("memsize"), NULL, 16);
|
||||||
|
strcpy(modetty, prom_getenv("modetty0"));
|
||||||
|
#endif /* CONFIG_32BIT */
|
||||||
|
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
# error 64 bit support not implemented
|
||||||
|
#endif /* CONFIG_64BIT */
|
||||||
|
|
||||||
|
mips_machgroup = MACH_GROUP_TITAN;
|
||||||
|
mips_machtype = MACH_TITAN_EXCITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is called from free_initmem(), so we need to provide it */
|
||||||
|
void __init prom_free_prom_memory(void)
|
||||||
|
{
|
||||||
|
/* Nothing to do */
|
||||||
|
}
|
307
arch/mips/basler/excite/excite_setup.c
Normal file
307
arch/mips/basler/excite/excite_setup.c
Normal file
@ -0,0 +1,307 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2004, 2005 by Basler Vision Technologies AG
|
||||||
|
* Author: Thomas Koeller <thomas.koeller@baslerweb.com>
|
||||||
|
* Based on the PMC-Sierra Yosemite board support by Ralf Baechle and
|
||||||
|
* Manish Lachwani.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
#include <linux/tty.h>
|
||||||
|
#include <linux/serial_core.h>
|
||||||
|
#include <linux/serial.h>
|
||||||
|
#include <linux/ioport.h>
|
||||||
|
#include <linux/spinlock.h>
|
||||||
|
#include <asm/bootinfo.h>
|
||||||
|
#include <asm/mipsregs.h>
|
||||||
|
#include <asm/pgtable-32.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/time.h>
|
||||||
|
#include <asm/rm9k-ocd.h>
|
||||||
|
|
||||||
|
#include <excite.h>
|
||||||
|
|
||||||
|
#define TITAN_UART_CLK 25000000
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
/* normal serial port assignment */
|
||||||
|
#define REGBASE_SER0 0x0208
|
||||||
|
#define REGBASE_SER1 0x0238
|
||||||
|
#define MASK_SER0 0x1
|
||||||
|
#define MASK_SER1 0x2
|
||||||
|
#else
|
||||||
|
/* serial ports swapped */
|
||||||
|
#define REGBASE_SER0 0x0238
|
||||||
|
#define REGBASE_SER1 0x0208
|
||||||
|
#define MASK_SER0 0x2
|
||||||
|
#define MASK_SER1 0x1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
unsigned long memsize;
|
||||||
|
char modetty[30];
|
||||||
|
unsigned int titan_irq = TITAN_IRQ;
|
||||||
|
static void __iomem * ctl_regs;
|
||||||
|
u32 unit_id;
|
||||||
|
|
||||||
|
volatile void __iomem * const ocd_base = (void *) (EXCITE_ADDR_OCD);
|
||||||
|
volatile void __iomem * const titan_base = (void *) (EXCITE_ADDR_TITAN);
|
||||||
|
|
||||||
|
/* Protect access to shared GPI registers */
|
||||||
|
spinlock_t titan_lock = SPIN_LOCK_UNLOCKED;
|
||||||
|
int titan_irqflags;
|
||||||
|
|
||||||
|
|
||||||
|
static void excite_timer_init(void)
|
||||||
|
{
|
||||||
|
const u32 modebit5 = ocd_readl(0x00e4);
|
||||||
|
unsigned int
|
||||||
|
mult = ((modebit5 >> 11) & 0x1f) + 2,
|
||||||
|
div = ((modebit5 >> 16) & 0x1f) + 2;
|
||||||
|
|
||||||
|
if (div == 33) div = 1;
|
||||||
|
mips_hpt_frequency = EXCITE_CPU_EXT_CLOCK * mult / div / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void excite_timer_setup(struct irqaction *irq)
|
||||||
|
{
|
||||||
|
/* The eXcite platform uses the alternate timer interrupt */
|
||||||
|
set_c0_intcontrol(0x80);
|
||||||
|
setup_irq(TIMER_IRQ, irq);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __init excite_init_console(void)
|
||||||
|
{
|
||||||
|
#if defined(CONFIG_SERIAL_8250)
|
||||||
|
static __initdata char serr[] =
|
||||||
|
KERN_ERR "Serial port #%u setup failed\n";
|
||||||
|
struct uart_port up;
|
||||||
|
|
||||||
|
/* Take the DUART out of reset */
|
||||||
|
titan_writel(0x00ff1cff, CPRR);
|
||||||
|
|
||||||
|
#if defined(CONFIG_KGDB) || (CONFIG_SERIAL_8250_NR_UARTS > 1)
|
||||||
|
/* Enable both ports */
|
||||||
|
titan_writel(MASK_SER0 | MASK_SER1, UACFG);
|
||||||
|
#else
|
||||||
|
/* Enable port #0 only */
|
||||||
|
titan_writel(MASK_SER0, UACFG);
|
||||||
|
#endif /* defined(CONFIG_KGDB) */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set up serial port #0. Do not use autodetection; the result is
|
||||||
|
* not what we want.
|
||||||
|
*/
|
||||||
|
memset(&up, 0, sizeof(up));
|
||||||
|
up.membase = (char *) titan_addr(REGBASE_SER0);
|
||||||
|
up.irq = TITAN_IRQ;
|
||||||
|
up.uartclk = TITAN_UART_CLK;
|
||||||
|
up.regshift = 0;
|
||||||
|
up.iotype = UPIO_MEM32;
|
||||||
|
up.type = PORT_RM9000;
|
||||||
|
up.flags = UPF_SHARE_IRQ;
|
||||||
|
up.line = 0;
|
||||||
|
if (early_serial_setup(&up))
|
||||||
|
printk(serr, up.line);
|
||||||
|
|
||||||
|
#if CONFIG_SERIAL_8250_NR_UARTS > 1
|
||||||
|
/* And now for port #1. */
|
||||||
|
up.membase = (char *) titan_addr(REGBASE_SER1);
|
||||||
|
up.line = 1;
|
||||||
|
if (early_serial_setup(&up))
|
||||||
|
printk(serr, up.line);
|
||||||
|
#endif /* CONFIG_SERIAL_8250_NR_UARTS > 1 */
|
||||||
|
#else
|
||||||
|
/* Leave the DUART in reset */
|
||||||
|
titan_writel(0x00ff3cff, CPRR);
|
||||||
|
#endif /* defined(CONFIG_SERIAL_8250) */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __init excite_platform_init(void)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
unsigned char buf[3];
|
||||||
|
u8 reg;
|
||||||
|
void __iomem * dpr;
|
||||||
|
|
||||||
|
/* BIU buffer allocations */
|
||||||
|
ocd_writel(8, CPURSLMT); /* CPU */
|
||||||
|
titan_writel(4, CPGRWL); /* GPI / Ethernet */
|
||||||
|
|
||||||
|
/* Map control registers located in FPGA */
|
||||||
|
ctl_regs = ioremap_nocache(EXCITE_PHYS_FPGA + EXCITE_FPGA_SYSCTL, 16);
|
||||||
|
if (!ctl_regs)
|
||||||
|
panic("eXcite: failed to map platform control registers\n");
|
||||||
|
memcpy_fromio(buf, ctl_regs + 2, ARRAY_SIZE(buf));
|
||||||
|
unit_id = buf[0] | (buf[1] << 8) | (buf[2] << 16);
|
||||||
|
|
||||||
|
/* Clear the reboot flag */
|
||||||
|
dpr = ioremap_nocache(EXCITE_PHYS_FPGA + EXCITE_FPGA_DPR, 1);
|
||||||
|
reg = __raw_readb(dpr);
|
||||||
|
__raw_writeb(reg & 0x7f, dpr);
|
||||||
|
iounmap(dpr);
|
||||||
|
|
||||||
|
/* Interrupt controller setup */
|
||||||
|
for (i = INTP0Status0; i < INTP0Status0 + 0x80; i += 0x10) {
|
||||||
|
ocd_writel(0x00000000, i + 0x04);
|
||||||
|
ocd_writel(0xffffffff, i + 0x0c);
|
||||||
|
}
|
||||||
|
ocd_writel(0x2, NMICONFIG);
|
||||||
|
|
||||||
|
ocd_writel(0x1 << (TITAN_MSGINT % 0x20),
|
||||||
|
INTP0Mask0 + (0x10 * (TITAN_MSGINT / 0x20)));
|
||||||
|
ocd_writel((0x1 << (FPGA0_MSGINT % 0x20))
|
||||||
|
| ocd_readl(INTP0Mask0 + (0x10 * (FPGA0_MSGINT / 0x20))),
|
||||||
|
INTP0Mask0 + (0x10 * (FPGA0_MSGINT / 0x20)));
|
||||||
|
ocd_writel((0x1 << (FPGA1_MSGINT % 0x20))
|
||||||
|
| ocd_readl(INTP0Mask0 + (0x10 * (FPGA1_MSGINT / 0x20))),
|
||||||
|
INTP0Mask0 + (0x10 * (FPGA1_MSGINT / 0x20)));
|
||||||
|
ocd_writel((0x1 << (PHY_MSGINT % 0x20))
|
||||||
|
| ocd_readl(INTP0Mask0 + (0x10 * (PHY_MSGINT / 0x20))),
|
||||||
|
INTP0Mask0 + (0x10 * (PHY_MSGINT / 0x20)));
|
||||||
|
#if USB_IRQ < 10
|
||||||
|
ocd_writel((0x1 << (USB_MSGINT % 0x20))
|
||||||
|
| ocd_readl(INTP0Mask0 + (0x10 * (USB_MSGINT / 0x20))),
|
||||||
|
INTP0Mask0 + (0x10 * (USB_MSGINT / 0x20)));
|
||||||
|
#endif
|
||||||
|
/* Enable the packet FIFO, XDMA and XDMA arbiter */
|
||||||
|
titan_writel(0x00ff18ff, CPRR);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set up the PADMUX. Power down all ethernet slices,
|
||||||
|
* they will be powered up and configured at device startup.
|
||||||
|
*/
|
||||||
|
titan_writel(0x00878206, CPTC1R);
|
||||||
|
titan_writel(0x00001100, CPTC0R); /* latch PADMUX, enable WCIMODE */
|
||||||
|
|
||||||
|
/* Reset and enable the FIFO block */
|
||||||
|
titan_writel(0x00000001, SDRXFCIE);
|
||||||
|
titan_writel(0x00000001, SDTXFCIE);
|
||||||
|
titan_writel(0x00000100, SDRXFCIE);
|
||||||
|
titan_writel(0x00000000, SDTXFCIE);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the common interrupt shared by all components of
|
||||||
|
* the GPI/Ethernet subsystem.
|
||||||
|
*/
|
||||||
|
titan_writel((EXCITE_PHYS_OCD >> 12), CPCFG0);
|
||||||
|
titan_writel(TITAN_MSGINT, CPCFG1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XDMA configuration.
|
||||||
|
* In order for the XDMA to be sharable among multiple drivers,
|
||||||
|
* the setup must be done here in the platform. The reason is that
|
||||||
|
* this setup can only be done while the XDMA is in reset. If this
|
||||||
|
* were done in a driver, it would interrupt all other drivers
|
||||||
|
* using the XDMA.
|
||||||
|
*/
|
||||||
|
titan_writel(0x80021dff, GXCFG); /* XDMA reset */
|
||||||
|
titan_writel(0x00000000, CPXCISRA);
|
||||||
|
titan_writel(0x00000000, CPXCISRB); /* clear pending interrupts */
|
||||||
|
#if defined (CONFIG_HIGHMEM)
|
||||||
|
# error change for HIGHMEM support!
|
||||||
|
#else
|
||||||
|
titan_writel(0x00000000, GXDMADRPFX); /* buffer address prefix */
|
||||||
|
#endif
|
||||||
|
titan_writel(0, GXDMA_DESCADR);
|
||||||
|
|
||||||
|
for (i = 0x5040; i <= 0x5300; i += 0x0040)
|
||||||
|
titan_writel(0x80080000, i); /* reset channel */
|
||||||
|
|
||||||
|
titan_writel((0x1 << 29) /* no sparse tx descr. */
|
||||||
|
| (0x1 << 28) /* no sparse rx descr. */
|
||||||
|
| (0x1 << 23) | (0x1 << 24) /* descriptor coherency */
|
||||||
|
| (0x1 << 21) | (0x1 << 22) /* data coherency */
|
||||||
|
| (0x1 << 17)
|
||||||
|
| 0x1dff,
|
||||||
|
GXCFG);
|
||||||
|
|
||||||
|
#if defined(CONFIG_SMP)
|
||||||
|
# error No SMP support
|
||||||
|
#else
|
||||||
|
/* All interrupts go to core #0 only. */
|
||||||
|
titan_writel(0x1f007fff, CPDST0A);
|
||||||
|
titan_writel(0x00000000, CPDST0B);
|
||||||
|
titan_writel(0x0000ff3f, CPDST1A);
|
||||||
|
titan_writel(0x00000000, CPDST1B);
|
||||||
|
titan_writel(0x00ffffff, CPXDSTA);
|
||||||
|
titan_writel(0x00000000, CPXDSTB);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Enable DUART interrupts, disable everything else. */
|
||||||
|
titan_writel(0x04000000, CPGIG0ER);
|
||||||
|
titan_writel(0x000000c0, CPGIG1ER);
|
||||||
|
|
||||||
|
excite_procfs_init();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init plat_setup(void)
|
||||||
|
{
|
||||||
|
volatile u32 * const boot_ocd_base = (u32 *) 0xbf7fc000;
|
||||||
|
|
||||||
|
/* Announce RAM to system */
|
||||||
|
add_memory_region(0x00000000, memsize, BOOT_MEM_RAM);
|
||||||
|
|
||||||
|
/* Set up timer initialization hooks */
|
||||||
|
board_time_init = excite_timer_init;
|
||||||
|
board_timer_setup = excite_timer_setup;
|
||||||
|
|
||||||
|
/* Set up the peripheral address map */
|
||||||
|
*(boot_ocd_base + (LKB9 / sizeof (u32))) = 0;
|
||||||
|
*(boot_ocd_base + (LKB10 / sizeof (u32))) = 0;
|
||||||
|
*(boot_ocd_base + (LKB11 / sizeof (u32))) = 0;
|
||||||
|
*(boot_ocd_base + (LKB12 / sizeof (u32))) = 0;
|
||||||
|
wmb();
|
||||||
|
*(boot_ocd_base + (LKB0 / sizeof (u32))) = EXCITE_PHYS_OCD >> 4;
|
||||||
|
wmb();
|
||||||
|
|
||||||
|
ocd_writel((EXCITE_PHYS_TITAN >> 4) | 0x1UL, LKB5);
|
||||||
|
ocd_writel(((EXCITE_SIZE_TITAN >> 4) & 0x7fffff00) - 0x100, LKM5);
|
||||||
|
ocd_writel((EXCITE_PHYS_SCRAM >> 4) | 0x1UL, LKB13);
|
||||||
|
ocd_writel(((EXCITE_SIZE_SCRAM >> 4) & 0xffffff00) - 0x100, LKM13);
|
||||||
|
|
||||||
|
/* Local bus slot #0 */
|
||||||
|
ocd_writel(0x00040510, LDP0);
|
||||||
|
ocd_writel((EXCITE_PHYS_BOOTROM >> 4) | 0x1UL, LKB9);
|
||||||
|
ocd_writel(((EXCITE_SIZE_BOOTROM >> 4) & 0x03ffff00) - 0x100, LKM9);
|
||||||
|
|
||||||
|
/* Local bus slot #2 */
|
||||||
|
ocd_writel(0x00000330, LDP2);
|
||||||
|
ocd_writel((EXCITE_PHYS_FPGA >> 4) | 0x1, LKB11);
|
||||||
|
ocd_writel(((EXCITE_SIZE_FPGA >> 4) - 0x100) & 0x03ffff00, LKM11);
|
||||||
|
|
||||||
|
/* Local bus slot #3 */
|
||||||
|
ocd_writel(0x00123413, LDP3);
|
||||||
|
ocd_writel((EXCITE_PHYS_NAND >> 4) | 0x1, LKB12);
|
||||||
|
ocd_writel(((EXCITE_SIZE_NAND >> 4) - 0x100) & 0x03ffff00, LKM12);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
console_initcall(excite_init_console);
|
||||||
|
arch_initcall(excite_platform_init);
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(titan_lock);
|
||||||
|
EXPORT_SYMBOL(titan_irqflags);
|
||||||
|
EXPORT_SYMBOL(titan_irq);
|
||||||
|
EXPORT_SYMBOL(ocd_base);
|
||||||
|
EXPORT_SYMBOL(titan_base);
|
@ -41,3 +41,8 @@ void __init cobalt_early_console(void)
|
|||||||
|
|
||||||
printk("Cobalt: early console registered\n");
|
printk("Cobalt: early console registered\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void __init disable_early_printk(void)
|
||||||
|
{
|
||||||
|
unregister_console(&cons_info);
|
||||||
|
}
|
||||||
|
@ -68,19 +68,46 @@ static void __init cobalt_timer_setup(struct irqaction *irq)
|
|||||||
extern struct pci_ops gt64111_pci_ops;
|
extern struct pci_ops gt64111_pci_ops;
|
||||||
|
|
||||||
static struct resource cobalt_mem_resource = {
|
static struct resource cobalt_mem_resource = {
|
||||||
"PCI memory", GT64111_MEM_BASE, GT64111_MEM_END, IORESOURCE_MEM
|
.start = GT64111_MEM_BASE,
|
||||||
|
.end = GT64111_MEM_END,
|
||||||
|
.name = "PCI memory",
|
||||||
|
.flags = IORESOURCE_MEM
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource cobalt_io_resource = {
|
static struct resource cobalt_io_resource = {
|
||||||
"PCI I/O", 0x1000, 0xffff, IORESOURCE_IO
|
.start = 0x1000,
|
||||||
|
.end = 0xffff,
|
||||||
|
.name = "PCI I/O",
|
||||||
|
.flags = IORESOURCE_IO
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource cobalt_io_resources[] = {
|
static struct resource cobalt_io_resources[] = {
|
||||||
{ "dma1", 0x00, 0x1f, IORESOURCE_BUSY },
|
{
|
||||||
{ "timer", 0x40, 0x5f, IORESOURCE_BUSY },
|
.start = 0x00,
|
||||||
{ "keyboard", 0x60, 0x6f, IORESOURCE_BUSY },
|
.end = 0x1f,
|
||||||
{ "dma page reg", 0x80, 0x8f, IORESOURCE_BUSY },
|
.name = "dma1",
|
||||||
{ "dma2", 0xc0, 0xdf, IORESOURCE_BUSY },
|
.flags = IORESOURCE_BUSY
|
||||||
|
}, {
|
||||||
|
.start = 0x40,
|
||||||
|
.end = 0x5f,
|
||||||
|
.name = "timer",
|
||||||
|
.flags = IORESOURCE_BUSY
|
||||||
|
}, {
|
||||||
|
.start = 0x60,
|
||||||
|
.end = 0x6f,
|
||||||
|
.name = "keyboard",
|
||||||
|
.flags = IORESOURCE_BUSY
|
||||||
|
}, {
|
||||||
|
.start = 0x80,
|
||||||
|
.end = 0x8f,
|
||||||
|
.name = "dma page reg",
|
||||||
|
.flags = IORESOURCE_BUSY
|
||||||
|
}, {
|
||||||
|
.start = 0xc0,
|
||||||
|
.end = 0xdf,
|
||||||
|
.name = "dma2",
|
||||||
|
.flags = IORESOURCE_BUSY
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
#define COBALT_IO_RESOURCES (sizeof(cobalt_io_resources)/sizeof(struct resource))
|
#define COBALT_IO_RESOURCES (sizeof(cobalt_io_resources)/sizeof(struct resource))
|
||||||
@ -93,7 +120,7 @@ static struct pci_controller cobalt_pci_controller = {
|
|||||||
.io_offset = 0 - GT64111_IO_BASE
|
.io_offset = 0 - GT64111_IO_BASE
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init plat_setup(void)
|
void __init plat_mem_setup(void)
|
||||||
{
|
{
|
||||||
static struct uart_port uart;
|
static struct uart_port uart;
|
||||||
unsigned int devfn = PCI_DEVFN(COBALT_PCICONF_VIA, 0);
|
unsigned int devfn = PCI_DEVFN(COBALT_PCICONF_VIA, 0);
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_ATLAS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -143,6 +141,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
CONFIG_HZ_100=y
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
# CONFIG_HZ_1000 is not set
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=100
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -145,6 +143,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_NR_CPUS=4
|
CONFIG_NR_CPUS=4
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
CONFIG_MACH_VR41XX=y
|
CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -132,6 +130,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_COBALT=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -129,6 +127,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_DB1000=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -130,6 +128,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_DB1100=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -130,6 +128,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_DB1200=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -130,6 +128,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_DB1500=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -132,6 +130,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_DB1550=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -131,6 +129,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
CONFIG_DDB5477=y
|
CONFIG_DDB5477=y
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -129,6 +127,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MACH_DECSTATION=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -128,6 +126,17 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
CONFIG_HZ_128=y
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
# CONFIG_HZ_1000 is not set
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_128HZ=y
|
||||||
|
CONFIG_SYS_SUPPORTS_256HZ=y
|
||||||
|
CONFIG_SYS_SUPPORTS_1024HZ=y
|
||||||
|
CONFIG_HZ=128
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
CONFIG_MACH_VR41XX=y
|
CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -130,6 +128,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
1207
arch/mips/configs/emma2rh_defconfig
Normal file
1207
arch/mips/configs/emma2rh_defconfig
Normal file
File diff suppressed because it is too large
Load Diff
@ -41,8 +41,6 @@ CONFIG_MIPS_EV64120=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -131,6 +129,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_EV96100=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -135,6 +133,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
1220
arch/mips/configs/excite_defconfig
Normal file
1220
arch/mips/configs/excite_defconfig
Normal file
File diff suppressed because it is too large
Load Diff
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -136,6 +134,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
# CONFIG_PREEMPT_NONE is not set
|
# CONFIG_PREEMPT_NONE is not set
|
||||||
CONFIG_PREEMPT_VOLUNTARY=y
|
CONFIG_PREEMPT_VOLUNTARY=y
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -63,7 +61,7 @@ CONFIG_SGI_IP27=y
|
|||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
# CONFIG_TOSHIBA_RBTX4927 is not set
|
# CONFIG_TOSHIBA_RBTX4927 is not set
|
||||||
# CONFIG_TOSHIBA_RBTX4938 is not set
|
# CONFIG_TOSHIBA_RBTX4938 is not set
|
||||||
# CONFIG_SGI_SN0_N_MODE is not set
|
# CONFIG_SGI_SN_N_MODE is not set
|
||||||
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
|
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
|
||||||
CONFIG_NUMA=y
|
CONFIG_NUMA=y
|
||||||
# CONFIG_MAPPED_KERNEL is not set
|
# CONFIG_MAPPED_KERNEL is not set
|
||||||
@ -135,6 +133,15 @@ CONFIG_FLAT_NODE_MEM_MAP=y
|
|||||||
CONFIG_NEED_MULTIPLE_NODES=y
|
CONFIG_NEED_MULTIPLE_NODES=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_MIGRATION=y
|
CONFIG_MIGRATION=y
|
||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_NR_CPUS=64
|
CONFIG_NR_CPUS=64
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -136,6 +134,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
# CONFIG_PREEMPT_NONE is not set
|
# CONFIG_PREEMPT_NONE is not set
|
||||||
CONFIG_PREEMPT_VOLUNTARY=y
|
CONFIG_PREEMPT_VOLUNTARY=y
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_ITE8172=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -130,6 +128,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_IVR=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -127,6 +125,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MOMENCO_JAGUAR_ATX=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -136,6 +134,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
# CONFIG_SMP is not set
|
# CONFIG_SMP is not set
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -125,6 +123,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_LASAT=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -134,6 +132,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_MALTA=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -154,6 +152,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
CONFIG_HZ_100=y
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
# CONFIG_HZ_1000 is not set
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=100
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_SIM=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -138,6 +136,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
CONFIG_MACH_VR41XX=y
|
CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -132,6 +130,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MOMENCO_OCELOT_3=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -136,6 +134,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
# CONFIG_SMP is not set
|
# CONFIG_SMP is not set
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MOMENCO_OCELOT_C=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -133,6 +131,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MOMENCO_OCELOT=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -137,6 +135,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MOMENCO_OCELOT_G=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -136,6 +134,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_PB1100=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -132,6 +130,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_PB1500=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -131,6 +129,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_PB1550=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -131,6 +129,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
CONFIG_PNX8550_JBS=y
|
CONFIG_PNX8550_JBS=y
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -130,6 +128,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
CONFIG_PNX8550_V2PCI=y
|
CONFIG_PNX8550_V2PCI=y
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -130,6 +128,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -128,6 +126,15 @@ CONFIG_FLAT_NODE_MEM_MAP=y
|
|||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
# CONFIG_SMP is not set
|
# CONFIG_SMP is not set
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
CONFIG_HZ_100=y
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
# CONFIG_HZ_1000 is not set
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=100
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -138,6 +136,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -138,6 +136,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
# CONFIG_PREEMPT_NONE is not set
|
# CONFIG_PREEMPT_NONE is not set
|
||||||
CONFIG_PREEMPT_VOLUNTARY=y
|
CONFIG_PREEMPT_VOLUNTARY=y
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -149,6 +147,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_NR_CPUS=2
|
CONFIG_NR_CPUS=2
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS_SEAD=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -134,6 +132,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
CONFIG_MACH_VR41XX=y
|
CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -134,6 +132,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
CONFIG_MACH_VR41XX=y
|
CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -134,6 +132,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
@ -41,8 +41,6 @@ CONFIG_MIPS=y
|
|||||||
# CONFIG_MIPS_XXS1500 is not set
|
# CONFIG_MIPS_XXS1500 is not set
|
||||||
# CONFIG_PNX8550_V2PCI is not set
|
# CONFIG_PNX8550_V2PCI is not set
|
||||||
# CONFIG_PNX8550_JBS is not set
|
# CONFIG_PNX8550_JBS is not set
|
||||||
# CONFIG_DDB5074 is not set
|
|
||||||
# CONFIG_DDB5476 is not set
|
|
||||||
# CONFIG_DDB5477 is not set
|
# CONFIG_DDB5477 is not set
|
||||||
CONFIG_MACH_VR41XX=y
|
CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
@ -135,6 +133,15 @@ CONFIG_FLATMEM=y
|
|||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
# CONFIG_HZ_48 is not set
|
||||||
|
# CONFIG_HZ_100 is not set
|
||||||
|
# CONFIG_HZ_128 is not set
|
||||||
|
# CONFIG_HZ_250 is not set
|
||||||
|
# CONFIG_HZ_256 is not set
|
||||||
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1024 is not set
|
||||||
|
CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
|
||||||
|
CONFIG_HZ=1000
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user