diff options
| author | kenneth.liu <[email protected]> | 2025-01-24 11:35:19 +0800 |
|---|---|---|
| committer | Meco Man <[email protected]> | 2025-02-22 14:17:54 -0500 |
| commit | 2be83d5cadff3a3b7a3015b90ec138b7d4614627 (patch) | |
| tree | 7a2d6e16e223afbdb5696877139ef65cac3928c1 /libcpu | |
| parent | b3225ec81a298ba76ef8c9c80ece70ec86cfb14e (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.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> |
