From 19887d557e01aad2145fa3ad086bc12a8d04695a Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 6 Jan 2008 19:28:07 +0000 Subject: update brcm-2.4 to 2.4.35.4, integrate new broadcom system code, update broadcom-wl to a contributed version (v4.150.10.5) - no bcm57xx support yet, will follow shortly git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10137 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/brcm-2.4/patches/001-bcm47xx.patch | 132 ++++---- target/linux/brcm-2.4/patches/002-wl_fix.patch | 348 --------------------- .../brcm-2.4/patches/003-bcm47xx_cache_fixes.patch | 83 ++--- target/linux/brcm-2.4/patches/004-flash.patch | 28 +- .../patches/005-bluetooth_sco_buffer_align.patch | 6 +- .../brcm-2.4/patches/006-ide_workaround.patch | 7 +- .../brcm-2.4/patches/008-b44_bcm47xx_support.patch | 47 +-- .../brcm-2.4/patches/009-wrt54g3g_pcmcia.patch | 7 +- .../brcm-2.4/patches/010-bcm47xx-cam_absent.patch | 14 +- .../linux/brcm-2.4/patches/011-wl_qdisc_war.patch | 6 +- target/linux/brcm-2.4/patches/012-aec62xx.patch | 15 +- .../brcm-2.4/patches/013-wl_hdd_pdc202xx.patch | 7 +- target/linux/brcm-2.4/patches/014-bcm5354.patch | 155 --------- 13 files changed, 196 insertions(+), 659 deletions(-) delete mode 100644 target/linux/brcm-2.4/patches/002-wl_fix.patch delete mode 100644 target/linux/brcm-2.4/patches/014-bcm5354.patch (limited to 'target/linux/brcm-2.4/patches') diff --git a/target/linux/brcm-2.4/patches/001-bcm47xx.patch b/target/linux/brcm-2.4/patches/001-bcm47xx.patch index 96d340b260..351fe28804 100644 --- a/target/linux/brcm-2.4/patches/001-bcm47xx.patch +++ b/target/linux/brcm-2.4/patches/001-bcm47xx.patch @@ -1,6 +1,7 @@ -diff -urN linux.old/arch/mips/config-shared.in linux.dev/arch/mips/config-shared.in ---- linux.old/arch/mips/config-shared.in 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/arch/mips/config-shared.in 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/config-shared.in +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/config-shared.in 2007-12-15 05:19:53.151449966 +0100 ++++ linux-2.4.35.4/arch/mips/config-shared.in 2007-12-15 05:20:13.936634447 +0100 @@ -208,6 +208,14 @@ fi define_bool CONFIG_MIPS_RTC y @@ -54,9 +55,10 @@ diff -urN linux.old/arch/mips/config-shared.in linux.dev/arch/mips/config-shared dep_bool ' Console output to GDB' CONFIG_GDB_CONSOLE $CONFIG_KGDB if [ "$CONFIG_KGDB" = "y" ]; then define_bool CONFIG_DEBUG_INFO y -diff -urN linux.old/arch/mips/kernel/cpu-probe.c linux.dev/arch/mips/kernel/cpu-probe.c ---- linux.old/arch/mips/kernel/cpu-probe.c 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/arch/mips/kernel/cpu-probe.c 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/kernel/cpu-probe.c +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/kernel/cpu-probe.c 2007-12-15 05:19:44.862977633 +0100 ++++ linux-2.4.35.4/arch/mips/kernel/cpu-probe.c 2007-12-15 05:20:13.944634901 +0100 @@ -162,7 +162,7 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c) @@ -176,9 +178,10 @@ diff -urN linux.old/arch/mips/kernel/cpu-probe.c linux.dev/arch/mips/kernel/cpu- case PRID_COMP_SIBYTE: cpu_probe_sibyte(c); break; -diff -urN linux.old/arch/mips/kernel/head.S linux.dev/arch/mips/kernel/head.S ---- linux.old/arch/mips/kernel/head.S 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/arch/mips/kernel/head.S 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/kernel/head.S +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/kernel/head.S 2007-12-15 05:19:44.866977862 +0100 ++++ linux-2.4.35.4/arch/mips/kernel/head.S 2007-12-15 05:20:13.944634901 +0100 @@ -28,12 +28,20 @@ #include #include @@ -201,9 +204,10 @@ diff -urN linux.old/arch/mips/kernel/head.S linux.dev/arch/mips/kernel/head.S /* The following two symbols are used for kernel profiling. */ EXPORT(stext) -diff -urN linux.old/arch/mips/kernel/proc.c linux.dev/arch/mips/kernel/proc.c ---- linux.old/arch/mips/kernel/proc.c 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/arch/mips/kernel/proc.c 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/kernel/proc.c +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/kernel/proc.c 2007-12-15 05:19:36.358492990 +0100 ++++ linux-2.4.35.4/arch/mips/kernel/proc.c 2007-12-15 05:20:13.944634901 +0100 @@ -78,9 +78,10 @@ [CPU_AU1550] "Au1550", [CPU_24K] "MIPS 24K", @@ -216,9 +220,10 @@ diff -urN linux.old/arch/mips/kernel/proc.c linux.dev/arch/mips/kernel/proc.c static int show_cpuinfo(struct seq_file *m, void *v) { unsigned int version = current_cpu_data.processor_id; -diff -urN linux.old/arch/mips/kernel/setup.c linux.dev/arch/mips/kernel/setup.c ---- linux.old/arch/mips/kernel/setup.c 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/arch/mips/kernel/setup.c 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/kernel/setup.c +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/kernel/setup.c 2007-12-15 05:19:44.866977862 +0100 ++++ linux-2.4.35.4/arch/mips/kernel/setup.c 2007-12-15 05:20:13.944634901 +0100 @@ -493,6 +493,7 @@ void swarm_setup(void); void hp_setup(void); @@ -239,9 +244,10 @@ diff -urN linux.old/arch/mips/kernel/setup.c linux.dev/arch/mips/kernel/setup.c default: panic("Unsupported architecture"); } -diff -urN linux.old/arch/mips/kernel/traps.c linux.dev/arch/mips/kernel/traps.c ---- linux.old/arch/mips/kernel/traps.c 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/arch/mips/kernel/traps.c 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/kernel/traps.c +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/kernel/traps.c 2007-12-15 05:19:44.870978088 +0100 ++++ linux-2.4.35.4/arch/mips/kernel/traps.c 2007-12-15 05:20:13.944634901 +0100 @@ -920,6 +920,7 @@ void __init trap_init(void) { @@ -271,9 +277,10 @@ diff -urN linux.old/arch/mips/kernel/traps.c linux.dev/arch/mips/kernel/traps.c if (cpu_has_fpu && !cpu_has_nofpuex) set_except_vector(15, handle_fpe); -diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile ---- linux.old/arch/mips/Makefile 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/arch/mips/Makefile 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/Makefile +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/Makefile 2007-12-15 05:19:51.215339635 +0100 ++++ linux-2.4.35.4/arch/mips/Makefile 2007-12-15 05:20:13.948635130 +0100 @@ -726,6 +726,19 @@ endif @@ -294,7 +301,7 @@ diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile # Choosing incompatible machines durings configuration will result in # error messages during linking. Select a default linkscript if # none has been choosen above. -@@ -778,6 +791,7 @@ +@@ -779,6 +792,7 @@ $(MAKE) -C arch/$(ARCH)/tools clean $(MAKE) -C arch/mips/baget clean $(MAKE) -C arch/mips/lasat clean @@ -302,10 +309,11 @@ diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile archmrproper: @$(MAKEBOOT) mrproper -diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c ---- linux.old/arch/mips/mm/c-r4k.c 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/arch/mips/mm/c-r4k.c 2006-10-02 21:19:59.000000000 +0200 -@@ -1166,3 +1166,47 @@ +Index: linux-2.4.35.4/arch/mips/mm/c-r4k.c +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/mm/c-r4k.c 2007-12-15 05:19:44.874978317 +0100 ++++ linux-2.4.35.4/arch/mips/mm/c-r4k.c 2007-12-15 05:20:13.948635130 +0100 +@@ -1118,3 +1118,47 @@ build_clear_page(); build_copy_page(); } @@ -353,9 +361,10 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c +} + + -diff -urN linux.old/arch/mips/pci/Makefile linux.dev/arch/mips/pci/Makefile ---- linux.old/arch/mips/pci/Makefile 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/arch/mips/pci/Makefile 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/pci/Makefile +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/pci/Makefile 2007-12-15 05:19:36.398495270 +0100 ++++ linux-2.4.35.4/arch/mips/pci/Makefile 2007-12-15 05:20:13.948635130 +0100 @@ -13,7 +13,9 @@ obj-$(CONFIG_MIPS_MSC) += ops-msc.o obj-$(CONFIG_MIPS_NILE4) += ops-nile4.o @@ -366,9 +375,10 @@ diff -urN linux.old/arch/mips/pci/Makefile linux.dev/arch/mips/pci/Makefile obj-$(CONFIG_PCI_AUTO) += pci_auto.o include $(TOPDIR)/Rules.make -diff -urN linux.old/drivers/char/serial.c linux.dev/drivers/char/serial.c ---- linux.old/drivers/char/serial.c 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/drivers/char/serial.c 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/drivers/char/serial.c +=================================================================== +--- linux-2.4.35.4.orig/drivers/char/serial.c 2007-12-15 05:20:00.539871010 +0100 ++++ linux-2.4.35.4/drivers/char/serial.c 2007-12-15 05:20:13.952635360 +0100 @@ -444,6 +444,10 @@ return inb(info->port+1); #endif @@ -437,9 +447,10 @@ diff -urN linux.old/drivers/char/serial.c linux.dev/drivers/char/serial.c cval = cflag & (CSIZE | CSTOPB); #if defined(__powerpc__) || defined(__alpha__) cval >>= 8; -diff -urN linux.old/drivers/net/Makefile linux.dev/drivers/net/Makefile ---- linux.old/drivers/net/Makefile 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/drivers/net/Makefile 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/drivers/net/Makefile +=================================================================== +--- linux-2.4.35.4.orig/drivers/net/Makefile 2007-12-15 05:20:10.804455954 +0100 ++++ linux-2.4.35.4/drivers/net/Makefile 2007-12-15 05:20:13.952635360 +0100 @@ -3,6 +3,8 @@ # Makefile for the Linux network (ethercard) device drivers. # @@ -449,9 +460,10 @@ diff -urN linux.old/drivers/net/Makefile linux.dev/drivers/net/Makefile obj-y := obj-m := obj-n := -diff -urN linux.old/drivers/parport/Config.in linux.dev/drivers/parport/Config.in ---- linux.old/drivers/parport/Config.in 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/drivers/parport/Config.in 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/drivers/parport/Config.in +=================================================================== +--- linux-2.4.35.4.orig/drivers/parport/Config.in 2007-12-15 05:19:36.422496639 +0100 ++++ linux-2.4.35.4/drivers/parport/Config.in 2007-12-15 05:20:13.956635587 +0100 @@ -11,6 +11,7 @@ tristate 'Parallel port support' CONFIG_PARPORT if [ "$CONFIG_PARPORT" != "n" ]; then @@ -460,9 +472,10 @@ diff -urN linux.old/drivers/parport/Config.in linux.dev/drivers/parport/Config.i if [ "$CONFIG_PARPORT_PC" != "n" -a "$CONFIG_SERIAL" != "n" ]; then if [ "$CONFIG_SERIAL" = "m" ]; then define_tristate CONFIG_PARPORT_PC_CML1 m -diff -urN linux.old/drivers/parport/Makefile linux.dev/drivers/parport/Makefile ---- linux.old/drivers/parport/Makefile 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/drivers/parport/Makefile 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/drivers/parport/Makefile +=================================================================== +--- linux-2.4.35.4.orig/drivers/parport/Makefile 2007-12-15 05:19:36.430497094 +0100 ++++ linux-2.4.35.4/drivers/parport/Makefile 2007-12-15 05:20:13.956635587 +0100 @@ -22,6 +22,7 @@ obj-$(CONFIG_PARPORT) += parport.o @@ -471,9 +484,10 @@ diff -urN linux.old/drivers/parport/Makefile linux.dev/drivers/parport/Makefile obj-$(CONFIG_PARPORT_PC_PCMCIA) += parport_cs.o obj-$(CONFIG_PARPORT_AMIGA) += parport_amiga.o obj-$(CONFIG_PARPORT_MFC3) += parport_mfc3.o -diff -urN linux.old/include/asm-mips/bootinfo.h linux.dev/include/asm-mips/bootinfo.h ---- linux.old/include/asm-mips/bootinfo.h 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/include/asm-mips/bootinfo.h 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/include/asm-mips/bootinfo.h +=================================================================== +--- linux-2.4.35.4.orig/include/asm-mips/bootinfo.h 2007-12-15 05:19:45.026986980 +0100 ++++ linux-2.4.35.4/include/asm-mips/bootinfo.h 2007-12-15 05:20:13.956635587 +0100 @@ -37,6 +37,7 @@ #define MACH_GROUP_HP_LJ 20 /* Hewlett Packard LaserJet */ #define MACH_GROUP_LASAT 21 @@ -498,9 +512,10 @@ diff -urN linux.old/include/asm-mips/bootinfo.h linux.dev/include/asm-mips/booti * Valid machtype for group TITAN */ #define MACH_TITAN_YOSEMITE 1 /* PMC-Sierra Yosemite */ -diff -urN linux.old/include/asm-mips/cpu.h linux.dev/include/asm-mips/cpu.h ---- linux.old/include/asm-mips/cpu.h 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/include/asm-mips/cpu.h 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/include/asm-mips/cpu.h +=================================================================== +--- linux-2.4.35.4.orig/include/asm-mips/cpu.h 2007-12-15 05:19:36.442497779 +0100 ++++ linux-2.4.35.4/include/asm-mips/cpu.h 2007-12-15 05:20:13.956635587 +0100 @@ -22,6 +22,11 @@ spec. */ @@ -549,10 +564,11 @@ diff -urN linux.old/include/asm-mips/cpu.h linux.dev/include/asm-mips/cpu.h /* * ISA Level encodings -diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kcache.h ---- linux.old/include/asm-mips/r4kcache.h 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/include/asm-mips/r4kcache.h 2006-10-02 21:19:59.000000000 +0200 -@@ -658,4 +658,17 @@ +Index: linux-2.4.35.4/include/asm-mips/r4kcache.h +=================================================================== +--- linux-2.4.35.4.orig/include/asm-mips/r4kcache.h 2007-12-15 05:19:36.450498234 +0100 ++++ linux-2.4.35.4/include/asm-mips/r4kcache.h 2007-12-15 05:20:13.960635812 +0100 +@@ -567,4 +567,17 @@ cache128_unroll32(addr|ws,Index_Writeback_Inv_SD); } @@ -570,9 +586,10 @@ diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kca +} + #endif /* __ASM_R4KCACHE_H */ -diff -urN linux.old/include/asm-mips/serial.h linux.dev/include/asm-mips/serial.h ---- linux.old/include/asm-mips/serial.h 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/include/asm-mips/serial.h 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/include/asm-mips/serial.h +=================================================================== +--- linux-2.4.35.4.orig/include/asm-mips/serial.h 2007-12-15 05:19:36.458498689 +0100 ++++ linux-2.4.35.4/include/asm-mips/serial.h 2007-12-15 05:20:13.960635812 +0100 @@ -223,6 +223,13 @@ #define TXX927_SERIAL_PORT_DEFNS #endif @@ -595,9 +612,10 @@ diff -urN linux.old/include/asm-mips/serial.h linux.dev/include/asm-mips/serial. COBALT_SERIAL_PORT_DEFNS \ DDB5477_SERIAL_PORT_DEFNS \ EV96100_SERIAL_PORT_DEFNS \ -diff -urN linux.old/init/do_mounts.c linux.dev/init/do_mounts.c ---- linux.old/init/do_mounts.c 2006-10-02 21:23:10.000000000 +0200 -+++ linux.dev/init/do_mounts.c 2006-10-02 21:19:59.000000000 +0200 +Index: linux-2.4.35.4/init/do_mounts.c +=================================================================== +--- linux-2.4.35.4.orig/init/do_mounts.c 2007-12-15 05:19:48.667194423 +0100 ++++ linux-2.4.35.4/init/do_mounts.c 2007-12-15 05:20:13.960635812 +0100 @@ -254,7 +254,13 @@ { "ftlb", 0x2c08 }, { "ftlc", 0x2c10 }, diff --git a/target/linux/brcm-2.4/patches/002-wl_fix.patch b/target/linux/brcm-2.4/patches/002-wl_fix.patch deleted file mode 100644 index 95044b6d60..0000000000 --- a/target/linux/brcm-2.4/patches/002-wl_fix.patch +++ /dev/null @@ -1,348 +0,0 @@ -diff -urN linux.old/include/linux/netdevice.h linux.dev/include/linux/netdevice.h ---- linux.old/include/linux/netdevice.h 2006-03-19 06:32:22.000000000 +0100 -+++ linux.dev/include/linux/netdevice.h 2006-03-19 06:33:21.000000000 +0100 -@@ -296,10 +296,7 @@ - /* List of functions to handle Wireless Extensions (instead of ioctl). - * See for details. Jean II */ - const struct iw_handler_def * wireless_handlers; -- /* Instance data managed by the core of Wireless Extensions. */ -- struct iw_public_data * wireless_data; - -- struct ethtool_ops *ethtool_ops; - - /* - * This marks the end of the "visible" part of the structure. All -@@ -354,8 +351,8 @@ - - struct Qdisc *qdisc; - struct Qdisc *qdisc_sleeping; -+ struct Qdisc *qdisc_list; - struct Qdisc *qdisc_ingress; -- struct list_head qdisc_list; - unsigned long tx_queue_len; /* Max frames per queue allowed */ - - /* hard_start_xmit synchronizer */ -@@ -455,6 +452,10 @@ - /* this will get initialized at each interface type init routine */ - struct divert_blk *divert; - #endif /* CONFIG_NET_DIVERT */ -+ struct ethtool_ops *ethtool_ops; -+ -+ /* Instance data managed by the core of Wireless Extensions. */ -+ struct iw_public_data * wireless_data; - }; - - /* 2.6 compatibility */ -diff -urN linux.old/include/linux/skbuff.h linux.dev/include/linux/skbuff.h ---- linux.old/include/linux/skbuff.h 2006-03-19 06:32:22.000000000 +0100 -+++ linux.dev/include/linux/skbuff.h 2006-03-19 06:29:41.000000000 +0100 -@@ -138,10 +138,6 @@ - struct sock *sk; /* Socket we are owned by */ - struct timeval stamp; /* Time we arrived */ - struct net_device *dev; /* Device we arrived on/are leaving by */ -- struct net_device *real_dev; /* For support of point to point protocols -- (e.g. 802.3ad) over bonding, we must save the -- physical device that got the packet before -- replacing skb->dev with the virtual device. */ - - /* Transport layer header */ - union -@@ -225,6 +221,10 @@ - #if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) - struct nf_info *nf_info; - #endif -+ struct net_device *real_dev; /* For support of point to point protocols -+ (e.g. 802.3ad) over bonding, we must save the -+ physical device that got the packet before -+ replacing skb->dev with the virtual device. */ - }; - - #ifdef __KERNEL__ -diff -urN linux.old/include/net/pkt_sched.h linux.dev/include/net/pkt_sched.h ---- linux.old/include/net/pkt_sched.h 2006-03-19 06:32:22.000000000 +0100 -+++ linux.dev/include/net/pkt_sched.h 2006-03-19 06:29:41.000000000 +0100 -@@ -63,8 +63,11 @@ - int (*enqueue)(struct sk_buff *, struct Qdisc *); - struct sk_buff * (*dequeue)(struct Qdisc *); - int (*requeue)(struct sk_buff *, struct Qdisc *); -- unsigned int (*drop)(struct Qdisc *); -- -+#ifdef CONFIG_BCM4710 -+ int (*drop)(struct Qdisc *); -+#else -+ unsigned int (*drop)(struct Qdisc *); -+#endif - int (*init)(struct Qdisc *, struct rtattr *arg); - void (*reset)(struct Qdisc *); - void (*destroy)(struct Qdisc *); -@@ -84,12 +87,19 @@ - #define TCQ_F_THROTTLED 2 - #define TCQ_F_INGRESS 4 - struct Qdisc_ops *ops; -+#ifdef CONFIG_BCM4710 -+ struct Qdisc *next; -+#endif - u32 handle; -- u32 parent; -+#ifndef CONFIG_BCM4710 -+ u32 parent; -+#endif - atomic_t refcnt; - struct sk_buff_head q; - struct net_device *dev; -- struct list_head list; -+#ifndef CONFIG_BCM4710 -+ struct list_head list; -+#endif - - struct tc_stats stats; - int (*reshape_fail)(struct sk_buff *skb, struct Qdisc *q); -diff -urN linux.old/net/core/Makefile linux.dev/net/core/Makefile ---- linux.old/net/core/Makefile 2006-03-19 06:32:22.000000000 +0100 -+++ linux.dev/net/core/Makefile 2006-03-19 06:29:41.000000000 +0100 -@@ -9,7 +9,11 @@ - - O_TARGET := core.o - -+ifeq ($(CONFIG_BCM4710),y) -+export-objs := netfilter.o profile.o neighbour.o -+else - export-objs := netfilter.o profile.o ethtool.o neighbour.o -+endif - - obj-y := sock.o skbuff.o iovec.o datagram.o scm.o - -@@ -21,8 +25,13 @@ - - obj-$(CONFIG_FILTER) += filter.o - -+ifeq ($(CONFIG_BCM4710),y) -+obj-$(CONFIG_NET) += dev.o dev_mcast.o dst.o neighbour.o \ -+ rtnetlink.o utils.o -+else - obj-$(CONFIG_NET) += dev.o ethtool.o dev_mcast.o dst.o neighbour.o \ - rtnetlink.o utils.o -+endif - - obj-$(CONFIG_NETFILTER) += netfilter.o - obj-$(CONFIG_NET_DIVERT) += dv.o -diff -urN linux.old/net/core/dev.c linux.dev/net/core/dev.c ---- linux.old/net/core/dev.c 2006-03-19 06:32:22.000000000 +0100 -+++ linux.dev/net/core/dev.c 2006-03-19 06:29:41.000000000 +0100 -@@ -2232,6 +2232,7 @@ - cmd == SIOCGMIIPHY || - cmd == SIOCGMIIREG || - cmd == SIOCSMIIREG || -+ cmd == SIOCETHTOOL || - cmd == SIOCWANDEV) { - if (dev->do_ioctl) { - if (!netif_device_present(dev)) -@@ -2324,6 +2325,7 @@ - } - return ret; - -+#ifndef CONFIG_BCM4710 - case SIOCETHTOOL: - dev_load(ifr.ifr_name); - rtnl_lock(); -@@ -2337,6 +2339,7 @@ - ret = -EFAULT; - } - return ret; -+#endif - - /* - * These ioctl calls: -@@ -2412,6 +2415,7 @@ - - default: - if (cmd == SIOCWANDEV || -+ (cmd == SIOCETHTOOL) || - (cmd >= SIOCDEVPRIVATE && - cmd <= SIOCDEVPRIVATE + 15)) { - dev_load(ifr.ifr_name); -diff -urN linux.old/net/sched/sch_api.c linux.dev/net/sched/sch_api.c ---- linux.old/net/sched/sch_api.c 2006-03-19 06:32:22.000000000 +0100 -+++ linux.dev/net/sched/sch_api.c 2006-03-19 06:29:41.000000000 +0100 -@@ -194,11 +194,12 @@ - { - struct Qdisc *q; - -- list_for_each_entry(q, &dev->qdisc_list, list) { -+ for (q = dev->qdisc_list; q; q = q->next) { - if (q->handle == handle) - return q; - } - return NULL; -+ - } - - struct Qdisc *qdisc_leaf(struct Qdisc *p, u32 classid) -@@ -371,8 +372,6 @@ - unsigned long cl = cops->get(parent, classid); - if (cl) { - err = cops->graft(parent, cl, new, old); -- if (new) -- new->parent = classid; - cops->put(parent, cl); - } - } -@@ -427,7 +426,6 @@ - - memset(sch, 0, size); - -- INIT_LIST_HEAD(&sch->list); - skb_queue_head_init(&sch->q); - - if (handle == TC_H_INGRESS) -@@ -453,7 +451,8 @@ - - if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS-1])) == 0) { - write_lock(&qdisc_tree_lock); -- list_add_tail(&sch->list, &dev->qdisc_list); -+ sch->next = dev->qdisc_list; -+ dev->qdisc_list = sch; - write_unlock(&qdisc_tree_lock); - #ifdef CONFIG_NET_ESTIMATOR - if (tca[TCA_RATE-1]) -@@ -808,19 +807,16 @@ - if (idx > s_idx) - s_q_idx = 0; - read_lock(&qdisc_tree_lock); -- q_idx = 0; -- list_for_each_entry(q, &dev->qdisc_list, list) { -- if (q_idx < s_q_idx) { -- q_idx++; -- continue; -- } -- if (tc_fill_qdisc(skb, q, q->parent, NETLINK_CB(cb->skb).pid, -- cb->nlh->nlmsg_seq, NLM_F_MULTI, RTM_NEWQDISC) <= 0) { -- read_unlock(&qdisc_tree_lock); -- goto done; -- } -- q_idx++; -- } -+ for (q = dev->qdisc_list, q_idx = 0; q; -+ q = q->next, q_idx++) { -+ if (q_idx < s_q_idx) -+ continue; -+ if (tc_fill_qdisc(skb, q, 0, NETLINK_CB(cb->skb).pid, -+ cb->nlh->nlmsg_seq, NLM_F_MULTI, RTM_NEWQDISC) <= 0) { -+ read_unlock(&qdisc_tree_lock); -+ goto done; -+ } -+ } - read_unlock(&qdisc_tree_lock); - } - -@@ -1033,27 +1029,24 @@ - t = 0; - - read_lock(&qdisc_tree_lock); -- list_for_each_entry(q, &dev->qdisc_list, list) { -- if (t < s_t || !q->ops->cl_ops || -- (tcm->tcm_parent && -- TC_H_MAJ(tcm->tcm_parent) != q->handle)) { -- t++; -- continue; -- } -- if (t > s_t) -- memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(cb->args[0])); -- arg.w.fn = qdisc_class_dump; -- arg.skb = skb; -- arg.cb = cb; -- arg.w.stop = 0; -- arg.w.skip = cb->args[1]; -- arg.w.count = 0; -- q->ops->cl_ops->walk(q, &arg.w); -- cb->args[1] = arg.w.count; -- if (arg.w.stop) -- break; -- t++; -- } -+ for (q=dev->qdisc_list, t=0; q; q = q->next, t++) { -+ if (t < s_t) continue; -+ if (!q->ops->cl_ops) continue; -+ if (tcm->tcm_parent && TC_H_MAJ(tcm->tcm_parent) != q->handle) -+ continue; -+ if (t > s_t) -+ memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(cb->args[0])); -+ arg.w.fn = qdisc_class_dump; -+ arg.skb = skb; -+ arg.cb = cb; -+ arg.w.stop = 0; -+ arg.w.skip = cb->args[1]; -+ arg.w.count = 0; -+ q->ops->cl_ops->walk(q, &arg.w); -+ cb->args[1] = arg.w.count; -+ if (arg.w.stop) -+ break; -+ } - read_unlock(&qdisc_tree_lock); - - cb->args[0] = t; -diff -urN linux.old/net/sched/sch_generic.c linux.dev/net/sched/sch_generic.c ---- linux.old/net/sched/sch_generic.c 2006-03-19 06:32:22.000000000 +0100 -+++ linux.dev/net/sched/sch_generic.c 2006-03-19 06:29:41.000000000 +0100 -@@ -399,7 +399,6 @@ - return NULL; - memset(sch, 0, size); - -- INIT_LIST_HEAD(&sch->list); - skb_queue_head_init(&sch->q); - sch->ops = ops; - sch->enqueue = ops->enqueue; -@@ -429,11 +428,22 @@ - void qdisc_destroy(struct Qdisc *qdisc) - { - struct Qdisc_ops *ops = qdisc->ops; -+ struct net_device *dev; - - if (qdisc->flags&TCQ_F_BUILTIN || - !atomic_dec_and_test(&qdisc->refcnt)) - return; -- list_del(&qdisc->list); -+ -+ dev = qdisc->dev; -+ if (dev) { -+ struct Qdisc *q, **qp; -+ for (qp = &qdisc->dev->qdisc_list; (q=*qp) != NULL; qp = &q->next) { -+ if (q == qdisc) { -+ *qp = q->next; -+ break; -+ } -+ } -+ } - #ifdef CONFIG_NET_ESTIMATOR - qdisc_kill_estimator(&qdisc->stats); - #endif -@@ -462,9 +472,9 @@ - return; - } - write_lock(&qdisc_tree_lock); -- list_add_tail(&qdisc->list, &dev->qdisc_list); -+ qdisc->next = dev->qdisc_list; -+ dev->qdisc_list = qdisc; - write_unlock(&qdisc_tree_lock); -- - } else { - qdisc = &noqueue_qdisc; - } -@@ -508,7 +518,7 @@ - dev->qdisc = &noop_qdisc; - spin_unlock_bh(&dev->queue_lock); - dev->qdisc_sleeping = &noop_qdisc; -- INIT_LIST_HEAD(&dev->qdisc_list); -+ dev->qdisc_list = NULL; - write_unlock(&qdisc_tree_lock); - - dev_watchdog_init(dev); -@@ -530,7 +540,7 @@ - qdisc_destroy(qdisc); - } - #endif -- BUG_TRAP(list_empty(&dev->qdisc_list)); -+ BUG_TRAP(dev->qdisc_list == NULL); - BUG_TRAP(!timer_pending(&dev->watchdog_timer)); - spin_unlock_bh(&dev->queue_lock); - write_unlock(&qdisc_tree_lock); diff --git a/target/linux/brcm-2.4/patches/003-bcm47xx_cache_fixes.patch b/target/linux/brcm-2.4/patches/003-bcm47xx_cache_fixes.patch index e971e7fdfd..00bd7a7ef5 100644 --- a/target/linux/brcm-2.4/patches/003-bcm47xx_cache_fixes.patch +++ b/target/linux/brcm-2.4/patches/003-bcm47xx_cache_fixes.patch @@ -1,6 +1,7 @@ -diff -urN linux.old/arch/mips/kernel/entry.S linux.dev/arch/mips/kernel/entry.S ---- linux.old/arch/mips/kernel/entry.S 2005-07-05 16:46:49.000000000 +0200 -+++ linux.dev/arch/mips/kernel/entry.S 2005-07-06 11:23:55.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/kernel/entry.S +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/kernel/entry.S 2007-12-15 05:19:36.266487747 +0100 ++++ linux-2.4.35.4/arch/mips/kernel/entry.S 2007-12-15 05:20:14.372659296 +0100 @@ -100,6 +100,10 @@ * and R4400 SC and MC versions. */ @@ -12,9 +13,10 @@ diff -urN linux.old/arch/mips/kernel/entry.S linux.dev/arch/mips/kernel/entry.S #if R5432_CP0_INTERRUPT_WAR mfc0 k0, CP0_INDEX #endif -diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c ---- linux.old/arch/mips/mm/c-r4k.c 2005-07-05 16:46:49.000000000 +0200 -+++ linux.dev/arch/mips/mm/c-r4k.c 2005-07-06 11:23:55.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/mm/c-r4k.c +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/mm/c-r4k.c 2007-12-15 05:20:13.948635130 +0100 ++++ linux-2.4.35.4/arch/mips/mm/c-r4k.c 2007-12-15 05:20:14.376659523 +0100 @@ -14,6 +14,12 @@ #include #include @@ -28,16 +30,15 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c #include #include #include -@@ -40,6 +46,8 @@ +@@ -40,6 +46,7 @@ .bc_inv = (void *)no_sc_noop }; +int bcm4710 = 0; -+EXPORT_SYMBOL(bcm4710); struct bcache_ops *bcops = &no_sc_ops; #define cpu_is_r4600_v1_x() ((read_c0_prid() & 0xfffffff0) == 0x2010) -@@ -64,8 +72,10 @@ +@@ -64,8 +71,10 @@ static inline void r4k_blast_dcache_page_setup(void) { unsigned long dc_lsize = current_cpu_data.dcache.linesz; @@ -50,7 +51,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c r4k_blast_dcache_page = blast_dcache16_page; else if (dc_lsize == 32) r4k_blast_dcache_page = r4k_blast_dcache_page_dc32; -@@ -77,7 +87,9 @@ +@@ -77,7 +86,9 @@ { unsigned long dc_lsize = current_cpu_data.dcache.linesz; @@ -61,7 +62,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c r4k_blast_dcache_page_indexed = blast_dcache16_page_indexed; else if (dc_lsize == 32) r4k_blast_dcache_page_indexed = blast_dcache32_page_indexed; -@@ -89,7 +101,9 @@ +@@ -89,7 +100,9 @@ { unsigned long dc_lsize = current_cpu_data.dcache.linesz; @@ -72,7 +73,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c r4k_blast_dcache = blast_dcache16; else if (dc_lsize == 32) r4k_blast_dcache = blast_dcache32; -@@ -266,6 +280,7 @@ +@@ -266,6 +279,7 @@ r4k_blast_dcache(); r4k_blast_icache(); @@ -80,7 +81,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c switch (current_cpu_data.cputype) { case CPU_R4000SC: case CPU_R4000MC: -@@ -304,10 +319,10 @@ +@@ -304,10 +318,10 @@ * Kludge alert. For obscure reasons R4000SC and R4400SC go nuts if we * only flush the primary caches but R10000 and R12000 behave sane ... */ @@ -93,7 +94,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c r4k_blast_scache(); } -@@ -383,12 +398,15 @@ +@@ -383,12 +397,15 @@ unsigned long ic_lsize = current_cpu_data.icache.linesz; unsigned long addr, aend; @@ -111,7 +112,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c while (1) { /* Hit_Writeback_Inv_D */ -@@ -403,8 +421,6 @@ +@@ -403,8 +420,6 @@ if (end - start > icache_size) r4k_blast_icache(); else { @@ -120,7 +121,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c while (1) { /* Hit_Invalidate_I */ protected_flush_icache_line(addr); -@@ -413,6 +429,9 @@ +@@ -413,6 +428,9 @@ addr += ic_lsize; } } @@ -130,7 +131,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c } /* -@@ -443,7 +462,8 @@ +@@ -443,7 +461,8 @@ if (cpu_has_subset_pcaches) { unsigned long addr = (unsigned long) page_address(page); @@ -140,7 +141,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c ClearPageDcacheDirty(page); return; -@@ -451,6 +471,7 @@ +@@ -451,6 +470,7 @@ if (!cpu_has_ic_fills_f_dc) { unsigned long addr = (unsigned long) page_address(page); @@ -148,7 +149,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c r4k_blast_dcache_page(addr); ClearPageDcacheDirty(page); } -@@ -477,7 +498,7 @@ +@@ -477,7 +497,7 @@ /* Catch bad driver code */ BUG_ON(size == 0); @@ -157,7 +158,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c unsigned long sc_lsize = current_cpu_data.scache.linesz; if (size >= scache_size) { -@@ -509,6 +530,8 @@ +@@ -509,6 +529,8 @@ R4600_HIT_CACHEOP_WAR_IMPL; a = addr & ~(dc_lsize - 1); end = (addr + size - 1) & ~(dc_lsize - 1); @@ -166,7 +167,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c while (1) { flush_dcache_line(a); /* Hit_Writeback_Inv_D */ if (a == end) -@@ -527,7 +550,7 @@ +@@ -527,7 +549,7 @@ /* Catch bad driver code */ BUG_ON(size == 0); @@ -175,7 +176,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c unsigned long sc_lsize = current_cpu_data.scache.linesz; if (size >= scache_size) { -@@ -554,6 +577,8 @@ +@@ -554,6 +576,8 @@ R4600_HIT_CACHEOP_WAR_IMPL; a = addr & ~(dc_lsize - 1); end = (addr + size - 1) & ~(dc_lsize - 1); @@ -184,7 +185,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c while (1) { flush_dcache_line(a); /* Hit_Writeback_Inv_D */ if (a == end) -@@ -577,6 +602,8 @@ +@@ -577,6 +601,8 @@ unsigned long dc_lsize = current_cpu_data.dcache.linesz; R4600_HIT_CACHEOP_WAR_IMPL; @@ -193,7 +194,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c protected_writeback_dcache_line(addr & ~(dc_lsize - 1)); protected_flush_icache_line(addr & ~(ic_lsize - 1)); if (MIPS4K_ICACHE_REFILL_WAR) { -@@ -986,10 +1013,12 @@ +@@ -986,10 +1012,12 @@ case CPU_R4000MC: case CPU_R4400SC: case CPU_R4400MC: @@ -210,7 +211,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c break; case CPU_R10000: -@@ -1041,6 +1070,19 @@ +@@ -1041,6 +1069,19 @@ static inline void coherency_setup(void) { change_c0_config(CONF_CM_CMASK, CONF_CM_DEFAULT); @@ -230,7 +231,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c /* * c0_status.cu=0 specifies that updates by the sc instruction use -@@ -1073,6 +1115,12 @@ +@@ -1073,6 +1114,12 @@ memcpy((void *)(KSEG0 + 0x100), &except_vec2_generic, 0x80); memcpy((void *)(KSEG1 + 0x100), &except_vec2_generic, 0x80); @@ -243,9 +244,10 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c probe_pcache(); setup_scache(); -diff -urN linux.old/arch/mips/mm/tlbex-mips32.S linux.dev/arch/mips/mm/tlbex-mips32.S ---- linux.old/arch/mips/mm/tlbex-mips32.S 2005-07-05 16:46:49.000000000 +0200 -+++ linux.dev/arch/mips/mm/tlbex-mips32.S 2005-07-06 11:23:56.000000000 +0200 +Index: linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/mm/tlbex-mips32.S 2007-12-15 05:19:44.874978317 +0100 ++++ linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S 2007-12-15 05:20:14.380659748 +0100 @@ -90,6 +90,9 @@ .set noat LEAF(except_vec0_r4000) @@ -256,9 +258,10 @@ diff -urN linux.old/arch/mips/mm/tlbex-mips32.S linux.dev/arch/mips/mm/tlbex-mip #ifdef CONFIG_SMP mfc0 k1, CP0_CONTEXT la k0, pgd_current -diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kcache.h ---- linux.old/include/asm-mips/r4kcache.h 2005-07-05 16:46:49.000000000 +0200 -+++ linux.dev/include/asm-mips/r4kcache.h 2005-07-06 12:52:57.000000000 +0200 +Index: linux-2.4.35.4/include/asm-mips/r4kcache.h +=================================================================== +--- linux-2.4.35.4.orig/include/asm-mips/r4kcache.h 2007-12-15 05:20:13.960635812 +0100 ++++ linux-2.4.35.4/include/asm-mips/r4kcache.h 2007-12-15 05:20:14.384659977 +0100 @@ -15,6 +15,18 @@ #include #include @@ -461,9 +464,10 @@ diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kca do { cache64_unroll32(start,Hit_Invalidate_I); start += 0x800; -diff -urN linux.old/include/asm-mips/stackframe.h linux.dev/include/asm-mips/stackframe.h ---- linux.old/include/asm-mips/stackframe.h 2005-07-05 16:46:49.000000000 +0200 -+++ linux.dev/include/asm-mips/stackframe.h 2005-07-06 11:23:56.000000000 +0200 +Index: linux-2.4.35.4/include/asm-mips/stackframe.h +=================================================================== +--- linux-2.4.35.4.orig/include/asm-mips/stackframe.h 2007-12-15 05:19:36.298489571 +0100 ++++ linux-2.4.35.4/include/asm-mips/stackframe.h 2007-12-15 05:20:14.388660206 +0100 @@ -209,6 +209,20 @@ #endif @@ -485,10 +489,11 @@ diff -urN linux.old/include/asm-mips/stackframe.h linux.dev/include/asm-mips/sta #define RESTORE_SP \ lw sp, PT_R29(sp); \ -diff -urN linux.old/mm/memory.c linux.dev/mm/memory.c ---- linux.old/mm/memory.c 2005-04-04 03:42:20.000000000 +0200 -+++ linux.dev/mm/memory.c 2005-07-06 11:23:56.000000000 +0200 -@@ -925,6 +925,7 @@ +Index: linux-2.4.35.4/mm/memory.c +=================================================================== +--- linux-2.4.35.4.orig/mm/memory.c 2007-12-15 05:19:36.306490026 +0100 ++++ linux-2.4.35.4/mm/memory.c 2007-12-15 05:20:14.388660206 +0100 +@@ -927,6 +927,7 @@ flush_page_to_ram(new_page); flush_cache_page(vma, address); establish_pte(vma, address, page_table, pte_mkwrite(pte_mkdirty(mk_pte(new_page, vma->vm_page_prot)))); diff --git a/target/linux/brcm-2.4/patches/004-flash.patch b/target/linux/brcm-2.4/patches/004-flash.patch index 91aa7e65c8..0046c37e7d 100644 --- a/target/linux/brcm-2.4/patches/004-flash.patch +++ b/target/linux/brcm-2.4/patches/004-flash.patch @@ -1,6 +1,7 @@ -diff -urN linux.old/drivers/mtd/devices/Config.in linux.dev/drivers/mtd/devices/Config.in ---- linux.old/drivers/mtd/devices/Config.in 2006-06-22 17:35:39.000000000 +0200 -+++ linux.dev/drivers/mtd/devices/Config.in 2006-06-21 21:41:24.000000000 +0200 +Index: linux-2.4.35.4/drivers/mtd/devices/Config.in +=================================================================== +--- linux-2.4.35.4.orig/drivers/mtd/devices/Config.in 2007-12-15 05:19:36.210484556 +0100 ++++ linux-2.4.35.4/drivers/mtd/devices/Config.in 2007-12-15 05:20:14.656675480 +0100 @@ -5,6 +5,7 @@ mainmenu_option next_comment @@ -9,9 +10,10 @@ diff -urN linux.old/drivers/mtd/devices/Config.in linux.dev/drivers/mtd/devices/ dep_tristate ' Ramix PMC551 PCI Mezzanine RAM card support' CONFIG_MTD_PMC551 $CONFIG_MTD $CONFIG_PCI if [ "$CONFIG_MTD_PMC551" = "y" -o "$CONFIG_MTD_PMC551" = "m" ]; then bool ' PMC551 256M DRAM Bugfix' CONFIG_MTD_PMC551_BUGFIX -diff -urN linux.old/drivers/mtd/devices/Makefile linux.dev/drivers/mtd/devices/Makefile ---- linux.old/drivers/mtd/devices/Makefile 2006-06-22 17:35:39.000000000 +0200 -+++ linux.dev/drivers/mtd/devices/Makefile 2006-06-21 21:41:24.000000000 +0200 +Index: linux-2.4.35.4/drivers/mtd/devices/Makefile +=================================================================== +--- linux-2.4.35.4.orig/drivers/mtd/devices/Makefile 2007-12-15 05:19:36.218485012 +0100 ++++ linux-2.4.35.4/drivers/mtd/devices/Makefile 2007-12-15 05:20:14.660675705 +0100 @@ -3,6 +3,8 @@ # # $Id: Makefile,v 1.4 2001/06/26 21:10:05 spse Exp $ @@ -29,9 +31,10 @@ diff -urN linux.old/drivers/mtd/devices/Makefile linux.dev/drivers/mtd/devices/M obj-$(CONFIG_MTD_DOC1000) += doc1000.o obj-$(CONFIG_MTD_DOC2000) += doc2000.o obj-$(CONFIG_MTD_DOC2001) += doc2001.o -diff -urN linux.old/drivers/mtd/maps/Config.in linux.dev/drivers/mtd/maps/Config.in ---- linux.old/drivers/mtd/maps/Config.in 2006-06-22 17:35:39.000000000 +0200 -+++ linux.dev/drivers/mtd/maps/Config.in 2006-06-21 21:41:24.000000000 +0200 +Index: linux-2.4.35.4/drivers/mtd/maps/Config.in +=================================================================== +--- linux-2.4.35.4.orig/drivers/mtd/maps/Config.in 2007-12-15 05:19:44.950982647 +0100 ++++ linux-2.4.35.4/drivers/mtd/maps/Config.in 2007-12-15 05:20:14.664675934 +0100 @@ -48,6 +48,7 @@ fi @@ -40,9 +43,10 @@ diff -urN linux.old/drivers/mtd/maps/Config.in linux.dev/drivers/mtd/maps/Config dep_tristate ' Pb1000 MTD support' CONFIG_MTD_PB1000 $CONFIG_MIPS_PB1000 dep_tristate ' Pb1500 MTD support' CONFIG_MTD_PB1500 $CONFIG_MIPS_PB1500 dep_tristate ' Pb1100 MTD support' CONFIG_MTD_PB1100 $CONFIG_MIPS_PB1100 -diff -urN linux.old/drivers/mtd/maps/Makefile linux.dev/drivers/mtd/maps/Makefile ---- linux.old/drivers/mtd/maps/Makefile 2006-06-22 17:35:39.000000000 +0200 -+++ linux.dev/drivers/mtd/maps/Makefile 2006-06-21 21:41:24.000000000 +0200 +Index: linux-2.4.35.4/drivers/mtd/maps/Makefile +=================================================================== +--- linux-2.4.35.4.orig/drivers/mtd/maps/Makefile 2007-12-15 05:19:44.954982876 +0100 ++++ linux-2.4.35.4/drivers/mtd/maps/Makefile 2007-12-15 05:20:14.664675934 +0100 @@ -3,6 +3,8 @@ # # $Id: Makefile,v 1.37 2003/01/24 14:26:38 dwmw2 Exp $ diff --git a/target/linux/brcm-2.4/patches/005-bluetooth_sco_buffer_align.patch b/target/linux/brcm-2.4/patches/005-bluetooth_sco_buffer_align.patch index 77ade1c8b2..65c423f1af 100644 --- a/target/linux/brcm-2.4/patches/005-bluetooth_sco_buffer_align.patch +++ b/target/linux/brcm-2.4/patches/005-bluetooth_sco_buffer_align.patch @@ -1,5 +1,7 @@ ---- linux-2.4.30/drivers/bluetooth/hci_usb.c 2004-08-08 01:26:04.000000000 +0200 -+++ linux-2.4.30/drivers/bluetooth/hci_usb.c 2005-07-25 20:12:11.000000000 +0200 +Index: linux-2.4.35.4/drivers/bluetooth/hci_usb.c +=================================================================== +--- linux-2.4.35.4.orig/drivers/bluetooth/hci_usb.c 2007-12-15 05:19:36.182482961 +0100 ++++ linux-2.4.35.4/drivers/bluetooth/hci_usb.c 2007-12-15 05:20:14.964693031 +0100 @@ -259,6 +259,9 @@ void *buf; diff --git a/target/linux/brcm-2.4/patches/006-ide_workaround.patch b/target/linux/brcm-2.4/patches/006-ide_workaround.patch index 9f8d2ee29d..6fb5c68029 100644 --- a/target/linux/brcm-2.4/patches/006-ide_workaround.patch +++ b/target/linux/brcm-2.4/patches/006-ide_workaround.patch @@ -1,6 +1,7 @@ -diff -urN linux.old/arch/mips/lib/ide-std.c linux.dev/arch/mips/lib/ide-std.c ---- linux.old/arch/mips/lib/ide-std.c 2003-08-25 13:44:40.000000000 +0200 -+++ linux.dev/arch/mips/lib/ide-std.c 2005-08-12 23:55:23.886963936 +0200 +Index: linux-2.4.35.4/arch/mips/lib/ide-std.c +=================================================================== +--- linux-2.4.35.4.orig/arch/mips/lib/ide-std.c 2007-12-15 05:19:36.146480908 +0100 ++++ linux-2.4.35.4/arch/mips/lib/ide-std.c 2007-12-15 05:20:15.796740447 +0100 @@ -31,12 +31,14 @@ static ide_ioreg_t std_ide_default_io_base(int index) { diff --git a/target/linux/brcm-2.4/patches/008-b44_bcm47xx_support.patch b/target/linux/brcm-2.4/patches/008-b44_bcm47xx_support.patch index 35c80acd25..be09cc98ed 100644 --- a/target/linux/brcm-2.4/patches/008-b44_bcm47xx_support.patch +++ b/target/linux/brcm-2.4/patches/008-b44_bcm47xx_support.patch @@ -1,6 +1,7 @@ -diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c ---- linux.old/drivers/net/b44.c 2006-02-12 13:49:59.000000000 +0100 -+++ linux.dev/drivers/net/b44.c 2006-03-06 22:37:14.000000000 +0100 +Index: linux-2.4.35.4/drivers/net/b44.c +=================================================================== +--- linux-2.4.35.4.orig/drivers/net/b44.c 2007-12-15 05:19:36.094477944 +0100 ++++ linux-2.4.35.4/drivers/net/b44.c 2007-12-15 05:20:16.020753214 +0100 @@ -1,7 +1,9 @@ /* b44.c: Broadcom 4400 device driver. * @@ -12,15 +13,13 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c * * Distribute under GPL. */ -@@ -25,6 +27,41 @@ +@@ -25,6 +27,39 @@ #include "b44.h" +#include +#include -+#include +#include -+#include +#include +#include +#include @@ -400,7 +399,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c bw32(B44_MDIO_CTRL, (MDIO_CTRL_PREAMBLE | (0x0d & MDIO_CTRL_MAXF_MASK))); br32(B44_MDIO_CTRL); -@@ -1215,6 +1357,8 @@ +@@ -1216,6 +1358,8 @@ struct b44 *bp = dev->priv; int err; @@ -409,7 +408,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c err = b44_alloc_consistent(bp); if (err) return err; -@@ -1235,9 +1379,10 @@ +@@ -1236,9 +1380,10 @@ bp->timer.expires = jiffies + HZ; bp->timer.data = (unsigned long) bp; bp->timer.function = b44_timer; @@ -421,7 +420,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c return 0; -@@ -1628,7 +1773,7 @@ +@@ -1638,7 +1783,7 @@ u32 mii_regval; spin_lock_irq(&bp->lock); @@ -430,7 +429,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c spin_unlock_irq(&bp->lock); data->val_out = mii_regval; -@@ -1641,7 +1786,7 @@ +@@ -1651,7 +1796,7 @@ return -EPERM; spin_lock_irq(&bp->lock); @@ -439,7 +438,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c spin_unlock_irq(&bp->lock); return err; -@@ -1668,21 +1813,52 @@ +@@ -1678,21 +1823,52 @@ static int __devinit b44_get_invariants(struct b44 *bp) { u8 eeprom[128]; @@ -505,7 +504,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c /* With this, plus the rx_header prepended to the data by the * hardware, we'll land the ethernet header on a 2-byte boundary. -@@ -1692,13 +1868,12 @@ +@@ -1702,13 +1878,12 @@ bp->imask = IMASK_DEF; bp->core_unit = ssb_core_unit(bp); @@ -521,7 +520,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c } static int __devinit b44_init_one(struct pci_dev *pdev, -@@ -1710,6 +1885,10 @@ +@@ -1720,6 +1895,10 @@ struct b44 *bp; int err, i; @@ -532,9 +531,9 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c if (b44_version_printed++ == 0) printk(KERN_INFO "%s", version); -@@ -1819,11 +1998,17 @@ - - pci_save_state(bp->pdev, bp->pci_cfg_state); +@@ -1834,11 +2013,17 @@ + */ + b44_chip_reset(bp); - printk(KERN_INFO "%s: Broadcom 4400 10/100BaseT Ethernet ", dev->name); + printk(KERN_INFO "%s: Broadcom %s 10/100BaseT Ethernet ", dev->name, @@ -551,9 +550,10 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c return 0; err_out_iounmap: -diff -urN linux.old/drivers/net/b44.h linux.dev/drivers/net/b44.h ---- linux.old/drivers/net/b44.h 2006-02-12 13:49:59.000000000 +0100 -+++ linux.dev/drivers/net/b44.h 2006-01-24 20:52:08.000000000 +0100 +Index: linux-2.4.35.4/drivers/net/b44.h +=================================================================== +--- linux-2.4.35.4.orig/drivers/net/b44.h 2007-12-15 05:19:36.102478402 +0100 ++++ linux-2.4.35.4/drivers/net/b44.h 2007-12-15 05:20:16.028753670 +0100 @@ -229,8 +229,6 @@ #define SBIPSFLAG_IMASK4 0x3f000000 /* Which sbflags --> mips interrupt 4 */ #define SBIPSFLAG_ISHIFT4 24 @@ -572,10 +572,11 @@ diff -urN linux.old/drivers/net/b44.h linux.dev/drivers/net/b44.h /* SW copy of device statistics, kept up to date by periodic timer * which probes HW values. Must have same relative layout as HW -diff -urN linux.old/include/linux/pci_ids.h linux.dev/include/linux/pci_ids.h ---- linux.old/include/linux/pci_ids.h 2006-02-12 13:49:59.000000000 +0100 -+++ linux.dev/include/linux/pci_ids.h 2006-01-24 20:52:08.000000000 +0100 -@@ -1735,6 +1735,7 @@ +Index: linux-2.4.35.4/include/linux/pci_ids.h +=================================================================== +--- linux-2.4.35.4.orig/include/linux/pci_ids.h 2007-12-15 05:19:36.114479084 +0100 ++++ linux-2.4.35.4/include/linux/pci_ids.h 2007-12-15 05:20:16.032753896 +0100 +@@ -1756,6 +1756,7 @@ #define PCI_DEVICE_ID_TIGON3_5901_2 0x170e #define PCI_DEVICE_ID_BCM4401 0x4401 #define PCI_DEVICE_ID_BCM4401B0 0x4402 diff --git a/target/linux/brcm-2.4/patches/009-wrt54g3g_pcmcia.patch b/target/linux/brcm-2.4/patches/009-wrt54g3g_pcmcia.patch index 52febdf0cc..01e1f3c23d 100644 --- a/target/linux/brcm-2.4/patches/009-wrt54g3g_pcmcia.patch +++ b/target/linux/brcm-2.4/patches/009-wrt54g3g_pcmcia.patch @@ -1,6 +1,7 @@ -diff -urN linux.old/drivers/pcmcia/yenta.c linux.dev/drivers/pcmcia/yenta.c ---- linux.old/drivers/pcmcia/yenta.c 2004-11-17 12:54:21.000000000 +0100 -+++ linux.dev/drivers/pcmcia/yenta.c 2006-04-11 17:47:45.000000000 +0200 +Index: linux-2.4.35.4/drivers/pcmcia/yenta.c +=================================================================== +--- linux-2.4.35.4.orig/drivers/pcmcia/yenta.c 2007-12-15 05:19:36.066476349 +0100 ++++ linux-2.4.35.4/drivers/pcmcia/yenta.c 2007-12-15 05:20:16.268767348 +0100 @@ -543,6 +543,9 @@ * Probe for usable interrupts using the force * register to generate bogus card status events. diff --git a/target/linux/brcm-2.4/patches/010-bcm47xx-cam_absent.patch b/target/linux/brcm-2.4/patches/010-bcm47xx-cam_absent.patch index 1deffc54a3..5023e181c4 100644 --- a/target/linux/brcm-2.4/patches/010-bcm47xx-cam_absent.patch +++ b/target/linux/brcm-2.4/patches/010-bcm47xx-cam_absent.patch @@ -1,5 +1,7 @@ ---- linux-2.4.32.orig/drivers/net/b44.h 2006-09-19 19:56:03.000000000 +0200 -+++ linux-2.4.32/drivers/net/b44.h 2006-09-19 19:58:01.000000000 +0200 +Index: linux-2.4.35.4/drivers/net/b44.h +=================================================================== +--- linux-2.4.35.4.orig/drivers/net/b44.h 2007-12-15 05:20:16.028753670 +0100 ++++ linux-2.4.35.4/drivers/net/b44.h 2007-12-15 05:20:16.480779429 +0100 @@ -122,6 +122,7 @@ #define RXCONFIG_FLOW 0x00000020 /* Flow Control Enable */ #define RXCONFIG_FLOW_ACCEPT 0x00000040 /* Accept Unicast Flow Control Frame */ @@ -8,8 +10,10 @@ #define B44_RXMAXLEN 0x0404UL /* EMAC RX Max Packet Length */ #define B44_TXMAXLEN 0x0408UL /* EMAC TX Max Packet Length */ #define B44_MDIO_CTRL 0x0410UL /* EMAC MDIO Control */ ---- linux-2.4.32.orig/drivers/net/b44.c 2006-09-19 19:56:03.000000000 +0200 -+++ linux-2.4.32/drivers/net/b44.c 2006-09-19 20:08:22.000000000 +0200 +Index: linux-2.4.35.4/drivers/net/b44.c +=================================================================== +--- linux-2.4.35.4.orig/drivers/net/b44.c 2007-12-15 05:20:16.020753214 +0100 ++++ linux-2.4.35.4/drivers/net/b44.c 2007-12-15 05:20:16.480779429 +0100 @@ -1301,6 +1301,7 @@ { struct b44 *bp = dev->priv; @@ -31,7 +35,7 @@ spin_unlock_irq(&bp->lock); return 0; -@@ -1488,7 +1493,7 @@ +@@ -1495,7 +1500,7 @@ val = br32(B44_RXCONFIG); val &= ~(RXCONFIG_PROMISC | RXCONFIG_ALLMULTI); diff --git a/target/linux/brcm-2.4/patches/011-wl_qdisc_war.patch b/target/linux/brcm-2.4/patches/011-wl_qdisc_war.patch index 8a472cd6f1..1c19be001b 100644 --- a/target/linux/brcm-2.4/patches/011-wl_qdisc_war.patch +++ b/target/linux/brcm-2.4/patches/011-wl_qdisc_war.patch @@ -1,5 +1,7 @@ ---- linux.old/net/sched/sch_generic.c 2006-11-24 02:42:23.000000000 +0100 -+++ linux.dev/net/sched/sch_generic.c 2006-11-24 02:36:58.000000000 +0100 +Index: linux-2.4.35.4/net/sched/sch_generic.c +=================================================================== +--- linux-2.4.35.4.orig/net/sched/sch_generic.c 2007-12-15 05:20:10.816456638 +0100 ++++ linux-2.4.35.4/net/sched/sch_generic.c 2007-12-15 05:20:16.704792197 +0100 @@ -84,6 +84,11 @@ struct sk_buff *skb; diff --git a/target/linux/brcm-2.4/patches/012-aec62xx.patch b/target/linux/brcm-2.4/patches/012-aec62xx.patch index 75d7d72ac5..97ba007bab 100644 --- a/target/linux/brcm-2.4/patches/012-aec62xx.patch +++ b/target/linux/brcm-2.4/patches/012-aec62xx.patch @@ -1,5 +1,7 @@ ---- linux-2.4.34/drivers/ide/pci/aec62xx.c.old 2006-12-23 22:34:20.000000000 +0200 -+++ linux-2.4.34/drivers/ide/pci/aec62xx.c 2007-01-14 12:06:05.000000000 +0200 +Index: linux-2.4.35.4/drivers/ide/pci/aec62xx.c +=================================================================== +--- linux-2.4.35.4.orig/drivers/ide/pci/aec62xx.c 2007-12-15 05:19:35.958470194 +0100 ++++ linux-2.4.35.4/drivers/ide/pci/aec62xx.c 2007-12-15 05:20:16.928804961 +0100 @@ -3,6 +3,8 @@ * * Copyright (C) 1999-2002 Andre Hedrick @@ -13,16 +15,15 @@ ide_hwif_t *hwif = HWIF(drive); struct hd_driveid *id = drive->id; -- if ((id->capability & 1) && drive->autodma) { +#ifndef CONFIG_BCM947XX -+ if ((id->capability & 1) && drive->autodma) { + if ((id->capability & 1) && drive->autodma) { +#else + if (1) { +#endif /* Consult the list of known "bad" drives */ if (hwif->ide_dma_bad_drive(drive)) goto fast_ata_pio; -@@ -414,10 +416,60 @@ +@@ -414,10 +420,60 @@ { int bus_speed = system_bus_clock(); @@ -83,7 +84,7 @@ #if defined(DISPLAY_AEC62XX_TIMINGS) && defined(CONFIG_PROC_FS) aec_devs[n_aec_devs++] = dev; -@@ -500,6 +552,7 @@ +@@ -500,6 +556,7 @@ static void __init init_setup_aec6x80 (struct pci_dev *dev, ide_pci_device_t *d) { @@ -91,7 +92,7 @@ unsigned long bar4reg = pci_resource_start(dev, 4); if (inb(bar4reg+2) & 0x10) { -@@ -512,6 +565,7 @@ +@@ -512,6 +569,7 @@ strcpy(d->name, "AEC6280R"); } diff --git a/target/linux/brcm-2.4/patches/013-wl_hdd_pdc202xx.patch b/target/linux/brcm-2.4/patches/013-wl_hdd_pdc202xx.patch index 63e0cd6037..5e822a14fc 100644 --- a/target/linux/brcm-2.4/patches/013-wl_hdd_pdc202xx.patch +++ b/target/linux/brcm-2.4/patches/013-wl_hdd_pdc202xx.patch @@ -1,5 +1,7 @@ ---- linux.old/drivers/ide/pci/pdc202xx_old.c 2006-12-23 21:34:20.000000000 +0100 -+++ linux.dev/drivers/ide/pci/pdc202xx_old.c 2007-01-24 18:03:28.000000000 +0100 +Index: linux-2.4.35.4/drivers/ide/pci/pdc202xx_old.c +=================================================================== +--- linux-2.4.35.4.orig/drivers/ide/pci/pdc202xx_old.c 2007-12-15 05:19:35.922468144 +0100 ++++ linux-2.4.35.4/drivers/ide/pci/pdc202xx_old.c 2007-12-15 05:20:17.136816813 +0100 @@ -253,23 +253,23 @@ pci_read_config_byte(dev, (drive_pci)|0x03, &DP); @@ -38,4 +40,3 @@ switch(dev->device) { case PCI_DEVICE_ID_PROMISE_20267: case PCI_DEVICE_ID_PROMISE_20265: - diff --git a/target/linux/brcm-2.4/patches/014-bcm5354.patch b/target/linux/brcm-2.4/patches/014-bcm5354.patch deleted file mode 100644 index fed89caf72..0000000000 --- a/target/linux/brcm-2.4/patches/014-bcm5354.patch +++ /dev/null @@ -1,155 +0,0 @@ ---- a/arch/mips/bcm947xx/include/sbchipc.h 2007-11-23 12:12:01.000000000 -0500 -+++ b/arch/mips/bcm947xx/include/sbchipc.h 2007-11-25 06:16:42.000000000 -0500 -@@ -188,6 +188,7 @@ - #define CAP_JTAGP 0x00400000 /* JTAG Master Present */ - #define CAP_ROM 0x00800000 /* Internal boot rom active */ - #define CAP_BKPLN64 0x08000000 /* 64-bit backplane */ -+#define CAP_PMU 0x10000000 /* PMU Present, rev >= 20 */ - - /* PLL type */ - #define PLL_NONE 0x00000000 -@@ -199,6 +200,9 @@ - #define PLL_TYPE6 0x00028000 /* 100/200 or 120/240 only */ - #define PLL_TYPE7 0x00038000 /* 25Mhz, 4 dividers */ - -+/* watchdog clock */ -+#define WATCHDOG_CLOCK_5354 32000 /* Hz */ -+ - /* corecontrol */ - #define CC_UARTCLKO 0x00000001 /* Drive UART with internal clock */ - #define CC_SE 0x00000002 /* sync clk out enable (corerev >= 3) */ ---- a/arch/mips/bcm947xx/include/bcmdevs.h 2007-11-23 12:12:01.000000000 -0500 -+++ b/arch/mips/bcm947xx/include/bcmdevs.h 2007-11-25 05:58:20.000000000 -0500 -@@ -121,6 +121,7 @@ - #define BCM5365_CHIP_ID 0x5365 /* 5365 chipcommon chipid */ - #define BCM5350_CHIP_ID 0x5350 /* bcm5350 chipcommon chipid */ - #define BCM5352_CHIP_ID 0x5352 /* bcm5352 chipcommon chipid */ -+#define BCM5354_CHIP_ID 0x5354 /* bcm5354 chipcommon chipid */ - - #define BCM4320_CHIP_ID 0x4320 /* bcm4320 chipcommon chipid */ - ---- a/arch/mips/bcm947xx/sbmips.c 2007-11-23 12:12:02.000000000 -0500 -+++ b/arch/mips/bcm947xx/sbmips.c 2007-11-25 05:40:40.000000000 -0500 -@@ -290,6 +290,12 @@ - n = R_REG(osh, &eir->clockcontrol_n); - m = R_REG(osh, &eir->clockcontrol_sb); - } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) { -+ /* 5354 chip uses a non programmable PLL of frequency 240MHz */ -+ if (sb_chip(sbh) == BCM5354_CHIP_ID) { -+ rate = 240000000; -+ goto out; -+ } -+ - pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK; - n = R_REG(osh, &cc->clockcontrol_n); - if ((pll_type == PLL_TYPE2) || -@@ -612,6 +618,15 @@ - clockcontrol_pci = &eir->clockcontrol_pci; - clockcontrol_m2 = &cc->clockcontrol_m2; - } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) { -+ -+ /* 5354 chipcommon pll setting can't be changed. -+ * The PMU on power up comes up with the default clk frequency -+ * of 240MHz -+ */ -+ if (sb_chip(sbh) == BCM5354_CHIP_ID) { -+ ret = TRUE; -+ goto done; -+ } - pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK; - if (pll_type == PLL_TYPE6) { - clockcontrol_n = NULL; ---- a/arch/mips/bcm947xx/sbutils.c 2007-11-23 12:12:02.000000000 -0500 -+++ b/arch/mips/bcm947xx/sbutils.c 2007-11-25 06:22:43.000000000 -0500 -@@ -791,8 +791,14 @@ - /* readback */ - if (regoff >= SBCONFIGOFF) - w = R_SBREG(si, r); -- else -+ else { -+ if ((si->sb.chip == BCM5354_CHIP_ID) && -+ (coreidx == SB_CC_IDX) && -+ (regoff == OFFSETOF(chipcregs_t, watchdog))) { -+ w = val; -+ } else - w = R_REG(si->osh, r); -+ } - - if (!fast) { - /* restore core index */ -@@ -1902,6 +1908,15 @@ - n = R_REG(si->osh, &eir->clockcontrol_n); - m = R_REG(si->osh, &eir->clockcontrol_sb); - } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) { -+ -+ if (R_REG(si->osh, &cc->capabilities) & CAP_PMU) { -+ if (sb_chip(sbh) == BCM5354_CHIP_ID) { -+ /* 5354 has a constant sb clock of 120MHz */ -+ rate = 120000000; -+ goto end; -+ } else -+ ASSERT(0); -+ } - pll_type = R_REG(si->osh, &cc->capabilities) & CAP_PLL_MASK; - if (pll_type == PLL_NONE) { - INTR_RESTORE(si, intr_val); -@@ -1929,6 +1944,7 @@ - rate = rate / 2; - } - -+end: - /* switch back to previous core */ - sb_setcoreidx(sbh, idx); - ---- a/arch/mips/bcm947xx/hndchipc.c 2007-11-23 12:12:02.000000000 -0500 -+++ b/arch/mips/bcm947xx/hndchipc.c 2007-11-25 06:31:15.000000000 -0500 -@@ -93,6 +93,9 @@ - chipcregs_t *cc = (chipcregs_t *) regs; - uint32 rev, cap, pll, baud_base, div; - -+ /* Default value */ -+ div = 48; -+ - /* Determine core revision and capabilities */ - rev = sb_corerev(sbh); - cap = R_REG(osh, &cc->capabilities); -@@ -108,22 +111,29 @@ - R_REG(osh, &cc->clockcontrol_m2)); - div = 1; - } else { -- /* Fixed ALP clock */ -- if (rev >= 11 && rev != 15) { -- baud_base = 20000000; -+/* 5354 chip common uart uses a constant clock -+ * frequency of 25MHz */ -+ if (sb_corerev(sbh) == 20) { -+ /* Set the override bit so we don't divide it */ -+ W_REG(osh, &cc->corecontrol, CC_UARTCLKO); -+ baud_base = 25000000; -+ } else if (rev >= 11 && rev != 15) { -+ /* Fixed ALP clock */ -+// baud_base = sb_alp_clock(sbh); -+ baud_base = 20000000; - div = 1; - /* Set the override bit so we don't divide it */ - W_REG(osh, &cc->corecontrol, CC_UARTCLKO); -- } -+ - /* Internal backplane clock */ -- else if (rev >= 3) { -- baud_base = sb_clock(sbh); -- div = 2; /* Minimum divisor */ -- W_REG(osh, &cc->clkdiv, -+ } else if (rev >= 3) { -+ baud_base = sb_clock(sbh); -+ div = 2; /* Minimum divisor */ -+ W_REG(osh, &cc->clkdiv, - ((R_REG(osh, &cc->clkdiv) & ~CLKD_UART) | div)); -- } -+ - /* Fixed internal backplane clock */ -- else { -+ } else { - baud_base = 88000000; - div = 48; - } -- cgit v1.2.3