On Tue, Jul 5, 2011 at 3:57 PM, Tero Kristo <[email protected]> wrote:
> Introduce a chained interrupt handler mechanism for the PRCM
> interrupt, so that individual PRCM event can cleanly be handled by
> handlers in separate drivers. We do this by introducing PRCM event
> names, which are then matched to the particular PRCM interrupt bit
> depending on the specific OMAP SoC being used.
>
> arch/arm/mach-omap2/prcm.c implements the chained interrupt mechanism
> itself, with individual PRCM events for OMAP3 and OMAP4 being
> described in arch/arm/mach-omap2/prcm3xxx.c and
> arch/arm/mach-omap2/prcm4xxx.c respectively. At initialization time,
> the set of PRCM events is filtered against the SoC on which we are
> running, keeping only the ones that are actually useful. All the logic
> is written to be generic with regard to OMAP3/OMAP4, even though OMAP3
> has single PRCM event registers and OMAP4 has two PRCM event
> registers.
>
> Patch tested on OMAP3 beagleboard.
>
> Signed-off-by: Tero Kristo <[email protected]>
> Cc: Thomas Petazzoni <[email protected]>
> Cc: Avinash.H.M <[email protected]>
> Cc: Kevin Hilman <[email protected]>
> Cc: Cousson, Benoit <[email protected]>
> Cc: Tony Lindgren <[email protected]>
> Cc: Govindraj.R <[email protected]>
> Cc: Felipe Balbi <[email protected]>
> ---
> arch/arm/mach-omap2/Makefile | 4 +
> arch/arm/mach-omap2/pm34xx.c | 108 ++++++++--------------
> arch/arm/mach-omap2/prcm.c | 158
> ++++++++++++++++++++++++++++++++
> arch/arm/mach-omap2/prcm3xxx.c | 112 ++++++++++++++++++++++
> arch/arm/mach-omap2/prcm4xxx.c | 137 +++++++++++++++++++++++++++
> arch/arm/plat-omap/include/plat/prcm.h | 46 +++++++++
> 6 files changed, 495 insertions(+), 70 deletions(-)
> create mode 100644 arch/arm/mach-omap2/prcm3xxx.c
> create mode 100644 arch/arm/mach-omap2/prcm4xxx.c
>
[..]
> + if (irq_setup->base_irq < 0) {
> + pr_err("PRCM: failed to allocate irq descs\n");
> + irq_set_chained_handler(irq_setup->irq, NULL);
> + return irq_setup->base_irq;
> + }
> +
> + for (i = 0; i <= max_irq / 32; i++) {
> + gc = irq_alloc_generic_chip("PRCM", 1,
> + irq_setup->base_irq + i * 32, NULL, handle_level_irq);
> +
> + ct = gc->chip_types;
> + ct->chip.irq_ack = irq_gc_ack;
With patch [1] already part of 3.0-rc7 Mainline.
irq_gc_ack needs to be changed as below.
ct->chip.irq_ack = irq_gc_ack_set_bit;
I dropped tmp patches from v5 and picked rest of v5 applied
on wip-runtime patches and tested same.
Most of the things worked fine on 3430SDP
System wide suspend (with console_suspend)
retention and off-mode.
I have hosted a branch with the same if some else
is interested in testing.
[rc7 + wip_uart runtime patches + irq_chaining patches]
git://gitorious.org/runtime_3-0/runtime_3-0.git
Branch: wip_irqchn
feel free to add,
Acked-by: Govindraj.R <[email protected]>
Tested-by: Govindraj.R <[email protected]>
--
Thanks,
Govindraj.R
[1]:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=659fb32d1b67476f4ade25e9ea0e2642a5b9c4b5;hp=d30e1521b2afb5e6f21ca8bc1a4b6ec2afc93597
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html