From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50760) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFbLz-0007PS-M4 for qemu-devel@nongnu.org; Mon, 17 Feb 2014 22:28:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WFbLt-0000cD-HN for qemu-devel@nongnu.org; Mon, 17 Feb 2014 22:28:15 -0500 Received: from [222.73.24.84] (port=4845 helo=song.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFbLt-0000Vm-47 for qemu-devel@nongnu.org; Mon, 17 Feb 2014 22:28:09 -0500 Message-ID: <5302D30F.6000503@cn.fujitsu.com> Date: Tue, 18 Feb 2014 11:27:11 +0800 From: Li Guang MIME-Version: 1.0 References: <1392659003-8264-1-git-send-email-b.galvani@gmail.com> <1392659003-8264-2-git-send-email-b.galvani@gmail.com> In-Reply-To: <1392659003-8264-2-git-send-email-b.galvani@gmail.com> Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=ISO-8859-1; format=flowed Subject: Re: [Qemu-devel] [PATCH 1/7] allwinner-a10-pic: set vector address when an interrupt is pending List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Beniamino Galvani Cc: Peter Maydell , Peter Crosthwaite , qemu-devel@nongnu.org Hi, Beniamino Galvani wrote: > 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 > --- > hw/intc/allwinner-a10-pic.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/hw/intc/allwinner-a10-pic.c b/hw/intc/allwinner-a10-pic.c > index 407d563..bb2351f 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; > this maybe should determined also by interrupt priority, and you should also remove s->vector assignment at register write phase. Thanks! > + } > + } > } > > qemu_set_irq(s->parent_irq, !!irq); >