net: stmmac: Fix MAC WoL not working if PHY does not support WoL
[ Upstream commit576f9eacc6
] Both get and set WoL will check device_can_wakeup(), if MAC supports PMT, it will set device wakeup capability. After commit1d8e5b0f3f
("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. For STMMAC now driver checks MAC's WoL capability if MAC supports PMT, if not support, driver will check PHY's WoL capability. Fixes:1d8e5b0f3f
("net: stmmac: Support WOL with phy") Reviewed-by: Jisheng Zhang <Jisheng.Zhang@synaptics.com> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
95cfa6c030
commit
bf5c8f984f
@ -1052,7 +1052,6 @@ static void stmmac_check_pcs_mode(struct stmmac_priv *priv)
|
|||||||
*/
|
*/
|
||||||
static int stmmac_init_phy(struct net_device *dev)
|
static int stmmac_init_phy(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
|
|
||||||
struct stmmac_priv *priv = netdev_priv(dev);
|
struct stmmac_priv *priv = netdev_priv(dev);
|
||||||
struct device_node *node;
|
struct device_node *node;
|
||||||
int ret;
|
int ret;
|
||||||
@ -1078,8 +1077,12 @@ static int stmmac_init_phy(struct net_device *dev)
|
|||||||
ret = phylink_connect_phy(priv->phylink, phydev);
|
ret = phylink_connect_phy(priv->phylink, phydev);
|
||||||
}
|
}
|
||||||
|
|
||||||
phylink_ethtool_get_wol(priv->phylink, &wol);
|
if (!priv->plat->pmt) {
|
||||||
device_set_wakeup_capable(priv->device, !!wol.supported);
|
struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
|
||||||
|
|
||||||
|
phylink_ethtool_get_wol(priv->phylink, &wol);
|
||||||
|
device_set_wakeup_capable(priv->device, !!wol.supported);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user