aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bgmac-bcma.c
diff options
context:
space:
mode:
authorSteve Lin <steven.lin1@broadcom.com>2017-03-16 11:48:58 -0400
committerDavid S. Miller <davem@davemloft.net>2017-03-16 14:57:26 -0400
commit2f771399a3a2c371c140ff33544a583c6fbc5fd9 (patch)
treeb402f8b34264219d422c88d9186a5a929c535671 /drivers/net/ethernet/broadcom/bgmac-bcma.c
parent01ac2994c0d566f2e816ef0c88ab8e4f8b1b3ed1 (diff)
net: ethernet: bgmac: Allow MAC address to be specified in DTB
Allows the BCMA version of the bgmac driver to obtain MAC address from the device tree. If no MAC address is specified there, then the previous behavior (obtaining MAC address from SPROM) is used. Signed-off-by: Steve Lin <steven.lin1@broadcom.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Acked-by: Jon Mason <jon.mason@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/bgmac-bcma.c')
-rw-r--r--drivers/net/ethernet/broadcom/bgmac-bcma.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/drivers/net/ethernet/broadcom/bgmac-bcma.c b/drivers/net/ethernet/broadcom/bgmac-bcma.c
index cf15b7e2929c..6322594ab260 100644
--- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
+++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
@@ -11,6 +11,7 @@
11#include <linux/bcma/bcma.h> 11#include <linux/bcma/bcma.h>
12#include <linux/brcmphy.h> 12#include <linux/brcmphy.h>
13#include <linux/etherdevice.h> 13#include <linux/etherdevice.h>
14#include <linux/of_net.h>
14#include "bgmac.h" 15#include "bgmac.h"
15 16
16static inline bool bgmac_is_bcm4707_family(struct bcma_device *core) 17static inline bool bgmac_is_bcm4707_family(struct bcma_device *core)
@@ -114,7 +115,7 @@ static int bgmac_probe(struct bcma_device *core)
114 struct ssb_sprom *sprom = &core->bus->sprom; 115 struct ssb_sprom *sprom = &core->bus->sprom;
115 struct mii_bus *mii_bus; 116 struct mii_bus *mii_bus;
116 struct bgmac *bgmac; 117 struct bgmac *bgmac;
117 u8 *mac; 118 const u8 *mac = NULL;
118 int err; 119 int err;
119 120
120 bgmac = bgmac_alloc(&core->dev); 121 bgmac = bgmac_alloc(&core->dev);
@@ -127,21 +128,27 @@ static int bgmac_probe(struct bcma_device *core)
127 128
128 bcma_set_drvdata(core, bgmac); 129 bcma_set_drvdata(core, bgmac);
129 130
130 switch (core->core_unit) { 131 if (bgmac->dev->of_node)
131 case 0: 132 mac = of_get_mac_address(bgmac->dev->of_node);
132 mac = sprom->et0mac; 133
133 break; 134 /* If no MAC address assigned via device tree, check SPROM */
134 case 1: 135 if (!mac) {
135 mac = sprom->et1mac; 136 switch (core->core_unit) {
136 break; 137 case 0:
137 case 2: 138 mac = sprom->et0mac;
138 mac = sprom->et2mac; 139 break;
139 break; 140 case 1:
140 default: 141 mac = sprom->et1mac;
141 dev_err(bgmac->dev, "Unsupported core_unit %d\n", 142 break;
142 core->core_unit); 143 case 2:
143 err = -ENOTSUPP; 144 mac = sprom->et2mac;
144 goto err; 145 break;
146 default:
147 dev_err(bgmac->dev, "Unsupported core_unit %d\n",
148 core->core_unit);
149 err = -ENOTSUPP;
150 goto err;
151 }
145 } 152 }
146 153
147 ether_addr_copy(bgmac->net_dev->dev_addr, mac); 154 ether_addr_copy(bgmac->net_dev->dev_addr, mac);