From: Joakim Zhang Date: Thu, 20 May 2021 10:25:30 +0000 (+0800) Subject: LF-3831 net: stmmac: fix system hang if change mac address after interface ifdown X-Git-Tag: rel_imx_5.10.35_2.0.0-somdevices.0~65 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=6f6142d95f6321c3e9bc65393d272234a8c96038;p=linux.git LF-3831 net: stmmac: fix system hang if change mac address after interface ifdown Fix system hang with below sequences: ~# ifconfig ethx down ~# ifconfig ethx hw ether xx:xx:xx:xx:xx:xx After ethx down, stmmac all clocks gated off and then register access causes system hang. Reviewed-by: Jun Li Signed-off-by: Joakim Zhang Acked-by: Jason Liu --- diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 5be941e792f6..62fff9dd2c7e 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -4429,12 +4429,18 @@ static int stmmac_set_mac_address(struct net_device *ndev, void *addr) struct stmmac_priv *priv = netdev_priv(ndev); int ret = 0; - ret = eth_mac_addr(ndev, addr); + ret = stmmac_bus_clks_enable(priv, true); if (ret) return ret; + ret = eth_mac_addr(ndev, addr); + if (ret) + goto error_set_mac; + stmmac_set_umac_addr(priv, priv->hw, ndev->dev_addr, 0); +error_set_mac: + stmmac_bus_clks_enable(priv, false); return ret; }