qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v3 1/7] allwinner-a10-pic: set vector address wh


From: Li Guang
Subject: Re: [Qemu-devel] [PATCH v3 1/7] allwinner-a10-pic: set vector address when an interrupt is pending
Date: Mon, 17 Mar 2014 09:16:43 +0800

在 2014-03-15六的 14:01 +0100,Beniamino Galvani写道:
> This patch implements proper updating of the vector register which
> should hold, according to the A10 user manual, the vector address for
> the interrupt currently active on the CPU IRQ input.
> 
> Interrupt priority is not implemented at the moment and thus the first
> pending interrupt is returned.
> 
> Signed-off-by: Beniamino Galvani <address@hidden>
> Reviewed-by: Peter Crosthwaite <address@hidden>

Reviewed-by: Li Guang <address@hidden>

> ---
>  hw/intc/allwinner-a10-pic.c |   14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/intc/allwinner-a10-pic.c b/hw/intc/allwinner-a10-pic.c
> index 407d563..00f3c11 100644
> --- a/hw/intc/allwinner-a10-pic.c
> +++ b/hw/intc/allwinner-a10-pic.c
> @@ -23,11 +23,20 @@
>  static void aw_a10_pic_update(AwA10PICState *s)
>  {
>      uint8_t i;
> -    int irq = 0, fiq = 0;
> +    int irq = 0, fiq = 0, pending;
> +
> +    s->vector = 0;
>  
>      for (i = 0; i < AW_A10_PIC_REG_NUM; i++) {
>          irq |= s->irq_pending[i] & ~s->mask[i];
>          fiq |= s->select[i] & s->irq_pending[i] & ~s->mask[i];
> +
> +        if (!s->vector) {
> +            pending = ffs(s->irq_pending[i] & ~s->mask[i]);
> +            if (pending) {
> +                s->vector = (i * 32 + pending - 1) * 4;
> +            }
> +        }
>      }
>  
>      qemu_set_irq(s->parent_irq, !!irq);
> @@ -84,9 +93,6 @@ static void aw_a10_pic_write(void *opaque, hwaddr offset, 
> uint64_t value,
>      uint8_t index = (offset & 0xc) / 4;
>  
>      switch (offset) {
> -    case AW_A10_PIC_VECTOR:
> -        s->vector = value & ~0x3;
> -        break;
>      case AW_A10_PIC_BASE_ADDR:
>          s->base_addr = value & ~0x3;
>      case AW_A10_PIC_PROTECT:





reply via email to

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