Skip to content

Commit 3b066d6

Browse files
authored
Merge pull request #2089 from chihminchao/fix-mseccfg-rv32
csr: fix mseccfg for rv32
2 parents b3b7ed4 + 180c10f commit 3b066d6

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

riscv/csr_init.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,14 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
281281
auto hcontext = std::make_shared<masked_csr_t>(proc, CSR_HCONTEXT, (reg_t(1) << hcontext_length) - 1, 0);
282282
add_hypervisor_csr(CSR_HCONTEXT, hcontext);
283283
add_csr(CSR_MCONTEXT, mcontext = std::make_shared<proxy_csr_t>(proc, CSR_MCONTEXT, hcontext));
284-
add_csr(CSR_MSECCFG, mseccfg = std::make_shared<mseccfg_csr_t>(proc, CSR_MSECCFG));
284+
285+
mseccfg = std::make_shared<mseccfg_csr_t>(proc, CSR_MSECCFG);
286+
if (xlen == 32) {
287+
add_csr(CSR_MSECCFG, std::make_shared<rv32_low_csr_t>(proc, CSR_MSECCFG, mseccfg));
288+
add_csr(CSR_MSECCFGH, mseccfgh = std::make_shared<rv32_high_csr_t>(proc, CSR_MSECCFGH, mseccfg));
289+
} else {
290+
add_csr(CSR_MSECCFG, mseccfg);
291+
}
285292

286293
for (int i = 0; i < max_pmp; ++i) {
287294
add_csr(CSR_PMPADDR0 + i, pmpaddr[i] = std::make_shared<pmpaddr_csr_t>(proc, CSR_PMPADDR0 + i));

riscv/processor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ struct state_t
152152
bool debug_mode;
153153

154154
mseccfg_csr_t_p mseccfg;
155+
csr_t_p mseccfgh;
155156

156157
static const int max_pmp = 64;
157158
pmpaddr_csr_t_p pmpaddr[max_pmp];

0 commit comments

Comments
 (0)