Index: linux-2.6.22-rc4/arch/mips/Kconfig
===================================================================
--- linux-2.6.22-rc4.orig/arch/mips/Kconfig	2007-06-10 21:32:36.000000000 +0100
+++ linux-2.6.22-rc4/arch/mips/Kconfig	2007-06-10 21:33:12.000000000 +0100
@@ -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"
@@ -126,6 +130,23 @@
 	 Members include the Acer PICA, MIPS Magnum 4000, MIPS Millenium and
 	 Olivetti M700-10 workstations.
 
+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 LASAT
 	bool "LASAT Networks platforms"
 	select DMA_NONCOHERENT
Index: linux-2.6.22-rc4/arch/mips/kernel/cpu-probe.c
===================================================================
--- linux-2.6.22-rc4.orig/arch/mips/kernel/cpu-probe.c	2007-06-10 21:32:13.000000000 +0100
+++ linux-2.6.22-rc4/arch/mips/kernel/cpu-probe.c	2007-06-10 21:33:12.000000000 +0100
@@ -711,6 +711,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;
@@ -733,6 +755,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.22-rc4/arch/mips/kernel/proc.c
===================================================================
--- linux-2.6.22-rc4.orig/arch/mips/kernel/proc.c	2007-06-10 21:32:13.000000000 +0100
+++ linux-2.6.22-rc4/arch/mips/kernel/proc.c	2007-06-10 21:33:12.000000000 +0100
@@ -83,6 +83,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",
 };
 
Index: linux-2.6.22-rc4/arch/mips/Makefile
===================================================================
--- linux-2.6.22-rc4.orig/arch/mips/Makefile	2007-06-10 21:32:56.000000000 +0100
+++ linux-2.6.22-rc4/arch/mips/Makefile	2007-06-10 21:33:12.000000000 +0100
@@ -560,6 +560,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.22-rc4/arch/mips/mm/tlbex.c
===================================================================
--- linux-2.6.22-rc4.orig/arch/mips/mm/tlbex.c	2007-06-10 21:32:35.000000000 +0100
+++ linux-2.6.22-rc4/arch/mips/mm/tlbex.c	2007-06-10 21:33:12.000000000 +0100
@@ -892,6 +892,8 @@
 	case CPU_4KSC:
 	case CPU_20KC:
 	case CPU_25KF:
+	case CPU_BCM3302:
+	case CPU_BCM4710:
 		tlbw(p);
 		break;
 
Index: linux-2.6.22-rc4/drivers/Kconfig
===================================================================
--- linux-2.6.22-rc4.orig/drivers/Kconfig	2007-06-10 21:32:13.000000000 +0100
+++ linux-2.6.22-rc4/drivers/Kconfig	2007-06-10 21:33:12.000000000 +0100
@@ -56,6 +56,8 @@
 
 source "drivers/hwmon/Kconfig"
 
+source "drivers/ssb/Kconfig"
+
 source "drivers/mfd/Kconfig"
 
 source "drivers/media/Kconfig"
Index: linux-2.6.22-rc4/drivers/Makefile
===================================================================
--- linux-2.6.22-rc4.orig/drivers/Makefile	2007-06-10 21:32:14.000000000 +0100
+++ linux-2.6.22-rc4/drivers/Makefile	2007-06-10 21:33:12.000000000 +0100
@@ -81,3 +81,4 @@
 obj-$(CONFIG_DMA_ENGINE)	+= dma/
 obj-$(CONFIG_HID)		+= hid/
 obj-$(CONFIG_PPC_PS3)		+= ps3/
+obj-$(CONFIG_SSB)		+= ssb/
Index: linux-2.6.22-rc4/include/asm-mips/bootinfo.h
===================================================================
--- linux-2.6.22-rc4.orig/include/asm-mips/bootinfo.h	2007-06-10 21:32:14.000000000 +0100
+++ linux-2.6.22-rc4/include/asm-mips/bootinfo.h	2007-06-10 21:33:12.000000000 +0100
@@ -213,6 +213,12 @@
 #define MACH_GROUP_NEC_EMMA2RH 25	/* NEC EMMA2RH (was 23)		*/
 #define  MACH_NEC_MARKEINS	0	/* NEC EMMA2RH Mark-eins	*/
 
+/*
+ * 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.22-rc4/include/asm-mips/cpu.h
===================================================================
--- linux-2.6.22-rc4.orig/include/asm-mips/cpu.h	2007-06-10 21:32:14.000000000 +0100
+++ linux-2.6.22-rc4/include/asm-mips/cpu.h	2007-06-10 21:33:12.000000000 +0100
@@ -104,6 +104,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
  */
 
@@ -200,7 +207,9 @@
 #define CPU_SB1A		62
 #define CPU_74K			63
 #define CPU_R14000		64
-#define CPU_LAST		64
+#define CPU_BCM3302		65
+#define CPU_BCM4710		66
+#define CPU_LAST		66
 
 /*
  * ISA Level encodings
Index: linux-2.6.22-rc4/include/linux/pci_ids.h
===================================================================
--- linux-2.6.22-rc4.orig/include/linux/pci_ids.h	2007-06-10 21:32:14.000000000 +0100
+++ linux-2.6.22-rc4/include/linux/pci_ids.h	2007-06-10 21:33:12.000000000 +0100
@@ -1991,6 +1991,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