Hello Neil,

On Thursday, 4 June 2026 at 4:59 PM, Neil Armstrong <[email protected]> 
wrote:

> Hi,
> 
> On 6/4/26 08:53, Sam Day wrote:
> > Hey Neil,
> >
> > On Thursday, 4 June 2026 at 4:33 PM, Neil Armstrong 
> > <[email protected]> wrote:
> >
> >> On 6/2/26 09:19, Sam Day via B4 Relay wrote:
> >>> From: Sam Day <[email protected]>
> >>>
> >>> If there's no PSCI implementation, then change the enable-method of all
> >>> CPUs from "psci" to "spin-table". Later, when spin_table_update_dt runs,
> >>> it will further patch the CPU nodes with the necessary cpu-release-addr.
> >>>
> >>> This new fixup is only applied when CONFIG_ARMV8_SPIN_TABLE is enabled,
> >>> since that also determines whether spin_table_update_dt runs.
> >>>
> >>> Signed-off-by: Sam Day <[email protected]>
> >>> ---
> >>>    arch/arm/mach-snapdragon/board.c | 41 
> >>> ++++++++++++++++++++++++++++++++++++++++
> >>>    1 file changed, 41 insertions(+)
> >>>
> >>> diff --git a/arch/arm/mach-snapdragon/board.c 
> >>> b/arch/arm/mach-snapdragon/board.c
> >>> index 829a0109ac7..3b08069af98 100644
> >>> --- a/arch/arm/mach-snapdragon/board.c
> >>> +++ b/arch/arm/mach-snapdragon/board.c
> >>> @@ -183,7 +183,9 @@ static void show_psci_version(void)
> >>>    static void qcom_psci_fixup(void *fdt)
> >>>    {
> >>>           int offset, ret;
> >>> + uint reg;
> >>>           struct arm_smccc_res res;
> >>> + const char *prop;
> >>>
> >>>           arm_smccc_smc(ARM_PSCI_0_2_FN_PSCI_VERSION, 0, 0, 0, 0, 0, 0, 
> >>> 0, &res);
> >>>
> >>> @@ -198,6 +200,45 @@ static void qcom_psci_fixup(void *fdt)
> >>>           ret = fdt_del_node(fdt, offset);
> >>>           if (ret)
> >>>                   log_err("Failed to delete /psci node: %d\n", ret);
> >>> +
> >>> + if (!CONFIG_IS_ENABLED(ARMV8_SPIN_TABLE))
> >>> +         return;
> >>
> >> Can this be dynamic ?
> >
> > Sure can! ... Just as soon as I pin down exactly what you mean by that :D
> >
> > Are you asking that this be guarded not just by ARMV8_SPIN_TABLE
> > enablement, but also by root device compatible?
> >
> > e.g:
> >
> >     if (!CONFIG_IS_ENABLED(ARMV8_SPIN_TABLE))
> >             return;
> >
> >     if (fdt_node_check_compatible(fdt, 0, "qcom,msm8916") &&
> >          fdt_node_check_compatible(fdt, 0, "qcom,apq8016"))
> >             return;
> 
> Yes perhaps move this in a helper function to guard all the spin table 
> functionality ?

Ack, I've queued that up for v3. This series already introduces msm8916-smp.c, 
so
it was easy enough to move it over there.

Best,
-Sam

> 
> Thanks,
> Neil
> 
> >
> > Kind regards,
> > Sam
> >
> >>
> >> Neil
> >>
> >>> +
> >>> + /* If spin-table support is enabled, make sure any CPU nodes with a
> >>> +  * PSCI enable-method are updated to spin-table. Further, any PSCI
> >>> +  * power-domains properties are removed.
> >>> +  */
> >>> +
> >>> + offset = fdt_path_offset(fdt, "/cpus");
> >>> + if (offset < 0)
> >>> +         return;
> >>> +
> >>> + for (offset = fdt_first_subnode(fdt, offset);
> >>> +      offset >= 0;
> >>> +      offset = fdt_next_subnode(fdt, offset)) {
> >>> +         prop = fdt_getprop(fdt, offset, "device_type", NULL);
> >>> +         if (!prop || strcmp(prop, "cpu"))
> >>> +                 continue;
> >>> +
> >>> +         prop = fdt_getprop(fdt, offset, "enable-method", NULL);
> >>> +         if (!prop || strcmp(prop, "psci"))
> >>> +                 continue;
> >>> +
> >>> +         reg = fdtdec_get_uint(fdt, offset, "reg", 0);
> >>> +         ret = fdt_setprop_string(fdt, offset,
> >>> +                                  "enable-method", "spin-table");
> >>> +         if (ret)
> >>> +                 log_err("Failed to set CPU%d enable-method to 
> >>> 'spin-table', this CPU will not be available to booted OS! %d\n",
> >>> +                         reg, ret);
> >>> +
> >>> +         log_info("Patched CPU%d enable-method to 'spin-table'\n", reg);
> >>> +
> >>> +         prop = fdt_getprop(fdt, offset, "power-domain-names", NULL);
> >>> +         if (prop && !strcmp(prop, "psci")) {
> >>> +                 fdt_delprop(fdt, offset, "power-domains");
> >>> +                 fdt_delprop(fdt, offset, "power-domain-names");
> >>> +         }
> >>> + }
> >>>    }
> >>>
> >>>    /* We support booting U-Boot with an internal DT when running as a 
> >>> first-stage bootloader
> >>>
> >>
> >>
> 
>

Reply via email to