提交 3c8c7b2f 编写于 作者: J Jeff Garzik

Merge branch 'upstream-fixes'

...@@ -237,6 +237,12 @@ udev ...@@ -237,6 +237,12 @@ udev
udev is a userspace application for populating /dev dynamically with udev is a userspace application for populating /dev dynamically with
only entries for devices actually present. udev replaces devfs. only entries for devices actually present. udev replaces devfs.
FUSE
----
Needs libfuse 2.4.0 or later. Absolute minimum is 2.3.0 but mount
options 'direct_io' and 'kernel_cache' won't work.
Networking Networking
========== ==========
...@@ -390,6 +396,10 @@ udev ...@@ -390,6 +396,10 @@ udev
---- ----
o <http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html> o <http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html>
FUSE
----
o <http://sourceforge.net/projects/fuse>
Networking Networking
********** **********
......
...@@ -301,8 +301,84 @@ now, but you can do this to mark internal company procedures or just ...@@ -301,8 +301,84 @@ now, but you can do this to mark internal company procedures or just
point out some special detail about the sign-off. point out some special detail about the sign-off.
12) The canonical patch format
12) More references for submitting patches The canonical patch subject line is:
Subject: [PATCH 001/123] subsystem: summary phrase
The canonical patch message body contains the following:
- A "from" line specifying the patch author.
- An empty line.
- The body of the explanation, which will be copied to the
permanent changelog to describe this patch.
- The "Signed-off-by:" lines, described above, which will
also go in the changelog.
- A marker line containing simply "---".
- Any additional comments not suitable for the changelog.
- The actual patch (diff output).
The Subject line format makes it very easy to sort the emails
alphabetically by subject line - pretty much any email reader will
support that - since because the sequence number is zero-padded,
the numerical and alphabetic sort is the same.
The "subsystem" in the email's Subject should identify which
area or subsystem of the kernel is being patched.
The "summary phrase" in the email's Subject should concisely
describe the patch which that email contains. The "summary
phrase" should not be a filename. Do not use the same "summary
phrase" for every patch in a whole patch series.
Bear in mind that the "summary phrase" of your email becomes
a globally-unique identifier for that patch. It propagates
all the way into the git changelog. The "summary phrase" may
later be used in developer discussions which refer to the patch.
People will want to google for the "summary phrase" to read
discussion regarding that patch.
A couple of example Subjects:
Subject: [patch 2/5] ext2: improve scalability of bitmap searching
Subject: [PATCHv2 001/207] x86: fix eflags tracking
The "from" line must be the very first line in the message body,
and has the form:
From: Original Author <author@example.com>
The "from" line specifies who will be credited as the author of the
patch in the permanent changelog. If the "from" line is missing,
then the "From:" line from the email header will be used to determine
the patch author in the changelog.
The explanation body will be committed to the permanent source
changelog, so should make sense to a competent reader who has long
since forgotten the immediate details of the discussion that might
have led to this patch.
The "---" marker line serves the essential purpose of marking for patch
handling tools where the changelog message ends.
One good use for the additional comments after the "---" marker is for
a diffstat, to show what files have changed, and the number of inserted
and deleted lines per file. A diffstat is especially useful on bigger
patches. Other comments relevant only to the moment or the maintainer,
not suitable for the permanent changelog, should also go here.
See more details on the proper patch format in the following
references.
13) More references for submitting patches
Andrew Morton, "The perfect patch" (tpp). Andrew Morton, "The perfect patch" (tpp).
<http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt> <http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt>
...@@ -310,6 +386,14 @@ Andrew Morton, "The perfect patch" (tpp). ...@@ -310,6 +386,14 @@ Andrew Morton, "The perfect patch" (tpp).
Jeff Garzik, "Linux kernel patch submission format." Jeff Garzik, "Linux kernel patch submission format."
<http://linux.yyz.us/patch-format.html> <http://linux.yyz.us/patch-format.html>
Greg KH, "How to piss off a kernel subsystem maintainer"
<http://www.kroah.com/log/2005/03/31/>
Kernel Documentation/CodingStyle
<http://sosdg.org/~coywolf/lxr/source/Documentation/CodingStyle>
Linus Torvald's mail on the canonical patch format:
<http://lkml.org/lkml/2005/4/7/183>
----------------------------------- -----------------------------------
......
Device-mapper snapshot support
==============================
Device-mapper allows you, without massive data copying:
*) To create snapshots of any block device i.e. mountable, saved states of
the block device which are also writable without interfering with the
original content;
*) To create device "forks", i.e. multiple different versions of the
same data stream.
In both cases, dm copies only the chunks of data that get changed and
uses a separate copy-on-write (COW) block device for storage.
There are two dm targets available: snapshot and snapshot-origin.
*) snapshot-origin <origin>
which will normally have one or more snapshots based on it.
You must create the snapshot-origin device before you can create snapshots.
Reads will be mapped directly to the backing device. For each write, the
original data will be saved in the <COW device> of each snapshot to keep
its visible content unchanged, at least until the <COW device> fills up.
*) snapshot <origin> <COW device> <persistent?> <chunksize>
A snapshot is created of the <origin> block device. Changed chunks of
<chunksize> sectors will be stored on the <COW device>. Writes will
only go to the <COW device>. Reads will come from the <COW device> or
from <origin> for unchanged data. <COW device> will often be
smaller than the origin and if it fills up the snapshot will become
useless and be disabled, returning errors. So it is important to monitor
the amount of free space and expand the <COW device> before it fills up.
<persistent?> is P (Persistent) or N (Not persistent - will not survive
after reboot).
How this is used by LVM2
========================
When you create the first LVM2 snapshot of a volume, four dm devices are used:
1) a device containing the original mapping table of the source volume;
2) a device used as the <COW device>;
3) a "snapshot" device, combining #1 and #2, which is the visible snapshot
volume;
4) the "original" volume (which uses the device number used by the original
source volume), whose table is replaced by a "snapshot-origin" mapping
from device #1.
A fixed naming scheme is used, so with the following commands:
lvcreate -L 1G -n base volumeGroup
lvcreate -L 100M --snapshot -n snap volumeGroup/base
we'll have this situation (with volumes in above order):
# dmsetup table|grep volumeGroup
volumeGroup-base-real: 0 2097152 linear 8:19 384
volumeGroup-snap-cow: 0 204800 linear 8:19 2097536
volumeGroup-snap: 0 2097152 snapshot 254:11 254:12 P 16
volumeGroup-base: 0 2097152 snapshot-origin 254:11
# ls -lL /dev/mapper/volumeGroup-*
brw------- 1 root root 254, 11 29 ago 18:15 /dev/mapper/volumeGroup-base-real
brw------- 1 root root 254, 12 29 ago 18:15 /dev/mapper/volumeGroup-snap-cow
brw------- 1 root root 254, 13 29 ago 18:15 /dev/mapper/volumeGroup-snap
brw------- 1 root root 254, 10 29 ago 18:14 /dev/mapper/volumeGroup-base
...@@ -195,8 +195,8 @@ KEY ACCESS PERMISSIONS ...@@ -195,8 +195,8 @@ KEY ACCESS PERMISSIONS
====================== ======================
Keys have an owner user ID, a group access ID, and a permissions mask. The mask Keys have an owner user ID, a group access ID, and a permissions mask. The mask
has up to eight bits each for user, group and other access. Only five of each has up to eight bits each for possessor, user, group and other access. Only
set of eight bits are defined. These permissions granted are: five of each set of eight bits are defined. These permissions granted are:
(*) View (*) View
...@@ -241,16 +241,16 @@ about the status of the key service: ...@@ -241,16 +241,16 @@ about the status of the key service:
type, description and permissions. The payload of the key is not available type, description and permissions. The payload of the key is not available
this way: this way:
SERIAL FLAGS USAGE EXPY PERM UID GID TYPE DESCRIPTION: SUMMARY SERIAL FLAGS USAGE EXPY PERM UID GID TYPE DESCRIPTION: SUMMARY
00000001 I----- 39 perm 1f0000 0 0 keyring _uid_ses.0: 1/4 00000001 I----- 39 perm 1f1f0000 0 0 keyring _uid_ses.0: 1/4
00000002 I----- 2 perm 1f0000 0 0 keyring _uid.0: empty 00000002 I----- 2 perm 1f1f0000 0 0 keyring _uid.0: empty
00000007 I----- 1 perm 1f0000 0 0 keyring _pid.1: empty 00000007 I----- 1 perm 1f1f0000 0 0 keyring _pid.1: empty
0000018d I----- 1 perm 1f0000 0 0 keyring _pid.412: empty 0000018d I----- 1 perm 1f1f0000 0 0 keyring _pid.412: empty
000004d2 I--Q-- 1 perm 1f0000 32 -1 keyring _uid.32: 1/4 000004d2 I--Q-- 1 perm 1f1f0000 32 -1 keyring _uid.32: 1/4
000004d3 I--Q-- 3 perm 1f0000 32 -1 keyring _uid_ses.32: empty 000004d3 I--Q-- 3 perm 1f1f0000 32 -1 keyring _uid_ses.32: empty
00000892 I--QU- 1 perm 1f0000 0 0 user metal:copper: 0 00000892 I--QU- 1 perm 1f000000 0 0 user metal:copper: 0
00000893 I--Q-N 1 35s 1f0000 0 0 user metal:silver: 0 00000893 I--Q-N 1 35s 1f1f0000 0 0 user metal:silver: 0
00000894 I--Q-- 1 10h 1f0000 0 0 user metal:gold: 0 00000894 I--Q-- 1 10h 001f0000 0 0 user metal:gold: 0
The flags are: The flags are:
...@@ -637,6 +637,34 @@ call, and the key released upon close. How to deal with conflicting keys due to ...@@ -637,6 +637,34 @@ call, and the key released upon close. How to deal with conflicting keys due to
two different users opening the same file is left to the filesystem author to two different users opening the same file is left to the filesystem author to
solve. solve.
Note that there are two different types of pointers to keys that may be
encountered:
(*) struct key *
This simply points to the key structure itself. Key structures will be at
least four-byte aligned.
(*) key_ref_t
This is equivalent to a struct key *, but the least significant bit is set
if the caller "possesses" the key. By "possession" it is meant that the
calling processes has a searchable link to the key from one of its
keyrings. There are three functions for dealing with these:
key_ref_t make_key_ref(const struct key *key,
unsigned long possession);
struct key *key_ref_to_ptr(const key_ref_t key_ref);
unsigned long is_key_possessed(const key_ref_t key_ref);
The first function constructs a key reference from a key pointer and
possession information (which must be 0 or 1 and not any other value).
The second function retrieves the key pointer from a reference and the
third retrieves the possession flag.
When accessing a key's payload contents, certain precautions must be taken to When accessing a key's payload contents, certain precautions must be taken to
prevent access vs modification races. See the section "Notes on accessing prevent access vs modification races. See the section "Notes on accessing
payload contents" for more information. payload contents" for more information.
...@@ -665,7 +693,11 @@ payload contents" for more information. ...@@ -665,7 +693,11 @@ payload contents" for more information.
void key_put(struct key *key); void key_put(struct key *key);
This can be called from interrupt context. If CONFIG_KEYS is not set then Or:
void key_ref_put(key_ref_t key_ref);
These can be called from interrupt context. If CONFIG_KEYS is not set then
the argument will not be parsed. the argument will not be parsed.
...@@ -689,13 +721,17 @@ payload contents" for more information. ...@@ -689,13 +721,17 @@ payload contents" for more information.
(*) If a keyring was found in the search, this can be further searched by: (*) If a keyring was found in the search, this can be further searched by:
struct key *keyring_search(struct key *keyring, key_ref_t keyring_search(key_ref_t keyring_ref,
const struct key_type *type, const struct key_type *type,
const char *description) const char *description)
This searches the keyring tree specified for a matching key. Error ENOKEY This searches the keyring tree specified for a matching key. Error ENOKEY
is returned upon failure. If successful, the returned key will need to be is returned upon failure (use IS_ERR/PTR_ERR to determine). If successful,
released. the returned key will need to be released.
The possession attribute from the keyring reference is used to control
access through the permissions mask and is propagated to the returned key
reference pointer if successful.
(*) To check the validity of a key, this function can be called: (*) To check the validity of a key, this function can be called:
...@@ -732,7 +768,7 @@ More complex payload contents must be allocated and a pointer to them set in ...@@ -732,7 +768,7 @@ More complex payload contents must be allocated and a pointer to them set in
key->payload.data. One of the following ways must be selected to access the key->payload.data. One of the following ways must be selected to access the
data: data:
(1) Unmodifyable key type. (1) Unmodifiable key type.
If the key type does not have a modify method, then the key's payload can If the key type does not have a modify method, then the key's payload can
be accessed without any form of locking, provided that it's known to be be accessed without any form of locking, provided that it's known to be
......
...@@ -355,10 +355,14 @@ ip_dynaddr - BOOLEAN ...@@ -355,10 +355,14 @@ ip_dynaddr - BOOLEAN
Default: 0 Default: 0
icmp_echo_ignore_all - BOOLEAN icmp_echo_ignore_all - BOOLEAN
If set non-zero, then the kernel will ignore all ICMP ECHO
requests sent to it.
Default: 0
icmp_echo_ignore_broadcasts - BOOLEAN icmp_echo_ignore_broadcasts - BOOLEAN
If either is set to true, then the kernel will ignore either all If set non-zero, then the kernel will ignore all ICMP ECHO and
ICMP ECHO requests sent to it or just those to broadcast/multicast TIMESTAMP requests sent to it via broadcast/multicast.
addresses, respectively. Default: 1
icmp_ratelimit - INTEGER icmp_ratelimit - INTEGER
Limit the maximal rates for sending ICMP packets whose type matches Limit the maximal rates for sending ICMP packets whose type matches
......
...@@ -51,9 +51,9 @@ or you don't get any checking at all. ...@@ -51,9 +51,9 @@ or you don't get any checking at all.
Where to get sparse Where to get sparse
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
With BK, you can just get it from With git, you can just get it from
bk://sparse.bkbits.net/sparse rsync://rsync.kernel.org/pub/scm/devel/sparse/sparse.git
and DaveJ has tar-balls at and DaveJ has tar-balls at
......
...@@ -604,6 +604,15 @@ P: H. Peter Anvin ...@@ -604,6 +604,15 @@ P: H. Peter Anvin
M: hpa@zytor.com M: hpa@zytor.com
S: Maintained S: Maintained
CPUSETS
P: Paul Jackson
P: Simon Derr
M: pj@sgi.com
M: simon.derr@bull.net
L: linux-kernel@vger.kernel.org
W: http://www.bullopensource.org/cpuset/
S: Supported
CRAMFS FILESYSTEM CRAMFS FILESYSTEM
W: http://sourceforge.net/projects/cramfs/ W: http://sourceforge.net/projects/cramfs/
S: Orphan S: Orphan
...@@ -1159,11 +1168,6 @@ L: linux1394-devel@lists.sourceforge.net ...@@ -1159,11 +1168,6 @@ L: linux1394-devel@lists.sourceforge.net
W: http://www.linux1394.org/ W: http://www.linux1394.org/
S: Orphan S: Orphan
IEEE 1394 SBP2
L: linux1394-devel@lists.sourceforge.net
W: http://www.linux1394.org/
S: Orphan
IEEE 1394 SUBSYSTEM IEEE 1394 SUBSYSTEM
P: Ben Collins P: Ben Collins
M: bcollins@debian.org M: bcollins@debian.org
...@@ -1198,6 +1202,15 @@ L: linux1394-devel@lists.sourceforge.net ...@@ -1198,6 +1202,15 @@ L: linux1394-devel@lists.sourceforge.net
W: http://www.linux1394.org/ W: http://www.linux1394.org/
S: Maintained S: Maintained
IEEE 1394 SBP2
P: Ben Collins
M: bcollins@debian.org
P: Stefan Richter
M: stefanr@s5r6.in-berlin.de
L: linux1394-devel@lists.sourceforge.net
W: http://www.linux1394.org/
S: Maintained
IMS TWINTURBO FRAMEBUFFER DRIVER IMS TWINTURBO FRAMEBUFFER DRIVER
P: Paul Mundt P: Paul Mundt
M: lethal@chaoticdreams.org M: lethal@chaoticdreams.org
...@@ -1402,6 +1415,18 @@ L: linux-kernel@vger.kernel.org ...@@ -1402,6 +1415,18 @@ L: linux-kernel@vger.kernel.org
L: fastboot@osdl.org L: fastboot@osdl.org
S: Maintained S: Maintained
KPROBES
P: Prasanna S Panchamukhi
M: prasanna@in.ibm.com
P: Ananth N Mavinakayanahalli
M: ananth@in.ibm.com
P: Anil S Keshavamurthy
M: anil.s.keshavamurthy@intel.com
P: David S. Miller
M: davem@davemloft.net
L: linux-kernel@vger.kernel.org
S: Maintained
LANMEDIA WAN CARD DRIVER LANMEDIA WAN CARD DRIVER
P: Andrew Stanley-Jones P: Andrew Stanley-Jones
M: asj@lanmedia.com M: asj@lanmedia.com
...@@ -1722,8 +1747,11 @@ S: Maintained ...@@ -1722,8 +1747,11 @@ S: Maintained
IPVS IPVS
P: Wensong Zhang P: Wensong Zhang
M: wensong@linux-vs.org M: wensong@linux-vs.org
P: Simon Horman
M: horms@verge.net.au
P: Julian Anastasov P: Julian Anastasov
M: ja@ssi.bg M: ja@ssi.bg
L: netdev@vger.kernel.org
S: Maintained S: Maintained
NFS CLIENT NFS CLIENT
...@@ -1894,6 +1922,13 @@ M: joern@wh.fh-wedel.de ...@@ -1894,6 +1922,13 @@ M: joern@wh.fh-wedel.de
L: linux-mtd@lists.infradead.org L: linux-mtd@lists.infradead.org
S: Maintained S: Maintained
PKTCDVD DRIVER
P: Peter Osterlund
M: petero2@telia.com
L: linux-kernel@vger.kernel.org
L: packet-writing@suse.com
S: Maintained
POSIX CLOCKS and TIMERS POSIX CLOCKS and TIMERS
P: George Anzinger P: George Anzinger
M: george@mvista.com M: george@mvista.com
......
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 14 SUBLEVEL = 14
EXTRAVERSION =-rc2 EXTRAVERSION =-rc3
NAME=Affluent Albatross NAME=Affluent Albatross
# *DOCUMENTATION* # *DOCUMENTATION*
......
...@@ -151,7 +151,7 @@ CONFIGURING the kernel: ...@@ -151,7 +151,7 @@ CONFIGURING the kernel:
your existing ./.config file. your existing ./.config file.
"make silentoldconfig" "make silentoldconfig"
Like above, but avoids cluttering the screen Like above, but avoids cluttering the screen
with question already answered. with questions already answered.
NOTES on "make config": NOTES on "make config":
- having unnecessary drivers will make the kernel bigger, and can - having unnecessary drivers will make the kernel bigger, and can
...@@ -199,9 +199,9 @@ COMPILING the kernel: ...@@ -199,9 +199,9 @@ COMPILING the kernel:
are installing a new kernel with the same version number as your are installing a new kernel with the same version number as your
working kernel, make a backup of your modules directory before you working kernel, make a backup of your modules directory before you
do a "make modules_install". do a "make modules_install".
In alternative, before compiling, edit your Makefile and change the Alternatively, before compiling, use the kernel config option
"EXTRAVERSION" line - its content is appended to the regular kernel "LOCALVERSION" to append a unique suffix to the regular kernel version.
version. LOCALVERSION can be set in the "General Setup" menu.
- In order to boot your new kernel, you'll need to copy the kernel - In order to boot your new kernel, you'll need to copy the kernel
image (e.g. .../linux/arch/i386/boot/bzImage after compilation) image (e.g. .../linux/arch/i386/boot/bzImage after compilation)
......
...@@ -196,6 +196,7 @@ entUna: ...@@ -196,6 +196,7 @@ entUna:
stq $26, 208($sp) stq $26, 208($sp)
stq $27, 216($sp) stq $27, 216($sp)
stq $28, 224($sp) stq $28, 224($sp)
mov $sp, $19
stq $gp, 232($sp) stq $gp, 232($sp)
lda $8, 0x3fff lda $8, 0x3fff
stq $31, 248($sp) stq $31, 248($sp)
......
...@@ -127,6 +127,10 @@ common_shutdown_1(void *generic_ptr) ...@@ -127,6 +127,10 @@ common_shutdown_1(void *generic_ptr)
/* If booted from SRM, reset some of the original environment. */ /* If booted from SRM, reset some of the original environment. */
if (alpha_using_srm) { if (alpha_using_srm) {
#ifdef CONFIG_DUMMY_CONSOLE #ifdef CONFIG_DUMMY_CONSOLE
/* If we've gotten here after SysRq-b, leave interrupt
context before taking over the console. */
if (in_interrupt())
irq_exit();
/* This has the effect of resetting the VGA video origin. */ /* This has the effect of resetting the VGA video origin. */
take_over_console(&dummy_con, 0, MAX_NR_CONSOLES-1, 1); take_over_console(&dummy_con, 0, MAX_NR_CONSOLES-1, 1);
#endif #endif
......
...@@ -446,16 +446,15 @@ struct unaligned_stat { ...@@ -446,16 +446,15 @@ struct unaligned_stat {
/* Macro for exception fixup code to access integer registers. */ /* Macro for exception fixup code to access integer registers. */
#define una_reg(r) (regs.regs[(r) >= 16 && (r) <= 18 ? (r)+19 : (r)]) #define una_reg(r) (regs->regs[(r) >= 16 && (r) <= 18 ? (r)+19 : (r)])
asmlinkage void asmlinkage void
do_entUna(void * va, unsigned long opcode, unsigned long reg, do_entUna(void * va, unsigned long opcode, unsigned long reg,
unsigned long a3, unsigned long a4, unsigned long a5, struct allregs *regs)
struct allregs regs)
{ {
long error, tmp1, tmp2, tmp3, tmp4; long error, tmp1, tmp2, tmp3, tmp4;
unsigned long pc = regs.pc - 4; unsigned long pc = regs->pc - 4;
const struct exception_table_entry *fixup; const struct exception_table_entry *fixup;
unaligned[0].count++; unaligned[0].count++;
...@@ -636,7 +635,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -636,7 +635,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg,
printk("Forwarding unaligned exception at %lx (%lx)\n", printk("Forwarding unaligned exception at %lx (%lx)\n",
pc, newpc); pc, newpc);
(&regs)->pc = newpc; regs->pc = newpc;
return; return;
} }
...@@ -650,7 +649,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -650,7 +649,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg,
current->comm, current->pid); current->comm, current->pid);
printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx\n", printk("pc = [<%016lx>] ra = [<%016lx>] ps = %04lx\n",
pc, una_reg(26), regs.ps); pc, una_reg(26), regs->ps);
printk("r0 = %016lx r1 = %016lx r2 = %016lx\n", printk("r0 = %016lx r1 = %016lx r2 = %016lx\n",
una_reg(0), una_reg(1), una_reg(2)); una_reg(0), una_reg(1), una_reg(2));
printk("r3 = %016lx r4 = %016lx r5 = %016lx\n", printk("r3 = %016lx r4 = %016lx r5 = %016lx\n",
...@@ -670,10 +669,10 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg, ...@@ -670,10 +669,10 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg,
una_reg(22), una_reg(23), una_reg(24)); una_reg(22), una_reg(23), una_reg(24));
printk("r25= %016lx r27= %016lx r28= %016lx\n", printk("r25= %016lx r27= %016lx r28= %016lx\n",
una_reg(25), una_reg(27), una_reg(28)); una_reg(25), una_reg(27), una_reg(28));
printk("gp = %016lx sp = %p\n", regs.gp, &regs+1); printk("gp = %016lx sp = %p\n", regs->gp, regs+1);
dik_show_code((unsigned int *)pc); dik_show_code((unsigned int *)pc);
dik_show_trace((unsigned long *)(&regs+1)); dik_show_trace((unsigned long *)(regs+1));
if (test_and_set_thread_flag (TIF_DIE_IF_KERNEL)) { if (test_and_set_thread_flag (TIF_DIE_IF_KERNEL)) {
printk("die_if_kernel recursion detected.\n"); printk("die_if_kernel recursion detected.\n");
......
...@@ -175,10 +175,10 @@ else ...@@ -175,10 +175,10 @@ else
endif endif
@touch $@ @touch $@
archprepare: maketools include/asm-arm/.arch archprepare: maketools
.PHONY: maketools FORCE .PHONY: maketools FORCE
maketools: include/linux/version.h FORCE maketools: include/linux/version.h include/asm-arm/.arch FORCE
$(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h $(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h
# Convert bzImage to zImage # Convert bzImage to zImage
......
...@@ -68,6 +68,7 @@ static void gic_unmask_irq(unsigned int irq) ...@@ -68,6 +68,7 @@ static void gic_unmask_irq(unsigned int irq)
writel(mask, gic_dist_base + GIC_DIST_ENABLE_SET + (irq / 32) * 4); writel(mask, gic_dist_base + GIC_DIST_ENABLE_SET + (irq / 32) * 4);
} }
#ifdef CONFIG_SMP
static void gic_set_cpu(struct irqdesc *desc, unsigned int irq, unsigned int cpu) static void gic_set_cpu(struct irqdesc *desc, unsigned int irq, unsigned int cpu)
{ {
void __iomem *reg = gic_dist_base + GIC_DIST_TARGET + (irq & ~3); void __iomem *reg = gic_dist_base + GIC_DIST_TARGET + (irq & ~3);
...@@ -78,6 +79,7 @@ static void gic_set_cpu(struct irqdesc *desc, unsigned int irq, unsigned int cpu ...@@ -78,6 +79,7 @@ static void gic_set_cpu(struct irqdesc *desc, unsigned int irq, unsigned int cpu
val |= 1 << (cpu + shift); val |= 1 << (cpu + shift);
writel(val, reg); writel(val, reg);
} }
#endif
static struct irqchip gic_chip = { static struct irqchip gic_chip = {
.ack = gic_ack_irq, .ack = gic_ack_irq,
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/mach-types.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
......
此差异已折叠。
...@@ -537,7 +537,7 @@ ENTRY(__switch_to) ...@@ -537,7 +537,7 @@ ENTRY(__switch_to)
#ifdef CONFIG_CPU_MPCORE #ifdef CONFIG_CPU_MPCORE
clrex clrex
#else #else
strex r3, r4, [ip] @ Clear exclusive monitor strex r5, r4, [ip] @ Clear exclusive monitor
#endif #endif
#endif #endif
#if defined(CONFIG_CPU_XSCALE) && !defined(CONFIG_IWMMXT) #if defined(CONFIG_CPU_XSCALE) && !defined(CONFIG_IWMMXT)
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Copy data from IO memory space to "real" memory space. * Copy data from IO memory space to "real" memory space.
* This needs to be optimized. * This needs to be optimized.
*/ */
void _memcpy_fromio(void *to, void __iomem *from, size_t count) void _memcpy_fromio(void *to, const volatile void __iomem *from, size_t count)
{ {
unsigned char *t = to; unsigned char *t = to;
while (count) { while (count) {
...@@ -22,7 +22,7 @@ void _memcpy_fromio(void *to, void __iomem *from, size_t count) ...@@ -22,7 +22,7 @@ void _memcpy_fromio(void *to, void __iomem *from, size_t count)
* Copy data from "real" memory space to IO memory space. * Copy data from "real" memory space to IO memory space.
* This needs to be optimized. * This needs to be optimized.
*/ */
void _memcpy_toio(void __iomem *to, const void *from, size_t count) void _memcpy_toio(volatile void __iomem *to, const void *from, size_t count)
{ {
const unsigned char *f = from; const unsigned char *f = from;
while (count) { while (count) {
...@@ -37,7 +37,7 @@ void _memcpy_toio(void __iomem *to, const void *from, size_t count) ...@@ -37,7 +37,7 @@ void _memcpy_toio(void __iomem *to, const void *from, size_t count)
* "memset" on IO memory space. * "memset" on IO memory space.
* This needs to be optimized. * This needs to be optimized.
*/ */
void _memset_io(void __iomem *dst, int c, size_t count) void _memset_io(volatile void __iomem *dst, int c, size_t count)
{ {
while (count) { while (count) {
count--; count--;
......
...@@ -31,6 +31,8 @@ ...@@ -31,6 +31,8 @@
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/memory.h>
#include "common.h" #include "common.h"
struct meminfo memmap = { struct meminfo memmap = {
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <asm/system.h> #include <asm/system.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/leds.h> #include <asm/leds.h>
#include <asm/mach-types.h>
#include "leds.h" #include "leds.h"
/* /*
......
...@@ -27,7 +27,6 @@ unsigned long iop3xx_pcibios_min_mem = 0; ...@@ -27,7 +27,6 @@ unsigned long iop3xx_pcibios_min_mem = 0;
/* /*
* Default power-off for EP80219 * Default power-off for EP80219
*/ */
#include <asm/mach-types.h>
static inline void ep80219_send_to_pic(__u8 c) { static inline void ep80219_send_to_pic(__u8 c) {
} }
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/mach-types.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/mach-types.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach-types.h>
/* /*
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach-types.h>
/* /*
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach-types.h>
/* /*
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach-types.h>
/* /*
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/memory.h> #include <asm/memory.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/mach-types.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
...@@ -168,7 +167,7 @@ static struct plat_serial8250_port ixp2000_serial_port[] = { ...@@ -168,7 +167,7 @@ static struct plat_serial8250_port ixp2000_serial_port[] = {
static struct resource ixp2000_uart_resource = { static struct resource ixp2000_uart_resource = {
.start = IXP2000_UART_PHYS_BASE, .start = IXP2000_UART_PHYS_BASE,
.end = IXP2000_UART_PHYS_BASE + 0xffff, .end = IXP2000_UART_PHYS_BASE + 0x1f,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}; };
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/mach-types.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
......
...@@ -125,7 +125,8 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type) ...@@ -125,7 +125,8 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type)
} else if (type & IRQT_LOW) { } else if (type & IRQT_LOW) {
int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW; int_style = IXP4XX_GPIO_STYLE_ACTIVE_LOW;
irq_type = IXP4XX_IRQ_LEVEL; irq_type = IXP4XX_IRQ_LEVEL;
} } else
return -EINVAL;
ixp4xx_config_irq(irq, irq_type); ixp4xx_config_irq(irq, irq_type);
...@@ -142,6 +143,8 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type) ...@@ -142,6 +143,8 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type)
/* Set the new style */ /* Set the new style */
*int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE)); *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE));
return 0;
} }
static void ixp4xx_irq_mask(unsigned int irq) static void ixp4xx_irq_mask(unsigned int irq)
......
...@@ -123,7 +123,7 @@ static void __init ixdp425_init(void) ...@@ -123,7 +123,7 @@ static void __init ixdp425_init(void)
platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices)); platform_add_devices(ixdp425_devices, ARRAY_SIZE(ixdp425_devices));
} }
#ifdef CONFIG_ARCH_IXDP465 #ifdef CONFIG_ARCH_IXDP425
MACHINE_START(IXDP425, "Intel IXDP425 Development Platform") MACHINE_START(IXDP425, "Intel IXDP425 Development Platform")
/* Maintainer: MontaVista Software, Inc. */ /* Maintainer: MontaVista Software, Inc. */
.phys_ram = PHYS_OFFSET, .phys_ram = PHYS_OFFSET,
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include <asm/page.h> #include <asm/page.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/arch/hardware.h>
/* /*
* IRQ base register * IRQ base register
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/module.h> #include <linux/module.h>
#include <asm/mach-types.h>
#include <asm/arch/akita.h> #include <asm/arch/akita.h>
#include <asm/arch/corgi.h> #include <asm/arch/corgi.h>
#include <asm/arch/hardware.h> #include <asm/arch/hardware.h>
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <asm/arch/udc.h> #include <asm/arch/udc.h>
#include <asm/arch/pxafb.h> #include <asm/arch/pxafb.h>
#include <asm/arch/mmc.h> #include <asm/arch/mmc.h>
#include <asm/arch/i2c.h>
#include "generic.h" #include "generic.h"
......
...@@ -40,7 +40,6 @@ ...@@ -40,7 +40,6 @@
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/mach-types.h>
#include "devs.h" #include "devs.h"
#include "usb-simtec.h" #include "usb-simtec.h"
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/leds.h> #include <asm/leds.h>
#include <asm/mach-types.h>
#include <asm/hardware/amba.h> #include <asm/hardware/amba.h>
#include <asm/hardware/amba_clcd.h> #include <asm/hardware/amba_clcd.h>
#include <asm/hardware/arm_timer.h> #include <asm/hardware/arm_timer.h>
...@@ -52,8 +51,9 @@ ...@@ -52,8 +51,9 @@
* *
* Setup a VA for the Versatile Vectored Interrupt Controller. * Setup a VA for the Versatile Vectored Interrupt Controller.
*/ */
#define VA_VIC_BASE IO_ADDRESS(VERSATILE_VIC_BASE) #define __io_address(n) __io(IO_ADDRESS(n))
#define VA_SIC_BASE IO_ADDRESS(VERSATILE_SIC_BASE) #define VA_VIC_BASE __io_address(VERSATILE_VIC_BASE)
#define VA_SIC_BASE __io_address(VERSATILE_SIC_BASE)
static void vic_mask_irq(unsigned int irq) static void vic_mask_irq(unsigned int irq)
{ {
...@@ -214,7 +214,7 @@ void __init versatile_map_io(void) ...@@ -214,7 +214,7 @@ void __init versatile_map_io(void)
iotable_init(versatile_io_desc, ARRAY_SIZE(versatile_io_desc)); iotable_init(versatile_io_desc, ARRAY_SIZE(versatile_io_desc));
} }
#define VERSATILE_REFCOUNTER (IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_24MHz_OFFSET) #define VERSATILE_REFCOUNTER (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_24MHz_OFFSET)
/* /*
* This is the Versatile sched_clock implementation. This has * This is the Versatile sched_clock implementation. This has
...@@ -231,7 +231,7 @@ unsigned long long sched_clock(void) ...@@ -231,7 +231,7 @@ unsigned long long sched_clock(void)
} }
#define VERSATILE_FLASHCTRL (IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_FLASH_OFFSET) #define VERSATILE_FLASHCTRL (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_FLASH_OFFSET)
static int versatile_flash_init(void) static int versatile_flash_init(void)
{ {
...@@ -309,7 +309,7 @@ static struct platform_device smc91x_device = { ...@@ -309,7 +309,7 @@ static struct platform_device smc91x_device = {
.resource = smc91x_resources, .resource = smc91x_resources,
}; };
#define VERSATILE_SYSMCI (IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_MCI_OFFSET) #define VERSATILE_SYSMCI (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_MCI_OFFSET)
unsigned int mmc_status(struct device *dev) unsigned int mmc_status(struct device *dev)
{ {
...@@ -343,11 +343,11 @@ static const struct icst307_params versatile_oscvco_params = { ...@@ -343,11 +343,11 @@ static const struct icst307_params versatile_oscvco_params = {
static void versatile_oscvco_set(struct clk *clk, struct icst307_vco vco) static void versatile_oscvco_set(struct clk *clk, struct icst307_vco vco)
{ {
unsigned long sys_lock = IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_LOCK_OFFSET; void __iomem *sys_lock = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_LOCK_OFFSET;
#if defined(CONFIG_ARCH_VERSATILE_PB) #if defined(CONFIG_ARCH_VERSATILE_PB)
unsigned long sys_osc = IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSC4_OFFSET; void __iomem *sys_osc = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSC4_OFFSET;
#elif defined(CONFIG_MACH_VERSATILE_AB) #elif defined(CONFIG_MACH_VERSATILE_AB)
unsigned long sys_osc = IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSC1_OFFSET; void __iomem *sys_osc = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSC1_OFFSET;
#endif #endif
u32 val; u32 val;
...@@ -483,7 +483,7 @@ static struct clcd_panel epson_2_2_in = { ...@@ -483,7 +483,7 @@ static struct clcd_panel epson_2_2_in = {
*/ */
static struct clcd_panel *versatile_clcd_panel(void) static struct clcd_panel *versatile_clcd_panel(void)
{ {
unsigned long sys_clcd = IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_CLCD_OFFSET; void __iomem *sys_clcd = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_CLCD_OFFSET;
struct clcd_panel *panel = &vga; struct clcd_panel *panel = &vga;
u32 val; u32 val;
...@@ -510,7 +510,7 @@ static struct clcd_panel *versatile_clcd_panel(void) ...@@ -510,7 +510,7 @@ static struct clcd_panel *versatile_clcd_panel(void)
*/ */
static void versatile_clcd_disable(struct clcd_fb *fb) static void versatile_clcd_disable(struct clcd_fb *fb)
{ {
unsigned long sys_clcd = IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_CLCD_OFFSET; void __iomem *sys_clcd = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_CLCD_OFFSET;
u32 val; u32 val;
val = readl(sys_clcd); val = readl(sys_clcd);
...@@ -522,7 +522,7 @@ static void versatile_clcd_disable(struct clcd_fb *fb) ...@@ -522,7 +522,7 @@ static void versatile_clcd_disable(struct clcd_fb *fb)
* If the LCD is Sanyo 2x5 in on the IB2 board, turn the back-light off * If the LCD is Sanyo 2x5 in on the IB2 board, turn the back-light off
*/ */
if (fb->panel == &sanyo_2_5_in) { if (fb->panel == &sanyo_2_5_in) {
unsigned long versatile_ib2_ctrl = IO_ADDRESS(VERSATILE_IB2_CTRL); void __iomem *versatile_ib2_ctrl = __io_address(VERSATILE_IB2_CTRL);
unsigned long ctrl; unsigned long ctrl;
ctrl = readl(versatile_ib2_ctrl); ctrl = readl(versatile_ib2_ctrl);
...@@ -537,7 +537,7 @@ static void versatile_clcd_disable(struct clcd_fb *fb) ...@@ -537,7 +537,7 @@ static void versatile_clcd_disable(struct clcd_fb *fb)
*/ */
static void versatile_clcd_enable(struct clcd_fb *fb) static void versatile_clcd_enable(struct clcd_fb *fb)
{ {
unsigned long sys_clcd = IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_CLCD_OFFSET; void __iomem *sys_clcd = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_CLCD_OFFSET;
u32 val; u32 val;
val = readl(sys_clcd); val = readl(sys_clcd);
...@@ -571,7 +571,7 @@ static void versatile_clcd_enable(struct clcd_fb *fb) ...@@ -571,7 +571,7 @@ static void versatile_clcd_enable(struct clcd_fb *fb)
* If the LCD is Sanyo 2x5 in on the IB2 board, turn the back-light on * If the LCD is Sanyo 2x5 in on the IB2 board, turn the back-light on
*/ */
if (fb->panel == &sanyo_2_5_in) { if (fb->panel == &sanyo_2_5_in) {
unsigned long versatile_ib2_ctrl = IO_ADDRESS(VERSATILE_IB2_CTRL); void __iomem *versatile_ib2_ctrl = __io_address(VERSATILE_IB2_CTRL);
unsigned long ctrl; unsigned long ctrl;
ctrl = readl(versatile_ib2_ctrl); ctrl = readl(versatile_ib2_ctrl);
...@@ -720,7 +720,7 @@ static struct amba_device *amba_devs[] __initdata = { ...@@ -720,7 +720,7 @@ static struct amba_device *amba_devs[] __initdata = {
}; };
#ifdef CONFIG_LEDS #ifdef CONFIG_LEDS
#define VA_LEDS_BASE (IO_ADDRESS(VERSATILE_SYS_BASE) + VERSATILE_SYS_LED_OFFSET) #define VA_LEDS_BASE (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_LED_OFFSET)
static void versatile_leds_event(led_event_t ledevt) static void versatile_leds_event(led_event_t ledevt)
{ {
...@@ -778,11 +778,11 @@ void __init versatile_init(void) ...@@ -778,11 +778,11 @@ void __init versatile_init(void)
/* /*
* Where is the timer (VA)? * Where is the timer (VA)?
*/ */
#define TIMER0_VA_BASE IO_ADDRESS(VERSATILE_TIMER0_1_BASE) #define TIMER0_VA_BASE __io_address(VERSATILE_TIMER0_1_BASE)
#define TIMER1_VA_BASE (IO_ADDRESS(VERSATILE_TIMER0_1_BASE) + 0x20) #define TIMER1_VA_BASE (__io_address(VERSATILE_TIMER0_1_BASE) + 0x20)
#define TIMER2_VA_BASE IO_ADDRESS(VERSATILE_TIMER2_3_BASE) #define TIMER2_VA_BASE __io_address(VERSATILE_TIMER2_3_BASE)
#define TIMER3_VA_BASE (IO_ADDRESS(VERSATILE_TIMER2_3_BASE) + 0x20) #define TIMER3_VA_BASE (__io_address(VERSATILE_TIMER2_3_BASE) + 0x20)
#define VA_IC_BASE IO_ADDRESS(VERSATILE_VIC_BASE) #define VA_IC_BASE __io_address(VERSATILE_VIC_BASE)
/* /*
* How long is the timer interval? * How long is the timer interval?
...@@ -877,12 +877,12 @@ static void __init versatile_timer_init(void) ...@@ -877,12 +877,12 @@ static void __init versatile_timer_init(void)
* VERSATILE_REFCLK is 32KHz * VERSATILE_REFCLK is 32KHz
* VERSATILE_TIMCLK is 1MHz * VERSATILE_TIMCLK is 1MHz
*/ */
val = readl(IO_ADDRESS(VERSATILE_SCTL_BASE)); val = readl(__io_address(VERSATILE_SCTL_BASE));
writel((VERSATILE_TIMCLK << VERSATILE_TIMER1_EnSel) | writel((VERSATILE_TIMCLK << VERSATILE_TIMER1_EnSel) |
(VERSATILE_TIMCLK << VERSATILE_TIMER2_EnSel) | (VERSATILE_TIMCLK << VERSATILE_TIMER2_EnSel) |
(VERSATILE_TIMCLK << VERSATILE_TIMER3_EnSel) | (VERSATILE_TIMCLK << VERSATILE_TIMER3_EnSel) |
(VERSATILE_TIMCLK << VERSATILE_TIMER4_EnSel) | val, (VERSATILE_TIMCLK << VERSATILE_TIMER4_EnSel) | val,
IO_ADDRESS(VERSATILE_SCTL_BASE)); __io_address(VERSATILE_SCTL_BASE));
/* /*
* Initialise to a known state (all timers off) * Initialise to a known state (all timers off)
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
#include <asm/mach-types.h>
/* /*
* these spaces are mapped using the following base registers: * these spaces are mapped using the following base registers:
......
...@@ -20,6 +20,11 @@ ...@@ -20,6 +20,11 @@
*/ */
.align 5 .align 5
ENTRY(v6_early_abort) ENTRY(v6_early_abort)
#ifdef CONFIG_CPU_MPCORE
clrex
#else
strex r0, r1, [sp] @ Clear the exclusive monitor
#endif
mrc p15, 0, r1, c5, c0, 0 @ get FSR mrc p15, 0, r1, c5, c0, 0 @ get FSR
mrc p15, 0, r0, c6, c0, 0 @ get FAR mrc p15, 0, r0, c6, c0, 0 @ get FAR
/* /*
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#define HARVARD_CACHE #define HARVARD_CACHE
#define CACHE_LINE_SIZE 32 #define CACHE_LINE_SIZE 32
#define D_CACHE_LINE_SIZE 32 #define D_CACHE_LINE_SIZE 32
#define BTB_FLUSH_SIZE 8
/* /*
* v6_flush_cache_all() * v6_flush_cache_all()
...@@ -98,7 +99,13 @@ ENTRY(v6_coherent_user_range) ...@@ -98,7 +99,13 @@ ENTRY(v6_coherent_user_range)
mcr p15, 0, r0, c7, c5, 1 @ invalidate I line mcr p15, 0, r0, c7, c5, 1 @ invalidate I line
#endif #endif
mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry
add r0, r0, #CACHE_LINE_SIZE add r0, r0, #BTB_FLUSH_SIZE
mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry
add r0, r0, #BTB_FLUSH_SIZE
mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry
add r0, r0, #BTB_FLUSH_SIZE
mcr p15, 0, r0, c7, c5, 7 @ invalidate BTB entry
add r0, r0, #BTB_FLUSH_SIZE
cmp r0, r1 cmp r0, r1
blo 1b blo 1b
#ifdef HARVARD_CACHE #ifdef HARVARD_CACHE
......
...@@ -17,6 +17,24 @@ ...@@ -17,6 +17,24 @@
#ifdef CONFIG_CPU_CACHE_VIPT #ifdef CONFIG_CPU_CACHE_VIPT
#define ALIAS_FLUSH_START 0xffff4000
#define TOP_PTE(x) pte_offset_kernel(top_pmd, x)
static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr)
{
unsigned long to = ALIAS_FLUSH_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT);
set_pte(TOP_PTE(to), pfn_pte(pfn, PAGE_KERNEL));
flush_tlb_kernel_page(to);
asm( "mcrr p15, 0, %1, %0, c14\n"
" mcrr p15, 0, %1, %0, c5\n"
:
: "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES)
: "cc");
}
void flush_cache_mm(struct mm_struct *mm) void flush_cache_mm(struct mm_struct *mm)
{ {
if (cache_is_vivt()) { if (cache_is_vivt()) {
...@@ -67,24 +85,6 @@ void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsig ...@@ -67,24 +85,6 @@ void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsig
if (cache_is_vipt_aliasing()) if (cache_is_vipt_aliasing())
flush_pfn_alias(pfn, user_addr); flush_pfn_alias(pfn, user_addr);
} }
#define ALIAS_FLUSH_START 0xffff4000
#define TOP_PTE(x) pte_offset_kernel(top_pmd, x)
static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr)
{
unsigned long to = ALIAS_FLUSH_START + (CACHE_COLOUR(vaddr) << PAGE_SHIFT);
set_pte(TOP_PTE(to), pfn_pte(pfn, PAGE_KERNEL));
flush_tlb_kernel_page(to);
asm( "mcrr p15, 0, %1, %0, c14\n"
" mcrr p15, 0, %1, %0, c5\n"
:
: "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES)
: "cc");
}
#else #else
#define flush_pfn_alias(pfn,vaddr) do { } while (0) #define flush_pfn_alias(pfn,vaddr) do { } while (0)
#endif #endif
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/hardware/clock.h> #include <asm/hardware/clock.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/mach-types.h>
#include <asm/setup.h> #include <asm/setup.h>
#include <asm/arch/board.h> #include <asm/arch/board.h>
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <linux/err.h> #include <linux/err.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/mach-types.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/system.h> #include <asm/system.h>
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/mach-types.h>
#include <asm/arch/mux.h> #include <asm/arch/mux.h>
#include <asm/arch/usb.h> #include <asm/arch/usb.h>
......
...@@ -27,15 +27,14 @@ ...@@ -27,15 +27,14 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/efi.h> #include <linux/efi.h>
#include <linux/irq.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/dmi.h> #include <linux/dmi.h>
#include <linux/irq.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/io_apic.h> #include <asm/io_apic.h>
#include <asm/apic.h> #include <asm/apic.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h>
#include <asm/mpspec.h> #include <asm/mpspec.h>
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/irq.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
......
...@@ -28,6 +28,22 @@ static void __init init_amd(struct cpuinfo_x86 *c) ...@@ -28,6 +28,22 @@ static void __init init_amd(struct cpuinfo_x86 *c)
int mbytes = num_physpages >> (20-PAGE_SHIFT); int mbytes = num_physpages >> (20-PAGE_SHIFT);
int r; int r;
#ifdef CONFIG_SMP
unsigned long value;
/* Disable TLB flush filter by setting HWCR.FFDIS on K8
* bit 6 of msr C001_0015
*
* Errata 63 for SH-B3 steppings
* Errata 122 for all steppings (F+ have it disabled by default)
*/
if (c->x86 == 15) {
rdmsrl(MSR_K7_HWCR, value);
value |= 1 << 6;
wrmsrl(MSR_K7_HWCR, value);
}
#endif
/* /*
* FIXME: We should handle the K5 here. Set up the write * FIXME: We should handle the K5 here. Set up the write
* range and also turn on MSR 83 bits 4 and 31 (write alloc, * range and also turn on MSR 83 bits 4 and 31 (write alloc,
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/smp.h> #include <linux/smp.h>
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/irq.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/smp.h> #include <linux/smp.h>
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/config.h> #include <linux/config.h>
#include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/smp.h> #include <linux/smp.h>
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/smp.h> #include <linux/smp.h>
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/smp.h> #include <linux/smp.h>
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <asm/processor.h> #include <asm/processor.h>
......
...@@ -11,10 +11,8 @@ ...@@ -11,10 +11,8 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/irq.h>
#include <linux/reboot.h> #include <linux/reboot.h>
#include <linux/kexec.h> #include <linux/kexec.h>
#include <linux/irq.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/elf.h> #include <linux/elf.h>
#include <linux/elfcore.h> #include <linux/elfcore.h>
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h>
#include <asm/timer.h> #include <asm/timer.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/delay.h> #include <asm/delay.h>
...@@ -25,8 +24,6 @@ ...@@ -25,8 +24,6 @@
#include <asm/arch_hooks.h> #include <asm/arch_hooks.h>
#include <asm/i8259.h> #include <asm/i8259.h>
#include <linux/irq.h>
#include <io_ports.h> #include <io_ports.h>
/* /*
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
*/ */
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h> #include <linux/delay.h>
......
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
*/ */
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/irq.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/delay.h> #include <linux/delay.h>
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/irq.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
......
...@@ -47,13 +47,11 @@ ...@@ -47,13 +47,11 @@
#include <asm/ldt.h> #include <asm/ldt.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/i387.h> #include <asm/i387.h>
#include <asm/irq.h>
#include <asm/desc.h> #include <asm/desc.h>
#ifdef CONFIG_MATH_EMULATION #ifdef CONFIG_MATH_EMULATION
#include <asm/math_emu.h> #include <asm/math_emu.h>
#endif #endif
#include <linux/irq.h>
#include <linux/err.h> #include <linux/err.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/irq.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/kernel_stat.h> #include <linux/kernel_stat.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/irq.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/notifier.h> #include <linux/notifier.h>
#include <linux/cpu.h> #include <linux/cpu.h>
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/irq.h>
#include <linux/sysdev.h> #include <linux/sysdev.h>
#include <linux/timex.h> #include <linux/timex.h>
#include <asm/delay.h> #include <asm/delay.h>
......
...@@ -52,7 +52,6 @@ ...@@ -52,7 +52,6 @@
#include <asm/arch_hooks.h> #include <asm/arch_hooks.h>
#include <asm/kdebug.h> #include <asm/kdebug.h>
#include <linux/irq.h>
#include <linux/module.h> #include <linux/module.h>
#include "mach_traps.h" #include "mach_traps.h"
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <asm/acpi.h> #include <asm/acpi.h>
#include <asm/arch_hooks.h> #include <asm/arch_hooks.h>
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <asm/fixmap.h> #include <asm/fixmap.h>
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/kernel_stat.h> #include <linux/kernel_stat.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/init.h> #include <linux/init.h>
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
#include <linux/config.h> #include <linux/config.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/irq.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <asm/acpi.h> #include <asm/acpi.h>
#include <asm/arch_hooks.h> #include <asm/arch_hooks.h>
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <asm/voyager.h> #include <asm/voyager.h>
#include <asm/vic.h> #include <asm/vic.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/irq.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <asm/arch_hooks.h> #include <asm/arch_hooks.h>
#include <asm/i8253.h> #include <asm/i8253.h>
......
...@@ -30,8 +30,6 @@ ...@@ -30,8 +30,6 @@
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <asm/arch_hooks.h> #include <asm/arch_hooks.h>
#include <linux/irq.h>
/* TLB state -- visible externally, indexed physically */ /* TLB state -- visible externally, indexed physically */
DEFINE_PER_CPU(struct tlb_state, cpu_tlbstate) ____cacheline_aligned = { &init_mm, 0 }; DEFINE_PER_CPU(struct tlb_state, cpu_tlbstate) ____cacheline_aligned = { &init_mm, 0 };
......
...@@ -31,8 +31,6 @@ ...@@ -31,8 +31,6 @@
#include <asm/mtrr.h> #include <asm/mtrr.h>
#include <asm/msr.h> #include <asm/msr.h>
#include <linux/irq.h>
#define THREAD_NAME "kvoyagerd" #define THREAD_NAME "kvoyagerd"
/* external variables */ /* external variables */
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/irq.h> #include <linux/errno.h>
#include <linux/oprofile.h> #include <linux/oprofile.h>
#include <linux/rcupdate.h> #include <linux/rcupdate.h>
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <asm/hw_irq.h>
#include <asm/numa.h> #include <asm/numa.h>
#include "pci.h" #include "pci.h"
......
...@@ -11,12 +11,11 @@ ...@@ -11,12 +11,11 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/dmi.h> #include <linux/dmi.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/smp.h> #include <asm/smp.h>
#include <asm/io_apic.h> #include <asm/io_apic.h>
#include <asm/hw_irq.h> #include <linux/irq.h>
#include <linux/acpi.h> #include <linux/acpi.h>
#include "pci.h" #include "pci.h"
......
...@@ -8,25 +8,8 @@ ...@@ -8,25 +8,8 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/spinlock.h>
#include <linux/poll.h>
#include <linux/delay.h>
#include <linux/sysrq.h>
#include <linux/proc_fs.h>
#include <linux/irq.h>
#include <linux/pm.h>
#include <linux/device.h>
#include <linux/suspend.h> #include <linux/suspend.h>
#include <linux/acpi.h>
#include <asm/uaccess.h>
#include <asm/acpi.h>
#include <asm/tlbflush.h>
#include <asm/processor.h>
static struct saved_context saved_context; static struct saved_context saved_context;
......
...@@ -233,6 +233,23 @@ simscsi_readwrite10 (struct scsi_cmnd *sc, int mode) ...@@ -233,6 +233,23 @@ simscsi_readwrite10 (struct scsi_cmnd *sc, int mode)
simscsi_readwrite(sc, mode, offset, ((sc->cmnd[7] << 8) | sc->cmnd[8])*512); simscsi_readwrite(sc, mode, offset, ((sc->cmnd[7] << 8) | sc->cmnd[8])*512);
} }
static void simscsi_fillresult(struct scsi_cmnd *sc, char *buf, unsigned len)
{
int scatterlen = sc->use_sg;
struct scatterlist *slp;
if (scatterlen == 0)
memcpy(sc->request_buffer, buf, len);
else for (slp = (struct scatterlist *)sc->buffer; scatterlen-- > 0 && len > 0; slp++) {
unsigned thislen = min(len, slp->length);
memcpy(page_address(slp->page) + slp->offset, buf, thislen);
slp++;
len -= thislen;
}
}
static int static int
simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
{ {
...@@ -240,6 +257,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) ...@@ -240,6 +257,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
char fname[MAX_ROOT_LEN+16]; char fname[MAX_ROOT_LEN+16];
size_t disk_size; size_t disk_size;
char *buf; char *buf;
char localbuf[36];
#if DEBUG_SIMSCSI #if DEBUG_SIMSCSI
register long sp asm ("sp"); register long sp asm ("sp");
...@@ -263,7 +281,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) ...@@ -263,7 +281,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
/* disk doesn't exist... */ /* disk doesn't exist... */
break; break;
} }
buf = sc->request_buffer; buf = localbuf;
buf[0] = 0; /* magnetic disk */ buf[0] = 0; /* magnetic disk */
buf[1] = 0; /* not a removable medium */ buf[1] = 0; /* not a removable medium */
buf[2] = 2; /* SCSI-2 compliant device */ buf[2] = 2; /* SCSI-2 compliant device */
...@@ -273,6 +291,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) ...@@ -273,6 +291,7 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
buf[6] = 0; /* reserved */ buf[6] = 0; /* reserved */
buf[7] = 0; /* various flags */ buf[7] = 0; /* various flags */
memcpy(buf + 8, "HP SIMULATED DISK 0.00", 28); memcpy(buf + 8, "HP SIMULATED DISK 0.00", 28);
simscsi_fillresult(sc, buf, 36);
sc->result = GOOD; sc->result = GOOD;
break; break;
...@@ -304,16 +323,13 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) ...@@ -304,16 +323,13 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
simscsi_readwrite10(sc, SSC_WRITE); simscsi_readwrite10(sc, SSC_WRITE);
break; break;
case READ_CAPACITY: case READ_CAPACITY:
if (desc[target_id] < 0 || sc->request_bufflen < 8) { if (desc[target_id] < 0 || sc->request_bufflen < 8) {
break; break;
} }
buf = sc->request_buffer; buf = localbuf;
disk_size = simscsi_get_disk_size(desc[target_id]); disk_size = simscsi_get_disk_size(desc[target_id]);
/* pretend to be a 1GB disk (partition table contains real stuff): */
buf[0] = (disk_size >> 24) & 0xff; buf[0] = (disk_size >> 24) & 0xff;
buf[1] = (disk_size >> 16) & 0xff; buf[1] = (disk_size >> 16) & 0xff;
buf[2] = (disk_size >> 8) & 0xff; buf[2] = (disk_size >> 8) & 0xff;
...@@ -323,13 +339,14 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)) ...@@ -323,13 +339,14 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
buf[5] = 0; buf[5] = 0;
buf[6] = 2; buf[6] = 2;
buf[7] = 0; buf[7] = 0;
simscsi_fillresult(sc, buf, 8);
sc->result = GOOD; sc->result = GOOD;
break; break;
case MODE_SENSE: case MODE_SENSE:
case MODE_SENSE_10: case MODE_SENSE_10:
/* sd.c uses this to determine whether disk does write-caching. */ /* sd.c uses this to determine whether disk does write-caching. */
memset(sc->request_buffer, 0, 128); simscsi_fillresult(sc, (char *)empty_zero_page, sc->request_bufflen);
sc->result = GOOD; sc->result = GOOD;
break; break;
......
...@@ -489,24 +489,27 @@ ia64_state_save: ...@@ -489,24 +489,27 @@ ia64_state_save:
;; ;;
st8 [temp1]=r17,16 // pal_min_state st8 [temp1]=r17,16 // pal_min_state
st8 [temp2]=r6,16 // prev_IA64_KR_CURRENT st8 [temp2]=r6,16 // prev_IA64_KR_CURRENT
mov r6=IA64_KR(CURRENT_STACK)
;;
st8 [temp1]=r6,16 // prev_IA64_KR_CURRENT_STACK
st8 [temp2]=r0,16 // prev_task, starts off as NULL
mov r6=cr.ifa mov r6=cr.ifa
;; ;;
st8 [temp1]=r0,16 // prev_task, starts off as NULL st8 [temp1]=r12,16 // cr.isr
st8 [temp2]=r12,16 // cr.isr st8 [temp2]=r6,16 // cr.ifa
mov r12=cr.itir mov r12=cr.itir
;; ;;
st8 [temp1]=r6,16 // cr.ifa st8 [temp1]=r12,16 // cr.itir
st8 [temp2]=r12,16 // cr.itir st8 [temp2]=r11,16 // cr.iipa
mov r12=cr.iim mov r12=cr.iim
;; ;;
st8 [temp1]=r11,16 // cr.iipa st8 [temp1]=r12,16 // cr.iim
st8 [temp2]=r12,16 // cr.iim
mov r6=cr.iha
(p1) mov r12=IA64_MCA_COLD_BOOT (p1) mov r12=IA64_MCA_COLD_BOOT
(p2) mov r12=IA64_INIT_WARM_BOOT (p2) mov r12=IA64_INIT_WARM_BOOT
mov r6=cr.iha
;; ;;
st8 [temp1]=r6,16 // cr.iha st8 [temp2]=r6,16 // cr.iha
st8 [temp2]=r12 // os_status, default is cold boot st8 [temp1]=r12 // os_status, default is cold boot
mov r6=IA64_MCA_SAME_CONTEXT mov r6=IA64_MCA_SAME_CONTEXT
;; ;;
st8 [temp1]=r6 // context, default is same context st8 [temp1]=r6 // context, default is same context
...@@ -823,9 +826,12 @@ ia64_state_restore: ...@@ -823,9 +826,12 @@ ia64_state_restore:
ld8 r12=[temp1],16 // sal_ra ld8 r12=[temp1],16 // sal_ra
ld8 r9=[temp2],16 // sal_gp ld8 r9=[temp2],16 // sal_gp
;; ;;
ld8 r22=[temp1],24 // pal_min_state, virtual. skip prev_task ld8 r22=[temp1],16 // pal_min_state, virtual
ld8 r21=[temp2],16 // prev_IA64_KR_CURRENT ld8 r21=[temp2],16 // prev_IA64_KR_CURRENT
;; ;;
ld8 r16=[temp1],16 // prev_IA64_KR_CURRENT_STACK
ld8 r20=[temp2],16 // prev_task
;;
ld8 temp3=[temp1],16 // cr.isr ld8 temp3=[temp1],16 // cr.isr
ld8 temp4=[temp2],16 // cr.ifa ld8 temp4=[temp2],16 // cr.ifa
;; ;;
...@@ -846,6 +852,45 @@ ia64_state_restore: ...@@ -846,6 +852,45 @@ ia64_state_restore:
ld8 r8=[temp1] // os_status ld8 r8=[temp1] // os_status
ld8 r10=[temp2] // context ld8 r10=[temp2] // context
/* Wire IA64_TR_CURRENT_STACK to the stack that we are resuming to. To
* avoid any dependencies on the algorithm in ia64_switch_to(), just
* purge any existing CURRENT_STACK mapping and insert the new one.
*
* r16 contains prev_IA64_KR_CURRENT_STACK, r21 contains
* prev_IA64_KR_CURRENT, these values may have been changed by the C
* code. Do not use r8, r9, r10, r22, they contain values ready for
* the return to SAL.
*/
mov r15=IA64_KR(CURRENT_STACK) // physical granule mapped by IA64_TR_CURRENT_STACK
;;
shl r15=r15,IA64_GRANULE_SHIFT
;;
dep r15=-1,r15,61,3 // virtual granule
mov r18=IA64_GRANULE_SHIFT<<2 // for cr.itir.ps
;;
ptr.d r15,r18
;;
srlz.d
extr.u r19=r21,61,3 // r21 = prev_IA64_KR_CURRENT
shl r20=r16,IA64_GRANULE_SHIFT // r16 = prev_IA64_KR_CURRENT_STACK
movl r21=PAGE_KERNEL // page properties
;;
mov IA64_KR(CURRENT_STACK)=r16
cmp.ne p6,p0=RGN_KERNEL,r19 // new stack is in the kernel region?
or r21=r20,r21 // construct PA | page properties
(p6) br.spnt 1f // the dreaded cpu 0 idle task in region 5:(
;;
mov cr.itir=r18
mov cr.ifa=r21
mov r20=IA64_TR_CURRENT_STACK
;;
itr.d dtr[r20]=r21
;;
srlz.d
1:
br.sptk b0 br.sptk b0
//EndStub////////////////////////////////////////////////////////////////////// //EndStub//////////////////////////////////////////////////////////////////////
...@@ -982,6 +1027,7 @@ ia64_set_kernel_registers: ...@@ -982,6 +1027,7 @@ ia64_set_kernel_registers:
add temp4=temp4, temp1 // &struct ia64_sal_os_state.os_gp add temp4=temp4, temp1 // &struct ia64_sal_os_state.os_gp
add r12=temp1, temp3 // kernel stack pointer on MCA/INIT stack add r12=temp1, temp3 // kernel stack pointer on MCA/INIT stack
add r13=temp1, r3 // set current to start of MCA/INIT stack add r13=temp1, r3 // set current to start of MCA/INIT stack
add r20=temp1, r3 // physical start of MCA/INIT stack
;; ;;
ld8 r1=[temp4] // OS GP from SAL OS state ld8 r1=[temp4] // OS GP from SAL OS state
;; ;;
...@@ -991,7 +1037,35 @@ ia64_set_kernel_registers: ...@@ -991,7 +1037,35 @@ ia64_set_kernel_registers:
;; ;;
mov IA64_KR(CURRENT)=r13 mov IA64_KR(CURRENT)=r13
// FIXME: do I need to wire IA64_KR_CURRENT_STACK and IA64_TR_CURRENT_STACK? /* Wire IA64_TR_CURRENT_STACK to the MCA/INIT handler stack. To avoid
* any dependencies on the algorithm in ia64_switch_to(), just purge
* any existing CURRENT_STACK mapping and insert the new one.
*/
mov r16=IA64_KR(CURRENT_STACK) // physical granule mapped by IA64_TR_CURRENT_STACK
;;
shl r16=r16,IA64_GRANULE_SHIFT
;;
dep r16=-1,r16,61,3 // virtual granule
mov r18=IA64_GRANULE_SHIFT<<2 // for cr.itir.ps
;;
ptr.d r16,r18
;;
srlz.d
shr.u r16=r20,IA64_GRANULE_SHIFT // r20 = physical start of MCA/INIT stack
movl r21=PAGE_KERNEL // page properties
;;
mov IA64_KR(CURRENT_STACK)=r16
or r21=r20,r21 // construct PA | page properties
;;
mov cr.itir=r18
mov cr.ifa=r13
mov r20=IA64_TR_CURRENT_STACK
;;
itr.d dtr[r20]=r21
;;
srlz.d
br.sptk b0 br.sptk b0
......
...@@ -56,8 +56,9 @@ static struct page *page_isolate[MAX_PAGE_ISOLATE]; ...@@ -56,8 +56,9 @@ static struct page *page_isolate[MAX_PAGE_ISOLATE];
static int num_page_isolate = 0; static int num_page_isolate = 0;
typedef enum { typedef enum {
ISOLATE_NG = 0, ISOLATE_NG,
ISOLATE_OK = 1 ISOLATE_OK,
ISOLATE_NONE
} isolate_status_t; } isolate_status_t;
/* /*
...@@ -74,7 +75,7 @@ static struct { ...@@ -74,7 +75,7 @@ static struct {
* @paddr: poisoned memory location * @paddr: poisoned memory location
* *
* Return value: * Return value:
* ISOLATE_OK / ISOLATE_NG * one of isolate_status_t, ISOLATE_OK/NG/NONE.
*/ */
static isolate_status_t static isolate_status_t
...@@ -85,7 +86,10 @@ mca_page_isolate(unsigned long paddr) ...@@ -85,7 +86,10 @@ mca_page_isolate(unsigned long paddr)
/* whether physical address is valid or not */ /* whether physical address is valid or not */
if (!ia64_phys_addr_valid(paddr)) if (!ia64_phys_addr_valid(paddr))
return ISOLATE_NG; return ISOLATE_NONE;
if (!pfn_valid(paddr))
return ISOLATE_NONE;
/* convert physical address to physical page number */ /* convert physical address to physical page number */
p = pfn_to_page(paddr>>PAGE_SHIFT); p = pfn_to_page(paddr>>PAGE_SHIFT);
...@@ -122,10 +126,15 @@ mca_handler_bh(unsigned long paddr) ...@@ -122,10 +126,15 @@ mca_handler_bh(unsigned long paddr)
current->pid, current->comm); current->pid, current->comm);
spin_lock(&mca_bh_lock); spin_lock(&mca_bh_lock);
if (mca_page_isolate(paddr) == ISOLATE_OK) { switch (mca_page_isolate(paddr)) {
case ISOLATE_OK:
printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr); printk(KERN_DEBUG "Page isolation: ( %lx ) success.\n", paddr);
} else { break;
case ISOLATE_NG:
printk(KERN_DEBUG "Page isolation: ( %lx ) failure.\n", paddr); printk(KERN_DEBUG "Page isolation: ( %lx ) failure.\n", paddr);
break;
default:
break;
} }
spin_unlock(&mca_bh_lock); spin_unlock(&mca_bh_lock);
......
...@@ -24,7 +24,7 @@ aflags-$(CONFIG_ISA_M32R) += -DNO_FPU -Wa,-no-bitinst ...@@ -24,7 +24,7 @@ aflags-$(CONFIG_ISA_M32R) += -DNO_FPU -Wa,-no-bitinst
CFLAGS += $(cflags-y) CFLAGS += $(cflags-y)
AFLAGS += $(aflags-y) AFLAGS += $(aflags-y)
CHECKFLAGS := $(CHECK) -D__m32r__ CHECKFLAGS += -D__m32r__ -D__BIG_ENDIAN__=1
head-y := arch/m32r/kernel/head.o arch/m32r/kernel/init_task.o head-y := arch/m32r/kernel/head.o arch/m32r/kernel/init_task.o
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
unsigned long unsigned long
__generic_copy_to_user(void *to, const void *from, unsigned long n) __generic_copy_to_user(void __user *to, const void *from, unsigned long n)
{ {
prefetch(from); prefetch(from);
if (access_ok(VERIFY_WRITE, to, n)) if (access_ok(VERIFY_WRITE, to, n))
...@@ -22,7 +22,7 @@ __generic_copy_to_user(void *to, const void *from, unsigned long n) ...@@ -22,7 +22,7 @@ __generic_copy_to_user(void *to, const void *from, unsigned long n)
} }
unsigned long unsigned long
__generic_copy_from_user(void *to, const void *from, unsigned long n) __generic_copy_from_user(void *to, const void __user *from, unsigned long n)
{ {
prefetchw(to); prefetchw(to);
if (access_ok(VERIFY_READ, from, n)) if (access_ok(VERIFY_READ, from, n))
...@@ -111,7 +111,7 @@ do { \ ...@@ -111,7 +111,7 @@ do { \
#endif /* CONFIG_ISA_DUAL_ISSUE */ #endif /* CONFIG_ISA_DUAL_ISSUE */
long long
__strncpy_from_user(char *dst, const char *src, long count) __strncpy_from_user(char *dst, const char __user *src, long count)
{ {
long res; long res;
__do_strncpy_from_user(dst, src, count, res); __do_strncpy_from_user(dst, src, count, res);
...@@ -119,7 +119,7 @@ __strncpy_from_user(char *dst, const char *src, long count) ...@@ -119,7 +119,7 @@ __strncpy_from_user(char *dst, const char *src, long count)
} }
long long
strncpy_from_user(char *dst, const char *src, long count) strncpy_from_user(char *dst, const char __user *src, long count)
{ {
long res = -EFAULT; long res = -EFAULT;
if (access_ok(VERIFY_READ, src, 1)) if (access_ok(VERIFY_READ, src, 1))
...@@ -222,7 +222,7 @@ do { \ ...@@ -222,7 +222,7 @@ do { \
#endif /* not CONFIG_ISA_DUAL_ISSUE */ #endif /* not CONFIG_ISA_DUAL_ISSUE */
unsigned long unsigned long
clear_user(void *to, unsigned long n) clear_user(void __user *to, unsigned long n)
{ {
if (access_ok(VERIFY_WRITE, to, n)) if (access_ok(VERIFY_WRITE, to, n))
__do_clear_user(to, n); __do_clear_user(to, n);
...@@ -230,7 +230,7 @@ clear_user(void *to, unsigned long n) ...@@ -230,7 +230,7 @@ clear_user(void *to, unsigned long n)
} }
unsigned long unsigned long
__clear_user(void *to, unsigned long n) __clear_user(void __user *to, unsigned long n)
{ {
__do_clear_user(to, n); __do_clear_user(to, n);
return n; return n;
...@@ -244,7 +244,7 @@ __clear_user(void *to, unsigned long n) ...@@ -244,7 +244,7 @@ __clear_user(void *to, unsigned long n)
#ifdef CONFIG_ISA_DUAL_ISSUE #ifdef CONFIG_ISA_DUAL_ISSUE
long strnlen_user(const char *s, long n) long strnlen_user(const char __user *s, long n)
{ {
unsigned long mask = -__addr_ok(s); unsigned long mask = -__addr_ok(s);
unsigned long res; unsigned long res;
...@@ -313,7 +313,7 @@ long strnlen_user(const char *s, long n) ...@@ -313,7 +313,7 @@ long strnlen_user(const char *s, long n)
#else /* not CONFIG_ISA_DUAL_ISSUE */ #else /* not CONFIG_ISA_DUAL_ISSUE */
long strnlen_user(const char *s, long n) long strnlen_user(const char __user *s, long n)
{ {
unsigned long mask = -__addr_ok(s); unsigned long mask = -__addr_ok(s);
unsigned long res; unsigned long res;
......
OUTPUT_ARCH(powerpc) OUTPUT_ARCH(powerpc:common)
SECTIONS SECTIONS
{ {
/* Read-only sections, merged into text segment: */ /* Read-only sections, merged into text segment: */
......
...@@ -15,9 +15,8 @@ extra-y += vmlinux.lds ...@@ -15,9 +15,8 @@ extra-y += vmlinux.lds
obj-y := entry.o traps.o irq.o idle.o time.o misc.o \ obj-y := entry.o traps.o irq.o idle.o time.o misc.o \
process.o signal.o ptrace.o align.o \ process.o signal.o ptrace.o align.o \
semaphore.o syscalls.o setup.o \ semaphore.o syscalls.o setup.o \
cputable.o ppc_htab.o cputable.o ppc_htab.o perfmon.o
obj-$(CONFIG_6xx) += l2cr.o cpu_setup_6xx.o obj-$(CONFIG_6xx) += l2cr.o cpu_setup_6xx.o
obj-$(CONFIG_E500) += perfmon.o
obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o obj-$(CONFIG_SOFTWARE_SUSPEND) += swsusp.o
obj-$(CONFIG_POWER4) += cpu_setup_power4.o obj-$(CONFIG_POWER4) += cpu_setup_power4.o
obj-$(CONFIG_MODULES) += module.o ppc_ksyms.o obj-$(CONFIG_MODULES) += module.o ppc_ksyms.o
......
...@@ -45,9 +45,8 @@ static void dummy_perf(struct pt_regs *regs) ...@@ -45,9 +45,8 @@ static void dummy_perf(struct pt_regs *regs)
mtpmr(PMRN_PMGC0, pmgc0); mtpmr(PMRN_PMGC0, pmgc0);
} }
#else #elif defined(CONFIG_6xx)
/* Ensure exceptions are disabled */ /* Ensure exceptions are disabled */
static void dummy_perf(struct pt_regs *regs) static void dummy_perf(struct pt_regs *regs)
{ {
unsigned int mmcr0 = mfspr(SPRN_MMCR0); unsigned int mmcr0 = mfspr(SPRN_MMCR0);
...@@ -55,6 +54,10 @@ static void dummy_perf(struct pt_regs *regs) ...@@ -55,6 +54,10 @@ static void dummy_perf(struct pt_regs *regs)
mmcr0 &= ~MMCR0_PMXE; mmcr0 &= ~MMCR0_PMXE;
mtspr(SPRN_MMCR0, mmcr0); mtspr(SPRN_MMCR0, mmcr0);
} }
#else
static void dummy_perf(struct pt_regs *regs)
{
}
#endif #endif
void (*perf_irq)(struct pt_regs *) = dummy_perf; void (*perf_irq)(struct pt_regs *) = dummy_perf;
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/ide.h> #include <linux/ide.h>
#include <linux/initrd.h> #include <linux/initrd.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/tty.h> #include <linux/tty.h>
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/ide.h> #include <linux/ide.h>
#include <linux/initrd.h> #include <linux/initrd.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/tty.h> #include <linux/tty.h>
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/ide.h> #include <linux/ide.h>
#include <linux/initrd.h> #include <linux/initrd.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/tty.h> #include <linux/tty.h>
......
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/ide.h> #include <linux/ide.h>
#include <linux/initrd.h> #include <linux/initrd.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/tty.h> #include <linux/tty.h>
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <linux/major.h> #include <linux/major.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/serial.h> #include <linux/serial.h>
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <linux/major.h> #include <linux/major.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/serial.h> #include <linux/serial.h>
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <linux/major.h> #include <linux/major.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/serial.h> #include <linux/serial.h>
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <linux/major.h> #include <linux/major.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/serial.h> #include <linux/serial.h>
#include <linux/module.h> #include <linux/module.h>
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <linux/major.h> #include <linux/major.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/serial.h> #include <linux/serial.h>
#include <linux/module.h> #include <linux/module.h>
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <linux/major.h> #include <linux/major.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/serial.h> #include <linux/serial.h>
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include <linux/major.h> #include <linux/major.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/serial.h> #include <linux/serial.h>
#include <linux/module.h> #include <linux/module.h>
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/serial.h> #include <linux/serial.h>
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#include <asm/time.h> #include <asm/time.h>
#include <asm/dma.h> #include <asm/dma.h>
#include <asm/io.h> #include <asm/io.h>
#include <linux/irq.h>
#include <asm/hw_irq.h> #include <asm/hw_irq.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/kgdb.h> #include <asm/kgdb.h>
......
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/ide.h> #include <linux/ide.h>
#include <linux/irq.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <linux/major.h> #include <linux/major.h>
#include <linux/initrd.h> #include <linux/initrd.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/bcd.h> #include <linux/bcd.h>
......
...@@ -20,7 +20,6 @@ ...@@ -20,7 +20,6 @@
#include <linux/initrd.h> #include <linux/initrd.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/irq.h>
#include <linux/ide.h> #include <linux/ide.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/kdev_t.h> #include <linux/kdev_t.h>
......
...@@ -695,6 +695,13 @@ static int __init pmac_cpufreq_setup(void) ...@@ -695,6 +695,13 @@ static int __init pmac_cpufreq_setup(void)
set_speed_proc = pmu_set_cpu_speed; set_speed_proc = pmu_set_cpu_speed;
is_pmu_based = 1; is_pmu_based = 1;
} }
/* Else check for TiPb 550 */
else if (machine_is_compatible("PowerBook3,3") && cur_freq == 550000) {
hi_freq = cur_freq;
low_freq = 500000;
set_speed_proc = pmu_set_cpu_speed;
is_pmu_based = 1;
}
/* Else check for TiPb 400 & 500 */ /* Else check for TiPb 400 & 500 */
else if (machine_is_compatible("PowerBook3,2")) { else if (machine_is_compatible("PowerBook3,2")) {
/* We only know about the 400 MHz and the 500Mhz model /* We only know about the 400 MHz and the 500Mhz model
......
...@@ -2337,6 +2337,10 @@ static struct pmac_mb_def pmac_mb_defs[] __pmacdata = { ...@@ -2337,6 +2337,10 @@ static struct pmac_mb_def pmac_mb_defs[] __pmacdata = {
PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE,
}, },
{ "PowerBook6,7", "iBook G4",
PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE,
},
{ "PowerBook6,8", "PowerBook G4 12\"", { "PowerBook6,8", "PowerBook G4 12\"",
PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features, PMAC_TYPE_UNKNOWN_INTREPID, intrepid_features,
PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE, PMAC_MB_MAY_SLEEP | PMAC_MB_HAS_FW_POWER | PMAC_MB_MOBILE,
......
...@@ -48,7 +48,6 @@ ...@@ -48,7 +48,6 @@
#include <linux/adb.h> #include <linux/adb.h>
#include <linux/cuda.h> #include <linux/cuda.h>
#include <linux/pmu.h> #include <linux/pmu.h>
#include <linux/irq.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/root_dev.h> #include <linux/root_dev.h>
#include <linux/bitops.h> #include <linux/bitops.h>
...@@ -719,7 +718,8 @@ pmac_declare_of_platform_devices(void) ...@@ -719,7 +718,8 @@ pmac_declare_of_platform_devices(void)
if (np) { if (np) {
for (np = np->child; np != NULL; np = np->sibling) for (np = np->child; np != NULL; np = np->sibling)
if (strncmp(np->name, "i2c", 3) == 0) { if (strncmp(np->name, "i2c", 3) == 0) {
of_platform_device_create(np, "uni-n-i2c"); of_platform_device_create(np, "uni-n-i2c",
NULL);
break; break;
} }
} }
...@@ -727,17 +727,18 @@ pmac_declare_of_platform_devices(void) ...@@ -727,17 +727,18 @@ pmac_declare_of_platform_devices(void)
if (np) { if (np) {
for (np = np->child; np != NULL; np = np->sibling) for (np = np->child; np != NULL; np = np->sibling)
if (strncmp(np->name, "i2c", 3) == 0) { if (strncmp(np->name, "i2c", 3) == 0) {
of_platform_device_create(np, "u3-i2c"); of_platform_device_create(np, "u3-i2c",
NULL);
break; break;
} }
} }
np = find_devices("valkyrie"); np = find_devices("valkyrie");
if (np) if (np)
of_platform_device_create(np, "valkyrie"); of_platform_device_create(np, "valkyrie", NULL);
np = find_devices("platinum"); np = find_devices("platinum");
if (np) if (np)
of_platform_device_create(np, "platinum"); of_platform_device_create(np, "platinum", NULL);
return 0; return 0;
} }
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册