Message ID | fbffff97-7ef8-9e09-4ee8-b8af7eb65cd2@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | net: phy: improve genphy_c45_read_lpa | expand |
On Sun, Mar 31, 2019 at 07:54:07PM +0200, Heiner Kallweit wrote: > The link partner advertisement registers are not guaranteed to contain > valid values if autoneg is incomplete. Therefore, if > MDIO_AN_STAT1_COMPLETE isn't set, let's clear all link partner > capability bits. This also avoids unnecessary register reads if link > is down and phylib is in polling mode. > > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
diff --git a/drivers/net/phy/phy-c45.c b/drivers/net/phy/phy-c45.c index 666fbb0ee..05c3e87ff 100644 --- a/drivers/net/phy/phy-c45.c +++ b/drivers/net/phy/phy-c45.c @@ -266,6 +266,17 @@ int genphy_c45_read_lpa(struct phy_device *phydev) if (val < 0) return val; + if (!(val & MDIO_AN_STAT1_COMPLETE)) { + linkmode_clear_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, + phydev->lp_advertising); + mii_10gbt_stat_mod_linkmode_lpa_t(phydev->lp_advertising, 0); + mii_adv_mod_linkmode_adv_t(phydev->lp_advertising, 0); + phydev->pause = 0; + phydev->asym_pause = 0; + + return 0; + } + linkmode_mod_bit(ETHTOOL_LINK_MODE_Autoneg_BIT, phydev->lp_advertising, val & MDIO_AN_STAT1_LPABLE);
The link partner advertisement registers are not guaranteed to contain valid values if autoneg is incomplete. Therefore, if MDIO_AN_STAT1_COMPLETE isn't set, let's clear all link partner capability bits. This also avoids unnecessary register reads if link is down and phylib is in polling mode. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- drivers/net/phy/phy-c45.c | 11 +++++++++++ 1 file changed, 11 insertions(+)