From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 8B9B5AC13BD for ; Thu, 2 May 2024 16:37:01 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=7IRZyboQFzzo0gy5q6uFN8DjXoWEejl7GIVu7wfUSj8=; c=relaxed/simple; d=groups.io; h=Message-ID:Date:MIME-Version:User-Agent:From:Subject:To:Cc:References:In-Reply-To:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20240206; t=1714667820; v=1; b=1urRWXbW7WFIkce21D0IImorEcIwDw7PjaAJSBQWizjHORmVc8op6WGTo928el9yFUM2eLfm ULNR4AwFaUBha3fzCq81fQd5bBL3V1tSuXdF5awqmHmorErL9fXv9crSJs1G3WXU+ouKL+hOmL1 r4F5c1aaH6tqKyNpZenbfqLA1OgiohNdoy4bdWHmtemIOicq3YziwHvXr2CFt4iBmONK1SD3Yo0 qr3zdr+Iq3PLehvfC9GzIgLqOoJNT674EgpwbXuIWnO0ZJaFJy2p+VzgAaWlpJ504KbClX+eCNg rw+olqjloYdisPdILs5rXb3vLSMKuWbZc2/lzSN6nLlKA== X-Received: by 127.0.0.2 with SMTP id z3E2YY7687511xJLvQw6E5Wf; Thu, 02 May 2024 09:37:00 -0700 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.1111.1714667819447821179 for ; Thu, 02 May 2024 09:36:59 -0700 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 810122F4; Thu, 2 May 2024 09:37:24 -0700 (PDT) X-Received: from [10.34.111.156] (e126645.nice.Arm.com [10.34.111.156]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 980E13F793; Thu, 2 May 2024 09:36:57 -0700 (PDT) Message-ID: <7db31c04-3ad5-45ea-a5a2-59a8ddfc686c@arm.com> Date: Thu, 2 May 2024 18:36:54 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: "PierreGondois" Subject: Re: [edk2-devel] [RESEND PATCH v4 3/5] DynamicTablesPkg: Adds ACPI WSMT Table generator To: Abdul Lateef Attar , devel@edk2.groups.io Cc: Sami Mujawar References: <75c1147b052ecd8b8194e2128c1ff62c28872c8e.1714369949.git.AbdulLateef.Attar@amd.com> In-Reply-To: <75c1147b052ecd8b8194e2128c1ff62c28872c8e.1714369949.git.AbdulLateef.Attar@amd.com> Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Thu, 02 May 2024 09:36:59 -0700 Resent-From: pierre.gondois@arm.com Reply-To: devel@edk2.groups.io,pierre.gondois@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: Io7ep2A9oj9zBamgIDfqlgb9x7686176AA= Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=1urRWXbW; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=arm.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io Hello Abdul, some comments on the patch: On 4/29/24 08:03, Abdul Lateef Attar wrote: > Adds generic ACPI WSMT table generator library. > Register/Deregister WSMT table. > Update the WSMT table during boot as per specification. >=20 > Cc: Sami Mujawar > Cc: Pierre Gondois > Signed-off-by: Abdul Lateef Attar > --- > DynamicTablesPkg/DynamicTables.dsc.inc | 2 + > DynamicTablesPkg/Include/AcpiTableGenerator.h | 1 + > .../Include/ArchNameSpaceObjects.h | 11 + > .../Library/Acpi/AcpiWsmtLib/AcpiWsmtLib.inf | 30 +++ > .../Library/Acpi/AcpiWsmtLib/WsmtGenerator.c | 243 ++++++++++++++++++ > 5 files changed, 287 insertions(+) > create mode 100644 DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/AcpiWsmtLi= b.inf > create mode 100644 DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/WsmtGenera= tor.c >=20 > diff --git a/DynamicTablesPkg/DynamicTables.dsc.inc b/DynamicTablesPkg/Dy= namicTables.dsc.inc > index b2ef36eb8a..477dc6b6a9 100644 > --- a/DynamicTablesPkg/DynamicTables.dsc.inc > +++ b/DynamicTablesPkg/DynamicTables.dsc.inc > @@ -35,6 +35,7 @@ > # > DynamicTablesPkg/Library/Acpi/AcpiFadtLib/AcpiFadtLib.inf > DynamicTablesPkg/Library/Acpi/AcpiHpetLib/AcpiHpetLib.inf > + DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/AcpiWsmtLib.inf Same comment as in: [PATCH v4 2/5] DynamicTablesPkg: Adds ACPI HPET Table generator about: [Components.IA32, Components.X64] also if the table is Intel specific, maybe the generator should be placed u= nder: DynamicTablesPkg/Library/Acpi/X64/ (or a better folder name) also I think the CmObject should be moved to: X64NameSpaceObjects.h > =20 > [Components.IA32, Components.X64] > # > @@ -44,6 +45,7 @@ > > NULL|DynamicTablesPkg/Library/Acpi/AcpiFadtLib/AcpiFadtLib.inf > NULL|DynamicTablesPkg/Library/Acpi/AcpiHpetLib/AcpiHpetLib.inf > + NULL|DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/AcpiWsmtLib.inf > } > =20 > [Components.ARM, Components.AARCH64] > diff --git a/DynamicTablesPkg/Include/AcpiTableGenerator.h b/DynamicTable= sPkg/Include/AcpiTableGenerator.h > index 18b5f99f47..a32ef46ecb 100644 > --- a/DynamicTablesPkg/Include/AcpiTableGenerator.h > +++ b/DynamicTablesPkg/Include/AcpiTableGenerator.h > @@ -100,6 +100,7 @@ typedef enum StdAcpiTableId { > EStdAcpiTableIdSsdtPciExpress, ///< SSDT Pci Express G= enerator > EStdAcpiTableIdPcct, ///< PCCT Generator > EStdAcpiTableIdHpet, ///< HPET Generator > + EStdAcpiTableIdWsmt, ///< WSMT Generator > EStdAcpiTableIdMax > } ESTD_ACPI_TABLE_ID; > =20 > diff --git a/DynamicTablesPkg/Include/ArchNameSpaceObjects.h b/DynamicTab= lesPkg/Include/ArchNameSpaceObjects.h > index b90e573a88..8b16056ba1 100644 > --- a/DynamicTablesPkg/Include/ArchNameSpaceObjects.h > +++ b/DynamicTablesPkg/Include/ArchNameSpaceObjects.h > @@ -40,6 +40,7 @@ typedef enum ArchObjectID { > EArchObjFadtHypervisorVendorId, ///< 12 - Hypervisor vendor identity = information > EArchObjFadtMiscInfo, ///< 13 - Legacy fields; RTC, latency= , flush stride, etc > EArchObjHpetBaseAddress, ///< 14 - HPET Base Address > + EArchObjWsmtProtectionFlags, ///< 15 - WSMT protection flags > EArchObjMax > } E_ARCH_OBJECT_ID; > =20 > @@ -223,4 +224,14 @@ typedef struct CmArchFadtMiscInfo { > typedef struct CmArchHpetBaseAddress { > UINT64 BaseAddress; > } CM_ARCH_HPET_BASE_ADDRESS; > + > +/** A structure that describes the > + protection flags for the WSMT fields information. > + > + ID: EArchObjWsmtProtectionFlags > +*/ > +typedef struct CmArchWsmtProtectionFlags { > + UINT32 ProtectionFlags; > +} CM_ARCH_WSMT_PROTECTION_FLAGS; > + > #endif > diff --git a/DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/AcpiWsmtLib.inf b/= DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/AcpiWsmtLib.inf > new file mode 100644 > index 0000000000..80ddaf0ab4 > --- /dev/null > +++ b/DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/AcpiWsmtLib.inf > @@ -0,0 +1,30 @@ > +## @file > +# WSMT Table Generator > +# > +# Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > + > +[Defines] > + INF_VERSION =3D 1.27 > + BASE_NAME =3D AcpiWsmtLib > + FILE_GUID =3D D6C34086-C914-4F8E-B56A-08329B4D1271 > + VERSION_STRING =3D 1.0 > + MODULE_TYPE =3D DXE_DRIVER > + LIBRARY_CLASS =3D NULL|DXE_DRIVER > + CONSTRUCTOR =3D AcpiWsmtLibConstructor > + DESTRUCTOR =3D AcpiWsmtLibDestructor > + > +[Sources] > + WsmtGenerator.c > + > +[Packages] > + DynamicTablesPkg/DynamicTablesPkg.dec > + MdeModulePkg/MdeModulePkg.dec > + MdePkg/MdePkg.dec > + > +[LibraryClasses] > + BaseLib > + DebugLib > + > diff --git a/DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/WsmtGenerator.c b/= DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/WsmtGenerator.c > new file mode 100644 > index 0000000000..a63b4b4859 > --- /dev/null > +++ b/DynamicTablesPkg/Library/Acpi/AcpiWsmtLib/WsmtGenerator.c > @@ -0,0 +1,243 @@ > +/** @file > + WSMT Table Generator > + > + Copyright (c) 2017 - 2023, Arm Limited. All rights reserved. > + Copyright (C) 2024 Advanced Micro Devices, Inc. All rights reserved. > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > + @par Reference(s): > + - ACPI 6.5 Specification, Aug 29, 2022 > + - WSMT spec, version 1.0, April 18, 2016 > + https://msdn.microsoft.com/windows/hardware/drivers/bringup/acpi-sys= tem-description-tables#wsmt > + > +**/ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +/** The Creator ID for the ACPI tables generated using > + the standard ACPI table generators. > +*/ > +#define TABLE_GENERATOR_CREATOR_ID_GENERIC SIGNATURE_32('D', 'Y', 'N', = 'T') > + > +/** The AcpiWsmt is a template EFI_ACPI_WSMT_TABLE > + structure used for generating the WSMT Table. > +*/ > +STATIC > +EFI_ACPI_WSMT_TABLE mAcpiWsmt =3D { > + ACPI_HEADER ( > + EFI_ACPI_WINDOWS_SMM_SECURITY_MITIGATION_TABLE_SIGNATURE, > + EFI_ACPI_WSMT_TABLE, > + EFI_WSMT_TABLE_REVISION > + ), > + EFI_WSMT_PROTECTION_FLAGS_SYSTEM_RESOURCE_PROTECTION| \ > + EFI_WSMT_PROTECTION_FLAGS_COMM_BUFFER_NESTED_PTR_PROTECTION| \ > + EFI_WSMT_PROTECTION_FLAGS_FIXED_COMM_BUFFERS > +}; > + > +/** This macro expands to a function that retrieves the > + protection flags information for WSMT Table. > +*/ > +GET_OBJECT_LIST ( > + EObjNameSpaceArch, > + EArchObjWsmtProtectionFlags, > + CM_ARCH_WSMT_PROTECTION_FLAGS > + ); > + > +/** Construct the WSMT table. > + > + This function invokes the Configuration Manager protocol interface > + to get the required hardware information for generating the ACPI > + table. > + > + If this function allocates any resources then they must be freed > + in the FreeXXXXTableResources function. > + > + @param [in] This Pointer to the table generator. > + @param [in] AcpiTableInfo Pointer to the ACPI Table Info. > + @param [in] CfgMgrProtocol Pointer to the Configuration Manager > + Protocol Interface. > + @param [out] Table Pointer to the constructed ACPI Table. > + > + @retval EFI_SUCCESS Table generated successfully. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object was not found. > + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration > + Manager is less than the Object size for= the > + requested object. > +**/ > +STATIC > +EFI_STATUS > +BuildWsmtTable ( > + IN CONST ACPI_TABLE_GENERATOR *CONST This, > + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO *CONST AcpiTableInfo, > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol= , > + OUT EFI_ACPI_DESCRIPTION_HEADER **CONST Table > + ) > +{ > + EFI_STATUS Status; > + CM_ARCH_WSMT_PROTECTION_FLAGS *ProtectionFlags; > + > + ASSERT (This !=3D NULL); > + ASSERT (AcpiTableInfo !=3D NULL); > + ASSERT (CfgMgrProtocol !=3D NULL); > + ASSERT (Table !=3D NULL); > + ASSERT (AcpiTableInfo->TableGeneratorId =3D=3D This->GeneratorID); > + ASSERT (AcpiTableInfo->AcpiTableSignature =3D=3D This->AcpiTableSignat= ure); > + > + if ((AcpiTableInfo->AcpiTableRevision < This->MinAcpiTableRevision) || > + (AcpiTableInfo->AcpiTableRevision > This->AcpiTableRevision)) > + { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: WSMT: Requested table revision =3D %d, is not supported." > + "Supported table revision: Minimum =3D %d, Maximum =3D %d\n", > + AcpiTableInfo->AcpiTableRevision, > + This->MinAcpiTableRevision, > + This->AcpiTableRevision > + )); > + return EFI_INVALID_PARAMETER; > + } > + > + *Table =3D NULL; > + > + Status =3D AddAcpiHeader ( > + CfgMgrProtocol, > + This, > + (EFI_ACPI_DESCRIPTION_HEADER *)&mAcpiWsmt, > + AcpiTableInfo, > + sizeof (EFI_ACPI_WSMT_TABLE) > + ); > + if (EFI_ERROR (Status)) { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: WSMT: Failed to add ACPI header. Status =3D %r\n", > + Status > + )); > + return Status; > + } > + > + Status =3D GetEArchObjWsmtProtectionFlags ( > + CfgMgrProtocol, > + CM_NULL_TOKEN, > + &ProtectionFlags, > + NULL > + ); > + if (EFI_ERROR (Status)) { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: WSMT: Failed to get protection flags information." \ > + " Status =3D %r\n", > + Status > + )); > + } else { > + mAcpiWsmt.ProtectionFlags =3D ProtectionFlags->ProtectionFlags; > + } > + > + /// Sanity check WSMT Projection Flags > + if ((mAcpiWsmt.ProtectionFlags & EFI_WSMT_PROTECTION_FLAGS_COMM_BUFFER= _NESTED_PTR_PROTECTION) !=3D 0) { > + if ((mAcpiWsmt.ProtectionFlags & EFI_WSMT_PROTECTION_FLAGS_FIXED_COM= M_BUFFERS) =3D=3D 0) { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: WSMT: Protection flags are invalid. " \ > + "COMM_BUFFER_NESTED_PTR_PROTECTION is set but FIXED_COMM_BUFFERS= is not set.\n" > + )); > + return EFI_INVALID_PARAMETER; > + } > + } > + > + *Table =3D (EFI_ACPI_DESCRIPTION_HEADER *)&mAcpiWsmt; > + > + return Status; > +} > + > +/** This macro defines the WSMT Table Generator revision. > +*/ > +#define WSMT_GENERATOR_REVISION CREATE_REVISION (1, 0) > + > +/** The interface for the WSMT Table Generator. > +*/ > +STATIC > +CONST > +ACPI_TABLE_GENERATOR mWsmtGenerator =3D { > + // Generator ID > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdWsmt), > + // Generator Description > + L"ACPI.STD.WSMT.GENERATOR", > + // ACPI Table Signature > + EFI_ACPI_WINDOWS_SMM_SECURITY_MITIGATION_TABLE_SIGNATURE, > + // ACPI Table Revision supported by this Generator > + EFI_WSMT_TABLE_REVISION, > + // Minimum supported ACPI Table Revision > + EFI_WSMT_TABLE_REVISION, > + // Creator ID > + TABLE_GENERATOR_CREATOR_ID_GENERIC, > + // Creator Revision > + WSMT_GENERATOR_REVISION, > + // Build Table function > + BuildWsmtTable, > + // No additional resources are allocated by the generator. > + // Hence the Free Resource function is not required. > + NULL, > + // Extended build function not needed > + NULL, > + // Extended build function not implemented by the generator. > + // Hence extended free resource function is not required. > + NULL > +}; > + > +/** Register the Generator with the ACPI Table Factory. > + > + @param [in] ImageHandle The handle to the image. > + @param [in] SystemTable Pointer to the System Table. > + > + @retval EFI_SUCCESS The Generator is registered. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_ALREADY_STARTED The Generator for the Table ID > + is already registered. > +**/ > +EFI_STATUS > +EFIAPI > +AcpiWsmtLibConstructor ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + EFI_STATUS Status; > + > + Status =3D RegisterAcpiTableGenerator (&mWsmtGenerator); > + DEBUG ((DEBUG_INFO, "WSMT: Register Generator. Status =3D %r\n", Statu= s)); > + ASSERT_EFI_ERROR (Status); > + return Status; > +} > + > +/** Deregister the Generator from the ACPI Table Factory. > + > + @param [in] ImageHandle The handle to the image. > + @param [in] SystemTable Pointer to the System Table. > + > + @retval EFI_SUCCESS The Generator is deregistered. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The Generator is not registered. > +**/ > +EFI_STATUS > +EFIAPI > +AcpiWsmtLibDestructor ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE *SystemTable > + ) > +{ > + EFI_STATUS Status; > + > + Status =3D DeregisterAcpiTableGenerator (&mWsmtGenerator); > + DEBUG ((DEBUG_INFO, "WSMT: Deregister Generator. Status =3D %r\n", Sta= tus)); > + ASSERT_EFI_ERROR (Status); > + return Status; > +} -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#118530): https://edk2.groups.io/g/devel/message/118530 Mute This Topic: https://groups.io/mt/105796052/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-