public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] OMAP3 PM: Disable SR only during Device Retention/OFF
@ 2010-01-07  5:52 Vishwanath BS
  2010-01-11  5:33 ` Sripathy, Vishwanath
  2010-01-12 18:40 ` Kevin Hilman
  0 siblings, 2 replies; 3+ messages in thread
From: Vishwanath BS @ 2010-01-07  5:52 UTC (permalink / raw)
  To: linux-omap

Currently in omap_sram_idle function, SR is disabled whenever next state 
is retention/OFF w/o checking whether system can really enter retention/off.
This patch adds another condition to disable SR. Basically FCLK register for
Core and PER are checked before disabling SR. THis will give some more power
savings in MP3 usecase (where Core enters retention where as PER does not).

Tested OMAP3430 ZOOM2

Signed-off-by: Vishwanath BS <Vishwanath.bs@ti.com>
---
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 3868cdf..13c5dfb
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -479,6 +479,7 @@ void omap_sram_idle(void)
 	int mpu_logic_state, mpu_mem_state, core_logic_state, core_mem_state;
 	u32 sdrc_pwr = 0;
 	int per_state_modified = 0;
+	u32 fclk_status;
 
 	if (!_omap_sram_idle)
 		return;
@@ -545,15 +546,6 @@ void omap_sram_idle(void)
 	if (pwrdm_read_pwrst(cam_pwrdm) == PWRDM_POWER_ON)
 		omap2_clkdm_deny_idle(mpu_pwrdm->pwrdm_clkdms[0]);
 
-	/*
-	 * Disable smartreflex before entering WFI.
-	 * Only needed if we are going to enter retention or off.
-	 */
-	if (mpu_next_state <= PWRDM_POWER_RET)
-		disable_smartreflex(SR1);
-	if (core_next_state <= PWRDM_POWER_RET)
-		disable_smartreflex(SR2);
-
 	/* CORE */
 	if (core_next_state < PWRDM_POWER_ON) {
 		omap_uart_prepare_idle(0, core_next_state & core_logic_state);
@@ -600,6 +592,21 @@ void omap_sram_idle(void)
 	omap3_intc_prepare_idle();
 
 	/*
+	 * Disable smartreflex before entering WFI.
+	 * Only needed if we are going to enter retention or off.
+	 */
+	fclk_status = cm_read_mod_reg(OMAP3430_PER_MOD, CM_FCLKEN) |
+			cm_read_mod_reg(CORE_MOD, CM_FCLKEN1) |
+			cm_read_mod_reg(CORE_MOD, OMAP3430ES2_CM_FCLKEN3);
+
+	if (!fclk_status) {
+		if (mpu_next_state <= PWRDM_POWER_RET)
+			disable_smartreflex(SR1);
+		if (core_next_state <= PWRDM_POWER_RET)
+			disable_smartreflex(SR2);
+	}
+
+	/*
 	* On EMU/HS devices ROM code restores a SRDC value
 	* from scratchpad which has automatic self refresh on timeout
 	* of AUTO_CNT = 1 enabled. This takes care of errata 1.142.
@@ -685,11 +692,12 @@ void omap_sram_idle(void)
 	 * Enable smartreflex after WFI. Only needed if we entered
 	 * retention or off
 	 */
-	if (mpu_next_state <= PWRDM_POWER_RET)
-		enable_smartreflex(SR1);
-	if (core_next_state <= PWRDM_POWER_RET)
-		enable_smartreflex(SR2);
-
+	if (!fclk_status) {
+		if (mpu_next_state <= PWRDM_POWER_RET)
+			enable_smartreflex(SR1);
+		if (core_next_state <= PWRDM_POWER_RET)
+			enable_smartreflex(SR2);
+	}
 	/* PER */
 	if (per_next_state < PWRDM_POWER_ON) {
 		if (per_next_state == PWRDM_POWER_OFF) {

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-01-12 18:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-07  5:52 [PATCH] OMAP3 PM: Disable SR only during Device Retention/OFF Vishwanath BS
2010-01-11  5:33 ` Sripathy, Vishwanath
2010-01-12 18:40 ` Kevin Hilman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox