@@ -551,6 +551,7 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
551551 mvip = std::make_shared<mvip_csr_t >(proc, CSR_MVIP, 0 );
552552 if (proc->extension_enabled_const (EXT_SMAIA)) {
553553 add_csr (CSR_MTOPI, std::make_shared<mtopi_csr_t >(proc, CSR_MTOPI));
554+ add_csr (CSR_MTOPEI, std::make_shared<topei_csr_t >(proc, CSR_MTOPEI, proc->imsic ->m ));
554555 if (xlen == 32 ) {
555556 add_supervisor_csr (CSR_MVIEN, std::make_shared<rv32_low_csr_t >(proc, CSR_MVIEN, mvien));
556557 add_supervisor_csr (CSR_MVIENH, std::make_shared<rv32_high_csr_t >(proc, CSR_MVIENH, mvien));
@@ -567,7 +568,9 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
567568 if (proc->extension_enabled_const (EXT_SSAIA)) { // Included by EXT_SMAIA
568569 csr_t_p nonvirtual_stopi = std::make_shared<nonvirtual_stopi_csr_t >(proc, CSR_STOPI);
569570 add_supervisor_csr (CSR_STOPI, std::make_shared<virtualized_with_special_permission_csr_t >(proc, nonvirtual_stopi, vstopi));
570- add_supervisor_csr (CSR_STOPEI, std::make_shared<inaccessible_csr_t >(proc, CSR_STOPEI));
571+ auto vstopei = std::make_shared<vstopei_csr_t >(proc, CSR_VSTOPEI);
572+ auto nonvirtual_stopei = std::make_shared<nonvirtual_stopei_csr_t >(proc, CSR_STOPEI, proc->imsic ->s );
573+ add_supervisor_csr (CSR_STOPEI, std::make_shared<virtualized_with_special_permission_csr_t >(proc, nonvirtual_stopei, vstopei));
571574 auto hvien = std::make_shared<aia_csr_t >(proc, CSR_HVIEN, 0 , 0 );
572575 auto hviprio1 = std::make_shared<aia_csr_t >(proc, CSR_HVIPRIO1, 0 , 0 );
573576 auto hviprio2 = std::make_shared<aia_csr_t >(proc, CSR_HVIPRIO2, 0 , 0 );
@@ -585,5 +588,6 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
585588 }
586589 add_hypervisor_csr (CSR_HVICTL, hvictl);
587590 add_hypervisor_csr (CSR_VSTOPI, vstopi);
591+ add_hypervisor_csr (CSR_VSTOPEI, vstopei);
588592 }
589593}
0 commit comments