From 125fc703bb1477599809db96e5d62a1915864fad Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Wed, 2 Oct 2013 22:25:26 +0000
Subject: kernel: bgmac: move other bgmac patches to generic

The bgmac driver will be used on the brcm47xx and the bcm53xx target.

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

SVN-Revision: 38289
---
 .../patches-3.10/773-bgmac-add-srab-switch.patch   | 72 ++++++++++++++++++++++
 1 file changed, 72 insertions(+)
 create mode 100644 target/linux/generic/patches-3.10/773-bgmac-add-srab-switch.patch

(limited to 'target/linux/generic/patches-3.10/773-bgmac-add-srab-switch.patch')

diff --git a/target/linux/generic/patches-3.10/773-bgmac-add-srab-switch.patch b/target/linux/generic/patches-3.10/773-bgmac-add-srab-switch.patch
new file mode 100644
index 0000000000..680adf5f17
--- /dev/null
+++ b/target/linux/generic/patches-3.10/773-bgmac-add-srab-switch.patch
@@ -0,0 +1,72 @@
+Register switch connected to srab
+
+Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
+
+--- 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>
+ #include <bcm47xx_nvram.h>
+ 
+ static const struct bcma_device_id bgmac_bcma_tbl[] = {
+@@ -1420,6 +1421,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
+  **************************************************/
+@@ -1519,6 +1531,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");
+@@ -1548,6 +1570,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
+@@ -430,6 +430,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)
-- 
cgit v1.2.3