diff --git a/target/linux/bcm53xx/Makefile b/target/linux/bcm53xx/Makefile
index 591cc99fde0eab60dee926fa17f3a9e96214e296..4986d8061955a5e2ed3de12080b3f8422fdc11a6 100644
--- a/target/linux/bcm53xx/Makefile
+++ b/target/linux/bcm53xx/Makefile
@@ -24,6 +24,6 @@ CFLAGS:=-Os -pipe -mtune=cortex-a9 -march=armv7-a -mfpu=vfp -mfloat-abi=softfp
 
 KERNELNAME:="zImage dtbs"
 
-DEFAULT_PACKAGES +=
+DEFAULT_PACKAGES += swconfig
 
 $(eval $(call BuildTarget))
diff --git a/target/linux/bcm53xx/patches-3.10/205-bgmac-add-srab-switch.patch b/target/linux/bcm53xx/patches-3.10/205-bgmac-add-srab-switch.patch
new file mode 100644
index 0000000000000000000000000000000000000000..195336b716a3af2b1591a996340d0fdd71277343
--- /dev/null
+++ b/target/linux/bcm53xx/patches-3.10/205-bgmac-add-srab-switch.patch
@@ -0,0 +1,68 @@
+--- a/drivers/net/ethernet/broadcom/bgmac.c
++++ b/drivers/net/ethernet/broadcom/bgmac.c
+@@ -16,6 +16,7 @@
+ #include <linux/phy.h>
+ #include <linux/interrupt.h>
+ #include <linux/dma-mapping.h>
++#include <linux/platform_data/b53.h>
+ #ifdef CONFIG_BCM47XX
+ #include <bcm47xx_nvram.h>
+ #else
+@@ -1396,6 +1397,17 @@ static void bgmac_mii_unregister(struct
+ 	mdiobus_free(mii_bus);
+ }
+ 
++static struct b53_platform_data bgmac_b53_pdata = {
++};
++
++static struct platform_device bgmac_b53_dev = {
++	.name		= "b53-srab-switch",
++	.id		= -1,
++	.dev		= {
++		.platform_data = &bgmac_b53_pdata,
++	},
++};
++
+ /**************************************************
+  * BCMA bus ops
+  **************************************************/
+@@ -1495,6 +1507,16 @@ static int bgmac_probe(struct bcma_devic
+ 		goto err_dma_free;
+ 	}
+ 
++	if (core->id.id != BCMA_CHIP_ID_BCM4707 &&
++	    core->id.id != BCMA_CHIP_ID_BCM53018 &&
++	    !bgmac_b53_pdata.regs) {
++		bgmac_b53_pdata.regs = ioremap_nocache(0x18007000, 0x1000);
++
++		err = platform_device_register(&bgmac_b53_dev);
++		if (!err)
++			bgmac->b53_device = &bgmac_b53_dev;
++	}
++
+ 	err = register_netdev(bgmac->net_dev);
+ 	if (err) {
+ 		bgmac_err(bgmac, "Cannot register net device\n");
+@@ -1524,6 +1546,10 @@ static void bgmac_remove(struct bcma_dev
+ {
+ 	struct bgmac *bgmac = bcma_get_drvdata(core);
+ 
++	if (bgmac->b53_device)
++		platform_device_unregister(&bgmac_b53_dev);
++	bgmac->b53_device = NULL;
++
+ 	netif_napi_del(&bgmac->napi);
+ 	unregister_netdev(bgmac->net_dev);
+ 	bgmac_mii_unregister(bgmac);
+--- a/drivers/net/ethernet/broadcom/bgmac.h
++++ b/drivers/net/ethernet/broadcom/bgmac.h
+@@ -428,6 +428,9 @@ struct bgmac {
+ 	bool has_robosw;
+ 
+ 	bool loopback;
++
++	/* platform device for associated switch */
++	struct platform_device *b53_device;
+ };
+ 
+ static inline u32 bgmac_read(struct bgmac *bgmac, u16 offset)