diff --git a/arch/ppc/Config.help b/arch/ppc/Config.help
index 38f4e12e6de3b6092d112c0bfc80f71bc43da87e..40a9633e06bf85f50efdacdbe24f314c89b18081 100644
--- a/arch/ppc/Config.help
+++ b/arch/ppc/Config.help
@@ -340,9 +340,16 @@ CONFIG_PREP_RESIDUAL
   other useful pieces of information.  Sometimes this information is
   not present or incorrect.
 
-  Unless you expect to boot on a PReP system, there is not need to
+  Unless you expect to boot on a PReP system, there is no need to
   select Y.
 
+PReP residual data available in /proc/residual
+CONFIG_PROC_PREPRESIDUAL
+  Enabling this option will create a /proc/residual file which allows
+  you to get at the residual data on PReP systems.  You will need a tool
+  (lsresidual) to parse it.  If you aren't on a PReP system, you don't
+  want this.
+
 CONFIG_ADB
   Apple Desktop Bus (ADB) support is for support of devices which
   are connected to an ADB port.  ADB devices tend to have 4 pins.
diff --git a/arch/ppc/boot/common/misc-simple.c b/arch/ppc/boot/common/misc-simple.c
index a2965595aa5f08cb5b39ad9611d348696cb6d9ee..9dbbc83af42dd922658fbb5846d0fbd4464bc05b 100644
--- a/arch/ppc/boot/common/misc-simple.c
+++ b/arch/ppc/boot/common/misc-simple.c
@@ -67,7 +67,7 @@ extern int CRT_tstc(void);
 extern unsigned long serial_init(int chan, void *ignored);
 extern void serial_close(unsigned long com_port);
 extern void gunzip(void *, int, unsigned char *, int *);
-extern void setup_legacy(void);
+extern void serial_fixups(void);
 
 struct bi_record *
 decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum)
@@ -76,7 +76,7 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum)
 	char *cp, ch;
 	struct bi_record *rec, *birecs;
 
-	setup_legacy();
+	serial_fixups();
 	com_port = serial_init(0, NULL);
 
 	/* assume the chunk below 8M is free */
diff --git a/arch/ppc/boot/common/relocate.S b/arch/ppc/boot/common/relocate.S
index 3f9ba51004b4b245a4e009e0a0742f20fd600267..9c49a9c09f80414293f1ef6282e4370544bffa2d 100644
--- a/arch/ppc/boot/common/relocate.S
+++ b/arch/ppc/boot/common/relocate.S
@@ -9,7 +9,7 @@
  *	   trini@mvista.com
  * Derived from arch/ppc/boot/prep/head.S (Cort Dougan, many others).
  *
- * Copyright 2001 MontaVista Software Inc.
+ * Copyright 2001-2002 MontaVista Software Inc.
  *
  * 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
@@ -188,10 +188,11 @@ start_ldr:
 	bl	decompress_kernel
 
 	/*
-	 * Make sure the kernel knows we don't have things set  in
+	 * Make sure the kernel knows we don't have things set in
 	 * registers.  -- Tom
 	 */
 	li	r4,0
+	li	r5,0
 	li	r6,0
 
 	/*
diff --git a/arch/ppc/boot/prep/misc.c b/arch/ppc/boot/prep/misc.c
index cc76c012d0a1e5faaa33f8533e7987375618f38c..9c600273f2cd96be9444227d4b0d33e4198e6594 100644
--- a/arch/ppc/boot/prep/misc.c
+++ b/arch/ppc/boot/prep/misc.c
@@ -75,7 +75,7 @@ extern void gunzip(void *, int, unsigned char *, int *);
 
 extern void _put_MSR(unsigned int val);
 extern unsigned long serial_init(int chan, void *ignored);
-extern void setup_legacy(void);
+extern void serial_fixups(void);
 
 void
 writel(unsigned int val, unsigned int address)
@@ -134,7 +134,7 @@ decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum,
 	int start_multi = 0;
 	unsigned int pci_viddid, pci_did, tulip_pci_base, tulip_base;
 
-	setup_legacy();
+	serial_fixups();
 #if defined(CONFIG_SERIAL_CONSOLE)
 	com_port = serial_init(0, NULL);
 #endif /* CONFIG_SERIAL_CONSOLE */
diff --git a/arch/ppc/boot/simple/chrpmap.S b/arch/ppc/boot/simple/chrpmap.S
index 10f1f39a1898dffd952b0bf2cfa9b29c6a70b5be..7aba1c0d800382fa156b323def903ddc10ccbfc7 100644
--- a/arch/ppc/boot/simple/chrpmap.S
+++ b/arch/ppc/boot/simple/chrpmap.S
@@ -3,15 +3,15 @@
  *
  * Author: Tom Rini <trini@mvista.com>
  *
- * This will go and setup ISA_io to 0xFE00000.
+ * This will go and setup ISA_io to 0xFE00000 and return.
  */
 
 #include <asm/ppc_asm.h>
 
 	.text
 
-	.globl setup_legacy
-setup_legacy:
+	.globl serial_fixups
+serial_fixups:
 	lis	r3,ISA_io@h	/* Load ISA_io */
 	ori	r3,r3,ISA_io@l
 	lis	r4,0xFE00	/* Load the value, 0xFE00000 */
diff --git a/arch/ppc/boot/simple/direct.S b/arch/ppc/boot/simple/direct.S
index 3c582b3a99fd07d81d4d9f47e457144caab74a21..b5ced833e370fbcf6f93c62098f5ea18d21c66e7 100644
--- a/arch/ppc/boot/simple/direct.S
+++ b/arch/ppc/boot/simple/direct.S
@@ -4,11 +4,12 @@
  * Author: Tom Rini <trini@mvista.com>
  *
  * This is an empty function for machines which use SERIAL_IO_MEM
- * and don't need ISA_io set to anything but 0;
+ * and don't need ISA_io set to anything but 0, or perform any other
+ * serial fixups.
  */
 
 	.text
 
-	.globl setup_legacy
-setup_legacy:
+	.globl serial_fixups
+serial_fixups:
 	blr
diff --git a/arch/ppc/boot/simple/legacy.S b/arch/ppc/boot/simple/legacy.S
index ae2769a1f512cb011445d987ae81dce0bca8deb0..1c7e2976433ac0c261ce06185713601e922f7b7d 100644
--- a/arch/ppc/boot/simple/legacy.S
+++ b/arch/ppc/boot/simple/legacy.S
@@ -3,15 +3,15 @@
  *
  * Author: Tom Rini <trini@mvista.com>
  *
- * This will go and setup ISA_io to 0x8000000.
+ * This will go and setup ISA_io to 0x8000000 and return.
  */
 
 #include <asm/ppc_asm.h>
 
 	.text
 
-	.globl setup_legacy
-setup_legacy:
+	.globl serial_fixups
+serial_fixups:
 	lis	r3,ISA_io@h	/* Load ISA_io */
 	ori	r3,r3,ISA_io@l
 	lis	r4,0x8000	/* Load the value, 0x8000000 */
diff --git a/arch/ppc/boot/simple/misc-embedded.c b/arch/ppc/boot/simple/misc-embedded.c
index ad2f403dccae26cb9df16d646c962e9872bd34d0..d415843cc836998f1fec16b9856f54eae37b87b5 100644
--- a/arch/ppc/boot/simple/misc-embedded.c
+++ b/arch/ppc/boot/simple/misc-embedded.c
@@ -54,7 +54,7 @@ char *bootrom_cmdline = "";
 char compiled_string[] = CONFIG_CMDLINE;
 #endif
 char ramroot_string[] = "root=/dev/ram";
-char netroot_string[] = "root=/dev/nfs rw ip=auto";
+char netroot_string[] = "root=/dev/nfs rw ip=on";
 
 /* Serial port to use. */
 unsigned long com_port;
diff --git a/arch/ppc/config.in b/arch/ppc/config.in
index a917c3d2feb3207b7fe4b0a8a55a3491527b60c3..2219895c653f4729ff6abdb21001ffed079870d2 100644
--- a/arch/ppc/config.in
+++ b/arch/ppc/config.in
@@ -362,6 +362,7 @@ if [ "$CONFIG_ALL_PPC" = "y" ]; then
    bool 'Support for Open Firmware device tree in /proc' CONFIG_PROC_DEVICETREE
    bool 'Support for RTAS (RunTime Abstraction Services) in /proc' CONFIG_PPC_RTAS
    bool 'Support for PReP Residual Data' CONFIG_PREP_RESIDUAL
+   dep_bool '  Support for reading of PReP Residual Data in /proc' CONFIG_PROC_PREPRESIDUAL $CONFIG_PREP_RESIDUAL
 fi
 
 bool 'Default bootloader kernel arguments' CONFIG_CMDLINE_BOOL
@@ -574,15 +575,15 @@ if [ "$CONFIG_8260" = "y" ]; then
    source arch/ppc/8260_io/Config.in
 fi
 
-if [ "$CONFIG_4xx" = "y"]; then
+if [ "$CONFIG_4xx" = "y" ]; then
    mainmenu_option next_comment
    comment 'IBM 4xx options'
    if [ "$CONFIG_STB03xxx" = "y" ]; then
       bool 'STB IR Keyboard' CONFIG_STB_KB
       bool 'SICC Serial port' CONFIG_SERIAL_SICC
       if [ "$CONFIG_SERIAL_SICC" = "y" -a "$CONFIG_UART0_TTYS1" = "y" ]; then
-         define_bool CONFIG_UART1_DFLT_CONSOLE y	
-         define_bool CONFIG_SERIAL_SICC_CONSOLE y
+	 define_bool CONFIG_UART1_DFLT_CONSOLE y	
+	 define_bool CONFIG_SERIAL_SICC_CONSOLE y
       fi
    fi
    endmenu
@@ -621,8 +622,8 @@ if [ "$CONFIG_ALL_PPC" = "y" ]; then
 fi
 if [ "$CONFIG_4xx" = "y" -o "$CONFIG_GT64260" = "y"		\
      -o "$CONFIG_LOPEC" = "y" -o "$CONFIG_MCPN765" = "y"	\
-     -o "$CONFIG_PRPMC800" = "y" -o "$CONFIG_SANDPOINT" = "y"	\
-     -o "$CONFIG_ZX4500" = "y" ]; then
+     -o "$CONFIG_PPLUS" = "y" -o "$CONFIG_PRPMC800" = "y"	\
+     -o "$CONFIG_SANDPOINT" = "y" -o "$CONFIG_ZX4500" = "y" ]; then
    bool 'Support for early boot texts over serial port' CONFIG_SERIAL_TEXT_DEBUG
 fi
 endmenu
diff --git a/arch/ppc/kernel/Makefile b/arch/ppc/kernel/Makefile
index ed1897f264b999a2e50fba942f24188d1a4c9081..4841c88534de99762cfe2f24a435bdd3bcc9a3b9 100644
--- a/arch/ppc/kernel/Makefile
+++ b/arch/ppc/kernel/Makefile
@@ -56,19 +56,18 @@ obj-$(CONFIG_PM)		+= ppc4xx_pm.o
 endif
 obj-$(CONFIG_8xx)		+= m8xx_setup.o ppc8xx_pic.o
 ifeq ($(CONFIG_8xx),y)
-obj-$(CONFIG_PCI)		+= qspan_pci.o
-ifndef CONFIG_MATH_EMULATION
+obj-$(CONFIG_PCI)		+= qspan_pci.o i8259.o
+ifneq ($(CONFIG_MATH_EMULATION),n)
 obj-y				+= softemu8xx.o
 endif
 endif
-obj-$(CONFIG_MBX)		+= i8259.o
 obj-$(CONFIG_ALL_PPC)		+= prom_init.o prom.o open_pic.o \
 					indirect_pci.o i8259.o
 obj-$(CONFIG_ADIR)		+= i8259.o indirect_pci.o pci_auto.o \
 					todc_time.o
 obj-$(CONFIG_EV64260)		+= gt64260_common.o gt64260_pic.o \
 					indirect_pci.o todc_time.o pci_auto.o
-obj-$(CONFIG_GEMINI)		+= open_pic.o
+obj-$(CONFIG_GEMINI)		+= open_pic.o i8259.o
 obj-$(CONFIG_K2)		+= i8259.o indirect_pci.o todc_time.o \
 					pci_auto.o
 obj-$(CONFIG_LOPEC)		+= mpc10x_common.o indirect_pci.o pci_auto.o \
diff --git a/arch/ppc/kernel/i8259.c b/arch/ppc/kernel/i8259.c
index 0a1ed9d7e5bc2254d9e44965f66397a616b48729..1872114131aaec47eacee8887815f9a338ae9044 100644
--- a/arch/ppc/kernel/i8259.c
+++ b/arch/ppc/kernel/i8259.c
@@ -21,17 +21,37 @@ static spinlock_t i8259_lock = SPIN_LOCK_UNLOCKED;
 
 int i8259_pic_irq_offset;
 
-/* Acknowledge the irq using the PCI host bridge's interrupt acknowledge
- * feature. (Polling is somehow broken on some IBM and Motorola PReP boxes.)
+/*
+ * Acknowledge the IRQ using either the PCI host bridge's interrupt
+ * acknowledge feature or poll.  How i8259_init() is called determines
+ * which is called.  It should be noted that polling is broken on some
+ * IBM and Motorola PReP boxes so we must use the int-ack feature on them.
  */
-int i8259_irq(struct pt_regs *regs)
+int
+i8259_irq(struct pt_regs *regs)
 {
 	int irq;
 
-	spin_lock/*_irqsave*/(&i8259_lock/*, flags*/);
+	spin_lock(&i8259_lock);
+
+	/* Either int-ack or poll for the IRQ */
+	if (pci_intack)
+		irq = *pci_intack;
+	else {
+		/* Perform an interrupt acknowledge cycle on controller 1. */
+		outb(0x0C, 0x20);		/* prepare for poll */
+		irq = inb(0x20) & 7;
+		if (irq == 2 ) {
+			/*
+			 * Interrupt is cascaded so perform interrupt
+			 * acknowledge on controller 2.
+			 */
+			outb(0x0C, 0xA0);	/* prepare for poll */
+			irq = (inb(0xA0) & 7) + 8;
+		}
+	}
 
-	irq = *pci_intack;
-	if (irq==7) {
+	if (irq == 7) {
 		/*
 		 * This may be a spurious interrupt.
 		 *
@@ -39,47 +59,13 @@ int i8259_irq(struct pt_regs *regs)
 		 * significant bit is not set then there is no valid
 		 * interrupt.
 		 */
-		if(~inb(0x20)&0x80) {
+		if (!pci_intack)
+			outb(0x0B, 0x20);	/* ISR register */
+		if(~inb(0x20) & 0x80)
 			irq = -1;
-		}
 	}
-	spin_unlock/*_irqrestore*/(&i8259_lock/*, flags*/);
-	return irq;
-}
 
-/* Poke the 8259's directly using poll commands. */
-int i8259_poll(void)
-{
-	int irq;
-
-	spin_lock/*_irqsave*/(&i8259_lock/*, flags*/);
-	/*
-	 * Perform an interrupt acknowledge cycle on controller 1
-	 */
-	outb(0x0C, 0x20); /* prepare for poll */
-	irq = inb(0x20) & 7;
-	if (irq == 2) {
-		/*
-		 * Interrupt is cascaded so perform interrupt
-		 * acknowledge on controller 2
-		 */
-		outb(0x0C, 0xA0); /* prepare for poll */
-		irq = (inb(0xA0) & 7) + 8;
-	} else if (irq==7) {
-		/*
-		 * This may be a spurious interrupt
-		 *
-		 * Read the interrupt status register. If the most
-		 * significant bit is not set then there is no valid
-		 * interrupt
-		 */
-		outb(0x0b, 0x20);
-		if(~inb(0x20)&0x80) {
-			spin_unlock/*_irqrestore*/(&i8259_lock/*, flags*/);
-			return -1;
-		}
-	}
-	spin_unlock/*_irqrestore*/(&i8259_lock/*, flags*/);
+	spin_unlock(&i8259_lock);
 	return irq;
 }
 
@@ -171,11 +157,13 @@ static struct resource pic_edgectrl_iores = {
 	"8259 edge control", 0x4d0, 0x4d1, IORESOURCE_BUSY
 };
 
-/* i8259_init()
+/*
+ * i8259_init()
  * intack_addr - PCI interrupt acknowledge (real) address which will return
  *               the active irq from the 8259
  */
-void __init i8259_init(long intack_addr)
+void __init
+i8259_init(long intack_addr)
 {
 	unsigned long flags;
 
@@ -209,9 +197,6 @@ void __init i8259_init(long intack_addr)
 	request_resource(&ioport_resource, &pic2_iores);
 	request_resource(&ioport_resource, &pic_edgectrl_iores);
 
-	/* XXX remove me after board maintainers fix their i8259_init calls */
-	if (intack_addr == 0)
-		panic("You must supply a PCI interrupt acknowledge address to i8259_init()\n");
-
-	pci_intack = ioremap(intack_addr, 1);
+	if (intack_addr != 0)
+		pci_intack = ioremap(intack_addr, 1);
 }
diff --git a/arch/ppc/kernel/open_pic.c b/arch/ppc/kernel/open_pic.c
index e06a5372a08abf8883f6253ea9a32159048271d1..4e436e3a1d42de93077ec1349d325ce109c9e167 100644
--- a/arch/ppc/kernel/open_pic.c
+++ b/arch/ppc/kernel/open_pic.c
@@ -799,26 +799,20 @@ static void openpic_ipi_action(int cpl, void *dev_id, struct pt_regs *regs)
 
 #endif /* CONFIG_SMP */
 
-/* This one may be merged with PReP and CHRP */
 int
 openpic_get_irq(struct pt_regs *regs)
 {
-/*
- * Clean up needed. -VAL
- */
 	int irq = openpic_irq();
 
-	/* Management of the cascade should be moved out of here */
-
-	/* Yep - because openpic !=> i8259, for one thing. -VAL */
-	if (open_pic_irq_offset && irq == open_pic_irq_offset)
-	{
-#ifndef CONFIG_GEMINI
-		irq = i8259_irq(regs); /* get IRQ from cascade */
-#endif
+	/*
+	 * This needs to be cleaned up.  We don't necessarily have
+	 * an i8259 cascaded or even a cascade.
+	 */
+	if (open_pic_irq_offset && irq == open_pic_irq_offset) {
+		/* Get the IRQ from the cascade. */
+		irq = i8259_irq(regs);
 		openpic_eoi();
-	}
-	if (irq == OPENPIC_VEC_SPURIOUS + open_pic_irq_offset)
+	} else if (irq == OPENPIC_VEC_SPURIOUS + open_pic_irq_offset)
 		irq = -1;
 	return irq;
 }
diff --git a/arch/ppc/platforms/lopec_pci.c b/arch/ppc/platforms/lopec_pci.c
index d5f4903c9414614a8c9f5ac03233d57db8f32f2e..0d8297c8346daddc6b70410e1c17d18f4f61d8ce 100644
--- a/arch/ppc/platforms/lopec_pci.c
+++ b/arch/ppc/platforms/lopec_pci.c
@@ -6,7 +6,7 @@
  * Author: Dan Cox
  *         danc@mvista.com (or, alternately, source@mvista.com)
  *
- * Copyright 2001 MontaVista Software Inc.
+ * Copyright 2001-2002 MontaVista Software Inc.
  *
  * 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
@@ -14,18 +14,11 @@
  * option) any later version.
  */
 
-#include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/pci.h>
-#include <linux/slab.h>
 
 #include <asm/machdep.h>
-#include <asm/byteorder.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/uaccess.h>
 #include <asm/pci-bridge.h>
-#include <asm/open_pic.h>
 #include <asm/mpc10x.h>
 
 static inline int __init
diff --git a/arch/ppc/platforms/lopec_setup.c b/arch/ppc/platforms/lopec_setup.c
index 1e22054b602ea62c7171644b985346804f67a489..22ebf82442909680c879b641f12ddfc5e48611ee 100644
--- a/arch/ppc/platforms/lopec_setup.c
+++ b/arch/ppc/platforms/lopec_setup.c
@@ -15,34 +15,23 @@
  */
 
 #include <linux/config.h>
-#include <linux/kernel.h>
-#include <linux/init.h>
-#include <linux/errno.h>
-#include <linux/pci.h>
-#include <linux/time.h>
 #include <linux/types.h>
-#include <linux/major.h>
-#include <linux/kdev_t.h>
+#include <linux/delay.h>
+#include <linux/pci_ids.h>
+#include <linux/ioport.h>
+#include <linux/init.h>
 #include <linux/ide.h>
-#include <linux/irq.h>
 #include <linux/seq_file.h>
+#include <linux/blk.h>
 #include <linux/console.h>
 
-#include <asm/system.h>
-#include <asm/pgtable.h>
-#include <asm/machdep.h>
-#include <asm/page.h>
-#include <asm/dma.h>
 #include <asm/io.h>
-#include <asm/time.h>
-#include <asm/delay.h>
-#include <asm/irq.h>
 #include <asm/open_pic.h>
 #include <asm/i8259.h>
-#include <asm/pci-bridge.h>
 #include <asm/todc.h>
 #include <asm/bootinfo.h>
 #include <asm/mpc10x.h>
+#include <asm/hw_irq.h>
 
 extern void lopec_find_bridges(void);
 
@@ -230,7 +219,7 @@ lopec_init_IRQ(void)
 	i8259_init(0xfef00000);
 }
 
-void __init
+static int __init
 lopec_request_io(void)
 {
 	outb(0x00, 0x4d0);
@@ -242,9 +231,11 @@ lopec_request_io(void)
 	request_region(0x80, 0x10, "dma page reg");
 	request_region(0xa0, 0x20, "pic2");
 	request_region(0xc0, 0x20, "dma2");
+	
+	return 0;
 }
 
-arch_initcall(lopec_request_io);
+device_initcall(lopec_request_io);
 
 static void __init
 lopec_map_io(void)
diff --git a/arch/ppc/platforms/mcpn765_setup.c b/arch/ppc/platforms/mcpn765_setup.c
index 654ceed296517543ea21da15eb5a41ecb349783d..f8d2d142b0d529f5089f4d30841e954696a1c075 100644
--- a/arch/ppc/platforms/mcpn765_setup.c
+++ b/arch/ppc/platforms/mcpn765_setup.c
@@ -6,7 +6,7 @@
  * Author: Mark A. Greer
  *         mgreer@mvista.com
  *
- * Copyright 2001 MontaVista Software Inc.
+ * Copyright 2001-2002 MontaVista Software Inc.
  *
  * 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
@@ -31,7 +31,6 @@
 #include <linux/delay.h>
 #include <linux/irq.h>
 #include <linux/ide.h>
-#include <linux/irq.h>
 #include <linux/seq_file.h>
 
 #include <asm/system.h>
@@ -125,7 +124,7 @@ mcpn765_setup_arch(void)
 	OpenPIC_NumInitSenses = sizeof(mcpn765_openpic_initsenses);
 
 	printk("Motorola MCG MCPN765 cPCI Non-System Board\n");
-	printk("MCPN765 port (C) 2001 MontaVista Software, Inc. (source@mvista.com)\n");
+	printk("MCPN765 port (MontaVista Software, Inc. (source@mvista.com))\n");
 
 	if ( ppc_md.progress )
 		ppc_md.progress("mcpn765_setup_arch: exit", 0);
diff --git a/arch/ppc/platforms/pplus_setup.c b/arch/ppc/platforms/pplus_setup.c
index 34dc2564d6641b98cf349ac901cf26847766a569..25a521761215b7fc3e38fabab3de60caaf31a448 100644
--- a/arch/ppc/platforms/pplus_setup.c
+++ b/arch/ppc/platforms/pplus_setup.c
@@ -72,7 +72,6 @@
 #include <asm/todc.h>
 #include <asm/bootinfo.h>
 
-#undef CONFIG_SERIAL_TEXT_DEBUG
 #undef DUMP_DBATS
 
 TODC_ALLOC();
@@ -500,9 +499,7 @@ platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
 
 #ifdef CONFIG_SERIAL_TEXT_DEBUG
 	ppc_md.progress = pplus_progress;
-#else /* !CONFIG_SERIAL_TEXT_DEBUG */
-	ppc_md.progress = NULL;
-#endif /* CONFIG_SERIAL_TEXT_DEBUG */
+#endif
 
 #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_IDE_MODULE)
 	ppc_ide_md.default_irq = pplus_ide_default_irq;
diff --git a/arch/ppc/platforms/prep_setup.c b/arch/ppc/platforms/prep_setup.c
index b5cb614c69d5f5aeb69400abfba06011df37b85c..f618f1f837895a787acef6ec93df173b646b1924 100644
--- a/arch/ppc/platforms/prep_setup.c
+++ b/arch/ppc/platforms/prep_setup.c
@@ -117,9 +117,6 @@ prep_show_cpuinfo(struct seq_file *m)
 {
 	extern char *Motherboard_map_name;
 	int cachew;
-#ifdef CONFIG_PREP_RESIDUAL
-	int i;
-#endif
 
 	seq_printf(m, "machine\t\t: PReP %s\n", Motherboard_map_name);
 
@@ -180,6 +177,8 @@ prep_show_cpuinfo(struct seq_file *m)
 no_l2:
 #ifdef CONFIG_PREP_RESIDUAL
 	if (res->ResidualLength != 0) {
+		int i;
+
 		/* print info about SIMMs */
 		seq_printf(m, "simms\t\t: ");
 		for (i = 0; (res->ActualNumMemories) && (i < MAX_MEMS); i++) {
@@ -812,8 +811,8 @@ prep_map_io(void)
 	io_block_mapping(0xf0000000, PREP_ISA_MEM_BASE, 0x08000000, _PAGE_IO);
 }
 
-static void __init
-prep_init2(void)
+static int __init
+prep_request_io(void)
 {
 #ifdef CONFIG_NVRAM
 	request_region(PREP_NVRAM_AS0, 0x8, "nvram");
@@ -822,8 +821,12 @@ prep_init2(void)
 	request_region(0x40,0x20,"timer");
 	request_region(0x80,0x10,"dma page reg");
 	request_region(0xc0,0x20,"dma2");
+
+	return 0;
 }
 
+device_initcall(prep_request_io);
+
 void __init
 prep_init(unsigned long r3, unsigned long r4, unsigned long r5,
 		unsigned long r6, unsigned long r7)
@@ -863,7 +866,6 @@ prep_init(unsigned long r3, unsigned long r4, unsigned long r5,
 	ppc_md.init_IRQ       = prep_init_IRQ;
 	/* this gets changed later on if we have an OpenPIC -- Cort */
 	ppc_md.get_irq        = i8259_irq;
-	ppc_md.init           = prep_init2;
 
 	ppc_md.restart        = prep_restart;
 	ppc_md.power_off      = prep_power_off;
diff --git a/arch/ppc/platforms/residual.c b/arch/ppc/platforms/residual.c
index cae870a305cafd4142e512ab088d2799f811334b..4907177d02e3f5c5f04509c72e34fb6e744c981c 100644
--- a/arch/ppc/platforms/residual.c
+++ b/arch/ppc/platforms/residual.c
@@ -876,3 +876,38 @@ PnP_TAG_PACKET __init *PnP_find_large_vendor_packet(unsigned char *p,
 	};
 	return 0; /* not found */
 }
+
+#ifdef CONFIG_PROC_PREPRESIDUAL
+static int proc_prep_residual_read(char * buf, char ** start, off_t off,
+		int count, int *eof, void *data)
+{
+	int n;
+
+	n = res->ResidualLength - off;
+	if (n < 0) {
+		*eof = 1;
+		n = 0;
+	}
+	else {
+		if (n > count)
+			n = count;
+		else
+			*eof = 1;
+
+		memcpy(buf, (char *)res + off, n);
+		*start = buf;
+	}
+
+	return n;
+}
+
+void __init
+proc_prep_residual_init(void)
+{
+	if (res->ResidualLength)
+		create_proc_read_entry("residual", S_IRUGO, NULL,
+					proc_prep_residual_read, NULL);
+}
+
+__initcall(proc_prep_residual_init);
+#endif
diff --git a/arch/ppc/platforms/sandpoint_setup.c b/arch/ppc/platforms/sandpoint_setup.c
index 6b9c00a25a30c20b40c752e81f5a812c8fd21028..d532451d6ac2a98b8eb004f8e19cf5756af7ec45 100644
--- a/arch/ppc/platforms/sandpoint_setup.c
+++ b/arch/ppc/platforms/sandpoint_setup.c
@@ -6,7 +6,7 @@
  * Author: Mark A. Greer
  *         mgreer@mvista.com
  *
- * Copyright 2000, 2001 MontaVista Software Inc.
+ * Copyright 2000-2002 MontaVista Software Inc.
  *
  * 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
@@ -71,7 +71,6 @@
 #include <linux/delay.h>
 #include <linux/irq.h>
 #include <linux/ide.h>
-#include <linux/irq.h>
 #include <linux/seq_file.h>
 
 #include <asm/system.h>
@@ -180,7 +179,7 @@ sandpoint_setup_arch(void)
 #endif
 
 	printk("Motorola SPS Sandpoint Test Platform\n");
-	printk("Sandpoint port (C) 2000, 2001 MontaVista Software, Inc. (source@mvista.com)\n");
+	printk("Sandpoint port (MontaVista Software, Inc. (source@mvista.com))\n");
 
 	/* The Sandpoint rom doesn't enable any caches.  Do that now.
 	 * The 7450 portion will also set up the L3s once I get enough
diff --git a/include/asm-ppc/i8259.h b/include/asm-ppc/i8259.h
index f506ac6e721bb5be46be7f379242c157a5588d49..e85749f87e31f4593ee1db862a60ab7cb383f14c 100644
--- a/include/asm-ppc/i8259.h
+++ b/include/asm-ppc/i8259.h
@@ -9,8 +9,7 @@
 
 extern struct hw_interrupt_type i8259_pic;
 
-void i8259_init(long);
-int i8259_irq(struct pt_regs *regs);
-int i8259_poll(void);
+extern void i8259_init(long intack_addr);
+extern int i8259_irq(struct pt_regs *regs);
 
 #endif /* _PPC_KERNEL_i8259_H */