ARM: OMAP: PRCM: Don't register PRCM chain handler for AM33XX
authorVaibhav Bedia <vaibhav.bedia@ti.com>
Mon, 9 Jan 2012 04:46:20 +0000 (10:16 +0530)
committerVaibhav Hiremath <hvaibhav@ti.com>
Mon, 23 Jan 2012 19:14:45 +0000 (00:44 +0530)
AM33XX does not support PRCM interrupts for IO/WKUP events.
Since the current PRCM chain handler expects only these two
events, don't register it for AM33XX.

We might revisit this once the PRCM chain handler code is
enhanced to take care of other events like DPLL needing to be
recalibrated.

Note: This fixes the following crash in USB during kernel boot

[    2.131963] Unhandled fault: external abort on non-linefetch
(0x1008) at 0xc880a460
[    2.139960] Internal error: : 1008 [#1]
[    2.143954] Modules linked in:
[    2.147143] CPU: 0    Not tainted  (3.2.0-rc6-12008-g363a774)
[    2.154057] PC is at __musb_readb+0xc/0x14
[    2.158329] LR is at otg_timer+0x2c/0x13c
...

This was due to the PRCM_IRQENABLE register for OMAP3 being at
the same offset as USB_CLKCTRL on AM33XX.

Signed-off-by: Vaibhav Bedia <vaibhav.bedia@ti.com>
arch/arm/mach-omap2/prm2xxx_3xxx.c

index c1c4d86a79a8e5f7ff32b2739928963be7a4d4e2..fa803c63da8c2185390c3e6a23c4850dfb4915ad 100644 (file)
@@ -302,7 +302,7 @@ void omap3xxx_prm_restore_irqen(u32 *saved_mask)
 
 static int __init omap3xxx_prcm_init(void)
 {
-       if (cpu_is_omap34xx())
+       if (cpu_is_omap34xx() && !cpu_is_am33xx())
                return omap_prcm_register_chain_handler(&omap3_prcm_irq_setup);
        return 0;
 }