Message ID | 20230216215550.1011637-5-dbarboza@ventanamicro.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | make write_misa a no-op and FEATURE_* cleanups | expand |
On 2023/2/17 5:55, Daniel Henrique Barboza wrote: > Instead of silently ignoring the EPMP setting if there is no PMP > available, error out informing the user that EPMP depends on PMP > support: > > $ ./qemu-system-riscv64 -cpu rv64,pmp=false,x-epmp=true > qemu-system-riscv64: Invalid configuration: EPMP requires PMP support > > This will force users to pick saner options in the QEMU command line. > > Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> > Reviewed-by: Weiwei Li <liweiwei@iscas.ac.cn> > Reviewed-by: Bin Meng <bmeng@tinylab.org> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > target/riscv/cpu.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c > index e34a5e3f11..4585ca74dc 100644 > --- a/target/riscv/cpu.c > +++ b/target/riscv/cpu.c > @@ -925,13 +925,18 @@ static void riscv_cpu_realize(DeviceState *dev, Error **errp) > > if (cpu->cfg.pmp) { > riscv_set_feature(env, RISCV_FEATURE_PMP); > + } > + > + if (cpu->cfg.epmp) { > + riscv_set_feature(env, RISCV_FEATURE_EPMP); > > /* > * Enhanced PMP should only be available > * on harts with PMP support > */ > - if (cpu->cfg.epmp) { > - riscv_set_feature(env, RISCV_FEATURE_EPMP); > + if (!cpu->cfg.pmp) { > + error_setg(errp, "Invalid configuration: EPMP requires PMP support"); > + return; Reviewed-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com> Zhiwei > } > } >
diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index e34a5e3f11..4585ca74dc 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -925,13 +925,18 @@ static void riscv_cpu_realize(DeviceState *dev, Error **errp) if (cpu->cfg.pmp) { riscv_set_feature(env, RISCV_FEATURE_PMP); + } + + if (cpu->cfg.epmp) { + riscv_set_feature(env, RISCV_FEATURE_EPMP); /* * Enhanced PMP should only be available * on harts with PMP support */ - if (cpu->cfg.epmp) { - riscv_set_feature(env, RISCV_FEATURE_EPMP); + if (!cpu->cfg.pmp) { + error_setg(errp, "Invalid configuration: EPMP requires PMP support"); + return; } }