@@ -179,6 +179,8 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
179
179
(1 << CAUSE_SOFTWARE_CHECK_FAULT) |
180
180
(1 << CAUSE_HARDWARE_ERROR_FAULT);
181
181
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 ));
182
184
add_hypervisor_csr (CSR_HCOUNTEREN, hcounteren = std::make_shared<masked_csr_t >(proc, CSR_HCOUNTEREN, counteren_mask, 0 ));
183
185
htimedelta = std::make_shared<basic_csr_t >(proc, CSR_HTIMEDELTA, 0 );
184
186
if (xlen == 32 ) {
@@ -285,8 +287,11 @@ void state_t::csr_init(processor_t* const proc, reg_t max_isa)
285
287
(proc->extension_enabled (EXT_ZCMT) ? SSTATEEN0_JVT : 0 ) |
286
288
SSTATEEN0_CS;
287
289
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 );
290
295
for (int i = 0 ; i < 4 ; i++) {
291
296
const reg_t mstateen_mask = i == 0 ? mstateen0_mask : MSTATEEN_HSTATEEN;
292
297
mstateen[i] = std::make_shared<masked_csr_t >(proc, CSR_MSTATEEN0 + i, mstateen_mask, 0 );
0 commit comments