On Mon, Apr 21, 2025 at 7:48 PM Jay Chang <jay.ch...@sifive.com> wrote: > > According to the RISC-V Privileged Specification (version >1.12), > RV32 supports 16 CSRs (pmpcfg0–pmpcfg15) to configure 64 PMP regions > (pmpaddr0–pmpaddr63). > > Reviewed-by: Frank Chang <frank.ch...@sifive.com> > Signed-off-by: Jay Chang <jay.ch...@sifive.com>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > target/riscv/cpu_bits.h | 60 +++++++++++++++++++ > target/riscv/csr.c | 124 +++++++++++++++++++++++++++++++++++++++- > 2 files changed, 182 insertions(+), 2 deletions(-) > > diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h > index a30317c617..e6b3e28386 100644 > --- a/target/riscv/cpu_bits.h > +++ b/target/riscv/cpu_bits.h > @@ -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 > diff --git a/target/riscv/csr.c b/target/riscv/csr.c > index 7948188356..f8f61ffff5 100644 > --- a/target/riscv/csr.c > +++ b/target/riscv/csr.c > @@ -6088,6 +6088,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 }, > @@ -6102,8 +6126,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 }, > -- > 2.48.1 > >