From 6f6142d95f6321c3e9bc65393d272234a8c96038 Mon Sep 17 00:00:00 2001 From: Joakim Zhang Date: Thu, 20 May 2021 18:25:30 +0800 Subject: [PATCH] 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 --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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; } -- 2.17.1