aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch b/target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch
new file mode 100644
index 0000000000..b0890c01cf
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.15/950-0500-net-phy-lan87xx-Allow-more-time-for-link-detect.patch
@@ -0,0 +1,38 @@
+From eb860f6a2dee9a4c94a7101c1d43194b95fdbc8d Mon Sep 17 00:00:00 2001
+From: Phil Elwell <phil@raspberrypi.com>
+Date: Wed, 22 Sep 2021 15:38:13 +0100
+Subject: [PATCH] net: phy: lan87xx: Allow more time for link detect
+
+With EDPWRDOWN set in idle, it must be cleared before checking for
+ENERGYON going high, indicating that a link is being established.
+The existing code allows 640ms for ENERGYON to go high, but on
+Raspberry Pis that appears not to be enough, causing link detection
+to fail.
+
+Increase the polling timeout to 1500ms - with a polling interval of
+10ms it shouldn't cause unnecessary delays.
+
+See: https://github.com/raspberrypi/linux/issues/4393
+
+Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+---
+ drivers/net/phy/smsc.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/phy/smsc.c
++++ b/drivers/net/phy/smsc.c
+@@ -228,12 +228,12 @@ static int lan87xx_read_status(struct ph
+ if (rc < 0)
+ return rc;
+
+- /* Wait max 640 ms to detect energy and the timeout is not
++ /* Wait max 1500 ms to detect energy and the timeout is not
+ * an actual error.
+ */
+ read_poll_timeout(phy_read, rc,
+ rc & MII_LAN83C185_ENERGYON || rc < 0,
+- 10000, 640000, true, phydev,
++ 10000, 1500000, true, phydev,
+ MII_LAN83C185_CTRL_STATUS);
+ if (rc < 0)
+ return rc;