Hi Chris, On Thu, 13 Jun 2024 at 04:59, Chris Webb <[email protected]> wrote: > > 48b3ecbe replumbed the gpio-hog probing to use DM_FLAG_PROBE_AFTER_BIND. > > Unfortunately gpio_post_bind is called after the non-preloc recursive > dm_probe_devices completes, so setting this flag does not have the intended > effect and the gpio-hogs never get probed. With instrumentation: > > [...] > CPU: MediaTek MT7981 > Model: GL.iNet GL-X3000 > DRAM: 512 MiB > <mtk_pinctrl_mt7981_bind called> > <dm_probe_devices called: root root_driver root_driver [+] [ ]> > <dm_probe_devices called: clk fixed_clock gpt_dummy20m [ ] [ ]> > [...] > <dm_probe_devices called: led gpio_led signal-4 [ ] [ ]> > Core: 34 devices, 14 uclasses, devicetree: separate > MMC: <gpio_post_bind called> > mmc@11230000: 0 > [...] > > Probe them directly in gpio_post_bind instead.
We cannot probe devices when they are bound since it breaks the ordering of driver model. >From your trace it looks like everything is happening after relocation. I can't quite see what is actually going wrong. But if you look at dm_init_and_scan(), it does the probe at the end, immediately after all devices have been bound. So it should do what you want. Is the GPIO device not being bound? There is something strange here. > > Signed-off-by: Chris Webb <[email protected]> > --- > drivers/gpio/gpio-uclass.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c > index 4234cd91..1c6e1715 100644 > --- a/drivers/gpio/gpio-uclass.c > +++ b/drivers/gpio/gpio-uclass.c > @@ -1539,7 +1539,9 @@ static int gpio_post_bind(struct udevice *dev) > * since hogs can be essential to the hardware > * system. > */ > - dev_or_flags(child, DM_FLAG_PROBE_AFTER_BIND); > + ret = device_probe(child); > + if (ret) > + return ret; > } > } > } Regards, Simon

