From 984b2fb3bda61ddda065566c72e6e32ea35b67b4 Mon Sep 17 00:00:00 2001 From: VarshitPandya Date: Wed, 22 Jul 2026 16:07:24 +0100 Subject: [PATCH] DynamicTablesPkg: Use ArmSmcccSocIdLib for SoC ID Update SmbiosSmcLib to use ArmSmcccSocIdLib for retrieving the JEP106 identification code and SoC revision. Remove the duplicated SMCCC feature detection and SoC ID calls while retaining the SMBIOS-specific formatting of the Type 4 Processor ID. Signed-off-by: Varshit Pandya --- DynamicTablesPkg/DynamicTables.dsc.inc | 1 + .../Include/Library/SmbiosSmcLib.h | 17 +-- .../Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.c | 105 +++--------------- .../Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.inf | 5 +- 4 files changed, 32 insertions(+), 96 deletions(-) diff --git a/DynamicTablesPkg/DynamicTables.dsc.inc b/DynamicTablesPkg/DynamicTables.dsc.inc index c71abe57a6..a442a29d1e 100644 --- a/DynamicTablesPkg/DynamicTables.dsc.inc +++ b/DynamicTablesPkg/DynamicTables.dsc.inc @@ -29,6 +29,7 @@ Tpm2DeviceTableLib|DynamicTablesPkg/Library/Common/Tpm2DeviceTableLib/Tpm2DeviceTableLib.inf [LibraryClasses.AARCH64] + ArmSmcccSocIdLib|ArmPkg/Library/ArmSmcccSocIdLib/ArmSmcccSocIdLib.inf DynamicTablesScmiInfoLib|DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf [Components.ARM, Components.AARCH64, Components.X64, Components.RISCV64, Components.LOONGARCH64] diff --git a/DynamicTablesPkg/Include/Library/SmbiosSmcLib.h b/DynamicTablesPkg/Include/Library/SmbiosSmcLib.h index 2f49055efa..bfd0bf7b91 100644 --- a/DynamicTablesPkg/Include/Library/SmbiosSmcLib.h +++ b/DynamicTablesPkg/Include/Library/SmbiosSmcLib.h @@ -1,6 +1,6 @@ /** @file * -* Copyright (c) 2025, ARM Limited. All rights reserved. +* Copyright (c) 2025 - 2026, ARM Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent * @@ -8,14 +8,17 @@ #pragma once -/** Returns the SOC ID, formatted for the SMBIOS Type 4 Processor ID field. +/** + Return the SoC ID formatted for the SMBIOS Type 4 Processor ID field. - @param Processor ID. + @param[out] ProcessorId Pointer to the SMBIOS Processor ID. - @return 0 on success - @return EFI_UNSUPPORTED if SMCCC_ARCH_SOC_ID is not implemented + @retval EFI_SUCCESS The Processor ID was returned successfully. + @retval EFI_INVALID_PARAMETER ProcessorId is NULL. + @retval EFI_UNSUPPORTED The SMCCC Architecture SoC ID interface is + unsupported or an SoC ID call failed. **/ -UINT64 +EFI_STATUS SmbiosSmcGetSocId ( - UINT64 *ProcessorId + OUT UINT64 *ProcessorId ); diff --git a/DynamicTablesPkg/Library/Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.c b/DynamicTablesPkg/Library/Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.c index 1e163c86b2..b838f1c4a0 100644 --- a/DynamicTablesPkg/Library/Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.c +++ b/DynamicTablesPkg/Library/Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.c @@ -3,111 +3,42 @@ Copyright (c) 2021, NUVIA Inc. All rights reserved.
Copyright (c) 2021 - 2022, Ampere Computing LLC. All rights reserved.
- Copyright (c) 2025, ARM Ltd. All rights reserved.
+ Copyright (c) 2025 - 2026, ARM Ltd. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include -#include -#include +#include #include -/** Checks if the ARM64 SoC ID SMC call is supported +/** + Return the SoC ID formatted for the SMBIOS Type 4 Processor ID field. - @return Whether the ARM64 SoC ID call is supported. + @param[out] ProcessorId Pointer to the SMBIOS Processor ID. + + @retval EFI_SUCCESS The Processor ID was returned successfully. + @retval EFI_INVALID_PARAMETER ProcessorId is NULL. + @retval EFI_UNSUPPORTED The SMCCC Architecture SoC ID interface is + unsupported or an SoC ID call failed. **/ -STATIC -BOOLEAN -HasSmcArm64SocId ( - VOID - ) -{ - INT32 SmcCallStatus; - BOOLEAN Arm64SocIdSupported; - UINTN SmcParam; - - Arm64SocIdSupported = FALSE; - - SmcCallStatus = ArmCallSmc0 (SMCCC_VERSION, NULL, NULL, NULL); - - if ((SmcCallStatus < 0) || ((SmcCallStatus >> 16) >= 1)) { - SmcParam = SMCCC_ARCH_SOC_ID; - SmcCallStatus = ArmCallSmc1 (SMCCC_ARCH_FEATURES, &SmcParam, NULL, NULL); - if (SmcCallStatus >= 0) { - Arm64SocIdSupported = TRUE; - } - } - - return Arm64SocIdSupported; -} - -/** Fetches the JEP106 code and SoC Revision. - - @param Jep106Code JEP 106 code. - @param SocRevision SoC revision. - - @retval EFI_SUCCESS Succeeded. - @retval EFI_UNSUPPORTED Failed. -**/ -STATIC EFI_STATUS -SmbiosGetSmcArm64SocId ( - OUT UINT32 *Jep106Code, - OUT UINT32 *SocRevision - ) -{ - INT32 SmcCallStatus; - EFI_STATUS Status; - UINTN SmcParam; - - Status = EFI_SUCCESS; - - SmcParam = 0; - SmcCallStatus = ArmCallSmc1 (SMCCC_ARCH_SOC_ID, &SmcParam, NULL, NULL); - - if (SmcCallStatus >= 0) { - *Jep106Code = (UINT32)SmcCallStatus; - } else { - Status = EFI_UNSUPPORTED; - } - - SmcParam = 1; - SmcCallStatus = ArmCallSmc1 (SMCCC_ARCH_SOC_ID, &SmcParam, NULL, NULL); - - if (SmcCallStatus >= 0) { - *SocRevision = (UINT32)SmcCallStatus; - } else { - Status = EFI_UNSUPPORTED; - } - - return Status; -} - -/** Returns the SOC ID, formatted for the SMBIOS Type 4 Processor ID field. - - @param Processor ID. - - @return 0 on success - @return EFI_UNSUPPORTED if SMCCC_ARCH_SOC_ID is not implemented -**/ -UINT64 SmbiosSmcGetSocId ( - UINT64 *ProcessorId + OUT UINT64 *ProcessorId ) { EFI_STATUS Status; UINT32 Jep106Code; UINT32 SocRevision; - if (HasSmcArm64SocId ()) { - Status = SmbiosGetSmcArm64SocId (&Jep106Code, &SocRevision); - if (!EFI_ERROR (Status)) { - *ProcessorId = ((UINT64)SocRevision << 32) | Jep106Code; - } - } else { - Status = EFI_UNSUPPORTED; + if (ProcessorId == NULL) { + return EFI_INVALID_PARAMETER; + } + + Status = ArmSmcccGetSocId (&Jep106Code, &SocRevision); + if (!EFI_ERROR (Status)) { + *ProcessorId = ((UINT64)SocRevision << 32) | Jep106Code; } return Status; diff --git a/DynamicTablesPkg/Library/Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.inf b/DynamicTablesPkg/Library/Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.inf index ea43c0784a..ab95d443a3 100644 --- a/DynamicTablesPkg/Library/Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.inf +++ b/DynamicTablesPkg/Library/Smbios/Arm/SmbiosSmcLib/SmbiosSmcLib.inf @@ -1,6 +1,6 @@ #/** @file # -# Copyright (c) 2025, ARM Ltd. All rights reserved.
+# Copyright (c) 2025 - 2026, ARM Ltd. All rights reserved.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -18,9 +18,10 @@ SmbiosSmcLib.c [Packages] + ArmPkg/ArmPkg.dec DynamicTablesPkg/DynamicTablesPkg.dec MdePkg/MdePkg.dec [LibraryClasses] - ArmSmcLib + ArmSmcccSocIdLib