[PATCH 5/5] board: sl28: add basic PSCI implementation

Michael Walle michael at walle.cc
Fri Nov 26 17:34:25 CET 2021


For now, this only provides reset and poweroff functions.

Signed-off-by: Michael Walle <michael at walle.cc>
---
 board/kontron/sl28/Makefile    |  2 ++
 board/kontron/sl28/psci.c      | 42 ++++++++++++++++++++++++++++++++++
 configs/kontron_sl28_defconfig |  2 ++
 3 files changed, 46 insertions(+)
 create mode 100644 board/kontron/sl28/psci.c

diff --git a/board/kontron/sl28/Makefile b/board/kontron/sl28/Makefile
index 5d220f0744..084c11da37 100644
--- a/board/kontron/sl28/Makefile
+++ b/board/kontron/sl28/Makefile
@@ -6,6 +6,8 @@ endif
 
 obj-y += common.o ddr.o
 
+obj-$(CONFIG_ARMV8_PSCI) += psci.o
+
 ifdef CONFIG_SPL_BUILD
 obj-y += spl.o
 obj-$(CONFIG_SPL_ATF) += spl_atf.o
diff --git a/board/kontron/sl28/psci.c b/board/kontron/sl28/psci.c
new file mode 100644
index 0000000000..19f0ef3b6d
--- /dev/null
+++ b/board/kontron/sl28/psci.c
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+#include <asm/secure.h>
+#include <asm/psci.h>
+#include <asm/types.h>
+#include <asm/io.h>
+#include <asm/system.h>
+
+#define GPIO2_GPDIR	0x2310000
+#define GPIO2_GPDAT	0x2310008
+#define RSTCR		0x1e60000
+#define RESET_REQ	BIT(1)
+
+u32 __secure psci_version(void)
+{
+	return ARM_PSCI_VER_0_2;
+}
+
+void __secure psci_system_reset(void)
+{
+	writel(RESET_REQ, RSTCR);
+
+	while (1)
+		wfi();
+}
+
+void __secure psci_system_off(void)
+{
+	int i;
+
+	writel(0x02000000, GPIO2_GPDIR);
+	writel(0, GPIO2_GPDAT);
+
+	/* make sure the management controller has sampled the input */
+	for (i = 0; i < (1 << 11); i++)
+		asm("nop");
+
+	writel(RESET_REQ, RSTCR);
+
+	while (1)
+		wfi();
+}
diff --git a/configs/kontron_sl28_defconfig b/configs/kontron_sl28_defconfig
index 7fb6bdbe82..c9d6767055 100644
--- a/configs/kontron_sl28_defconfig
+++ b/configs/kontron_sl28_defconfig
@@ -19,6 +19,8 @@ CONFIG_ENV_OFFSET_REDUND=0x3f0000
 CONFIG_SPL_SPI_FLASH_SUPPORT=y
 CONFIG_SPL_SPI=y
 # CONFIG_PSCI_RESET is not set
+CONFIG_ARMV8_PSCI=y
+CONFIG_ARMV8_PSCI_RELOCATE=y
 CONFIG_AHCI=y
 CONFIG_DISTRO_DEFAULTS=y
 CONFIG_SYS_LOAD_ADDR=0x82000000
-- 
2.30.2



More information about the U-Boot mailing list