public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
@ 2026-03-17  6:16 Anand Moon
  2026-03-17  6:51 ` Heiner Kallweit
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Anand Moon @ 2026-03-17  6:16 UTC (permalink / raw)
  To: Heiner Kallweit,
	maintainer:8169 10/100/1000 GIGABIT ETHERNET DRIVER, Andrew Lunn,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Manivannan Sadhasivam, Shawn Lin, Hans Zhang, Niklas Cassel,
	open list:8169 10/100/1000 GIGABIT ETHERNET DRIVER, open list
  Cc: Anand Moon, Robin Murphy, Danilo Krummrich

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


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
  2026-03-17  6:16 [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe Anand Moon
@ 2026-03-17  6:51 ` Heiner Kallweit
  2026-03-17  7:59   ` Anand Moon
  2026-03-17 17:45 ` kernel test robot
  2026-03-19 23:53 ` kernel test robot
  2 siblings, 1 reply; 8+ messages in thread
From: Heiner Kallweit @ 2026-03-17  6:51 UTC (permalink / raw)
  To: Anand Moon, maintainer:8169 10/100/1000 GIGABIT ETHERNET DRIVER,
	Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Manivannan Sadhasivam, Shawn Lin, Hans Zhang,
	Niklas Cassel, open list:8169 10/100/1000 GIGABIT ETHERNET DRIVER,
	open list
  Cc: Robin Murphy, Danilo Krummrich

On 17.03.2026 07:16, Anand Moon wrote:
> 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.

No. The PHY always shows up at (virtual) address 0, due to the
MAC register based way of accessing the internal PHY.
Do you have any concrete example of such a "hardware or buggy bios"?

> 
> 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.
> -		 */

This check is needed. It's seems your actual intention is something completely
different from what you state in the commit message. You try to find a workaround
for the issues with request_module() from async contect, caused by the referenced
change to Rockchip PCI.

> +	}
> +
> +	/* 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


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
  2026-03-17  6:51 ` Heiner Kallweit
@ 2026-03-17  7:59   ` Anand Moon
  2026-03-17  9:44     ` Heiner Kallweit
  0 siblings, 1 reply; 8+ messages in thread
From: Anand Moon @ 2026-03-17  7:59 UTC (permalink / raw)
  To: Heiner Kallweit
  Cc: maintainer:8169 10/100/1000 GIGABIT ETHERNET DRIVER, Andrew Lunn,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Manivannan Sadhasivam, Shawn Lin, Hans Zhang, Niklas Cassel,
	open list:8169 10/100/1000 GIGABIT ETHERNET DRIVER, open list,
	Robin Murphy, Danilo Krummrich

Hi Heiner,

Thanks for your review comments.

On Tue, 17 Mar 2026 at 12:21, Heiner Kallweit <hkallweit1@gmail.com> wrote:
>
> On 17.03.2026 07:16, Anand Moon wrote:
> > 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.
>
> No. The PHY always shows up at (virtual) address 0, due to the
> MAC register based way of accessing the internal PHY.
> Do you have any concrete example of such a "hardware or buggy bios"?
>
Sorry about that, I didn't realize. Unfortunately, my testing shows
this still doesn't
fix the problem, but I still perceive. I modeled the change after some
other drivers,
but clearly, that approach isn't working in this case.
> >
> > 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.
> > -              */
>
> This check is needed. It's seems your actual intention is something completely
> different from what you state in the commit message. You try to find a workaround
> for the issues with request_module() from async contect, caused by the referenced
> change to Rockchip PCI.
That makes sense, sorry for the noise.

What are your thoughts on using dev_err_probe() for these registration failures?
I thought it might clean up the error path.

Thanks
-Anand
>
> > +     }
> > +
> > +     /* 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
>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
  2026-03-17  7:59   ` Anand Moon
@ 2026-03-17  9:44     ` Heiner Kallweit
  2026-03-17 14:11       ` Anand Moon
  0 siblings, 1 reply; 8+ messages in thread
From: Heiner Kallweit @ 2026-03-17  9:44 UTC (permalink / raw)
  To: Anand Moon
  Cc: maintainer:8169 10/100/1000 GIGABIT ETHERNET DRIVER, Andrew Lunn,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Manivannan Sadhasivam, Shawn Lin, Hans Zhang, Niklas Cassel,
	open list:8169 10/100/1000 GIGABIT ETHERNET DRIVER, open list,
	Robin Murphy, Danilo Krummrich

On 17.03.2026 08:59, Anand Moon wrote:
> Hi Heiner,
> 
> Thanks for your review comments.
> 
> On Tue, 17 Mar 2026 at 12:21, Heiner Kallweit <hkallweit1@gmail.com> wrote:
>>
>> On 17.03.2026 07:16, Anand Moon wrote:
>>> 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.
>>
>> No. The PHY always shows up at (virtual) address 0, due to the
>> MAC register based way of accessing the internal PHY.
>> Do you have any concrete example of such a "hardware or buggy bios"?
>>
> Sorry about that, I didn't realize. Unfortunately, my testing shows
> this still doesn't
> fix the problem, but I still perceive. I modeled the change after some
> other drivers,
> but clearly, that approach isn't working in this case.
>>>
>>> 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.
>>> -              */
>>
>> This check is needed. It's seems your actual intention is something completely
>> different from what you state in the commit message. You try to find a workaround
>> for the issues with request_module() from async contect, caused by the referenced
>> change to Rockchip PCI.
> That makes sense, sorry for the noise.
> 
> What are your thoughts on using dev_err_probe() for these registration failures?
> I thought it might clean up the error path.
> 
I'm not aware of any realistic scenario where these calls would fail (w/o printing
an error message before). So adding an error message wouldn't hurt, but it also
wouldn't be beneficial enough to justify a patch.

> Thanks
> -Anand
>>
>>> +     }
>>> +
>>> +     /* 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
>>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
  2026-03-17  9:44     ` Heiner Kallweit
@ 2026-03-17 14:11       ` Anand Moon
  0 siblings, 0 replies; 8+ messages in thread
From: Anand Moon @ 2026-03-17 14:11 UTC (permalink / raw)
  To: Heiner Kallweit
  Cc: maintainer:8169 10/100/1000 GIGABIT ETHERNET DRIVER, Andrew Lunn,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Manivannan Sadhasivam, Shawn Lin, Hans Zhang, Niklas Cassel,
	open list:8169 10/100/1000 GIGABIT ETHERNET DRIVER, open list,
	Robin Murphy, Danilo Krummrich

Hi Heiner,

On Tue, 17 Mar 2026 at 15:14, Heiner Kallweit <hkallweit1@gmail.com> wrote:
>
> On 17.03.2026 08:59, Anand Moon wrote:
> > Hi Heiner,
> >
> > Thanks for your review comments.
> >
> > On Tue, 17 Mar 2026 at 12:21, Heiner Kallweit <hkallweit1@gmail.com> wrote:
> >>
> >> On 17.03.2026 07:16, Anand Moon wrote:
> >>> 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.
> >>
> >> No. The PHY always shows up at (virtual) address 0, due to the
> >> MAC register based way of accessing the internal PHY.
> >> Do you have any concrete example of such a "hardware or buggy bios"?
> >>
> > Sorry about that, I didn't realize. Unfortunately, my testing shows
> > this still doesn't
> > fix the problem, but I still perceive. I modeled the change after some
> > other drivers,
> > but clearly, that approach isn't working in this case.
> >>>
> >>
> >> This check is needed. It's seems your actual intention is something completely
> >> different from what you state in the commit message. You try to find a workaround
> >> for the issues with request_module() from async contect, caused by the referenced
> >> change to Rockchip PCI.
> > That makes sense, sorry for the noise.
> >
> > What are your thoughts on using dev_err_probe() for these registration failures?
> > I thought it might clean up the error path.
> >
> I'm not aware of any realistic scenario where these calls would fail (w/o printing
> an error message before). So adding an error message wouldn't hurt, but it also
> wouldn't be beneficial enough to justify a patch.
>
If we enable .probe_type = PROBE_PREFER_ASYNCHRONOUS in pcie-dw-rockchip.c,
The r8169 module probe will fail due to the module’s request for
synchronous probing.

[1] https://lore.kernel.org/all/87bc37ee-234c-4568-b72e-955c130a6838@arm.com/

Some were in the module, but the probe failed to load the module or firmware.
I hope these changes will resolve the probe warning.

----->8-----
diff --git a/drivers/net/ethernet/realtek/r8169_main.c
b/drivers/net/ethernet/realtek/r8169_main.c
index 791277e750ba..8b7858f6dc6d 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -5790,11 +5790,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))

Thanks
-Anand

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
  2026-03-17  6:16 [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe Anand Moon
  2026-03-17  6:51 ` Heiner Kallweit
@ 2026-03-17 17:45 ` kernel test robot
  2026-03-19 23:53 ` kernel test robot
  2 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2026-03-17 17:45 UTC (permalink / raw)
  To: Anand Moon, Heiner Kallweit, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Manivannan Sadhasivam,
	Shawn Lin, Hans Zhang, Niklas Cassel, linux-kernel
  Cc: llvm, oe-kbuild-all, netdev, Anand Moon, Robin Murphy,
	Danilo Krummrich

Hi Anand,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 95c541ddfb0815a0ea8477af778bb13bb075079a]

url:    https://github.com/intel-lab-lkp/linux/commits/Anand-Moon/r8169-Fix-PHY-lookup-for-mdiobus_get_phy-and-improve-error-reporting-during-probe/20260317-183327
base:   95c541ddfb0815a0ea8477af778bb13bb075079a
patch link:    https://lore.kernel.org/r/20260317061700.7734-1-linux.amoon%40gmail.com
patch subject: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
config: x86_64-kexec (https://download.01.org/0day-ci/archive/20260317/202603171855.OtM7sS7W-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260317/202603171855.OtM7sS7W-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603171855.OtM7sS7W-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/net/ethernet/realtek/r8169_main.c:5467:17: warning: variable 'phydev' is used uninitialized whenever 'for' loop exits because its condition is false [-Wsometimes-uninitialized]
    5467 |         for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
         |                        ^~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/realtek/r8169_main.c:5476:7: note: uninitialized use occurs here
    5476 |         if (!phydev) {
         |              ^~~~~~
   drivers/net/ethernet/realtek/r8169_main.c:5467:17: note: remove the condition if it is always true
    5467 |         for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
         |                        ^~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/realtek/r8169_main.c:5430:27: note: initialize the variable 'phydev' to silence this warning
    5430 |         struct phy_device *phydev;
         |                                  ^
         |                                   = NULL
   1 warning generated.


vim +5467 drivers/net/ethernet/realtek/r8169_main.c

  5425	
  5426	static int r8169_mdio_register(struct rtl8169_private *tp)
  5427	{
  5428		struct pci_dev *pdev = tp->pci_dev;
  5429		struct mii_bus *new_bus;
  5430		struct phy_device *phydev;
  5431		int ret, addr;
  5432	
  5433		/* On some boards with this chip version the BIOS is buggy and misses
  5434		 * to reset the PHY page selector. This results in the PHY ID read
  5435		 * accessing registers on a different page, returning a more or
  5436		 * less random value. Fix this by resetting the page selector first.
  5437		 */
  5438		if (tp->mac_version == RTL_GIGA_MAC_VER_25 ||
  5439		    tp->mac_version == RTL_GIGA_MAC_VER_26)
  5440			r8169_mdio_write(tp, 0x1f, 0);
  5441	
  5442		new_bus = devm_mdiobus_alloc(&pdev->dev);
  5443		if (!new_bus)
  5444			return -ENOMEM;
  5445	
  5446		new_bus->name = "r8169";
  5447		new_bus->priv = tp;
  5448		new_bus->parent = &pdev->dev;
  5449		new_bus->irq[0] = PHY_MAC_INTERRUPT;
  5450		new_bus->phy_mask = GENMASK(31, 1);
  5451		snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x-%x",
  5452			 pci_domain_nr(pdev->bus), pci_dev_id(pdev));
  5453	
  5454		new_bus->read = r8169_mdio_read_reg;
  5455		new_bus->write = r8169_mdio_write_reg;
  5456	
  5457		if (tp->mac_version >= RTL_GIGA_MAC_VER_40) {
  5458			new_bus->read_c45 = r8169_mdio_read_reg_c45;
  5459			new_bus->write_c45 = r8169_mdio_write_reg_c45;
  5460		}
  5461	
  5462		ret = devm_mdiobus_register(&pdev->dev, new_bus);
  5463		if (ret)
  5464			return ret;
  5465	
  5466		/* find the first (lowest address) PHY on the current MAC's MII bus */
> 5467		for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
  5468			struct phy_device *tmp = mdiobus_get_phy(new_bus, addr);
  5469	
  5470			if (tmp) {
  5471				phydev = tmp;
  5472				break;
  5473			}
  5474		}
  5475	
  5476		if (!phydev) {
  5477			dev_err(&pdev->dev, "no PHY found on bus\n");
  5478			return -ENODEV;
  5479		}
  5480	
  5481		/* Most chip versions fail with the genphy driver.
  5482		 * Therefore ensure that the dedicated PHY driver is loaded.
  5483		 */
  5484		if (!phydev->drv) {
  5485			dev_err(&pdev->dev, "no dedicated PHY driver found for PHY ID 0x%08x, maybe realtek.ko needs to be added to initramfs?\n",
  5486				phydev->phy_id);
  5487			return -EUNATCH;
  5488		}
  5489	
  5490		tp->phydev = phydev;
  5491		tp->phydev->mac_managed_pm = true;
  5492		if (rtl_supports_eee(tp))
  5493			phy_support_eee(tp->phydev);
  5494		phy_support_asym_pause(tp->phydev);
  5495	
  5496		/* mimic behavior of r8125/r8126 vendor drivers */
  5497		if (tp->mac_version == RTL_GIGA_MAC_VER_61)
  5498			phy_disable_eee_mode(tp->phydev,
  5499					     ETHTOOL_LINK_MODE_2500baseT_Full_BIT);
  5500	
  5501		/* PHY will be woken up in rtl_open() */
  5502		phy_suspend(tp->phydev);
  5503	
  5504		return 0;
  5505	}
  5506	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
  2026-03-17  6:16 [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe Anand Moon
  2026-03-17  6:51 ` Heiner Kallweit
  2026-03-17 17:45 ` kernel test robot
@ 2026-03-19 23:53 ` kernel test robot
  2026-03-20  3:06   ` Anand Moon
  2 siblings, 1 reply; 8+ messages in thread
From: kernel test robot @ 2026-03-19 23:53 UTC (permalink / raw)
  To: Anand Moon, Heiner Kallweit, Andrew Lunn, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Manivannan Sadhasivam,
	Shawn Lin, Hans Zhang, Niklas Cassel, linux-kernel
  Cc: llvm, oe-kbuild-all, netdev, Anand Moon, Robin Murphy,
	Danilo Krummrich

Hi Anand,

kernel test robot noticed the following build warnings:

[auto build test WARNING on 95c541ddfb0815a0ea8477af778bb13bb075079a]

url:    https://github.com/intel-lab-lkp/linux/commits/Anand-Moon/r8169-Fix-PHY-lookup-for-mdiobus_get_phy-and-improve-error-reporting-during-probe/20260317-183327
base:   95c541ddfb0815a0ea8477af778bb13bb075079a
patch link:    https://lore.kernel.org/r/20260317061700.7734-1-linux.amoon%40gmail.com
patch subject: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20260320/202603200758.vueafhDW-lkp@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260320/202603200758.vueafhDW-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603200758.vueafhDW-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/net/ethernet/realtek/r8169_main.c:5467:17: warning: variable 'phydev' is used uninitialized whenever 'for' loop exits because its condition is false [-Wsometimes-uninitialized]
    5467 |         for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
         |                        ^~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/realtek/r8169_main.c:5476:7: note: uninitialized use occurs here
    5476 |         if (!phydev) {
         |              ^~~~~~
   drivers/net/ethernet/realtek/r8169_main.c:5467:17: note: remove the condition if it is always true
    5467 |         for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
         |                        ^~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/realtek/r8169_main.c:5430:27: note: initialize the variable 'phydev' to silence this warning
    5430 |         struct phy_device *phydev;
         |                                  ^
         |                                   = NULL
   1 warning generated.


vim +5467 drivers/net/ethernet/realtek/r8169_main.c

  5425	
  5426	static int r8169_mdio_register(struct rtl8169_private *tp)
  5427	{
  5428		struct pci_dev *pdev = tp->pci_dev;
  5429		struct mii_bus *new_bus;
  5430		struct phy_device *phydev;
  5431		int ret, addr;
  5432	
  5433		/* On some boards with this chip version the BIOS is buggy and misses
  5434		 * to reset the PHY page selector. This results in the PHY ID read
  5435		 * accessing registers on a different page, returning a more or
  5436		 * less random value. Fix this by resetting the page selector first.
  5437		 */
  5438		if (tp->mac_version == RTL_GIGA_MAC_VER_25 ||
  5439		    tp->mac_version == RTL_GIGA_MAC_VER_26)
  5440			r8169_mdio_write(tp, 0x1f, 0);
  5441	
  5442		new_bus = devm_mdiobus_alloc(&pdev->dev);
  5443		if (!new_bus)
  5444			return -ENOMEM;
  5445	
  5446		new_bus->name = "r8169";
  5447		new_bus->priv = tp;
  5448		new_bus->parent = &pdev->dev;
  5449		new_bus->irq[0] = PHY_MAC_INTERRUPT;
  5450		new_bus->phy_mask = GENMASK(31, 1);
  5451		snprintf(new_bus->id, MII_BUS_ID_SIZE, "r8169-%x-%x",
  5452			 pci_domain_nr(pdev->bus), pci_dev_id(pdev));
  5453	
  5454		new_bus->read = r8169_mdio_read_reg;
  5455		new_bus->write = r8169_mdio_write_reg;
  5456	
  5457		if (tp->mac_version >= RTL_GIGA_MAC_VER_40) {
  5458			new_bus->read_c45 = r8169_mdio_read_reg_c45;
  5459			new_bus->write_c45 = r8169_mdio_write_reg_c45;
  5460		}
  5461	
  5462		ret = devm_mdiobus_register(&pdev->dev, new_bus);
  5463		if (ret)
  5464			return ret;
  5465	
  5466		/* find the first (lowest address) PHY on the current MAC's MII bus */
> 5467		for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
  5468			struct phy_device *tmp = mdiobus_get_phy(new_bus, addr);
  5469	
  5470			if (tmp) {
  5471				phydev = tmp;
  5472				break;
  5473			}
  5474		}
  5475	
  5476		if (!phydev) {
  5477			dev_err(&pdev->dev, "no PHY found on bus\n");
  5478			return -ENODEV;
  5479		}
  5480	
  5481		/* Most chip versions fail with the genphy driver.
  5482		 * Therefore ensure that the dedicated PHY driver is loaded.
  5483		 */
  5484		if (!phydev->drv) {
  5485			dev_err(&pdev->dev, "no dedicated PHY driver found for PHY ID 0x%08x, maybe realtek.ko needs to be added to initramfs?\n",
  5486				phydev->phy_id);
  5487			return -EUNATCH;
  5488		}
  5489	
  5490		tp->phydev = phydev;
  5491		tp->phydev->mac_managed_pm = true;
  5492		if (rtl_supports_eee(tp))
  5493			phy_support_eee(tp->phydev);
  5494		phy_support_asym_pause(tp->phydev);
  5495	
  5496		/* mimic behavior of r8125/r8126 vendor drivers */
  5497		if (tp->mac_version == RTL_GIGA_MAC_VER_61)
  5498			phy_disable_eee_mode(tp->phydev,
  5499					     ETHTOOL_LINK_MODE_2500baseT_Full_BIT);
  5500	
  5501		/* PHY will be woken up in rtl_open() */
  5502		phy_suspend(tp->phydev);
  5503	
  5504		return 0;
  5505	}
  5506	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
  2026-03-19 23:53 ` kernel test robot
@ 2026-03-20  3:06   ` Anand Moon
  0 siblings, 0 replies; 8+ messages in thread
From: Anand Moon @ 2026-03-20  3:06 UTC (permalink / raw)
  To: kernel test robot
  Cc: Heiner Kallweit, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Manivannan Sadhasivam, Shawn Lin,
	Hans Zhang, Niklas Cassel, linux-kernel, llvm, oe-kbuild-all,
	netdev, Robin Murphy, Danilo Krummrich

Hi Kernel test robot,

On Fri, 20 Mar 2026 at 05:25, kernel test robot <lkp@intel.com> wrote:
>
> Hi Anand,
>
> kernel test robot noticed the following build warnings:
>
> [auto build test WARNING on 95c541ddfb0815a0ea8477af778bb13bb075079a]
>
> url:    https://github.com/intel-lab-lkp/linux/commits/Anand-Moon/r8169-Fix-PHY-lookup-for-mdiobus_get_phy-and-improve-error-reporting-during-probe/20260317-183327
> base:   95c541ddfb0815a0ea8477af778bb13bb075079a
> patch link:    https://lore.kernel.org/r/20260317061700.7734-1-linux.amoon%40gmail.com
> patch subject: [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe
> config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20260320/202603200758.vueafhDW-lkp@intel.com/config)
> compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260320/202603200758.vueafhDW-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202603200758.vueafhDW-lkp@intel.com/
>
> All warnings (new ones prefixed by >>):

Please discard this patch.

Thanks
-Anand

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-03-20  3:06 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-17  6:16 [PATCH next v1] r8169: Fix PHY lookup for mdiobus_get_phy() and improve error reporting during probe Anand Moon
2026-03-17  6:51 ` 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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox