summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshuta.lst <[email protected]>2026-04-07 14:03:24 +0800
committershuta.lst <[email protected]>2026-04-07 14:03:24 +0800
commitdfafc96149630f2a098559aecf69fa49b9565d22 (patch)
treee3743383ab94cb5906a6cf6485f78df9cc144929
parent2f1fc5291827ee1b4279237646a2bc808a299896 (diff)
RISC-V64 qemu_virt example support RVV Extension;
-rw-r--r--ports/risc-v64/gnu/example_build/qemu_virt/csr.h1
-rw-r--r--ports/risc-v64/gnu/example_build/qemu_virt/demo_threadx.c5
-rw-r--r--ports/risc-v64/gnu/example_build/qemu_virt/entry.s4
-rw-r--r--ports/risc-v64/gnu/example_build/qemu_virt/link.lds3
-rw-r--r--ports/risc-v64/gnu/example_build/qemu_virt/tx_initialize_low_level.S11
5 files changed, 24 insertions, 0 deletions
diff --git a/ports/risc-v64/gnu/example_build/qemu_virt/csr.h b/ports/risc-v64/gnu/example_build/qemu_virt/csr.h
index 4e222375..6d35a07f 100644
--- a/ports/risc-v64/gnu/example_build/qemu_virt/csr.h
+++ b/ports/risc-v64/gnu/example_build/qemu_virt/csr.h
@@ -21,6 +21,7 @@
#define MSTATUS_MIE (1L << 3) // machine-mode interrupt enable.
#define MSTATUS_MPIE (1L << 7)
#define MSTATUS_FS (1L << 13)
+#define MSTATUS_VS (1L << 9)
// Machine-mode Interrupt Enable
#define MIE_MTIE (1L << 7)
diff --git a/ports/risc-v64/gnu/example_build/qemu_virt/demo_threadx.c b/ports/risc-v64/gnu/example_build/qemu_virt/demo_threadx.c
index aff197db..4a7e8b9b 100644
--- a/ports/risc-v64/gnu/example_build/qemu_virt/demo_threadx.c
+++ b/ports/risc-v64/gnu/example_build/qemu_virt/demo_threadx.c
@@ -4,8 +4,13 @@
#include "tx_api.h"
#include "uart.h"
+#if defined(__riscv_vector)
+#define DEMO_STACK_SIZE (1024 + 16448) /* 16448 for RVV Extension */
+#define DEMO_BYTE_POOL_SIZE (9180 + 148032) /* 148032 for RVV Extension */
+#else
#define DEMO_STACK_SIZE 1024
#define DEMO_BYTE_POOL_SIZE 9180
+#endif
#define DEMO_BLOCK_POOL_SIZE 100
#define DEMO_QUEUE_SIZE 100
diff --git a/ports/risc-v64/gnu/example_build/qemu_virt/entry.s b/ports/risc-v64/gnu/example_build/qemu_virt/entry.s
index 9b202ca1..791d08eb 100644
--- a/ports/risc-v64/gnu/example_build/qemu_virt/entry.s
+++ b/ports/risc-v64/gnu/example_build/qemu_virt/entry.s
@@ -41,7 +41,11 @@ _start:
li x30, 0
li x31, 0
la t0, _sysstack_start
+#ifdef __riscv_vector
+ li t1, 0x5000
+#else
li t1, 0x1000
+#endif
add sp, t0, t1
la t0, _bss_start
la t1, _bss_end
diff --git a/ports/risc-v64/gnu/example_build/qemu_virt/link.lds b/ports/risc-v64/gnu/example_build/qemu_virt/link.lds
index b2d0d2df..42544da1 100644
--- a/ports/risc-v64/gnu/example_build/qemu_virt/link.lds
+++ b/ports/risc-v64/gnu/example_build/qemu_virt/link.lds
@@ -42,6 +42,9 @@ SECTIONS
. = ALIGN(4096);
_sysstack_start = .;
. += 0x1000;
+#ifdef __riscv_vector
+ . += 0x4000;
+#endif
_sysstack_end = .;
}
diff --git a/ports/risc-v64/gnu/example_build/qemu_virt/tx_initialize_low_level.S b/ports/risc-v64/gnu/example_build/qemu_virt/tx_initialize_low_level.S
index 3c4a00af..e58f8034 100644
--- a/ports/risc-v64/gnu/example_build/qemu_virt/tx_initialize_low_level.S
+++ b/ports/risc-v64/gnu/example_build/qemu_virt/tx_initialize_low_level.S
@@ -70,6 +70,13 @@
#else
addi sp, sp, -256 // Allocate space for all registers - without floating point enabled (32*8)
#endif
+#if defined(__riscv_vector)
+ /* Allocate space for vector registers */
+ csrr t4, vlenb
+ slli t4, t4, 5
+ addi t4, t4, 4*8
+ sub sp, sp, t4
+#endif
sd x1, 224(sp) // Store RA (28*8 = 224, because call will override ra [ra is a callee register in riscv])
@@ -154,6 +161,10 @@ _tx_initialize_low_level:
csrrs zero, mstatus, t0 // set MSTATUS_FS bit to open f/d isa in riscv
fscsr x0
#endif
+#ifdef __riscv_vector
+ li t0, MSTATUS_VS
+ csrrs zero, mstatus, t0 // set MSTATUS_VS bit to open vector isa in riscv
+#endif
addi sp, sp, -8
sd ra, 0(sp)
call board_init