diff options
| author | kenneth.liu <[email protected]> | 2025-01-24 11:35:19 +0800 |
|---|---|---|
| committer | Rbb666 <[email protected]> | 2025-03-10 22:44:46 +0800 |
| commit | fa75f38e1c131be2f86413375c9cd1ba2baef5ef (patch) | |
| tree | c2a5046895eed5316d7817f8a3b1c435d9fe90bc | |
| parent | 349b22450a2305ec396207aaf129aeba6ff5e0e5 (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.c | 10 |
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> |
