On Tue, Dec 31, 2024 at 1:28 PM <[email protected]> wrote: > > From: Tommy Wu <[email protected]> > > The Smrnmi extension adds the 'mnscratch', 'mnepc', 'mncause', > 'mnstatus' CSRs. > > Signed-off-by: Frank Chang <[email protected]> > Signed-off-by: Tommy Wu <[email protected]> > Reviewed-by: Alistair Francis <[email protected]> > --- > target/riscv/cpu.c | 5 +++ > target/riscv/cpu.h | 7 ++++ > target/riscv/cpu_bits.h | 11 ++++++ > target/riscv/csr.c | 82 +++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 105 insertions(+) > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c > index 58bb5196a8..c5d5c2f7df 100644 > --- a/target/riscv/cpu.c > +++ b/target/riscv/cpu.c > @@ -1127,6 +1127,11 @@ static void riscv_cpu_reset_hold(Object *obj, > ResetType type) > riscv_trigger_reset_hold(env); > } > > + if (cpu->cfg.ext_smrnmi) { > + env->rnmip = 0; > + env->mnstatus = set_field(env->mnstatus, MNSTATUS_NMIE, false); > + } > + > if (kvm_enabled()) { > kvm_riscv_reset_vcpu(cpu); > } > diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h > index 284b112821..a2cb471b3c 100644 > --- a/target/riscv/cpu.h > +++ b/target/riscv/cpu.h > @@ -486,6 +486,13 @@ struct CPUArchState { > uint64_t kvm_timer_state; > uint64_t kvm_timer_frequency; > #endif /* CONFIG_KVM */ > + > + /* RNMI */ > + target_ulong mnscratch; > + target_ulong mnepc; > + target_ulong mncause; /* mncause without bit XLEN-1 set to 1 */ > + target_ulong mnstatus; > + target_ulong rnmip;
These have been added to the wrong part of the struct, they should be above the comment /* Fields from here on are preserved across CPU reset. */ Can you fix this up please? Alistair
