diff mbox series

[v2,RESEND] net: phy: call phy_disable_interrupts() in phy_attach_direct() instead

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

Commit Message

Yoshihiro Shimoda Sept. 9, 2020, 5:43 a.m. UTC
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(-)

Comments

David Miller Sept. 10, 2020, 7:57 p.m. UTC | #1
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 mbox series

Patch

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);