From: Ulf Hansson <ulf.hansson@linaro.org>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>,
Saravana Kannan <saravanak@google.com>,
Stephen Boyd <sboyd@kernel.org>,
linux-pm@vger.kernel.org,
"Rafael J . Wysocki" <rafael@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Michael Grzeschik <m.grzeschik@pengutronix.de>,
Bjorn Andersson <andersson@kernel.org>,
Abel Vesa <abel.vesa@linaro.org>,
Peng Fan <peng.fan@oss.nxp.com>, Johan Hovold <johan@kernel.org>,
Maulik Shah <maulik.shah@oss.qualcomm.com>,
Michal Simek <michal.simek@amd.com>,
Konrad Dybcio <konradybcio@kernel.org>,
Thierry Reding <thierry.reding@gmail.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Linux-Renesas <linux-renesas-soc@vger.kernel.org>
Subject: Re: [PATCH v2 00/21] pmdomain: Add generic ->sync_state() support to genpd
Date: Tue, 24 Jun 2025 17:29:27 +0200 [thread overview]
Message-ID: <CAPDyKFoJHFuY278eEobje4TOv_+-i966H2OuP9fqHMLLevb0qw@mail.gmail.com> (raw)
In-Reply-To: <CAMuHMdXGS+efbbQ_Pn1iYhQ1aWc_DuJ-CBN=jxfjwOWxTRx+9Q@mail.gmail.com>
On Mon, 23 Jun 2025 at 17:06, Geert Uytterhoeven <geert@linux-m68k.org> wrote:
>
> Hi Ulf,
>
> On Mon, 23 Jun 2025 at 16:21, Ulf Hansson <ulf.hansson@linaro.org> wrote:
> > On Thu, 19 Jun 2025 at 13:40, Ulf Hansson <ulf.hansson@linaro.org> wrote:
> > > On Fri, 13 Jun 2025 at 12:33, Tomi Valkeinen
> > > <tomi.valkeinen@ideasonboard.com> wrote:
> > > > On 23/05/2025 16:39, Ulf Hansson wrote:
> > > > > Changes in v2:
> > > > > - Well, quite a lot as I discovered various problems when doing
> > > > > additional testing of corner-case. I suggest re-review from scratch,
> > > > > even if I decided to keep some reviewed-by tags.
> > > > > - Added patches to allow some drivers that needs to align or opt-out
> > > > > from the new common behaviour in genpd.
> > > > >
> > > > > If a PM domain (genpd) is powered-on during boot, there is probably a good
> > > > > reason for it. Therefore it's known to be a bad idea to allow such genpd to be
> > > > > powered-off before all of its consumer devices have been probed. This series
> > > > > intends to fix this problem.
> > > > >
> > > > > We have been discussing these issues at LKML and at various Linux-conferences
> > > > > in the past. I have therefore tried to include the people I can recall being
> > > > > involved, but I may have forgotten some (my apologies), feel free to loop them
> > > > > in.
> > > > >
> > > > > I have tested this with QEMU with a bunch of local test-drivers and DT nodes.
> > > > > Let me know if you want me to share this code too.
> > > > >
> > > > > Please help review and test!
> > > >
> > > > I tested this Renesas white-hawk board, and it hangs at boot. With
> > > > earlycon, I captured with/without boot logs, attached.
> > > >
> > > > The hang case doesn't look very healthy with all these: "kobject:
> > > > '(null)' ((____ptrval____)): is not initialized, yet kobject_get() is
> > > > being called."
> > >
> > > Tomi, thanks a lot for helping out with testing!
> > >
> > > rcar_gen4_sysc_pd_init() calls pm_genpd_init() and
> > > of_genpd_add_provider_onecell().
> > >
> > > rcar_gen4_sysc_pd_init() is an early_initcall, which I guess is the
> > > reason for these problems, as the genpd_provider_bus has not been
> > > registered that early (it's done at core_initcall)
> > >
> > > Do you think it would be possible to move rcar_gen4_sysc_pd_init() to
> > > a postcore/arch_initcall?
> >
> > I did some investigation around this and found that both
> > drivers/pmdomain/renesas/rcar-gen4-sysc.c and
> > drivers/pmdomain/renesas/rcar-sysc.c are registering their genpd
> > providers at the early_initcall() level.
> >
> > I was trying to find (by browsing renesas DTSes and looking into
> > drivers) if there is any consumers that actually relies on this, but
> > so far the earliest consumer I have found is the
> > drivers/irqchip/irq-renesas-irqc.c, but that's at postcore_initcall().
> > Of course, it's difficult to say if my analysis is complete as there
> > are a lot of platform variants and I didn't check them all.
> >
> > Maybe we should just give it a try and move both two drivers above to
> > postcore_initcall and see if it works (assuming the irq-renesas-irqc
> > supports -EPROBE_DEFER correctly too).
> >
> > If this doesn't work, I think we need to find a way to allow deferring
> > the call to device_add() in of_genpd_provider_add*() for genpd
> > provider's devices.
>
> Commit dcc09fd143bb97c2 ("soc: renesas: rcar-sysc: Add DT support for
> SYSC PM domains") explains:
>
> "Initialization is done from an early_initcall(), to make sure the PM
> Domains are initialized before secondary CPU bringup."
>
> but that matters only for arm32 systems (R-Car Gen1 and Gen2).
> Arm64 systems (R-Car Gen3 and Gen4) use PSCI for CPU PM Domain control.
Geert, thanks a lot for providing these details and helping out, much
appreciated!
>
> While changing rcar-sysc.c to use a postcore_initcall indeed moves PM
> Domain initialization after secondary CPU bringup, the second CPU core
> on R-Car M2-W is still brought up fine.
>
> For R-Car H1, there is a regression:
>
> smp: Bringing up secondary CPUs ...
> CPU1: failed to boot: -19
> CPU2: failed to boot: -19
> CPU3: failed to boot: -19
> smp: Brought up 1 node, 1 CPU
> SMP: Total of 1 processors activated (500.00 BogoMIPS).
>
> CPU bringup/teardown in userspace using
> /sys/devices/system/cpu/cpu*/online still works.
> R-Car H1 was never converted to use "enable-method" in DT, and relies
> on calling into the rcar-sysc driver directly (see [1]). However,
> that does not use any actual calls into the genpd core, so probably it
> can be made to work by splitting rcar_sysc_pd_init() in two parts: an
> early_initcall() that allocates all domain structures and populates the
> internal hierarchy, and a postcore_initcall() that registers everything
> with the genpd core.
Yes, that seems like a viable option.
Unless you prefer to have a stab at it, I intend to look into it and
make the patch(es) part of a new version of the $subject series. Of
course I am still relying on your help with testing/review.
>
> As expected, there is no impact on R-Car H3 ES2.0.
> I will test on R-Car V4M tomorrow, but expect no issues.
>
> FTR, drivers/pmdomain/renesas/rmobile-sysc.c uses core_initcall().
> Changing that to postcore_initcall does not seem to make a difference
> (on R-Mobile A1).
Okay, it sure looks like we should be able to take care of this
problem for the Renesas platforms. That's great!
That said, it seems like we should also add some internal check in
genpd to see whether the genpd_provider_bus has been registered,
before we try to add devices to it. Then, perhaps log a warning and
return -EPROBE_DEFER if we hit that case.
>
> [1] https://elixir.bootlin.com/linux/v6.15.3/source/drivers/pmdomain/renesas/rcar-sysc.c#L439
>
Kind regards
Uffe
next prev parent reply other threads:[~2025-06-24 15:30 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-23 13:39 [PATCH v2 00/21] pmdomain: Add generic ->sync_state() support to genpd Ulf Hansson
2025-05-23 13:39 ` [PATCH v2 01/21] pmdomain: core: Use of_fwnode_handle() Ulf Hansson
2025-06-11 6:07 ` Dhruva Gole
2025-05-23 13:39 ` [PATCH v2 02/21] pmdomain: core: Add a bus and a driver for genpd providers Ulf Hansson
2025-06-03 0:23 ` Saravana Kannan
2025-06-03 10:28 ` Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 03/21] pmdomain: core: Add the genpd->dev to the genpd provider bus Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 04/21] pmdomain: core: Export a common ->sync_state() helper for genpd providers Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 05/21] pmdomain: core: Prepare to add the common ->sync_state() support Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 06/21] soc/tegra: pmc: Opt-out from genpd's " Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 07/21] cpuidle: psci: " Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 08/21] cpuidle: riscv-sbi: " Ulf Hansson
2025-08-10 21:12 ` patchwork-bot+linux-riscv
2025-05-23 13:40 ` [PATCH v2 09/21] pmdomain: qcom: rpmhpd: Use of_genpd_sync_state() Ulf Hansson
2025-05-23 19:42 ` Konrad Dybcio
2025-05-26 10:12 ` Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 10/21] " Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 11/21] firmware/pmdomain: xilinx: Move ->sync_state() support to firmware driver Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 12/21] firmware: xilinx: Don't share zynqmp_pm_init_finalize() Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 13/21] firmware: xilinx: Use of_genpd_sync_state() Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 14/21] driver core: Export get_dev_from_fwnode() Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 15/21] pmdomain: core: Add common ->sync_state() support for genpd providers Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 16/21] driver core: Add dev_set_drv_sync_state() Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 17/21] pmdomain: core: Default to use of_genpd_sync_state() for genpd providers Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 18/21] pmdomain: core: Leave powered-on genpds on until late_initcall_sync Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 19/21] pmdomain: core: Leave powered-on genpds on until sync_state Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 20/21] cpuidle: psci: Drop redundant sync_state support Ulf Hansson
2025-05-23 13:40 ` [PATCH v2 21/21] cpuidle: riscv-sbi: " Ulf Hansson
2025-06-03 14:20 ` [PATCH v2 00/21] pmdomain: Add generic ->sync_state() support to genpd Hiago De Franco
2025-06-12 6:09 ` Tomi Valkeinen
2025-06-13 10:33 ` Tomi Valkeinen
2025-06-19 11:40 ` Ulf Hansson
2025-06-23 14:20 ` Ulf Hansson
2025-06-23 15:06 ` Geert Uytterhoeven
2025-06-24 12:10 ` Geert Uytterhoeven
2025-06-24 15:29 ` Ulf Hansson [this message]
2025-06-30 9:31 ` Geert Uytterhoeven
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAPDyKFoJHFuY278eEobje4TOv_+-i966H2OuP9fqHMLLevb0qw@mail.gmail.com \
--to=ulf.hansson@linaro.org \
--cc=abel.vesa@linaro.org \
--cc=andersson@kernel.org \
--cc=geert@linux-m68k.org \
--cc=gregkh@linuxfoundation.org \
--cc=johan@kernel.org \
--cc=jonathanh@nvidia.com \
--cc=konradybcio@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=m.grzeschik@pengutronix.de \
--cc=maulik.shah@oss.qualcomm.com \
--cc=michal.simek@amd.com \
--cc=peng.fan@oss.nxp.com \
--cc=rafael@kernel.org \
--cc=saravanak@google.com \
--cc=sboyd@kernel.org \
--cc=thierry.reding@gmail.com \
--cc=tomi.valkeinen@ideasonboard.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).