[PATCH] net: phy: fix autoneg timeout

Recently, genphy_update_link() has been changed to use a 50ms polling interval instead of the previous 1ms. However, the timeout to give up waiting for a link remained unchanged, calculating the iterations.
As a result, PHY_ANEG_TIMEOUT now specifies "multiples of 50ms" instead of just to be a number of milliseconds.
Fix this by dividing PHY_ANEG_TIMEOUT by 50 in this loop. This gets us back to a 4 seconds timeout for the default value (instead of 200s).
Fixes: net: phy: Increase link up delay in genphy_update_link() ("27c3f70f3b50") Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com ---
This should be applied before the next release as it fixes a regression of v2020.01!
drivers/net/phy/phy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 80a7664e49..5cf9c165b6 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -244,7 +244,7 @@ int genphy_update_link(struct phy_device *phydev) /* * Timeout reached ? */ - if (i > PHY_ANEG_TIMEOUT) { + if (i > (PHY_ANEG_TIMEOUT / 50)) { printf(" TIMEOUT !\n"); phydev->link = 0; return -ETIMEDOUT;

Hi Simon,
On 04.03.20 21:12, Simon Goldschmidt wrote:
Recently, genphy_update_link() has been changed to use a 50ms polling interval instead of the previous 1ms. However, the timeout to give up waiting for a link remained unchanged, calculating the iterations.
As a result, PHY_ANEG_TIMEOUT now specifies "multiples of 50ms" instead of just to be a number of milliseconds.
Fix this by dividing PHY_ANEG_TIMEOUT by 50 in this loop. This gets us back to a 4 seconds timeout for the default value (instead of 200s).
Fixes: net: phy: Increase link up delay in genphy_update_link() ("27c3f70f3b50") Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
This should be applied before the next release as it fixes a regression of v2020.01!
drivers/net/phy/phy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 80a7664e49..5cf9c165b6 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -244,7 +244,7 @@ int genphy_update_link(struct phy_device *phydev) /* * Timeout reached ? */
if (i > PHY_ANEG_TIMEOUT) {
if (i > (PHY_ANEG_TIMEOUT / 50)) { printf(" TIMEOUT !\n"); phydev->link = 0; return -ETIMEDOUT;
A similar fix from Andre for this is queued for this for quite some time now:
https://patchwork.ozlabs.org/patch/1217524/
Joe or Tom, could you please take this one?
Thanks, Stefan

On Thu, Mar 5, 2020 at 5:40 AM Stefan Roese sr@denx.de wrote:
Hi Simon,
On 04.03.20 21:12, Simon Goldschmidt wrote:
Recently, genphy_update_link() has been changed to use a 50ms polling interval instead of the previous 1ms. However, the timeout to give up waiting for a link remained unchanged, calculating the iterations.
As a result, PHY_ANEG_TIMEOUT now specifies "multiples of 50ms" instead of just to be a number of milliseconds.
Fix this by dividing PHY_ANEG_TIMEOUT by 50 in this loop. This gets us back to a 4 seconds timeout for the default value (instead of 200s).
Fixes: net: phy: Increase link up delay in genphy_update_link() ("27c3f70f3b50") Signed-off-by: Simon Goldschmidt simon.k.r.goldschmidt@gmail.com
This should be applied before the next release as it fixes a regression of v2020.01!
drivers/net/phy/phy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 80a7664e49..5cf9c165b6 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -244,7 +244,7 @@ int genphy_update_link(struct phy_device *phydev) /* * Timeout reached ? */
if (i > PHY_ANEG_TIMEOUT) {
if (i > (PHY_ANEG_TIMEOUT / 50)) { printf(" TIMEOUT !\n"); phydev->link = 0; return -ETIMEDOUT;
A similar fix from Andre for this is queued for this for quite some time now:
Right. I thought I remembered a patch but hadn't found it...
I'll drop this one then.
Regards, Simon
Joe or Tom, could you please take this one?
Thanks, Stefan
participants (2)
-
Simon Goldschmidt
-
Stefan Roese