Message ID | 1599630194-3052-1-git-send-email-yoshihiro.shimoda.uh@renesas.com |
---|---|
State | Superseded |
Headers | show |
Series | [v2,RESEND] net: phy: call phy_disable_interrupts() in phy_attach_direct() instead | expand |
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Date: Wed, 9 Sep 2020 14:43:14 +0900 > Since the micrel phy driver calls phy_init_hw() as a workaround, > the commit 9886a4dbd2aa ("net: phy: call phy_disable_interrupts() > in phy_init_hw()") disables the interrupt unexpectedly. So, > call phy_disable_interrupts() in phy_attach_direct() instead. > Otherwise, the phy cannot link up after the ethernet cable was > disconnected. > > Note that other drivers (like at803x.c) also calls phy_init_hw(). > So, perhaps, the driver caused a similar issue too. > > Fixes: 9886a4dbd2aa ("net: phy: call phy_disable_interrupts() in phy_init_hw()") > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > --- > Changes from v1: > - Fix build failure. I used two PCs: PC 1) for testing, PC 2) for > submitting patches. I tested on the PC 1. But, after that, I wrote > a patch on the PC2 again, and it seemed I didn't do a compile... > Today, I got some emails from kernel test bot. So, I realized > I had submitted an awful patch. To avoid such failure, I'll use > one PC only from now on. > Applied and queued up for -stable, thanks.
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 8adfbad..b93b40c 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -1143,10 +1143,6 @@ int phy_init_hw(struct phy_device *phydev) if (ret < 0) return ret; - ret = phy_disable_interrupts(phydev); - if (ret) - return ret; - if (phydev->drv->config_init) ret = phydev->drv->config_init(phydev); @@ -1423,6 +1419,10 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, if (err) goto error; + err = phy_disable_interrupts(phydev); + if (err) + return err; + phy_resume(phydev); phy_led_triggers_register(phydev);
Since the micrel phy driver calls phy_init_hw() as a workaround, the commit 9886a4dbd2aa ("net: phy: call phy_disable_interrupts() in phy_init_hw()") disables the interrupt unexpectedly. So, call phy_disable_interrupts() in phy_attach_direct() instead. Otherwise, the phy cannot link up after the ethernet cable was disconnected. Note that other drivers (like at803x.c) also calls phy_init_hw(). So, perhaps, the driver caused a similar issue too. Fixes: 9886a4dbd2aa ("net: phy: call phy_disable_interrupts() in phy_init_hw()") Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> --- Changes from v1: - Fix build failure. I used two PCs: PC 1) for testing, PC 2) for submitting patches. I tested on the PC 1. But, after that, I wrote a patch on the PC2 again, and it seemed I didn't do a compile... Today, I got some emails from kernel test bot. So, I realized I had submitted an awful patch. To avoid such failure, I'll use one PC only from now on. drivers/net/phy/phy_device.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)