mirror of
https://github.com/lowRISC/ibex.git
synced 2025-04-20 11:57:12 -04:00
[dv] Write ePMP tests and enable ePMP in DV
- Enable epmp in riscv_core_settings.sv - Bump CI and Spike version in `ci/vars.yml` - Enable full random PMP test - Create tests for machine mode lockdown (MML) - Code execute only, rest read/write - All regions execute only - All regions read only - Create test for machine mode whitelist policy (MMWP) - Create test for rule lock bypass (RLB) Signed-off-by: Marno van der Maas <mvdmaas+git@lowrisc.org>
This commit is contained in:
parent
b98efe7cbe
commit
ef86c30341
3 changed files with 175 additions and 21 deletions
|
@ -7,10 +7,10 @@
|
|||
# end up as float otherwise).
|
||||
variables:
|
||||
VERILATOR_VERSION: "4.104"
|
||||
IBEX_COSIM_VERSION: "0.2"
|
||||
IBEX_COSIM_VERSION: "0.3"
|
||||
RISCV_TOOLCHAIN_TAR_VERSION: "20220210-1"
|
||||
RISCV_TOOLCHAIN_TAR_VARIANT: "lowrisc-toolchain-gcc-rv32imcb"
|
||||
RISCV_COMPLIANCE_GIT_VERSION: "844c6660ef3f0d9b96957991109dfd80cc4938e2"
|
||||
VERIBLE_VERSION: "v0.0-2135-gb534c1fe"
|
||||
# lowRISC-internal version numbers of Ibex-specific Spike builds.
|
||||
SPIKE_IBEX_VERSION: "20220308-git-20a886cba76dd80a23b548743ab3c73b19f65e41"
|
||||
SPIKE_IBEX_VERSION: "20220516-git-9af9730baf7b956c3072c1b436d867aca5ef8f4c"
|
||||
|
|
|
@ -66,7 +66,7 @@ int max_interrupt_vector_num = 32;
|
|||
bit support_pmp = 1;
|
||||
|
||||
// Enhanced physical memory protection support
|
||||
bit support_epmp = 0;
|
||||
bit support_epmp = 1;
|
||||
|
||||
// Debug mode support
|
||||
bit support_debug_mode = 1;
|
||||
|
|
|
@ -678,6 +678,7 @@
|
|||
+set_mstatus_mprv=1
|
||||
+pmp_max_offset=00024000
|
||||
+enable_write_pmp_csr=1
|
||||
+mseccfg=MML:0,MMWP:0,RLB:0
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
@ -710,6 +711,7 @@
|
|||
+pmp_region_14=X:0,W:0,R:0
|
||||
+pmp_region_15=X:0,W:0,R:0
|
||||
+enable_write_pmp_csr=1
|
||||
+mseccfg=MML:0,MMWP:0,RLB:0
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
@ -727,28 +729,180 @@
|
|||
+pmp_max_offset=00024000
|
||||
+enable_write_pmp_csr=1
|
||||
+directed_instr_0=riscv_load_store_rand_addr_instr_stream,50
|
||||
+mseccfg=MML:0,MMWP:0,RLB:0
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
||||
# TODO(udinator) this test is failing with arbitrary timeouts, need to fix this.
|
||||
#- test: riscv_pmp_full_random_test
|
||||
# desc: >
|
||||
# Completely randomize the boot mode, mstatus.mprv, and all PMP configuration,
|
||||
# and allow PMP regions to overlap.
|
||||
# A large number of iterations will be required since this introduces a huge
|
||||
# state space of configurations.
|
||||
# iterations: 100
|
||||
# gen_test: riscv_rand_instr_test
|
||||
# gen_opts: >
|
||||
# +instr_cnt=6000
|
||||
# +pmp_max_offset=00024000
|
||||
# +pmp_randomize=1
|
||||
# +pmp_allow_addr_overlap=1
|
||||
# +enable_write_pmp_csr=1
|
||||
# rtl_test: core_ibex_base_test
|
||||
# rtl_params:
|
||||
# PMPEnable: 1
|
||||
- test: riscv_pmp_full_random_test
|
||||
desc: >
|
||||
Completely randomize the boot mode, mstatus.mprv, and all PMP configuration,
|
||||
and allow PMP regions to overlap.
|
||||
A large number of iterations will be required since this introduces a huge
|
||||
state space of configurations.
|
||||
iterations: 100
|
||||
gen_test: riscv_rand_instr_test
|
||||
gen_opts: >
|
||||
+instr_cnt=6000
|
||||
+pmp_max_offset=00024000
|
||||
+set_mstatus_mprv=1
|
||||
+pmp_randomize=1
|
||||
+pmp_allow_addr_overlap=1
|
||||
+enable_write_pmp_csr=1
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
||||
- test: riscv_epmp_mml_test
|
||||
desc: >
|
||||
An enhanced PMP machine mode lockdown test - initialization and main
|
||||
regions are set to execute only in both M and U modes. All other regions
|
||||
are set to read/write only. Exceptions when reading/writing code or
|
||||
executing data. Randomize mstatus.mprv.
|
||||
iterations: 3
|
||||
gen_test: riscv_rand_instr_test
|
||||
gen_opts: >
|
||||
+instr_cnt=6000
|
||||
+set_mstatus_mprv=1
|
||||
+pmp_max_offset=00024000
|
||||
+pmp_region_0=L:1,X:0,W:1,R:0
|
||||
+pmp_region_1=L:1,X:0,W:1,R:0
|
||||
+pmp_region_2=L:0,X:1,W:1,R:0
|
||||
+pmp_region_3=L:0,X:1,W:1,R:0
|
||||
+pmp_region_4=L:0,X:1,W:1,R:0
|
||||
+pmp_region_5=L:0,X:1,W:1,R:0
|
||||
+pmp_region_6=L:0,X:1,W:1,R:0
|
||||
+pmp_region_7=L:0,X:1,W:1,R:0
|
||||
+pmp_region_8=L:0,X:1,W:1,R:0
|
||||
+pmp_region_9=L:0,X:1,W:1,R:0
|
||||
+pmp_region_10=L:0,X:1,W:1,R:0
|
||||
+pmp_region_11=L:0,X:1,W:1,R:0
|
||||
+pmp_region_12=L:0,X:1,W:1,R:0
|
||||
+pmp_region_13=L:0,X:1,W:1,R:0
|
||||
+pmp_region_14=L:0,X:1,W:1,R:0
|
||||
+pmp_region_15=L:0,X:1,W:1,R:0
|
||||
+enable_write_pmp_csr=1
|
||||
+mseccfg=MML:1,MMWP:0,RLB:0
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
||||
- test: riscv_epmp_mml_execute_only_test
|
||||
desc: >
|
||||
An enhanced PMP machine mode lockdown test - all PMP regions are set to
|
||||
execute only. Exception is expected on any store or load. Randomize
|
||||
mstatus.mprv.
|
||||
iterations: 3
|
||||
gen_test: riscv_rand_instr_test
|
||||
gen_opts: >
|
||||
+instr_cnt=6000
|
||||
+set_mstatus_mprv=1
|
||||
+pmp_max_offset=00024000
|
||||
+pmp_region_0=L:1,X:0,W:1,R:0
|
||||
+pmp_region_1=L:1,X:0,W:1,R:0
|
||||
+pmp_region_2=L:1,X:0,W:1,R:0
|
||||
+pmp_region_3=L:1,X:0,W:1,R:0
|
||||
+pmp_region_4=L:1,X:0,W:1,R:0
|
||||
+pmp_region_5=L:1,X:0,W:1,R:0
|
||||
+pmp_region_6=L:1,X:0,W:1,R:0
|
||||
+pmp_region_7=L:1,X:0,W:1,R:0
|
||||
+pmp_region_8=L:1,X:0,W:1,R:0
|
||||
+pmp_region_9=L:1,X:0,W:1,R:0
|
||||
+pmp_region_10=L:1,X:0,W:1,R:0
|
||||
+pmp_region_11=L:1,X:0,W:1,R:0
|
||||
+pmp_region_12=L:1,X:0,W:1,R:0
|
||||
+pmp_region_13=L:1,X:0,W:1,R:0
|
||||
+pmp_region_14=L:1,X:0,W:1,R:0
|
||||
+pmp_region_15=L:1,X:0,W:1,R:0
|
||||
+enable_write_pmp_csr=1
|
||||
+mseccfg=MML:1,MMWP:0,RLB:0
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
||||
- test: riscv_epmp_mml_read_only_test
|
||||
desc: >
|
||||
An enhanced PMP machine mode lockdown test - all PMP regions are set to
|
||||
shared read only. Exception is expected right after enabling MML. Randomize
|
||||
mstatus.mprv.
|
||||
iterations: 3
|
||||
gen_test: riscv_rand_instr_test
|
||||
gen_opts: >
|
||||
+instr_cnt=6000
|
||||
+set_mstatus_mprv=1
|
||||
+pmp_max_offset=00024000
|
||||
+pmp_region_0=L:1,X:1,W:1,R:1
|
||||
+pmp_region_1=L:1,X:1,W:1,R:1
|
||||
+pmp_region_2=L:1,X:1,W:1,R:1
|
||||
+pmp_region_3=L:1,X:1,W:1,R:1
|
||||
+pmp_region_4=L:1,X:1,W:1,R:1
|
||||
+pmp_region_5=L:1,X:1,W:1,R:1
|
||||
+pmp_region_6=L:1,X:1,W:1,R:1
|
||||
+pmp_region_7=L:1,X:1,W:1,R:1
|
||||
+pmp_region_8=L:1,X:1,W:1,R:1
|
||||
+pmp_region_9=L:1,X:1,W:1,R:1
|
||||
+pmp_region_10=L:1,X:1,W:1,R:1
|
||||
+pmp_region_11=L:1,X:1,W:1,R:1
|
||||
+pmp_region_12=L:1,X:1,W:1,R:1
|
||||
+pmp_region_13=L:1,X:1,W:1,R:1
|
||||
+pmp_region_14=L:1,X:1,W:1,R:1
|
||||
+pmp_region_15=L:1,X:1,W:1,R:1
|
||||
+enable_write_pmp_csr=1
|
||||
+mseccfg=MML:1,MMWP:0,RLB:0
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
||||
- test: riscv_epmp_mmwp_test
|
||||
desc: >
|
||||
An enhanced PMP machine mode whitelist policy - all PMP regions will be
|
||||
configured to default setting, enabling all forms of accesses, expect that
|
||||
an exception when machine mode access memory not in PMP. Randomize
|
||||
mstatus.mprv.
|
||||
iterations: 3
|
||||
gen_test: riscv_rand_instr_test
|
||||
gen_opts: >
|
||||
+instr_cnt=6000
|
||||
+set_mstatus_mprv=1
|
||||
+pmp_max_offset=00024000
|
||||
+enable_write_pmp_csr=1
|
||||
+mseccfg=MML:0,MMWP:1,RLB:0
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
||||
- test: riscv_epmp_rlb_test
|
||||
desc: >
|
||||
An enhanced PMP rule lock bypass - all PMP regions are locked and enable
|
||||
all forms of accesses, expect that no exception will be thrown even when
|
||||
trying to change locked entries. Randomize mstatus.mprv.
|
||||
iterations: 3
|
||||
gen_test: riscv_rand_instr_test
|
||||
gen_opts: >
|
||||
+instr_cnt=6000
|
||||
+set_mstatus_mprv=1
|
||||
+pmp_max_offset=00024000
|
||||
+pmp_region_0=L:1,X:1,W:1,R:1
|
||||
+pmp_region_1=L:1,X:1,W:1,R:1
|
||||
+pmp_region_2=L:1,X:1,W:1,R:1
|
||||
+pmp_region_3=L:1,X:1,W:1,R:1
|
||||
+pmp_region_4=L:1,X:1,W:1,R:1
|
||||
+pmp_region_5=L:1,X:1,W:1,R:1
|
||||
+pmp_region_6=L:1,X:1,W:1,R:1
|
||||
+pmp_region_7=L:1,X:1,W:1,R:1
|
||||
+pmp_region_8=L:1,X:1,W:1,R:1
|
||||
+pmp_region_9=L:1,X:1,W:1,R:1
|
||||
+pmp_region_10=L:1,X:1,W:1,R:1
|
||||
+pmp_region_11=L:1,X:1,W:1,R:1
|
||||
+pmp_region_12=L:1,X:1,W:1,R:1
|
||||
+pmp_region_13=L:1,X:1,W:1,R:1
|
||||
+pmp_region_14=L:1,X:1,W:1,R:1
|
||||
+pmp_region_15=L:1,X:1,W:1,R:1
|
||||
+enable_write_pmp_csr=1
|
||||
+mseccfg=MML:0,MMWP:0,RLB:1
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
||||
# Disable cosim for bitmanip tests for now as Ibex implements a different
|
||||
# version of the spec compared to the Spike version used for the cosim.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue