uncompress patches, requested by Kaloz
authorWaldemar Brodkorb <mail@waldemar-brodkorb.de>
Sat, 26 Mar 2005 10:33:32 +0000 (10:33 +0000)
committerWaldemar Brodkorb <mail@waldemar-brodkorb.de>
Sat, 26 Mar 2005 10:33:32 +0000 (10:33 +0000)
SVN-Revision: 460

82 files changed:
openwrt/package/linux/kernel-patches/000-linux-mips-cvs [new file with mode: 0644]
openwrt/package/linux/kernel-patches/000-linux-mips-cvs.bz2 [deleted file]
openwrt/package/linux/kernel-patches/001-Makefile [new file with mode: 0644]
openwrt/package/linux/kernel-patches/001-Makefile.bz2 [deleted file]
openwrt/package/linux/kernel-patches/002-Rules_make [new file with mode: 0644]
openwrt/package/linux/kernel-patches/002-Rules_make.bz2 [deleted file]
openwrt/package/linux/kernel-patches/003-arch_mips_Makefile [new file with mode: 0644]
openwrt/package/linux/kernel-patches/003-arch_mips_Makefile.bz2 [deleted file]
openwrt/package/linux/kernel-patches/005-arch_mips_config-shared_in [new file with mode: 0644]
openwrt/package/linux/kernel-patches/005-arch_mips_config-shared_in.bz2 [deleted file]
openwrt/package/linux/kernel-patches/007-arch_mips_kernel_cpu-probe_c [new file with mode: 0644]
openwrt/package/linux/kernel-patches/007-arch_mips_kernel_cpu-probe_c.bz2 [deleted file]
openwrt/package/linux/kernel-patches/009-arch_mips_kernel_head_S [new file with mode: 0644]
openwrt/package/linux/kernel-patches/009-arch_mips_kernel_head_S.bz2 [deleted file]
openwrt/package/linux/kernel-patches/010-arch_mips_kernel_proc_c [new file with mode: 0644]
openwrt/package/linux/kernel-patches/010-arch_mips_kernel_proc_c.bz2 [deleted file]
openwrt/package/linux/kernel-patches/011-arch_mips_kernel_setup_c [new file with mode: 0644]
openwrt/package/linux/kernel-patches/011-arch_mips_kernel_setup_c.bz2 [deleted file]
openwrt/package/linux/kernel-patches/012-arch_mips_kernel_traps_c [new file with mode: 0644]
openwrt/package/linux/kernel-patches/012-arch_mips_kernel_traps_c.bz2 [deleted file]
openwrt/package/linux/kernel-patches/017-arch_mips_pci_Makefile [new file with mode: 0644]
openwrt/package/linux/kernel-patches/017-arch_mips_pci_Makefile.bz2 [deleted file]
openwrt/package/linux/kernel-patches/018_drivers_char_mem_c [new file with mode: 0644]
openwrt/package/linux/kernel-patches/018_drivers_char_mem_c.bz2 [deleted file]
openwrt/package/linux/kernel-patches/019-drivers_char_serial_c [new file with mode: 0644]
openwrt/package/linux/kernel-patches/019-drivers_char_serial_c.bz2 [deleted file]
openwrt/package/linux/kernel-patches/020-drivers_mtd-jumbo [new file with mode: 0644]
openwrt/package/linux/kernel-patches/020-drivers_mtd-jumbo.bz2 [deleted file]
openwrt/package/linux/kernel-patches/021-drivers_net_Config_in-hnd [new file with mode: 0644]
openwrt/package/linux/kernel-patches/021-drivers_net_Config_in-hnd.bz2 [deleted file]
openwrt/package/linux/kernel-patches/022-drivers_net_Makefile [new file with mode: 0644]
openwrt/package/linux/kernel-patches/022-drivers_net_Makefile.bz2 [deleted file]
openwrt/package/linux/kernel-patches/023-drivers_parport_Makefile [new file with mode: 0644]
openwrt/package/linux/kernel-patches/023-drivers_parport_Makefile.bz2 [deleted file]
openwrt/package/linux/kernel-patches/024-drivers_parport_Config_in [new file with mode: 0644]
openwrt/package/linux/kernel-patches/024-drivers_parport_Config_in.bz2 [deleted file]
openwrt/package/linux/kernel-patches/027-drivers_net_port_based_qos [new file with mode: 0644]
openwrt/package/linux/kernel-patches/027-drivers_net_port_based_qos.bz2 [deleted file]
openwrt/package/linux/kernel-patches/028-drivers_pcmcia_Makefile [new file with mode: 0644]
openwrt/package/linux/kernel-patches/028-drivers_pcmcia_Makefile.bz2 [deleted file]
openwrt/package/linux/kernel-patches/029-arch_mips_mm_c-r4k_c [new file with mode: 0644]
openwrt/package/linux/kernel-patches/029-arch_mips_mm_c-r4k_c.bz2 [deleted file]
openwrt/package/linux/kernel-patches/031-include_asm-mips_bootinfo_h [new file with mode: 0644]
openwrt/package/linux/kernel-patches/031-include_asm-mips_bootinfo_h.bz2 [deleted file]
openwrt/package/linux/kernel-patches/033-include_asm-mips_cpu_h [new file with mode: 0644]
openwrt/package/linux/kernel-patches/033-include_asm-mips_cpu_h.bz2 [deleted file]
openwrt/package/linux/kernel-patches/036-include_asm-mips_serial_h [new file with mode: 0644]
openwrt/package/linux/kernel-patches/036-include_asm-mips_serial_h.bz2 [deleted file]
openwrt/package/linux/kernel-patches/037-init_do_mounts_c [new file with mode: 0644]
openwrt/package/linux/kernel-patches/037-init_do_mounts_c.bz2 [deleted file]
openwrt/package/linux/kernel-patches/100-gcc3-mtune [new file with mode: 0644]
openwrt/package/linux/kernel-patches/100-gcc3-mtune.bz2 [deleted file]
openwrt/package/linux/kernel-patches/103-net_core_dev-performance [new file with mode: 0644]
openwrt/package/linux/kernel-patches/103-net_core_dev-performance.bz2 [deleted file]
openwrt/package/linux/kernel-patches/200-include_linux_netdevice_h-wlfix [new file with mode: 0644]
openwrt/package/linux/kernel-patches/200-include_linux_netdevice_h-wlfix.bz2 [deleted file]
openwrt/package/linux/kernel-patches/201-net_core_Makefile-wlfix [new file with mode: 0644]
openwrt/package/linux/kernel-patches/201-net_core_Makefile-wlfix.bz2 [deleted file]
openwrt/package/linux/kernel-patches/202-net_sched_sch_generic_c-wlfix [new file with mode: 0644]
openwrt/package/linux/kernel-patches/202-net_sched_sch_generic_c-wlfix.bz2 [deleted file]
openwrt/package/linux/kernel-patches/203-include_net_pkt_sched_h-wlfix [new file with mode: 0644]
openwrt/package/linux/kernel-patches/203-include_net_pkt_sched_h-wlfix.bz2 [deleted file]
openwrt/package/linux/kernel-patches/204-net_sched_sch_api_c-wlfix [new file with mode: 0644]
openwrt/package/linux/kernel-patches/204-net_sched_sch_api_c-wlfix.bz2 [deleted file]
openwrt/package/linux/kernel-patches/205-net_core_dev_c-wlfix [new file with mode: 0644]
openwrt/package/linux/kernel-patches/205-net_core_dev_c-wlfix.bz2 [deleted file]
openwrt/package/linux/kernel-patches/206-include_linux_skbuff_h-wlfix [new file with mode: 0644]
openwrt/package/linux/kernel-patches/206-include_linux_skbuff_h-wlfix.bz2 [deleted file]
openwrt/package/linux/kernel-patches/300-squashfs2.1 [new file with mode: 0644]
openwrt/package/linux/kernel-patches/300-squashfs2.1.bz2 [deleted file]
openwrt/package/linux/kernel-patches/301-jffs-compression [new file with mode: 0644]
openwrt/package/linux/kernel-patches/301-jffs-compression.bz2 [deleted file]
openwrt/package/linux/kernel-patches/302-ebtables [new file with mode: 0644]
openwrt/package/linux/kernel-patches/302-ebtables.bz2 [deleted file]
openwrt/package/linux/kernel-patches/303-mppe-mppc [new file with mode: 0644]
openwrt/package/linux/kernel-patches/303-mppe-mppc.bz2 [deleted file]
openwrt/package/linux/kernel-patches/304-netfilter-ipp2p-0.7.4 [new file with mode: 0644]
openwrt/package/linux/kernel-patches/304-netfilter-ipp2p-0.7.4.bz2 [deleted file]
openwrt/package/linux/kernel-patches/305-cifs-1.20c [new file with mode: 0644]
openwrt/package/linux/kernel-patches/305-cifs-1.20c.bz2 [deleted file]
openwrt/package/linux/kernel-patches/600-linux-squashfs-lzma [new file with mode: 0644]
openwrt/package/linux/kernel-patches/600-linux-squashfs-lzma.bz2 [deleted file]

diff --git a/openwrt/package/linux/kernel-patches/000-linux-mips-cvs b/openwrt/package/linux/kernel-patches/000-linux-mips-cvs
new file mode 100644 (file)
index 0000000..dbd23de
--- /dev/null
@@ -0,0 +1,25246 @@
+diff -Nur linux-2.4.29/Makefile linux-mips/Makefile
+--- linux-2.4.29/Makefile      2005-01-19 15:10:14.000000000 +0100
++++ linux-mips/Makefile        2005-01-20 03:19:21.000000000 +0100
+@@ -5,7 +5,7 @@
+ KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
+-ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
++ARCH = mips
+ KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g")
+ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
+@@ -462,10 +462,11 @@
+       $(MAKE) -C Documentation/DocBook mrproper
+ distclean: mrproper
+-      rm -f core `find . \( -not -type d \) -and \
+-              \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
+-              -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
+-              -o -name '.*.rej' -o -name '.SUMS' -o -size 0 \) -type f -print` TAGS tags
++      find . \( -not -type d \) -and \
++              \( -name core -o -name '*.orig' -o -name '*.rej' \
++              -o -name '*~' -o -name '*.bak' -o -name '#*#' \
++              -o -name '.*.rej' -o -name '.SUMS' -o -size 0 \
++              -o -name TAGS -o -name tags \) -print | env -i xargs rm -f
+ backup: mrproper
+       cd .. && tar cf - linux/ | gzip -9 > backup.gz
+@@ -492,7 +493,7 @@
+       $(MAKE) -C Documentation/DocBook man
+ sums:
+-      find . -type f -print | sort | xargs sum > .SUMS
++      find . -type f -print | sort | env -i xargs sum > .SUMS
+ dep-files: scripts/mkdep archdep include/linux/version.h
+       rm -f .depend .hdepend
+diff -Nur linux-2.4.29/arch/mips/Makefile linux-mips/arch/mips/Makefile
+--- linux-2.4.29/arch/mips/Makefile    2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/Makefile      2005-01-31 12:59:28.000000000 +0100
+@@ -211,7 +211,7 @@
+ endif
+ #
+-# Au1000 (Alchemy Semi PB1000) eval board
++# Au1x AMD Alchemy eval boards
+ #
+ ifdef CONFIG_MIPS_PB1000
+ LIBS          += arch/mips/au1000/pb1000/pb1000.o \
+@@ -220,9 +220,6 @@
+ LOADADDR      := 0x80100000
+ endif
+-#
+-# Au1100 (Alchemy Semi PB1100) eval board
+-#
+ ifdef CONFIG_MIPS_PB1100
+ LIBS          += arch/mips/au1000/pb1100/pb1100.o \
+                  arch/mips/au1000/common/au1000.o
+@@ -230,9 +227,6 @@
+ LOADADDR      += 0x80100000
+ endif
+-#
+-# Au1500 (Alchemy Semi PB1500) eval board
+-#
+ ifdef CONFIG_MIPS_PB1500
+ LIBS          += arch/mips/au1000/pb1500/pb1500.o \
+                  arch/mips/au1000/common/au1000.o
+@@ -240,9 +234,6 @@
+ LOADADDR      := 0x80100000
+ endif
+-#
+-# Au1x00 (AMD/Alchemy) eval boards
+-#
+ ifdef CONFIG_MIPS_DB1000
+ LIBS          += arch/mips/au1000/db1x00/db1x00.o \
+                  arch/mips/au1000/common/au1000.o
+@@ -313,6 +304,27 @@
+ LOADADDR      += 0x80100000
+ endif
++ifdef CONFIG_MIPS_PB1200
++LIBS          += arch/mips/au1000/pb1200/pb1200.o \
++                 arch/mips/au1000/common/au1000.o
++SUBDIRS       += arch/mips/au1000/pb1200 arch/mips/au1000/common
++LOADADDR      += 0x80100000
++endif
++
++ifdef CONFIG_MIPS_DB1200
++LIBS          += arch/mips/au1000/pb1200/pb1200.o \
++                 arch/mips/au1000/common/au1000.o
++SUBDIRS       += arch/mips/au1000/pb1200 arch/mips/au1000/common
++LOADADDR      += 0x80100000
++endif
++
++ifdef CONFIG_MIPS_FICMMP
++LIBS          += arch/mips/au1000/ficmmp/ficmmp.o \
++                 arch/mips/au1000/common/au1000.o
++SUBDIRS       += arch/mips/au1000/ficmmp arch/mips/au1000/common
++LOADADDR      += 0x80100000
++endif
++
+ #
+ # Cogent CSB250
+diff -Nur linux-2.4.29/arch/mips/au1000/common/Makefile linux-mips/arch/mips/au1000/common/Makefile
+--- linux-2.4.29/arch/mips/au1000/common/Makefile      2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/Makefile        2005-01-31 12:59:30.000000000 +0100
+@@ -19,9 +19,9 @@
+ export-objs           = prom.o clocks.o power.o usbdev.o
+ obj-y := prom.o int-handler.o irq.o puts.o time.o reset.o cputable.o \
+-      au1xxx_irqmap.o clocks.o power.o setup.o sleeper.o dma.o dbdma.o
++      au1xxx_irqmap.o clocks.o power.o setup.o sleeper.o dma.o dbdma.o gpio.o
+   
+-export-objs += dma.o dbdma.o
++export-objs += dma.o dbdma.o gpio.o
+ obj-$(CONFIG_AU1X00_USB_DEVICE) += usbdev.o
+ obj-$(CONFIG_KGDB) += dbg_io.o
+diff -Nur linux-2.4.29/arch/mips/au1000/common/au1xxx_irqmap.c linux-mips/arch/mips/au1000/common/au1xxx_irqmap.c
+--- linux-2.4.29/arch/mips/au1000/common/au1xxx_irqmap.c       2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/au1xxx_irqmap.c 2005-01-31 12:59:30.000000000 +0100
+@@ -172,14 +172,14 @@
+       { AU1550_PSC1_INT, INTC_INT_HIGH_LEVEL, 0},
+       { AU1550_PSC2_INT, INTC_INT_HIGH_LEVEL, 0},
+       { AU1550_PSC3_INT, INTC_INT_HIGH_LEVEL, 0},
+-      { AU1550_TOY_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1550_TOY_MATCH0_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1550_TOY_MATCH1_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1550_TOY_MATCH2_INT, INTC_INT_RISE_EDGE, 1 },
+-      { AU1550_RTC_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1550_RTC_MATCH0_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1550_RTC_MATCH1_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1550_RTC_MATCH2_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_TOY_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_TOY_MATCH0_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_TOY_MATCH1_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_TOY_MATCH2_INT, INTC_INT_RISE_EDGE, 1 },
++      { AU1000_RTC_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_RTC_MATCH0_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_RTC_MATCH1_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_RTC_MATCH2_INT, INTC_INT_RISE_EDGE, 0 },
+       { AU1550_NAND_INT, INTC_INT_RISE_EDGE, 0},
+       { AU1550_USB_DEV_REQ_INT, INTC_INT_HIGH_LEVEL, 0 },
+       { AU1550_USB_DEV_SUS_INT, INTC_INT_RISE_EDGE, 0 },
+@@ -200,14 +200,14 @@
+       { AU1200_PSC1_INT, INTC_INT_HIGH_LEVEL, 0},
+       { AU1200_AES_INT, INTC_INT_HIGH_LEVEL, 0},
+       { AU1200_CAMERA_INT, INTC_INT_HIGH_LEVEL, 0},
+-      { AU1200_TOY_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1200_TOY_MATCH0_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1200_TOY_MATCH1_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1200_TOY_MATCH2_INT, INTC_INT_RISE_EDGE, 1 },
+-      { AU1200_RTC_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1200_RTC_MATCH0_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1200_RTC_MATCH1_INT, INTC_INT_RISE_EDGE, 0 },
+-      { AU1200_RTC_MATCH2_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_TOY_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_TOY_MATCH0_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_TOY_MATCH1_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_TOY_MATCH2_INT, INTC_INT_RISE_EDGE, 1 },
++      { AU1000_RTC_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_RTC_MATCH0_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_RTC_MATCH1_INT, INTC_INT_RISE_EDGE, 0 },
++      { AU1000_RTC_MATCH2_INT, INTC_INT_RISE_EDGE, 0 },
+       { AU1200_NAND_INT, INTC_INT_RISE_EDGE, 0},
+       { AU1200_USB_INT, INTC_INT_HIGH_LEVEL, 0 },
+       { AU1200_LCD_INT, INTC_INT_HIGH_LEVEL, 0},
+diff -Nur linux-2.4.29/arch/mips/au1000/common/cputable.c linux-mips/arch/mips/au1000/common/cputable.c
+--- linux-2.4.29/arch/mips/au1000/common/cputable.c    2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/cputable.c      2005-01-31 12:59:30.000000000 +0100
+@@ -39,7 +39,8 @@
+     { 0xffffffff, 0x02030203, "Au1100 BD", 0, 1 },
+     { 0xffffffff, 0x02030204, "Au1100 BE", 0, 1 },
+     { 0xffffffff, 0x03030200, "Au1550 AA", 0, 1 },
+-    { 0xffffffff, 0x04030200, "Au1200 AA", 0, 1 },
++    { 0xffffffff, 0x04030200, "Au1200 AB", 0, 0 },
++    { 0xffffffff, 0x04030201, "Au1200 AC", 0, 0 },
+     { 0x00000000, 0x00000000, "Unknown Au1xxx", 1, 0 },
+ };
+diff -Nur linux-2.4.29/arch/mips/au1000/common/dbdma.c linux-mips/arch/mips/au1000/common/dbdma.c
+--- linux-2.4.29/arch/mips/au1000/common/dbdma.c       2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/dbdma.c 2005-02-12 04:05:28.000000000 +0100
+@@ -41,6 +41,8 @@
+ #include <asm/au1xxx_dbdma.h>
+ #include <asm/system.h>
++#include <linux/module.h>
++
+ #if defined(CONFIG_SOC_AU1550) || defined(CONFIG_SOC_AU1200)
+ /*
+@@ -60,37 +62,10 @@
+ */
+ #define ALIGN_ADDR(x, a)      ((((u32)(x)) + (a-1)) & ~(a-1))
+-static volatile dbdma_global_t *dbdma_gptr = (dbdma_global_t *)DDMA_GLOBAL_BASE;
+-static int dbdma_initialized;
++static dbdma_global_t *dbdma_gptr = (dbdma_global_t *)DDMA_GLOBAL_BASE;
++static int dbdma_initialized=0;
+ static void au1xxx_dbdma_init(void);
+-typedef struct dbdma_device_table {
+-      u32             dev_id;
+-      u32             dev_flags;
+-      u32             dev_tsize;
+-      u32             dev_devwidth;
+-      u32             dev_physaddr;           /* If FIFO */
+-      u32             dev_intlevel;
+-      u32             dev_intpolarity;
+-} dbdev_tab_t;
+-
+-typedef struct dbdma_chan_config {
+-      u32                     chan_flags;
+-      u32                     chan_index;
+-      dbdev_tab_t             *chan_src;
+-      dbdev_tab_t             *chan_dest;
+-      au1x_dma_chan_t         *chan_ptr;
+-      au1x_ddma_desc_t        *chan_desc_base;
+-      au1x_ddma_desc_t        *get_ptr, *put_ptr, *cur_ptr;
+-      void                    *chan_callparam;
+-      void (*chan_callback)(int, void *, struct pt_regs *);
+-} chan_tab_t;
+-
+-#define       DEV_FLAGS_INUSE         (1 << 0)
+-#define       DEV_FLAGS_ANYUSE        (1 << 1)
+-#define DEV_FLAGS_OUT         (1 << 2)
+-#define DEV_FLAGS_IN          (1 << 3)
+-
+ static dbdev_tab_t dbdev_tab[] = {
+ #ifdef CONFIG_SOC_AU1550
+       /* UARTS */
+@@ -156,13 +131,13 @@
+       { DSCR_CMD0_MAE_BOTH, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 },
+       { DSCR_CMD0_LCD, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 },
+-      { DSCR_CMD0_SDMS_TX0, DEV_FLAGS_OUT, 0, 0, 0x00000000, 0, 0 },
+-      { DSCR_CMD0_SDMS_RX0, DEV_FLAGS_IN, 0, 0, 0x00000000, 0, 0 },
+-      { DSCR_CMD0_SDMS_TX1, DEV_FLAGS_OUT, 0, 0, 0x00000000, 0, 0 },
+-      { DSCR_CMD0_SDMS_RX1, DEV_FLAGS_IN, 0, 0, 0x00000000, 0, 0 },
++      { DSCR_CMD0_SDMS_TX0, DEV_FLAGS_OUT, 4, 8, 0x10600000, 0, 0 },
++      { DSCR_CMD0_SDMS_RX0, DEV_FLAGS_IN, 4, 8, 0x10600004, 0, 0 },
++      { DSCR_CMD0_SDMS_TX1, DEV_FLAGS_OUT, 4, 8, 0x10680000, 0, 0 },
++      { DSCR_CMD0_SDMS_RX1, DEV_FLAGS_IN, 4, 8, 0x10680004, 0, 0 },
+-      { DSCR_CMD0_AES_TX, DEV_FLAGS_OUT, 0, 0, 0x00000000, 0, 0 },
+-      { DSCR_CMD0_AES_RX, DEV_FLAGS_IN, 0, 0, 0x00000000, 0, 0 },
++      { DSCR_CMD0_AES_RX, DEV_FLAGS_IN , 4, 32, 0x10300008, 0, 0 },
++      { DSCR_CMD0_AES_TX, DEV_FLAGS_OUT, 4, 32, 0x10300004, 0, 0 },
+       { DSCR_CMD0_PSC0_TX, DEV_FLAGS_OUT, 0, 0, 0x11a0001c, 0, 0 },
+       { DSCR_CMD0_PSC0_RX, DEV_FLAGS_IN, 0, 0, 0x11a0001c, 0, 0 },
+@@ -172,9 +147,9 @@
+       { DSCR_CMD0_PSC1_RX, DEV_FLAGS_IN, 0, 0, 0x11b0001c, 0, 0 },
+       { DSCR_CMD0_PSC1_SYNC, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 },
+-      { DSCR_CMD0_CIM_RXA, DEV_FLAGS_IN, 0, 0, 0x00000000, 0, 0 },
+-      { DSCR_CMD0_CIM_RXB, DEV_FLAGS_IN, 0, 0, 0x00000000, 0, 0 },
+-      { DSCR_CMD0_CIM_RXC, DEV_FLAGS_IN, 0, 0, 0x00000000, 0, 0 },
++      { DSCR_CMD0_CIM_RXA, DEV_FLAGS_IN, 0, 32, 0x14004020, 0, 0 },
++      { DSCR_CMD0_CIM_RXB, DEV_FLAGS_IN, 0, 32, 0x14004040, 0, 0 },
++      { DSCR_CMD0_CIM_RXC, DEV_FLAGS_IN, 0, 32, 0x14004060, 0, 0 },
+       { DSCR_CMD0_CIM_SYNC, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 },
+       { DSCR_CMD0_NAND_FLASH, DEV_FLAGS_IN, 0, 0, 0x00000000, 0, 0 },
+@@ -183,6 +158,24 @@
+       { DSCR_CMD0_THROTTLE, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 },
+       { DSCR_CMD0_ALWAYS, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 },
++
++      /* Provide 16 user definable device types */
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
++      { 0, 0, 0, 0, 0, 0, 0 },
+ };
+ #define DBDEV_TAB_SIZE (sizeof(dbdev_tab) / sizeof(dbdev_tab_t))
+@@ -202,6 +195,30 @@
+       return NULL;
+ }
++u32
++au1xxx_ddma_add_device(dbdev_tab_t *dev)
++{
++      u32 ret = 0;
++      dbdev_tab_t *p=NULL;
++      static u16 new_id=0x1000;
++
++      p = find_dbdev_id(0);
++      if ( NULL != p )
++      {
++              memcpy(p, dev, sizeof(dbdev_tab_t));
++              p->dev_id = DSCR_DEV2CUSTOM_ID(new_id,dev->dev_id);
++              ret = p->dev_id;
++              new_id++;
++#if 0
++              printk("add_device: id:%x flags:%x padd:%x\n", 
++                              p->dev_id, p->dev_flags, p->dev_physaddr );
++#endif
++      }
++
++      return ret;
++}
++EXPORT_SYMBOL(au1xxx_ddma_add_device);
++
+ /* Allocate a channel and return a non-zero descriptor if successful.
+ */
+ u32
+@@ -214,7 +231,7 @@
+       int             i;
+       dbdev_tab_t     *stp, *dtp;
+       chan_tab_t      *ctp;
+-      volatile au1x_dma_chan_t *cp;
++      au1x_dma_chan_t *cp;
+       /* We do the intialization on the first channel allocation.
+        * We have to wait because of the interrupt handler initialization
+@@ -224,9 +241,6 @@
+               au1xxx_dbdma_init();
+       dbdma_initialized = 1;
+-      if ((srcid > DSCR_NDEV_IDS) || (destid > DSCR_NDEV_IDS))
+-              return 0;
+-      
+       if ((stp = find_dbdev_id(srcid)) == NULL) return 0;
+       if ((dtp = find_dbdev_id(destid)) == NULL) return 0;
+@@ -268,9 +282,9 @@
+                               /* If kmalloc fails, it is caught below same
+                                * as a channel not available.
+                                */
+-                              ctp = (chan_tab_t *)kmalloc(sizeof(chan_tab_t), GFP_KERNEL);
++                              ctp = (chan_tab_t *)
++                                      kmalloc(sizeof(chan_tab_t), GFP_KERNEL);
+                               chan_tab_ptr[i] = ctp;
+-                              ctp->chan_index = chan = i;
+                               break;
+                       }
+               }
+@@ -278,10 +292,11 @@
+               if (ctp != NULL) {
+                       memset(ctp, 0, sizeof(chan_tab_t));
++                      ctp->chan_index = chan = i;
+                       dcp = DDMA_CHANNEL_BASE;
+                       dcp += (0x0100 * chan);
+                       ctp->chan_ptr = (au1x_dma_chan_t *)dcp;
+-                      cp = (volatile au1x_dma_chan_t *)dcp;
++                      cp = (au1x_dma_chan_t *)dcp;
+                       ctp->chan_src = stp;
+                       ctp->chan_dest = dtp;
+                       ctp->chan_callback = callback;
+@@ -298,6 +313,9 @@
+                               i |= DDMA_CFG_DED;
+                       if (dtp->dev_intpolarity)
+                               i |= DDMA_CFG_DP;
++                      if ((stp->dev_flags & DEV_FLAGS_SYNC) ||
++                              (dtp->dev_flags & DEV_FLAGS_SYNC))
++                                      i |= DDMA_CFG_SYNC;
+                       cp->ddma_cfg = i;
+                       au_sync();
+@@ -308,14 +326,14 @@
+                       rv = (u32)(&chan_tab_ptr[chan]);
+               }
+               else {
+-                      /* Release devices.
+-                      */
++                      /* Release devices */
+                       stp->dev_flags &= ~DEV_FLAGS_INUSE;
+                       dtp->dev_flags &= ~DEV_FLAGS_INUSE;
+               }
+       }
+       return rv;
+ }
++EXPORT_SYMBOL(au1xxx_dbdma_chan_alloc);
+ /* Set the device width if source or destination is a FIFO.
+  * Should be 8, 16, or 32 bits.
+@@ -343,6 +361,7 @@
+       return rv;
+ }
++EXPORT_SYMBOL(au1xxx_dbdma_set_devwidth);
+ /* Allocate a descriptor ring, initializing as much as possible.
+ */
+@@ -369,7 +388,8 @@
+        * and if we try that first we are likely to not waste larger
+        * slabs of memory.
+        */
+-      desc_base = (u32)kmalloc(entries * sizeof(au1x_ddma_desc_t), GFP_KERNEL);
++      desc_base = (u32)kmalloc(entries * sizeof(au1x_ddma_desc_t), 
++                      GFP_KERNEL|GFP_DMA);
+       if (desc_base == 0)
+               return 0;
+       
+@@ -380,7 +400,7 @@
+               kfree((const void *)desc_base);
+               i = entries * sizeof(au1x_ddma_desc_t);
+               i += (sizeof(au1x_ddma_desc_t) - 1);
+-              if ((desc_base = (u32)kmalloc(i, GFP_KERNEL)) == 0)
++              if ((desc_base = (u32)kmalloc(i, GFP_KERNEL|GFP_DMA)) == 0)
+                       return 0;
+               desc_base = ALIGN_ADDR(desc_base, sizeof(au1x_ddma_desc_t));
+@@ -460,9 +480,14 @@
+       /* If source input is fifo, set static address.
+       */
+       if (stp->dev_flags & DEV_FLAGS_IN) {
+-              src0 = stp->dev_physaddr;
+-              src1 |= DSCR_SRC1_SAM(DSCR_xAM_STATIC);
++              if ( stp->dev_flags & DEV_FLAGS_BURSTABLE ) 
++                      src1 |= DSCR_SRC1_SAM(DSCR_xAM_BURST);
++              else 
++                      src1 |= DSCR_SRC1_SAM(DSCR_xAM_STATIC);
++
+       }
++      if (stp->dev_physaddr) 
++              src0 = stp->dev_physaddr;
+       /* Set up dest1.  For now, assume no stride and increment.
+        * A channel attribute update can change this later.
+@@ -486,10 +511,18 @@
+       /* If destination output is fifo, set static address.
+       */
+       if (dtp->dev_flags & DEV_FLAGS_OUT) {
+-              dest0 = dtp->dev_physaddr;
++              if ( dtp->dev_flags & DEV_FLAGS_BURSTABLE )
++                      dest1 |= DSCR_DEST1_DAM(DSCR_xAM_BURST);
++                              else
+               dest1 |= DSCR_DEST1_DAM(DSCR_xAM_STATIC);
+       }
++      if (dtp->dev_physaddr) 
++              dest0 = dtp->dev_physaddr;
+       
++#if 0
++              printk("did:%x sid:%x cmd0:%x cmd1:%x source0:%x source1:%x dest0:%x dest1:%x\n",
++                      dtp->dev_id, stp->dev_id, cmd0, cmd1, src0, src1, dest0, dest1 );
++#endif
+       for (i=0; i<entries; i++) {
+               dp->dscr_cmd0 = cmd0;
+               dp->dscr_cmd1 = cmd1;
+@@ -498,6 +531,7 @@
+               dp->dscr_dest0 = dest0;
+               dp->dscr_dest1 = dest1;
+               dp->dscr_stat = 0;
++                              dp->sw_context = dp->sw_status = 0;
+               dp->dscr_nxtptr = DSCR_NXTPTR(virt_to_phys(dp + 1));
+               dp++;
+       }
+@@ -510,13 +544,14 @@
+       return (u32)(ctp->chan_desc_base);
+ }
++EXPORT_SYMBOL(au1xxx_dbdma_ring_alloc);
+ /* Put a source buffer into the DMA ring.
+  * This updates the source pointer and byte count.  Normally used
+  * for memory to fifo transfers.
+  */
+ u32
+-au1xxx_dbdma_put_source(u32 chanid, void *buf, int nbytes)
++_au1xxx_dbdma_put_source(u32 chanid, void *buf, int nbytes, u32 flags)
+ {
+       chan_tab_t              *ctp;
+       au1x_ddma_desc_t        *dp;
+@@ -543,24 +578,40 @@
+       */
+       dp->dscr_source0 = virt_to_phys(buf);
+       dp->dscr_cmd1 = nbytes;
+-      dp->dscr_cmd0 |= DSCR_CMD0_V;   /* Let it rip */
+-      ctp->chan_ptr->ddma_dbell = 0xffffffff; /* Make it go */
+-      
++      /* Check flags  */
++      if (flags & DDMA_FLAGS_IE) 
++              dp->dscr_cmd0 |= DSCR_CMD0_IE;
++      if (flags & DDMA_FLAGS_NOIE)
++              dp->dscr_cmd0 &= ~DSCR_CMD0_IE;
+       /* Get next descriptor pointer.
+       */
+       ctp->put_ptr = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr));
++      /*
++       * There is an errata on the Au1200/Au1550 parts that could result 
++       * in "stale" data being DMA'd. It has to do with the snoop logic on 
++       * the dache eviction buffer.  NONCOHERENT_IO is on by default for 
++       * these parts. If it is fixedin the future, these dma_cache_inv will 
++       * just be nothing more than empty macros. See io.h.
++       * */
++      dma_cache_wback_inv(buf,nbytes);
++        dp->dscr_cmd0 |= DSCR_CMD0_V;        /* Let it rip */
++      au_sync();
++      dma_cache_wback_inv(dp, sizeof(dp));
++        ctp->chan_ptr->ddma_dbell = 0;
++
+       /* return something not zero.
+       */
+       return nbytes;
+ }
++EXPORT_SYMBOL(_au1xxx_dbdma_put_source);
+ /* Put a destination buffer into the DMA ring.
+  * This updates the destination pointer and byte count.  Normally used
+  * to place an empty buffer into the ring for fifo to memory transfers.
+  */
+ u32
+-au1xxx_dbdma_put_dest(u32 chanid, void *buf, int nbytes)
++_au1xxx_dbdma_put_dest(u32 chanid, void *buf, int nbytes, u32 flags)
+ {
+       chan_tab_t              *ctp;
+       au1x_ddma_desc_t        *dp;
+@@ -582,11 +633,33 @@
+       if (dp->dscr_cmd0 & DSCR_CMD0_V)
+               return 0;
+       
+-      /* Load up buffer address and byte count.
+-      */
++      /* Load up buffer address and byte count */
++
++      /* Check flags  */
++      if (flags & DDMA_FLAGS_IE) 
++              dp->dscr_cmd0 |= DSCR_CMD0_IE;
++      if (flags & DDMA_FLAGS_NOIE)
++              dp->dscr_cmd0 &= ~DSCR_CMD0_IE;
++
+       dp->dscr_dest0 = virt_to_phys(buf);
+       dp->dscr_cmd1 = nbytes;
++#if 0
++      printk("cmd0:%x cmd1:%x source0:%x source1:%x dest0:%x dest1:%x\n", 
++                      dp->dscr_cmd0, dp->dscr_cmd1, dp->dscr_source0, 
++                      dp->dscr_source1, dp->dscr_dest0, dp->dscr_dest1 );
++#endif
++      /*
++       * There is an errata on the Au1200/Au1550 parts that could result in 
++       * "stale" data being DMA'd. It has to do with the snoop logic on the 
++       * dache eviction buffer. NONCOHERENT_IO is on by default for these 
++       * parts. If it is fixedin the future, these dma_cache_inv will just 
++       * be nothing more than empty macros. See io.h. 
++       * */
++      dma_cache_inv(buf,nbytes);
+       dp->dscr_cmd0 |= DSCR_CMD0_V;   /* Let it rip */
++      au_sync();
++      dma_cache_wback_inv(dp, sizeof(dp));
++        ctp->chan_ptr->ddma_dbell = 0;
+       
+       /* Get next descriptor pointer.
+       */
+@@ -596,6 +669,7 @@
+       */
+       return nbytes;
+ }
++EXPORT_SYMBOL(_au1xxx_dbdma_put_dest);
+ /* Get a destination buffer into the DMA ring.
+  * Normally used to get a full buffer from the ring during fifo
+@@ -645,7 +719,7 @@
+ au1xxx_dbdma_stop(u32 chanid)
+ {
+       chan_tab_t      *ctp;
+-      volatile au1x_dma_chan_t *cp;
++      au1x_dma_chan_t *cp;
+       int halt_timeout = 0;
+       ctp = *((chan_tab_t **)chanid);
+@@ -665,6 +739,7 @@
+       cp->ddma_stat |= (DDMA_STAT_DB | DDMA_STAT_V);
+       au_sync();
+ }
++EXPORT_SYMBOL(au1xxx_dbdma_stop);
+ /* Start using the current descriptor pointer.  If the dbdma encounters
+  * a not valid descriptor, it will stop.  In this case, we can just
+@@ -674,17 +749,17 @@
+ au1xxx_dbdma_start(u32 chanid)
+ {
+       chan_tab_t      *ctp;
+-      volatile au1x_dma_chan_t *cp;
++      au1x_dma_chan_t *cp;
+       ctp = *((chan_tab_t **)chanid);
+-
+       cp = ctp->chan_ptr;
+       cp->ddma_desptr = virt_to_phys(ctp->cur_ptr);
+       cp->ddma_cfg |= DDMA_CFG_EN;    /* Enable channel */
+       au_sync();
+-      cp->ddma_dbell = 0xffffffff;    /* Make it go */
++      cp->ddma_dbell = 0;
+       au_sync();
+ }
++EXPORT_SYMBOL(au1xxx_dbdma_start);
+ void
+ au1xxx_dbdma_reset(u32 chanid)
+@@ -703,15 +778,21 @@
+       do {
+               dp->dscr_cmd0 &= ~DSCR_CMD0_V;
++              /* reset our SW status -- this is used to determine 
++               * if a descriptor is in use by upper level SW. Since 
++               * posting can reset 'V' bit. 
++               */
++              dp->sw_status = 0;
+               dp = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr));
+       } while (dp != ctp->chan_desc_base);
+ }
++EXPORT_SYMBOL(au1xxx_dbdma_reset);
+ u32
+ au1xxx_get_dma_residue(u32 chanid)
+ {
+       chan_tab_t      *ctp;
+-      volatile au1x_dma_chan_t *cp;
++      au1x_dma_chan_t *cp;
+       u32             rv;
+       ctp = *((chan_tab_t **)chanid);
+@@ -746,15 +827,16 @@
+       kfree(ctp);
+ }
++EXPORT_SYMBOL(au1xxx_dbdma_chan_free);
+ static void
+ dbdma_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+ {
+-      u32     intstat;
++      u32                                     intstat, flags;
+       u32     chan_index;
+       chan_tab_t              *ctp;
+       au1x_ddma_desc_t        *dp;
+-      volatile au1x_dma_chan_t *cp;
++      au1x_dma_chan_t *cp;
+       intstat = dbdma_gptr->ddma_intstat;
+       au_sync();
+@@ -773,18 +855,26 @@
+               (ctp->chan_callback)(irq, ctp->chan_callparam, regs);
+       ctp->cur_ptr = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr));
+-      
+ }
+-static void
+-au1xxx_dbdma_init(void)
++static void au1xxx_dbdma_init(void)
+ {
++      int irq_nr;
++
+       dbdma_gptr->ddma_config = 0;
+       dbdma_gptr->ddma_throttle = 0;
+       dbdma_gptr->ddma_inten = 0xffff;
+       au_sync();
+-      if (request_irq(AU1550_DDMA_INT, dbdma_interrupt, SA_INTERRUPT,
++#if defined(CONFIG_SOC_AU1550)
++      irq_nr = AU1550_DDMA_INT;
++#elif defined(CONFIG_SOC_AU1200)
++      irq_nr = AU1200_DDMA_INT;
++#else
++      #error Unknown Au1x00 SOC
++#endif
++
++      if (request_irq(irq_nr, dbdma_interrupt, SA_INTERRUPT,
+                       "Au1xxx dbdma", (void *)dbdma_gptr))
+               printk("Can't get 1550 dbdma irq");
+ }
+@@ -795,7 +885,8 @@
+       chan_tab_t              *ctp;
+       au1x_ddma_desc_t        *dp;
+       dbdev_tab_t             *stp, *dtp;
+-      volatile au1x_dma_chan_t *cp;
++      au1x_dma_chan_t *cp;
++              u32                     i = 0;
+       ctp = *((chan_tab_t **)chanid);
+       stp = ctp->chan_src;
+@@ -820,15 +911,64 @@
+       dp = ctp->chan_desc_base;
+       do {
+-              printk("dp %08x, cmd0 %08x, cmd1 %08x\n",
+-                      (u32)dp, dp->dscr_cmd0, dp->dscr_cmd1);
+-              printk("src0 %08x, src1 %08x, dest0 %08x\n",
+-                      dp->dscr_source0, dp->dscr_source1, dp->dscr_dest0);
+-              printk("dest1 %08x, stat %08x, nxtptr %08x\n",
+-                      dp->dscr_dest1, dp->dscr_stat, dp->dscr_nxtptr);
++                printk("Dp[%d]= %08x, cmd0 %08x, cmd1 %08x\n",
++                        i++, (u32)dp, dp->dscr_cmd0, dp->dscr_cmd1);
++                printk("src0 %08x, src1 %08x, dest0 %08x, dest1 %08x\n",
++                        dp->dscr_source0, dp->dscr_source1, dp->dscr_dest0, dp->dscr_dest1);
++                printk("stat %08x, nxtptr %08x\n",
++                        dp->dscr_stat, dp->dscr_nxtptr);
+               dp = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr));
+       } while (dp != ctp->chan_desc_base);
+ }
++/* Put a descriptor into the DMA ring.
++ * This updates the source/destination pointers and byte count.
++ */
++u32
++au1xxx_dbdma_put_dscr(u32 chanid, au1x_ddma_desc_t *dscr )
++{
++      chan_tab_t *ctp;
++      au1x_ddma_desc_t *dp;
++      u32 nbytes=0;
++
++      /* I guess we could check this to be within the
++      * range of the table......
++      */
++      ctp = *((chan_tab_t **)chanid);
++
++      /* We should have multiple callers for a particular channel,
++      * an interrupt doesn't affect this pointer nor the descriptor,
++      * so no locking should be needed.
++      */
++      dp = ctp->put_ptr;
++
++      /* If the descriptor is valid, we are way ahead of the DMA
++      * engine, so just return an error condition.
++      */
++      if (dp->dscr_cmd0 & DSCR_CMD0_V)
++              return 0;
++
++      /* Load up buffer addresses and byte count.
++      */
++      dp->dscr_dest0 = dscr->dscr_dest0;
++      dp->dscr_source0 = dscr->dscr_source0;
++      dp->dscr_dest1 = dscr->dscr_dest1;
++      dp->dscr_source1 = dscr->dscr_source1;
++      dp->dscr_cmd1 = dscr->dscr_cmd1;
++      nbytes = dscr->dscr_cmd1;
++      /* Allow the caller to specifiy if an interrupt is generated */
++      dp->dscr_cmd0 &= ~DSCR_CMD0_IE;
++      dp->dscr_cmd0 |= dscr->dscr_cmd0 | DSCR_CMD0_V;
++      ctp->chan_ptr->ddma_dbell = 0;
++
++      /* Get next descriptor pointer.
++      */
++      ctp->put_ptr = phys_to_virt(DSCR_GET_NXTPTR(dp->dscr_nxtptr));
++
++      /* return something not zero.
++      */
++      return nbytes;
++}
++
+ #endif /* defined(CONFIG_SOC_AU1550) || defined(CONFIG_SOC_AU1200) */
+diff -Nur linux-2.4.29/arch/mips/au1000/common/gpio.c linux-mips/arch/mips/au1000/common/gpio.c
+--- linux-2.4.29/arch/mips/au1000/common/gpio.c        1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/gpio.c  2005-01-30 09:01:27.000000000 +0100
+@@ -0,0 +1,118 @@
++/*
++ *  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  SOFTWARE  IS PROVIDED         ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,         INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO        EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED         TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,        OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN        CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <asm/au1000.h>
++#include <asm/au1xxx_gpio.h>
++
++#define gpio1 sys
++#if !defined(CONFIG_SOC_AU1000)
++static AU1X00_GPIO2 * const gpio2 = (AU1X00_GPIO2 *)GPIO2_BASE;
++
++#define GPIO2_OUTPUT_ENABLE_MASK 0x00010000
++
++int au1xxx_gpio2_read(int signal)
++{
++      signal -= 200;
++/*    gpio2->dir &= ~(0x01 << signal);                                                //Set GPIO to input */
++      return ((gpio2->pinstate >> signal) & 0x01);
++}
++
++void au1xxx_gpio2_write(int signal, int value)
++{
++      signal -= 200;
++
++      gpio2->output = (GPIO2_OUTPUT_ENABLE_MASK << signal) | 
++              (value << signal);
++}
++
++void au1xxx_gpio2_tristate(int signal)
++{
++      signal -= 200;
++      gpio2->dir &= ~(0x01 << signal);        /* Set GPIO to input */
++}
++#endif
++
++int au1xxx_gpio1_read(int signal)
++{
++/*    gpio1->trioutclr |= (0x01 << signal); */
++      return ((gpio1->pinstaterd >> signal) & 0x01);
++}
++
++void au1xxx_gpio1_write(int signal, int value)
++{
++      if(value)
++              gpio1->outputset = (0x01 << signal);
++      else
++              gpio1->outputclr = (0x01 << signal);    /* Output a Zero */
++}
++
++void au1xxx_gpio1_tristate(int signal)
++{
++      gpio1->trioutclr = (0x01 << signal);            /* Tristate signal */
++}
++
++
++int au1xxx_gpio_read(int signal)
++{
++      if(signal >= 200)
++#if defined(CONFIG_SOC_AU1000)
++              return 0;
++#else
++              return au1xxx_gpio2_read(signal);
++#endif
++      else
++              return au1xxx_gpio1_read(signal);
++}
++
++void au1xxx_gpio_write(int signal, int value)
++{
++      if(signal >= 200)
++#if defined(CONFIG_SOC_AU1000)
++              ;
++#else
++              au1xxx_gpio2_write(signal, value);
++#endif
++      else
++              au1xxx_gpio1_write(signal, value);
++}
++
++void au1xxx_gpio_tristate(int signal)
++{
++      if(signal >= 200)
++#if defined(CONFIG_SOC_AU1000)
++              ;
++#else
++              au1xxx_gpio2_tristate(signal);
++#endif
++      else
++              au1xxx_gpio1_tristate(signal);
++}
++
++void au1xxx_gpio1_set_inputs(void)
++{
++      gpio1->pininputen = 0;
++}
++
++EXPORT_SYMBOL(au1xxx_gpio1_set_inputs);
++EXPORT_SYMBOL(au1xxx_gpio_tristate);
++EXPORT_SYMBOL(au1xxx_gpio_write);
++EXPORT_SYMBOL(au1xxx_gpio_read);
+diff -Nur linux-2.4.29/arch/mips/au1000/common/irq.c linux-mips/arch/mips/au1000/common/irq.c
+--- linux-2.4.29/arch/mips/au1000/common/irq.c 2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/irq.c   2005-01-31 12:59:30.000000000 +0100
+@@ -508,6 +508,7 @@
+       if (!intc0_req0) return;
++#ifdef AU1000_USB_DEV_REQ_INT
+       /*
+        * Because of the tight timing of SETUP token to reply
+        * transactions, the USB devices-side packet complete
+@@ -518,6 +519,7 @@
+               do_IRQ(AU1000_USB_DEV_REQ_INT, regs);
+               return;
+       }
++#endif
+       irq = au_ffs(intc0_req0) - 1;
+       intc0_req0 &= ~(1<<irq);
+diff -Nur linux-2.4.29/arch/mips/au1000/common/pci_fixup.c linux-mips/arch/mips/au1000/common/pci_fixup.c
+--- linux-2.4.29/arch/mips/au1000/common/pci_fixup.c   2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/pci_fixup.c     2004-12-03 09:00:32.000000000 +0100
+@@ -75,9 +75,13 @@
+ #ifdef CONFIG_NONCOHERENT_IO
+       /* 
+-       *  Set the NC bit in controller for pre-AC silicon
++         *  Set the NC bit in controller for Au1500 pre-AC silicon
+        */
+-      au_writel( 1<<16 | au_readl(Au1500_PCI_CFG), Au1500_PCI_CFG);
++      u32 prid = read_c0_prid();
++      if ( (prid & 0xFF000000) == 0x01000000 && prid < 0x01030202) {
++             au_writel( 1<<16 | au_readl(Au1500_PCI_CFG), Au1500_PCI_CFG);
++             printk("Non-coherent PCI accesses enabled\n");
++      }
+       printk("Non-coherent PCI accesses enabled\n");
+ #endif
+diff -Nur linux-2.4.29/arch/mips/au1000/common/pci_ops.c linux-mips/arch/mips/au1000/common/pci_ops.c
+--- linux-2.4.29/arch/mips/au1000/common/pci_ops.c     2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/pci_ops.c       2005-01-31 12:59:30.000000000 +0100
+@@ -162,6 +162,7 @@
+ static int config_access(unsigned char access_type, struct pci_dev *dev, 
+                        unsigned char where, u32 * data)
+ {
++      int error = PCIBIOS_SUCCESSFUL;
+ #if defined( CONFIG_SOC_AU1500 ) || defined( CONFIG_SOC_AU1550 )
+       unsigned char bus = dev->bus->number;
+       unsigned int dev_fn = dev->devfn;
+@@ -170,7 +171,6 @@
+       unsigned long offset, status;
+       unsigned long cfg_base;
+       unsigned long flags;
+-      int error = PCIBIOS_SUCCESSFUL;
+       unsigned long entryLo0, entryLo1;
+       if (device > 19) {
+@@ -271,8 +271,11 @@
+       }
+       local_irq_restore(flags);
+-      return error;
++#else
++      /* Fake out Config space access with no responder */
++      *data = 0xFFFFFFFF;
+ #endif
++      return error;
+ }
+ #endif
+diff -Nur linux-2.4.29/arch/mips/au1000/common/power.c linux-mips/arch/mips/au1000/common/power.c
+--- linux-2.4.29/arch/mips/au1000/common/power.c       2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/power.c 2005-01-31 12:59:30.000000000 +0100
+@@ -50,7 +50,6 @@
+ static void calibrate_delay(void);
+-extern void set_au1x00_speed(unsigned int new_freq);
+ extern unsigned int get_au1x00_speed(void);
+ extern unsigned long get_au1x00_uart_baud_base(void);
+ extern void set_au1x00_uart_baud_base(unsigned long new_baud_base);
+@@ -116,6 +115,7 @@
+       sleep_uart0_clkdiv = au_readl(UART0_ADDR + UART_CLK);
+       sleep_uart0_enable = au_readl(UART0_ADDR + UART_MOD_CNTRL);
++#ifndef CONFIG_SOC_AU1200
+       /* Shutdown USB host/device.
+       */
+       sleep_usbhost_enable = au_readl(USB_HOST_CONFIG);
+@@ -127,6 +127,7 @@
+       sleep_usbdev_enable = au_readl(USBD_ENABLE);
+       au_writel(0, USBD_ENABLE); au_sync();
++#endif
+       /* Save interrupt controller state.
+       */
+@@ -212,14 +213,12 @@
+ int au_sleep(void)
+ {
+       unsigned long wakeup, flags;
+-      extern  void    save_and_sleep(void);
++      extern unsigned int save_and_sleep(void);
+       spin_lock_irqsave(&pm_lock,flags);
+       save_core_regs();
+-      flush_cache_all();
+-
+       /** The code below is all system dependent and we should probably
+        ** have a function call out of here to set this up.  You need
+        ** to configure the GPIO or timer interrupts that will bring
+@@ -227,27 +226,26 @@
+        ** For testing, the TOY counter wakeup is useful.
+        **/
+-#if 0
++#if 1
+       au_writel(au_readl(SYS_PINSTATERD) & ~(1 << 11), SYS_PINSTATERD);
+       /* gpio 6 can cause a wake up event */
+       wakeup = au_readl(SYS_WAKEMSK);
+       wakeup &= ~(1 << 8);    /* turn off match20 wakeup */
+-      wakeup |= 1 << 6;       /* turn on gpio 6 wakeup   */
++      wakeup = 1 << 5;        /* turn on gpio 6 wakeup   */
+ #else
+-      /* For testing, allow match20 to wake us up.
+-      */
++      /* For testing, allow match20 to wake us up.  */
+ #ifdef SLEEP_TEST_TIMEOUT
+       wakeup_counter0_set(sleep_ticks);
+ #endif
+       wakeup = 1 << 8;        /* turn on match20 wakeup   */
+       wakeup = 0;
+ #endif
+-      au_writel(1, SYS_WAKESRC);      /* clear cause */
++      au_writel(0, SYS_WAKESRC);      /* clear cause */
+       au_sync();
+       au_writel(wakeup, SYS_WAKEMSK);
+       au_sync();
+-
++      DPRINTK("Entering sleep!\n");
+       save_and_sleep();
+       /* after a wakeup, the cpu vectors back to 0x1fc00000 so
+@@ -255,6 +253,7 @@
+        */
+       restore_core_regs();
+       spin_unlock_irqrestore(&pm_lock, flags);
++      DPRINTK("Leaving sleep!\n");
+       return 0;
+ }
+@@ -285,7 +284,6 @@
+               if (retval)
+                       return retval;
+-
+               au_sleep();
+               retval = pm_send_all(PM_RESUME, (void *) 0);
+       }
+@@ -312,120 +310,9 @@
+ }
+-static int pm_do_freq(ctl_table * ctl, int write, struct file *file,
+-                    void *buffer, size_t * len)
+-{
+-      int retval = 0, i;
+-      unsigned long val, pll;
+-#define TMPBUFLEN 64
+-#define MAX_CPU_FREQ 396
+-      char buf[TMPBUFLEN], *p;
+-      unsigned long flags, intc0_mask, intc1_mask;
+-      unsigned long old_baud_base, old_cpu_freq, baud_rate, old_clk,
+-          old_refresh;
+-      unsigned long new_baud_base, new_cpu_freq, new_clk, new_refresh;
+-
+-      spin_lock_irqsave(&pm_lock, flags);
+-      if (!write) {
+-              *len = 0;
+-      } else {
+-              /* Parse the new frequency */
+-              if (*len > TMPBUFLEN - 1) {
+-                      spin_unlock_irqrestore(&pm_lock, flags);
+-                      return -EFAULT;
+-              }
+-              if (copy_from_user(buf, buffer, *len)) {
+-                      spin_unlock_irqrestore(&pm_lock, flags);
+-                      return -EFAULT;
+-              }
+-              buf[*len] = 0;
+-              p = buf;
+-              val = simple_strtoul(p, &p, 0);
+-              if (val > MAX_CPU_FREQ) {
+-                      spin_unlock_irqrestore(&pm_lock, flags);
+-                      return -EFAULT;
+-              }
+-
+-              pll = val / 12;
+-              if ((pll > 33) || (pll < 7)) {  /* 396 MHz max, 84 MHz min */
+-                      /* revisit this for higher speed cpus */
+-                      spin_unlock_irqrestore(&pm_lock, flags);
+-                      return -EFAULT;
+-              }
+-
+-              old_baud_base = get_au1x00_uart_baud_base();
+-              old_cpu_freq = get_au1x00_speed();
+-
+-              new_cpu_freq = pll * 12 * 1000000;
+-              new_baud_base =  (new_cpu_freq / (2 * ((int)(au_readl(SYS_POWERCTRL)&0x03) + 2) * 16));
+-              set_au1x00_speed(new_cpu_freq);
+-              set_au1x00_uart_baud_base(new_baud_base);
+-
+-              old_refresh = au_readl(MEM_SDREFCFG) & 0x1ffffff;
+-              new_refresh =
+-                  ((old_refresh * new_cpu_freq) /
+-                   old_cpu_freq) | (au_readl(MEM_SDREFCFG) & ~0x1ffffff);
+-
+-              au_writel(pll, SYS_CPUPLL);
+-              au_sync_delay(1);
+-              au_writel(new_refresh, MEM_SDREFCFG);
+-              au_sync_delay(1);
+-
+-              for (i = 0; i < 4; i++) {
+-                      if (au_readl
+-                          (UART_BASE + UART_MOD_CNTRL +
+-                           i * 0x00100000) == 3) {
+-                              old_clk =
+-                                  au_readl(UART_BASE + UART_CLK +
+-                                        i * 0x00100000);
+-                              // baud_rate = baud_base/clk
+-                              baud_rate = old_baud_base / old_clk;
+-                              /* we won't get an exact baud rate and the error
+-                               * could be significant enough that our new
+-                               * calculation will result in a clock that will
+-                               * give us a baud rate that's too far off from
+-                               * what we really want.
+-                               */
+-                              if (baud_rate > 100000)
+-                                      baud_rate = 115200;
+-                              else if (baud_rate > 50000)
+-                                      baud_rate = 57600;
+-                              else if (baud_rate > 30000)
+-                                      baud_rate = 38400;
+-                              else if (baud_rate > 17000)
+-                                      baud_rate = 19200;
+-                              else
+-                                      (baud_rate = 9600);
+-                              // new_clk = new_baud_base/baud_rate
+-                              new_clk = new_baud_base / baud_rate;
+-                              au_writel(new_clk,
+-                                     UART_BASE + UART_CLK +
+-                                     i * 0x00100000);
+-                              au_sync_delay(10);
+-                      }
+-              }
+-      }
+-
+-
+-      /* We don't want _any_ interrupts other than
+-       * match20. Otherwise our calibrate_delay()
+-       * calculation will be off, potentially a lot.
+-       */
+-      intc0_mask = save_local_and_disable(0);
+-      intc1_mask = save_local_and_disable(1);
+-      local_enable_irq(AU1000_TOY_MATCH2_INT);
+-      spin_unlock_irqrestore(&pm_lock, flags);
+-      calibrate_delay();
+-      restore_local_and_enable(0, intc0_mask);
+-      restore_local_and_enable(1, intc1_mask);
+-      return retval;
+-}
+-
+-
+ static struct ctl_table pm_table[] = {
+       {ACPI_S1_SLP_TYP, "suspend", NULL, 0, 0600, NULL, &pm_do_suspend},
+       {ACPI_SLEEP, "sleep", NULL, 0, 0600, NULL, &pm_do_sleep},
+-      {CTL_ACPI, "freq", NULL, 0, 0600, NULL, &pm_do_freq},
+       {0}
+ };
+diff -Nur linux-2.4.29/arch/mips/au1000/common/setup.c linux-mips/arch/mips/au1000/common/setup.c
+--- linux-2.4.29/arch/mips/au1000/common/setup.c       2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/setup.c 2005-01-31 12:59:30.000000000 +0100
+@@ -174,6 +174,40 @@
+       initrd_end = (unsigned long)&__rd_end;
+ #endif
++#if defined(CONFIG_SOC_AU1200)
++#ifdef CONFIG_USB_EHCI_HCD
++      if ((argptr = strstr(argptr, "usb_ehci=")) == NULL) {
++              char usb_args[80];
++              argptr = prom_getcmdline();
++              memset(usb_args, 0, sizeof(usb_args));
++              sprintf(usb_args, " usb_ehci=base:0x%x,len:0x%x,irq:%d",
++                      USB_EHCI_BASE, USB_EHCI_LEN, AU1000_USB_HOST_INT);
++              strcat(argptr, usb_args);
++      }
++#ifdef CONFIG_USB_AMD5536UDC
++      /* enable EHC + OHC + UDC clocks, memory and bus mastering */
++/*    au_writel( 0x00DF207F, USB_MSR_BASE + 4); */
++      au_writel( 0xC0DF207F, USB_MSR_BASE + 4);  // incl. prefetch
++#else
++      /* enable EHC + OHC clocks, memory and bus mastering */
++/*    au_writel( 0x00DB200F, USB_MSR_BASE + 4); */
++      au_writel( 0xC0DB200F, USB_MSR_BASE + 4);  /* incl. prefetch */
++#endif
++      udelay(1000);
++
++#else /* CONFIG_USB_EHCI_HCD */
++
++#ifdef CONFIG_USB_AMD5536UDC
++#ifndef CONFIG_USB_OHCI
++      /* enable UDC clocks, memory and bus mastering */
++/*    au_writel( 0x00DC2070, USB_MSR_BASE + 4); */
++      au_writel( 0xC0DC2070, USB_MSR_BASE + 4);  // incl. prefetch
++      udelay(1000);
++#endif
++#endif
++#endif /* CONFIG_USB_EHCI_HCD */
++#endif /* CONFIG_SOC_AU1200 */
++
+ #if defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE)
+ #ifdef CONFIG_USB_OHCI
+       if ((argptr = strstr(argptr, "usb_ohci=")) == NULL) {
+@@ -187,19 +221,38 @@
+ #endif
+ #ifdef CONFIG_USB_OHCI
+-      // enable host controller and wait for reset done
++#if defined(CONFIG_SOC_AU1200)
++#ifndef CONFIG_USB_EHCI_HCD
++#ifdef CONFIG_USB_AMD5536UDC
++      /* enable OHC + UDC clocks, memory and bus mastering */
++/*    au_writel( 0x00DD2073, USB_MSR_BASE + 4); */
++      au_writel( 0xC0DD2073, USB_MSR_BASE + 4);  // incl. prefetch
++#else
++      /* enable OHC clocks, memory and bus mastering */
++      au_writel( 0x00D12003, USB_MSR_BASE + 4);
++#endif
++      udelay(1000);
++printk("DEBUG: Reading Au1200 USB2 reg 0x%x\n", au_readl(USB_MSR_BASE + 4));
++#endif
++#else
++      /* Au1000, Au1500, Au1100, Au1550 */
++      /* enable host controller and wait for reset done */
+       au_writel(0x08, USB_HOST_CONFIG);
+       udelay(1000);
+       au_writel(0x0E, USB_HOST_CONFIG);
+       udelay(1000);
+-      au_readl(USB_HOST_CONFIG); // throw away first read
++      au_readl(USB_HOST_CONFIG); /* throw away first read */
+       while (!(au_readl(USB_HOST_CONFIG) & 0x10))
+               au_readl(USB_HOST_CONFIG);
++#endif /* CONFIG_SOC_AU1200 */
+ #endif
+-#endif // defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE)
++#else
++
++#endif /* defined (CONFIG_USB_OHCI) || defined (CONFIG_AU1X00_USB_DEVICE) */
++
+ #ifdef CONFIG_FB
+-      // Needed if PCI video card in use
++      /* Needed if PCI video card in use */
+       conswitchp = &dummy_con;
+ #endif
+@@ -209,8 +262,7 @@
+ #endif
+ #ifdef CONFIG_BLK_DEV_IDE
+-      /* Board setup takes precedence for unique devices.
+-      */
++      /* Board setup takes precedence for unique devices.  */
+       if ((ide_ops == NULL) || (ide_ops == &no_ide_ops))
+               ide_ops = &std_ide_ops;
+ #endif
+diff -Nur linux-2.4.29/arch/mips/au1000/common/sleeper.S linux-mips/arch/mips/au1000/common/sleeper.S
+--- linux-2.4.29/arch/mips/au1000/common/sleeper.S     2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/sleeper.S       2005-01-31 12:59:30.000000000 +0100
+@@ -15,17 +15,48 @@
+ #include <asm/addrspace.h>
+ #include <asm/regdef.h>
+ #include <asm/stackframe.h>
++#include <asm/au1000.h>
++
++/*
++ * Note: This file is *not* conditional on CONFIG_PM since Alchemy sleep 
++ * need not be tied to any particular power management scheme.
++ */
++
++      .extern ___flush_cache_all
+       .text
+-      .set    macro
+-      .set    noat
+       .align  5
+-/* Save all of the processor general registers and go to sleep.
+- * A wakeup condition will get us back here to restore the registers.
++/*
++ * Save the processor general registers and go to sleep. A wakeup
++ * condition will get us back here to restore the registers.
+  */
+-LEAF(save_and_sleep)
++/* still need to fix alignment issues here */
++save_and_sleep_frmsz = 48
++NESTED(save_and_sleep, save_and_sleep_frmsz, ra)
++      .set noreorder
++      .set nomacro
++      .set noat
++      subu sp, save_and_sleep_frmsz
++      sw ra, save_and_sleep_frmsz-4(sp)
++      sw s0, save_and_sleep_frmsz-8(sp)
++      sw s1, save_and_sleep_frmsz-12(sp)
++      sw s2, save_and_sleep_frmsz-16(sp)
++      sw s3, save_and_sleep_frmsz-20(sp)
++      sw s4, save_and_sleep_frmsz-24(sp)
++      sw s5, save_and_sleep_frmsz-28(sp)
++      sw s6, save_and_sleep_frmsz-32(sp)
++      sw s7, save_and_sleep_frmsz-36(sp)
++      sw s8, save_and_sleep_frmsz-40(sp)
++      sw gp, save_and_sleep_frmsz-44(sp)
++
++      /* We only need to save the registers that the calling function 
++       * hasn't saved for us.  0 is always zero.  8 - 15, 24 and 25 are 
++       * temporaries and can be used without saving. 26 and 27 are reserved 
++       * for interrupt/trap handling and expected to change.  29 is the 
++       * stack pointer which is handled as a special case here.
++       */
+       subu    sp, PT_SIZE
+       sw      $1, PT_R1(sp)
+       sw      $2, PT_R2(sp)
+@@ -34,14 +65,6 @@
+       sw      $5, PT_R5(sp)
+       sw      $6, PT_R6(sp)
+       sw      $7, PT_R7(sp)
+-      sw      $8, PT_R8(sp)
+-      sw      $9, PT_R9(sp)
+-      sw      $10, PT_R10(sp)
+-      sw      $11, PT_R11(sp)
+-      sw      $12, PT_R12(sp)
+-      sw      $13, PT_R13(sp)
+-      sw      $14, PT_R14(sp)
+-      sw      $15, PT_R15(sp)
+       sw      $16, PT_R16(sp)
+       sw      $17, PT_R17(sp)
+       sw      $18, PT_R18(sp)
+@@ -50,32 +73,47 @@
+       sw      $21, PT_R21(sp)
+       sw      $22, PT_R22(sp)
+       sw      $23, PT_R23(sp)
+-      sw      $24, PT_R24(sp)
+-      sw      $25, PT_R25(sp)
+-      sw      $26, PT_R26(sp)
+-      sw      $27, PT_R27(sp)
+       sw      $28, PT_R28(sp)
+-      sw      $29, PT_R29(sp)
+       sw      $30, PT_R30(sp)
+       sw      $31, PT_R31(sp)
++#define PT_C0STATUS PT_LO
++#define PT_CONTEXT PT_HI
++#define PT_PAGEMASK PT_EPC
++#define PT_CONFIG PT_BVADDR
+       mfc0    k0, CP0_STATUS
+-      sw      k0, 0x20(sp)
++      sw      k0, PT_C0STATUS(sp) // 0x20
+       mfc0    k0, CP0_CONTEXT
+-      sw      k0, 0x1c(sp)
++      sw      k0, PT_CONTEXT(sp) // 0x1c
+       mfc0    k0, CP0_PAGEMASK
+-      sw      k0, 0x18(sp)
++      sw      k0, PT_PAGEMASK(sp) // 0x18
+       mfc0    k0, CP0_CONFIG
+-      sw      k0, 0x14(sp)
++      sw      k0, PT_CONFIG(sp) // 0x14
++
++      .set macro
++      .set at
++
++      li t0, SYS_SLPPWR
++      sw      zero, 0(t0)     /* Get the processor ready to sleep */
++      sync
+       /* Now set up the scratch registers so the boot rom will
+        * return to this point upon wakeup.
++       * sys_scratch0 : SP
++       * sys_scratch1 : RA
++       */
++      li      t0, SYS_SCRATCH0
++      li      t1, SYS_SCRATCH1
++      sw      sp, 0(t0)
++      la      k0, resume_from_sleep
++      sw      k0, 0(t1)
++
++/*
++ * Flush DCACHE to make sure context is in memory
+        */
+-      la      k0, 1f
+-      lui     k1, 0xb190
+-      ori     k1, 0x18
+-      sw      sp, 0(k1)
+-      ori     k1, 0x1c
+-      sw      k0, 0(k1)
++      la      t1,___flush_cache_all   /* _flush_cache_all is a function pointer */
++      lw      t0,0(t1)
++      jal t0
++      nop
+ /* Put SDRAM into self refresh.  Preload instructions into cache,
+  * issue a precharge, then auto refresh, then sleep commands to it.
+@@ -88,30 +126,65 @@
+       cache   0x14, 96(t0)
+       .set    mips0
++      /* Put SDRAM to sleep */
+ sdsleep:
+-      lui     k0, 0xb400
+-      sw      zero, 0x001c(k0)        /* Precharge */
+-      sw      zero, 0x0020(k0)        /* Auto refresh */
+-      sw      zero, 0x0030(k0)        /* SDRAM sleep */
++      li      a0, MEM_PHYS_ADDR
++      or      a0, a0, 0xA0000000
++#if defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100) || defined(CONFIG_SOC_AU1500)
++      lw      k0, MEM_SDMODE0(a0)
++      sw      zero, MEM_SDPRECMD(a0)  /* Precharge */
++      sw      zero, MEM_SDAUTOREF(a0) /* Auto Refresh */
++      sw      zero, MEM_SDSLEEP(a0)   /* Sleep */
+       sync
+-
+-      lui     k1, 0xb190
+-      sw      zero, 0x0078(k1)        /* get ready  to sleep */
++#endif
++#if defined(CONFIG_SOC_AU1550) || defined(CONFIG_SOC_AU1200)
++      sw      zero, MEM_SDPRECMD(a0)  /* Precharge */
++      sw      zero, MEM_SDSREF(a0)
++      
++      #lw     t0, MEM_SDSTAT(a0)
++      #and t0, t0, 0x01000000
++      li      t0, 0x01000000
++refresh_not_set:
++      lw      t1, MEM_SDSTAT(a0)
++      and     t2, t1, t0
++      beq     zero, t2, refresh_not_set
++      nop
++
++      li      t0, ~0x30000000
++      lw      t1, MEM_SDCONFIGA(a0)
++      and t1, t0, t1
++      sw      t1, MEM_SDCONFIGA(a0)
+       sync
+-      sw      zero, 0x007c(k1)        /* Put processor to sleep */
++#endif
++
++      li      t0, SYS_SLEEP
++      sw      zero, 0(t0)     /* Put processor to sleep */
+       sync
++      nop
++      nop
++      nop
++      nop
++      nop
++      nop
++      nop
++      nop
++
+       /* This is where we return upon wakeup.
+        * Reload all of the registers and return.
+        */
+-1:    nop
+-      lw      k0, 0x20(sp)
++resume_from_sleep:
++      nop
++      .set nomacro
++      .set noat
++
++      lw      k0, PT_C0STATUS(sp) // 0x20
+       mtc0    k0, CP0_STATUS
+-      lw      k0, 0x1c(sp)
++      lw      k0, PT_CONTEXT(sp) // 0x1c
+       mtc0    k0, CP0_CONTEXT
+-      lw      k0, 0x18(sp)
++      lw      k0, PT_PAGEMASK(sp) // 0x18
+       mtc0    k0, CP0_PAGEMASK
+-      lw      k0, 0x14(sp)
++      lw      k0, PT_CONFIG(sp) // 0x14
+       mtc0    k0, CP0_CONFIG
+       lw      $1, PT_R1(sp)
+       lw      $2, PT_R2(sp)
+@@ -120,14 +193,6 @@
+       lw      $5, PT_R5(sp)
+       lw      $6, PT_R6(sp)
+       lw      $7, PT_R7(sp)
+-      lw      $8, PT_R8(sp)
+-      lw      $9, PT_R9(sp)
+-      lw      $10, PT_R10(sp)
+-      lw      $11, PT_R11(sp)
+-      lw      $12, PT_R12(sp)
+-      lw      $13, PT_R13(sp)
+-      lw      $14, PT_R14(sp)
+-      lw      $15, PT_R15(sp)
+       lw      $16, PT_R16(sp)
+       lw      $17, PT_R17(sp)
+       lw      $18, PT_R18(sp)
+@@ -136,15 +201,36 @@
+       lw      $21, PT_R21(sp)
+       lw      $22, PT_R22(sp)
+       lw      $23, PT_R23(sp)
+-      lw      $24, PT_R24(sp)
+-      lw      $25, PT_R25(sp)
+-      lw      $26, PT_R26(sp)
+-      lw      $27, PT_R27(sp)
+       lw      $28, PT_R28(sp)
+-      lw      $29, PT_R29(sp)
+       lw      $30, PT_R30(sp)
+       lw      $31, PT_R31(sp)
++
++      .set macro
++      .set at
++
++      /* clear the wake source, but save it as the return value of the function */
++      li      t0, SYS_WAKESRC
++      lw v0, 0(t0)
++      sw v0, PT_R2(sp)
++      sw zero, 0(t0)
++
+       addiu   sp, PT_SIZE
++      lw gp, save_and_sleep_frmsz-44(sp)
++      lw s8, save_and_sleep_frmsz-40(sp)
++      lw s7, save_and_sleep_frmsz-36(sp)
++      lw s6, save_and_sleep_frmsz-32(sp)
++      lw s5, save_and_sleep_frmsz-28(sp)
++      lw s4, save_and_sleep_frmsz-24(sp)
++      lw s3, save_and_sleep_frmsz-20(sp)
++      lw s2, save_and_sleep_frmsz-16(sp)
++      lw s1, save_and_sleep_frmsz-12(sp)
++      lw s0, save_and_sleep_frmsz-8(sp)
++      lw ra, save_and_sleep_frmsz-4(sp)
++
++      addu sp, save_and_sleep_frmsz
+       jr      ra
++      nop
++      .set reorder
+ END(save_and_sleep)
++
+diff -Nur linux-2.4.29/arch/mips/au1000/common/time.c linux-mips/arch/mips/au1000/common/time.c
+--- linux-2.4.29/arch/mips/au1000/common/time.c        2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/common/time.c  2005-01-31 12:59:30.000000000 +0100
+@@ -437,9 +437,6 @@
+               au_writel(0, SYS_TOYWRITE);
+               while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_C0S);
+-              au_writel(au_readl(SYS_WAKEMSK) | (1<<8), SYS_WAKEMSK);
+-              au_writel(~0, SYS_WAKESRC);
+-              au_sync();
+               while (au_readl(SYS_COUNTER_CNTRL) & SYS_CNTRL_M20);
+               /* setup match20 to interrupt once every 10ms */
+diff -Nur linux-2.4.29/arch/mips/au1000/db1x00/Makefile linux-mips/arch/mips/au1000/db1x00/Makefile
+--- linux-2.4.29/arch/mips/au1000/db1x00/Makefile      2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/db1x00/Makefile        2005-01-31 12:59:30.000000000 +0100
+@@ -17,4 +17,11 @@
+ obj-y := init.o board_setup.o irqmap.o
+ obj-$(CONFIG_WM97XX_COMODULE) += mirage_ts.o
++ifdef CONFIG_MIPS_DB1100
++ifdef CONFIG_MMC
++obj-y += mmc_support.o
++export-objs += mmc_support.o
++endif
++endif
++
+ include $(TOPDIR)/Rules.make
+diff -Nur linux-2.4.29/arch/mips/au1000/db1x00/board_setup.c linux-mips/arch/mips/au1000/db1x00/board_setup.c
+--- linux-2.4.29/arch/mips/au1000/db1x00/board_setup.c 2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/db1x00/board_setup.c   2005-01-31 12:59:30.000000000 +0100
+@@ -46,10 +46,22 @@
+ #include <asm/au1000.h>
+ #include <asm/db1x00.h>
+-extern struct rtc_ops no_rtc_ops;
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX) && defined(CONFIG_MIPS_DB1550)
++#include <asm/au1xxx_dbdma.h>
++extern struct ide_ops *ide_ops;
++extern struct ide_ops au1xxx_ide_ops;
++extern u32 au1xxx_ide_virtbase;
++extern u64 au1xxx_ide_physbase;
++extern int au1xxx_ide_irq;
++
++/* Ddma */
++chan_tab_t *ide_read_ch, *ide_write_ch;
++u32 au1xxx_ide_ddma_enable = 0, switch4ddma = 1; // PIO+ddma
++
++dbdev_tab_t new_dbdev_tab_element = { DSCR_CMD0_THROTTLE, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 };
++#endif /* end CONFIG_BLK_DEV_IDE_AU1XXX */
+-/* not correct for db1550 */
+-static BCSR * const bcsr = (BCSR *)0xAE000000;
++extern struct rtc_ops no_rtc_ops;
+ void board_reset (void)
+ {
+@@ -108,8 +120,42 @@
+       au_writel(0x02000200, GPIO2_OUTPUT);
+ #endif
++#if defined(CONFIG_AU1XXX_SMC91111)
++#define CPLD_CONTROL (0xAF00000C)
++      {
++      extern uint32_t au1xxx_smc91111_base;
++      extern unsigned int au1xxx_smc91111_irq;
++      extern int au1xxx_smc91111_nowait;
++
++      au1xxx_smc91111_base = 0xAC000300;
++      au1xxx_smc91111_irq = AU1000_GPIO_8;
++      au1xxx_smc91111_nowait = 1;
++
++      /* set up the Static Bus timing - only 396Mhz */
++      bcsr->resets |= 0x7;
++      au_writel(0x00010003, MEM_STCFG0);
++      au_writel(0x000c00c0, MEM_STCFG2);
++      au_writel(0x85E1900D, MEM_STTIME2);
++      }
++#endif /* end CONFIG_SMC91111 */
+       au_sync();
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX) && defined(CONFIG_MIPS_DB1550)
++      /*
++       * Iniz IDE parameters
++       */
++      ide_ops = &au1xxx_ide_ops;
++      au1xxx_ide_irq = DAUGHTER_CARD_IRQ;
++      au1xxx_ide_physbase = AU1XXX_ATA_PHYS_ADDR;
++      au1xxx_ide_virtbase = KSEG1ADDR(AU1XXX_ATA_PHYS_ADDR);
++
++      /*
++       * change PIO or PIO+Ddma
++       * check the GPIO-6 pin condition. db1550:s6_dot
++       */
++      switch4ddma = (au_readl(SYS_PINSTATERD) & (1 << 6)) ? 1 : 0;
++#endif
++
+ #ifdef CONFIG_MIPS_DB1000
+     printk("AMD Alchemy Au1000/Db1000 Board\n");
+ #endif
+diff -Nur linux-2.4.29/arch/mips/au1000/db1x00/irqmap.c linux-mips/arch/mips/au1000/db1x00/irqmap.c
+--- linux-2.4.29/arch/mips/au1000/db1x00/irqmap.c      2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/db1x00/irqmap.c        2005-01-31 12:59:30.000000000 +0100
+@@ -53,6 +53,7 @@
+ #ifdef CONFIG_MIPS_DB1550
+       { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 0 IRQ#
+       { AU1000_GPIO_5, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 1 IRQ#
++      { AU1000_GPIO_8, INTC_INT_LOW_LEVEL, 0 }, // Daughtercard IRQ#
+ #else
+       { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 0 Fully_Interted#
+       { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 0 STSCHG#
+diff -Nur linux-2.4.29/arch/mips/au1000/db1x00/mmc_support.c linux-mips/arch/mips/au1000/db1x00/mmc_support.c
+--- linux-2.4.29/arch/mips/au1000/db1x00/mmc_support.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/db1x00/mmc_support.c   2005-01-30 09:07:01.000000000 +0100
+@@ -0,0 +1,126 @@
++/*
++ * BRIEF MODULE DESCRIPTION
++ *
++ *    MMC support routines for DB1100.
++ *
++ *
++ * Copyright (c) 2003-2004 Embedded Edge, LLC.
++ * Author: Embedded Edge, LLC.
++ * Contact: dan@embeddededge.com
++ *
++ *  This program is free software; you can redistribute  it and/or modify it
++ *  under  the terms of  the GNU General  Public License as published by the
++ *  Free Software Foundation;  either version 2 of the  License, or (at your
++ *  option) any later version.
++ *
++ *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++
++#include <linux/config.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++
++#include <asm/irq.h>
++#include <asm/au1000.h>
++#include <asm/au1100_mmc.h>
++#include <asm/db1x00.h>
++
++
++/* SD/MMC controller support functions */
++
++/*
++ * Detect card.
++ */
++void mmc_card_inserted(int _n_, int *_res_)
++{
++      u32 gpios = au_readl(SYS_PINSTATERD);
++      u32 emptybit = (_n_) ? (1<<20) : (1<<19);
++      *_res_ = ((gpios & emptybit) == 0);
++}
++
++/*
++ * Check card write protection.
++ */
++void mmc_card_writable(int _n_, int *_res_)
++{
++      BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
++      unsigned long mmc_wp, board_specific;
++
++      if (_n_) {
++              mmc_wp = BCSR_BOARD_SD1_WP;
++      } else {
++              mmc_wp = BCSR_BOARD_SD0_WP;
++      }
++
++      board_specific = au_readl((unsigned long)(&bcsr->specific));
++
++      if (!(board_specific & mmc_wp)) {/* low means card writable */
++              *_res_ = 1;
++      } else {
++              *_res_ = 0;
++      }
++}
++
++/*
++ * Apply power to card slot.
++ */
++void mmc_power_on(int _n_)
++{
++      BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
++      unsigned long mmc_pwr, board_specific;
++
++      if (_n_) {
++              mmc_pwr = BCSR_BOARD_SD1_PWR;
++      } else {
++              mmc_pwr = BCSR_BOARD_SD0_PWR;
++      }
++
++      board_specific = au_readl((unsigned long)(&bcsr->specific));
++      board_specific |= mmc_pwr;
++
++      au_writel(board_specific, (int)(&bcsr->specific));
++      au_sync_delay(1);
++}
++
++/*
++ * Remove power from card slot.
++ */
++void mmc_power_off(int _n_)
++{
++      BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
++      unsigned long mmc_pwr, board_specific;
++
++      if (_n_) {
++              mmc_pwr = BCSR_BOARD_SD1_PWR;
++      } else {
++              mmc_pwr = BCSR_BOARD_SD0_PWR;
++      }
++
++      board_specific = au_readl((unsigned long)(&bcsr->specific));
++      board_specific &= ~mmc_pwr;
++
++      au_writel(board_specific, (int)(&bcsr->specific));
++      au_sync_delay(1);
++}
++
++EXPORT_SYMBOL(mmc_card_inserted);
++EXPORT_SYMBOL(mmc_card_writable);
++EXPORT_SYMBOL(mmc_power_on);
++EXPORT_SYMBOL(mmc_power_off);
++
+diff -Nur linux-2.4.29/arch/mips/au1000/ficmmp/Makefile linux-mips/arch/mips/au1000/ficmmp/Makefile
+--- linux-2.4.29/arch/mips/au1000/ficmmp/Makefile      1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/ficmmp/Makefile        2005-01-30 09:01:27.000000000 +0100
+@@ -0,0 +1,25 @@
++#
++#  Copyright 2000 MontaVista Software Inc.
++#  Author: MontaVista Software, Inc.
++#             ppopov@mvista.com or source@mvista.com
++#
++# Makefile for the Alchemy Semiconductor FIC board.
++#
++# Note! Dependencies are done automagically by 'make dep', which also
++# removes any old dependencies. DON'T put your own dependencies here
++# unless it's something special (ie not a .c file).
++#
++
++USE_STANDARD_AS_RULE := true
++
++O_TARGET := ficmmp.o
++
++obj-y := init.o board_setup.o irqmap.o au1200_ibutton.o au1xxx_dock.o
++
++ifdef CONFIG_MMC
++obj-y += mmc_support.o
++export-objs +=mmc_support.o
++endif
++
++
++include $(TOPDIR)/Rules.make
+diff -Nur linux-2.4.29/arch/mips/au1000/ficmmp/au1200_ibutton.c linux-mips/arch/mips/au1000/ficmmp/au1200_ibutton.c
+--- linux-2.4.29/arch/mips/au1000/ficmmp/au1200_ibutton.c      1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/ficmmp/au1200_ibutton.c        2005-02-03 07:35:29.000000000 +0100
+@@ -0,0 +1,270 @@
++/* ---------------------------------------------------------------------- 
++ *  mtwilson_keys.c
++ *
++ *  Copyright (C) 2003 Intrinsyc Software Inc.
++ *
++ *  Intel Personal Media Player buttons
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License version 2 as
++ *  published by the Free Software Foundation.
++ *
++ *  May 02, 2003 : Initial version [FB]
++ *
++ ------------------------------------------------------------------------*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/sched.h>
++#include <linux/miscdevice.h>
++#include <linux/errno.h>
++#include <linux/poll.h>
++#include <linux/delay.h>
++#include <linux/input.h>
++
++#include <asm/au1000.h>
++#include <asm/uaccess.h>
++#include <asm/au1xxx_gpio.h>
++#include <asm/irq.h>
++#include <asm/keyboard.h>
++#include <linux/time.h>
++
++#define DRIVER_VERSION        "V1.0"
++#define DRIVER_AUTHOR "FIC"
++#define DRIVER_DESC           "FIC Travis Media Player Button Driver"
++#define DRIVER_NAME           "Au1200Button"
++
++#define BUTTON_MAIN           (1<<1)
++#define BUTTON_SELECT (1<<6)
++#define BUTTON_GUIDE  (1<<12)
++#define BUTTON_DOWN           (1<<17)
++#define BUTTON_LEFT           (1<<19)
++#define BUTTON_RIGHT  (1<<26)
++#define BUTTON_UP             (1<<28)
++
++#define BUTTON_MASK (\
++    BUTTON_MAIN   \
++    | BUTTON_SELECT   \
++    | BUTTON_GUIDE    \
++    | BUTTON_DOWN     \
++    | BUTTON_LEFT     \
++    | BUTTON_RIGHT    \
++    | BUTTON_UP               \
++    )
++
++#define BUTTON_INVERT (\
++    BUTTON_MAIN   \
++    | 0                               \
++    | BUTTON_GUIDE    \
++    | 0                               \
++    | 0                               \
++    | 0                               \
++    | 0                               \
++    )
++
++char button_map[32]={0,KEY_S,0,0,0,0,KEY_ENTER,0,0,0,0,0,KEY_G,0,0,0,0,KEY_DOWN,0,KEY_LEFT,0,0,0,0,0,0,KEY_RIGHT,0,KEY_UP,0,0,0};
++//char button_map[32]={0,0,0,0,0,0,KEY_ENTER,0,0,0,0,0,KEY_G,0,0,0,0,KEY_DOWN,0,KEY_LEFT,0,0,0,0,0,0,KEY_RIGHT,0,KEY_UP,0,0,0};
++
++//char button_map[32]={0,KEY_TAB,0,0,0,0,KEY_M,0,0,0,0,0,KEY_S,0,0,0,0,KEY_DOWN,0,KEY_LEFT,0,0,0,0,0,0,KEY_RIGHT,0,KEY_UP,0,0,0};
++//char button_map[32]={0,0,0,0,0,0,KEY_M,0,0,0,0,0,KEY_S,0,0,0,0,KEY_DOWN,0,KEY_LEFT,0,0,0,0,0,0,KEY_RIGHT,0,KEY_UP,0,0,0};
++
++#define BUTTON_COUNT (sizeof (button_map) / sizeof (button_map[0]))
++
++struct input_dev dev;
++struct timeval cur_tv;
++
++static unsigned int old_tv_usec = 0;
++
++static unsigned int read_button_state(void)
++{
++      unsigned int state;
++
++      state = au_readl(SYS_PINSTATERD) & BUTTON_MASK; /* get gpio status */
++
++      state ^= BUTTON_INVERT;         /* invert main & guide button */
++
++      /* printk("au1200_ibutton.c: button state [0x%X]\r\n",state); */
++      return state;
++}
++
++//This function returns 0 if the allowed microseconds have elapsed since the last call to ths function, otherwise it returns 1 to indicate a bounce condition
++static unsigned int bounce() 
++{
++
++      unsigned int elapsed_time;
++
++      do_gettimeofday (&cur_tv);    
++
++      if (!old_tv_usec) {
++              old_tv_usec = cur_tv.tv_usec;
++              return 0;
++      }
++
++      if(cur_tv.tv_usec > old_tv_usec) {
++              /* If there hasn't been rollover */
++              elapsed_time =  ((cur_tv.tv_usec - old_tv_usec));
++      }
++      else {
++              /* Accounting for rollover */
++              elapsed_time =  ((1000000 - old_tv_usec + cur_tv.tv_usec));
++      }
++
++      if (elapsed_time > 250000) {
++              old_tv_usec = 0;        /* reset the bounce time */
++              return 0;
++      }
++
++      return 1;
++}
++
++/* button interrupt handler */
++static void button_interrupt(int irq, void *dev, struct pt_regs *regs)
++{
++
++      unsigned int i,bit_mask, key_choice;
++      u32 button_state;
++      
++      /* Report state to upper level */
++      
++      button_state = read_button_state() & BUTTON_MASK; /* get new gpio status */
++
++      /* Return if this is a repeated (bouncing) event */
++      if(bounce())
++              return;
++
++      /* we want to make keystrokes */
++      for( i=0; i< BUTTON_COUNT; i++) {
++              bit_mask = 1<<i;
++              if (button_state & bit_mask) {
++                      key_choice = button_map[i];
++                      /* toggle key down */
++                      input_report_key(dev, key_choice, 1);
++                      /* toggle key up */
++                      input_report_key(dev, key_choice, 0);
++                      printk("ibutton gpio %d stat %x scan code %d\r\n", 
++                                      i, button_state, key_choice);
++                      /* Only report the first key event; it doesn't make 
++                       * sense for two keys to be pressed at the same time, 
++                       * and causes problems with the directional keys 
++                       * return;      
++                       */
++              }
++      }
++}
++
++static int 
++button_translate(unsigned char scancode, unsigned char *keycode, char raw_mode) 
++{
++      static int prev_scancode;
++      
++      printk( "ibutton.c: translate: scancode=%x raw_mode=%x\n", 
++                      scancode, raw_mode);
++
++      if (scancode == 0xe0 || scancode == 0xe1) {
++              prev_scancode = scancode;
++              return 0;
++      }
++
++      if (scancode == 0x00 || scancode == 0xff) {
++              prev_scancode = 0;
++              return 0;
++      }
++
++      *keycode = scancode;
++
++      return 1;
++}
++
++/* init button hardware */
++static int button_hw_init(void)
++{
++      unsigned int    ipinfunc=0;     
++
++      printk("au1200_ibutton.c: Initializing buttons hardware\n");
++
++      // initialize GPIO pin function assignments     
++
++      ipinfunc = au_readl(SYS_PINFUNC);
++
++      ipinfunc &= ~(SYS_PINFUNC_DMA | SYS_PINFUNC_S0A | SYS_PINFUNC_S0B);     
++      au_writel( ipinfunc ,SYS_PINFUNC);
++      
++      ipinfunc |=  (SYS_PINFUNC_S0C);
++      au_writel( ipinfunc ,SYS_PINFUNC);
++      
++      return 0;
++}
++
++/* button driver init */
++static int __init button_init(void)
++{
++      int ret, i;
++      unsigned int flag=0;
++
++      printk("au1200_ibutton.c: button_init()\r\n");
++      
++      button_hw_init();
++      
++      /* register all button irq handler */
++      
++      for(i=0; i< sizeof(button_map)/sizeof(button_map[0]); i++)
++      {
++              /* register irq <-- gpio 1 ,6 ,12 , 17 ,19 , 26 ,28 */
++              if(button_map[i] != 0)  
++              {
++                      ret = request_irq(AU1000_GPIO_0 + i , 
++                                      &button_interrupt , SA_INTERRUPT , 
++                                      DRIVER_NAME , &dev);
++                      if(ret) flag |= 1<<i;
++              }
++      }
++
++      printk("au1200_ibutton.c: request_irq,ret:0x%x\r\n",ret);
++      
++      if (ret) {
++              printk("au1200_ibutton.c: request_irq:%X failed\r\n",flag);
++              return ret;
++      }
++              
++      dev.name = DRIVER_NAME;
++      dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
++
++      for (i=0;i<sizeof(button_map)/sizeof(button_map[0]);i++)
++      {
++              dev.keybit[LONG(button_map[i])] |= BIT(button_map[i]);
++      }
++      
++      input_register_device(&dev);
++
++      /* ready to receive interrupts */
++
++      return 0;
++}
++
++/* button driver exit */
++static void __exit button_exit(void)
++{
++      int i;
++      
++      for(i=0;i<sizeof(button_map)/sizeof(button_map[0]);i++)
++      {
++              if(button_map[i] != 0)
++              {
++                      free_irq( AU1000_GPIO_0 + i, &dev);
++              }
++      }
++      
++      input_unregister_device(&dev);
++      
++      printk("au1200_ibutton.c: button_exit()\r\n");
++}
++
++module_init(button_init);
++module_exit(button_exit);
++
++MODULE_AUTHOR( DRIVER_AUTHOR );
++MODULE_DESCRIPTION( DRIVER_DESC );
++MODULE_LICENSE("GPL");
+diff -Nur linux-2.4.29/arch/mips/au1000/ficmmp/au1xxx_dock.c linux-mips/arch/mips/au1000/ficmmp/au1xxx_dock.c
+--- linux-2.4.29/arch/mips/au1000/ficmmp/au1xxx_dock.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/ficmmp/au1xxx_dock.c   2005-01-30 09:01:27.000000000 +0100
+@@ -0,0 +1,261 @@
++/*
++ *  Copyright (C) 2003 Metrowerks, All Rights Reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/sched.h>
++#include <linux/miscdevice.h>
++#include <linux/errno.h>
++#include <linux/poll.h>
++#include <asm/au1000.h>
++#include <asm/uaccess.h>
++#include <asm/au1xxx_gpio.h>
++
++
++#if defined(CONFIG_MIPS_FICMMP)
++      #define DOCK_GPIO       215
++#else
++      #error Unsupported Au1xxx Platform
++#endif
++
++#define MAKE_FLAG 0x20
++
++#undef DEBUG
++
++#define DEBUG 0
++//#define DEBUG 1
++
++#if DEBUG
++#define DPRINTK(format, args...) printk(__FUNCTION__ ": "  format, ## args)
++#else
++#define DPRINTK(format, args...) do { } while (0)
++#endif
++
++/* Please note that this driver is based on a timer and is not interrupt
++ * driven.  If you are going to make use of this driver, you will need to have
++ * your application open the dock listing from the /dev directory first.
++ */
++
++struct au1xxx_dock {
++      struct fasync_struct *fasync;
++      wait_queue_head_t     read_wait;
++      int open_count;
++      unsigned int debounce;
++      unsigned int current;
++      unsigned int last;
++};
++
++static struct au1xxx_dock dock_info;
++
++
++static void dock_timer_periodic(void *data);
++
++static struct tq_struct dock_task = {
++      routine:        dock_timer_periodic,
++      data:           NULL
++};
++
++static int cleanup_flag = 0;
++static DECLARE_WAIT_QUEUE_HEAD(cleanup_wait_queue);
++
++
++static unsigned int read_dock_state(void)
++{
++      u32 state;
++
++      state = au1xxx_gpio_read(DOCK_GPIO);
++      
++      /* printk( "Current Dock State: %d\n", state ); */
++
++      return state;
++}
++
++
++static void dock_timer_periodic(void *data)
++{
++      struct au1xxx_dock *dock = (struct au1xxx_dock *)data;
++      unsigned long dock_state;
++      
++      /* If cleanup wants us to die */
++      if (cleanup_flag) {
++              /* now cleanup_module can return */
++              wake_up(&cleanup_wait_queue); 
++      } else {
++              /* put ourselves back in the task queue */
++              queue_task(&dock_task, &tq_timer);      
++      }
++
++      /* read current dock */
++      dock_state = read_dock_state();
++
++      /* if dock states hasn't changed */
++      /* save time and be done. */
++      if (dock_state == dock->current) {
++              return;
++      }
++      
++      if (dock_state == dock->debounce) {
++              dock->current = dock_state;
++      } else {
++              dock->debounce = dock_state;
++      }
++      if (dock->current != dock->last) {
++              if (waitqueue_active(&dock->read_wait)) {
++                  wake_up_interruptible(&dock->read_wait);
++              }
++      }
++}
++
++
++static ssize_t au1xxx_dock_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
++{
++      struct au1xxx_dock *dock = filp->private_data;
++      char event[3];
++      int last;
++      int cur;
++      int err;
++      
++try_again:
++
++      while (dock->current == dock->last) {
++              if (filp->f_flags & O_NONBLOCK) {
++                      return -EAGAIN;
++              }
++              interruptible_sleep_on(&dock->read_wait);
++              if (signal_pending(current)) {
++                      return -ERESTARTSYS;
++              }
++      }
++      
++      cur  = dock->current;
++      last = dock->last;
++
++      if(cur != last)
++      {
++              event[0] = cur ? 'D' : 'U';
++              event[1] = '\r';
++              event[2] = '\n';
++      }
++      else
++              goto try_again;
++      
++      dock->last = cur;
++      err = copy_to_user(buffer, &event, 3);
++      if (err) {
++              return err;
++      }
++      
++      return 3;
++}
++
++
++static int au1xxx_dock_open(struct inode *inode, struct file *filp)
++{
++      struct au1xxx_dock *dock = &dock_info;
++
++      MOD_INC_USE_COUNT;
++
++      filp->private_data = dock;
++
++      if (dock->open_count++ == 0) {
++              dock_task.data = dock;
++              cleanup_flag = 0;
++              queue_task(&dock_task, &tq_timer);
++      }
++
++      return 0;
++}
++
++
++static unsigned int au1xxx_dock_poll(struct file *filp, poll_table *wait)
++{
++      struct au1xxx_dock *dock = filp->private_data;
++      int ret = 0;
++
++      DPRINTK("start\n");
++      poll_wait(filp, &dock->read_wait, wait);
++      if (dock->current != dock->last) {
++              ret = POLLIN | POLLRDNORM;
++      }
++      return ret;
++}
++
++
++static int au1xxx_dock_release(struct inode *inode, struct file *filp)
++{
++      struct au1xxx_dock *dock = filp->private_data;
++
++      DPRINTK("start\n");
++
++      if (--dock->open_count == 0) {
++              cleanup_flag = 1;
++              sleep_on(&cleanup_wait_queue);
++      }
++      MOD_DEC_USE_COUNT;
++      
++      return 0;
++}
++
++
++
++static struct file_operations au1xxx_dock_fops = {
++      owner:          THIS_MODULE,
++      read:           au1xxx_dock_read,
++      poll:           au1xxx_dock_poll,
++      open:           au1xxx_dock_open,
++      release:        au1xxx_dock_release,
++};
++
++/*
++ * The au1xxx dock is a misc device:
++ * Major 10 char
++ * Minor 22        /dev/dock
++ * 
++ * This is /dev/misc/dock if devfs is used.
++ */
++
++static struct miscdevice au1xxx_dock_dev = {
++      minor:  23,
++      name:   "dock",
++      fops:   &au1xxx_dock_fops,
++};
++
++static int __init au1xxx_dock_init(void)
++{
++      struct au1xxx_dock *dock = &dock_info;
++      int ret;
++
++      DPRINTK("Initializing dock driver\n");
++      dock->open_count = 0;
++      cleanup_flag        = 0;
++      init_waitqueue_head(&dock->read_wait);
++
++
++      /* yamon configures GPIO pins for the dock
++       * no initialization needed
++       */
++
++      ret = misc_register(&au1xxx_dock_dev);
++
++      DPRINTK("dock driver fully initialized.\n");
++
++      return ret;
++}
++
++
++static void __exit au1xxx_dock_exit(void)
++{
++      DPRINTK("unloading dock driver\n");
++      misc_deregister(&au1xxx_dock_dev);
++}
++
++
++module_init(au1xxx_dock_init);
++module_exit(au1xxx_dock_exit);
+diff -Nur linux-2.4.29/arch/mips/au1000/ficmmp/board_setup.c linux-mips/arch/mips/au1000/ficmmp/board_setup.c
+--- linux-2.4.29/arch/mips/au1000/ficmmp/board_setup.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/ficmmp/board_setup.c   2005-01-30 09:01:27.000000000 +0100
+@@ -0,0 +1,191 @@
++/*
++ *
++ * BRIEF MODULE DESCRIPTION
++ *    Alchemy Pb1200 board setup.
++ *
++ *  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  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/ioport.h>
++#include <linux/mm.h>
++#include <linux/console.h>
++#include <linux/mc146818rtc.h>
++#include <linux/delay.h>
++#include <linux/ide.h>
++
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
++#include <linux/ide.h>
++#endif
++
++#include <asm/cpu.h>
++#include <asm/bootinfo.h>
++#include <asm/irq.h>
++#include <asm/keyboard.h>
++#include <asm/mipsregs.h>
++#include <asm/reboot.h>
++#include <asm/pgtable.h>
++#include <asm/au1000.h>
++#include <asm/ficmmp.h>
++#include <asm/au1xxx_dbdma.h>
++#include <asm/au1xxx_gpio.h>
++
++extern struct rtc_ops no_rtc_ops;
++
++/* value currently in the board configuration register */
++u16 ficmmp_config = 0;
++
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
++extern struct ide_ops *ide_ops;
++extern struct ide_ops au1xxx_ide_ops;
++extern u32 au1xxx_ide_virtbase;
++extern u64 au1xxx_ide_physbase;
++extern int au1xxx_ide_irq;
++
++u32 led_base_addr;
++/* Ddma */
++chan_tab_t *ide_read_ch, *ide_write_ch;
++u32 au1xxx_ide_ddma_enable = 0, switch4ddma = 1; // PIO+ddma
++
++dbdev_tab_t new_dbdev_tab_element = { DSCR_CMD0_THROTTLE, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 };
++#endif /* end CONFIG_BLK_DEV_IDE_AU1XXX */
++
++void board_reset (void)
++{
++      au_writel(0, 0xAD80001C);
++}
++
++void __init board_setup(void)
++{
++      char *argptr = NULL;
++      u32 pin_func;
++      rtc_ops = &no_rtc_ops;
++
++      ficmmp_config_init();   //Initialize FIC control register
++      
++#if 0
++      /* Enable PSC1 SYNC for AC97.  Normaly done in audio driver,
++       * but it is board specific code, so put it here.
++       */
++      pin_func = au_readl(SYS_PINFUNC);
++      au_sync();
++      pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1;
++      au_writel(pin_func, SYS_PINFUNC);
++
++      au_writel(0, (u32)bcsr|0x10); /* turn off pcmcia power */
++      au_sync();
++#endif
++
++#if defined( CONFIG_I2C_ALGO_AU1550 )
++      {
++      u32 freq0, clksrc;
++
++      /* Select SMBUS in CPLD */
++      /* bcsr->resets &= ~(BCSR_RESETS_PCS0MUX); */
++
++      pin_func = au_readl(SYS_PINFUNC);
++      au_sync();
++      pin_func &= ~(3<<17 | 1<<4);
++      /* Set GPIOs correctly */
++      pin_func |= 2<<17;
++      au_writel(pin_func, SYS_PINFUNC);
++      au_sync();
++
++      /* The i2c driver depends on 50Mhz clock */
++      freq0 = au_readl(SYS_FREQCTRL0);
++      au_sync();
++      freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1);
++      freq0 |= (3<<SYS_FC_FRDIV1_BIT);
++      /* 396Mhz / (3+1)*2 == 49.5Mhz */
++      au_writel(freq0, SYS_FREQCTRL0);
++      au_sync();
++      freq0 |= SYS_FC_FE1;
++      au_writel(freq0, SYS_FREQCTRL0);
++      au_sync();
++
++      clksrc = au_readl(SYS_CLKSRC);
++      au_sync();
++      clksrc &= ~0x01f00000;
++      /* bit 22 is EXTCLK0 for PSC0 */
++      clksrc |= (0x3 << 22);
++      au_writel(clksrc, SYS_CLKSRC);
++      au_sync();
++      }
++#endif
++
++#ifdef CONFIG_FB_AU1200
++      argptr = prom_getcmdline();
++      strcat(argptr, " video=au1200fb:panel:s11");
++#endif
++
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
++      /*
++       * Iniz IDE parameters
++       */
++      ide_ops = &au1xxx_ide_ops;
++      au1xxx_ide_irq = FICMMP_IDE_INT;
++      au1xxx_ide_physbase = AU1XXX_ATA_PHYS_ADDR;
++      au1xxx_ide_virtbase = KSEG1ADDR(AU1XXX_ATA_PHYS_ADDR);
++      switch4ddma = 0;
++      /*
++      ide_ops = &au1xxx_ide_ops;
++      au1xxx_ide_irq = FICMMP_IDE_INT;
++      au1xxx_ide_base = KSEG1ADDR(AU1XXX_ATA_BASE);
++      */
++      au1xxx_gpio_write(9, 1);
++      printk("B4001010: %X\n", *((u32*)0xB4001010));
++      printk("B4001014: %X\n", *((u32*)0xB4001014));
++      printk("B4001018: %X\n", *((u32*)0xB4001018));
++      printk("B1900100: %X\n", *((u32*)0xB1900100));
++      
++#if 0
++      ficmmp_config_clear(FICMMP_CONFIG_IDERST);
++      mdelay(100);
++      ficmmp_config_set(FICMMP_CONFIG_IDERST);
++      mdelay(100);
++#endif
++      /*
++       * change PIO or PIO+Ddma
++       * check the GPIO-5 pin condition. pb1200:s18_dot
++       */
++/*    switch4ddma = 0; //(au_readl(SYS_PINSTATERD) & (1 << 5)) ? 1 : 0; */
++#endif
++
++      /* The Pb1200 development board uses external MUX for PSC0 to
++      support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI
++      */
++#if defined(CONFIG_AU1550_PSC_SPI) && defined(CONFIG_I2C_ALGO_AU1550)
++      #error I2C and SPI are mutually exclusive. Both are physically connected to PSC0.\
++                      Refer to Pb1200 documentation.
++#elif defined( CONFIG_AU1550_PSC_SPI )
++      //bcsr->resets |= BCSR_RESETS_PCS0MUX;
++#elif defined( CONFIG_I2C_ALGO_AU1550 )
++      //bcsr->resets &= (~BCSR_RESETS_PCS0MUX);
++#endif
++      au_sync();
++
++      printk("FIC Multimedia Player Board\n");
++      au1xxx_gpio_tristate(5);
++      printk("B1900100: %X\n", *((volatile u32*)0xB1900100));
++      printk("B190002C: %X\n", *((volatile u32*)0xB190002C));
++}
++
+diff -Nur linux-2.4.29/arch/mips/au1000/ficmmp/init.c linux-mips/arch/mips/au1000/ficmmp/init.c
+--- linux-2.4.29/arch/mips/au1000/ficmmp/init.c        1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/ficmmp/init.c  2005-01-30 09:01:27.000000000 +0100
+@@ -0,0 +1,76 @@
++/*
++ *
++ * BRIEF MODULE DESCRIPTION
++ *    PB1200 board setup
++ *
++ *  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  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/sched.h>
++#include <linux/bootmem.h>
++#include <asm/addrspace.h>
++#include <asm/bootinfo.h>
++#include <linux/config.h>
++#include <linux/string.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++
++int prom_argc;
++char **prom_argv, **prom_envp;
++extern void  __init prom_init_cmdline(void);
++extern char *prom_getenv(char *envname);
++
++const char *get_system_type(void)
++{
++      return "FIC Multimedia Player (Au1200)";
++}
++
++u32 mae_memsize = 0;
++
++int __init prom_init(int argc, char **argv, char **envp, int *prom_vec)
++{
++      unsigned char *memsize_str;
++      unsigned long memsize;
++
++      prom_argc = argc;
++      prom_argv = argv;
++      prom_envp = envp;
++
++      mips_machgroup = MACH_GROUP_ALCHEMY;
++      mips_machtype = MACH_PB1000;    /* set the platform # */   
++      prom_init_cmdline();
++
++      memsize_str = prom_getenv("memsize");
++      if (!memsize_str) {
++              memsize = 0x08000000;
++      } else {
++              memsize = simple_strtol(memsize_str, NULL, 0);
++      }
++
++      /* reserved 32MB for MAE driver */
++      memsize -= (32 * 1024 * 1024);
++      add_memory_region(0, memsize, BOOT_MEM_RAM);
++      mae_memsize = memsize; /* for drivers/char/au1xxx_mae.c */
++      return 0;
++}
++
+diff -Nur linux-2.4.29/arch/mips/au1000/ficmmp/irqmap.c linux-mips/arch/mips/au1000/ficmmp/irqmap.c
+--- linux-2.4.29/arch/mips/au1000/ficmmp/irqmap.c      1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/ficmmp/irqmap.c        2005-01-30 09:01:27.000000000 +0100
+@@ -0,0 +1,61 @@
++/*
++ * BRIEF MODULE DESCRIPTION
++ *    Au1xxx irq map table
++ *
++ *  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  SOFTWARE  IS PROVIDED         ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,         INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO        EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED         TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,        OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN        CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/irq.h>
++#include <linux/kernel_stat.h>
++#include <linux/module.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/timex.h>
++#include <linux/slab.h>
++#include <linux/random.h>
++#include <linux/delay.h>
++
++#include <asm/bitops.h>
++#include <asm/bootinfo.h>
++#include <asm/io.h>
++#include <asm/mipsregs.h>
++#include <asm/system.h>
++#include <asm/au1000.h>
++#include <asm/ficmmp.h>
++
++au1xxx_irq_map_t au1xxx_irq_map[] = {
++      { FICMMP_IDE_INT, INTC_INT_HIGH_LEVEL, 0 },
++      { AU1XXX_SMC91111_IRQ, INTC_INT_HIGH_LEVEL, 0 },
++      { AU1000_GPIO_1 , INTC_INT_FALL_EDGE, 0 },              // main button
++      { AU1000_GPIO_6 , INTC_INT_RISE_EDGE, 0 },              // select button
++      { AU1000_GPIO_12, INTC_INT_FALL_EDGE, 0 },              // guide button
++      { AU1000_GPIO_17, INTC_INT_RISE_EDGE, 0 },              // down button
++      { AU1000_GPIO_19, INTC_INT_RISE_EDGE, 0 },              // left button
++      { AU1000_GPIO_26, INTC_INT_RISE_EDGE, 0 },              // right button
++      { AU1000_GPIO_28, INTC_INT_RISE_EDGE, 0 },              // up button
++};
++
++int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
++
+diff -Nur linux-2.4.29/arch/mips/au1000/hydrogen3/Makefile linux-mips/arch/mips/au1000/hydrogen3/Makefile
+--- linux-2.4.29/arch/mips/au1000/hydrogen3/Makefile   2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/hydrogen3/Makefile     2005-02-12 04:05:28.000000000 +0100
+@@ -14,6 +14,11 @@
+ O_TARGET := hydrogen3.o
+-obj-y := init.o board_setup.o irqmap.o
++obj-y := init.o board_setup.o irqmap.o buttons.o
++
++ifdef CONFIG_MMC
++obj-y += mmc_support.o
++export-objs +=mmc_support.o
++endif
+ include $(TOPDIR)/Rules.make
+diff -Nur linux-2.4.29/arch/mips/au1000/hydrogen3/board_setup.c linux-mips/arch/mips/au1000/hydrogen3/board_setup.c
+--- linux-2.4.29/arch/mips/au1000/hydrogen3/board_setup.c      2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/hydrogen3/board_setup.c        2005-01-31 12:59:30.000000000 +0100
+@@ -57,6 +57,9 @@
+       rtc_ops = &no_rtc_ops;
++      /* Set GPIO14 high to make CD/DAT1 high for MMC to work */
++      au_writel(1<<14, SYS_OUTPUTSET);
++
+ #ifdef CONFIG_AU1X00_USB_DEVICE
+       // 2nd USB port is USB device
+       pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000);
+diff -Nur linux-2.4.29/arch/mips/au1000/hydrogen3/buttons.c linux-mips/arch/mips/au1000/hydrogen3/buttons.c
+--- linux-2.4.29/arch/mips/au1000/hydrogen3/buttons.c  1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/hydrogen3/buttons.c    2005-02-11 22:09:55.000000000 +0100
+@@ -0,0 +1,308 @@
++/*
++ *  Copyright (C) 2003 Metrowerks, All Rights Reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/sched.h>
++#include <linux/miscdevice.h>
++#include <linux/errno.h>
++#include <linux/poll.h>
++#include <asm/au1000.h>
++#include <asm/uaccess.h>
++
++#define BUTTON_SELECT (1<<1)
++#define BUTTON_1      (1<<2)
++#define BUTTON_2      (1<<3)
++#define BUTTON_ONOFF  (1<<6)
++#define BUTTON_3      (1<<7)
++#define BUTTON_4      (1<<8)
++#define BUTTON_LEFT   (1<<9)
++#define BUTTON_DOWN   (1<<10)
++#define BUTTON_RIGHT  (1<<11)
++#define BUTTON_UP     (1<<12)
++
++#define BUTTON_MASK (\
++    BUTTON_SELECT     \
++    | BUTTON_1        \
++    | BUTTON_2                \
++    | BUTTON_ONOFF    \
++    | BUTTON_3                \
++    | BUTTON_4                \
++    | BUTTON_LEFT     \
++    | BUTTON_DOWN     \
++    | BUTTON_RIGHT    \
++    | BUTTON_UP               \
++    )
++
++#define BUTTON_INVERT (\
++    BUTTON_SELECT     \
++    | BUTTON_1        \
++    | BUTTON_2                \
++    | BUTTON_3                \
++    | BUTTON_4                \
++    | BUTTON_LEFT     \
++    | BUTTON_DOWN     \
++    | BUTTON_RIGHT    \
++    | BUTTON_UP               \
++    )
++
++
++
++#define MAKE_FLAG 0x20
++
++#undef DEBUG
++
++#define DEBUG 0
++//#define DEBUG 1
++
++#if DEBUG
++#define DPRINTK(format, args...) printk(__FUNCTION__ ": "  format, ## args)
++#else
++#define DPRINTK(format, args...) do { } while (0)
++#endif
++
++/* Please note that this driver is based on a timer and is not interrupt
++ * driven.  If you are going to make use of this driver, you will need to have
++ * your application open the buttons listing from the /dev directory first.
++ */
++
++struct hydrogen3_buttons {
++      struct fasync_struct *fasync;
++      wait_queue_head_t     read_wait;
++      int open_count;
++      unsigned int debounce;
++      unsigned int current;
++      unsigned int last;
++};
++
++static struct hydrogen3_buttons buttons_info;
++
++
++static void button_timer_periodic(void *data);
++
++static struct tq_struct button_task = {
++      routine:        button_timer_periodic,
++      data:           NULL
++};
++
++static int cleanup_flag = 0;
++static DECLARE_WAIT_QUEUE_HEAD(cleanup_wait_queue);
++
++
++static unsigned int read_button_state(void)
++{
++      unsigned long state;
++
++      state = inl(SYS_PINSTATERD) & BUTTON_MASK;
++      state ^= BUTTON_INVERT;
++      
++      DPRINTK( "Current Button State: %d\n", state );
++
++      return state;
++}
++
++
++static void button_timer_periodic(void *data)
++{
++      struct hydrogen3_buttons *buttons = (struct hydrogen3_buttons *)data;
++      unsigned long button_state;
++      
++      // If cleanup wants us to die
++      if (cleanup_flag) {
++              wake_up(&cleanup_wait_queue);           // now cleanup_module can return
++      } else {
++              queue_task(&button_task, &tq_timer);    // put ourselves back in the task queue
++      }
++
++      // read current buttons
++      button_state = read_button_state();
++
++      // if no buttons are down and nothing to do then
++      // save time and be done.
++      if ((button_state == 0) && (buttons->current == 0)) {
++              return;
++      }
++      
++      if (button_state == buttons->debounce) {
++              buttons->current = button_state;
++      } else {
++              buttons->debounce = button_state;
++      }
++//    printk("0x%04x\n", button_state);
++      if (buttons->current != buttons->last) {
++              if (waitqueue_active(&buttons->read_wait)) {
++                  wake_up_interruptible(&buttons->read_wait);
++              }
++      }
++}
++
++
++static ssize_t hydrogen3_buttons_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
++{
++      struct hydrogen3_buttons *buttons = filp->private_data;
++      char events[16];
++      int index;
++      int last;
++      int cur;
++      int bit;
++      int bit_mask;
++      int err;
++      
++      DPRINTK("start\n");
++
++try_again:
++
++      while (buttons->current == buttons->last) {
++              if (filp->f_flags & O_NONBLOCK) {
++                      return -EAGAIN;
++              }
++              interruptible_sleep_on(&buttons->read_wait);
++              if (signal_pending(current)) {
++                      return -ERESTARTSYS;
++              }
++      }
++      
++      cur  = buttons->current;
++      last = buttons->last;
++      
++      index    = 0;
++      bit_mask = 1;
++      for (bit = 0; (bit < 16) && count; bit++) {
++              if ((cur ^ last) & bit_mask) {
++                      if (cur & bit_mask) {
++                              events[index] = (bit | MAKE_FLAG) + 'A';
++                              last |= bit_mask;
++                      } else {
++                              events[index] = bit + 'A';
++                              last &= ~bit_mask;
++                      }
++                      index++;
++                      count--;
++              }
++              bit_mask <<= 1;
++      }
++      buttons->last = last;
++      
++      if (index == 0) {
++              goto try_again;
++      }
++      
++      err = copy_to_user(buffer, events, index);
++      if (err) {
++              return err;
++      }
++      
++      return index;
++}
++
++
++static int hydrogen3_buttons_open(struct inode *inode, struct file *filp)
++{
++      struct hydrogen3_buttons *buttons = &buttons_info;
++
++      DPRINTK("start\n");
++      MOD_INC_USE_COUNT;
++
++      filp->private_data = buttons;
++
++      if (buttons->open_count++ == 0) {
++              button_task.data = buttons;
++              cleanup_flag = 0;
++              queue_task(&button_task, &tq_timer);
++      }
++
++      return 0;
++}
++
++
++static unsigned int hydrogen3_buttons_poll(struct file *filp, poll_table *wait)
++{
++      struct hydrogen3_buttons *buttons = filp->private_data;
++      int ret = 0;
++
++      DPRINTK("start\n");
++      poll_wait(filp, &buttons->read_wait, wait);
++      if (buttons->current != buttons->last) {
++              ret = POLLIN | POLLRDNORM;
++      }
++      return ret;
++}
++
++
++static int hydrogen3_buttons_release(struct inode *inode, struct file *filp)
++{
++      struct hydrogen3_buttons *buttons = filp->private_data;
++
++      DPRINTK("start\n");
++
++      if (--buttons->open_count == 0) {
++              cleanup_flag = 1;
++              sleep_on(&cleanup_wait_queue);
++      }
++      MOD_DEC_USE_COUNT;
++      
++      return 0;
++}
++
++
++
++static struct file_operations hydrogen3_buttons_fops = {
++      owner:          THIS_MODULE,
++      read:           hydrogen3_buttons_read,
++      poll:           hydrogen3_buttons_poll,
++      open:           hydrogen3_buttons_open,
++      release:        hydrogen3_buttons_release,
++};
++
++/*
++ * The hydrogen3 buttons is a misc device:
++ * Major 10 char
++ * Minor 22        /dev/buttons
++ * 
++ * This is /dev/misc/buttons if devfs is used.
++ */
++
++static struct miscdevice hydrogen3_buttons_dev = {
++      minor:  22,
++      name:   "buttons",
++      fops:   &hydrogen3_buttons_fops,
++};
++
++static int __init hydrogen3_buttons_init(void)
++{
++      struct hydrogen3_buttons *buttons = &buttons_info;
++      int ret;
++
++      DPRINTK("Initializing buttons driver\n");
++      buttons->open_count = 0;
++      cleanup_flag        = 0;
++      init_waitqueue_head(&buttons->read_wait);
++
++
++      // yamon configures GPIO pins for the buttons
++      // no initialization needed
++
++      ret = misc_register(&hydrogen3_buttons_dev);
++
++      DPRINTK("Buttons driver fully initialized.\n");
++
++      return ret;
++}
++
++
++static void __exit hydrogen3_buttons_exit(void)
++{
++      DPRINTK("unloading buttons driver\n");
++      misc_deregister(&hydrogen3_buttons_dev);
++}
++
++
++module_init(hydrogen3_buttons_init);
++module_exit(hydrogen3_buttons_exit);
+diff -Nur linux-2.4.29/arch/mips/au1000/hydrogen3/mmc_support.c linux-mips/arch/mips/au1000/hydrogen3/mmc_support.c
+--- linux-2.4.29/arch/mips/au1000/hydrogen3/mmc_support.c      1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/hydrogen3/mmc_support.c        2005-02-02 05:27:06.000000000 +0100
+@@ -0,0 +1,89 @@
++/*
++ * BRIEF MODULE DESCRIPTION
++ *
++ *    MMC support routines for Hydrogen3.
++ *
++ *
++ * Copyright (c) 2003-2004 Embedded Edge, LLC.
++ * Author: Embedded Edge, LLC.
++ * Contact: dan@embeddededge.com
++ *
++ *  This program is free software; you can redistribute  it and/or modify it
++ *  under  the terms of  the GNU General  Public License as published by the
++ *  Free Software Foundation;  either version 2 of the  License, or (at your
++ *  option) any later version.
++ *
++ *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++
++#include <linux/config.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++
++#include <asm/irq.h>
++#include <asm/au1000.h>
++#include <asm/au1100_mmc.h>
++
++#define GPIO_17_WP 0x20000
++
++/* SD/MMC controller support functions */
++
++/*
++ * Detect card.
++ */
++void mmc_card_inserted(int _n_, int *_res_)
++{
++      u32 gpios = au_readl(SYS_PINSTATERD);
++      u32 emptybit = (1<<16);
++      *_res_ = ((gpios & emptybit) == 0);
++}
++
++/*
++ * Check card write protection.
++ */
++void mmc_card_writable(int _n_, int *_res_)
++{
++      unsigned long mmc_wp, board_specific; 
++              board_specific = au_readl(SYS_OUTPUTSET);
++              mmc_wp=GPIO_17_WP;
++              if (!(board_specific & mmc_wp)) {/* low means card writable */ 
++                      *_res_ = 1; 
++              } else {
++                      *_res_ = 0; 
++              } 
++}
++/*
++ * Apply power to card slot.
++ */
++void mmc_power_on(int _n_)
++{
++}
++
++/*
++ * Remove power from card slot.
++ */
++void mmc_power_off(int _n_)
++{
++}
++
++EXPORT_SYMBOL(mmc_card_inserted);
++EXPORT_SYMBOL(mmc_card_writable);
++EXPORT_SYMBOL(mmc_power_on);
++EXPORT_SYMBOL(mmc_power_off);
++
+diff -Nur linux-2.4.29/arch/mips/au1000/mtx-1/board_setup.c linux-mips/arch/mips/au1000/mtx-1/board_setup.c
+--- linux-2.4.29/arch/mips/au1000/mtx-1/board_setup.c  2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips/au1000/mtx-1/board_setup.c    2004-11-26 09:37:16.000000000 +0100
+@@ -48,6 +48,12 @@
+ extern struct rtc_ops no_rtc_ops;
++void board_reset (void)
++{
++      /* Hit BCSR.SYSTEM_CONTROL[SW_RST] */
++      au_writel(0x00000000, 0xAE00001C);
++}
++
+ void __init board_setup(void)
+ {
+       rtc_ops = &no_rtc_ops;
+diff -Nur linux-2.4.29/arch/mips/au1000/mtx-1/irqmap.c linux-mips/arch/mips/au1000/mtx-1/irqmap.c
+--- linux-2.4.29/arch/mips/au1000/mtx-1/irqmap.c       2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/mtx-1/irqmap.c 2004-11-26 09:37:16.000000000 +0100
+@@ -72,10 +72,10 @@
+        *      A       B       C       D
+        */
+       {
+-              {INTA, INTB, INTC, INTD},   /* IDSEL 0 */
+-              {INTA, INTB, INTC, INTD},   /* IDSEL 1 */
+-              {INTA, INTB, INTC, INTD},   /* IDSEL 2 */
+-              {INTA, INTB, INTC, INTD},   /* IDSEL 3 */
++              {INTA, INTB, INTX, INTX},   /* IDSEL 0 */
++              {INTB, INTA, INTX, INTX},   /* IDSEL 1 */
++              {INTC, INTD, INTX, INTX},   /* IDSEL 2 */
++              {INTD, INTC, INTX, INTX},   /* IDSEL 3 */
+       };
+       const long min_idsel = 0, max_idsel = 3, irqs_per_slot = 4;
+       return PCI_IRQ_TABLE_LOOKUP;
+diff -Nur linux-2.4.29/arch/mips/au1000/pb1100/Makefile linux-mips/arch/mips/au1000/pb1100/Makefile
+--- linux-2.4.29/arch/mips/au1000/pb1100/Makefile      2003-08-25 13:44:39.000000000 +0200
++++ linux-mips/arch/mips/au1000/pb1100/Makefile        2005-01-31 12:59:30.000000000 +0100
+@@ -16,4 +16,10 @@
+ obj-y := init.o board_setup.o irqmap.o
++
++ifdef CONFIG_MMC
++obj-y += mmc_support.o
++export-objs += mmc_support.o
++endif
++
+ include $(TOPDIR)/Rules.make
+diff -Nur linux-2.4.29/arch/mips/au1000/pb1100/mmc_support.c linux-mips/arch/mips/au1000/pb1100/mmc_support.c
+--- linux-2.4.29/arch/mips/au1000/pb1100/mmc_support.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/pb1100/mmc_support.c   2005-01-30 09:10:29.000000000 +0100
+@@ -0,0 +1,126 @@
++/*
++ * BRIEF MODULE DESCRIPTION
++ *
++ *    MMC support routines for PB1100.
++ *
++ *
++ * Copyright (c) 2003-2004 Embedded Edge, LLC.
++ * Author: Embedded Edge, LLC.
++ * Contact: dan@embeddededge.com
++ *
++ *  This program is free software; you can redistribute  it and/or modify it
++ *  under  the terms of  the GNU General  Public License as published by the
++ *  Free Software Foundation;  either version 2 of the  License, or (at your
++ *  option) any later version.
++ *
++ *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++
++#include <linux/config.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++
++#include <asm/irq.h>
++#include <asm/au1000.h>
++#include <asm/au1100_mmc.h>
++#include <asm/pb1100.h>
++
++
++/* SD/MMC controller support functions */
++
++/*
++ * Detect card.
++ */
++void mmc_card_inserted(int _n_, int *_res_)
++{
++      u32 gpios = au_readl(SYS_PINSTATERD);
++      u32 emptybit = (_n_) ? (1<<15) : (1<<14);
++      *_res_ = ((gpios & emptybit) == 0);
++}
++
++/*
++ * Check card write protection.
++ */
++void mmc_card_writable(int _n_, int *_res_)
++{
++      BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
++      unsigned long mmc_wp, board_specific;
++
++      if (_n_) {
++              mmc_wp = BCSR_PCMCIA_SD1_WP;
++      } else {
++              mmc_wp = BCSR_PCMCIA_SD0_WP;
++      }
++
++      board_specific = au_readl((unsigned long)(&bcsr->pcmcia));
++
++      if (!(board_specific & mmc_wp)) {/* low means card writable */
++              *_res_ = 1;
++      } else {
++              *_res_ = 0;
++      }
++}
++
++/*
++ * Apply power to card slot.
++ */
++void mmc_power_on(int _n_)
++{
++      BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
++      unsigned long mmc_pwr, board_specific;
++
++      if (_n_) {
++              mmc_pwr = BCSR_PCMCIA_SD1_PWR;
++      } else {
++              mmc_pwr = BCSR_PCMCIA_SD0_PWR;
++      }
++
++      board_specific = au_readl((unsigned long)(&bcsr->pcmcia));
++      board_specific |= mmc_pwr;
++
++      au_writel(board_specific, (int)(&bcsr->pcmcia));
++      au_sync_delay(1);
++}
++
++/*
++ * Remove power from card slot.
++ */
++void mmc_power_off(int _n_)
++{
++      BCSR * const bcsr = (BCSR *)BCSR_KSEG1_ADDR;
++      unsigned long mmc_pwr, board_specific;
++
++      if (_n_) {
++              mmc_pwr = BCSR_PCMCIA_SD1_PWR;
++      } else {
++              mmc_pwr = BCSR_PCMCIA_SD0_PWR;
++      }
++
++      board_specific = au_readl((unsigned long)(&bcsr->pcmcia));
++      board_specific &= ~mmc_pwr;
++
++      au_writel(board_specific, (int)(&bcsr->pcmcia));
++      au_sync_delay(1);
++}
++
++EXPORT_SYMBOL(mmc_card_inserted);
++EXPORT_SYMBOL(mmc_card_writable);
++EXPORT_SYMBOL(mmc_power_on);
++EXPORT_SYMBOL(mmc_power_off);
++
+diff -Nur linux-2.4.29/arch/mips/au1000/pb1200/Makefile linux-mips/arch/mips/au1000/pb1200/Makefile
+--- linux-2.4.29/arch/mips/au1000/pb1200/Makefile      1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/pb1200/Makefile        2005-01-30 09:01:27.000000000 +0100
+@@ -0,0 +1,25 @@
++#
++#  Copyright 2000 MontaVista Software Inc.
++#  Author: MontaVista Software, Inc.
++#             ppopov@mvista.com or source@mvista.com
++#
++# Makefile for the Alchemy Semiconductor PB1000 board.
++#
++# Note! Dependencies are done automagically by 'make dep', which also
++# removes any old dependencies. DON'T put your own dependencies here
++# unless it's something special (ie not a .c file).
++#
++
++USE_STANDARD_AS_RULE := true
++
++O_TARGET := pb1200.o
++
++obj-y := init.o board_setup.o irqmap.o
++
++ifdef CONFIG_MMC
++obj-y += mmc_support.o
++export-objs +=mmc_support.o
++endif
++
++
++include $(TOPDIR)/Rules.make
+diff -Nur linux-2.4.29/arch/mips/au1000/pb1200/board_setup.c linux-mips/arch/mips/au1000/pb1200/board_setup.c
+--- linux-2.4.29/arch/mips/au1000/pb1200/board_setup.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/pb1200/board_setup.c   2005-01-30 09:01:28.000000000 +0100
+@@ -0,0 +1,190 @@
++/*
++ *
++ * BRIEF MODULE DESCRIPTION
++ *    Alchemy Pb1200 board setup.
++ *
++ *  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  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/ioport.h>
++#include <linux/mm.h>
++#include <linux/console.h>
++#include <linux/mc146818rtc.h>
++#include <linux/delay.h>
++
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
++#include <linux/ide.h>
++#endif
++
++#include <asm/cpu.h>
++#include <asm/bootinfo.h>
++#include <asm/irq.h>
++#include <asm/keyboard.h>
++#include <asm/mipsregs.h>
++#include <asm/reboot.h>
++#include <asm/pgtable.h>
++#include <asm/au1000.h>
++#include <asm/au1xxx_dbdma.h>
++
++#ifdef CONFIG_MIPS_PB1200
++#include <asm/pb1200.h>
++#endif
++
++#ifdef CONFIG_MIPS_DB1200
++#include <asm/db1200.h>
++#define PB1200_ETH_INT DB1200_ETH_INT
++#define PB1200_IDE_INT DB1200_IDE_INT
++#endif
++
++extern struct rtc_ops no_rtc_ops;
++
++extern void _board_init_irq(void);
++extern void   (*board_init_irq)(void);
++
++#ifdef CONFIG_BLK_DEV_IDE_AU1XXX
++extern struct ide_ops *ide_ops;
++extern struct ide_ops au1xxx_ide_ops;
++extern u32 au1xxx_ide_virtbase;
++extern u64 au1xxx_ide_physbase;
++extern int au1xxx_ide_irq;
++
++u32 led_base_addr;
++/* Ddma */
++chan_tab_t *ide_read_ch, *ide_write_ch;
++u32 au1xxx_ide_ddma_enable = 0, switch4ddma = 1; // PIO+ddma
++
++dbdev_tab_t new_dbdev_tab_element = { DSCR_CMD0_THROTTLE, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 };
++#endif /* end CONFIG_BLK_DEV_IDE_AU1XXX */
++
++void board_reset (void)
++{
++      bcsr->resets = 0;
++}
++
++void __init board_setup(void)
++{
++      char *argptr = NULL;
++      u32 pin_func;
++      rtc_ops = &no_rtc_ops;
++
++#if 0
++      /* Enable PSC1 SYNC for AC97.  Normaly done in audio driver,
++       * but it is board specific code, so put it here.
++       */
++      pin_func = au_readl(SYS_PINFUNC);
++      au_sync();
++      pin_func |= SYS_PF_MUST_BE_SET | SYS_PF_PSC1_S1;
++      au_writel(pin_func, SYS_PINFUNC);
++
++      au_writel(0, (u32)bcsr|0x10); /* turn off pcmcia power */
++      au_sync();
++#endif
++
++#if defined( CONFIG_I2C_ALGO_AU1550 )
++      {
++      u32 freq0, clksrc;
++
++      /* Select SMBUS in CPLD */
++      bcsr->resets &= ~(BCSR_RESETS_PCS0MUX);
++
++      pin_func = au_readl(SYS_PINFUNC);
++      au_sync();
++      pin_func &= ~(3<<17 | 1<<4);
++      /* Set GPIOs correctly */
++      pin_func |= 2<<17;
++      au_writel(pin_func, SYS_PINFUNC);
++      au_sync();
++
++      /* The i2c driver depends on 50Mhz clock */
++      freq0 = au_readl(SYS_FREQCTRL0);
++      au_sync();
++      freq0 &= ~(SYS_FC_FRDIV1_MASK | SYS_FC_FS1 | SYS_FC_FE1);
++      freq0 |= (3<<SYS_FC_FRDIV1_BIT);
++      /* 396Mhz / (3+1)*2 == 49.5Mhz */
++      au_writel(freq0, SYS_FREQCTRL0);
++      au_sync();
++      freq0 |= SYS_FC_FE1;
++      au_writel(freq0, SYS_FREQCTRL0);
++      au_sync();
++
++      clksrc = au_readl(SYS_CLKSRC);
++      au_sync();
++      clksrc &= ~0x01f00000;
++      /* bit 22 is EXTCLK0 for PSC0 */
++      clksrc |= (0x3 << 22);
++      au_writel(clksrc, SYS_CLKSRC);
++      au_sync();
++      }
++#endif
++
++#ifdef CONFIG_FB_AU1200
++      argptr = prom_getcmdline();
++#ifdef CONFIG_MIPS_PB1200
++      strcat(argptr, " video=au1200fb:panel:s11");
++#endif
++#ifdef CONFIG_MIPS_DB1200
++      strcat(argptr, " video=au1200fb:panel:s7");
++#endif
++#endif
++
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
++      /*
++       * Iniz IDE parameters
++       */
++      ide_ops = &au1xxx_ide_ops;
++      au1xxx_ide_irq = PB1200_IDE_INT;
++      au1xxx_ide_physbase = AU1XXX_ATA_PHYS_ADDR;
++      au1xxx_ide_virtbase = KSEG1ADDR(AU1XXX_ATA_PHYS_ADDR);
++      /*
++       * change PIO or PIO+Ddma
++       * check the GPIO-5 pin condition. pb1200:s18_dot */
++      switch4ddma = (au_readl(SYS_PINSTATERD) & (1 << 5)) ? 1 : 0; 
++#endif
++
++      /* The Pb1200 development board uses external MUX for PSC0 to
++      support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI
++      */
++#if defined(CONFIG_AU1550_PSC_SPI) && defined(CONFIG_I2C_ALGO_AU1550)
++      #error I2C and SPI are mutually exclusive. Both are physically connected to PSC0.\
++                      Refer to Pb1200/Db1200 documentation.
++#elif defined( CONFIG_AU1550_PSC_SPI )
++      bcsr->resets |= BCSR_RESETS_PCS0MUX;
++#elif defined( CONFIG_I2C_ALGO_AU1550 )
++      bcsr->resets &= (~BCSR_RESETS_PCS0MUX);
++#endif
++      au_sync();
++
++#ifdef CONFIG_MIPS_PB1200
++      printk("AMD Alchemy Pb1200 Board\n");
++#endif
++#ifdef CONFIG_MIPS_DB1200
++      printk("AMD Alchemy Db1200 Board\n");
++#endif
++
++      /* Setup Pb1200 External Interrupt Controller */
++      {
++              extern void (*board_init_irq)(void);
++              extern void _board_init_irq(void);
++              board_init_irq = _board_init_irq;
++      }
++}
+diff -Nur linux-2.4.29/arch/mips/au1000/pb1200/init.c linux-mips/arch/mips/au1000/pb1200/init.c
+--- linux-2.4.29/arch/mips/au1000/pb1200/init.c        1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/pb1200/init.c  2005-01-30 09:01:28.000000000 +0100
+@@ -0,0 +1,72 @@
++/*
++ *
++ * BRIEF MODULE DESCRIPTION
++ *    PB1200 board setup
++ *
++ *  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  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/sched.h>
++#include <linux/bootmem.h>
++#include <asm/addrspace.h>
++#include <asm/bootinfo.h>
++#include <linux/config.h>
++#include <linux/string.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++
++int prom_argc;
++char **prom_argv, **prom_envp;
++extern void  __init prom_init_cmdline(void);
++extern char *prom_getenv(char *envname);
++
++const char *get_system_type(void)
++{
++      return "AMD Alchemy Au1200/Pb1200";
++}
++
++u32 mae_memsize = 0;
++
++int __init prom_init(int argc, char **argv, char **envp, int *prom_vec)
++{
++      unsigned char *memsize_str;
++      unsigned long memsize;
++
++      prom_argc = argc;
++      prom_argv = argv;
++      prom_envp = envp;
++
++      mips_machgroup = MACH_GROUP_ALCHEMY;
++      mips_machtype = MACH_PB1000;    /* set the platform # */   
++      prom_init_cmdline();
++
++      memsize_str = prom_getenv("memsize");
++      if (!memsize_str) {
++              memsize = 0x08000000;
++      } else {
++              memsize = simple_strtol(memsize_str, NULL, 0);
++      }
++      add_memory_region(0, memsize, BOOT_MEM_RAM);
++      return 0;
++}
++
+diff -Nur linux-2.4.29/arch/mips/au1000/pb1200/irqmap.c linux-mips/arch/mips/au1000/pb1200/irqmap.c
+--- linux-2.4.29/arch/mips/au1000/pb1200/irqmap.c      1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/pb1200/irqmap.c        2005-01-30 09:01:28.000000000 +0100
+@@ -0,0 +1,180 @@
++/*
++ * BRIEF MODULE DESCRIPTION
++ *    Au1xxx irq map table
++ *
++ *  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  SOFTWARE  IS PROVIDED         ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,         INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO        EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED         TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,        OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN        CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/irq.h>
++#include <linux/kernel_stat.h>
++#include <linux/module.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/timex.h>
++#include <linux/slab.h>
++#include <linux/random.h>
++#include <linux/delay.h>
++
++#include <asm/bitops.h>
++#include <asm/bootinfo.h>
++#include <asm/io.h>
++#include <asm/mipsregs.h>
++#include <asm/system.h>
++#include <asm/au1000.h>
++
++#ifdef CONFIG_MIPS_PB1200
++#include <asm/pb1200.h>
++#endif
++
++#ifdef CONFIG_MIPS_DB1200
++#include <asm/db1200.h>
++#define PB1200_INT_BEGIN DB1200_INT_BEGIN
++#define PB1200_INT_END DB1200_INT_END
++#endif
++
++au1xxx_irq_map_t au1xxx_irq_map[] = {
++      { AU1000_GPIO_7, INTC_INT_LOW_LEVEL, 0 }, // This is exteranl interrupt cascade
++};
++
++int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
++
++/*
++ *    Support for External interrupts on the PbAu1200 Development platform.
++ */
++static volatile int pb1200_cascade_en=0;
++
++void pb1200_cascade_handler( int irq, void *dev_id, struct pt_regs *regs)
++{
++      unsigned short bisr = bcsr->int_status;
++      int extirq_nr = 0;
++
++      /* Clear all the edge interrupts. This has no effect on level */
++      bcsr->int_status = bisr;
++      for( ; bisr; bisr &= (bisr-1) )
++      {
++              extirq_nr = (PB1200_INT_BEGIN-1) + au_ffs(bisr);
++              /* Ack and dispatch IRQ */
++              do_IRQ(extirq_nr,regs);
++      }
++}
++
++inline void pb1200_enable_irq(unsigned int irq_nr)
++{
++      bcsr->intset_mask = 1<<(irq_nr - PB1200_INT_BEGIN);
++      bcsr->intset = 1<<(irq_nr - PB1200_INT_BEGIN);
++}
++
++inline void pb1200_disable_irq(unsigned int irq_nr)
++{
++      bcsr->intclr_mask = 1<<(irq_nr - PB1200_INT_BEGIN);
++      bcsr->intclr = 1<<(irq_nr - PB1200_INT_BEGIN);
++}
++
++static unsigned int pb1200_startup_irq( unsigned int irq_nr )
++{
++      if (++pb1200_cascade_en == 1)
++      {
++              request_irq(AU1000_GPIO_7, &pb1200_cascade_handler,
++                      0, "Pb1200 Cascade", &pb1200_cascade_handler );
++#ifdef CONFIG_MIPS_PB1200
++    /* We have a problem with CPLD rev3. Enable a workaround */
++      if( ((bcsr->whoami & BCSR_WHOAMI_CPLD)>>4) <= 3)
++      {
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              printk("Pb1200 must be at CPLD rev4. Please have Pb1200\n");
++              printk("updated to latest revision. This software will not\n");
++              printk("work on anything less than CPLD rev4\n");
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              printk("\nWARNING!!!\n");
++              while(1);
++      }
++#endif
++      }
++      pb1200_enable_irq(irq_nr);
++      return 0;
++}
++
++static void pb1200_shutdown_irq( unsigned int irq_nr )
++{
++      pb1200_disable_irq(irq_nr);
++      if (--pb1200_cascade_en == 0)
++      {
++              free_irq(AU1000_GPIO_7,&pb1200_cascade_handler );
++      }
++      return;
++}
++
++static inline void pb1200_mask_and_ack_irq(unsigned int irq_nr)
++{
++      pb1200_disable_irq( irq_nr );
++}
++
++static void pb1200_end_irq(unsigned int irq_nr)
++{
++      if (!(irq_desc[irq_nr].status & (IRQ_DISABLED|IRQ_INPROGRESS))) {
++              pb1200_enable_irq(irq_nr);
++      }
++}
++
++static struct hw_interrupt_type external_irq_type =
++{
++#ifdef CONFIG_MIPS_PB1200
++      "Pb1200 Ext",
++#endif
++#ifdef CONFIG_MIPS_DB1200
++      "Db1200 Ext",
++#endif
++      pb1200_startup_irq,
++      pb1200_shutdown_irq,
++      pb1200_enable_irq,
++      pb1200_disable_irq,
++      pb1200_mask_and_ack_irq,
++      pb1200_end_irq,
++      NULL
++};
++
++void _board_init_irq(void)
++{
++      int irq_nr;
++
++      for (irq_nr = PB1200_INT_BEGIN; irq_nr <= PB1200_INT_END; irq_nr++)
++      {
++              irq_desc[irq_nr].handler = &external_irq_type;
++              pb1200_disable_irq(irq_nr);
++      }
++
++      /* GPIO_7 can not be hooked here, so it is hooked upon first
++      request of any source attached to the cascade */
++}
++
+diff -Nur linux-2.4.29/arch/mips/au1000/pb1200/mmc_support.c linux-mips/arch/mips/au1000/pb1200/mmc_support.c
+--- linux-2.4.29/arch/mips/au1000/pb1200/mmc_support.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/au1000/pb1200/mmc_support.c   2005-01-30 09:01:28.000000000 +0100
+@@ -0,0 +1,141 @@
++/*
++ * BRIEF MODULE DESCRIPTION
++ *
++ *    MMC support routines for PB1200.
++ *
++ *
++ * Copyright (c) 2003-2004 Embedded Edge, LLC.
++ * Author: Embedded Edge, LLC.
++ * Contact: dan@embeddededge.com
++ *
++ *  This program is free software; you can redistribute  it and/or modify it
++ *  under  the terms of  the GNU General  Public License as published by the
++ *  Free Software Foundation;  either version 2 of the  License, or (at your
++ *  option) any later version.
++ *
++ *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ *
++ */
++
++
++#include <linux/config.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++
++#include <asm/irq.h>
++#include <asm/au1000.h>
++#include <asm/au1100_mmc.h>
++
++#ifdef CONFIG_MIPS_PB1200
++#include <asm/pb1200.h>
++#endif
++
++#ifdef CONFIG_MIPS_DB1200
++/* NOTE: DB1200 only has SD0 pinned out and usable */
++#include <asm/db1200.h>
++#endif
++
++/* SD/MMC controller support functions */
++
++/*
++ * Detect card.
++ */
++void mmc_card_inserted(int socket, int *result)
++{
++      u16 mask;
++
++      if (socket)
++#ifdef CONFIG_MIPS_DB1200
++              mask = 0;
++#else
++              mask = BCSR_INT_SD1INSERT; 
++#endif
++      else
++              mask = BCSR_INT_SD0INSERT;
++
++      *result = ((bcsr->sig_status & mask) != 0);
++}
++
++/*
++ * Check card write protection.
++ */
++void mmc_card_writable(int socket, int *result)
++{
++      u16 mask;
++
++      if (socket)
++#ifdef CONFIG_MIPS_DB1200
++              mask = 0;
++#else
++              mask = BCSR_STATUS_SD1WP; 
++#endif
++      else
++              mask = BCSR_STATUS_SD0WP;
++
++      /* low means card writable */
++      if (!(bcsr->status & mask)) {
++              *result = 1;
++      } else {
++              *result = 0;
++      }
++}
++
++/*
++ * Apply power to card slot.
++ */
++void mmc_power_on(int socket)
++{
++      u16 mask;
++
++      if (socket)
++#ifdef CONFIG_MIPS_DB1200
++              mask = 0;
++#else
++              mask = BCSR_BOARD_SD1PWR;
++#endif
++      else
++              mask = BCSR_BOARD_SD0PWR;
++
++      bcsr->board |= mask;
++      au_sync_delay(1);
++}
++
++/*
++ * Remove power from card slot.
++ */
++void mmc_power_off(int socket)
++{
++      u16 mask;
++
++      if (socket)
++#ifdef CONFIG_MIPS_DB1200
++              mask = 0;
++#else
++              mask = BCSR_BOARD_SD1PWR;
++#endif
++      else
++              mask = BCSR_BOARD_SD0PWR;
++
++      bcsr->board &= ~mask;
++      au_sync_delay(1);
++}
++
++EXPORT_SYMBOL(mmc_card_inserted);
++EXPORT_SYMBOL(mmc_card_writable);
++EXPORT_SYMBOL(mmc_power_on);
++EXPORT_SYMBOL(mmc_power_off);
++
+diff -Nur linux-2.4.29/arch/mips/au1000/pb1550/board_setup.c linux-mips/arch/mips/au1000/pb1550/board_setup.c
+--- linux-2.4.29/arch/mips/au1000/pb1550/board_setup.c 2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/pb1550/board_setup.c   2005-01-31 12:59:30.000000000 +0100
+@@ -48,6 +48,16 @@
+ extern struct rtc_ops no_rtc_ops;
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
++extern struct ide_ops *ide_ops;
++extern struct ide_ops au1xxx_ide_ops;
++extern u32 au1xxx_ide_virtbase;
++extern u64 au1xxx_ide_physbase;
++extern unsigned int au1xxx_ide_irq;
++
++u32 au1xxx_ide_ddma_enable = 0, switch4ddma = 1; // PIO+ddma
++#endif /* end CONFIG_BLK_DEV_IDE_AU1XXX */
++
+ void board_reset (void)
+ {
+     /* Hit BCSR.SYSTEM_CONTROL[SW_RST] */
+@@ -78,5 +88,36 @@
+       au_writel(0, (u32)bcsr|0x10); /* turn off pcmcia power */
+       au_sync();
++#if defined(CONFIG_AU1XXX_SMC91111)
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
++#error "Resource conflict occured. Disable either Ethernet or IDE daughter card."
++#else
++#define CPLD_CONTROL (0xAF00000C)
++      {
++      /* set up the Static Bus timing */
++      /* only 396Mhz */
++      /* reset the DC */
++      au_writew(au_readw(CPLD_CONTROL) | 0x0f, CPLD_CONTROL);
++      au_writel(0x00010003, MEM_STCFG0);
++      au_writel(0x000c00c0, MEM_STCFG2);
++      au_writel(0x85E1900D, MEM_STTIME2);
++      }
++#endif
++#endif /* end CONFIG_SMC91111 */
++
++#if defined(CONFIG_BLK_DEV_IDE_AU1XXX)
++      /*
++       * Iniz IDE parameters
++       */
++      ide_ops = &au1xxx_ide_ops;
++      au1xxx_ide_irq = DAUGHTER_CARD_IRQ;;
++      au1xxx_ide_physbase = AU1XXX_ATA_PHYS_ADDR;
++      au1xxx_ide_virtbase = KSEG1ADDR(AU1XXX_ATA_PHYS_ADDR);
++      /*
++       * change PIO or PIO+Ddma
++       * check the GPIO-6 pin condition. pb1550:s15_dot
++       */
++      switch4ddma = (au_readl(SYS_PINSTATERD) & (1 << 6)) ? 1 : 0;
++#endif
+       printk("AMD Alchemy Pb1550 Board\n");
+ }
+diff -Nur linux-2.4.29/arch/mips/au1000/pb1550/irqmap.c linux-mips/arch/mips/au1000/pb1550/irqmap.c
+--- linux-2.4.29/arch/mips/au1000/pb1550/irqmap.c      2005-01-19 15:09:26.000000000 +0100
++++ linux-mips/arch/mips/au1000/pb1550/irqmap.c        2005-01-31 12:59:30.000000000 +0100
+@@ -50,6 +50,9 @@
+ au1xxx_irq_map_t au1xxx_irq_map[] = {
+       { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 },
+       { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 },
++#ifdef CONFIG_AU1XXX_SMC91111
++      { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 },
++#endif
+ };
+ int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
+diff -Nur linux-2.4.29/arch/mips/config-shared.in linux-mips/arch/mips/config-shared.in
+--- linux-2.4.29/arch/mips/config-shared.in    2005-01-19 15:09:27.000000000 +0100
++++ linux-mips/arch/mips/config-shared.in      2005-01-31 12:59:28.000000000 +0100
+@@ -21,16 +21,19 @@
+ comment 'Machine selection'
+ dep_bool 'Support for Acer PICA 1 chipset (EXPERIMENTAL)' CONFIG_ACER_PICA_61 $CONFIG_EXPERIMENTAL
+ dep_bool 'Support for Alchemy Bosporus board' CONFIG_MIPS_BOSPORUS $CONFIG_MIPS32
++dep_bool 'Support for FIC Multimedia Player board' CONFIG_MIPS_FICMMP $CONFIG_MIPS32
+ dep_bool 'Support for Alchemy Mirage board' CONFIG_MIPS_MIRAGE $CONFIG_MIPS32
+ dep_bool 'Support for Alchemy Db1000 board' CONFIG_MIPS_DB1000 $CONFIG_MIPS32
+ dep_bool 'Support for Alchemy Db1100 board' CONFIG_MIPS_DB1100 $CONFIG_MIPS32
+ dep_bool 'Support for Alchemy Db1500 board' CONFIG_MIPS_DB1500 $CONFIG_MIPS32
+ dep_bool 'Support for Alchemy Db1550 board' CONFIG_MIPS_DB1550 $CONFIG_MIPS32
++dep_bool 'Support for Alchemy Db1200 board' CONFIG_MIPS_DB1200 $CONFIG_MIPS32
+ dep_bool 'Support for Alchemy PB1000 board' CONFIG_MIPS_PB1000 $CONFIG_MIPS32
+ dep_bool 'Support for Alchemy PB1100 board' CONFIG_MIPS_PB1100 $CONFIG_MIPS32
+ dep_bool 'Support for Alchemy PB1500 board' CONFIG_MIPS_PB1500 $CONFIG_MIPS32
+-dep_bool 'Support for Alchemy Hydrogen3 board' CONFIG_MIPS_HYDROGEN3 $CONFIG_MIPS32
+ dep_bool 'Support for Alchemy PB1550 board' CONFIG_MIPS_PB1550 $CONFIG_MIPS32
++dep_bool 'Support for Alchemy PB1200 board' CONFIG_MIPS_PB1200 $CONFIG_MIPS32
++dep_bool 'Support for Alchemy Hydrogen3 board' CONFIG_MIPS_HYDROGEN3 $CONFIG_MIPS32
+ dep_bool 'Support for MyCable XXS1500 board' CONFIG_MIPS_XXS1500 $CONFIG_MIPS32
+ dep_bool 'Support for 4G Systems MTX-1 board' CONFIG_MIPS_MTX1 $CONFIG_MIPS32
+ dep_bool 'Support for Cogent CSB250 board' CONFIG_COGENT_CSB250 $CONFIG_MIPS32
+@@ -249,6 +252,12 @@
+    define_bool CONFIG_PC_KEYB y
+    define_bool CONFIG_NONCOHERENT_IO y
+ fi
++if [ "$CONFIG_MIPS_FICMMP" = "y" ]; then
++   define_bool CONFIG_SOC_AU1X00 y
++   define_bool CONFIG_SOC_AU1200 y
++   define_bool CONFIG_NONCOHERENT_IO y
++   define_bool CONFIG_PC_KEYB y
++fi
+ if [ "$CONFIG_MIPS_BOSPORUS" = "y" ]; then
+    define_bool CONFIG_SOC_AU1X00 y
+    define_bool CONFIG_SOC_AU1500 y
+@@ -263,6 +272,12 @@
+    define_bool CONFIG_SWAP_IO_SPACE_W y
+    define_bool CONFIG_SWAP_IO_SPACE_L y
+ fi
++if [ "$CONFIG_MIPS_PB1500" = "y" ]; then
++   define_bool CONFIG_SOC_AU1X00 y
++   define_bool CONFIG_SOC_AU1500 y
++   define_bool CONFIG_NONCOHERENT_IO y
++   define_bool CONFIG_PC_KEYB y
++fi
+ if [ "$CONFIG_MIPS_PB1100" = "y" ]; then
+    define_bool CONFIG_SOC_AU1X00 y
+    define_bool CONFIG_SOC_AU1100 y
+@@ -271,9 +286,15 @@
+    define_bool CONFIG_SWAP_IO_SPACE_W y
+    define_bool CONFIG_SWAP_IO_SPACE_L y
+ fi
+-if [ "$CONFIG_MIPS_PB1500" = "y" ]; then
++if [ "$CONFIG_MIPS_PB1550" = "y" ]; then
+    define_bool CONFIG_SOC_AU1X00 y
+-   define_bool CONFIG_SOC_AU1500 y
++   define_bool CONFIG_SOC_AU1550 y
++   define_bool CONFIG_NONCOHERENT_IO n
++   define_bool CONFIG_PC_KEYB y
++fi
++if [ "$CONFIG_MIPS_PB1200" = "y" ]; then
++   define_bool CONFIG_SOC_AU1X00 y
++   define_bool CONFIG_SOC_AU1200 y
+    define_bool CONFIG_NONCOHERENT_IO y
+    define_bool CONFIG_PC_KEYB y
+ fi
+@@ -290,18 +311,24 @@
+    define_bool CONFIG_NONCOHERENT_IO y
+    define_bool CONFIG_PC_KEYB y
+ fi
++if [ "$CONFIG_MIPS_DB1100" = "y" ]; then
++   define_bool CONFIG_SOC_AU1X00 y
++   define_bool CONFIG_SOC_AU1100 y
++   define_bool CONFIG_NONCOHERENT_IO y
++   define_bool CONFIG_PC_KEYB y
++   define_bool CONFIG_SWAP_IO_SPACE y
++fi
+ if [ "$CONFIG_MIPS_DB1550" = "y" ]; then
+    define_bool CONFIG_SOC_AU1X00 y
+    define_bool CONFIG_SOC_AU1550 y
+    define_bool CONFIG_NONCOHERENT_IO y
+    define_bool CONFIG_PC_KEYB y
+ fi
+-if [ "$CONFIG_MIPS_DB1100" = "y" ]; then
++if [ "$CONFIG_MIPS_DB1200" = "y" ]; then
+    define_bool CONFIG_SOC_AU1X00 y
+-   define_bool CONFIG_SOC_AU1100 y
++   define_bool CONFIG_SOC_AU1200 y
+    define_bool CONFIG_NONCOHERENT_IO y
+    define_bool CONFIG_PC_KEYB y
+-   define_bool CONFIG_SWAP_IO_SPACE y
+ fi
+ if [ "$CONFIG_MIPS_HYDROGEN3" = "y" ]; then
+    define_bool CONFIG_SOC_AU1X00 y
+@@ -327,12 +354,6 @@
+    define_bool CONFIG_NONCOHERENT_IO y
+    define_bool CONFIG_PC_KEYB y
+ fi
+-if [ "$CONFIG_MIPS_PB1550" = "y" ]; then
+-   define_bool CONFIG_SOC_AU1X00 y
+-   define_bool CONFIG_SOC_AU1550 y
+-   define_bool CONFIG_NONCOHERENT_IO n
+-   define_bool CONFIG_PC_KEYB y
+-fi
+ if [ "$CONFIG_MIPS_COBALT" = "y" ]; then
+    define_bool CONFIG_BOOT_ELF32 y
+    define_bool CONFIG_COBALT_LCD y
+@@ -729,6 +750,13 @@
+      "$CONFIG_MIPS_PB1000" = "y" -o \
+      "$CONFIG_MIPS_PB1100" = "y" -o \
+      "$CONFIG_MIPS_PB1500" = "y" -o \
++     "$CONFIG_MIPS_PB1550" = "y" -o \
++     "$CONFIG_MIPS_PB1200" = "y" -o \
++     "$CONFIG_MIPS_DB1000" = "y" -o \
++     "$CONFIG_MIPS_DB1100" = "y" -o \
++     "$CONFIG_MIPS_DB1500" = "y" -o \
++     "$CONFIG_MIPS_DB1550" = "y" -o \
++     "$CONFIG_MIPS_DB1200" = "y" -o \
+      "$CONFIG_NEC_OSPREY" = "y" -o \
+      "$CONFIG_NEC_EAGLE" = "y" -o \
+      "$CONFIG_NINO" = "y" -o \
+diff -Nur linux-2.4.29/arch/mips/defconfig linux-mips/arch/mips/defconfig
+--- linux-2.4.29/arch/mips/defconfig   2005-01-19 15:09:27.000000000 +0100
++++ linux-mips/arch/mips/defconfig     2005-01-09 20:33:59.000000000 +0100
+@@ -235,11 +235,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -319,6 +314,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-atlas linux-mips/arch/mips/defconfig-atlas
+--- linux-2.4.29/arch/mips/defconfig-atlas     2005-01-19 15:09:27.000000000 +0100
++++ linux-mips/arch/mips/defconfig-atlas       2005-01-09 20:33:59.000000000 +0100
+@@ -235,11 +235,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -317,6 +312,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-bosporus linux-mips/arch/mips/defconfig-bosporus
+--- linux-2.4.29/arch/mips/defconfig-bosporus  2005-01-19 15:09:27.000000000 +0100
++++ linux-mips/arch/mips/defconfig-bosporus    2005-01-31 12:59:28.000000000 +0100
+@@ -373,11 +373,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -457,6 +452,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+@@ -899,7 +895,7 @@
+ # CONFIG_USB_UHCI is not set
+ # CONFIG_USB_UHCI_ALT is not set
+ CONFIG_USB_OHCI=y
+-
++CONFIG_USB_NON_PCI_OHCI=y
+ #
+ # USB Device Class drivers
+ #
+diff -Nur linux-2.4.29/arch/mips/defconfig-capcella linux-mips/arch/mips/defconfig-capcella
+--- linux-2.4.29/arch/mips/defconfig-capcella  2005-01-19 15:09:27.000000000 +0100
++++ linux-mips/arch/mips/defconfig-capcella    2005-01-09 20:33:59.000000000 +0100
+@@ -228,11 +228,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-cobalt linux-mips/arch/mips/defconfig-cobalt
+--- linux-2.4.29/arch/mips/defconfig-cobalt    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-cobalt      2005-01-09 20:33:59.000000000 +0100
+@@ -222,11 +222,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-csb250 linux-mips/arch/mips/defconfig-csb250
+--- linux-2.4.29/arch/mips/defconfig-csb250    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-csb250      2005-01-09 20:33:59.000000000 +0100
+@@ -268,11 +268,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-db1000 linux-mips/arch/mips/defconfig-db1000
+--- linux-2.4.29/arch/mips/defconfig-db1000    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-db1000      2005-02-12 04:05:27.000000000 +0100
+@@ -22,16 +22,19 @@
+ #
+ # CONFIG_ACER_PICA_61 is not set
+ # CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
+ # CONFIG_MIPS_MIRAGE is not set
+ CONFIG_MIPS_DB1000=y
+ # CONFIG_MIPS_DB1100 is not set
+ # CONFIG_MIPS_DB1500 is not set
+ # CONFIG_MIPS_DB1550 is not set
++# CONFIG_MIPS_DB1200 is not set
+ # CONFIG_MIPS_PB1000 is not set
+ # CONFIG_MIPS_PB1100 is not set
+ # CONFIG_MIPS_PB1500 is not set
+-# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_XXS1500 is not set
+ # CONFIG_MIPS_MTX1 is not set
+ # CONFIG_COGENT_CSB250 is not set
+@@ -342,11 +345,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-db1100 linux-mips/arch/mips/defconfig-db1100
+--- linux-2.4.29/arch/mips/defconfig-db1100    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-db1100      2005-02-12 04:05:27.000000000 +0100
+@@ -22,16 +22,19 @@
+ #
+ # CONFIG_ACER_PICA_61 is not set
+ # CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
+ # CONFIG_MIPS_MIRAGE is not set
+ # CONFIG_MIPS_DB1000 is not set
+ CONFIG_MIPS_DB1100=y
+ # CONFIG_MIPS_DB1500 is not set
+ # CONFIG_MIPS_DB1550 is not set
++# CONFIG_MIPS_DB1200 is not set
+ # CONFIG_MIPS_PB1000 is not set
+ # CONFIG_MIPS_PB1100 is not set
+ # CONFIG_MIPS_PB1500 is not set
+-# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_XXS1500 is not set
+ # CONFIG_MIPS_MTX1 is not set
+ # CONFIG_COGENT_CSB250 is not set
+@@ -342,11 +345,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-db1200 linux-mips/arch/mips/defconfig-db1200
+--- linux-2.4.29/arch/mips/defconfig-db1200    1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/defconfig-db1200      2005-01-30 09:01:26.000000000 +0100
+@@ -0,0 +1,1051 @@
++#
++# Automatically generated make config: don't edit
++#
++CONFIG_MIPS=y
++CONFIG_MIPS32=y
++# CONFIG_MIPS64 is not set
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++# CONFIG_MODVERSIONS is not set
++CONFIG_KMOD=y
++
++#
++# Machine selection
++#
++# CONFIG_ACER_PICA_61 is not set
++# CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
++# CONFIG_MIPS_MIRAGE is not set
++# CONFIG_MIPS_DB1000 is not set
++# CONFIG_MIPS_DB1100 is not set
++# CONFIG_MIPS_DB1500 is not set
++# CONFIG_MIPS_DB1550 is not set
++CONFIG_MIPS_DB1200=y
++# CONFIG_MIPS_PB1000 is not set
++# CONFIG_MIPS_PB1100 is not set
++# CONFIG_MIPS_PB1500 is not set
++# CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
++# CONFIG_MIPS_XXS1500 is not set
++# CONFIG_MIPS_MTX1 is not set
++# CONFIG_COGENT_CSB250 is not set
++# CONFIG_BAGET_MIPS is not set
++# CONFIG_CASIO_E55 is not set
++# CONFIG_MIPS_COBALT is not set
++# CONFIG_DECSTATION is not set
++# CONFIG_MIPS_EV64120 is not set
++# CONFIG_MIPS_EV96100 is not set
++# CONFIG_MIPS_IVR is not set
++# CONFIG_HP_LASERJET is not set
++# CONFIG_IBM_WORKPAD is not set
++# CONFIG_LASAT is not set
++# CONFIG_MIPS_ITE8172 is not set
++# CONFIG_MIPS_ATLAS is not set
++# CONFIG_MIPS_MAGNUM_4000 is not set
++# CONFIG_MIPS_MALTA is not set
++# CONFIG_MIPS_SEAD is not set
++# CONFIG_MOMENCO_OCELOT is not set
++# CONFIG_MOMENCO_OCELOT_G is not set
++# CONFIG_MOMENCO_OCELOT_C is not set
++# CONFIG_MOMENCO_JAGUAR_ATX is not set
++# CONFIG_PMC_BIG_SUR is not set
++# CONFIG_PMC_STRETCH is not set
++# CONFIG_PMC_YOSEMITE is not set
++# CONFIG_DDB5074 is not set
++# CONFIG_DDB5476 is not set
++# CONFIG_DDB5477 is not set
++# CONFIG_NEC_OSPREY is not set
++# CONFIG_NEC_EAGLE is not set
++# CONFIG_OLIVETTI_M700 is not set
++# CONFIG_NINO is not set
++# CONFIG_SGI_IP22 is not set
++# CONFIG_SGI_IP27 is not set
++# CONFIG_SIBYTE_SB1xxx_SOC is not set
++# CONFIG_SNI_RM200_PCI is not set
++# CONFIG_TANBAC_TB0226 is not set
++# CONFIG_TANBAC_TB0229 is not set
++# CONFIG_TOSHIBA_JMR3927 is not set
++# CONFIG_TOSHIBA_RBTX4927 is not set
++# CONFIG_VICTOR_MPC30X is not set
++# CONFIG_ZAO_CAPCELLA is not set
++# CONFIG_HIGHMEM is not set
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
++CONFIG_SOC_AU1X00=y
++CONFIG_SOC_AU1200=y
++CONFIG_NONCOHERENT_IO=y
++CONFIG_PC_KEYB=y
++# CONFIG_MIPS_AU1000 is not set
++
++#
++# CPU selection
++#
++CONFIG_CPU_MIPS32=y
++# CONFIG_CPU_MIPS64 is not set
++# CONFIG_CPU_R3000 is not set
++# CONFIG_CPU_TX39XX is not set
++# CONFIG_CPU_VR41XX is not set
++# CONFIG_CPU_R4300 is not set
++# CONFIG_CPU_R4X00 is not set
++# CONFIG_CPU_TX49XX is not set
++# CONFIG_CPU_R5000 is not set
++# CONFIG_CPU_R5432 is not set
++# CONFIG_CPU_R6000 is not set
++# CONFIG_CPU_NEVADA is not set
++# CONFIG_CPU_R8000 is not set
++# CONFIG_CPU_R10000 is not set
++# CONFIG_CPU_RM7000 is not set
++# CONFIG_CPU_RM9000 is not set
++# CONFIG_CPU_SB1 is not set
++CONFIG_PAGE_SIZE_4KB=y
++# CONFIG_PAGE_SIZE_16KB is not set
++# CONFIG_PAGE_SIZE_64KB is not set
++CONFIG_CPU_HAS_PREFETCH=y
++# CONFIG_VTAG_ICACHE is not set
++CONFIG_64BIT_PHYS_ADDR=y
++# CONFIG_CPU_ADVANCED is not set
++CONFIG_CPU_HAS_LLSC=y
++# CONFIG_CPU_HAS_LLDSCD is not set
++# CONFIG_CPU_HAS_WB is not set
++CONFIG_CPU_HAS_SYNC=y
++
++#
++# General setup
++#
++CONFIG_CPU_LITTLE_ENDIAN=y
++# CONFIG_BUILD_ELF64 is not set
++CONFIG_NET=y
++CONFIG_PCI=y
++CONFIG_PCI_NEW=y
++CONFIG_PCI_AUTO=y
++# CONFIG_PCI_NAMES is not set
++# CONFIG_ISA is not set
++# CONFIG_TC is not set
++# CONFIG_MCA is not set
++# CONFIG_SBUS is not set
++CONFIG_HOTPLUG=y
++
++#
++# PCMCIA/CardBus support
++#
++CONFIG_PCMCIA=m
++# CONFIG_CARDBUS is not set
++# CONFIG_TCIC is not set
++# CONFIG_I82092 is not set
++# CONFIG_I82365 is not set
++CONFIG_PCMCIA_AU1X00=m
++
++#
++# PCI Hotplug Support
++#
++# CONFIG_HOTPLUG_PCI is not set
++# CONFIG_HOTPLUG_PCI_COMPAQ is not set
++# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
++# CONFIG_HOTPLUG_PCI_SHPC is not set
++# CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE is not set
++# CONFIG_HOTPLUG_PCI_PCIE is not set
++# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set
++CONFIG_SYSVIPC=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++CONFIG_KCORE_ELF=y
++# CONFIG_KCORE_AOUT is not set
++# CONFIG_BINFMT_AOUT is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_MIPS32_COMPAT is not set
++# CONFIG_MIPS32_O32 is not set
++# CONFIG_MIPS32_N32 is not set
++# CONFIG_BINFMT_ELF32 is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_OOM_KILLER is not set
++CONFIG_CMDLINE_BOOL=y
++CONFIG_CMDLINE="mem=96M"
++# CONFIG_PM is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++# CONFIG_MTD is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play configuration
++#
++# CONFIG_PNP is not set
++# CONFIG_ISAPNP is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_DEV_XD is not set
++# CONFIG_PARIDE is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_CISS_SCSI_TAPE is not set
++# CONFIG_CISS_MONITOR_THREAD is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_UMEM is not set
++# CONFIG_BLK_DEV_SX8 is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_RAM is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_BLK_STATS is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++# CONFIG_BLK_DEV_MD is not set
++# CONFIG_MD_LINEAR is not set
++# CONFIG_MD_RAID0 is not set
++# CONFIG_MD_RAID1 is not set
++# CONFIG_MD_RAID5 is not set
++# CONFIG_MD_MULTIPATH is not set
++# CONFIG_BLK_DEV_LVM is not set
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++# CONFIG_NETLINK_DEV is not set
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++CONFIG_FILTER=y
++CONFIG_UNIX=y
++CONFIG_INET=y
++CONFIG_IP_MULTICAST=y
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++CONFIG_IP_PNP_BOOTP=y
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_IP_MROUTE is not set
++# CONFIG_ARPD is not set
++# CONFIG_INET_ECN is not set
++# CONFIG_SYN_COOKIES is not set
++
++#
++#   IP: Netfilter Configuration
++#
++# CONFIG_IP_NF_CONNTRACK is not set
++# CONFIG_IP_NF_QUEUE is not set
++# CONFIG_IP_NF_IPTABLES is not set
++# CONFIG_IP_NF_ARPTABLES is not set
++# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
++# CONFIG_IP_NF_COMPAT_IPFWADM is not set
++
++#
++#   IP: Virtual Server Configuration
++#
++# CONFIG_IP_VS is not set
++# CONFIG_IPV6 is not set
++# CONFIG_KHTTPD is not set
++
++#
++#    SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++# CONFIG_ATM is not set
++# CONFIG_VLAN_8021Q is not set
++
++#
++#  
++#
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_DECNET is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_LLC is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_FASTROUTE is not set
++# CONFIG_NET_HW_FLOWCONTROL is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++
++#
++# Telephony Support
++#
++# CONFIG_PHONE is not set
++# CONFIG_PHONE_IXJ is not set
++# CONFIG_PHONE_IXJ_PCMCIA is not set
++
++#
++# ATA/IDE/MFM/RLL support
++#
++CONFIG_IDE=y
++
++#
++# IDE, ATA and ATAPI Block devices
++#
++CONFIG_BLK_DEV_IDE=y
++
++#
++# Please see Documentation/ide.txt for help/info on IDE drives
++#
++# CONFIG_BLK_DEV_HD_IDE is not set
++# CONFIG_BLK_DEV_HD is not set
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_BLK_DEV_IDEDISK=y
++CONFIG_IDEDISK_MULTI_MODE=y
++CONFIG_IDEDISK_STROKE=y
++CONFIG_BLK_DEV_IDECS=m
++# CONFIG_BLK_DEV_DELKIN is not set
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++# CONFIG_IDE_TASK_IOCTL is not set
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_BLK_DEV_CMD640 is not set
++# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
++# CONFIG_BLK_DEV_ISAPNP is not set
++# CONFIG_BLK_DEV_IDEPCI is not set
++# CONFIG_IDE_CHIPSETS is not set
++# CONFIG_IDEDMA_AUTO is not set
++# CONFIG_DMA_NONPCI is not set
++# CONFIG_BLK_DEV_ATARAID is not set
++# CONFIG_BLK_DEV_ATARAID_PDC is not set
++# CONFIG_BLK_DEV_ATARAID_HPT is not set
++# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
++# CONFIG_BLK_DEV_ATARAID_SII is not set
++
++#
++# SCSI support
++#
++CONFIG_SCSI=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++CONFIG_SD_EXTRA_DEVS=40
++CONFIG_CHR_DEV_ST=y
++# CONFIG_CHR_DEV_OSST is not set
++CONFIG_BLK_DEV_SR=y
++# CONFIG_BLK_DEV_SR_VENDOR is not set
++CONFIG_SR_EXTRA_DEVS=2
++# CONFIG_CHR_DEV_SG is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_DEBUG_QUEUES is not set
++# CONFIG_SCSI_MULTI_LUN is not set
++CONFIG_SCSI_CONSTANTS=y
++# CONFIG_SCSI_LOGGING is not set
++
++#
++# SCSI low-level drivers
++#
++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
++# CONFIG_SCSI_7000FASST is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AHA152X is not set
++# CONFIG_SCSI_AHA1542 is not set
++# CONFIG_SCSI_AHA1740 is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC79XX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_DPT_I2O is not set
++# CONFIG_SCSI_ADVANSYS is not set
++# CONFIG_SCSI_IN2000 is not set
++# CONFIG_SCSI_AM53C974 is not set
++# CONFIG_SCSI_MEGARAID is not set
++# CONFIG_SCSI_MEGARAID2 is not set
++# CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
++# CONFIG_SCSI_SATA_SVW is not set
++# CONFIG_SCSI_ATA_PIIX is not set
++# CONFIG_SCSI_SATA_NV is not set
++# CONFIG_SCSI_SATA_PROMISE is not set
++# CONFIG_SCSI_SATA_SX4 is not set
++# CONFIG_SCSI_SATA_SIL is not set
++# CONFIG_SCSI_SATA_SIS is not set
++# CONFIG_SCSI_SATA_ULI is not set
++# CONFIG_SCSI_SATA_VIA is not set
++# CONFIG_SCSI_SATA_VITESSE is not set
++# CONFIG_SCSI_BUSLOGIC is not set
++# CONFIG_SCSI_CPQFCTS is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_DTC3280 is not set
++# CONFIG_SCSI_EATA is not set
++# CONFIG_SCSI_EATA_DMA is not set
++# CONFIG_SCSI_EATA_PIO is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_GDTH is not set
++# CONFIG_SCSI_GENERIC_NCR5380 is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++# CONFIG_SCSI_NCR53C406A is not set
++# CONFIG_SCSI_NCR53C7xx is not set
++# CONFIG_SCSI_SYM53C8XX_2 is not set
++# CONFIG_SCSI_NCR53C8XX is not set
++# CONFIG_SCSI_SYM53C8XX is not set
++# CONFIG_SCSI_PAS16 is not set
++# CONFIG_SCSI_PCI2000 is not set
++# CONFIG_SCSI_PCI2220I is not set
++# CONFIG_SCSI_PSI240I is not set
++# CONFIG_SCSI_QLOGIC_FAS is not set
++# CONFIG_SCSI_QLOGIC_ISP is not set
++# CONFIG_SCSI_QLOGIC_FC is not set
++# CONFIG_SCSI_QLOGIC_1280 is not set
++# CONFIG_SCSI_SIM710 is not set
++# CONFIG_SCSI_SYM53C416 is not set
++# CONFIG_SCSI_DC390T is not set
++# CONFIG_SCSI_T128 is not set
++# CONFIG_SCSI_U14_34F is not set
++# CONFIG_SCSI_NSP32 is not set
++# CONFIG_SCSI_DEBUG is not set
++
++#
++# PCMCIA SCSI adapter support
++#
++# CONFIG_SCSI_PCMCIA is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++# CONFIG_FUSION_BOOT is not set
++# CONFIG_FUSION_ISENSE is not set
++# CONFIG_FUSION_CTL is not set
++# CONFIG_FUSION_LAN is not set
++
++#
++# IEEE 1394 (FireWire) support (EXPERIMENTAL)
++#
++# CONFIG_IEEE1394 is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++# CONFIG_I2O_PCI is not set
++# CONFIG_I2O_BLOCK is not set
++# CONFIG_I2O_LAN is not set
++# CONFIG_I2O_SCSI is not set
++# CONFIG_I2O_PROC is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_ETHERTAP is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++# CONFIG_MIPS_AU1X00_ENET is not set
++# CONFIG_SUNLANCE is not set
++# CONFIG_HAPPYMEAL is not set
++# CONFIG_SUNBMAC is not set
++# CONFIG_SUNQE is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_LANCE is not set
++# CONFIG_NET_VENDOR_SMC is not set
++# CONFIG_NET_VENDOR_RACAL is not set
++# CONFIG_HP100 is not set
++# CONFIG_NET_ISA is not set
++# CONFIG_NET_PCI is not set
++# CONFIG_NET_POCKET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_E1000 is not set
++# CONFIG_MYRI_SBUS is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_R8169 is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_TIGON3 is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PLIP is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++# CONFIG_NET_RADIO is not set
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++# CONFIG_NET_FC is not set
++# CONFIG_RCPCI is not set
++# CONFIG_SHAPER is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++
++#
++# PCMCIA network device support
++#
++# CONFIG_NET_PCMCIA is not set
++
++#
++# Amateur Radio support
++#
++# CONFIG_HAMRADIO is not set
++
++#
++# IrDA (infrared) support
++#
++# CONFIG_IRDA is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input core support
++#
++CONFIG_INPUT=y
++CONFIG_INPUT_KEYBDEV=y
++CONFIG_INPUT_MOUSEDEV=y
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_UINPUT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++# CONFIG_VT_CONSOLE is not set
++# CONFIG_SERIAL is not set
++# CONFIG_SERIAL_EXTENDED is not set
++CONFIG_SERIAL_NONSTANDARD=y
++# CONFIG_COMPUTONE is not set
++# CONFIG_ROCKETPORT is not set
++# CONFIG_CYCLADES is not set
++# CONFIG_DIGIEPCA is not set
++# CONFIG_DIGI is not set
++# CONFIG_ESPSERIAL is not set
++# CONFIG_MOXA_INTELLIO is not set
++# CONFIG_MOXA_SMARTIO is not set
++# CONFIG_ISI is not set
++# CONFIG_SYNCLINK is not set
++# CONFIG_SYNCLINKMP is not set
++# CONFIG_N_HDLC is not set
++# CONFIG_RISCOM8 is not set
++# CONFIG_SPECIALIX is not set
++# CONFIG_SX is not set
++# CONFIG_RIO is not set
++# CONFIG_STALDRV is not set
++# CONFIG_SERIAL_TX3912 is not set
++# CONFIG_SERIAL_TX3912_CONSOLE is not set
++# CONFIG_SERIAL_TXX9 is not set
++# CONFIG_SERIAL_TXX9_CONSOLE is not set
++CONFIG_AU1X00_UART=y
++CONFIG_AU1X00_SERIAL_CONSOLE=y
++# CONFIG_AU1X00_USB_TTY is not set
++# CONFIG_AU1X00_USB_RAW is not set
++# CONFIG_TXX927_SERIAL is not set
++# CONFIG_MIPS_HYDROGEN3_BUTTONS is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_UNIX98_PTY_COUNT=256
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# Mice
++#
++# CONFIG_BUSMOUSE is not set
++# CONFIG_MOUSE is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_GAMEPORT is not set
++# CONFIG_INPUT_NS558 is not set
++# CONFIG_INPUT_LIGHTNING is not set
++# CONFIG_INPUT_PCIGAME is not set
++# CONFIG_INPUT_CS461X is not set
++# CONFIG_INPUT_EMU10K1 is not set
++# CONFIG_INPUT_SERIO is not set
++# CONFIG_INPUT_SERPORT is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_ANALOG is not set
++# CONFIG_INPUT_A3D is not set
++# CONFIG_INPUT_ADI is not set
++# CONFIG_INPUT_COBRA is not set
++# CONFIG_INPUT_GF2K is not set
++# CONFIG_INPUT_GRIP is not set
++# CONFIG_INPUT_INTERACT is not set
++# CONFIG_INPUT_TMDC is not set
++# CONFIG_INPUT_SIDEWINDER is not set
++# CONFIG_INPUT_IFORCE_USB is not set
++# CONFIG_INPUT_IFORCE_232 is not set
++# CONFIG_INPUT_WARRIOR is not set
++# CONFIG_INPUT_MAGELLAN is not set
++# CONFIG_INPUT_SPACEORB is not set
++# CONFIG_INPUT_SPACEBALL is not set
++# CONFIG_INPUT_STINGER is not set
++# CONFIG_INPUT_DB9 is not set
++# CONFIG_INPUT_GAMECON is not set
++# CONFIG_INPUT_TURBOGRAFX is not set
++# CONFIG_QIC02_TAPE is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_IPMI_PANIC_EVENT is not set
++# CONFIG_IPMI_DEVICE_INTERFACE is not set
++# CONFIG_IPMI_KCS is not set
++# CONFIG_IPMI_WATCHDOG is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_SCx200 is not set
++# CONFIG_SCx200_GPIO is not set
++# CONFIG_AMD_PM768 is not set
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_FTAPE is not set
++# CONFIG_AGP is not set
++
++#
++# Direct Rendering Manager (XFree86 DRI support)
++#
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++# CONFIG_PCMCIA_SERIAL_CS is not set
++# CONFIG_SYNCLINK_CS is not set
++# CONFIG_AU1X00_GPIO is not set
++# CONFIG_TS_AU1X00_ADS7846 is not set
++
++#
++# File systems
++#
++# CONFIG_QUOTA is not set
++# CONFIG_QFMT_V2 is not set
++CONFIG_AUTOFS_FS=y
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_ADFS_FS is not set
++# CONFIG_ADFS_FS_RW is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BEFS_DEBUG is not set
++# CONFIG_BFS_FS is not set
++CONFIG_EXT3_FS=y
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++# CONFIG_UMSDOS_FS is not set
++CONFIG_VFAT_FS=y
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++# CONFIG_JFFS2_FS is not set
++# CONFIG_CRAMFS is not set
++CONFIG_TMPFS=y
++CONFIG_RAMFS=y
++# CONFIG_ISO9660_FS is not set
++# CONFIG_JOLIET is not set
++# CONFIG_ZISOFS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_JFS_DEBUG is not set
++# CONFIG_JFS_STATISTICS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_NTFS_FS is not set
++# CONFIG_NTFS_RW is not set
++# CONFIG_HPFS_FS is not set
++CONFIG_PROC_FS=y
++# CONFIG_DEVFS_FS is not set
++# CONFIG_DEVFS_MOUNT is not set
++# CONFIG_DEVFS_DEBUG is not set
++CONFIG_DEVPTS_FS=y
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_QNX4FS_RW is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_EXT2_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_UDF_RW is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_UFS_FS_WRITE is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_XFS_QUOTA is not set
++# CONFIG_XFS_RT is not set
++# CONFIG_XFS_TRACE is not set
++# CONFIG_XFS_DEBUG is not set
++
++#
++# Network File Systems
++#
++# CONFIG_CODA_FS is not set
++# CONFIG_INTERMEZZO_FS is not set
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_DIRECTIO is not set
++CONFIG_ROOT_NFS=y
++# CONFIG_NFSD is not set
++# CONFIG_NFSD_V3 is not set
++# CONFIG_NFSD_TCP is not set
++CONFIG_SUNRPC=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++# CONFIG_SMB_FS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_NCPFS_PACKET_SIGNING is not set
++# CONFIG_NCPFS_IOCTL_LOCKING is not set
++# CONFIG_NCPFS_STRONG is not set
++# CONFIG_NCPFS_NFS_NS is not set
++# CONFIG_NCPFS_OS2_NS is not set
++# CONFIG_NCPFS_SMALLDOS is not set
++# CONFIG_NCPFS_NLS is not set
++# CONFIG_NCPFS_EXTRAS is not set
++# CONFIG_ZISOFS_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_SMB_NLS is not set
++CONFIG_NLS=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS_DEFAULT="iso8859-1"
++# CONFIG_NLS_CODEPAGE_437 is not set
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ISO8859_1 is not set
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Console drivers
++#
++# CONFIG_VGA_CONSOLE is not set
++# CONFIG_MDA_CONSOLE is not set
++
++#
++# Frame-buffer support
++#
++CONFIG_FB=y
++CONFIG_DUMMY_CONSOLE=y
++# CONFIG_FB_RIVA is not set
++# CONFIG_FB_CLGEN is not set
++# CONFIG_FB_PM2 is not set
++# CONFIG_FB_PM3 is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_MATROX is not set
++# CONFIG_FB_ATY is not set
++# CONFIG_FB_RADEON is not set
++# CONFIG_FB_ATY128 is not set
++# CONFIG_FB_INTEL is not set
++# CONFIG_FB_SIS is not set
++# CONFIG_FB_NEOMAGIC is not set
++# CONFIG_FB_3DFX is not set
++# CONFIG_FB_VOODOO1 is not set
++# CONFIG_FB_TRIDENT is not set
++# CONFIG_FB_E1356 is not set
++# CONFIG_FB_IT8181 is not set
++# CONFIG_FB_VIRTUAL is not set
++CONFIG_FBCON_ADVANCED=y
++# CONFIG_FBCON_MFB is not set
++# CONFIG_FBCON_CFB2 is not set
++# CONFIG_FBCON_CFB4 is not set
++# CONFIG_FBCON_CFB8 is not set
++CONFIG_FBCON_CFB16=y
++# CONFIG_FBCON_CFB24 is not set
++CONFIG_FBCON_CFB32=y
++# CONFIG_FBCON_AFB is not set
++# CONFIG_FBCON_ILBM is not set
++# CONFIG_FBCON_IPLAN2P2 is not set
++# CONFIG_FBCON_IPLAN2P4 is not set
++# CONFIG_FBCON_IPLAN2P8 is not set
++# CONFIG_FBCON_MAC is not set
++# CONFIG_FBCON_VGA_PLANES is not set
++# CONFIG_FBCON_VGA is not set
++# CONFIG_FBCON_HGA is not set
++# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
++CONFIG_FBCON_FONTS=y
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++# CONFIG_SOUND_ALI5455 is not set
++# CONFIG_SOUND_BT878 is not set
++# CONFIG_SOUND_CMPCI is not set
++# CONFIG_SOUND_EMU10K1 is not set
++# CONFIG_MIDI_EMU10K1 is not set
++# CONFIG_SOUND_FUSION is not set
++# CONFIG_SOUND_CS4281 is not set
++# CONFIG_SOUND_ES1370 is not set
++# CONFIG_SOUND_ES1371 is not set
++# CONFIG_SOUND_ESSSOLO1 is not set
++# CONFIG_SOUND_MAESTRO is not set
++# CONFIG_SOUND_MAESTRO3 is not set
++# CONFIG_SOUND_FORTE is not set
++# CONFIG_SOUND_ICH is not set
++# CONFIG_SOUND_RME96XX is not set
++# CONFIG_SOUND_SONICVIBES is not set
++# CONFIG_SOUND_AU1X00 is not set
++CONFIG_SOUND_AU1550_PSC=y
++# CONFIG_SOUND_AU1550_I2S is not set
++# CONFIG_SOUND_TRIDENT is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++# CONFIG_SOUND_VIA82CXXX is not set
++# CONFIG_MIDI_VIA82CXXX is not set
++# CONFIG_SOUND_OSS is not set
++# CONFIG_SOUND_TVMIXER is not set
++# CONFIG_SOUND_AD1980 is not set
++# CONFIG_SOUND_WM97XX is not set
++
++#
++# USB support
++#
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_BANDWIDTH is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_EHCI_HCD is not set
++# CONFIG_USB_UHCI is not set
++# CONFIG_USB_UHCI_ALT is not set
++CONFIG_USB_OHCI=y
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_AUDIO is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_BLUETOOTH is not set
++# CONFIG_USB_MIDI is not set
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_HP8200e is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# USB Human Interface Devices (HID)
++#
++CONFIG_USB_HID=y
++CONFIG_USB_HIDINPUT=y
++CONFIG_USB_HIDDEV=y
++# CONFIG_USB_AIPTEK is not set
++# CONFIG_USB_WACOM is not set
++# CONFIG_USB_KBTAB is not set
++# CONFIG_USB_POWERMATE is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_DC2XX is not set
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_SCANNER is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_HPUSBSCSI is not set
++
++#
++# USB Multimedia devices
++#
++
++#
++#   Video4Linux support is needed for USB Multimedia device support
++#
++
++#
++# USB Network adaptors
++#
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_CDCETHER is not set
++# CONFIG_USB_USBNET is not set
++
++#
++# USB port drivers
++#
++# CONFIG_USB_USS720 is not set
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_TIGL is not set
++# CONFIG_USB_BRLVGER is not set
++# CONFIG_USB_LCD is not set
++
++#
++# Support for USB gadgets
++#
++# CONFIG_USB_GADGET is not set
++
++#
++# Bluetooth support
++#
++# CONFIG_BLUEZ is not set
++
++#
++# Kernel hacking
++#
++CONFIG_CROSSCOMPILE=y
++# CONFIG_RUNTIME_DEBUG is not set
++# CONFIG_KGDB is not set
++# CONFIG_GDB_CONSOLE is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_MIPS_UNCACHED is not set
++CONFIG_LOG_BUF_SHIFT=0
++
++#
++# Cryptographic options
++#
++# CONFIG_CRYPTO is not set
++
++#
++# Library routines
++#
++# CONFIG_CRC32 is not set
++CONFIG_ZLIB_INFLATE=m
++CONFIG_ZLIB_DEFLATE=m
++# CONFIG_FW_LOADER is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-db1500 linux-mips/arch/mips/defconfig-db1500
+--- linux-2.4.29/arch/mips/defconfig-db1500    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-db1500      2005-02-12 04:05:27.000000000 +0100
+@@ -22,16 +22,19 @@
+ #
+ # CONFIG_ACER_PICA_61 is not set
+ # CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
+ # CONFIG_MIPS_MIRAGE is not set
+ # CONFIG_MIPS_DB1000 is not set
+ # CONFIG_MIPS_DB1100 is not set
+ CONFIG_MIPS_DB1500=y
+ # CONFIG_MIPS_DB1550 is not set
++# CONFIG_MIPS_DB1200 is not set
+ # CONFIG_MIPS_PB1000 is not set
+ # CONFIG_MIPS_PB1100 is not set
+ # CONFIG_MIPS_PB1500 is not set
+-# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_XXS1500 is not set
+ # CONFIG_MIPS_MTX1 is not set
+ # CONFIG_COGENT_CSB250 is not set
+@@ -267,11 +270,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-db1550 linux-mips/arch/mips/defconfig-db1550
+--- linux-2.4.29/arch/mips/defconfig-db1550    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-db1550      2005-02-12 04:05:27.000000000 +0100
+@@ -22,16 +22,19 @@
+ #
+ # CONFIG_ACER_PICA_61 is not set
+ # CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
+ # CONFIG_MIPS_MIRAGE is not set
+ # CONFIG_MIPS_DB1000 is not set
+ # CONFIG_MIPS_DB1100 is not set
+ # CONFIG_MIPS_DB1500 is not set
+ CONFIG_MIPS_DB1550=y
++# CONFIG_MIPS_DB1200 is not set
+ # CONFIG_MIPS_PB1000 is not set
+ # CONFIG_MIPS_PB1100 is not set
+ # CONFIG_MIPS_PB1500 is not set
+-# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_XXS1500 is not set
+ # CONFIG_MIPS_MTX1 is not set
+ # CONFIG_COGENT_CSB250 is not set
+@@ -343,11 +346,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-ddb5476 linux-mips/arch/mips/defconfig-ddb5476
+--- linux-2.4.29/arch/mips/defconfig-ddb5476   2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-ddb5476     2005-01-09 20:33:59.000000000 +0100
+@@ -226,11 +226,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-ddb5477 linux-mips/arch/mips/defconfig-ddb5477
+--- linux-2.4.29/arch/mips/defconfig-ddb5477   2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-ddb5477     2005-01-09 20:33:59.000000000 +0100
+@@ -226,11 +226,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-decstation linux-mips/arch/mips/defconfig-decstation
+--- linux-2.4.29/arch/mips/defconfig-decstation        2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-decstation  2005-01-09 20:33:59.000000000 +0100
+@@ -223,11 +223,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -306,6 +301,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-e55 linux-mips/arch/mips/defconfig-e55
+--- linux-2.4.29/arch/mips/defconfig-e55       2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-e55 2005-01-09 20:33:59.000000000 +0100
+@@ -222,11 +222,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-eagle linux-mips/arch/mips/defconfig-eagle
+--- linux-2.4.29/arch/mips/defconfig-eagle     2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-eagle       2005-01-09 20:33:59.000000000 +0100
+@@ -327,11 +327,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-ev64120 linux-mips/arch/mips/defconfig-ev64120
+--- linux-2.4.29/arch/mips/defconfig-ev64120   2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-ev64120     2005-01-09 20:33:59.000000000 +0100
+@@ -230,11 +230,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-ev96100 linux-mips/arch/mips/defconfig-ev96100
+--- linux-2.4.29/arch/mips/defconfig-ev96100   2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-ev96100     2005-01-09 20:33:59.000000000 +0100
+@@ -232,11 +232,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-ficmmp linux-mips/arch/mips/defconfig-ficmmp
+--- linux-2.4.29/arch/mips/defconfig-ficmmp    1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/defconfig-ficmmp      2005-02-12 04:05:27.000000000 +0100
+@@ -0,0 +1,880 @@
++#
++# Automatically generated make config: don't edit
++#
++CONFIG_MIPS=y
++CONFIG_MIPS32=y
++# CONFIG_MIPS64 is not set
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++# CONFIG_MODVERSIONS is not set
++CONFIG_KMOD=y
++
++#
++# Machine selection
++#
++# CONFIG_ACER_PICA_61 is not set
++# CONFIG_MIPS_BOSPORUS is not set
++CONFIG_MIPS_FICMMP=y
++# CONFIG_MIPS_MIRAGE is not set
++# CONFIG_MIPS_DB1000 is not set
++# CONFIG_MIPS_DB1100 is not set
++# CONFIG_MIPS_DB1500 is not set
++# CONFIG_MIPS_DB1550 is not set
++# CONFIG_MIPS_DB1200 is not set
++# CONFIG_MIPS_PB1000 is not set
++# CONFIG_MIPS_PB1100 is not set
++# CONFIG_MIPS_PB1500 is not set
++# CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
++# CONFIG_MIPS_XXS1500 is not set
++# CONFIG_MIPS_MTX1 is not set
++# CONFIG_COGENT_CSB250 is not set
++# CONFIG_BAGET_MIPS is not set
++# CONFIG_CASIO_E55 is not set
++# CONFIG_MIPS_COBALT is not set
++# CONFIG_DECSTATION is not set
++# CONFIG_MIPS_EV64120 is not set
++# CONFIG_MIPS_EV96100 is not set
++# CONFIG_MIPS_IVR is not set
++# CONFIG_HP_LASERJET is not set
++# CONFIG_IBM_WORKPAD is not set
++# CONFIG_LASAT is not set
++# CONFIG_MIPS_ITE8172 is not set
++# CONFIG_MIPS_ATLAS is not set
++# CONFIG_MIPS_MAGNUM_4000 is not set
++# CONFIG_MIPS_MALTA is not set
++# CONFIG_MIPS_SEAD is not set
++# CONFIG_MOMENCO_OCELOT is not set
++# CONFIG_MOMENCO_OCELOT_G is not set
++# CONFIG_MOMENCO_OCELOT_C is not set
++# CONFIG_MOMENCO_JAGUAR_ATX is not set
++# CONFIG_PMC_BIG_SUR is not set
++# CONFIG_PMC_STRETCH is not set
++# CONFIG_PMC_YOSEMITE is not set
++# CONFIG_DDB5074 is not set
++# CONFIG_DDB5476 is not set
++# CONFIG_DDB5477 is not set
++# CONFIG_NEC_OSPREY is not set
++# CONFIG_NEC_EAGLE is not set
++# CONFIG_OLIVETTI_M700 is not set
++# CONFIG_NINO is not set
++# CONFIG_SGI_IP22 is not set
++# CONFIG_SGI_IP27 is not set
++# CONFIG_SIBYTE_SB1xxx_SOC is not set
++# CONFIG_SNI_RM200_PCI is not set
++# CONFIG_TANBAC_TB0226 is not set
++# CONFIG_TANBAC_TB0229 is not set
++# CONFIG_TOSHIBA_JMR3927 is not set
++# CONFIG_TOSHIBA_RBTX4927 is not set
++# CONFIG_VICTOR_MPC30X is not set
++# CONFIG_ZAO_CAPCELLA is not set
++# CONFIG_HIGHMEM is not set
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
++CONFIG_SOC_AU1X00=y
++CONFIG_SOC_AU1200=y
++CONFIG_NONCOHERENT_IO=y
++CONFIG_PC_KEYB=y
++# CONFIG_MIPS_AU1000 is not set
++
++#
++# CPU selection
++#
++CONFIG_CPU_MIPS32=y
++# CONFIG_CPU_MIPS64 is not set
++# CONFIG_CPU_R3000 is not set
++# CONFIG_CPU_TX39XX is not set
++# CONFIG_CPU_VR41XX is not set
++# CONFIG_CPU_R4300 is not set
++# CONFIG_CPU_R4X00 is not set
++# CONFIG_CPU_TX49XX is not set
++# CONFIG_CPU_R5000 is not set
++# CONFIG_CPU_R5432 is not set
++# CONFIG_CPU_R6000 is not set
++# CONFIG_CPU_NEVADA is not set
++# CONFIG_CPU_R8000 is not set
++# CONFIG_CPU_R10000 is not set
++# CONFIG_CPU_RM7000 is not set
++# CONFIG_CPU_RM9000 is not set
++# CONFIG_CPU_SB1 is not set
++CONFIG_PAGE_SIZE_4KB=y
++# CONFIG_PAGE_SIZE_16KB is not set
++# CONFIG_PAGE_SIZE_64KB is not set
++CONFIG_CPU_HAS_PREFETCH=y
++# CONFIG_VTAG_ICACHE is not set
++CONFIG_64BIT_PHYS_ADDR=y
++# CONFIG_CPU_ADVANCED is not set
++CONFIG_CPU_HAS_LLSC=y
++# CONFIG_CPU_HAS_LLDSCD is not set
++# CONFIG_CPU_HAS_WB is not set
++CONFIG_CPU_HAS_SYNC=y
++
++#
++# General setup
++#
++CONFIG_CPU_LITTLE_ENDIAN=y
++# CONFIG_BUILD_ELF64 is not set
++CONFIG_NET=y
++# CONFIG_PCI is not set
++# CONFIG_PCI_NEW is not set
++CONFIG_PCI_AUTO=y
++# CONFIG_ISA is not set
++# CONFIG_TC is not set
++# CONFIG_MCA is not set
++# CONFIG_SBUS is not set
++# CONFIG_HOTPLUG is not set
++# CONFIG_PCMCIA is not set
++# CONFIG_HOTPLUG_PCI is not set
++CONFIG_SYSVIPC=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++CONFIG_KCORE_ELF=y
++# CONFIG_KCORE_AOUT is not set
++# CONFIG_BINFMT_AOUT is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_MIPS32_COMPAT is not set
++# CONFIG_MIPS32_O32 is not set
++# CONFIG_MIPS32_N32 is not set
++# CONFIG_BINFMT_ELF32 is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_OOM_KILLER is not set
++CONFIG_CMDLINE_BOOL=y
++CONFIG_CMDLINE="ide3=dma mem=96M root=/dev/hda2 rootflags=data=journal"
++# CONFIG_PM is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++# CONFIG_MTD is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play configuration
++#
++# CONFIG_PNP is not set
++# CONFIG_ISAPNP is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_DEV_XD is not set
++# CONFIG_PARIDE is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_CISS_SCSI_TAPE is not set
++# CONFIG_CISS_MONITOR_THREAD is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_UMEM is not set
++# CONFIG_BLK_DEV_SX8 is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_RAM is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_BLK_STATS is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++# CONFIG_BLK_DEV_MD is not set
++# CONFIG_MD_LINEAR is not set
++# CONFIG_MD_RAID0 is not set
++# CONFIG_MD_RAID1 is not set
++# CONFIG_MD_RAID5 is not set
++# CONFIG_MD_MULTIPATH is not set
++# CONFIG_BLK_DEV_LVM is not set
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++# CONFIG_NETLINK_DEV is not set
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++CONFIG_FILTER=y
++CONFIG_UNIX=y
++CONFIG_INET=y
++CONFIG_IP_MULTICAST=y
++# CONFIG_IP_ADVANCED_ROUTER is not set
++# CONFIG_IP_PNP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_IP_MROUTE is not set
++# CONFIG_ARPD is not set
++# CONFIG_INET_ECN is not set
++# CONFIG_SYN_COOKIES is not set
++
++#
++#   IP: Netfilter Configuration
++#
++# CONFIG_IP_NF_CONNTRACK is not set
++# CONFIG_IP_NF_QUEUE is not set
++# CONFIG_IP_NF_IPTABLES is not set
++# CONFIG_IP_NF_ARPTABLES is not set
++# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
++# CONFIG_IP_NF_COMPAT_IPFWADM is not set
++
++#
++#   IP: Virtual Server Configuration
++#
++# CONFIG_IP_VS is not set
++# CONFIG_IPV6 is not set
++# CONFIG_KHTTPD is not set
++
++#
++#    SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++# CONFIG_ATM is not set
++# CONFIG_VLAN_8021Q is not set
++
++#
++#  
++#
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_DECNET is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_LLC is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_FASTROUTE is not set
++# CONFIG_NET_HW_FLOWCONTROL is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++
++#
++# Telephony Support
++#
++# CONFIG_PHONE is not set
++# CONFIG_PHONE_IXJ is not set
++# CONFIG_PHONE_IXJ_PCMCIA is not set
++
++#
++# ATA/IDE/MFM/RLL support
++#
++CONFIG_IDE=y
++
++#
++# IDE, ATA and ATAPI Block devices
++#
++CONFIG_BLK_DEV_IDE=y
++
++#
++# Please see Documentation/ide.txt for help/info on IDE drives
++#
++CONFIG_BLK_DEV_HD_IDE=y
++CONFIG_BLK_DEV_HD=y
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_BLK_DEV_IDEDISK=y
++CONFIG_IDEDISK_MULTI_MODE=y
++CONFIG_IDEDISK_STROKE=y
++# CONFIG_BLK_DEV_IDECS is not set
++# CONFIG_BLK_DEV_DELKIN is not set
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++# CONFIG_IDE_TASK_IOCTL is not set
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_BLK_DEV_CMD640 is not set
++# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
++# CONFIG_BLK_DEV_ISAPNP is not set
++# CONFIG_IDE_CHIPSETS is not set
++# CONFIG_IDEDMA_AUTO is not set
++# CONFIG_DMA_NONPCI is not set
++# CONFIG_BLK_DEV_ATARAID is not set
++# CONFIG_BLK_DEV_ATARAID_PDC is not set
++# CONFIG_BLK_DEV_ATARAID_HPT is not set
++# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
++# CONFIG_BLK_DEV_ATARAID_SII is not set
++
++#
++# SCSI support
++#
++CONFIG_SCSI=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++CONFIG_SD_EXTRA_DEVS=40
++CONFIG_CHR_DEV_ST=y
++# CONFIG_CHR_DEV_OSST is not set
++CONFIG_BLK_DEV_SR=y
++# CONFIG_BLK_DEV_SR_VENDOR is not set
++CONFIG_SR_EXTRA_DEVS=2
++# CONFIG_CHR_DEV_SG is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_DEBUG_QUEUES is not set
++# CONFIG_SCSI_MULTI_LUN is not set
++CONFIG_SCSI_CONSTANTS=y
++# CONFIG_SCSI_LOGGING is not set
++
++#
++# SCSI low-level drivers
++#
++# CONFIG_SCSI_7000FASST is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AHA152X is not set
++# CONFIG_SCSI_AHA1542 is not set
++# CONFIG_SCSI_AHA1740 is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC79XX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_DPT_I2O is not set
++# CONFIG_SCSI_ADVANSYS is not set
++# CONFIG_SCSI_IN2000 is not set
++# CONFIG_SCSI_AM53C974 is not set
++# CONFIG_SCSI_MEGARAID is not set
++# CONFIG_SCSI_MEGARAID2 is not set
++# CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
++# CONFIG_SCSI_SATA_SVW is not set
++# CONFIG_SCSI_ATA_PIIX is not set
++# CONFIG_SCSI_SATA_NV is not set
++# CONFIG_SCSI_SATA_PROMISE is not set
++# CONFIG_SCSI_SATA_SX4 is not set
++# CONFIG_SCSI_SATA_SIL is not set
++# CONFIG_SCSI_SATA_SIS is not set
++# CONFIG_SCSI_SATA_ULI is not set
++# CONFIG_SCSI_SATA_VIA is not set
++# CONFIG_SCSI_SATA_VITESSE is not set
++# CONFIG_SCSI_BUSLOGIC is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_DTC3280 is not set
++# CONFIG_SCSI_EATA is not set
++# CONFIG_SCSI_EATA_DMA is not set
++# CONFIG_SCSI_EATA_PIO is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_GDTH is not set
++# CONFIG_SCSI_GENERIC_NCR5380 is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++# CONFIG_SCSI_NCR53C406A is not set
++# CONFIG_SCSI_NCR53C7xx is not set
++# CONFIG_SCSI_PAS16 is not set
++# CONFIG_SCSI_PCI2000 is not set
++# CONFIG_SCSI_PCI2220I is not set
++# CONFIG_SCSI_PSI240I is not set
++# CONFIG_SCSI_QLOGIC_FAS is not set
++# CONFIG_SCSI_SIM710 is not set
++# CONFIG_SCSI_SYM53C416 is not set
++# CONFIG_SCSI_T128 is not set
++# CONFIG_SCSI_U14_34F is not set
++# CONFIG_SCSI_NSP32 is not set
++# CONFIG_SCSI_DEBUG is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++# CONFIG_FUSION_BOOT is not set
++# CONFIG_FUSION_ISENSE is not set
++# CONFIG_FUSION_CTL is not set
++# CONFIG_FUSION_LAN is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_ETHERTAP is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++# CONFIG_MIPS_AU1X00_ENET is not set
++# CONFIG_SUNLANCE is not set
++# CONFIG_SUNBMAC is not set
++# CONFIG_SUNQE is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_LANCE is not set
++# CONFIG_NET_VENDOR_SMC is not set
++# CONFIG_NET_VENDOR_RACAL is not set
++# CONFIG_NET_ISA is not set
++# CONFIG_NET_PCI is not set
++# CONFIG_NET_POCKET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_E1000 is not set
++# CONFIG_MYRI_SBUS is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_R8169 is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_TIGON3 is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PLIP is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++# CONFIG_NET_RADIO is not set
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++# CONFIG_NET_FC is not set
++# CONFIG_RCPCI is not set
++# CONFIG_SHAPER is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++
++#
++# Amateur Radio support
++#
++# CONFIG_HAMRADIO is not set
++
++#
++# IrDA (infrared) support
++#
++# CONFIG_IRDA is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input core support
++#
++CONFIG_INPUT=y
++CONFIG_INPUT_KEYBDEV=y
++CONFIG_INPUT_MOUSEDEV=y
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_UINPUT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++# CONFIG_SERIAL is not set
++# CONFIG_SERIAL_EXTENDED is not set
++CONFIG_SERIAL_NONSTANDARD=y
++# CONFIG_COMPUTONE is not set
++# CONFIG_ROCKETPORT is not set
++# CONFIG_CYCLADES is not set
++# CONFIG_DIGIEPCA is not set
++# CONFIG_DIGI is not set
++# CONFIG_ESPSERIAL is not set
++# CONFIG_MOXA_INTELLIO is not set
++# CONFIG_MOXA_SMARTIO is not set
++# CONFIG_ISI is not set
++# CONFIG_SYNCLINK is not set
++# CONFIG_SYNCLINKMP is not set
++# CONFIG_N_HDLC is not set
++# CONFIG_RISCOM8 is not set
++# CONFIG_SPECIALIX is not set
++# CONFIG_SX is not set
++# CONFIG_RIO is not set
++# CONFIG_STALDRV is not set
++# CONFIG_SERIAL_TX3912 is not set
++# CONFIG_SERIAL_TX3912_CONSOLE is not set
++# CONFIG_SERIAL_TXX9 is not set
++# CONFIG_SERIAL_TXX9_CONSOLE is not set
++CONFIG_AU1X00_UART=y
++CONFIG_AU1X00_SERIAL_CONSOLE=y
++# CONFIG_AU1X00_USB_TTY is not set
++# CONFIG_AU1X00_USB_RAW is not set
++# CONFIG_TXX927_SERIAL is not set
++# CONFIG_MIPS_HYDROGEN3_BUTTONS is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_UNIX98_PTY_COUNT=256
++
++#
++# I2C support
++#
++CONFIG_I2C=y
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_SCx200_ACB is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_CHARDEV is not set
++# CONFIG_I2C_PROC is not set
++
++#
++# Mice
++#
++# CONFIG_BUSMOUSE is not set
++# CONFIG_MOUSE is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_GAMEPORT is not set
++# CONFIG_INPUT_NS558 is not set
++# CONFIG_INPUT_LIGHTNING is not set
++# CONFIG_INPUT_PCIGAME is not set
++# CONFIG_INPUT_CS461X is not set
++# CONFIG_INPUT_EMU10K1 is not set
++# CONFIG_INPUT_SERIO is not set
++# CONFIG_INPUT_SERPORT is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_ANALOG is not set
++# CONFIG_INPUT_A3D is not set
++# CONFIG_INPUT_ADI is not set
++# CONFIG_INPUT_COBRA is not set
++# CONFIG_INPUT_GF2K is not set
++# CONFIG_INPUT_GRIP is not set
++# CONFIG_INPUT_INTERACT is not set
++# CONFIG_INPUT_TMDC is not set
++# CONFIG_INPUT_SIDEWINDER is not set
++# CONFIG_INPUT_IFORCE_USB is not set
++# CONFIG_INPUT_IFORCE_232 is not set
++# CONFIG_INPUT_WARRIOR is not set
++# CONFIG_INPUT_MAGELLAN is not set
++# CONFIG_INPUT_SPACEORB is not set
++# CONFIG_INPUT_SPACEBALL is not set
++# CONFIG_INPUT_STINGER is not set
++# CONFIG_INPUT_DB9 is not set
++# CONFIG_INPUT_GAMECON is not set
++# CONFIG_INPUT_TURBOGRAFX is not set
++# CONFIG_QIC02_TAPE is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_IPMI_PANIC_EVENT is not set
++# CONFIG_IPMI_DEVICE_INTERFACE is not set
++# CONFIG_IPMI_KCS is not set
++# CONFIG_IPMI_WATCHDOG is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_SCx200 is not set
++# CONFIG_SCx200_GPIO is not set
++# CONFIG_AMD_PM768 is not set
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_FTAPE is not set
++# CONFIG_AGP is not set
++
++#
++# Direct Rendering Manager (XFree86 DRI support)
++#
++# CONFIG_DRM is not set
++# CONFIG_AU1X00_GPIO is not set
++# CONFIG_TS_AU1X00_ADS7846 is not set
++
++#
++# File systems
++#
++# CONFIG_QUOTA is not set
++# CONFIG_QFMT_V2 is not set
++CONFIG_AUTOFS_FS=y
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_ADFS_FS is not set
++# CONFIG_ADFS_FS_RW is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BEFS_DEBUG is not set
++# CONFIG_BFS_FS is not set
++CONFIG_EXT3_FS=y
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++# CONFIG_UMSDOS_FS is not set
++CONFIG_VFAT_FS=y
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++# CONFIG_JFFS2_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_TMPFS is not set
++CONFIG_RAMFS=y
++# CONFIG_ISO9660_FS is not set
++# CONFIG_JOLIET is not set
++# CONFIG_ZISOFS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_JFS_DEBUG is not set
++# CONFIG_JFS_STATISTICS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_NTFS_FS is not set
++# CONFIG_NTFS_RW is not set
++# CONFIG_HPFS_FS is not set
++CONFIG_PROC_FS=y
++# CONFIG_DEVFS_FS is not set
++# CONFIG_DEVFS_MOUNT is not set
++# CONFIG_DEVFS_DEBUG is not set
++CONFIG_DEVPTS_FS=y
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_QNX4FS_RW is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_EXT2_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_UDF_RW is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_UFS_FS_WRITE is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_XFS_QUOTA is not set
++# CONFIG_XFS_RT is not set
++# CONFIG_XFS_TRACE is not set
++# CONFIG_XFS_DEBUG is not set
++
++#
++# Network File Systems
++#
++# CONFIG_CODA_FS is not set
++# CONFIG_INTERMEZZO_FS is not set
++# CONFIG_NFS_FS is not set
++# CONFIG_NFS_V3 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_ROOT_NFS is not set
++# CONFIG_NFSD is not set
++# CONFIG_NFSD_V3 is not set
++# CONFIG_NFSD_TCP is not set
++# CONFIG_SUNRPC is not set
++# CONFIG_LOCKD is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_NCPFS_PACKET_SIGNING is not set
++# CONFIG_NCPFS_IOCTL_LOCKING is not set
++# CONFIG_NCPFS_STRONG is not set
++# CONFIG_NCPFS_NFS_NS is not set
++# CONFIG_NCPFS_OS2_NS is not set
++# CONFIG_NCPFS_SMALLDOS is not set
++# CONFIG_NCPFS_NLS is not set
++# CONFIG_NCPFS_EXTRAS is not set
++# CONFIG_ZISOFS_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_SMB_NLS is not set
++CONFIG_NLS=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS_DEFAULT="iso8859-1"
++# CONFIG_NLS_CODEPAGE_437 is not set
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ISO8859_1 is not set
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Console drivers
++#
++# CONFIG_VGA_CONSOLE is not set
++# CONFIG_MDA_CONSOLE is not set
++
++#
++# Frame-buffer support
++#
++CONFIG_FB=y
++CONFIG_DUMMY_CONSOLE=y
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_VIRTUAL is not set
++CONFIG_FBCON_ADVANCED=y
++# CONFIG_FBCON_MFB is not set
++# CONFIG_FBCON_CFB2 is not set
++# CONFIG_FBCON_CFB4 is not set
++# CONFIG_FBCON_CFB8 is not set
++CONFIG_FBCON_CFB16=y
++# CONFIG_FBCON_CFB24 is not set
++# CONFIG_FBCON_CFB32 is not set
++# CONFIG_FBCON_AFB is not set
++# CONFIG_FBCON_ILBM is not set
++# CONFIG_FBCON_IPLAN2P2 is not set
++# CONFIG_FBCON_IPLAN2P4 is not set
++# CONFIG_FBCON_IPLAN2P8 is not set
++# CONFIG_FBCON_MAC is not set
++# CONFIG_FBCON_VGA_PLANES is not set
++# CONFIG_FBCON_VGA is not set
++# CONFIG_FBCON_HGA is not set
++# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
++CONFIG_FBCON_FONTS=y
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++# CONFIG_SOUND_ALI5455 is not set
++# CONFIG_SOUND_BT878 is not set
++# CONFIG_SOUND_CMPCI is not set
++# CONFIG_SOUND_EMU10K1 is not set
++# CONFIG_MIDI_EMU10K1 is not set
++# CONFIG_SOUND_FUSION is not set
++# CONFIG_SOUND_CS4281 is not set
++# CONFIG_SOUND_ES1370 is not set
++# CONFIG_SOUND_ES1371 is not set
++# CONFIG_SOUND_ESSSOLO1 is not set
++# CONFIG_SOUND_MAESTRO is not set
++# CONFIG_SOUND_MAESTRO3 is not set
++# CONFIG_SOUND_FORTE is not set
++# CONFIG_SOUND_ICH is not set
++# CONFIG_SOUND_RME96XX is not set
++# CONFIG_SOUND_SONICVIBES is not set
++# CONFIG_SOUND_AU1X00 is not set
++# CONFIG_SOUND_AU1550_PSC is not set
++# CONFIG_SOUND_AU1550_I2S is not set
++# CONFIG_SOUND_TRIDENT is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++# CONFIG_SOUND_VIA82CXXX is not set
++# CONFIG_MIDI_VIA82CXXX is not set
++# CONFIG_SOUND_OSS is not set
++# CONFIG_SOUND_TVMIXER is not set
++# CONFIG_SOUND_AD1980 is not set
++# CONFIG_SOUND_WM97XX is not set
++
++#
++# USB support
++#
++# CONFIG_USB is not set
++
++#
++# Support for USB gadgets
++#
++# CONFIG_USB_GADGET is not set
++
++#
++# Bluetooth support
++#
++# CONFIG_BLUEZ is not set
++
++#
++# Kernel hacking
++#
++CONFIG_CROSSCOMPILE=y
++# CONFIG_RUNTIME_DEBUG is not set
++# CONFIG_KGDB is not set
++# CONFIG_GDB_CONSOLE is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_MIPS_UNCACHED is not set
++CONFIG_LOG_BUF_SHIFT=0
++
++#
++# Cryptographic options
++#
++# CONFIG_CRYPTO is not set
++
++#
++# Library routines
++#
++# CONFIG_CRC32 is not set
++CONFIG_ZLIB_INFLATE=m
++CONFIG_ZLIB_DEFLATE=m
+diff -Nur linux-2.4.29/arch/mips/defconfig-hp-lj linux-mips/arch/mips/defconfig-hp-lj
+--- linux-2.4.29/arch/mips/defconfig-hp-lj     2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-hp-lj       2005-01-09 20:33:59.000000000 +0100
+@@ -304,11 +304,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-hydrogen3 linux-mips/arch/mips/defconfig-hydrogen3
+--- linux-2.4.29/arch/mips/defconfig-hydrogen3 2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-hydrogen3   2005-01-31 12:59:29.000000000 +0100
+@@ -22,6 +22,7 @@
+ #
+ # CONFIG_ACER_PICA_61 is not set
+ # CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
+ # CONFIG_MIPS_MIRAGE is not set
+ # CONFIG_MIPS_DB1000 is not set
+ # CONFIG_MIPS_DB1100 is not set
+@@ -30,9 +31,11 @@
+ # CONFIG_MIPS_PB1000 is not set
+ # CONFIG_MIPS_PB1100 is not set
+ # CONFIG_MIPS_PB1500 is not set
+-CONFIG_MIPS_HYDROGEN3=y
+ # CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++CONFIG_MIPS_HYDROGEN3=y
+ # CONFIG_MIPS_XXS1500 is not set
++# CONFIG_MIPS_EP1000 is not set
+ # CONFIG_MIPS_MTX1 is not set
+ # CONFIG_COGENT_CSB250 is not set
+ # CONFIG_BAGET_MIPS is not set
+@@ -185,6 +188,7 @@
+ CONFIG_MTD_BLOCK=y
+ # CONFIG_FTL is not set
+ # CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
+ #
+ # RAM/ROM/Flash chip drivers
+@@ -196,6 +200,7 @@
+ # CONFIG_MTD_CFI_INTELEXT is not set
+ CONFIG_MTD_CFI_AMDSTD=y
+ # CONFIG_MTD_CFI_STAA is not set
++CONFIG_MTD_CFI_UTIL=y
+ # CONFIG_MTD_RAM is not set
+ # CONFIG_MTD_ROM is not set
+ # CONFIG_MTD_ABSENT is not set
+@@ -207,17 +212,12 @@
+ #
+ # Mapping drivers for chip access
+ #
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+ # CONFIG_MTD_PHYSMAP is not set
+-# CONFIG_MTD_PB1000 is not set
+-# CONFIG_MTD_PB1500 is not set
+-# CONFIG_MTD_PB1100 is not set
+-# CONFIG_MTD_BOSPORUS is not set
+-# CONFIG_MTD_XXS1500 is not set
+-# CONFIG_MTD_MTX1 is not set
+-# CONFIG_MTD_DB1X00 is not set
+ # CONFIG_MTD_PB1550 is not set
+-CONFIG_MTD_HYDROGEN3=y
+-# CONFIG_MTD_MIRAGE is not set
++# CONFIG_MTD_DB1550 is not set
++# CONFIG_MTD_PB1200 is not set
++# CONFIG_MTD_XXS1500 is not set
+ # CONFIG_MTD_CSTM_MIPS_IXX is not set
+ # CONFIG_MTD_OCELOT is not set
+ # CONFIG_MTD_LASAT is not set
+@@ -235,9 +235,9 @@
+ #
+ # Disk-On-Chip Device Drivers
+ #
+-# CONFIG_MTD_DOC1000 is not set
+ # CONFIG_MTD_DOC2000 is not set
+ # CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
+ # CONFIG_MTD_DOCPROBE is not set
+ #
+@@ -340,11 +340,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -386,6 +381,7 @@
+ #
+ # Please see Documentation/ide.txt for help/info on IDE drives
+ #
++# CONFIG_BLK_DEV_IDE_AU1XXX is not set
+ # CONFIG_BLK_DEV_HD_IDE is not set
+ # CONFIG_BLK_DEV_HD is not set
+ # CONFIG_BLK_DEV_IDE_SATA is not set
+@@ -403,6 +399,7 @@
+ #
+ # IDE chipset support/bugfixes
+ #
++# CONFIG_BLK_DEV_IDE_AU1XXX is not set
+ # CONFIG_BLK_DEV_CMD640 is not set
+ # CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+ # CONFIG_BLK_DEV_ISAPNP is not set
+@@ -590,7 +587,6 @@
+ # CONFIG_AU1X00_USB_TTY is not set
+ # CONFIG_AU1X00_USB_RAW is not set
+ # CONFIG_TXX927_SERIAL is not set
+-CONFIG_MIPS_HYDROGEN3_BUTTONS=y
+ CONFIG_UNIX98_PTYS=y
+ CONFIG_UNIX98_PTY_COUNT=256
+@@ -677,6 +673,12 @@
+ # CONFIG_SYNCLINK_CS is not set
+ # CONFIG_AU1X00_GPIO is not set
+ # CONFIG_TS_AU1X00_ADS7846 is not set
++# CONFIG_AU1550_PSC_SPI is not set
++# CONFIG_AU1XXX_MAE is not set
++# CONFIG_AU1XXX_AES is not set
++# CONFIG_AU1XXX_CIM is not set
++# CONFIG_AU1XXX_AES_TEST is not set
++CONFIG_AU1XXX_BUTTONS=y
+ #
+ # File systems
+@@ -838,18 +840,20 @@
+ # CONFIG_FB_PM2 is not set
+ # CONFIG_FB_PM3 is not set
+ # CONFIG_FB_CYBER2000 is not set
++CONFIG_FB_AU1100=y
++# CONFIG_FOCUS_ENHANCEMENTS is not set
+ # CONFIG_FB_MATROX is not set
+ # CONFIG_FB_ATY is not set
+ # CONFIG_FB_RADEON is not set
+ # CONFIG_FB_ATY128 is not set
+ # CONFIG_FB_INTEL is not set
+ # CONFIG_FB_SIS is not set
++# CONFIG_FB_SMI501 is not set
+ # CONFIG_FB_NEOMAGIC is not set
+ # CONFIG_FB_3DFX is not set
+ # CONFIG_FB_VOODOO1 is not set
+ # CONFIG_FB_TRIDENT is not set
+ # CONFIG_FB_E1356 is not set
+-CONFIG_FB_AU1100=y
+ # CONFIG_FB_IT8181 is not set
+ # CONFIG_FB_VIRTUAL is not set
+ CONFIG_FBCON_ADVANCED=y
+@@ -923,9 +927,11 @@
+ # USB Host Controller Drivers
+ #
+ # CONFIG_USB_EHCI_HCD is not set
++# CONFIG_USB_NON_PCI_EHCI is not set
+ # CONFIG_USB_UHCI is not set
+ # CONFIG_USB_UHCI_ALT is not set
+ CONFIG_USB_OHCI=y
++CONFIG_USB_NON_PCI_OHCI=y
+ #
+ # USB Device Class drivers
+diff -Nur linux-2.4.29/arch/mips/defconfig-ip22 linux-mips/arch/mips/defconfig-ip22
+--- linux-2.4.29/arch/mips/defconfig-ip22      2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-ip22        2005-01-09 20:33:59.000000000 +0100
+@@ -235,11 +235,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -319,6 +314,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-it8172 linux-mips/arch/mips/defconfig-it8172
+--- linux-2.4.29/arch/mips/defconfig-it8172    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-it8172      2005-01-09 20:33:59.000000000 +0100
+@@ -304,11 +304,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-ivr linux-mips/arch/mips/defconfig-ivr
+--- linux-2.4.29/arch/mips/defconfig-ivr       2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-ivr 2005-01-09 20:33:59.000000000 +0100
+@@ -226,11 +226,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-jmr3927 linux-mips/arch/mips/defconfig-jmr3927
+--- linux-2.4.29/arch/mips/defconfig-jmr3927   2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-jmr3927     2005-01-09 20:33:59.000000000 +0100
+@@ -225,11 +225,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-lasat linux-mips/arch/mips/defconfig-lasat
+--- linux-2.4.29/arch/mips/defconfig-lasat     2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-lasat       2005-01-09 20:33:59.000000000 +0100
+@@ -303,11 +303,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-malta linux-mips/arch/mips/defconfig-malta
+--- linux-2.4.29/arch/mips/defconfig-malta     2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-malta       2005-01-09 20:33:59.000000000 +0100
+@@ -237,11 +237,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -319,6 +314,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-mirage linux-mips/arch/mips/defconfig-mirage
+--- linux-2.4.29/arch/mips/defconfig-mirage    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-mirage      2005-01-31 12:59:29.000000000 +0100
+@@ -335,11 +335,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -863,7 +858,7 @@
+ # CONFIG_USB_UHCI is not set
+ # CONFIG_USB_UHCI_ALT is not set
+ CONFIG_USB_OHCI=y
+-
++CONFIG_USB_NON_PCI_OHCI=y
+ #
+ # USB Device Class drivers
+ #
+diff -Nur linux-2.4.29/arch/mips/defconfig-mpc30x linux-mips/arch/mips/defconfig-mpc30x
+--- linux-2.4.29/arch/mips/defconfig-mpc30x    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-mpc30x      2005-01-09 20:33:59.000000000 +0100
+@@ -228,11 +228,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-mtx-1 linux-mips/arch/mips/defconfig-mtx-1
+--- linux-2.4.29/arch/mips/defconfig-mtx-1     2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-mtx-1       2005-01-20 03:19:22.000000000 +0100
+@@ -371,11 +371,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ CONFIG_BRIDGE=m
+ # CONFIG_X25 is not set
+@@ -479,6 +474,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-nino linux-mips/arch/mips/defconfig-nino
+--- linux-2.4.29/arch/mips/defconfig-nino      2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-nino        2005-01-09 20:33:59.000000000 +0100
+@@ -226,11 +226,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-ocelot linux-mips/arch/mips/defconfig-ocelot
+--- linux-2.4.29/arch/mips/defconfig-ocelot    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-ocelot      2005-01-09 20:33:59.000000000 +0100
+@@ -307,11 +307,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-osprey linux-mips/arch/mips/defconfig-osprey
+--- linux-2.4.29/arch/mips/defconfig-osprey    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-osprey      2005-01-09 20:33:59.000000000 +0100
+@@ -227,11 +227,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-pb1000 linux-mips/arch/mips/defconfig-pb1000
+--- linux-2.4.29/arch/mips/defconfig-pb1000    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-pb1000      2005-02-12 04:05:27.000000000 +0100
+@@ -22,16 +22,19 @@
+ #
+ # CONFIG_ACER_PICA_61 is not set
+ # CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
+ # CONFIG_MIPS_MIRAGE is not set
+ # CONFIG_MIPS_DB1000 is not set
+ # CONFIG_MIPS_DB1100 is not set
+ # CONFIG_MIPS_DB1500 is not set
+ # CONFIG_MIPS_DB1550 is not set
++# CONFIG_MIPS_DB1200 is not set
+ CONFIG_MIPS_PB1000=y
+ # CONFIG_MIPS_PB1100 is not set
+ # CONFIG_MIPS_PB1500 is not set
+-# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_XXS1500 is not set
+ # CONFIG_MIPS_MTX1 is not set
+ # CONFIG_COGENT_CSB250 is not set
+@@ -324,11 +327,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -707,7 +705,7 @@
+ #
+ # CONFIG_PCMCIA_SERIAL_CS is not set
+ # CONFIG_SYNCLINK_CS is not set
+-CONFIG_AU1X00_GPIO=m
++CONFIG_AU1X00_GPIO=y
+ # CONFIG_TS_AU1X00_ADS7846 is not set
+ #
+diff -Nur linux-2.4.29/arch/mips/defconfig-pb1100 linux-mips/arch/mips/defconfig-pb1100
+--- linux-2.4.29/arch/mips/defconfig-pb1100    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-pb1100      2005-02-12 04:05:28.000000000 +0100
+@@ -22,16 +22,19 @@
+ #
+ # CONFIG_ACER_PICA_61 is not set
+ # CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
+ # CONFIG_MIPS_MIRAGE is not set
+ # CONFIG_MIPS_DB1000 is not set
+ # CONFIG_MIPS_DB1100 is not set
+ # CONFIG_MIPS_DB1500 is not set
+ # CONFIG_MIPS_DB1550 is not set
++# CONFIG_MIPS_DB1200 is not set
+ # CONFIG_MIPS_PB1000 is not set
+ CONFIG_MIPS_PB1100=y
+ # CONFIG_MIPS_PB1500 is not set
+-# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_XXS1500 is not set
+ # CONFIG_MIPS_MTX1 is not set
+ # CONFIG_COGENT_CSB250 is not set
+@@ -324,11 +327,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-pb1200 linux-mips/arch/mips/defconfig-pb1200
+--- linux-2.4.29/arch/mips/defconfig-pb1200    1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/arch/mips/defconfig-pb1200      2005-01-30 09:01:27.000000000 +0100
+@@ -0,0 +1,1063 @@
++#
++# Automatically generated make config: don't edit
++#
++CONFIG_MIPS=y
++CONFIG_MIPS32=y
++# CONFIG_MIPS64 is not set
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++# CONFIG_MODVERSIONS is not set
++CONFIG_KMOD=y
++
++#
++# Machine selection
++#
++# CONFIG_ACER_PICA_61 is not set
++# CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
++# CONFIG_MIPS_MIRAGE is not set
++# CONFIG_MIPS_DB1000 is not set
++# CONFIG_MIPS_DB1100 is not set
++# CONFIG_MIPS_DB1500 is not set
++# CONFIG_MIPS_DB1550 is not set
++# CONFIG_MIPS_DB1200 is not set
++# CONFIG_MIPS_PB1000 is not set
++# CONFIG_MIPS_PB1100 is not set
++# CONFIG_MIPS_PB1500 is not set
++# CONFIG_MIPS_PB1550 is not set
++CONFIG_MIPS_PB1200=y
++# CONFIG_MIPS_HYDROGEN3 is not set
++# CONFIG_MIPS_XXS1500 is not set
++# CONFIG_MIPS_MTX1 is not set
++# CONFIG_COGENT_CSB250 is not set
++# CONFIG_BAGET_MIPS is not set
++# CONFIG_CASIO_E55 is not set
++# CONFIG_MIPS_COBALT is not set
++# CONFIG_DECSTATION is not set
++# CONFIG_MIPS_EV64120 is not set
++# CONFIG_MIPS_EV96100 is not set
++# CONFIG_MIPS_IVR is not set
++# CONFIG_HP_LASERJET is not set
++# CONFIG_IBM_WORKPAD is not set
++# CONFIG_LASAT is not set
++# CONFIG_MIPS_ITE8172 is not set
++# CONFIG_MIPS_ATLAS is not set
++# CONFIG_MIPS_MAGNUM_4000 is not set
++# CONFIG_MIPS_MALTA is not set
++# CONFIG_MIPS_SEAD is not set
++# CONFIG_MOMENCO_OCELOT is not set
++# CONFIG_MOMENCO_OCELOT_G is not set
++# CONFIG_MOMENCO_OCELOT_C is not set
++# CONFIG_MOMENCO_JAGUAR_ATX is not set
++# CONFIG_PMC_BIG_SUR is not set
++# CONFIG_PMC_STRETCH is not set
++# CONFIG_PMC_YOSEMITE is not set
++# CONFIG_DDB5074 is not set
++# CONFIG_DDB5476 is not set
++# CONFIG_DDB5477 is not set
++# CONFIG_NEC_OSPREY is not set
++# CONFIG_NEC_EAGLE is not set
++# CONFIG_OLIVETTI_M700 is not set
++# CONFIG_NINO is not set
++# CONFIG_SGI_IP22 is not set
++# CONFIG_SGI_IP27 is not set
++# CONFIG_SIBYTE_SB1xxx_SOC is not set
++# CONFIG_SNI_RM200_PCI is not set
++# CONFIG_TANBAC_TB0226 is not set
++# CONFIG_TANBAC_TB0229 is not set
++# CONFIG_TOSHIBA_JMR3927 is not set
++# CONFIG_TOSHIBA_RBTX4927 is not set
++# CONFIG_VICTOR_MPC30X is not set
++# CONFIG_ZAO_CAPCELLA is not set
++# CONFIG_HIGHMEM is not set
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
++CONFIG_SOC_AU1X00=y
++CONFIG_SOC_AU1200=y
++CONFIG_NONCOHERENT_IO=y
++CONFIG_PC_KEYB=y
++# CONFIG_MIPS_AU1000 is not set
++
++#
++# CPU selection
++#
++CONFIG_CPU_MIPS32=y
++# CONFIG_CPU_MIPS64 is not set
++# CONFIG_CPU_R3000 is not set
++# CONFIG_CPU_TX39XX is not set
++# CONFIG_CPU_VR41XX is not set
++# CONFIG_CPU_R4300 is not set
++# CONFIG_CPU_R4X00 is not set
++# CONFIG_CPU_TX49XX is not set
++# CONFIG_CPU_R5000 is not set
++# CONFIG_CPU_R5432 is not set
++# CONFIG_CPU_R6000 is not set
++# CONFIG_CPU_NEVADA is not set
++# CONFIG_CPU_R8000 is not set
++# CONFIG_CPU_R10000 is not set
++# CONFIG_CPU_RM7000 is not set
++# CONFIG_CPU_RM9000 is not set
++# CONFIG_CPU_SB1 is not set
++CONFIG_PAGE_SIZE_4KB=y
++# CONFIG_PAGE_SIZE_16KB is not set
++# CONFIG_PAGE_SIZE_64KB is not set
++CONFIG_CPU_HAS_PREFETCH=y
++# CONFIG_VTAG_ICACHE is not set
++CONFIG_64BIT_PHYS_ADDR=y
++# CONFIG_CPU_ADVANCED is not set
++CONFIG_CPU_HAS_LLSC=y
++# CONFIG_CPU_HAS_LLDSCD is not set
++# CONFIG_CPU_HAS_WB is not set
++CONFIG_CPU_HAS_SYNC=y
++
++#
++# General setup
++#
++CONFIG_CPU_LITTLE_ENDIAN=y
++# CONFIG_BUILD_ELF64 is not set
++CONFIG_NET=y
++CONFIG_PCI=y
++CONFIG_PCI_NEW=y
++CONFIG_PCI_AUTO=y
++# CONFIG_PCI_NAMES is not set
++# CONFIG_ISA is not set
++# CONFIG_TC is not set
++# CONFIG_MCA is not set
++# CONFIG_SBUS is not set
++CONFIG_HOTPLUG=y
++
++#
++# PCMCIA/CardBus support
++#
++CONFIG_PCMCIA=m
++# CONFIG_CARDBUS is not set
++# CONFIG_TCIC is not set
++# CONFIG_I82092 is not set
++# CONFIG_I82365 is not set
++CONFIG_PCMCIA_AU1X00=m
++
++#
++# PCI Hotplug Support
++#
++# CONFIG_HOTPLUG_PCI is not set
++# CONFIG_HOTPLUG_PCI_COMPAQ is not set
++# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set
++# CONFIG_HOTPLUG_PCI_SHPC is not set
++# CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE is not set
++# CONFIG_HOTPLUG_PCI_PCIE is not set
++# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set
++CONFIG_SYSVIPC=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++CONFIG_KCORE_ELF=y
++# CONFIG_KCORE_AOUT is not set
++# CONFIG_BINFMT_AOUT is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_MIPS32_COMPAT is not set
++# CONFIG_MIPS32_O32 is not set
++# CONFIG_MIPS32_N32 is not set
++# CONFIG_BINFMT_ELF32 is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_OOM_KILLER is not set
++CONFIG_CMDLINE_BOOL=y
++CONFIG_CMDLINE="mem=96M"
++# CONFIG_PM is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++# CONFIG_MTD is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play configuration
++#
++# CONFIG_PNP is not set
++# CONFIG_ISAPNP is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_DEV_XD is not set
++# CONFIG_PARIDE is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_CISS_SCSI_TAPE is not set
++# CONFIG_CISS_MONITOR_THREAD is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_UMEM is not set
++# CONFIG_BLK_DEV_SX8 is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_RAM is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_BLK_STATS is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++# CONFIG_BLK_DEV_MD is not set
++# CONFIG_MD_LINEAR is not set
++# CONFIG_MD_RAID0 is not set
++# CONFIG_MD_RAID1 is not set
++# CONFIG_MD_RAID5 is not set
++# CONFIG_MD_MULTIPATH is not set
++# CONFIG_BLK_DEV_LVM is not set
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++# CONFIG_NETLINK_DEV is not set
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++CONFIG_FILTER=y
++CONFIG_UNIX=y
++CONFIG_INET=y
++CONFIG_IP_MULTICAST=y
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++CONFIG_IP_PNP_BOOTP=y
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_IP_MROUTE is not set
++# CONFIG_ARPD is not set
++# CONFIG_INET_ECN is not set
++# CONFIG_SYN_COOKIES is not set
++
++#
++#   IP: Netfilter Configuration
++#
++# CONFIG_IP_NF_CONNTRACK is not set
++# CONFIG_IP_NF_QUEUE is not set
++# CONFIG_IP_NF_IPTABLES is not set
++# CONFIG_IP_NF_ARPTABLES is not set
++# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
++# CONFIG_IP_NF_COMPAT_IPFWADM is not set
++
++#
++#   IP: Virtual Server Configuration
++#
++# CONFIG_IP_VS is not set
++# CONFIG_IPV6 is not set
++# CONFIG_KHTTPD is not set
++
++#
++#    SCTP Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_SCTP is not set
++# CONFIG_ATM is not set
++# CONFIG_VLAN_8021Q is not set
++
++#
++#  
++#
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_DECNET is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_LLC is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_FASTROUTE is not set
++# CONFIG_NET_HW_FLOWCONTROL is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++
++#
++# Telephony Support
++#
++# CONFIG_PHONE is not set
++# CONFIG_PHONE_IXJ is not set
++# CONFIG_PHONE_IXJ_PCMCIA is not set
++
++#
++# ATA/IDE/MFM/RLL support
++#
++CONFIG_IDE=y
++
++#
++# IDE, ATA and ATAPI Block devices
++#
++CONFIG_BLK_DEV_IDE=y
++
++#
++# Please see Documentation/ide.txt for help/info on IDE drives
++#
++# CONFIG_BLK_DEV_HD_IDE is not set
++# CONFIG_BLK_DEV_HD is not set
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_BLK_DEV_IDEDISK=y
++CONFIG_IDEDISK_MULTI_MODE=y
++CONFIG_IDEDISK_STROKE=y
++CONFIG_BLK_DEV_IDECS=m
++# CONFIG_BLK_DEV_DELKIN is not set
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++# CONFIG_IDE_TASK_IOCTL is not set
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_BLK_DEV_CMD640 is not set
++# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
++# CONFIG_BLK_DEV_ISAPNP is not set
++# CONFIG_BLK_DEV_IDEPCI is not set
++# CONFIG_IDE_CHIPSETS is not set
++# CONFIG_IDEDMA_AUTO is not set
++# CONFIG_DMA_NONPCI is not set
++# CONFIG_BLK_DEV_ATARAID is not set
++# CONFIG_BLK_DEV_ATARAID_PDC is not set
++# CONFIG_BLK_DEV_ATARAID_HPT is not set
++# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
++# CONFIG_BLK_DEV_ATARAID_SII is not set
++
++#
++# SCSI support
++#
++CONFIG_SCSI=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++CONFIG_SD_EXTRA_DEVS=40
++CONFIG_CHR_DEV_ST=y
++# CONFIG_CHR_DEV_OSST is not set
++CONFIG_BLK_DEV_SR=y
++# CONFIG_BLK_DEV_SR_VENDOR is not set
++CONFIG_SR_EXTRA_DEVS=2
++# CONFIG_CHR_DEV_SG is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_DEBUG_QUEUES is not set
++# CONFIG_SCSI_MULTI_LUN is not set
++CONFIG_SCSI_CONSTANTS=y
++# CONFIG_SCSI_LOGGING is not set
++
++#
++# SCSI low-level drivers
++#
++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
++# CONFIG_SCSI_7000FASST is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AHA152X is not set
++# CONFIG_SCSI_AHA1542 is not set
++# CONFIG_SCSI_AHA1740 is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC79XX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_DPT_I2O is not set
++# CONFIG_SCSI_ADVANSYS is not set
++# CONFIG_SCSI_IN2000 is not set
++# CONFIG_SCSI_AM53C974 is not set
++# CONFIG_SCSI_MEGARAID is not set
++# CONFIG_SCSI_MEGARAID2 is not set
++# CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
++# CONFIG_SCSI_SATA_SVW is not set
++# CONFIG_SCSI_ATA_PIIX is not set
++# CONFIG_SCSI_SATA_NV is not set
++# CONFIG_SCSI_SATA_PROMISE is not set
++# CONFIG_SCSI_SATA_SX4 is not set
++# CONFIG_SCSI_SATA_SIL is not set
++# CONFIG_SCSI_SATA_SIS is not set
++# CONFIG_SCSI_SATA_ULI is not set
++# CONFIG_SCSI_SATA_VIA is not set
++# CONFIG_SCSI_SATA_VITESSE is not set
++# CONFIG_SCSI_BUSLOGIC is not set
++# CONFIG_SCSI_CPQFCTS is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_DTC3280 is not set
++# CONFIG_SCSI_EATA is not set
++# CONFIG_SCSI_EATA_DMA is not set
++# CONFIG_SCSI_EATA_PIO is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_GDTH is not set
++# CONFIG_SCSI_GENERIC_NCR5380 is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++# CONFIG_SCSI_NCR53C406A is not set
++# CONFIG_SCSI_NCR53C7xx is not set
++# CONFIG_SCSI_SYM53C8XX_2 is not set
++# CONFIG_SCSI_NCR53C8XX is not set
++# CONFIG_SCSI_SYM53C8XX is not set
++# CONFIG_SCSI_PAS16 is not set
++# CONFIG_SCSI_PCI2000 is not set
++# CONFIG_SCSI_PCI2220I is not set
++# CONFIG_SCSI_PSI240I is not set
++# CONFIG_SCSI_QLOGIC_FAS is not set
++# CONFIG_SCSI_QLOGIC_ISP is not set
++# CONFIG_SCSI_QLOGIC_FC is not set
++# CONFIG_SCSI_QLOGIC_1280 is not set
++# CONFIG_SCSI_SIM710 is not set
++# CONFIG_SCSI_SYM53C416 is not set
++# CONFIG_SCSI_DC390T is not set
++# CONFIG_SCSI_T128 is not set
++# CONFIG_SCSI_U14_34F is not set
++# CONFIG_SCSI_NSP32 is not set
++# CONFIG_SCSI_DEBUG is not set
++
++#
++# PCMCIA SCSI adapter support
++#
++# CONFIG_SCSI_PCMCIA is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++# CONFIG_FUSION_BOOT is not set
++# CONFIG_FUSION_ISENSE is not set
++# CONFIG_FUSION_CTL is not set
++# CONFIG_FUSION_LAN is not set
++
++#
++# IEEE 1394 (FireWire) support (EXPERIMENTAL)
++#
++# CONFIG_IEEE1394 is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++# CONFIG_I2O_PCI is not set
++# CONFIG_I2O_BLOCK is not set
++# CONFIG_I2O_LAN is not set
++# CONFIG_I2O_SCSI is not set
++# CONFIG_I2O_PROC is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_ETHERTAP is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++# CONFIG_MIPS_AU1X00_ENET is not set
++# CONFIG_SUNLANCE is not set
++# CONFIG_HAPPYMEAL is not set
++# CONFIG_SUNBMAC is not set
++# CONFIG_SUNQE is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_LANCE is not set
++# CONFIG_NET_VENDOR_SMC is not set
++# CONFIG_NET_VENDOR_RACAL is not set
++# CONFIG_HP100 is not set
++# CONFIG_NET_ISA is not set
++# CONFIG_NET_PCI is not set
++# CONFIG_NET_POCKET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_E1000 is not set
++# CONFIG_MYRI_SBUS is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_R8169 is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_TIGON3 is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PLIP is not set
++CONFIG_PPP=m
++CONFIG_PPP_MULTILINK=y
++# CONFIG_PPP_FILTER is not set
++CONFIG_PPP_ASYNC=m
++# CONFIG_PPP_SYNC_TTY is not set
++CONFIG_PPP_DEFLATE=m
++# CONFIG_PPP_BSDCOMP is not set
++CONFIG_PPPOE=m
++# CONFIG_SLIP is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++# CONFIG_NET_RADIO is not set
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++# CONFIG_NET_FC is not set
++# CONFIG_RCPCI is not set
++# CONFIG_SHAPER is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++
++#
++# PCMCIA network device support
++#
++# CONFIG_NET_PCMCIA is not set
++
++#
++# Amateur Radio support
++#
++# CONFIG_HAMRADIO is not set
++
++#
++# IrDA (infrared) support
++#
++# CONFIG_IRDA is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input core support
++#
++CONFIG_INPUT=y
++CONFIG_INPUT_KEYBDEV=y
++CONFIG_INPUT_MOUSEDEV=y
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_UINPUT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++# CONFIG_VT_CONSOLE is not set
++# CONFIG_SERIAL is not set
++# CONFIG_SERIAL_EXTENDED is not set
++CONFIG_SERIAL_NONSTANDARD=y
++# CONFIG_COMPUTONE is not set
++# CONFIG_ROCKETPORT is not set
++# CONFIG_CYCLADES is not set
++# CONFIG_DIGIEPCA is not set
++# CONFIG_DIGI is not set
++# CONFIG_ESPSERIAL is not set
++# CONFIG_MOXA_INTELLIO is not set
++# CONFIG_MOXA_SMARTIO is not set
++# CONFIG_ISI is not set
++# CONFIG_SYNCLINK is not set
++# CONFIG_SYNCLINKMP is not set
++# CONFIG_N_HDLC is not set
++# CONFIG_RISCOM8 is not set
++# CONFIG_SPECIALIX is not set
++# CONFIG_SX is not set
++# CONFIG_RIO is not set
++# CONFIG_STALDRV is not set
++# CONFIG_SERIAL_TX3912 is not set
++# CONFIG_SERIAL_TX3912_CONSOLE is not set
++# CONFIG_SERIAL_TXX9 is not set
++# CONFIG_SERIAL_TXX9_CONSOLE is not set
++CONFIG_AU1X00_UART=y
++CONFIG_AU1X00_SERIAL_CONSOLE=y
++# CONFIG_AU1X00_USB_TTY is not set
++# CONFIG_AU1X00_USB_RAW is not set
++# CONFIG_TXX927_SERIAL is not set
++# CONFIG_MIPS_HYDROGEN3_BUTTONS is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_UNIX98_PTY_COUNT=256
++
++#
++# I2C support
++#
++CONFIG_I2C=y
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_SCx200_ACB is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_CHARDEV is not set
++CONFIG_I2C_PROC=y
++
++#
++# Mice
++#
++# CONFIG_BUSMOUSE is not set
++# CONFIG_MOUSE is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_GAMEPORT is not set
++# CONFIG_INPUT_NS558 is not set
++# CONFIG_INPUT_LIGHTNING is not set
++# CONFIG_INPUT_PCIGAME is not set
++# CONFIG_INPUT_CS461X is not set
++# CONFIG_INPUT_EMU10K1 is not set
++# CONFIG_INPUT_SERIO is not set
++# CONFIG_INPUT_SERPORT is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_ANALOG is not set
++# CONFIG_INPUT_A3D is not set
++# CONFIG_INPUT_ADI is not set
++# CONFIG_INPUT_COBRA is not set
++# CONFIG_INPUT_GF2K is not set
++# CONFIG_INPUT_GRIP is not set
++# CONFIG_INPUT_INTERACT is not set
++# CONFIG_INPUT_TMDC is not set
++# CONFIG_INPUT_SIDEWINDER is not set
++# CONFIG_INPUT_IFORCE_USB is not set
++# CONFIG_INPUT_IFORCE_232 is not set
++# CONFIG_INPUT_WARRIOR is not set
++# CONFIG_INPUT_MAGELLAN is not set
++# CONFIG_INPUT_SPACEORB is not set
++# CONFIG_INPUT_SPACEBALL is not set
++# CONFIG_INPUT_STINGER is not set
++# CONFIG_INPUT_DB9 is not set
++# CONFIG_INPUT_GAMECON is not set
++# CONFIG_INPUT_TURBOGRAFX is not set
++# CONFIG_QIC02_TAPE is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_IPMI_PANIC_EVENT is not set
++# CONFIG_IPMI_DEVICE_INTERFACE is not set
++# CONFIG_IPMI_KCS is not set
++# CONFIG_IPMI_WATCHDOG is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_SCx200 is not set
++# CONFIG_SCx200_GPIO is not set
++# CONFIG_AMD_PM768 is not set
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_FTAPE is not set
++# CONFIG_AGP is not set
++
++#
++# Direct Rendering Manager (XFree86 DRI support)
++#
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++# CONFIG_PCMCIA_SERIAL_CS is not set
++# CONFIG_SYNCLINK_CS is not set
++# CONFIG_AU1X00_GPIO is not set
++# CONFIG_TS_AU1X00_ADS7846 is not set
++
++#
++# File systems
++#
++# CONFIG_QUOTA is not set
++# CONFIG_QFMT_V2 is not set
++CONFIG_AUTOFS_FS=y
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_REISERFS_FS is not set
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_ADFS_FS is not set
++# CONFIG_ADFS_FS_RW is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BEFS_DEBUG is not set
++# CONFIG_BFS_FS is not set
++CONFIG_EXT3_FS=y
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++# CONFIG_UMSDOS_FS is not set
++CONFIG_VFAT_FS=y
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++# CONFIG_JFFS2_FS is not set
++# CONFIG_CRAMFS is not set
++CONFIG_TMPFS=y
++CONFIG_RAMFS=y
++# CONFIG_ISO9660_FS is not set
++# CONFIG_JOLIET is not set
++# CONFIG_ZISOFS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_JFS_DEBUG is not set
++# CONFIG_JFS_STATISTICS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_NTFS_FS is not set
++# CONFIG_NTFS_RW is not set
++# CONFIG_HPFS_FS is not set
++CONFIG_PROC_FS=y
++# CONFIG_DEVFS_FS is not set
++# CONFIG_DEVFS_MOUNT is not set
++# CONFIG_DEVFS_DEBUG is not set
++CONFIG_DEVPTS_FS=y
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_QNX4FS_RW is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_EXT2_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_UDF_RW is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_UFS_FS_WRITE is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_XFS_QUOTA is not set
++# CONFIG_XFS_RT is not set
++# CONFIG_XFS_TRACE is not set
++# CONFIG_XFS_DEBUG is not set
++
++#
++# Network File Systems
++#
++# CONFIG_CODA_FS is not set
++# CONFIG_INTERMEZZO_FS is not set
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_NFS_DIRECTIO is not set
++CONFIG_ROOT_NFS=y
++# CONFIG_NFSD is not set
++# CONFIG_NFSD_V3 is not set
++# CONFIG_NFSD_TCP is not set
++CONFIG_SUNRPC=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++# CONFIG_SMB_FS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_NCPFS_PACKET_SIGNING is not set
++# CONFIG_NCPFS_IOCTL_LOCKING is not set
++# CONFIG_NCPFS_STRONG is not set
++# CONFIG_NCPFS_NFS_NS is not set
++# CONFIG_NCPFS_OS2_NS is not set
++# CONFIG_NCPFS_SMALLDOS is not set
++# CONFIG_NCPFS_NLS is not set
++# CONFIG_NCPFS_EXTRAS is not set
++# CONFIG_ZISOFS_FS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_SMB_NLS is not set
++CONFIG_NLS=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS_DEFAULT="iso8859-1"
++# CONFIG_NLS_CODEPAGE_437 is not set
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ISO8859_1 is not set
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Console drivers
++#
++# CONFIG_VGA_CONSOLE is not set
++# CONFIG_MDA_CONSOLE is not set
++
++#
++# Frame-buffer support
++#
++CONFIG_FB=y
++CONFIG_DUMMY_CONSOLE=y
++# CONFIG_FB_RIVA is not set
++# CONFIG_FB_CLGEN is not set
++# CONFIG_FB_PM2 is not set
++# CONFIG_FB_PM3 is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_MATROX is not set
++# CONFIG_FB_ATY is not set
++# CONFIG_FB_RADEON is not set
++# CONFIG_FB_ATY128 is not set
++# CONFIG_FB_INTEL is not set
++# CONFIG_FB_SIS is not set
++# CONFIG_FB_NEOMAGIC is not set
++# CONFIG_FB_3DFX is not set
++# CONFIG_FB_VOODOO1 is not set
++# CONFIG_FB_TRIDENT is not set
++# CONFIG_FB_E1356 is not set
++# CONFIG_FB_IT8181 is not set
++# CONFIG_FB_VIRTUAL is not set
++CONFIG_FBCON_ADVANCED=y
++# CONFIG_FBCON_MFB is not set
++# CONFIG_FBCON_CFB2 is not set
++# CONFIG_FBCON_CFB4 is not set
++# CONFIG_FBCON_CFB8 is not set
++CONFIG_FBCON_CFB16=y
++# CONFIG_FBCON_CFB24 is not set
++CONFIG_FBCON_CFB32=y
++# CONFIG_FBCON_AFB is not set
++# CONFIG_FBCON_ILBM is not set
++# CONFIG_FBCON_IPLAN2P2 is not set
++# CONFIG_FBCON_IPLAN2P4 is not set
++# CONFIG_FBCON_IPLAN2P8 is not set
++# CONFIG_FBCON_MAC is not set
++# CONFIG_FBCON_VGA_PLANES is not set
++# CONFIG_FBCON_VGA is not set
++# CONFIG_FBCON_HGA is not set
++# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
++CONFIG_FBCON_FONTS=y
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++# CONFIG_SOUND_ALI5455 is not set
++# CONFIG_SOUND_BT878 is not set
++# CONFIG_SOUND_CMPCI is not set
++# CONFIG_SOUND_EMU10K1 is not set
++# CONFIG_MIDI_EMU10K1 is not set
++# CONFIG_SOUND_FUSION is not set
++# CONFIG_SOUND_CS4281 is not set
++# CONFIG_SOUND_ES1370 is not set
++# CONFIG_SOUND_ES1371 is not set
++# CONFIG_SOUND_ESSSOLO1 is not set
++# CONFIG_SOUND_MAESTRO is not set
++# CONFIG_SOUND_MAESTRO3 is not set
++# CONFIG_SOUND_FORTE is not set
++# CONFIG_SOUND_ICH is not set
++# CONFIG_SOUND_RME96XX is not set
++# CONFIG_SOUND_SONICVIBES is not set
++# CONFIG_SOUND_AU1X00 is not set
++CONFIG_SOUND_AU1550_PSC=y
++# CONFIG_SOUND_AU1550_I2S is not set
++# CONFIG_SOUND_TRIDENT is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++# CONFIG_SOUND_VIA82CXXX is not set
++# CONFIG_MIDI_VIA82CXXX is not set
++# CONFIG_SOUND_OSS is not set
++# CONFIG_SOUND_TVMIXER is not set
++# CONFIG_SOUND_AD1980 is not set
++# CONFIG_SOUND_WM97XX is not set
++
++#
++# USB support
++#
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_BANDWIDTH is not set
++
++#
++# USB Host Controller Drivers
++#
++# CONFIG_USB_EHCI_HCD is not set
++# CONFIG_USB_UHCI is not set
++# CONFIG_USB_UHCI_ALT is not set
++CONFIG_USB_OHCI=y
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_AUDIO is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_BLUETOOTH is not set
++# CONFIG_USB_MIDI is not set
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_HP8200e is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# USB Human Interface Devices (HID)
++#
++CONFIG_USB_HID=y
++CONFIG_USB_HIDINPUT=y
++CONFIG_USB_HIDDEV=y
++# CONFIG_USB_AIPTEK is not set
++# CONFIG_USB_WACOM is not set
++# CONFIG_USB_KBTAB is not set
++# CONFIG_USB_POWERMATE is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_DC2XX is not set
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_SCANNER is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_HPUSBSCSI is not set
++
++#
++# USB Multimedia devices
++#
++
++#
++#   Video4Linux support is needed for USB Multimedia device support
++#
++
++#
++# USB Network adaptors
++#
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_RTL8150 is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_CDCETHER is not set
++# CONFIG_USB_USBNET is not set
++
++#
++# USB port drivers
++#
++# CONFIG_USB_USS720 is not set
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_TIGL is not set
++# CONFIG_USB_BRLVGER is not set
++# CONFIG_USB_LCD is not set
++
++#
++# Support for USB gadgets
++#
++# CONFIG_USB_GADGET is not set
++
++#
++# Bluetooth support
++#
++# CONFIG_BLUEZ is not set
++
++#
++# Kernel hacking
++#
++CONFIG_CROSSCOMPILE=y
++# CONFIG_RUNTIME_DEBUG is not set
++# CONFIG_KGDB is not set
++# CONFIG_GDB_CONSOLE is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_MIPS_UNCACHED is not set
++CONFIG_LOG_BUF_SHIFT=0
++
++#
++# Cryptographic options
++#
++# CONFIG_CRYPTO is not set
++
++#
++# Library routines
++#
++# CONFIG_CRC32 is not set
++CONFIG_ZLIB_INFLATE=m
++CONFIG_ZLIB_DEFLATE=m
++# CONFIG_FW_LOADER is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-pb1500 linux-mips/arch/mips/defconfig-pb1500
+--- linux-2.4.29/arch/mips/defconfig-pb1500    2005-01-19 15:09:28.000000000 +0100
++++ linux-mips/arch/mips/defconfig-pb1500      2005-02-12 04:05:28.000000000 +0100
+@@ -22,16 +22,19 @@
+ #
+ # CONFIG_ACER_PICA_61 is not set
+ # CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
+ # CONFIG_MIPS_MIRAGE is not set
+ # CONFIG_MIPS_DB1000 is not set
+ # CONFIG_MIPS_DB1100 is not set
+ # CONFIG_MIPS_DB1500 is not set
+ # CONFIG_MIPS_DB1550 is not set
++# CONFIG_MIPS_DB1200 is not set
+ # CONFIG_MIPS_PB1000 is not set
+ # CONFIG_MIPS_PB1100 is not set
+ CONFIG_MIPS_PB1500=y
+-# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_PB1550 is not set
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_XXS1500 is not set
+ # CONFIG_MIPS_MTX1 is not set
+ # CONFIG_COGENT_CSB250 is not set
+@@ -341,11 +344,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-pb1550 linux-mips/arch/mips/defconfig-pb1550
+--- linux-2.4.29/arch/mips/defconfig-pb1550    2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-pb1550      2005-02-12 04:05:28.000000000 +0100
+@@ -22,16 +22,19 @@
+ #
+ # CONFIG_ACER_PICA_61 is not set
+ # CONFIG_MIPS_BOSPORUS is not set
++# CONFIG_MIPS_FICMMP is not set
+ # CONFIG_MIPS_MIRAGE is not set
+ # CONFIG_MIPS_DB1000 is not set
+ # CONFIG_MIPS_DB1100 is not set
+ # CONFIG_MIPS_DB1500 is not set
+ # CONFIG_MIPS_DB1550 is not set
++# CONFIG_MIPS_DB1200 is not set
+ # CONFIG_MIPS_PB1000 is not set
+ # CONFIG_MIPS_PB1100 is not set
+ # CONFIG_MIPS_PB1500 is not set
+-# CONFIG_MIPS_HYDROGEN3 is not set
+ CONFIG_MIPS_PB1550=y
++# CONFIG_MIPS_PB1200 is not set
++# CONFIG_MIPS_HYDROGEN3 is not set
+ # CONFIG_MIPS_XXS1500 is not set
+ # CONFIG_MIPS_MTX1 is not set
+ # CONFIG_COGENT_CSB250 is not set
+@@ -343,11 +346,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-rbtx4927 linux-mips/arch/mips/defconfig-rbtx4927
+--- linux-2.4.29/arch/mips/defconfig-rbtx4927  2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-rbtx4927    2005-01-09 20:33:59.000000000 +0100
+@@ -223,11 +223,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-rm200 linux-mips/arch/mips/defconfig-rm200
+--- linux-2.4.29/arch/mips/defconfig-rm200     2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-rm200       2005-01-09 20:33:59.000000000 +0100
+@@ -229,11 +229,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-sb1250-swarm linux-mips/arch/mips/defconfig-sb1250-swarm
+--- linux-2.4.29/arch/mips/defconfig-sb1250-swarm      2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-sb1250-swarm        2005-01-09 20:33:59.000000000 +0100
+@@ -90,6 +90,7 @@
+ # CONFIG_SIBYTE_TBPROF is not set
+ CONFIG_SIBYTE_GENBUS_IDE=y
+ CONFIG_SMP_CAPABLE=y
++CONFIG_MIPS_RTC=y
+ # CONFIG_SNI_RM200_PCI is not set
+ # CONFIG_TANBAC_TB0226 is not set
+ # CONFIG_TANBAC_TB0229 is not set
+@@ -253,11 +254,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-stretch linux-mips/arch/mips/defconfig-stretch
+--- linux-2.4.29/arch/mips/defconfig-stretch   2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-stretch     2005-01-09 20:33:59.000000000 +0100
+@@ -240,11 +240,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -324,6 +319,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-tb0226 linux-mips/arch/mips/defconfig-tb0226
+--- linux-2.4.29/arch/mips/defconfig-tb0226    2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-tb0226      2005-01-09 20:34:00.000000000 +0100
+@@ -228,11 +228,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -312,6 +307,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-tb0229 linux-mips/arch/mips/defconfig-tb0229
+--- linux-2.4.29/arch/mips/defconfig-tb0229    2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-tb0229      2005-01-09 20:34:00.000000000 +0100
+@@ -230,11 +230,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-ti1500 linux-mips/arch/mips/defconfig-ti1500
+--- linux-2.4.29/arch/mips/defconfig-ti1500    2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-ti1500      2005-01-09 20:34:00.000000000 +0100
+@@ -339,11 +339,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-workpad linux-mips/arch/mips/defconfig-workpad
+--- linux-2.4.29/arch/mips/defconfig-workpad   2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-workpad     2005-01-09 20:34:00.000000000 +0100
+@@ -222,11 +222,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-xxs1500 linux-mips/arch/mips/defconfig-xxs1500
+--- linux-2.4.29/arch/mips/defconfig-xxs1500   2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-xxs1500     2005-01-09 20:34:00.000000000 +0100
+@@ -339,11 +339,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips/defconfig-yosemite linux-mips/arch/mips/defconfig-yosemite
+--- linux-2.4.29/arch/mips/defconfig-yosemite  2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/defconfig-yosemite    2005-01-09 20:34:00.000000000 +0100
+@@ -227,11 +227,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -310,6 +305,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips/kernel/cpu-probe.c linux-mips/arch/mips/kernel/cpu-probe.c
+--- linux-2.4.29/arch/mips/kernel/cpu-probe.c  2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/kernel/cpu-probe.c    2005-01-31 12:59:30.000000000 +0100
+@@ -105,6 +105,7 @@
+       case CPU_AU1100:
+       case CPU_AU1500:
+       case CPU_AU1550:
++      case CPU_AU1200:
+               if (au1k_wait_ptr != NULL) {
+                       cpu_wait = au1k_wait_ptr;
+                       printk(" available.\n");
+diff -Nur linux-2.4.29/arch/mips/kernel/head.S linux-mips/arch/mips/kernel/head.S
+--- linux-2.4.29/arch/mips/kernel/head.S       2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/kernel/head.S 2004-11-22 14:38:23.000000000 +0100
+@@ -43,9 +43,9 @@
+               /* Cache Error */
+               LEAF(except_vec2_generic)
++              .set    push
+               .set    noreorder
+               .set    noat
+-              .set    mips0
+               /*
+                * This is a very bad place to be.  Our cache error
+                * detection has triggered.  If we have write-back data
+@@ -64,10 +64,9 @@
+               j       cache_parity_error
+                nop
++              .set    pop
+               END(except_vec2_generic)
+-              .set    at
+-
+               /*
+                * Special interrupt vector for embedded MIPS.  This is a
+                * dedicated interrupt vector which reduces interrupt processing
+@@ -76,8 +75,11 @@
+                * size!
+                */
+               NESTED(except_vec4, 0, sp)
++              .set    push
++              .set    noreorder
+ 1:            j       1b                      /* Dummy, will be replaced */
+                nop
++              .set    pop
+               END(except_vec4)
+               /*
+@@ -87,8 +89,11 @@
+                * unconditional jump to this vector.
+                */
+               NESTED(except_vec_ejtag_debug, 0, sp)
++              .set    push
++              .set    noreorder
+               j       ejtag_debug_handler
+                nop
++              .set    pop
+               END(except_vec_ejtag_debug)
+               __FINIT
+@@ -97,6 +102,7 @@
+                * EJTAG debug exception handler.
+                */
+               NESTED(ejtag_debug_handler, PT_SIZE, sp)
++              .set    push
+               .set    noat
+               .set    noreorder
+               mtc0    k0, CP0_DESAVE
+@@ -120,7 +126,7 @@
+               deret
+               .set    mips0
+                nop
+-              .set    at
++              .set    pop
+               END(ejtag_debug_handler)
+               __INIT
+@@ -132,13 +138,17 @@
+               * unconditional jump to this vector.
+               */
+               NESTED(except_vec_nmi, 0, sp)
++              .set    push
++              .set    noreorder
+               j       nmi_handler
+                nop
++              .set    pop
+               END(except_vec_nmi)
+               __FINIT
+               NESTED(nmi_handler, PT_SIZE, sp)
++              .set    push
+               .set    noat
+               .set    noreorder
+               .set    mips3
+@@ -147,8 +157,7 @@
+                move   a0, sp
+               RESTORE_ALL
+               eret
+-              .set    at
+-              .set    mips0
++              .set    pop
+               END(nmi_handler)
+               __INIT
+@@ -157,7 +166,20 @@
+                * Kernel entry point
+                */
+               NESTED(kernel_entry, 16, sp)
++              .set    push
++              /*
++               * For the moment disable interrupts and mark the kernel mode.
++               * A full initialization of the CPU's status register is done
++               * later in per_cpu_trap_init().
++               */
++              mfc0    t0, CP0_STATUS
++              or      t0, ST0_CU0|0x1f
++              xor     t0, 0x1f
++              mtc0    t0, CP0_STATUS
++
+               .set    noreorder
++              sll     zero,3                          # ehb
++              .set    reorder
+               /*
+                * The firmware/bootloader passes argc/argp/envp
+@@ -170,8 +192,8 @@
+               la      t1, (_end - 4)
+ 1:
+               addiu   t0, 4
++              sw      zero, (t0)
+               bne     t0, t1, 1b
+-               sw     zero, (t0)
+               /*
+                * Stack for kernel and init, current variable
+@@ -182,7 +204,7 @@
+               sw      t0, kernelsp
+               jal     init_arch
+-               nop
++              .set    pop
+               END(kernel_entry)
+@@ -193,17 +215,26 @@
+  * function after setting up the stack and gp registers.
+  */
+               LEAF(smp_bootstrap)
+-              .set push
+-              .set noreorder
+-              mtc0    zero, CP0_WIRED
+-              CLI
++              .set    push
++              /*
++               * For the moment disable interrupts and bootstrap exception
++               * vectors and mark the kernel mode.  A full initialization of
++               * the CPU's status register is done later in
++               * per_cpu_trap_init().
++               */
+               mfc0    t0, CP0_STATUS
+-              li      t1, ~(ST0_CU1|ST0_CU2|ST0_CU3|ST0_KX|ST0_SX|ST0_UX)
+-              and     t0, t1
+-              or      t0, (ST0_CU0);
++              or      t0, ST0_CU0|ST0_BEV|0x1f
++              xor     t0, ST0_BEV|0x1f
++              mtc0    t0, CP0_STATUS
++
++              .set    noreorder
++              sll     zero,3                          # ehb
++              .set    reorder
++
++              mtc0    zero, CP0_WIRED
++
+               jal     start_secondary
+-               mtc0   t0, CP0_STATUS
+-              .set pop
++              .set    pop
+               END(smp_bootstrap)
+ #endif
+diff -Nur linux-2.4.29/arch/mips/kernel/scall_o32.S linux-mips/arch/mips/kernel/scall_o32.S
+--- linux-2.4.29/arch/mips/kernel/scall_o32.S  2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/kernel/scall_o32.S    2005-02-12 04:05:33.000000000 +0100
+@@ -121,15 +121,14 @@
+ trace_a_syscall:
+       SAVE_STATIC
+-      sw      t2, PT_R1(sp)
++      move    s0, t2
+       jal     syscall_trace
+-      lw      t2, PT_R1(sp)
+       lw      a0, PT_R4(sp)           # Restore argument registers
+       lw      a1, PT_R5(sp)
+       lw      a2, PT_R6(sp)
+       lw      a3, PT_R7(sp)
+-      jalr    t2
++      jalr    s0
+       li      t0, -EMAXERRNO - 1      # error?
+       sltu    t0, t0, v0
+diff -Nur linux-2.4.29/arch/mips/kernel/setup.c linux-mips/arch/mips/kernel/setup.c
+--- linux-2.4.29/arch/mips/kernel/setup.c      2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/kernel/setup.c        2005-01-13 22:15:57.000000000 +0100
+@@ -5,7 +5,7 @@
+  *
+  * Copyright (C) 1995  Linus Torvalds
+  * Copyright (C) 1995  Waldorf Electronics
+- * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001  Ralf Baechle
++ * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 01, 05  Ralf Baechle
+  * Copyright (C) 1996  Stoned Elipot
+  * Copyright (C) 2000, 2001, 2002  Maciej W. Rozycki
+  */
+@@ -71,6 +71,8 @@
+ extern struct rtc_ops no_rtc_ops;
+ struct rtc_ops *rtc_ops;
++EXPORT_SYMBOL(rtc_ops);
++
+ #ifdef CONFIG_PC_KEYB
+ struct kbd_ops *kbd_ops;
+ #endif
+@@ -132,10 +134,6 @@
+        */
+       load_mmu();
+-      /* Disable coprocessors and set FPU for 16/32 FPR register model */
+-      clear_c0_status(ST0_CU1|ST0_CU2|ST0_CU3|ST0_KX|ST0_SX|ST0_FR);
+-      set_c0_status(ST0_CU0);
+-
+       start_kernel();
+ }
+diff -Nur linux-2.4.29/arch/mips/kernel/traps.c linux-mips/arch/mips/kernel/traps.c
+--- linux-2.4.29/arch/mips/kernel/traps.c      2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/kernel/traps.c        2004-11-22 14:38:23.000000000 +0100
+@@ -887,12 +887,18 @@
+ void __init per_cpu_trap_init(void)
+ {
+       unsigned int cpu = smp_processor_id();
++      unsigned int status_set = ST0_CU0;
+-      /* Some firmware leaves the BEV flag set, clear it.  */
+-      clear_c0_status(ST0_CU3|ST0_CU2|ST0_CU1|ST0_BEV|ST0_KX|ST0_SX|ST0_UX);
+-
++      /*
++       * Disable coprocessors and 64-bit addressing and set FPU for
++       * the 16/32 FPR register model.  Reset the BEV flag that some
++       * firmware may have left set and the TS bit (for IP27).  Set
++       * XX for ISA IV code to work.
++       */
+       if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV)
+-              set_c0_status(ST0_XX);
++              status_set |= ST0_XX;
++      change_c0_status(ST0_CU|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX,
++                       status_set);
+       /*
+        * Some MIPS CPUs have a dedicated interrupt vector which reduces the
+@@ -902,7 +908,7 @@
+               set_c0_cause(CAUSEF_IV);
+       cpu_data[cpu].asid_cache = ASID_FIRST_VERSION;
+-      write_c0_context(cpu << 23);
++      TLBMISS_HANDLER_SETUP();
+       atomic_inc(&init_mm.mm_count);
+       current->active_mm = &init_mm;
+@@ -918,8 +924,6 @@
+       extern char except_vec4;
+       unsigned long i;
+-      per_cpu_trap_init();
+-
+       /* Copy the generic exception handler code to it's final destination. */
+       memcpy((void *)(KSEG0 + 0x80), &except_vec1_generic, 0x80);
+@@ -1020,10 +1024,5 @@
+       flush_icache_range(KSEG0, KSEG0 + 0x400);
+-      atomic_inc(&init_mm.mm_count);  /* XXX UP?  */
+-      current->active_mm = &init_mm;
+-
+-      /* XXX Must be done for all CPUs  */
+-      current_cpu_data.asid_cache = ASID_FIRST_VERSION;
+-      TLBMISS_HANDLER_SETUP();
++      per_cpu_trap_init();
+ }
+diff -Nur linux-2.4.29/arch/mips/lib/rtc-no.c linux-mips/arch/mips/lib/rtc-no.c
+--- linux-2.4.29/arch/mips/lib/rtc-no.c        2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips/lib/rtc-no.c  2005-01-13 22:15:57.000000000 +0100
+@@ -6,10 +6,9 @@
+  * Stub RTC routines to keep Linux from crashing on machine which don't
+  * have a RTC chip.
+  *
+- * Copyright (C) 1998, 2001 by Ralf Baechle
++ * Copyright (C) 1998, 2001, 2005 by Ralf Baechle
+  */
+ #include <linux/kernel.h>
+-#include <linux/module.h>
+ #include <linux/mc146818rtc.h>
+ static unsigned int shouldnt_happen(void)
+@@ -29,5 +28,3 @@
+     .rtc_write_data = (void *) &shouldnt_happen,
+     .rtc_bcd_mode   = (void *) &shouldnt_happen
+ };
+-
+-EXPORT_SYMBOL(rtc_ops);
+diff -Nur linux-2.4.29/arch/mips/lib/rtc-std.c linux-mips/arch/mips/lib/rtc-std.c
+--- linux-2.4.29/arch/mips/lib/rtc-std.c       2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips/lib/rtc-std.c 2005-01-13 22:15:57.000000000 +0100
+@@ -5,9 +5,8 @@
+  *
+  * RTC routines for PC style attached Dallas chip.
+  *
+- * Copyright (C) 1998, 2001 by Ralf Baechle
++ * Copyright (C) 1998, 2001, 05 by Ralf Baechle
+  */
+-#include <linux/module.h>
+ #include <linux/mc146818rtc.h>
+ #include <asm/io.h>
+@@ -33,5 +32,3 @@
+       &std_rtc_write_data,
+       &std_rtc_bcd_mode
+ };
+-
+-EXPORT_SYMBOL(rtc_ops);
+diff -Nur linux-2.4.29/arch/mips/mm/c-r4k.c linux-mips/arch/mips/mm/c-r4k.c
+--- linux-2.4.29/arch/mips/mm/c-r4k.c  2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/mm/c-r4k.c    2005-02-12 04:05:35.000000000 +0100
+@@ -867,9 +867,16 @@
+        * normally they'd suffer from aliases but magic in the hardware deals
+        * with that for us so we don't need to take care ourselves.
+        */
+-      if (c->cputype != CPU_R10000 && c->cputype != CPU_R12000)
+-              if (c->dcache.waysize > PAGE_SIZE)
+-                      c->dcache.flags |= MIPS_CACHE_ALIASES;
++      switch (c->cputype) {
++      case CPU_R10000:
++      case CPU_R12000:
++              break;
++      case CPU_24K:
++              if (!(read_c0_config7() & (1 << 16)))
++      default:
++                      if (c->dcache.waysize > PAGE_SIZE)
++                              c->dcache.flags |= MIPS_CACHE_ALIASES;
++      }
+       switch (c->cputype) {
+       case CPU_20KC:
+@@ -1069,9 +1076,6 @@
+       probe_pcache();
+       setup_scache();
+-      if (c->dcache.sets * c->dcache.ways > PAGE_SIZE)
+-              c->dcache.flags |= MIPS_CACHE_ALIASES;
+-
+       r4k_blast_dcache_page_setup();
+       r4k_blast_dcache_page_indexed_setup();
+       r4k_blast_dcache_setup();
+diff -Nur linux-2.4.29/arch/mips/mm/cerr-sb1.c linux-mips/arch/mips/mm/cerr-sb1.c
+--- linux-2.4.29/arch/mips/mm/cerr-sb1.c       2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips/mm/cerr-sb1.c 2004-12-13 18:37:23.000000000 +0100
+@@ -252,14 +252,14 @@
+ /* Masks to select bits for Hamming parity, mask_72_64[i] for bit[i] */
+ static const uint64_t mask_72_64[8] = {
+-      0x0738C808099264FFL,
+-      0x38C808099264FF07L,
+-      0xC808099264FF0738L,
+-      0x08099264FF0738C8L,
+-      0x099264FF0738C808L,
+-      0x9264FF0738C80809L,
+-      0x64FF0738C8080992L,
+-      0xFF0738C808099264L
++      0x0738C808099264FFULL,
++      0x38C808099264FF07ULL,
++      0xC808099264FF0738ULL,
++      0x08099264FF0738C8ULL,
++      0x099264FF0738C808ULL,
++      0x9264FF0738C80809ULL,
++      0x64FF0738C8080992ULL,
++      0xFF0738C808099264ULL
+ };
+ /* Calculate the parity on a range of bits */
+@@ -331,9 +331,9 @@
+                                   ((lru >> 4) & 0x3),
+                                   ((lru >> 6) & 0x3));
+               }
+-              va = (taglo & 0xC0000FFFFFFFE000) | addr;
++              va = (taglo & 0xC0000FFFFFFFE000ULL) | addr;
+               if ((taglo & (1 << 31)) && (((taglo >> 62) & 0x3) == 3))
+-                      va |= 0x3FFFF00000000000;
++                      va |= 0x3FFFF00000000000ULL;
+               valid = ((taghi >> 29) & 1);
+               if (valid) {
+                       tlo_tmp = taglo & 0xfff3ff;
+@@ -474,7 +474,7 @@
+               : "r" ((way << 13) | addr));
+               taglo = ((unsigned long long)taglohi << 32) | taglolo;
+-              pa = (taglo & 0xFFFFFFE000) | addr;
++              pa = (taglo & 0xFFFFFFE000ULL) | addr;
+               if (way == 0) {
+                       lru = (taghi >> 14) & 0xff;
+                       prom_printf("[Bank %d Set 0x%02x]  LRU > %d %d %d %d > MRU\n",
+diff -Nur linux-2.4.29/arch/mips/mm/tlb-r4k.c linux-mips/arch/mips/mm/tlb-r4k.c
+--- linux-2.4.29/arch/mips/mm/tlb-r4k.c        2005-01-19 15:09:29.000000000 +0100
++++ linux-mips/arch/mips/mm/tlb-r4k.c  2004-11-25 23:18:38.000000000 +0100
+@@ -3,17 +3,12 @@
+  * License.  See the file "COPYING" in the main directory of this archive
+  * for more details.
+  *
+- * r4xx0.c: R4000 processor variant specific MMU/Cache routines.
+- *
+  * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
+  * Copyright (C) 1997, 1998, 1999, 2000 Ralf Baechle ralf@gnu.org
+- *
+- * To do:
+- *
+- *  - this code is a overbloated pig
+- *  - many of the bug workarounds are not efficient at all, but at
+- *    least they are functional ...
++ * Carsten Langgaard, carstenl@mips.com
++ * Copyright (C) 2002 MIPS Technologies, Inc.  All rights reserved.
+  */
++#include <linux/config.h>
+ #include <linux/init.h>
+ #include <linux/sched.h>
+ #include <linux/mm.h>
+@@ -25,9 +20,6 @@
+ #include <asm/pgtable.h>
+ #include <asm/system.h>
+-#undef DEBUG_TLB
+-#undef DEBUG_TLBUPDATE
+-
+ extern char except_vec0_nevada, except_vec0_r4000, except_vec0_r4600;
+ /* CP0 hazard avoidance. */
+@@ -41,33 +33,23 @@
+       unsigned long old_ctx;
+       int entry;
+-#ifdef DEBUG_TLB
+-      printk("[tlball]");
+-#endif
+-
+       local_irq_save(flags);
+       /* Save old context and create impossible VPN2 value */
+       old_ctx = read_c0_entryhi();
+       write_c0_entrylo0(0);
+       write_c0_entrylo1(0);
+-      BARRIER;
+       entry = read_c0_wired();
+       /* Blast 'em all away. */
+       while (entry < current_cpu_data.tlbsize) {
+-              /*
+-               * Make sure all entries differ.  If they're not different
+-               * MIPS32 will take revenge ...
+-               */
+               write_c0_entryhi(KSEG0 + entry*0x2000);
+               write_c0_index(entry);
+-              BARRIER;
++              mtc0_tlbw_hazard();
+               tlb_write_indexed();
+-              BARRIER;
+               entry++;
+       }
+-      BARRIER;
++      tlbw_use_hazard();
+       write_c0_entryhi(old_ctx);
+       local_irq_restore(flags);
+ }
+@@ -76,12 +58,8 @@
+ {
+       int cpu = smp_processor_id();
+-      if (cpu_context(cpu, mm) != 0) {
+-#ifdef DEBUG_TLB
+-              printk("[tlbmm<%d>]", cpu_context(cpu, mm));
+-#endif
++      if (cpu_context(cpu, mm) != 0)
+               drop_mmu_context(mm,cpu);
+-      }
+ }
+ void local_flush_tlb_range(struct mm_struct *mm, unsigned long start,
+@@ -93,10 +71,6 @@
+               unsigned long flags;
+               int size;
+-#ifdef DEBUG_TLB
+-              printk("[tlbrange<%02x,%08lx,%08lx>]",
+-                     cpu_asid(cpu, mm), start, end);
+-#endif
+               local_irq_save(flags);
+               size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
+               size = (size + 1) >> 1;
+@@ -112,7 +86,7 @@
+                               write_c0_entryhi(start | newpid);
+                               start += (PAGE_SIZE << 1);
+-                              BARRIER;
++                              mtc0_tlbw_hazard();
+                               tlb_probe();
+                               BARRIER;
+                               idx = read_c0_index();
+@@ -122,10 +96,10 @@
+                                       continue;
+                               /* Make sure all entries differ. */
+                               write_c0_entryhi(KSEG0 + idx*0x2000);
+-                              BARRIER;
++                              mtc0_tlbw_hazard();
+                               tlb_write_indexed();
+-                              BARRIER;
+                       }
++                      tlbw_use_hazard();
+                       write_c0_entryhi(oldpid);
+               } else {
+                       drop_mmu_context(mm, cpu);
+@@ -138,34 +112,30 @@
+ {
+       int cpu = smp_processor_id();
+-      if (!vma || cpu_context(cpu, vma->vm_mm) != 0) {
++      if (cpu_context(cpu, vma->vm_mm) != 0) {
+               unsigned long flags;
+-              int oldpid, newpid, idx;
++              unsigned long oldpid, newpid, idx;
+-#ifdef DEBUG_TLB
+-              printk("[tlbpage<%d,%08lx>]", cpu_context(cpu, vma->vm_mm),
+-                     page);
+-#endif
+               newpid = cpu_asid(cpu, vma->vm_mm);
+               page &= (PAGE_MASK << 1);
+               local_irq_save(flags);
+               oldpid = read_c0_entryhi();
+               write_c0_entryhi(page | newpid);
+-              BARRIER;
++              mtc0_tlbw_hazard();
+               tlb_probe();
+               BARRIER;
+               idx = read_c0_index();
+               write_c0_entrylo0(0);
+               write_c0_entrylo1(0);
+-              if(idx < 0)
++              if (idx < 0)
+                       goto finish;
+               /* Make sure all entries differ. */
+               write_c0_entryhi(KSEG0+idx*0x2000);
+-              BARRIER;
++              mtc0_tlbw_hazard();
+               tlb_write_indexed();
++              tlbw_use_hazard();
+       finish:
+-              BARRIER;
+               write_c0_entryhi(oldpid);
+               local_irq_restore(flags);
+       }
+@@ -185,7 +155,7 @@
+       local_irq_save(flags);
+       write_c0_entryhi(page);
+-      BARRIER;
++      mtc0_tlbw_hazard();
+       tlb_probe();
+       BARRIER;
+       idx = read_c0_index();
+@@ -194,18 +164,19 @@
+       if (idx >= 0) {
+               /* Make sure all entries differ. */
+               write_c0_entryhi(KSEG0+idx*0x2000);
++              mtc0_tlbw_hazard();
+               tlb_write_indexed();
++              tlbw_use_hazard();
+       }
+-      BARRIER;
+       write_c0_entryhi(oldpid);
++
+       local_irq_restore(flags);
+ }
+ EXPORT_SYMBOL(local_flush_tlb_one);
+-/* We will need multiple versions of update_mmu_cache(), one that just
+- * updates the TLB with the new pte(s), and another which also checks
+- * for the R4k "end of page" hardware bug and does the needy.
++/*
++ * Updates the TLB with the new pte(s).
+  */
+ void __update_tlb(struct vm_area_struct * vma, unsigned long address, pte_t pte)
+ {
+@@ -223,25 +194,16 @@
+       pid = read_c0_entryhi() & ASID_MASK;
+-#ifdef DEBUG_TLB
+-      if ((pid != cpu_asid(cpu, vma->vm_mm)) ||
+-          (cpu_context(vma->vm_mm) == 0)) {
+-              printk("update_mmu_cache: Wheee, bogus tlbpid mmpid=%d "
+-                     "tlbpid=%d\n", (int) (cpu_asid(cpu, vma->vm_mm)), pid);
+-      }
+-#endif
+-
+       local_irq_save(flags);
+       address &= (PAGE_MASK << 1);
+       write_c0_entryhi(address | pid);
+       pgdp = pgd_offset(vma->vm_mm, address);
+-      BARRIER;
++      mtc0_tlbw_hazard();
+       tlb_probe();
+       BARRIER;
+       pmdp = pmd_offset(pgdp, address);
+       idx = read_c0_index();
+       ptep = pte_offset(pmdp, address);
+-      BARRIER;
+ #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32)
+       write_c0_entrylo0(ptep->pte_high);
+       ptep++;
+@@ -251,15 +213,13 @@
+       write_c0_entrylo1(pte_val(*ptep) >> 6);
+ #endif
+       write_c0_entryhi(address | pid);
+-      BARRIER;
+-      if (idx < 0) {
++      mtc0_tlbw_hazard();
++      if (idx < 0)
+               tlb_write_random();
+-      } else {
++      else
+               tlb_write_indexed();
+-      }
+-      BARRIER;
++      tlbw_use_hazard();
+       write_c0_entryhi(pid);
+-      BARRIER;
+       local_irq_restore(flags);
+ }
+@@ -279,24 +239,26 @@
+       asid = read_c0_entryhi() & ASID_MASK;
+       write_c0_entryhi(address | asid);
+       pgdp = pgd_offset(vma->vm_mm, address);
++      mtc0_tlbw_hazard();
+       tlb_probe();
++      BARRIER;
+       pmdp = pmd_offset(pgdp, address);
+       idx = read_c0_index();
+       ptep = pte_offset(pmdp, address);
+       write_c0_entrylo0(pte_val(*ptep++) >> 6);
+       write_c0_entrylo1(pte_val(*ptep) >> 6);
+-      BARRIER;
++      mtc0_tlbw_hazard();
+       if (idx < 0)
+               tlb_write_random();
+       else
+               tlb_write_indexed();
+-      BARRIER;
++      tlbw_use_hazard();
+       local_irq_restore(flags);
+ }
+ #endif
+ void __init add_wired_entry(unsigned long entrylo0, unsigned long entrylo1,
+-                   unsigned long entryhi, unsigned long pagemask)
++                          unsigned long entryhi, unsigned long pagemask)
+ {
+       unsigned long flags;
+       unsigned long wired;
+@@ -315,9 +277,9 @@
+       write_c0_entryhi(entryhi);
+       write_c0_entrylo0(entrylo0);
+       write_c0_entrylo1(entrylo1);
+-      BARRIER;
++      mtc0_tlbw_hazard();
+       tlb_write_indexed();
+-      BARRIER;
++      tlbw_use_hazard();
+       write_c0_entryhi(old_ctx);
+       BARRIER;
+@@ -355,17 +317,15 @@
+       }
+       write_c0_index(temp_tlb_entry);
+-      BARRIER;
+       write_c0_pagemask(pagemask);
+       write_c0_entryhi(entryhi);
+       write_c0_entrylo0(entrylo0);
+       write_c0_entrylo1(entrylo1);
+-      BARRIER;
++      mtc0_tlbw_hazard();
+       tlb_write_indexed();
+-      BARRIER;
++      tlbw_use_hazard();
+       write_c0_entryhi(old_ctx);
+-      BARRIER;
+       write_c0_pagemask(old_pagemask);
+ out:
+       local_irq_restore(flags);
+@@ -375,7 +335,7 @@
+ static void __init probe_tlb(unsigned long config)
+ {
+       struct cpuinfo_mips *c = &current_cpu_data;
+-      unsigned int reg;
++      unsigned int config1;
+       /*
+        * If this isn't a MIPS32 / MIPS64 compliant CPU.  Config 1 register
+@@ -385,16 +345,16 @@
+       if ((c->processor_id  & 0xff0000) == PRID_COMP_LEGACY)
+               return;
+-      reg = read_c0_config1();
++      config1 = read_c0_config1();
+       if (!((config >> 7) & 3))
+               panic("No TLB present");
+-      c->tlbsize = ((reg >> 25) & 0x3f) + 1;
++      c->tlbsize = ((config1 >> 25) & 0x3f) + 1;
+ }
+ void __init r4k_tlb_init(void)
+ {
+-      u32 config = read_c0_config();
++      unsigned int config = read_c0_config();
+       /*
+        * You should never change this register:
+diff -Nur linux-2.4.29/arch/mips/mm/tlbex-mips32.S linux-mips/arch/mips/mm/tlbex-mips32.S
+--- linux-2.4.29/arch/mips/mm/tlbex-mips32.S   2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips/mm/tlbex-mips32.S     2004-11-29 00:33:15.000000000 +0100
+@@ -196,7 +196,7 @@
+       .set    noat; \
+       SAVE_ALL; \
+       mfc0    a2, CP0_BADVADDR; \
+-      STI; \
++      KMODE; \
+       .set    at; \
+       move    a0, sp; \
+       jal     do_page_fault; \
+diff -Nur linux-2.4.29/arch/mips/mm/tlbex-r4k.S linux-mips/arch/mips/mm/tlbex-r4k.S
+--- linux-2.4.29/arch/mips/mm/tlbex-r4k.S      2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips/mm/tlbex-r4k.S        2004-11-25 23:18:38.000000000 +0100
+@@ -184,13 +184,10 @@
+       P_MTC0  k0, CP0_ENTRYLO0                # load it
+       PTE_SRL k1, k1, 6                       # convert to entrylo1
+       P_MTC0  k1, CP0_ENTRYLO1                # load it
+-      b       1f
+-      rm9000_tlb_hazard
++      mtc0_tlbw_hazard
+       tlbwr                                   # write random tlb entry
+-1:
+-      nop
+-      rm9000_tlb_hazard
+-      eret                                    # return from trap
++      tlbw_eret_hazard
++      eret
+       END(except_vec0_r4000)
+       /* TLB refill, EXL == 0, R4600 version */
+@@ -468,13 +465,10 @@
+       PTE_PRESENT(k0, k1, nopage_tlbl)
+       PTE_MAKEVALID(k0, k1)
+       PTE_RELOAD(k1, k0)
+-      rm9000_tlb_hazard
+-      nop
+-      b       1f
+-       tlbwi
+-1:
++      mtc0_tlbw_hazard
++      tlbwi
+       nop
+-      rm9000_tlb_hazard
++      tlbw_eret_hazard
+       .set    mips3
+       eret
+       .set    mips0
+@@ -496,13 +490,10 @@
+       PTE_WRITABLE(k0, k1, nopage_tlbs)
+       PTE_MAKEWRITE(k0, k1)
+       PTE_RELOAD(k1, k0)
+-      rm9000_tlb_hazard
+-      nop
+-      b       1f
+-       tlbwi
+-1:
++      mtc0_tlbw_hazard
++      tlbwi
+       nop
+-      rm9000_tlb_hazard
++      tlbw_eret_hazard
+       .set    mips3
+       eret
+       .set    mips0
+@@ -529,13 +520,10 @@
+       /* Now reload the entry into the tlb. */
+       PTE_RELOAD(k1, k0)
+-      rm9000_tlb_hazard
+-      nop
+-      b       1f
+-       tlbwi
+-1:
+-      rm9000_tlb_hazard
++      mtc0_tlbw_hazard
++      tlbwi
+       nop
++      tlbw_eret_hazard
+       .set    mips3
+       eret
+       .set    mips0
+diff -Nur linux-2.4.29/arch/mips64/defconfig linux-mips/arch/mips64/defconfig
+--- linux-2.4.29/arch/mips64/defconfig 2005-01-19 15:09:30.000000000 +0100
++++ linux-mips/arch/mips64/defconfig   2005-01-20 03:19:22.000000000 +0100
+@@ -470,6 +470,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips64/defconfig-atlas linux-mips/arch/mips64/defconfig-atlas
+--- linux-2.4.29/arch/mips64/defconfig-atlas   2005-01-19 15:09:30.000000000 +0100
++++ linux-mips/arch/mips64/defconfig-atlas     2005-01-09 20:34:01.000000000 +0100
+@@ -232,11 +232,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -314,6 +309,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips64/defconfig-decstation linux-mips/arch/mips64/defconfig-decstation
+--- linux-2.4.29/arch/mips64/defconfig-decstation      2005-01-19 15:09:30.000000000 +0100
++++ linux-mips/arch/mips64/defconfig-decstation        2005-01-09 20:34:01.000000000 +0100
+@@ -224,11 +224,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -307,6 +302,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips64/defconfig-ip22 linux-mips/arch/mips64/defconfig-ip22
+--- linux-2.4.29/arch/mips64/defconfig-ip22    2005-01-19 15:09:31.000000000 +0100
++++ linux-mips/arch/mips64/defconfig-ip22      2005-01-09 20:34:01.000000000 +0100
+@@ -235,11 +235,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -319,6 +314,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips64/defconfig-ip27 linux-mips/arch/mips64/defconfig-ip27
+--- linux-2.4.29/arch/mips64/defconfig-ip27    2005-01-19 15:09:31.000000000 +0100
++++ linux-mips/arch/mips64/defconfig-ip27      2005-01-20 03:19:22.000000000 +0100
+@@ -470,6 +470,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips64/defconfig-jaguar linux-mips/arch/mips64/defconfig-jaguar
+--- linux-2.4.29/arch/mips64/defconfig-jaguar  2005-01-19 15:09:31.000000000 +0100
++++ linux-mips/arch/mips64/defconfig-jaguar    2005-01-09 20:34:01.000000000 +0100
+@@ -227,11 +227,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips64/defconfig-malta linux-mips/arch/mips64/defconfig-malta
+--- linux-2.4.29/arch/mips64/defconfig-malta   2005-01-19 15:09:31.000000000 +0100
++++ linux-mips/arch/mips64/defconfig-malta     2005-01-09 20:34:01.000000000 +0100
+@@ -235,11 +235,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+@@ -317,6 +312,7 @@
+ # CONFIG_SCSI_MEGARAID is not set
+ # CONFIG_SCSI_MEGARAID2 is not set
+ # CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_SATA_AHCI is not set
+ # CONFIG_SCSI_SATA_SVW is not set
+ # CONFIG_SCSI_ATA_PIIX is not set
+ # CONFIG_SCSI_SATA_NV is not set
+diff -Nur linux-2.4.29/arch/mips64/defconfig-ocelotc linux-mips/arch/mips64/defconfig-ocelotc
+--- linux-2.4.29/arch/mips64/defconfig-ocelotc 2005-01-19 15:09:31.000000000 +0100
++++ linux-mips/arch/mips64/defconfig-ocelotc   2005-01-09 20:34:01.000000000 +0100
+@@ -231,11 +231,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips64/defconfig-sb1250-swarm linux-mips/arch/mips64/defconfig-sb1250-swarm
+--- linux-2.4.29/arch/mips64/defconfig-sb1250-swarm    2005-01-19 15:09:31.000000000 +0100
++++ linux-mips/arch/mips64/defconfig-sb1250-swarm      2005-01-09 20:34:01.000000000 +0100
+@@ -90,6 +90,7 @@
+ # CONFIG_SIBYTE_TBPROF is not set
+ CONFIG_SIBYTE_GENBUS_IDE=y
+ CONFIG_SMP_CAPABLE=y
++CONFIG_MIPS_RTC=y
+ # CONFIG_SNI_RM200_PCI is not set
+ # CONFIG_TANBAC_TB0226 is not set
+ # CONFIG_TANBAC_TB0229 is not set
+@@ -253,11 +254,6 @@
+ #
+ # CONFIG_IPX is not set
+ # CONFIG_ATALK is not set
+-
+-#
+-# Appletalk devices
+-#
+-# CONFIG_DEV_APPLETALK is not set
+ # CONFIG_DECNET is not set
+ # CONFIG_BRIDGE is not set
+ # CONFIG_X25 is not set
+diff -Nur linux-2.4.29/arch/mips64/kernel/binfmt_elfn32.c linux-mips/arch/mips64/kernel/binfmt_elfn32.c
+--- linux-2.4.29/arch/mips64/kernel/binfmt_elfn32.c    2003-08-25 13:44:40.000000000 +0200
++++ linux-mips/arch/mips64/kernel/binfmt_elfn32.c      2005-01-31 12:59:30.000000000 +0100
+@@ -116,4 +116,7 @@
+ #undef MODULE_DESCRIPTION
+ #undef MODULE_AUTHOR
++#undef TASK_SIZE
++#define TASK_SIZE TASK_SIZE32
++
+ #include "../../../fs/binfmt_elf.c"
+diff -Nur linux-2.4.29/arch/mips64/kernel/binfmt_elfo32.c linux-mips/arch/mips64/kernel/binfmt_elfo32.c
+--- linux-2.4.29/arch/mips64/kernel/binfmt_elfo32.c    2003-08-25 13:44:40.000000000 +0200
++++ linux-mips/arch/mips64/kernel/binfmt_elfo32.c      2005-01-31 12:59:30.000000000 +0100
+@@ -137,4 +137,7 @@
+ #undef MODULE_DESCRIPTION
+ #undef MODULE_AUTHOR
++#undef TASK_SIZE
++#define TASK_SIZE TASK_SIZE32
++
+ #include "../../../fs/binfmt_elf.c"
+diff -Nur linux-2.4.29/arch/mips64/kernel/head.S linux-mips/arch/mips64/kernel/head.S
+--- linux-2.4.29/arch/mips64/kernel/head.S     2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips64/kernel/head.S       2004-11-22 14:38:26.000000000 +0100
+@@ -91,6 +91,21 @@
+       __INIT
+ NESTED(kernel_entry, 16, sp)                  # kernel entry point
++      .set    push
++      /*
++       * For the moment disable interrupts, mark the kernel mode and
++       * set ST0_KX so that the CPU does not spit fire when using
++       * 64-bit addresses.  A full initialization of the CPU's status
++       * register is done later in per_cpu_trap_init().
++       */
++      mfc0    t0, CP0_STATUS
++      or      t0, ST0_CU0|ST0_KX|0x1f
++      xor     t0, 0x1f
++      mtc0    t0, CP0_STATUS
++
++      .set    noreorder
++      sll     zero,3                          # ehb
++      .set    reorder
+       ori     sp, 0xf                         # align stack on 16 byte.
+       xori    sp, 0xf
+@@ -103,8 +118,6 @@
+       ARC64_TWIDDLE_PC
+-      CLI                                     # disable interrupts
+-
+       /*
+        * The firmware/bootloader passes argc/argp/envp
+        * to us as arguments.  But clear bss first because
+@@ -125,6 +138,7 @@
+       dsubu   sp, 4*SZREG                     # init stack pointer
+       j       init_arch
++      .set    pop
+       END(kernel_entry)
+ #ifdef CONFIG_SMP
+@@ -133,6 +147,23 @@
+  * function after setting up the stack and gp registers.
+  */
+ NESTED(smp_bootstrap, 16, sp)
++      .set    push
++      /*
++       * For the moment disable interrupts and bootstrap exception
++       * vectors, mark the kernel mode and set ST0_KX so that the CPU
++       * does not spit fire when using 64-bit addresses.  A full
++       * initialization of the CPU's status register is done later in
++       * per_cpu_trap_init().
++       */
++      mfc0    t0, CP0_STATUS
++      or      t0, ST0_CU0|ST0_BEV|ST0_KX|0x1f
++      xor     t0, ST0_BEV|0x1f
++      mtc0    t0, CP0_STATUS
++
++      .set    noreorder
++      sll     zero,3                          # ehb
++      .set    reorder
++
+ #ifdef CONFIG_SGI_IP27
+       GET_NASID_ASM   t1
+       dli     t0, KLDIR_OFFSET + (KLI_KERN_VARS * KLDIR_ENT_SIZE) + \
+@@ -146,19 +177,8 @@
+       ARC64_TWIDDLE_PC
+ #endif /* CONFIG_SGI_IP27 */
+-      CLI
+-
+-      /*
+-       * For the moment set ST0_KU so the CPU will not spit fire when
+-       * executing 64-bit instructions.  The full initialization of the
+-       * CPU's status register is done later in per_cpu_trap_init().
+-       */
+-        mfc0  t0, CP0_STATUS
+-        or    t0, ST0_KX
+-      mtc0    t0, CP0_STATUS
+-
+       jal     start_secondary                 # XXX: IP27: cboot
+-
++      .set    pop
+       END(smp_bootstrap)
+ #endif /* CONFIG_SMP */
+diff -Nur linux-2.4.29/arch/mips64/kernel/ioctl32.c linux-mips/arch/mips64/kernel/ioctl32.c
+--- linux-2.4.29/arch/mips64/kernel/ioctl32.c  2005-01-19 15:09:31.000000000 +0100
++++ linux-mips/arch/mips64/kernel/ioctl32.c    2005-01-31 12:59:30.000000000 +0100
+@@ -2352,7 +2352,7 @@
+       IOCTL32_HANDLER(AUTOFS_IOC_SETTIMEOUT32, ioc_settimeout),
+       IOCTL32_DEFAULT(AUTOFS_IOC_EXPIRE),
+       IOCTL32_DEFAULT(AUTOFS_IOC_EXPIRE_MULTI),
+-      IOCTL32_DEFAULT(AUTOFS_IOC_PROTSUBVER),
++      IOCTL32_DEFAULT(AUTOFS_IOC_PROTOSUBVER),
+       IOCTL32_DEFAULT(AUTOFS_IOC_ASKREGHOST),
+       IOCTL32_DEFAULT(AUTOFS_IOC_TOGGLEREGHOST),
+       IOCTL32_DEFAULT(AUTOFS_IOC_ASKUMOUNT),
+diff -Nur linux-2.4.29/arch/mips64/kernel/scall_64.S linux-mips/arch/mips64/kernel/scall_64.S
+--- linux-2.4.29/arch/mips64/kernel/scall_64.S 2005-01-19 15:09:32.000000000 +0100
++++ linux-mips/arch/mips64/kernel/scall_64.S   2005-02-12 04:05:40.000000000 +0100
+@@ -102,15 +102,14 @@
+ trace_a_syscall:
+       SAVE_STATIC
+-      sd      t2,PT_R1(sp)
++      move    s0, t2
+       jal     syscall_trace
+-      ld      t2,PT_R1(sp)
+       ld      a0, PT_R4(sp)           # Restore argument registers
+       ld      a1, PT_R5(sp)
+       ld      a2, PT_R6(sp)
+       ld      a3, PT_R7(sp)
+-      jalr    t2
++      jalr    s0
+       li      t0, -EMAXERRNO - 1      # error?
+       sltu    t0, t0, v0
+diff -Nur linux-2.4.29/arch/mips64/kernel/scall_n32.S linux-mips/arch/mips64/kernel/scall_n32.S
+--- linux-2.4.29/arch/mips64/kernel/scall_n32.S        2005-01-19 15:09:32.000000000 +0100
++++ linux-mips/arch/mips64/kernel/scall_n32.S  2005-02-12 04:05:40.000000000 +0100
+@@ -106,15 +106,14 @@
+ trace_a_syscall:
+       SAVE_STATIC
+-      sd      t2,PT_R1(sp)
++      move    s0, t2
+       jal     syscall_trace
+-      ld      t2,PT_R1(sp)
+       ld      a0, PT_R4(sp)           # Restore argument registers
+       ld      a1, PT_R5(sp)
+       ld      a2, PT_R6(sp)
+       ld      a3, PT_R7(sp)
+-      jalr    t2
++      jalr    s0
+       li      t0, -EMAXERRNO - 1      # error?
+       sltu    t0, t0, v0
+diff -Nur linux-2.4.29/arch/mips64/kernel/scall_o32.S linux-mips/arch/mips64/kernel/scall_o32.S
+--- linux-2.4.29/arch/mips64/kernel/scall_o32.S        2005-01-19 15:09:32.000000000 +0100
++++ linux-mips/arch/mips64/kernel/scall_o32.S  2005-02-12 04:05:41.000000000 +0100
+@@ -118,9 +118,8 @@
+       sd      a6, PT_R10(sp)
+       sd      a7, PT_R11(sp)
+-      sd      t2,PT_R1(sp)
++      move    s0, t2
+       jal     syscall_trace
+-      ld      t2,PT_R1(sp)
+       ld      a0, PT_R4(sp)           # Restore argument registers
+       ld      a1, PT_R5(sp)
+@@ -129,7 +128,7 @@
+       ld      a4, PT_R8(sp)
+       ld      a5, PT_R9(sp)
+-      jalr    t2
++      jalr    s0
+       li      t0, -EMAXERRNO - 1      # error?
+       sltu    t0, t0, v0
+diff -Nur linux-2.4.29/arch/mips64/kernel/setup.c linux-mips/arch/mips64/kernel/setup.c
+--- linux-2.4.29/arch/mips64/kernel/setup.c    2005-01-19 15:09:32.000000000 +0100
++++ linux-mips/arch/mips64/kernel/setup.c      2004-11-22 14:38:26.000000000 +0100
+@@ -129,14 +129,6 @@
+        */
+       load_mmu();
+-      /*
+-       * On IP27, I am seeing the TS bit set when the kernel is loaded.
+-       * Maybe because the kernel is in ckseg0 and not xkphys? Clear it
+-       * anyway ...
+-       */
+-      clear_c0_status(ST0_BEV|ST0_TS|ST0_CU1|ST0_CU2|ST0_CU3);
+-      set_c0_status(ST0_CU0|ST0_KX|ST0_SX|ST0_FR);
+-
+       start_kernel();
+ }
+diff -Nur linux-2.4.29/arch/mips64/kernel/signal_n32.c linux-mips/arch/mips64/kernel/signal_n32.c
+--- linux-2.4.29/arch/mips64/kernel/signal_n32.c       2005-01-19 15:09:33.000000000 +0100
++++ linux-mips/arch/mips64/kernel/signal_n32.c 2005-02-12 04:05:41.000000000 +0100
+@@ -68,7 +68,7 @@
+ };
+ extern asmlinkage int restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc);
+-extern int inline setup_sigcontext(struct pt_regs *regs, struct sigcontext *sc);
++extern int setup_sigcontext(struct pt_regs *regs, struct sigcontext *sc);
+ asmlinkage void sysn32_rt_sigreturn(abi64_no_regargs, struct pt_regs regs)
+ {
+diff -Nur linux-2.4.29/arch/mips64/kernel/traps.c linux-mips/arch/mips64/kernel/traps.c
+--- linux-2.4.29/arch/mips64/kernel/traps.c    2005-01-19 15:09:33.000000000 +0100
++++ linux-mips/arch/mips64/kernel/traps.c      2004-11-22 14:38:26.000000000 +0100
+@@ -809,13 +809,18 @@
+ void __init per_cpu_trap_init(void)
+ {
+       unsigned int cpu = smp_processor_id();
++      unsigned int status_set = ST0_CU0|ST0_FR|ST0_KX|ST0_SX|ST0_UX;
+-      /* Some firmware leaves the BEV flag set, clear it.  */
+-      clear_c0_status(ST0_CU1|ST0_CU2|ST0_CU3|ST0_BEV);
+-      set_c0_status(ST0_CU0|ST0_FR|ST0_KX|ST0_SX|ST0_UX);
+-
++      /*
++       * Disable coprocessors, enable 64-bit addressing and set FPU
++       * for the 32/32 FPR register model.  Reset the BEV flag that
++       * some firmware may have left set and the TS bit (for IP27).
++       * Set XX for ISA IV code to work.
++       */
+       if (current_cpu_data.isa_level == MIPS_CPU_ISA_IV)
+-              set_c0_status(ST0_XX);
++              status_set |= ST0_XX;
++      change_c0_status(ST0_CU|ST0_FR|ST0_BEV|ST0_TS|ST0_KX|ST0_SX|ST0_UX,
++                       status_set);
+       /*
+        * Some MIPS CPUs have a dedicated interrupt vector which reduces the
+@@ -825,13 +830,11 @@
+               set_c0_cause(CAUSEF_IV);
+       cpu_data[cpu].asid_cache = ASID_FIRST_VERSION;
+-      write_c0_context(((long)(&pgd_current[cpu])) << 23);
+-      write_c0_wired(0);
++      TLBMISS_HANDLER_SETUP();
+       atomic_inc(&init_mm.mm_count);
+       current->active_mm = &init_mm;
+-      if (current->mm)
+-              BUG();
++      BUG_ON(current->mm);
+       enter_lazy_tlb(&init_mm, current, cpu);
+ }
+@@ -842,8 +845,6 @@
+       extern char except_vec4;
+       unsigned long i;
+-      per_cpu_trap_init();
+-
+       /* Copy the generic exception handlers to their final destination. */
+       memcpy((void *) KSEG0         , &except_vec0_generic, 0x80);
+       memcpy((void *)(KSEG0 + 0x180), &except_vec3_generic, 0x80);
+@@ -933,6 +934,5 @@
+       flush_icache_range(KSEG0, KSEG0 + 0x400);
+-      atomic_inc(&init_mm.mm_count);  /* XXX UP?  */
+-      current->active_mm = &init_mm;
++      per_cpu_trap_init();
+ }
+diff -Nur linux-2.4.29/arch/mips64/mm/c-r4k.c linux-mips/arch/mips64/mm/c-r4k.c
+--- linux-2.4.29/arch/mips64/mm/c-r4k.c        2005-01-19 15:09:33.000000000 +0100
++++ linux-mips/arch/mips64/mm/c-r4k.c  2005-02-12 04:05:41.000000000 +0100
+@@ -867,9 +867,16 @@
+        * normally they'd suffer from aliases but magic in the hardware deals
+        * with that for us so we don't need to take care ourselves.
+        */
+-      if (c->cputype != CPU_R10000 && c->cputype != CPU_R12000)
+-              if (c->dcache.waysize > PAGE_SIZE)
+-                      c->dcache.flags |= MIPS_CACHE_ALIASES;
++      switch (c->cputype) {
++      case CPU_R10000:
++      case CPU_R12000:
++              break;
++      case CPU_24K:
++              if (!(read_c0_config7() & (1 << 16)))
++      default:
++                      if (c->dcache.waysize > PAGE_SIZE)
++                              c->dcache.flags |= MIPS_CACHE_ALIASES;
++      }
+       switch (c->cputype) {
+       case CPU_20KC:
+@@ -1070,9 +1077,6 @@
+       setup_scache();
+       coherency_setup();
+-      if (c->dcache.sets * c->dcache.ways > PAGE_SIZE)
+-              c->dcache.flags |= MIPS_CACHE_ALIASES;
+-
+       r4k_blast_dcache_page_setup();
+       r4k_blast_dcache_page_indexed_setup();
+       r4k_blast_dcache_setup();
+diff -Nur linux-2.4.29/arch/mips64/mm/cerr-sb1.c linux-mips/arch/mips64/mm/cerr-sb1.c
+--- linux-2.4.29/arch/mips64/mm/cerr-sb1.c     2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips64/mm/cerr-sb1.c       2004-12-13 18:37:26.000000000 +0100
+@@ -252,14 +252,14 @@
+ /* Masks to select bits for Hamming parity, mask_72_64[i] for bit[i] */
+ static const uint64_t mask_72_64[8] = {
+-      0x0738C808099264FFL,
+-      0x38C808099264FF07L,
+-      0xC808099264FF0738L,
+-      0x08099264FF0738C8L,
+-      0x099264FF0738C808L,
+-      0x9264FF0738C80809L,
+-      0x64FF0738C8080992L,
+-      0xFF0738C808099264L
++      0x0738C808099264FFULL,
++      0x38C808099264FF07ULL,
++      0xC808099264FF0738ULL,
++      0x08099264FF0738C8ULL,
++      0x099264FF0738C808ULL,
++      0x9264FF0738C80809ULL,
++      0x64FF0738C8080992ULL,
++      0xFF0738C808099264ULL
+ };
+ /* Calculate the parity on a range of bits */
+@@ -331,9 +331,9 @@
+                                   ((lru >> 4) & 0x3),
+                                   ((lru >> 6) & 0x3));
+               }
+-              va = (taglo & 0xC0000FFFFFFFE000) | addr;
++              va = (taglo & 0xC0000FFFFFFFE000ULL) | addr;
+               if ((taglo & (1 << 31)) && (((taglo >> 62) & 0x3) == 3))
+-                      va |= 0x3FFFF00000000000;
++                      va |= 0x3FFFF00000000000ULL;
+               valid = ((taghi >> 29) & 1);
+               if (valid) {
+                       tlo_tmp = taglo & 0xfff3ff;
+@@ -474,7 +474,7 @@
+               : "r" ((way << 13) | addr));
+               taglo = ((unsigned long long)taglohi << 32) | taglolo;
+-              pa = (taglo & 0xFFFFFFE000) | addr;
++              pa = (taglo & 0xFFFFFFE000ULL) | addr;
+               if (way == 0) {
+                       lru = (taghi >> 14) & 0xff;
+                       prom_printf("[Bank %d Set 0x%02x]  LRU > %d %d %d %d > MRU\n",
+diff -Nur linux-2.4.29/arch/mips64/mm/tlb-r4k.c linux-mips/arch/mips64/mm/tlb-r4k.c
+--- linux-2.4.29/arch/mips64/mm/tlb-r4k.c      2005-01-19 15:09:33.000000000 +0100
++++ linux-mips/arch/mips64/mm/tlb-r4k.c        2004-11-25 23:18:38.000000000 +0100
+@@ -1,24 +1,12 @@
+ /*
+- * Carsten Langgaard, carstenl@mips.com
+- * Copyright (C) 2002 MIPS Technologies, Inc.  All rights reserved.
+- *
+- * 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
+- * published by the Free Software Foundation.
+- *
+- * This program is distributed in the hope 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
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file "COPYING" in the main directory of this archive
+  * 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.
+- *
+- * MIPS64 CPU variant specific MMU routines.
+- * These routine are not optimized in any way, they are done in a generic way
+- * so they can be used on all MIPS64 compliant CPUs, and also done in an
+- * attempt not to break anything for the R4xx0 style CPUs.
++ * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
++ * Copyright (C) 1997, 1998, 1999, 2000 Ralf Baechle ralf@gnu.org
++ * Carsten Langgaard, carstenl@mips.com
++ * Copyright (C) 2002 MIPS Technologies, Inc.  All rights reserved.
+  */
+ #include <linux/init.h>
+ #include <linux/sched.h>
+@@ -30,9 +18,6 @@
+ #include <asm/pgtable.h>
+ #include <asm/system.h>
+-#undef DEBUG_TLB
+-#undef DEBUG_TLBUPDATE
+-
+ extern void except_vec1_r4k(void);
+ /* CP0 hazard avoidance. */
+@@ -46,31 +31,23 @@
+       unsigned long old_ctx;
+       int entry;
+-#ifdef DEBUG_TLB
+-      printk("[tlball]");
+-#endif
+-
+       local_irq_save(flags);
+       /* Save old context and create impossible VPN2 value */
+       old_ctx = read_c0_entryhi();
+-      write_c0_entryhi(XKPHYS);
+       write_c0_entrylo0(0);
+       write_c0_entrylo1(0);
+-      BARRIER;
+       entry = read_c0_wired();
+       /* Blast 'em all away. */
+-      while(entry < current_cpu_data.tlbsize) {
+-              /* Make sure all entries differ. */
+-              write_c0_entryhi(XKPHYS+entry*0x2000);
++      while (entry < current_cpu_data.tlbsize) {
++              write_c0_entryhi(XKPHYS + entry*0x2000);
+               write_c0_index(entry);
+-              BARRIER;
++              mtc0_tlbw_hazard();
+               tlb_write_indexed();
+-              BARRIER;
+               entry++;
+       }
+-      BARRIER;
++      tlbw_use_hazard();
+       write_c0_entryhi(old_ctx);
+       local_irq_restore(flags);
+ }
+@@ -79,12 +56,8 @@
+ {
+       int cpu = smp_processor_id();
+-      if (cpu_context(cpu, mm) != 0) {
+-#ifdef DEBUG_TLB
+-              printk("[tlbmm<%d>]", mm->context);
+-#endif
++      if (cpu_context(cpu, mm) != 0)
+               drop_mmu_context(mm,cpu);
+-      }
+ }
+ void local_flush_tlb_range(struct mm_struct *mm, unsigned long start,
+@@ -96,10 +69,6 @@
+               unsigned long flags;
+               int size;
+-#ifdef DEBUG_TLB
+-              printk("[tlbrange<%02x,%08lx,%08lx>]", (mm->context & ASID_MASK),
+-                     start, end);
+-#endif
+               local_irq_save(flags);
+               size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
+               size = (size + 1) >> 1;
+@@ -110,25 +79,25 @@
+                       start &= (PAGE_MASK << 1);
+                       end += ((PAGE_SIZE << 1) - 1);
+                       end &= (PAGE_MASK << 1);
+-                      while(start < end) {
++                      while (start < end) {
+                               int idx;
+                               write_c0_entryhi(start | newpid);
+                               start += (PAGE_SIZE << 1);
+-                              BARRIER;
++                              mtc0_tlbw_hazard();
+                               tlb_probe();
+                               BARRIER;
+                               idx = read_c0_index();
+                               write_c0_entrylo0(0);
+                               write_c0_entrylo1(0);
+-                              if(idx < 0)
++                              if (idx < 0)
+                                       continue;
+                               /* Make sure all entries differ. */
+                               write_c0_entryhi(XKPHYS+idx*0x2000);
+-                              BARRIER;
++                              mtc0_tlbw_hazard();
+                               tlb_write_indexed();
+-                              BARRIER;
+                       }
++                      tlbw_use_hazard();
+                       write_c0_entryhi(oldpid);
+               } else {
+                       drop_mmu_context(mm, cpu);
+@@ -145,28 +114,26 @@
+               unsigned long flags;
+               unsigned long oldpid, newpid, idx;
+-#ifdef DEBUG_TLB
+-              printk("[tlbpage<%d,%08lx>]", vma->vm_mm->context, page);
+-#endif
+               newpid = cpu_asid(cpu, vma->vm_mm);
+               page &= (PAGE_MASK << 1);
+               local_irq_save(flags);
+               oldpid = read_c0_entryhi();
+               write_c0_entryhi(page | newpid);
+-              BARRIER;
++              mtc0_tlbw_hazard();
+               tlb_probe();
+               BARRIER;
+               idx = read_c0_index();
+               write_c0_entrylo0(0);
+               write_c0_entrylo1(0);
+-              if(idx < 0)
++              if (idx < 0)
+                       goto finish;
+               /* Make sure all entries differ. */
+               write_c0_entryhi(XKPHYS+idx*0x2000);
+-              BARRIER;
++              mtc0_tlbw_hazard();
+               tlb_write_indexed();
++              tlbw_use_hazard();
++
+       finish:
+-              BARRIER;
+               write_c0_entryhi(oldpid);
+               local_irq_restore(flags);
+       }
+@@ -186,7 +153,7 @@
+       local_irq_save(flags);
+       write_c0_entryhi(page);
+-      BARRIER;
++      mtc0_tlbw_hazard();
+       tlb_probe();
+       BARRIER;
+       idx = read_c0_index();
+@@ -195,10 +162,12 @@
+       if (idx >= 0) {
+               /* Make sure all entries differ. */
+               write_c0_entryhi(KSEG0+idx*0x2000);
++              mtc0_tlbw_hazard();
+               tlb_write_indexed();
++              tlbw_use_hazard();
+       }
+-      BARRIER;
+       write_c0_entryhi(oldpid);
++
+       local_irq_restore(flags);
+ }
+@@ -208,7 +177,6 @@
+ void __update_tlb(struct vm_area_struct * vma, unsigned long address, pte_t pte)
+ {
+       unsigned long flags;
+-      unsigned int asid;
+       pgd_t *pgdp;
+       pmd_t *pmdp;
+       pte_t *ptep;
+@@ -222,70 +190,58 @@
+       pid = read_c0_entryhi() & ASID_MASK;
+-#ifdef DEBUG_TLB
+-      if ((pid != (cpu_asid(smp_processor_id(), vma->vm_mm))) ||
+-         (cpu_context(smp_processor_id(), vma->vm_mm) == 0)) {
+-              printk("update_mmu_cache: Wheee, bogus tlbpid mmpid=%d"
+-                     "tlbpid=%d\n", (int) (cpu_context(smp_processor_id(),
+-                     vma->vm_mm) & ASID_MASK), pid);
+-      }
+-#endif
+-
+       local_irq_save(flags);
+       address &= (PAGE_MASK << 1);
+-      write_c0_entryhi(address | (pid));
++      write_c0_entryhi(address | pid);
+       pgdp = pgd_offset(vma->vm_mm, address);
+-      BARRIER;
++      mtc0_tlbw_hazard();
+       tlb_probe();
+       BARRIER;
+       pmdp = pmd_offset(pgdp, address);
+       idx = read_c0_index();
+       ptep = pte_offset(pmdp, address);
+-      BARRIER;
+       write_c0_entrylo0(pte_val(*ptep++) >> 6);
+       write_c0_entrylo1(pte_val(*ptep) >> 6);
+-      write_c0_entryhi(address | (pid));
+-      BARRIER;
+-      if(idx < 0) {
++      write_c0_entryhi(address | pid);
++      mtc0_tlbw_hazard();
++      if (idx < 0)
+               tlb_write_random();
+-      } else {
++      else
+               tlb_write_indexed();
+-      }
+-      BARRIER;
++      tlbw_use_hazard();
+       write_c0_entryhi(pid);
+-      BARRIER;
+       local_irq_restore(flags);
+ }
+-void add_wired_entry(unsigned long entrylo0, unsigned long entrylo1,
+-                                    unsigned long entryhi, unsigned long pagemask)
++void __init add_wired_entry(unsigned long entrylo0, unsigned long entrylo1,
++                          unsigned long entryhi, unsigned long pagemask)
+ {
+-        unsigned long flags;
+-        unsigned long wired;
+-        unsigned long old_pagemask;
+-        unsigned long old_ctx;
+-
+-        local_irq_save(flags);
+-        /* Save old context and create impossible VPN2 value */
+-        old_ctx = (read_c0_entryhi() & ASID_MASK);
+-        old_pagemask = read_c0_pagemask();
+-        wired = read_c0_wired();
+-        write_c0_wired(wired + 1);
+-        write_c0_index(wired);
+-        BARRIER;
+-        write_c0_pagemask(pagemask);
+-        write_c0_entryhi(entryhi);
+-        write_c0_entrylo0(entrylo0);
+-        write_c0_entrylo1(entrylo1);
+-        BARRIER;
+-        tlb_write_indexed();
+-        BARRIER;
+-
+-        write_c0_entryhi(old_ctx);
+-        BARRIER;
+-        write_c0_pagemask(old_pagemask);
+-        local_flush_tlb_all();
+-        local_irq_restore(flags);
++      unsigned long flags;
++      unsigned long wired;
++      unsigned long old_pagemask;
++      unsigned long old_ctx;
++
++      local_irq_save(flags);
++      /* Save old context and create impossible VPN2 value */
++      old_ctx = read_c0_entryhi() & ASID_MASK;
++      old_pagemask = read_c0_pagemask();
++      wired = read_c0_wired();
++      write_c0_wired(wired + 1);
++      write_c0_index(wired);
++      BARRIER;
++      write_c0_pagemask(pagemask);
++      write_c0_entryhi(entryhi);
++      write_c0_entrylo0(entrylo0);
++      write_c0_entrylo1(entrylo1);
++      mtc0_tlbw_hazard();
++      tlb_write_indexed();
++      tlbw_use_hazard();
++
++      write_c0_entryhi(old_ctx);
++      BARRIER;
++      write_c0_pagemask(old_pagemask);
++      local_flush_tlb_all();
++      local_irq_restore(flags);
+ }
+ /*
+@@ -317,17 +273,15 @@
+       }
+       write_c0_index(temp_tlb_entry);
+-      BARRIER;
+       write_c0_pagemask(pagemask);
+       write_c0_entryhi(entryhi);
+       write_c0_entrylo0(entrylo0);
+       write_c0_entrylo1(entrylo1);
+-      BARRIER;
++      mtc0_tlbw_hazard();
+       tlb_write_indexed();
+-      BARRIER;
++      tlbw_use_hazard();
+       write_c0_entryhi(old_ctx);
+-      BARRIER;
+       write_c0_pagemask(old_pagemask);
+ out:
+       local_irq_restore(flags);
+@@ -348,15 +302,23 @@
+               return;
+       config1 = read_c0_config1();
+-      if (!((config1 >> 7) & 3))
+-              panic("No MMU present");
++      if (!((config >> 7) & 3))
++              panic("No TLB present");
+       c->tlbsize = ((config1 >> 25) & 0x3f) + 1;
+ }
+ void __init r4k_tlb_init(void)
+ {
+-      unsigned long config = read_c0_config();
++      unsigned int config = read_c0_config();
++
++      /*
++       * You should never change this register:
++       *   - On R4600 1.7 the tlbp never hits for pages smaller than
++       *     the value in the c0_pagemask register.
++       *   - The entire mm handling assumes the c0_pagemask register to
++       *     be set for 4kb pages.
++       */
+       probe_tlb(config);
+       write_c0_pagemask(PM_DEFAULT_MASK);
+       write_c0_wired(0);
+diff -Nur linux-2.4.29/arch/mips64/mm/tlbex-r4k.S linux-mips/arch/mips64/mm/tlbex-r4k.S
+--- linux-2.4.29/arch/mips64/mm/tlbex-r4k.S    2004-02-18 14:36:30.000000000 +0100
++++ linux-mips/arch/mips64/mm/tlbex-r4k.S      2004-11-25 23:18:38.000000000 +0100
+@@ -151,11 +151,9 @@
+       ld      k0, 0(k1)                       # get even pte
+       ld      k1, 8(k1)                       # get odd pte
+       PTE_RELOAD k0 k1
+-      rm9000_tlb_hazard
+-      b       1f
+-       tlbwr
+-1:    nop
+-      rm9000_tlb_hazard
++      mtc0_tlbw_hazard
++      tlbwr
++1:    tlbw_eret_hazard
+       eret
+ 9:                                            # handle the vmalloc range
+@@ -163,11 +161,9 @@
+       ld      k0, 0(k1)                       # get even pte
+       ld      k1, 8(k1)                       # get odd pte
+       PTE_RELOAD k0 k1
+-      rm9000_tlb_hazard
+-      b       1f
+-       tlbwr
+-1:    nop
+-      rm9000_tlb_hazard
++      mtc0_tlbw_hazard
++      tlbwr
++1:    tlbw_eret_hazard
+       eret
+ END(handle_vec1_r4k)
+@@ -195,10 +191,9 @@
+       ld      k0, 0(k1)                       # get even pte
+       ld      k1, 8(k1)                       # get odd pte
+       PTE_RELOAD k0 k1
+-      rm9000_tlb_hazard
+-      nop
++      mtc0_tlbw_hazard
+       tlbwr
+-      rm9000_tlb_hazard
++      tlbw_eret_hazard
+       eret
+ 9:                                            # handle the vmalloc range
+@@ -206,10 +201,9 @@
+       ld      k0, 0(k1)                       # get even pte
+       ld      k1, 8(k1)                       # get odd pte
+       PTE_RELOAD k0 k1
+-      rm9000_tlb_hazard
+-      nop
++      mtc0_tlbw_hazard
+       tlbwr
+-      rm9000_tlb_hazard
++      tlbw_eret_hazard
+       eret
+ END(handle_vec1_r10k)
+diff -Nur linux-2.4.29/drivers/char/Config.in linux-mips/drivers/char/Config.in
+--- linux-2.4.29/drivers/char/Config.in        2004-08-08 01:26:04.000000000 +0200
++++ linux-mips/drivers/char/Config.in  2005-02-12 04:06:18.000000000 +0100
+@@ -313,14 +313,11 @@
+ if [ "$CONFIG_OBSOLETE" = "y" -a "$CONFIG_ALPHA_BOOK1" = "y" ]; then
+    bool 'Tadpole ANA H8 Support (OBSOLETE)'  CONFIG_H8
+ fi
+-if [ "$CONFIG_MIPS" = "y" -a "$CONFIG_NEW_TIME_C" = "y" ]; then
+-   tristate 'Generic MIPS RTC Support' CONFIG_MIPS_RTC
+-fi
+ if [ "$CONFIG_SGI_IP22" = "y" ]; then
+-   bool 'SGI DS1286 RTC support' CONFIG_SGI_DS1286
++   tristate 'Dallas DS1286 RTC support' CONFIG_DS1286
+ fi
+ if [ "$CONFIG_SGI_IP27" = "y" ]; then
+-   bool 'SGI M48T35 RTC support' CONFIG_SGI_IP27_RTC
++   tristate 'SGI M48T35 RTC support' CONFIG_SGI_IP27_RTC
+ fi
+ if [ "$CONFIG_TOSHIBA_RBTX4927" = "y" -o "$CONFIG_TOSHIBA_JMR3927" = "y" ]; then
+    tristate 'Dallas DS1742 RTC support' CONFIG_DS1742
+@@ -383,6 +380,11 @@
+       source drivers/char/drm/Config.in
+    fi
+ fi
++
++if [ "$CONFIG_X86" = "y" ]; then
++   tristate 'ACP Modem (Mwave) support' CONFIG_MWAVE
++fi
++
+ endmenu
+ if [ "$CONFIG_HOTPLUG" = "y" -a "$CONFIG_PCMCIA" != "n" ]; then
+@@ -391,6 +393,7 @@
+ if [ "$CONFIG_SOC_AU1X00" = "y" ]; then
+    tristate ' Alchemy Au1x00 GPIO device support' CONFIG_AU1X00_GPIO
+    tristate ' Au1000/ADS7846 touchscreen support' CONFIG_TS_AU1X00_ADS7846
++   #tristate ' Alchemy Au1550 PSC SPI support' CONFIG_AU1550_PSC_SPI
+ fi
+ if [ "$CONFIG_MIPS_ITE8172" = "y" ]; then
+   tristate ' ITE GPIO' CONFIG_ITE_GPIO
+diff -Nur linux-2.4.29/drivers/char/Makefile linux-mips/drivers/char/Makefile
+--- linux-2.4.29/drivers/char/Makefile 2004-08-08 01:26:04.000000000 +0200
++++ linux-mips/drivers/char/Makefile   2005-02-12 04:06:18.000000000 +0100
+@@ -48,7 +48,12 @@
+     KEYBD    =
+   endif
+   ifeq ($(CONFIG_VR41XX_KIU),y)
+-    KEYMAP   =
++    ifeq ($(CONFIG_IBM_WORKPAD),y)
++      KEYMAP = ibm_workpad_keymap.o
++    endif
++    ifeq ($(CONFIG_VICTOR_MPC30X),y)
++      KEYMAP = victor_mpc30x_keymap.o
++    endif
+     KEYBD    = vr41xx_keyb.o
+   endif
+ endif
+@@ -251,7 +256,6 @@
+ obj-$(CONFIG_RTC) += rtc.o
+ obj-$(CONFIG_GEN_RTC) += genrtc.o
+ obj-$(CONFIG_EFI_RTC) += efirtc.o
+-obj-$(CONFIG_SGI_DS1286) += ds1286.o
+ obj-$(CONFIG_MIPS_RTC) += mips_rtc.o
+ obj-$(CONFIG_SGI_IP27_RTC) += ip27-rtc.o
+ ifeq ($(CONFIG_PPC),)
+@@ -259,6 +263,7 @@
+ endif
+ obj-$(CONFIG_TOSHIBA) += toshiba.o
+ obj-$(CONFIG_I8K) += i8k.o
++obj-$(CONFIG_DS1286) += ds1286.o
+ obj-$(CONFIG_DS1620) += ds1620.o
+ obj-$(CONFIG_DS1742) += ds1742.o
+ obj-$(CONFIG_INTEL_RNG) += i810_rng.o
+@@ -269,6 +274,7 @@
+ obj-$(CONFIG_ITE_GPIO) += ite_gpio.o
+ obj-$(CONFIG_AU1X00_GPIO) += au1000_gpio.o
++obj-$(CONFIG_AU1550_PSC_SPI) += au1550_psc_spi.o
+ obj-$(CONFIG_AU1X00_USB_TTY) += au1000_usbtty.o
+ obj-$(CONFIG_AU1X00_USB_RAW) += au1000_usbraw.o
+ obj-$(CONFIG_COBALT_LCD) += lcd.o
+@@ -353,3 +359,9 @@
+ qtronixmap.c: qtronixmap.map
+       set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@
++
++ibm_workpad_keymap.c: ibm_workpad_keymap.map
++      set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@
++
++victor_mpc30x_keymap.c: victor_mpc30x_keymap.map
++      set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@
+diff -Nur linux-2.4.29/drivers/char/au1000_gpio.c linux-mips/drivers/char/au1000_gpio.c
+--- linux-2.4.29/drivers/char/au1000_gpio.c    2003-08-25 13:44:41.000000000 +0200
++++ linux-mips/drivers/char/au1000_gpio.c      2003-12-20 14:18:51.000000000 +0100
+@@ -246,7 +246,7 @@
+ static struct miscdevice au1000gpio_miscdev =
+ {
+-      GPIO_MINOR,
++      MISC_DYNAMIC_MINOR,
+       "au1000_gpio",
+       &au1000gpio_fops
+ };
+diff -Nur linux-2.4.29/drivers/char/au1550_psc_spi.c linux-mips/drivers/char/au1550_psc_spi.c
+--- linux-2.4.29/drivers/char/au1550_psc_spi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-mips/drivers/char/au1550_psc_spi.c   2005-02-12 04:06:18.000000000 +0100
+@@ -0,0 +1,466 @@
++/*
++ *  Driver for Alchemy Au1550 SPI on the PSC.
++ *
++ * Copyright 2004 Embedded Edge, LLC.
++ *    dan@embeddededge.com
++ *
++ *  This program is free software; you can redistribute  it and/or modify it
++ *  under  the terms of  the GNU General  Public License as published by the
++ *  Free Software Foundation;  either version 2 of the  License, or (at your
++ *  option) any later version.
++ *
++ *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
++ *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
++ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
++ *  NO  EVENT  SHALL   THE AUTHOR  BE LIABLE FOR ANY   DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
++ *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
++ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ *  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.,
++ *  675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <linux/module.h>
++#include <linux/config.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/miscdevice.h>
++#include <linux/init.h>
++#include <asm/uaccess.h>
++#include <asm/io.h>
++#include <asm/au1000.h>
++#include <asm/au1550_spi.h>
++#include <asm/au1xxx_psc.h>
++
++#ifdef CONFIG_MIPS_PB1550
++#include <asm/pb1550.h>
++#endif
++
++#ifdef CONFIG_MIPS_DB1550
++#include <asm/db1x00.h>
++#endif
++
++#ifdef CONFIG_MIPS_PB1200
++#include <asm/pb1200.h>
++#endif
++
++/* This is just a simple programmed I/O SPI interface on the PSC of the 1550.
++ * We support open, close, write, and ioctl.  The SPI is a full duplex
++ * interface, you can't read without writing.  So, the write system call
++ * copies the bytes out to the SPI, and whatever is returned is placed
++ * in the same buffer.  Kinda weird, maybe we'll change it, but for now
++ * it works OK.
++ * I didn't implement any DMA yet, and it's a debate about the necessity.
++ * The SPI clocks are usually quite fast, so data is sent/received as
++ * quickly as you can stuff the FIFO.  The overhead of DMA and interrupts
++ * are usually far greater than the data transfer itself.  If, however,
++ * we find applications that move large amounts of data, we may choose
++ * use the overhead of buffering and DMA to do the work.
++ */
++
++/* The maximum clock rate specified in the manual is 2mHz.
++*/
++#define MAX_BAUD_RATE (2 * 1000000)
++#define PSC_INTCLK_RATE (32 * 1000000)
++
++static        int     inuse;
++
++/* We have to know what the user requested for the data length
++ * so we know how to stuff the fifo.  The FIFO is 32 bits wide,
++ * and we have to load it with the bits to go in a single transfer.
++ */
++static        uint    spi_datalen;
++
++static int
++au1550spi_master_done( int ms )
++{
++      int timeout=ms;
++      volatile psc_spi_t *sp;
++
++      sp = (volatile psc_spi_t *)SPI_PSC_BASE;
++
++      /* Loop until MD is set or timeout has expired */
++      while(!(sp->psc_spievent & PSC_SPIEVNT_MD) &&  timeout--) udelay(1000);
++
++      if ( !timeout )
++              return 0;
++      else
++              sp->psc_spievent |= PSC_SPIEVNT_MD;
++
++      return 1;
++}
++
++static int
++au1550spi_open(struct inode *inode, struct file *file)
++{
++      if (inuse)
++              return -EBUSY;
++
++      inuse = 1;
++
++      MOD_INC_USE_COUNT;
++
++      return 0;
++}
++
++static ssize_t
++au1550spi_write(struct file *fp, const char *bp, size_t count, loff_t *ppos)
++{
++      int     bytelen, i;
++      size_t  rcount, retval;
++      unsigned char   sb, *rp, *wp;
++      uint    fifoword, pcr, stat;
++      volatile psc_spi_t *sp;
++
++      /* Get the number of bytes per transfer.
++      */
++      bytelen = ((spi_datalen - 1) / 8) + 1;
++
++      /* User needs to send us multiple of this count.
++      */
++      if ((count % bytelen) != 0)
++              return -EINVAL;
++
++      rp = wp = (unsigned char *)bp;
++      retval = rcount = count;
++
++      /* Reset the FIFO.
++      */
++      sp = (volatile psc_spi_t *)SPI_PSC_BASE;
++      sp->psc_spipcr = (PSC_SPIPCR_RC | PSC_SPIPCR_TC);
++      au_sync();
++      do {
++              pcr = sp->psc_spipcr;
++              au_sync();
++      } while (pcr != 0);
++
++      /* Prime the transmit FIFO.
++      */
++      while (count > 0) {
++              fifoword = 0;
++              for (i=0; i<bytelen; i++) {
++                      fifoword <<= 8;
++                      if (get_user(sb, wp) < 0)
++                              return -EFAULT;
++                      fifoword |= sb;
++                      wp++;
++              }
++              count -= bytelen;
++              if (count <= 0)
++                      fifoword |= PSC_SPITXRX_LC;
++              sp->psc_spitxrx = fifoword;
++              au_sync();
++              stat = sp->psc_spistat;
++              au_sync();
++              if (stat & PSC_SPISTAT_TF)
++                      break;
++      }
++
++      /* Start the transfer.
++      */
++      sp->psc_spipcr = PSC_SPIPCR_MS;
++      au_sync();
++
++      /* Now, just keep the transmit fifo full and empty the receive.
++      */
++      while (count > 0) {
++              stat = sp->psc_spistat;
++              au_sync();
++              while ((stat & PSC_SPISTAT_RE) == 0) {
++                      fifoword = sp->psc_spitxrx;
++                      au_sync();
++                      for (i=0; i<bytelen; i++) {
++                              sb = fifoword & 0xff;
++                              if (put_user(sb, rp) < 0)
++                                      return -EFAULT;
++                              fifoword >>= 8;
++                              rp++;
++                      }
++                      rcount -= bytelen;
++                      stat = sp->psc_spistat;
++                      au_sync();
++              }
++              if ((stat & PSC_SPISTAT_TF) == 0) {
++                      fifoword = 0;
++                      for (i=0; i<bytelen; i++) {
++                              fifoword <<= 8;
++                              if (get_user(sb, wp) < 0)
++                                      return -EFAULT;
++                              fifoword |= sb;
++                              wp++;
++                      }
++                      count -= bytelen;
++                      if (count <= 0)
++                              fifoword |= PSC_SPITXRX_LC;
++                      sp->psc_spitxrx = fifoword;
++                      au_sync();
++              }
++      }
++
++      /* All of the bytes for transmit have been written.  Hang
++       * out waiting for any residual bytes that are yet to be
++       * read from the fifo.
++       */
++      while (rcount > 0) {
++              stat = sp->psc_spistat;
++              au_sync();
++              if ((stat & PSC_SPISTAT_RE) == 0) {
++                      fifoword = sp->psc_spitxrx;
++                      au_sync();
++                      for (i=0; i<bytelen; i++) {
++                              sb = fifoword & 0xff;
++                              if (put_user(sb, rp) < 0)
++                                      return -EFAULT;
++                              fifoword >>= 8;
++                              rp++;
++                      }
++                      rcount -= bytelen;
++              }
++      }
++
++      /* Wait for MasterDone event. 30ms timeout */
++      if (!au1550spi_master_done(30) ) retval = -EFAULT;
++      return retval;
++}
++
++static int
++au1550spi_release(struct inode *inode, struct file *file)
++{
++      MOD_DEC_USE_COUNT;
++
++      inuse = 0;
++
++      return 0;
++}
++
++/* Set the baud rate closest to the request, then return the actual
++ * value we are using.
++ */
++static uint
++set_baud_rate(uint baud)
++{
++      uint    rate, tmpclk, brg, ctl, stat;
++      volatile psc_spi_t *sp;
++
++      /* For starters, the input clock is divided by two.
++      */
++      tmpclk = PSC_INTCLK_RATE/2;
++
++      rate = tmpclk / baud;
++
++      /* The dividers work as follows:
++       *      baud = tmpclk / (2 * (brg + 1))
++       */
++       brg = (rate/2) - 1;
++
++       /* Test BRG to ensure it will fit into the 6 bits allocated.
++       */
++
++       /* Make sure the device is disabled while we make the change.
++       */
++      sp = (volatile psc_spi_t *)SPI_PSC_BASE;
++      ctl = sp->psc_spicfg;
++      au_sync();
++      sp->psc_spicfg = ctl & ~PSC_SPICFG_DE_ENABLE;
++      au_sync();
++      ctl = PSC_SPICFG_CLR_BAUD(ctl);
++      ctl |= PSC_SPICFG_SET_BAUD(brg);
++      sp->psc_spicfg = ctl;
++      au_sync();
++
++      /* If the device was running prior to getting here, wait for
++       * it to restart.
++       */
++      if (ctl & PSC_SPICFG_DE_ENABLE) {
++              do {
++                      stat = sp->psc_spistat;
++                      au_sync();
++              } while ((stat & PSC_SPISTAT_DR) == 0);
++      }
++
++      /* Return the actual value.
++      */
++      rate = tmpclk / (2 * (brg + 1));
++
++      return(rate);
++}
++
++static uint
++set_word_len(uint len)
++{
++      uint    ctl, stat;
++      volatile psc_spi_t *sp;
++
++      if ((len < 4) || (len > 24))
++              return -EINVAL;
++
++       /* Make sure the device is disabled while we make the change.
++       */
++      sp = (volatile psc_spi_t *)SPI_PSC_BASE;
++      ctl = sp->psc_spicfg;
++      au_sync();
++      sp->psc_spicfg = ctl & ~PSC_SPICFG_DE_ENABLE;
++      au_sync();
++      ctl = PSC_SPICFG_CLR_LEN(ctl);
++      ctl |= PSC_SPICFG_SET_LEN(len);
++      sp->psc_spicfg = ctl;
++      au_sync();
++
++      /* If the device was running prior to getting here, wait for
++       * it to restart.
++       */
++      if (ctl & PSC_SPICFG_DE_ENABLE) {
++              do {
++                      stat = sp->psc_spistat;
++                      au_sync();
++              } while ((stat & PSC_SPISTAT_DR) == 0);
++      }
++
++      return 0;
++}
++
++static int
++au1550spi_ioctl(struct inode *inode, struct file *file,
++                          unsigned int cmd, unsigned long arg)
++{
++      int status;
++      u32 val;
++
++      status = 0;
++
++      switch(cmd) {
++      case AU1550SPI_WORD_LEN:
++              status = set_word_len(arg);
++              break;
++
++      case AU1550SPI_SET_BAUD:
++              if (get_user(val, (u32 *)arg)) 
++                      return -EFAULT;
++
++              val = set_baud_rate(val);
++              if (put_user(val, (u32 *)arg)) 
++                      return -EFAULT;
++              break;
++
++      default:
++              status = -ENOIOCTLCMD;
++
++      }
++
++      return status;
++}
++
++
++static struct file_operations au1550spi_fops =
++{
++      owner:          THIS_MODULE,
++      write:          au1550spi_write,
++      ioctl:          au1550spi_ioctl,
++      open:           au1550spi_open,
++      release:        au1550spi_release,
++};
++
++
++static struct miscdevice au1550spi_miscdev =
++{
++      MISC_DYNAMIC_MINOR,
++      "au1550_spi",
++      &au1550spi_fops
++};
++
++
++int __init
++au1550spi_init(void)
++{
++      uint    clk, rate, stat;
++      volatile psc_spi_t *sp;
++
++      /* Wire up Freq3 as a clock for the SPI.  The PSC does
++       * factor of 2 divisor, so run a higher rate so we can
++       * get some granularity to the clock speeds.
++       * We can't do this in board set up because the frequency
++       * is computed too late.
++       */
++      rate = get_au1x00_speed();
++      rate /= PSC_INTCLK_RATE;
++
++      /* The FRDIV in the frequency control is (FRDIV + 1) * 2
++      */
++      rate /=2;
++      rate--;
++      clk = au_readl(SYS_FREQCTRL1);
++      au_sync();
++      clk &= ~SYS_FC_FRDIV3_MASK;
++      clk |= (rate << SYS_FC_FRDIV3_BIT);
++      clk |= SYS_FC_FE3;
++      au_writel(clk, SYS_FREQCTRL1);
++      au_sync();
++
++      /* Set up the clock source routing to get Freq3 to PSC0_intclk.
++      */
++      clk = au_readl(SYS_CLKSRC);
++      au_sync();
++      clk &= ~0x03e0;
++      clk |= (5 << 7);
++      au_writel(clk, SYS_CLKSRC);
++      au_sync();
++
++      /* Set up GPIO pin function to drive PSC0_SYNC1, which is
++       * the SPI Select.
++       */
++      clk = au_readl(SYS_PINFUNC);
++      au_sync();
++      clk |= 1;
++      au_writel(clk, SYS_PINFUNC);
++      au_sync();
++
++      /* Now, set up the PSC for SPI PIO mode.
++      */
++      sp = (volatile psc_spi_t *)SPI_PSC_BASE;
++      sp->psc_ctrl = PSC_CTRL_DISABLE;
++      au_sync();
++      sp->psc_sel = PSC_SEL_PS_SPIMODE;
++      sp->psc_spicfg = 0;
++      au_sync();
++      sp->psc_ctrl = PSC_CTRL_ENABLE;
++      au_sync();
++      do {
++              stat = sp->psc_spistat;
++              au_sync();
++      } while ((stat & PSC_SPISTAT_SR) == 0);
++
++      sp->psc_spicfg = (PSC_SPICFG_RT_FIFO8 | PSC_SPICFG_TT_FIFO8 |
++                              PSC_SPICFG_DD_DISABLE | PSC_SPICFG_MO);
++      sp->psc_spicfg |= PSC_SPICFG_SET_LEN(8);
++      spi_datalen = 8;
++      sp->psc_spimsk = PSC_SPIMSK_ALLMASK;
++      au_sync();
++
++      set_baud_rate(1000000);
++
++      sp->psc_spicfg |= PSC_SPICFG_DE_ENABLE;
++      do {
++              stat = sp->psc_spistat;
++              au_sync();
++      } while ((stat & PSC_SPISTAT_DR) == 0);
++
++      misc_register(&au1550spi_miscdev);
++      printk("Au1550 SPI driver\n");
++      return 0;
++}     
++
++
++void __exit
++au1550spi_exit(void)
++{
++      misc_deregister(&au1550spi_miscdev);
++}
++
++
++module_init(au1550spi_init);
++module_exit(au1550spi_exit);
+diff -Nur linux-2.4.29/drivers/char/decserial.c linux-mips/drivers/char/decserial.c
+--- linux-2.4.29/drivers/char/decserial.c      2003-08-25 13:44:41.000000000 +0200
++++ linux-mips/drivers/char/decserial.c        2004-09-28 02:53:01.000000000 +0200
+@@ -3,95 +3,105 @@
+  *      choose the right serial device at boot time
+  *
+  * triemer 6-SEP-1998
+- *      sercons.c is designed to allow the three different kinds 
++ *      sercons.c is designed to allow the three different kinds
+  *      of serial devices under the decstation world to co-exist
+- *      in the same kernel.  The idea here is to abstract 
++ *      in the same kernel.  The idea here is to abstract
+  *      the pieces of the drivers that are common to this file
+  *      so that they do not clash at compile time and runtime.
+  *
+  * HK 16-SEP-1998 v0.002
+  *      removed the PROM console as this is not a real serial
+  *      device. Added support for PROM console in drivers/char/tty_io.c
+- *      instead. Although it may work to enable more than one 
++ *      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>
++#include <asm/dec/serial.h>
++
++extern int register_zs_hook(unsigned int channel,
++                          struct dec_serial_hook *hook);
++extern int unregister_zs_hook(unsigned int channel);
++
++extern int register_dz_hook(unsigned int channel,
++                          struct dec_serial_hook *hook);
++extern int unregister_dz_hook(unsigned int channel);
++int register_dec_serial_hook(unsigned int channel,
++                           struct dec_serial_hook *hook)
++{
+ #ifdef CONFIG_ZS
+-extern int zs_init(void);
++      if (IOASIC)
++              return register_zs_hook(channel, hook);
+ #endif
+-
+ #ifdef CONFIG_DZ
+-extern int dz_init(void);
++      if (!IOASIC)
++              return register_dz_hook(channel, hook);
+ #endif
++      return 0;
++}
+-#ifdef CONFIG_SERIAL_DEC_CONSOLE
+-
++int unregister_dec_serial_hook(unsigned int channel)
++{
+ #ifdef CONFIG_ZS
+-extern void zs_serial_console_init(void);
++      if (IOASIC)
++              return unregister_zs_hook(channel);
+ #endif
+-
+ #ifdef CONFIG_DZ
+-extern void dz_serial_console_init(void);
+-#endif
+-
++      if (!IOASIC)
++              return unregister_dz_hook(channel);
+ #endif
++      return 0;
++}
+-/* rs_init - starts up the serial interface -
+-   handle normal case of starting up the serial interface */
+-#ifdef CONFIG_SERIAL_DEC
++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_DEC_CONSOLE
+-/* dec_serial_console_init handles the special case of starting
+- *   up the console on the serial port
++extern void zs_serial_console_init(void);
++extern void dz_serial_console_init(void);
++
++/*
++ * dec_serial_console_init handles the special case of starting
++ * up the console on the serial port
+  */
+ void __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
+ }
+diff -Nur linux-2.4.29/drivers/char/ds1286.c linux-mips/drivers/char/ds1286.c
+--- linux-2.4.29/drivers/char/ds1286.c 2004-02-18 14:36:31.000000000 +0100
++++ linux-mips/drivers/char/ds1286.c   2004-01-10 06:21:39.000000000 +0100
+@@ -1,6 +1,10 @@
+ /*
+  * DS1286 Real Time Clock interface for Linux
+  *
++ * Copyright (C) 2003 TimeSys Corp.
++ *                    S. James Hill (James.Hill@timesys.com)
++ *                                  (sjhill@realitydiluted.com)
++ *
+  * Copyright (C) 1998, 1999, 2000 Ralf Baechle
+  *
+  * Based on code written by Paul Gortmaker.
+@@ -29,6 +33,7 @@
+ #include <linux/types.h>
+ #include <linux/errno.h>
+ #include <linux/miscdevice.h>
++#include <linux/module.h>
+ #include <linux/slab.h>
+ #include <linux/ioport.h>
+ #include <linux/fcntl.h>
+@@ -95,6 +100,12 @@
+       return -EIO;
+ }
++void rtc_ds1286_wait(void)
++{
++      unsigned char sec = CMOS_READ(RTC_SECONDS);
++      while (sec == CMOS_READ(RTC_SECONDS));
++}
++
+ static int ds1286_ioctl(struct inode *inode, struct file *file,
+                         unsigned int cmd, unsigned long arg)
+ {
+@@ -249,23 +260,22 @@
+ {
+       spin_lock_irq(&ds1286_lock);
+-      if (ds1286_status & RTC_IS_OPEN)
+-              goto out_busy;
++      if (ds1286_status & RTC_IS_OPEN) {
++              spin_unlock_irq(&ds1286_lock);
++              return -EBUSY;
++      }
+       ds1286_status |= RTC_IS_OPEN;
+-