net: phy: c45: improve handling of disabled EEE modes in generic ethtool functions
authorHeiner Kallweit <hkallweit1@gmail.com>
Wed, 12 Feb 2025 20:01:42 +0000 (21:01 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 15 Feb 2025 03:46:12 +0000 (19:46 -0800)
Currently disabled EEE modes are shown as supported in ethtool.
Change this by filtering them out when populating data->supported
in genphy_c45_ethtool_get_eee.
Disabled EEE modes are silently filtered out by genphy_c45_write_eee_adv.
This is planned to be removed, therefore ensure in
genphy_c45_ethtool_set_eee that disabled EEE modes are removed from the
user space provided EEE advertisement. For now keep the current behavior
to do this silently.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://patch.msgid.link/5187c86d-9a5a-482c-974f-cc103ce9738c@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/phy-c45.c

index 468d246113a4b41d49701aa27db1ffc688cc8aed..dedbdcab83a59f28f41f616baa350c7645f5e839 100644 (file)
@@ -1525,8 +1525,8 @@ int genphy_c45_ethtool_get_eee(struct phy_device *phydev,
                return ret;
 
        data->eee_active = phydev->eee_active;
-       linkmode_copy(data->supported, phydev->supported_eee);
-
+       linkmode_andnot(data->supported, phydev->supported_eee,
+                       phydev->eee_disabled_modes);
        return 0;
 }
 EXPORT_SYMBOL(genphy_c45_ethtool_get_eee);
@@ -1559,7 +1559,9 @@ int genphy_c45_ethtool_set_eee(struct phy_device *phydev,
                                phydev_warn(phydev, "At least some EEE link modes are not supported.\n");
                                return -EINVAL;
                        }
-                       linkmode_copy(phydev->advertising_eee, adv);
+
+                       linkmode_andnot(phydev->advertising_eee, adv,
+                                       phydev->eee_disabled_modes);
                } else if (linkmode_empty(phydev->advertising_eee)) {
                        phy_advertise_eee_all(phydev);
                }