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 --- 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