diff mbox series

[net-next] net: phy: don't double-read link status register if link is up

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

Commit Message

Heiner Kallweit Feb. 7, 2019, 7:22 p.m. UTC
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(-)

Comments

David Miller Feb. 9, 2019, 7:02 a.m. UTC | #1
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 mbox series

Patch

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 */