diff --git a/target/linux/brcm63xx/Makefile b/target/linux/brcm63xx/Makefile
index cb489e89c1c1354e9a79144bc2835528719ef6c5..529cbeb9a845076f57ba59d14b38b01de7d33636 100644
--- a/target/linux/brcm63xx/Makefile
+++ b/target/linux/brcm63xx/Makefile
@@ -9,6 +9,7 @@ include $(TOPDIR)/rules.mk
 ARCH:=mips
 BOARD:=brcm63xx
 BOARDNAME:=Broadcom BCM63xx
+SUBTARGETS:=generic smp
 FEATURES:=squashfs jffs2 usb atm pci pcmcia
 LINUX_VERSION:=3.8.11
 MAINTAINER:=Florian Fainelli <florian@openwrt.org>
diff --git a/target/linux/brcm63xx/config-3.8 b/target/linux/brcm63xx/config-3.8
index 75c183cc4603770427470b66856d9317f6182f94..736849d70734a9ee94b186608ccfe037372434ab 100644
--- a/target/linux/brcm63xx/config-3.8
+++ b/target/linux/brcm63xx/config-3.8
@@ -14,13 +14,6 @@ CONFIG_B53_PHY_DRIVER=y
 CONFIG_B53_PHY_FIXUP=y
 CONFIG_B53_SPI_DRIVER=y
 CONFIG_BCM63XX=y
-CONFIG_BCM63XX_CPU_6328=y
-CONFIG_BCM63XX_CPU_6338=y
-CONFIG_BCM63XX_CPU_6345=y
-CONFIG_BCM63XX_CPU_6348=y
-CONFIG_BCM63XX_CPU_6358=y
-CONFIG_BCM63XX_CPU_6362=y
-CONFIG_BCM63XX_CPU_6368=y
 CONFIG_BCM63XX_EHCI=y
 CONFIG_BCM63XX_ENET=y
 CONFIG_BCM63XX_OHCI=y
@@ -38,7 +31,6 @@ CONFIG_CPU_GENERIC_DUMP_TLB=y
 CONFIG_CPU_HAS_PREFETCH=y
 CONFIG_CPU_HAS_SYNC=y
 CONFIG_CPU_MIPS32=y
-CONFIG_CPU_MIPS32_R1=y
 CONFIG_CPU_MIPSR1=y
 CONFIG_CPU_R4K_CACHE_TLB=y
 CONFIG_CPU_R4K_FPU=y
@@ -102,7 +94,6 @@ CONFIG_IP_PIMSM_V1=y
 CONFIG_IP_PIMSM_V2=y
 CONFIG_IRQ_CPU=y
 CONFIG_IRQ_FORCED_THREADING=y
-CONFIG_KEXEC=y
 CONFIG_LEDS_GPIO=y
 CONFIG_M25PXX_USE_FAST_READ=y
 CONFIG_MDIO_BOARDINFO=y
diff --git a/target/linux/brcm63xx/generic/config-default b/target/linux/brcm63xx/generic/config-default
new file mode 100644
index 0000000000000000000000000000000000000000..2dc558be2964abbd69cb2286aea17f1ce4e988f6
--- /dev/null
+++ b/target/linux/brcm63xx/generic/config-default
@@ -0,0 +1,9 @@
+CONFIG_BCM63XX_CPU_6328=y
+CONFIG_BCM63XX_CPU_6338=y
+CONFIG_BCM63XX_CPU_6345=y
+CONFIG_BCM63XX_CPU_6348=y
+CONFIG_BCM63XX_CPU_6358=y
+CONFIG_BCM63XX_CPU_6362=y
+CONFIG_BCM63XX_CPU_6368=y
+CONFIG_CPU_MIPS32_R1=y
+CONFIG_KEXEC=y
diff --git a/target/linux/brcm63xx/profiles/100-Broadcom.mk b/target/linux/brcm63xx/generic/profiles/100-Broadcom.mk
similarity index 100%
rename from target/linux/brcm63xx/profiles/100-Broadcom.mk
rename to target/linux/brcm63xx/generic/profiles/100-Broadcom.mk
diff --git a/target/linux/brcm63xx/profiles/101-Broadcom-wl.mk b/target/linux/brcm63xx/generic/profiles/101-Broadcom-wl.mk
similarity index 100%
rename from target/linux/brcm63xx/profiles/101-Broadcom-wl.mk
rename to target/linux/brcm63xx/generic/profiles/101-Broadcom-wl.mk
diff --git a/target/linux/brcm63xx/profiles/102-Atheros.mk b/target/linux/brcm63xx/generic/profiles/102-Atheros.mk
similarity index 100%
rename from target/linux/brcm63xx/profiles/102-Atheros.mk
rename to target/linux/brcm63xx/generic/profiles/102-Atheros.mk
diff --git a/target/linux/brcm63xx/profiles/103-Ralink.mk b/target/linux/brcm63xx/generic/profiles/103-Ralink.mk
similarity index 100%
rename from target/linux/brcm63xx/profiles/103-Ralink.mk
rename to target/linux/brcm63xx/generic/profiles/103-Ralink.mk
diff --git a/target/linux/brcm63xx/profiles/104-No-WiFi.mk b/target/linux/brcm63xx/generic/profiles/104-No-WiFi.mk
similarity index 100%
rename from target/linux/brcm63xx/profiles/104-No-WiFi.mk
rename to target/linux/brcm63xx/generic/profiles/104-No-WiFi.mk
diff --git a/target/linux/brcm63xx/profiles/105-Broadcom-brcmsmac.mk b/target/linux/brcm63xx/generic/profiles/105-Broadcom-brcmsmac.mk
similarity index 100%
rename from target/linux/brcm63xx/profiles/105-Broadcom-brcmsmac.mk
rename to target/linux/brcm63xx/generic/profiles/105-Broadcom-brcmsmac.mk
diff --git a/target/linux/brcm63xx/profiles/200-GW6X00.mk b/target/linux/brcm63xx/generic/profiles/200-GW6X00.mk
similarity index 100%
rename from target/linux/brcm63xx/profiles/200-GW6X00.mk
rename to target/linux/brcm63xx/generic/profiles/200-GW6X00.mk
diff --git a/target/linux/brcm63xx/profiles/201-HW556.mk b/target/linux/brcm63xx/generic/profiles/201-HW556.mk
similarity index 100%
rename from target/linux/brcm63xx/profiles/201-HW556.mk
rename to target/linux/brcm63xx/generic/profiles/201-HW556.mk
diff --git a/target/linux/brcm63xx/generic/target.mk b/target/linux/brcm63xx/generic/target.mk
new file mode 100644
index 0000000000000000000000000000000000000000..d43a37c2a81e9a674621161bf22fb7a917d571df
--- /dev/null
+++ b/target/linux/brcm63xx/generic/target.mk
@@ -0,0 +1,7 @@
+BOARDNAME:=generic
+
+define Target/Description
+	Build firmware images for BCM63XX boards without SMP support.
+endef
+
+
diff --git a/target/linux/brcm63xx/image/Makefile b/target/linux/brcm63xx/image/Makefile
index 5811cdba690a368c14f11e64a4075070fbd878a9..69621dc5aee16ff4b4f2847b975d10daebc24a70 100755
--- a/target/linux/brcm63xx/image/Makefile
+++ b/target/linux/brcm63xx/image/Makefile
@@ -154,6 +154,7 @@ endef
 define Image/Build
 	dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-root.$(1) bs=128k conv=sync
 	# Various routers
+  ifeq ($(CONFIG_TARGET_brcm63xx_generic),y)
 	$(call Image/Build/CFE,$(1),96328avng,6328,96328avng-4M-flash-generic,,--pad 2)
 	$(call Image/Build/CFE,$(1),96328avng,6328,96328avng-8M-flash-generic,,--pad 4)
 	$(call Image/Build/CFE,$(1),96328avng,6328,96328avng-16M-flash-generic,,--pad 8)
@@ -176,9 +177,11 @@ define Image/Build
 	$(call Image/Build/CFE,$(1),96348A-122,6348,96348A-122-generic)
 	$(call Image/Build/CFE,$(1),96358VW,6358,96358VW-generic)
 	$(call Image/Build/CFE,$(1),96358VW2,6358,96358VW2-generic)
+  endif
 	$(call Image/Build/CFE,$(1),96368MVNgr,6368,96368MVNgr-generic)
 	$(call Image/Build/CFE,$(1),96368MVWG,6368,96368MVWG-generic)
 
+  ifeq ($(CONFIG_TARGET_brcm63xx_generic),y)
 	# BT Voyager V210_BTR
 	$(call Image/Build/CFE,$(1),V210_BB,6348,BTV210_BTR,,--layoutver 5)
 	# BT Voyager V210_ROI, V210_WB
@@ -203,8 +206,12 @@ define Image/Build
 	$(call Image/Build/CFEFIXUP,$(1),96348GW,GW6200,6348,GW6200,$(shell printf '\x99'))
 	# Neufbox4
 	$(call Image/Build/CFE,$(1),96358VW,6358,NEUFBOX4,OpenWRT-$(REVISION))
+  endif
+
 	# Neufbox6
 	$(call Image/Build/CFE,$(1),NB6-SER-r0,6362,NEUFBOX6,OpenWRT-$(REVISION))
+
+  ifeq ($(CONFIG_TARGET_brcm63xx_generic),y)
 	# Comtrend 6373
 	$(call Image/Build/CFE,$(1),CT6373-1,6358,CT6373)
 	# Comtrend 536, 5621
@@ -272,6 +279,7 @@ define Image/Build
 
 	# T-Com Speedport W 303V Typ B
 	$(call Image/Build/SPW303V,$(1),96358-502V,6358,SPW303V)
+  endif
 endef
 
 $(eval $(call BuildImage))
diff --git a/target/linux/brcm63xx/smp/config-default b/target/linux/brcm63xx/smp/config-default
new file mode 100644
index 0000000000000000000000000000000000000000..f68cd6ed2f5ff16c172daa432f2b7d0177fe2c8d
--- /dev/null
+++ b/target/linux/brcm63xx/smp/config-default
@@ -0,0 +1,25 @@
+# CONFIG_BCM63XX_CPU_6328 is not set
+# CONFIG_BCM63XX_CPU_6338 is not set
+# CONFIG_BCM63XX_CPU_6345 is not set
+# CONFIG_BCM63XX_CPU_6348 is not set
+# CONFIG_BCM63XX_CPU_6358 is not set
+CONFIG_BCM63XX_CPU_6362=y
+CONFIG_BCM63XX_CPU_6368=y
+CONFIG_CPU_BMIPS=y
+CONFIG_CPU_BMIPS4350=y
+# CONFIG_CPU_MIPS32_R1 is not set
+CONFIG_CPU_RMAP=y
+# CONFIG_KEXEC is not set
+CONFIG_MUTEX_SPIN_ON_OWNER=y
+CONFIG_NR_CPUS=2
+CONFIG_RFS_ACCEL=y
+CONFIG_RPS=y
+CONFIG_SMP=y
+CONFIG_STOP_MACHINE=y
+CONFIG_SYS_HAS_CPU_BMIPS4350=y
+CONFIG_SYS_SUPPORTS_HOTPLUG_CPU=y
+CONFIG_SYS_SUPPORTS_SMP=y
+CONFIG_TREE_RCU=y
+CONFIG_USE_GENERIC_SMP_HELPERS=y
+CONFIG_WEAK_ORDERING=y
+CONFIG_XPS=y
diff --git a/target/linux/brcm63xx/smp/profiles/100-Broadcom.mk b/target/linux/brcm63xx/smp/profiles/100-Broadcom.mk
new file mode 100644
index 0000000000000000000000000000000000000000..bc68f14937e4d9c33353240a5496b456643fed32
--- /dev/null
+++ b/target/linux/brcm63xx/smp/profiles/100-Broadcom.mk
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/Broadcom
+  NAME:=Broadcom WiFi (default)
+  PACKAGES:=kmod-b43 wpad-mini
+endef
+
+define Profile/Broadcom/Description
+	Package set compatible with hardware using Broadcom WiFi cards
+endef
+$(eval $(call Profile,Broadcom))
+
diff --git a/target/linux/brcm63xx/smp/profiles/101-Broadcom-wl.mk b/target/linux/brcm63xx/smp/profiles/101-Broadcom-wl.mk
new file mode 100644
index 0000000000000000000000000000000000000000..4f2d605eb70e809c64416127e3c8c823eb0aec1f
--- /dev/null
+++ b/target/linux/brcm63xx/smp/profiles/101-Broadcom-wl.mk
@@ -0,0 +1,19 @@
+#
+# Copyright (C) 2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/Broadcom-wl
+  NAME:=Broadcom BCM43xx WiFi (wl, proprietary)
+  PACKAGES:= kmod-brcm-wl wlc nas
+endef
+
+define Profile/Broadcom-wl/Description
+	Package set compatible with hardware using Broadcom BCM43xx cards
+	using the proprietary broadcom wireless "wl" driver.
+endef
+
+$(eval $(call Profile,Broadcom-wl))
+
diff --git a/target/linux/brcm63xx/smp/profiles/102-Atheros.mk b/target/linux/brcm63xx/smp/profiles/102-Atheros.mk
new file mode 100644
index 0000000000000000000000000000000000000000..b214185c5dd1266eb0b2e684bd43e7bc42910b42
--- /dev/null
+++ b/target/linux/brcm63xx/smp/profiles/102-Atheros.mk
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/Atheros
+  NAME:=Atheros WiFi (default)
+  PACKAGES:=kmod-ath5k kmod-ath9k wpad-mini
+endef
+
+define Profile/Atheros/Description
+	Package set compatible with hardware using Atheros WiFi cards
+endef
+$(eval $(call Profile,Atheros))
+
diff --git a/target/linux/brcm63xx/smp/profiles/103-Ralink.mk b/target/linux/brcm63xx/smp/profiles/103-Ralink.mk
new file mode 100644
index 0000000000000000000000000000000000000000..412c5a45adf2aba0bf3e4bade74d690375b60a01
--- /dev/null
+++ b/target/linux/brcm63xx/smp/profiles/103-Ralink.mk
@@ -0,0 +1,13 @@
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/Ralink
+  NAME:=Ralink WiFi
+  PACKAGES:=kmod-rt61-pci wpad-mini
+endef
+$(eval $(call Profile,Ralink))
+
diff --git a/target/linux/brcm63xx/smp/profiles/104-No-WiFi.mk b/target/linux/brcm63xx/smp/profiles/104-No-WiFi.mk
new file mode 100644
index 0000000000000000000000000000000000000000..0f5ec37cf6309dfa4a8689a4e79cf9e04d304021
--- /dev/null
+++ b/target/linux/brcm63xx/smp/profiles/104-No-WiFi.mk
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/NoWiFi
+  NAME:=No WiFi
+  PACKAGES:=
+endef
+
+define Profile/NoWiFi/description
+  Package set compatible with BCM63xx routers without Wi-Fi.
+endef
+
+$(eval $(call Profile,NoWiFi))
diff --git a/target/linux/brcm63xx/smp/profiles/105-Broadcom-brcmsmac.mk b/target/linux/brcm63xx/smp/profiles/105-Broadcom-brcmsmac.mk
new file mode 100644
index 0000000000000000000000000000000000000000..bb558d1390d6ef8e6e67e27d37ae102704235588
--- /dev/null
+++ b/target/linux/brcm63xx/smp/profiles/105-Broadcom-brcmsmac.mk
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2012 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+define Profile/Broadcom-brcmsmac
+  NAME:=Broadcom WiFi (brcmsmac)
+  PACKAGES:=kmod-brcmsmac wpad-mini
+endef
+
+define Profile/Broadcom-brcmsmac/Description
+	Package set compatible with hardware using Broadcom WiFi cards
+endef
+$(eval $(call Profile,Broadcom-brcmsmac))
+
diff --git a/target/linux/brcm63xx/smp/target.mk b/target/linux/brcm63xx/smp/target.mk
new file mode 100644
index 0000000000000000000000000000000000000000..b0ccf97498de96d93b7544bd617f1fe50741ad44
--- /dev/null
+++ b/target/linux/brcm63xx/smp/target.mk
@@ -0,0 +1,8 @@
+BOARDNAME:=smp
+
+define Target/Description
+	Build firmware images for BCM63XX boards with SMP support.
+	Currently only BCM6362 and BCM6368 supported.
+endef
+
+