From: Michal Simek <monstr@monstr.eu>
Date: Sat, 13 Feb 2016 09:31:32 +0000 (+0100)
Subject: net: phy: realtek: Use generic genphy_parse_link() for RTL8211E
X-Git-Tag: v2025.01-rc5-pxa1908~10215
X-Git-Url: http://git.dujemihanovic.xyz/img/static/html/index.html?a=commitdiff_plain;h=6a10bc5be8b809d43af7ddb66c45eeff7e622da1;p=u-boot.git

net: phy: realtek: Use generic genphy_parse_link() for RTL8211E

The problem with current implementation is that SPDDONE bit is 1
but link bit is zero. That's why phydev->link is setup to 0
which ending up in driver failure that link is not up.

Log:
Zynq> dhcp
ethernet@e000b000 Waiting for PHY auto negotiation to complete.......
done
ethernet@e000b000: No link.

There is at least 1ms delay between spddone bit and link up.

Use genphy_read_status() instead of realtek implemenation which is
working with page 11. Linux driver is also using generic implementation.

Signed-off-by: Michal Simek <monstr@monstr.eu>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
---

diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
index bba48da409..259a87fcc5 100644
--- a/drivers/net/phy/realtek.c
+++ b/drivers/net/phy/realtek.c
@@ -203,6 +203,14 @@ static int rtl8211x_startup(struct phy_device *phydev)
 	return 0;
 }
 
+static int rtl8211e_startup(struct phy_device *phydev)
+{
+	genphy_update_link(phydev);
+	genphy_parse_link(phydev);
+
+	return 0;
+}
+
 static int rtl8211f_startup(struct phy_device *phydev)
 {
 	/* Read the Status (2x to make sure link is right) */
@@ -230,7 +238,7 @@ static struct phy_driver RTL8211E_driver = {
 	.mask = 0xffffff,
 	.features = PHY_GBIT_FEATURES,
 	.config = &rtl8211x_config,
-	.startup = &rtl8211x_startup,
+	.startup = &rtl8211e_startup,
 	.shutdown = &genphy_shutdown,
 };