From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR02-AM5-obe.outbound.protection.outlook.com (EUR02-AM5-obe.outbound.protection.outlook.com [40.107.0.82]) by mx.groups.io with SMTP id smtpd.web08.11613.1663255028089361400 for ; Thu, 15 Sep 2022 08:17:09 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=C1KunuPN; spf=pass (domain: arm.com, ip: 40.107.0.82, mailfrom: sami.mujawar@arm.com) ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=HxvzLt4APTj0wgGDQsLD++IarMzcRNqYeGZsEK9sCOQR/Qh31A6UH0sdGYOp36dt8onDbhAE40uGTPvCRmaqc/9bJt3eA5yfyLuly7Gj0R+b92W8pE8iFaKEuZsJUGrtfGBdr9RP/RjvYjQa0pjEjTbqo3XAct1H1yUKJ0oP/pVkj+IDIhhqwvFJTwCSaEY3/du5zgir8GyjHDyk7nCgXvcYBHfqt22Xlh3uNo0Um3H/s+hTQRexHlPmHY5bPFQb7Zj74/ijSGQjAmTLULF1Pph3jfPAsVOfNO0BTxxXjWfn7LeKAyPJpiEKfWLWdDjvMNs+YLoBiBZvBZwj7GEAmQ== ARC-Message-Signature: i=2; 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=3Rd4EsTJkuTMYn+TQbSmTdpTK3VvI6aWlomJYv2QRno=; b=PD1et0En6IUObNhoUw1jXqXAn3/0IBoouFQ6WpNz+17fyWhmynPyjbamh2LwSQifjW/CJNEKj2GFfs3g68y1Q23WBWNV+RolTvnaBWb3KjYtEUiLVh2Kcn7PsRSj9wi+8cM5vV/DIEw42EWgG76Lrp4GIw4SsyiNRI/Nf+RqIWAqa7EVazvFAsEUwDkThyMxSmet0udhmZ6pPQFVVVtxpyFj613skua/PZhPL1uldv/BgvG6mYR0ScKirjwk0JFlUcguZOOC70IaIOeOxIb5zUcfhi4E5lchJsbIW/2LKh0NNqNq71u8phzXHRlnKPrC8AqMqYFPPMiv+sTONBF1fA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3Rd4EsTJkuTMYn+TQbSmTdpTK3VvI6aWlomJYv2QRno=; b=C1KunuPN0wfb3uVYp5rHfDWDWwPhVpfa2szLZ80KZ7kjrFqRfcCTAXmYlB7Cj0gE+Wlk85exRH7qkTaIv8j/wILjslWsnAu6SFqjVhL4VZO2GfWeLcDOBe8/h5htV5DQrqZCpBzNEvVMgCZK0/vCNJ7LnkULp0ovVICX+RuRJ3Q= Received: from AM0PR02CA0180.eurprd02.prod.outlook.com (2603:10a6:20b:28e::17) by PA4PR08MB7521.eurprd08.prod.outlook.com (2603:10a6:102:26a::15) 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 15:17:04 +0000 Received: from VE1EUR03FT038.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:28e:cafe::e4) by AM0PR02CA0180.outlook.office365.com (2603:10a6:20b:28e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.10 via Frontend Transport; Thu, 15 Sep 2022 15:16:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT038.mail.protection.outlook.com (10.152.19.112) 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 15:16:57 +0000 Received: ("Tessian outbound fc2405f9ecaf:v124"); Thu, 15 Sep 2022 15:16:57 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 179868b5b6dca484 X-CR-MTA-TID: 64aa7808 Received: from f6faaf61de5f.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 3FD5EFA8-A230-467C-829E-5C309909FFA7.1; Thu, 15 Sep 2022 15:16:51 +0000 Received: from EUR02-AM5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f6faaf61de5f.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 15 Sep 2022 15:16:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DR5IpLx/5W6/NJ5IxUCX0oxUW+V1tJ6dkV1AcwMEhV+Bpc3TLaD87Z32jCt71PrJeuPiHSNfvpQFIoF2hJUTYniMfQanTjQioY6Xb8AmKMIaQ3/TV25mqVolnxncAEulNWo0MUj4R/4QTXEog3HXP9lHutugoV6oKKwbAKjOdfaB+u5rGNzTyc57q4HtwJxeRQZ7gTslgp9gvyeGSFDkxmhScCL8nVlzj/b8uFjHwQXfyfGgs34ckPGVpT1iM12GgHOSUTChGDBa4wQRw0bOJi2xGe56iWeE6Jlj9hPlp+07xQ21qkHUR4123mXxArbJWLO4hnoe6GbjhjDOIX36BA== 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=3Rd4EsTJkuTMYn+TQbSmTdpTK3VvI6aWlomJYv2QRno=; b=LVBfeCwPXzmo/44GByw5kjiwoiyPFMo1t10tGKfth2YjQUroyF9Qq1uBk9OR3lpNkrv8s6aEWP3AP8vI+QvTHPczqx9GPzz3ch/gw8Abx6OE5rkHqbNerrDECQEWwIu5zNiNUNsNoAZUlKgQbeFlG1JbrijhDlZHFn9JOOGuUxq0iakZngbr9ffLxFWrzZy7MpdPxQ4LCFB+LkjHrNjNyGNW7Ev63GOX1gKUqWma0Dqbkqqg4uOt7ilUQRaCtkS1WJwNOA+cvX1evmCrz50PH5udsaL8BmZ/BIWnXs/NZjh04WMl48lbgm/8XGOYKhMEpz+FrULi/u8CaVN0Y0SMhA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3Rd4EsTJkuTMYn+TQbSmTdpTK3VvI6aWlomJYv2QRno=; b=C1KunuPN0wfb3uVYp5rHfDWDWwPhVpfa2szLZ80KZ7kjrFqRfcCTAXmYlB7Cj0gE+Wlk85exRH7qkTaIv8j/wILjslWsnAu6SFqjVhL4VZO2GfWeLcDOBe8/h5htV5DQrqZCpBzNEvVMgCZK0/vCNJ7LnkULp0ovVICX+RuRJ3Q= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) by DB9PR08MB8204.eurprd08.prod.outlook.com (2603:10a6:10:39f::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5612.14; Thu, 15 Sep 2022 15:16:43 +0000 Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::b480:677a:ac9b:8f24]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::b480:677a:ac9b:8f24%7]) with mapi id 15.20.5612.022; Thu, 15 Sep 2022 15:16:43 +0000 Message-ID: <3b4de5f5-fece-cab1-e27b-d07888390a6c@arm.com> Date: Thu, 15 Sep 2022 16:16:35 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 Subject: Re: [PATCH v3 3/3] DynamicTablesPkg: SSDT CPU _CPC generator To: Jeff Brasen , devel@edk2.groups.io Cc: ardb+tianocore@kernel.org, Alexei.Fedorov@arm.com, pierre.gondois@arm.com, "nd@arm.com" References: From: "Sami Mujawar" In-Reply-To: X-ClientProxiedBy: LNXP265CA0023.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:5e::35) To AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: AS8PR08MB6806:EE_|DB9PR08MB8204:EE_|VE1EUR03FT038:EE_|PA4PR08MB7521:EE_ X-MS-Office365-Filtering-Correlation-Id: 17d699e5-f824-480a-5f35-08da972d54c3 X-LD-Processed: f34e5979-57d9-4aaa-ad4d-b122a662184d,ExtAddr x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: plxZoBgNDZ4ABEcJ3Qhd7+gp1m0GICuwWWYr/W33fWGWEpYZKu28bQdPP7csrloj+vyBKAnEEokVxdi6VRQqZXwlTpqeJkgPHZL1HtyYq12Qk79S8KBbz4jeGLUcWUDu1/IMgOuunKA2dnMLuq2g+G/yt8hzGDYTLmT7257SI8v3HF3JHzoV7GbDK5otMAszi1DA3RkG/T/4/etTJ605gNjS2H2HacWtSVFbWQJCDXMrX/dakmMrTNBOJJPxpg52v3fxzGG3N1NwaKCgJ8ONBkZFIl8J7Jx4JlavEsS6okIXCrHO+F/rSSnvqQXHC2lj4fZ4F/vcl8tW6Wn0wLefKi581Mkc1LDblO4hlx3WN2WNAeu19N6Jot8brCn5zg42WCfmoLEx8UGkVe0AYAK/aClf2QLFtVHkG4kZIdWB6Cz1Dj0nnV3Ehxp5DN+aydg0cmPyYNeNGe9hYnN6BpHRsCX4LOHV0rvW0VCEsdiOlmJyJQXyE6xP9zk3CkS3A7LvaSaSkAbkTGr8o/T5Xwtpgk3DJxe6OymC76yNJz22naaUxiw1dfgfHRoh55NdV1nNWzj8T7UpBW1sEbQTPjueP/MDsuUJKFU5755oZjPWTd9j23jUGWZuuxj2ZYAYTCMjoTsL1AUC08cxSnDsdrVJOl8gomA3Nlo+/ArX3BxVX1EOk4h6YtstGtZjIQFmdvNk8Fx3U221ET7df/0on8eXlc5G/d+6fdggDUzSgJjhhpvAX6zwqIZZMVhuG+/ZJfnjTnA8kx2IyVtE0N1pRXTSC9HpeEZxJGTvdZjGOxDAcWX2GASEN4Wc3wyCitqqfTQbaaof94gM2SUxWDyuUKERNw== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6806.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(376002)(39860400002)(136003)(396003)(366004)(346002)(451199015)(31686004)(36756003)(6486002)(316002)(186003)(38100700002)(53546011)(44832011)(41300700001)(478600001)(31696002)(8676002)(6512007)(2616005)(66476007)(6666004)(6506007)(26005)(4326008)(66946007)(2906002)(66556008)(8936002)(83380400001)(86362001)(5660300002)(45980500001)(43740500002)(44824005);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB8204 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Return-Path: Sami.Mujawar@arm.com X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT038.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 875d9975-2251-42ae-9922-08da972d4bfb X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gkwbsRMk1/OoKv0q1LLb2QnFqCdT8dLdQ5TVh3Zzj1jOxcP+a/me6v+iR3sudMX7W5XbKpNLSeKAaj06PYbFr8OzhtB/ovhTorJQi9m/Id3JEURnSj6MqsO2kbM0x4uO4MVZfSBvDmnCa7e+dqBL5nQzJORoA4n8S1P/DBC48CNZqFDQlK98IiFxS47M1M/mGULsGWnBTzCe7VtS0j6nT6iPuKhlodgYDIJkPWJsyS/vbKH50BcCpri5V4n9Hz+lKbLuUioDROs17z7JoWbWkSNNPDa5/BFndlMsq+ufiWCpzeHEOnVJXGVZYDOFfrVxjEjK3WNJkTORddXb477yGMPdst8IaC04/RyVQaHY3KuJFD9L3R5PtoW4BLvXNYVQMDbylw3clndX9bm5Jn9rhzBSk3j2Dg6B/04PCJvIH+jt/5/Y/4qLSSkVz7pIdv6Oyz/yXQ2pdHG9fM6YSGaWxXySY0i4voemiNmYwdp9DnFI//Jy3+cAHIwdfbqUnWxlymBkvAEM3BNg3+1VL93d7FrWkZzecidZkCCU2THlW00agG9FUe/1qK0srJIiiwBB12b0zcE6OO14pFn238N7PU8tQWQwoOzZhIDmk9duDA2T83iaGh24e2rM8ebULp539VbKLEk3U1e9o2iTF4kkvSqnoYBSMsmJcqjN5Y645kAt4B1wE/nwoq0gvNv/Qeg4rRqiaxthCXVulPvsKyvrpnoZl9Ubu3zlmQe4f73+h53IdEUR+Og6cS+BkDIw9lzrZpkq+ay1YhCFSXxxaEo5i7YmN9LOoLpu7iSsbhB5WkFBLaVlkR9ReYMAsvvleFFtx3+6Ff2AxJoAZWr+XX+++g== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230022)(4636009)(136003)(39860400002)(346002)(396003)(376002)(451199015)(46966006)(40470700004)(36840700001)(31696002)(44832011)(356005)(4326008)(81166007)(36756003)(478600001)(86362001)(82310400005)(31686004)(316002)(41300700001)(5660300002)(82740400003)(2616005)(70586007)(6666004)(2906002)(6506007)(6486002)(6512007)(83380400001)(8936002)(8676002)(336012)(186003)(53546011)(70206006)(26005)(36860700001)(47076005)(40480700001)(40460700003)(43740500002)(44824005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2022 15:16:57.6196 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 17d699e5-f824-480a-5f35-08da972d54c3 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT038.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB7521 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Jeff, Please find my inputs inline marked [SAMI]. Regards, Sami Mujawar On 15/09/2022 02:10 pm, Jeff Brasen wrote: > Add code to use a token attached to GICC to generate _CPC object on cpus. > > > > Signed-off-by: Jeff Brasen > > --- > > .../SsdtCpuTopologyGenerator.c | 223 +++++++++++++++++- > > 1 file changed, 217 insertions(+), 6 deletions(-) > > > > diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c > > index 8561f48e1f..5d41d57064 100644 > > --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c > > +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c > > @@ -76,6 +76,16 @@ GET_OBJECT_LIST ( > > CM_ARM_LPI_INFO > > ); > > > > +/** > > + This macro expands to a function that retrieves the CPC > > + information from the Configuration Manager. > > +*/ > > +GET_OBJECT_LIST ( > > + EObjNameSpaceArm, > > + EArmObjCpcInfo, > > + CM_ARM_CPC_INFO > > + ); > > + > > /** Initialize the TokenTable. > > > > One entry should be allocated for each CM_ARM_PROC_HIERARCHY_INFO > > @@ -229,6 +239,183 @@ WriteAslName ( > > return EFI_SUCCESS; > > } > > > > +/** Utility function to check if generic address points to NULL > > + > > + @param [in] Address Pointer to the Generic address > > + > > + @retval TRUE Address is system memory with an Address of 0. > > + @retval FALSE Address does not point to NULL. > > +**/ > > +STATIC > > +BOOLEAN > > +EFIAPI > > +IsNullGenericAddress ( [SAMI] Move this function to DynamicTablesPkg\Library\Common\AmlLib\CodeGen\AmlCodeGen.c > > + IN EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE *Address > > + ) > > +{ > > + if ((Address == NULL) || > > + ((Address->AddressSpaceId == EFI_ACPI_6_4_SYSTEM_MEMORY) && > > + (Address->Address == 0x0))) > > + { > > + return TRUE; > > + } > > + > > + return FALSE; > > +} > > + > > +/** Create and add an _CPC Node to Cpu Node. > > + > > + For instance, transform an AML node from: > > + Device (C002) > > + { > > + Name (_UID, 2) > > + Name (_HID, "ACPI0007") > > + } > > + > > + To: > > + Device (C002) > > + { > > + Name (_UID, 2) > > + Name (_HID, "ACPI0007") > > + Name(_CPC, Package() > > + { > > + NumEntries, // Integer > > + Revision, // Integer > > + HighestPerformance, // Integer or Buffer (Resource Descriptor) > > + NominalPerformance, // Integer or Buffer (Resource Descriptor) > > + LowestNonlinearPerformance, // Integer or Buffer (Resource Descriptor) > > + LowestPerformance, // Integer or Buffer (Resource Descriptor) > > + GuaranteedPerformanceRegister, // Buffer (Resource Descriptor) > > + DesiredPerformanceRegister , // Buffer (Resource Descriptor) > > + MinimumPerformanceRegister , // Buffer (Resource Descriptor) > > + MaximumPerformanceRegister , // Buffer (Resource Descriptor) > > + PerformanceReductionToleranceRegister, // Buffer (Resource Descriptor) > > + TimeWindowRegister, // Buffer (Resource Descriptor) > > + CounterWraparoundTime, // Integer or Buffer (Resource Descriptor) > > + ReferencePerformanceCounterRegister, // Buffer (Resource Descriptor) > > + DeliveredPerformanceCounterRegister, // Buffer (Resource Descriptor) > > + PerformanceLimitedRegister, // Buffer (Resource Descriptor) > > + CPPCEnableRegister // Buffer (Resource Descriptor) > > + AutonomousSelectionEnable, // Integer or Buffer (Resource Descriptor) > > + AutonomousActivityWindowRegister, // Buffer (Resource Descriptor) > > + EnergyPerformancePreferenceRegister, // Buffer (Resource Descriptor) > > + ReferencePerformance // Integer or Buffer (Resource Descriptor) > > + LowestFrequency, // Integer or Buffer (Resource Descriptor) > > + NominalFrequency // Integer or Buffer (Resource Descriptor) > > + }) > > + } > > + > > + @param [in] Generator The SSDT Cpu Topology generator. > > + @param [in] CfgMgrProtocol Pointer to the Configuration Manager > > + Protocol Interface. > > + @param [in] ProcHierarchyNodeInfo CM_ARM_PROC_HIERARCHY_INFO describing > > + the Cpu. > > + @param [in] Node CPU Node to which the _CPC node is > > + attached. > > + > > + @retval EFI_SUCCESS The function completed successfully. > > + @retval EFI_INVALID_PARAMETER Invalid parameter. > > + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. > > +**/ > > +STATIC > > +EFI_STATUS > > +EFIAPI > > +CreateAmlCpcNode ( > > + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, > > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, > > + IN CM_ARM_GICC_INFO *GicCInfo, > > + IN AML_OBJECT_NODE_HANDLE *Node > > + ) > > +{ > > + EFI_STATUS Status; > > + CM_ARM_CPC_INFO *CpcInfo; > > + > > + Status = GetEArmObjCpcInfo ( > > + CfgMgrProtocol, > > + GicCInfo->CpcToken, > > + &CpcInfo, > > + NULL > > + ); > > + if (EFI_ERROR (Status)) { > > + ASSERT (0); > > + return Status; > > + } > > + > > + Status = AmlCreateCpcNode ( [SAMI] The number of parameters to this functions can be reduced to just pass CpcInfo. > > + CpcInfo->Revision, > > + IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) ? > > + NULL : > > + &CpcInfo->HighestPerformanceBuffer, > > + CpcInfo->HighestPerformanceInteger, > > + IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) ? > > + NULL : > > + &CpcInfo->NominalPerformanceBuffer, > > + CpcInfo->NominalPerformanceInteger, > > + IsNullGenericAddress (&CpcInfo->LowestNonlinearPerformanceBuffer) ? > > + NULL : > > + &CpcInfo->LowestNonlinearPerformanceBuffer, > > + CpcInfo->LowestNonlinearPerformanceInteger, > > + IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) ? > > + NULL : > > + &CpcInfo->LowestPerformanceBuffer, > > + CpcInfo->LowestPerformanceInteger, > > + IsNullGenericAddress (&CpcInfo->GuaranteedPerformanceRegister) ? > > + NULL : > > + &CpcInfo->GuaranteedPerformanceRegister, > > + IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister) ? > > + NULL : > > + &CpcInfo->DesiredPerformanceRegister, > > + IsNullGenericAddress (&CpcInfo->MinimumPerformanceRegister) ? > > + NULL : > > + &CpcInfo->MinimumPerformanceRegister, > > + IsNullGenericAddress (&CpcInfo->MaximumPerformanceRegister) ? > > + NULL : > > + &CpcInfo->MaximumPerformanceRegister, > > + IsNullGenericAddress (&CpcInfo->PerformanceReductionToleranceRegister) ? > > + NULL : > > + &CpcInfo->PerformanceReductionToleranceRegister, > > + IsNullGenericAddress (&CpcInfo->TimeWindowRegister) ? > > + NULL : > > + &CpcInfo->TimeWindowRegister, > > + IsNullGenericAddress (&CpcInfo->CounterWraparoundTimeBuffer) ? > > + NULL : > > + &CpcInfo->CounterWraparoundTimeBuffer, > > + CpcInfo->CounterWraparoundTimeInteger, > > + &CpcInfo->ReferencePerformanceCounterRegister, > > + &CpcInfo->DeliveredPerformanceCounterRegister, > > + &CpcInfo->PerformanceLimitedRegister, > > + IsNullGenericAddress (&CpcInfo->CPPCEnableRegister) ? > > + NULL : > > + &CpcInfo->CPPCEnableRegister, > > + IsNullGenericAddress (&CpcInfo->AutonomousSelectionEnableBuffer) ? > > + NULL : > > + &CpcInfo->AutonomousSelectionEnableBuffer, > > + CpcInfo->AutonomousSelectionEnableInteger, > > + IsNullGenericAddress (&CpcInfo->AutonomousActivityWindowRegister) ? > > + NULL : > > + &CpcInfo->AutonomousActivityWindowRegister, > > + IsNullGenericAddress (&CpcInfo->EnergyPerformancePreferenceRegister) ? > > + NULL : > > + &CpcInfo->EnergyPerformancePreferenceRegister, > > + IsNullGenericAddress (&CpcInfo->ReferencePerformanceBuffer) ? > > + NULL : > > + &CpcInfo->ReferencePerformanceBuffer, > > + CpcInfo->ReferencePerformanceInteger, > > + IsNullGenericAddress (&CpcInfo->LowestFrequencyBuffer) ? > > + NULL : > > + &CpcInfo->LowestFrequencyBuffer, > > + CpcInfo->LowestFrequencyInteger, > > + IsNullGenericAddress (&CpcInfo->NominalFrequencyBuffer) ? > > + NULL : > > + &CpcInfo->NominalFrequencyBuffer, > > + CpcInfo->NominalFrequencyInteger, > > + Node, > > + NULL > > + ); > > + ASSERT_EFI_ERROR (Status); > > + return Status; > > +} > > + > > /** Create and add an _LPI method to Cpu/Cluster Node. > > > > For instance, transform an AML node from: > > @@ -581,7 +768,20 @@ CreateAmlCpuFromProcHierarchy ( > > // CM_ARM_PROC_HIERARCHY_INFO, create an _LPI method returning them. > > if (ProcHierarchyNodeInfo->LpiToken != CM_NULL_TOKEN) { > > Status = CreateAmlLpiMethod (Generator, ProcHierarchyNodeInfo, CpuNode); > > - ASSERT_EFI_ERROR (Status); > > + if (EFI_ERROR (Status)) { > > + ASSERT_EFI_ERROR (Status); > > + return Status; > > + } > > + } > > + > > + // If a CPC info is associated with the > > + // GicCinfo, create an _CPC method returning them. > > + if (GicCInfo->CpcToken != CM_NULL_TOKEN) { > > + Status = CreateAmlCpcNode (Generator, CfgMgrProtocol, GicCInfo, CpuNode); > > + if (EFI_ERROR (Status)) { > > + ASSERT_EFI_ERROR (Status); > > + return Status; > > + } > > } > > > > return Status; > > @@ -934,10 +1134,11 @@ CreateTopologyFromGicC ( > > IN AML_OBJECT_NODE_HANDLE ScopeNode > > ) > > { > > - EFI_STATUS Status; > > - CM_ARM_GICC_INFO *GicCInfo; > > - UINT32 GicCInfoCount; > > - UINT32 Index; > > + EFI_STATUS Status; > > + CM_ARM_GICC_INFO *GicCInfo; > > + UINT32 GicCInfoCount; > > + UINT32 Index; > > + AML_OBJECT_NODE_HANDLE CpuNode; > > > > ASSERT (Generator != NULL); > > ASSERT (CfgMgrProtocol != NULL); > > @@ -961,12 +1162,22 @@ CreateTopologyFromGicC ( > > ScopeNode, > > &GicCInfo[Index], > > Index, > > - NULL > > + &CpuNode > > ); > > if (EFI_ERROR (Status)) { > > ASSERT (0); > > break; > > } > > + > > + // If a CPC info is associated with the > > + // GicCinfo, create an _CPC method returning them. > > + if (GicCInfo->CpcToken != CM_NULL_TOKEN) { > > + Status = CreateAmlCpcNode (Generator, CfgMgrProtocol, &GicCInfo[Index], CpuNode); > > + if (EFI_ERROR (Status)) { > > + ASSERT_EFI_ERROR (Status); > > + break; > > + } > > + } > > } // for > > > > return Status; >