From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (NAM12-MW2-obe.outbound.protection.outlook.com [40.107.244.81]) by mx.groups.io with SMTP id smtpd.web10.26746.1656604140446747415 for ; Thu, 30 Jun 2022 08:49:00 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=selector2 header.b=DPCbvo2X; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: nvidia.com, ip: 40.107.244.81, mailfrom: jbrasen@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PV2xiWoIRKUBbf3QiOmPa7d5JMoUB/NJexzSondC6SHFqa6MzY0NV+Nnuv6wpxt4rrCRRQZ2jnOvFK1Kl/KXSztgBUQwehv82BwElXwETgQfe0SpMcT2MfPWhM9eN9vUkrFW78MgS7KUKRaLh6GQoaD9C/yX05nQGO8gggWtFWASamObZRa7/0Imfa+kujAujD5CNMAQsGSbxf3eyjt/gBncQ/6D/X5joBhxI1HBkfHH9gCKGHzNJt6II4pqxkhOfSTuU1nyKG4ubUavOitHAU0EItWsnR/cdXOIgYKEZexr6bkHzz1dE37wm+qdfaRs5yUERtm08FhqnRMZffWyBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Yevbqds6heVqNdmAxK9Js/3lrTfF6dyjjI1Xz45aDuA=; b=eVv89fEsLL1A0vBoJQVwekRHrMLAufnwZ1pPUw+4Ln8ei4F13J85C1U0M0uSnVbIaTs+6jDtZD/RFBRiN/Wj58JSsvEKiFLkcX6W/U9Vz7xKewlbqrsfNkE42IODsPcpL7uSw2DXKmG2DGEFTf3JQ9+aJ0TLG2L4oESaWfh6W6YVXzOYeWdjma0tPBcARrzskY00H5LeZrAPwyjdXedOqPPNkvtARy3FPk7KHEhsrIV/3MIxeoxk1LqAjMwTt3/Mh2zP89Xb8k0T1+0N0bMj791OnOtKmx6p+wHl9WUEQE3/u97WWTlGGqKQedx0tlAoUgE2J6mEmdSWVYYP0yOmMg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.238) smtp.rcpttodomain=arm.com smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Yevbqds6heVqNdmAxK9Js/3lrTfF6dyjjI1Xz45aDuA=; b=DPCbvo2X86HmzcY88C8ngzUaqf7bKnBQgtXrzZeb7PJDkCObNDPYIOI2ZcSX2uSpBxZo6asiHSJoZ80znenRG26LYxr1f3giiScaNrfr4aUnp46A1OX7+vP9nOHKaOu21rKyTkTZYOhbjVPyYN/1bOO4mAzHQtTGTPpvrtZE/xeKzXTxYWavV3fgeUxZh7QVtphyUg3WKHZ+FQdjSsR7M9rMPVApRCxA3XYrt1xht/yRBD2bKNHu8qsHeLNGTmpnkGXpv0l1jbTBXQT9HlSHTUL522c+vS8xydHq3KVPLRVlwXhmusDgC42u2mXLF6+d3nMqL+lurMjh36yqYwi+Pw== Received: from DM6PR02CA0049.namprd02.prod.outlook.com (2603:10b6:5:177::26) by BN7PR12MB2756.namprd12.prod.outlook.com (2603:10b6:408:29::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5373.18; Thu, 30 Jun 2022 15:48:58 +0000 Received: from DM6NAM11FT010.eop-nam11.prod.protection.outlook.com (2603:10b6:5:177:cafe::5a) by DM6PR02CA0049.outlook.office365.com (2603:10b6:5:177::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.14 via Frontend Transport; Thu, 30 Jun 2022 15:48:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.238) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.238 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.238; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (12.22.5.238) by DM6NAM11FT010.mail.protection.outlook.com (10.13.172.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5395.14 via Frontend Transport; Thu, 30 Jun 2022 15:48:57 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by DRHQMAIL105.nvidia.com (10.27.9.14) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Thu, 30 Jun 2022 15:48:56 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.26; Thu, 30 Jun 2022 08:48:55 -0700 Received: from perses.nvidia.com (10.127.8.14) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.986.26 via Frontend Transport; Thu, 30 Jun 2022 08:48:55 -0700 From: "Jeff Brasen" To: CC: , , , Jeff Brasen Subject: [PATCH 4/4] DynamicTablesPkg: AcpiSsdtPcieLibArm: Add support for override protocol Date: Thu, 30 Jun 2022 09:48:51 -0600 Message-ID: <45abcaa79586b025205269d17957537d613c9bc2.1656603839.git.jbrasen@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-NVConfidentiality: public Return-Path: jbrasen@nvidia.com X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b972ebd7-2004-4884-ae05-08da5ab00b82 X-MS-TrafficTypeDiagnostic: BN7PR12MB2756:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UrUe4qqBeXVG3afz6qhWN9VH5Pd81Ruta2SCbktpihbz0wrImNTiubgipuN1io6Bft318g0ozsgGYHjZvvc8AfYsEcqBnsvE5JC3ER35Wz6lHJY70hllACR4YH1HqFZX6mscTyXFmJ/f0zCd9sh7z4KTZtpiVeiWRlyc9VomffIvg/yQn0PXqRF6DJCJCy+UF3G6xtF9BU32pA6fQXHBQxcEovmyU1u0iuXcnePBWuIUmUh5Z7GgJzScIPl+DsKyn+1i1zm0Do0bJrLIHqFQOAhbiFa1XWFw26oEoOxb9wdLSKVhNG95ZA357y14YTqvyfvjhywCjhE55+o3McZeURC6Ek4Ku2i9sZ9ZN1L76qiI1iXw3Ocu+h6rAlWpoDbg4mAsrEGSZmDDTjk5XyYT00i3NJhF2xPMO4XIA6ptU0q6wHdGEqw8GBeOe787yRUsI7Xj6PLn6Eq4rQYZ6VnrLCsBKm0uaKYbHKrg/+dbzn1ggcOSZni1G53jbLf7HPrZhfN0T+DKQ/aehxYCT90qcjWiNXgARJ91x/bY79jnBwxRMjD+fDhy6st9KQ+xT4xJi06+yryvdqu0MXySTGOcbXBnayOecTmg2Al23Ljs6i/zbqgZPqs0PQQzDAGmTb3YsFGMiXudzKp/ZinD5zA5xTySC2FzoEJ7ARVEg+Kpg2sae5KGXQgz7Zw5qb8e9PiJylPfqiuP/j8iZiVSLkRhqHY5D5HxCSOzh987+O7nxwweypFbMJGUK6K9X+cWRPV7UVJXVv+e6lFBv723w1es6P8peScRKM8LGpXW6gLhF3Va1ISZT4s5miyajlWZ1KOkiat0mTvYNcTgNNMl5w8L6SAZYrZz8BHslGlFDnuq1uSyo/1LDvhOgzSxPF4MrJkG X-Forefront-Antispam-Report: CIP:12.22.5.238;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:InfoNoRecords;CAT:NONE;SFS:(13230016)(4636009)(396003)(136003)(39860400002)(346002)(376002)(36840700001)(40470700004)(46966006)(478600001)(8936002)(316002)(6916009)(5660300002)(54906003)(81166007)(36756003)(356005)(82740400003)(83380400001)(70206006)(8676002)(4326008)(86362001)(70586007)(107886003)(186003)(336012)(2616005)(41300700001)(40460700003)(36860700001)(26005)(6666004)(2906002)(47076005)(40480700001)(82310400005)(426003)(7696005)(213903007)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2022 15:48:57.8954 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b972ebd7-2004-4884-ae05-08da5ab00b82 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[12.22.5.238];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DM6NAM11FT010.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR12MB2756 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain Some platfoms may want to modify the ACPI table created.=0D Add support for protocol that can provide an alternative implementation.=0D =0D Signed-off-by: Jeff Brasen =0D ---=0D DynamicTablesPkg/DynamicTablesPkg.dec | 3 +=0D .../Protocol/SsdtPcieOverrideProtocol.h | 63 +++++++++++++++++++=0D .../AcpiSsdtPcieLibArm/SsdtPcieGenerator.c | 31 ++++++++-=0D .../Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.inf | 4 ++=0D 4 files changed, 98 insertions(+), 3 deletions(-)=0D create mode 100644 DynamicTablesPkg/Include/Protocol/SsdtPcieOverrideProto= col.h=0D =0D diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec b/DynamicTablesPkg/Dynam= icTablesPkg.dec=0D index a890a048be..bb66bdaf14 100644=0D --- a/DynamicTablesPkg/DynamicTablesPkg.dec=0D +++ b/DynamicTablesPkg/DynamicTablesPkg.dec=0D @@ -43,6 +43,9 @@=0D # Dynamic Table Factory Protocol GUID=0D gEdkiiDynamicTableFactoryProtocolGuid =3D { 0x91d1e327, 0xfe5a, 0x49b8, = { 0xab, 0x65, 0xe, 0xce, 0x2d, 0xdb, 0x45, 0xec } }=0D =0D + # Protocol to override PCI SSDT table generation=0D + gEdkiiDynamicTableSsdtPcieOverrideProtocolGuid =3D { 0x962e8b44, 0x23b3,= 0x41da, { 0x9f, 0x36, 0xca, 0xde, 0x68, 0x49, 0xfb, 0xf6 } }=0D +=0D [PcdsFixedAtBuild]=0D =0D # Maximum number of Custom ACPI Generators=0D diff --git a/DynamicTablesPkg/Include/Protocol/SsdtPcieOverrideProtocol.h b= /DynamicTablesPkg/Include/Protocol/SsdtPcieOverrideProtocol.h=0D new file mode 100644=0D index 0000000000..29568a0159=0D --- /dev/null=0D +++ b/DynamicTablesPkg/Include/Protocol/SsdtPcieOverrideProtocol.h=0D @@ -0,0 +1,63 @@=0D +/** @file=0D +=0D + Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.=0D +=0D + SPDX-License-Identifier: BSD-2-Clause-Patent=0D +=0D +**/=0D +=0D +#ifndef SSDT_PCIE_OVERRIDE_PROTOCOL_H_=0D +#define SSDT_PCIE_OVERRIDE_PROTOCOL_H_=0D +=0D +#include =0D +#include =0D +=0D +/** This macro defines the SSDT PCI Override Protocol GUID.=0D +=0D + GUID: {D85A4835-5A82-4894-AC02-706F43D5978E}=0D +*/=0D +#define EDKII_SSDT_PCI_OVERRIDE_PROTOCOL_GUID \=0D + { 0x962e8b44, 0x23b3, 0x41da, \=0D + { 0x9f, 0x36, 0xca, 0xde, 0x68, 0x49, 0xfb, 0xf6 } \=0D + };=0D +=0D +/**=0D + Forward declarations:=0D +*/=0D +typedef struct SsdtOverridePciProtocol EDKII_SSDT_PCI_OVERRIDE_PROTOCOL;=0D +=0D +/** The UpdateTable function allows the override protocol to update the=0D + * PCIe SSDT table prior to being created.=0D +=0D + @param [in] This Pointer to the SSDT PCI Override Protocol.=0D + @param [in] PciInfo The PCIe configuration info for this node.=0D + @param [in] Uid UID that was selected for this PCIe node.=0D + @param [in, out] PciNode Pointer to the PCI node of this ACPI table.=0D +=0D + @retval EFI_SUCCESS Success.=0D + @retval EFI_INVALID_PARAMETER A parameter is invalid.=0D + @retval EFI_DEVICE_ERROR Failed to update the table.=0D +**/=0D +typedef=0D +EFI_STATUS=0D +(EFIAPI *EDKII_SSDT_PCI_OVERRIDE_PROTOCOL_UPDATE_TABLE)(=0D + IN CONST EDKII_SSDT_PCI_OVERRIDE_PROTOCOL *CONST This,=0D + IN CONST CM_ARM_PCI_CONFIG_SPACE_INFO *PciInfo,=0D + IN UINT32 Uid,=0D + IN OUT AML_ROOT_NODE_HANDLE *PciNode=0D + );=0D +=0D +/** The EDKII_CONFIGURATION_MANAGER_PROTOCOL structure describes the=0D + Configuration Manager Protocol interface.=0D +*/=0D +typedef struct SsdtOverridePciProtocol {=0D + /** The interface used to update the ACPI table for PCI.=0D + */=0D + EDKII_SSDT_PCI_OVERRIDE_PROTOCOL_UPDATE_TABLE UpdateTable;=0D +} EDKII_SSDT_PCI_OVERRIDE_PROTOCOL;=0D +=0D +/** The SSDT PCI Override Protocol GUID.=0D +*/=0D +extern EFI_GUID gEdkiiDynamicTableSsdtPcieOverrideProtocolGuid;=0D +=0D +#endif // SSDT_PCIE_OVERRIDE_PROTOCOL_H_=0D diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieG= enerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieG= enerator.c=0D index c5b23d91d0..d5982c24ff 100644=0D --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerato= r.c=0D +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieGenerato= r.c=0D @@ -20,6 +20,7 @@=0D #include =0D #include =0D #include =0D +#include =0D #include =0D =0D // Module specific include files.=0D @@ -30,6 +31,7 @@=0D #include =0D #include =0D #include =0D +#include =0D =0D #include "SsdtPcieGenerator.h"=0D =0D @@ -798,9 +800,10 @@ GeneratePciDevice (=0D {=0D EFI_STATUS Status;=0D =0D - CHAR8 AslName[AML_NAME_SEG_SIZE + 1];=0D - AML_OBJECT_NODE_HANDLE ScopeNode;=0D - AML_OBJECT_NODE_HANDLE PciNode;=0D + CHAR8 AslName[AML_NAME_SEG_SIZE + 1];=0D + AML_OBJECT_NODE_HANDLE ScopeNode;=0D + AML_OBJECT_NODE_HANDLE PciNode;=0D + EDKII_SSDT_PCI_OVERRIDE_PROTOCOL *OverrideProtocol;=0D =0D ASSERT (Generator !=3D NULL);=0D ASSERT (CfgMgrProtocol !=3D NULL);=0D @@ -860,6 +863,28 @@ GeneratePciDevice (=0D =0D // Add the template _OSC method.=0D Status =3D AddOscMethod (PciNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + return Status;=0D + }=0D +=0D + Status =3D gBS->LocateProtocol (=0D + &gEdkiiDynamicTableSsdtPcieOverrideProtocolGuid,=0D + NULL,=0D + (VOID **)&OverrideProtocol=0D + );=0D + if (!EFI_ERROR (Status)) {=0D + Status =3D OverrideProtocol->UpdateTable (=0D + OverrideProtocol,=0D + PciInfo,=0D + Uid,=0D + PciNode=0D + );=0D + } else {=0D + // Not an error if override protocol is not found=0D + Status =3D EFI_SUCCESS;=0D + }=0D +=0D ASSERT_EFI_ERROR (Status);=0D return Status;=0D }=0D diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieL= ibArm.inf b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLi= bArm.inf=0D index 431e32a777..8e916f15e9 100644=0D --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.i= nf=0D +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtPcieLibArm/SsdtPcieLibArm.i= nf=0D @@ -30,6 +30,10 @@=0D AcpiHelperLib=0D AmlLib=0D BaseLib=0D + UefiBootServicesTableLib=0D =0D [Pcd]=0D gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdPciUseSegmentAsUid=0D +=0D +[Protocols]=0D + gEdkiiDynamicTableSsdtPcieOverrideProtocolGuid=0D -- =0D 2.25.1=0D =0D