On Wed, Apr 07, 2021 at 06:44:04PM +0800, Joakim Zhang wrote: > Both get and set WoL will check device_can_wakeup(), if MAC supports > PMT, it will set device wakeup capability. After commit 1d8e5b0f3f2c ("net: > stmmac: Support WOL with phy"), device wakeup capability will be > overwrite in stmmac_init_phy() according to phy's Wol feature. If phy > doesn't support WoL, then MAC will lose wakeup capability. To fix this > issue, only overwrite device wakeup capability when MAC doesn't support > PMT. > > Fixes: commit 1d8e5b0f3f2c ("net: stmmac: Support WOL with phy") > Signed-off-by: Joakim Zhang <qiangqing.zh...@nxp.com> > --- > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > index 208cae344ffa..f46d9c69168f 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > @@ -1103,7 +1103,9 @@ static int stmmac_init_phy(struct net_device *dev) > } > > phylink_ethtool_get_wol(priv->phylink, &wol); > - device_set_wakeup_capable(priv->device, !!wol.supported); > + > + if (!priv->plat->pmt) > + device_set_wakeup_capable(priv->device, !!wol.supported); It seems like a better fix would be to call stmmac_get_wol(), That should set wol taking into account both pmt and phy. But i would also say stmmac_get_wol() and stmmac_set_wol() are broken. They should combine capabilities, not be either pmt or phy.
Andrew