diff options
author | Roger Quadros <rogerq@ti.com> | 2012-08-15 17:21:39 +0300 |
---|---|---|
committer | Xavier Boudet <x-boudet@ti.com> | 2012-08-16 14:58:21 +0200 |
commit | 6f9d83cce011ae2a330eab77d7ef717a0b23341a (patch) | |
tree | bef8bc9f54d37341788705748f5b314946f232ae | |
parent | da9c43ee05c8bedf9b894f9670789ac6a3f800a1 (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.c | 23 |
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); } /* |