From 180c10fe4278b6ec1bc0492345623e42dfe03959 Mon Sep 17 00:00:00 2001 From: Chih-Min Chao Date: Tue, 30 Sep 2025 00:45:24 -0700 Subject: [PATCH] csr: fix mseccfg for rv32 Signed-off-by: Chih-Min Chao --- riscv/csr_init.cc | 9 ++++++++- riscv/processor.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/riscv/csr_init.cc b/riscv/csr_init.cc index 24ff498d..24889a91 100644 --- a/riscv/csr_init.cc +++ b/riscv/csr_init.cc @@ -281,7 +281,14 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa) auto hcontext = std::make_shared(proc, CSR_HCONTEXT, (reg_t(1) << hcontext_length) - 1, 0); add_hypervisor_csr(CSR_HCONTEXT, hcontext); add_csr(CSR_MCONTEXT, mcontext = std::make_shared(proc, CSR_MCONTEXT, hcontext)); - add_csr(CSR_MSECCFG, mseccfg = std::make_shared(proc, CSR_MSECCFG)); + + mseccfg = std::make_shared(proc, CSR_MSECCFG); + if (xlen == 32) { + add_csr(CSR_MSECCFG, std::make_shared(proc, CSR_MSECCFG, mseccfg)); + add_csr(CSR_MSECCFGH, mseccfgh = std::make_shared(proc, CSR_MSECCFGH, mseccfg)); + } else { + add_csr(CSR_MSECCFG, mseccfg); + } for (int i = 0; i < max_pmp; ++i) { add_csr(CSR_PMPADDR0 + i, pmpaddr[i] = std::make_shared(proc, CSR_PMPADDR0 + i)); diff --git a/riscv/processor.h b/riscv/processor.h index 4ca3ce73..652326aa 100644 --- a/riscv/processor.h +++ b/riscv/processor.h @@ -152,6 +152,7 @@ struct state_t bool debug_mode; mseccfg_csr_t_p mseccfg; + csr_t_p mseccfgh; static const int max_pmp = 64; pmpaddr_csr_t_p pmpaddr[max_pmp];