target/riscv: Allow software access to MIP SEIP
commit33fe584f7026bfaa13bb8a943f85c879e06bbdc6
authorAlistair Francis <alistair.francis@wdc.com>
Thu, 17 Mar 2022 06:18:17 +0000 (17 16:18 +1000)
committerAlistair Francis <alistair.francis@wdc.com>
Fri, 22 Apr 2022 00:35:16 +0000 (22 10:35 +1000)
tree7faea1a6b23444c9a72a726da833cd251d4f994a
parent8b5c807bc07f8def162cbe7689eb1da4e80186ad
target/riscv: Allow software access to MIP SEIP

The RISC-V specification states that:
  "Supervisor-level external interrupts are made pending based on the
  logical-OR of the software-writable SEIP bit and the signal from the
  external interrupt controller."

We currently only allow either the interrupt controller or software to
set the bit, which is incorrect.

This patch removes the miclaim mask when writing MIP to allow M-mode
software to inject interrupts, even with an interrupt controller.

We then also need to keep track of which source is setting MIP_SEIP. The
final value is a OR of both, so we add two bools and use that to keep
track of the current state. This way either source can change without
losing the correct value.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/904
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20220317061817.3856850-3-alistair.francis@opensource.wdc.com>
target/riscv/cpu.c
target/riscv/cpu.h
target/riscv/csr.c