Index: linux-2.6.23/arch/mips/Kconfig
===================================================================
--- linux-2.6.23.orig/arch/mips/Kconfig	2007-10-13 02:23:06.662507926 +0200
+++ linux-2.6.23/arch/mips/Kconfig	2007-10-13 02:23:41.484492317 +0200
@@ -4,6 +4,10 @@
 	# Horrible source of confusion.  Die, die, die ...
 	select EMBEDDED
 
+config CFE
+	bool
+	# Common Firmware Environment
+
 mainmenu "Linux/MIPS Kernel Configuration"
 
 menu "Machine selection"
@@ -44,6 +48,23 @@
 	  note that a kernel built with this option selected will not be
 	  able to run on normal units.
 
+config BCM947XX
+	bool "Support for BCM947xx based boards"
+	select DMA_NONCOHERENT
+	select HW_HAS_PCI
+	select IRQ_CPU
+	select SYS_HAS_CPU_MIPS32_R1
+	select SYS_SUPPORTS_32BIT_KERNEL
+	select SYS_SUPPORTS_LITTLE_ENDIAN
+	select SSB
+	select SSB_SERIAL
+	select SSB_DRIVER_PCICORE
+	select SSB_PCICORE_HOSTMODE
+	select CFE
+	select GENERIC_GPIO
+	help
+	 Support for BCM947xx based boards
+
 config MIPS_COBALT
 	bool "Cobalt Server"
 	select DMA_NONCOHERENT
Index: linux-2.6.23/arch/mips/kernel/cpu-probe.c
===================================================================
--- linux-2.6.23.orig/arch/mips/kernel/cpu-probe.c	2007-10-13 02:23:06.666508151 +0200
+++ linux-2.6.23/arch/mips/kernel/cpu-probe.c	2007-10-13 02:23:11.210767122 +0200
@@ -793,6 +793,28 @@
 }
 
 
+static inline void cpu_probe_broadcom(struct cpuinfo_mips *c)
+{
+	decode_config1(c);
+	switch (c->processor_id & 0xff00) {
+		case PRID_IMP_BCM3302:
+			c->cputype = CPU_BCM3302;
+			c->isa_level = MIPS_CPU_ISA_M32R1;
+			c->options = MIPS_CPU_TLB | MIPS_CPU_4KEX |
+					MIPS_CPU_4K_CACHE | MIPS_CPU_COUNTER;
+		break;
+		case PRID_IMP_BCM4710:
+			c->cputype = CPU_BCM4710;
+			c->isa_level = MIPS_CPU_ISA_M32R1;
+			c->options = MIPS_CPU_TLB | MIPS_CPU_4KEX |
+					MIPS_CPU_4K_CACHE | MIPS_CPU_COUNTER;
+		break;
+	default:
+		c->cputype = CPU_UNKNOWN;
+		break;
+	}
+}
+
 __init void cpu_probe(void)
 {
 	struct cpuinfo_mips *c = &current_cpu_data;
@@ -815,6 +837,9 @@
 	case PRID_COMP_SIBYTE:
 		cpu_probe_sibyte(c);
 		break;
+	case PRID_COMP_BROADCOM:
+		cpu_probe_broadcom(c);
+		break;
 	case PRID_COMP_SANDCRAFT:
 		cpu_probe_sandcraft(c);
 		break;
Index: linux-2.6.23/arch/mips/kernel/proc.c
===================================================================
--- linux-2.6.23.orig/arch/mips/kernel/proc.c	2007-10-13 02:23:06.678508839 +0200
+++ linux-2.6.23/arch/mips/kernel/proc.c	2007-10-13 02:23:11.210767122 +0200
@@ -82,6 +82,8 @@
 	[CPU_VR4181]	= "NEC VR4181",
 	[CPU_VR4181A]	= "NEC VR4181A",
 	[CPU_SR71000]	= "Sandcraft SR71000",
+	[CPU_BCM3302]	= "Broadcom BCM3302",
+	[CPU_BCM4710]	= "Broadcom BCM4710",
 	[CPU_PR4450]	= "Philips PR4450",
 	[CPU_LOONGSON2]	= "ICT Loongson-2",
 };
Index: linux-2.6.23/arch/mips/Makefile
===================================================================
--- linux-2.6.23.orig/arch/mips/Makefile	2007-10-13 02:23:06.682509066 +0200
+++ linux-2.6.23/arch/mips/Makefile	2007-10-13 02:23:11.210767122 +0200
@@ -533,6 +533,18 @@
 load-$(CONFIG_SIBYTE_BIGSUR)	:= 0xffffffff80100000
 
 #
+# Broadcom BCM47XX boards
+#
+core-$(CONFIG_BCM947XX)		+= arch/mips/bcm947xx/
+cflags-$(CONFIG_BCM947XX)	+= -Iarch/mips/bcm947xx/include -Iinclude/asm-mips/mach-bcm947xx
+load-$(CONFIG_BCM947XX)		:= 0xffffffff80001000
+
+#
+# Common Firmware Environment
+#
+core-$(CONFIG_CFE)		+= arch/mips/cfe/
+
+#
 # SNI RM
 #
 core-$(CONFIG_SNI_RM)		+= arch/mips/sni/
Index: linux-2.6.23/arch/mips/mm/tlbex.c
===================================================================
--- linux-2.6.23.orig/arch/mips/mm/tlbex.c	2007-10-13 02:23:06.694509748 +0200
+++ linux-2.6.23/arch/mips/mm/tlbex.c	2007-10-13 02:26:00.272401391 +0200
@@ -895,6 +895,8 @@
 	case CPU_AU1550:
 	case CPU_AU1200:
 	case CPU_PR4450:
+	case CPU_BCM3302:
+	case CPU_BCM4710:
 		i_nop(p);
 		tlbw(p);
 		break;
Index: linux-2.6.23/drivers/Kconfig
===================================================================
--- linux-2.6.23.orig/drivers/Kconfig	2007-10-13 02:23:06.702510206 +0200
+++ linux-2.6.23/drivers/Kconfig	2007-10-13 02:23:11.214767346 +0200
@@ -58,6 +58,8 @@
 
 source "drivers/hwmon/Kconfig"
 
+source "drivers/ssb/Kconfig"
+
 source "drivers/mfd/Kconfig"
 
 source "drivers/media/Kconfig"
Index: linux-2.6.23/drivers/Makefile
===================================================================
--- linux-2.6.23.orig/drivers/Makefile	2007-10-13 02:23:06.710510659 +0200
+++ linux-2.6.23/drivers/Makefile	2007-10-13 02:27:08.120267817 +0200
@@ -88,3 +88,4 @@
 obj-$(CONFIG_HID)		+= hid/
 obj-$(CONFIG_PPC_PS3)		+= ps3/
 obj-$(CONFIG_OF)		+= of/
+obj-$(CONFIG_SSB)		+= ssb/
Index: linux-2.6.23/include/asm-mips/bootinfo.h
===================================================================
--- linux-2.6.23.orig/include/asm-mips/bootinfo.h	2007-10-13 02:23:06.718511119 +0200
+++ linux-2.6.23/include/asm-mips/bootinfo.h	2007-10-13 02:23:11.214767346 +0200
@@ -208,6 +208,12 @@
 #define MACH_GROUP_WINDRIVER   28	/* Windriver boards */
 #define MACH_WRPPMC             1
 
+/*
+ * Valid machtype for group Broadcom
+ */
+#define MACH_GROUP_BRCM		23	/* Broadcom			*/
+#define MACH_BCM47XX		1	/* Broadcom BCM47xx		*/
+
 #define CL_SIZE			COMMAND_LINE_SIZE
 
 const char *get_system_type(void);
Index: linux-2.6.23/include/asm-mips/cpu.h
===================================================================
--- linux-2.6.23.orig/include/asm-mips/cpu.h	2007-10-13 02:23:06.726511570 +0200
+++ linux-2.6.23/include/asm-mips/cpu.h	2007-10-13 02:27:43.994312161 +0200
@@ -106,6 +106,13 @@
 #define PRID_IMP_SR71000        0x0400
 
 /*
+ * These are the PRID's for when 23:16 == PRID_COMP_BROADCOM
+ */
+
+#define PRID_IMP_BCM4710	0x4000
+#define PRID_IMP_BCM3302	0x9000
+
+/*
  * Definitions for 7:0 on legacy processors
  */
 
@@ -217,8 +224,10 @@
 #define CPU_R14000		64
 #define CPU_LOONGSON1           65
 #define CPU_LOONGSON2           66
+#define CPU_BCM3302		67
+#define CPU_BCM4710		68
 
-#define CPU_LAST		66
+#define CPU_LAST		68
 
 /*
  * ISA Level encodings
Index: linux-2.6.23/include/linux/pci_ids.h
===================================================================
--- linux-2.6.23.orig/include/linux/pci_ids.h	2007-10-13 02:23:06.734512028 +0200
+++ linux-2.6.23/include/linux/pci_ids.h	2007-10-13 02:23:11.218767569 +0200
@@ -1972,6 +1972,7 @@
 #define PCI_DEVICE_ID_TIGON3_5906M	0x1713
 #define PCI_DEVICE_ID_BCM4401		0x4401
 #define PCI_DEVICE_ID_BCM4401B0		0x4402
+#define PCI_DEVICE_ID_BCM4713		0x4713
 
 #define PCI_VENDOR_ID_TOPIC		0x151f
 #define PCI_DEVICE_ID_TOPIC_TP560	0x0000