ACK: [SRU][G/raspi][F/raspi][PATCH] net: lan78xx: Ack pending PHY ints when resetting
Kleber Souza
kleber.souza at canonical.com
Mon Jan 4 17:10:06 UTC 2021
On 16.12.20 13:26, Juerg Haefliger wrote:
> 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>
Acked-by: Kleber Sacilotto de Souza <kleber.souza 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) {
>
More information about the kernel-team
mailing list