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@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@megasolution.jp>
- *  Copyright (C) 2004  Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
+ *  Copyright (C) 2004-2005  Yoichi Yuasa <yoichi_yuasa@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@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@mvista.com or support@mvista.com
+ * Copyright 2004, 05 Ralf Baechle (ralf@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


