From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (NAM11-CO1-obe.outbound.protection.outlook.com [40.107.220.41]) by mx.groups.io with SMTP id smtpd.web10.9784.1663247474457221945 for ; Thu, 15 Sep 2022 06:11:14 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=selector2 header.b=c68wHfWP; 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.220.41, mailfrom: jbrasen@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Pi2JmRcDhb13o44JeJPNLGBjSTE9JY4UDdDExCHOZLBxYk44j18+fLg7K15EZHK9IbpFU4IaJZdueeM0ruMs8WJzPmHIbiMy9pS+yZoLGDjSrCQMKr0zgc2uKGNWofsiV9MebCq4xpsuQBxsGTbxEcy8DTzLYR3qjf4t4whdecuwU1HoYOOggzNoOe/OZ5h/0HmgP1BruwwIsyBBnxZkHnOogyQlIp8VZyFJcpA7y2l/VyQwzohG25l8/t5HfSHrGzhQawl3iq7P3gnx6w14emj565axopvdHSZQPsc+ZeEhi/FLfODfj9QUH6K9ehqHEBpsDzjmanEz0xsaA0bofg== 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=AjpEITJxarHyBREu+RIRk/Sxf9B+fjOVERoK9MdHRfM=; b=mSxiaiyoEiH5VpcyEe6y7BUDWD/6ZbCjtRP9vEcSHXivnmUF2iOOnQUdOZEECoKS+5Trfv/eaFCM71Y4qgsrNJ97AIpqX3i/0wmq1s4qzfbJwmoHHJP46uPOPTBfk+MflJnkxy1D6TcfHW1aR3yhxLvG4DtQ+gPTktCAY7KIZ/PJIs83KQjuD1Vd01MOFlTxO7cOqXkZQqXZkRDTJmYcbC4oTICFLTAXUoGu90Kug6JK8TH7XcmCOn8wvepN4miB+F2llbBHACosDAjiLe93nGcqIy0ft5klSixLK6mZuBPW8QtfinifDwU3fbfb/ShY7wAL7XasvOxpEMgR5oLyvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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 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=AjpEITJxarHyBREu+RIRk/Sxf9B+fjOVERoK9MdHRfM=; b=c68wHfWPLUG2Kpj9aAtipQ6azIHLkF/SYP24r2FaHKItLdY3vwa0CJJ4lOjG6Ev9z4WUmyPpbXJ57nAhBwsVS1qkeQX4SEJX/S5TYGsfgvStjkp//ARJDKjfePiMj5iw1YdgyJGZybxUY7ObpKt0EJiaDJJFjRbAmxhIOdu/HZbgTXXHqIJ5DUkwjdByGeby+blr7NPq7TH96Qor+SQT1pzjMKJi2D124YTNAP4Yv9JJjLRoP9CtCFACFGgA+KkcOR51/shE7/cX+po+f/YPSdhSHlELYwxTVRSkTIvTDpPMpAfTEPF9GZXOGSqFwZX4AZ5lgjrM7bUvO4Y/7XBOiA== Received: from BN1PR13CA0004.namprd13.prod.outlook.com (2603:10b6:408:e2::9) by SJ1PR12MB6363.namprd12.prod.outlook.com (2603:10b6:a03:453::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5612.22; Thu, 15 Sep 2022 13:11:12 +0000 Received: from BN8NAM11FT089.eop-nam11.prod.protection.outlook.com (2603:10b6:408:e2:cafe::6e) by BN1PR13CA0004.outlook.office365.com (2603:10b6:408:e2::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.6 via Frontend Transport; Thu, 15 Sep 2022 13:11:11 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BN8NAM11FT089.mail.protection.outlook.com (10.13.176.105) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.12 via Frontend Transport; Thu, 15 Sep 2022 13:11:11 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.26; Thu, 15 Sep 2022 06:10:57 -0700 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.29; Thu, 15 Sep 2022 06:10:57 -0700 Received: from f153882e4be8.nvidia.com (10.127.8.14) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.986.29 via Frontend Transport; Thu, 15 Sep 2022 06:10:56 -0700 From: "Jeff Brasen" To: CC: , , , , Jeff Brasen Subject: [PATCH v3 3/3] DynamicTablesPkg: SSDT CPU _CPC generator Date: Thu, 15 Sep 2022 07:10:52 -0600 Message-ID: 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-TrafficTypeDiagnostic: BN8NAM11FT089:EE_|SJ1PR12MB6363:EE_ X-MS-Office365-Filtering-Correlation-Id: 27a7bfdf-3d4e-4f5a-429a-08da971bc319 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BFfqamB78ylAXFIsigKPn1Rak/203kgCbsTMlld1uOi+6k8XE3XA/qPy+T8gX843ZocIW/TmHnVWAlGJeeBHIJPBCjXK3+sen44xD+VD11w2FEG4QgpJEXVqCiNJlX4U0Q2N6bKrdovER1JjU5Ey1dl45t+cA3R+rI25khKusVJZEHT/XMzB3Nu4rZPYRo/98siPobjzr12fXjhzrsS7AvxOkhbtiu3hYhScRGff2+/9bJvOLGhD43jfQ7l7lLb9TwhnjtckZePhPL2NTx0Y+0T5571EHBRzyFm50kZWx7Zpn68OI+E0VuruTYflAahTvlLvxk5qF1T8ynmISfDCE1M6g0AIw23xLvyrcs8e+2a1a643X0h+5fvlZdS71FZ9vPmlo7SMTP8SZ6mVb6d6YM5gIgAKfszfF9g9S2nsELNjGub2FuHwruAQbGdowSgNEfrV7KEorCeWZdt8oM8nsEHWh9pJma5bFKHaIILXtOk9e+/pkT2o+BgZTQ3cJnzwfs3OHtW0atHfzcCrRTvYy5gPSpbNVQgpcQ4BomckZvAnTlXOUFfwQ1948D1o+U9JE3FO3Zb80YfNEPmK+RM2kp0wr9rawY/EyzNvTb+hGjlZTfcpXDYTIZHIOxADth1+BCvpBEpIjL6uVebHZSWhFzZVlpiQLGTR5XDs4jp6XS7ShAXIba+b3qns8pWZO/9b1s0VikgU4z6gR5liLefddrkHFIYzipdTw1/q8QBiRY+SVgwmNhvWpJYkbwnqW7RVs4b9/LqYXmO9h5mtqsUV4G+iprvwZfwdi9fjuMG0kRduNDx62VRmCyx1kdH7hu7WqnpN44fGKc5H6m0YLk3i6w== X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230022)(4636009)(136003)(346002)(396003)(376002)(39860400002)(451199015)(40470700004)(46966006)(36840700001)(2616005)(8936002)(426003)(5660300002)(83380400001)(86362001)(40460700003)(2906002)(82740400003)(6916009)(356005)(8676002)(70586007)(26005)(54906003)(7696005)(7636003)(336012)(40480700001)(6666004)(186003)(70206006)(82310400005)(36756003)(41300700001)(107886003)(478600001)(47076005)(4326008)(316002)(36860700001)(44824005);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2022 13:11:11.7439 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 27a7bfdf-3d4e-4f5a-429a-08da971bc319 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT089.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6363 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain Add code to use a token attached to GICC to generate _CPC object on cpus.=0D =0D Signed-off-by: Jeff Brasen =0D ---=0D .../SsdtCpuTopologyGenerator.c | 223 +++++++++++++++++-=0D 1 file changed, 217 insertions(+), 6 deletions(-)=0D =0D diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/Ss= dtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTop= ologyLibArm/SsdtCpuTopologyGenerator.c=0D index 8561f48e1f..5d41d57064 100644=0D --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTo= pologyGenerator.c=0D +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTo= pologyGenerator.c=0D @@ -76,6 +76,16 @@ GET_OBJECT_LIST (=0D CM_ARM_LPI_INFO=0D );=0D =0D +/**=0D + This macro expands to a function that retrieves the CPC=0D + information from the Configuration Manager.=0D +*/=0D +GET_OBJECT_LIST (=0D + EObjNameSpaceArm,=0D + EArmObjCpcInfo,=0D + CM_ARM_CPC_INFO=0D + );=0D +=0D /** Initialize the TokenTable.=0D =0D One entry should be allocated for each CM_ARM_PROC_HIERARCHY_INFO=0D @@ -229,6 +239,183 @@ WriteAslName (=0D return EFI_SUCCESS;=0D }=0D =0D +/** Utility function to check if generic address points to NULL=0D +=0D + @param [in] Address Pointer to the Generic address=0D +=0D + @retval TRUE Address is system memory with an Address of 0.=0D + @retval FALSE Address does not point to NULL.=0D +**/=0D +STATIC=0D +BOOLEAN=0D +EFIAPI=0D +IsNullGenericAddress (=0D + IN EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE *Address=0D + )=0D +{=0D + if ((Address =3D=3D NULL) ||=0D + ((Address->AddressSpaceId =3D=3D EFI_ACPI_6_4_SYSTEM_MEMORY) &&=0D + (Address->Address =3D=3D 0x0)))=0D + {=0D + return TRUE;=0D + }=0D +=0D + return FALSE;=0D +}=0D +=0D +/** Create and add an _CPC Node to Cpu Node.=0D +=0D + For instance, transform an AML node from:=0D + Device (C002)=0D + {=0D + Name (_UID, 2)=0D + Name (_HID, "ACPI0007")=0D + }=0D +=0D + To:=0D + Device (C002)=0D + {=0D + Name (_UID, 2)=0D + Name (_HID, "ACPI0007")=0D + Name(_CPC, Package()=0D + {=0D + NumEntries, // Integer=0D + Revision, // Integer=0D + HighestPerformance, // Integer or Buffer (Res= ource Descriptor)=0D + NominalPerformance, // Integer or Buffer (Res= ource Descriptor)=0D + LowestNonlinearPerformance, // Integer or Buffer (Res= ource Descriptor)=0D + LowestPerformance, // Integer or Buffer (Res= ource Descriptor)=0D + GuaranteedPerformanceRegister, // Buffer (Resource Descr= iptor)=0D + DesiredPerformanceRegister , // Buffer (Resource Descr= iptor)=0D + MinimumPerformanceRegister , // Buffer (Resource Descr= iptor)=0D + MaximumPerformanceRegister , // Buffer (Resource Descr= iptor)=0D + PerformanceReductionToleranceRegister, // Buffer (Resource Descr= iptor)=0D + TimeWindowRegister, // Buffer (Resource Descr= iptor)=0D + CounterWraparoundTime, // Integer or Buffer (Res= ource Descriptor)=0D + ReferencePerformanceCounterRegister, // Buffer (Resource Descr= iptor)=0D + DeliveredPerformanceCounterRegister, // Buffer (Resource Descr= iptor)=0D + PerformanceLimitedRegister, // Buffer (Resource Descr= iptor)=0D + CPPCEnableRegister // Buffer (Resource Descr= iptor)=0D + AutonomousSelectionEnable, // Integer or Buffer (Res= ource Descriptor)=0D + AutonomousActivityWindowRegister, // Buffer (Resource Descr= iptor)=0D + EnergyPerformancePreferenceRegister, // Buffer (Resource Descr= iptor)=0D + ReferencePerformance // Integer or Buffer (Res= ource Descriptor)=0D + LowestFrequency, // Integer or Buffer (Res= ource Descriptor)=0D + NominalFrequency // Integer or Buffer (Res= ource Descriptor)=0D + })=0D + }=0D +=0D + @param [in] Generator The SSDT Cpu Topology generator.=0D + @param [in] CfgMgrProtocol Pointer to the Configuration Manager= =0D + Protocol Interface.=0D + @param [in] ProcHierarchyNodeInfo CM_ARM_PROC_HIERARCHY_INFO describin= g=0D + the Cpu.=0D + @param [in] Node CPU Node to which the _CPC node is=0D + attached.=0D +=0D + @retval EFI_SUCCESS The function completed successfully.=0D + @retval EFI_INVALID_PARAMETER Invalid parameter.=0D + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.=0D +**/=0D +STATIC=0D +EFI_STATUS=0D +EFIAPI=0D +CreateAmlCpcNode (=0D + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator,=0D + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,= =0D + IN CM_ARM_GICC_INFO *GicCInfo,=0D + IN AML_OBJECT_NODE_HANDLE *Node=0D + )=0D +{=0D + EFI_STATUS Status;=0D + CM_ARM_CPC_INFO *CpcInfo;=0D +=0D + Status =3D GetEArmObjCpcInfo (=0D + CfgMgrProtocol,=0D + GicCInfo->CpcToken,=0D + &CpcInfo,=0D + NULL=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT (0);=0D + return Status;=0D + }=0D +=0D + Status =3D AmlCreateCpcNode (=0D + CpcInfo->Revision,=0D + IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) ?=0D + NULL :=0D + &CpcInfo->HighestPerformanceBuffer,=0D + CpcInfo->HighestPerformanceInteger,=0D + IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) ?=0D + NULL :=0D + &CpcInfo->NominalPerformanceBuffer,=0D + CpcInfo->NominalPerformanceInteger,=0D + IsNullGenericAddress (&CpcInfo->LowestNonlinearPerformanceBuf= fer) ?=0D + NULL :=0D + &CpcInfo->LowestNonlinearPerformanceBuffer,=0D + CpcInfo->LowestNonlinearPerformanceInteger,=0D + IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) ?=0D + NULL :=0D + &CpcInfo->LowestPerformanceBuffer,=0D + CpcInfo->LowestPerformanceInteger,=0D + IsNullGenericAddress (&CpcInfo->GuaranteedPerformanceRegister= ) ?=0D + NULL :=0D + &CpcInfo->GuaranteedPerformanceRegister,=0D + IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister) ?= =0D + NULL :=0D + &CpcInfo->DesiredPerformanceRegister,=0D + IsNullGenericAddress (&CpcInfo->MinimumPerformanceRegister) ?= =0D + NULL :=0D + &CpcInfo->MinimumPerformanceRegister,=0D + IsNullGenericAddress (&CpcInfo->MaximumPerformanceRegister) ?= =0D + NULL :=0D + &CpcInfo->MaximumPerformanceRegister,=0D + IsNullGenericAddress (&CpcInfo->PerformanceReductionTolerance= Register) ?=0D + NULL :=0D + &CpcInfo->PerformanceReductionToleranceRegister,=0D + IsNullGenericAddress (&CpcInfo->TimeWindowRegister) ?=0D + NULL :=0D + &CpcInfo->TimeWindowRegister,=0D + IsNullGenericAddress (&CpcInfo->CounterWraparoundTimeBuffer) = ?=0D + NULL :=0D + &CpcInfo->CounterWraparoundTimeBuffer,=0D + CpcInfo->CounterWraparoundTimeInteger,=0D + &CpcInfo->ReferencePerformanceCounterRegister,=0D + &CpcInfo->DeliveredPerformanceCounterRegister,=0D + &CpcInfo->PerformanceLimitedRegister,=0D + IsNullGenericAddress (&CpcInfo->CPPCEnableRegister) ?=0D + NULL :=0D + &CpcInfo->CPPCEnableRegister,=0D + IsNullGenericAddress (&CpcInfo->AutonomousSelectionEnableBuff= er) ?=0D + NULL :=0D + &CpcInfo->AutonomousSelectionEnableBuffer,=0D + CpcInfo->AutonomousSelectionEnableInteger,=0D + IsNullGenericAddress (&CpcInfo->AutonomousActivityWindowRegis= ter) ?=0D + NULL :=0D + &CpcInfo->AutonomousActivityWindowRegister,=0D + IsNullGenericAddress (&CpcInfo->EnergyPerformancePreferenceRe= gister) ?=0D + NULL :=0D + &CpcInfo->EnergyPerformancePreferenceRegister,=0D + IsNullGenericAddress (&CpcInfo->ReferencePerformanceBuffer) ?= =0D + NULL :=0D + &CpcInfo->ReferencePerformanceBuffer,=0D + CpcInfo->ReferencePerformanceInteger,=0D + IsNullGenericAddress (&CpcInfo->LowestFrequencyBuffer) ?=0D + NULL :=0D + &CpcInfo->LowestFrequencyBuffer,=0D + CpcInfo->LowestFrequencyInteger,=0D + IsNullGenericAddress (&CpcInfo->NominalFrequencyBuffer) ?=0D + NULL :=0D + &CpcInfo->NominalFrequencyBuffer,=0D + CpcInfo->NominalFrequencyInteger,=0D + Node,=0D + NULL=0D + );=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=0D +}=0D +=0D /** Create and add an _LPI method to Cpu/Cluster Node.=0D =0D For instance, transform an AML node from:=0D @@ -581,7 +768,20 @@ CreateAmlCpuFromProcHierarchy (=0D // CM_ARM_PROC_HIERARCHY_INFO, create an _LPI method returning them.=0D if (ProcHierarchyNodeInfo->LpiToken !=3D CM_NULL_TOKEN) {=0D Status =3D CreateAmlLpiMethod (Generator, ProcHierarchyNodeInfo, CpuNo= de);=0D - ASSERT_EFI_ERROR (Status);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=0D + }=0D + }=0D +=0D + // If a CPC info is associated with the=0D + // GicCinfo, create an _CPC method returning them.=0D + if (GicCInfo->CpcToken !=3D CM_NULL_TOKEN) {=0D + Status =3D CreateAmlCpcNode (Generator, CfgMgrProtocol, GicCInfo, CpuN= ode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=0D + }=0D }=0D =0D return Status;=0D @@ -934,10 +1134,11 @@ CreateTopologyFromGicC (=0D IN AML_OBJECT_NODE_HANDLE ScopeNode=0D )=0D {=0D - EFI_STATUS Status;=0D - CM_ARM_GICC_INFO *GicCInfo;=0D - UINT32 GicCInfoCount;=0D - UINT32 Index;=0D + EFI_STATUS Status;=0D + CM_ARM_GICC_INFO *GicCInfo;=0D + UINT32 GicCInfoCount;=0D + UINT32 Index;=0D + AML_OBJECT_NODE_HANDLE CpuNode;=0D =0D ASSERT (Generator !=3D NULL);=0D ASSERT (CfgMgrProtocol !=3D NULL);=0D @@ -961,12 +1162,22 @@ CreateTopologyFromGicC (=0D ScopeNode,=0D &GicCInfo[Index],=0D Index,=0D - NULL=0D + &CpuNode=0D );=0D if (EFI_ERROR (Status)) {=0D ASSERT (0);=0D break;=0D }=0D +=0D + // If a CPC info is associated with the=0D + // GicCinfo, create an _CPC method returning them.=0D + if (GicCInfo->CpcToken !=3D CM_NULL_TOKEN) {=0D + Status =3D CreateAmlCpcNode (Generator, CfgMgrProtocol, &GicCInfo[In= dex], CpuNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + break;=0D + }=0D + }=0D } // for=0D =0D return Status;=0D -- =0D 2.25.1=0D =0D