From b0a7e4b85301a59f717cb420e3db1006b6fdfb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= Date: Fri, 18 Oct 2024 10:40:05 +0200 Subject: [PATCH] lib: sbi: send a double trap SSE event to supervisor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In case the double trap handler is called and the double trap happened in supervisor mode, send a double trap SSE event. NOTE: this commit depends on the ratification of the new SSE event id for double trap [1]. Link: https://lists.riscv.org/g/tech-prs/message/985 [1] Signed-off-by: Clément Léger Reviewed-by: Samuel Holland --- include/sbi/sbi_ecall_interface.h | 1 + lib/sbi/sbi_double_trap.c | 2 +- lib/sbi/sbi_sse.c | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/sbi/sbi_ecall_interface.h b/include/sbi/sbi_ecall_interface.h index 321039f8..3aa57466 100644 --- a/include/sbi/sbi_ecall_interface.h +++ b/include/sbi/sbi_ecall_interface.h @@ -382,6 +382,7 @@ enum sbi_sse_state { /* SBI SSE Event IDs. */ #define SBI_SSE_EVENT_LOCAL_RAS 0x00000000 +#define SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP 0x00000001 #define SBI_SSE_EVENT_LOCAL_PLAT_0_START 0x00004000 #define SBI_SSE_EVENT_LOCAL_PLAT_0_END 0x00007fff #define SBI_SSE_EVENT_GLOBAL_RAS 0x00008000 diff --git a/lib/sbi/sbi_double_trap.c b/lib/sbi/sbi_double_trap.c index 96f2fa55..bab96fb7 100644 --- a/lib/sbi/sbi_double_trap.c +++ b/lib/sbi/sbi_double_trap.c @@ -26,5 +26,5 @@ int sbi_double_trap_handler(struct sbi_trap_context *tcntx) if (prev_virt) return sbi_trap_redirect(regs, trap); - return SBI_ENOTSUPP; + return sbi_sse_inject_event(SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP); } diff --git a/lib/sbi/sbi_sse.c b/lib/sbi/sbi_sse.c index 94071f99..bf5620e8 100644 --- a/lib/sbi/sbi_sse.c +++ b/lib/sbi/sbi_sse.c @@ -41,6 +41,7 @@ static const uint32_t supported_events[] = { SBI_SSE_EVENT_LOCAL_RAS, + SBI_SSE_EVENT_LOCAL_DOUBLE_TRAP, SBI_SSE_EVENT_GLOBAL_RAS, SBI_SSE_EVENT_LOCAL_PMU, SBI_SSE_EVENT_LOCAL_SOFTWARE,