net: fec: set mac address unconditionally
authorGavin Schenk <[email protected]>
Fri, 30 Sep 2016 09:46:10 +0000 (11:46 +0200)
committerDavid S. Miller <[email protected]>
Mon, 3 Oct 2016 05:27:41 +0000 (01:27 -0400)
If the mac address origin is not dt, you can only safely assign a mac
address after "link up" of the device. If the link is off the clocks are
disabled and because of issues assigning registers when clocks are off the
new mac address cannot be written in .ndo_set_mac_address() on some soc's.
This fix sets the mac address unconditionally in fec_restart(...) and
ensures consistency between fec registers and the network layer.

Signed-off-by: Gavin Schenk <[email protected]>
Acked-by: Fugang Duan <[email protected]>
Acked-by: Uwe Kleine-König <[email protected]>
Fixes: 9638d19e4816 ("net: fec: add netif status check before set mac address")
Signed-off-by: David S. Miller <[email protected]>
drivers/net/ethernet/freescale/fec_main.c

index 1fa2d87c2fc9120785ba88a15c521e489a98a3f1..48a033e64423dcde7e41c589e0b25466ea266002 100644 (file)
@@ -913,13 +913,11 @@ fec_restart(struct net_device *ndev)
         * enet-mac reset will reset mac address registers too,
         * so need to reconfigure it.
         */
-       if (fep->quirks & FEC_QUIRK_ENET_MAC) {
-               memcpy(&temp_mac, ndev->dev_addr, ETH_ALEN);
-               writel((__force u32)cpu_to_be32(temp_mac[0]),
-                      fep->hwp + FEC_ADDR_LOW);
-               writel((__force u32)cpu_to_be32(temp_mac[1]),
-                      fep->hwp + FEC_ADDR_HIGH);
-       }
+       memcpy(&temp_mac, ndev->dev_addr, ETH_ALEN);
+       writel((__force u32)cpu_to_be32(temp_mac[0]),
+              fep->hwp + FEC_ADDR_LOW);
+       writel((__force u32)cpu_to_be32(temp_mac[1]),
+              fep->hwp + FEC_ADDR_HIGH);
 
        /* Clear any outstanding interrupt. */
        writel(0xffffffff, fep->hwp + FEC_IEVENT);