summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Wylder <jwylder@motorola.com>2014-05-14 18:09:08 -0500
committerJim Wylder <jwylder@motorola.com>2014-05-15 13:29:28 -0500
commited8054152b7801099eeb5963456c99b21bf2e13e (patch)
treee0b619c1e9daa6d0724d4a16f1b68872a9d9cd55
parenteae4ef1ae1648f9aaccfbb8d3a2433b735ab5971 (diff)
downloadolio-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.c7
-rw-r--r--arch/arm/mach-omap2/prcm-common.h1
-rw-r--r--arch/arm/mach-omap2/prm_common.c8
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;