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