summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Quadros <rogerq@ti.com>2012-08-15 17:21:39 +0300
committerXavier Boudet <x-boudet@ti.com>2012-08-16 14:58:21 +0200
commit6f9d83cce011ae2a330eab77d7ef717a0b23341a (patch)
treebef8bc9f54d37341788705748f5b314946f232ae
parentda9c43ee05c8bedf9b894f9670789ac6a3f800a1 (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>
-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);
}
/*