Thread (5 messages) 5 messages, 1 author, 2026-01-23
STALE144d

[RFC PATCH 2/4] net: lan78xx: Implement FIFO stall recovery via lite reset

From: Oleksij Rempel <o.rempel@pengutronix.de>
Date: 2026-01-23 09:07:50
Also in: lkml
Subsystem: networking drivers, the rest, usb lan78xx ethernet driver, usb networking drivers · Maintainers: Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds, Thangaraj Samynathan, Rengarajan Sundararajan

Implement the recovery logic for the devlink FIFO health reporter.

The recovery callback triggers a full hardware Lite Reset using
lan78xx_reset(). This is a fast, reliable way to restore traffic in
unattended embedded deployments when a FIFO stall is detected.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
---
 drivers/net/usb/lan78xx.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index 221be42e06f4..9dadca4101bc 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -4984,8 +4984,18 @@ static int lan78xx_internal_err_dump(struct devlink_health_reporter *reporter,
 				 ARRAY_SIZE(lan78xx_err_regs));
 }
 
+static int lan78xx_fifo_recover(struct devlink_health_reporter *reporter,
+				void *priv_ctx, struct netlink_ext_ack *extack)
+{
+	struct lan78xx_net *dev = devlink_health_reporter_priv(reporter);
+
+	netdev_warn(dev->net, "Recovering from FIFO stall via Lite Reset\n");
+	return lan78xx_reset(dev);
+}
+
 static const struct devlink_health_reporter_ops lan78xx_fifo_ops = {
 	.name = "fifo",
+	.recover = lan78xx_fifo_recover,
 	.dump = lan78xx_fifo_dump,
 };
 
-- 
2.47.3
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help