Commit b1cbdb00da2ac00eb67fe277e563ff1f5093b4ba
Committed by
Paul Walmsley
1 parent
c956b753e7
Exists in
master
and in
4 other branches
OMAP: clockdomain: Wait for powerdomain to be ON when using clockdomain force wakeup
While using clockdomain force wakeup method, not waiting for powerdomain to be effectively ON may end up locking the clockdomain FSM until a next wakeup event occurs. One such issue was seen on OMAP4430, where L4_PER was periodically getting stuck in in-transition state when transitioning from from OSWR to ON. This issue was reported and investigated by Patrick Titiano <p-titiano@ti.com> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Signed-off-by: Rajendra Nayak <rnayak@ti.com> Reported-by: Patrick Titiano <p-titiano@ti.com> Cc: Kevin Hilman <khilman@ti.com> Cc: Benoit Cousson <b-cousson@ti.com> Cc: Paul Walmsley <paul@pwsan.com> [paul@pwsan.com: updated to apply; added transition wait on clkdm_deny_idle(); remove two superfluous pwrdm_wait_transition() calls] Signed-off-by: Paul Walmsley <paul@pwsan.com>
Showing 2 changed files with 2 additions and 2 deletions Side-by-side Diff
arch/arm/mach-omap2/clockdomain.c
... | ... | @@ -747,6 +747,7 @@ |
747 | 747 | spin_lock_irqsave(&clkdm->lock, flags); |
748 | 748 | clkdm->_flags &= ~_CLKDM_FLAG_HWSUP_ENABLED; |
749 | 749 | ret = arch_clkdm->clkdm_wakeup(clkdm); |
750 | + ret |= pwrdm_state_switch(clkdm->pwrdm.ptr); | |
750 | 751 | spin_unlock_irqrestore(&clkdm->lock, flags); |
751 | 752 | return ret; |
752 | 753 | } |
... | ... | @@ -818,6 +819,7 @@ |
818 | 819 | spin_lock_irqsave(&clkdm->lock, flags); |
819 | 820 | clkdm->_flags &= ~_CLKDM_FLAG_HWSUP_ENABLED; |
820 | 821 | arch_clkdm->clkdm_deny_idle(clkdm); |
822 | + pwrdm_state_switch(clkdm->pwrdm.ptr); | |
821 | 823 | spin_unlock_irqrestore(&clkdm->lock, flags); |
822 | 824 | } |
823 | 825 |
arch/arm/mach-omap2/pm.c
... | ... | @@ -130,7 +130,6 @@ |
130 | 130 | } else { |
131 | 131 | hwsup = clkdm_in_hwsup(pwrdm->pwrdm_clkdms[0]); |
132 | 132 | clkdm_wakeup(pwrdm->pwrdm_clkdms[0]); |
133 | - pwrdm_wait_transition(pwrdm); | |
134 | 133 | sleep_switch = FORCEWAKEUP_SWITCH; |
135 | 134 | } |
136 | 135 | } |
... | ... | @@ -156,7 +155,6 @@ |
156 | 155 | return ret; |
157 | 156 | } |
158 | 157 | |
159 | - pwrdm_wait_transition(pwrdm); | |
160 | 158 | pwrdm_state_switch(pwrdm); |
161 | 159 | err: |
162 | 160 | return ret; |