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

Sascha Hauer s.hauer at pengutronix.de
Tue Jan 9 01:16:03 PST 2024


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");
+
+	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);
 
-- 
2.39.2




More information about the barebox mailing list