On Fri, Jan 15, 2021 at 8:13 AM Jon Hunter <jonathanh@xxxxxxxxxx> wrote: > > > On 14/01/2021 21:50, Saravana Kannan wrote: > > On Thu, Jan 14, 2021 at 10:55 AM Jon Hunter <jonathanh@xxxxxxxxxx> wrote: > >> > >> > >> On 14/01/2021 16:52, Saravana Kannan wrote: > >> > >> ... > >> > >>> Thanks! I think you forgot to enable those logs though. Also, while > >>> you are at it, maybe enable the logs in device_link_add() too please? > >> > >> > >> Sorry try this one. > >> > >> Cheers > >> Jon > > > > Phew! That took almost 4 hours to debug on the side! I think I figured > > it out. Can you try this patch? If it works or improves things, I'll > > explain why it helps. > > > > -Saravana > > > > diff --git a/drivers/of/property.c b/drivers/of/property.c > > index 5f9eed79a8aa..1c8c65c4a887 100644 > > --- a/drivers/of/property.c > > +++ b/drivers/of/property.c > > @@ -1258,6 +1258,8 @@ DEFINE_SIMPLE_PROP(pinctrl5, "pinctrl-5", NULL) > > DEFINE_SIMPLE_PROP(pinctrl6, "pinctrl-6", NULL) > > DEFINE_SIMPLE_PROP(pinctrl7, "pinctrl-7", NULL) > > DEFINE_SIMPLE_PROP(pinctrl8, "pinctrl-8", NULL) > > +DEFINE_SIMPLE_PROP(gpio_compat, "gpio", "#gpio-cells") > > +DEFINE_SIMPLE_PROP(gpios_compat, "gpios", "#gpio-cells") > > DEFINE_SUFFIX_PROP(regulators, "-supply", NULL) > > DEFINE_SUFFIX_PROP(gpio, "-gpio", "#gpio-cells") > > DEFINE_SUFFIX_PROP(gpios, "-gpios", "#gpio-cells") > > @@ -1296,6 +1298,8 @@ static const struct supplier_bindings > > of_supplier_bindings[] = { > > { .parse_prop = parse_pinctrl6, }, > > { .parse_prop = parse_pinctrl7, }, > > { .parse_prop = parse_pinctrl8, }, > > + { .parse_prop = parse_gpio_compat, }, > > + { .parse_prop = parse_gpios_compat, }, > > { .parse_prop = parse_regulators, }, > > { .parse_prop = parse_gpio, }, > > { .parse_prop = parse_gpios, }, > > > > Thanks, that worked! > > Tested-by: Jon Hunter <jonathanh@xxxxxxxxxx> > > Thanks for digging into that one. Would have taken me more than 4 hours! Thanks for testing. What was happening was that there was a cycle of 2-3 devices. A -(depends on)-> B -> C -> A. And fw_devlink only understood A -> B since the rest were the gpio bindings I added above. Without fw_devlink seeing the cycle, it can't do cycle workarounds. So C's driver was deferring probe waiting on A and none of them probed. Once I added these and made the cycle visible to fw_devlink, it handled it fine (basically between A, B and C, the device links don't affect probe order anymore). -Saravana