diff options
author | Andrew Waterman <andrew@sifive.com> | 2025-08-28 00:51:38 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-28 00:51:38 -0700 |
commit | 9a46080b52b40c7df6dc85aed730c31b077049e3 (patch) | |
tree | e913f3183ad22f07dc15f04ceb8bfd9c20a44dbc | |
parent | eff659cd43d7eafb7f3559bceed2540eabb31c50 (diff) | |
parent | faeecd8d72b447c363f32c27fc9a0aa6f577e21e (diff) | |
download | spike-9a46080b52b40c7df6dc85aed730c31b077049e3.zip spike-9a46080b52b40c7df6dc85aed730c31b077049e3.tar.gz spike-9a46080b52b40c7df6dc85aed730c31b077049e3.tar.bz2 |
Merge pull request #2062 from binno/revert_vstopi_change
Revert "Don't shift enabled bits of interrupt in vstopi csrs"
-rw-r--r-- | riscv/csrs.cc | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/riscv/csrs.cc b/riscv/csrs.cc index a0a4698..76f600d 100644 --- a/riscv/csrs.cc +++ b/riscv/csrs.cc @@ -2173,16 +2173,16 @@ reg_t vstopi_csr_t::read() const noexcept { reg_t iprio = get_field(hvictl, HVICTL_IPRIO); reg_t enabled_interrupts = state->mip->read() & state->mie->read() & state->hideleg->read(); + enabled_interrupts >>= 1; // VSSIP -> SSIP, etc reg_t vgein = get_field(state->hstatus->read(), HSTATUS_VGEIN); reg_t virtual_sei_priority = (vgein == 0 && iid == IRQ_S_EXT && iprio != 0) ? iprio : 255; // vstopi.IPRIO is 255 for priority number 256 reg_t identity, priority; if (vti) { - reg_t interrupts = enabled_interrupts >> 1; // VSSIP -> SSIP, etc - if (!(interrupts & MIP_SEIP) && iid == IRQ_S_EXT) + if (!(enabled_interrupts & MIP_SEIP) && iid == IRQ_S_EXT) return 0; - identity = ((interrupts & MIP_SEIP) && (iid == IRQ_S_EXT || dpr)) ? IRQ_S_EXT : iid; + identity = ((enabled_interrupts & MIP_SEIP) && (iid == IRQ_S_EXT || dpr)) ? IRQ_S_EXT : iid; priority = (identity == IRQ_S_EXT) ? virtual_sei_priority : ((iprio != 0 || !dpr) ? iprio : 255); } else { if (!enabled_interrupts) |