From: Anand Moon <linux.amoon@gmail.com>
To: Heiner Kallweit <hkallweit1@gmail.com>,
nic_swsd@realtek.com (maintainer:8169 10/100/1000 GIGABIT
ETHERNET DRIVER), Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Manivannan Sadhasivam <mani@kernel.org>,
Shawn Lin <shawn.lin@rock-chips.com>,
Hans Zhang <18255117159@163.com>,
Niklas Cassel <cassel@kernel.org>,
netdev@vger.kernel.org (open list:8169 10/100/1000 GIGABIT
ETHERNET DRIVER), linux-kernel@vger.kernel.org (open list)
Cc: Anand Moon <linux.amoon@gmail.com>,
Robin Murphy <robin.murphy@arm.com>,
Danilo Krummrich <dakr@kernel.org>
Subject: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
Date: Tue, 17 Mar 2026 11:46:58 +0530 [thread overview]
Message-ID: <20260317061700.7734-1-linux.amoon@gmail.com> (raw)
The driver currently assumes the PHY is always at address 0. On some
hardware or buggy BIOS implementations, the PHY may reside at a
different address on the MDIO bus. Update r8169_mdio_register()
to scan the bus for the first available PHY instead of hardcoding
address 0.
Additionally, switch to dev_err_probe() in the main probe path to
provide standardized error handling and cleaner log output for
registration failures.
Link: https://lore.kernel.org/all/87bc37ee-234c-4568-b72e-955c130a6838@arm.com/
Fixes: ec392abc9593 ("PCI: dw-rockchip: Enable async probe by default")
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Niklas Cassel <cassel@kernel.org>
Signed-off-by: Anand Moon <linux.amoon@gmail.com>
---
drivers/net/ethernet/realtek/r8169_main.c | 34 ++++++++++++++++-------
1 file changed, 24 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 791277e750ba..0fd735beff92 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -5427,7 +5427,8 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
{
struct pci_dev *pdev = tp->pci_dev;
struct mii_bus *new_bus;
- int ret;
+ struct phy_device *phydev;
+ int ret, addr;
/* 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
@@ -5462,18 +5463,31 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
if (ret)
return ret;
- tp->phydev = mdiobus_get_phy(new_bus, 0);
- if (!tp->phydev) {
+ /* find the first (lowest address) PHY on the current MAC's MII bus */
+ for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
+ struct phy_device *tmp = mdiobus_get_phy(new_bus, addr);
+
+ if (tmp) {
+ phydev = tmp;
+ break;
+ }
+ }
+
+ if (!phydev) {
+ dev_err(&pdev->dev, "no PHY found on bus\n");
return -ENODEV;
- } else if (!tp->phydev->drv) {
- /* Most chip versions fail with the genphy driver.
- * Therefore ensure that the dedicated PHY driver is loaded.
- */
+ }
+
+ /* Most chip versions fail with the genphy driver.
+ * Therefore ensure that the dedicated PHY driver is loaded.
+ */
+ if (!phydev->drv) {
dev_err(&pdev->dev, "no dedicated PHY driver found for PHY ID 0x%08x, maybe realtek.ko needs to be added to initramfs?\n",
- tp->phydev->phy_id);
+ phydev->phy_id);
return -EUNATCH;
}
+ tp->phydev = phydev;
tp->phydev->mac_managed_pm = true;
if (rtl_supports_eee(tp))
phy_support_eee(tp->phydev);
@@ -5790,11 +5804,11 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
rc = r8169_mdio_register(tp);
if (rc)
- return rc;
+ return dev_err_probe(&pdev->dev, rc, "mdio register failure\n");
rc = register_netdev(dev);
if (rc)
- return rc;
+ return dev_err_probe(&pdev->dev, rc, "register newdev failure\n");
if (IS_ENABLED(CONFIG_R8169_LEDS)) {
if (rtl_is_8125(tp))
base-commit: 95c541ddfb0815a0ea8477af778bb13bb075079a
--
2.50.1
next reply other threads:[~2026-03-17 6:17 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-17 6:16 Anand Moon [this message]
2026-03-17 6:51 ` [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe Heiner Kallweit
2026-03-17 7:59 ` Anand Moon
2026-03-17 9:44 ` Heiner Kallweit
2026-03-17 14:11 ` Anand Moon
2026-03-17 17:45 ` kernel test robot
2026-03-19 23:53 ` kernel test robot
2026-03-20 3:06 ` Anand Moon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260317061700.7734-1-linux.amoon@gmail.com \
--to=linux.amoon@gmail.com \
--cc=18255117159@163.com \
--cc=andrew+netdev@lunn.ch \
--cc=cassel@kernel.org \
--cc=dakr@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=hkallweit1@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mani@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=nic_swsd@realtek.com \
--cc=pabeni@redhat.com \
--cc=robin.murphy@arm.com \
--cc=shawn.lin@rock-chips.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.