mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-11 16:00:50 -07:00
target/riscv: Extend PMP region up to 64
According to the RISC-V Privileged Specification (version >1.12), RV32 supports 16 CSRs (pmpcfg0–pmpcfg15) to configure 64 PMP regions (pmpaddr0–pmpaddr63). Signed-off-by: Jay Chang <jay.chang@sifive.com> Reviewed-by: Frank Chang <frank.chang@sifive.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Message-ID: <20250522081236.4050-2-jay.chang@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
cab6b5d8c3
commit
444cffd37b
2 changed files with 182 additions and 2 deletions
|
|
@ -372,6 +372,18 @@
|
|||
#define CSR_PMPCFG1 0x3a1
|
||||
#define CSR_PMPCFG2 0x3a2
|
||||
#define CSR_PMPCFG3 0x3a3
|
||||
#define CSR_PMPCFG4 0x3a4
|
||||
#define CSR_PMPCFG5 0x3a5
|
||||
#define CSR_PMPCFG6 0x3a6
|
||||
#define CSR_PMPCFG7 0x3a7
|
||||
#define CSR_PMPCFG8 0x3a8
|
||||
#define CSR_PMPCFG9 0x3a9
|
||||
#define CSR_PMPCFG10 0x3aa
|
||||
#define CSR_PMPCFG11 0x3ab
|
||||
#define CSR_PMPCFG12 0x3ac
|
||||
#define CSR_PMPCFG13 0x3ad
|
||||
#define CSR_PMPCFG14 0x3ae
|
||||
#define CSR_PMPCFG15 0x3af
|
||||
#define CSR_PMPADDR0 0x3b0
|
||||
#define CSR_PMPADDR1 0x3b1
|
||||
#define CSR_PMPADDR2 0x3b2
|
||||
|
|
@ -388,6 +400,54 @@
|
|||
#define CSR_PMPADDR13 0x3bd
|
||||
#define CSR_PMPADDR14 0x3be
|
||||
#define CSR_PMPADDR15 0x3bf
|
||||
#define CSR_PMPADDR16 0x3c0
|
||||
#define CSR_PMPADDR17 0x3c1
|
||||
#define CSR_PMPADDR18 0x3c2
|
||||
#define CSR_PMPADDR19 0x3c3
|
||||
#define CSR_PMPADDR20 0x3c4
|
||||
#define CSR_PMPADDR21 0x3c5
|
||||
#define CSR_PMPADDR22 0x3c6
|
||||
#define CSR_PMPADDR23 0x3c7
|
||||
#define CSR_PMPADDR24 0x3c8
|
||||
#define CSR_PMPADDR25 0x3c9
|
||||
#define CSR_PMPADDR26 0x3ca
|
||||
#define CSR_PMPADDR27 0x3cb
|
||||
#define CSR_PMPADDR28 0x3cc
|
||||
#define CSR_PMPADDR29 0x3cd
|
||||
#define CSR_PMPADDR30 0x3ce
|
||||
#define CSR_PMPADDR31 0x3cf
|
||||
#define CSR_PMPADDR32 0x3d0
|
||||
#define CSR_PMPADDR33 0x3d1
|
||||
#define CSR_PMPADDR34 0x3d2
|
||||
#define CSR_PMPADDR35 0x3d3
|
||||
#define CSR_PMPADDR36 0x3d4
|
||||
#define CSR_PMPADDR37 0x3d5
|
||||
#define CSR_PMPADDR38 0x3d6
|
||||
#define CSR_PMPADDR39 0x3d7
|
||||
#define CSR_PMPADDR40 0x3d8
|
||||
#define CSR_PMPADDR41 0x3d9
|
||||
#define CSR_PMPADDR42 0x3da
|
||||
#define CSR_PMPADDR43 0x3db
|
||||
#define CSR_PMPADDR44 0x3dc
|
||||
#define CSR_PMPADDR45 0x3dd
|
||||
#define CSR_PMPADDR46 0x3de
|
||||
#define CSR_PMPADDR47 0x3df
|
||||
#define CSR_PMPADDR48 0x3e0
|
||||
#define CSR_PMPADDR49 0x3e1
|
||||
#define CSR_PMPADDR50 0x3e2
|
||||
#define CSR_PMPADDR51 0x3e3
|
||||
#define CSR_PMPADDR52 0x3e4
|
||||
#define CSR_PMPADDR53 0x3e5
|
||||
#define CSR_PMPADDR54 0x3e6
|
||||
#define CSR_PMPADDR55 0x3e7
|
||||
#define CSR_PMPADDR56 0x3e8
|
||||
#define CSR_PMPADDR57 0x3e9
|
||||
#define CSR_PMPADDR58 0x3ea
|
||||
#define CSR_PMPADDR59 0x3eb
|
||||
#define CSR_PMPADDR60 0x3ec
|
||||
#define CSR_PMPADDR61 0x3ed
|
||||
#define CSR_PMPADDR62 0x3ee
|
||||
#define CSR_PMPADDR63 0x3ef
|
||||
|
||||
/* RNMI */
|
||||
#define CSR_MNSCRATCH 0x740
|
||||
|
|
|
|||
|
|
@ -6164,6 +6164,30 @@ riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = {
|
|||
[CSR_PMPCFG1] = { "pmpcfg1", pmp, read_pmpcfg, write_pmpcfg },
|
||||
[CSR_PMPCFG2] = { "pmpcfg2", pmp, read_pmpcfg, write_pmpcfg },
|
||||
[CSR_PMPCFG3] = { "pmpcfg3", pmp, read_pmpcfg, write_pmpcfg },
|
||||
[CSR_PMPCFG4] = { "pmpcfg4", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG5] = { "pmpcfg5", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG6] = { "pmpcfg6", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG7] = { "pmpcfg7", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG8] = { "pmpcfg8", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG9] = { "pmpcfg9", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG10] = { "pmpcfg10", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG11] = { "pmpcfg11", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG12] = { "pmpcfg12", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG13] = { "pmpcfg13", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG14] = { "pmpcfg14", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPCFG15] = { "pmpcfg15", pmp, read_pmpcfg, write_pmpcfg,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR0] = { "pmpaddr0", pmp, read_pmpaddr, write_pmpaddr },
|
||||
[CSR_PMPADDR1] = { "pmpaddr1", pmp, read_pmpaddr, write_pmpaddr },
|
||||
[CSR_PMPADDR2] = { "pmpaddr2", pmp, read_pmpaddr, write_pmpaddr },
|
||||
|
|
@ -6178,8 +6202,104 @@ riscv_csr_operations csr_ops[CSR_TABLE_SIZE] = {
|
|||
[CSR_PMPADDR11] = { "pmpaddr11", pmp, read_pmpaddr, write_pmpaddr },
|
||||
[CSR_PMPADDR12] = { "pmpaddr12", pmp, read_pmpaddr, write_pmpaddr },
|
||||
[CSR_PMPADDR13] = { "pmpaddr13", pmp, read_pmpaddr, write_pmpaddr },
|
||||
[CSR_PMPADDR14] = { "pmpaddr14", pmp, read_pmpaddr, write_pmpaddr },
|
||||
[CSR_PMPADDR15] = { "pmpaddr15", pmp, read_pmpaddr, write_pmpaddr },
|
||||
[CSR_PMPADDR14] = { "pmpaddr14", pmp, read_pmpaddr, write_pmpaddr },
|
||||
[CSR_PMPADDR15] = { "pmpaddr15", pmp, read_pmpaddr, write_pmpaddr },
|
||||
[CSR_PMPADDR16] = { "pmpaddr16", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR17] = { "pmpaddr17", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR18] = { "pmpaddr18", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR19] = { "pmpaddr19", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR20] = { "pmpaddr20", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR21] = { "pmpaddr21", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR22] = { "pmpaddr22", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR23] = { "pmpaddr23", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR24] = { "pmpaddr24", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR25] = { "pmpaddr25", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR26] = { "pmpaddr26", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR27] = { "pmpaddr27", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR28] = { "pmpaddr28", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR29] = { "pmpaddr29", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR30] = { "pmpaddr30", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR31] = { "pmpaddr31", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR32] = { "pmpaddr32", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR33] = { "pmpaddr33", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR34] = { "pmpaddr34", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR35] = { "pmpaddr35", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR36] = { "pmpaddr36", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR37] = { "pmpaddr37", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR38] = { "pmpaddr38", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR39] = { "pmpaddr39", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR40] = { "pmpaddr40", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR41] = { "pmpaddr41", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR42] = { "pmpaddr42", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR43] = { "pmpaddr43", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR44] = { "pmpaddr44", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR45] = { "pmpaddr45", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR46] = { "pmpaddr46", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR47] = { "pmpaddr47", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR48] = { "pmpaddr48", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR49] = { "pmpaddr49", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR50] = { "pmpaddr50", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR51] = { "pmpaddr51", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR52] = { "pmpaddr52", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR53] = { "pmpaddr53", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR54] = { "pmpaddr54", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR55] = { "pmpaddr55", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR56] = { "pmpaddr56", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR57] = { "pmpaddr57", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR58] = { "pmpaddr58", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR59] = { "pmpaddr59", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR60] = { "pmpaddr60", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR61] = { "pmpaddr61", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR62] = { "pmpaddr62", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
[CSR_PMPADDR63] = { "pmpaddr63", pmp, read_pmpaddr, write_pmpaddr,
|
||||
.min_priv_ver = PRIV_VERSION_1_12_0 },
|
||||
|
||||
/* Debug CSRs */
|
||||
[CSR_TSELECT] = { "tselect", debug, read_tselect, write_tselect },
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue