bcm53xx: bgmac: use srab switch driver
authorHauke Mehrtens <hauke@hauke-m.de>
Wed, 25 Sep 2013 21:49:12 +0000 (21:49 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Wed, 25 Sep 2013 21:49:12 +0000 (21:49 +0000)
use the srab switch driver on these SoCs.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
SVN-Revision: 38200

target/linux/bcm53xx/Makefile
target/linux/bcm53xx/patches-3.10/205-bgmac-add-srab-switch.patch [new file with mode: 0644]

index 591cc99..4986d80 100644 (file)
@@ -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 (file)
index 0000000..195336b
--- /dev/null
@@ -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)