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 > >>> > >> > >> > >

