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
1 parent 994dfce commit c8afc789196cdd568e29aa1e54cb5d24be5adf70
@Achin Gupta Achin Gupta authored on 25 Nov 2013
Dan Handley committed on 5 Dec 2013
Showing 10 changed files
View
common/psci/psci_afflvl_on.c
View
common/psci/psci_afflvl_suspend.c
View
common/psci/psci_common.c
View
common/psci/psci_entry.S
View
common/psci/psci_private.h
View
common/runtime_svc.c
View
docs/change-log.md
View
docs/porting-guide.md
View
plat/common/aarch64/platform_helpers.S
View
plat/fvp/platform.h