ralink: check ethernet MAC address whether it is valid
authorJohn Crispin <john@openwrt.org>
Wed, 28 Jan 2015 12:06:22 +0000 (12:06 +0000)
committerJohn Crispin <john@openwrt.org>
Wed, 28 Jan 2015 12:06:22 +0000 (12:06 +0000)
The mac address usually write in factory block. but sometime user erase this block , the mac address will change to ff:ff:ff:ff:ff:ff.
This patch is purpose to fix this issue.

Signed-off-by: wengbj <linux.c@foxmail.com>
SVN-Revision: 44166

target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_soc_eth.c

index d7d1e8efc9063ff8850acc7b5f48a416a16322fd..9900a5e5088479296d3869a1b1fc915a8b316fe8 100644 (file)
@@ -1220,8 +1220,10 @@ static int __init fe_init(struct net_device *dev)
        if (priv->soc->switch_init)
                priv->soc->switch_init(priv);
 
        if (priv->soc->switch_init)
                priv->soc->switch_init(priv);
 
-       memcpy(dev->dev_addr, priv->soc->mac, ETH_ALEN);
        of_get_mac_address_mtd(priv->device->of_node, dev->dev_addr);
        of_get_mac_address_mtd(priv->device->of_node, dev->dev_addr);
+       /*If the mac address is invalid, use default mac address  */
+       if (!is_valid_ether_addr(dev->dev_addr))
+               memcpy(dev->dev_addr, priv->soc->mac, ETH_ALEN);
 
        err = fe_mdio_init(priv);
        if (err)
 
        err = fe_mdio_init(priv);
        if (err)