From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (EUR03-DBA-obe.outbound.protection.outlook.com [40.107.104.59]) by mx.groups.io with SMTP id smtpd.web08.6885.1666787703143379525 for ; Wed, 26 Oct 2022 05:35:03 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=35ahmqjI; spf=pass (domain: arm.com, ip: 40.107.104.59, mailfrom: sami.mujawar@arm.com) ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=b+ABHqjsrrrNW7ii+cCjMH9Nu7EM/T4fMd62xg+TVAwqasm+c53Hn/7YmUKrmnFOKIoQaq5j2Se4D2IkiJBSf700c0+i5AsRubnrSeNJ8+HBNanj2pSbn0T04hChlr6m0NDKOxS/VThN/FuIlFdmu7lb/Rbx2lwDr4F0xvBRlrkkhwNCxT5DjYxdk7swQldCpXVsk5Z4KHYAZNtw/eItkuf6RJSmigA9XTOOTjUyQxRDBdQTwXUPknmuJzapZNmacmNKTceMx6LOSbuZ+p+1lRRw0JcqrnqXAqTJ9U6dhUusZsDTNtaYpWexnFGCtC9LNoN6OZiUcxkD8xugveLsBA== 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=0P3nmy7BKqMfNpwKdvm4T4cgaC+aylkdvBcvAiuJb4A=; b=CMD+Jju0RvGLzUNMPkzfJHgc6iAfOp0zey5FtzQiP/GuYwKLS+c8wow5XvbYvlwuHcKn1KV/fDVj40jiCB8f5iJkvjl6HfKxQ8Hx8pHPl5aOE4mpRZg8OXb3mNVMSxwwADKp/SxTsIwqu3L6OUjToFsYymDRyQmjYoXrRKZ7wwOLk/d4a5+efmA+kG/ibH2ZgpPk61SWfRJplESB50yntXDOoyMHHetnJxwkxkKhCtyVQSo30cmeOHQWCcDkO6k3gH3EaJKEpErlfW5rhsxBWIqA4BFj0VCAtC1lh24xvxS35XCSADUEXk8Vtf/Fau3O7WeetAykdRlWVxrRxCbRnw== 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=0P3nmy7BKqMfNpwKdvm4T4cgaC+aylkdvBcvAiuJb4A=; b=35ahmqjIaadDGbPQKnhK+RR/axSBDHaTuee0DKweyJeOjn6zjjvrDhoDjF9H0PYbTFm2EB014N2FgnV/DJf3WoWVgXs0mqWldhZ3NfgaoqP090kVSOP4cyRn2voyTQprd/YMxp4IvOIySmSqNo/iv+1Lj0V2+HMpfznT14frFz4= Received: from AM6PR08CA0024.eurprd08.prod.outlook.com (2603:10a6:20b:b2::36) by DBBPR08MB5996.eurprd08.prod.outlook.com (2603:10a6:10:201::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.28; Wed, 26 Oct 2022 12:34:59 +0000 Received: from VI1EUR03FT027.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:b2:cafe::9a) by AM6PR08CA0024.outlook.office365.com (2603:10a6:20b:b2::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.28 via Frontend Transport; Wed, 26 Oct 2022 12:34: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 VI1EUR03FT027.mail.protection.outlook.com (100.127.144.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.19 via Frontend Transport; Wed, 26 Oct 2022 12:34:58 +0000 Received: ("Tessian outbound 2ff13c8f2c05:v130"); Wed, 26 Oct 2022 12:34:58 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 9588787a8223f247 X-CR-MTA-TID: 64aa7808 Received: from 978890d0150c.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id EE6CCE71-761E-413F-8AAB-69B3FB5C42D4.1; Wed, 26 Oct 2022 12:34:47 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 978890d0150c.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 26 Oct 2022 12:34:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lFBgzfJKwNR3wyXXkd6EFQAle8EpNaz0TLZ7To6NtG98Vb4QVzWhMmErq6ovmbE0bgdddjxWBHxeG3wSAcyeLTBO7In82ngrNRQ6uvb0Lj0L6xrfiDTvLMEQl19ZXBLXQ1yBaO0q9TkYBXgavJma5SYc2d9AHo6mX2U+uBZFSUKxP00Hegwg5RYG9VZsUyQNOGBUSLXtAzW08OTrKQwIPMpuSH60RJkQftqnX9kyPbJDKV5krdTgs5kvLYjJmK2Mpvoh+4ren/An2byoGyZ0h/ZUF4eyfrTR53F6HvW+0M4LfeIdhT3EYiw4DAj6BqWMCG34PMj4WZZKYSCwfehXSg== 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=0P3nmy7BKqMfNpwKdvm4T4cgaC+aylkdvBcvAiuJb4A=; b=C5GU643lqFvM0wW/dLBJlUMfjFxf1I6972RAnJsxfpBIM8twE4MNt/j7n4XjJBnebek6xizEeBzykqdC0wcBMRlnv3qmUhfGRjXp07qETw/v3Ny8gTsDYyHmi0vDBbmwrPLss0HSL6gn+S0nn4vcxdsOk9qktwA2fKRloKI1QKhUaBAP+7x4cKvMqenP8Xij6xagE7vDSuIJ4JgNpKbkqCDXPGzQalmZ0GX7SfmO/7vvtIzlKN9ugl6g7tnaHtxqITq8HSbJYVbb/O/J5FBd+jYo5VeIrKrpYAn4CE54Lksv+AoJ8fDkFkzaxruWgmjjbMkS8tdXffCKTxh1bAzBjg== 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=0P3nmy7BKqMfNpwKdvm4T4cgaC+aylkdvBcvAiuJb4A=; b=35ahmqjIaadDGbPQKnhK+RR/axSBDHaTuee0DKweyJeOjn6zjjvrDhoDjF9H0PYbTFm2EB014N2FgnV/DJf3WoWVgXs0mqWldhZ3NfgaoqP090kVSOP4cyRn2voyTQprd/YMxp4IvOIySmSqNo/iv+1Lj0V2+HMpfznT14frFz4= 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 DBAPR08MB5813.eurprd08.prod.outlook.com (2603:10a6:10:1a5::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.28; Wed, 26 Oct 2022 12:34:44 +0000 Received: from AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::283c:fe2e:699d:2bf]) by AS8PR08MB6806.eurprd08.prod.outlook.com ([fe80::283c:fe2e:699d:2bf%5]) with mapi id 15.20.5746.027; Wed, 26 Oct 2022 12:34:44 +0000 Message-ID: <21c35b9f-f63a-07d4-164d-1d4736a669a9@arm.com> Date: Wed, 26 Oct 2022 13:34:41 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 Subject: Re: [PATCH 10/14] DynamicTablesPkg: Add PCCT related objects To: Pierre.Gondois@arm.com, devel@edk2.groups.io Cc: Alexei Fedorov , "nd@arm.com" References: <20221010092058.118714-1-Pierre.Gondois@arm.com> <20221010092058.118714-11-Pierre.Gondois@arm.com> From: "Sami Mujawar" In-Reply-To: <20221010092058.118714-11-Pierre.Gondois@arm.com> X-ClientProxiedBy: LO3P265CA0015.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:bb::20) To AS8PR08MB6806.eurprd08.prod.outlook.com (2603:10a6:20b:39b::12) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: AS8PR08MB6806:EE_|DBAPR08MB5813:EE_|VI1EUR03FT027:EE_|DBBPR08MB5996:EE_ X-MS-Office365-Filtering-Correlation-Id: 805f205a-d6bd-49fe-1d90-08dab74e7eb8 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: cORyQ9wRxrM+XWYzfE56BqTMXaXVJvBOXo2XOTWNlKE4K63cJySj4it8WvOnwd+mbxMD2lekkaViOT0c6bTt36V1xeQr2WVxF8wkRbU74Ptr3M/AVBBQHv3MJ3ifk/RN82CUAactlQr7aRklZn24/uruN9h56YOM8B8bBKNYL6pE2iDAhnxaEFmsiK/FqR739X2kOdUhffeIVybTJe3QJuamlcReOHxStqkv+OQXJvEB1mI/592inj8CRitvXVGcvY4AQ91b8DiNw+Ip6+w609SwhxHJ0ThUl189hzyHSOjKBdeGJsLcuewHntbmRpnPnD/CjMYh2zebG0BXl4rbG8lpKf4lSRhkTvYOGmKRAyXfnVCN48l9+LKJYbhQOGkv5Awf/hg2bNHRZ6TxuDHAsoPM1ioCkL41bFucBAu4xfeyZfeYcVhPfZA4cQLbjNA8A3YeVQ5tWGHqCWbGoL+LqlQfOhgJIqmwhP/0VFV3aPVi5AqdI8HtpKmzvbRbZG5FEyDu4Qc9nVc4FIHV4GdIKD7IDBEe0K1ngdSd/f+uw4DndWOrJajEHG3+tiOA7eVu2v1SQCP3Sh9/PbeN2t+IoWJXuQ8LA97VQW2XnYs+LHOK+BdBqu4bZU3WCsqIoX499htvONh4vu83HhbRYTSqjpKbPKthquGwoPC6p0j4XWfocov6TTGEJcPdoyTYA//KVcwmMRg6Ic1wBr4j4jpKbkeE7In7i0gAGmZIHUp2kI8WrZWw71QyURDehTgNPbVSBNF02+XGLKAXBt8y4T+VcZZYY1iwwIKz6I+gxBSw9IQ= 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)(366004)(376002)(346002)(396003)(39860400002)(136003)(451199015)(33964004)(38100700002)(6512007)(36756003)(186003)(2906002)(31686004)(83380400001)(41300700001)(2616005)(26005)(8936002)(30864003)(5660300002)(44832011)(6486002)(478600001)(86362001)(6666004)(31696002)(6506007)(8676002)(66556008)(66946007)(66476007)(4326008)(53546011)(316002)(19627235002)(54906003)(43740500002)(45980500001)(579004);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR08MB5813 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: VI1EUR03FT027.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 203df68d-dbfb-476d-2cec-08dab74e7623 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pDnKirCRCNv8T1MT1jfUVAwm3SAFDq/7iZs9D1pRg1mkkFWYymrpVEVrk/vH9h1tes5lq4ONBHsPt5ZUeTa/nNJ7uFeI3e8pGTDLKW8cJyZPwZoHTf2xNLFFvCez95TjUB8CWSGkEYDtcTTk2Is9hD+l1TZPUjdIx/ykqLqRDmI/jsnLqplz11TIGyWYsN6thMhWslvzbo4AvpWg4PmPLt4yuSlCEaS3yC0mEJi6zNH0mpMkY8LqtcQMVFUsZSD0cmmPgKxf+rp3vxyx9fr3iq2AGImG+zssBFwcNuOZigWhCH/i0CkTDBftDFwfgTOIjp34IP7f2zU0e1FFZGQ5QVuQap5ejHObWcASFLA5FhBfhUu+QYj7WY8lxD0ism/Cj2LJTDdKAY20XB1e4Zp6INVy3lIrI+ovEtL8iqGElhEybFcDjvMePktYLIfgDzUVtqcDBr+ENnzduMykNdlm8IofCnaWHTUGse6KaUy9X9MzYRh/Z6V20scduC2OdgMxP5t6L5QfwnZpZKBqWavujWspV7D+cE2aSjTrgeWIxEVXatw9g5vFcvYL5z2/c0mlzrasrErvjuDFAfJXv2wA6JpBtwFjGRsvySHBAUVOrS4Wkt9RPKqqyU04l/o2YgW3kWeo8jQJpMcSdaxf3S7xpG5Igioc17Gotclh8NHg01R0ZHcAI1JauNuHR84q90dc6GFPztE1zu7PTliil8hRpcJ968CrWpiQhwayUVvD3rTWU88DQTX7ZTF3RvUsh00mF1NAzhKwLTvOatB7JOIywJaEAISFVf0W1Opo9phBxO4QYDY9YEV1RbJLzZOnC2XY 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)(6506007)(33964004)(41300700001)(6666004)(82740400003)(53546011)(36756003)(5660300002)(54906003)(40460700003)(19627235002)(316002)(70586007)(40480700001)(81166007)(6486002)(356005)(8676002)(8936002)(86362001)(4326008)(478600001)(31696002)(44832011)(70206006)(30864003)(26005)(82310400005)(83380400001)(2616005)(31686004)(6512007)(2906002)(47076005)(36860700001)(186003)(336012)(43740500002)(579004);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Oct 2022 12:34:58.6267 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 805f205a-d6bd-49fe-1d90-08dab74e7eb8 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: VI1EUR03FT027.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB5996 Content-Type: multipart/alternative; boundary="------------0aMQ8tPT6aJooWi0ALrmLPgQ" --------------0aMQ8tPT6aJooWi0ALrmLPgQ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Pierre, There are some minor updates that are required for this patch marked inline as [SAMI]. If you agree, I will make these changes before merging. Regards, Sami Mujawar On 10/10/2022 10:20 am, Pierre.Gondois@arm.com wrote: > From: Pierre Gondois > > Introduce the following CmObj in the ArmNameSpaceObjects: > - CM_ARM_MAILBOX_REGISTER_INFO > - CM_ARM_PCC_SUBSPACE_CHANNEL_TIMING_INFO > - CM_ARM_PCC_SUBSPACE_GENERIC_INFO > - CM_ARM_PCC_SUBPSACE_TYPE0_INFO > - CM_ARM_PCC_SUBPSACE_TYPE1_INFO > - CM_ARM_PCC_SUBPSACE_TYPE2_INFO > - CM_ARM_PCC_SUBPSACE_TYPE3_INFO > - CM_ARM_PCC_SUBPSACE_TYPE4_INFO > - CM_ARM_PCC_SUBPSACE_TYPE5_INFO > > These objects allow to describe mailbox registers, pcc timings > and PCCT subspaces. They prepare the enablement of a PCCT generator. > > Also add the CmObjParsers associated to each object. > > Signed-off-by: Pierre Gondois > --- > .../Include/ArmNameSpaceObjects.h | 277 +++++++++++++++--- > .../ConfigurationManagerObjectParser.c | 107 +++++++ > 2 files changed, 341 insertions(+), 43 deletions(-) > > diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h > index d711f3ec5938..5d5a8ce92a09 100644 > --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h > +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h > @@ -22,49 +22,55 @@ > in the ARM Namespace > */ > typedef enum ArmObjectID { > - EArmObjReserved, ///< 0 - Reserved > - EArmObjBootArchInfo, ///< 1 - Boot Architecture Info > - EArmObjCpuInfo, ///< 2 - CPU Info > - EArmObjPowerManagementProfileInfo, ///< 3 - Power Management Profile Info > - EArmObjGicCInfo, ///< 4 - GIC CPU Interface Info > - EArmObjGicDInfo, ///< 5 - GIC Distributor Info > - EArmObjGicMsiFrameInfo, ///< 6 - GIC MSI Frame Info > - EArmObjGicRedistributorInfo, ///< 7 - GIC Redistributor Info > - EArmObjGicItsInfo, ///< 8 - GIC ITS Info > - EArmObjSerialConsolePortInfo, ///< 9 - Serial Console Port Info > - EArmObjSerialDebugPortInfo, ///< 10 - Serial Debug Port Info > - EArmObjGenericTimerInfo, ///< 11 - Generic Timer Info > - EArmObjPlatformGTBlockInfo, ///< 12 - Platform GT Block Info > - EArmObjGTBlockTimerFrameInfo, ///< 13 - Generic Timer Block Frame Info > - EArmObjPlatformGenericWatchdogInfo, ///< 14 - Platform Generic Watchdog > - EArmObjPciConfigSpaceInfo, ///< 15 - PCI Configuration Space Info > - EArmObjHypervisorVendorIdentity, ///< 16 - Hypervisor Vendor Id > - EArmObjFixedFeatureFlags, ///< 17 - Fixed feature flags for FADT > - EArmObjItsGroup, ///< 18 - ITS Group > - EArmObjNamedComponent, ///< 19 - Named Component > - EArmObjRootComplex, ///< 20 - Root Complex > - EArmObjSmmuV1SmmuV2, ///< 21 - SMMUv1 or SMMUv2 > - EArmObjSmmuV3, ///< 22 - SMMUv3 > - EArmObjPmcg, ///< 23 - PMCG > - EArmObjGicItsIdentifierArray, ///< 24 - GIC ITS Identifier Array > - EArmObjIdMappingArray, ///< 25 - ID Mapping Array > - EArmObjSmmuInterruptArray, ///< 26 - SMMU Interrupt Array > - EArmObjProcHierarchyInfo, ///< 27 - Processor Hierarchy Info > - EArmObjCacheInfo, ///< 28 - Cache Info > - EArmObjReserved29, ///< 29 - Reserved > - EArmObjCmRef, ///< 30 - CM Object Reference > - EArmObjMemoryAffinityInfo, ///< 31 - Memory Affinity Info > - EArmObjDeviceHandleAcpi, ///< 32 - Device Handle Acpi > - EArmObjDeviceHandlePci, ///< 33 - Device Handle Pci > - EArmObjGenericInitiatorAffinityInfo, ///< 34 - Generic Initiator Affinity > - EArmObjSerialPortInfo, ///< 35 - Generic Serial Port Info > - EArmObjCmn600Info, ///< 36 - CMN-600 Info > - EArmObjLpiInfo, ///< 37 - Lpi Info > - EArmObjPciAddressMapInfo, ///< 38 - Pci Address Map Info > - EArmObjPciInterruptMapInfo, ///< 39 - Pci Interrupt Map Info > - EArmObjRmr, ///< 40 - Reserved Memory Range Node > - EArmObjMemoryRangeDescriptor, ///< 41 - Memory Range Descriptor > - EArmObjCpcInfo, ///< 42 - Continuous Performance Control Info > + EArmObjReserved, ///< 0 - Reserved > + EArmObjBootArchInfo, ///< 1 - Boot Architecture Info > + EArmObjCpuInfo, ///< 2 - CPU Info > + EArmObjPowerManagementProfileInfo, ///< 3 - Power Management Profile Info > + EArmObjGicCInfo, ///< 4 - GIC CPU Interface Info > + EArmObjGicDInfo, ///< 5 - GIC Distributor Info > + EArmObjGicMsiFrameInfo, ///< 6 - GIC MSI Frame Info > + EArmObjGicRedistributorInfo, ///< 7 - GIC Redistributor Info > + EArmObjGicItsInfo, ///< 8 - GIC ITS Info > + EArmObjSerialConsolePortInfo, ///< 9 - Serial Console Port Info > + EArmObjSerialDebugPortInfo, ///< 10 - Serial Debug Port Info > + EArmObjGenericTimerInfo, ///< 11 - Generic Timer Info > + EArmObjPlatformGTBlockInfo, ///< 12 - Platform GT Block Info > + EArmObjGTBlockTimerFrameInfo, ///< 13 - Generic Timer Block Frame Info > + EArmObjPlatformGenericWatchdogInfo, ///< 14 - Platform Generic Watchdog > + EArmObjPciConfigSpaceInfo, ///< 15 - PCI Configuration Space Info > + EArmObjHypervisorVendorIdentity, ///< 16 - Hypervisor Vendor Id > + EArmObjFixedFeatureFlags, ///< 17 - Fixed feature flags for FADT > + EArmObjItsGroup, ///< 18 - ITS Group > + EArmObjNamedComponent, ///< 19 - Named Component > + EArmObjRootComplex, ///< 20 - Root Complex > + EArmObjSmmuV1SmmuV2, ///< 21 - SMMUv1 or SMMUv2 > + EArmObjSmmuV3, ///< 22 - SMMUv3 > + EArmObjPmcg, ///< 23 - PMCG > + EArmObjGicItsIdentifierArray, ///< 24 - GIC ITS Identifier Array > + EArmObjIdMappingArray, ///< 25 - ID Mapping Array > + EArmObjSmmuInterruptArray, ///< 26 - SMMU Interrupt Array > + EArmObjProcHierarchyInfo, ///< 27 - Processor Hierarchy Info > + EArmObjCacheInfo, ///< 28 - Cache Info > + EArmObjReserved29, ///< 29 - Reserved > + EArmObjCmRef, ///< 30 - CM Object Reference > + EArmObjMemoryAffinityInfo, ///< 31 - Memory Affinity Info > + EArmObjDeviceHandleAcpi, ///< 32 - Device Handle Acpi > + EArmObjDeviceHandlePci, ///< 33 - Device Handle Pci > + EArmObjGenericInitiatorAffinityInfo, ///< 34 - Generic Initiator Affinity > + EArmObjSerialPortInfo, ///< 35 - Generic Serial Port Info > + EArmObjCmn600Info, ///< 36 - CMN-600 Info > + EArmObjLpiInfo, ///< 37 - Lpi Info > + EArmObjPciAddressMapInfo, ///< 38 - Pci Address Map Info > + EArmObjPciInterruptMapInfo, ///< 39 - Pci Interrupt Map Info > + EArmObjRmr, ///< 40 - Reserved Memory Range Node > + EArmObjMemoryRangeDescriptor, ///< 41 - Memory Range Descriptor > + EArmObjCpcInfo, ///< 42 - Continuous Performance Control Info > + EArmObjPccSubspaceType0Info, ///< 43 - Pcc Subspace Type 0 Info > + EArmObjPccSubspaceType1Info, ///< 44 - Pcc Subspace Type 2 Info > + EArmObjPccSubspaceType2Info, ///< 45 - Pcc Subspace Type 2 Info > + EArmObjPccSubspaceType3Info, ///< 46 - Pcc Subspace Type 3 Info > + EArmObjPccSubspaceType4Info, ///< 47 - Pcc Subspace Type 4 Info > + EArmObjPccSubspaceType5Info, ///< 48 - Pcc Subspace Type 5 Info > EArmObjMax > } EARM_OBJECT_ID; > > @@ -1095,6 +1101,191 @@ typedef struct CmArmRmrDescriptor { > */ > typedef AML_CPC_INFO CM_ARM_CPC_INFO; > > +/** A structure that describes a > + PCC Mailbox Register. > +*/ > +typedef struct PccMailboxRegisterInfo { > + /// GAS describing the Register. > + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE Register; > + > + /** Mask of bits to preserve when writing. > + > + This mask is also used for registers the Register is only read [SAMI] I think the above line should be This mask is also used for registers. The Register is only read [/SAMI] > + and there is no write mask required. E.g.: > + - Error Status mask (Cf. PCC Subspace types 3/4/5). > + - Command Complete Check mask (Cf. PCC Subspace types 3/4/5). > + */ > + UINT64 PreserveMask; > + > + /// Mask of bits to set when writing. > + UINT64 WriteMask; > +} PCC_MAILBOX_REGISTER_INFO; > + > +/** A structure that describes the > + PCC Subspace CHannel Timings. > +*/ > +typedef struct PccSubspaceChannelTimingInfo { > + /// Expected latency to process a command, in microseconds. > + UINT32 NominalLatency; > + > + /** Maximum number of periodic requests that the subspace channel can > + support, reported in commands per minute. 0 indicates no limitation. > + > + This field is ignored for the PCC Subspace type 5 (HW Registers based). > + */ > + UINT32 MaxPeriodicAccessRate; > + > + /** Minimum amount of time that OSPM must wait after the completion > + of a command before issuing the next command, in microseconds. > + */ > + UINT16 MinRequestTurnaroundTime; > +} PCC_SUBSPACE_CHANNEL_TIMING_INFO; > + > +/** A structure that describes a > + Generic PCC Subspace (Type 0). > +*/ > +typedef struct CmArmPccSubspaceGenericInfo { > + /** Subspace Id. > + > + Cf. ACPI 6.4, s14.7 Referencing the PCC address space > + Cf. s14.1.2 Platform Communications Channel Subspace Structures > + The subspace ID of a PCC subspace is its index in the array of > + subspace structures, starting with subspace 0. > + > + At most 256 subspaces are supported. > + */ > + UINT8 SubspaceId; > + > + /// Table type (or subspace). > + UINT8 Type; > + > + /// Base address of the shared memory range. > + /// This field is ignored for the PCC Subspace type 5 (HW Registers based). > + UINT64 BaseAddress; > + > + /// Address length. > + UINT64 AddressLength; > + > + /// Doorbell Register. > + PCC_MAILBOX_REGISTER_INFO DoorbellReg; > + > + /// Mailbox Timings. > + PCC_SUBSPACE_CHANNEL_TIMING_INFO ChannelTiming; > +} PCC_SUBSPACE_GENERIC_INFO; > + > +/** A structure that describes a > + PCC Subspace of type 0 (Generic). > + > + ID: EArmObjPccSubspaceType0Info > +*/ > +typedef PCC_SUBSPACE_GENERIC_INFO CM_ARM_PCC_SUBSPACE_TYPE0_INFO; > + > +/** A structure that describes a > + PCC Subspace of type 1 (HW-Reduced). > + > + ID: EArmObjPccSubspaceType1Info > +*/ > +typedef struct CmArmPccSubspaceType1Info { > + /** Generic Pcc information. > + > + The Subspace of Type0 contains information that can be re-used > + in other Subspace types. > + */ > + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; > + > + /// Platform Interrupt. > + CM_ARM_GENERIC_INTERRUPT PlatIrq; > +} CM_ARM_PCC_SUBSPACE_TYPE1_INFO; > + > +/** A structure that describes a > + PCC Subspace of type 2 (HW-Reduced). > + > + ID: EArmObjPccSubspaceType2Info > +*/ > +typedef struct CmArmPccSubspaceType2Info { > + /** Generic Pcc information. > + > + The Subspace of Type0 contains information that can be re-used > + in other Subspace types. > + */ > + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; > + > + /// Platform Interrupt. > + CM_ARM_GENERIC_INTERRUPT PlatIrq; > + > + /// Platform Interrupt Register. > + PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; > +} CM_ARM_PCC_SUBSPACE_TYPE2_INFO; > + > +/** A structure that describes a > + PCC Subspace of type 3 (Extended) > + > + ID: EArmObjPccSubspaceType3Info > +*/ > +typedef struct CmArmPccSubspaceType3Info { > + /** Generic Pcc information. > + > + The Subspace of Type0 contains information that can be re-used > + in other Subspace types. > + */ > + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; > + > + /// Platform Interrupt. > + CM_ARM_GENERIC_INTERRUPT PlatIrq; > + > + /// Platform Interrupt Register. > + PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg; > + > + /// Command Complete Check Register. > + /// The WriteMask field is not used. > + PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; > + > + /// Command Complete Update Register. > + PCC_MAILBOX_REGISTER_INFO CmdCompleteUpdateReg; > + > + /// Error Status Register. > + /// The WriteMask field is not used. > + PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; > +} CM_ARM_PCC_SUBSPACE_TYPE3_INFO; > + > +/** A structure that describes a > + PCC Subspace of type 4 (Extended) > + > + ID: EArmObjPccSubspaceType4Info > +*/ > +typedef CM_ARM_PCC_SUBSPACE_TYPE3_INFO CM_ARM_PCC_SUBSPACE_TYPE4_INFO; > + > +/** A structure that describes a > + PCC Subspace of type 5 (HW-Registers). > + > + ID: EArmObjPccSubspaceType5Info > +*/ > +typedef struct CmArmPccSubspaceType5Info { > + /** Generic Pcc information. > + > + The Subspace of Type0 contains information that can be re-used > + in other Subspace types. > + > + MaximumPeriodicAccessRate doesn't need to be populated for > + this structure. > + */ > + PCC_SUBSPACE_GENERIC_INFO GenericPccInfo; > + > + /// Version. > + UINT16 Version; > + > + /// Platform Interrupt. > + CM_ARM_GENERIC_INTERRUPT PlatIrq; > + > + /// Command Complete Check Register. > + /// The WriteMask field is not used. > + PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg; > + > + /// Error Status Register. > + /// The WriteMask field is not used. > + PCC_MAILBOX_REGISTER_INFO ErrorStatusReg; > +} CM_ARM_PCC_SUBSPACE_TYPE5_INFO; > + > #pragma pack() > > #endif // ARM_NAMESPACE_OBJECTS_H_ > diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c > index 2126beba8b9f..21d1f3f08b16 100644 > --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c > +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c > @@ -539,6 +539,101 @@ STATIC CONST CM_OBJ_PARSER CmArmCpcInfoParser[] = { > { "NominalFrequencyInteger", 4, "0x%lx", NULL }, > }; > > +/** A parser for the CM_ARM_MAILBOX_REGISTER_INFO struct. > +*/ > +STATIC CONST CM_OBJ_PARSER CmArmMailboxRegisterInfoParser[] = { > + { "Register", sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE), NULL, NULL, > + AcpiGenericAddressParser, ARRAY_SIZE (AcpiGenericAddressParser) }, > + { "PreserveMask", 8, "0x%llx", NULL }, > + { "WriteMask", 8, "0x%llx", NULL }, > +}; > + > +/** A parser for the CM_ARM_PCC_SUBSPACE_CHANNEL_TIMING_INFO struct. > +*/ > +STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceChannelTimingInfoParser[] = { > + { "NominalLatency", 4, "0x%x", NULL }, > + { "MaxPeriodicAccessRate", 4, "0x%x", NULL }, > + { "MinRequestTurnaroundTime", 2, "0x%x", NULL }, > +}; > + > +/** A parser for EArmObjPccSubspaceType0Info. > +*/ > +STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType0InfoParser[] = { > + { "SubspaceId", 1, "0x%x", NULL }, > + { "Type", 1, "0x%x", NULL }, > + { "BaseAddress", 8, "0x%llx", NULL }, > + { "AddressLength", 8, "0x%llx", NULL }, > + { "DoorbellReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO), > + NULL, NULL, CmArmMailboxRegisterInfoParser, > + ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, > + { "DoorbellReg", sizeof (CM_ARM_PCC_SUBSPACE_CHANNEL_TIMING_INFO), [SAMI] "DoorbellReg" should be changed to "ChannelTiming" above. > + NULL, NULL, CmArmPccSubspaceChannelTimingInfoParser, > + ARRAY_SIZE (CmArmPccSubspaceChannelTimingInfoParser) }, > +}; > + > +/** A parser for EArmObjPccSubspaceType1Info. > +*/ > +STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType1InfoParser[] = { > + { "GenericPccInfo", sizeof (CM_ARM_PCC_SUBSPACE_GENERIC_INFO), > + NULL, NULL, CmArmPccSubspaceType0InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, > + { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), > + NULL, NULL, CmArmGenericInterruptParser, > + ARRAY_SIZE (CmArmGenericInterruptParser) }, > +}; > + > +/** A parser for EArmObjPccSubspaceType2Info. > +*/ > +STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType2InfoParser[] = { > + { "GenericPccInfo", sizeof (CM_ARM_PCC_SUBSPACE_GENERIC_INFO), > + NULL, NULL, CmArmPccSubspaceType0InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, > + { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), NULL,NULL, > + CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) }, > + { "PlatIrqAckReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO), > + NULL, NULL, CmArmMailboxRegisterInfoParser, > + ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, > +}; > + > +/** A parser for EArmObjPccSubspaceType3Info or EArmObjPccSubspaceType4Info. > +*/ > +STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType34InfoParser[] = { > + { "GenericPccInfo", sizeof (CM_ARM_PCC_SUBSPACE_GENERIC_INFO), > + NULL, NULL, CmArmPccSubspaceType0InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, > + { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), NULL,NULL, > + CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) }, > + { "PlatIrqAckReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO), > + NULL, NULL, CmArmMailboxRegisterInfoParser, > + ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, > + { "CmdCompleteCheckReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO), > + NULL, NULL, CmArmMailboxRegisterInfoParser, > + ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, > + { "CmdCompleteUpdateReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO), > + NULL, NULL, CmArmMailboxRegisterInfoParser, > + ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, > + { "ErrorStatusReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO), > + NULL, NULL, CmArmMailboxRegisterInfoParser, > + ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, > +}; > + > +/** A parser for EArmObjPccSubspaceType5Info. > +*/ > +STATIC CONST CM_OBJ_PARSER CmArmPccSubspaceType5InfoParser[] = { > + { "GenericPccInfo", sizeof (CM_ARM_PCC_SUBSPACE_GENERIC_INFO), > + NULL, NULL, CmArmPccSubspaceType0InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, > + { "Version", 2, "0x%x",NULL }, > + { "PlatIrq", sizeof (CM_ARM_GENERIC_INTERRUPT), NULL, NULL, > + CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) }, > + { "CmdCompleteCheckReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO), > + NULL, NULL, CmArmMailboxRegisterInfoParser, > + ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, > + { "ErrorStatusReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO), > + NULL, NULL, CmArmMailboxRegisterInfoParser, > + ARRAY_SIZE (CmArmMailboxRegisterInfoParser) }, > +}; > + > /** A parser for Arm namespace objects. > */ > STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { > @@ -623,6 +718,18 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = { > ARRAY_SIZE (CmArmMemoryRangeDescriptorInfoParser) }, > { "EArmObjCpcInfo", CmArmCpcInfoParser, > ARRAY_SIZE (CmArmCpcInfoParser) }, > + { "EArmObjPccSubspaceType0Info", CmArmPccSubspaceType0InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) }, > + { "EArmObjPccSubspaceType1Info", CmArmPccSubspaceType1InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType1InfoParser) }, > + { "EArmObjPccSubspaceType2Info", CmArmPccSubspaceType2InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType2InfoParser) }, > + { "EArmObjPccSubspaceType3Info", CmArmPccSubspaceType34InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) }, > + { "EArmObjPccSubspaceType4Info", CmArmPccSubspaceType34InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) }, > + { "EArmObjPccSubspaceType5Info", CmArmPccSubspaceType5InfoParser, > + ARRAY_SIZE (CmArmPccSubspaceType5InfoParser) }, > { "EArmObjMax", NULL, 0 }, > }; > --------------0aMQ8tPT6aJooWi0ALrmLPgQ Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

Hi Pierre,

There are some minor updates that are required for this patch marked inline as [SAMI].

If you agree, I will make these changes before merging.

Regards,

Sami Mujawar

On 10/10/2022 10:20 am, Pierre.Gondois@arm.com wrote:
From: Pierre Gondois <pierr=
e.gondois@arm.com>

Introduce the following CmObj in the ArmNameSpaceObjects:
 - CM_ARM_MAILBOX_REGISTER_INFO
 - CM_ARM_PCC_SUBSPACE_CHANNEL_TIMING_INFO
 - CM_ARM_PCC_SUBSPACE_GENERIC_INFO
 - CM_ARM_PCC_SUBPSACE_TYPE0_INFO
 - CM_ARM_PCC_SUBPSACE_TYPE1_INFO
 - CM_ARM_PCC_SUBPSACE_TYPE2_INFO
 - CM_ARM_PCC_SUBPSACE_TYPE3_INFO
 - CM_ARM_PCC_SUBPSACE_TYPE4_INFO
 - CM_ARM_PCC_SUBPSACE_TYPE5_INFO

These objects allow to describe mailbox registers, pcc timings
and PCCT subspaces. They prepare the enablement of a PCCT generator.

Also add the CmObjParsers associated to each object.

Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
---
 .../Include/ArmNameSpaceObjects.h             | 277 +++++++++++++++---
 .../ConfigurationManagerObjectParser.c        | 107 +++++++
 2 files changed, 341 insertions(+), 43 deletions(-)

diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTables=
Pkg/Include/ArmNameSpaceObjects.h
index d711f3ec5938..5d5a8ce92a09 100644
--- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
+++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
@@ -22,49 +22,55 @@
     in the ARM Namespace
 */
 typedef enum ArmObjectID {
-  EArmObjReserved,                     ///<  0 - Reserved
-  EArmObjBootArchInfo,                 ///<  1 - Boot Architecture Info
-  EArmObjCpuInfo,                      ///<  2 - CPU Info
-  EArmObjPowerManagementProfileInfo,   ///<  3 - Power Management Profi=
le Info
-  EArmObjGicCInfo,                     ///<  4 - GIC CPU Interface Info
-  EArmObjGicDInfo,                     ///<  5 - GIC Distributor Info
-  EArmObjGicMsiFrameInfo,              ///<  6 - GIC MSI Frame Info
-  EArmObjGicRedistributorInfo,         ///<  7 - GIC Redistributor Info
-  EArmObjGicItsInfo,                   ///<  8 - GIC ITS Info
-  EArmObjSerialConsolePortInfo,        ///<  9 - Serial Console Port In=
fo
-  EArmObjSerialDebugPortInfo,          ///< 10 - Serial Debug Port Info
-  EArmObjGenericTimerInfo,             ///< 11 - Generic Timer Info
-  EArmObjPlatformGTBlockInfo,          ///< 12 - Platform GT Block Info
-  EArmObjGTBlockTimerFrameInfo,        ///< 13 - Generic Timer Block Fr=
ame Info
-  EArmObjPlatformGenericWatchdogInfo,  ///< 14 - Platform Generic Watch=
dog
-  EArmObjPciConfigSpaceInfo,           ///< 15 - PCI Configuration Spac=
e Info
-  EArmObjHypervisorVendorIdentity,     ///< 16 - Hypervisor Vendor Id
-  EArmObjFixedFeatureFlags,            ///< 17 - Fixed feature flags fo=
r FADT
-  EArmObjItsGroup,                     ///< 18 - ITS Group
-  EArmObjNamedComponent,               ///< 19 - Named Component
-  EArmObjRootComplex,                  ///< 20 - Root Complex
-  EArmObjSmmuV1SmmuV2,                 ///< 21 - SMMUv1 or SMMUv2
-  EArmObjSmmuV3,                       ///< 22 - SMMUv3
-  EArmObjPmcg,                         ///< 23 - PMCG
-  EArmObjGicItsIdentifierArray,        ///< 24 - GIC ITS Identifier Arr=
ay
-  EArmObjIdMappingArray,               ///< 25 - ID Mapping Array
-  EArmObjSmmuInterruptArray,           ///< 26 - SMMU Interrupt Array
-  EArmObjProcHierarchyInfo,            ///< 27 - Processor Hierarchy In=
fo
-  EArmObjCacheInfo,                    ///< 28 - Cache Info
-  EArmObjReserved29,                   ///< 29 - Reserved
-  EArmObjCmRef,                        ///< 30 - CM Object Reference
-  EArmObjMemoryAffinityInfo,           ///< 31 - Memory Affinity Info
-  EArmObjDeviceHandleAcpi,             ///< 32 - Device Handle Acpi
-  EArmObjDeviceHandlePci,              ///< 33 - Device Handle Pci
-  EArmObjGenericInitiatorAffinityInfo, ///< 34 - Generic Initiator Affi=
nity
-  EArmObjSerialPortInfo,               ///< 35 - Generic Serial Port In=
fo
-  EArmObjCmn600Info,                   ///< 36 - CMN-600 Info
-  EArmObjLpiInfo,                      ///< 37 - Lpi Info
-  EArmObjPciAddressMapInfo,            ///< 38 - Pci Address Map Info
-  EArmObjPciInterruptMapInfo,          ///< 39 - Pci Interrupt Map Info
-  EArmObjRmr,                          ///< 40 - Reserved Memory Range =
Node
-  EArmObjMemoryRangeDescriptor,        ///< 41 - Memory Range Descripto=
r
-  EArmObjCpcInfo,                      ///< 42 - Continuous Performance=
 Control Info
+  EArmObjReserved,                                             ///<  0 =
- Reserved
+  EArmObjBootArchInfo,                                         ///<  1 =
- Boot Architecture Info
+  EArmObjCpuInfo,                                              ///<  2 =
- CPU Info
+  EArmObjPowerManagementProfileInfo,                           ///<  3 =
- Power Management Profile Info
+  EArmObjGicCInfo,                                             ///<  4 =
- GIC CPU Interface Info
+  EArmObjGicDInfo,                                             ///<  5 =
- GIC Distributor Info
+  EArmObjGicMsiFrameInfo,                                      ///<  6 =
- GIC MSI Frame Info
+  EArmObjGicRedistributorInfo,                                 ///<  7 =
- GIC Redistributor Info
+  EArmObjGicItsInfo,                                           ///<  8 =
- GIC ITS Info
+  EArmObjSerialConsolePortInfo,                                ///<  9 =
- Serial Console Port Info
+  EArmObjSerialDebugPortInfo,                                  ///< 10 =
- Serial Debug Port Info
+  EArmObjGenericTimerInfo,                                     ///< 11 =
- Generic Timer Info
+  EArmObjPlatformGTBlockInfo,                                  ///< 12 =
- Platform GT Block Info
+  EArmObjGTBlockTimerFrameInfo,                                ///< 13 =
- Generic Timer Block Frame Info
+  EArmObjPlatformGenericWatchdogInfo,                          ///< 14 =
- Platform Generic Watchdog
+  EArmObjPciConfigSpaceInfo,                                   ///< 15 =
- PCI Configuration Space Info
+  EArmObjHypervisorVendorIdentity,                             ///< 16 =
- Hypervisor Vendor Id
+  EArmObjFixedFeatureFlags,                                    ///< 17 =
- Fixed feature flags for FADT
+  EArmObjItsGroup,                                             ///< 18 =
- ITS Group
+  EArmObjNamedComponent,                                       ///< 19 =
- Named Component
+  EArmObjRootComplex,                                          ///< 20 =
- Root Complex
+  EArmObjSmmuV1SmmuV2,                                         ///< 21 =
- SMMUv1 or SMMUv2
+  EArmObjSmmuV3,                                               ///< 22 =
- SMMUv3
+  EArmObjPmcg,                                                 ///< 23 =
- PMCG
+  EArmObjGicItsIdentifierArray,                                ///< 24 =
- GIC ITS Identifier Array
+  EArmObjIdMappingArray,                                       ///< 25 =
- ID Mapping Array
+  EArmObjSmmuInterruptArray,                                   ///< 26 =
- SMMU Interrupt Array
+  EArmObjProcHierarchyInfo,                                    ///< 27 =
- Processor Hierarchy Info
+  EArmObjCacheInfo,                                            ///< 28 =
- Cache Info
+  EArmObjReserved29,                                           ///< 29 =
- Reserved
+  EArmObjCmRef,                                                ///< 30 =
- CM Object Reference
+  EArmObjMemoryAffinityInfo,                                   ///< 31 =
- Memory Affinity Info
+  EArmObjDeviceHandleAcpi,                                     ///< 32 =
- Device Handle Acpi
+  EArmObjDeviceHandlePci,                                      ///< 33 =
- Device Handle Pci
+  EArmObjGenericInitiatorAffinityInfo,                         ///< 34 =
- Generic Initiator Affinity
+  EArmObjSerialPortInfo,                                       ///< 35 =
- Generic Serial Port Info
+  EArmObjCmn600Info,                                           ///< 36 =
- CMN-600 Info
+  EArmObjLpiInfo,                                              ///< 37 =
- Lpi Info
+  EArmObjPciAddressMapInfo,                                    ///< 38 =
- Pci Address Map Info
+  EArmObjPciInterruptMapInfo,                                  ///< 39 =
- Pci Interrupt Map Info
+  EArmObjRmr,                                                  ///< 40 =
- Reserved Memory Range Node
+  EArmObjMemoryRangeDescriptor,                                ///< 41 =
- Memory Range Descriptor
+  EArmObjCpcInfo,                                              ///< 42 =
- Continuous Performance Control Info
+  EArmObjPccSubspaceType0Info,                                 ///< 43 =
- Pcc Subspace Type 0 Info
+  EArmObjPccSubspaceType1Info,                                 ///< 44 =
- Pcc Subspace Type 2 Info
+  EArmObjPccSubspaceType2Info,                                 ///< 45 =
- Pcc Subspace Type 2 Info
+  EArmObjPccSubspaceType3Info,                                 ///< 46 =
- Pcc Subspace Type 3 Info
+  EArmObjPccSubspaceType4Info,                                 ///< 47 =
- Pcc Subspace Type 4 Info
+  EArmObjPccSubspaceType5Info,                                 ///< 48 =
- Pcc Subspace Type 5 Info
   EArmObjMax
 } EARM_OBJECT_ID;
=20
@@ -1095,6 +1101,191 @@ typedef struct CmArmRmrDescriptor {
 */
 typedef AML_CPC_INFO CM_ARM_CPC_INFO;
=20
+/** A structure that describes a
+    PCC Mailbox Register.
+*/
+typedef struct PccMailboxRegisterInfo {
+  /// GAS describing the Register.
+  EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    Register;
+
+  /** Mask of bits to preserve when writing.
+
+    This mask is also used for registers the Register is only read

[SAMI] I think the above line should be

=
This mask is also used for registers. The Register is only read

[/SAMI]

+    and there is no write mask required. E.g.:
+    - Error Status mask (Cf. PCC Subspace types 3/4/5).
+    - Command Complete Check mask (Cf. PCC Subspace types 3/4/5).
+  */
+  UINT64    PreserveMask;
+
+  /// Mask of bits to set when writing.
+  UINT64    WriteMask;
+} PCC_MAILBOX_REGISTER_INFO;
+
+/** A structure that describes the
+    PCC Subspace CHannel Timings.
+*/
+typedef struct PccSubspaceChannelTimingInfo {
+  /// Expected latency to process a command, in microseconds.
+  UINT32    NominalLatency;
+
+  /** Maximum number of periodic requests that the subspace channel can
+      support, reported in commands per minute. 0 indicates no limitation.
+
+    This field is ignored for the PCC Subspace type 5 (HW Registers based)=
.
+  */
+  UINT32    MaxPeriodicAccessRate;
+
+  /** Minimum amount of time that OSPM must wait after the completion
+      of a command before issuing the next command, in microseconds.
+  */
+  UINT16    MinRequestTurnaroundTime;
+} PCC_SUBSPACE_CHANNEL_TIMING_INFO;
+
+/** A structure that describes a
+    Generic PCC Subspace (Type 0).
+*/
+typedef struct CmArmPccSubspaceGenericInfo {
+  /** Subspace Id.
+
+  Cf. ACPI 6.4, s14.7 Referencing the PCC address space
+  Cf. s14.1.2 Platform Communications Channel Subspace Structures
+      The subspace ID of a PCC subspace is its index in the array of
+      subspace structures, starting with subspace 0.
+
+  At most 256 subspaces are supported.
+  */
+  UINT8                               SubspaceId;
+
+  /// Table type (or subspace).
+  UINT8                               Type;
+
+  /// Base address of the shared memory range.
+  /// This field is ignored for the PCC Subspace type 5 (HW Registers base=
d).
+  UINT64                              BaseAddress;
+
+  /// Address length.
+  UINT64                              AddressLength;
+
+  /// Doorbell Register.
+  PCC_MAILBOX_REGISTER_INFO           DoorbellReg;
+
+  /// Mailbox Timings.
+  PCC_SUBSPACE_CHANNEL_TIMING_INFO    ChannelTiming;
+} PCC_SUBSPACE_GENERIC_INFO;
+
+/** A structure that describes a
+    PCC Subspace of type 0 (Generic).
+
+    ID: EArmObjPccSubspaceType0Info
+*/
+typedef PCC_SUBSPACE_GENERIC_INFO CM_ARM_PCC_SUBSPACE_TYPE0_INFO;
+
+/** A structure that describes a
+    PCC Subspace of type 1 (HW-Reduced).
+
+    ID: EArmObjPccSubspaceType1Info
+*/
+typedef struct CmArmPccSubspaceType1Info {
+  /** Generic Pcc information.
+
+    The Subspace of Type0 contains information that can be re-used
+    in other Subspace types.
+  */
+  PCC_SUBSPACE_GENERIC_INFO    GenericPccInfo;
+
+  /// Platform Interrupt.
+  CM_ARM_GENERIC_INTERRUPT     PlatIrq;
+} CM_ARM_PCC_SUBSPACE_TYPE1_INFO;
+
+/** A structure that describes a
+    PCC Subspace of type 2 (HW-Reduced).
+
+    ID: EArmObjPccSubspaceType2Info
+*/
+typedef struct CmArmPccSubspaceType2Info {
+  /** Generic Pcc information.
+
+    The Subspace of Type0 contains information that can be re-used
+    in other Subspace types.
+  */
+  PCC_SUBSPACE_GENERIC_INFO    GenericPccInfo;
+
+  /// Platform Interrupt.
+  CM_ARM_GENERIC_INTERRUPT     PlatIrq;
+
+  /// Platform Interrupt Register.
+  PCC_MAILBOX_REGISTER_INFO    PlatIrqAckReg;
+} CM_ARM_PCC_SUBSPACE_TYPE2_INFO;
+
+/** A structure that describes a
+    PCC Subspace of type 3 (Extended)
+
+    ID: EArmObjPccSubspaceType3Info
+*/
+typedef struct CmArmPccSubspaceType3Info {
+  /** Generic Pcc information.
+
+    The Subspace of Type0 contains information that can be re-used
+    in other Subspace types.
+  */
+  PCC_SUBSPACE_GENERIC_INFO    GenericPccInfo;
+
+  /// Platform Interrupt.
+  CM_ARM_GENERIC_INTERRUPT     PlatIrq;
+
+  /// Platform Interrupt Register.
+  PCC_MAILBOX_REGISTER_INFO    PlatIrqAckReg;
+
+  /// Command Complete Check Register.
+  /// The WriteMask field is not used.
+  PCC_MAILBOX_REGISTER_INFO    CmdCompleteCheckReg;
+
+  /// Command Complete Update Register.
+  PCC_MAILBOX_REGISTER_INFO    CmdCompleteUpdateReg;
+
+  /// Error Status Register.
+  /// The WriteMask field is not used.
+  PCC_MAILBOX_REGISTER_INFO    ErrorStatusReg;
+} CM_ARM_PCC_SUBSPACE_TYPE3_INFO;
+
+/** A structure that describes a
+    PCC Subspace of type 4 (Extended)
+
+    ID: EArmObjPccSubspaceType4Info
+*/
+typedef CM_ARM_PCC_SUBSPACE_TYPE3_INFO CM_ARM_PCC_SUBSPACE_TYPE4_INFO;
+
+/** A structure that describes a
+    PCC Subspace of type 5 (HW-Registers).
+
+    ID: EArmObjPccSubspaceType5Info
+*/
+typedef struct CmArmPccSubspaceType5Info {
+  /** Generic Pcc information.
+
+    The Subspace of Type0 contains information that can be re-used
+    in other Subspace types.
+
+    MaximumPeriodicAccessRate doesn't need to be populated for
+    this structure.
+  */
+  PCC_SUBSPACE_GENERIC_INFO    GenericPccInfo;
+
+  /// Version.
+  UINT16                       Version;
+
+  /// Platform Interrupt.
+  CM_ARM_GENERIC_INTERRUPT     PlatIrq;
+
+  /// Command Complete Check Register.
+  /// The WriteMask field is not used.
+  PCC_MAILBOX_REGISTER_INFO    CmdCompleteCheckReg;
+
+  /// Error Status Register.
+  /// The WriteMask field is not used.
+  PCC_MAILBOX_REGISTER_INFO    ErrorStatusReg;
+} CM_ARM_PCC_SUBSPACE_TYPE5_INFO;
+
 #pragma pack()
=20
 #endif // ARM_NAMESPACE_OBJECTS_H_
diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationMa=
nagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/Config=
urationManagerObjectParser.c
index 2126beba8b9f..21d1f3f08b16 100644
--- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerOb=
jectParser.c
+++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerOb=
jectParser.c
@@ -539,6 +539,101 @@ STATIC CONST CM_OBJ_PARSER  CmArmCpcInfoParser[] =3D =
{
   { "NominalFrequencyInteger",               4,                 =
                              "0x%lx", NULL },
 };
=20
+/** A parser for the CM_ARM_MAILBOX_REGISTER_INFO struct.
+*/
+STATIC CONST CM_OBJ_PARSER  CmArmMailboxRegisterInfoParser[] =3D {
+  { "Register",     sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTU=
RE), NULL,     NULL,
+    AcpiGenericAddressParser, ARRAY_SIZE (AcpiGenericAddressParser) },
+  { "PreserveMask", 8,                                          =
     "0x%llx", NULL },
+  { "WriteMask",    8,                                          =
     "0x%llx", NULL },
+};
+
+/** A parser for the CM_ARM_PCC_SUBSPACE_CHANNEL_TIMING_INFO struct.
+*/
+STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceChannelTimingInfoParser[] =3D =
{
+  { "NominalLatency",           4, "0x%x", NULL },
+  { "MaxPeriodicAccessRate",    4, "0x%x", NULL },
+  { "MinRequestTurnaroundTime", 2, "0x%x", NULL },
+};
+
+/** A parser for EArmObjPccSubspaceType0Info.
+*/
+STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType0InfoParser[] =3D {
+  { "SubspaceId",    1,                                         =
       "0x%x",   NULL },
+  { "Type",          1,                                         =
       "0x%x",   NULL },
+  { "BaseAddress",   8,                                         =
       "0x%llx", NULL },
+  { "AddressLength", 8,                                         =
       "0x%llx", NULL },
+  { "DoorbellReg",   sizeof (CM_ARM_MAILBOX_REGISTER_INFO),
+    NULL, NULL, CmArmMailboxRegisterInfoParser,
+    ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
+  { "DoorbellReg",   sizeof (CM_ARM_PCC_SUBSPACE_CHANNEL_TIMING_=
INFO),
[SAMI] "DoorbellReg" should be changed to "ChannelTiming= " above.
+    NULL, NULL, CmArmPccSubspaceChannelTimingInfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceChannelTimingInfoParser) },
+};
+
+/** A parser for EArmObjPccSubspaceType1Info.
+*/
+STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType1InfoParser[] =3D {
+  { "GenericPccInfo", sizeof (CM_ARM_PCC_SUBSPACE_GENERIC_INFO),
+    NULL, NULL, CmArmPccSubspaceType0InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
+  { "PlatIrq",        sizeof (CM_ARM_GENERIC_INTERRUPT),
+    NULL, NULL, CmArmGenericInterruptParser,
+    ARRAY_SIZE (CmArmGenericInterruptParser) },
+};
+
+/** A parser for EArmObjPccSubspaceType2Info.
+*/
+STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType2InfoParser[] =3D {
+  { "GenericPccInfo", sizeof (CM_ARM_PCC_SUBSPACE_GENERIC_INFO),
+    NULL, NULL, CmArmPccSubspaceType0InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
+  { "PlatIrq",        sizeof (CM_ARM_GENERIC_INTERRUPT),        =
NULL,NULL,
+    CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) =
},
+  { "PlatIrqAckReg",  sizeof (CM_ARM_MAILBOX_REGISTER_INFO),
+    NULL, NULL, CmArmMailboxRegisterInfoParser,
+    ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
+};
+
+/** A parser for EArmObjPccSubspaceType3Info or EArmObjPccSubspaceType4Inf=
o.
+*/
+STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType34InfoParser[] =3D {
+  { "GenericPccInfo",       sizeof (CM_ARM_PCC_SUBSPACE_GENERIC_=
INFO),
+    NULL, NULL, CmArmPccSubspaceType0InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
+  { "PlatIrq",              sizeof (CM_ARM_GENERIC_INTERRUPT),  =
      NULL,NULL,
+    CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) =
},
+  { "PlatIrqAckReg",        sizeof (CM_ARM_MAILBOX_REGISTER_INFO=
),
+    NULL, NULL, CmArmMailboxRegisterInfoParser,
+    ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
+  { "CmdCompleteCheckReg",  sizeof (CM_ARM_MAILBOX_REGISTER_INFO=
),
+    NULL, NULL, CmArmMailboxRegisterInfoParser,
+    ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
+  { "CmdCompleteUpdateReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO=
),
+    NULL, NULL, CmArmMailboxRegisterInfoParser,
+    ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
+  { "ErrorStatusReg",       sizeof (CM_ARM_MAILBOX_REGISTER_INFO=
),
+    NULL, NULL, CmArmMailboxRegisterInfoParser,
+    ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
+};
+
+/** A parser for EArmObjPccSubspaceType5Info.
+*/
+STATIC CONST CM_OBJ_PARSER  CmArmPccSubspaceType5InfoParser[] =3D {
+  { "GenericPccInfo",      sizeof (CM_ARM_PCC_SUBSPACE_GENERIC_I=
NFO),
+    NULL, NULL, CmArmPccSubspaceType0InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
+  { "Version",             2,                                   =
     "0x%x",NULL },
+  { "PlatIrq",             sizeof (CM_ARM_GENERIC_INTERRUPT),   =
     NULL,  NULL,
+    CmArmGenericInterruptParser, ARRAY_SIZE (CmArmGenericInterruptParser) =
},
+  { "CmdCompleteCheckReg", sizeof (CM_ARM_MAILBOX_REGISTER_INFO)=
,
+    NULL, NULL, CmArmMailboxRegisterInfoParser,
+    ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
+  { "ErrorStatusReg",      sizeof (CM_ARM_MAILBOX_REGISTER_INFO)=
,
+    NULL, NULL, CmArmMailboxRegisterInfoParser,
+    ARRAY_SIZE (CmArmMailboxRegisterInfoParser) },
+};
+
 /** A parser for Arm namespace objects.
 */
 STATIC CONST CM_OBJ_PARSER_ARRAY  ArmNamespaceObjectParser[] =3D {
@@ -623,6 +718,18 @@ STATIC CONST CM_OBJ_PARSER_ARRAY  ArmNamespaceObjectPa=
rser[] =3D {
     ARRAY_SIZE (CmArmMemoryRangeDescriptorInfoParser) },
   { "EArmObjCpcInfo",                      CmArmCpcInfoParser,
     ARRAY_SIZE (CmArmCpcInfoParser) },
+  { "EArmObjPccSubspaceType0Info",         CmArmPccSubspaceType0=
InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType0InfoParser) },
+  { "EArmObjPccSubspaceType1Info",         CmArmPccSubspaceType1=
InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType1InfoParser) },
+  { "EArmObjPccSubspaceType2Info",         CmArmPccSubspaceType2=
InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType2InfoParser) },
+  { "EArmObjPccSubspaceType3Info",         CmArmPccSubspaceType3=
4InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) },
+  { "EArmObjPccSubspaceType4Info",         CmArmPccSubspaceType3=
4InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType34InfoParser) },
+  { "EArmObjPccSubspaceType5Info",         CmArmPccSubspaceType5=
InfoParser,
+    ARRAY_SIZE (CmArmPccSubspaceType5InfoParser) },
   { "EArmObjMax",                          NULL,                =
                  0                                },
 };
=20
--------------0aMQ8tPT6aJooWi0ALrmLPgQ--