From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (NAM10-BN7-obe.outbound.protection.outlook.com [40.107.92.81]) by mx.groups.io with SMTP id smtpd.web10.25479.1678468953655766507 for ; Fri, 10 Mar 2023 09:22:33 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=selector2 header.b=E+8rCfrH; 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.92.81, mailfrom: jbrasen@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WyQ3UryyMWTq89djNQWbQaKCO1vz/NDJRW4uUuHxocF0up6XRvIZ/Qra4PLrbSXvzp2/UTcBV4WV1u7TiPBR4iQSplkjbls8ji2S4c8xD9mPF+Jk4mWeHsODa2IKkw3lDI/r5+HmFYNzg8vXfNce9qEMz8ZjtC++91f5InASDwWpJ1Ze1dxHtL8ENrDNrRKHxXSfoxy23u4SKXrYgTQID/xVcpKVV5CAfjR/szEFZ7VL3RIKlDDUN46Ct8Homqgz1sYOJ8PMPGcXJXQW69heQwzsZ6NCc4wvbjjjRBiMKs8UZObrQ8y6gSHSVTm1rJO7SI2hyLe34F2SCDOl7EOCEA== 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=ti5W7uj5VvBKxjStBBl6Z+KZ2nY+kdfYSCC1vW1vvng=; b=L1poLhSr8Bujj3fLQmZgDU9qG9Ml4L3P+letXR7hrM+VuGsgey5m5mDFvAwKDcvu9MqQLdPdCTsfXkKRaGrOQC/m8kbH/y8KKYYSbLkVYl1q6a9tpxjqr836jzFDA07snm93XtE9o1CmnJyngoRDU4R5Rhb5LT30SOuvT5U+eo5avxaZmDJqgnsFialvoU6rlrofihbLLYZ5b48qhKzOWKFIc+H3My2FiETwD5KDnw7HpFBJrDDRg6N2sRkyybZv0UN7omMZU/Xvj0+6kXS1VaFMkzdY0YjL9NYdfKqGpJIpfi8WRP8q82blFaSP5NTpxtHTYJ8fM5XF+X/66l775Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; 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=ti5W7uj5VvBKxjStBBl6Z+KZ2nY+kdfYSCC1vW1vvng=; b=E+8rCfrHEjCyfpEu/TXfzO//lrTxa1OhgQDHhpHLfOfGBiRrm0T/R9WSNtBxEIKRrgOxjLK2npz1PbZwjEQlrh6oLoezid0g+cvqUHkOnltmTSd/GtgKpJR0jIOuK0LWBVE6kir6OdFDI+H89SYpOdg12JDO6aVSnmsnJy6tKe69v15Trxz8s5nJ2K/Dfbbr5Vql05dav8W+ogSLkiyqJlo3jTdAGOMS4h+LvezfaYwfcf2JmemP5+qqZvtwEx2sDGj2T6wR1iG7IAI0ncl0swJUIdht9mwtuYbOb0sxU8ZJxc81ayBVykzBHi3G/Sg7C9TBuMow3us4sjRdZa3nZg== Received: from DS7PR12MB5789.namprd12.prod.outlook.com (2603:10b6:8:74::21) by SA0PR12MB4527.namprd12.prod.outlook.com (2603:10b6:806:73::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.19; Fri, 10 Mar 2023 17:22:30 +0000 Received: from DS7PR12MB5789.namprd12.prod.outlook.com ([fe80::3ec1:cc37:7c97:6d42]) by DS7PR12MB5789.namprd12.prod.outlook.com ([fe80::3ec1:cc37:7c97:6d42%4]) with mapi id 15.20.6178.019; Fri, 10 Mar 2023 17:22:29 +0000 From: "Jeff Brasen" To: "pierre.gondois@arm.com" , "devel@edk2.groups.io" CC: Sami Mujawar , Alexei Fedorov Subject: Re: [PATCH 1/1] DynamicTablesPkg/SsdtCpuTopology: Allow multi-packages topologies Thread-Topic: [PATCH 1/1] DynamicTablesPkg/SsdtCpuTopology: Allow multi-packages topologies Thread-Index: AQHZUpx6Wkv9ynvd7k6yv9kvgNZsZ670RH+A Date: Fri, 10 Mar 2023 17:22:29 +0000 Message-ID: References: <20230309153249.1105184-1-pierre.gondois@arm.com> In-Reply-To: <20230309153249.1105184-1-pierre.gondois@arm.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DS7PR12MB5789:EE_|SA0PR12MB4527:EE_ x-ms-office365-filtering-correlation-id: 87d6d6cc-b5f9-4c82-d24b-08db218c06fb x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: E/vGTeSu6bgHqoxLBaZTxVziJp1a0BAldAlzJZ0QmRNrlFjhrOaebyzl7nacwME4w2li/PM5W/qpfMnfYh8ueDB2RNkkM9ftqP6zDEKmP6Jgy1xowd4VYPp2rpQUSNMqj6fIaGLBQ4POWtaddWMdib2zlF+fTSZ172yRoTJsav3ZpfZ9/ktY8xDIcQUZyqCl07hr4Pxb497EOvjXauBPrWwA6jNnReeB1+TAJdGb8wuJK3OmeittA9V73T3XQMnx5CIIXnNcD9gatjVIGTFKAwEYN+90Xk4eQWDzkNA+414KMnMBZnWXTB+b8Yb7djBTcFh2gVP8tphnG53bC8Ccd014Uy1IqXkqJwGdJRnjHCRh6pZJDB6VLBcXeKy9pKp7QXW9U8dln1vzGLozN25cr0FvGxPHibFTett9swe43Vvw5UPl7esE+dJBp+UZQx2ClBs2xZnb5Qu2dsjcG3/bNwBg7Mr/QrUWZPuIDWatINiFBWtie/5KMHBdpSqmMLXmGrT0YM7q2/vrFTvPZGhdHQjjByPRuxW90Hc8L/vlCC3dMP81KLRzHqsiGEYALtNlQHROHp+vlqNdzsleVqGRGG6k/LRbpmEgUlQFBzjzCTGVoQ/pMs1LEEroOnHDwlYjtS1fGK8LUP4k2rUtY2mmK/p0XG1HP8C2bWlvScITZoW+56GfonrybNX7Zbsf0+KAplBTYUq4TfyZK7JP9dxb+t8Y4y744oIU3ckEaItClLg= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB5789.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(136003)(396003)(366004)(39860400002)(376002)(346002)(451199018)(38100700002)(54906003)(33656002)(110136005)(38070700005)(86362001)(55016003)(122000001)(186003)(26005)(53546011)(478600001)(83380400001)(6506007)(9686003)(71200400001)(45080400002)(316002)(7696005)(966005)(52536014)(5660300002)(66476007)(4326008)(41300700001)(8936002)(2906002)(64756008)(66446008)(76116006)(30864003)(66556008)(8676002)(66946007)(21314003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?w3Hbq+YnFbJjO8pB4i8eks5VuxMtgB9m0ZLvdjB4hA+T2i5CYq8Ig+CAm19a?= =?us-ascii?Q?Rq17x7gIni6WXC0X/yKTlpmwnQ9Jk/7TqnE/iEfRSwy07uATzP4KT8bLD7Jj?= =?us-ascii?Q?o6IfR3ziKvwX6SxHDGEmA8PRgCiL/fU0apCfH3yeKJDcQraVzqwkti7DEyfs?= =?us-ascii?Q?At/qyj/VQ+kTpBRgOMPopPWvKiNejMnwyypFGvjzWvXlgoAmzVTrcwQkEzr6?= =?us-ascii?Q?iReyovZ2Vie/yP9BgJnG/H0x+q40boSFuClkbzea2JzqUHFB2stcyDg784jS?= =?us-ascii?Q?5LymYDZus7Kzk0MzDX+r22G0nhZJ5ubG7sLfS3TYCLNHm7/hbLrK5W228mA4?= =?us-ascii?Q?+WPStooKBTEgt163o2ArrFiLH2UoG1ONop0WyGhEWgCUqkcyOJGDfnxXc92S?= =?us-ascii?Q?x+eZlqHMG0F3MSR8YHOK+GBxh9SYBwyMH0g9tQQiA6Vy2/NqskbCAlpjcXWs?= =?us-ascii?Q?HilCTjJfgwJkdrbQeXMeKAkobFXAT4f1st5XNoVUfujnzIgPJxYvHDq/qXZq?= =?us-ascii?Q?alm7m8JvhgMkAdVakojXHzlmxiaMTwi0pU9vBlFhIVILOLYo/8J0I17WTLxE?= =?us-ascii?Q?AJ0gr2RzEEnCrW9RM8yj7oMbI4oYIo99wWqalquRXwz4sBmPWw7zYSNwlDlh?= =?us-ascii?Q?MEjgdTbYyTRS+3w2ywE+TA6Y2A6G1Eg4nae3gT267vMYOibqmwX2ceQ7NP+h?= =?us-ascii?Q?a6UcBymJpXjndTQkTxkeZGc7AWtlomDBYBjAWzSVOUpfdbIS7pQe07oNUs48?= =?us-ascii?Q?nFQC6KWwlnkVLN6fv44a5aP2loQtLVusyIgqz/2gh3p12+3w4IAH41HAxhb7?= =?us-ascii?Q?qCdw0rqHxwt5U4zA28ofq4sQtH3jM5kq6VnkMBL4NnVtqLW3XePYLgz4Ueku?= =?us-ascii?Q?IxDVSARwwPnpD/hAKhi0Iu7MdZ3rkdCAbehqgrcST4kbeR8/ifa8pRWeGBNh?= =?us-ascii?Q?YxxCa6Ck3oO111uj27S8WJajSZK31Ubw4OVPjztIcvuLUL00Mop+QDGG6Ysz?= =?us-ascii?Q?e2IeNxWBxjl/brwUugv/ccojTVdUpNHm060Ews3Lw0xYQJaVNIz32iZNnB35?= =?us-ascii?Q?z/TxpvVg2CfDa0J5O5fFwRfltDSKx7nH4O8lpptb9dicWHWK3f7MisBR/naQ?= =?us-ascii?Q?kBX7QPkcD5HNnXWls1hLShJUePmnVTt6PWE5fUmHzCrFR/PpV6efs9jqC8y/?= =?us-ascii?Q?wziUQbN/iQqFqDNZItW+JJ8jtc0oyGgQLFLJpzfK83PXLi2VcL8oVdiEla9K?= =?us-ascii?Q?VRkSoIzGpFRkvMkWYiUehzKI/2dFYSlsPUO0THf14tPMCBzBnLyo9pPXYpMS?= =?us-ascii?Q?Lwtn3c/J0eO+ETd9PPth8udn+G5hm75V3hxHZK9p/PBWcKH7tV3tmK9e+wdF?= =?us-ascii?Q?stGMdgAY0rOyS4QqN4i8VgOyh1WQrTe5AWpvHK2oTNVOtw7Dze5Ncj7+qhN0?= =?us-ascii?Q?0WxyK2APJmAuBpCGJrogDWx+33jgd1bxfN6YVhlRYw6Wo6Z0Vh+fl7wCuokF?= =?us-ascii?Q?mgO2FxK+M93iT8F549fyd7lZzH81MiaXLQ2/No7sQB+YmFupjPhHFSiuUV3X?= =?us-ascii?Q?zAjWA3Yvuqn0W+8OLMtCvlxI+fpFUkbj26BdC485?= MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB5789.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 87d6d6cc-b5f9-4c82-d24b-08db218c06fb X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Mar 2023 17:22:29.9050 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: aN8X02OMRCLJ9VpA+IWKx9CSlloi0wDV2vh1jwghB9FlZbGd8dsizIoM+msQUSm/IPwnIx/jO34TjHX9SREN3Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4527 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Jeff Brasen > -----Original Message----- > From: pierre.gondois@arm.com > Sent: Thursday, March 9, 2023 8:33 AM > To: devel@edk2.groups.io > Cc: Sami Mujawar ; Alexei Fedorov > ; Jeff Brasen > Subject: [PATCH 1/1] DynamicTablesPkg/SsdtCpuTopology: Allow multi- > packages topologies >=20 > External email: Use caution opening links or attachments >=20 >=20 > From: Pierre Gondois >=20 > The topology of a platform is represented in ACPI using the PPTT table. I= t is > possible to append information to CPUs/processor containers using their > associated AML nodes in a SSDT table. > A platform might have multiple 'physical packages' (or top-level > nodes) in their PPTT topology representation. It can be assumed from [1] > that a 'physical packages' is always a 'top-level node', and conversely. >=20 > The SSDT topology generator doesn't support having multiple top-level > nodes. The top-level node is also not generated in the SSDT topology > representation. > Add support to generate multiple top-level nodes in the SSDT topology > generator and generate an AML node for this top-level node. This will all= ow > to have matching PPTT and SSDT topology representations. Prior to this > patch, this top-level AML node was not generated. >=20 > Also factorize the flag checking in CheckProcNode() and add more checks. >=20 > This patch takes inspiration from the discussion at: > - v1: > https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fedk > 2.groups.io%2Fg%2Fdevel%2Fmessage%2F99410&data=3D05%7C01%7Cjbrasen > %40nvidia.com%7C0f68dac1cbf245e37eb608db20b39c00%7C43083d15727340 > c1b7db39efd9ccc17a%7C0%7C0%7C638139728016125186%7CUnknown%7CT > WFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLC > JXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=3DtqQD5RycnMUh%2BuqTG%2F > %2BJW9fK7gw1KZwA%2BMNoi55IS%2BY%3D&reserved=3D0 > - v2: > https://nam11.safelinks.protection.outlook.com/?url=3Dhttps%3A%2F%2Fedk > 2.groups.io%2Fg%2Fdevel%2Fmessage%2F99615&data=3D05%7C01%7Cjbrasen > %40nvidia.com%7C0f68dac1cbf245e37eb608db20b39c00%7C43083d15727340 > c1b7db39efd9ccc17a%7C0%7C0%7C638139728016125186%7CUnknown%7CT > WFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLC > JXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=3DdG6YaTCQSThzTG47yZPRU7lCZ > ADzeFFmy6fDFKZInwI%3D&reserved=3D0 >=20 > [1] > ACPI 6.5, 5.2.30.1 Processor hierarchy node structure (Type 0): > - "Multiple trees may be described, covering for example multiple > packages. For the root of a tree, the parent pointer should be 0."" > - "Each valid processor must belong to exactly one package. That is, > the leaf must itself be a physical package or have an ancestor > marked as a physical package." >=20 > Change-Id: I48452e623906628f44b7e2c69a34ed7b30276e92 > Suggested-by: Jeff Brasen > Signed-off-by: Pierre Gondois > --- > .../SsdtCpuTopologyGenerator.c | 131 +++++++++++------- > .../SsdtCpuTopologyGenerator.h | 4 + > 2 files changed, 84 insertions(+), 51 deletions(-) >=20 > diff --git > a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCp > uTopologyGenerator.c > b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCp > uTopologyGenerator.c > index c24da8ec71ad..6fb131b66482 100644 > --- > a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCp > uTopologyGenerator.c > +++ > b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCp > +++ uTopologyGenerator.c > @@ -805,6 +805,57 @@ CreateAmlProcessorContainer ( > return Status; > } >=20 > +/** Check flags and topology of a ProcNode. > + > + @param [in] NodeFlags Flags of the ProcNode to check. > + @param [in] IsLeaf The ProcNode is a leaf. > + @param [in] NodeToken NodeToken of the ProcNode. > + @param [in] ParentNodeToken Parent NodeToken of the ProcNode. > + > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER Invalid parameter. > +**/ > +STATIC > +EFI_STATUS > +EFIAPI > +CheckProcNode ( > + UINT32 NodeFlags, > + BOOLEAN IsLeaf, > + CM_OBJECT_TOKEN NodeToken, > + CM_OBJECT_TOKEN ParentNodeToken > + ) > +{ > + BOOLEAN InvalidFlags; > + BOOLEAN HasPhysicalPackageBit; > + BOOLEAN IsTopLevelNode; > + > + HasPhysicalPackageBit =3D (NodeFlags & > EFI_ACPI_6_3_PPTT_PACKAGE_PHYSICAL) =3D=3D > + EFI_ACPI_6_3_PPTT_PACKAGE_PHYSICAL; > + IsTopLevelNode =3D (ParentNodeToken =3D=3D CM_NULL_TOKEN); > + > + // A top-level node is a Physical Package and conversely. > + InvalidFlags =3D HasPhysicalPackageBit ^ IsTopLevelNode; > + > + // Check Leaf specific flags. > + if (IsLeaf) { > + InvalidFlags |=3D ((NodeFlags & PPTT_LEAF_MASK) !=3D PPTT_LEAF_MASK)= ; > + } else { > + InvalidFlags |=3D ((NodeFlags & PPTT_LEAF_MASK) !=3D 0); } > + > + if (InvalidFlags) { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: SSDT-CPU-TOPOLOGY: Invalid flags for ProcNode: 0x%p.\n", > + (VOID *)NodeToken > + )); > + ASSERT (0); > + return EFI_INVALID_PARAMETER; > + } > + > + return EFI_SUCCESS; > +} > + > /** Create an AML representation of the Cpu topology. >=20 > A processor container is by extension any non-leave device in the cpu > topology. > @@ -814,7 +865,6 @@ CreateAmlProcessorContainer ( > Protocol Interface. > @param [in] NodeToken Token of the > CM_ARM_PROC_HIERARCHY_INFO > currently handled. > - Cannot be CM_NULL_TOKEN. > @param [in] ParentNode Parent node to attach the created > node to. > @param [in,out] ProcContainerIndex Pointer to the current processor > container @@ -838,6 +888,7 @@ CreateAmlCpuTopologyTree ( > EFI_STATUS Status; > UINT32 Index; > UINT32 CpuIndex; > + UINT32 ProcContainerName; > AML_OBJECT_NODE_HANDLE ProcContainerNode; > UINT32 Uid; > UINT16 Name; > @@ -846,11 +897,11 @@ CreateAmlCpuTopologyTree ( > 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 > - CpuIndex =3D 0; > + CpuIndex =3D 0; > + ProcContainerName =3D 0; >=20 > for (Index =3D 0; Index < Generator->ProcNodeCount; Index++) { > // Find the children of the CM_ARM_PROC_HIERARCHY_INFO @@ -859,16 > +910,15 @@ CreateAmlCpuTopologyTree ( > // Only Cpus (leaf nodes in this tree) have a GicCToken. > // Create a Cpu node. > if (Generator->ProcNodeList[Index].GicCToken !=3D CM_NULL_TOKEN) { > - if ((Generator->ProcNodeList[Index].Flags & PPTT_PROCESSOR_MASK) > !=3D > - PPTT_CPU_PROCESSOR_MASK) > - { > - DEBUG (( > - DEBUG_ERROR, > - "ERROR: SSDT-CPU-TOPOLOGY: Invalid flags for cpu: 0x%x.\n", > - Generator->ProcNodeList[Index].Flags > - )); > + Status =3D CheckProcNode ( > + Generator->ProcNodeList[Index].Flags, > + TRUE, > + Generator->ProcNodeList[Index].Token, > + NodeToken > + ); > + if (EFI_ERROR (Status)) { > ASSERT (0); > - return EFI_INVALID_PARAMETER; > + return Status; > } >=20 > if (Generator->ProcNodeList[Index].OverrideNameUidEnabled) { @@ = - > 893,24 +943,22 @@ CreateAmlCpuTopologyTree ( > } else { > // If this is not a Cpu, then this is a processor container. >=20 > - // Acpi processor Id for clusters is not handled. > - if ((Generator->ProcNodeList[Index].Flags & PPTT_PROCESSOR_MASK) > !=3D > - PPTT_CLUSTER_PROCESSOR_MASK) > - { > - DEBUG (( > - DEBUG_ERROR, > - "ERROR: SSDT-CPU-TOPOLOGY: Invalid flags for cluster: 0x%x.\= n", > - Generator->ProcNodeList[Index].Flags > - )); > + Status =3D CheckProcNode ( > + Generator->ProcNodeList[Index].Flags, > + FALSE, > + Generator->ProcNodeList[Index].Token, > + NodeToken > + ); > + if (EFI_ERROR (Status)) { > ASSERT (0); > - return EFI_INVALID_PARAMETER; > + return Status; > } >=20 > if (Generator->ProcNodeList[Index].OverrideNameUidEnabled) { > Name =3D Generator->ProcNodeList[Index].OverrideName; > Uid =3D Generator->ProcNodeList[Index].OverrideUid; > } else { > - Name =3D *ProcContainerIndex; > + Name =3D ProcContainerName; > Uid =3D *ProcContainerIndex; > } >=20 > @@ -933,6 +981,13 @@ CreateAmlCpuTopologyTree ( > (*ProcContainerIndex)++; > CpuIndex =3D 0; >=20 > + // And reset the cluster name whenever there is a package. > + if (NodeToken =3D=3D CM_NULL_TOKEN) { > + ProcContainerName =3D 0; > + } else { > + ProcContainerName++; > + } > + > // Recursively continue creating an AML tree. > Status =3D CreateAmlCpuTopologyTree ( > Generator, > @@ -974,8 +1029,6 @@ CreateTopologyFromProcHierarchy ( > ) > { > EFI_STATUS Status; > - UINT32 Index; > - UINT32 TopLevelProcNodeIndex; > UINT32 ProcContainerIndex; >=20 > ASSERT (Generator !=3D NULL); > @@ -984,8 +1037,7 @@ CreateTopologyFromProcHierarchy ( > ASSERT (CfgMgrProtocol !=3D NULL); > ASSERT (ScopeNode !=3D NULL); >=20 > - TopLevelProcNodeIndex =3D MAX_UINT32; > - ProcContainerIndex =3D 0; > + ProcContainerIndex =3D 0; >=20 > Status =3D TokenTableInitialize (Generator, Generator->ProcNodeCount); > if (EFI_ERROR (Status)) { > @@ -993,33 +1045,10 @@ 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_PHYSICAL > - // 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; > - } > - > - TopLevelProcNodeIndex =3D Index; > - } > - } // for > - > Status =3D CreateAmlCpuTopologyTree ( > Generator, > CfgMgrProtocol, > - Generator->ProcNodeList[TopLevelProcNodeIndex].Token, > + CM_NULL_TOKEN, > ScopeNode, > &ProcContainerIndex > ); > diff --git > a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCp > uTopologyGenerator.h > b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCp > uTopologyGenerator.h > index f174d9c2e2cb..48e4455490e9 100644 > --- > a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCp > uTopologyGenerator.h > +++ > b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCp > +++ uTopologyGenerator.h > @@ -34,6 +34,10 @@ > (EFI_ACPI_6_3_PPTT_PROCESSOR_ID_INVALID << 1) | = \ > (EFI_ACPI_6_3_PPTT_NODE_IS_NOT_LEAF << 3)) >=20 > +// Leaf nodes specific mask. > +#define PPTT_LEAF_MASK ((EFI_ACPI_6_3_PPTT_PROCESSOR_ID_VALID > << 1) | \ > + (EFI_ACPI_6_3_PPTT_NODE_IS_LEAF << 3)) > + > /** LPI states are stored in the ASL namespace at '\_SB_.Lxxx', > with xxx being the node index of the LPI state. > */ > -- > 2.25.1