net: bcmgenet: properly disable password matching
bcmgenet_set_wol() correctly sets MPD_PW_EN when a password is specified
to match magic packets against, however, when we switch from a
password-matching to a matching without password we would leave this bit
turned on, and GENET would only match magic packets with passwords.
This can be reproduced using the following sequence:
ethtool -s eth0 wol g
ethtool -s eth0 wol s sopass 00:11:22:33:44:55
ethtool -s eth0 wol g
The simple fix is to clear the MPD_PWD_EN bit when WAKE_MAGICSECURE is
not set.
Fixes: c51de7f397
("net: bcmgenet: add Wake-on-LAN support code")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b0ab0afaeb
commit
386668a61f
|
@ -73,15 +73,17 @@ int bcmgenet_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
|
|||
if (wol->wolopts & ~(WAKE_MAGIC | WAKE_MAGICSECURE))
|
||||
return -EINVAL;
|
||||
|
||||
reg = bcmgenet_umac_readl(priv, UMAC_MPD_CTRL);
|
||||
if (wol->wolopts & WAKE_MAGICSECURE) {
|
||||
bcmgenet_umac_writel(priv, get_unaligned_be16(&wol->sopass[0]),
|
||||
UMAC_MPD_PW_MS);
|
||||
bcmgenet_umac_writel(priv, get_unaligned_be32(&wol->sopass[2]),
|
||||
UMAC_MPD_PW_LS);
|
||||
reg = bcmgenet_umac_readl(priv, UMAC_MPD_CTRL);
|
||||
reg |= MPD_PW_EN;
|
||||
bcmgenet_umac_writel(priv, reg, UMAC_MPD_CTRL);
|
||||
} else {
|
||||
reg &= ~MPD_PW_EN;
|
||||
}
|
||||
bcmgenet_umac_writel(priv, reg, UMAC_MPD_CTRL);
|
||||
|
||||
/* Flag the device and relevant IRQ as wakeup capable */
|
||||
if (wol->wolopts) {
|
||||
|
|
Loading…
Reference in a new issue