SMCCC: Introduce function to check SMCCC function availability
Currently, 'SMCCC_ARCH_FEATURES' SMC call handler unconditionally returns 'SMC_OK' for 'SMCCC_ARCH_SOC_ID' function. This seems to be not correct for the platform which doesn't implement soc-id functionality i.e. functions to retrieve both soc-version and soc-revision. Hence introduced a platform function which will check whether SMCCC feature is available for the platform. Also, updated porting guide for the newly added platform function. Change-Id: I389f0ef6b0837bb24c712aa995b7176117bc7961 Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
This commit is contained in:
parent
1056ddce76
commit
6f0a2f04ab
|
@ -1130,6 +1130,7 @@ This function returns soc version which mainly consist of below fields
|
||||||
|
|
||||||
soc_version[30:24] = JEP-106 continuation code for the SiP
|
soc_version[30:24] = JEP-106 continuation code for the SiP
|
||||||
soc_version[23:16] = JEP-106 identification code with parity bit for the SiP
|
soc_version[23:16] = JEP-106 identification code with parity bit for the SiP
|
||||||
|
soc_version[15:0] = Implementation defined SoC ID
|
||||||
|
|
||||||
Function : plat_get_soc_revision()
|
Function : plat_get_soc_revision()
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -1145,6 +1146,18 @@ This function returns soc revision in below format
|
||||||
|
|
||||||
soc_revision[0:30] = SOC revision of specific SOC
|
soc_revision[0:30] = SOC revision of specific SOC
|
||||||
|
|
||||||
|
Function : plat_is_smccc_feature_available()
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Argument : u_register_t
|
||||||
|
Return : int32_t
|
||||||
|
|
||||||
|
This function returns SMC_ARCH_CALL_SUCCESS if the platform supports
|
||||||
|
the SMCCC function specified in the argument; otherwise returns
|
||||||
|
SMC_ARCH_CALL_NOT_SUPPORTED.
|
||||||
|
|
||||||
Modifications specific to a Boot Loader stage
|
Modifications specific to a Boot Loader stage
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -341,4 +341,9 @@ int32_t plat_get_soc_version(void);
|
||||||
*/
|
*/
|
||||||
int32_t plat_get_soc_revision(void);
|
int32_t plat_get_soc_revision(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Optional function to check for SMCCC function availability for platform
|
||||||
|
*/
|
||||||
|
int32_t plat_is_smccc_feature_available(u_register_t fid);
|
||||||
|
|
||||||
#endif /* PLATFORM_H */
|
#endif /* PLATFORM_H */
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <common/debug.h>
|
#include <common/debug.h>
|
||||||
#include <lib/xlat_tables/xlat_tables_compat.h>
|
#include <lib/xlat_tables/xlat_tables_compat.h>
|
||||||
#include <plat/common/platform.h>
|
#include <plat/common/platform.h>
|
||||||
|
#include <services/arm_arch_svc.h>
|
||||||
#include <smccc_helpers.h>
|
#include <smccc_helpers.h>
|
||||||
#include <tools_share/firmware_encrypted.h>
|
#include <tools_share/firmware_encrypted.h>
|
||||||
|
|
||||||
|
@ -25,6 +26,7 @@
|
||||||
#pragma weak bl2_plat_handle_post_image_load
|
#pragma weak bl2_plat_handle_post_image_load
|
||||||
#pragma weak plat_try_next_boot_source
|
#pragma weak plat_try_next_boot_source
|
||||||
#pragma weak plat_get_enc_key_info
|
#pragma weak plat_get_enc_key_info
|
||||||
|
#pragma weak plat_is_smccc_feature_available
|
||||||
#pragma weak plat_get_soc_version
|
#pragma weak plat_get_soc_version
|
||||||
#pragma weak plat_get_soc_revision
|
#pragma weak plat_get_soc_revision
|
||||||
|
|
||||||
|
@ -38,6 +40,11 @@ int32_t plat_get_soc_revision(void)
|
||||||
return SMC_ARCH_CALL_NOT_SUPPORTED;
|
return SMC_ARCH_CALL_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t plat_is_smccc_feature_available(u_register_t fid __unused)
|
||||||
|
{
|
||||||
|
return SMC_ARCH_CALL_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
void bl2_el3_plat_prepare_exit(void)
|
void bl2_el3_plat_prepare_exit(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,9 @@ static int32_t smccc_arch_features(u_register_t arg1)
|
||||||
switch (arg1) {
|
switch (arg1) {
|
||||||
case SMCCC_VERSION:
|
case SMCCC_VERSION:
|
||||||
case SMCCC_ARCH_FEATURES:
|
case SMCCC_ARCH_FEATURES:
|
||||||
|
return SMC_ARCH_CALL_SUCCESS;
|
||||||
case SMCCC_ARCH_SOC_ID:
|
case SMCCC_ARCH_SOC_ID:
|
||||||
return SMC_OK;
|
return plat_is_smccc_feature_available(arg1);
|
||||||
#if WORKAROUND_CVE_2017_5715
|
#if WORKAROUND_CVE_2017_5715
|
||||||
case SMCCC_ARCH_WORKAROUND_1:
|
case SMCCC_ARCH_WORKAROUND_1:
|
||||||
if (check_wa_cve_2017_5715() == ERRATA_NOT_APPLIES)
|
if (check_wa_cve_2017_5715() == ERRATA_NOT_APPLIES)
|
||||||
|
|
Loading…
Reference in New Issue