@@ -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,12 @@ 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);
+ if (!linkmode_equal(phydev->advertising_eee, adv))
+ NL_SET_ERR_MSG(data->extack,
+ "Requested EEE advertisement includes disabled modes\n");
} else if (linkmode_empty(phydev->advertising_eee)) {
phy_advertise_eee_all(phydev);
}
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 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 silently removed from the user spaces provided EEE advertisement. Add a hint to the user so that it is done not that silently any longer. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- v2: - silently filter out disabled EEE modes - add extack user hint if requested EEE advertisement includes disabled modes --- drivers/net/phy/phy-c45.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)