diff --git a/meta-arm-bsp/documentation/fvp-baser-aemv8r64.md b/meta-arm-bsp/documentation/fvp-baser-aemv8r64.md index fc56def5..580e8906 100644 --- a/meta-arm-bsp/documentation/fvp-baser-aemv8r64.md +++ b/meta-arm-bsp/documentation/fvp-baser-aemv8r64.md @@ -153,10 +153,3 @@ Devices supported in the kernel - virtio network - watchdog - rtc - - -Devices not supported or not functional ---------------------------------------- - -- Only one CPU since SMP is not functional in boot-wrapper-aarch64 yet - diff --git a/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64-fvp-baser-aemv8r64.inc b/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64-fvp-baser-aemv8r64.inc index 7fbba3e5..bd8e9935 100644 --- a/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64-fvp-baser-aemv8r64.inc +++ b/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/boot-wrapper-aarch64-fvp-baser-aemv8r64.inc @@ -4,11 +4,12 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/files/${MACHINE}:" SRC_URI_append = " \ file://0001-Decouple-V2M_SYS-config-by-auto-detect-dtb-node.patch \ file://0002-arch64-Introduce-EL2-boot-code-for-v8-r64.patch \ + file://0003-Allow-enable-psci-to-choose-between-smc-and-hvc.patch \ " BOOT_WRAPPER_AARCH64_CMDLINE = "\ earlycon console=ttyAMA0 loglevel=8 rootfstype=ext4 root=/dev/vda1 rw" -EXTRA_OECONF_remove = "--enable-psci" +EXTRA_OECONF += "--enable-psci=hvc" TUNE_CCARGS = "" diff --git a/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0003-Allow-enable-psci-to-choose-between-smc-and-hvc.patch b/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0003-Allow-enable-psci-to-choose-between-smc-and-hvc.patch new file mode 100644 index 00000000..fcd77b7c --- /dev/null +++ b/meta-arm-bsp/recipes-bsp/boot-wrapper-aarch64/files/fvp-baser-aemv8r64/0003-Allow-enable-psci-to-choose-between-smc-and-hvc.patch @@ -0,0 +1,83 @@ +From 5120127e5f767b44a087c741a3438cef1e22ed50 Mon Sep 17 00:00:00 2001 +From: Qi Feng +Date: Wed, 26 May 2021 17:52:01 +0800 +Subject: [PATCH] Allow --enable-psci to choose between smc and hvc + +According to Armv8-R AArch64 manual [1], Armv8-R AArch64 does not +support smc: + +- Pseudocode for AArch64.CheckForSMCUndefOrTrap has this snippet: + + if !HaveEL(EL3) || PSTATE.EL == EL0 then + UNDEFINED; + + And Armv8-R AArch64 does not have EL3. + +- In the document of HCR_EL2 TSC bit: + If EL3 is not implemented and HCR_EL2.NV is 0, it is IMPLEMENTATION + DEFINED whether this bit is: + - RES0. + - Implemented with the functionality as described in HCR_EL2.TSC. + +So hvc is needed in this situation. And due to the lack of libfdt, the +psci method cannot be modified at runtime. + +To use smc, use --enable-psci or --enable-psci=smc. +To use hvc, use --enable-psci=hvc. + +[1]: https://developer.arm.com/documentation/ddi0600/latest/ + +Issue-Id: SCM-2654 +Signed-off-by: Qi Feng +Change-Id: Ib8afabdad2d98bc37371d165bbb6f1f9b88bfc87 + +Upstream-Status: Pending +Signed-off-by: Huifeng Zhang +--- + Makefile.am | 2 +- + configure.ac | 14 +++++++++----- + 2 files changed, 10 insertions(+), 6 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index ef6b793..a9ddd16 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -47,7 +47,7 @@ BOOTMETHOD := psci.o + OFILES += psci.o + PSCI_NODE := psci { \ + compatible = \"arm,psci\"; \ +- method = \"smc\"; \ ++ method = \"$(PSCI_METHOD)\"; \ + cpu_on = <$(PSCI_CPU_ON)>; \ + cpu_off = <$(PSCI_CPU_OFF)>; \ + }; +diff --git a/configure.ac b/configure.ac +index 6914eb4..9aab4a1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -83,13 +83,17 @@ AS_IF([test "x$X_IMAGE" != "x"], + # Allow a user to pass --enable-psci + AC_ARG_ENABLE([psci], + AS_HELP_STRING([--enable-psci], [enable the psci boot method]), +- [USE_PSCI=$enableval]) +-AM_CONDITIONAL([PSCI], [test "x$USE_PSCI" = "xyes"]) +-AS_IF([test "x$USE_PSCI" = "xyes"], [], [USE_PSCI=no]) +- +-AS_IF([test "x$USE_PSCI" != "xyes" -a "x$KERNEL_ES" = "x32"], ++ [case "${enableval}" in ++ yes|smc) USE_PSCI=smc ;; ++ hvc) USE_PSCI=hvc ;; ++ *) AC_MSG_ERROR([Bad value "${enableval}" for --enable-psci. Use "smc" or "hvc"]) ;; ++ esac]) ++AM_CONDITIONAL([PSCI], [test "x$USE_PSCI" = "xyes" -o "x$USE_PSCI" = "xsmc" -o "x$USE_PSCI" = "xhvc"]) ++ ++AS_IF([test "x$USE_PSCI" = "xno" -a "x$KERNEL_ES" = "x32"], + [AC_MSG_ERROR([With an AArch32 kernel, boot method must be PSCI.])] + ) ++AC_SUBST([PSCI_METHOD], [$USE_PSCI]) + + # Allow a user to pass --with-initrd + AC_ARG_WITH([initrd], +-- +2.32.0 +