]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
net: ethernet: davinci_emac: Use MAC Address from Device Tree
authorAdam Ford <aford173@gmail.com>
Sun, 22 Oct 2023 15:19:11 +0000 (10:19 -0500)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 24 Oct 2023 09:26:08 +0000 (11:26 +0200)
Currently there is a device tree entry called "local-mac-address"
which can be filled by the bootloader or manually set.This is
useful when the user does not want to use the MAC address
programmed into the SoC.

Currently, the davinci_emac reads the MAC from the DT, copies
it from pdata->mac_addr to priv->mac_addr, then blindly overwrites
it by reading from registers in the SoC, and falls back to a
random MAC if it's still not valid.  This completely ignores any
MAC address in the device tree.

In order to use the local-mac-address, check to see if the contents
of priv->mac_addr are valid before falling back to reading from the
SoC when the MAC address is not valid.

Signed-off-by: Adam Ford <aford173@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://lore.kernel.org/r/20231022151911.4279-1-aford173@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/ti/davinci_emac.c

index 23f8bc1cd20da6943d00df89a6cbc01ca76502b0..b0950a318c4233bf9603d88ba20ca2c852b0564d 100644 (file)
@@ -1928,18 +1928,20 @@ static int davinci_emac_probe(struct platform_device *pdev)
                goto err_free_rxchan;
        ndev->irq = rc;
 
-       rc = davinci_emac_try_get_mac(pdev, res_ctrl ? 0 : 1, priv->mac_addr);
-       if (!rc)
-               eth_hw_addr_set(ndev, priv->mac_addr);
-
+       /* If the MAC address is not present, read the registers from the SoC */
        if (!is_valid_ether_addr(priv->mac_addr)) {
-               /* Use random MAC if still none obtained. */
-               eth_hw_addr_random(ndev);
-               memcpy(priv->mac_addr, ndev->dev_addr, ndev->addr_len);
-               dev_warn(&pdev->dev, "using random MAC addr: %pM\n",
-                        priv->mac_addr);
+               rc = davinci_emac_try_get_mac(pdev, res_ctrl ? 0 : 1, priv->mac_addr);
+               if (!rc)
+                       eth_hw_addr_set(ndev, priv->mac_addr);
+
+               if (!is_valid_ether_addr(priv->mac_addr)) {
+                       /* Use random MAC if still none obtained. */
+                       eth_hw_addr_random(ndev);
+                       memcpy(priv->mac_addr, ndev->dev_addr, ndev->addr_len);
+                       dev_warn(&pdev->dev, "using random MAC addr: %pM\n",
+                                priv->mac_addr);
+               }
        }
-
        ndev->netdev_ops = &emac_netdev_ops;
        ndev->ethtool_ops = &ethtool_ops;
        netif_napi_add(ndev, &priv->napi, emac_poll);