From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54232) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFtvN-0005dl-TU for qemu-devel@nongnu.org; Tue, 18 Feb 2014 18:18:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WFtvF-0002T7-Gc for qemu-devel@nongnu.org; Tue, 18 Feb 2014 18:18:01 -0500 Received: from mail-ea0-x233.google.com ([2a00:1450:4013:c01::233]:48876) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WFtvF-0002St-9f for qemu-devel@nongnu.org; Tue, 18 Feb 2014 18:17:53 -0500 Received: by mail-ea0-f179.google.com with SMTP id q10so7643148ead.38 for ; Tue, 18 Feb 2014 15:17:52 -0800 (PST) Date: Wed, 19 Feb 2014 00:17:38 +0100 From: Beniamino Galvani Message-ID: <20140218231737.GA24042@gmail.com> References: <1392659003-8264-1-git-send-email-b.galvani@gmail.com> <1392659003-8264-2-git-send-email-b.galvani@gmail.com> <5302D30F.6000503@cn.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5302D30F.6000503@cn.fujitsu.com> 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: Li Guang Cc: Peter Maydell , Peter Crosthwaite , qemu-devel@nongnu.org On Tue, Feb 18, 2014 at 11:27:11AM +0800, Li Guang wrote: > 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, We can add interrupt priority logic later if it's needed, but at the moment I don't think it's used by Linux. > and you should also remove s->vector assignment at register write phase. You're right, the register is read-only; I will remove it from the write function. Beniamino