diff options
author | Soby Mathew <soby.mathew@arm.com> | 2015-01-15 11:49:49 +0000 |
---|---|---|
committer | Dan Handley <dan.handley@arm.com> | 2015-01-26 12:42:45 +0000 |
commit | b234b2c4a06169aa965b77dd40c17be454a9f609 (patch) | |
tree | 850b407b7cfbfe76f8c6822fd26d85e2cf81147f /services/std_svc/psci/psci_main.c | |
parent | 90e8258eec95bcad556426597489a34208232e39 (diff) |
Verify capabilities before handling PSCI calls
This patch implements conditional checks in psci_smc_handler() to verify
that the psci function invoked by the caller is supported by the platform
or SPD implementation. The level of support is saved in the 'psci_caps'
variable. This check allows the PSCI implementation to return an error
early.
As a result of the above verification, the checks performed within the psci
handlers for the pm hooks are now removed and replaced with assertions.
Change-Id: I9b5b646a01d8566dc28c4d77dd3aa54e9bf3981a
Diffstat (limited to 'services/std_svc/psci/psci_main.c')
-rw-r--r-- | services/std_svc/psci/psci_main.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/services/std_svc/psci/psci_main.c b/services/std_svc/psci/psci_main.c index 0e10ac05..d8a00097 100644 --- a/services/std_svc/psci/psci_main.c +++ b/services/std_svc/psci/psci_main.c @@ -321,6 +321,10 @@ uint64_t psci_smc_handler(uint32_t smc_fid, if (is_caller_secure(flags)) SMC_RET1(handle, SMC_UNK); + /* Check the fid against the capabilities */ + if (!(psci_caps & define_psci_cap(smc_fid))) + SMC_RET1(handle, SMC_UNK); + if (((smc_fid >> FUNCID_CC_SHIFT) & FUNCID_CC_MASK) == SMC_32) { /* 32-bit PSCI function, clear top parameter bits */ |