Re: [PATCH 3/5] gic: Add set_type callback

From: Abhijeet Dharmapurikar
Date: Wed Jan 27 2010 - 20:44:14 EST


Russell King - ARM Linux wrote:
On Wed, Jan 27, 2010 at 11:32:27AM -0800, adharmap@xxxxxxxxxxxxxx wrote:
+ if (flow_type & (IRQ_TYPE_EDGE_RISING|IRQ_TYPE_EDGE_FALLING)) {
+ reg_value |= (2<<bit_index);
+ writel(reg_value, gic_dist_base(irq) + GIC_DIST_CONFIG
+ + register_index);
+ __set_irq_handler_unlocked(irq, handle_edge_irq);
+ }
+
+ if (flow_type & (IRQ_TYPE_LEVEL_HIGH|IRQ_TYPE_LEVEL_LOW)) {

This is actually where things start to get rather sticky - because
there may well be on-chip inverters between the GIC and external
peripherals.
Actually the comment in gic_dist_init mentions about configuring SPI's as level low when the GIC only supports level high. That suggests presence of an inverter.

Since the GIC can only sense one edge or one level depending on the
hardware setup, it seems wrong to allow the configuration of both
high and low levels, and both edges.
Agree, but this change at least lets us configure them as edge/level triggered.

One solution (a rather easy one) is we simply reject LEVEL_LOW and EDGE_FALLING and think as if the inverters belong to the peripherals rather than the GIC.

Please suggest alternative implementation ideas.





--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/