On Tue, Oct 29, 2024 at 6:54 PM Yong-Xuan Wang <yongxuan.w...@sifive.com> wrote:
>
> In the section "4.7 Precise effects on interrupt-pending bits"
> of the RISC-V AIA specification defines that:
>
> "If the source mode is Level1 or Level0 and the interrupt domain
> is configured in MSI delivery mode (domaincfg.DM = 1):
> The pending bit is cleared whenever the rectified input value is
> low, when the interrupt is forwarded by MSI, or by a relevant
> write to an in_clrip register or to clripnum."
>
> Update the riscv_aplic_set_pending() to match the spec.
>
> Fixes: bf31cf06eb ("hw/intc/riscv_aplic: Fix setipnum_le write emulation for 
> APLIC MSI-mode")
> Signed-off-by: Yong-Xuan Wang <yongxuan.w...@sifive.com>

Thanks!

Applied to riscv-to-apply.next

Alistair

> ---
> v2:
> - add fixes tag (Daniel)
> - follow the suggestion from 
> https://lore.kernel.org/kvm/caahsdy3nmwbhy9qef9luexfr0ie7wc-u0d_fhzc47pxk-mz...@mail.gmail.com/
>   (Anup)
> ---
>  hw/intc/riscv_aplic.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/hw/intc/riscv_aplic.c b/hw/intc/riscv_aplic.c
> index 4a262c82f078..74c82a841101 100644
> --- a/hw/intc/riscv_aplic.c
> +++ b/hw/intc/riscv_aplic.c
> @@ -248,9 +248,12 @@ static void riscv_aplic_set_pending(RISCVAPLICState 
> *aplic,
>
>      if ((sm == APLIC_SOURCECFG_SM_LEVEL_HIGH) ||
>          (sm == APLIC_SOURCECFG_SM_LEVEL_LOW)) {
> -        if (!aplic->msimode || (aplic->msimode && !pending)) {
> +        if (!aplic->msimode) {
>              return;
>          }
> +        if (aplic->msimode && !pending) {
> +            goto noskip_write_pending;
> +        }
>          if ((aplic->state[irq] & APLIC_ISTATE_INPUT) &&
>              (sm == APLIC_SOURCECFG_SM_LEVEL_LOW)) {
>              return;
> @@ -261,6 +264,7 @@ static void riscv_aplic_set_pending(RISCVAPLICState 
> *aplic,
>          }
>      }
>
> +noskip_write_pending:
>      riscv_aplic_set_pending_raw(aplic, irq, pending);
>  }
>
> --
> 2.17.1
>
>

Reply via email to