Message ID | fd5559ed-6843-9ce5-fbb2-d9ffa9eb92e9@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net: phy: don't double-read link status register if link is up | expand |
From: Heiner Kallweit <hkallweit1@gmail.com> Date: Thu, 7 Feb 2019 20:22:20 +0100 > The link status register latches link-down events. Therefore, if link > is reported as being up, there's no need for a second read. > > Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Looks good. Applied, thanks.
diff --git a/drivers/net/phy/phy-c45.c b/drivers/net/phy/phy-c45.c index d429c6a3e..19334fe5f 100644 --- a/drivers/net/phy/phy-c45.c +++ b/drivers/net/phy/phy-c45.c @@ -147,6 +147,8 @@ int genphy_c45_read_link(struct phy_device *phydev) val = phy_read_mmd(phydev, devad, MDIO_STAT1); if (val < 0) return val; + else if (val & MDIO_STAT1_LSTATUS) + continue; } val = phy_read_mmd(phydev, devad, MDIO_STAT1); diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index d490cd2a8..9369e1323 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -1735,8 +1735,12 @@ int genphy_update_link(struct phy_device *phydev) */ if (!phy_polling_mode(phydev)) { status = phy_read(phydev, MII_BMSR); - if (status < 0) + if (status < 0) { return status; + } else if (status & BMSR_LSTATUS) { + phydev->link = 1; + return 0; + } } /* Read link and autonegotiation status */
The link status register latches link-down events. Therefore, if link is reported as being up, there's no need for a second read. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- drivers/net/phy/phy-c45.c | 2 ++ drivers/net/phy/phy_device.c | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-)