summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkenneth.liu <[email protected]>2025-01-24 11:35:19 +0800
committerRbb666 <[email protected]>2025-03-10 22:44:46 +0800
commitfa75f38e1c131be2f86413375c9cd1ba2baef5ef (patch)
treec2a5046895eed5316d7817f8a3b1c435d9fe90bc
parent349b22450a2305ec396207aaf129aeba6ff5e0e5 (diff)
libcpu: riscv: fixed ARCH_RISCV_VECTOR issue
description: Using the vector instruction set to trigger an illegal instruction exception when ARCH_SISCV_VECTOR=y. analysis: When initializing the thread stack, the rt_cw_stack_init function did not enable VS for SSTATUS. Solution: When ARCH_SISCV_VECTOR=y, increment the initial value of sstatus by 0x600(SSTATUS_VS). Signed-off-by: Liu Gui <[email protected]>
-rw-r--r--libcpu/risc-v/common64/cpuport.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/libcpu/risc-v/common64/cpuport.c b/libcpu/risc-v/common64/cpuport.c
index be154198df..76ae7d3827 100644
--- a/libcpu/risc-v/common64/cpuport.c
+++ b/libcpu/risc-v/common64/cpuport.c
@@ -19,9 +19,15 @@
#include <encoding.h>
#ifdef ARCH_RISCV_FPU
- #define K_SSTATUS_DEFAULT (SSTATUS_SPP | SSTATUS_SPIE | SSTATUS_SUM | SSTATUS_FS)
+ #define K_SSTATUS_DEFAULT_BASE (SSTATUS_SPP | SSTATUS_SPIE | SSTATUS_SUM | SSTATUS_FS)
#else
- #define K_SSTATUS_DEFAULT (SSTATUS_SPP | SSTATUS_SPIE | SSTATUS_SUM)
+ #define K_SSTATUS_DEFAULT_BASE (SSTATUS_SPP | SSTATUS_SPIE | SSTATUS_SUM)
+#endif
+
+#ifdef ARCH_RISCV_VECTOR
+ #define K_SSTATUS_DEFAULT (K_SSTATUS_DEFAULT_BASE | SSTATUS_VS)
+#else
+ #define K_SSTATUS_DEFAULT K_SSTATUS_DEFAULT_BASE
#endif
#ifdef RT_USING_SMART
#include <lwp_arch.h>