qemu-riscv
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v1 1/1] intc/ibex_plic: Clear interrupts that occur during cl


From: Jackie Ke
Subject: Re: [PATCH v1 1/1] intc/ibex_plic: Clear interrupts that occur during claim process
Date: Sat, 5 Dec 2020 08:09:11 +0000

Tested-by: Jackie Ke <jackieke724@hotmail.com>


Best Regards,
Jackie Ke

> On Dec 5, 2020, at 12:47 AM, Alistair Francis <alistair.francis@wdc.com> 
> wrote:
> 
> ´╗┐Previously if an interrupt occured during the claim process (after the
> interrupt is claimed but before it's completed) it would never be
> cleared.
> This patch ensures that we also clear the hidden_pending bits as well.
> 
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
> hw/intc/ibex_plic.c | 13 ++++++++++---
> 1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/intc/ibex_plic.c b/hw/intc/ibex_plic.c
> index 341c9db405..c1b72fcab0 100644
> --- a/hw/intc/ibex_plic.c
> +++ b/hw/intc/ibex_plic.c
> @@ -43,16 +43,23 @@ static void ibex_plic_irqs_set_pending(IbexPlicState *s, 
> int irq, bool level)
> {
>     int pending_num = irq / 32;
> 
> +    if (!level) {
> +        /*
> +         * If the level is low make sure we clear the hidden_pending.
> +         */
> +        s->hidden_pending[pending_num] &= ~(1 << (irq % 32));
> +    }
> +
>     if (s->claimed[pending_num] & 1 << (irq % 32)) {
>         /*
>          * The interrupt has been claimed, but not completed.
>          * The pending bit can't be set.
> +         * Save the pending level for after the interrupt is completed.
>          */
>         s->hidden_pending[pending_num] |= level << (irq % 32);
> -        return;
> +    } else {
> +        s->pending[pending_num] |= level << (irq % 32);
>     }
> -
> -    s->pending[pending_num] |= level << (irq % 32);
> }
> 
> static bool ibex_plic_irqs_pending(IbexPlicState *s, uint32_t context)
> -- 
> 2.29.2
> 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]