dpaa_eth: Use random MAC address when none is given
authorMadalin Bucur <madalin.bucur@oss.nxp.com>
Thu, 5 Mar 2020 17:08:58 +0000 (19:08 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 9 Mar 2020 05:02:54 +0000 (22:02 -0700)
If there is no valid MAC address in the device tree, use a random
MAC address.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Madalin Bucur <madalin.bucur@oss.nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c

index fd93d542f497b8535cba6ac7c5859a3d12e7e867..c0fe305b9d1691a34a61e0787972ae21a62d31a2 100644 (file)
@@ -233,8 +233,20 @@ static int dpaa_netdev_init(struct net_device *net_dev,
        net_dev->features |= net_dev->hw_features;
        net_dev->vlan_features = net_dev->features;
 
-       memcpy(net_dev->perm_addr, mac_addr, net_dev->addr_len);
-       memcpy(net_dev->dev_addr, mac_addr, net_dev->addr_len);
+       if (is_valid_ether_addr(mac_addr)) {
+               memcpy(net_dev->perm_addr, mac_addr, net_dev->addr_len);
+               memcpy(net_dev->dev_addr, mac_addr, net_dev->addr_len);
+       } else {
+               eth_hw_addr_random(net_dev);
+               err = priv->mac_dev->change_addr(priv->mac_dev->fman_mac,
+                       (enet_addr_t *)net_dev->dev_addr);
+               if (err) {
+                       dev_err(dev, "Failed to set random MAC address\n");
+                       return -EINVAL;
+               }
+               dev_info(dev, "Using random MAC address: %pM\n",
+                        net_dev->dev_addr);
+       }
 
        net_dev->ethtool_ops = &dpaa_ethtool_ops;