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

Kelsey Skunberg kelsey.skunberg at canonical.com
Mon Jan 4 17:27:20 UTC 2021


On 2020-12-16 13:26:57 , 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: Kelsey Skunberg <kelsey.skunberg 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
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team



More information about the kernel-team mailing list