net: phy: realtek: Use generic genphy_parse_link() for RTL8211E
authorMichal Simek <monstr@monstr.eu>
Sat, 13 Feb 2016 09:31:32 +0000 (10:31 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 22 Feb 2016 15:37:50 +0000 (16:37 +0100)
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>
drivers/net/phy/realtek.c

index bba48da4099fda91558008d77e19bf373cfc7341..259a87fcc59ed4bd29c7c96cfc88e865ab975473 100644 (file)
@@ -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,
 };