Message ID | 20220601070707.3946847-4-saravanak@google.com |
---|---|
State | Accepted |
Commit | f8217275b57aa48d98cc42051c2aac34152718d6 |
Headers | show |
Series | deferred_probe_timeout logic clean up | expand |
Hi Saravana, On Tue, Jul 5, 2022 at 11:11 AM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > On Wed, Jun 1, 2022 at 2:44 PM Saravana Kannan <saravanak@google.com> wrote: > > Now that fw_devlink=on by default and fw_devlink supports interrupt > > properties, the execution will never get to the point where > > driver_deferred_probe_check_state() is called before the supplier has > > probed successfully or before deferred probe timeout has expired. > > > > So, delete the call and replace it with -ENODEV. > > > > Signed-off-by: Saravana Kannan <saravanak@google.com> > > Thanks for your patch, which is now commit f8217275b57aa48d ("net: > mdio: Delete usage of driver_deferred_probe_check_state()") in > driver-core/driver-core-next. > > Seems like I missed something when providing my T-b for this series, > sorry for that. > > arch/arm/boot/dts/r8a7791-koelsch.dts has: > > ðer { > pinctrl-0 = <ðer_pins>, <&phy1_pins>; > pinctrl-names = "default"; > > phy-handle = <&phy1>; > renesas,ether-link-active-low; > status = "okay"; > > phy1: ethernet-phy@1 { > compatible = "ethernet-phy-id0022.1537", > "ethernet-phy-ieee802.3-c22"; > reg = <1>; > interrupt-parent = <&irqc0>; > interrupts = <0 IRQ_TYPE_LEVEL_LOW>; > micrel,led-mode = <1>; > reset-gpios = <&gpio5 22 GPIO_ACTIVE_LOW>; > }; > }; > > Despite the interrupts property, ðer is now probed before irqc0 > (interrupt-controller@e61c0000 in arch/arm/boot/dts/r8a7791.dtsi), > causing the PHY not finding its interrupt, and resorting to polling: > > -Micrel KSZ8041RNLI ee700000.ethernet-ffffffff:01: attached PHY > driver (mii_bus:phy_addr=ee700000.ethernet-ffffffff:01, irq=185) > +Micrel KSZ8041RNLI ee700000.ethernet-ffffffff:01: attached PHY > driver (mii_bus:phy_addr=ee700000.ethernet-ffffffff:01, irq=POLL) > > Reverting this commit, and commit 9cbffc7a59561be9 ("driver core: > Delete driver_deferred_probe_check_state()") fixes that. FTR, this issue is now present in v6.0-rc1. I haven't tried your newest series yet. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
diff --git a/drivers/net/mdio/fwnode_mdio.c b/drivers/net/mdio/fwnode_mdio.c index 1c1584fca632..3e79c2c51929 100644 --- a/drivers/net/mdio/fwnode_mdio.c +++ b/drivers/net/mdio/fwnode_mdio.c @@ -47,9 +47,7 @@ int fwnode_mdiobus_phy_device_register(struct mii_bus *mdio, * just fall back to poll mode */ if (rc == -EPROBE_DEFER) - rc = driver_deferred_probe_check_state(&phy->mdio.dev); - if (rc == -EPROBE_DEFER) - return rc; + rc = -ENODEV; if (rc > 0) { phy->irq = rc;
Now that fw_devlink=on by default and fw_devlink supports interrupt properties, the execution will never get to the point where driver_deferred_probe_check_state() is called before the supplier has probed successfully or before deferred probe timeout has expired. So, delete the call and replace it with -ENODEV. Signed-off-by: Saravana Kannan <saravanak@google.com> --- drivers/net/mdio/fwnode_mdio.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)