[PATCH 1/5] ARM: gic: Add hooks for architecture specific extensions
From: Colin Cross <hidden>
Date: 2011-01-26 07:52:51
Also in:
linux-omap
On Tue, Jan 25, 2011 at 11:31 PM, Santosh Shilimkar [off-list ref] wrote:
quoted
-----Original Message----- From: ccross at google.com [mailto:ccross at google.com] On Behalf Of Colin Cross Sent: Wednesday, January 26, 2011 12:54 PM To: Santosh Shilimkar Cc: linux-arm-kernel at lists.infradead.org; linux- omap at vger.kernel.org; catalin.marinas at arm.com; linux at arm.linux.org.uk; linus.ml.walleij at gmail.com; Russell King Subject: Re: [PATCH 1/5] ARM: gic: Add hooks for architecture specific extensions[....]quoted
quoted
quoted
Great. Can I fold below changes in my patch and add you ack and tested-by? SureAfter reading your initial comment, you mentioned you need to have 'gic_set_type' as well. Is this still true. If yes then we need to have arch_extn call for that as well.
You are right, I missed adding the extension for gic_set_type. My testing doesn't cover that case right now, because I don't have any drivers updated to linux-next that use a wake source that is compatible with Tegra's lowest power suspend mode, and that is the only time the extension to gic_set_type is necessary.
quoted
quoted
quoted
diff --git a/arch/arm/common/gic.c b/arch/arm/common/gic.c index 0b6c043..7993f07 100644 --- a/arch/arm/common/gic.c +++ b/arch/arm/common/gic.c@@ -90,6 +90,8 @@ static inline unsigned int gic_irq(structirq_dataquoted
quoted
*d) ?static void gic_ack_irq(struct irq_data *d) ?{ ? ? ? spin_lock(&irq_controller_lock); + ? ? if (gic_arch_extn.irq_ack) + ? ? ? ? ? ? gic_arch_extn.irq_ack(d); ? ? ? writel(gic_irq(d), gic_cpu_base(d) + GIC_CPU_EOI); ? ? ? spin_unlock(&irq_controller_lock); ?}@@ -161,6 +163,14 @@ static int gic_set_type(struct irq_data *d,unsigned int type) ? ? ? return 0; ?} +static int gic_retrigger(struct irq_data *d) +{ + ? ? if (gic_arch_extn.irq_retrigger) + ? ? ? ? ? ? return gic_arch_extn.irq_retrigger(d); + + ? ? return 0; +} + ?#ifdef CONFIG_SMP ?static int ?gic_set_cpu(struct irq_data *d, const struct cpumask *mask_val, bool force)@@ -234,6 +244,7 @@ static struct irq_chip gic_chip = {? ? ? .irq_mask ? ? ? ? ? ? ? = gic_mask_irq, ? ? ? .irq_unmask ? ? ? ? ? ? = gic_unmask_irq, ? ? ? .irq_set_type ? ? ? ? ? = gic_set_type, + ? ? .irq_retrigger ? ? ? ? ?= gic_retrigger, ?#ifdef CONFIG_SMP ? ? ? .irq_set_affinity ? ? ? = gic_set_cpu, ?#endif