mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-27 23:35:10 +00:00
Fix SMCCC_ARCH_SOC_ID implementation
Commit 0e753437e7
("Implement SMCCC_ARCH_SOC_ID SMC call") executes
and return the result of SMCCC_ARCH_SOC_ID(soc_id_type) to the
SMCCC_ARCH_FEATURES(SMCCC_ARCH_SOC_ID) itself. Moreover it expect to
pass soc_id_type for SMCCC_ARCH_FEATURES(SMCCC_ARCH_SOC_ID) which is
incorrect.
Fix the implementation by returning SMC_OK for
SMCCC_ARCH_FEATURES(SMCCC_ARCH_SOC_ID) always and move the current
implementation under "smccc_arch_id" function which gets called from
SMC handler on receiving "SMCCC_ARCH_SOC_ID" command.
This change is tested over linux operating system
Change-Id: I61a980045081eae786b907d408767ba9ecec3468
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
This commit is contained in:
parent
658086747d
commit
a718c3d677
1 changed files with 18 additions and 10 deletions
|
@ -19,20 +19,13 @@ static int32_t smccc_version(void)
|
||||||
return MAKE_SMCCC_VERSION(SMCCC_MAJOR_VERSION, SMCCC_MINOR_VERSION);
|
return MAKE_SMCCC_VERSION(SMCCC_MAJOR_VERSION, SMCCC_MINOR_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t smccc_arch_features(u_register_t arg1, u_register_t arg2)
|
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_OK;
|
|
||||||
case SMCCC_ARCH_SOC_ID:
|
case SMCCC_ARCH_SOC_ID:
|
||||||
if (arg2 == SMCCC_GET_SOC_REVISION) {
|
return SMC_OK;
|
||||||
return plat_get_soc_revision();
|
|
||||||
}
|
|
||||||
if (arg2 == SMCCC_GET_SOC_VERSION) {
|
|
||||||
return plat_get_soc_version();
|
|
||||||
}
|
|
||||||
return SMC_ARCH_CALL_INVAL_PARAM;
|
|
||||||
#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)
|
||||||
|
@ -87,6 +80,19 @@ static int32_t smccc_arch_features(u_register_t arg1, u_register_t arg2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return soc revision or soc version on success otherwise
|
||||||
|
* return invalid parameter */
|
||||||
|
static int32_t smccc_arch_id(u_register_t arg1)
|
||||||
|
{
|
||||||
|
if (arg1 == SMCCC_GET_SOC_REVISION) {
|
||||||
|
return plat_get_soc_revision();
|
||||||
|
}
|
||||||
|
if (arg1 == SMCCC_GET_SOC_VERSION) {
|
||||||
|
return plat_get_soc_version();
|
||||||
|
}
|
||||||
|
return SMC_ARCH_CALL_INVAL_PARAM;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Top-level Arm Architectural Service SMC handler.
|
* Top-level Arm Architectural Service SMC handler.
|
||||||
*/
|
*/
|
||||||
|
@ -103,7 +109,9 @@ static uintptr_t arm_arch_svc_smc_handler(uint32_t smc_fid,
|
||||||
case SMCCC_VERSION:
|
case SMCCC_VERSION:
|
||||||
SMC_RET1(handle, smccc_version());
|
SMC_RET1(handle, smccc_version());
|
||||||
case SMCCC_ARCH_FEATURES:
|
case SMCCC_ARCH_FEATURES:
|
||||||
SMC_RET1(handle, smccc_arch_features(x1, x2));
|
SMC_RET1(handle, smccc_arch_features(x1));
|
||||||
|
case SMCCC_ARCH_SOC_ID:
|
||||||
|
SMC_RET1(handle, smccc_arch_id(x1));
|
||||||
#if WORKAROUND_CVE_2017_5715
|
#if WORKAROUND_CVE_2017_5715
|
||||||
case SMCCC_ARCH_WORKAROUND_1:
|
case SMCCC_ARCH_WORKAROUND_1:
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue