Message ID | 20210412233014.3301686-1-f.fainelli@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [stable,4.19] net: phy: broadcom: Only advertise EEE for supported modes | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Guessing tree name failed - patch did not apply |
On Mon, Apr 12, 2021 at 04:30:14PM -0700, Florian Fainelli wrote: >commit c056d480b40a68f2520ccc156c7fae672d69d57d upstream > >We should not be advertising EEE for modes that we do not support, >correct that oversight by looking at the PHY device supported linkmodes. > >Fixes: 99cec8a4dda2 ("net: phy: broadcom: Allow enabling or disabling of EEE") >Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> >Signed-off-by: David S. Miller <davem@davemloft.net> >Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Queued up this and the 4.14 backport, thanks!
diff --git a/drivers/net/phy/bcm-phy-lib.c b/drivers/net/phy/bcm-phy-lib.c index e10e7b54ec4b..7e5892597533 100644 --- a/drivers/net/phy/bcm-phy-lib.c +++ b/drivers/net/phy/bcm-phy-lib.c @@ -198,7 +198,7 @@ EXPORT_SYMBOL_GPL(bcm_phy_enable_apd); int bcm_phy_set_eee(struct phy_device *phydev, bool enable) { - int val; + int val, mask = 0; /* Enable EEE at PHY level */ val = phy_read_mmd(phydev, MDIO_MMD_AN, BRCM_CL45VEN_EEE_CONTROL); @@ -217,10 +217,15 @@ int bcm_phy_set_eee(struct phy_device *phydev, bool enable) if (val < 0) return val; + if (phydev->supported & SUPPORTED_1000baseT_Full) + mask |= MDIO_EEE_1000T; + if (phydev->supported & SUPPORTED_100baseT_Full) + mask |= MDIO_EEE_100TX; + if (enable) - val |= (MDIO_EEE_100TX | MDIO_EEE_1000T); + val |= mask; else - val &= ~(MDIO_EEE_100TX | MDIO_EEE_1000T); + val &= ~mask; phy_write_mmd(phydev, MDIO_MMD_AN, BCM_CL45VEN_EEE_ADV, (u32)val);