diff options
| author | Jim Wylder <jwylder@motorola.com> | 2014-05-14 18:09:08 -0500 |
|---|---|---|
| committer | Jim Wylder <jwylder@motorola.com> | 2014-05-15 13:29:28 -0500 |
| commit | ed8054152b7801099eeb5963456c99b21bf2e13e (patch) | |
| tree | e0b619c1e9daa6d0724d4a16f1b68872a9d9cd55 | |
| parent | eae4ef1ae1648f9aaccfbb8d3a2433b735ab5971 (diff) | |
| download | olio-linux-3.10-ed8054152b7801099eeb5963456c99b21bf2e13e.tar.xz olio-linux-3.10-ed8054152b7801099eeb5963456c99b21bf2e13e.zip | |
IKXCLOCK-1346 arm: omap: restore IRQENABLE_MPU before suspend
Suspending with IRQENABLE_MPU cleared will prevent wakeup from
pending irqs.
Change-Id: I77f236f01b80534e6469968465cbc1d1b35b5d95
Signed-off-by: Jim Wylder <jwylder@motorola.com>
| -rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 7 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/prcm-common.h | 1 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/prm_common.c | 8 |
3 files changed, 15 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index f56d1d678ad..391c708111e 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -242,10 +242,15 @@ static void omap34xx_save_context(u32 *save) static int omap34xx_do_sram_idle(unsigned long save_state) { - if (suspend_debug) + if (suspend_debug) { pr_debug("OMAP3_PRM_IRQENABLE_MPU_OFFSET 0x%08x\n", omap2_prm_read_mod_reg(OCP_MOD, OMAP3_PRM_IRQENABLE_MPU_OFFSET)); + omap_prcm_irq_restore(); + pr_debug("OMAP3_PRM_IRQENABLE_MPU_OFFSET 0x%08x\n", + omap2_prm_read_mod_reg(OCP_MOD, + OMAP3_PRM_IRQENABLE_MPU_OFFSET)); + } omap34xx_cpu_suspend(save_state); return 0; diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h index c7d355fafd2..bc83da73d18 100644 --- a/arch/arm/mach-omap2/prcm-common.h +++ b/arch/arm/mach-omap2/prcm-common.h @@ -487,6 +487,7 @@ extern int omap_prcm_register_chain_handler( extern int omap_prcm_event_to_irq(const char *event); extern void omap_prcm_irq_prepare(void); extern void omap_prcm_irq_complete(void); +extern void omap_prcm_irq_restore(void); # endif diff --git a/arch/arm/mach-omap2/prm_common.c b/arch/arm/mach-omap2/prm_common.c index 228b850e632..c82aea6f358 100644 --- a/arch/arm/mach-omap2/prm_common.c +++ b/arch/arm/mach-omap2/prm_common.c @@ -216,6 +216,14 @@ void omap_prcm_irq_prepare(void) prcm_irq_setup->suspended = true; } +void omap_prcm_irq_restore(void) +{ + if (prcm_irq_setup->suspend_save_flag) { + prcm_irq_setup->restore_irqen(prcm_irq_setup->saved_mask); + prcm_irq_setup->ocp_barrier(); + } +} + void omap_prcm_irq_complete(void) { prcm_irq_setup->suspended = false; |