From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH 11/16] xen: arm: Add debug keyhandler to dump the physical GIC state. Date: Wed, 20 Nov 2013 17:36:14 +0000 Message-ID: <528CF30E.5060603@linaro.org> References: <1384958746.6071.64.camel@kazak.uk.xensource.com> <1384958897-13074-11-git-send-email-ian.campbell@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1384958897-13074-11-git-send-email-ian.campbell@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell Cc: pranavkumar@linaro.org, stefano.stabellini@eu.citrix.com, tim@xen.org, Anup Patel , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org On 11/20/2013 02:48 PM, Ian Campbell wrote: > Signed-off-by: Ian Campbell > --- > xen/arch/arm/gic.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 75 insertions(+) > > diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c > index ab49106..185a6b8 100644 > --- a/xen/arch/arm/gic.c > +++ b/xen/arch/arm/gic.c > @@ -28,6 +28,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -385,6 +386,77 @@ int gic_irq_xlate(const u32 *intspec, unsigned int intsize, > return 0; > } > > + > +static void do_dump_gic(unsigned char key) > +{ > + int irq; > + printk("'%c' pressed -> dumping GIC state\n", key); > + > + for ( irq = 0; irq < gic.lines; irq++ ) > + { > + const char *type; > + int type_nr, enable, pend, active, priority, target; > + struct irq_desc *desc = irq_to_desc(irq); > + uint8_t *bytereg; > + uint32_t wordreg; > + > + bytereg = (uint8_t *) (GICD + GICD_ITARGETSR); > + target = bytereg[irq]; > + > + bytereg = (uint8_t *) (GICD + GICD_IPRIORITYR); > + priority = bytereg[irq]; > + > + switch ( irq ) > + { > + case 0 ... 15: > + type = "SGI"; > + type_nr = irq; > + target = 0x00; /* these are per-CPU */ > + break; > + case 16 ... 31: > + type = "PPI"; > + type_nr = irq - 16; > + break; I think it's a bit stupid to print SGI and PPI as it's per-CPU interrupt. With your solution, you don't know which CPU call the keyhandler. Perhaps, you need to an SGI to each CPU? -- Julien Grall