[1/1] lan78xx: Don't reset the interface on open

Message ID 1539271111-24862-2-git-send-email-paolo.pisati@canonical.com
State New
Headers show
Series
  • Fix a regression in lan78xx driver
Related show

Commit Message

Paolo Pisati Oct. 11, 2018, 3:18 p.m.
From: Phil Elwell <phil@raspberrypi.org>

BugLink: https://bugs.launchpad.net/bugs/1797406

Commit 92571a1aae40 ("lan78xx: Connect phy early") moves the PHY
initialisation into lan78xx_probe, but lan78xx_open subsequently calls
lan78xx_reset. As well as forcing a second round of link negotiation,
this reset frequently prevents the phy interrupt from being generated
(even though the link is up), rendering the interface unusable.

Fix this issue by removing the lan78xx_reset call from lan78xx_open.

Fixes: 92571a1aae40 ("lan78xx: Connect phy early")
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 47b998653fea4ef69e3e89574956386f262bccca)
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
---
 drivers/net/usb/lan78xx.c | 4 ----
 1 file changed, 4 deletions(-)

Comments

Colin King Oct. 11, 2018, 3:24 p.m. | #1
On 11/10/18 16:18, Paolo Pisati wrote:
> From: Phil Elwell <phil@raspberrypi.org>
> 
> BugLink: https://bugs.launchpad.net/bugs/1797406
> 
> Commit 92571a1aae40 ("lan78xx: Connect phy early") moves the PHY
> initialisation into lan78xx_probe, but lan78xx_open subsequently calls
> lan78xx_reset. As well as forcing a second round of link negotiation,
> this reset frequently prevents the phy interrupt from being generated
> (even though the link is up), rendering the interface unusable.
> 
> Fix this issue by removing the lan78xx_reset call from lan78xx_open.
> 
> Fixes: 92571a1aae40 ("lan78xx: Connect phy early")
> Signed-off-by: Phil Elwell <phil@raspberrypi.org>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> (cherry picked from commit 47b998653fea4ef69e3e89574956386f262bccca)
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
> ---
>  drivers/net/usb/lan78xx.c | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
> index 88f2c7cde71d..77a186befd07 100644
> --- a/drivers/net/usb/lan78xx.c
> +++ b/drivers/net/usb/lan78xx.c
> @@ -2562,10 +2562,6 @@ static int lan78xx_open(struct net_device *net)
>  	if (ret < 0)
>  		goto out;
>  
> -	ret = lan78xx_reset(dev);
> -	if (ret < 0)
> -		goto done;
> -
>  	phy_start(net->phydev);
>  
>  	netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
> 

Clean upstream cherry pick. Seems sane to me.

Acked-by: Colin Ian King <colin.king@canonical.com>
Stefan Bader Oct. 12, 2018, 7:29 a.m. | #2
On 11.10.2018 17:18, Paolo Pisati wrote:
> From: Phil Elwell <phil@raspberrypi.org>
> 
> BugLink: https://bugs.launchpad.net/bugs/1797406
> 
> Commit 92571a1aae40 ("lan78xx: Connect phy early") moves the PHY
> initialisation into lan78xx_probe, but lan78xx_open subsequently calls
> lan78xx_reset. As well as forcing a second round of link negotiation,
> this reset frequently prevents the phy interrupt from being generated
> (even though the link is up), rendering the interface unusable.
> 
> Fix this issue by removing the lan78xx_reset call from lan78xx_open.
> 
> Fixes: 92571a1aae40 ("lan78xx: Connect phy early")
> Signed-off-by: Phil Elwell <phil@raspberrypi.org>
> Signed-off-by: David S. Miller <davem@davemloft.net>
> (cherry picked from commit 47b998653fea4ef69e3e89574956386f262bccca)
> Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
> ---
>  drivers/net/usb/lan78xx.c | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
> index 88f2c7cde71d..77a186befd07 100644
> --- a/drivers/net/usb/lan78xx.c
> +++ b/drivers/net/usb/lan78xx.c
> @@ -2562,10 +2562,6 @@ static int lan78xx_open(struct net_device *net)
>  	if (ret < 0)
>  		goto out;
>  
> -	ret = lan78xx_reset(dev);
> -	if (ret < 0)
> -		goto done;
> -
>  	phy_start(net->phydev);
>  
>  	netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
>

Patch

diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index 88f2c7cde71d..77a186befd07 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -2562,10 +2562,6 @@  static int lan78xx_open(struct net_device *net)
 	if (ret < 0)
 		goto out;
 
-	ret = lan78xx_reset(dev);
-	if (ret < 0)
-		goto done;
-
 	phy_start(net->phydev);
 
 	netif_dbg(dev, ifup, dev->net, "phy initialised successfully");