lkml.org 
[lkml]   [2023]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/2] net: ethernet: davinci_emac: Use MAC Address from Device Tree
    Date
    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>

    diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
    index 2eb9d5a32588..994ddd756782 100644
    --- a/drivers/net/ethernet/ti/davinci_emac.c
    +++ b/drivers/net/ethernet/ti/davinci_emac.c
    @@ -1934,18 +1934,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);
    --
    2.39.2
    \
     
     \ /
      Last update: 2023-09-06 11:53    [W:4.234 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site