Message ID | 20210407104404.5781-1-qiangqing.zhang@nxp.com |
---|---|
State | New |
Headers | show |
Series | [net] net: stmmac: fix MAC WoL unwork if PHY doesn't support WoL | expand |
Hi Andrew, > -----Original Message----- > From: Andrew Lunn <andrew@lunn.ch> > Sent: 2021年4月7日 20:35 > To: Joakim Zhang <qiangqing.zhang@nxp.com> > Cc: peppe.cavallaro@st.com; alexandre.torgue@st.com; > joabreu@synopsys.com; davem@davemloft.net; kuba@kernel.org; > f.fainelli@gmail.com; netdev@vger.kernel.org; dl-linux-imx > <linux-imx@nxp.com>; Jisheng.Zhang@synaptics.com > Subject: Re: [PATCH net] net: stmmac: fix MAC WoL unwork if PHY doesn't > support WoL > > 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.zhang@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. Yes, they should combine MAC and PHY WoL capabilities, rather than check pmt or phy. I will improve and repost it. Best Regards, Joakim Zhang > Andrew
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); return ret; }
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.zhang@nxp.com> --- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)