From 4a9c43e10315ed6276165deffac6f7efeee894f3 Mon Sep 17 00:00:00 2001 From: Alvin Chang Date: Wed, 24 Jul 2024 23:24:19 +0800 Subject: [PATCH] core: riscv: Let platform choose native and foreign interrupts Platform may want to choose different types of native and foreign interrupts. This commit adds two definitions for the platforms: 1. PLAT_THREAD_EXCP_FOREIGN_INTR: to define platform specific foreign interrupts 2. PLAT_THREAD_EXCP_NATIVE_INTR: to define platform specific native interrupts. For RISC-V virt machine, we define external/timer/software interrupts as foreign interrupts. Signed-off-by: Alvin Chang --- core/arch/riscv/include/kernel/thread_arch.h | 35 +++++++++++--------- core/arch/riscv/plat-virt/platform_config.h | 5 +++ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/core/arch/riscv/include/kernel/thread_arch.h b/core/arch/riscv/include/kernel/thread_arch.h index 5e2f100f359..849a136b346 100644 --- a/core/arch/riscv/include/kernel/thread_arch.h +++ b/core/arch/riscv/include/kernel/thread_arch.h @@ -8,14 +8,33 @@ #ifndef __ASSEMBLER__ #include -#include #include #endif +#include +#include + +#ifdef PLAT_THREAD_EXCP_FOREIGN_INTR +#define THREAD_EXCP_FOREIGN_INTR PLAT_THREAD_EXCP_FOREIGN_INTR +#else +#define THREAD_EXCP_FOREIGN_INTR (CSR_XIE_EIE) +#endif + +#ifdef PLAT_THREAD_EXCP_NATIVE_INTR +#define THREAD_EXCP_NATIVE_INTR PLAT_THREAD_EXCP_NATIVE_INTR +#else +#define THREAD_EXCP_NATIVE_INTR (CSR_XIE_SIE | CSR_XIE_TIE) +#endif + +#define THREAD_EXCP_ALL (THREAD_EXCP_FOREIGN_INTR |\ + THREAD_EXCP_NATIVE_INTR) + #ifndef __ASSEMBLER__ #define THREAD_CORE_LOCAL_ALIGNED __aligned(16) +struct mobj; + struct thread_pauth_keys { }; @@ -154,20 +173,6 @@ struct thread_ctx_regs { struct user_mode_ctx; -/* - * These flags should vary according to the privilege mode selected - * to run OP-TEE core on (M/HS/S). For now default to S-Mode. - */ - -#define CSR_XIE_SIE BIT64(IRQ_XSOFT) -#define CSR_XIE_TIE BIT64(IRQ_XTIMER) -#define CSR_XIE_EIE BIT64(IRQ_XEXT) - -#define THREAD_EXCP_FOREIGN_INTR CSR_XIE_EIE -#define THREAD_EXCP_NATIVE_INTR (CSR_XIE_SIE | CSR_XIE_TIE) -#define THREAD_EXCP_ALL (THREAD_EXCP_FOREIGN_INTR |\ - THREAD_EXCP_NATIVE_INTR) - #ifdef CFG_WITH_VFP uint32_t thread_kernel_enable_vfp(void); void thread_kernel_disable_vfp(uint32_t state); diff --git a/core/arch/riscv/plat-virt/platform_config.h b/core/arch/riscv/plat-virt/platform_config.h index 064cca29cf2..6abfceb8583 100644 --- a/core/arch/riscv/plat-virt/platform_config.h +++ b/core/arch/riscv/plat-virt/platform_config.h @@ -9,6 +9,7 @@ #define PLATFORM_CONFIG_H #include +#include /* The stack pointer is always kept 16-byte aligned */ #define STACK_ALIGNMENT 16 @@ -92,4 +93,8 @@ #define RISCV_MTIME_RATE 1000000 #endif +#define PLAT_THREAD_EXCP_FOREIGN_INTR \ + (CSR_XIE_SIE | CSR_XIE_TIE | CSR_XIE_EIE) +#define PLAT_THREAD_EXCP_NATIVE_INTR (0) + #endif /*PLATFORM_CONFIG_H*/