From: Gavin Schenk <g.sch...@eckelmann.de> Sent: Wednesday, September 21, 2016 
9:31 PM
> To: Andy Duan <fugang.d...@nxp.com>
> Cc: netdev@vger.kernel.org; ker...@pengutronix.de; Gavin Schenk
> <g.sch...@eckelmann.de>
> Subject: [PATCH] net: fec: set mac address unconditionally
> 
> Fixes: 9638d19e4816 ("net: fec: add netif status check before set mac
> address")
> 
> If the mac address origin is not dt, you can only safe assign a mac address
> after "link up" of the device. If the link is down the clocks are disabled and
> because of issues assigning registers when clocks are down the new mac
> address is discarded on some soc's. This fix sets the mac address
> unconditionally in fec_restart(...) and ensures consistens between fec
> registers and the network layer.
> 
> Signed-off-by: Gavin Schenk <g.sch...@eckelmann.de>
> ---

It make sense, thanks.

Acked-by: Fugang Duan <fugang.d...@nxp.com>

>  drivers/net/ethernet/freescale/fec_main.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/ethernet/freescale/fec_main.c
> b/drivers/net/ethernet/freescale/fec_main.c
> index 2a03857cca18..bdabea6cd981 100644
> --- a/drivers/net/ethernet/freescale/fec_main.c
> +++ b/drivers/net/ethernet/freescale/fec_main.c
> @@ -903,13 +903,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);
> --
> 1.9.1
> 
> 
> Eckelmann AG
> Vorstand: Dipl.-Ing. Peter Frankenbach (Sprecher) Dipl.-Wi.-Ing. Philipp
> Eckelmann
> Dr.-Ing. Frank-Thomas Mellert Dr.-Ing. Marco Münchhof Dr.-Ing. Frank
> Uhlemann
> Vorsitzender des Aufsichtsrats: Hubertus G. Krossa
> Sitz der Gesellschaft: Berliner Str. 161, 65205 Wiesbaden, Amtsgericht
> Wiesbaden HRB 12636
> http://www.eckelmann.de

Reply via email to