A hard hang is observed whenever the ethernet interface is brought
down. If the PHY is stopped before the LPC core block is reset,
the SoC will hang. Comparing lpc_eth_close() and lpc_eth_open() I
re-arranged the ordering of the functions calls in lpc_eth_close() to
reset the hardware before stopping the PHY.
Signed-off-by: Trevor Woerner <redacted>
---
drivers/net/ethernet/nxp/lpc_eth.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
From: Vladimir Zapolskiy <vz@mleia.com> Date: 2021-10-24 20:01:07
Hi Trevor,
On 10/24/21 8:50 PM, Trevor Woerner wrote:
quoted hunk
A hard hang is observed whenever the ethernet interface is brought
down. If the PHY is stopped before the LPC core block is reset,
the SoC will hang. Comparing lpc_eth_close() and lpc_eth_open() I
re-arranged the ordering of the functions calls in lpc_eth_close() to
reset the hardware before stopping the PHY.
Signed-off-by: Trevor Woerner <redacted>
---
drivers/net/ethernet/nxp/lpc_eth.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
@@ -1015,9 +1015,6 @@ static int lpc_eth_close(struct net_device *ndev)napi_disable(&pldat->napi);netif_stop_queue(ndev);-if(ndev->phydev)-phy_stop(ndev->phydev);-spin_lock_irqsave(&pldat->lock,flags);__lpc_eth_reset(pldat);netif_carrier_off(ndev);
@@ -1025,6 +1022,8 @@ static int lpc_eth_close(struct net_device *ndev)writel(0,LPC_ENET_MAC2(pldat->net_base));spin_unlock_irqrestore(&pldat->lock,flags);+if(ndev->phydev)+phy_stop(ndev->phydev);clk_disable_unprepare(pldat->clk);return0;
thank you for the fix!
Fixes: b7370112f519 ("lpc32xx: Added ethernet driver")
Acked-by: Vladimir Zapolskiy <vz@mleia.com>
--
Best wishes,
Vladimir
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hello:
This patch was applied to netdev/net.git (master)
by David S. Miller [off-list ref]:
On Sun, 24 Oct 2021 13:50:02 -0400 you wrote:
A hard hang is observed whenever the ethernet interface is brought
down. If the PHY is stopped before the LPC core block is reset,
the SoC will hang. Comparing lpc_eth_close() and lpc_eth_open() I
re-arranged the ordering of the functions calls in lpc_eth_close() to
reset the hardware before stopping the PHY.
Signed-off-by: Trevor Woerner <redacted>
[...]