diff mbox series

[net] net: phy: skip disabling interrupt when WOL is enabled in shutdown

Message ID 20210706090209.1897027-1-pei.lee.ling@intel.com
State New
Headers show
Series [net] net: phy: skip disabling interrupt when WOL is enabled in shutdown | expand

Commit Message

Ling Pei Lee July 6, 2021, 9:02 a.m. UTC
From: Mohammad Athari Bin Ismail <mohammad.athari.ismail@intel.com>

PHY WOL requires WOL interrupt event to trigger the WOL signal
in order to wake up the system. Hence, the PHY driver should not
disable the interrupt during shutdown if PHY WOL is enabled.

Fixes: e2f016cf7751 ("net: phy: add a shutdown procedure")
Signed-off-by: Mohammad Athari Bin Ismail <mohammad.athari.ismail@intel.com>
Signed-off-by: Ling PeiLee <pei.lee.ling@intel.com>
---
 drivers/net/phy/phy_device.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Mohammad Athari Bin Ismail July 7, 2021, 12:36 a.m. UTC | #1
> -----Original Message-----
> From: Andrew Lunn <andrew@lunn.ch>
> Sent: Tuesday, July 6, 2021 9:14 PM
> To: Ling, Pei Lee <pei.lee.ling@intel.com>
> Cc: Heiner Kallweit <hkallweit1@gmail.com>; Russell King
> <linux@armlinux.org.uk>; davem@davemloft.net; Jakub Kicinski
> <kuba@kernel.org>; Ioana Ciornei <ioana.ciornei@nxp.com>;
> netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Voon, Weifeng
> <weifeng.voon@intel.com>; vee.khee.wong@linux.intel.com; Wong, Vee Khee
> <vee.khee.wong@intel.com>; Ismail, Mohammad Athari
> <mohammad.athari.ismail@intel.com>
> Subject: Re: [PATCH net] net: phy: skip disabling interrupt when WOL is enabled
> in shutdown
> 
> On Tue, Jul 06, 2021 at 05:02:09PM +0800, Ling Pei Lee wrote:
> > From: Mohammad Athari Bin Ismail <mohammad.athari.ismail@intel.com>
> >
> > PHY WOL requires WOL interrupt event to trigger the WOL signal in
> > order to wake up the system. Hence, the PHY driver should not disable
> > the interrupt during shutdown if PHY WOL is enabled.
> 
> If the device is being used to wake the system up, why is it being shutdown?
> 

Hi Andrew,

When the platform goes to S5 state (ex: shutdown -h now), regardless PHY WOL is enabled or not, phy_shutdown() is called. So, for the platform that support WOL from S5, we need to make sure the PHY still can trigger WOL event. Disabling the interrupt through phy_disable_interrupts() in phy_shutdown() will disable WOL interrupt as well and cause the PHY WOL not able to trigger.

-Athari-

> 	Andrew
diff mbox series

Patch

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 1539ea021ac0..f4b88f613dc1 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -2994,9 +2994,13 @@  static int phy_remove(struct device *dev)
 
 static void phy_shutdown(struct device *dev)
 {
+	struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
 	struct phy_device *phydev = to_phy_device(dev);
 
-	phy_disable_interrupts(phydev);
+	/* If the device has WOL enabled, don't disable interrupts. */
+	phy_ethtool_get_wol(phydev, &wol);
+	if (!wol.wolopts)
+		phy_disable_interrupts(phydev);
 }
 
 /**