Hi Ulf, On Tue, 24 Jun 2025 at 17:30, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > On Mon, 23 Jun 2025 at 17:06, Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote: > > On Mon, 23 Jun 2025 at 16:21, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > > > On Thu, 19 Jun 2025 at 13:40, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > > > > 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. To rule out relying on anything being enabled by the bootloader, I offlined the second CPU, and booted the kernel using kexec. The second CPU still comes up fine. Which is not that unsurprising, as rcar-sysc.c ignores domains with the PD_CPU flag... > > 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. ... so it's just R-Car H1 that needs some code to run early. > 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. Sure, I will do testing and review. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx 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