]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
net: bcmgenet: Properly overlay PHY and MAC Wake-on-LAN capabilities
authorFlorian Fainelli <florian.fainelli@broadcom.com>
Tue, 6 Aug 2024 17:56:59 +0000 (10:56 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 8 Aug 2024 15:29:29 +0000 (08:29 -0700)
Some Wake-on-LAN modes such as WAKE_FILTER may only be supported by the MAC,
while others might be only supported by the PHY. Make sure that the .get_wol()
returns the union of both rather than only that of the PHY if the PHY supports
Wake-on-LAN.

Fixes: 7e400ff35cbe ("net: bcmgenet: Add support for PHY-based Wake-on-LAN")
Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://patch.msgid.link/20240806175659.3232204-1-florian.fainelli@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/genet/bcmgenet_wol.c

index 1248792d7fd4d2f98847889c499277a92229d785..0715ea5bf13ed9df75eeb4f50e99ada8cef631e9 100644 (file)
@@ -42,19 +42,15 @@ void bcmgenet_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
        struct bcmgenet_priv *priv = netdev_priv(dev);
        struct device *kdev = &priv->pdev->dev;
 
-       if (dev->phydev) {
+       if (dev->phydev)
                phy_ethtool_get_wol(dev->phydev, wol);
-               if (wol->supported)
-                       return;
-       }
 
-       if (!device_can_wakeup(kdev)) {
-               wol->supported = 0;
-               wol->wolopts = 0;
+       /* MAC is not wake-up capable, return what the PHY does */
+       if (!device_can_wakeup(kdev))
                return;
-       }
 
-       wol->supported = WAKE_MAGIC | WAKE_MAGICSECURE | WAKE_FILTER;
+       /* Overlay MAC capabilities with that of the PHY queried before */
+       wol->supported |= WAKE_MAGIC | WAKE_MAGICSECURE | WAKE_FILTER;
        wol->wolopts = priv->wolopts;
        memset(wol->sopass, 0, sizeof(wol->sopass));