[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <AM4PR0401MB2260AB54A9A0B96F01D5DA21FFF60@AM4PR0401MB2260.eurprd04.prod.outlook.com>
Date: Wed, 21 Sep 2016 16:26:02 +0000
From: Andy Duan <fugang.duan@....com>
To: Gavin Schenk <g.schenk@...elmann.de>
CC: "netdev@...r.kernel.org" <netdev@...r.kernel.org>,
"kernel@...gutronix.de" <kernel@...gutronix.de>
Subject: RE: [PATCH] net: fec: set mac address unconditionally
From: Gavin Schenk <g.schenk@...elmann.de> Sent: Wednesday, September 21, 2016 9:31 PM
> To: Andy Duan <fugang.duan@....com>
> Cc: netdev@...r.kernel.org; kernel@...gutronix.de; Gavin Schenk
> <g.schenk@...elmann.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.schenk@...elmann.de>
> ---
It make sense, thanks.
Acked-by: Fugang Duan <fugang.duan@....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
Powered by blists - more mailing lists