diff options
Diffstat (limited to 'arch/arm/mach-omap2/pm34xx.c')
-rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 74bc15e71e9f..a81ed251e667 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -917,12 +917,29 @@ void omap3_pm_off_mode_enable(int enable) | |||
917 | state = PWRDM_POWER_RET; | 917 | state = PWRDM_POWER_RET; |
918 | 918 | ||
919 | #ifdef CONFIG_CPU_IDLE | 919 | #ifdef CONFIG_CPU_IDLE |
920 | omap3_cpuidle_update_states(state, state); | 920 | /* |
921 | * Erratum i583: implementation for ES rev < Es1.2 on 3630. We cannot | ||
922 | * enable OFF mode in a stable form for previous revisions, restrict | ||
923 | * instead to RET | ||
924 | */ | ||
925 | if (IS_PM34XX_ERRATUM(PM_SDRC_WAKEUP_ERRATUM_i583)) | ||
926 | omap3_cpuidle_update_states(state, PWRDM_POWER_RET); | ||
927 | else | ||
928 | omap3_cpuidle_update_states(state, state); | ||
921 | #endif | 929 | #endif |
922 | 930 | ||
923 | list_for_each_entry(pwrst, &pwrst_list, node) { | 931 | list_for_each_entry(pwrst, &pwrst_list, node) { |
924 | pwrst->next_state = state; | 932 | if (IS_PM34XX_ERRATUM(PM_SDRC_WAKEUP_ERRATUM_i583) && |
925 | omap_set_pwrdm_state(pwrst->pwrdm, state); | 933 | pwrst->pwrdm == core_pwrdm && |
934 | state == PWRDM_POWER_OFF) { | ||
935 | pwrst->next_state = PWRDM_POWER_RET; | ||
936 | WARN_ONCE(1, | ||
937 | "%s: Core OFF disabled due to errata i583\n", | ||
938 | __func__); | ||
939 | } else { | ||
940 | pwrst->next_state = state; | ||
941 | } | ||
942 | omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state); | ||
926 | } | 943 | } |
927 | } | 944 | } |
928 | 945 | ||
@@ -1000,6 +1017,8 @@ static void __init pm_errata_configure(void) | |||
1000 | pm34xx_errata |= PM_RTA_ERRATUM_i608; | 1017 | pm34xx_errata |= PM_RTA_ERRATUM_i608; |
1001 | /* Enable the l2 cache toggling in sleep logic */ | 1018 | /* Enable the l2 cache toggling in sleep logic */ |
1002 | enable_omap3630_toggle_l2_on_restore(); | 1019 | enable_omap3630_toggle_l2_on_restore(); |
1020 | if (omap_rev() < OMAP3630_REV_ES1_2) | ||
1021 | pm34xx_errata |= PM_SDRC_WAKEUP_ERRATUM_i583; | ||
1003 | } | 1022 | } |
1004 | } | 1023 | } |
1005 | 1024 | ||