Change the order of reading MAC address, try to read it from MAC chip first, if it's not availabe, then try to read it from device tree.
Fixes: 35c54922dc97 ("ARM: dts: tacoma: Add reserved memory for ramoops") Signed-off-by: Hongwei Zhang <hongw...@ami.com> --- drivers/net/ethernet/faraday/ftgmac100.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c index 65cd25372020..713e9325bef8 100644 --- a/drivers/net/ethernet/faraday/ftgmac100.c +++ b/drivers/net/ethernet/faraday/ftgmac100.c @@ -184,14 +184,7 @@ static void ftgmac100_initial_mac(struct ftgmac100 *priv) unsigned int l; void *addr; - addr = device_get_mac_address(priv->dev, mac, ETH_ALEN); - if (addr) { - ether_addr_copy(priv->netdev->dev_addr, mac); - dev_info(priv->dev, "Read MAC address %pM from device tree\n", - mac); - return; - } - + /* Try to read MAC from chip first */ m = ioread32(priv->base + FTGMAC100_OFFSET_MAC_MADR); l = ioread32(priv->base + FTGMAC100_OFFSET_MAC_LADR); @@ -205,7 +198,18 @@ static void ftgmac100_initial_mac(struct ftgmac100 *priv) if (is_valid_ether_addr(mac)) { ether_addr_copy(priv->netdev->dev_addr, mac); dev_info(priv->dev, "Read MAC address %pM from chip\n", mac); - } else { + return; + } + + /* Get MAC from device tree if it cannot be read from the chip */ + addr = device_get_mac_address(priv->dev, mac, ETH_ALEN); + if (addr) { + ether_addr_copy(priv->netdev->dev_addr, mac); + dev_info(priv->dev, "Read MAC address %pM from device tree\n", + mac); + return; + } + else { eth_hw_addr_random(priv->netdev); dev_info(priv->dev, "Generated random MAC address %pM\n", priv->netdev->dev_addr); -- 2.17.1