Message ID | 20191011231915.9347-1-f.fainelli@gmail.com |
---|---|
State | Superseded |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net: bcmgenet: Generate a random MAC if none is valid | expand |
On 2019-10-11 4:19 p.m., Florian Fainelli wrote: > Instead of having a hard failure and stopping the driver's probe > routine, generate a random Ethernet MAC address to keep going. > > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > --- > drivers/net/ethernet/broadcom/genet/bcmgenet.c | 15 ++++++--------- > 1 file changed, 6 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c > index 12cb77ef1081..5c20829ffa0f 100644 > --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c > +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c > @@ -3461,16 +3461,10 @@ static int bcmgenet_probe(struct platform_device *pdev) > goto err; > } > > - if (dn) { > + if (dn) > macaddr = of_get_mac_address(dn); > - if (IS_ERR(macaddr)) { > - dev_err(&pdev->dev, "can't find MAC address\n"); We shouldn't hide the error that the MAC address wasn't found. We should continue to print some kind of error as generating a mac address is a stop-gap measure and a proper MAC address should be used for the board. > - err = -EINVAL; > - goto err; > - } > - } else { > + else > macaddr = pd->mac_address; > - } > > priv->base = devm_platform_ioremap_resource(pdev, 0); > if (IS_ERR(priv->base)) { > @@ -3482,7 +3476,10 @@ static int bcmgenet_probe(struct platform_device *pdev) > > SET_NETDEV_DEV(dev, &pdev->dev); > dev_set_drvdata(&pdev->dev, dev); > - ether_addr_copy(dev->dev_addr, macaddr); > + if (IS_ERR_OR_NULL(macaddr) || !is_valid_ether_addr(macaddr)) > + eth_hw_addr_random(dev); > + else > + ether_addr_copy(dev->dev_addr, macaddr); > dev->watchdog_timeo = 2 * HZ; > dev->ethtool_ops = &bcmgenet_ethtool_ops; > dev->netdev_ops = &bcmgenet_netdev_ops;
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index 12cb77ef1081..5c20829ffa0f 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -3461,16 +3461,10 @@ static int bcmgenet_probe(struct platform_device *pdev) goto err; } - if (dn) { + if (dn) macaddr = of_get_mac_address(dn); - if (IS_ERR(macaddr)) { - dev_err(&pdev->dev, "can't find MAC address\n"); - err = -EINVAL; - goto err; - } - } else { + else macaddr = pd->mac_address; - } priv->base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->base)) { @@ -3482,7 +3476,10 @@ static int bcmgenet_probe(struct platform_device *pdev) SET_NETDEV_DEV(dev, &pdev->dev); dev_set_drvdata(&pdev->dev, dev); - ether_addr_copy(dev->dev_addr, macaddr); + if (IS_ERR_OR_NULL(macaddr) || !is_valid_ether_addr(macaddr)) + eth_hw_addr_random(dev); + else + ether_addr_copy(dev->dev_addr, macaddr); dev->watchdog_timeo = 2 * HZ; dev->ethtool_ops = &bcmgenet_ethtool_ops; dev->netdev_ops = &bcmgenet_netdev_ops;
Instead of having a hard failure and stopping the driver's probe routine, generate a random Ethernet MAC address to keep going. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-)