blob: 131e271012af42d3063186a27a1bc0c92ec1ff2f [file] [log] [blame]
Andrew Geissler9347dd42023-03-03 12:38:41 -06001From 0b9a966b8a28961b078215ee7169e32a976d5e7d Mon Sep 17 00:00:00 2001
Brad Bishopbec4ebc2022-08-03 09:55:16 -04002From: Qi Feng <qi.feng@arm.com>
3Date: Wed, 26 May 2021 17:52:01 +0800
4Subject: [PATCH] Allow --enable-psci to choose between smc and hvc
5
6According to Armv8-R AArch64 manual [1], Armv8-R AArch64 does not
7support smc:
8
9- Pseudocode for AArch64.CheckForSMCUndefOrTrap has this snippet:
10
11 if !HaveEL(EL3) || PSTATE.EL == EL0 then
12 UNDEFINED;
13
14 And Armv8-R AArch64 does not have EL3.
15
16- In the document of HCR_EL2 TSC bit:
17 If EL3 is not implemented and HCR_EL2.NV is 0, it is IMPLEMENTATION
18 DEFINED whether this bit is:
19 - RES0.
20 - Implemented with the functionality as described in HCR_EL2.TSC.
21
22So hvc is needed in this situation. And due to the lack of libfdt, the
23psci method cannot be modified at runtime.
24
25To use smc, use --enable-psci or --enable-psci=smc.
26To use hvc, use --enable-psci=hvc.
27
28[1]: https://developer.arm.com/documentation/ddi0600/latest/
29
30Issue-Id: SCM-2654
31Upstream-Status: Pending
32Signed-off-by: Qi Feng <qi.feng@arm.com>
33Change-Id: Ib8afabdad2d98bc37371d165bbb6f1f9b88bfc87
34
35Upstream-Status: Pending
36Signed-off-by: Huifeng Zhang <Huifeng.Zhang@arm.com>
37---
38 Makefile.am | 10 +++++-----
39 configure.ac | 14 +++++++++-----
40 2 files changed, 14 insertions(+), 10 deletions(-)
41
42diff --git a/Makefile.am b/Makefile.am
Andrew Geissler9347dd42023-03-03 12:38:41 -060043index 5731a19..fc66662 100644
Brad Bishopbec4ebc2022-08-03 09:55:16 -040044--- a/Makefile.am
45+++ b/Makefile.am
46@@ -50,11 +50,11 @@ endif
47 if PSCI
48 ARCH_OBJ += psci.o
49 COMMON_OBJ += psci.o
50-PSCI_NODE := psci { \
51- compatible = \"arm,psci\"; \
52- method = \"smc\"; \
53- cpu_on = <$(PSCI_CPU_ON)>; \
54- cpu_off = <$(PSCI_CPU_OFF)>; \
55+PSCI_NODE := psci { \
56+ compatible = \"arm,psci\"; \
57+ method = \"$(PSCI_METHOD)\"; \
58+ cpu_on = <$(PSCI_CPU_ON)>; \
59+ cpu_off = <$(PSCI_CPU_OFF)>; \
60 };
61 CPU_NODES := $(shell perl -I $(SCRIPT_DIR) $(SCRIPT_DIR)/addpsci.pl $(KERNEL_DTB))
62 else
63diff --git a/configure.ac b/configure.ac
64index 9e3b722..53e51be 100644
65--- a/configure.ac
66+++ b/configure.ac
67@@ -83,13 +83,17 @@ AS_IF([test "x$X_IMAGE" != "x"],
68 # Allow a user to pass --enable-psci
69 AC_ARG_ENABLE([psci],
70 AS_HELP_STRING([--disable-psci], [disable the psci boot method]),
71- [USE_PSCI=$enableval], [USE_PSCI="yes"])
72-AM_CONDITIONAL([PSCI], [test "x$USE_PSCI" = "xyes"])
73-AS_IF([test "x$USE_PSCI" = "xyes"], [], [USE_PSCI=no])
74-
75-AS_IF([test "x$USE_PSCI" != "xyes" -a "x$KERNEL_ES" = "x32"],
76+ [case "${enableval}" in
77+ yes|smc) USE_PSCI=smc ;;
78+ hvc) USE_PSCI=hvc ;;
79+ *) AC_MSG_ERROR([Bad value "${enableval}" for --enable-psci. Use "smc" or "hvc"]) ;;
80+ esac], [USE_PSCI="yes"])
81+AM_CONDITIONAL([PSCI], [test "x$USE_PSCI" = "xyes" -o "x$USE_PSCI" = "xsmc" -o "x$USE_PSCI" = "xhvc"])
82+
83+AS_IF([test "x$USE_PSCI" = "xno" -a "x$KERNEL_ES" = "x32"],
84 [AC_MSG_ERROR([With an AArch32 kernel, boot method must be PSCI.])]
85 )
86+AC_SUBST([PSCI_METHOD], [$USE_PSCI])
87
88 # Allow a user to pass --with-initrd
89 AC_ARG_WITH([initrd],