summaryrefslogtreecommitdiff
path: root/drivers/cpuidle
diff options
context:
space:
mode:
authorMaulik Shah <mkshah@codeaurora.org>2016-02-17 13:53:37 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:20:38 -0700
commit649bc1242cc2c9bbc71c147b40b51b2c25e97b75 (patch)
tree010cb99f10f1132ec0096b5ad41fee4434b3653a /drivers/cpuidle
parent72f0f4b937bd8a4ae15a6dd3b8a7a92b39ec6567 (diff)
cpuidle: lpm-levels: Log cpu enter & exit events into lpm debug
Add cpu enter and cpu exit log into lpm debug for 32bit. Change-Id: I88973dbc4f9ffc08f8201059a82a3133fa0db330 Signed-off-by: Maulik Shah <mkshah@codeaurora.org>
Diffstat (limited to 'drivers/cpuidle')
-rw-r--r--drivers/cpuidle/lpm-levels.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/drivers/cpuidle/lpm-levels.c b/drivers/cpuidle/lpm-levels.c
index edd4ba9bc1b4..3e8dd9ed67e1 100644
--- a/drivers/cpuidle/lpm-levels.c
+++ b/drivers/cpuidle/lpm-levels.c
@@ -808,20 +808,31 @@ bool psci_enter_sleep(struct lpm_cluster *cluster, int idx, bool from_idle)
#elif defined(CONFIG_ARM_PSCI)
bool psci_enter_sleep(struct lpm_cluster *cluster, int idx, bool from_idle)
{
- int affinity_level = 0;
- int state_id = get_cluster_id(cluster, &affinity_level);
- int power_state = PSCI_POWER_STATE(cluster->cpu->levels[idx].is_reset);
-
- affinity_level = PSCI_AFFINITY_LEVEL(affinity_level);
if (!idx) {
+ stop_critical_timings();
wfi();
+ start_critical_timings();
return 1;
- }
+ } else {
+ int affinity_level = 0;
+ int state_id = get_cluster_id(cluster, &affinity_level);
+ int power_state =
+ PSCI_POWER_STATE(cluster->cpu->levels[idx].is_reset);
+ bool success = false;
- state_id |= (power_state | affinity_level
- | cluster->cpu->levels[idx].psci_id);
+ affinity_level = PSCI_AFFINITY_LEVEL(affinity_level);
+ state_id |= (power_state | affinity_level
+ | cluster->cpu->levels[idx].psci_id);
- return !cpu_suspend(state_id);
+ update_debug_pc_event(CPU_ENTER, state_id,
+ 0xdeaffeed, 0xdeaffeed, true);
+ stop_critical_timings();
+ success = !cpu_suspend(state_id);
+ start_critical_timings();
+ update_debug_pc_event(CPU_EXIT, state_id,
+ success, 0xdeaffeed, true);
+ return success;
+ }
}
#else
bool psci_enter_sleep(struct lpm_cluster *cluster, int idx, bool from_idle)