summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMurali Nalajala <mnalajal@codeaurora.org>2015-01-07 19:36:57 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:07:20 -0700
commit764f9334a3344049a5c52bb03f5d148c0deff9bc (patch)
treeeb176d01ed7fdce598b1d33693d5aa8cbb100d3b /arch
parent201050d5579263cb88d0e9e9de09ae8a98c45148 (diff)
cpu_pm: Add level to the cluster pm notification
Cluster pm notifications without level information increases difficulty and complexity for the registered drivers to figure out when the last coherency level is going into power collapse. Send notifications with level information that allows the registered drivers to easily determine the cluster level that is going in/out of power collapse. There is an issue with this implementation. GIC driver saves and restores the distributed registers as part of cluster notifications. On newer platforms there are multiple cluster levels are defined (e.g l2, cci etc). These cluster level notofications can happen independently. On MSM platforms GIC is still active while the cluster sleeps in idle, causing the GIC state to be overwritten with an incorrect previous state of the interrupts. This leads to a system hang. Do not save and restore on any L2 and higher cache coherency level sleep entry and exit. Change-Id: I31918d6383f19e80fe3b064cfaf0b55e16b97eb6 Signed-off-by: Archana Sathyakumar <asathyak@codeaurora.org> Signed-off-by: Murali Nalajala <mnalajal@codeaurora.org> Signed-off-by: Mahesh Sivasubramanian <msivasub@codeaurora.org> Signed-off-by: Stepan Moskovchenko <stepanm@codeaurora.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-highbank/pm.c4
-rw-r--r--arch/arm/mach-omap2/cpuidle44xx.c4
-rw-r--r--arch/arm/mach-tegra/pm.c4
3 files changed, 6 insertions, 6 deletions
diff --git a/arch/arm/mach-highbank/pm.c b/arch/arm/mach-highbank/pm.c
index 400311695548..165e44e1844a 100644
--- a/arch/arm/mach-highbank/pm.c
+++ b/arch/arm/mach-highbank/pm.c
@@ -36,11 +36,11 @@ static int highbank_suspend_finish(unsigned long val)
static int highbank_pm_enter(suspend_state_t state)
{
cpu_pm_enter();
- cpu_cluster_pm_enter();
+ cpu_cluster_pm_enter(0);
cpu_suspend(0, highbank_suspend_finish);
- cpu_cluster_pm_exit();
+ cpu_cluster_pm_exit(0);
cpu_pm_exit();
return 0;
diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
index 4b8e9f4d59ea..96698652e697 100644
--- a/arch/arm/mach-omap2/cpuidle44xx.c
+++ b/arch/arm/mach-omap2/cpuidle44xx.c
@@ -127,7 +127,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
* to save GIC and wakeupgen context.
*/
if (mpuss_can_lose_context)
- cpu_cluster_pm_enter();
+ cpu_cluster_pm_enter(0);
}
omap4_enter_lowpower(dev->cpu, cx->cpu_state);
@@ -165,7 +165,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
* to restore GIC and wakeupgen context.
*/
if (dev->cpu == 0 && mpuss_can_lose_context)
- cpu_cluster_pm_exit();
+ cpu_cluster_pm_exit(0);
tick_broadcast_exit();
diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c
index b0f48a3946fa..9eabddce6d8d 100644
--- a/arch/arm/mach-tegra/pm.c
+++ b/arch/arm/mach-tegra/pm.c
@@ -192,13 +192,13 @@ void tegra_idle_lp2_last(void)
{
tegra_pm_set(TEGRA_SUSPEND_LP2);
- cpu_cluster_pm_enter();
+ cpu_cluster_pm_enter(0);
suspend_cpu_complex();
cpu_suspend(PHYS_OFFSET - PAGE_OFFSET, &tegra_sleep_cpu);
restore_cpu_complex();
- cpu_cluster_pm_exit();
+ cpu_cluster_pm_exit(0);
}
enum tegra_suspend_mode tegra_pm_validate_suspend_mode(