[PATCH v2] net: phy: wait for link OK after successfull autonegotiation

Anton Bondarenko anton.bondarenko.sama at gmail.com
Wed Nov 4 13:23:04 PST 2015


It may take some time for PHY to indicate link OK status after
autonegotiation completed. This change addresses this case
and prevent network commands fails due to the delay.

Signed-off-by: Anton Bondarenko <anton.bondarenko.sama at gmail.com>
---
 drivers/net/phy/phy.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 2b3c5e2..25c999c 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -502,13 +502,16 @@ int phy_wait_aneg_done(struct phy_device *phydev)
 		return 0;
 
 	while (!is_timeout(start, PHY_AN_TIMEOUT * SECOND)) {
-		if (phy_aneg_done(phydev) > 0) {
-			phydev->link = 1;
-			return 0;
-		}
+		if (phy_aneg_done(phydev) > 0)
+			break;
 	}
 
-	phydev->link = 0;
+	do {
+		genphy_update_link(phydev);
+		if (phydev->link == 1)
+			return 0;
+	} while (!is_timeout(start, PHY_AN_TIMEOUT * SECOND));
+
 	return -ETIMEDOUT;
 }
 
-- 
2.6.2




More information about the barebox mailing list