Commit b6163f19 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller

net: phy: improve genphy_read_status

This patch improves few aspects of genphy_read_status():

- Don't initialize lpagb, it's not needed.

- Move initializing phydev->speed et al before the if clause.

- In auto-neg case, skip populating lp_advertising if we
  don't have a link. This avoids quite some unnecessary
  MDIO reads in case of phylib polling mode.
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9dfe6aa0
...@@ -1743,19 +1743,21 @@ EXPORT_SYMBOL(genphy_update_link); ...@@ -1743,19 +1743,21 @@ EXPORT_SYMBOL(genphy_update_link);
*/ */
int genphy_read_status(struct phy_device *phydev) int genphy_read_status(struct phy_device *phydev)
{ {
int adv; int adv, lpa, lpagb, err;
int err;
int lpa;
int lpagb = 0;
/* Update the link, but return if there was an error */ /* Update the link, but return if there was an error */
err = genphy_update_link(phydev); err = genphy_update_link(phydev);
if (err) if (err)
return err; return err;
phydev->speed = SPEED_UNKNOWN;
phydev->duplex = DUPLEX_UNKNOWN;
phydev->pause = 0;
phydev->asym_pause = 0;
linkmode_zero(phydev->lp_advertising); linkmode_zero(phydev->lp_advertising);
if (AUTONEG_ENABLE == phydev->autoneg) { if (phydev->autoneg == AUTONEG_ENABLE && phydev->link) {
if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT, if (linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Half_BIT,
phydev->supported) || phydev->supported) ||
linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT, linkmode_test_bit(ETHTOOL_LINK_MODE_1000baseT_Full_BIT,
...@@ -1785,14 +1787,8 @@ int genphy_read_status(struct phy_device *phydev) ...@@ -1785,14 +1787,8 @@ int genphy_read_status(struct phy_device *phydev)
return lpa; return lpa;
mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa); mii_lpa_mod_linkmode_lpa_t(phydev->lp_advertising, lpa);
phydev->speed = SPEED_UNKNOWN;
phydev->duplex = DUPLEX_UNKNOWN;
phydev->pause = 0;
phydev->asym_pause = 0;
phy_resolve_aneg_linkmode(phydev); phy_resolve_aneg_linkmode(phydev);
} else { } else if (phydev->autoneg == AUTONEG_DISABLE) {
int bmcr = phy_read(phydev, MII_BMCR); int bmcr = phy_read(phydev, MII_BMCR);
if (bmcr < 0) if (bmcr < 0)
...@@ -1809,9 +1805,6 @@ int genphy_read_status(struct phy_device *phydev) ...@@ -1809,9 +1805,6 @@ int genphy_read_status(struct phy_device *phydev)
phydev->speed = SPEED_100; phydev->speed = SPEED_100;
else else
phydev->speed = SPEED_10; phydev->speed = SPEED_10;
phydev->pause = 0;
phydev->asym_pause = 0;
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment