From 3876f8cd1e3c0c203a315bdc6e8ced176bb49e0a Mon Sep 17 00:00:00 2001 From: Xiang W Date: Mon, 21 Jul 2025 09:02:21 +0800 Subject: [PATCH] firmware: payload: test: Add SBI shutdown call after test message Previously, 'make run' would hang in WFI after printing the test message. This commit adds an SBI ecall to ensure QEMU exits cleanly after the test payload runs. Reviewed-by: Anup Patel Signed-off-by: Xiang W Link: https://lore.kernel.org/r/20250721010807.460788-1-wxjstz@126.com Signed-off-by: Anup Patel --- firmware/payloads/test_main.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/firmware/payloads/test_main.c b/firmware/payloads/test_main.c index 194dbbe6..03f6ba39 100644 --- a/firmware/payloads/test_main.c +++ b/firmware/payloads/test_main.c @@ -46,6 +46,13 @@ static inline void sbi_ecall_console_puts(const char *str) sbi_strlen(str), (unsigned long)str, 0, 0, 0, 0); } +static inline void sbi_ecall_shutdown(void) +{ + sbi_ecall(SBI_EXT_SRST, SBI_EXT_SRST_RESET, + SBI_SRST_RESET_TYPE_SHUTDOWN, SBI_SRST_RESET_REASON_NONE, + 0, 0, 0, 0); +} + #define wfi() \ do { \ __asm__ __volatile__("wfi" ::: "memory"); \ @@ -54,7 +61,6 @@ static inline void sbi_ecall_console_puts(const char *str) void test_main(unsigned long a0, unsigned long a1) { sbi_ecall_console_puts("\nTest payload running\n"); - - while (1) - wfi(); + sbi_ecall_shutdown(); + sbi_ecall_console_puts("sbi_ecall_shutdown failed to execute.\n"); }