On Sat, May 16, 2026 at 4:02 AM Anton Johansson via qemu development <[email protected]> wrote: > > pmp.h is only needed and included for system mode, however relevant > macros (MAX_RISCV_PMPS, OLD_MAX_RISCV_PMPS, MIN_RISCV_PMP_GRANULARITY) > are required unconditionally by cpu.c, and so are defined in cpu.h. > pmp.h then defines pmp_table_t depending on these macros and so requires > cpu.h, and cpu.h in turn uses pmp_table_t resulting in circular > inclusion. > > Move PMP macros to pmp.h and only exose PMP properties in system mode. > > Signed-off-by: Anton Johansson <[email protected]>
Reviewed-by: Alistair Francis <[email protected]> Alistair > --- > target/riscv/cpu.h | 4 ---- > target/riscv/pmp.h | 4 +++- > target/riscv/cpu.c | 6 ++++++ > 3 files changed, 9 insertions(+), 5 deletions(-) > > diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h > index ad5d23ee6b..4bd24c15c5 100644 > --- a/target/riscv/cpu.h > +++ b/target/riscv/cpu.h > @@ -180,10 +180,6 @@ extern RISCVCPUImpliedExtsRule > *riscv_multi_ext_implied_rules[]; > > #define MMU_USER_IDX 3 > > -#define MAX_RISCV_PMPS (64) > -#define OLD_MAX_RISCV_PMPS (16) > -#define MIN_RISCV_PMP_GRANULARITY 4 > - > #if !defined(CONFIG_USER_ONLY) > #include "pmp.h" > #endif > diff --git a/target/riscv/pmp.h b/target/riscv/pmp.h > index eae305ac6f..4c95c2767a 100644 > --- a/target/riscv/pmp.h > +++ b/target/riscv/pmp.h > @@ -22,7 +22,9 @@ > #ifndef RISCV_PMP_H > #define RISCV_PMP_H > > -#include "cpu.h" > +#define MAX_RISCV_PMPS (64) > +#define OLD_MAX_RISCV_PMPS (16) > +#define MIN_RISCV_PMP_GRANULARITY 4 > > typedef enum { > PMP_READ = 1 << 0, > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c > index 753f92307f..36f9570f2d 100644 > --- a/target/riscv/cpu.c > +++ b/target/riscv/cpu.c > @@ -1127,7 +1127,9 @@ static void riscv_cpu_init(Object *obj) > cpu->cfg.cbop_blocksize = 64; > cpu->cfg.cboz_blocksize = 64; > cpu->cfg.pmp_regions = 16; > +#ifndef CONFIG_USER_ONLY > cpu->cfg.pmp_granularity = MIN_RISCV_PMP_GRANULARITY; > +#endif > cpu->env.vext_ver = VEXT_VERSION_1_00_0; > cpu->cfg.max_satp_mode = -1; > > @@ -1550,6 +1552,7 @@ static const PropertyInfo prop_mmu = { > .set = prop_mmu_set, > }; > > +#ifndef CONFIG_USER_ONLY > static void prop_pmp_set(Object *obj, Visitor *v, const char *name, > void *opaque, Error **errp) > { > @@ -1658,6 +1661,7 @@ static const PropertyInfo prop_pmp_granularity = { > .get = prop_pmp_granularity_get, > .set = prop_pmp_granularity_set, > }; > +#endif /* !CONFIG_USER_ONLY */ > > static int priv_spec_from_str(const char *priv_spec_str) > { > @@ -2666,9 +2670,11 @@ static const Property riscv_cpu_properties[] = { > {.name = "pmu-num", .info = &prop_pmu_num}, /* Deprecated */ > > {.name = "mmu", .info = &prop_mmu}, > +#ifndef CONFIG_USER_ONLY > {.name = "pmp", .info = &prop_pmp}, > {.name = "num-pmp-regions", .info = &prop_num_pmp_regions}, > {.name = "pmp-granularity", .info = &prop_pmp_granularity}, > +#endif > > {.name = "priv_spec", .info = &prop_priv_spec}, > {.name = "vext_spec", .info = &prop_vext_spec}, > -- > 2.52.0 > >
