mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 23:14:31 +08:00
net: ethernet: davinci_emac: Use MAC Address from Device Tree
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>
This commit is contained in:
parent
66e6369e31
commit
f30a51a418
@ -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 = ðtool_ops;
|
||||
netif_napi_add(ndev, &priv->napi, emac_poll);
|
||||
|
Loading…
Reference in New Issue
Block a user