]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
r8169: fix issue caused by buggy BIOS on certain boards with RTL8168d
authorHeiner Kallweit <hkallweit1@gmail.com>
Sat, 30 Mar 2024 11:49:02 +0000 (12:49 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 3 Apr 2024 01:04:29 +0000 (18:04 -0700)
On some boards with this chip version the BIOS is buggy and misses
to reset the PHY page selector. This results in the PHY ID read
accessing registers on a different page, returning a more or
less random value. Fix this by resetting the page selector first.

Fixes: f1e911d5d0df ("r8169: add basic phylib support")
Cc: stable@vger.kernel.org
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/64f2055e-98b8-45ec-8568-665e3d54d4e6@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/realtek/r8169_main.c

index 4ac444eb269ff9423b793fbf6164335a68761826..6f1e6f386b7ba7277bc211765b8ef49d9fcd6750 100644 (file)
@@ -5164,6 +5164,15 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
        struct mii_bus *new_bus;
        int ret;
 
+       /* On some boards with this chip version the BIOS is buggy and misses
+        * to reset the PHY page selector. This results in the PHY ID read
+        * accessing registers on a different page, returning a more or
+        * less random value. Fix this by resetting the page selector first.
+        */
+       if (tp->mac_version == RTL_GIGA_MAC_VER_25 ||
+           tp->mac_version == RTL_GIGA_MAC_VER_26)
+               r8169_mdio_write(tp, 0x1f, 0);
+
        new_bus = devm_mdiobus_alloc(&pdev->dev);
        if (!new_bus)
                return -ENOMEM;