kernel: rtl836x: directly defer probe when mdio is missing
authorShiji Yang <yangshiji66@outlook.com>
Mon, 15 Dec 2025 11:37:03 +0000 (19:37 +0800)
committerHauke Mehrtens <hauke@hauke-m.de>
Tue, 23 Dec 2025 17:22:01 +0000 (18:22 +0100)
If the switch is directly controlled by the mdio bus, we must ensure
that the mdio bus is ready instead of trying GPIO simulated bus.

Fixes: d4ac26ec4920 ("kernel: rtl8366-smi: add Realtek switch management via mii-bus")
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21143
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
target/linux/generic/files/drivers/net/phy/rtl8366_smi.c

index 905283b0c265f3d8357df925c79acdf707e05de7..f043b2b875a0373df44b0060b6a2963870a145b0 100644 (file)
@@ -1497,7 +1497,7 @@ static int rtl8366_smi_probe_of(struct platform_device *pdev, struct rtl8366_smi
        if (!smi->ext_mbus) {
                dev_info(&pdev->dev,
                        "cannot find mdio bus from bus handle (yet)");
-               goto try_gpio;
+               return -EPROBE_DEFER;
        }
 
        if (of_property_read_u32(np, "phy-id", &smi->phy_id))
@@ -1507,12 +1507,8 @@ static int rtl8366_smi_probe_of(struct platform_device *pdev, struct rtl8366_smi
 
 try_gpio:
        if (!gpio_is_valid(sck) || !gpio_is_valid(sda)) {
-               if (!mdio_node) {
-                       dev_err(&pdev->dev, "gpios missing in devictree\n");
-                       return -EINVAL;
-               } else {
-                       return -EPROBE_DEFER;
-               }
+               dev_err(&pdev->dev, "gpios missing in devictree\n");
+               return -EINVAL;
        }
 
        smi->gpio_sda = sda;