From 11b5093ce408bc2ecd7b87711d471296d6d77984 Mon Sep 17 00:00:00 2001 From: Minh Nguyen Date: Mon, 19 Sep 2022 09:19:46 +0700 Subject: ArmPkg: Correct return value of "SMCCC_ARCH_SOC_ID" Function ID call According to "SMC Calling Convention" specification, section 7.4, return value of Arm Architecture Calls is stored at first argument of SMC aguments (ARM_SMC_ARGS). This value can be negative values indicating error or positive values (including zero) indicating success. Positive value would contain information of respective Function ID (Section 7.3.4 and 7.4.4). For that reason, "SMCCC_VERSION" and "SMCCC_ARCH_FEATURES" Function ID calls read return value from "SmcCallStatus" variable (Args.Arg0 - first argument of SMC call). But "SMCCC_ARCH_SOC_ID" Function ID call is reading return value from "SmcParam" variable (Args.Arg1 - second argument of SMC call) so it leads to unexpected results of "Jep106Code" and "SocRevision". This patch is to correct it. Signed-off-by: Nhi Pham Reviewed-by: Rebecca Cran Reviewed-by: Sami Mujawar Acked-by: Ard Biesheuvel Acked-by: Leif Lindholm --- .../Smbios/ProcessorSubClassDxe/SmbiosProcessorArmCommon.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ArmPkg') diff --git a/ArmPkg/Universal/Smbios/ProcessorSubClassDxe/SmbiosProcessorArmCommon.c b/ArmPkg/Universal/Smbios/ProcessorSubClassDxe/SmbiosProcessorArmCommon.c index e0010a40e4..b961be2133 100644 --- a/ArmPkg/Universal/Smbios/ProcessorSubClassDxe/SmbiosProcessorArmCommon.c +++ b/ArmPkg/Universal/Smbios/ProcessorSubClassDxe/SmbiosProcessorArmCommon.c @@ -2,7 +2,7 @@ Functions for processor information common to ARM and AARCH64. Copyright (c) 2021, NUVIA Inc. All rights reserved.
- Copyright (c) 2021, Ampere Computing LLC. All rights reserved.
+ Copyright (c) 2021 - 2022, Ampere Computing LLC. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -131,7 +131,7 @@ SmbiosGetSmcArm64SocId ( SmcCallStatus = ArmCallSmc1 (SMCCC_ARCH_SOC_ID, &SmcParam, NULL, NULL); if (SmcCallStatus >= 0) { - *Jep106Code = (INT32)SmcParam; + *Jep106Code = SmcCallStatus; } else { Status = EFI_UNSUPPORTED; } @@ -140,7 +140,7 @@ SmbiosGetSmcArm64SocId ( SmcCallStatus = ArmCallSmc1 (SMCCC_ARCH_SOC_ID, &SmcParam, NULL, NULL); if (SmcCallStatus >= 0) { - *SocRevision = (INT32)SmcParam; + *SocRevision = SmcCallStatus; } else { Status = EFI_UNSUPPORTED; } -- cgit v1.2.3