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

From: Florian Fainelli
Date: Tue Jul 06 2021 - 22:51:37 EST




On 7/6/2021 5:57 PM, Andrew Lunn wrote:
On Wed, Jul 07, 2021 at 12:36:30AM +0000, Ismail, Mohammad Athari wrote:


-----Original Message-----
From: Andrew Lunn <andrew@xxxxxxx>
Sent: Tuesday, July 6, 2021 9:14 PM
To: Ling, Pei Lee <pei.lee.ling@xxxxxxxxx>
Cc: Heiner Kallweit <hkallweit1@xxxxxxxxx>; Russell King
<linux@xxxxxxxxxxxxxxx>; davem@xxxxxxxxxxxxx; Jakub Kicinski
<kuba@xxxxxxxxxx>; Ioana Ciornei <ioana.ciornei@xxxxxxx>;
netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Voon, Weifeng
<weifeng.voon@xxxxxxxxx>; vee.khee.wong@xxxxxxxxxxxxxxx; Wong, Vee Khee
<vee.khee.wong@xxxxxxxxx>; Ismail, Mohammad Athari
<mohammad.athari.ismail@xxxxxxxxx>
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@xxxxxxxxx>

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.

This sounds like a firmware problem. If linux is shutdown, linux is
not controlling the hardware, the firmware is. So the firmware should
probably be configuring the PHY after Linux powers off.

There are platforms supporting S5 shutdown that don't run firmware and would also expect to be able to be woken-up from an Ethernet PHY/Wake-on-LAN scheme.

The problem that is being addressed here is that even if your Ethernet driver was playing through properly and attempting not to disable the Ethernet PHY in suspend or shutdown callback, that decision would be overridden by phy_shutdown() when the MDIO bus' shutdown is called and that breaks up that wake-up mode.


If Linux is suspended, then Linux is still controlling the hardware,
and it will not shutdown the PHY.


--
Florian