diff options
author | Oleksij Rempel <o.rempel@pengutronix.de> | 2023-02-22 08:50:43 +0300 |
---|---|---|
committer | Paolo Abeni <pabeni@redhat.com> | 2023-02-23 15:43:23 +0300 |
commit | 186b1da76b7271d65b48af5abae10a53d679c776 (patch) | |
tree | c31284f4c5898aaa49cd14b16583b1cc6b2962fd | |
parent | 3eeca4e199cee2066c65b872391cecee5cbbbb81 (diff) | |
download | linux-186b1da76b7271d65b48af5abae10a53d679c776.tar.xz |
net: phy: c45: genphy_c45_ethtool_set_eee: validate EEE link modes
Currently, it is possible to let some PHYs to advertise not supported
EEE link modes. So, validate them before overwriting existing
configuration.
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-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 { |