Re: boot stuck at starting kernel, due to __genpd_dev_pm_attach?

From: Saravana Kannan
Date: Tue Aug 16 2022 - 00:12:15 EST


On Mon, Aug 15, 2022 at 5:28 PM Colin Foster
<colin.foster@xxxxxxxxxxxxxxxx> wrote:
>
> On Mon, Aug 15, 2022 at 08:23:07PM +0200, Pavel Machek wrote:
> > Hi!
> >
> > > You might have already gotten this report, but I tried running v6.0-rc1
> > > on my BeagleBone Black and it gets stuck right after "Starting kernel
> > > ..." from U-Boot.
> > >
> > > A bisect pointed me to commit 5a46079a9645 ("PM: domains: Delete usage
> > > of driver_deferred_probe_check_state()").
> > >
> > > I don't have much more detail than that, other than I'm using the
> > > in-tree am335x-boneblack.dts device tree and I believe I had tested with
> > > the multi-v7-defconfig for this verification. I'm happy to test anything
> > > that might offer more information.
> >
> > Well, standart next step is reverting 5a46079a9645 on top of v6.0-rc1,
> > and if it starts working, either you get fix in your inbox, or you ask
> > Linus to revert :-).
>
> I was able to revert 5a46079a9645 and 9cbffc7a5956 and successfully boot
> v6.0-rc1 on the Beaglebone Black.
>
> I still don't know whether the root cause is the patch, or perhaps an
> invalid boneblack DTS. I'll try and dig to get more info about what
> might be failing. But I do think anyone using a Beaglebone will have
> this issue, and I also think I'm not the only using the BBB.
>

Hi Colin,

Thanks for the report. There have been other reports like this. This
commit in question is probably the cause. I have two series going.

One [1] is to revert these patches. Probably more suited for 5.19.xxx releases.

The other [2] is to actually fix the issues you are seeing without
reverting these patches (long term we do want to keep the patch that's
causing the issue for you -- not going into the details here). Can you
give this series[2] a shot and tell me if it fixes the issue? You
might need to pull in this additional diff on top of [2] (I'll roll it
into v2 of the series once I get some tests on this)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index 2f012e826986..866755d8ad95 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -2068,7 +2068,11 @@ static int fw_devlink_create_devlink(struct device *con,
device_links_write_unlock();
}

- sup_dev = get_dev_from_fwnode(sup_handle);
+ if (sup_handle->flags & FWNODE_FLAG_NOT_DEVICE)
+ sup_dev = fwnode_get_next_parent_dev(sup_handle);
+ else
+ sup_dev = get_dev_from_fwnode(sup_handle);
+
if (sup_dev) {
/*
* If it's one of those drivers that don't actually bind to

Thanks,
Saravana

[1] - https://lore.kernel.org/lkml/20220727185012.3255200-1-saravanak@xxxxxxxxxx/
[2] - https://lore.kernel.org/lkml/20220810060040.321697-1-saravanak@xxxxxxxxxx/