1 From 5d872c9f46bd2ea3524af3c2420a364a13667135 Mon Sep 17 00:00:00 2001
2 From: Heiner Kallweit <hkallweit1@gmail.com>
3 Date: Sat, 30 Mar 2024 12:49:02 +0100
4 Subject: r8169: fix issue caused by buggy BIOS on certain boards with RTL8168d
6 From: Heiner Kallweit <hkallweit1@gmail.com>
8 commit 5d872c9f46bd2ea3524af3c2420a364a13667135 upstream.
10 On some boards with this chip version the BIOS is buggy and misses
11 to reset the PHY page selector. This results in the PHY ID read
12 accessing registers on a different page, returning a more or
13 less random value. Fix this by resetting the page selector first.
15 Fixes: f1e911d5d0df ("r8169: add basic phylib support")
16 Cc: stable@vger.kernel.org
17 Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
18 Reviewed-by: Simon Horman <horms@kernel.org>
19 Link: https://lore.kernel.org/r/64f2055e-98b8-45ec-8568-665e3d54d4e6@gmail.com
20 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
21 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
23 drivers/net/ethernet/realtek/r8169_main.c | 9 +++++++++
24 1 file changed, 9 insertions(+)
26 --- a/drivers/net/ethernet/realtek/r8169_main.c
27 +++ b/drivers/net/ethernet/realtek/r8169_main.c
28 @@ -7303,6 +7303,15 @@ static int r8169_mdio_register(struct rt
29 struct mii_bus *new_bus;
32 + /* On some boards with this chip version the BIOS is buggy and misses
33 + * to reset the PHY page selector. This results in the PHY ID read
34 + * accessing registers on a different page, returning a more or
35 + * less random value. Fix this by resetting the page selector first.
37 + if (tp->mac_version == RTL_GIGA_MAC_VER_25 ||
38 + tp->mac_version == RTL_GIGA_MAC_VER_26)
39 + r8169_mdio_write(tp, 0x1f, 0);
41 new_bus = devm_mdiobus_alloc(&pdev->dev);