@@ -179,6 +179,8 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
179179 (1 << CAUSE_SOFTWARE_CHECK_FAULT) |
180180 (1 << CAUSE_HARDWARE_ERROR_FAULT);
181181 add_hypervisor_csr (CSR_HEDELEG, hedeleg = std::make_shared<masked_csr_t >(proc, CSR_HEDELEG, hedeleg_mask, 0 ));
182+ constexpr unsigned CSR_HEDELEGH = 0x612 ;
183+ add_hypervisor_csr (CSR_HEDELEGH, std::make_shared<hedelegh_csr_t >(proc, CSR_HEDELEGH, 0 ));
182184 add_hypervisor_csr (CSR_HCOUNTEREN, hcounteren = std::make_shared<masked_csr_t >(proc, CSR_HCOUNTEREN, counteren_mask, 0 ));
183185 htimedelta = std::make_shared<basic_csr_t >(proc, CSR_HTIMEDELTA, 0 );
184186 if (xlen == 32 ) {
@@ -285,8 +287,11 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
285287 (proc->extension_enabled (EXT_ZCMT) ? SSTATEEN0_JVT : 0 ) |
286288 SSTATEEN0_CS;
287289 const reg_t hstateen0_mask = sstateen0_mask | HSTATEEN0_SENVCFG | HSTATEEN_SSTATEEN |
288- (proc->extension_enabled (EXT_SSCSRIND) ? HSTATEEN0_CSRIND : 0 );
289- const reg_t mstateen0_mask = hstateen0_mask | (proc->extension_enabled (EXT_SSQOSID) ? MSTATEEN0_PRIV114 : 0 );
290+ (proc->extension_enabled (EXT_SSCSRIND) ? HSTATEEN0_CSRIND : 0 ) |
291+ (proc->get_cfg ().trigger_count > 0 ? HSTATEEN0_SCONTEXT : 0 );
292+ constexpr reg_t MSTATEEN0_PRIV113 = 0x0100000000000000 ;
293+ const reg_t mstateen0_mask = hstateen0_mask | MSTATEEN0_PRIV113 |
294+ (proc->extension_enabled (EXT_SSQOSID) ? MSTATEEN0_PRIV114 : 0 );
290295 for (int i = 0 ; i < 4 ; i++) {
291296 const reg_t mstateen_mask = i == 0 ? mstateen0_mask : MSTATEEN_HSTATEEN;
292297 mstateen[i] = std::make_shared<masked_csr_t >(proc, CSR_MSTATEEN0 + i, mstateen_mask, 0 );
0 commit comments