[PATCH 3/5] irqchip: crossbar: Skip some irqs from getting mapped to crossbar
nm at ti.com
Fri May 9 05:54:55 PDT 2014
On 05/08/2014 11:22 PM, Joel Fernandes wrote:
> On Thu, May 8, 2014 at 7:25 PM, Santosh Shilimkar
> <santosh.shilimkar at ti.com> wrote:
> Ok, thanks for pointing to the post.
Yep - thanks Santosh for clarifying this. Now, we still have the
issues that I pointed out in  - without resolving which, we should
not enable crossbar for dra74x/72x.
A. taking example of PMU
interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>
this wont work. instead the crossbar driver needs some sort of a hint
to know that it should not map these on crossbar register instead
assign GIC mapping directly.
I propose doing the following
#define GIC_CROSSBAR_PASSTHROUGH(irq_no) ((irq_no) | (0x1 << 31))
and dts will define the following:
interrupts = <GIC_SPI GIC_CROSSBAR_PASSTHROUGH(131) IRQ_TYPE_LEVEL_HIGH>
This will also work for the other cases (B.2, B.3)
For B.2: L3_APP_IRQ:
interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>
interrupts = <GIC_SPI GIC_CROSSBAR_PASSTHROUGH(10) IRQ_TYPE_LEVEL_HIGH>
For B.3: NMI
interrupts = <GIC_SPI GIC_CROSSBAR_PASSTHROUGH(133) IRQ_TYPE_LEVEL_HIGH>
xlate is easy ->
diff --git a/drivers/irqchip/irq-crossbar.c
index de021638..fd09ab4 100644
@@ -112,6 +112,10 @@ static int crossbar_domain_xlate(struct
unsigned long ret;
+ /* Check to see if direct GIC mapping is required */
+ if (intspec & BIT(31))
+ return intspec & ~BIT;
ret = get_prev_map_irq(intspec);
But then, crossbar_domain_map and crossbar_domain_unmap need hints as
well to know that there is no corresponding crossbar registers.
Have'nt thought through that yet. Looking to hear about opinions here.
More information about the linux-arm-kernel