diff options
author | Tony Lindgren <tony@atomide.com> | 2012-11-13 16:25:38 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2012-11-13 16:25:38 -0500 |
commit | 89ab216b33ba9405880fd3d89531305a931bc70f (patch) | |
tree | 8f6428ce51ecaed6f6e1379c036dbe341eb71e34 /arch/arm/mach-omap2/pm34xx.c | |
parent | c9d501e5cb0238910337213e12a09127221c35d8 (diff) | |
parent | 46bf4a562207c5ebd24e1dde5e5ee326cd3d6b91 (diff) |
Merge branch 'omap-for-v3.8/pm' into omap-for-v3.8/clock
Diffstat (limited to 'arch/arm/mach-omap2/pm34xx.c')
-rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index aa701d76efda..a9b8da1629bf 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -651,14 +651,17 @@ static void __init pm_errata_configure(void) | |||
651 | /* Enable the l2 cache toggling in sleep logic */ | 651 | /* Enable the l2 cache toggling in sleep logic */ |
652 | enable_omap3630_toggle_l2_on_restore(); | 652 | enable_omap3630_toggle_l2_on_restore(); |
653 | if (omap_rev() < OMAP3630_REV_ES1_2) | 653 | if (omap_rev() < OMAP3630_REV_ES1_2) |
654 | pm34xx_errata |= PM_SDRC_WAKEUP_ERRATUM_i583; | 654 | pm34xx_errata |= (PM_SDRC_WAKEUP_ERRATUM_i583 | |
655 | PM_PER_MEMORIES_ERRATUM_i582); | ||
656 | } else if (cpu_is_omap34xx()) { | ||
657 | pm34xx_errata |= PM_PER_MEMORIES_ERRATUM_i582; | ||
655 | } | 658 | } |
656 | } | 659 | } |
657 | 660 | ||
658 | int __init omap3_pm_init(void) | 661 | int __init omap3_pm_init(void) |
659 | { | 662 | { |
660 | struct power_state *pwrst, *tmp; | 663 | struct power_state *pwrst, *tmp; |
661 | struct clockdomain *neon_clkdm, *mpu_clkdm; | 664 | struct clockdomain *neon_clkdm, *mpu_clkdm, *per_clkdm, *wkup_clkdm; |
662 | int ret; | 665 | int ret; |
663 | 666 | ||
664 | if (!omap3_has_io_chain_ctrl()) | 667 | if (!omap3_has_io_chain_ctrl()) |
@@ -710,6 +713,8 @@ int __init omap3_pm_init(void) | |||
710 | 713 | ||
711 | neon_clkdm = clkdm_lookup("neon_clkdm"); | 714 | neon_clkdm = clkdm_lookup("neon_clkdm"); |
712 | mpu_clkdm = clkdm_lookup("mpu_clkdm"); | 715 | mpu_clkdm = clkdm_lookup("mpu_clkdm"); |
716 | per_clkdm = clkdm_lookup("per_clkdm"); | ||
717 | wkup_clkdm = clkdm_lookup("wkup_clkdm"); | ||
713 | 718 | ||
714 | #ifdef CONFIG_SUSPEND | 719 | #ifdef CONFIG_SUSPEND |
715 | omap_pm_suspend = omap3_pm_suspend; | 720 | omap_pm_suspend = omap3_pm_suspend; |
@@ -726,6 +731,27 @@ int __init omap3_pm_init(void) | |||
726 | if (IS_PM34XX_ERRATUM(PM_RTA_ERRATUM_i608)) | 731 | if (IS_PM34XX_ERRATUM(PM_RTA_ERRATUM_i608)) |
727 | omap3630_ctrl_disable_rta(); | 732 | omap3630_ctrl_disable_rta(); |
728 | 733 | ||
734 | /* | ||
735 | * The UART3/4 FIFO and the sidetone memory in McBSP2/3 are | ||
736 | * not correctly reset when the PER powerdomain comes back | ||
737 | * from OFF or OSWR when the CORE powerdomain is kept active. | ||
738 | * See OMAP36xx Erratum i582 "PER Domain reset issue after | ||
739 | * Domain-OFF/OSWR Wakeup". This wakeup dependency is not a | ||
740 | * complete workaround. The kernel must also prevent the PER | ||
741 | * powerdomain from going to OSWR/OFF while the CORE | ||
742 | * powerdomain is not going to OSWR/OFF. And if PER last | ||
743 | * power state was off while CORE last power state was ON, the | ||
744 | * UART3/4 and McBSP2/3 SIDETONE devices need to run a | ||
745 | * self-test using their loopback tests; if that fails, those | ||
746 | * devices are unusable until the PER/CORE can complete a transition | ||
747 | * from ON to OSWR/OFF and then back to ON. | ||
748 | * | ||
749 | * XXX Technically this workaround is only needed if off-mode | ||
750 | * or OSWR is enabled. | ||
751 | */ | ||
752 | if (IS_PM34XX_ERRATUM(PM_PER_MEMORIES_ERRATUM_i582)) | ||
753 | clkdm_add_wkdep(per_clkdm, wkup_clkdm); | ||
754 | |||
729 | clkdm_add_wkdep(neon_clkdm, mpu_clkdm); | 755 | clkdm_add_wkdep(neon_clkdm, mpu_clkdm); |
730 | if (omap_type() != OMAP2_DEVICE_TYPE_GP) { | 756 | if (omap_type() != OMAP2_DEVICE_TYPE_GP) { |
731 | omap3_secure_ram_storage = | 757 | omap3_secure_ram_storage = |