Skip to content

Commit 59eefbd

Browse files
committed
AIA: instantiate M-mode IMSIC indirect CSRs
1 parent 9ad3c36 commit 59eefbd

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

riscv/csr_init.cc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,18 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
420420
const reg_t mireg_csrs[] = { CSR_MIREG2, CSR_MIREG3, CSR_MIREG4, CSR_MIREG5, CSR_MIREG6 };
421421
for (auto csr : mireg_csrs)
422422
add_csr(csr, std::make_shared<sscsrind_reg_csr_t>(proc, csr, miselect));
423+
424+
if (proc->extension_enabled_const(EXT_SMAIA)) {
425+
// *ireg needs to be a proxy of *iselect and a CSR map keyed by the value in *iselect
426+
// If address not in CSR map, throw illegal or virtual instruction trap
427+
auto aia_mireg = std::make_shared<aia_ireg_proxy_csr_t>(proc, CSR_MIREG, miselect);
428+
for (auto &csr : *aia_mireg->get_csrmap())
429+
mireg->add_ireg_proxy(csr.first, aia_mireg);
430+
// reserved range RAZ/WI
431+
mireg->add_ireg_proxy(0x71, aia_mireg);
432+
for (int i = 0x73; i <= 0x7f; i++)
433+
mireg->add_ireg_proxy(i, aia_mireg);
434+
}
423435
}
424436

425437
if (proc->extension_enabled_const(EXT_SSCSRIND)) {

0 commit comments

Comments
 (0)