[PATCH 10/10] ARM: Layerscape: LS1028a: fixup psci node

Ahmad Fatoum a.fatoum at pengutronix.de
Tue Jan 9 01:26:28 PST 2024


Hello Sascha,

On 09.01.24 10:16, Sascha Hauer wrote:
> The upstream LS1028a dtsi files do not have a psci node, so add one
> in a fixup. This is necessary to bring up the secondary CPU core.
> 
> Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
> ---
>  arch/arm/mach-layerscape/Kconfig |  1 +
>  arch/arm/mach-layerscape/soc.c   | 16 ++++++++++++++++
>  2 files changed, 17 insertions(+)
> 
> diff --git a/arch/arm/mach-layerscape/Kconfig b/arch/arm/mach-layerscape/Kconfig
> index 5658a63b33..97f2061eee 100644
> --- a/arch/arm/mach-layerscape/Kconfig
> +++ b/arch/arm/mach-layerscape/Kconfig
> @@ -20,6 +20,7 @@ config ARCH_LS1028
>  	select SYS_SUPPORTS_64BIT_KERNEL
>  	select ARM_ATF
>  	select FIRMWARE_LS1028A_ATF
> +	select ARM_PSCI_OF
>  
>  config ARCH_LS1046
>  	bool
> diff --git a/arch/arm/mach-layerscape/soc.c b/arch/arm/mach-layerscape/soc.c
> index 70c1dedb46..30fbb5d1bf 100644
> --- a/arch/arm/mach-layerscape/soc.c
> +++ b/arch/arm/mach-layerscape/soc.c
> @@ -3,7 +3,9 @@
>  #include <io.h>
>  #include <init.h>
>  #include <memory.h>
> +#include <linux/arm-smccc.h>
>  #include <linux/bug.h>
> +#include <asm/psci.h>
>  #include <mach/layerscape/layerscape.h>
>  #include <of.h>
>  
> @@ -84,6 +86,19 @@ static int ls1021a_init(void)
>  	return 0;
>  }
>  
> +static int ls1028a_psci_fixup(struct device_node *root, void *unused)
> +{
> +	unsigned long psci_version;
> +	struct arm_smccc_res res = {};
> +
> +	arm_smccc_smc(ARM_PSCI_0_2_FN_PSCI_VERSION, 0, 0, 0, 0, 0, 0, 0, &res);
> +	psci_version = res.a0;
> +
> +	of_psci_fixup(root, psci_version, "smc");

Do you have a restart handler registered for LS1028A? If not, you may consider
adding the same node to the barebox device tree node too, so it can use PSCI
to reset the system.

Cheers,
Ahmad

> +
> +	return 0;
> +}
> +
>  static int ls1028a_init(void)
>  {
>  	if (!IS_ENABLED(CONFIG_ARCH_LS1028))
> @@ -91,6 +106,7 @@ static int ls1028a_init(void)
>  
>  	layerscape_register_pbl_image_handler();
>  	ls1028a_setup_icids();
> +	of_register_fixup(ls1028a_psci_fixup, NULL);
>  
>  	reserve_sdram_region("tfa", LS1028A_TFA_RESERVED_START, LS1028A_TFA_RESERVED_SIZE);
>  

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |




More information about the barebox mailing list