diff options
author | Andrew Walbran <qwandor@google.com> | 2020-01-15 14:18:04 +0000 |
---|---|---|
committer | Andrew Walbran <qwandor@google.com> | 2020-01-23 10:53:45 +0000 |
commit | 61cbd41d7914032d3df1e49c1c1efbe2f9cb4c39 (patch) | |
tree | 098a6a62f44b17b68c6e888f62ea6da6c30b80f0 /plat/qemu | |
parent | 74464d5b51954b500a1a656539a88a58e70d9b8a (diff) | |
download | arm-trusted-firmware-61cbd41d7914032d3df1e49c1c1efbe2f9cb4c39.tar.gz |
qemu: Implement qemu_system_off via semihosting.
This makes the PSCI SYSTEM_OFF call work on QEMU. It assumes that QEMU has
semihosting enabled, but that is already assumed by the image loader.
Signed-off-by: Andrew Walbran <qwandor@google.com>
Change-Id: I0fb7cf7909262b675c3143efeac07f4d60730b03
Diffstat (limited to 'plat/qemu')
-rw-r--r-- | plat/qemu/common/qemu_pm.c | 6 | ||||
-rw-r--r-- | plat/qemu/qemu/platform.mk | 2 | ||||
-rw-r--r-- | plat/qemu/qemu_sbsa/platform.mk | 2 |
3 files changed, 9 insertions, 1 deletions
diff --git a/plat/qemu/common/qemu_pm.c b/plat/qemu/common/qemu_pm.c index a199688df..116211c51 100644 --- a/plat/qemu/common/qemu_pm.c +++ b/plat/qemu/common/qemu_pm.c @@ -10,10 +10,13 @@ #include <arch_helpers.h> #include <common/debug.h> #include <lib/psci/psci.h> +#include <lib/semihosting.h> #include <plat/common/platform.h> #include "qemu_private.h" +#define ADP_STOPPED_APPLICATION_EXIT 0x20026 + /* * The secure entry point to be used on warm reset. */ @@ -191,7 +194,8 @@ void qemu_pwr_domain_suspend_finish(const psci_power_state_t *target_state) ******************************************************************************/ static void __dead2 qemu_system_off(void) { - ERROR("QEMU System Off: operation not handled.\n"); + semihosting_exit(ADP_STOPPED_APPLICATION_EXIT, 0); + ERROR("QEMU System Off: semihosting call unexpectedly returned.\n"); panic(); } diff --git a/plat/qemu/qemu/platform.mk b/plat/qemu/qemu/platform.mk index eaeb72cf9..b95bf5a51 100644 --- a/plat/qemu/qemu/platform.mk +++ b/plat/qemu/qemu/platform.mk @@ -151,6 +151,8 @@ ifeq (${ARM_ARCH_MAJOR},8) BL31_SOURCES += lib/cpus/aarch64/aem_generic.S \ lib/cpus/aarch64/cortex_a53.S \ lib/cpus/aarch64/cortex_a57.S \ + lib/semihosting/semihosting.c \ + lib/semihosting/${ARCH}/semihosting_call.S \ plat/common/plat_psci_common.c \ ${PLAT_QEMU_COMMON_PATH}/qemu_pm.c \ ${PLAT_QEMU_COMMON_PATH}/topology.c \ diff --git a/plat/qemu/qemu_sbsa/platform.mk b/plat/qemu/qemu_sbsa/platform.mk index f34c7e1fe..51832d0ff 100644 --- a/plat/qemu/qemu_sbsa/platform.mk +++ b/plat/qemu/qemu_sbsa/platform.mk @@ -71,6 +71,8 @@ QEMU_GIC_SOURCES := drivers/arm/gic/v3/gicv3_helpers.c \ BL31_SOURCES += lib/cpus/aarch64/aem_generic.S \ lib/cpus/aarch64/cortex_a53.S \ lib/cpus/aarch64/cortex_a57.S \ + lib/semihosting/semihosting.c \ + lib/semihosting/${ARCH}/semihosting_call.S \ plat/common/plat_psci_common.c \ ${PLAT_QEMU_COMMON_PATH}/qemu_pm.c \ ${PLAT_QEMU_COMMON_PATH}/topology.c \ |