diff options
-rw-r--r-- | drivers/net/phy/phy-c45.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/net/phy/phy-c45.c b/drivers/net/phy/phy-c45.c index 8717c122e2f3..3813b86689d0 100644 --- a/drivers/net/phy/phy-c45.c +++ b/drivers/net/phy/phy-c45.c @@ -1438,12 +1438,23 @@ int genphy_c45_ethtool_set_eee(struct phy_device *phydev, int ret; if (data->eee_enabled) { - if (data->advertised) + if (data->advertised) { + __ETHTOOL_DECLARE_LINK_MODE_MASK(adv); + + ethtool_convert_legacy_u32_to_link_mode(adv, + data->advertised); + linkmode_andnot(adv, adv, phydev->supported_eee); + if (!linkmode_empty(adv)) { + phydev_warn(phydev, "At least some EEE link modes are not supported.\n"); + return -EINVAL; + } + ethtool_convert_legacy_u32_to_link_mode(phydev->advertising_eee, data->advertised); - else + } else { linkmode_copy(phydev->advertising_eee, phydev->supported_eee); + } phydev->eee_enabled = true; } else { |