From nobody Sun May 19 14:14:30 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+99410+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1675269777000836.0022985234181; Wed, 1 Feb 2023 08:42:57 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id LdLXYY1788612xYb5WKJy4SC; Wed, 01 Feb 2023 08:42:56 -0800 X-Received: from NAM10-MW2-obe.outbound.protection.outlook.com (NAM10-MW2-obe.outbound.protection.outlook.com [40.107.94.61]) by mx.groups.io with SMTP id smtpd.web11.28748.1675269776122243033 for ; Wed, 01 Feb 2023 08:42:56 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oFhz0nPnXxsre7Z6STVBSIKRcFdBPIBjdbso8kV53gF1sDQcdwjFfTeqmBY9KWmp6widRWK67QKERtwYybpdWsfMU2zyiSl7pc/BcAQ1Bj3AVcBJC7e1cYyGv7HLJPY9+3iRg2U8Z7uFlH/S15uFMvEbrzoGrPsep9b6ZPuTmju503r3WcfvbF91ZlgAWNaNdGddmXJlhX7TLclGNpc6mPYhZjSJPp2WDp504FkeNpn1tf/PkxvCa1Yq4iIIeNWj/s2PGya6fQqMfXJD6qhO+egxxHucN9G8caCvCoSYuYTI6k5ghZpoq8nblpUOSG9I962QtAVNIA1TKZzKfBTDiA== 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=8zV9WslQFMFtHexSbzvQN/c4NFJ9HmmNrBQeEFO4ErI=; b=c7DI47muCJA6sWktirkgeUBcpTxq6TMushOV3zBhmn5G5ymv+7DEkVfbD5alm25CS+NFaPP15kBhdAU09Fwdewt5sstWZm4UNKdZY3r3YDTv9tHvkA66Vspy4mE7AZAb8iW5tifGbjHH2vz4wwSka3+dYMaM/vO4vvMHHFGwCpgXJmk5jPVq6lnIhUNqW/uLPrZJpdxxZYrVki8AGJ/LCxhPpyhFWsD92M3AaRM+JRZcf+Z7xfppiateqbYojDQHc/Q6yaRKPC9aWeKlC967XQJ7X0d1Cw/8+EEhGX4QITXBTD5fh29ePz8CK42IVLf4ozmRxWtO2jHw6APGHiKppw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=edk2.groups.io 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 X-Received: from CY5P221CA0097.NAMP221.PROD.OUTLOOK.COM (2603:10b6:930:9::37) by MW6PR12MB7072.namprd12.prod.outlook.com (2603:10b6:303:238::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.38; Wed, 1 Feb 2023 16:42:53 +0000 X-Received: from CY4PEPF0000B8EE.namprd05.prod.outlook.com (2603:10b6:930:9:cafe::54) by CY5P221CA0097.outlook.office365.com (2603:10b6:930:9::37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.25 via Frontend Transport; Wed, 1 Feb 2023 16:42:53 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+99410+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C X-Received: from mail.nvidia.com (216.228.118.233) by CY4PEPF0000B8EE.mail.protection.outlook.com (10.167.241.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.4 via Frontend Transport; Wed, 1 Feb 2023 16:42:53 +0000 X-Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Wed, 1 Feb 2023 08:42:42 -0800 X-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.36; Wed, 1 Feb 2023 08:42:41 -0800 X-Received: from f9050a1d9579.nvidia.com (10.127.8.9) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.986.36 via Frontend Transport; Wed, 1 Feb 2023 08:42:41 -0800 From: "Jeff Brasen via groups.io" To: CC: , , , , , Jeff Brasen Subject: [edk2-devel] [PATCH] DynamicTablesPkg: Allow multiple top level physical nodes Date: Wed, 1 Feb 2023 09:42:37 -0700 Message-ID: MIME-Version: 1.0 X-NVConfidentiality: public X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000B8EE:EE_|MW6PR12MB7072:EE_ X-MS-Office365-Filtering-Correlation-Id: f8c35fb3-dee2-48ec-51db-08db04735d4f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: M2uen9PaKHuBqhOwHnaXYFcw5rt/NiNQowRNWaAOSUYuZAyaRx9cQWO9D52IVfZ1pnC3G+7ZQspp1cOeLcpud5uEYF76NePw9xPiXqIi5SRlOefGA4fyFqGcX4oFcyUZzaurnegnMh48lN3faTdzqPStUYrhxhETdwqxL3tKwg0ib4+qEbboFqKNkEZiD+gQeHfuC6PtdTLblKKKQLI3w5q4sMT7MJS52K1P7gnRcStPvvniifaT35DsvuSH3igfI1tZkBvzMmVMGRxyT5F1m6ym5Irh4TUmbQNGjSfVTf1r5Y0LggS1woGOCiXbm9+1/90SXxxJXpKJwOeyD5xBj7V8rtfaXVzodVmgE4LhsWavqF9aXKfNvj8JqTT0gS4WQFn5/bv/WQye/r28ySI92ZDTIGwP14GFBTM9iJJpeKKuTSSVEbJNXqAZiD6SlUDc3spWPYvZTo3IjDfDbUoey/hNwWd5qLe/E7QY7B57pUCFgaLKXg+klh1cKVFg5RrSCf+VWYcAxcGgRI5Yk17+qoPkWh1JV8FKQ6tJ3lspjXq2MtA6Xf0JPs6CY6cv6wuoNXx5fgxO2MSWcd124ME9jKxtIwG3GwsyN5KtW9+XQapsiZxUGMDPtUn+XxPNrOHBzAUQd5bme+GoNBPl1cCGqiQ5Qj8nhnfDTLFhro0m5z5w5UI0H0ljBtSI41Zk95CYEvmsSYw9NAI3DNH8LkssRA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Feb 2023 16:42:53.5193 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f8c35fb3-dee2-48ec-51db-08db04735d4f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000B8EE.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR12MB7072 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,jbrasen@nvidia.com X-Gm-Message-State: JfzYmHAWZT44fQbD5scWaguex1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1675269776; bh=OOlkdcR3hWXXlBZQTzfkZ2LlYR8/JDiHcGIgf82kgZw=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=H2zoyeOBw17ro/bXHdh+81sj0xVJe33KGj5tVgCh2SoFqOMGV0ITr5QrMhDfNWUjCzR /oUbyo/FjZfpXVwxvUsCBCo6tJu32YkZk4d/RaqxzWISL+1kkJCJw9ANIuwp2vZ2ZIEGP pQkYrrL9oLk+SqXanLox2JwBKtaExFWnFik= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1675269778994100002 Content-Type: text/plain; charset="utf-8" In SSDT CPU topology generator allow for multiple top level physical nodes as would be seen with a multi-socket system. This will be auto detected if there are more then one physical device and there is a new PCD to enable forcing of a top level processor container to allow for consistency for systems that can be either single or multi socket. Signed-off-by: Jeff Brasen --- DynamicTablesPkg/DynamicTablesPkg.dec | 3 + .../SsdtCpuTopologyGenerator.c | 66 ++++++++++--------- .../SsdtCpuTopologyLibArm.inf | 4 ++ 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec b/DynamicTablesPkg/Dynam= icTablesPkg.dec index adc2e67cbf..a061b70322 100644 --- a/DynamicTablesPkg/DynamicTablesPkg.dec +++ b/DynamicTablesPkg/DynamicTablesPkg.dec @@ -63,5 +63,8 @@ # Use PCI segment numbers as UID gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdPciUseSegmentAsUid|FALSE|BOOLEAN= |0x40000009 =20 + # Force top level container for single socket devices + gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdForceTopLevelProcessorContainer|= FALSE|BOOLEAN|0x4000000A + [Guids] gEdkiiDynamicTablesPkgTokenSpaceGuid =3D { 0xab226e66, 0x31d8, 0x4613, {= 0x87, 0x9d, 0xd2, 0xfa, 0xb6, 0x10, 0x26, 0x3c } } diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/Ss= dtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTop= ologyLibArm/SsdtCpuTopologyGenerator.c index c24da8ec71..58f86ff508 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTo= pologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTo= pologyGenerator.c @@ -22,6 +22,7 @@ #include #include #include +#include #include =20 #include "SsdtCpuTopologyGenerator.h" @@ -814,7 +815,8 @@ CreateAmlProcessorContainer ( Protocol Interface. @param [in] NodeToken Token of the CM_ARM_PROC_HIERARCHY_I= NFO currently handled. - Cannot be CM_NULL_TOKEN. + CM_NULL_TOKEN if top level container + should be created. @param [in] ParentNode Parent node to attach the created node to. @param [in,out] ProcContainerIndex Pointer to the current processor con= tainer @@ -841,12 +843,12 @@ CreateAmlCpuTopologyTree ( AML_OBJECT_NODE_HANDLE ProcContainerNode; UINT32 Uid; UINT16 Name; + UINT32 NodeFlags; =20 ASSERT (Generator !=3D NULL); ASSERT (Generator->ProcNodeList !=3D NULL); ASSERT (Generator->ProcNodeCount !=3D 0); ASSERT (CfgMgrProtocol !=3D NULL); - ASSERT (NodeToken !=3D CM_NULL_TOKEN); ASSERT (ParentNode !=3D NULL); ASSERT (ProcContainerIndex !=3D NULL); =20 @@ -893,8 +895,14 @@ CreateAmlCpuTopologyTree ( } else { // If this is not a Cpu, then this is a processor container. =20 + NodeFlags =3D Generator->ProcNodeList[Index].Flags; + // Allow physical property for top level nodes + if (NodeToken =3D=3D CM_NULL_TOKEN) { + NodeFlags &=3D ~EFI_ACPI_6_3_PPTT_PACKAGE_PHYSICAL; + } + // Acpi processor Id for clusters is not handled. - if ((Generator->ProcNodeList[Index].Flags & PPTT_PROCESSOR_MASK) != =3D + if ((NodeFlags & PPTT_PROCESSOR_MASK) !=3D PPTT_CLUSTER_PROCESSOR_MASK) { DEBUG (( @@ -973,10 +981,10 @@ CreateTopologyFromProcHierarchy ( IN AML_OBJECT_NODE_HANDLE ScopeNode ) { - EFI_STATUS Status; - UINT32 Index; - UINT32 TopLevelProcNodeIndex; - UINT32 ProcContainerIndex; + EFI_STATUS Status; + UINT32 Index; + CM_OBJECT_TOKEN TopLevelToken; + UINT32 ProcContainerIndex; =20 ASSERT (Generator !=3D NULL); ASSERT (Generator->ProcNodeCount !=3D 0); @@ -984,8 +992,8 @@ CreateTopologyFromProcHierarchy ( ASSERT (CfgMgrProtocol !=3D NULL); ASSERT (ScopeNode !=3D NULL); =20 - TopLevelProcNodeIndex =3D MAX_UINT32; - ProcContainerIndex =3D 0; + TopLevelToken =3D CM_NULL_TOKEN; + ProcContainerIndex =3D 0; =20 Status =3D TokenTableInitialize (Generator, Generator->ProcNodeCount); if (EFI_ERROR (Status)) { @@ -993,33 +1001,27 @@ CreateTopologyFromProcHierarchy ( return Status; } =20 - // It is assumed that there is one unique CM_ARM_PROC_HIERARCHY_INFO - // structure with no ParentToken and the EFI_ACPI_6_3_PPTT_PACKAGE_PHYSI= CAL - // flag set. All other CM_ARM_PROC_HIERARCHY_INFO are non-physical and - // have a ParentToken. - for (Index =3D 0; Index < Generator->ProcNodeCount; Index++) { - if ((Generator->ProcNodeList[Index].ParentToken =3D=3D CM_NULL_TOKEN) = && - (Generator->ProcNodeList[Index].Flags & - EFI_ACPI_6_3_PPTT_PACKAGE_PHYSICAL)) - { - if (TopLevelProcNodeIndex !=3D MAX_UINT32) { - DEBUG (( - DEBUG_ERROR, - "ERROR: SSDT-CPU-TOPOLOGY: Top level CM_ARM_PROC_HIERARCHY_INFO " - "must be unique\n" - )); - ASSERT (0); - goto exit_handler; - } + if (!PcdGetBool (PcdForceTopLevelProcessorContainer)) { + for (Index =3D 0; Index < Generator->ProcNodeCount; Index++) { + if ((Generator->ProcNodeList[Index].ParentToken =3D=3D CM_NULL_TOKEN= ) && + (Generator->ProcNodeList[Index].Flags & + EFI_ACPI_6_3_PPTT_PACKAGE_PHYSICAL)) + { + // Multi-socket detected, using top level containers + if (TopLevelToken !=3D CM_NULL_TOKEN) { + TopLevelToken =3D CM_NULL_TOKEN; + break; + } =20 - TopLevelProcNodeIndex =3D Index; - } - } // for + TopLevelToken =3D Generator->ProcNodeList[Index].Token; + } + } // for + } =20 Status =3D CreateAmlCpuTopologyTree ( Generator, CfgMgrProtocol, - Generator->ProcNodeList[TopLevelProcNodeIndex].Token, + TopLevelToken, ScopeNode, &ProcContainerIndex ); @@ -1106,7 +1108,7 @@ CreateTopologyFromGicC ( break; } } - } // for + } // for =20 return Status; } diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/Ss= dtCpuTopologyLibArm.inf b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopo= logyLibArm/SsdtCpuTopologyLibArm.inf index 3e2d154749..00adfe986f 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTo= pologyLibArm.inf +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTo= pologyLibArm.inf @@ -31,3 +31,7 @@ AcpiHelperLib AmlLib BaseLib + PcdLib + +[Pcd] + gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdForceTopLevelProcessorContainer --=20 2.25.1 -=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 (#99410): https://edk2.groups.io/g/devel/message/99410 Mute This Topic: https://groups.io/mt/96680589/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-