summaryrefslogtreecommitdiff
path: root/libcpu
diff options
context:
space:
mode:
authorkenneth.liu <[email protected]>2025-01-24 11:35:19 +0800
committerMeco Man <[email protected]>2025-02-22 14:17:54 -0500
commit2be83d5cadff3a3b7a3015b90ec138b7d4614627 (patch)
tree7a2d6e16e223afbdb5696877139ef65cac3928c1 /libcpu
parentb3225ec81a298ba76ef8c9c80ece70ec86cfb14e (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]>
Diffstat (limited to 'libcpu')
-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>