diff options
-rw-r--r-- | arch/arm/mach-omap2/pm44xx.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c index c264ef7219c1..974f7ea19b22 100644 --- a/arch/arm/mach-omap2/pm44xx.c +++ b/arch/arm/mach-omap2/pm44xx.c | |||
@@ -196,7 +196,7 @@ static void omap_default_idle(void) | |||
196 | static int __init omap4_pm_init(void) | 196 | static int __init omap4_pm_init(void) |
197 | { | 197 | { |
198 | int ret; | 198 | int ret; |
199 | struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm; | 199 | struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm, *l4wkup; |
200 | struct clockdomain *ducati_clkdm, *l3_2_clkdm, *l4_per_clkdm; | 200 | struct clockdomain *ducati_clkdm, *l3_2_clkdm, *l4_per_clkdm; |
201 | 201 | ||
202 | if (!cpu_is_omap44xx()) | 202 | if (!cpu_is_omap44xx()) |
@@ -220,14 +220,19 @@ static int __init omap4_pm_init(void) | |||
220 | * MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as | 220 | * MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as |
221 | * expected. The hardware recommendation is to enable static | 221 | * expected. The hardware recommendation is to enable static |
222 | * dependencies for these to avoid system lock ups or random crashes. | 222 | * dependencies for these to avoid system lock ups or random crashes. |
223 | * The L4 wakeup depedency is added to workaround the OCP sync hardware | ||
224 | * BUG with 32K synctimer which lead to incorrect timer value read | ||
225 | * from the 32K counter. The BUG applies for GPTIMER1 and WDT2 which | ||
226 | * are part of L4 wakeup clockdomain. | ||
223 | */ | 227 | */ |
224 | mpuss_clkdm = clkdm_lookup("mpuss_clkdm"); | 228 | mpuss_clkdm = clkdm_lookup("mpuss_clkdm"); |
225 | emif_clkdm = clkdm_lookup("l3_emif_clkdm"); | 229 | emif_clkdm = clkdm_lookup("l3_emif_clkdm"); |
226 | l3_1_clkdm = clkdm_lookup("l3_1_clkdm"); | 230 | l3_1_clkdm = clkdm_lookup("l3_1_clkdm"); |
227 | l3_2_clkdm = clkdm_lookup("l3_2_clkdm"); | 231 | l3_2_clkdm = clkdm_lookup("l3_2_clkdm"); |
228 | l4_per_clkdm = clkdm_lookup("l4_per_clkdm"); | 232 | l4_per_clkdm = clkdm_lookup("l4_per_clkdm"); |
233 | l4wkup = clkdm_lookup("l4_wkup_clkdm"); | ||
229 | ducati_clkdm = clkdm_lookup("ducati_clkdm"); | 234 | ducati_clkdm = clkdm_lookup("ducati_clkdm"); |
230 | if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) || | 235 | if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) || (!l4wkup) || |
231 | (!l3_2_clkdm) || (!ducati_clkdm) || (!l4_per_clkdm)) | 236 | (!l3_2_clkdm) || (!ducati_clkdm) || (!l4_per_clkdm)) |
232 | goto err2; | 237 | goto err2; |
233 | 238 | ||
@@ -235,6 +240,7 @@ static int __init omap4_pm_init(void) | |||
235 | ret |= clkdm_add_wkdep(mpuss_clkdm, l3_1_clkdm); | 240 | ret |= clkdm_add_wkdep(mpuss_clkdm, l3_1_clkdm); |
236 | ret |= clkdm_add_wkdep(mpuss_clkdm, l3_2_clkdm); | 241 | ret |= clkdm_add_wkdep(mpuss_clkdm, l3_2_clkdm); |
237 | ret |= clkdm_add_wkdep(mpuss_clkdm, l4_per_clkdm); | 242 | ret |= clkdm_add_wkdep(mpuss_clkdm, l4_per_clkdm); |
243 | ret |= clkdm_add_wkdep(mpuss_clkdm, l4wkup); | ||
238 | ret |= clkdm_add_wkdep(ducati_clkdm, l3_1_clkdm); | 244 | ret |= clkdm_add_wkdep(ducati_clkdm, l3_1_clkdm); |
239 | ret |= clkdm_add_wkdep(ducati_clkdm, l3_2_clkdm); | 245 | ret |= clkdm_add_wkdep(ducati_clkdm, l3_2_clkdm); |
240 | if (ret) { | 246 | if (ret) { |