@@ -550,6 +550,7 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
550550 mvip = std::make_shared<mvip_csr_t >(proc, CSR_MVIP, 0 );
551551 if (proc->extension_enabled_const (EXT_SMAIA)) {
552552 add_csr (CSR_MTOPI, std::make_shared<mtopi_csr_t >(proc, CSR_MTOPI));
553+ add_csr (CSR_MTOPEI, std::make_shared<topei_csr_t >(proc, CSR_MTOPEI, proc->imsic ->m ));
553554 if (xlen == 32 ) {
554555 add_supervisor_csr (CSR_MVIEN, std::make_shared<rv32_low_csr_t >(proc, CSR_MVIEN, mvien));
555556 add_supervisor_csr (CSR_MVIENH, std::make_shared<rv32_high_csr_t >(proc, CSR_MVIENH, mvien));
@@ -566,7 +567,9 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
566567 if (proc->extension_enabled_const (EXT_SSAIA)) { // Included by EXT_SMAIA
567568 csr_t_p nonvirtual_stopi = std::make_shared<nonvirtual_stopi_csr_t >(proc, CSR_STOPI);
568569 add_supervisor_csr (CSR_STOPI, std::make_shared<virtualized_with_special_permission_csr_t >(proc, nonvirtual_stopi, vstopi));
569- add_supervisor_csr (CSR_STOPEI, std::make_shared<inaccessible_csr_t >(proc, CSR_STOPEI));
570+ auto vstopei = std::make_shared<vstopei_csr_t >(proc, CSR_VSTOPEI);
571+ auto nonvirtual_stopei = std::make_shared<nonvirtual_stopei_csr_t >(proc, CSR_STOPEI, proc->imsic ->s );
572+ add_supervisor_csr (CSR_STOPEI, std::make_shared<virtualized_with_special_permission_csr_t >(proc, nonvirtual_stopei, vstopei));
570573 auto hvien = std::make_shared<aia_csr_t >(proc, CSR_HVIEN, 0 , 0 );
571574 auto hviprio1 = std::make_shared<aia_csr_t >(proc, CSR_HVIPRIO1, 0 , 0 );
572575 auto hviprio2 = std::make_shared<aia_csr_t >(proc, CSR_HVIPRIO2, 0 , 0 );
@@ -584,5 +587,6 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
584587 }
585588 add_hypervisor_csr (CSR_HVICTL, hvictl);
586589 add_hypervisor_csr (CSR_VSTOPI, vstopi);
590+ add_hypervisor_csr (CSR_VSTOPEI, vstopei);
587591 }
588592}
0 commit comments