From 6f9d83cce011ae2a330eab77d7ef717a0b23341a Mon Sep 17 00:00:00 2001 From: Roger Quadros Date: Wed, 15 Aug 2012 17:21:39 +0300 Subject: 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 --- arch/arm/mach-omap2/pm44xx.c | 23 +++++++++++++++++++++-- 1 file 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); } /* -- cgit v1.2.3