Skip to contentSkip to conversation

omap: pm34xx: Enable IO / IO-CHAIN wakeups for PER

PATCH In review Mike Chan 2 participants 5 messages May 3, 2010 – May 4, 2010

Subsystems (4)
lore
Share & tools
lore

Mike Chan

author
#0 lore raw

PATCH v2 1/2 omap: pm34xx: Enable IO / IO-CHAIN wakeups for PER

IO events can also come from GPIO modules, which reside in the PER domain. It is possible for the PER to enter RET while CORE is still in ON. If GPIO 2-6 are enabled for IO-pad wakeups, the PER domain will not wakeup in this case, unless we enable it.

---
 arch/arm/mach-omap2/pm34xx.c |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)
arch/arm/mach-omap2/pm34xx.c +11 -5
index ea0000b..fd76b0d 100644
@@ -371,9 +371,16 @@ void omap_sram_idle(void)
 	if (pwrdm_read_pwrst(neon_pwrdm) == PWRDM_POWER_ON)
 		pwrdm_set_next_pwrst(neon_pwrdm, mpu_next_state);
 
-	/* PER */
+	/* Enable IO-PAD and IO-CHAIN wakeups */
 	per_next_state = pwrdm_read_next_pwrst(per_pwrdm);
 	core_next_state = pwrdm_read_next_pwrst(core_pwrdm);
+	if (per_next_state < PWRDM_POWER_ON ||
+			core_next_state < PWRDM_POWER_ON) {
+		prm_set_mod_reg_bits(OMAP3430_EN_IO, WKUP_MOD, PM_WKEN);
+		omap3_enable_io_chain();
+	}
+
+	/* PER */
 	if (per_next_state < PWRDM_POWER_ON) {
 		omap_uart_prepare_idle(2);
 		omap2_gpio_prepare_for_retention();
@@ -398,10 +405,8 @@ void omap_sram_idle(void)
 			omap3_core_save_context();
 			omap3_prcm_save_context();
 		}
-		/* Enable IO-PAD and IO-CHAIN wakeups */
-		prm_set_mod_reg_bits(OMAP3430_EN_IO, WKUP_MOD, PM_WKEN);
-		omap3_enable_io_chain();
 	}
+
 	omap3_intc_prepare_idle();
 
 	/*
@@ -463,7 +468,8 @@ void omap_sram_idle(void)
 	}
 
 	/* Disable IO-PAD and IO-CHAIN wakeup */
-	if (core_next_state < PWRDM_POWER_ON) {
+	if (per_next_state < PWRDM_POWER_ON ||
+			core_next_state < PWRDM_POWER_ON) {
 		prm_clear_mod_reg_bits(OMAP3430_EN_IO, WKUP_MOD, PM_WKEN);
 		omap3_disable_io_chain();
 	}
Signature · 1 line
1.7.0.1
author
#1 lore raw

PATCH v2 2/2 omap: pm34xx: Remove PER wakeup dependency on CORE.

We can remove this wakeup dependency since now, when GPIO2-6 are enabled for IO-pad wakeup, PER domain is gauranteed to be awake or be woken up to service.

The previous dependency did not handle all corner cases. Since there was no sleep dependency between CORE and PER domains, if PER enters RET and CORE is ON, PER will not be active for GPIO handling.

---
 arch/arm/mach-omap2/pm34xx.c |    8 --------
 1 files changed, 0 insertions(+), 8 deletions(-)
arch/arm/mach-omap2/pm34xx.c +0 -8
index fd76b0d..88eafb0 100644
@@ -1086,14 +1086,6 @@ static int __init omap3_pm_init(void)
 	omap3_idle_init();
 
 	clkdm_add_wkdep(neon_clkdm, mpu_clkdm);
-	/*
-	 * REVISIT: This wkdep is only necessary when GPIO2-6 are enabled for
-	 * IO-pad wakeup.  Otherwise it will unnecessarily waste power
-	 * waking up PER with every CORE wakeup - see
-	 * http://marc.info/?l=linux-omap&m=121852150710062&w=2
-	*/
-	clkdm_add_wkdep(per_clkdm, core_clkdm);
-
 	if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
 		omap3_secure_ram_storage =
 			kmalloc(0x803F, GFP_KERNEL);
Signature · 1 line
1.7.0.1
#2 lore raw
In reply to Mike Chan
Quoted 6 lines · Mike Chan

IO events can also come from GPIO modules, which reside in the PER domain. It is possible for the PER to enter RET while CORE is still in ON. If GPIO 2-6 are enabled for IO-pad wakeups, the PER domain will not wakeup in this case, unless we enable it.

Thanks, adding both patches to PM branch (pm-fixes branch) and will queue for 2.6.35.

Kevin

author
#3 lore raw
Quoted 7 lines · Kevin Hilman
Quoted 5 lines · Mike Chan

IO events can also come from GPIO modules, which reside in the PER domain. It is possible for the PER to enter RET while CORE is still in ON. If GPIO 2-6 are enabled for IO-pad wakeups, the PER domain will not wakeup in this case, unless we enable it.

Quoted 5 lines
Quoted 1 line

Thanks, adding both patches to PM branch (pm-fixes branch) and will queue for 2.6.35.

Thanks, with this patch looking good, I was hoping for some feedback from people on the 2nd patch in the series. It makes sense to me since PER will be woken up now, not just CORE, but I wanted to double check.

-- Mike

Quoted 2 lines

Kevin

#4 lore raw
Quoted 11 lines · Mike Chan
Quoted 9 lines · Kevin Hilman
Quoted 6 lines · Mike Chan

IO events can also come from GPIO modules, which reside in the PER domain. It is possible for the PER to enter RET while CORE is still in ON. If GPIO 2-6 are enabled for IO-pad wakeups, the PER domain will not wakeup in this case, unless we enable it.

Quoted 7 lines
Quoted 3 lines

Thanks, adding both patches to PM branch (pm-fixes branch) and will queue for 2.6.35.

Thanks, with this patch looking good, I was hoping for some feedback from people on the 2nd patch in the series. It makes sense to me since PER will be woken up now, not just CORE, but I wanted to double check.

It makes sense to me too, I've applied both to the pm-fixes branch.

Kevin