From: Stefan Chulski <stef...@marvell.com> Patch fix couple of link and speed detection resolution bugs: 1. Waiting for PHY real time link condition. 2. Replace PHYSTAT_SPDDONE with PHYSTAT_LINK in while loop, PHYSTAT_SPDDONE could be enabled before link status changed to enable. 3. Update link status after link resolution loop.
Signed-off-by: Stefan Chulski <stef...@marvell.com> Tested-by: sa_ip-sw-jenkins <sa_ip-sw-jenk...@marvell.com> Reviewed-by: Kostya Porotchkin <kos...@marvell.com> Reviewed-by: Yan Markman <ymark...@marvell.com> Reviewed-by: Marcin Wojtas <mar...@marvell.com> Signed-off-by: Stefan Roese <s...@denx.de> --- drivers/net/phy/marvell.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index 36e678755ae8..3bcb0033b391 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -659,12 +659,11 @@ static uint m88e2110_parse_status(struct phy_device *phydev) mii_reg = phy_read(phydev, 3, MIIM_88E2110_PHY_STATUS); - if ((mii_reg & MIIM_88E2110_PHYSTAT_LINK) && - !(mii_reg & MIIM_88E2110_PHYSTAT_SPDDONE)) { + if (!(mii_reg & MIIM_88E2110_PHYSTAT_LINK)) { int i = 0; puts("Waiting for PHY realtime link"); - while (!(mii_reg & MIIM_88E2110_PHYSTAT_SPDDONE)) { + while (!(mii_reg & MIIM_88E2110_PHYSTAT_LINK)) { /* Timeout reached ? */ if (i > PHY_AUTONEGOTIATE_TIMEOUT) { puts(" TIMEOUT !\n"); @@ -679,13 +678,13 @@ static uint m88e2110_parse_status(struct phy_device *phydev) } puts(" done\n"); mdelay(500); /* another 500 ms (results in faster booting) */ - } else { - if (mii_reg & MIIM_88E2110_PHYSTAT_LINK) - phydev->link = 1; - else - phydev->link = 0; } + if (mii_reg & MIIM_88E2110_PHYSTAT_LINK) + phydev->link = 1; + else + phydev->link = 0; + if (mii_reg & MIIM_88E2110_PHYSTAT_DUPLEX) phydev->duplex = DUPLEX_FULL; else -- 2.31.0