From: Michal Simek Date: Sat, 13 Feb 2016 09:31:32 +0000 (+0100) Subject: net: phy: realtek: Use generic genphy_parse_link() for RTL8211E X-Git-Tag: v2016.03-rc3~61 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=6a10bc5be8b809d43af7ddb66c45eeff7e622da1;p=oweals%2Fu-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 Signed-off-by: Michal Simek --- 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, };