summaryrefslogtreecommitdiff
path: root/common/psci/psci_afflvl_suspend.c
diff options
context:
space:
mode:
authorAchin Gupta <achin.gupta@arm.com>2013-11-25 18:45:02 +0000
committerDan Handley <dan.handley@arm.com>2013-12-05 12:28:50 +0000
commitc8afc789196cdd568e29aa1e54cb5d24be5adf70 (patch)
treec29ea6f222a2f76cda944ed976b6e734e393732e /common/psci/psci_afflvl_suspend.c
parent994dfceb449a7b2fe34a1febd765cc5291172b39 (diff)
psci: fix error due to a non zero context id
In the previous psci implementation, the psci_afflvl_power_on_finish() function would run into an error condition if the value of the context id parameter in the cpu_on and cpu_suspend psci calls was != 0. The parameter was being restored as the return value of the affinity level 0 finisher function. A non zero context id would be treated as an error condition. This would prevent successful wake up of the cpu from a power down state. Also, the contents of the general purpose registers were not being cleared upon return to the non-secure world after a cpu power up. This could potentially allow the non-secure world to view secure data. This patch ensures that all general purpose registers are set to ~0 prior to the final eret that drops the execution to the non-secure world. The context id is used to initialize the general purpose register x0 prior to re-entry into the non-secure world and is no longer restored as a function return value. A platform helper (platform_get_stack()) has been introduced to facilitate this change. Change-Id: I2454911ffd75705d6aa8609a5d250d9b26fa097c
Diffstat (limited to 'common/psci/psci_afflvl_suspend.c')
-rw-r--r--common/psci/psci_afflvl_suspend.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/common/psci/psci_afflvl_suspend.c b/common/psci/psci_afflvl_suspend.c
index b68b4df7..05b0aad0 100644
--- a/common/psci/psci_afflvl_suspend.c
+++ b/common/psci/psci_afflvl_suspend.c
@@ -389,7 +389,7 @@ static unsigned int psci_afflvl0_suspend_finish(unsigned long mpidr,
* information that we had stashed away during the suspend
* call to set this cpu on it's way.
*/
- rc = psci_get_ns_entry_info(index);
+ psci_get_ns_entry_info(index);
/* Clean caches before re-entering normal world */
dcsw_op_louis(DCCSW);