summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorRoger Quadros <rogerq@ti.com>2012-08-15 17:21:39 +0300
committerAndy Green <andy.green@linaro.org>2012-09-07 13:07:03 +0800
commitfc371b3c76c14387d74d4f58c33fc4fa0de6acb0 (patch)
tree76a2f7ceb5a946d8e9cedc93b89a18d87389c8ea /arch
parentcc8e6bff4dd0c742696f98ed2dcc16b98d72303d (diff)
HACK: OMAP4: limit DSP power domain state in suspend path
As DSP firmware doesn't support context losses it will break if DSP power domain enters Open Switch Retention (OSWR) and OFF states. To workaround that we prevent the DSP power domain from going any lower than the existing power state in the suspend path. This patch will prevent OFF mode if DSP is in use, but ensures that DSP does not break across system suspend. Signed-off-by: Roger Quadros <rogerq@ti.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-omap2/pm44xx.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c
index 3761dad16384..84d88ddd0df3 100644
--- a/arch/arm/mach-omap2/pm44xx.c
+++ b/arch/arm/mach-omap2/pm44xx.c
@@ -156,8 +156,27 @@ static int omap4_pm_suspend(void)
/* Set targeted power domain states by suspend */
list_for_each_entry(pwrst, &pwrst_list, node) {
- omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state);
- pwrdm_set_logic_retst(pwrst->pwrdm, pwrst->next_logic_state);
+ int pstate, lstate;
+
+ pstate = pwrst->next_state;
+ lstate = pwrst->next_logic_state;
+
+ /*
+ * HACK!!
+ * DSP firmware doesn't support context losses so we need
+ * to prevent it from going lower than the PM QoS requested
+ * state during system suspend
+ */
+ if ((pwrst->next_state < pwrst->saved_state) &&
+ !strcmp(pwrst->pwrdm->name, "tesla_pwrdm")) {
+ pr_info("%s: HACK! limiting tesla_pwrdm state to %d\n",
+ __func__, pwrst->saved_state);
+ pstate = pwrst->saved_state;
+ lstate = pwrst->saved_logic_state;
+ }
+
+ omap_set_pwrdm_state(pwrst->pwrdm, pstate);
+ pwrdm_set_logic_retst(pwrst->pwrdm, lstate);
}
/*