r2052 - / trunk/patches

jim at linuxfromscratch.org jim at linuxfromscratch.org
Thu Jul 20 12:45:38 PDT 2006


Author: jim
Date: 2006-07-20 13:45:36 -0600 (Thu, 20 Jul 2006)
New Revision: 2052

Added:
   trunk/patches/linux-2.6.17.6-alpha_io_fix-1.patch
   trunk/patches/linux-2.6.17.6-mips-1.patch
   trunk/patches/linux-2.6.17.6-mips_fixes-1.patch
Removed:
   trunk/patches/linux-2.6.17.4-alpha_io_fix-1.patch
   trunk/patches/linux-2.6.17.4-mips-1.patch
   trunk/patches/linux-2.6.17.4-mips_fixes-2.patch
Modified:
   /
Log:
 r4711 at server (orig r2173):  jim | 2006-07-20 10:47:52 -0700
 Updates to Patches for 2.6.17.6



Property changes on: 
___________________________________________________________________
Name: svk:merge
   - b6734a72-470d-0410-b049-f317dca95413:/:2172
   + b6734a72-470d-0410-b049-f317dca95413:/:2173

Deleted: trunk/patches/linux-2.6.17.4-alpha_io_fix-1.patch
===================================================================
--- trunk/patches/linux-2.6.17.4-alpha_io_fix-1.patch	2006-07-20 19:45:24 UTC (rev 2051)
+++ trunk/patches/linux-2.6.17.4-alpha_io_fix-1.patch	2006-07-20 19:45:36 UTC (rev 2052)
@@ -1,31 +0,0 @@
-Submitted By: Joe Ciccone <jciccone at linuxfromscratch.org>
-Date: 2006-06-25
-Initial Package Version: 2.6.17.1
-Origin: Joe Ciccone
-Upstream Status: Unknown
-Description: Fixes a build issue with alpha on some processors. The
-             instructions being modified are specific to ev56/ev6.
-
---- linux-2.6.17.1.orig/include/asm-alpha/compiler.h	2006-06-20 05:31:55.000000000 -0400
-+++ linux-2.6.17.1/include/asm-alpha/compiler.h	2006-06-25 16:13:22.000000000 -0400
-@@ -78,16 +78,16 @@
- #else
- #define __kernel_ldbu(mem)				\
-   ({ unsigned char __kir;				\
--     __asm__("ldbu %0,%1" : "=r"(__kir) : "m"(mem));	\
-+     __asm__(".arch ev6; ldbu %0,%1" : "=r"(__kir) : "m"(mem));	\
-      __kir; })
- #define __kernel_ldwu(mem)				\
-   ({ unsigned short __kir;				\
--     __asm__("ldwu %0,%1" : "=r"(__kir) : "m"(mem));	\
-+     __asm__(".arch ev6; ldwu %0,%1" : "=r"(__kir) : "m"(mem));	\
-      __kir; })
- #define __kernel_stb(val,mem) \
--  __asm__("stb %1,%0" : "=m"(mem) : "r"(val))
-+  __asm__(".arch ev6; stb %1,%0" : "=m"(mem) : "r"(val))
- #define __kernel_stw(val,mem) \
--  __asm__("stw %1,%0" : "=m"(mem) : "r"(val))
-+  __asm__(".arch ev6; stw %1,%0" : "=m"(mem) : "r"(val))
- #endif
- 
- /* Some idiots over in <linux/compiler.h> thought inline should imply

Deleted: trunk/patches/linux-2.6.17.4-mips-1.patch
===================================================================
--- trunk/patches/linux-2.6.17.4-mips-1.patch	2006-07-20 19:45:24 UTC (rev 2051)
+++ trunk/patches/linux-2.6.17.4-mips-1.patch	2006-07-20 19:45:36 UTC (rev 2052)
@@ -1,3694 +0,0 @@
-Submitted By: Jim Gifford (patches at jg555 dot com)
-Date: 2006-07-08
-Initial Package Version: 2.6.17.4
-Origin: Linux-MIPS
-Upstream Status: http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/
-Description: Merges Linux-MIPS and Kernel.org Tree's
-
-diff -Naur linux-2.6.17.4-kernel/arch/mips/cobalt/console.c linux-2.6.17.4-mips/arch/mips/cobalt/console.c
---- linux-2.6.17.4-kernel/arch/mips/cobalt/console.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/cobalt/console.c	2006-07-06 16:58:16.000000000 -0700
-@@ -41,3 +41,8 @@
- 
- 	printk("Cobalt: early console registered\n");
- }
-+
-+void __init disable_early_printk(void)
-+{
-+	unregister_console(&cons_info);
-+}
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/atlas_defconfig linux-2.6.17.4-mips/arch/mips/configs/atlas_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/atlas_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/atlas_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_MIPS_BONITO64=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/bigsur_defconfig linux-2.6.17.4-mips/arch/mips/configs/bigsur_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/bigsur_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/bigsur_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -83,6 +83,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_COHERENT=y
- CONFIG_CPU_BIG_ENDIAN=y
- # CONFIG_CPU_LITTLE_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/capcella_defconfig linux-2.6.17.4-mips/arch/mips/configs/capcella_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/capcella_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/capcella_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -75,6 +75,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/cobalt_defconfig linux-2.6.17.4-mips/arch/mips/configs/cobalt_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/cobalt_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/cobalt_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -68,6 +68,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_I8259=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1000_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1000_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/db1000_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/db1000_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1100_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1100_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/db1100_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/db1100_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1200_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1200_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/db1200_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/db1200_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_COHERENT=y
- CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1500_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1500_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/db1500_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/db1500_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1550_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1550_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/db1550_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/db1550_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ddb5476_defconfig linux-2.6.17.4-mips/arch/mips/configs/ddb5476_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ddb5476_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ddb5476_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_I8259=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ddb5477_defconfig linux-2.6.17.4-mips/arch/mips/configs/ddb5477_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ddb5477_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ddb5477_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -68,6 +68,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_I8259=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/decstation_defconfig linux-2.6.17.4-mips/arch/mips/configs/decstation_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/decstation_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/decstation_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -68,6 +68,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/e55_defconfig linux-2.6.17.4-mips/arch/mips/configs/e55_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/e55_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/e55_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -73,6 +73,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ev64120_defconfig linux-2.6.17.4-mips/arch/mips/configs/ev64120_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ev64120_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ev64120_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -68,6 +68,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_CPU_BIG_ENDIAN=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ev96100_defconfig linux-2.6.17.4-mips/arch/mips/configs/ev96100_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ev96100_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ev96100_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_CPU_BIG_ENDIAN=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ip22_defconfig linux-2.6.17.4-mips/arch/mips/configs/ip22_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ip22_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ip22_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_ARC=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ip27_defconfig linux-2.6.17.4-mips/arch/mips/configs/ip27_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ip27_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ip27_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -73,6 +73,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_ARC=y
- CONFIG_DMA_IP27=y
- CONFIG_CPU_BIG_ENDIAN=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ip32_defconfig linux-2.6.17.4-mips/arch/mips/configs/ip32_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ip32_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ip32_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_ARC=y
- CONFIG_DMA_IP32=y
- CONFIG_DMA_NONCOHERENT=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/it8172_defconfig linux-2.6.17.4-mips/arch/mips/configs/it8172_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/it8172_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/it8172_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -68,6 +68,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ivr_defconfig linux-2.6.17.4-mips/arch/mips/configs/ivr_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ivr_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ivr_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/jaguar-atx_defconfig linux-2.6.17.4-mips/arch/mips/configs/jaguar-atx_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/jaguar-atx_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/jaguar-atx_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -68,6 +68,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_LIMITED_DMA=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/jmr3927_defconfig linux-2.6.17.4-mips/arch/mips/configs/jmr3927_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/jmr3927_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/jmr3927_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_CPU_BIG_ENDIAN=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/lasat200_defconfig linux-2.6.17.4-mips/arch/mips/configs/lasat200_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/lasat200_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/lasat200_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -71,6 +71,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_MIPS_NILE4=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/malta_defconfig linux-2.6.17.4-mips/arch/mips/configs/malta_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/malta_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/malta_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_ARCH_MAY_HAVE_PC_FDC=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/mipssim_defconfig linux-2.6.17.4-mips/arch/mips/configs/mipssim_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/mipssim_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/mipssim_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/mpc30x_defconfig linux-2.6.17.4-mips/arch/mips/configs/mpc30x_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/mpc30x_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/mpc30x_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -75,6 +75,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ocelot_3_defconfig linux-2.6.17.4-mips/arch/mips/configs/ocelot_3_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ocelot_3_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ocelot_3_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_CPU_BIG_ENDIAN=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ocelot_c_defconfig linux-2.6.17.4-mips/arch/mips/configs/ocelot_c_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ocelot_c_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ocelot_c_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_CPU_BIG_ENDIAN=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ocelot_defconfig linux-2.6.17.4-mips/arch/mips/configs/ocelot_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ocelot_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ocelot_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_CPU_BIG_ENDIAN=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ocelot_g_defconfig linux-2.6.17.4-mips/arch/mips/configs/ocelot_g_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/ocelot_g_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/ocelot_g_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_CPU_BIG_ENDIAN=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pb1100_defconfig linux-2.6.17.4-mips/arch/mips/configs/pb1100_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/pb1100_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/pb1100_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pb1500_defconfig linux-2.6.17.4-mips/arch/mips/configs/pb1500_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/pb1500_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/pb1500_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pb1550_defconfig linux-2.6.17.4-mips/arch/mips/configs/pb1550_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/pb1550_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/pb1550_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pnx8550-jbs_defconfig linux-2.6.17.4-mips/arch/mips/configs/pnx8550-jbs_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/pnx8550-jbs_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/pnx8550-jbs_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pnx8550-v2pci_defconfig linux-2.6.17.4-mips/arch/mips/configs/pnx8550-v2pci_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/pnx8550-v2pci_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/pnx8550-v2pci_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/qemu_defconfig linux-2.6.17.4-mips/arch/mips/configs/qemu_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/qemu_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/qemu_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_COHERENT=y
- CONFIG_GENERIC_ISA_DMA=y
- CONFIG_I8259=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/rbhma4500_defconfig linux-2.6.17.4-mips/arch/mips/configs/rbhma4500_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/rbhma4500_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/rbhma4500_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -74,6 +74,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- CONFIG_GENERIC_ISA_DMA=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/rm200_defconfig linux-2.6.17.4-mips/arch/mips/configs/rm200_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/rm200_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/rm200_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_ARC=y
- CONFIG_ARCH_MAY_HAVE_PC_FDC=y
- CONFIG_DMA_NONCOHERENT=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/sb1250-swarm_defconfig linux-2.6.17.4-mips/arch/mips/configs/sb1250-swarm_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/sb1250-swarm_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/sb1250-swarm_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -84,6 +84,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_COHERENT=y
- CONFIG_CPU_BIG_ENDIAN=y
- # CONFIG_CPU_LITTLE_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/sead_defconfig linux-2.6.17.4-mips/arch/mips/configs/sead_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/sead_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/sead_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/tb0226_defconfig linux-2.6.17.4-mips/arch/mips/configs/tb0226_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/tb0226_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/tb0226_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -77,6 +77,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/tb0229_defconfig linux-2.6.17.4-mips/arch/mips/configs/tb0229_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/tb0229_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/tb0229_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -77,6 +77,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/workpad_defconfig linux-2.6.17.4-mips/arch/mips/configs/workpad_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/workpad_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/workpad_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -73,6 +73,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
- # CONFIG_CPU_BIG_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/yosemite_defconfig linux-2.6.17.4-mips/arch/mips/configs/yosemite_defconfig
---- linux-2.6.17.4-kernel/arch/mips/configs/yosemite_defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/configs/yosemite_defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -68,6 +68,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_DMA_COHERENT=y
- CONFIG_CPU_BIG_ENDIAN=y
- # CONFIG_CPU_LITTLE_ENDIAN is not set
-diff -Naur linux-2.6.17.4-kernel/arch/mips/defconfig linux-2.6.17.4-mips/arch/mips/defconfig
---- linux-2.6.17.4-kernel/arch/mips/defconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/defconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -67,6 +67,7 @@
- CONFIG_GENERIC_FIND_NEXT_BIT=y
- CONFIG_GENERIC_HWEIGHT=y
- CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- CONFIG_ARC=y
- CONFIG_DMA_NONCOHERENT=y
- CONFIG_DMA_NEED_PCI_MAP_STATE=y
-diff -Naur linux-2.6.17.4-kernel/arch/mips/Kconfig linux-2.6.17.4-mips/arch/mips/Kconfig
---- linux-2.6.17.4-kernel/arch/mips/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -278,6 +278,7 @@
- 	select SYS_SUPPORTS_64BIT_KERNEL
- 	select SYS_SUPPORTS_BIG_ENDIAN
- 	select SYS_SUPPORTS_LITTLE_ENDIAN
-+	select SYS_SUPPORTS_MULTITHREADING if EXPERIMENTAL
- 	help
- 	  This enables support for the MIPS Technologies Atlas evaluation
- 	  board.
-@@ -294,6 +295,7 @@
- 	select I8259
- 	select MIPS_BOARDS_GEN
- 	select MIPS_BONITO64
-+	select MIPS_CPU_SCACHE
- 	select MIPS_GT64120
- 	select MIPS_MSC
- 	select SWAP_IO_SPACE
-@@ -306,6 +308,7 @@
- 	select SYS_SUPPORTS_64BIT_KERNEL
- 	select SYS_SUPPORTS_BIG_ENDIAN
- 	select SYS_SUPPORTS_LITTLE_ENDIAN
-+	select SYS_SUPPORTS_MULTITHREADING
- 	help
- 	  This enables support for the MIPS Technologies Malta evaluation
- 	  board.
-@@ -438,11 +441,13 @@
- 
- config PNX8550_V2PCI
- 	bool "Philips PNX8550 based Viper2-PCI board"
-+	depends on BROKEN
- 	select PNX8550
- 	select SYS_SUPPORTS_LITTLE_ENDIAN
- 
- config PNX8550_JBS
- 	bool "Philips PNX8550 based JBS board"
-+	depends on BROKEN
- 	select PNX8550
- 	select SYS_SUPPORTS_LITTLE_ENDIAN
- 
-@@ -506,8 +511,6 @@
- config MACH_VR41XX
- 	bool "NEC VR41XX-based machines"
- 	select SYS_HAS_CPU_VR41XX
--	select SYS_SUPPORTS_32BIT_KERNEL
--	select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
- 
- config PMC_YOSEMITE
- 	bool "PMC-Sierra Yosemite eval board"
-@@ -522,6 +525,7 @@
- 	select SYS_SUPPORTS_64BIT_KERNEL
- 	select SYS_SUPPORTS_BIG_ENDIAN
- 	select SYS_SUPPORTS_HIGHMEM
-+	select SYS_SUPPORTS_SMP
- 	help
- 	  Yosemite is an evaluation board for the RM9000x2 processor
- 	  manufactured by PMC-Sierra.
-@@ -555,6 +559,7 @@
- 	select HW_HAS_EISA
- 	select IP22_CPU_SCACHE
- 	select IRQ_CPU
-+	select NO_ISA if ISA
- 	select SWAP_IO_SPACE
- 	select SYS_HAS_CPU_R4X00
- 	select SYS_HAS_CPU_R5000
-@@ -577,6 +582,7 @@
- 	select SYS_HAS_CPU_R10000
- 	select SYS_SUPPORTS_64BIT_KERNEL
- 	select SYS_SUPPORTS_BIG_ENDIAN
-+	select SYS_SUPPORTS_SMP
- 	help
- 	  This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics
- 	  workstations.  To compile a Linux kernel that runs on these, say Y
-@@ -1035,6 +1041,9 @@
- config HAVE_STD_PC_SERIAL_PORT
- 	bool
- 
-+config VR4181
-+	bool
-+
- config ARC_CONSOLE
- 	bool "ARC console support"
- 	depends on SGI_IP22 || SNI_RM200_PCI
-@@ -1155,7 +1164,7 @@
- 	select CPU_SUPPORTS_32BIT_KERNEL
- 	select CPU_SUPPORTS_64BIT_KERNEL
- 	help
--	  The options selects support for the NEC VR4100 series of processors.
-+	  The options selects support for the NEC VR41xx series of processors.
- 	  Only choose this option if you have one of these processors as a
- 	  kernel built with this option will not run on any other type of
- 	  processor or vice versa.
-@@ -1211,7 +1220,7 @@
- 	select CPU_SUPPORTS_32BIT_KERNEL
- 	help
- 	  MIPS Technologies R6000 and R6000A series processors.  Note these
--	  processors are extremly rare and the support for them is incomplete.
-+	  processors are extremely rare and the support for them is incomplete.
- 
- config CPU_NEVADA
- 	bool "RM52xx"
-@@ -1332,7 +1341,7 @@
- endmenu
- 
- #
--# These two indicate any levelof the MIPS32 and MIPS64 architecture
-+# These two indicate any level of the MIPS32 and MIPS64 architecture
- #
- config CPU_MIPS32
- 	bool
-@@ -1343,7 +1352,7 @@
- 	default y if CPU_MIPS64_R1 || CPU_MIPS64_R2
- 
- #
--# These two indicate the revision of the architecture, either 32 bot 64 bit.
-+# These two indicate the revision of the architecture, either Release 1 or Release 2
- #
- config CPU_MIPSR1
- 	bool
-@@ -1436,6 +1445,13 @@
- 	bool
- 	select BOARD_SCACHE
- 
-+#
-+# Support for a MIPS32 / MIPS64 style S-caches
-+#
-+config MIPS_CPU_SCACHE
-+	bool
-+	select BOARD_SCACHE
-+
- config R5000_CPU_SCACHE
- 	bool
- 	select BOARD_SCACHE
-@@ -1455,32 +1471,57 @@
- config CPU_HAS_PREFETCH
- 	bool
- 
--config MIPS_MT
--	bool "Enable MIPS MT"
--
- choice
- 	prompt "MIPS MT options"
--	depends on MIPS_MT
-+
-+config MIPS_MT_DISABLED
-+	bool "Disable multithreading support."
-+	help
-+	  Use this option if your workload can't take advantage of
-+	  MIPS hardware multithreading support.  On systems that don't have
-+	  the option of an MT-enabled processor this option will be the only
-+	  option in this menu.
- 
- config MIPS_MT_SMTC
- 	bool "SMTC: Use all TCs on all VPEs for SMP"
-+	depends on CPU_MIPS32_R2
-+	#depends on CPU_MIPS64_R2		# once there is hardware ...
-+	depends on SYS_SUPPORTS_MULTITHREADING
- 	select CPU_MIPSR2_IRQ_VI
- 	select CPU_MIPSR2_SRS
-+	select MIPS_MT
- 	select SMP
-+	help
-+	  This is a kernel model which is known a SMTC or lately has been
-+	  marketesed into SMVP.
- 
- config MIPS_MT_SMP
- 	bool "Use 1 TC on each available VPE for SMP"
-+	depends on SYS_SUPPORTS_MULTITHREADING
-+	select CPU_MIPSR2_IRQ_VI
-+	select CPU_MIPSR2_SRS
-+	select MIPS_MT
- 	select SMP
-+	help
-+	  This is a kernel model which is also known a VSMP or lately
-+	  has been marketesed into SMVP.
- 
- config MIPS_VPE_LOADER
- 	bool "VPE loader support."
--	depends on MIPS_MT
-+	depends on SYS_SUPPORTS_MULTITHREADING
-+	select MIPS_MT
- 	help
- 	  Includes a loader for loading an elf relocatable object
- 	  onto another VPE and running it.
- 
- endchoice
- 
-+config MIPS_MT
-+	bool
-+
-+config SYS_SUPPORTS_MULTITHREADING
-+	bool
-+
- config MIPS_MT_FPAFF
- 	bool "Dynamic FPU affinity for FP-intensive threads"
- 	depends on MIPS_MT
-@@ -1537,32 +1578,23 @@
- config CPU_HAS_WB
- 	bool
- 
-+#
-+# Vectored interrupt mode is an R2 feature
-+#
- config CPU_MIPSR2_IRQ_VI
--	bool "Vectored interrupt mode"
--	depends on CPU_MIPSR2
--	help
--	   Vectored interrupt mode allowing faster dispatching of interrupts.
--	   The board support code needs to be written to take advantage of this
--	   mode.  Compatibility code is included to allow the kernel to run on
--	   a CPU that does not support vectored interrupts.  It's safe to
--	   say Y here.
-+	bool
- 
-+#
-+# Extended interrupt mode is an R2 feature
-+#
- config CPU_MIPSR2_IRQ_EI
--	bool "External interrupt controller mode"
--	depends on CPU_MIPSR2
--	help
--	   Extended interrupt mode takes advantage of an external interrupt
--	   controller to allow fast dispatching from many possible interrupt
--	   sources. Say N unless you know that external interrupt support is
--	   required.
-+	bool
- 
-+#
-+# Shadow registers are an R2 feature
-+#
- config CPU_MIPSR2_SRS
--	bool "Make shadow set registers available for interrupt handlers"
--	depends on CPU_MIPSR2_IRQ_VI || CPU_MIPSR2_IRQ_EI
--	help
--	   Allow the kernel to use shadow register sets for fast interrupts.
--	   Interrupt handlers must be specially written to use shadow sets.
--	   Say N unless you know that shadow register set upport is needed.
-+	bool
- 
- config CPU_HAS_SYNC
- 	bool
-@@ -1616,8 +1648,8 @@
- 
- config SMP
- 	bool "Multi-Processing support"
--	depends on CPU_RM9000 || ((SIBYTE_BCM1x80 || SIBYTE_BCM1x55 || SIBYTE_SB1250 || QEMU) && !SIBYTE_STANDALONE) || SGI_IP27 || MIPS_MT_SMP || MIPS_MT_SMTC
--	---help---
-+	depends on SYS_SUPPORTS_SMP
-+	help
- 	  This enables support for systems with more than one CPU. If you have
- 	  a system with only one CPU, like most personal computers, say N. If
- 	  you have a system with more than one CPU, say Y.
-@@ -1636,6 +1668,9 @@
- 
- 	  If you don't know what to do here, say N.
- 
-+config SYS_SUPPORTS_SMP
-+	bool
-+
- config NR_CPUS
- 	int "Maximum number of CPUs (2-64)"
- 	range 2 64
-@@ -1710,6 +1745,9 @@
- config ISA
- 	bool
- 
-+config NO_ISA
-+	bool
-+
- config EISA
- 	bool "EISA support"
- 	depends on HW_HAS_EISA
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/cpu-probe.c linux-2.6.17.4-mips/arch/mips/kernel/cpu-probe.c
---- linux-2.6.17.4-kernel/arch/mips/kernel/cpu-probe.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/cpu-probe.c	2006-07-06 16:58:16.000000000 -0700
-@@ -111,7 +111,6 @@
- 	case CPU_R5000:
- 	case CPU_NEVADA:
- 	case CPU_RM7000:
--	case CPU_RM9000:
- 	case CPU_TX49XX:
- 	case CPU_4KC:
- 	case CPU_4KEC:
-@@ -137,6 +136,14 @@
- 		} else
- 			printk(" unavailable.\n");
- 		break;
-+	case CPU_RM9000:
-+		if ((c->processor_id & 0x00ff) >= 0x40) {
-+			cpu_wait = r4k_wait;
-+			printk(" available.\n");
-+		} else {
-+			printk(" unavailable.\n");
-+		}
-+		break;
- 	default:
- 		printk(" unavailable.\n");
- 		break;
-@@ -243,9 +250,15 @@
- 		break;
- 	case PRID_IMP_VR41XX:
- 		switch (c->processor_id & 0xf0) {
-+#ifndef CONFIG_VR4181
- 		case PRID_REV_VR4111:
- 			c->cputype = CPU_VR4111;
- 			break;
-+#else
-+		case PRID_REV_VR4181:
-+			c->cputype = CPU_VR4181;
-+			break;
-+#endif
- 		case PRID_REV_VR4121:
- 			c->cputype = CPU_VR4121;
- 			break;
-@@ -597,8 +610,6 @@
- 		break;
- 	case PRID_IMP_25KF:
- 		c->cputype = CPU_25KF;
--		/* Probe for L2 cache */
--		c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
- 		break;
- 	case PRID_IMP_34K:
- 		c->cputype = CPU_34K;
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/entry.S linux-2.6.17.4-mips/arch/mips/kernel/entry.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/entry.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/entry.S	2006-07-06 16:58:16.000000000 -0700
-@@ -87,7 +87,7 @@
- 	ori	v1, v0, TCSTATUS_IXMT
- 	mtc0	v1, CP0_TCSTATUS
- 	andi	v0, TCSTATUS_IXMT
--	ehb
-+	_ehb
- 	mfc0	t0, CP0_TCCONTEXT
- 	DMT	9				# dmt t1
- 	jal	mips_ihb
-@@ -95,7 +95,7 @@
- 	andi	t3, t0, 0xff00
- 	or	t2, t2, t3
- 	mtc0	t2, CP0_STATUS
--	ehb
-+	_ehb
- 	andi	t1, t1, VPECONTROL_TE
- 	beqz	t1, 1f
- 	EMT
-@@ -105,7 +105,7 @@
- 	xori	v1, v1, TCSTATUS_IXMT
- 	or	v1, v0, v1
- 	mtc0	v1, CP0_TCSTATUS
--	ehb
-+	_ehb
- 	xor	t0, t0, t3
- 	mtc0	t0, CP0_TCCONTEXT
- #endif /* CONFIG_MIPS_MT_SMTC */
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/gdb-low.S linux-2.6.17.4-mips/arch/mips/kernel/gdb-low.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/gdb-low.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/gdb-low.S	2006-07-06 16:58:16.000000000 -0700
-@@ -291,7 +291,7 @@
- 		ori	t1, t2, TCSTATUS_IXMT
- 		mtc0	t1, CP0_TCSTATUS
- 		andi	t2, t2, TCSTATUS_IXMT
--		ehb
-+		_ehb
- 		DMT	9				# dmt	t1
- 		jal	mips_ihb
- 		nop
-@@ -310,7 +310,7 @@
- 		xori	t1, t1, TCSTATUS_IXMT
- 		or	t1, t1, t2
- 		mtc0	t1, CP0_TCSTATUS
--		ehb
-+		_ehb
- #endif /* CONFIG_MIPS_MT_SMTC */
- 		LONG_L	v0, GDB_FR_STATUS(sp)
- 		LONG_L	v1, GDB_FR_EPC(sp)
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/genex.S linux-2.6.17.4-mips/arch/mips/kernel/genex.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/genex.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/genex.S	2006-07-06 16:58:16.000000000 -0700
-@@ -214,7 +214,7 @@
- 	mtc0	t0, CP0_TCCONTEXT
- 	xor	t1, t1, t0
- 	mtc0	t1, CP0_STATUS
--	ehb
-+	_ehb
- #endif /* CONFIG_MIPS_MT_SMTC */
- 	CLI
- 	move	a0, sp
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/head.S linux-2.6.17.4-mips/arch/mips/kernel/head.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/head.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/head.S	2006-07-06 16:58:16.000000000 -0700
-@@ -96,7 +96,7 @@
- 	/* Clear TKSU, leave IXMT */
- 	xori	t0, 0x00001800
- 	mtc0	t0, CP0_TCSTATUS
--	ehb
-+	_ehb
- 	/* We need to leave the global IE bit set, but clear EXL...*/
- 	mfc0	t0, CP0_STATUS
- 	or	t0, ST0_CU0 | ST0_EXL | ST0_ERL | \set | \clr
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/ptrace.c linux-2.6.17.4-mips/arch/mips/kernel/ptrace.c
---- linux-2.6.17.4-kernel/arch/mips/kernel/ptrace.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/ptrace.c	2006-07-06 16:58:16.000000000 -0700
-@@ -21,12 +21,12 @@
- #include <linux/mm.h>
- #include <linux/errno.h>
- #include <linux/ptrace.h>
--#include <linux/audit.h>
- #include <linux/smp.h>
- #include <linux/smp_lock.h>
- #include <linux/user.h>
- #include <linux/security.h>
--#include <linux/signal.h>
-+#include <linux/audit.h>
-+#include <linux/seccomp.h>
- 
- #include <asm/byteorder.h>
- #include <asm/cpu.h>
-@@ -482,12 +482,16 @@
-  */
- asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
- {
-+	/* do the secure computing check first */
-+	secure_computing(regs->orig_eax);
-+
- 	if (unlikely(current->audit_context) && entryexit)
- 		audit_syscall_exit(AUDITSC_RESULT(regs->regs[2]),
- 		                   regs->regs[2]);
- 
- 	if (!(current->ptrace & PT_PTRACED))
- 		goto out;
-+
- 	if (!test_thread_flag(TIF_SYSCALL_TRACE))
- 		goto out;
- 
-@@ -505,9 +509,14 @@
- 		send_sig(current->exit_code, current, 1);
- 		current->exit_code = 0;
- 	}
-- out:
-+
-+out:
-+	/* There is no ->orig_eax and that's quite intensional for now making
-+	   this work will require some work in various other place before it's
-+	   more than a placebo.  */
-+
- 	if (unlikely(current->audit_context) && !entryexit)
--		audit_syscall_entry(audit_arch(), regs->regs[2],
--				    regs->regs[4], regs->regs[5],
--				    regs->regs[6], regs->regs[7]);
-+		audit_syscall_entry(audit_arch(), regs->orig_eax,
-+		                    regs->regs[4], regs->regs[5],
-+		                    regs->regs[6], regs->regs[7]);
- }
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/r4k_switch.S linux-2.6.17.4-mips/arch/mips/kernel/r4k_switch.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/r4k_switch.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/r4k_switch.S	2006-07-06 16:58:16.000000000 -0700
-@@ -75,8 +75,8 @@
- 	and	t0, t0, t1
- 	LONG_S	t0, ST_OFF(t3)
- 
--	fpu_save_double a0 t1 t0 t2		# c0_status passed in t1
--						# clobbers t0 and t2
-+	fpu_save_double a0 t0 t1		# c0_status passed in t0
-+						# clobbers t1
- 1:
- 
- 	/*
-@@ -94,7 +94,7 @@
- 	ori	t1, t2, TCSTATUS_IXMT
- 	mtc0	t1, CP0_TCSTATUS
- 	andi	t2, t2, TCSTATUS_IXMT
--	ehb
-+	_ehb
- 	DMT	8				# dmt	t0
- 	move	t1,ra
- 	jal	mips_ihb
-@@ -109,7 +109,7 @@
- 	or	a2, t1
- 	mtc0	a2, CP0_STATUS
- #ifdef CONFIG_MIPS_MT_SMTC
--	ehb
-+	_ehb
- 	andi	t0, t0, VPECONTROL_TE
- 	beqz	t0, 1f
- 	emt
-@@ -118,7 +118,7 @@
- 	xori	t1, t1, TCSTATUS_IXMT
- 	or	t1, t1, t2
- 	mtc0	t1, CP0_TCSTATUS
--	ehb
-+	_ehb
- #endif /* CONFIG_MIPS_MT_SMTC */
- 	move	v0, a0
- 	jr	ra
-@@ -129,9 +129,9 @@
-  */
- LEAF(_save_fp)
- #ifdef CONFIG_64BIT
--	mfc0	t1, CP0_STATUS
-+	mfc0	t0, CP0_STATUS
- #endif
--	fpu_save_double a0 t1 t0 t2		# clobbers t1
-+	fpu_save_double a0 t0 t1		# clobbers t1
- 	jr	ra
- 	END(_save_fp)
- 
-@@ -139,7 +139,10 @@
-  * Restore a thread's fp context.
-  */
- LEAF(_restore_fp)
--	fpu_restore_double a0, t1		# clobbers t1
-+#ifdef CONFIG_64BIT
-+	mfc0	t0, CP0_STATUS
-+#endif
-+	fpu_restore_double a0 t0 t1		# clobbers t1
- 	jr	ra
- 	END(_restore_fp)
- 
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/scall32-o32.S linux-2.6.17.4-mips/arch/mips/kernel/scall32-o32.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/scall32-o32.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/scall32-o32.S	2006-07-06 16:58:16.000000000 -0700
-@@ -497,7 +497,7 @@
- 	sys	sys_sched_get_priority_min 1
- 	sys	sys_sched_rr_get_interval 2	/* 4165 */
- 	sys	sys_nanosleep,		2
--	sys	sys_mremap,		4
-+	sys	sys_mremap,		5
- 	sys	sys_accept		3
- 	sys	sys_bind		3
- 	sys	sys_connect		3	/* 4170 */
-@@ -647,6 +647,7 @@
- 	sys	sys_unshare		1
- 	sys	sys_splice		4
- 	sys	sys_sync_file_range	7	/* 4305 */
-+	sys	sys_tee			4
- 	.endm
- 
- 	/* We pre-compute the number of _instruction_ bytes needed to
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/scall64-64.S linux-2.6.17.4-mips/arch/mips/kernel/scall64-64.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/scall64-64.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/scall64-64.S	2006-07-06 16:58:16.000000000 -0700
-@@ -462,3 +462,4 @@
- 	PTR	sys_unshare
- 	PTR	sys_splice
- 	PTR	sys_sync_file_range
-+	PTR	sys_tee				/* 5265 */
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/scall64-n32.S linux-2.6.17.4-mips/arch/mips/kernel/scall64-n32.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/scall64-n32.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/scall64-n32.S	2006-07-06 16:58:16.000000000 -0700
-@@ -388,3 +388,4 @@
- 	PTR	sys_unshare
- 	PTR	sys_splice
- 	PTR	sys_sync_file_range
-+	PTR	sys_tee
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/scall64-o32.S linux-2.6.17.4-mips/arch/mips/kernel/scall64-o32.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/scall64-o32.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/scall64-o32.S	2006-07-06 16:58:16.000000000 -0700
-@@ -510,4 +510,5 @@
- 	PTR	sys_unshare
- 	PTR	sys_splice
- 	PTR	sys32_sync_file_range		/* 4305 */
-+	PTR	sys_tee
- 	.size	sys_call_table,.-sys_call_table
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/smp.c linux-2.6.17.4-mips/arch/mips/kernel/smp.c
---- linux-2.6.17.4-kernel/arch/mips/kernel/smp.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/smp.c	2006-07-06 16:58:16.000000000 -0700
-@@ -336,7 +336,7 @@
- 	preempt_disable();
- 
- 	if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) {
--		smp_call_function(flush_tlb_mm_ipi, (void *)mm, 1, 1);
-+		__on_other_cores(flush_tlb_mm_ipi, (void *)mm);
- 	} else {
- 		int i;
- 		for (i = 0; i < num_online_cpus(); i++)
-@@ -372,7 +372,7 @@
- 		fd.vma = vma;
- 		fd.addr1 = start;
- 		fd.addr2 = end;
--		smp_call_function(flush_tlb_range_ipi, (void *)&fd, 1, 1);
-+		__on_other_cores(flush_tlb_range_ipi, (void *)&fd);
- 	} else {
- 		int i;
- 		for (i = 0; i < num_online_cpus(); i++)
-@@ -414,7 +414,7 @@
- 
- 		fd.vma = vma;
- 		fd.addr1 = page;
--		smp_call_function(flush_tlb_page_ipi, (void *)&fd, 1, 1);
-+		__on_other_cores(flush_tlb_page_ipi, (void *)&fd);
- 	} else {
- 		int i;
- 		for (i = 0; i < num_online_cpus(); i++)
-@@ -434,8 +434,7 @@
- 
- void flush_tlb_one(unsigned long vaddr)
- {
--	smp_call_function(flush_tlb_one_ipi, (void *) vaddr, 1, 1);
--	local_flush_tlb_one(vaddr);
-+	__on_each_core(flush_tlb_one_ipi, (void *) vaddr);
- }
- 
- static DEFINE_PER_CPU(struct cpu, cpu_devices);
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/smtc-asm.S linux-2.6.17.4-mips/arch/mips/kernel/smtc-asm.S
---- linux-2.6.17.4-kernel/arch/mips/kernel/smtc-asm.S	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/smtc-asm.S	2006-07-06 16:58:16.000000000 -0700
-@@ -52,12 +52,12 @@
- 	.set	noat
- 	/* Disable thread scheduling to make Status update atomic */
- 	DMT	27					# dmt	k1
--	ehb
-+	_ehb
- 	/* Set EXL */
- 	mfc0	k0,CP0_STATUS
- 	ori	k0,k0,ST0_EXL
- 	mtc0	k0,CP0_STATUS
--	ehb
-+	_ehb
- 	/* Thread scheduling now inhibited by EXL. Restore TE state. */
- 	andi	k1,k1,VPECONTROL_TE
- 	beqz	k1,1f
-@@ -82,7 +82,7 @@
- 	li	k1,ST0_CU0
- 	or	k1,k1,k0
- 	mtc0	k1,CP0_STATUS
--	ehb
-+	_ehb
- 	get_saved_sp
- 	/* Interrupting TC will have pre-set values in slots in the new frame */
- 2:	subu	k1,k1,PT_SIZE
-@@ -90,7 +90,7 @@
- 	lw	k0,PT_TCSTATUS(k1)
- 	/* Write it to TCStatus to restore CU/KSU/IXMT state */
- 	mtc0	k0,$2,1
--	ehb
-+	_ehb
- 	lw	k0,PT_EPC(k1)
- 	mtc0	k0,CP0_EPC
- 	/* Save all will redundantly recompute the SP, but use it for now */
-@@ -116,7 +116,7 @@
- 	mfc0	t0,CP0_TCSTATUS
- 	ori	t1,t0,TCSTATUS_IXMT
- 	mtc0	t1,CP0_TCSTATUS
--	ehb
-+	_ehb
- 	/* We know we're in kernel mode, so prepare stack frame */
- 	subu	t1,sp,PT_SIZE
- 	sw	ra,PT_EPC(t1)
-diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/traps.c linux-2.6.17.4-mips/arch/mips/kernel/traps.c
---- linux-2.6.17.4-kernel/arch/mips/kernel/traps.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/kernel/traps.c	2006-07-06 16:58:16.000000000 -0700
-@@ -1051,7 +1051,7 @@
- 	return (void *)old_handler;
- }
- 
--#ifdef CONFIG_CPU_MIPSR2
-+#ifdef CONFIG_CPU_MIPSR2_SRS
- /*
-  * MIPSR2 shadow register set allocation
-  * FIXME: SMP...
-@@ -1070,11 +1070,9 @@
- 
- static void mips_srs_init(void)
- {
--#ifdef CONFIG_CPU_MIPSR2_SRS
- 	shadow_registers.sr_supported = ((read_c0_srsctl() >> 26) & 0x0f) + 1;
- 	printk(KERN_INFO "%d MIPSR2 register sets available\n",
- 	       shadow_registers.sr_supported);
--#endif
- 	shadow_registers.sr_allocated = 1;	/* Set 0 used by kernel */
- }
- 
-@@ -1199,7 +1197,14 @@
- {
- 	return set_vi_srs_handler(n, addr, 0);
- }
--#endif
-+
-+#else
-+
-+static inline void mips_srs_init(void)
-+{
-+}
-+
-+#endif /* CONFIG_CPU_MIPSR2_SRS */
- 
- /*
-  * This is used by native signal handling
-@@ -1389,9 +1394,7 @@
- 	else
- 		ebase = CAC_BASE;
- 
--#ifdef CONFIG_CPU_MIPSR2
- 	mips_srs_init();
--#endif
- 
- 	per_cpu_trap_init();
- 
-diff -Naur linux-2.6.17.4-kernel/arch/mips/lib/iomap.c linux-2.6.17.4-mips/arch/mips/lib/iomap.c
---- linux-2.6.17.4-kernel/arch/mips/lib/iomap.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/lib/iomap.c	1969-12-31 16:00:00.000000000 -0800
-@@ -1,78 +0,0 @@
--/*
-- *  iomap.c, Memory Mapped I/O routines for MIPS architecture.
-- *
-- *  This code is based on lib/iomap.c, by Linus Torvalds.
-- *
-- *  Copyright (C) 2004-2005  Yoichi Yuasa <yoichi_yuasa at tripeaks.co.jp>
-- *
-- *  This program is free software; you can redistribute it and/or modify
-- *  it under the terms of the GNU General Public License as published by
-- *  the Free Software Foundation; either version 2 of the License, or
-- *  (at your option) any later version.
-- *
-- *  This program is distributed in the hope that it will be useful,
-- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- *  GNU General Public License for more details.
-- *
-- *  You should have received a copy of the GNU General Public License
-- *  along with this program; if not, write to the Free Software
-- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-- */
--#include <linux/ioport.h>
--#include <linux/module.h>
--#include <linux/pci.h>
--
--#include <asm/io.h>
--
--void __iomem *ioport_map(unsigned long port, unsigned int nr)
--{
--	unsigned long end;
--
--	end = port + nr - 1UL;
--	if (ioport_resource.start > port ||
--	    ioport_resource.end < end || port > end)
--		return NULL;
--
--	return (void __iomem *)(mips_io_port_base + port);
--}
--
--void ioport_unmap(void __iomem *addr)
--{
--}
--EXPORT_SYMBOL(ioport_map);
--EXPORT_SYMBOL(ioport_unmap);
--
--void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
--{
--	unsigned long start, len, flags;
--
--	if (dev == NULL)
--		return NULL;
--
--	start = pci_resource_start(dev, bar);
--	len = pci_resource_len(dev, bar);
--	if (!start || !len)
--		return NULL;
--
--	if (maxlen != 0 && len > maxlen)
--		len = maxlen;
--
--	flags = pci_resource_flags(dev, bar);
--	if (flags & IORESOURCE_IO)
--		return ioport_map(start, len);
--	if (flags & IORESOURCE_MEM) {
--		if (flags & IORESOURCE_CACHEABLE)
--			return ioremap_cachable(start, len);
--		return ioremap_nocache(start, len);
--	}
--
--	return NULL;
--}
--
--void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
--{
--	iounmap(addr);
--}
--EXPORT_SYMBOL(pci_iomap);
--EXPORT_SYMBOL(pci_iounmap);
-diff -Naur linux-2.6.17.4-kernel/arch/mips/lib/Makefile linux-2.6.17.4-mips/arch/mips/lib/Makefile
---- linux-2.6.17.4-kernel/arch/mips/lib/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/lib/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -5,6 +5,7 @@
- lib-y	+= csum_partial_copy.o memcpy.o promlib.o strlen_user.o strncpy_user.o \
- 	   strnlen_user.o uncached.o
- 
--obj-y	+= iomap.o
-+# libgcc-style stuff needed in the kernel
-+lib-y += ashldi3.o ashrdi3.o lshrdi3.o
- 
- EXTRA_AFLAGS := $(CFLAGS)
-diff -Naur linux-2.6.17.4-kernel/arch/mips/lib-32/dump_tlb.c linux-2.6.17.4-mips/arch/mips/lib-32/dump_tlb.c
---- linux-2.6.17.4-kernel/arch/mips/lib-32/dump_tlb.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/lib-32/dump_tlb.c	2006-07-06 16:58:16.000000000 -0700
-@@ -41,8 +41,6 @@
- 		return "256Mb";
- #endif
- 	}
--
--	return "unknown";
- }
- 
- #define BARRIER()					\
-diff -Naur linux-2.6.17.4-kernel/arch/mips/lib-64/dump_tlb.c linux-2.6.17.4-mips/arch/mips/lib-64/dump_tlb.c
---- linux-2.6.17.4-kernel/arch/mips/lib-64/dump_tlb.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/lib-64/dump_tlb.c	2006-07-06 16:58:16.000000000 -0700
-@@ -32,8 +32,6 @@
- 	case PM_256M:	return "256Mb";
- #endif
- 	}
--
--	return "unknown";
- }
- 
- #define BARRIER()					\
-diff -Naur linux-2.6.17.4-kernel/arch/mips/Makefile linux-2.6.17.4-mips/arch/mips/Makefile
---- linux-2.6.17.4-kernel/arch/mips/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -83,6 +83,8 @@
- LDFLAGS_vmlinux			+= -G 0 -static -n -nostdlib
- MODFLAGS			+= -mlong-calls
- 
-+cflags-y += -ffreestanding
-+
- #
- # We explicitly add the endianness specifier if needed, this allows
- # to compile kernels with a toolchain for the other endianness. We
-@@ -365,6 +367,7 @@
- cflags-$(CONFIG_PMC_YOSEMITE)	+= -Iinclude/asm-mips/mach-yosemite
- load-$(CONFIG_PMC_YOSEMITE)	+= 0xffffffff80100000
- 
-+#
- # Qemu simulating MIPS32 4Kc
- #
- core-$(CONFIG_QEMU)		+= arch/mips/qemu/
-diff -Naur linux-2.6.17.4-kernel/arch/mips/mips-boards/generic/memory.c linux-2.6.17.4-mips/arch/mips/mips-boards/generic/memory.c
---- linux-2.6.17.4-kernel/arch/mips/mips-boards/generic/memory.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/mips-boards/generic/memory.c	2006-07-06 16:58:16.000000000 -0700
-@@ -48,34 +48,45 @@
- };
- #endif
- 
-+/* determined physical memory size, not overridden by command line args  */
-+unsigned long physical_memsize = 0L;
-+
- struct prom_pmemblock * __init prom_getmdesc(void)
- {
- 	char *memsize_str;
- 	unsigned int memsize;
- 	char cmdline[CL_SIZE], *ptr;
- 
--	/* Check the command line first for a memsize directive */
-+	/* otherwise look in the environment */
-+	memsize_str = prom_getenv("memsize");
-+	if (!memsize_str) {
-+		prom_printf("memsize not set in boot prom, set to default (32Mb)\n");
-+		physical_memsize = 0x02000000;
-+	} else {
-+#ifdef DEBUG
-+		prom_printf("prom_memsize = %s\n", memsize_str);
-+#endif
-+		physical_memsize = simple_strtol(memsize_str, NULL, 0);
-+	}
-+
-+#ifdef CONFIG_CPU_BIG_ENDIAN
-+	/* SOC-it swaps, or perhaps doesn't swap, when DMA'ing the last
-+	   word of physical memory */
-+	physical_memsize -= PAGE_SIZE;
-+#endif
-+
-+	/* Check the command line for a memsize directive that overrides
-+	   the physical/default amount */
- 	strcpy(cmdline, arcs_cmdline);
- 	ptr = strstr(cmdline, "memsize=");
- 	if (ptr && (ptr != cmdline) && (*(ptr - 1) != ' '))
- 		ptr = strstr(ptr, " memsize=");
- 
--	if (ptr) {
-+	if (ptr)
- 		memsize = memparse(ptr + 8, &ptr);
--	}
--	else {
--		/* otherwise look in the environment */
--		memsize_str = prom_getenv("memsize");
--		if (!memsize_str) {
--			prom_printf("memsize not set in boot prom, set to default (32Mb)\n");
--			memsize = 0x02000000;
--		} else {
--#ifdef DEBUG
--			prom_printf("prom_memsize = %s\n", memsize_str);
--#endif
--			memsize = simple_strtol(memsize_str, NULL, 0);
--		}
--	}
-+	else
-+		memsize = physical_memsize;
-+
- 	memset(mdesc, 0, sizeof(mdesc));
- 
- 	mdesc[0].type = yamon_dontuse;
-diff -Naur linux-2.6.17.4-kernel/arch/mips/mips-boards/malta/malta_int.c linux-2.6.17.4-mips/arch/mips/mips-boards/malta/malta_int.c
---- linux-2.6.17.4-kernel/arch/mips/mips-boards/malta/malta_int.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/mips-boards/malta/malta_int.c	2006-07-06 16:58:16.000000000 -0700
-@@ -208,23 +208,23 @@
- 	unsigned int a0 = 7;
- 	unsigned int t0;
- 
--	t0 = s0 & 0xf000;
-+	t0 = pending & 0xf000;
- 	t0 = t0 < 1;
- 	t0 = t0 << 2;
- 	a0 = a0 - t0;
--	s0 = s0 << t0;
-+	pending = pending << t0;
- 
--	t0 = s0 & 0xc000;
-+	t0 = pending & 0xc000;
- 	t0 = t0 < 1;
- 	t0 = t0 << 1;
- 	a0 = a0 - t0;
--	s0 = s0 << t0;
-+	pending = pending << t0;
- 
--	t0 = s0 & 0x8000;
-+	t0 = pending & 0x8000;
- 	t0 = t0 < 1;
- 	//t0 = t0 << 2;
- 	a0 = a0 - t0;
--	//s0 = s0 << t0;
-+	//pending = pending << t0;
- 
- 	return a0;
- #endif
-diff -Naur linux-2.6.17.4-kernel/arch/mips/mm/c-r4k.c linux-2.6.17.4-mips/arch/mips/mm/c-r4k.c
---- linux-2.6.17.4-kernel/arch/mips/mm/c-r4k.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/mm/c-r4k.c	2006-07-06 16:58:16.000000000 -0700
-@@ -24,32 +24,12 @@
- #include <asm/page.h>
- #include <asm/pgtable.h>
- #include <asm/r4kcache.h>
-+#include <asm/smp.h>
- #include <asm/system.h>
- #include <asm/mmu_context.h>
- #include <asm/war.h>
- #include <asm/cacheflush.h> /* for run_uncached() */
- 
--
--/*
-- * Special Variant of smp_call_function for use by cache functions:
-- *
-- *  o No return value
-- *  o collapses to normal function call on UP kernels
-- *  o collapses to normal function call on systems with a single shared
-- *    primary cache.
-- */
--static inline void r4k_on_each_cpu(void (*func) (void *info), void *info,
--                                   int retry, int wait)
--{
--	preempt_disable();
--
--#if !defined(CONFIG_MIPS_MT_SMP) && !defined(CONFIG_MIPS_MT_SMTC)
--	smp_call_function(func, info, retry, wait);
--#endif
--	func(info);
--	preempt_enable();
--}
--
- /*
-  * Must die.
-  */
-@@ -60,13 +40,13 @@
- /*
-  * Dummy cache handling routines for machines without boardcaches
-  */
--static void no_sc_noop(void) {}
-+static void cache_noop(void) {}
- 
- static struct bcache_ops no_sc_ops = {
--	.bc_enable = (void *)no_sc_noop,
--	.bc_disable = (void *)no_sc_noop,
--	.bc_wback_inv = (void *)no_sc_noop,
--	.bc_inv = (void *)no_sc_noop
-+	.bc_enable = (void *)cache_noop,
-+	.bc_disable = (void *)cache_noop,
-+	.bc_wback_inv = (void *)cache_noop,
-+	.bc_inv = (void *)cache_noop
- };
- 
- struct bcache_ops *bcops = &no_sc_ops;
-@@ -94,7 +74,9 @@
- {
- 	unsigned long  dc_lsize = cpu_dcache_line_size();
- 
--	if (dc_lsize == 16)
-+	if (dc_lsize == 0)
-+		r4k_blast_dcache_page = (void *)cache_noop;
-+	else if (dc_lsize == 16)
- 		r4k_blast_dcache_page = blast_dcache16_page;
- 	else if (dc_lsize == 32)
- 		r4k_blast_dcache_page = r4k_blast_dcache_page_dc32;
-@@ -106,7 +88,9 @@
- {
- 	unsigned long dc_lsize = cpu_dcache_line_size();
- 
--	if (dc_lsize == 16)
-+	if (dc_lsize == 0)
-+		r4k_blast_dcache_page_indexed = (void *)cache_noop;
-+	else if (dc_lsize == 16)
- 		r4k_blast_dcache_page_indexed = blast_dcache16_page_indexed;
- 	else if (dc_lsize == 32)
- 		r4k_blast_dcache_page_indexed = blast_dcache32_page_indexed;
-@@ -118,7 +102,9 @@
- {
- 	unsigned long dc_lsize = cpu_dcache_line_size();
- 
--	if (dc_lsize == 16)
-+	if (dc_lsize == 0)
-+		r4k_blast_dcache = (void *)cache_noop;
-+	else if (dc_lsize == 16)
- 		r4k_blast_dcache = blast_dcache16;
- 	else if (dc_lsize == 32)
- 		r4k_blast_dcache = blast_dcache32;
-@@ -201,7 +187,9 @@
- {
- 	unsigned long ic_lsize = cpu_icache_line_size();
- 
--	if (ic_lsize == 16)
-+	if (ic_lsize == 0)
-+		r4k_blast_icache_page = (void *)cache_noop;
-+	else if (ic_lsize == 16)
- 		r4k_blast_icache_page = blast_icache16_page;
- 	else if (ic_lsize == 32)
- 		r4k_blast_icache_page = blast_icache32_page;
-@@ -216,7 +204,9 @@
- {
- 	unsigned long ic_lsize = cpu_icache_line_size();
- 
--	if (ic_lsize == 16)
-+	if (ic_lsize == 0)
-+		r4k_blast_icache_page_indexed = (void *)cache_noop;
-+	else if (ic_lsize == 16)
- 		r4k_blast_icache_page_indexed = blast_icache16_page_indexed;
- 	else if (ic_lsize == 32) {
- 		if (R4600_V1_INDEX_ICACHEOP_WAR && cpu_is_r4600_v1_x())
-@@ -238,7 +228,9 @@
- {
- 	unsigned long ic_lsize = cpu_icache_line_size();
- 
--	if (ic_lsize == 16)
-+	if (ic_lsize == 0)
-+		r4k_blast_icache = (void *)cache_noop;
-+	else if (ic_lsize == 16)
- 		r4k_blast_icache = blast_icache16;
- 	else if (ic_lsize == 32) {
- 		if (R4600_V1_INDEX_ICACHEOP_WAR && cpu_is_r4600_v1_x())
-@@ -258,7 +250,7 @@
- 	unsigned long sc_lsize = cpu_scache_line_size();
- 
- 	if (scache_size == 0)
--		r4k_blast_scache_page = (void *)no_sc_noop;
-+		r4k_blast_scache_page = (void *)cache_noop;
- 	else if (sc_lsize == 16)
- 		r4k_blast_scache_page = blast_scache16_page;
- 	else if (sc_lsize == 32)
-@@ -276,7 +268,7 @@
- 	unsigned long sc_lsize = cpu_scache_line_size();
- 
- 	if (scache_size == 0)
--		r4k_blast_scache_page_indexed = (void *)no_sc_noop;
-+		r4k_blast_scache_page_indexed = (void *)cache_noop;
- 	else if (sc_lsize == 16)
- 		r4k_blast_scache_page_indexed = blast_scache16_page_indexed;
- 	else if (sc_lsize == 32)
-@@ -294,7 +286,7 @@
- 	unsigned long sc_lsize = cpu_scache_line_size();
- 
- 	if (scache_size == 0)
--		r4k_blast_scache = (void *)no_sc_noop;
-+		r4k_blast_scache = (void *)cache_noop;
- 	else if (sc_lsize == 16)
- 		r4k_blast_scache = blast_scache16;
- 	else if (sc_lsize == 32)
-@@ -320,7 +312,7 @@
- 	if (!cpu_has_dc_aliases)
- 		return;
- 
--	r4k_on_each_cpu(local_r4k_flush_cache_all, NULL, 1, 1);
-+	__on_each_core(local_r4k_flush_cache_all, NULL);
- }
- 
- static inline void local_r4k___flush_cache_all(void * args)
-@@ -342,7 +334,7 @@
- 
- static void r4k___flush_cache_all(void)
- {
--	r4k_on_each_cpu(local_r4k___flush_cache_all, NULL, 1, 1);
-+	__on_each_core(local_r4k___flush_cache_all, NULL);
- }
- 
- static inline void local_r4k_flush_cache_range(void * args)
-@@ -363,7 +355,7 @@
- static void r4k_flush_cache_range(struct vm_area_struct *vma,
- 	unsigned long start, unsigned long end)
- {
--	r4k_on_each_cpu(local_r4k_flush_cache_range, vma, 1, 1);
-+	__on_each_core(local_r4k_flush_cache_range, vma);
- }
- 
- static inline void local_r4k_flush_cache_mm(void * args)
-@@ -392,7 +384,7 @@
- 	if (!cpu_has_dc_aliases)
- 		return;
- 
--	r4k_on_each_cpu(local_r4k_flush_cache_mm, mm, 1, 1);
-+	__on_each_core(local_r4k_flush_cache_mm, mm);
- }
- 
- struct flush_cache_page_args {
-@@ -483,7 +475,7 @@
- 	args.addr = addr;
- 	args.pfn = pfn;
- 
--	r4k_on_each_cpu(local_r4k_flush_cache_page, &args, 1, 1);
-+	__on_each_core(local_r4k_flush_cache_page, &args);
- }
- 
- static inline void local_r4k_flush_data_cache_page(void * addr)
-@@ -493,7 +485,7 @@
- 
- static void r4k_flush_data_cache_page(unsigned long addr)
- {
--	r4k_on_each_cpu(local_r4k_flush_data_cache_page, (void *) addr, 1, 1);
-+	__on_each_core(local_r4k_flush_data_cache_page, (void *) addr);
- }
- 
- struct flush_icache_range_args {
-@@ -508,7 +500,7 @@
- 	unsigned long end = fir_args->end;
- 
- 	if (!cpu_has_ic_fills_f_dc) {
--		if (end - start > dcache_size) {
-+		if (end - start >= dcache_size) {
- 			r4k_blast_dcache();
- 		} else {
- 			R4600_HIT_CACHEOP_WAR_IMPL;
-@@ -536,7 +528,7 @@
- 	args.start = start;
- 	args.end = end;
- 
--	r4k_on_each_cpu(local_r4k_flush_icache_range, &args, 1, 1);
-+	__on_each_core(local_r4k_flush_icache_range, &args);
- 	instruction_hazard();
- }
- 
-@@ -612,7 +604,7 @@
- 	args.vma = vma;
- 	args.page = page;
- 
--	r4k_on_each_cpu(local_r4k_flush_icache_page, &args, 1, 1);
-+	__on_each_core(local_r4k_flush_icache_page, &args);
- }
- 
- 
-@@ -683,10 +675,12 @@
- 	unsigned long addr = (unsigned long) arg;
- 
- 	R4600_HIT_CACHEOP_WAR_IMPL;
--	protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
-+	if (dc_lsize)
-+		protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
- 	if (!cpu_icache_snoops_remote_store && scache_size)
- 		protected_writeback_scache_line(addr & ~(sc_lsize - 1));
--	protected_flush_icache_line(addr & ~(ic_lsize - 1));
-+	if (ic_lsize)
-+		protected_flush_icache_line(addr & ~(ic_lsize - 1));
- 	if (MIPS4K_ICACHE_REFILL_WAR) {
- 		__asm__ __volatile__ (
- 			".set push\n\t"
-@@ -711,7 +705,7 @@
- 
- static void r4k_flush_cache_sigtramp(unsigned long addr)
- {
--	r4k_on_each_cpu(local_r4k_flush_cache_sigtramp, (void *) addr, 1, 1);
-+	__on_each_core(local_r4k_flush_cache_sigtramp, (void *) addr);
- }
- 
- static void r4k_flush_icache_all(void)
-@@ -973,8 +967,10 @@
- 	c->icache.waysize = icache_size / c->icache.ways;
- 	c->dcache.waysize = dcache_size / c->dcache.ways;
- 
--	c->icache.sets = icache_size / (c->icache.linesz * c->icache.ways);
--	c->dcache.sets = dcache_size / (c->dcache.linesz * c->dcache.ways);
-+	c->icache.sets = c->icache.linesz ?
-+		icache_size / (c->icache.linesz * c->icache.ways) : 0;
-+	c->dcache.sets = c->dcache.linesz ?
-+		dcache_size / (c->dcache.linesz * c->dcache.ways) : 0;
- 
- 	/*
- 	 * R10000 and R12000 P-caches are odd in a positive way.  They're 32kB
-@@ -993,10 +989,15 @@
- 		break;
- 	case CPU_24K:
- 	case CPU_34K:
--		if (!(read_c0_config7() & (1 << 16)))
-+		if ((read_c0_config7() & (1 << 16))) {
-+			/* effectively physically indexed dcache,
-+			   thus no virtual aliases. */
-+			c->dcache.flags |= MIPS_CACHE_PINDEX;
-+			break;
-+		}
- 	default:
--			if (c->dcache.waysize > PAGE_SIZE)
--				c->dcache.flags |= MIPS_CACHE_ALIASES;
-+		if (c->dcache.waysize > PAGE_SIZE)
-+			c->dcache.flags |= MIPS_CACHE_ALIASES;
- 	}
- 
- 	switch (c->cputype) {
-@@ -1092,6 +1093,7 @@
- 
- extern int r5k_sc_init(void);
- extern int rm7k_sc_init(void);
-+extern int mips_sc_init(void);
- 
- static void __init setup_scache(void)
- {
-@@ -1139,17 +1141,29 @@
- 		return;
- 
- 	default:
-+		if (c->isa_level == MIPS_CPU_ISA_M32R1 ||
-+		    c->isa_level == MIPS_CPU_ISA_M32R2 ||
-+		    c->isa_level == MIPS_CPU_ISA_M64R1 ||
-+		    c->isa_level == MIPS_CPU_ISA_M64R2) {
-+#ifdef CONFIG_MIPS_CPU_SCACHE
-+			if (mips_sc_init ()) {
-+				scache_size = c->scache.ways * c->scache.sets * c->scache.linesz;
-+				printk("MIPS secondary cache %ldkB, %s, linesize %d bytes.\n",
-+				       scache_size >> 10,
-+				       way_string[c->scache.ways], c->scache.linesz);
-+			}
-+#else
-+			if (!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
-+				panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
-+#endif
-+			return;
-+		}
- 		sc_present = 0;
- 	}
- 
- 	if (!sc_present)
- 		return;
- 
--	if ((c->isa_level == MIPS_CPU_ISA_M32R1 ||
--	     c->isa_level == MIPS_CPU_ISA_M64R1) &&
--	    !(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
--		panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
--
- 	/* compute a couple of other cache variables */
- 	c->scache.waysize = scache_size / c->scache.ways;
- 
-@@ -1246,10 +1260,12 @@
- 	 * This code supports virtually indexed processors and will be
- 	 * unnecessarily inefficient on physically indexed processors.
- 	 */
--	shm_align_mask = max_t( unsigned long,
--				c->dcache.sets * c->dcache.linesz - 1,
--				PAGE_SIZE - 1);
--
-+	if (c->dcache.linesz)
-+		shm_align_mask = max_t( unsigned long,
-+					c->dcache.sets * c->dcache.linesz - 1,
-+					PAGE_SIZE - 1);
-+	else
-+		shm_align_mask = PAGE_SIZE-1;
- 	flush_cache_all		= r4k_flush_cache_all;
- 	__flush_cache_all	= r4k___flush_cache_all;
- 	flush_cache_mm		= r4k_flush_cache_mm;
-diff -Naur linux-2.6.17.4-kernel/arch/mips/mm/Makefile linux-2.6.17.4-mips/arch/mips/mm/Makefile
---- linux-2.6.17.4-kernel/arch/mips/mm/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/mm/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -30,6 +30,7 @@
- obj-$(CONFIG_IP22_CPU_SCACHE)	+= sc-ip22.o
- obj-$(CONFIG_R5000_CPU_SCACHE)  += sc-r5k.o
- obj-$(CONFIG_RM7000_CPU_SCACHE)	+= sc-rm7k.o
-+obj-$(CONFIG_MIPS_CPU_SCACHE)	+= sc-mips.o
- 
- #
- # Choose one DMA coherency model
-diff -Naur linux-2.6.17.4-kernel/arch/mips/pci/fixup-tb0219.c linux-2.6.17.4-mips/arch/mips/pci/fixup-tb0219.c
---- linux-2.6.17.4-kernel/arch/mips/pci/fixup-tb0219.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/pci/fixup-tb0219.c	2006-07-06 16:58:16.000000000 -0700
-@@ -2,7 +2,7 @@
-  *  fixup-tb0219.c, The TANBAC TB0219 specific PCI fixups.
-  *
-  *  Copyright (C) 2003  Megasolution Inc. <matsu at megasolution.jp>
-- *  Copyright (C) 2004  Yoichi Yuasa <yoichi_yuasa at tripeaks.co.jp>
-+ *  Copyright (C) 2004-2005  Yoichi Yuasa <yoichi_yuasa at tripeaks.co.jp>
-  *
-  *  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
-diff -Naur linux-2.6.17.4-kernel/arch/mips/qemu/Makefile linux-2.6.17.4-mips/arch/mips/qemu/Makefile
---- linux-2.6.17.4-kernel/arch/mips/qemu/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/qemu/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -4,4 +4,5 @@
- 
- obj-y		= q-firmware.o q-irq.o q-mem.o q-setup.o
- 
-+obj-$(CONFIG_VT) += q-vga.o
- obj-$(CONFIG_SMP) += q-smp.o
-diff -Naur linux-2.6.17.4-kernel/arch/mips/qemu/q-setup.c linux-2.6.17.4-mips/arch/mips/qemu/q-setup.c
---- linux-2.6.17.4-kernel/arch/mips/qemu/q-setup.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/qemu/q-setup.c	2006-07-06 16:58:16.000000000 -0700
-@@ -2,6 +2,8 @@
- #include <asm/io.h>
- #include <asm/time.h>
- 
-+extern void qvga_init(void);
-+
- #define QEMU_PORT_BASE 0xb4000000
- 
- const char *get_system_type(void)
-@@ -21,5 +23,8 @@
- void __init plat_setup(void)
- {
- 	set_io_port_base(QEMU_PORT_BASE);
-+#ifdef CONFIG_VT
-+	qvga_init();
-+#endif
- 	board_timer_setup = qemu_timer_setup;
- }
-diff -Naur linux-2.6.17.4-kernel/arch/mips/sgi-ip27/ip27-irq.c linux-2.6.17.4-mips/arch/mips/sgi-ip27/ip27-irq.c
---- linux-2.6.17.4-kernel/arch/mips/sgi-ip27/ip27-irq.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/sgi-ip27/ip27-irq.c	2006-07-06 16:58:16.000000000 -0700
-@@ -360,7 +360,7 @@
- 
- static unsigned long irq_map[NR_IRQS / BITS_PER_LONG];
- 
--static int allocate_irqno(void)
-+int allocate_irqno(void)
- {
- 	int irq;
- 
-diff -Naur linux-2.6.17.4-kernel/arch/mips/sgi-ip27/ip27-timer.c linux-2.6.17.4-mips/arch/mips/sgi-ip27/ip27-timer.c
---- linux-2.6.17.4-kernel/arch/mips/sgi-ip27/ip27-timer.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/sgi-ip27/ip27-timer.c	2006-07-06 16:58:16.000000000 -0700
-@@ -89,11 +89,13 @@
- }
- #endif
- 
-+static unsigned int rt_timer_irq;
-+
- void ip27_rt_timer_interrupt(struct pt_regs *regs)
- {
- 	int cpu = smp_processor_id();
- 	int cpuA = cputoslice(cpu) == 0;
--	int irq = 9;				/* XXX Assign number */
-+	unsigned int irq = rt_timer_irq;
- 
- 	irq_enter();
- 	write_seqlock(&xtime_lock);
-@@ -179,13 +181,68 @@
-         return mktime(year, month, date, hour, min, sec);
- }
- 
-+static void startup_rt_irq(unsigned int irq)
-+{
-+}
-+
-+static void shutdown_rt_irq(unsigned int irq)
-+{
-+}
-+
-+static void enable_rt_irq(unsigned int irq)
-+{
-+}
-+
-+static void disable_rt_irq(unsigned int irq)
-+{
-+}
-+
-+static void mask_and_ack_rt(unsigned int irq)
-+{
-+}
-+
-+static void end_rt_irq(unsigned int irq)
-+{
-+}
-+
-+static struct hw_interrupt_type rt_irq_type = {
-+	.typename	= "SN HUB RT timer",
-+	.startup	= startup_rt_irq,
-+	.shutdown	= shutdown_rt_irq,
-+	.enable		= enable_rt_irq,
-+	.disable	= disable_rt_irq,
-+	.ack		= mask_and_ack_rt,
-+	.end		= end_rt_irq,
-+};
-+
-+static struct irqaction rt_irqaction = {
-+	.handler	= ip27_rt_timer_interrupt,
-+	.flags		= SA_INTERRUPT,
-+	.mask		= CPU_MASK_NONE,
-+	.name		= "timer"
-+};
-+
-+extern int allocate_irqno(void);
-+
- static void ip27_timer_setup(struct irqaction *irq)
- {
-+	int irqno  = allocate_irqno();
-+
-+	if (irqno < 0)
-+		panic("Can't allocate interrupt number for timer interrupt");
-+
-+	irq_desc[irqno].status = IRQ_DISABLED;
-+	irq_desc[irqno].action = NULL;
-+	irq_desc[irqno].depth = 1;
-+	irq_desc[irqno].handler = &rt_irq_type;
-+
- 	/* over-write the handler, we use our own way */
- 	irq->handler = no_action;
- 
- 	/* setup irqaction */
--//	setup_irq(IP27_TIMER_IRQ, irq);		/* XXX Can't do this yet.  */
-+	irq_desc[irqno].status |= IRQ_PER_CPU;
-+
-+	rt_timer_irq = irqno;
- }
- 
- void __init ip27_time_init(void)
-diff -Naur linux-2.6.17.4-kernel/arch/mips/sgi-ip27/Kconfig linux-2.6.17.4-mips/arch/mips/sgi-ip27/Kconfig
---- linux-2.6.17.4-kernel/arch/mips/sgi-ip27/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/sgi-ip27/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -35,12 +35,13 @@
- 	depends on SGI_IP27
- 	help
- 	  Change the way a Linux kernel is loaded into memory on a MIPS64
--	  machine.  This is required in order to support text replication and
-+	  machine.  This is required in order to support text replication on
- 	  NUMA.  If you need to understand it, read the source code.
- 
- config REPLICATE_KTEXT
- 	bool "Kernel text replication support"
- 	depends on SGI_IP27
-+	select MAPPED_KERNEL
- 	help
- 	  Say Y here to enable replicating the kernel text across multiple
- 	  nodes in a NUMA cluster.  This trades memory for speed.
-diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/bcm1480/irq.c linux-2.6.17.4-mips/arch/mips/sibyte/bcm1480/irq.c
---- linux-2.6.17.4-kernel/arch/mips/sibyte/bcm1480/irq.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/sibyte/bcm1480/irq.c	2006-07-06 16:58:16.000000000 -0700
-@@ -503,22 +503,23 @@
- #ifdef CONFIG_SIBYTE_BCM1480_PROF
- 	if (pending & CAUSEF_IP7)	/* Cpu performance counter interrupt */
- 		sbprof_cpu_intr(exception_epc(regs));
-+	else
- #endif
- 
- 	if (pending & CAUSEF_IP4)
- 		bcm1480_timer_interrupt(regs);
- 
- #ifdef CONFIG_SMP
--	if (pending & CAUSEF_IP3)
-+	else if (pending & CAUSEF_IP3)
- 		bcm1480_mailbox_interrupt(regs);
- #endif
- 
- #ifdef CONFIG_KGDB
--	if (pending & CAUSEF_IP6)
-+	else if (pending & CAUSEF_IP6)
- 		bcm1480_kgdb_interrupt(regs);		/* KGDB (uart 1) */
- #endif
- 
--	if (pending & CAUSEF_IP2) {
-+	else if (pending & CAUSEF_IP2) {
- 		unsigned long long mask_h, mask_l;
- 		unsigned long base;
- 
-@@ -534,7 +535,7 @@
- 		mask_l = __raw_readq(
- 			IOADDR(base + R_BCM1480_IMR_INTERRUPT_STATUS_BASE_L));
- 
--		if (!mask_h) {
-+		if (mask_h) {
- 			if (mask_h ^ 1)
- 				do_IRQ(63 - dclz(mask_h), regs);
- 			else
-diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/bcm1480/time.c linux-2.6.17.4-mips/arch/mips/sibyte/bcm1480/time.c
---- linux-2.6.17.4-kernel/arch/mips/sibyte/bcm1480/time.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/sibyte/bcm1480/time.c	2006-07-06 16:58:16.000000000 -0700
-@@ -110,17 +110,18 @@
- 	__raw_writeq(M_SCD_TIMER_ENABLE|M_SCD_TIMER_MODE_CONTINUOUS,
- 	      IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG)));
- 
--	/*
--	 * CPU 0 handles the global timer interrupt job
--	 */
- 	if (cpu == 0) {
-+		/*
-+		 * CPU 0 handles the global timer interrupt job
-+		 */
- 		ll_timer_interrupt(irq, regs);
- 	}
--
--	/*
--	 * every CPU should do profiling and process accouting
--	 */
--	ll_local_timer_interrupt(irq, regs);
-+	else {
-+		/*
-+		 * other CPUs should just do profiling and process accounting
-+		 */
-+		ll_local_timer_interrupt(irq, regs);
-+	}
- }
- 
- /*
-diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/Kconfig linux-2.6.17.4-mips/arch/mips/sibyte/Kconfig
---- linux-2.6.17.4-kernel/arch/mips/sibyte/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/sibyte/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -3,6 +3,7 @@
- 	select HW_HAS_PCI
- 	select SIBYTE_HAS_LDT
- 	select SIBYTE_SB1xxx_SOC
-+	select SYS_SUPPORTS_SMP
- 
- config SIBYTE_BCM1120
- 	bool
-@@ -30,11 +31,13 @@
- 	bool
- 	select HW_HAS_PCI
- 	select SIBYTE_SB1xxx_SOC
-+	select SYS_SUPPORTS_SMP
- 
- config SIBYTE_BCM1x55
- 	bool
- 	select HW_HAS_PCI
- 	select SIBYTE_SB1xxx_SOC
-+	select SYS_SUPPORTS_SMP
- 
- config SIBYTE_SB1xxx_SOC
- 	bool
-diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/sb1250/irq.c linux-2.6.17.4-mips/arch/mips/sibyte/sb1250/irq.c
---- linux-2.6.17.4-kernel/arch/mips/sibyte/sb1250/irq.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/sibyte/sb1250/irq.c	2006-07-06 16:58:16.000000000 -0700
-@@ -435,13 +435,17 @@
- 	return lz;
- }
- 
-+extern void sb1250_timer_interrupt(struct pt_regs *regs);
-+extern void sb1250_mailbox_interrupt(struct pt_regs *regs);
-+extern void sb1250_kgdb_interrupt(struct pt_regs *regs);
-+
- asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
- {
- 	unsigned int pending;
- 
- #ifdef CONFIG_SIBYTE_SB1250_PROF
- 	/* Set compare to count to silence count/compare timer interrupts */
--	write_c0_count(read_c0_count());
-+	write_c0_compare(read_c0_count());
- #endif
- 
- 	/*
-@@ -457,32 +461,32 @@
- 	pending = read_c0_cause();
- 
- #ifdef CONFIG_SIBYTE_SB1250_PROF
--	if (pending & CAUSEF_IP7) { /* Cpu performance counter interrupt */
-+	if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */
- 		sbprof_cpu_intr(exception_epc(regs));
--	}
-+	else
- #endif
- 
- 	if (pending & CAUSEF_IP4)
- 		sb1250_timer_interrupt(regs);
- 
- #ifdef CONFIG_SMP
--	if (pending & CAUSEF_IP3)
-+	else if (pending & CAUSEF_IP3)
- 		sb1250_mailbox_interrupt(regs);
- #endif
- 
- #ifdef CONFIG_KGDB
--	if (pending & CAUSEF_IP6)			/* KGDB (uart 1) */
-+	else if (pending & CAUSEF_IP6)			/* KGDB (uart 1) */
- 		sb1250_kgdb_interrupt(regs);
- #endif
- 
--	if (pending & CAUSEF_IP2) {
-+	else if (pending & CAUSEF_IP2) {
- 		unsigned long long mask;
- 
- 		/*
- 		 * Default...we've hit an IP[2] interrupt, which means we've
- 		 * got to check the 1250 interrupt registers to figure out what
- 		 * to do.  Need to detect which CPU we're on, now that
--		 ~ smp_affinity is supported.
-+		 * smp_affinity is supported.
- 		 */
- 		mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(),
- 		                              R_IMR_INTERRUPT_STATUS_BASE)));
-diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/swarm/setup.c linux-2.6.17.4-mips/arch/mips/sibyte/swarm/setup.c
---- linux-2.6.17.4-kernel/arch/mips/sibyte/swarm/setup.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/arch/mips/sibyte/swarm/setup.c	2006-07-06 16:58:16.000000000 -0700
-@@ -72,8 +72,10 @@
- 
- void __init swarm_time_init(void)
- {
-+#if defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
- 	/* Setup HPT */
- 	sb1250_hpt_setup();
-+#endif
- }
- 
- void __init swarm_timer_setup(struct irqaction *irq)
-diff -Naur linux-2.6.17.4-kernel/Documentation/feature-removal-schedule.txt linux-2.6.17.4-mips/Documentation/feature-removal-schedule.txt
---- linux-2.6.17.4-kernel/Documentation/feature-removal-schedule.txt	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/Documentation/feature-removal-schedule.txt	2006-07-06 16:58:16.000000000 -0700
-@@ -147,16 +147,6 @@
- 
- ---------------------------
- 
--What:	au1x00_uart driver
--When:	January 2006
--Why:	The 8250 serial driver now has the ability to deal with the differences
--	between the standard 8250 family of UARTs and their slightly strange
--	brother on Alchemy SOCs.  The loss of features is not considered an
--	issue.
--Who:	Ralf Baechle <ralf at linux-mips.org>
--
-----------------------------
--
- What:   eepro100 network driver
- When:   January 2007
- Why:    replaced by the e100 driver
-diff -Naur linux-2.6.17.4-kernel/drivers/char/decserial.c linux-2.6.17.4-mips/drivers/char/decserial.c
---- linux-2.6.17.4-kernel/drivers/char/decserial.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/char/decserial.c	2006-07-06 16:58:16.000000000 -0700
-@@ -14,87 +14,85 @@
-  *      device. Added support for PROM console in drivers/char/tty_io.c
-  *      instead. Although it may work to enable more than one 
-  *      console device I strongly recommend to use only one.
-+ *
-+ *	Copyright (C) 2004  Maciej W. Rozycki
-  */
- 
- #include <linux/config.h>
-+#include <linux/errno.h>
- #include <linux/init.h>
--#include <asm/dec/machtype.h>
--
--#ifdef CONFIG_ZS
--extern int zs_init(void);
--#endif
- 
--#ifdef CONFIG_DZ
--extern int dz_init(void);
--#endif
-+#include <asm/dec/machtype.h>
-+#include <asm/dec/serial.h>
- 
--#ifdef CONFIG_SERIAL_CONSOLE
-+extern int register_zs_hook(unsigned int channel,
-+			    struct dec_serial_hook *hook);
-+extern int unregister_zs_hook(unsigned int channel);
- 
-+int register_dec_serial_hook(unsigned int channel,
-+			     struct dec_serial_hook *hook)
-+{
- #ifdef CONFIG_ZS
--extern void zs_serial_console_init(void);
--#endif
--
--#ifdef CONFIG_DZ
--extern void dz_serial_console_init(void);
-+	if (IOASIC)
-+		return register_zs_hook(channel, hook);
- #endif
-+	return 0;
-+}
- 
-+int unregister_dec_serial_hook(unsigned int channel)
-+{
-+#ifdef CONFIG_ZS
-+	if (IOASIC)
-+		return unregister_zs_hook(channel);
- #endif
-+	return 0;
-+}
- 
--/* rs_init - starts up the serial interface -
--   handle normal case of starting up the serial interface */
- 
--#ifdef CONFIG_SERIAL
-+extern int zs_init(void);
-+extern int dz_init(void);
- 
-+/*
-+ * rs_init - starts up the serial interface -
-+ * handle normal case of starting up the serial interface
-+ */
- int __init rs_init(void)
- {
--
--#if defined(CONFIG_ZS) && defined(CONFIG_DZ)
--    if (IOASIC)
--	return zs_init();
--    else
--	return dz_init();
--#else
--
- #ifdef CONFIG_ZS
--    return zs_init();
-+	if (IOASIC)
-+		return zs_init();
- #endif
--
- #ifdef CONFIG_DZ
--    return dz_init();
--#endif
--
-+	if (!IOASIC)
-+		return dz_init();
- #endif
-+	return -ENXIO;
- }
- 
- __initcall(rs_init);
- 
--#endif
- 
--#ifdef CONFIG_SERIAL_CONSOLE
-+#ifdef CONFIG_SERIAL_DEC_CONSOLE
-+
-+extern void zs_serial_console_init(void);
-+extern void dz_serial_console_init(void);
- 
--/* serial_console_init handles the special case of starting
-- *   up the console on the serial port
-+/*
-+ * dec_serial_console_init handles the special case of starting
-+ * up the console on the serial port
-  */
--static int __init decserial_console_init(void)
-+static int __init dec_serial_console_init(void)
- {
--#if defined(CONFIG_ZS) && defined(CONFIG_DZ)
--    if (IOASIC)
--	zs_serial_console_init();
--    else
--	dz_serial_console_init();
--#else
--
- #ifdef CONFIG_ZS
--    zs_serial_console_init();
-+	if (IOASIC)
-+		zs_serial_console_init();
- #endif
--
- #ifdef CONFIG_DZ
--    dz_serial_console_init();
--#endif
--
-+	if (!IOASIC)
-+		dz_serial_console_init();
- #endif
-     return 0;
- }
--console_initcall(decserial_console_init);
-+console_initcall(dec_serial_console_init);
- 
- #endif
-diff -Naur linux-2.6.17.4-kernel/drivers/char/Kconfig linux-2.6.17.4-mips/drivers/char/Kconfig
---- linux-2.6.17.4-kernel/drivers/char/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/char/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -340,23 +340,68 @@
- 	  To compile this driver as a module, choose M here: the
- 	  module will be called istallion.
- 
--config AU1000_UART
--	bool "Enable Au1000 UART Support"
--	depends on SERIAL_NONSTANDARD && MIPS
--	help
--	  If you have an Alchemy AU1000 processor (MIPS based) and you want
--	  to use serial ports, say Y.  Otherwise, say N.
--
--config AU1000_SERIAL_CONSOLE
--	bool "Enable Au1000 serial console"
--	depends on AU1000_UART
-+config AU1X00_GPIO
-+	tristate "Alchemy Au1000 GPIO device support"
-+	depends on MIPS && SOC_AU1X00
-+
-+config TS_AU1X00_ADS7846
-+	tristate "Au1000/ADS7846 touchscreen support"
-+	depends on MIPS && SOC_AU1X00
-+
-+config AU1X00_USB_TTY
-+	tristate "Au1000 USB TTY Device support"
-+	depends on MIPS && MIPS_AU1000 && AU1000_USB_DEVICE=y && AU1000_USB_DEVICE
-+
-+config AU1X00_USB_RAW
-+	tristate "Au1000 USB Raw Device support"
-+	depends on MIPS && MIPS_AU1000 && AU1000_USB_DEVICE=y && AU1000_USB_TTY!=y && AU1X00_USB_DEVICE
-+
-+config SIBYTE_SB1250_DUART
-+	bool "Support for BCM1xxx onchip DUART"
-+	depends on MIPS && SIBYTE_SB1xxx_SOC=y
-+
-+config SIBYTE_SB1250_DUART_CONSOLE
-+	bool "Console on BCM1xxx DUART"
-+	depends on SIBYTE_SB1250_DUART
-+
-+config SERIAL_DEC
-+	bool "DECstation serial support"
-+	depends on MACH_DECSTATION
-+	default y
- 	help
--	  If you have an Alchemy AU1000 processor (MIPS based) and you want
--	  to use a console on a serial port, say Y.  Otherwise, say N.
-+	  This selects whether you want to be asked about drivers for
-+	  DECstation serial ports.
-+
-+	  Note that the answer to this question won't directly affect the
-+	  kernel: saying N will just cause the configurator to skip all
-+	  the questions about DECstation serial ports.
-+
-+	  If unsure, say Y.
-+
-+config SERIAL_DEC_CONSOLE
-+	bool "Support for console on a DECstation serial port"
-+	depends on SERIAL_DEC
-+	default y
-+	help
-+	  If you say Y here, it will be possible to use a serial port as the
-+	  system console (the system console is the device which receives all
-+	  kernel messages and warnings and which allows logins in single user
-+	  mode).  Note that the firmware uses ttyS0 as the serial console on
-+	  the Maxine and ttyS2 on the others.
-+
-+	  If unsure, say Y.
-+
-+config ZS
-+	bool "Z85C30 Serial Support"
-+	depends on SERIAL_DEC
-+	default y
-+	help
-+	  Documentation on the Zilog 85C350 serial communications controller
-+	  is downloadable at <http://www.zilog.com/pdfs/serial/z85c30.pdf>.
- 
- config QTRONIX_KEYBOARD
- 	bool "Enable Qtronix 990P Keyboard Support"
--	depends on IT8712
-+	depends on MIPS && (MIPS_ITE8172 || MIPS_IVR)
- 	help
- 	  Images of Qtronix keyboards are at
- 	  <http://www.qtronix.com/keyboard.html>.
-@@ -368,7 +413,7 @@
- 
- config IT8172_SCR0
- 	bool "Enable Smart Card Reader 0 Support "
--	depends on IT8712
-+	depends on MIPS && (MIPS_ITE8172 || MIPS_IVR)
- 	help
- 	  Say Y here to support smart-card reader 0 (SCR0) on the Integrated
- 	  Technology Express, Inc. ITE8172 SBC.  Vendor page at
-@@ -377,13 +422,17 @@
- 
- config IT8172_SCR1
- 	bool "Enable Smart Card Reader 1 Support "
--	depends on IT8712
-+	depends on MIPS && (MIPS_ITE8172 || MIPS_IVR)
- 	help
- 	  Say Y here to support smart-card reader 1 (SCR1) on the Integrated
- 	  Technology Express, Inc. ITE8172 SBC.  Vendor page at
- 	  <http://www.ite.com.tw/ia/brief_it8172bsp.htm>; picture of the
- 	  board at <http://www.mvista.com/partners/semiconductor/ite.html>.
- 
-+config ITE_GPIO
-+	tristate "ITE GPIO"
-+	depends on MIPS && MIPS_ITE8172
-+
- config A2232
- 	tristate "Commodore A2232 serial support (EXPERIMENTAL)"
- 	depends on EXPERIMENTAL && ZORRO && BROKEN_ON_SMP
-diff -Naur linux-2.6.17.4-kernel/drivers/char/Makefile linux-2.6.17.4-mips/drivers/char/Makefile
---- linux-2.6.17.4-kernel/drivers/char/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/char/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -31,6 +31,7 @@
- obj-$(CONFIG_A2232)		+= ser_a2232.o generic_serial.o
- obj-$(CONFIG_ATARI_DSP56K)	+= dsp56k.o
- obj-$(CONFIG_MOXA_SMARTIO)	+= mxser.o
-+obj-$(CONFIG_SIBYTE_SB1250_DUART) += sb1250_duart.o
- obj-$(CONFIG_COMPUTONE)		+= ip2/
- obj-$(CONFIG_RISCOM8)		+= riscom8.o
- obj-$(CONFIG_ISI)		+= isicom.o
-@@ -51,6 +52,7 @@
- obj-$(CONFIG_VIOTAPE)		+= viotape.o
- obj-$(CONFIG_HVCS)		+= hvcs.o
- obj-$(CONFIG_SGI_MBCS)		+= mbcs.o
-+obj-$(CONFIG_SERIAL_DEC)	+= decserial.o
- 
- obj-$(CONFIG_PRINTER)		+= lp.o
- obj-$(CONFIG_TIPAR)		+= tipar.o
-@@ -78,6 +80,10 @@
- obj-$(CONFIG_HW_RANDOM)		+= hw_random.o
- obj-$(CONFIG_FTAPE)		+= ftape/
- obj-$(CONFIG_COBALT_LCD)	+= lcd.o
-+obj-$(CONFIG_ITE_GPIO)		+= ite_gpio.o
-+obj-$(CONFIG_AU1000_GPIO)	+= au1000_gpio.o
-+obj-$(CONFIG_AU1000_USB_TTY)	+= au1000_usbtty.o
-+obj-$(CONFIG_AU1000_USB_RAW)	+= au1000_usbraw.o
- obj-$(CONFIG_PPDEV)		+= ppdev.o
- obj-$(CONFIG_NWBUTTON)		+= nwbutton.o
- obj-$(CONFIG_NWFLASH)		+= nwflash.o
-diff -Naur linux-2.6.17.4-kernel/drivers/char/qtronix.c linux-2.6.17.4-mips/drivers/char/qtronix.c
---- linux-2.6.17.4-kernel/drivers/char/qtronix.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/char/qtronix.c	2006-07-06 16:58:16.000000000 -0700
-@@ -535,8 +535,7 @@
- 		i--;
- 	}
- 	if (count-i) {
--		struct inode *inode = file->f_dentry->d_inode;
--		inode->i_atime = current_fs_time(inode->i_sb);
-+		file->f_dentry->d_inode->i_atime = get_seconds();
- 		return count-i;
- 	}
- 	if (signal_pending(current))
-diff -Naur linux-2.6.17.4-kernel/drivers/char/rtc.c linux-2.6.17.4-mips/drivers/char/rtc.c
---- linux-2.6.17.4-kernel/drivers/char/rtc.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/char/rtc.c	2006-07-06 16:58:16.000000000 -0700
-@@ -35,23 +35,22 @@
-  *	1.09a	Pete Zaitcev: Sun SPARC
-  *	1.09b	Jeff Garzik: Modularize, init cleanup
-  *	1.09c	Jeff Garzik: SMP cleanup
-- *	1.10    Paul Barton-Davis: add support for async I/O
-+ *	1.10	Paul Barton-Davis: add support for async I/O
-  *	1.10a	Andrea Arcangeli: Alpha updates
-  *	1.10b	Andrew Morton: SMP lock fix
-  *	1.10c	Cesar Barros: SMP locking fixes and cleanup
-  *	1.10d	Paul Gortmaker: delete paranoia check in rtc_exit
-  *	1.10e	Maciej W. Rozycki: Handle DECstation's year weirdness.
-- *      1.11    Takashi Iwai: Kernel access functions
-+ *	1.11	Takashi Iwai: Kernel access functions
-  *			      rtc_register/rtc_unregister/rtc_control
-  *      1.11a   Daniele Bellucci: Audit create_proc_read_entry in rtc_init
-- *	1.12	Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer
-+ *	1.12    Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer
-  *		CONFIG_HPET_EMULATE_RTC
-+ *	1.12a	Maciej W. Rozycki: Handle memory-mapped chips properly.
-  *	1.12ac	Alan Cox: Allow read access to the day of week register
-  */
- 
--#define RTC_VERSION		"1.12ac"
--
--#define RTC_IO_EXTENT	0x8
-+#define RTC_VERSION		"1.12a"
- 
- /*
-  *	Note that *all* calls to CMOS_READ and CMOS_WRITE are done with
-@@ -338,7 +337,15 @@
- 	if (rtc_has_irq == 0)
- 		return -EIO;
- 
--	if (count < sizeof(unsigned))
-+	/*
-+	 * Historically this function used to assume that sizeof(unsigned long)
-+	 * is the same in userspace and kernelspace.  This lead to problems
-+	 * for configurations with multiple ABIs such a the MIPS o32 and 64
-+	 * ABIs supported on the same kernel.  So now we support read of both
-+	 * 4 and 8 bytes and assume that's the sizeof(unsigned long) in the
-+	 * userspace ABI.
-+	 */
-+	if (count != sizeof(unsigned int) && count !=  sizeof(unsigned long))
- 		return -EINVAL;
- 
- 	add_wait_queue(&rtc_wait, &wait);
-@@ -369,10 +376,12 @@
- 		schedule();
- 	} while (1);
- 
--	if (count < sizeof(unsigned long))
--		retval = put_user(data, (unsigned int __user *)buf) ?: sizeof(int); 
-+	if (count == sizeof(unsigned int))
-+		retval = put_user(data, (unsigned int __user *)buf) ?: sizeof(int);
- 	else
- 		retval = put_user(data, (unsigned long __user *)buf) ?: sizeof(long);
-+	if (!retval)
-+		retval = count;
-  out:
- 	current->state = TASK_RUNNING;
- 	remove_wait_queue(&rtc_wait, &wait);
-@@ -924,6 +933,9 @@
- 	struct sparc_isa_device *isa_dev;
- #endif
- #endif
-+#ifndef __sparc__
-+	void *r;
-+#endif
- 
- #ifdef __sparc__
- 	for_each_ebus(ebus) {
-@@ -969,8 +981,13 @@
- 	}
- no_irq:
- #else
--	if (!request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc")) {
--		printk(KERN_ERR "rtc: I/O port %d is not free.\n", RTC_PORT (0));
-+	if (RTC_IOMAPPED)
-+		r = request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
-+	else
-+		r = request_mem_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
-+	if (!r) {
-+		printk(KERN_ERR "rtc: I/O resource %lx is not free.\n",
-+		       (long)(RTC_PORT(0)));
- 		return -EIO;
- 	}
- 
-@@ -984,7 +1001,10 @@
- 	if(request_irq(RTC_IRQ, rtc_int_handler_ptr, SA_INTERRUPT, "rtc", NULL)) {
- 		/* Yeah right, seeing as irq 8 doesn't even hit the bus. */
- 		printk(KERN_ERR "rtc: IRQ %d is not free.\n", RTC_IRQ);
--		release_region(RTC_PORT(0), RTC_IO_EXTENT);
-+		if (RTC_IOMAPPED)
-+			release_region(RTC_PORT(0), RTC_IO_EXTENT);
-+		else
-+			release_mem_region(RTC_PORT(0), RTC_IO_EXTENT);
- 		return -EIO;
- 	}
- 	hpet_rtc_timer_init();
-@@ -1084,7 +1104,10 @@
- 	if (rtc_has_irq)
- 		free_irq (rtc_irq, &rtc_port);
- #else
--	release_region (RTC_PORT (0), RTC_IO_EXTENT);
-+	if (RTC_IOMAPPED)
-+		release_region(RTC_PORT(0), RTC_IO_EXTENT);
-+	else
-+		release_mem_region(RTC_PORT(0), RTC_IO_EXTENT);
- #ifdef RTC_IRQ
- 	if (rtc_has_irq)
- 		free_irq (RTC_IRQ, NULL);
-diff -Naur linux-2.6.17.4-kernel/drivers/ide/mips/Makefile linux-2.6.17.4-mips/drivers/ide/mips/Makefile
---- linux-2.6.17.4-kernel/drivers/ide/mips/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/ide/mips/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -1,4 +1,4 @@
- obj-$(CONFIG_BLK_DEV_IDE_SWARM)		+= swarm.o
- obj-$(CONFIG_BLK_DEV_IDE_AU1XXX)	+= au1xxx-ide.o
- 
--EXTRA_CFLAGS    := -Idrivers/ide
-+CFLAGS_au1xxx-ide.o := -Idrivers/ide
-diff -Naur linux-2.6.17.4-kernel/drivers/mtd/devices/docprobe.c linux-2.6.17.4-mips/drivers/mtd/devices/docprobe.c
---- linux-2.6.17.4-kernel/drivers/mtd/devices/docprobe.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/mtd/devices/docprobe.c	2006-07-06 16:58:16.000000000 -0700
-@@ -84,10 +84,10 @@
- 	0xe4000000,
- #elif defined(CONFIG_MOMENCO_OCELOT)
- 	0x2f000000,
--        0xff000000,
-+	0xff000000,
- #elif defined(CONFIG_MOMENCO_OCELOT_G) || defined (CONFIG_MOMENCO_OCELOT_C)
--        0xff000000,
--##else
-+	0xff000000,
-+#else
- #warning Unknown architecture for DiskOnChip. No default probe locations defined
- #endif
- 	0xffffffff };
-diff -Naur linux-2.6.17.4-kernel/drivers/mtd/devices/Kconfig linux-2.6.17.4-mips/drivers/mtd/devices/Kconfig
---- linux-2.6.17.4-kernel/drivers/mtd/devices/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/mtd/devices/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -47,6 +47,11 @@
- 	  accelerator.  Say Y here if you have a DECstation 5000/2x0 or a
- 	  DECsystem 5900 equipped with such a module.
- 
-+	  If you want to compile this driver as a module ( = code which can be
-+	  inserted in and removed from the running kernel whenever you want),
-+	  say M here and read <file:Documentation/modules.txt>.  The module will
-+	  be called ms02-nv.o.
-+
- config MTD_DATAFLASH
- 	tristate "Support for AT45xxx DataFlash"
- 	depends on MTD && SPI_MASTER && EXPERIMENTAL
-diff -Naur linux-2.6.17.4-kernel/drivers/mtd/maps/Kconfig linux-2.6.17.4-mips/drivers/mtd/maps/Kconfig
---- linux-2.6.17.4-kernel/drivers/mtd/maps/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/mtd/maps/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -200,8 +200,8 @@
- 	  Support for the flash chip on Tsunami TIG bus.
- 
- config MTD_LASAT
--	tristate "Flash chips on LASAT board"
--	depends on LASAT
-+	tristate "LASAT flash device"
-+	depends on LASAT && MTD_CFI
- 	help
- 	  Support for the flash chips on the Lasat 100 and 200 boards.
- 
-@@ -299,6 +299,18 @@
- 	  Mapping for the Flaga digital module. If you don't have one, ignore
- 	  this setting.
- 
-+config MTD_XXS1500
-+	tristate "MyCable XXS1500 Flash device"
-+	depends on MIPS && MIPS_XXS1500
-+	help
-+	  Flash memory access on MyCable XXS1500 Board
-+
-+config MTD_MTX1
-+	tristate "4-G Systems MTX-1 Flash device"
-+	depends on MIPS && MIPS_MTX1
-+	help
-+	  Flash memory access on 4-G Systems MTX-1 Board
-+
- config MTD_BEECH
- 	tristate "CFI Flash device mapped on IBM 405LP Beech"
- 	depends on MTD_CFI && BEECH
-diff -Naur linux-2.6.17.4-kernel/drivers/mtd/maps/lasat.c linux-2.6.17.4-mips/drivers/mtd/maps/lasat.c
---- linux-2.6.17.4-kernel/drivers/mtd/maps/lasat.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/mtd/maps/lasat.c	2006-07-06 16:58:16.000000000 -0700
-@@ -7,7 +7,7 @@
-  * modify it under the terms of the GNU General Public License version
-  * 2 as published by the Free Software Foundation.
-  *
-- * $Id: lasat.c,v 1.9 2004/11/04 13:24:15 gleixner Exp $
-+ * $Id: lasat.c,v 1.7 2004/07/12 21:59:44 dwmw2 Exp $
-  *
-  */
- 
-@@ -50,7 +50,7 @@
- 	ENABLE_VPP((&lasat_map));
- 
- 	lasat_map.phys = lasat_flash_partition_start(LASAT_MTD_BOOTLOADER);
--	lasat_map.virt = ioremap_nocache(
-+	lasat_map.virt = (unsigned long)ioremap_nocache(
- 		        lasat_map.phys, lasat_board_info.li_flash_size);
- 	lasat_map.size = lasat_board_info.li_flash_size;
- 
-diff -Naur linux-2.6.17.4-kernel/drivers/net/declance.c linux-2.6.17.4-mips/drivers/net/declance.c
---- linux-2.6.17.4-kernel/drivers/net/declance.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/net/declance.c	2006-07-06 16:58:16.000000000 -0700
-@@ -704,8 +704,8 @@
- 	return IRQ_HANDLED;
- }
- 
--static irqreturn_t
--lance_interrupt(const int irq, void *dev_id, struct pt_regs *regs)
-+static irqreturn_t lance_interrupt(const int irq, void *dev_id,
-+				   struct pt_regs *regs)
- {
- 	struct net_device *dev = (struct net_device *) dev_id;
- 	struct lance_private *lp = netdev_priv(dev);
-@@ -1255,7 +1255,7 @@
- 	return 0;
- 
- err_out_free_dev:
--	kfree(dev);
-+	free_netdev(dev);
- 
- err_out:
- 	return ret;
-@@ -1301,6 +1301,7 @@
- 	while (root_lance_dev) {
- 		struct net_device *dev = root_lance_dev;
- 		struct lance_private *lp = netdev_priv(dev);
-+
- 		unregister_netdev(dev);
- #ifdef CONFIG_TC
- 		if (lp->slot >= 0)
-diff -Naur linux-2.6.17.4-kernel/drivers/net/gt64240eth.h linux-2.6.17.4-mips/drivers/net/gt64240eth.h
---- linux-2.6.17.4-kernel/drivers/net/gt64240eth.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/net/gt64240eth.h	2006-07-06 16:58:16.000000000 -0700
-@@ -9,6 +9,7 @@
-  * Copyright 2000 MontaVista Software Inc.
-  * Author: MontaVista Software, Inc.
-  *         	stevel at mvista.com or support at mvista.com
-+ * Copyright 2004, 05 Ralf Baechle (ralf at linux-mips.org)
-  *
-  *  This program is free software; you can distribute it and/or modify it
-  *  under the terms of the GNU General Public License (Version 2) as
-@@ -31,6 +32,7 @@
- #ifndef _GT64240ETH_H
- #define _GT64240ETH_H
- 
-+#include <linux/config.h>
- #include <asm/gt64240.h>
- 
- #define ETHERNET_PORTS_DIFFERENCE_OFFSETS	0x400
-@@ -108,10 +110,10 @@
- #define REV_GT64240A 0x10
- 
- #define GT64240ETH_READ(gp, offset)					\
--	GT_READ((gp)->port_offset + (offset))
-+	MV_READ((gp)->port_offset + (offset))
- 
- #define GT64240ETH_WRITE(gp, offset, data)				\
--	GT_WRITE((gp)->port_offset + (offset), (data))
-+	MV_WRITE((gp)->port_offset + (offset), (data))
- 
- #define GT64240ETH_SETBIT(gp, offset, bits)				\
- 	GT64240ETH_WRITE((gp), (offset),				\
-@@ -121,8 +123,8 @@
- 	GT64240ETH_WRITE((gp), (offset),				\
- 	                 GT64240ETH_READ((gp), (offset)) & ~(bits))
- 
--#define GT64240_READ(ofs)		GT_READ(ofs)
--#define GT64240_WRITE(ofs, data)	GT_WRITE((ofs), (data))
-+#define GT64240_READ(ofs)		MV_READ(ofs)
-+#define GT64240_WRITE(ofs, data)	MV_WRITE((ofs), (data))
- 
- /* Bit definitions of the SMI Reg */
- enum {
-diff -Naur linux-2.6.17.4-kernel/drivers/net/Kconfig linux-2.6.17.4-mips/drivers/net/Kconfig
---- linux-2.6.17.4-kernel/drivers/net/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/net/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -438,6 +438,14 @@
- 	  This is the driver for the onboard card of MIPS Magnum 4000,
- 	  Acer PICA, Olivetti M700-10 and a few other identical OEM systems.
- 
-+config GALILEO_64240_ETH
-+	tristate "Galileo GT64240 Ethernet support"
-+	depends on NET_ETHERNET && MOMENCO_OCELOT_G
-+	select MII
-+	help
-+	  This is the driver for the ethernet interfaces integrated into
-+	  the Galileo (now Marvell) GT64240 chipset.
-+
- config MIPS_GT96100ETH
- 	bool "MIPS GT96100 Ethernet support"
- 	depends on NET_ETHERNET && MIPS_GT96100
-@@ -452,10 +460,6 @@
- 	  If you have an Alchemy Semi AU1X00 based system
- 	  say Y.  Otherwise, say N.
- 
--config NET_SB1250_MAC
--	tristate "SB1250 Ethernet support"
--	depends on NET_ETHERNET && SIBYTE_SB1xxx_SOC
--
- config SGI_IOC3_ETH
- 	bool "SGI IOC3 Ethernet"
- 	depends on NET_ETHERNET && PCI && SGI_IP27
-@@ -494,6 +498,14 @@
- 	  emulated by the MIPS Simulator.
- 	  If you are not using a MIPSsim or are unsure, say N.
- 
-+config MIPS_SIM_NET
-+	tristate "MIPS simulator Network device (EXPERIMENTAL)"
-+	depends on NETDEVICES && MIPS_SIM && EXPERIMENTAL
-+	help
-+	  The MIPSNET device is a simple Ethernet network device which is
-+	  emulated by the MIPS Simulator.
-+	  If you are not using a MIPSsim or are unsure, say N.
-+
- config SGI_O2MACE_ETH
- 	tristate "SGI O2 MACE Fast Ethernet support"
- 	depends on NET_ETHERNET && SGI_IP32=y
-@@ -1993,6 +2005,10 @@
- 
- 	  If in doubt, say N.
- 
-+config NET_SB1250_MAC
-+	tristate "SB1250 Ethernet support"
-+	depends on SIBYTE_SB1xxx_SOC
-+
- config R8169_VLAN
- 	bool "VLAN support"
- 	depends on R8169 && VLAN_8021Q
-@@ -2195,8 +2211,8 @@
- 	select MII
- 	help
- 	  This driver supports the gigabit Ethernet on the Marvell MV643XX
--	  chipset which is used in the Momenco Ocelot C and Jaguar ATX and
--	  Pegasos II, amongst other PPC and MIPS boards.
-+	  chipset which is used in the Momenco Ocelot C Ocelot, Jaguar ATX
-+	  and Pegasos II, amongst other PPC and MIPS boards.
- 
- config MV643XX_ETH_0
- 	bool "MV-643XX Port 0"
-@@ -2219,6 +2235,20 @@
- 	  This enables support for Port 2 of the Marvell MV643XX Gigabit
- 	  Ethernet.
- 
-+config BIG_SUR_FE
-+	bool "PMC-Sierra TITAN Fast Ethernet Support"
-+	depends on NET_ETHERNET && PMC_BIG_SUR
-+	help
-+	  This enables support for the the integrated ethernet of
-+	  PMC-Sierra's Big Sur SoC.
-+
-+config TITAN_GE
-+	bool "PMC-Sierra TITAN Gigabit Ethernet Support"
-+	depends on PMC_YOSEMITE
-+	help
-+	  This enables support for the the integrated ethernet of
-+	  PMC-Sierra's Titan SoC.
-+
- endmenu
- 
- #
-diff -Naur linux-2.6.17.4-kernel/drivers/net/Makefile linux-2.6.17.4-mips/drivers/net/Makefile
---- linux-2.6.17.4-kernel/drivers/net/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/net/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -111,6 +111,11 @@
- 
- obj-$(CONFIG_MV643XX_ETH) += mv643xx_eth.o
- 
-+obj-$(CONFIG_GALILEO_64240_ETH) += gt64240eth.o
-+obj-$(CONFIG_MV64340_ETH) += mv64340_eth.o
-+obj-$(CONFIG_BIG_SUR_FE) += big_sur_ge.o
-+obj-$(CONFIG_TITAN_GE) += titan_mdio.o titan_ge.o
-+
- obj-$(CONFIG_PPP) += ppp_generic.o slhc.o
- obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
- obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
-diff -Naur linux-2.6.17.4-kernel/drivers/net/sb1250-mac.c linux-2.6.17.4-mips/drivers/net/sb1250-mac.c
---- linux-2.6.17.4-kernel/drivers/net/sb1250-mac.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/net/sb1250-mac.c	2006-07-06 16:58:16.000000000 -0700
-@@ -156,6 +156,10 @@
- 
- #define NUMCACHEBLKS(x) (((x)+SMP_CACHE_BYTES-1)/SMP_CACHE_BYTES)
- 
-+#define SBMAC_READCSR(t)	__raw_readq((unsigned long)t)
-+#define SBMAC_WRITECSR(t,v)	__raw_writeq(v, (unsigned long)t)
-+
-+
- #define SBMAC_MAX_TXDESCR	32
- #define SBMAC_MAX_RXDESCR	32
- 
-@@ -2416,6 +2420,11 @@
- 			sc->sbm_dev->name);
- 	}
- 
-+	if (periph_rev >= 2) {
-+		printk(KERN_INFO "%s: enabling TCP rcv checksum\n",
-+			sc->sbm_dev->name);
-+	}
-+
- 	/*
- 	 * Display Ethernet address (this is called during the config
- 	 * process so we need to finish off the config message that
-diff -Naur linux-2.6.17.4-kernel/drivers/scsi/dec_esp.c linux-2.6.17.4-mips/drivers/scsi/dec_esp.c
---- linux-2.6.17.4-kernel/drivers/scsi/dec_esp.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/scsi/dec_esp.c	2006-07-06 16:58:16.000000000 -0700
-@@ -55,7 +55,7 @@
- 
- static int  dma_bytes_sent(struct NCR_ESP *esp, int fifo_count);
- static void dma_drain(struct NCR_ESP *esp);
--static int  dma_can_transfer(struct NCR_ESP *esp, struct scsi_cmnd *sp);
-+static int  dma_can_transfer(struct NCR_ESP *esp, struct scsi_cmnd * sp);
- static void dma_dump_state(struct NCR_ESP *esp);
- static void dma_init_read(struct NCR_ESP *esp, u32 vaddress, int length);
- static void dma_init_write(struct NCR_ESP *esp, u32 vaddress, int length);
-@@ -230,7 +230,7 @@
- 			mem_start = get_tc_base_addr(slot);
- 
- 			/* Store base addr into esp struct */
--			esp->slot = CPHYSADDR(mem_start);
-+			esp->slot = mem_start;
- 
- 			esp->dregs = 0;
- 			esp->eregs = (void *)CKSEG1ADDR(mem_start +
-diff -Naur linux-2.6.17.4-kernel/drivers/scsi/NCR53C9x.h linux-2.6.17.4-mips/drivers/scsi/NCR53C9x.h
---- linux-2.6.17.4-kernel/drivers/scsi/NCR53C9x.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/scsi/NCR53C9x.h	2006-07-06 16:58:16.000000000 -0700
-@@ -145,12 +145,7 @@
- 
- #ifndef MULTIPLE_PAD_SIZES
- 
--#ifdef CONFIG_CPU_HAS_WB
--#include <asm/wbflush.h>
--#define esp_write(__reg, __val) do{(__reg) = (__val); wbflush();} while(0)
--#else
--#define esp_write(__reg, __val) ((__reg) = (__val))
--#endif
-+#define esp_write(__reg, __val) do{(__reg) = (__val); iob();} while(0)
- #define esp_read(__reg) (__reg)
- 
- struct ESP_regs {
-diff -Naur linux-2.6.17.4-kernel/drivers/scsi/sgiwd93.c linux-2.6.17.4-mips/drivers/scsi/sgiwd93.c
---- linux-2.6.17.4-kernel/drivers/scsi/sgiwd93.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/scsi/sgiwd93.c	2006-07-06 16:58:16.000000000 -0700
-@@ -14,6 +14,7 @@
- #include <linux/interrupt.h>
- #include <linux/types.h>
- #include <linux/mm.h>
-+#include <linux/module.h>
- #include <linux/blkdev.h>
- #include <linux/delay.h>
- #include <linux/dma-mapping.h>
-@@ -197,6 +198,7 @@
- 	udelay(50);
- 	hregs->ctrl = 0;
- }
-+EXPORT_SYMBOL_GPL(sgiwd93_reset);
- 
- static inline void init_hpc_chain(struct hpc_data *hd)
- {
-diff -Naur linux-2.6.17.4-kernel/drivers/serial/ip22zilog.c linux-2.6.17.4-mips/drivers/serial/ip22zilog.c
---- linux-2.6.17.4-kernel/drivers/serial/ip22zilog.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/serial/ip22zilog.c	2006-07-06 16:58:16.000000000 -0700
-@@ -866,6 +866,7 @@
- 	up->cflag = termios->c_cflag;
- 
- 	ip22zilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(port));
-+	uart_update_timeout(port, termios->c_cflag, baud);
- 
- 	spin_unlock_irqrestore(&up->port.lock, flags);
- }
-@@ -1027,6 +1028,8 @@
- 	}
- 
- 	con->cflag = cflag | CS8;			/* 8N1 */
-+
-+	uart_update_timeout(&ip22zilog_port_table[con->index].port, cflag, baud);
- }
- 
- static int __init ip22zilog_console_setup(struct console *con, char *options)
-diff -Naur linux-2.6.17.4-kernel/drivers/serial/Kconfig linux-2.6.17.4-mips/drivers/serial/Kconfig
---- linux-2.6.17.4-kernel/drivers/serial/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/serial/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -647,6 +647,25 @@
- 	depends on SERIAL_SH_SCI=y
- 	select SERIAL_CORE_CONSOLE
- 
-+config SERIAL_IP3106
-+	bool "Enable IP3106 UART Support (Philips PNX 8xx0 SoCs)"
-+	depends on MIPS && (SOC_PNX8550 || SOC_PNX8330)
-+	select SERIAL_CORE
-+	help
-+	  If you have a Philips SoC with an IP 3106 UART in it, such as
-+	  the PNX8550 or PNX8330 (MIPS based) and you want to use
-+	  serial ports, say Y.  Otherwise, say N.
-+
-+config SERIAL_IP3106_CONSOLE
-+	bool "Enable PNX8XX0 serial console"
-+	depends on SERIAL_IP3106
-+	select SERIAL_CORE_CONSOLE
-+	help
-+	  If you have a Philips SoC with an IP 3106 UART in it, such as
-+	  the PNX8550 or PNX8330 (MIPS based) and you want to use
-+	  a serial console, say Y.
-+	  Otherwise, say N.
-+
- config SERIAL_CORE
- 	tristate
- 
-diff -Naur linux-2.6.17.4-kernel/drivers/serial/Makefile linux-2.6.17.4-mips/drivers/serial/Makefile
---- linux-2.6.17.4-kernel/drivers/serial/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/serial/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -39,6 +39,7 @@
- obj-$(CONFIG_V850E_UART) += v850e_uart.o
- obj-$(CONFIG_SERIAL_PMACZILOG) += pmac_zilog.o
- obj-$(CONFIG_SERIAL_LH7A40X) += serial_lh7a40x.o
-+obj-$(CONFIG_SERIAL_IP3106) += ip3106_uart.o
- obj-$(CONFIG_SERIAL_DZ) += dz.o
- obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o
- obj-$(CONFIG_SERIAL_SGI_L1_CONSOLE) += sn_console.o
-diff -Naur linux-2.6.17.4-kernel/drivers/usb/gadget/net2280.c linux-2.6.17.4-mips/drivers/usb/gadget/net2280.c
---- linux-2.6.17.4-kernel/drivers/usb/gadget/net2280.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/usb/gadget/net2280.c	2006-07-06 16:58:16.000000000 -0700
-@@ -468,7 +468,8 @@
- #elif	defined(CONFIG_PPC) && !defined(CONFIG_NOT_COHERENT_CACHE)
- #define USE_KMALLOC
- 
--#elif	defined(CONFIG_MIPS) && !defined(CONFIG_DMA_NONCOHERENT)
-+#elif	defined(CONFIG_MIPS) && \
-+	(defined(CONFIG_DMA_COHERENT) || defined(CONFIG_DMA_IP27))
- #define USE_KMALLOC
- 
- /* FIXME there are other cases, including an x86-64 one ...  */
-diff -Naur linux-2.6.17.4-kernel/drivers/usb/host/ohci-hcd.c linux-2.6.17.4-mips/drivers/usb/host/ohci-hcd.c
---- linux-2.6.17.4-kernel/drivers/usb/host/ohci-hcd.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/usb/host/ohci-hcd.c	2006-07-06 16:58:16.000000000 -0700
-@@ -906,6 +906,10 @@
- #include "ohci-au1xxx.c"
- #endif
- 
-+#ifdef CONFIG_PNX8550
-+#include "ohci-pnx8550.c"
-+#endif
-+
- #ifdef CONFIG_USB_OHCI_HCD_PPC_SOC
- #include "ohci-ppc-soc.c"
- #endif
-diff -Naur linux-2.6.17.4-kernel/drivers/video/au1100fb.c linux-2.6.17.4-mips/drivers/video/au1100fb.c
---- linux-2.6.17.4-kernel/drivers/video/au1100fb.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/video/au1100fb.c	2006-07-06 16:58:16.000000000 -0700
-@@ -38,6 +38,7 @@
-  *  with this program; if not, write  to the Free Software Foundation, Inc.,
-  *  675 Mass Ave, Cambridge, MA 02139, USA.
-  */
-+
- #include <linux/config.h>
- #include <linux/module.h>
- #include <linux/kernel.h>
-diff -Naur linux-2.6.17.4-kernel/drivers/video/Kconfig linux-2.6.17.4-mips/drivers/video/Kconfig
---- linux-2.6.17.4-kernel/drivers/video/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/video/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -1142,6 +1142,17 @@
- 	  Please read the <file:Documentation/fb/README-sstfb.txt> for supported
- 	  options and other important info  support.
- 
-+config FB_SMIVGX
-+	tristate "Silicon Motion VoyagerGX support"
-+	depends on FB && PCI && (MIPS || EXPERIMENTAL)
-+	select FB_CFB_FILLRECT
-+	select FB_CFB_COPYAREA
-+	select FB_CFB_IMAGEBLIT
-+	---help---
-+	  This drivers supports SMI VoyagerGX 501 based PCI boards
-+	  The default settings drive both a CRT and LCD.  The CRT
-+	  can be turned off by passing in the no_crt option
-+
- config FB_CYBLA
- 	tristate "Cyberblade/i1 support"
- 	depends on FB && PCI && X86_32 && !64BIT
-@@ -1206,7 +1217,25 @@
- 
- config FB_AU1100
- 	bool "Au1100 LCD Driver"
--	depends on (FB = y) && EXPERIMENTAL && PCI && MIPS && MIPS_PB1100=y
-+	depends on FB && MIPS && SOC_AU1100
-+	select FB_CFB_FILLRECT
-+	select FB_CFB_COPYAREA
-+	select FB_CFB_IMAGEBLIT
-+	help
-+	  This is the framebuffer driver for the AMD Au1100 SOC.  It can drive
-+	  various panels and CRTs by passing in kernel cmd line option
-+	  au1100fb:panel=<name>.
-+
-+config FB_AU1200
-+	bool "Au1200 LCD Driver"
-+	depends on FB && MIPS && SOC_AU1200
-+	select FB_CFB_FILLRECT
-+	select FB_CFB_COPYAREA
-+	select FB_CFB_IMAGEBLIT
-+	help
-+	  This is the framebuffer driver for the AMD Au1200 SOC.  It can drive
-+	  various panels and CRTs by passing in kernel cmd line option
-+	  au1200fb:panel=<name>.
- 
- config FB_AU1200
- 	bool "Au1200 LCD Driver"
-@@ -1322,8 +1351,8 @@
-  	select FB_CFB_IMAGEBLIT
- 	help
- 	  Support for the PMAGB-B TURBOchannel framebuffer card used mainly
--	  in the MIPS-based DECstation series. The card is currently only
--	  supported in 1280x1024x8 mode.
-+	  in the MIPS-based DECstation series. The card is currently only 
-+	  supported in 1280x1024x8 mode.  
- 
- config FB_MAXINE
- 	bool "Maxine (Personal DECstation) onboard framebuffer support"
-diff -Naur linux-2.6.17.4-kernel/drivers/video/Makefile linux-2.6.17.4-mips/drivers/video/Makefile
---- linux-2.6.17.4-kernel/drivers/video/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/drivers/video/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -93,6 +93,7 @@
- obj-$(CONFIG_FB_TX3912)		  += tx3912fb.o
- obj-$(CONFIG_FB_S1D13XXX)	  += s1d13xxxfb.o
- obj-$(CONFIG_FB_IMX)              += imxfb.o
-+obj-$(CONFIG_FB_SMIVGX)		  += smivgxfb.o
- obj-$(CONFIG_FB_S3C2410)	  += s3c2410fb.o
- 
- # Platform or fallback drivers go here
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/asmmacro-32.h linux-2.6.17.4-mips/include/asm-mips/asmmacro-32.h
---- linux-2.6.17.4-kernel/include/asm-mips/asmmacro-32.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/asmmacro-32.h	2006-07-06 16:58:16.000000000 -0700
-@@ -12,7 +12,7 @@
- #include <asm/fpregdef.h>
- #include <asm/mipsregs.h>
- 
--	.macro	fpu_save_double thread status tmp1=t0 tmp2
-+	.macro	fpu_save_double thread status tmp1=t0
- 	cfc1	\tmp1,  fcr31
- 	sdc1	$f0,  THREAD_FPR0(\thread)
- 	sdc1	$f2,  THREAD_FPR2(\thread)
-@@ -70,7 +70,7 @@
- 	sw	\tmp, THREAD_FCR31(\thread)
- 	.endm
- 
--	.macro	fpu_restore_double thread tmp=t0
-+	.macro	fpu_restore_double thread status tmp=t0
- 	lw	\tmp, THREAD_FCR31(\thread)
- 	ldc1	$f0,  THREAD_FPR0(\thread)
- 	ldc1	$f2,  THREAD_FPR2(\thread)
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/asmmacro-64.h linux-2.6.17.4-mips/include/asm-mips/asmmacro-64.h
---- linux-2.6.17.4-kernel/include/asm-mips/asmmacro-64.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/asmmacro-64.h	2006-07-06 16:58:16.000000000 -0700
-@@ -53,12 +53,12 @@
- 	sdc1	$f31, THREAD_FPR31(\thread)
- 	.endm
- 
--	.macro	fpu_save_double thread status tmp1 tmp2
--	sll	\tmp2, \tmp1, 5
--	bgez	\tmp2, 2f
-+	.macro	fpu_save_double thread status tmp
-+	sll	\tmp, \status, 5
-+	bgez	\tmp, 2f
- 	fpu_save_16odd \thread
- 2:
--	fpu_save_16even \thread \tmp1			# clobbers t1
-+	fpu_save_16even \thread \tmp
- 	.endm
- 
- 	.macro	fpu_restore_16even thread tmp=t0
-@@ -101,13 +101,12 @@
- 	ldc1	$f31, THREAD_FPR31(\thread)
- 	.endm
- 
--	.macro	fpu_restore_double thread tmp
--	mfc0	t0, CP0_STATUS
--	sll	t1, t0, 5
--	bgez	t1, 1f				# 16 register mode?
-+	.macro	fpu_restore_double thread status tmp
-+	sll	\tmp, \status, 5
-+	bgez	\tmp, 1f				# 16 register mode?
- 
--	fpu_restore_16odd a0
--1:	fpu_restore_16even a0, t0		# clobbers t0
-+	fpu_restore_16odd \thread
-+1:	fpu_restore_16even \thread \tmp
- 	.endm
- 
- 	.macro	cpu_save_nonscratch thread
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/asmmacro.h linux-2.6.17.4-mips/include/asm-mips/asmmacro.h
---- linux-2.6.17.4-kernel/include/asm-mips/asmmacro.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/asmmacro.h	2006-07-06 16:58:16.000000000 -0700
-@@ -27,14 +27,14 @@
- 	ori	\reg, \reg, TCSTATUS_IXMT
- 	xori	\reg, \reg, TCSTATUS_IXMT
- 	mtc0	\reg, CP0_TCSTATUS
--	ehb
-+	_ehb
- 	.endm
- 
- 	.macro	local_irq_disable reg=t0
- 	mfc0	\reg, CP0_TCSTATUS
- 	ori	\reg, \reg, TCSTATUS_IXMT
- 	mtc0	\reg, CP0_TCSTATUS
--	ehb
-+	_ehb
- 	.endm
- #else
- 	.macro	local_irq_enable reg=t0
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/cpu-features.h linux-2.6.17.4-mips/include/asm-mips/cpu-features.h
---- linux-2.6.17.4-kernel/include/asm-mips/cpu-features.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/cpu-features.h	2006-07-06 16:58:16.000000000 -0700
-@@ -144,12 +144,8 @@
- #define cpu_has_dsp		(cpu_data[0].ases & MIPS_ASE_DSP)
- #endif
- 
--#ifdef CONFIG_MIPS_MT
- #ifndef cpu_has_mipsmt
--# define cpu_has_mipsmt		(cpu_data[0].ases & MIPS_ASE_MIPSMT)
--#endif
--#else
--# define cpu_has_mipsmt		0
-+#define cpu_has_mipsmt		(cpu_data[0].ases & MIPS_ASE_MIPSMT)
- #endif
- 
- #ifdef CONFIG_32BIT
-@@ -188,19 +184,15 @@
- # endif
- #endif
- 
--#ifdef CONFIG_CPU_MIPSR2
--# if defined(CONFIG_CPU_MIPSR2_IRQ_VI) && !defined(cpu_has_vint)
--#  define cpu_has_vint		(cpu_data[0].options & MIPS_CPU_VINT)
--# else
--#  define cpu_has_vint			0
--# endif
--# if defined(CONFIG_CPU_MIPSR2_IRQ_EI) && !defined(cpu_has_veic)
--#  define cpu_has_veic		(cpu_data[0].options & MIPS_CPU_VEIC)
--# else
--#  define cpu_has_veic			0
--# endif
--#else
-+#if defined(CONFIG_CPU_MIPSR2_IRQ_VI) && !defined(cpu_has_vint)
-+# define cpu_has_vint		(cpu_data[0].options & MIPS_CPU_VINT)
-+#elif !defined(cpu_has_vint)
- # define cpu_has_vint			0
-+#endif
-+
-+#if defined(CONFIG_CPU_MIPSR2_IRQ_EI) && !defined(cpu_has_veic)
-+# define cpu_has_veic		(cpu_data[0].options & MIPS_CPU_VEIC)
-+#elif !defined(cpu_has_veic)
- # define cpu_has_veic			0
- #endif
- 
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/futex.h linux-2.6.17.4-mips/include/asm-mips/futex.h
---- linux-2.6.17.4-kernel/include/asm-mips/futex.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/futex.h	2006-07-06 16:58:16.000000000 -0700
-@@ -22,51 +22,53 @@
- 		"	.set	push				\n"	\
- 		"	.set	noat				\n"	\
- 		"	.set	mips3				\n"	\
--		"1:	ll	%1, (%3)	# __futex_atomic_op	\n" \
-+		"1:	ll	%1, %4	# __futex_atomic_op	\n"	\
- 		"	.set	mips0				\n"	\
- 		"	" insn	"				\n"	\
- 		"	.set	mips3				\n"	\
--		"2:	sc	$1, (%3)			\n"	\
-+		"2:	sc	$1, %2				\n"	\
- 		"	beqzl	$1, 1b				\n"	\
- 		__FUTEX_SMP_SYNC					\
- 		"3:						\n"	\
- 		"	.set	pop				\n"	\
- 		"	.set	mips0				\n"	\
- 		"	.section .fixup,\"ax\"			\n"	\
--		"4:	li	%0, %5				\n"	\
-+		"4:	li	%0, %6				\n"	\
- 		"	j	2b				\n"	\
- 		"	.previous				\n"	\
- 		"	.section __ex_table,\"a\"		\n"	\
- 		"	"__UA_ADDR "\t1b, 4b			\n"	\
- 		"	"__UA_ADDR "\t2b, 4b			\n"	\
- 		"	.previous				\n"	\
--		: "=r" (ret), "=r" (oldval)				\
--		: "0" (0), "r" (uaddr), "Jr" (oparg), "i" (-EFAULT));	\
-+		: "=r" (ret), "=&r" (oldval), "=R" (*uaddr)		\
-+		: "0" (0), "R" (*uaddr), "Jr" (oparg), "i" (-EFAULT)	\
-+		: "memory");						\
- 	} else if (cpu_has_llsc) {					\
- 		__asm__ __volatile__(					\
- 		"	.set	push				\n"	\
- 		"	.set	noat				\n"	\
- 		"	.set	mips3				\n"	\
--		"1:	ll	%1, (%3)	# __futex_atomic_op	\n" \
-+		"1:	ll	%1, %4	# __futex_atomic_op	\n"	\
- 		"	.set	mips0				\n"	\
- 		"	" insn	"				\n"	\
- 		"	.set	mips3				\n"	\
--		"2:	sc	$1, (%3)			\n"	\
-+		"2:	sc	$1, %2				\n"	\
- 		"	beqz	$1, 1b				\n"	\
- 		__FUTEX_SMP_SYNC					\
- 		"3:						\n"	\
- 		"	.set	pop				\n"	\
- 		"	.set	mips0				\n"	\
- 		"	.section .fixup,\"ax\"			\n"	\
--		"4:	li	%0, %5				\n"	\
-+		"4:	li	%0, %6				\n"	\
- 		"	j	2b				\n"	\
- 		"	.previous				\n"	\
- 		"	.section __ex_table,\"a\"		\n"	\
- 		"	"__UA_ADDR "\t1b, 4b			\n"	\
- 		"	"__UA_ADDR "\t2b, 4b			\n"	\
- 		"	.previous				\n"	\
--		: "=r" (ret), "=r" (oldval)				\
--		: "0" (0), "r" (uaddr), "Jr" (oparg), "i" (-EFAULT));	\
-+		: "=r" (ret), "=&r" (oldval), "=R" (*uaddr)		\
-+		: "0" (0), "R" (*uaddr), "Jr" (oparg), "i" (-EFAULT)	\
-+		: "memory");						\
- 	} else								\
- 		ret = -ENOSYS;						\
- }
-@@ -89,23 +91,23 @@
- 
- 	switch (op) {
- 	case FUTEX_OP_SET:
--		__futex_atomic_op("move	$1, %z4", ret, oldval, uaddr, oparg);
-+		__futex_atomic_op("move	$1, %z5", ret, oldval, uaddr, oparg);
- 		break;
- 
- 	case FUTEX_OP_ADD:
--		__futex_atomic_op("addu	$1, %1, %z4",
-+		__futex_atomic_op("addu	$1, %1, %z5",
- 		                  ret, oldval, uaddr, oparg);
- 		break;
- 	case FUTEX_OP_OR:
--		__futex_atomic_op("or	$1, %1, %z4",
-+		__futex_atomic_op("or	$1, %1, %z5",
- 		                  ret, oldval, uaddr, oparg);
- 		break;
- 	case FUTEX_OP_ANDN:
--		__futex_atomic_op("and	$1, %1, %z4",
-+		__futex_atomic_op("and	$1, %1, %z5",
- 		                  ret, oldval, uaddr, ~oparg);
- 		break;
- 	case FUTEX_OP_XOR:
--		__futex_atomic_op("xor	$1, %1, %z4",
-+		__futex_atomic_op("xor	$1, %1, %z5",
- 		                  ret, oldval, uaddr, oparg);
- 		break;
- 	default:
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/hazards.h linux-2.6.17.4-mips/include/asm-mips/hazards.h
---- linux-2.6.17.4-kernel/include/asm-mips/hazards.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/hazards.h	2006-07-06 16:58:16.000000000 -0700
-@@ -70,10 +70,10 @@
-  * Use a macro for ehb unless explicit support for MIPSR2 is enabled
-  */
- 
--#define irq_enable_hazard
-+#define irq_enable_hazard						\
- 	_ehb
- 
--#define irq_disable_hazard
-+#define irq_disable_hazard						\
- 	_ehb
- 
- #elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_RM9000)
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/io.h linux-2.6.17.4-mips/include/asm-mips/io.h
---- linux-2.6.17.4-kernel/include/asm-mips/io.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/io.h	2006-07-06 16:58:16.000000000 -0700
-@@ -519,34 +519,6 @@
- }
- 
- /*
-- * Memory Mapped I/O
-- */
--#define ioread8(addr)		readb(addr)
--#define ioread16(addr)		readw(addr)
--#define ioread32(addr)		readl(addr)
--
--#define iowrite8(b,addr)	writeb(b,addr)
--#define iowrite16(w,addr)	writew(w,addr)
--#define iowrite32(l,addr)	writel(l,addr)
--
--#define ioread8_rep(a,b,c)	readsb(a,b,c)
--#define ioread16_rep(a,b,c)	readsw(a,b,c)
--#define ioread32_rep(a,b,c)	readsl(a,b,c)
--
--#define iowrite8_rep(a,b,c)	writesb(a,b,c)
--#define iowrite16_rep(a,b,c)	writesw(a,b,c)
--#define iowrite32_rep(a,b,c)	writesl(a,b,c)
--
--/* Create a virtual mapping cookie for an IO port range */
--extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
--extern void ioport_unmap(void __iomem *);
--
--/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
--struct pci_dev;
--extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
--extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
--
--/*
-  * ISA space is 'always mapped' on currently supported MIPS systems, no need
-  * to explicitly ioremap() it. The fact that the ISA IO space is mapped
-  * to PAGE_OFFSET is pure coincidence - it does not mean ISA values
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/irq.h linux-2.6.17.4-mips/include/asm-mips/irq.h
---- linux-2.6.17.4-kernel/include/asm-mips/irq.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/irq.h	2006-07-06 16:58:16.000000000 -0700
-@@ -77,4 +77,8 @@
-                           unsigned long hwmask);
- #endif /* CONFIG_MIPS_MT_SMTC */
- 
-+#ifdef CONFIG_SMP
-+#define ARCH_HAS_IRQ_PER_CPU
-+#endif
-+
- #endif /* _ASM_IRQ_H */
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/mach-au1x00/au1xxx_ide.h linux-2.6.17.4-mips/include/asm-mips/mach-au1x00/au1xxx_ide.h
---- linux-2.6.17.4-kernel/include/asm-mips/mach-au1x00/au1xxx_ide.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/mach-au1x00/au1xxx_ide.h	2006-07-06 16:58:16.000000000 -0700
-@@ -84,6 +84,7 @@
- } _auide_hwif;
- 
- #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
-+
- /* HD white list */
- static const struct drive_list_entry dma_white_list [] = {
- /*
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/mach-mips/irq.h linux-2.6.17.4-mips/include/asm-mips/mach-mips/irq.h
---- linux-2.6.17.4-kernel/include/asm-mips/mach-mips/irq.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/mach-mips/irq.h	2006-07-06 16:58:16.000000000 -0700
-@@ -5,10 +5,4 @@
- 
- #define NR_IRQS	256
- 
--#ifdef CONFIG_SMP
--
--#define ARCH_HAS_IRQ_PER_CPU
--
--#endif
--
- #endif /* __ASM_MACH_MIPS_IRQ_H */
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/mipsregs.h linux-2.6.17.4-mips/include/asm-mips/mipsregs.h
---- linux-2.6.17.4-kernel/include/asm-mips/mipsregs.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/mipsregs.h	2006-07-06 16:58:16.000000000 -0700
-@@ -1462,7 +1462,8 @@
- static inline void __ehb(void)
- {
- 	__asm__ __volatile__(
--	"	ehb							\n");
-+	"	.set	mips32r2					\n"
-+	"	ehb							\n"		"	.set	mips0						\n");
- }
- 
- /*
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/smp.h linux-2.6.17.4-mips/include/asm-mips/smp.h
---- linux-2.6.17.4-kernel/include/asm-mips/smp.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/smp.h	2006-07-06 16:58:16.000000000 -0700
-@@ -114,4 +114,33 @@
- 
- #endif /* CONFIG_SMP */
- 
-+int smp_call_function(void(*func)(void *info), void *info, int retry, int wait);
-+
-+/*
-+ * Special Variant of smp_call_function for use by cache functions:
-+ *
-+ *  o No return value
-+ *  o collapses to normal function call on UP kernels
-+ *  o collapses to normal function call on systems with a single shared
-+ *    primary cache.
-+ *  o Both CONFIG_MIPS_MT_SMP and CONFIG_MIPS_MT_SMTC currently imply there
-+ *    is only one physical core.
-+ */
-+static inline void __on_other_cores(void (*func) (void *info), void *info)
-+{
-+#if !defined(CONFIG_MIPS_MT_SMP) && !defined(CONFIG_MIPS_MT_SMTC)
-+	smp_call_function(func, info, 1, 1);
-+#endif
-+}
-+
-+static inline void __on_each_core(void (*func) (void *info), void *info)
-+{
-+	preempt_disable();
-+
-+	__on_other_cores(func, info);
-+	func(info);
-+
-+	preempt_enable();
-+}
-+
- #endif /* __ASM_SMP_H */
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/stackframe.h linux-2.6.17.4-mips/include/asm-mips/stackframe.h
---- linux-2.6.17.4-kernel/include/asm-mips/stackframe.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/stackframe.h	2006-07-06 16:58:16.000000000 -0700
-@@ -305,7 +305,7 @@
- 		mfc0	v0, CP0_TCSTATUS
- 		ori	v0, TCSTATUS_IXMT
- 		mtc0	v0, CP0_TCSTATUS
--		ehb
-+		_ehb
- 		DMT	5				# dmt a1
- 		jal	mips_ihb
- #endif /* CONFIG_MIPS_MT_SMTC */
-@@ -326,14 +326,14 @@
-  * restore TCStatus.IXMT.
-  */
- 		LONG_L	v1, PT_TCSTATUS(sp)
--		ehb
-+		_ehb
- 		mfc0	v0, CP0_TCSTATUS
- 		andi	v1, TCSTATUS_IXMT
- 		/* We know that TCStatua.IXMT should be set from above */
- 		xori	v0, v0, TCSTATUS_IXMT
- 		or	v0, v0, v1
- 		mtc0	v0, CP0_TCSTATUS
--		ehb
-+		_ehb
- 		andi	a1, a1, VPECONTROL_TE
- 		beqz	a1, 1f
- 		emt
-@@ -412,7 +412,7 @@
- 		/* Clear TKSU, leave IXMT */
- 		xori	t0, 0x00001800
- 		mtc0	t0, CP0_TCSTATUS
--		ehb
-+		_ehb
- 		/* We need to leave the global IE bit set, but clear EXL...*/
- 		mfc0	t0, CP0_STATUS
- 		ori	t0, ST0_EXL | ST0_ERL
-@@ -439,7 +439,7 @@
- 		 * and enable interrupts only for the
- 		 * current TC, using the TCStatus register.
- 		 */
--		ehb
-+		_ehb
- 		mfc0	t0,CP0_TCSTATUS
- 		/* Fortunately CU 0 is in the same place in both registers */
- 		/* Set TCU0, TKSU (for later inversion) and IXMT */
-@@ -448,7 +448,7 @@
- 		/* Clear TKSU *and* IXMT */
- 		xori	t0, 0x00001c00
- 		mtc0	t0, CP0_TCSTATUS
--		ehb
-+		_ehb
- 		/* We need to leave the global IE bit set, but clear EXL...*/
- 		mfc0	t0, CP0_STATUS
- 		ori	t0, ST0_EXL
-@@ -480,7 +480,7 @@
- 		andi	v1, v0, TCSTATUS_IXMT
- 		ori	v0, TCSTATUS_IXMT
- 		mtc0	v0, CP0_TCSTATUS
--		ehb
-+		_ehb
- 		DMT	2				# dmt	v0
- 		/*
- 		 * We don't know a priori if ra is "live"
-@@ -496,7 +496,7 @@
- 		xori	t0, 0x1e
- 		mtc0	t0, CP0_STATUS
- #ifdef CONFIG_MIPS_MT_SMTC
--		ehb
-+		_ehb
- 		andi	v0, v0, VPECONTROL_TE
- 		beqz	v0, 2f
- 		nop	/* delay slot */
-diff -Naur linux-2.6.17.4-kernel/include/asm-mips/unistd.h linux-2.6.17.4-mips/include/asm-mips/unistd.h
---- linux-2.6.17.4-kernel/include/asm-mips/unistd.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/asm-mips/unistd.h	2006-07-06 16:58:16.000000000 -0700
-@@ -326,16 +326,17 @@
- #define __NR_unshare			(__NR_Linux + 303)
- #define __NR_splice			(__NR_Linux + 304)
- #define __NR_sync_file_range		(__NR_Linux + 305)
-+#define __NR_tee			(__NR_Linux + 306)
- 
- /*
-  * Offset of the last Linux o32 flavoured syscall
-  */
--#define __NR_Linux_syscalls		305
-+#define __NR_Linux_syscalls		306
- 
- #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
- 
- #define __NR_O32_Linux			4000
--#define __NR_O32_Linux_syscalls		305
-+#define __NR_O32_Linux_syscalls		306
- 
- #if _MIPS_SIM == _MIPS_SIM_ABI64
- 
-@@ -608,16 +609,17 @@
- #define __NR_unshare			(__NR_Linux + 262)
- #define __NR_splice			(__NR_Linux + 263)
- #define __NR_sync_file_range		(__NR_Linux + 264)
-+#define __NR_tee			(__NR_Linux + 265)
- 
- /*
-  * Offset of the last Linux 64-bit flavoured syscall
-  */
--#define __NR_Linux_syscalls		264
-+#define __NR_Linux_syscalls		265
- 
- #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
- 
- #define __NR_64_Linux			5000
--#define __NR_64_Linux_syscalls		264
-+#define __NR_64_Linux_syscalls		265
- 
- #if _MIPS_SIM == _MIPS_SIM_NABI32
- 
-@@ -894,16 +896,17 @@
- #define __NR_unshare			(__NR_Linux + 266)
- #define __NR_splice			(__NR_Linux + 267)
- #define __NR_sync_file_range		(__NR_Linux + 268)
-+#define __NR_tee			(__NR_Linux + 269)
- 
- /*
-  * Offset of the last N32 flavoured syscall
-  */
--#define __NR_Linux_syscalls		268
-+#define __NR_Linux_syscalls		269
- 
- #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
- 
- #define __NR_N32_Linux			6000
--#define __NR_N32_Linux_syscalls		268
-+#define __NR_N32_Linux_syscalls		269
- 
- #ifndef __ASSEMBLY__
- 
-diff -Naur linux-2.6.17.4-kernel/include/linux/elf.h linux-2.6.17.4-mips/include/linux/elf.h
---- linux-2.6.17.4-kernel/include/linux/elf.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/linux/elf.h	2006-07-06 16:58:16.000000000 -0700
-@@ -67,7 +67,7 @@
- 
- #define EM_MIPS		8	/* MIPS R3000 (officially, big-endian only) */
- 
--#define EM_MIPS_RS4_BE 10	/* MIPS R4000 big-endian */
-+#define EM_MIPS_RS3_LE 10	/* MIPS R3000 little-endian */
- 
- #define EM_PARISC      15	/* HPPA */
- 
-diff -Naur linux-2.6.17.4-kernel/include/linux/mc146818rtc.h linux-2.6.17.4-mips/include/linux/mc146818rtc.h
---- linux-2.6.17.4-kernel/include/linux/mc146818rtc.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/linux/mc146818rtc.h	2006-07-06 16:58:16.000000000 -0700
-@@ -89,4 +89,12 @@
- # define RTC_VRT 0x80		/* valid RAM and time */
- /**********************************************************************/
- 
-+#ifndef RTC_IO_EXTENT
-+#define RTC_IO_EXTENT	0x8
-+#endif
-+
-+#ifndef RTC_IOMAPPED
-+#define RTC_IOMAPPED	1	/* Default to I/O mapping. */
-+#endif
-+
- #endif /* _MC146818RTC_H */
-diff -Naur linux-2.6.17.4-kernel/include/linux/pci_ids.h linux-2.6.17.4-mips/include/linux/pci_ids.h
---- linux-2.6.17.4-kernel/include/linux/pci_ids.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/linux/pci_ids.h	2006-07-06 16:58:16.000000000 -0700
-@@ -1569,6 +1569,9 @@
- #define PCI_VENDOR_ID_SATSAGEM		0x1267
- #define PCI_DEVICE_ID_SATSAGEM_NICCY	0x1016
- 
-+#define PCI_VENDOR_ID_SILICON_MOTION		0x126f
-+#define PCI_DEVICE_ID_SM501_VOYAGER_GX_REV_AA	0x0501
-+#define PCI_DEVICE_ID_SM501_VOYAGER_GX_REV_B	0x0510
- 
- #define PCI_VENDOR_ID_ENSONIQ		0x1274
- #define PCI_DEVICE_ID_ENSONIQ_CT5880	0x5880
-diff -Naur linux-2.6.17.4-kernel/include/linux/serial.h linux-2.6.17.4-mips/include/linux/serial.h
---- linux-2.6.17.4-kernel/include/linux/serial.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/linux/serial.h	2006-07-06 16:58:16.000000000 -0700
-@@ -76,7 +76,8 @@
- #define PORT_16654	11
- #define PORT_16850	12
- #define PORT_RSA	13	/* RSA-DV II/S card */
--#define PORT_MAX	13
-+#define PORT_SB1250	14
-+#define PORT_MAX	14
- 
- #define SERIAL_IO_PORT	0
- #define SERIAL_IO_HUB6	1
-diff -Naur linux-2.6.17.4-kernel/include/linux/serial_ip3106.h linux-2.6.17.4-mips/include/linux/serial_ip3106.h
---- linux-2.6.17.4-kernel/include/linux/serial_ip3106.h	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/include/linux/serial_ip3106.h	2006-07-06 16:58:16.000000000 -0700
-@@ -78,4 +78,16 @@
- #define IP3106_UART_FIFO_RXFIFO		0x00001F00
- #define IP3106_UART_FIFO_RBRTHR		0x000000FF
- 
-+#define ip3106_lcr(base,port)    *(volatile u32 *)(base+(port*0x1000) + 0x000)
-+#define ip3106_mcr(base, port)   *(volatile u32 *)(base+(port*0x1000) + 0x004)
-+#define ip3106_baud(base, port)  *(volatile u32 *)(base+(port*0x1000) + 0x008)
-+#define ip3106_cfg(base, port)   *(volatile u32 *)(base+(port*0x1000) + 0x00C)
-+#define ip3106_fifo(base, port)	 *(volatile u32 *)(base+(port*0x1000) + 0x028)
-+#define ip3106_istat(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE0)
-+#define ip3106_ien(base, port)   *(volatile u32 *)(base+(port*0x1000) + 0xFE4)
-+#define ip3106_iclr(base, port)  *(volatile u32 *)(base+(port*0x1000) + 0xFE8)
-+#define ip3106_iset(base, port)  *(volatile u32 *)(base+(port*0x1000) + 0xFEC)
-+#define ip3106_pd(base, port)    *(volatile u32 *)(base+(port*0x1000) + 0xFF4)
-+#define ip3106_mid(base, port)   *(volatile u32 *)(base+(port*0x1000) + 0xFFC)
-+
- #endif
-diff -Naur linux-2.6.17.4-kernel/sound/oss/au1550_ac97.c linux-2.6.17.4-mips/sound/oss/au1550_ac97.c
---- linux-2.6.17.4-kernel/sound/oss/au1550_ac97.c	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/sound/oss/au1550_ac97.c	2006-07-06 16:58:16.000000000 -0700
-@@ -60,6 +60,7 @@
- #include <asm/mach-au1x00/au1000.h>
- #include <asm/mach-au1x00/au1xxx_psc.h>
- #include <asm/mach-au1x00/au1xxx_dbdma.h>
-+#include <asm/mach-pb1x00/pb1550.h>
- 
- #undef OSS_DOCUMENTED_MIXER_SEMANTICS
- 
-diff -Naur linux-2.6.17.4-kernel/sound/oss/Kconfig linux-2.6.17.4-mips/sound/oss/Kconfig
---- linux-2.6.17.4-kernel/sound/oss/Kconfig	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/sound/oss/Kconfig	2006-07-06 16:58:16.000000000 -0700
-@@ -117,6 +117,10 @@
- 	tristate "Au1550 AC97 Sound"
- 	depends on SOUND_PRIME && SOC_AU1550
- 
-+config SOUND_AU1550_I2S
-+	tristate "Au1550 I2S Sound"
-+	depends on SOUND_PRIME && SOC_AU1550
-+
- config SOUND_TRIDENT
- 	tristate "Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core"
- 	depends on SOUND_PRIME && PCI
-diff -Naur linux-2.6.17.4-kernel/sound/oss/Makefile linux-2.6.17.4-mips/sound/oss/Makefile
---- linux-2.6.17.4-kernel/sound/oss/Makefile	2006-07-06 13:02:28.000000000 -0700
-+++ linux-2.6.17.4-mips/sound/oss/Makefile	2006-07-06 16:58:16.000000000 -0700
-@@ -66,6 +66,7 @@
- obj-$(CONFIG_SOUND_VRC5477)	+= nec_vrc5477.o ac97_codec.o
- obj-$(CONFIG_SOUND_AU1000)	+= au1000.o ac97_codec.o
- obj-$(CONFIG_SOUND_AU1550_AC97)	+= au1550_ac97.o ac97_codec.o
-+obj-$(CONFIG_SOUND_AU1550_I2S)	+= au1550_i2s.o
- obj-$(CONFIG_SOUND_ESSSOLO1)	+= esssolo1.o
- obj-$(CONFIG_SOUND_FUSION)	+= cs46xx.o ac97_codec.o
- obj-$(CONFIG_SOUND_MAESTRO)	+= maestro.o
-
-

Deleted: trunk/patches/linux-2.6.17.4-mips_fixes-2.patch
===================================================================
--- trunk/patches/linux-2.6.17.4-mips_fixes-2.patch	2006-07-20 19:45:24 UTC (rev 2051)
+++ trunk/patches/linux-2.6.17.4-mips_fixes-2.patch	2006-07-20 19:45:36 UTC (rev 2052)
@@ -1,361 +0,0 @@
-Submitted By: Jim Gifford (patches at jg555 dot com)
-Date: 2006-07-08
-Initial Package Version: 2.6.17.4
-Origin: Linux-MIPS Mailing List
-Upstream Status: Not Applied
-Description: These are patches that have not been accepted by
-	     Linux-MIPS.
-
-	1 - iomap for MIPS - iomap.c io.h
-	2 - Cobalt ide fixes
-
-diff -Naur linux-2.6.17.4/arch/mips/lib/iomap.c linux-2.6.17.4.kernel/arch/mips/lib/iomap.c
---- linux-2.6.17.4/arch/mips/lib/iomap.c	1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.17.4.kernel/arch/mips/lib/iomap.c	2006-06-30 10:37:38.000000000 -0700
-@@ -0,0 +1,78 @@
-+/*
-+ *  iomap.c, Memory Mapped I/O routines for MIPS architecture.
-+ *
-+ *  This code is based on lib/iomap.c, by Linus Torvalds.
-+ *
-+ *  Copyright (C) 2004-2005  Yoichi Yuasa <yoichi_yuasa at tripeaks.co.jp>
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-+ */
-+#include <linux/ioport.h>
-+#include <linux/module.h>
-+#include <linux/pci.h>
-+
-+#include <asm/io.h>
-+
-+void __iomem *ioport_map(unsigned long port, unsigned int nr)
-+{
-+	unsigned long end;
-+
-+	end = port + nr - 1UL;
-+	if (ioport_resource.start > port ||
-+	    ioport_resource.end < end || port > end)
-+		return NULL;
-+
-+	return (void __iomem *)(mips_io_port_base + port);
-+}
-+
-+void ioport_unmap(void __iomem *addr)
-+{
-+}
-+EXPORT_SYMBOL(ioport_map);
-+EXPORT_SYMBOL(ioport_unmap);
-+
-+void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
-+{
-+	unsigned long start, len, flags;
-+
-+	if (dev == NULL)
-+		return NULL;
-+
-+	start = pci_resource_start(dev, bar);
-+	len = pci_resource_len(dev, bar);
-+	if (!start || !len)
-+		return NULL;
-+
-+	if (maxlen != 0 && len > maxlen)
-+		len = maxlen;
-+
-+	flags = pci_resource_flags(dev, bar);
-+	if (flags & IORESOURCE_IO)
-+		return ioport_map(start, len);
-+	if (flags & IORESOURCE_MEM) {
-+		if (flags & IORESOURCE_CACHEABLE)
-+			return ioremap_cachable(start, len);
-+		return ioremap_nocache(start, len);
-+	}
-+
-+	return NULL;
-+}
-+
-+void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
-+{
-+	iounmap(addr);
-+}
-+EXPORT_SYMBOL(pci_iomap);
-+EXPORT_SYMBOL(pci_iounmap);
-diff -Naur linux-2.6.17.4/arch/mips/lib/Makefile linux-2.6.17.4.kernel/arch/mips/lib/Makefile
---- linux-2.6.17.4/arch/mips/lib/Makefile	2006-07-02 01:53:19.000000000 -0700
-+++ linux-2.6.17.4.kernel/arch/mips/lib/Makefile	2006-07-07 12:40:23.000000000 -0700
-@@ -5,6 +5,8 @@
- lib-y	+= csum_partial_copy.o memcpy.o promlib.o strlen_user.o strncpy_user.o \
- 	   strnlen_user.o uncached.o
- 
-+obj-y	+= iomap.o
-+
- # libgcc-style stuff needed in the kernel
- lib-y += ashldi3.o ashrdi3.o lshrdi3.o
- 
-diff -Naur linux-2.6.17.4/include/asm-mips/io.h linux-2.6.17.4.kernel/include/asm-mips/io.h
---- linux-2.6.17.4/include/asm-mips/io.h	2006-07-02 01:53:19.000000000 -0700
-+++ linux-2.6.17.4.kernel/include/asm-mips/io.h	2006-07-07 12:44:03.000000000 -0700
-@@ -519,6 +519,34 @@
- }
- 
- /*
-+ * Memory Mapped I/O
-+ */
-+#define ioread8(addr)		readb(addr)
-+#define ioread16(addr)		readw(addr)
-+#define ioread32(addr)		readl(addr)
-+
-+#define iowrite8(b,addr)	writeb(b,addr)
-+#define iowrite16(w,addr)	writew(w,addr)
-+#define iowrite32(l,addr)	writel(l,addr)
-+
-+#define ioread8_rep(a,b,c)	readsb(a,b,c)
-+#define ioread16_rep(a,b,c)	readsw(a,b,c)
-+#define ioread32_rep(a,b,c)	readsl(a,b,c)
-+
-+#define iowrite8_rep(a,b,c)	writesb(a,b,c)
-+#define iowrite16_rep(a,b,c)	writesw(a,b,c)
-+#define iowrite32_rep(a,b,c)	writesl(a,b,c)
-+
-+/* Create a virtual mapping cookie for an IO port range */
-+extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
-+extern void ioport_unmap(void __iomem *);
-+
-+/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
-+struct pci_dev;
-+extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
-+extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
-+
-+/*
-  * ISA space is 'always mapped' on currently supported MIPS systems, no need
-  * to explicitly ioremap() it. The fact that the ISA IO space is mapped
-  * to PAGE_OFFSET is pure coincidence - it does not mean ISA values
-diff -Naur linux-2.6.17.4/include/asm-mips/mach-cobalt/ide.h linux-2.6.17.4.kernel/include/asm-mips/mach-cobalt/ide.h
---- linux-2.6.17.4/include/asm-mips/mach-cobalt/ide.h	1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.17.4.kernel/include/asm-mips/mach-cobalt/ide.h	2006-07-07 12:40:46.000000000 -0700
-@@ -0,0 +1,83 @@
-+
-+/*
-+ * PIO "in" transfers can cause D-cache lines to be allocated
-+ * to the data being read. If the target is the page cache then
-+ * the kernel can create a user space mapping of the same page
-+ * without flushing it from the D-cache. This has large potential
-+ * to create cache aliases. The Cobalts seem to trigger this
-+ * problem easily.
-+ *
-+ * MIPs doesn't have a flush_dcache_range() so we roll
-+ * our own.
-+ *
-+ * -- pdh
-+ */
-+
-+#define MAX_HWIFS			2
-+
-+#include <asm/r4kcache.h>
-+
-+static inline void __flush_dcache(void)
-+{
-+	unsigned long dc_size, dc_line, addr, end;
-+
-+	dc_size = current_cpu_data.dcache.ways << current_cpu_data.dcache.waybit;
-+	dc_line = current_cpu_data.dcache.linesz;
-+
-+	addr = CKSEG0;
-+	end = addr + dc_size;
-+
-+	for (; addr < end; addr += dc_line)
-+		flush_dcache_line_indexed(addr);
-+}
-+
-+static inline void __flush_dcache_range(unsigned long start, unsigned long end)
-+{
-+	unsigned long dc_size, dc_line, addr;
-+
-+	dc_size = current_cpu_data.dcache.ways << current_cpu_data.dcache.waybit;
-+	dc_line = current_cpu_data.dcache.linesz;
-+
-+	addr = start & ~(dc_line - 1);
-+	end += dc_line - 1;
-+
-+	if (end - addr < dc_size)
-+		for (; addr < end; addr += dc_line)
-+			flush_dcache_line(addr);
-+	else
-+		__flush_dcache();
-+}
-+
-+static inline void __ide_insw(unsigned long port, void *addr, unsigned int count)
-+{
-+	insw(port, addr, count);
-+
-+	__flush_dcache_range((unsigned long) addr, (unsigned long) addr + count * 2);
-+}
-+
-+static inline void __ide_insl(unsigned long port, void *addr, unsigned int count)
-+{
-+	insl(port, addr, count);
-+
-+	__flush_dcache_range((unsigned long) addr, (unsigned long) addr + count * 4);
-+}
-+
-+static inline void __ide_mm_insw(volatile void __iomem *port, void *addr, unsigned int count)
-+{
-+	readsw(port, addr, count);
-+
-+	__flush_dcache_range((unsigned long) addr, (unsigned long) addr + count * 2);
-+}
-+
-+static inline void __ide_mm_insl(volatile void __iomem *port, void *addr, unsigned int count)
-+{
-+	readsl(port, addr, count);
-+
-+	__flush_dcache_range((unsigned long) addr, (unsigned long) addr + count * 4);
-+}
-+
-+#define insw			__ide_insw
-+#define insl			__ide_insl
-+
-+#define __ide_mm_outsw		writesw
-+#define __ide_mm_outsl		writesl
-diff -Naur linux-2.6.17.4/arch/mips/lib/ashldi3.c linux-2.6.17.4/arch/mips/lib/ashldi3.c
---- linux-2.6.17.4/arch/mips/lib/ashldi3.c	1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.17.4/arch/mips/lib/ashldi3.c	2006-06-19 18:16:13.000000000 -0700
-@@ -0,0 +1,29 @@
-+#include <linux/module.h>
-+
-+#include "libgcc.h"
-+
-+long long __ashldi3(long long u, word_type b)
-+{
-+	DWunion uu, w;
-+	word_type bm;
-+
-+	if (b == 0)
-+		return u;
-+
-+	uu.ll = u;
-+	bm = 32 - b;
-+
-+	if (bm <= 0) {
-+		w.s.low = 0;
-+		w.s.high = (unsigned int) uu.s.low << -bm;
-+	} else {
-+		const unsigned int carries = (unsigned int) uu.s.low >> bm;
-+
-+		w.s.low = (unsigned int) uu.s.low << b;
-+		w.s.high = ((unsigned int) uu.s.high << b) | carries;
-+	}
-+
-+	return w.ll;
-+}
-+
-+EXPORT_SYMBOL(__ashldi3);
-diff -Naur linux-2.6.17.4/arch/mips/lib/ashrdi3.c linux-2.6.17.4/arch/mips/lib/ashrdi3.c
---- linux-2.6.17.4/arch/mips/lib/ashrdi3.c	1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.17.4/arch/mips/lib/ashrdi3.c	2006-06-19 18:16:13.000000000 -0700
-@@ -0,0 +1,31 @@
-+#include <linux/module.h>
-+
-+#include "libgcc.h"
-+
-+long long __ashrdi3(long long u, word_type b)
-+{
-+	DWunion uu, w;
-+	word_type bm;
-+
-+	if (b == 0)
-+		return u;
-+
-+	uu.ll = u;
-+	bm = 32 - b;
-+
-+	if (bm <= 0) {
-+		/* w.s.high = 1..1 or 0..0 */
-+		w.s.high =
-+		    uu.s.high >> 31;
-+		w.s.low = uu.s.high >> -bm;
-+	} else {
-+		const unsigned int carries = (unsigned int) uu.s.high << bm;
-+
-+		w.s.high = uu.s.high >> b;
-+		w.s.low = ((unsigned int) uu.s.low >> b) | carries;
-+	}
-+
-+	return w.ll;
-+}
-+
-+EXPORT_SYMBOL(__ashrdi3);
-diff -Naur linux-2.6.17.4/arch/mips/lib/libgcc.h linux-2.6.17.4/arch/mips/lib/libgcc.h
---- linux-2.6.17.4/arch/mips/lib/libgcc.h	1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.17.4/arch/mips/lib/libgcc.h	2006-06-19 18:16:13.000000000 -0700
-@@ -0,0 +1,26 @@
-+#ifndef __ASM_LIBGCC_H
-+#define __ASM_LIBGCC_H
-+
-+#include <asm/byteorder.h>
-+
-+typedef int word_type __attribute__ ((mode (__word__)));
-+
-+#ifdef __BIG_ENDIAN
-+struct DWstruct {
-+	int high, low;
-+};
-+#elif defined(__LITTLE_ENDIAN)
-+struct DWstruct {
-+	int low, high;
-+};
-+#else
-+#error I feel sick.
-+#endif
-+
-+typedef union
-+{
-+	struct DWstruct s;
-+	long long ll;
-+} DWunion;
-+
-+#endif /* __ASM_LIBGCC_H */
-diff -Naur linux-2.6.17.4/arch/mips/lib/lshrdi3.c linux-2.6.17.4/arch/mips/lib/lshrdi3.c
---- linux-2.6.17.4/arch/mips/lib/lshrdi3.c	1969-12-31 16:00:00.000000000 -0800
-+++ linux-2.6.17.4/arch/mips/lib/lshrdi3.c	2006-06-19 18:16:13.000000000 -0700
-@@ -0,0 +1,29 @@
-+#include <linux/module.h>
-+
-+#include "libgcc.h"
-+
-+long long __lshrdi3(long long u, word_type b)
-+{
-+	DWunion uu, w;
-+	word_type bm;
-+
-+	if (b == 0)
-+		return u;
-+
-+	uu.ll = u;
-+	bm = 32 - b;
-+
-+	if (bm <= 0) {
-+		w.s.high = 0;
-+		w.s.low = (unsigned int) uu.s.high >> -bm;
-+	} else {
-+		const unsigned int carries = (unsigned int) uu.s.high << bm;
-+
-+		w.s.high = (unsigned int) uu.s.high >> b;
-+		w.s.low = ((unsigned int) uu.s.low >> b) | carries;
-+	}
-+
-+	return w.ll;
-+}
-+
-+EXPORT_SYMBOL(__lshrdi3);

Added: trunk/patches/linux-2.6.17.6-alpha_io_fix-1.patch
===================================================================
--- trunk/patches/linux-2.6.17.6-alpha_io_fix-1.patch	                        (rev 0)
+++ trunk/patches/linux-2.6.17.6-alpha_io_fix-1.patch	2006-07-20 19:45:36 UTC (rev 2052)
@@ -0,0 +1,31 @@
+Submitted By: Joe Ciccone <jciccone at linuxfromscratch.org>
+Date: 2006-06-25
+Initial Package Version: 2.6.17.1
+Origin: Joe Ciccone
+Upstream Status: Unknown
+Description: Fixes a build issue with alpha on some processors. The
+             instructions being modified are specific to ev56/ev6.
+
+--- linux-2.6.17.1.orig/include/asm-alpha/compiler.h	2006-06-20 05:31:55.000000000 -0400
++++ linux-2.6.17.1/include/asm-alpha/compiler.h	2006-06-25 16:13:22.000000000 -0400
+@@ -78,16 +78,16 @@
+ #else
+ #define __kernel_ldbu(mem)				\
+   ({ unsigned char __kir;				\
+-     __asm__("ldbu %0,%1" : "=r"(__kir) : "m"(mem));	\
++     __asm__(".arch ev6; ldbu %0,%1" : "=r"(__kir) : "m"(mem));	\
+      __kir; })
+ #define __kernel_ldwu(mem)				\
+   ({ unsigned short __kir;				\
+-     __asm__("ldwu %0,%1" : "=r"(__kir) : "m"(mem));	\
++     __asm__(".arch ev6; ldwu %0,%1" : "=r"(__kir) : "m"(mem));	\
+      __kir; })
+ #define __kernel_stb(val,mem) \
+-  __asm__("stb %1,%0" : "=m"(mem) : "r"(val))
++  __asm__(".arch ev6; stb %1,%0" : "=m"(mem) : "r"(val))
+ #define __kernel_stw(val,mem) \
+-  __asm__("stw %1,%0" : "=m"(mem) : "r"(val))
++  __asm__(".arch ev6; stw %1,%0" : "=m"(mem) : "r"(val))
+ #endif
+ 
+ /* Some idiots over in <linux/compiler.h> thought inline should imply

Added: trunk/patches/linux-2.6.17.6-mips-1.patch
===================================================================
--- trunk/patches/linux-2.6.17.6-mips-1.patch	                        (rev 0)
+++ trunk/patches/linux-2.6.17.6-mips-1.patch	2006-07-20 19:45:36 UTC (rev 2052)
@@ -0,0 +1,3694 @@
+Submitted By: Jim Gifford (patches at jg555 dot com)
+Date: 2006-07-08
+Initial Package Version: 2.6.17.4
+Origin: Linux-MIPS
+Upstream Status: http://www.linux-mips.org/pub/linux/mips/kernel/v2.6/
+Description: Merges Linux-MIPS and Kernel.org Tree's
+
+diff -Naur linux-2.6.17.4-kernel/arch/mips/cobalt/console.c linux-2.6.17.4-mips/arch/mips/cobalt/console.c
+--- linux-2.6.17.4-kernel/arch/mips/cobalt/console.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/cobalt/console.c	2006-07-06 16:58:16.000000000 -0700
+@@ -41,3 +41,8 @@
+ 
+ 	printk("Cobalt: early console registered\n");
+ }
++
++void __init disable_early_printk(void)
++{
++	unregister_console(&cons_info);
++}
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/atlas_defconfig linux-2.6.17.4-mips/arch/mips/configs/atlas_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/atlas_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/atlas_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_MIPS_BONITO64=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/bigsur_defconfig linux-2.6.17.4-mips/arch/mips/configs/bigsur_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/bigsur_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/bigsur_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -83,6 +83,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_COHERENT=y
+ CONFIG_CPU_BIG_ENDIAN=y
+ # CONFIG_CPU_LITTLE_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/capcella_defconfig linux-2.6.17.4-mips/arch/mips/configs/capcella_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/capcella_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/capcella_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -75,6 +75,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/cobalt_defconfig linux-2.6.17.4-mips/arch/mips/configs/cobalt_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/cobalt_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/cobalt_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -68,6 +68,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_I8259=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1000_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1000_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/db1000_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/db1000_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1100_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1100_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/db1100_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/db1100_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1200_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1200_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/db1200_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/db1200_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_COHERENT=y
+ CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1500_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1500_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/db1500_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/db1500_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/db1550_defconfig linux-2.6.17.4-mips/arch/mips/configs/db1550_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/db1550_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/db1550_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ddb5476_defconfig linux-2.6.17.4-mips/arch/mips/configs/ddb5476_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ddb5476_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ddb5476_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_I8259=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ddb5477_defconfig linux-2.6.17.4-mips/arch/mips/configs/ddb5477_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ddb5477_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ddb5477_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -68,6 +68,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_I8259=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/decstation_defconfig linux-2.6.17.4-mips/arch/mips/configs/decstation_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/decstation_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/decstation_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -68,6 +68,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/e55_defconfig linux-2.6.17.4-mips/arch/mips/configs/e55_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/e55_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/e55_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -73,6 +73,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ev64120_defconfig linux-2.6.17.4-mips/arch/mips/configs/ev64120_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ev64120_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ev64120_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -68,6 +68,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_CPU_BIG_ENDIAN=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ev96100_defconfig linux-2.6.17.4-mips/arch/mips/configs/ev96100_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ev96100_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ev96100_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_CPU_BIG_ENDIAN=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ip22_defconfig linux-2.6.17.4-mips/arch/mips/configs/ip22_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ip22_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ip22_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_ARC=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ip27_defconfig linux-2.6.17.4-mips/arch/mips/configs/ip27_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ip27_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ip27_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -73,6 +73,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_ARC=y
+ CONFIG_DMA_IP27=y
+ CONFIG_CPU_BIG_ENDIAN=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ip32_defconfig linux-2.6.17.4-mips/arch/mips/configs/ip32_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ip32_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ip32_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_ARC=y
+ CONFIG_DMA_IP32=y
+ CONFIG_DMA_NONCOHERENT=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/it8172_defconfig linux-2.6.17.4-mips/arch/mips/configs/it8172_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/it8172_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/it8172_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -68,6 +68,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ivr_defconfig linux-2.6.17.4-mips/arch/mips/configs/ivr_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ivr_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ivr_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/jaguar-atx_defconfig linux-2.6.17.4-mips/arch/mips/configs/jaguar-atx_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/jaguar-atx_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/jaguar-atx_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -68,6 +68,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_LIMITED_DMA=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/jmr3927_defconfig linux-2.6.17.4-mips/arch/mips/configs/jmr3927_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/jmr3927_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/jmr3927_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_CPU_BIG_ENDIAN=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/lasat200_defconfig linux-2.6.17.4-mips/arch/mips/configs/lasat200_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/lasat200_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/lasat200_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -71,6 +71,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_MIPS_NILE4=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/malta_defconfig linux-2.6.17.4-mips/arch/mips/configs/malta_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/malta_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/malta_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/mipssim_defconfig linux-2.6.17.4-mips/arch/mips/configs/mipssim_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/mipssim_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/mipssim_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/mpc30x_defconfig linux-2.6.17.4-mips/arch/mips/configs/mpc30x_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/mpc30x_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/mpc30x_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -75,6 +75,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ocelot_3_defconfig linux-2.6.17.4-mips/arch/mips/configs/ocelot_3_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ocelot_3_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ocelot_3_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_CPU_BIG_ENDIAN=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ocelot_c_defconfig linux-2.6.17.4-mips/arch/mips/configs/ocelot_c_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ocelot_c_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ocelot_c_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_CPU_BIG_ENDIAN=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ocelot_defconfig linux-2.6.17.4-mips/arch/mips/configs/ocelot_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ocelot_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ocelot_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_CPU_BIG_ENDIAN=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/ocelot_g_defconfig linux-2.6.17.4-mips/arch/mips/configs/ocelot_g_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/ocelot_g_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/ocelot_g_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_CPU_BIG_ENDIAN=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pb1100_defconfig linux-2.6.17.4-mips/arch/mips/configs/pb1100_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/pb1100_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/pb1100_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pb1500_defconfig linux-2.6.17.4-mips/arch/mips/configs/pb1500_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/pb1500_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/pb1500_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pb1550_defconfig linux-2.6.17.4-mips/arch/mips/configs/pb1550_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/pb1550_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/pb1550_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_MIPS_DISABLE_OBSOLETE_IDE=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pnx8550-jbs_defconfig linux-2.6.17.4-mips/arch/mips/configs/pnx8550-jbs_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/pnx8550-jbs_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/pnx8550-jbs_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/pnx8550-v2pci_defconfig linux-2.6.17.4-mips/arch/mips/configs/pnx8550-v2pci_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/pnx8550-v2pci_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/pnx8550-v2pci_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/qemu_defconfig linux-2.6.17.4-mips/arch/mips/configs/qemu_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/qemu_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/qemu_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_COHERENT=y
+ CONFIG_GENERIC_ISA_DMA=y
+ CONFIG_I8259=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/rbhma4500_defconfig linux-2.6.17.4-mips/arch/mips/configs/rbhma4500_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/rbhma4500_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/rbhma4500_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -74,6 +74,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ CONFIG_GENERIC_ISA_DMA=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/rm200_defconfig linux-2.6.17.4-mips/arch/mips/configs/rm200_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/rm200_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/rm200_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_ARC=y
+ CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+ CONFIG_DMA_NONCOHERENT=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/sb1250-swarm_defconfig linux-2.6.17.4-mips/arch/mips/configs/sb1250-swarm_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/sb1250-swarm_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/sb1250-swarm_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -84,6 +84,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_COHERENT=y
+ CONFIG_CPU_BIG_ENDIAN=y
+ # CONFIG_CPU_LITTLE_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/sead_defconfig linux-2.6.17.4-mips/arch/mips/configs/sead_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/sead_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/sead_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/tb0226_defconfig linux-2.6.17.4-mips/arch/mips/configs/tb0226_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/tb0226_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/tb0226_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -77,6 +77,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/tb0229_defconfig linux-2.6.17.4-mips/arch/mips/configs/tb0229_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/tb0229_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/tb0229_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -77,6 +77,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/workpad_defconfig linux-2.6.17.4-mips/arch/mips/configs/workpad_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/workpad_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/workpad_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -73,6 +73,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+ # CONFIG_CPU_BIG_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/configs/yosemite_defconfig linux-2.6.17.4-mips/arch/mips/configs/yosemite_defconfig
+--- linux-2.6.17.4-kernel/arch/mips/configs/yosemite_defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/configs/yosemite_defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -68,6 +68,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_DMA_COHERENT=y
+ CONFIG_CPU_BIG_ENDIAN=y
+ # CONFIG_CPU_LITTLE_ENDIAN is not set
+diff -Naur linux-2.6.17.4-kernel/arch/mips/defconfig linux-2.6.17.4-mips/arch/mips/defconfig
+--- linux-2.6.17.4-kernel/arch/mips/defconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/defconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -67,6 +67,7 @@
+ CONFIG_GENERIC_FIND_NEXT_BIT=y
+ CONFIG_GENERIC_HWEIGHT=y
+ CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+ CONFIG_ARC=y
+ CONFIG_DMA_NONCOHERENT=y
+ CONFIG_DMA_NEED_PCI_MAP_STATE=y
+diff -Naur linux-2.6.17.4-kernel/arch/mips/Kconfig linux-2.6.17.4-mips/arch/mips/Kconfig
+--- linux-2.6.17.4-kernel/arch/mips/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -278,6 +278,7 @@
+ 	select SYS_SUPPORTS_64BIT_KERNEL
+ 	select SYS_SUPPORTS_BIG_ENDIAN
+ 	select SYS_SUPPORTS_LITTLE_ENDIAN
++	select SYS_SUPPORTS_MULTITHREADING if EXPERIMENTAL
+ 	help
+ 	  This enables support for the MIPS Technologies Atlas evaluation
+ 	  board.
+@@ -294,6 +295,7 @@
+ 	select I8259
+ 	select MIPS_BOARDS_GEN
+ 	select MIPS_BONITO64
++	select MIPS_CPU_SCACHE
+ 	select MIPS_GT64120
+ 	select MIPS_MSC
+ 	select SWAP_IO_SPACE
+@@ -306,6 +308,7 @@
+ 	select SYS_SUPPORTS_64BIT_KERNEL
+ 	select SYS_SUPPORTS_BIG_ENDIAN
+ 	select SYS_SUPPORTS_LITTLE_ENDIAN
++	select SYS_SUPPORTS_MULTITHREADING
+ 	help
+ 	  This enables support for the MIPS Technologies Malta evaluation
+ 	  board.
+@@ -438,11 +441,13 @@
+ 
+ config PNX8550_V2PCI
+ 	bool "Philips PNX8550 based Viper2-PCI board"
++	depends on BROKEN
+ 	select PNX8550
+ 	select SYS_SUPPORTS_LITTLE_ENDIAN
+ 
+ config PNX8550_JBS
+ 	bool "Philips PNX8550 based JBS board"
++	depends on BROKEN
+ 	select PNX8550
+ 	select SYS_SUPPORTS_LITTLE_ENDIAN
+ 
+@@ -506,8 +511,6 @@
+ config MACH_VR41XX
+ 	bool "NEC VR41XX-based machines"
+ 	select SYS_HAS_CPU_VR41XX
+-	select SYS_SUPPORTS_32BIT_KERNEL
+-	select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
+ 
+ config PMC_YOSEMITE
+ 	bool "PMC-Sierra Yosemite eval board"
+@@ -522,6 +525,7 @@
+ 	select SYS_SUPPORTS_64BIT_KERNEL
+ 	select SYS_SUPPORTS_BIG_ENDIAN
+ 	select SYS_SUPPORTS_HIGHMEM
++	select SYS_SUPPORTS_SMP
+ 	help
+ 	  Yosemite is an evaluation board for the RM9000x2 processor
+ 	  manufactured by PMC-Sierra.
+@@ -555,6 +559,7 @@
+ 	select HW_HAS_EISA
+ 	select IP22_CPU_SCACHE
+ 	select IRQ_CPU
++	select NO_ISA if ISA
+ 	select SWAP_IO_SPACE
+ 	select SYS_HAS_CPU_R4X00
+ 	select SYS_HAS_CPU_R5000
+@@ -577,6 +582,7 @@
+ 	select SYS_HAS_CPU_R10000
+ 	select SYS_SUPPORTS_64BIT_KERNEL
+ 	select SYS_SUPPORTS_BIG_ENDIAN
++	select SYS_SUPPORTS_SMP
+ 	help
+ 	  This are the SGI Origin 200, Origin 2000 and Onyx 2 Graphics
+ 	  workstations.  To compile a Linux kernel that runs on these, say Y
+@@ -1035,6 +1041,9 @@
+ config HAVE_STD_PC_SERIAL_PORT
+ 	bool
+ 
++config VR4181
++	bool
++
+ config ARC_CONSOLE
+ 	bool "ARC console support"
+ 	depends on SGI_IP22 || SNI_RM200_PCI
+@@ -1155,7 +1164,7 @@
+ 	select CPU_SUPPORTS_32BIT_KERNEL
+ 	select CPU_SUPPORTS_64BIT_KERNEL
+ 	help
+-	  The options selects support for the NEC VR4100 series of processors.
++	  The options selects support for the NEC VR41xx series of processors.
+ 	  Only choose this option if you have one of these processors as a
+ 	  kernel built with this option will not run on any other type of
+ 	  processor or vice versa.
+@@ -1211,7 +1220,7 @@
+ 	select CPU_SUPPORTS_32BIT_KERNEL
+ 	help
+ 	  MIPS Technologies R6000 and R6000A series processors.  Note these
+-	  processors are extremly rare and the support for them is incomplete.
++	  processors are extremely rare and the support for them is incomplete.
+ 
+ config CPU_NEVADA
+ 	bool "RM52xx"
+@@ -1332,7 +1341,7 @@
+ endmenu
+ 
+ #
+-# These two indicate any levelof the MIPS32 and MIPS64 architecture
++# These two indicate any level of the MIPS32 and MIPS64 architecture
+ #
+ config CPU_MIPS32
+ 	bool
+@@ -1343,7 +1352,7 @@
+ 	default y if CPU_MIPS64_R1 || CPU_MIPS64_R2
+ 
+ #
+-# These two indicate the revision of the architecture, either 32 bot 64 bit.
++# These two indicate the revision of the architecture, either Release 1 or Release 2
+ #
+ config CPU_MIPSR1
+ 	bool
+@@ -1436,6 +1445,13 @@
+ 	bool
+ 	select BOARD_SCACHE
+ 
++#
++# Support for a MIPS32 / MIPS64 style S-caches
++#
++config MIPS_CPU_SCACHE
++	bool
++	select BOARD_SCACHE
++
+ config R5000_CPU_SCACHE
+ 	bool
+ 	select BOARD_SCACHE
+@@ -1455,32 +1471,57 @@
+ config CPU_HAS_PREFETCH
+ 	bool
+ 
+-config MIPS_MT
+-	bool "Enable MIPS MT"
+-
+ choice
+ 	prompt "MIPS MT options"
+-	depends on MIPS_MT
++
++config MIPS_MT_DISABLED
++	bool "Disable multithreading support."
++	help
++	  Use this option if your workload can't take advantage of
++	  MIPS hardware multithreading support.  On systems that don't have
++	  the option of an MT-enabled processor this option will be the only
++	  option in this menu.
+ 
+ config MIPS_MT_SMTC
+ 	bool "SMTC: Use all TCs on all VPEs for SMP"
++	depends on CPU_MIPS32_R2
++	#depends on CPU_MIPS64_R2		# once there is hardware ...
++	depends on SYS_SUPPORTS_MULTITHREADING
+ 	select CPU_MIPSR2_IRQ_VI
+ 	select CPU_MIPSR2_SRS
++	select MIPS_MT
+ 	select SMP
++	help
++	  This is a kernel model which is known a SMTC or lately has been
++	  marketesed into SMVP.
+ 
+ config MIPS_MT_SMP
+ 	bool "Use 1 TC on each available VPE for SMP"
++	depends on SYS_SUPPORTS_MULTITHREADING
++	select CPU_MIPSR2_IRQ_VI
++	select CPU_MIPSR2_SRS
++	select MIPS_MT
+ 	select SMP
++	help
++	  This is a kernel model which is also known a VSMP or lately
++	  has been marketesed into SMVP.
+ 
+ config MIPS_VPE_LOADER
+ 	bool "VPE loader support."
+-	depends on MIPS_MT
++	depends on SYS_SUPPORTS_MULTITHREADING
++	select MIPS_MT
+ 	help
+ 	  Includes a loader for loading an elf relocatable object
+ 	  onto another VPE and running it.
+ 
+ endchoice
+ 
++config MIPS_MT
++	bool
++
++config SYS_SUPPORTS_MULTITHREADING
++	bool
++
+ config MIPS_MT_FPAFF
+ 	bool "Dynamic FPU affinity for FP-intensive threads"
+ 	depends on MIPS_MT
+@@ -1537,32 +1578,23 @@
+ config CPU_HAS_WB
+ 	bool
+ 
++#
++# Vectored interrupt mode is an R2 feature
++#
+ config CPU_MIPSR2_IRQ_VI
+-	bool "Vectored interrupt mode"
+-	depends on CPU_MIPSR2
+-	help
+-	   Vectored interrupt mode allowing faster dispatching of interrupts.
+-	   The board support code needs to be written to take advantage of this
+-	   mode.  Compatibility code is included to allow the kernel to run on
+-	   a CPU that does not support vectored interrupts.  It's safe to
+-	   say Y here.
++	bool
+ 
++#
++# Extended interrupt mode is an R2 feature
++#
+ config CPU_MIPSR2_IRQ_EI
+-	bool "External interrupt controller mode"
+-	depends on CPU_MIPSR2
+-	help
+-	   Extended interrupt mode takes advantage of an external interrupt
+-	   controller to allow fast dispatching from many possible interrupt
+-	   sources. Say N unless you know that external interrupt support is
+-	   required.
++	bool
+ 
++#
++# Shadow registers are an R2 feature
++#
+ config CPU_MIPSR2_SRS
+-	bool "Make shadow set registers available for interrupt handlers"
+-	depends on CPU_MIPSR2_IRQ_VI || CPU_MIPSR2_IRQ_EI
+-	help
+-	   Allow the kernel to use shadow register sets for fast interrupts.
+-	   Interrupt handlers must be specially written to use shadow sets.
+-	   Say N unless you know that shadow register set upport is needed.
++	bool
+ 
+ config CPU_HAS_SYNC
+ 	bool
+@@ -1616,8 +1648,8 @@
+ 
+ config SMP
+ 	bool "Multi-Processing support"
+-	depends on CPU_RM9000 || ((SIBYTE_BCM1x80 || SIBYTE_BCM1x55 || SIBYTE_SB1250 || QEMU) && !SIBYTE_STANDALONE) || SGI_IP27 || MIPS_MT_SMP || MIPS_MT_SMTC
+-	---help---
++	depends on SYS_SUPPORTS_SMP
++	help
+ 	  This enables support for systems with more than one CPU. If you have
+ 	  a system with only one CPU, like most personal computers, say N. If
+ 	  you have a system with more than one CPU, say Y.
+@@ -1636,6 +1668,9 @@
+ 
+ 	  If you don't know what to do here, say N.
+ 
++config SYS_SUPPORTS_SMP
++	bool
++
+ config NR_CPUS
+ 	int "Maximum number of CPUs (2-64)"
+ 	range 2 64
+@@ -1710,6 +1745,9 @@
+ config ISA
+ 	bool
+ 
++config NO_ISA
++	bool
++
+ config EISA
+ 	bool "EISA support"
+ 	depends on HW_HAS_EISA
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/cpu-probe.c linux-2.6.17.4-mips/arch/mips/kernel/cpu-probe.c
+--- linux-2.6.17.4-kernel/arch/mips/kernel/cpu-probe.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/cpu-probe.c	2006-07-06 16:58:16.000000000 -0700
+@@ -111,7 +111,6 @@
+ 	case CPU_R5000:
+ 	case CPU_NEVADA:
+ 	case CPU_RM7000:
+-	case CPU_RM9000:
+ 	case CPU_TX49XX:
+ 	case CPU_4KC:
+ 	case CPU_4KEC:
+@@ -137,6 +136,14 @@
+ 		} else
+ 			printk(" unavailable.\n");
+ 		break;
++	case CPU_RM9000:
++		if ((c->processor_id & 0x00ff) >= 0x40) {
++			cpu_wait = r4k_wait;
++			printk(" available.\n");
++		} else {
++			printk(" unavailable.\n");
++		}
++		break;
+ 	default:
+ 		printk(" unavailable.\n");
+ 		break;
+@@ -243,9 +250,15 @@
+ 		break;
+ 	case PRID_IMP_VR41XX:
+ 		switch (c->processor_id & 0xf0) {
++#ifndef CONFIG_VR4181
+ 		case PRID_REV_VR4111:
+ 			c->cputype = CPU_VR4111;
+ 			break;
++#else
++		case PRID_REV_VR4181:
++			c->cputype = CPU_VR4181;
++			break;
++#endif
+ 		case PRID_REV_VR4121:
+ 			c->cputype = CPU_VR4121;
+ 			break;
+@@ -597,8 +610,6 @@
+ 		break;
+ 	case PRID_IMP_25KF:
+ 		c->cputype = CPU_25KF;
+-		/* Probe for L2 cache */
+-		c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
+ 		break;
+ 	case PRID_IMP_34K:
+ 		c->cputype = CPU_34K;
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/entry.S linux-2.6.17.4-mips/arch/mips/kernel/entry.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/entry.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/entry.S	2006-07-06 16:58:16.000000000 -0700
+@@ -87,7 +87,7 @@
+ 	ori	v1, v0, TCSTATUS_IXMT
+ 	mtc0	v1, CP0_TCSTATUS
+ 	andi	v0, TCSTATUS_IXMT
+-	ehb
++	_ehb
+ 	mfc0	t0, CP0_TCCONTEXT
+ 	DMT	9				# dmt t1
+ 	jal	mips_ihb
+@@ -95,7 +95,7 @@
+ 	andi	t3, t0, 0xff00
+ 	or	t2, t2, t3
+ 	mtc0	t2, CP0_STATUS
+-	ehb
++	_ehb
+ 	andi	t1, t1, VPECONTROL_TE
+ 	beqz	t1, 1f
+ 	EMT
+@@ -105,7 +105,7 @@
+ 	xori	v1, v1, TCSTATUS_IXMT
+ 	or	v1, v0, v1
+ 	mtc0	v1, CP0_TCSTATUS
+-	ehb
++	_ehb
+ 	xor	t0, t0, t3
+ 	mtc0	t0, CP0_TCCONTEXT
+ #endif /* CONFIG_MIPS_MT_SMTC */
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/gdb-low.S linux-2.6.17.4-mips/arch/mips/kernel/gdb-low.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/gdb-low.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/gdb-low.S	2006-07-06 16:58:16.000000000 -0700
+@@ -291,7 +291,7 @@
+ 		ori	t1, t2, TCSTATUS_IXMT
+ 		mtc0	t1, CP0_TCSTATUS
+ 		andi	t2, t2, TCSTATUS_IXMT
+-		ehb
++		_ehb
+ 		DMT	9				# dmt	t1
+ 		jal	mips_ihb
+ 		nop
+@@ -310,7 +310,7 @@
+ 		xori	t1, t1, TCSTATUS_IXMT
+ 		or	t1, t1, t2
+ 		mtc0	t1, CP0_TCSTATUS
+-		ehb
++		_ehb
+ #endif /* CONFIG_MIPS_MT_SMTC */
+ 		LONG_L	v0, GDB_FR_STATUS(sp)
+ 		LONG_L	v1, GDB_FR_EPC(sp)
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/genex.S linux-2.6.17.4-mips/arch/mips/kernel/genex.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/genex.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/genex.S	2006-07-06 16:58:16.000000000 -0700
+@@ -214,7 +214,7 @@
+ 	mtc0	t0, CP0_TCCONTEXT
+ 	xor	t1, t1, t0
+ 	mtc0	t1, CP0_STATUS
+-	ehb
++	_ehb
+ #endif /* CONFIG_MIPS_MT_SMTC */
+ 	CLI
+ 	move	a0, sp
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/head.S linux-2.6.17.4-mips/arch/mips/kernel/head.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/head.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/head.S	2006-07-06 16:58:16.000000000 -0700
+@@ -96,7 +96,7 @@
+ 	/* Clear TKSU, leave IXMT */
+ 	xori	t0, 0x00001800
+ 	mtc0	t0, CP0_TCSTATUS
+-	ehb
++	_ehb
+ 	/* We need to leave the global IE bit set, but clear EXL...*/
+ 	mfc0	t0, CP0_STATUS
+ 	or	t0, ST0_CU0 | ST0_EXL | ST0_ERL | \set | \clr
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/ptrace.c linux-2.6.17.4-mips/arch/mips/kernel/ptrace.c
+--- linux-2.6.17.4-kernel/arch/mips/kernel/ptrace.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/ptrace.c	2006-07-06 16:58:16.000000000 -0700
+@@ -21,12 +21,12 @@
+ #include <linux/mm.h>
+ #include <linux/errno.h>
+ #include <linux/ptrace.h>
+-#include <linux/audit.h>
+ #include <linux/smp.h>
+ #include <linux/smp_lock.h>
+ #include <linux/user.h>
+ #include <linux/security.h>
+-#include <linux/signal.h>
++#include <linux/audit.h>
++#include <linux/seccomp.h>
+ 
+ #include <asm/byteorder.h>
+ #include <asm/cpu.h>
+@@ -482,12 +482,16 @@
+  */
+ asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit)
+ {
++	/* do the secure computing check first */
++	secure_computing(regs->orig_eax);
++
+ 	if (unlikely(current->audit_context) && entryexit)
+ 		audit_syscall_exit(AUDITSC_RESULT(regs->regs[2]),
+ 		                   regs->regs[2]);
+ 
+ 	if (!(current->ptrace & PT_PTRACED))
+ 		goto out;
++
+ 	if (!test_thread_flag(TIF_SYSCALL_TRACE))
+ 		goto out;
+ 
+@@ -505,9 +509,14 @@
+ 		send_sig(current->exit_code, current, 1);
+ 		current->exit_code = 0;
+ 	}
+- out:
++
++out:
++	/* There is no ->orig_eax and that's quite intensional for now making
++	   this work will require some work in various other place before it's
++	   more than a placebo.  */
++
+ 	if (unlikely(current->audit_context) && !entryexit)
+-		audit_syscall_entry(audit_arch(), regs->regs[2],
+-				    regs->regs[4], regs->regs[5],
+-				    regs->regs[6], regs->regs[7]);
++		audit_syscall_entry(audit_arch(), regs->orig_eax,
++		                    regs->regs[4], regs->regs[5],
++		                    regs->regs[6], regs->regs[7]);
+ }
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/r4k_switch.S linux-2.6.17.4-mips/arch/mips/kernel/r4k_switch.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/r4k_switch.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/r4k_switch.S	2006-07-06 16:58:16.000000000 -0700
+@@ -75,8 +75,8 @@
+ 	and	t0, t0, t1
+ 	LONG_S	t0, ST_OFF(t3)
+ 
+-	fpu_save_double a0 t1 t0 t2		# c0_status passed in t1
+-						# clobbers t0 and t2
++	fpu_save_double a0 t0 t1		# c0_status passed in t0
++						# clobbers t1
+ 1:
+ 
+ 	/*
+@@ -94,7 +94,7 @@
+ 	ori	t1, t2, TCSTATUS_IXMT
+ 	mtc0	t1, CP0_TCSTATUS
+ 	andi	t2, t2, TCSTATUS_IXMT
+-	ehb
++	_ehb
+ 	DMT	8				# dmt	t0
+ 	move	t1,ra
+ 	jal	mips_ihb
+@@ -109,7 +109,7 @@
+ 	or	a2, t1
+ 	mtc0	a2, CP0_STATUS
+ #ifdef CONFIG_MIPS_MT_SMTC
+-	ehb
++	_ehb
+ 	andi	t0, t0, VPECONTROL_TE
+ 	beqz	t0, 1f
+ 	emt
+@@ -118,7 +118,7 @@
+ 	xori	t1, t1, TCSTATUS_IXMT
+ 	or	t1, t1, t2
+ 	mtc0	t1, CP0_TCSTATUS
+-	ehb
++	_ehb
+ #endif /* CONFIG_MIPS_MT_SMTC */
+ 	move	v0, a0
+ 	jr	ra
+@@ -129,9 +129,9 @@
+  */
+ LEAF(_save_fp)
+ #ifdef CONFIG_64BIT
+-	mfc0	t1, CP0_STATUS
++	mfc0	t0, CP0_STATUS
+ #endif
+-	fpu_save_double a0 t1 t0 t2		# clobbers t1
++	fpu_save_double a0 t0 t1		# clobbers t1
+ 	jr	ra
+ 	END(_save_fp)
+ 
+@@ -139,7 +139,10 @@
+  * Restore a thread's fp context.
+  */
+ LEAF(_restore_fp)
+-	fpu_restore_double a0, t1		# clobbers t1
++#ifdef CONFIG_64BIT
++	mfc0	t0, CP0_STATUS
++#endif
++	fpu_restore_double a0 t0 t1		# clobbers t1
+ 	jr	ra
+ 	END(_restore_fp)
+ 
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/scall32-o32.S linux-2.6.17.4-mips/arch/mips/kernel/scall32-o32.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/scall32-o32.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/scall32-o32.S	2006-07-06 16:58:16.000000000 -0700
+@@ -497,7 +497,7 @@
+ 	sys	sys_sched_get_priority_min 1
+ 	sys	sys_sched_rr_get_interval 2	/* 4165 */
+ 	sys	sys_nanosleep,		2
+-	sys	sys_mremap,		4
++	sys	sys_mremap,		5
+ 	sys	sys_accept		3
+ 	sys	sys_bind		3
+ 	sys	sys_connect		3	/* 4170 */
+@@ -647,6 +647,7 @@
+ 	sys	sys_unshare		1
+ 	sys	sys_splice		4
+ 	sys	sys_sync_file_range	7	/* 4305 */
++	sys	sys_tee			4
+ 	.endm
+ 
+ 	/* We pre-compute the number of _instruction_ bytes needed to
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/scall64-64.S linux-2.6.17.4-mips/arch/mips/kernel/scall64-64.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/scall64-64.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/scall64-64.S	2006-07-06 16:58:16.000000000 -0700
+@@ -462,3 +462,4 @@
+ 	PTR	sys_unshare
+ 	PTR	sys_splice
+ 	PTR	sys_sync_file_range
++	PTR	sys_tee				/* 5265 */
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/scall64-n32.S linux-2.6.17.4-mips/arch/mips/kernel/scall64-n32.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/scall64-n32.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/scall64-n32.S	2006-07-06 16:58:16.000000000 -0700
+@@ -388,3 +388,4 @@
+ 	PTR	sys_unshare
+ 	PTR	sys_splice
+ 	PTR	sys_sync_file_range
++	PTR	sys_tee
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/scall64-o32.S linux-2.6.17.4-mips/arch/mips/kernel/scall64-o32.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/scall64-o32.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/scall64-o32.S	2006-07-06 16:58:16.000000000 -0700
+@@ -510,4 +510,5 @@
+ 	PTR	sys_unshare
+ 	PTR	sys_splice
+ 	PTR	sys32_sync_file_range		/* 4305 */
++	PTR	sys_tee
+ 	.size	sys_call_table,.-sys_call_table
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/smp.c linux-2.6.17.4-mips/arch/mips/kernel/smp.c
+--- linux-2.6.17.4-kernel/arch/mips/kernel/smp.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/smp.c	2006-07-06 16:58:16.000000000 -0700
+@@ -336,7 +336,7 @@
+ 	preempt_disable();
+ 
+ 	if ((atomic_read(&mm->mm_users) != 1) || (current->mm != mm)) {
+-		smp_call_function(flush_tlb_mm_ipi, (void *)mm, 1, 1);
++		__on_other_cores(flush_tlb_mm_ipi, (void *)mm);
+ 	} else {
+ 		int i;
+ 		for (i = 0; i < num_online_cpus(); i++)
+@@ -372,7 +372,7 @@
+ 		fd.vma = vma;
+ 		fd.addr1 = start;
+ 		fd.addr2 = end;
+-		smp_call_function(flush_tlb_range_ipi, (void *)&fd, 1, 1);
++		__on_other_cores(flush_tlb_range_ipi, (void *)&fd);
+ 	} else {
+ 		int i;
+ 		for (i = 0; i < num_online_cpus(); i++)
+@@ -414,7 +414,7 @@
+ 
+ 		fd.vma = vma;
+ 		fd.addr1 = page;
+-		smp_call_function(flush_tlb_page_ipi, (void *)&fd, 1, 1);
++		__on_other_cores(flush_tlb_page_ipi, (void *)&fd);
+ 	} else {
+ 		int i;
+ 		for (i = 0; i < num_online_cpus(); i++)
+@@ -434,8 +434,7 @@
+ 
+ void flush_tlb_one(unsigned long vaddr)
+ {
+-	smp_call_function(flush_tlb_one_ipi, (void *) vaddr, 1, 1);
+-	local_flush_tlb_one(vaddr);
++	__on_each_core(flush_tlb_one_ipi, (void *) vaddr);
+ }
+ 
+ static DEFINE_PER_CPU(struct cpu, cpu_devices);
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/smtc-asm.S linux-2.6.17.4-mips/arch/mips/kernel/smtc-asm.S
+--- linux-2.6.17.4-kernel/arch/mips/kernel/smtc-asm.S	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/smtc-asm.S	2006-07-06 16:58:16.000000000 -0700
+@@ -52,12 +52,12 @@
+ 	.set	noat
+ 	/* Disable thread scheduling to make Status update atomic */
+ 	DMT	27					# dmt	k1
+-	ehb
++	_ehb
+ 	/* Set EXL */
+ 	mfc0	k0,CP0_STATUS
+ 	ori	k0,k0,ST0_EXL
+ 	mtc0	k0,CP0_STATUS
+-	ehb
++	_ehb
+ 	/* Thread scheduling now inhibited by EXL. Restore TE state. */
+ 	andi	k1,k1,VPECONTROL_TE
+ 	beqz	k1,1f
+@@ -82,7 +82,7 @@
+ 	li	k1,ST0_CU0
+ 	or	k1,k1,k0
+ 	mtc0	k1,CP0_STATUS
+-	ehb
++	_ehb
+ 	get_saved_sp
+ 	/* Interrupting TC will have pre-set values in slots in the new frame */
+ 2:	subu	k1,k1,PT_SIZE
+@@ -90,7 +90,7 @@
+ 	lw	k0,PT_TCSTATUS(k1)
+ 	/* Write it to TCStatus to restore CU/KSU/IXMT state */
+ 	mtc0	k0,$2,1
+-	ehb
++	_ehb
+ 	lw	k0,PT_EPC(k1)
+ 	mtc0	k0,CP0_EPC
+ 	/* Save all will redundantly recompute the SP, but use it for now */
+@@ -116,7 +116,7 @@
+ 	mfc0	t0,CP0_TCSTATUS
+ 	ori	t1,t0,TCSTATUS_IXMT
+ 	mtc0	t1,CP0_TCSTATUS
+-	ehb
++	_ehb
+ 	/* We know we're in kernel mode, so prepare stack frame */
+ 	subu	t1,sp,PT_SIZE
+ 	sw	ra,PT_EPC(t1)
+diff -Naur linux-2.6.17.4-kernel/arch/mips/kernel/traps.c linux-2.6.17.4-mips/arch/mips/kernel/traps.c
+--- linux-2.6.17.4-kernel/arch/mips/kernel/traps.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/kernel/traps.c	2006-07-06 16:58:16.000000000 -0700
+@@ -1051,7 +1051,7 @@
+ 	return (void *)old_handler;
+ }
+ 
+-#ifdef CONFIG_CPU_MIPSR2
++#ifdef CONFIG_CPU_MIPSR2_SRS
+ /*
+  * MIPSR2 shadow register set allocation
+  * FIXME: SMP...
+@@ -1070,11 +1070,9 @@
+ 
+ static void mips_srs_init(void)
+ {
+-#ifdef CONFIG_CPU_MIPSR2_SRS
+ 	shadow_registers.sr_supported = ((read_c0_srsctl() >> 26) & 0x0f) + 1;
+ 	printk(KERN_INFO "%d MIPSR2 register sets available\n",
+ 	       shadow_registers.sr_supported);
+-#endif
+ 	shadow_registers.sr_allocated = 1;	/* Set 0 used by kernel */
+ }
+ 
+@@ -1199,7 +1197,14 @@
+ {
+ 	return set_vi_srs_handler(n, addr, 0);
+ }
+-#endif
++
++#else
++
++static inline void mips_srs_init(void)
++{
++}
++
++#endif /* CONFIG_CPU_MIPSR2_SRS */
+ 
+ /*
+  * This is used by native signal handling
+@@ -1389,9 +1394,7 @@
+ 	else
+ 		ebase = CAC_BASE;
+ 
+-#ifdef CONFIG_CPU_MIPSR2
+ 	mips_srs_init();
+-#endif
+ 
+ 	per_cpu_trap_init();
+ 
+diff -Naur linux-2.6.17.4-kernel/arch/mips/lib/iomap.c linux-2.6.17.4-mips/arch/mips/lib/iomap.c
+--- linux-2.6.17.4-kernel/arch/mips/lib/iomap.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/lib/iomap.c	1969-12-31 16:00:00.000000000 -0800
+@@ -1,78 +0,0 @@
+-/*
+- *  iomap.c, Memory Mapped I/O routines for MIPS architecture.
+- *
+- *  This code is based on lib/iomap.c, by Linus Torvalds.
+- *
+- *  Copyright (C) 2004-2005  Yoichi Yuasa <yoichi_yuasa at tripeaks.co.jp>
+- *
+- *  This program is free software; you can redistribute it and/or modify
+- *  it under the terms of the GNU General Public License as published by
+- *  the Free Software Foundation; either version 2 of the License, or
+- *  (at your option) any later version.
+- *
+- *  This program is distributed in the hope that it will be useful,
+- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- *  GNU General Public License for more details.
+- *
+- *  You should have received a copy of the GNU General Public License
+- *  along with this program; if not, write to the Free Software
+- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+- */
+-#include <linux/ioport.h>
+-#include <linux/module.h>
+-#include <linux/pci.h>
+-
+-#include <asm/io.h>
+-
+-void __iomem *ioport_map(unsigned long port, unsigned int nr)
+-{
+-	unsigned long end;
+-
+-	end = port + nr - 1UL;
+-	if (ioport_resource.start > port ||
+-	    ioport_resource.end < end || port > end)
+-		return NULL;
+-
+-	return (void __iomem *)(mips_io_port_base + port);
+-}
+-
+-void ioport_unmap(void __iomem *addr)
+-{
+-}
+-EXPORT_SYMBOL(ioport_map);
+-EXPORT_SYMBOL(ioport_unmap);
+-
+-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
+-{
+-	unsigned long start, len, flags;
+-
+-	if (dev == NULL)
+-		return NULL;
+-
+-	start = pci_resource_start(dev, bar);
+-	len = pci_resource_len(dev, bar);
+-	if (!start || !len)
+-		return NULL;
+-
+-	if (maxlen != 0 && len > maxlen)
+-		len = maxlen;
+-
+-	flags = pci_resource_flags(dev, bar);
+-	if (flags & IORESOURCE_IO)
+-		return ioport_map(start, len);
+-	if (flags & IORESOURCE_MEM) {
+-		if (flags & IORESOURCE_CACHEABLE)
+-			return ioremap_cachable(start, len);
+-		return ioremap_nocache(start, len);
+-	}
+-
+-	return NULL;
+-}
+-
+-void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
+-{
+-	iounmap(addr);
+-}
+-EXPORT_SYMBOL(pci_iomap);
+-EXPORT_SYMBOL(pci_iounmap);
+diff -Naur linux-2.6.17.4-kernel/arch/mips/lib/Makefile linux-2.6.17.4-mips/arch/mips/lib/Makefile
+--- linux-2.6.17.4-kernel/arch/mips/lib/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/lib/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -5,6 +5,7 @@
+ lib-y	+= csum_partial_copy.o memcpy.o promlib.o strlen_user.o strncpy_user.o \
+ 	   strnlen_user.o uncached.o
+ 
+-obj-y	+= iomap.o
++# libgcc-style stuff needed in the kernel
++lib-y += ashldi3.o ashrdi3.o lshrdi3.o
+ 
+ EXTRA_AFLAGS := $(CFLAGS)
+diff -Naur linux-2.6.17.4-kernel/arch/mips/lib-32/dump_tlb.c linux-2.6.17.4-mips/arch/mips/lib-32/dump_tlb.c
+--- linux-2.6.17.4-kernel/arch/mips/lib-32/dump_tlb.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/lib-32/dump_tlb.c	2006-07-06 16:58:16.000000000 -0700
+@@ -41,8 +41,6 @@
+ 		return "256Mb";
+ #endif
+ 	}
+-
+-	return "unknown";
+ }
+ 
+ #define BARRIER()					\
+diff -Naur linux-2.6.17.4-kernel/arch/mips/lib-64/dump_tlb.c linux-2.6.17.4-mips/arch/mips/lib-64/dump_tlb.c
+--- linux-2.6.17.4-kernel/arch/mips/lib-64/dump_tlb.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/lib-64/dump_tlb.c	2006-07-06 16:58:16.000000000 -0700
+@@ -32,8 +32,6 @@
+ 	case PM_256M:	return "256Mb";
+ #endif
+ 	}
+-
+-	return "unknown";
+ }
+ 
+ #define BARRIER()					\
+diff -Naur linux-2.6.17.4-kernel/arch/mips/Makefile linux-2.6.17.4-mips/arch/mips/Makefile
+--- linux-2.6.17.4-kernel/arch/mips/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -83,6 +83,8 @@
+ LDFLAGS_vmlinux			+= -G 0 -static -n -nostdlib
+ MODFLAGS			+= -mlong-calls
+ 
++cflags-y += -ffreestanding
++
+ #
+ # We explicitly add the endianness specifier if needed, this allows
+ # to compile kernels with a toolchain for the other endianness. We
+@@ -365,6 +367,7 @@
+ cflags-$(CONFIG_PMC_YOSEMITE)	+= -Iinclude/asm-mips/mach-yosemite
+ load-$(CONFIG_PMC_YOSEMITE)	+= 0xffffffff80100000
+ 
++#
+ # Qemu simulating MIPS32 4Kc
+ #
+ core-$(CONFIG_QEMU)		+= arch/mips/qemu/
+diff -Naur linux-2.6.17.4-kernel/arch/mips/mips-boards/generic/memory.c linux-2.6.17.4-mips/arch/mips/mips-boards/generic/memory.c
+--- linux-2.6.17.4-kernel/arch/mips/mips-boards/generic/memory.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/mips-boards/generic/memory.c	2006-07-06 16:58:16.000000000 -0700
+@@ -48,34 +48,45 @@
+ };
+ #endif
+ 
++/* determined physical memory size, not overridden by command line args  */
++unsigned long physical_memsize = 0L;
++
+ struct prom_pmemblock * __init prom_getmdesc(void)
+ {
+ 	char *memsize_str;
+ 	unsigned int memsize;
+ 	char cmdline[CL_SIZE], *ptr;
+ 
+-	/* Check the command line first for a memsize directive */
++	/* otherwise look in the environment */
++	memsize_str = prom_getenv("memsize");
++	if (!memsize_str) {
++		prom_printf("memsize not set in boot prom, set to default (32Mb)\n");
++		physical_memsize = 0x02000000;
++	} else {
++#ifdef DEBUG
++		prom_printf("prom_memsize = %s\n", memsize_str);
++#endif
++		physical_memsize = simple_strtol(memsize_str, NULL, 0);
++	}
++
++#ifdef CONFIG_CPU_BIG_ENDIAN
++	/* SOC-it swaps, or perhaps doesn't swap, when DMA'ing the last
++	   word of physical memory */
++	physical_memsize -= PAGE_SIZE;
++#endif
++
++	/* Check the command line for a memsize directive that overrides
++	   the physical/default amount */
+ 	strcpy(cmdline, arcs_cmdline);
+ 	ptr = strstr(cmdline, "memsize=");
+ 	if (ptr && (ptr != cmdline) && (*(ptr - 1) != ' '))
+ 		ptr = strstr(ptr, " memsize=");
+ 
+-	if (ptr) {
++	if (ptr)
+ 		memsize = memparse(ptr + 8, &ptr);
+-	}
+-	else {
+-		/* otherwise look in the environment */
+-		memsize_str = prom_getenv("memsize");
+-		if (!memsize_str) {
+-			prom_printf("memsize not set in boot prom, set to default (32Mb)\n");
+-			memsize = 0x02000000;
+-		} else {
+-#ifdef DEBUG
+-			prom_printf("prom_memsize = %s\n", memsize_str);
+-#endif
+-			memsize = simple_strtol(memsize_str, NULL, 0);
+-		}
+-	}
++	else
++		memsize = physical_memsize;
++
+ 	memset(mdesc, 0, sizeof(mdesc));
+ 
+ 	mdesc[0].type = yamon_dontuse;
+diff -Naur linux-2.6.17.4-kernel/arch/mips/mips-boards/malta/malta_int.c linux-2.6.17.4-mips/arch/mips/mips-boards/malta/malta_int.c
+--- linux-2.6.17.4-kernel/arch/mips/mips-boards/malta/malta_int.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/mips-boards/malta/malta_int.c	2006-07-06 16:58:16.000000000 -0700
+@@ -208,23 +208,23 @@
+ 	unsigned int a0 = 7;
+ 	unsigned int t0;
+ 
+-	t0 = s0 & 0xf000;
++	t0 = pending & 0xf000;
+ 	t0 = t0 < 1;
+ 	t0 = t0 << 2;
+ 	a0 = a0 - t0;
+-	s0 = s0 << t0;
++	pending = pending << t0;
+ 
+-	t0 = s0 & 0xc000;
++	t0 = pending & 0xc000;
+ 	t0 = t0 < 1;
+ 	t0 = t0 << 1;
+ 	a0 = a0 - t0;
+-	s0 = s0 << t0;
++	pending = pending << t0;
+ 
+-	t0 = s0 & 0x8000;
++	t0 = pending & 0x8000;
+ 	t0 = t0 < 1;
+ 	//t0 = t0 << 2;
+ 	a0 = a0 - t0;
+-	//s0 = s0 << t0;
++	//pending = pending << t0;
+ 
+ 	return a0;
+ #endif
+diff -Naur linux-2.6.17.4-kernel/arch/mips/mm/c-r4k.c linux-2.6.17.4-mips/arch/mips/mm/c-r4k.c
+--- linux-2.6.17.4-kernel/arch/mips/mm/c-r4k.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/mm/c-r4k.c	2006-07-06 16:58:16.000000000 -0700
+@@ -24,32 +24,12 @@
+ #include <asm/page.h>
+ #include <asm/pgtable.h>
+ #include <asm/r4kcache.h>
++#include <asm/smp.h>
+ #include <asm/system.h>
+ #include <asm/mmu_context.h>
+ #include <asm/war.h>
+ #include <asm/cacheflush.h> /* for run_uncached() */
+ 
+-
+-/*
+- * Special Variant of smp_call_function for use by cache functions:
+- *
+- *  o No return value
+- *  o collapses to normal function call on UP kernels
+- *  o collapses to normal function call on systems with a single shared
+- *    primary cache.
+- */
+-static inline void r4k_on_each_cpu(void (*func) (void *info), void *info,
+-                                   int retry, int wait)
+-{
+-	preempt_disable();
+-
+-#if !defined(CONFIG_MIPS_MT_SMP) && !defined(CONFIG_MIPS_MT_SMTC)
+-	smp_call_function(func, info, retry, wait);
+-#endif
+-	func(info);
+-	preempt_enable();
+-}
+-
+ /*
+  * Must die.
+  */
+@@ -60,13 +40,13 @@
+ /*
+  * Dummy cache handling routines for machines without boardcaches
+  */
+-static void no_sc_noop(void) {}
++static void cache_noop(void) {}
+ 
+ static struct bcache_ops no_sc_ops = {
+-	.bc_enable = (void *)no_sc_noop,
+-	.bc_disable = (void *)no_sc_noop,
+-	.bc_wback_inv = (void *)no_sc_noop,
+-	.bc_inv = (void *)no_sc_noop
++	.bc_enable = (void *)cache_noop,
++	.bc_disable = (void *)cache_noop,
++	.bc_wback_inv = (void *)cache_noop,
++	.bc_inv = (void *)cache_noop
+ };
+ 
+ struct bcache_ops *bcops = &no_sc_ops;
+@@ -94,7 +74,9 @@
+ {
+ 	unsigned long  dc_lsize = cpu_dcache_line_size();
+ 
+-	if (dc_lsize == 16)
++	if (dc_lsize == 0)
++		r4k_blast_dcache_page = (void *)cache_noop;
++	else if (dc_lsize == 16)
+ 		r4k_blast_dcache_page = blast_dcache16_page;
+ 	else if (dc_lsize == 32)
+ 		r4k_blast_dcache_page = r4k_blast_dcache_page_dc32;
+@@ -106,7 +88,9 @@
+ {
+ 	unsigned long dc_lsize = cpu_dcache_line_size();
+ 
+-	if (dc_lsize == 16)
++	if (dc_lsize == 0)
++		r4k_blast_dcache_page_indexed = (void *)cache_noop;
++	else if (dc_lsize == 16)
+ 		r4k_blast_dcache_page_indexed = blast_dcache16_page_indexed;
+ 	else if (dc_lsize == 32)
+ 		r4k_blast_dcache_page_indexed = blast_dcache32_page_indexed;
+@@ -118,7 +102,9 @@
+ {
+ 	unsigned long dc_lsize = cpu_dcache_line_size();
+ 
+-	if (dc_lsize == 16)
++	if (dc_lsize == 0)
++		r4k_blast_dcache = (void *)cache_noop;
++	else if (dc_lsize == 16)
+ 		r4k_blast_dcache = blast_dcache16;
+ 	else if (dc_lsize == 32)
+ 		r4k_blast_dcache = blast_dcache32;
+@@ -201,7 +187,9 @@
+ {
+ 	unsigned long ic_lsize = cpu_icache_line_size();
+ 
+-	if (ic_lsize == 16)
++	if (ic_lsize == 0)
++		r4k_blast_icache_page = (void *)cache_noop;
++	else if (ic_lsize == 16)
+ 		r4k_blast_icache_page = blast_icache16_page;
+ 	else if (ic_lsize == 32)
+ 		r4k_blast_icache_page = blast_icache32_page;
+@@ -216,7 +204,9 @@
+ {
+ 	unsigned long ic_lsize = cpu_icache_line_size();
+ 
+-	if (ic_lsize == 16)
++	if (ic_lsize == 0)
++		r4k_blast_icache_page_indexed = (void *)cache_noop;
++	else if (ic_lsize == 16)
+ 		r4k_blast_icache_page_indexed = blast_icache16_page_indexed;
+ 	else if (ic_lsize == 32) {
+ 		if (R4600_V1_INDEX_ICACHEOP_WAR && cpu_is_r4600_v1_x())
+@@ -238,7 +228,9 @@
+ {
+ 	unsigned long ic_lsize = cpu_icache_line_size();
+ 
+-	if (ic_lsize == 16)
++	if (ic_lsize == 0)
++		r4k_blast_icache = (void *)cache_noop;
++	else if (ic_lsize == 16)
+ 		r4k_blast_icache = blast_icache16;
+ 	else if (ic_lsize == 32) {
+ 		if (R4600_V1_INDEX_ICACHEOP_WAR && cpu_is_r4600_v1_x())
+@@ -258,7 +250,7 @@
+ 	unsigned long sc_lsize = cpu_scache_line_size();
+ 
+ 	if (scache_size == 0)
+-		r4k_blast_scache_page = (void *)no_sc_noop;
++		r4k_blast_scache_page = (void *)cache_noop;
+ 	else if (sc_lsize == 16)
+ 		r4k_blast_scache_page = blast_scache16_page;
+ 	else if (sc_lsize == 32)
+@@ -276,7 +268,7 @@
+ 	unsigned long sc_lsize = cpu_scache_line_size();
+ 
+ 	if (scache_size == 0)
+-		r4k_blast_scache_page_indexed = (void *)no_sc_noop;
++		r4k_blast_scache_page_indexed = (void *)cache_noop;
+ 	else if (sc_lsize == 16)
+ 		r4k_blast_scache_page_indexed = blast_scache16_page_indexed;
+ 	else if (sc_lsize == 32)
+@@ -294,7 +286,7 @@
+ 	unsigned long sc_lsize = cpu_scache_line_size();
+ 
+ 	if (scache_size == 0)
+-		r4k_blast_scache = (void *)no_sc_noop;
++		r4k_blast_scache = (void *)cache_noop;
+ 	else if (sc_lsize == 16)
+ 		r4k_blast_scache = blast_scache16;
+ 	else if (sc_lsize == 32)
+@@ -320,7 +312,7 @@
+ 	if (!cpu_has_dc_aliases)
+ 		return;
+ 
+-	r4k_on_each_cpu(local_r4k_flush_cache_all, NULL, 1, 1);
++	__on_each_core(local_r4k_flush_cache_all, NULL);
+ }
+ 
+ static inline void local_r4k___flush_cache_all(void * args)
+@@ -342,7 +334,7 @@
+ 
+ static void r4k___flush_cache_all(void)
+ {
+-	r4k_on_each_cpu(local_r4k___flush_cache_all, NULL, 1, 1);
++	__on_each_core(local_r4k___flush_cache_all, NULL);
+ }
+ 
+ static inline void local_r4k_flush_cache_range(void * args)
+@@ -363,7 +355,7 @@
+ static void r4k_flush_cache_range(struct vm_area_struct *vma,
+ 	unsigned long start, unsigned long end)
+ {
+-	r4k_on_each_cpu(local_r4k_flush_cache_range, vma, 1, 1);
++	__on_each_core(local_r4k_flush_cache_range, vma);
+ }
+ 
+ static inline void local_r4k_flush_cache_mm(void * args)
+@@ -392,7 +384,7 @@
+ 	if (!cpu_has_dc_aliases)
+ 		return;
+ 
+-	r4k_on_each_cpu(local_r4k_flush_cache_mm, mm, 1, 1);
++	__on_each_core(local_r4k_flush_cache_mm, mm);
+ }
+ 
+ struct flush_cache_page_args {
+@@ -483,7 +475,7 @@
+ 	args.addr = addr;
+ 	args.pfn = pfn;
+ 
+-	r4k_on_each_cpu(local_r4k_flush_cache_page, &args, 1, 1);
++	__on_each_core(local_r4k_flush_cache_page, &args);
+ }
+ 
+ static inline void local_r4k_flush_data_cache_page(void * addr)
+@@ -493,7 +485,7 @@
+ 
+ static void r4k_flush_data_cache_page(unsigned long addr)
+ {
+-	r4k_on_each_cpu(local_r4k_flush_data_cache_page, (void *) addr, 1, 1);
++	__on_each_core(local_r4k_flush_data_cache_page, (void *) addr);
+ }
+ 
+ struct flush_icache_range_args {
+@@ -508,7 +500,7 @@
+ 	unsigned long end = fir_args->end;
+ 
+ 	if (!cpu_has_ic_fills_f_dc) {
+-		if (end - start > dcache_size) {
++		if (end - start >= dcache_size) {
+ 			r4k_blast_dcache();
+ 		} else {
+ 			R4600_HIT_CACHEOP_WAR_IMPL;
+@@ -536,7 +528,7 @@
+ 	args.start = start;
+ 	args.end = end;
+ 
+-	r4k_on_each_cpu(local_r4k_flush_icache_range, &args, 1, 1);
++	__on_each_core(local_r4k_flush_icache_range, &args);
+ 	instruction_hazard();
+ }
+ 
+@@ -612,7 +604,7 @@
+ 	args.vma = vma;
+ 	args.page = page;
+ 
+-	r4k_on_each_cpu(local_r4k_flush_icache_page, &args, 1, 1);
++	__on_each_core(local_r4k_flush_icache_page, &args);
+ }
+ 
+ 
+@@ -683,10 +675,12 @@
+ 	unsigned long addr = (unsigned long) arg;
+ 
+ 	R4600_HIT_CACHEOP_WAR_IMPL;
+-	protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
++	if (dc_lsize)
++		protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
+ 	if (!cpu_icache_snoops_remote_store && scache_size)
+ 		protected_writeback_scache_line(addr & ~(sc_lsize - 1));
+-	protected_flush_icache_line(addr & ~(ic_lsize - 1));
++	if (ic_lsize)
++		protected_flush_icache_line(addr & ~(ic_lsize - 1));
+ 	if (MIPS4K_ICACHE_REFILL_WAR) {
+ 		__asm__ __volatile__ (
+ 			".set push\n\t"
+@@ -711,7 +705,7 @@
+ 
+ static void r4k_flush_cache_sigtramp(unsigned long addr)
+ {
+-	r4k_on_each_cpu(local_r4k_flush_cache_sigtramp, (void *) addr, 1, 1);
++	__on_each_core(local_r4k_flush_cache_sigtramp, (void *) addr);
+ }
+ 
+ static void r4k_flush_icache_all(void)
+@@ -973,8 +967,10 @@
+ 	c->icache.waysize = icache_size / c->icache.ways;
+ 	c->dcache.waysize = dcache_size / c->dcache.ways;
+ 
+-	c->icache.sets = icache_size / (c->icache.linesz * c->icache.ways);
+-	c->dcache.sets = dcache_size / (c->dcache.linesz * c->dcache.ways);
++	c->icache.sets = c->icache.linesz ?
++		icache_size / (c->icache.linesz * c->icache.ways) : 0;
++	c->dcache.sets = c->dcache.linesz ?
++		dcache_size / (c->dcache.linesz * c->dcache.ways) : 0;
+ 
+ 	/*
+ 	 * R10000 and R12000 P-caches are odd in a positive way.  They're 32kB
+@@ -993,10 +989,15 @@
+ 		break;
+ 	case CPU_24K:
+ 	case CPU_34K:
+-		if (!(read_c0_config7() & (1 << 16)))
++		if ((read_c0_config7() & (1 << 16))) {
++			/* effectively physically indexed dcache,
++			   thus no virtual aliases. */
++			c->dcache.flags |= MIPS_CACHE_PINDEX;
++			break;
++		}
+ 	default:
+-			if (c->dcache.waysize > PAGE_SIZE)
+-				c->dcache.flags |= MIPS_CACHE_ALIASES;
++		if (c->dcache.waysize > PAGE_SIZE)
++			c->dcache.flags |= MIPS_CACHE_ALIASES;
+ 	}
+ 
+ 	switch (c->cputype) {
+@@ -1092,6 +1093,7 @@
+ 
+ extern int r5k_sc_init(void);
+ extern int rm7k_sc_init(void);
++extern int mips_sc_init(void);
+ 
+ static void __init setup_scache(void)
+ {
+@@ -1139,17 +1141,29 @@
+ 		return;
+ 
+ 	default:
++		if (c->isa_level == MIPS_CPU_ISA_M32R1 ||
++		    c->isa_level == MIPS_CPU_ISA_M32R2 ||
++		    c->isa_level == MIPS_CPU_ISA_M64R1 ||
++		    c->isa_level == MIPS_CPU_ISA_M64R2) {
++#ifdef CONFIG_MIPS_CPU_SCACHE
++			if (mips_sc_init ()) {
++				scache_size = c->scache.ways * c->scache.sets * c->scache.linesz;
++				printk("MIPS secondary cache %ldkB, %s, linesize %d bytes.\n",
++				       scache_size >> 10,
++				       way_string[c->scache.ways], c->scache.linesz);
++			}
++#else
++			if (!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
++				panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
++#endif
++			return;
++		}
+ 		sc_present = 0;
+ 	}
+ 
+ 	if (!sc_present)
+ 		return;
+ 
+-	if ((c->isa_level == MIPS_CPU_ISA_M32R1 ||
+-	     c->isa_level == MIPS_CPU_ISA_M64R1) &&
+-	    !(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
+-		panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
+-
+ 	/* compute a couple of other cache variables */
+ 	c->scache.waysize = scache_size / c->scache.ways;
+ 
+@@ -1246,10 +1260,12 @@
+ 	 * This code supports virtually indexed processors and will be
+ 	 * unnecessarily inefficient on physically indexed processors.
+ 	 */
+-	shm_align_mask = max_t( unsigned long,
+-				c->dcache.sets * c->dcache.linesz - 1,
+-				PAGE_SIZE - 1);
+-
++	if (c->dcache.linesz)
++		shm_align_mask = max_t( unsigned long,
++					c->dcache.sets * c->dcache.linesz - 1,
++					PAGE_SIZE - 1);
++	else
++		shm_align_mask = PAGE_SIZE-1;
+ 	flush_cache_all		= r4k_flush_cache_all;
+ 	__flush_cache_all	= r4k___flush_cache_all;
+ 	flush_cache_mm		= r4k_flush_cache_mm;
+diff -Naur linux-2.6.17.4-kernel/arch/mips/mm/Makefile linux-2.6.17.4-mips/arch/mips/mm/Makefile
+--- linux-2.6.17.4-kernel/arch/mips/mm/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/mm/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -30,6 +30,7 @@
+ obj-$(CONFIG_IP22_CPU_SCACHE)	+= sc-ip22.o
+ obj-$(CONFIG_R5000_CPU_SCACHE)  += sc-r5k.o
+ obj-$(CONFIG_RM7000_CPU_SCACHE)	+= sc-rm7k.o
++obj-$(CONFIG_MIPS_CPU_SCACHE)	+= sc-mips.o
+ 
+ #
+ # Choose one DMA coherency model
+diff -Naur linux-2.6.17.4-kernel/arch/mips/pci/fixup-tb0219.c linux-2.6.17.4-mips/arch/mips/pci/fixup-tb0219.c
+--- linux-2.6.17.4-kernel/arch/mips/pci/fixup-tb0219.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/pci/fixup-tb0219.c	2006-07-06 16:58:16.000000000 -0700
+@@ -2,7 +2,7 @@
+  *  fixup-tb0219.c, The TANBAC TB0219 specific PCI fixups.
+  *
+  *  Copyright (C) 2003  Megasolution Inc. <matsu at megasolution.jp>
+- *  Copyright (C) 2004  Yoichi Yuasa <yoichi_yuasa at tripeaks.co.jp>
++ *  Copyright (C) 2004-2005  Yoichi Yuasa <yoichi_yuasa at tripeaks.co.jp>
+  *
+  *  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
+diff -Naur linux-2.6.17.4-kernel/arch/mips/qemu/Makefile linux-2.6.17.4-mips/arch/mips/qemu/Makefile
+--- linux-2.6.17.4-kernel/arch/mips/qemu/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/qemu/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -4,4 +4,5 @@
+ 
+ obj-y		= q-firmware.o q-irq.o q-mem.o q-setup.o
+ 
++obj-$(CONFIG_VT) += q-vga.o
+ obj-$(CONFIG_SMP) += q-smp.o
+diff -Naur linux-2.6.17.4-kernel/arch/mips/qemu/q-setup.c linux-2.6.17.4-mips/arch/mips/qemu/q-setup.c
+--- linux-2.6.17.4-kernel/arch/mips/qemu/q-setup.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/qemu/q-setup.c	2006-07-06 16:58:16.000000000 -0700
+@@ -2,6 +2,8 @@
+ #include <asm/io.h>
+ #include <asm/time.h>
+ 
++extern void qvga_init(void);
++
+ #define QEMU_PORT_BASE 0xb4000000
+ 
+ const char *get_system_type(void)
+@@ -21,5 +23,8 @@
+ void __init plat_setup(void)
+ {
+ 	set_io_port_base(QEMU_PORT_BASE);
++#ifdef CONFIG_VT
++	qvga_init();
++#endif
+ 	board_timer_setup = qemu_timer_setup;
+ }
+diff -Naur linux-2.6.17.4-kernel/arch/mips/sgi-ip27/ip27-irq.c linux-2.6.17.4-mips/arch/mips/sgi-ip27/ip27-irq.c
+--- linux-2.6.17.4-kernel/arch/mips/sgi-ip27/ip27-irq.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/sgi-ip27/ip27-irq.c	2006-07-06 16:58:16.000000000 -0700
+@@ -360,7 +360,7 @@
+ 
+ static unsigned long irq_map[NR_IRQS / BITS_PER_LONG];
+ 
+-static int allocate_irqno(void)
++int allocate_irqno(void)
+ {
+ 	int irq;
+ 
+diff -Naur linux-2.6.17.4-kernel/arch/mips/sgi-ip27/ip27-timer.c linux-2.6.17.4-mips/arch/mips/sgi-ip27/ip27-timer.c
+--- linux-2.6.17.4-kernel/arch/mips/sgi-ip27/ip27-timer.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/sgi-ip27/ip27-timer.c	2006-07-06 16:58:16.000000000 -0700
+@@ -89,11 +89,13 @@
+ }
+ #endif
+ 
++static unsigned int rt_timer_irq;
++
+ void ip27_rt_timer_interrupt(struct pt_regs *regs)
+ {
+ 	int cpu = smp_processor_id();
+ 	int cpuA = cputoslice(cpu) == 0;
+-	int irq = 9;				/* XXX Assign number */
++	unsigned int irq = rt_timer_irq;
+ 
+ 	irq_enter();
+ 	write_seqlock(&xtime_lock);
+@@ -179,13 +181,68 @@
+         return mktime(year, month, date, hour, min, sec);
+ }
+ 
++static void startup_rt_irq(unsigned int irq)
++{
++}
++
++static void shutdown_rt_irq(unsigned int irq)
++{
++}
++
++static void enable_rt_irq(unsigned int irq)
++{
++}
++
++static void disable_rt_irq(unsigned int irq)
++{
++}
++
++static void mask_and_ack_rt(unsigned int irq)
++{
++}
++
++static void end_rt_irq(unsigned int irq)
++{
++}
++
++static struct hw_interrupt_type rt_irq_type = {
++	.typename	= "SN HUB RT timer",
++	.startup	= startup_rt_irq,
++	.shutdown	= shutdown_rt_irq,
++	.enable		= enable_rt_irq,
++	.disable	= disable_rt_irq,
++	.ack		= mask_and_ack_rt,
++	.end		= end_rt_irq,
++};
++
++static struct irqaction rt_irqaction = {
++	.handler	= ip27_rt_timer_interrupt,
++	.flags		= SA_INTERRUPT,
++	.mask		= CPU_MASK_NONE,
++	.name		= "timer"
++};
++
++extern int allocate_irqno(void);
++
+ static void ip27_timer_setup(struct irqaction *irq)
+ {
++	int irqno  = allocate_irqno();
++
++	if (irqno < 0)
++		panic("Can't allocate interrupt number for timer interrupt");
++
++	irq_desc[irqno].status = IRQ_DISABLED;
++	irq_desc[irqno].action = NULL;
++	irq_desc[irqno].depth = 1;
++	irq_desc[irqno].handler = &rt_irq_type;
++
+ 	/* over-write the handler, we use our own way */
+ 	irq->handler = no_action;
+ 
+ 	/* setup irqaction */
+-//	setup_irq(IP27_TIMER_IRQ, irq);		/* XXX Can't do this yet.  */
++	irq_desc[irqno].status |= IRQ_PER_CPU;
++
++	rt_timer_irq = irqno;
+ }
+ 
+ void __init ip27_time_init(void)
+diff -Naur linux-2.6.17.4-kernel/arch/mips/sgi-ip27/Kconfig linux-2.6.17.4-mips/arch/mips/sgi-ip27/Kconfig
+--- linux-2.6.17.4-kernel/arch/mips/sgi-ip27/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/sgi-ip27/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -35,12 +35,13 @@
+ 	depends on SGI_IP27
+ 	help
+ 	  Change the way a Linux kernel is loaded into memory on a MIPS64
+-	  machine.  This is required in order to support text replication and
++	  machine.  This is required in order to support text replication on
+ 	  NUMA.  If you need to understand it, read the source code.
+ 
+ config REPLICATE_KTEXT
+ 	bool "Kernel text replication support"
+ 	depends on SGI_IP27
++	select MAPPED_KERNEL
+ 	help
+ 	  Say Y here to enable replicating the kernel text across multiple
+ 	  nodes in a NUMA cluster.  This trades memory for speed.
+diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/bcm1480/irq.c linux-2.6.17.4-mips/arch/mips/sibyte/bcm1480/irq.c
+--- linux-2.6.17.4-kernel/arch/mips/sibyte/bcm1480/irq.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/sibyte/bcm1480/irq.c	2006-07-06 16:58:16.000000000 -0700
+@@ -503,22 +503,23 @@
+ #ifdef CONFIG_SIBYTE_BCM1480_PROF
+ 	if (pending & CAUSEF_IP7)	/* Cpu performance counter interrupt */
+ 		sbprof_cpu_intr(exception_epc(regs));
++	else
+ #endif
+ 
+ 	if (pending & CAUSEF_IP4)
+ 		bcm1480_timer_interrupt(regs);
+ 
+ #ifdef CONFIG_SMP
+-	if (pending & CAUSEF_IP3)
++	else if (pending & CAUSEF_IP3)
+ 		bcm1480_mailbox_interrupt(regs);
+ #endif
+ 
+ #ifdef CONFIG_KGDB
+-	if (pending & CAUSEF_IP6)
++	else if (pending & CAUSEF_IP6)
+ 		bcm1480_kgdb_interrupt(regs);		/* KGDB (uart 1) */
+ #endif
+ 
+-	if (pending & CAUSEF_IP2) {
++	else if (pending & CAUSEF_IP2) {
+ 		unsigned long long mask_h, mask_l;
+ 		unsigned long base;
+ 
+@@ -534,7 +535,7 @@
+ 		mask_l = __raw_readq(
+ 			IOADDR(base + R_BCM1480_IMR_INTERRUPT_STATUS_BASE_L));
+ 
+-		if (!mask_h) {
++		if (mask_h) {
+ 			if (mask_h ^ 1)
+ 				do_IRQ(63 - dclz(mask_h), regs);
+ 			else
+diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/bcm1480/time.c linux-2.6.17.4-mips/arch/mips/sibyte/bcm1480/time.c
+--- linux-2.6.17.4-kernel/arch/mips/sibyte/bcm1480/time.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/sibyte/bcm1480/time.c	2006-07-06 16:58:16.000000000 -0700
+@@ -110,17 +110,18 @@
+ 	__raw_writeq(M_SCD_TIMER_ENABLE|M_SCD_TIMER_MODE_CONTINUOUS,
+ 	      IOADDR(A_SCD_TIMER_REGISTER(cpu, R_SCD_TIMER_CFG)));
+ 
+-	/*
+-	 * CPU 0 handles the global timer interrupt job
+-	 */
+ 	if (cpu == 0) {
++		/*
++		 * CPU 0 handles the global timer interrupt job
++		 */
+ 		ll_timer_interrupt(irq, regs);
+ 	}
+-
+-	/*
+-	 * every CPU should do profiling and process accouting
+-	 */
+-	ll_local_timer_interrupt(irq, regs);
++	else {
++		/*
++		 * other CPUs should just do profiling and process accounting
++		 */
++		ll_local_timer_interrupt(irq, regs);
++	}
+ }
+ 
+ /*
+diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/Kconfig linux-2.6.17.4-mips/arch/mips/sibyte/Kconfig
+--- linux-2.6.17.4-kernel/arch/mips/sibyte/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/sibyte/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -3,6 +3,7 @@
+ 	select HW_HAS_PCI
+ 	select SIBYTE_HAS_LDT
+ 	select SIBYTE_SB1xxx_SOC
++	select SYS_SUPPORTS_SMP
+ 
+ config SIBYTE_BCM1120
+ 	bool
+@@ -30,11 +31,13 @@
+ 	bool
+ 	select HW_HAS_PCI
+ 	select SIBYTE_SB1xxx_SOC
++	select SYS_SUPPORTS_SMP
+ 
+ config SIBYTE_BCM1x55
+ 	bool
+ 	select HW_HAS_PCI
+ 	select SIBYTE_SB1xxx_SOC
++	select SYS_SUPPORTS_SMP
+ 
+ config SIBYTE_SB1xxx_SOC
+ 	bool
+diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/sb1250/irq.c linux-2.6.17.4-mips/arch/mips/sibyte/sb1250/irq.c
+--- linux-2.6.17.4-kernel/arch/mips/sibyte/sb1250/irq.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/sibyte/sb1250/irq.c	2006-07-06 16:58:16.000000000 -0700
+@@ -435,13 +435,17 @@
+ 	return lz;
+ }
+ 
++extern void sb1250_timer_interrupt(struct pt_regs *regs);
++extern void sb1250_mailbox_interrupt(struct pt_regs *regs);
++extern void sb1250_kgdb_interrupt(struct pt_regs *regs);
++
+ asmlinkage void plat_irq_dispatch(struct pt_regs *regs)
+ {
+ 	unsigned int pending;
+ 
+ #ifdef CONFIG_SIBYTE_SB1250_PROF
+ 	/* Set compare to count to silence count/compare timer interrupts */
+-	write_c0_count(read_c0_count());
++	write_c0_compare(read_c0_count());
+ #endif
+ 
+ 	/*
+@@ -457,32 +461,32 @@
+ 	pending = read_c0_cause();
+ 
+ #ifdef CONFIG_SIBYTE_SB1250_PROF
+-	if (pending & CAUSEF_IP7) { /* Cpu performance counter interrupt */
++	if (pending & CAUSEF_IP7) /* Cpu performance counter interrupt */
+ 		sbprof_cpu_intr(exception_epc(regs));
+-	}
++	else
+ #endif
+ 
+ 	if (pending & CAUSEF_IP4)
+ 		sb1250_timer_interrupt(regs);
+ 
+ #ifdef CONFIG_SMP
+-	if (pending & CAUSEF_IP3)
++	else if (pending & CAUSEF_IP3)
+ 		sb1250_mailbox_interrupt(regs);
+ #endif
+ 
+ #ifdef CONFIG_KGDB
+-	if (pending & CAUSEF_IP6)			/* KGDB (uart 1) */
++	else if (pending & CAUSEF_IP6)			/* KGDB (uart 1) */
+ 		sb1250_kgdb_interrupt(regs);
+ #endif
+ 
+-	if (pending & CAUSEF_IP2) {
++	else if (pending & CAUSEF_IP2) {
+ 		unsigned long long mask;
+ 
+ 		/*
+ 		 * Default...we've hit an IP[2] interrupt, which means we've
+ 		 * got to check the 1250 interrupt registers to figure out what
+ 		 * to do.  Need to detect which CPU we're on, now that
+-		 ~ smp_affinity is supported.
++		 * smp_affinity is supported.
+ 		 */
+ 		mask = __raw_readq(IOADDR(A_IMR_REGISTER(smp_processor_id(),
+ 		                              R_IMR_INTERRUPT_STATUS_BASE)));
+diff -Naur linux-2.6.17.4-kernel/arch/mips/sibyte/swarm/setup.c linux-2.6.17.4-mips/arch/mips/sibyte/swarm/setup.c
+--- linux-2.6.17.4-kernel/arch/mips/sibyte/swarm/setup.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/arch/mips/sibyte/swarm/setup.c	2006-07-06 16:58:16.000000000 -0700
+@@ -72,8 +72,10 @@
+ 
+ void __init swarm_time_init(void)
+ {
++#if defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
+ 	/* Setup HPT */
+ 	sb1250_hpt_setup();
++#endif
+ }
+ 
+ void __init swarm_timer_setup(struct irqaction *irq)
+diff -Naur linux-2.6.17.4-kernel/Documentation/feature-removal-schedule.txt linux-2.6.17.4-mips/Documentation/feature-removal-schedule.txt
+--- linux-2.6.17.4-kernel/Documentation/feature-removal-schedule.txt	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/Documentation/feature-removal-schedule.txt	2006-07-06 16:58:16.000000000 -0700
+@@ -147,16 +147,6 @@
+ 
+ ---------------------------
+ 
+-What:	au1x00_uart driver
+-When:	January 2006
+-Why:	The 8250 serial driver now has the ability to deal with the differences
+-	between the standard 8250 family of UARTs and their slightly strange
+-	brother on Alchemy SOCs.  The loss of features is not considered an
+-	issue.
+-Who:	Ralf Baechle <ralf at linux-mips.org>
+-
+----------------------------
+-
+ What:   eepro100 network driver
+ When:   January 2007
+ Why:    replaced by the e100 driver
+diff -Naur linux-2.6.17.4-kernel/drivers/char/decserial.c linux-2.6.17.4-mips/drivers/char/decserial.c
+--- linux-2.6.17.4-kernel/drivers/char/decserial.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/char/decserial.c	2006-07-06 16:58:16.000000000 -0700
+@@ -14,87 +14,85 @@
+  *      device. Added support for PROM console in drivers/char/tty_io.c
+  *      instead. Although it may work to enable more than one 
+  *      console device I strongly recommend to use only one.
++ *
++ *	Copyright (C) 2004  Maciej W. Rozycki
+  */
+ 
+ #include <linux/config.h>
++#include <linux/errno.h>
+ #include <linux/init.h>
+-#include <asm/dec/machtype.h>
+-
+-#ifdef CONFIG_ZS
+-extern int zs_init(void);
+-#endif
+ 
+-#ifdef CONFIG_DZ
+-extern int dz_init(void);
+-#endif
++#include <asm/dec/machtype.h>
++#include <asm/dec/serial.h>
+ 
+-#ifdef CONFIG_SERIAL_CONSOLE
++extern int register_zs_hook(unsigned int channel,
++			    struct dec_serial_hook *hook);
++extern int unregister_zs_hook(unsigned int channel);
+ 
++int register_dec_serial_hook(unsigned int channel,
++			     struct dec_serial_hook *hook)
++{
+ #ifdef CONFIG_ZS
+-extern void zs_serial_console_init(void);
+-#endif
+-
+-#ifdef CONFIG_DZ
+-extern void dz_serial_console_init(void);
++	if (IOASIC)
++		return register_zs_hook(channel, hook);
+ #endif
++	return 0;
++}
+ 
++int unregister_dec_serial_hook(unsigned int channel)
++{
++#ifdef CONFIG_ZS
++	if (IOASIC)
++		return unregister_zs_hook(channel);
+ #endif
++	return 0;
++}
+ 
+-/* rs_init - starts up the serial interface -
+-   handle normal case of starting up the serial interface */
+ 
+-#ifdef CONFIG_SERIAL
++extern int zs_init(void);
++extern int dz_init(void);
+ 
++/*
++ * rs_init - starts up the serial interface -
++ * handle normal case of starting up the serial interface
++ */
+ int __init rs_init(void)
+ {
+-
+-#if defined(CONFIG_ZS) && defined(CONFIG_DZ)
+-    if (IOASIC)
+-	return zs_init();
+-    else
+-	return dz_init();
+-#else
+-
+ #ifdef CONFIG_ZS
+-    return zs_init();
++	if (IOASIC)
++		return zs_init();
+ #endif
+-
+ #ifdef CONFIG_DZ
+-    return dz_init();
+-#endif
+-
++	if (!IOASIC)
++		return dz_init();
+ #endif
++	return -ENXIO;
+ }
+ 
+ __initcall(rs_init);
+ 
+-#endif
+ 
+-#ifdef CONFIG_SERIAL_CONSOLE
++#ifdef CONFIG_SERIAL_DEC_CONSOLE
++
++extern void zs_serial_console_init(void);
++extern void dz_serial_console_init(void);
+ 
+-/* serial_console_init handles the special case of starting
+- *   up the console on the serial port
++/*
++ * dec_serial_console_init handles the special case of starting
++ * up the console on the serial port
+  */
+-static int __init decserial_console_init(void)
++static int __init dec_serial_console_init(void)
+ {
+-#if defined(CONFIG_ZS) && defined(CONFIG_DZ)
+-    if (IOASIC)
+-	zs_serial_console_init();
+-    else
+-	dz_serial_console_init();
+-#else
+-
+ #ifdef CONFIG_ZS
+-    zs_serial_console_init();
++	if (IOASIC)
++		zs_serial_console_init();
+ #endif
+-
+ #ifdef CONFIG_DZ
+-    dz_serial_console_init();
+-#endif
+-
++	if (!IOASIC)
++		dz_serial_console_init();
+ #endif
+     return 0;
+ }
+-console_initcall(decserial_console_init);
++console_initcall(dec_serial_console_init);
+ 
+ #endif
+diff -Naur linux-2.6.17.4-kernel/drivers/char/Kconfig linux-2.6.17.4-mips/drivers/char/Kconfig
+--- linux-2.6.17.4-kernel/drivers/char/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/char/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -340,23 +340,68 @@
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called istallion.
+ 
+-config AU1000_UART
+-	bool "Enable Au1000 UART Support"
+-	depends on SERIAL_NONSTANDARD && MIPS
+-	help
+-	  If you have an Alchemy AU1000 processor (MIPS based) and you want
+-	  to use serial ports, say Y.  Otherwise, say N.
+-
+-config AU1000_SERIAL_CONSOLE
+-	bool "Enable Au1000 serial console"
+-	depends on AU1000_UART
++config AU1X00_GPIO
++	tristate "Alchemy Au1000 GPIO device support"
++	depends on MIPS && SOC_AU1X00
++
++config TS_AU1X00_ADS7846
++	tristate "Au1000/ADS7846 touchscreen support"
++	depends on MIPS && SOC_AU1X00
++
++config AU1X00_USB_TTY
++	tristate "Au1000 USB TTY Device support"
++	depends on MIPS && MIPS_AU1000 && AU1000_USB_DEVICE=y && AU1000_USB_DEVICE
++
++config AU1X00_USB_RAW
++	tristate "Au1000 USB Raw Device support"
++	depends on MIPS && MIPS_AU1000 && AU1000_USB_DEVICE=y && AU1000_USB_TTY!=y && AU1X00_USB_DEVICE
++
++config SIBYTE_SB1250_DUART
++	bool "Support for BCM1xxx onchip DUART"
++	depends on MIPS && SIBYTE_SB1xxx_SOC=y
++
++config SIBYTE_SB1250_DUART_CONSOLE
++	bool "Console on BCM1xxx DUART"
++	depends on SIBYTE_SB1250_DUART
++
++config SERIAL_DEC
++	bool "DECstation serial support"
++	depends on MACH_DECSTATION
++	default y
+ 	help
+-	  If you have an Alchemy AU1000 processor (MIPS based) and you want
+-	  to use a console on a serial port, say Y.  Otherwise, say N.
++	  This selects whether you want to be asked about drivers for
++	  DECstation serial ports.
++
++	  Note that the answer to this question won't directly affect the
++	  kernel: saying N will just cause the configurator to skip all
++	  the questions about DECstation serial ports.
++
++	  If unsure, say Y.
++
++config SERIAL_DEC_CONSOLE
++	bool "Support for console on a DECstation serial port"
++	depends on SERIAL_DEC
++	default y
++	help
++	  If you say Y here, it will be possible to use a serial port as the
++	  system console (the system console is the device which receives all
++	  kernel messages and warnings and which allows logins in single user
++	  mode).  Note that the firmware uses ttyS0 as the serial console on
++	  the Maxine and ttyS2 on the others.
++
++	  If unsure, say Y.
++
++config ZS
++	bool "Z85C30 Serial Support"
++	depends on SERIAL_DEC
++	default y
++	help
++	  Documentation on the Zilog 85C350 serial communications controller
++	  is downloadable at <http://www.zilog.com/pdfs/serial/z85c30.pdf>.
+ 
+ config QTRONIX_KEYBOARD
+ 	bool "Enable Qtronix 990P Keyboard Support"
+-	depends on IT8712
++	depends on MIPS && (MIPS_ITE8172 || MIPS_IVR)
+ 	help
+ 	  Images of Qtronix keyboards are at
+ 	  <http://www.qtronix.com/keyboard.html>.
+@@ -368,7 +413,7 @@
+ 
+ config IT8172_SCR0
+ 	bool "Enable Smart Card Reader 0 Support "
+-	depends on IT8712
++	depends on MIPS && (MIPS_ITE8172 || MIPS_IVR)
+ 	help
+ 	  Say Y here to support smart-card reader 0 (SCR0) on the Integrated
+ 	  Technology Express, Inc. ITE8172 SBC.  Vendor page at
+@@ -377,13 +422,17 @@
+ 
+ config IT8172_SCR1
+ 	bool "Enable Smart Card Reader 1 Support "
+-	depends on IT8712
++	depends on MIPS && (MIPS_ITE8172 || MIPS_IVR)
+ 	help
+ 	  Say Y here to support smart-card reader 1 (SCR1) on the Integrated
+ 	  Technology Express, Inc. ITE8172 SBC.  Vendor page at
+ 	  <http://www.ite.com.tw/ia/brief_it8172bsp.htm>; picture of the
+ 	  board at <http://www.mvista.com/partners/semiconductor/ite.html>.
+ 
++config ITE_GPIO
++	tristate "ITE GPIO"
++	depends on MIPS && MIPS_ITE8172
++
+ config A2232
+ 	tristate "Commodore A2232 serial support (EXPERIMENTAL)"
+ 	depends on EXPERIMENTAL && ZORRO && BROKEN_ON_SMP
+diff -Naur linux-2.6.17.4-kernel/drivers/char/Makefile linux-2.6.17.4-mips/drivers/char/Makefile
+--- linux-2.6.17.4-kernel/drivers/char/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/char/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -31,6 +31,7 @@
+ obj-$(CONFIG_A2232)		+= ser_a2232.o generic_serial.o
+ obj-$(CONFIG_ATARI_DSP56K)	+= dsp56k.o
+ obj-$(CONFIG_MOXA_SMARTIO)	+= mxser.o
++obj-$(CONFIG_SIBYTE_SB1250_DUART) += sb1250_duart.o
+ obj-$(CONFIG_COMPUTONE)		+= ip2/
+ obj-$(CONFIG_RISCOM8)		+= riscom8.o
+ obj-$(CONFIG_ISI)		+= isicom.o
+@@ -51,6 +52,7 @@
+ obj-$(CONFIG_VIOTAPE)		+= viotape.o
+ obj-$(CONFIG_HVCS)		+= hvcs.o
+ obj-$(CONFIG_SGI_MBCS)		+= mbcs.o
++obj-$(CONFIG_SERIAL_DEC)	+= decserial.o
+ 
+ obj-$(CONFIG_PRINTER)		+= lp.o
+ obj-$(CONFIG_TIPAR)		+= tipar.o
+@@ -78,6 +80,10 @@
+ obj-$(CONFIG_HW_RANDOM)		+= hw_random.o
+ obj-$(CONFIG_FTAPE)		+= ftape/
+ obj-$(CONFIG_COBALT_LCD)	+= lcd.o
++obj-$(CONFIG_ITE_GPIO)		+= ite_gpio.o
++obj-$(CONFIG_AU1000_GPIO)	+= au1000_gpio.o
++obj-$(CONFIG_AU1000_USB_TTY)	+= au1000_usbtty.o
++obj-$(CONFIG_AU1000_USB_RAW)	+= au1000_usbraw.o
+ obj-$(CONFIG_PPDEV)		+= ppdev.o
+ obj-$(CONFIG_NWBUTTON)		+= nwbutton.o
+ obj-$(CONFIG_NWFLASH)		+= nwflash.o
+diff -Naur linux-2.6.17.4-kernel/drivers/char/qtronix.c linux-2.6.17.4-mips/drivers/char/qtronix.c
+--- linux-2.6.17.4-kernel/drivers/char/qtronix.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/char/qtronix.c	2006-07-06 16:58:16.000000000 -0700
+@@ -535,8 +535,7 @@
+ 		i--;
+ 	}
+ 	if (count-i) {
+-		struct inode *inode = file->f_dentry->d_inode;
+-		inode->i_atime = current_fs_time(inode->i_sb);
++		file->f_dentry->d_inode->i_atime = get_seconds();
+ 		return count-i;
+ 	}
+ 	if (signal_pending(current))
+diff -Naur linux-2.6.17.4-kernel/drivers/char/rtc.c linux-2.6.17.4-mips/drivers/char/rtc.c
+--- linux-2.6.17.4-kernel/drivers/char/rtc.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/char/rtc.c	2006-07-06 16:58:16.000000000 -0700
+@@ -35,23 +35,22 @@
+  *	1.09a	Pete Zaitcev: Sun SPARC
+  *	1.09b	Jeff Garzik: Modularize, init cleanup
+  *	1.09c	Jeff Garzik: SMP cleanup
+- *	1.10    Paul Barton-Davis: add support for async I/O
++ *	1.10	Paul Barton-Davis: add support for async I/O
+  *	1.10a	Andrea Arcangeli: Alpha updates
+  *	1.10b	Andrew Morton: SMP lock fix
+  *	1.10c	Cesar Barros: SMP locking fixes and cleanup
+  *	1.10d	Paul Gortmaker: delete paranoia check in rtc_exit
+  *	1.10e	Maciej W. Rozycki: Handle DECstation's year weirdness.
+- *      1.11    Takashi Iwai: Kernel access functions
++ *	1.11	Takashi Iwai: Kernel access functions
+  *			      rtc_register/rtc_unregister/rtc_control
+  *      1.11a   Daniele Bellucci: Audit create_proc_read_entry in rtc_init
+- *	1.12	Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer
++ *	1.12    Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer
+  *		CONFIG_HPET_EMULATE_RTC
++ *	1.12a	Maciej W. Rozycki: Handle memory-mapped chips properly.
+  *	1.12ac	Alan Cox: Allow read access to the day of week register
+  */
+ 
+-#define RTC_VERSION		"1.12ac"
+-
+-#define RTC_IO_EXTENT	0x8
++#define RTC_VERSION		"1.12a"
+ 
+ /*
+  *	Note that *all* calls to CMOS_READ and CMOS_WRITE are done with
+@@ -338,7 +337,15 @@
+ 	if (rtc_has_irq == 0)
+ 		return -EIO;
+ 
+-	if (count < sizeof(unsigned))
++	/*
++	 * Historically this function used to assume that sizeof(unsigned long)
++	 * is the same in userspace and kernelspace.  This lead to problems
++	 * for configurations with multiple ABIs such a the MIPS o32 and 64
++	 * ABIs supported on the same kernel.  So now we support read of both
++	 * 4 and 8 bytes and assume that's the sizeof(unsigned long) in the
++	 * userspace ABI.
++	 */
++	if (count != sizeof(unsigned int) && count !=  sizeof(unsigned long))
+ 		return -EINVAL;
+ 
+ 	add_wait_queue(&rtc_wait, &wait);
+@@ -369,10 +376,12 @@
+ 		schedule();
+ 	} while (1);
+ 
+-	if (count < sizeof(unsigned long))
+-		retval = put_user(data, (unsigned int __user *)buf) ?: sizeof(int); 
++	if (count == sizeof(unsigned int))
++		retval = put_user(data, (unsigned int __user *)buf) ?: sizeof(int);
+ 	else
+ 		retval = put_user(data, (unsigned long __user *)buf) ?: sizeof(long);
++	if (!retval)
++		retval = count;
+  out:
+ 	current->state = TASK_RUNNING;
+ 	remove_wait_queue(&rtc_wait, &wait);
+@@ -924,6 +933,9 @@
+ 	struct sparc_isa_device *isa_dev;
+ #endif
+ #endif
++#ifndef __sparc__
++	void *r;
++#endif
+ 
+ #ifdef __sparc__
+ 	for_each_ebus(ebus) {
+@@ -969,8 +981,13 @@
+ 	}
+ no_irq:
+ #else
+-	if (!request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc")) {
+-		printk(KERN_ERR "rtc: I/O port %d is not free.\n", RTC_PORT (0));
++	if (RTC_IOMAPPED)
++		r = request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
++	else
++		r = request_mem_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
++	if (!r) {
++		printk(KERN_ERR "rtc: I/O resource %lx is not free.\n",
++		       (long)(RTC_PORT(0)));
+ 		return -EIO;
+ 	}
+ 
+@@ -984,7 +1001,10 @@
+ 	if(request_irq(RTC_IRQ, rtc_int_handler_ptr, SA_INTERRUPT, "rtc", NULL)) {
+ 		/* Yeah right, seeing as irq 8 doesn't even hit the bus. */
+ 		printk(KERN_ERR "rtc: IRQ %d is not free.\n", RTC_IRQ);
+-		release_region(RTC_PORT(0), RTC_IO_EXTENT);
++		if (RTC_IOMAPPED)
++			release_region(RTC_PORT(0), RTC_IO_EXTENT);
++		else
++			release_mem_region(RTC_PORT(0), RTC_IO_EXTENT);
+ 		return -EIO;
+ 	}
+ 	hpet_rtc_timer_init();
+@@ -1084,7 +1104,10 @@
+ 	if (rtc_has_irq)
+ 		free_irq (rtc_irq, &rtc_port);
+ #else
+-	release_region (RTC_PORT (0), RTC_IO_EXTENT);
++	if (RTC_IOMAPPED)
++		release_region(RTC_PORT(0), RTC_IO_EXTENT);
++	else
++		release_mem_region(RTC_PORT(0), RTC_IO_EXTENT);
+ #ifdef RTC_IRQ
+ 	if (rtc_has_irq)
+ 		free_irq (RTC_IRQ, NULL);
+diff -Naur linux-2.6.17.4-kernel/drivers/ide/mips/Makefile linux-2.6.17.4-mips/drivers/ide/mips/Makefile
+--- linux-2.6.17.4-kernel/drivers/ide/mips/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/ide/mips/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -1,4 +1,4 @@
+ obj-$(CONFIG_BLK_DEV_IDE_SWARM)		+= swarm.o
+ obj-$(CONFIG_BLK_DEV_IDE_AU1XXX)	+= au1xxx-ide.o
+ 
+-EXTRA_CFLAGS    := -Idrivers/ide
++CFLAGS_au1xxx-ide.o := -Idrivers/ide
+diff -Naur linux-2.6.17.4-kernel/drivers/mtd/devices/docprobe.c linux-2.6.17.4-mips/drivers/mtd/devices/docprobe.c
+--- linux-2.6.17.4-kernel/drivers/mtd/devices/docprobe.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/mtd/devices/docprobe.c	2006-07-06 16:58:16.000000000 -0700
+@@ -84,10 +84,10 @@
+ 	0xe4000000,
+ #elif defined(CONFIG_MOMENCO_OCELOT)
+ 	0x2f000000,
+-        0xff000000,
++	0xff000000,
+ #elif defined(CONFIG_MOMENCO_OCELOT_G) || defined (CONFIG_MOMENCO_OCELOT_C)
+-        0xff000000,
+-##else
++	0xff000000,
++#else
+ #warning Unknown architecture for DiskOnChip. No default probe locations defined
+ #endif
+ 	0xffffffff };
+diff -Naur linux-2.6.17.4-kernel/drivers/mtd/devices/Kconfig linux-2.6.17.4-mips/drivers/mtd/devices/Kconfig
+--- linux-2.6.17.4-kernel/drivers/mtd/devices/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/mtd/devices/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -47,6 +47,11 @@
+ 	  accelerator.  Say Y here if you have a DECstation 5000/2x0 or a
+ 	  DECsystem 5900 equipped with such a module.
+ 
++	  If you want to compile this driver as a module ( = code which can be
++	  inserted in and removed from the running kernel whenever you want),
++	  say M here and read <file:Documentation/modules.txt>.  The module will
++	  be called ms02-nv.o.
++
+ config MTD_DATAFLASH
+ 	tristate "Support for AT45xxx DataFlash"
+ 	depends on MTD && SPI_MASTER && EXPERIMENTAL
+diff -Naur linux-2.6.17.4-kernel/drivers/mtd/maps/Kconfig linux-2.6.17.4-mips/drivers/mtd/maps/Kconfig
+--- linux-2.6.17.4-kernel/drivers/mtd/maps/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/mtd/maps/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -200,8 +200,8 @@
+ 	  Support for the flash chip on Tsunami TIG bus.
+ 
+ config MTD_LASAT
+-	tristate "Flash chips on LASAT board"
+-	depends on LASAT
++	tristate "LASAT flash device"
++	depends on LASAT && MTD_CFI
+ 	help
+ 	  Support for the flash chips on the Lasat 100 and 200 boards.
+ 
+@@ -299,6 +299,18 @@
+ 	  Mapping for the Flaga digital module. If you don't have one, ignore
+ 	  this setting.
+ 
++config MTD_XXS1500
++	tristate "MyCable XXS1500 Flash device"
++	depends on MIPS && MIPS_XXS1500
++	help
++	  Flash memory access on MyCable XXS1500 Board
++
++config MTD_MTX1
++	tristate "4-G Systems MTX-1 Flash device"
++	depends on MIPS && MIPS_MTX1
++	help
++	  Flash memory access on 4-G Systems MTX-1 Board
++
+ config MTD_BEECH
+ 	tristate "CFI Flash device mapped on IBM 405LP Beech"
+ 	depends on MTD_CFI && BEECH
+diff -Naur linux-2.6.17.4-kernel/drivers/mtd/maps/lasat.c linux-2.6.17.4-mips/drivers/mtd/maps/lasat.c
+--- linux-2.6.17.4-kernel/drivers/mtd/maps/lasat.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/mtd/maps/lasat.c	2006-07-06 16:58:16.000000000 -0700
+@@ -7,7 +7,7 @@
+  * modify it under the terms of the GNU General Public License version
+  * 2 as published by the Free Software Foundation.
+  *
+- * $Id: lasat.c,v 1.9 2004/11/04 13:24:15 gleixner Exp $
++ * $Id: lasat.c,v 1.7 2004/07/12 21:59:44 dwmw2 Exp $
+  *
+  */
+ 
+@@ -50,7 +50,7 @@
+ 	ENABLE_VPP((&lasat_map));
+ 
+ 	lasat_map.phys = lasat_flash_partition_start(LASAT_MTD_BOOTLOADER);
+-	lasat_map.virt = ioremap_nocache(
++	lasat_map.virt = (unsigned long)ioremap_nocache(
+ 		        lasat_map.phys, lasat_board_info.li_flash_size);
+ 	lasat_map.size = lasat_board_info.li_flash_size;
+ 
+diff -Naur linux-2.6.17.4-kernel/drivers/net/declance.c linux-2.6.17.4-mips/drivers/net/declance.c
+--- linux-2.6.17.4-kernel/drivers/net/declance.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/net/declance.c	2006-07-06 16:58:16.000000000 -0700
+@@ -704,8 +704,8 @@
+ 	return IRQ_HANDLED;
+ }
+ 
+-static irqreturn_t
+-lance_interrupt(const int irq, void *dev_id, struct pt_regs *regs)
++static irqreturn_t lance_interrupt(const int irq, void *dev_id,
++				   struct pt_regs *regs)
+ {
+ 	struct net_device *dev = (struct net_device *) dev_id;
+ 	struct lance_private *lp = netdev_priv(dev);
+@@ -1255,7 +1255,7 @@
+ 	return 0;
+ 
+ err_out_free_dev:
+-	kfree(dev);
++	free_netdev(dev);
+ 
+ err_out:
+ 	return ret;
+@@ -1301,6 +1301,7 @@
+ 	while (root_lance_dev) {
+ 		struct net_device *dev = root_lance_dev;
+ 		struct lance_private *lp = netdev_priv(dev);
++
+ 		unregister_netdev(dev);
+ #ifdef CONFIG_TC
+ 		if (lp->slot >= 0)
+diff -Naur linux-2.6.17.4-kernel/drivers/net/gt64240eth.h linux-2.6.17.4-mips/drivers/net/gt64240eth.h
+--- linux-2.6.17.4-kernel/drivers/net/gt64240eth.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/net/gt64240eth.h	2006-07-06 16:58:16.000000000 -0700
+@@ -9,6 +9,7 @@
+  * Copyright 2000 MontaVista Software Inc.
+  * Author: MontaVista Software, Inc.
+  *         	stevel at mvista.com or support at mvista.com
++ * Copyright 2004, 05 Ralf Baechle (ralf at linux-mips.org)
+  *
+  *  This program is free software; you can distribute it and/or modify it
+  *  under the terms of the GNU General Public License (Version 2) as
+@@ -31,6 +32,7 @@
+ #ifndef _GT64240ETH_H
+ #define _GT64240ETH_H
+ 
++#include <linux/config.h>
+ #include <asm/gt64240.h>
+ 
+ #define ETHERNET_PORTS_DIFFERENCE_OFFSETS	0x400
+@@ -108,10 +110,10 @@
+ #define REV_GT64240A 0x10
+ 
+ #define GT64240ETH_READ(gp, offset)					\
+-	GT_READ((gp)->port_offset + (offset))
++	MV_READ((gp)->port_offset + (offset))
+ 
+ #define GT64240ETH_WRITE(gp, offset, data)				\
+-	GT_WRITE((gp)->port_offset + (offset), (data))
++	MV_WRITE((gp)->port_offset + (offset), (data))
+ 
+ #define GT64240ETH_SETBIT(gp, offset, bits)				\
+ 	GT64240ETH_WRITE((gp), (offset),				\
+@@ -121,8 +123,8 @@
+ 	GT64240ETH_WRITE((gp), (offset),				\
+ 	                 GT64240ETH_READ((gp), (offset)) & ~(bits))
+ 
+-#define GT64240_READ(ofs)		GT_READ(ofs)
+-#define GT64240_WRITE(ofs, data)	GT_WRITE((ofs), (data))
++#define GT64240_READ(ofs)		MV_READ(ofs)
++#define GT64240_WRITE(ofs, data)	MV_WRITE((ofs), (data))
+ 
+ /* Bit definitions of the SMI Reg */
+ enum {
+diff -Naur linux-2.6.17.4-kernel/drivers/net/Kconfig linux-2.6.17.4-mips/drivers/net/Kconfig
+--- linux-2.6.17.4-kernel/drivers/net/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/net/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -438,6 +438,14 @@
+ 	  This is the driver for the onboard card of MIPS Magnum 4000,
+ 	  Acer PICA, Olivetti M700-10 and a few other identical OEM systems.
+ 
++config GALILEO_64240_ETH
++	tristate "Galileo GT64240 Ethernet support"
++	depends on NET_ETHERNET && MOMENCO_OCELOT_G
++	select MII
++	help
++	  This is the driver for the ethernet interfaces integrated into
++	  the Galileo (now Marvell) GT64240 chipset.
++
+ config MIPS_GT96100ETH
+ 	bool "MIPS GT96100 Ethernet support"
+ 	depends on NET_ETHERNET && MIPS_GT96100
+@@ -452,10 +460,6 @@
+ 	  If you have an Alchemy Semi AU1X00 based system
+ 	  say Y.  Otherwise, say N.
+ 
+-config NET_SB1250_MAC
+-	tristate "SB1250 Ethernet support"
+-	depends on NET_ETHERNET && SIBYTE_SB1xxx_SOC
+-
+ config SGI_IOC3_ETH
+ 	bool "SGI IOC3 Ethernet"
+ 	depends on NET_ETHERNET && PCI && SGI_IP27
+@@ -494,6 +498,14 @@
+ 	  emulated by the MIPS Simulator.
+ 	  If you are not using a MIPSsim or are unsure, say N.
+ 
++config MIPS_SIM_NET
++	tristate "MIPS simulator Network device (EXPERIMENTAL)"
++	depends on NETDEVICES && MIPS_SIM && EXPERIMENTAL
++	help
++	  The MIPSNET device is a simple Ethernet network device which is
++	  emulated by the MIPS Simulator.
++	  If you are not using a MIPSsim or are unsure, say N.
++
+ config SGI_O2MACE_ETH
+ 	tristate "SGI O2 MACE Fast Ethernet support"
+ 	depends on NET_ETHERNET && SGI_IP32=y
+@@ -1993,6 +2005,10 @@
+ 
+ 	  If in doubt, say N.
+ 
++config NET_SB1250_MAC
++	tristate "SB1250 Ethernet support"
++	depends on SIBYTE_SB1xxx_SOC
++
+ config R8169_VLAN
+ 	bool "VLAN support"
+ 	depends on R8169 && VLAN_8021Q
+@@ -2195,8 +2211,8 @@
+ 	select MII
+ 	help
+ 	  This driver supports the gigabit Ethernet on the Marvell MV643XX
+-	  chipset which is used in the Momenco Ocelot C and Jaguar ATX and
+-	  Pegasos II, amongst other PPC and MIPS boards.
++	  chipset which is used in the Momenco Ocelot C Ocelot, Jaguar ATX
++	  and Pegasos II, amongst other PPC and MIPS boards.
+ 
+ config MV643XX_ETH_0
+ 	bool "MV-643XX Port 0"
+@@ -2219,6 +2235,20 @@
+ 	  This enables support for Port 2 of the Marvell MV643XX Gigabit
+ 	  Ethernet.
+ 
++config BIG_SUR_FE
++	bool "PMC-Sierra TITAN Fast Ethernet Support"
++	depends on NET_ETHERNET && PMC_BIG_SUR
++	help
++	  This enables support for the the integrated ethernet of
++	  PMC-Sierra's Big Sur SoC.
++
++config TITAN_GE
++	bool "PMC-Sierra TITAN Gigabit Ethernet Support"
++	depends on PMC_YOSEMITE
++	help
++	  This enables support for the the integrated ethernet of
++	  PMC-Sierra's Titan SoC.
++
+ endmenu
+ 
+ #
+diff -Naur linux-2.6.17.4-kernel/drivers/net/Makefile linux-2.6.17.4-mips/drivers/net/Makefile
+--- linux-2.6.17.4-kernel/drivers/net/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/net/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -111,6 +111,11 @@
+ 
+ obj-$(CONFIG_MV643XX_ETH) += mv643xx_eth.o
+ 
++obj-$(CONFIG_GALILEO_64240_ETH) += gt64240eth.o
++obj-$(CONFIG_MV64340_ETH) += mv64340_eth.o
++obj-$(CONFIG_BIG_SUR_FE) += big_sur_ge.o
++obj-$(CONFIG_TITAN_GE) += titan_mdio.o titan_ge.o
++
+ obj-$(CONFIG_PPP) += ppp_generic.o slhc.o
+ obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
+ obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
+diff -Naur linux-2.6.17.4-kernel/drivers/net/sb1250-mac.c linux-2.6.17.4-mips/drivers/net/sb1250-mac.c
+--- linux-2.6.17.4-kernel/drivers/net/sb1250-mac.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/net/sb1250-mac.c	2006-07-06 16:58:16.000000000 -0700
+@@ -156,6 +156,10 @@
+ 
+ #define NUMCACHEBLKS(x) (((x)+SMP_CACHE_BYTES-1)/SMP_CACHE_BYTES)
+ 
++#define SBMAC_READCSR(t)	__raw_readq((unsigned long)t)
++#define SBMAC_WRITECSR(t,v)	__raw_writeq(v, (unsigned long)t)
++
++
+ #define SBMAC_MAX_TXDESCR	32
+ #define SBMAC_MAX_RXDESCR	32
+ 
+@@ -2416,6 +2420,11 @@
+ 			sc->sbm_dev->name);
+ 	}
+ 
++	if (periph_rev >= 2) {
++		printk(KERN_INFO "%s: enabling TCP rcv checksum\n",
++			sc->sbm_dev->name);
++	}
++
+ 	/*
+ 	 * Display Ethernet address (this is called during the config
+ 	 * process so we need to finish off the config message that
+diff -Naur linux-2.6.17.4-kernel/drivers/scsi/dec_esp.c linux-2.6.17.4-mips/drivers/scsi/dec_esp.c
+--- linux-2.6.17.4-kernel/drivers/scsi/dec_esp.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/scsi/dec_esp.c	2006-07-06 16:58:16.000000000 -0700
+@@ -55,7 +55,7 @@
+ 
+ static int  dma_bytes_sent(struct NCR_ESP *esp, int fifo_count);
+ static void dma_drain(struct NCR_ESP *esp);
+-static int  dma_can_transfer(struct NCR_ESP *esp, struct scsi_cmnd *sp);
++static int  dma_can_transfer(struct NCR_ESP *esp, struct scsi_cmnd * sp);
+ static void dma_dump_state(struct NCR_ESP *esp);
+ static void dma_init_read(struct NCR_ESP *esp, u32 vaddress, int length);
+ static void dma_init_write(struct NCR_ESP *esp, u32 vaddress, int length);
+@@ -230,7 +230,7 @@
+ 			mem_start = get_tc_base_addr(slot);
+ 
+ 			/* Store base addr into esp struct */
+-			esp->slot = CPHYSADDR(mem_start);
++			esp->slot = mem_start;
+ 
+ 			esp->dregs = 0;
+ 			esp->eregs = (void *)CKSEG1ADDR(mem_start +
+diff -Naur linux-2.6.17.4-kernel/drivers/scsi/NCR53C9x.h linux-2.6.17.4-mips/drivers/scsi/NCR53C9x.h
+--- linux-2.6.17.4-kernel/drivers/scsi/NCR53C9x.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/scsi/NCR53C9x.h	2006-07-06 16:58:16.000000000 -0700
+@@ -145,12 +145,7 @@
+ 
+ #ifndef MULTIPLE_PAD_SIZES
+ 
+-#ifdef CONFIG_CPU_HAS_WB
+-#include <asm/wbflush.h>
+-#define esp_write(__reg, __val) do{(__reg) = (__val); wbflush();} while(0)
+-#else
+-#define esp_write(__reg, __val) ((__reg) = (__val))
+-#endif
++#define esp_write(__reg, __val) do{(__reg) = (__val); iob();} while(0)
+ #define esp_read(__reg) (__reg)
+ 
+ struct ESP_regs {
+diff -Naur linux-2.6.17.4-kernel/drivers/scsi/sgiwd93.c linux-2.6.17.4-mips/drivers/scsi/sgiwd93.c
+--- linux-2.6.17.4-kernel/drivers/scsi/sgiwd93.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/scsi/sgiwd93.c	2006-07-06 16:58:16.000000000 -0700
+@@ -14,6 +14,7 @@
+ #include <linux/interrupt.h>
+ #include <linux/types.h>
+ #include <linux/mm.h>
++#include <linux/module.h>
+ #include <linux/blkdev.h>
+ #include <linux/delay.h>
+ #include <linux/dma-mapping.h>
+@@ -197,6 +198,7 @@
+ 	udelay(50);
+ 	hregs->ctrl = 0;
+ }
++EXPORT_SYMBOL_GPL(sgiwd93_reset);
+ 
+ static inline void init_hpc_chain(struct hpc_data *hd)
+ {
+diff -Naur linux-2.6.17.4-kernel/drivers/serial/ip22zilog.c linux-2.6.17.4-mips/drivers/serial/ip22zilog.c
+--- linux-2.6.17.4-kernel/drivers/serial/ip22zilog.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/serial/ip22zilog.c	2006-07-06 16:58:16.000000000 -0700
+@@ -866,6 +866,7 @@
+ 	up->cflag = termios->c_cflag;
+ 
+ 	ip22zilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(port));
++	uart_update_timeout(port, termios->c_cflag, baud);
+ 
+ 	spin_unlock_irqrestore(&up->port.lock, flags);
+ }
+@@ -1027,6 +1028,8 @@
+ 	}
+ 
+ 	con->cflag = cflag | CS8;			/* 8N1 */
++
++	uart_update_timeout(&ip22zilog_port_table[con->index].port, cflag, baud);
+ }
+ 
+ static int __init ip22zilog_console_setup(struct console *con, char *options)
+diff -Naur linux-2.6.17.4-kernel/drivers/serial/Kconfig linux-2.6.17.4-mips/drivers/serial/Kconfig
+--- linux-2.6.17.4-kernel/drivers/serial/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/serial/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -647,6 +647,25 @@
+ 	depends on SERIAL_SH_SCI=y
+ 	select SERIAL_CORE_CONSOLE
+ 
++config SERIAL_IP3106
++	bool "Enable IP3106 UART Support (Philips PNX 8xx0 SoCs)"
++	depends on MIPS && (SOC_PNX8550 || SOC_PNX8330)
++	select SERIAL_CORE
++	help
++	  If you have a Philips SoC with an IP 3106 UART in it, such as
++	  the PNX8550 or PNX8330 (MIPS based) and you want to use
++	  serial ports, say Y.  Otherwise, say N.
++
++config SERIAL_IP3106_CONSOLE
++	bool "Enable PNX8XX0 serial console"
++	depends on SERIAL_IP3106
++	select SERIAL_CORE_CONSOLE
++	help
++	  If you have a Philips SoC with an IP 3106 UART in it, such as
++	  the PNX8550 or PNX8330 (MIPS based) and you want to use
++	  a serial console, say Y.
++	  Otherwise, say N.
++
+ config SERIAL_CORE
+ 	tristate
+ 
+diff -Naur linux-2.6.17.4-kernel/drivers/serial/Makefile linux-2.6.17.4-mips/drivers/serial/Makefile
+--- linux-2.6.17.4-kernel/drivers/serial/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/serial/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -39,6 +39,7 @@
+ obj-$(CONFIG_V850E_UART) += v850e_uart.o
+ obj-$(CONFIG_SERIAL_PMACZILOG) += pmac_zilog.o
+ obj-$(CONFIG_SERIAL_LH7A40X) += serial_lh7a40x.o
++obj-$(CONFIG_SERIAL_IP3106) += ip3106_uart.o
+ obj-$(CONFIG_SERIAL_DZ) += dz.o
+ obj-$(CONFIG_SERIAL_SH_SCI) += sh-sci.o
+ obj-$(CONFIG_SERIAL_SGI_L1_CONSOLE) += sn_console.o
+diff -Naur linux-2.6.17.4-kernel/drivers/usb/gadget/net2280.c linux-2.6.17.4-mips/drivers/usb/gadget/net2280.c
+--- linux-2.6.17.4-kernel/drivers/usb/gadget/net2280.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/usb/gadget/net2280.c	2006-07-06 16:58:16.000000000 -0700
+@@ -468,7 +468,8 @@
+ #elif	defined(CONFIG_PPC) && !defined(CONFIG_NOT_COHERENT_CACHE)
+ #define USE_KMALLOC
+ 
+-#elif	defined(CONFIG_MIPS) && !defined(CONFIG_DMA_NONCOHERENT)
++#elif	defined(CONFIG_MIPS) && \
++	(defined(CONFIG_DMA_COHERENT) || defined(CONFIG_DMA_IP27))
+ #define USE_KMALLOC
+ 
+ /* FIXME there are other cases, including an x86-64 one ...  */
+diff -Naur linux-2.6.17.4-kernel/drivers/usb/host/ohci-hcd.c linux-2.6.17.4-mips/drivers/usb/host/ohci-hcd.c
+--- linux-2.6.17.4-kernel/drivers/usb/host/ohci-hcd.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/usb/host/ohci-hcd.c	2006-07-06 16:58:16.000000000 -0700
+@@ -906,6 +906,10 @@
+ #include "ohci-au1xxx.c"
+ #endif
+ 
++#ifdef CONFIG_PNX8550
++#include "ohci-pnx8550.c"
++#endif
++
+ #ifdef CONFIG_USB_OHCI_HCD_PPC_SOC
+ #include "ohci-ppc-soc.c"
+ #endif
+diff -Naur linux-2.6.17.4-kernel/drivers/video/au1100fb.c linux-2.6.17.4-mips/drivers/video/au1100fb.c
+--- linux-2.6.17.4-kernel/drivers/video/au1100fb.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/video/au1100fb.c	2006-07-06 16:58:16.000000000 -0700
+@@ -38,6 +38,7 @@
+  *  with this program; if not, write  to the Free Software Foundation, Inc.,
+  *  675 Mass Ave, Cambridge, MA 02139, USA.
+  */
++
+ #include <linux/config.h>
+ #include <linux/module.h>
+ #include <linux/kernel.h>
+diff -Naur linux-2.6.17.4-kernel/drivers/video/Kconfig linux-2.6.17.4-mips/drivers/video/Kconfig
+--- linux-2.6.17.4-kernel/drivers/video/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/video/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -1142,6 +1142,17 @@
+ 	  Please read the <file:Documentation/fb/README-sstfb.txt> for supported
+ 	  options and other important info  support.
+ 
++config FB_SMIVGX
++	tristate "Silicon Motion VoyagerGX support"
++	depends on FB && PCI && (MIPS || EXPERIMENTAL)
++	select FB_CFB_FILLRECT
++	select FB_CFB_COPYAREA
++	select FB_CFB_IMAGEBLIT
++	---help---
++	  This drivers supports SMI VoyagerGX 501 based PCI boards
++	  The default settings drive both a CRT and LCD.  The CRT
++	  can be turned off by passing in the no_crt option
++
+ config FB_CYBLA
+ 	tristate "Cyberblade/i1 support"
+ 	depends on FB && PCI && X86_32 && !64BIT
+@@ -1206,7 +1217,25 @@
+ 
+ config FB_AU1100
+ 	bool "Au1100 LCD Driver"
+-	depends on (FB = y) && EXPERIMENTAL && PCI && MIPS && MIPS_PB1100=y
++	depends on FB && MIPS && SOC_AU1100
++	select FB_CFB_FILLRECT
++	select FB_CFB_COPYAREA
++	select FB_CFB_IMAGEBLIT
++	help
++	  This is the framebuffer driver for the AMD Au1100 SOC.  It can drive
++	  various panels and CRTs by passing in kernel cmd line option
++	  au1100fb:panel=<name>.
++
++config FB_AU1200
++	bool "Au1200 LCD Driver"
++	depends on FB && MIPS && SOC_AU1200
++	select FB_CFB_FILLRECT
++	select FB_CFB_COPYAREA
++	select FB_CFB_IMAGEBLIT
++	help
++	  This is the framebuffer driver for the AMD Au1200 SOC.  It can drive
++	  various panels and CRTs by passing in kernel cmd line option
++	  au1200fb:panel=<name>.
+ 
+ config FB_AU1200
+ 	bool "Au1200 LCD Driver"
+@@ -1322,8 +1351,8 @@
+  	select FB_CFB_IMAGEBLIT
+ 	help
+ 	  Support for the PMAGB-B TURBOchannel framebuffer card used mainly
+-	  in the MIPS-based DECstation series. The card is currently only
+-	  supported in 1280x1024x8 mode.
++	  in the MIPS-based DECstation series. The card is currently only 
++	  supported in 1280x1024x8 mode.  
+ 
+ config FB_MAXINE
+ 	bool "Maxine (Personal DECstation) onboard framebuffer support"
+diff -Naur linux-2.6.17.4-kernel/drivers/video/Makefile linux-2.6.17.4-mips/drivers/video/Makefile
+--- linux-2.6.17.4-kernel/drivers/video/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/drivers/video/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -93,6 +93,7 @@
+ obj-$(CONFIG_FB_TX3912)		  += tx3912fb.o
+ obj-$(CONFIG_FB_S1D13XXX)	  += s1d13xxxfb.o
+ obj-$(CONFIG_FB_IMX)              += imxfb.o
++obj-$(CONFIG_FB_SMIVGX)		  += smivgxfb.o
+ obj-$(CONFIG_FB_S3C2410)	  += s3c2410fb.o
+ 
+ # Platform or fallback drivers go here
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/asmmacro-32.h linux-2.6.17.4-mips/include/asm-mips/asmmacro-32.h
+--- linux-2.6.17.4-kernel/include/asm-mips/asmmacro-32.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/asmmacro-32.h	2006-07-06 16:58:16.000000000 -0700
+@@ -12,7 +12,7 @@
+ #include <asm/fpregdef.h>
+ #include <asm/mipsregs.h>
+ 
+-	.macro	fpu_save_double thread status tmp1=t0 tmp2
++	.macro	fpu_save_double thread status tmp1=t0
+ 	cfc1	\tmp1,  fcr31
+ 	sdc1	$f0,  THREAD_FPR0(\thread)
+ 	sdc1	$f2,  THREAD_FPR2(\thread)
+@@ -70,7 +70,7 @@
+ 	sw	\tmp, THREAD_FCR31(\thread)
+ 	.endm
+ 
+-	.macro	fpu_restore_double thread tmp=t0
++	.macro	fpu_restore_double thread status tmp=t0
+ 	lw	\tmp, THREAD_FCR31(\thread)
+ 	ldc1	$f0,  THREAD_FPR0(\thread)
+ 	ldc1	$f2,  THREAD_FPR2(\thread)
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/asmmacro-64.h linux-2.6.17.4-mips/include/asm-mips/asmmacro-64.h
+--- linux-2.6.17.4-kernel/include/asm-mips/asmmacro-64.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/asmmacro-64.h	2006-07-06 16:58:16.000000000 -0700
+@@ -53,12 +53,12 @@
+ 	sdc1	$f31, THREAD_FPR31(\thread)
+ 	.endm
+ 
+-	.macro	fpu_save_double thread status tmp1 tmp2
+-	sll	\tmp2, \tmp1, 5
+-	bgez	\tmp2, 2f
++	.macro	fpu_save_double thread status tmp
++	sll	\tmp, \status, 5
++	bgez	\tmp, 2f
+ 	fpu_save_16odd \thread
+ 2:
+-	fpu_save_16even \thread \tmp1			# clobbers t1
++	fpu_save_16even \thread \tmp
+ 	.endm
+ 
+ 	.macro	fpu_restore_16even thread tmp=t0
+@@ -101,13 +101,12 @@
+ 	ldc1	$f31, THREAD_FPR31(\thread)
+ 	.endm
+ 
+-	.macro	fpu_restore_double thread tmp
+-	mfc0	t0, CP0_STATUS
+-	sll	t1, t0, 5
+-	bgez	t1, 1f				# 16 register mode?
++	.macro	fpu_restore_double thread status tmp
++	sll	\tmp, \status, 5
++	bgez	\tmp, 1f				# 16 register mode?
+ 
+-	fpu_restore_16odd a0
+-1:	fpu_restore_16even a0, t0		# clobbers t0
++	fpu_restore_16odd \thread
++1:	fpu_restore_16even \thread \tmp
+ 	.endm
+ 
+ 	.macro	cpu_save_nonscratch thread
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/asmmacro.h linux-2.6.17.4-mips/include/asm-mips/asmmacro.h
+--- linux-2.6.17.4-kernel/include/asm-mips/asmmacro.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/asmmacro.h	2006-07-06 16:58:16.000000000 -0700
+@@ -27,14 +27,14 @@
+ 	ori	\reg, \reg, TCSTATUS_IXMT
+ 	xori	\reg, \reg, TCSTATUS_IXMT
+ 	mtc0	\reg, CP0_TCSTATUS
+-	ehb
++	_ehb
+ 	.endm
+ 
+ 	.macro	local_irq_disable reg=t0
+ 	mfc0	\reg, CP0_TCSTATUS
+ 	ori	\reg, \reg, TCSTATUS_IXMT
+ 	mtc0	\reg, CP0_TCSTATUS
+-	ehb
++	_ehb
+ 	.endm
+ #else
+ 	.macro	local_irq_enable reg=t0
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/cpu-features.h linux-2.6.17.4-mips/include/asm-mips/cpu-features.h
+--- linux-2.6.17.4-kernel/include/asm-mips/cpu-features.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/cpu-features.h	2006-07-06 16:58:16.000000000 -0700
+@@ -144,12 +144,8 @@
+ #define cpu_has_dsp		(cpu_data[0].ases & MIPS_ASE_DSP)
+ #endif
+ 
+-#ifdef CONFIG_MIPS_MT
+ #ifndef cpu_has_mipsmt
+-# define cpu_has_mipsmt		(cpu_data[0].ases & MIPS_ASE_MIPSMT)
+-#endif
+-#else
+-# define cpu_has_mipsmt		0
++#define cpu_has_mipsmt		(cpu_data[0].ases & MIPS_ASE_MIPSMT)
+ #endif
+ 
+ #ifdef CONFIG_32BIT
+@@ -188,19 +184,15 @@
+ # endif
+ #endif
+ 
+-#ifdef CONFIG_CPU_MIPSR2
+-# if defined(CONFIG_CPU_MIPSR2_IRQ_VI) && !defined(cpu_has_vint)
+-#  define cpu_has_vint		(cpu_data[0].options & MIPS_CPU_VINT)
+-# else
+-#  define cpu_has_vint			0
+-# endif
+-# if defined(CONFIG_CPU_MIPSR2_IRQ_EI) && !defined(cpu_has_veic)
+-#  define cpu_has_veic		(cpu_data[0].options & MIPS_CPU_VEIC)
+-# else
+-#  define cpu_has_veic			0
+-# endif
+-#else
++#if defined(CONFIG_CPU_MIPSR2_IRQ_VI) && !defined(cpu_has_vint)
++# define cpu_has_vint		(cpu_data[0].options & MIPS_CPU_VINT)
++#elif !defined(cpu_has_vint)
+ # define cpu_has_vint			0
++#endif
++
++#if defined(CONFIG_CPU_MIPSR2_IRQ_EI) && !defined(cpu_has_veic)
++# define cpu_has_veic		(cpu_data[0].options & MIPS_CPU_VEIC)
++#elif !defined(cpu_has_veic)
+ # define cpu_has_veic			0
+ #endif
+ 
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/futex.h linux-2.6.17.4-mips/include/asm-mips/futex.h
+--- linux-2.6.17.4-kernel/include/asm-mips/futex.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/futex.h	2006-07-06 16:58:16.000000000 -0700
+@@ -22,51 +22,53 @@
+ 		"	.set	push				\n"	\
+ 		"	.set	noat				\n"	\
+ 		"	.set	mips3				\n"	\
+-		"1:	ll	%1, (%3)	# __futex_atomic_op	\n" \
++		"1:	ll	%1, %4	# __futex_atomic_op	\n"	\
+ 		"	.set	mips0				\n"	\
+ 		"	" insn	"				\n"	\
+ 		"	.set	mips3				\n"	\
+-		"2:	sc	$1, (%3)			\n"	\
++		"2:	sc	$1, %2				\n"	\
+ 		"	beqzl	$1, 1b				\n"	\
+ 		__FUTEX_SMP_SYNC					\
+ 		"3:						\n"	\
+ 		"	.set	pop				\n"	\
+ 		"	.set	mips0				\n"	\
+ 		"	.section .fixup,\"ax\"			\n"	\
+-		"4:	li	%0, %5				\n"	\
++		"4:	li	%0, %6				\n"	\
+ 		"	j	2b				\n"	\
+ 		"	.previous				\n"	\
+ 		"	.section __ex_table,\"a\"		\n"	\
+ 		"	"__UA_ADDR "\t1b, 4b			\n"	\
+ 		"	"__UA_ADDR "\t2b, 4b			\n"	\
+ 		"	.previous				\n"	\
+-		: "=r" (ret), "=r" (oldval)				\
+-		: "0" (0), "r" (uaddr), "Jr" (oparg), "i" (-EFAULT));	\
++		: "=r" (ret), "=&r" (oldval), "=R" (*uaddr)		\
++		: "0" (0), "R" (*uaddr), "Jr" (oparg), "i" (-EFAULT)	\
++		: "memory");						\
+ 	} else if (cpu_has_llsc) {					\
+ 		__asm__ __volatile__(					\
+ 		"	.set	push				\n"	\
+ 		"	.set	noat				\n"	\
+ 		"	.set	mips3				\n"	\
+-		"1:	ll	%1, (%3)	# __futex_atomic_op	\n" \
++		"1:	ll	%1, %4	# __futex_atomic_op	\n"	\
+ 		"	.set	mips0				\n"	\
+ 		"	" insn	"				\n"	\
+ 		"	.set	mips3				\n"	\
+-		"2:	sc	$1, (%3)			\n"	\
++		"2:	sc	$1, %2				\n"	\
+ 		"	beqz	$1, 1b				\n"	\
+ 		__FUTEX_SMP_SYNC					\
+ 		"3:						\n"	\
+ 		"	.set	pop				\n"	\
+ 		"	.set	mips0				\n"	\
+ 		"	.section .fixup,\"ax\"			\n"	\
+-		"4:	li	%0, %5				\n"	\
++		"4:	li	%0, %6				\n"	\
+ 		"	j	2b				\n"	\
+ 		"	.previous				\n"	\
+ 		"	.section __ex_table,\"a\"		\n"	\
+ 		"	"__UA_ADDR "\t1b, 4b			\n"	\
+ 		"	"__UA_ADDR "\t2b, 4b			\n"	\
+ 		"	.previous				\n"	\
+-		: "=r" (ret), "=r" (oldval)				\
+-		: "0" (0), "r" (uaddr), "Jr" (oparg), "i" (-EFAULT));	\
++		: "=r" (ret), "=&r" (oldval), "=R" (*uaddr)		\
++		: "0" (0), "R" (*uaddr), "Jr" (oparg), "i" (-EFAULT)	\
++		: "memory");						\
+ 	} else								\
+ 		ret = -ENOSYS;						\
+ }
+@@ -89,23 +91,23 @@
+ 
+ 	switch (op) {
+ 	case FUTEX_OP_SET:
+-		__futex_atomic_op("move	$1, %z4", ret, oldval, uaddr, oparg);
++		__futex_atomic_op("move	$1, %z5", ret, oldval, uaddr, oparg);
+ 		break;
+ 
+ 	case FUTEX_OP_ADD:
+-		__futex_atomic_op("addu	$1, %1, %z4",
++		__futex_atomic_op("addu	$1, %1, %z5",
+ 		                  ret, oldval, uaddr, oparg);
+ 		break;
+ 	case FUTEX_OP_OR:
+-		__futex_atomic_op("or	$1, %1, %z4",
++		__futex_atomic_op("or	$1, %1, %z5",
+ 		                  ret, oldval, uaddr, oparg);
+ 		break;
+ 	case FUTEX_OP_ANDN:
+-		__futex_atomic_op("and	$1, %1, %z4",
++		__futex_atomic_op("and	$1, %1, %z5",
+ 		                  ret, oldval, uaddr, ~oparg);
+ 		break;
+ 	case FUTEX_OP_XOR:
+-		__futex_atomic_op("xor	$1, %1, %z4",
++		__futex_atomic_op("xor	$1, %1, %z5",
+ 		                  ret, oldval, uaddr, oparg);
+ 		break;
+ 	default:
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/hazards.h linux-2.6.17.4-mips/include/asm-mips/hazards.h
+--- linux-2.6.17.4-kernel/include/asm-mips/hazards.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/hazards.h	2006-07-06 16:58:16.000000000 -0700
+@@ -70,10 +70,10 @@
+  * Use a macro for ehb unless explicit support for MIPSR2 is enabled
+  */
+ 
+-#define irq_enable_hazard
++#define irq_enable_hazard						\
+ 	_ehb
+ 
+-#define irq_disable_hazard
++#define irq_disable_hazard						\
+ 	_ehb
+ 
+ #elif defined(CONFIG_CPU_R10000) || defined(CONFIG_CPU_RM9000)
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/io.h linux-2.6.17.4-mips/include/asm-mips/io.h
+--- linux-2.6.17.4-kernel/include/asm-mips/io.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/io.h	2006-07-06 16:58:16.000000000 -0700
+@@ -519,34 +519,6 @@
+ }
+ 
+ /*
+- * Memory Mapped I/O
+- */
+-#define ioread8(addr)		readb(addr)
+-#define ioread16(addr)		readw(addr)
+-#define ioread32(addr)		readl(addr)
+-
+-#define iowrite8(b,addr)	writeb(b,addr)
+-#define iowrite16(w,addr)	writew(w,addr)
+-#define iowrite32(l,addr)	writel(l,addr)
+-
+-#define ioread8_rep(a,b,c)	readsb(a,b,c)
+-#define ioread16_rep(a,b,c)	readsw(a,b,c)
+-#define ioread32_rep(a,b,c)	readsl(a,b,c)
+-
+-#define iowrite8_rep(a,b,c)	writesb(a,b,c)
+-#define iowrite16_rep(a,b,c)	writesw(a,b,c)
+-#define iowrite32_rep(a,b,c)	writesl(a,b,c)
+-
+-/* Create a virtual mapping cookie for an IO port range */
+-extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
+-extern void ioport_unmap(void __iomem *);
+-
+-/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
+-struct pci_dev;
+-extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+-extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
+-
+-/*
+  * ISA space is 'always mapped' on currently supported MIPS systems, no need
+  * to explicitly ioremap() it. The fact that the ISA IO space is mapped
+  * to PAGE_OFFSET is pure coincidence - it does not mean ISA values
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/irq.h linux-2.6.17.4-mips/include/asm-mips/irq.h
+--- linux-2.6.17.4-kernel/include/asm-mips/irq.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/irq.h	2006-07-06 16:58:16.000000000 -0700
+@@ -77,4 +77,8 @@
+                           unsigned long hwmask);
+ #endif /* CONFIG_MIPS_MT_SMTC */
+ 
++#ifdef CONFIG_SMP
++#define ARCH_HAS_IRQ_PER_CPU
++#endif
++
+ #endif /* _ASM_IRQ_H */
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/mach-au1x00/au1xxx_ide.h linux-2.6.17.4-mips/include/asm-mips/mach-au1x00/au1xxx_ide.h
+--- linux-2.6.17.4-kernel/include/asm-mips/mach-au1x00/au1xxx_ide.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/mach-au1x00/au1xxx_ide.h	2006-07-06 16:58:16.000000000 -0700
+@@ -84,6 +84,7 @@
+ } _auide_hwif;
+ 
+ #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
++
+ /* HD white list */
+ static const struct drive_list_entry dma_white_list [] = {
+ /*
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/mach-mips/irq.h linux-2.6.17.4-mips/include/asm-mips/mach-mips/irq.h
+--- linux-2.6.17.4-kernel/include/asm-mips/mach-mips/irq.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/mach-mips/irq.h	2006-07-06 16:58:16.000000000 -0700
+@@ -5,10 +5,4 @@
+ 
+ #define NR_IRQS	256
+ 
+-#ifdef CONFIG_SMP
+-
+-#define ARCH_HAS_IRQ_PER_CPU
+-
+-#endif
+-
+ #endif /* __ASM_MACH_MIPS_IRQ_H */
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/mipsregs.h linux-2.6.17.4-mips/include/asm-mips/mipsregs.h
+--- linux-2.6.17.4-kernel/include/asm-mips/mipsregs.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/mipsregs.h	2006-07-06 16:58:16.000000000 -0700
+@@ -1462,7 +1462,8 @@
+ static inline void __ehb(void)
+ {
+ 	__asm__ __volatile__(
+-	"	ehb							\n");
++	"	.set	mips32r2					\n"
++	"	ehb							\n"		"	.set	mips0						\n");
+ }
+ 
+ /*
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/smp.h linux-2.6.17.4-mips/include/asm-mips/smp.h
+--- linux-2.6.17.4-kernel/include/asm-mips/smp.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/smp.h	2006-07-06 16:58:16.000000000 -0700
+@@ -114,4 +114,33 @@
+ 
+ #endif /* CONFIG_SMP */
+ 
++int smp_call_function(void(*func)(void *info), void *info, int retry, int wait);
++
++/*
++ * Special Variant of smp_call_function for use by cache functions:
++ *
++ *  o No return value
++ *  o collapses to normal function call on UP kernels
++ *  o collapses to normal function call on systems with a single shared
++ *    primary cache.
++ *  o Both CONFIG_MIPS_MT_SMP and CONFIG_MIPS_MT_SMTC currently imply there
++ *    is only one physical core.
++ */
++static inline void __on_other_cores(void (*func) (void *info), void *info)
++{
++#if !defined(CONFIG_MIPS_MT_SMP) && !defined(CONFIG_MIPS_MT_SMTC)
++	smp_call_function(func, info, 1, 1);
++#endif
++}
++
++static inline void __on_each_core(void (*func) (void *info), void *info)
++{
++	preempt_disable();
++
++	__on_other_cores(func, info);
++	func(info);
++
++	preempt_enable();
++}
++
+ #endif /* __ASM_SMP_H */
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/stackframe.h linux-2.6.17.4-mips/include/asm-mips/stackframe.h
+--- linux-2.6.17.4-kernel/include/asm-mips/stackframe.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/stackframe.h	2006-07-06 16:58:16.000000000 -0700
+@@ -305,7 +305,7 @@
+ 		mfc0	v0, CP0_TCSTATUS
+ 		ori	v0, TCSTATUS_IXMT
+ 		mtc0	v0, CP0_TCSTATUS
+-		ehb
++		_ehb
+ 		DMT	5				# dmt a1
+ 		jal	mips_ihb
+ #endif /* CONFIG_MIPS_MT_SMTC */
+@@ -326,14 +326,14 @@
+  * restore TCStatus.IXMT.
+  */
+ 		LONG_L	v1, PT_TCSTATUS(sp)
+-		ehb
++		_ehb
+ 		mfc0	v0, CP0_TCSTATUS
+ 		andi	v1, TCSTATUS_IXMT
+ 		/* We know that TCStatua.IXMT should be set from above */
+ 		xori	v0, v0, TCSTATUS_IXMT
+ 		or	v0, v0, v1
+ 		mtc0	v0, CP0_TCSTATUS
+-		ehb
++		_ehb
+ 		andi	a1, a1, VPECONTROL_TE
+ 		beqz	a1, 1f
+ 		emt
+@@ -412,7 +412,7 @@
+ 		/* Clear TKSU, leave IXMT */
+ 		xori	t0, 0x00001800
+ 		mtc0	t0, CP0_TCSTATUS
+-		ehb
++		_ehb
+ 		/* We need to leave the global IE bit set, but clear EXL...*/
+ 		mfc0	t0, CP0_STATUS
+ 		ori	t0, ST0_EXL | ST0_ERL
+@@ -439,7 +439,7 @@
+ 		 * and enable interrupts only for the
+ 		 * current TC, using the TCStatus register.
+ 		 */
+-		ehb
++		_ehb
+ 		mfc0	t0,CP0_TCSTATUS
+ 		/* Fortunately CU 0 is in the same place in both registers */
+ 		/* Set TCU0, TKSU (for later inversion) and IXMT */
+@@ -448,7 +448,7 @@
+ 		/* Clear TKSU *and* IXMT */
+ 		xori	t0, 0x00001c00
+ 		mtc0	t0, CP0_TCSTATUS
+-		ehb
++		_ehb
+ 		/* We need to leave the global IE bit set, but clear EXL...*/
+ 		mfc0	t0, CP0_STATUS
+ 		ori	t0, ST0_EXL
+@@ -480,7 +480,7 @@
+ 		andi	v1, v0, TCSTATUS_IXMT
+ 		ori	v0, TCSTATUS_IXMT
+ 		mtc0	v0, CP0_TCSTATUS
+-		ehb
++		_ehb
+ 		DMT	2				# dmt	v0
+ 		/*
+ 		 * We don't know a priori if ra is "live"
+@@ -496,7 +496,7 @@
+ 		xori	t0, 0x1e
+ 		mtc0	t0, CP0_STATUS
+ #ifdef CONFIG_MIPS_MT_SMTC
+-		ehb
++		_ehb
+ 		andi	v0, v0, VPECONTROL_TE
+ 		beqz	v0, 2f
+ 		nop	/* delay slot */
+diff -Naur linux-2.6.17.4-kernel/include/asm-mips/unistd.h linux-2.6.17.4-mips/include/asm-mips/unistd.h
+--- linux-2.6.17.4-kernel/include/asm-mips/unistd.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/asm-mips/unistd.h	2006-07-06 16:58:16.000000000 -0700
+@@ -326,16 +326,17 @@
+ #define __NR_unshare			(__NR_Linux + 303)
+ #define __NR_splice			(__NR_Linux + 304)
+ #define __NR_sync_file_range		(__NR_Linux + 305)
++#define __NR_tee			(__NR_Linux + 306)
+ 
+ /*
+  * Offset of the last Linux o32 flavoured syscall
+  */
+-#define __NR_Linux_syscalls		305
++#define __NR_Linux_syscalls		306
+ 
+ #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
+ 
+ #define __NR_O32_Linux			4000
+-#define __NR_O32_Linux_syscalls		305
++#define __NR_O32_Linux_syscalls		306
+ 
+ #if _MIPS_SIM == _MIPS_SIM_ABI64
+ 
+@@ -608,16 +609,17 @@
+ #define __NR_unshare			(__NR_Linux + 262)
+ #define __NR_splice			(__NR_Linux + 263)
+ #define __NR_sync_file_range		(__NR_Linux + 264)
++#define __NR_tee			(__NR_Linux + 265)
+ 
+ /*
+  * Offset of the last Linux 64-bit flavoured syscall
+  */
+-#define __NR_Linux_syscalls		264
++#define __NR_Linux_syscalls		265
+ 
+ #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
+ 
+ #define __NR_64_Linux			5000
+-#define __NR_64_Linux_syscalls		264
++#define __NR_64_Linux_syscalls		265
+ 
+ #if _MIPS_SIM == _MIPS_SIM_NABI32
+ 
+@@ -894,16 +896,17 @@
+ #define __NR_unshare			(__NR_Linux + 266)
+ #define __NR_splice			(__NR_Linux + 267)
+ #define __NR_sync_file_range		(__NR_Linux + 268)
++#define __NR_tee			(__NR_Linux + 269)
+ 
+ /*
+  * Offset of the last N32 flavoured syscall
+  */
+-#define __NR_Linux_syscalls		268
++#define __NR_Linux_syscalls		269
+ 
+ #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
+ 
+ #define __NR_N32_Linux			6000
+-#define __NR_N32_Linux_syscalls		268
++#define __NR_N32_Linux_syscalls		269
+ 
+ #ifndef __ASSEMBLY__
+ 
+diff -Naur linux-2.6.17.4-kernel/include/linux/elf.h linux-2.6.17.4-mips/include/linux/elf.h
+--- linux-2.6.17.4-kernel/include/linux/elf.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/linux/elf.h	2006-07-06 16:58:16.000000000 -0700
+@@ -67,7 +67,7 @@
+ 
+ #define EM_MIPS		8	/* MIPS R3000 (officially, big-endian only) */
+ 
+-#define EM_MIPS_RS4_BE 10	/* MIPS R4000 big-endian */
++#define EM_MIPS_RS3_LE 10	/* MIPS R3000 little-endian */
+ 
+ #define EM_PARISC      15	/* HPPA */
+ 
+diff -Naur linux-2.6.17.4-kernel/include/linux/mc146818rtc.h linux-2.6.17.4-mips/include/linux/mc146818rtc.h
+--- linux-2.6.17.4-kernel/include/linux/mc146818rtc.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/linux/mc146818rtc.h	2006-07-06 16:58:16.000000000 -0700
+@@ -89,4 +89,12 @@
+ # define RTC_VRT 0x80		/* valid RAM and time */
+ /**********************************************************************/
+ 
++#ifndef RTC_IO_EXTENT
++#define RTC_IO_EXTENT	0x8
++#endif
++
++#ifndef RTC_IOMAPPED
++#define RTC_IOMAPPED	1	/* Default to I/O mapping. */
++#endif
++
+ #endif /* _MC146818RTC_H */
+diff -Naur linux-2.6.17.4-kernel/include/linux/pci_ids.h linux-2.6.17.4-mips/include/linux/pci_ids.h
+--- linux-2.6.17.4-kernel/include/linux/pci_ids.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/linux/pci_ids.h	2006-07-06 16:58:16.000000000 -0700
+@@ -1569,6 +1569,9 @@
+ #define PCI_VENDOR_ID_SATSAGEM		0x1267
+ #define PCI_DEVICE_ID_SATSAGEM_NICCY	0x1016
+ 
++#define PCI_VENDOR_ID_SILICON_MOTION		0x126f
++#define PCI_DEVICE_ID_SM501_VOYAGER_GX_REV_AA	0x0501
++#define PCI_DEVICE_ID_SM501_VOYAGER_GX_REV_B	0x0510
+ 
+ #define PCI_VENDOR_ID_ENSONIQ		0x1274
+ #define PCI_DEVICE_ID_ENSONIQ_CT5880	0x5880
+diff -Naur linux-2.6.17.4-kernel/include/linux/serial.h linux-2.6.17.4-mips/include/linux/serial.h
+--- linux-2.6.17.4-kernel/include/linux/serial.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/linux/serial.h	2006-07-06 16:58:16.000000000 -0700
+@@ -76,7 +76,8 @@
+ #define PORT_16654	11
+ #define PORT_16850	12
+ #define PORT_RSA	13	/* RSA-DV II/S card */
+-#define PORT_MAX	13
++#define PORT_SB1250	14
++#define PORT_MAX	14
+ 
+ #define SERIAL_IO_PORT	0
+ #define SERIAL_IO_HUB6	1
+diff -Naur linux-2.6.17.4-kernel/include/linux/serial_ip3106.h linux-2.6.17.4-mips/include/linux/serial_ip3106.h
+--- linux-2.6.17.4-kernel/include/linux/serial_ip3106.h	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/include/linux/serial_ip3106.h	2006-07-06 16:58:16.000000000 -0700
+@@ -78,4 +78,16 @@
+ #define IP3106_UART_FIFO_RXFIFO		0x00001F00
+ #define IP3106_UART_FIFO_RBRTHR		0x000000FF
+ 
++#define ip3106_lcr(base,port)    *(volatile u32 *)(base+(port*0x1000) + 0x000)
++#define ip3106_mcr(base, port)   *(volatile u32 *)(base+(port*0x1000) + 0x004)
++#define ip3106_baud(base, port)  *(volatile u32 *)(base+(port*0x1000) + 0x008)
++#define ip3106_cfg(base, port)   *(volatile u32 *)(base+(port*0x1000) + 0x00C)
++#define ip3106_fifo(base, port)	 *(volatile u32 *)(base+(port*0x1000) + 0x028)
++#define ip3106_istat(base, port) *(volatile u32 *)(base+(port*0x1000) + 0xFE0)
++#define ip3106_ien(base, port)   *(volatile u32 *)(base+(port*0x1000) + 0xFE4)
++#define ip3106_iclr(base, port)  *(volatile u32 *)(base+(port*0x1000) + 0xFE8)
++#define ip3106_iset(base, port)  *(volatile u32 *)(base+(port*0x1000) + 0xFEC)
++#define ip3106_pd(base, port)    *(volatile u32 *)(base+(port*0x1000) + 0xFF4)
++#define ip3106_mid(base, port)   *(volatile u32 *)(base+(port*0x1000) + 0xFFC)
++
+ #endif
+diff -Naur linux-2.6.17.4-kernel/sound/oss/au1550_ac97.c linux-2.6.17.4-mips/sound/oss/au1550_ac97.c
+--- linux-2.6.17.4-kernel/sound/oss/au1550_ac97.c	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/sound/oss/au1550_ac97.c	2006-07-06 16:58:16.000000000 -0700
+@@ -60,6 +60,7 @@
+ #include <asm/mach-au1x00/au1000.h>
+ #include <asm/mach-au1x00/au1xxx_psc.h>
+ #include <asm/mach-au1x00/au1xxx_dbdma.h>
++#include <asm/mach-pb1x00/pb1550.h>
+ 
+ #undef OSS_DOCUMENTED_MIXER_SEMANTICS
+ 
+diff -Naur linux-2.6.17.4-kernel/sound/oss/Kconfig linux-2.6.17.4-mips/sound/oss/Kconfig
+--- linux-2.6.17.4-kernel/sound/oss/Kconfig	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/sound/oss/Kconfig	2006-07-06 16:58:16.000000000 -0700
+@@ -117,6 +117,10 @@
+ 	tristate "Au1550 AC97 Sound"
+ 	depends on SOUND_PRIME && SOC_AU1550
+ 
++config SOUND_AU1550_I2S
++	tristate "Au1550 I2S Sound"
++	depends on SOUND_PRIME && SOC_AU1550
++
+ config SOUND_TRIDENT
+ 	tristate "Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core"
+ 	depends on SOUND_PRIME && PCI
+diff -Naur linux-2.6.17.4-kernel/sound/oss/Makefile linux-2.6.17.4-mips/sound/oss/Makefile
+--- linux-2.6.17.4-kernel/sound/oss/Makefile	2006-07-06 13:02:28.000000000 -0700
++++ linux-2.6.17.4-mips/sound/oss/Makefile	2006-07-06 16:58:16.000000000 -0700
+@@ -66,6 +66,7 @@
+ obj-$(CONFIG_SOUND_VRC5477)	+= nec_vrc5477.o ac97_codec.o
+ obj-$(CONFIG_SOUND_AU1000)	+= au1000.o ac97_codec.o
+ obj-$(CONFIG_SOUND_AU1550_AC97)	+= au1550_ac97.o ac97_codec.o
++obj-$(CONFIG_SOUND_AU1550_I2S)	+= au1550_i2s.o
+ obj-$(CONFIG_SOUND_ESSSOLO1)	+= esssolo1.o
+ obj-$(CONFIG_SOUND_FUSION)	+= cs46xx.o ac97_codec.o
+ obj-$(CONFIG_SOUND_MAESTRO)	+= maestro.o
+
+

Added: trunk/patches/linux-2.6.17.6-mips_fixes-1.patch
===================================================================
--- trunk/patches/linux-2.6.17.6-mips_fixes-1.patch	                        (rev 0)
+++ trunk/patches/linux-2.6.17.6-mips_fixes-1.patch	2006-07-20 19:45:36 UTC (rev 2052)
@@ -0,0 +1,361 @@
+Submitted By: Jim Gifford (patches at jg555 dot com)
+Date: 2006-07-08
+Initial Package Version: 2.6.17.4
+Origin: Linux-MIPS Mailing List
+Upstream Status: Not Applied
+Description: These are patches that have not been accepted by
+	     Linux-MIPS.
+
+	1 - iomap for MIPS - iomap.c io.h
+	2 - Cobalt ide fixes
+
+diff -Naur linux-2.6.17.4/arch/mips/lib/iomap.c linux-2.6.17.4.kernel/arch/mips/lib/iomap.c
+--- linux-2.6.17.4/arch/mips/lib/iomap.c	1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.17.4.kernel/arch/mips/lib/iomap.c	2006-06-30 10:37:38.000000000 -0700
+@@ -0,0 +1,78 @@
++/*
++ *  iomap.c, Memory Mapped I/O routines for MIPS architecture.
++ *
++ *  This code is based on lib/iomap.c, by Linus Torvalds.
++ *
++ *  Copyright (C) 2004-2005  Yoichi Yuasa <yoichi_yuasa at tripeaks.co.jp>
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++#include <linux/ioport.h>
++#include <linux/module.h>
++#include <linux/pci.h>
++
++#include <asm/io.h>
++
++void __iomem *ioport_map(unsigned long port, unsigned int nr)
++{
++	unsigned long end;
++
++	end = port + nr - 1UL;
++	if (ioport_resource.start > port ||
++	    ioport_resource.end < end || port > end)
++		return NULL;
++
++	return (void __iomem *)(mips_io_port_base + port);
++}
++
++void ioport_unmap(void __iomem *addr)
++{
++}
++EXPORT_SYMBOL(ioport_map);
++EXPORT_SYMBOL(ioport_unmap);
++
++void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
++{
++	unsigned long start, len, flags;
++
++	if (dev == NULL)
++		return NULL;
++
++	start = pci_resource_start(dev, bar);
++	len = pci_resource_len(dev, bar);
++	if (!start || !len)
++		return NULL;
++
++	if (maxlen != 0 && len > maxlen)
++		len = maxlen;
++
++	flags = pci_resource_flags(dev, bar);
++	if (flags & IORESOURCE_IO)
++		return ioport_map(start, len);
++	if (flags & IORESOURCE_MEM) {
++		if (flags & IORESOURCE_CACHEABLE)
++			return ioremap_cachable(start, len);
++		return ioremap_nocache(start, len);
++	}
++
++	return NULL;
++}
++
++void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
++{
++	iounmap(addr);
++}
++EXPORT_SYMBOL(pci_iomap);
++EXPORT_SYMBOL(pci_iounmap);
+diff -Naur linux-2.6.17.4/arch/mips/lib/Makefile linux-2.6.17.4.kernel/arch/mips/lib/Makefile
+--- linux-2.6.17.4/arch/mips/lib/Makefile	2006-07-02 01:53:19.000000000 -0700
++++ linux-2.6.17.4.kernel/arch/mips/lib/Makefile	2006-07-07 12:40:23.000000000 -0700
+@@ -5,6 +5,8 @@
+ lib-y	+= csum_partial_copy.o memcpy.o promlib.o strlen_user.o strncpy_user.o \
+ 	   strnlen_user.o uncached.o
+ 
++obj-y	+= iomap.o
++
+ # libgcc-style stuff needed in the kernel
+ lib-y += ashldi3.o ashrdi3.o lshrdi3.o
+ 
+diff -Naur linux-2.6.17.4/include/asm-mips/io.h linux-2.6.17.4.kernel/include/asm-mips/io.h
+--- linux-2.6.17.4/include/asm-mips/io.h	2006-07-02 01:53:19.000000000 -0700
++++ linux-2.6.17.4.kernel/include/asm-mips/io.h	2006-07-07 12:44:03.000000000 -0700
+@@ -519,6 +519,34 @@
+ }
+ 
+ /*
++ * Memory Mapped I/O
++ */
++#define ioread8(addr)		readb(addr)
++#define ioread16(addr)		readw(addr)
++#define ioread32(addr)		readl(addr)
++
++#define iowrite8(b,addr)	writeb(b,addr)
++#define iowrite16(w,addr)	writew(w,addr)
++#define iowrite32(l,addr)	writel(l,addr)
++
++#define ioread8_rep(a,b,c)	readsb(a,b,c)
++#define ioread16_rep(a,b,c)	readsw(a,b,c)
++#define ioread32_rep(a,b,c)	readsl(a,b,c)
++
++#define iowrite8_rep(a,b,c)	writesb(a,b,c)
++#define iowrite16_rep(a,b,c)	writesw(a,b,c)
++#define iowrite32_rep(a,b,c)	writesl(a,b,c)
++
++/* Create a virtual mapping cookie for an IO port range */
++extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
++extern void ioport_unmap(void __iomem *);
++
++/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
++struct pci_dev;
++extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
++extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
++
++/*
+  * ISA space is 'always mapped' on currently supported MIPS systems, no need
+  * to explicitly ioremap() it. The fact that the ISA IO space is mapped
+  * to PAGE_OFFSET is pure coincidence - it does not mean ISA values
+diff -Naur linux-2.6.17.4/include/asm-mips/mach-cobalt/ide.h linux-2.6.17.4.kernel/include/asm-mips/mach-cobalt/ide.h
+--- linux-2.6.17.4/include/asm-mips/mach-cobalt/ide.h	1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.17.4.kernel/include/asm-mips/mach-cobalt/ide.h	2006-07-07 12:40:46.000000000 -0700
+@@ -0,0 +1,83 @@
++
++/*
++ * PIO "in" transfers can cause D-cache lines to be allocated
++ * to the data being read. If the target is the page cache then
++ * the kernel can create a user space mapping of the same page
++ * without flushing it from the D-cache. This has large potential
++ * to create cache aliases. The Cobalts seem to trigger this
++ * problem easily.
++ *
++ * MIPs doesn't have a flush_dcache_range() so we roll
++ * our own.
++ *
++ * -- pdh
++ */
++
++#define MAX_HWIFS			2
++
++#include <asm/r4kcache.h>
++
++static inline void __flush_dcache(void)
++{
++	unsigned long dc_size, dc_line, addr, end;
++
++	dc_size = current_cpu_data.dcache.ways << current_cpu_data.dcache.waybit;
++	dc_line = current_cpu_data.dcache.linesz;
++
++	addr = CKSEG0;
++	end = addr + dc_size;
++
++	for (; addr < end; addr += dc_line)
++		flush_dcache_line_indexed(addr);
++}
++
++static inline void __flush_dcache_range(unsigned long start, unsigned long end)
++{
++	unsigned long dc_size, dc_line, addr;
++
++	dc_size = current_cpu_data.dcache.ways << current_cpu_data.dcache.waybit;
++	dc_line = current_cpu_data.dcache.linesz;
++
++	addr = start & ~(dc_line - 1);
++	end += dc_line - 1;
++
++	if (end - addr < dc_size)
++		for (; addr < end; addr += dc_line)
++			flush_dcache_line(addr);
++	else
++		__flush_dcache();
++}
++
++static inline void __ide_insw(unsigned long port, void *addr, unsigned int count)
++{
++	insw(port, addr, count);
++
++	__flush_dcache_range((unsigned long) addr, (unsigned long) addr + count * 2);
++}
++
++static inline void __ide_insl(unsigned long port, void *addr, unsigned int count)
++{
++	insl(port, addr, count);
++
++	__flush_dcache_range((unsigned long) addr, (unsigned long) addr + count * 4);
++}
++
++static inline void __ide_mm_insw(volatile void __iomem *port, void *addr, unsigned int count)
++{
++	readsw(port, addr, count);
++
++	__flush_dcache_range((unsigned long) addr, (unsigned long) addr + count * 2);
++}
++
++static inline void __ide_mm_insl(volatile void __iomem *port, void *addr, unsigned int count)
++{
++	readsl(port, addr, count);
++
++	__flush_dcache_range((unsigned long) addr, (unsigned long) addr + count * 4);
++}
++
++#define insw			__ide_insw
++#define insl			__ide_insl
++
++#define __ide_mm_outsw		writesw
++#define __ide_mm_outsl		writesl
+diff -Naur linux-2.6.17.4/arch/mips/lib/ashldi3.c linux-2.6.17.4/arch/mips/lib/ashldi3.c
+--- linux-2.6.17.4/arch/mips/lib/ashldi3.c	1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.17.4/arch/mips/lib/ashldi3.c	2006-06-19 18:16:13.000000000 -0700
+@@ -0,0 +1,29 @@
++#include <linux/module.h>
++
++#include "libgcc.h"
++
++long long __ashldi3(long long u, word_type b)
++{
++	DWunion uu, w;
++	word_type bm;
++
++	if (b == 0)
++		return u;
++
++	uu.ll = u;
++	bm = 32 - b;
++
++	if (bm <= 0) {
++		w.s.low = 0;
++		w.s.high = (unsigned int) uu.s.low << -bm;
++	} else {
++		const unsigned int carries = (unsigned int) uu.s.low >> bm;
++
++		w.s.low = (unsigned int) uu.s.low << b;
++		w.s.high = ((unsigned int) uu.s.high << b) | carries;
++	}
++
++	return w.ll;
++}
++
++EXPORT_SYMBOL(__ashldi3);
+diff -Naur linux-2.6.17.4/arch/mips/lib/ashrdi3.c linux-2.6.17.4/arch/mips/lib/ashrdi3.c
+--- linux-2.6.17.4/arch/mips/lib/ashrdi3.c	1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.17.4/arch/mips/lib/ashrdi3.c	2006-06-19 18:16:13.000000000 -0700
+@@ -0,0 +1,31 @@
++#include <linux/module.h>
++
++#include "libgcc.h"
++
++long long __ashrdi3(long long u, word_type b)
++{
++	DWunion uu, w;
++	word_type bm;
++
++	if (b == 0)
++		return u;
++
++	uu.ll = u;
++	bm = 32 - b;
++
++	if (bm <= 0) {
++		/* w.s.high = 1..1 or 0..0 */
++		w.s.high =
++		    uu.s.high >> 31;
++		w.s.low = uu.s.high >> -bm;
++	} else {
++		const unsigned int carries = (unsigned int) uu.s.high << bm;
++
++		w.s.high = uu.s.high >> b;
++		w.s.low = ((unsigned int) uu.s.low >> b) | carries;
++	}
++
++	return w.ll;
++}
++
++EXPORT_SYMBOL(__ashrdi3);
+diff -Naur linux-2.6.17.4/arch/mips/lib/libgcc.h linux-2.6.17.4/arch/mips/lib/libgcc.h
+--- linux-2.6.17.4/arch/mips/lib/libgcc.h	1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.17.4/arch/mips/lib/libgcc.h	2006-06-19 18:16:13.000000000 -0700
+@@ -0,0 +1,26 @@
++#ifndef __ASM_LIBGCC_H
++#define __ASM_LIBGCC_H
++
++#include <asm/byteorder.h>
++
++typedef int word_type __attribute__ ((mode (__word__)));
++
++#ifdef __BIG_ENDIAN
++struct DWstruct {
++	int high, low;
++};
++#elif defined(__LITTLE_ENDIAN)
++struct DWstruct {
++	int low, high;
++};
++#else
++#error I feel sick.
++#endif
++
++typedef union
++{
++	struct DWstruct s;
++	long long ll;
++} DWunion;
++
++#endif /* __ASM_LIBGCC_H */
+diff -Naur linux-2.6.17.4/arch/mips/lib/lshrdi3.c linux-2.6.17.4/arch/mips/lib/lshrdi3.c
+--- linux-2.6.17.4/arch/mips/lib/lshrdi3.c	1969-12-31 16:00:00.000000000 -0800
++++ linux-2.6.17.4/arch/mips/lib/lshrdi3.c	2006-06-19 18:16:13.000000000 -0700
+@@ -0,0 +1,29 @@
++#include <linux/module.h>
++
++#include "libgcc.h"
++
++long long __lshrdi3(long long u, word_type b)
++{
++	DWunion uu, w;
++	word_type bm;
++
++	if (b == 0)
++		return u;
++
++	uu.ll = u;
++	bm = 32 - b;
++
++	if (bm <= 0) {
++		w.s.high = 0;
++		w.s.low = (unsigned int) uu.s.high >> -bm;
++	} else {
++		const unsigned int carries = (unsigned int) uu.s.high << bm;
++
++		w.s.high = (unsigned int) uu.s.high >> b;
++		w.s.low = ((unsigned int) uu.s.low >> b) | carries;
++	}
++
++	return w.ll;
++}
++
++EXPORT_SYMBOL(__lshrdi3);




More information about the cross-lfs mailing list