[SRU][G/raspi][F/raspi][PATCH] net: lan78xx: Ack pending PHY ints when resetting

Juerg Haefliger juerg.haefliger at canonical.com
Wed Dec 16 12:26:57 UTC 2020


From: Phil Elwell <phil at raspberrypi.com>

BugLink: https://bugs.launchpad.net/bugs/1890487

lan78xx_link_reset explicitly clears the MAC's view of the PHY's IRQ
status. In doing so it potentially leaves the PHY with a pending
interrupt that will never be acknowledged, at which point no further
interrupts will be generated.

Avoid the problem by acknowledging any pending PHY interrupt after
clearing the MAC's status bit.

See: https://github.com/raspberrypi/linux/issues/2937

Signed-off-by: Phil Elwell <phil at raspberrypi.com>

(cherry picked from commit 44c11fa2063f00994cbce6708097f521f0b2c493 rpi-5.4.y)
Signed-off-by: Juerg Haefliger <juergh at canonical.com>
---
 drivers/net/usb/lan78xx.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index ad93e7f28dde..dcd68781e730 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -1181,6 +1181,9 @@ static int lan78xx_link_reset(struct lan78xx_net *dev)
 	if (unlikely(ret < 0))
 		return -EIO;
 
+	/* Acknowledge any pending PHY interrupt, lest it be the last */
+	phy_read(phydev, LAN88XX_INT_STS);
+
 	phy_read_status(phydev);
 
 	if (!phydev->link && dev->link_on) {
-- 
2.25.1




More information about the kernel-team mailing list