On 03/16/2017 08:48 AM, Steve Lin wrote: > 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.l...@broadcom.com>
Reviewed-by: Florian Fainelli <f.faine...@gmail.com> PS: you might want to specify which tree this applies to by using [PATCH net-next] or [PATCH net] in the subject, see the netdev-FAQ.txt for details: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/networking/netdev-FAQ.txt > --- > drivers/net/ethernet/broadcom/bgmac-bcma.c | 39 > ++++++++++++++++++------------ > 1 file changed, 23 insertions(+), 16 deletions(-) > > diff --git a/drivers/net/ethernet/broadcom/bgmac-bcma.c > b/drivers/net/ethernet/broadcom/bgmac-bcma.c > index cf15b7e..6322594 100644 > --- a/drivers/net/ethernet/broadcom/bgmac-bcma.c > +++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c > @@ -11,6 +11,7 @@ > #include <linux/bcma/bcma.h> > #include <linux/brcmphy.h> > #include <linux/etherdevice.h> > +#include <linux/of_net.h> > #include "bgmac.h" > > static inline bool bgmac_is_bcm4707_family(struct bcma_device *core) > @@ -114,7 +115,7 @@ static int bgmac_probe(struct bcma_device *core) > struct ssb_sprom *sprom = &core->bus->sprom; > struct mii_bus *mii_bus; > struct bgmac *bgmac; > - u8 *mac; > + const u8 *mac = NULL; > int err; > > bgmac = bgmac_alloc(&core->dev); > @@ -127,21 +128,27 @@ static int bgmac_probe(struct bcma_device *core) > > bcma_set_drvdata(core, bgmac); > > - switch (core->core_unit) { > - case 0: > - mac = sprom->et0mac; > - break; > - case 1: > - mac = sprom->et1mac; > - break; > - case 2: > - mac = sprom->et2mac; > - break; > - default: > - dev_err(bgmac->dev, "Unsupported core_unit %d\n", > - core->core_unit); > - err = -ENOTSUPP; > - goto err; > + if (bgmac->dev->of_node) > + mac = of_get_mac_address(bgmac->dev->of_node); > + > + /* If no MAC address assigned via device tree, check SPROM */ > + if (!mac) { > + switch (core->core_unit) { > + case 0: > + mac = sprom->et0mac; > + break; > + case 1: > + mac = sprom->et1mac; > + break; > + case 2: > + mac = sprom->et2mac; > + break; > + default: > + dev_err(bgmac->dev, "Unsupported core_unit %d\n", > + core->core_unit); > + err = -ENOTSUPP; > + goto err; > + } > } > > ether_addr_copy(bgmac->net_dev->dev_addr, mac); > -- Florian