Bugzilla: 3458 - Add support IORT Rev E.b specification updates
          (https://bugzilla.tianocore.org/show_bug.cgi?id=3458)

The IO Remapping Table, Platform Design Document, Revision E.b,
Feb 2021 (https://developer.arm.com/documentation/den0049/)
introduces the following updates, collectively including the
updates and errata fixes to Rev E and Rev E.a:
  - increments the IORT table revision to 3.
  - updates the node definition to add an 'Identifier' field.
  - adds definition of node type 6 - Reserved Memory Range node.
  - adds definition for Memory Range Descriptors.
  - adds flag to indicate PRI support for root complexes.
  - adds flag to indicate if the root complex supports forwarding
    of PASID information on translated transactions to the SMMU.

Therefore, update the Arm namespace objects to:
  - add Identifier field to IORT nodes.
  - introduce enums to represent RMR nodes and Memory Range
    descriptors.
  - add definition of node type 6 - Reserved Memory Range node.
  - add definition for Memory Range Descriptors.

Signed-off-by: Sami Mujawar <sami.muja...@arm.com>
Reviewed-by: Pierre Gondois <pierre.gond...@arm.com>
---

Notes:
    v2:
     - No code change since v1. Re-sending with v2 series.    [SAMI]
    
    v3:
     - Move Identifier field before Flags field in            [PIERRE]
       CM_ARM_RMR_NODE.
     - Add description for CM_ARM_MEMORY_RANGE_DESCRIPTOR     [PIERRE]
       field.
     - Updated based on review feedback.                      [SAMI]
       Ref: https://edk2.groups.io/g/devel/topic/83600723#76659

 DynamicTablesPkg/Include/ArmNameSpaceObjects.h | 60 ++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h 
b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
index 
f19c9c70666970bb70b6aa09f064bb10a9a67112..9fb08eef4aa4b4b51c5c7946a08451219e89d622
 100644
--- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
+++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
@@ -59,6 +59,8 @@ typedef enum ArmObjectID {
   EArmObjSerialPortInfo,               ///< 35 - Generic Serial Port Info
   EArmObjCmn600Info,                   ///< 36 - CMN-600 Info
   EArmObjLpiInfo,                      ///< 37 - Lpi Info
+  EArmObjRmr,                          ///< 38 - Reserved Memory Range Node
+  EArmObjMemoryRangeDescriptor,        ///< 39 - Memory Range Descriptor
   EArmObjMax
 } EARM_OBJECT_ID;
 
@@ -467,6 +469,9 @@ typedef struct CmArmItsGroupNode {
   UINT32            ItsIdCount;
   /// Reference token for the ITS identifier array
   CM_OBJECT_TOKEN   ItsIdToken;
+
+  /// Unique identifier for this node.
+  UINT32            Identifier;
 } CM_ARM_ITS_GROUP_NODE;
 
 /** A structure that describes the
@@ -498,6 +503,9 @@ typedef struct CmArmNamedComponentNode {
       the entry in the namespace for this object.
   */
   CHAR8*            ObjectName;
+
+  /// Unique identifier for this node.
+  UINT32            Identifier;
 } CM_ARM_NAMED_COMPONENT_NODE;
 
 /** A structure that describes the
@@ -526,6 +534,9 @@ typedef struct CmArmRootComplexNode {
   UINT32            PciSegmentNumber;
   /// Memory address size limit
   UINT8             MemoryAddressSize;
+
+  /// Unique identifier for this node.
+  UINT32            Identifier;
 } CM_ARM_ROOT_COMPLEX_NODE;
 
 /** A structure that describes the
@@ -568,6 +579,9 @@ typedef struct CmArmSmmuV1SmmuV2Node {
   UINT32            SMMU_NSgCfgIrpt;
   /// SMMU_NSgCfgIrpt interrupt flags
   UINT32            SMMU_NSgCfgIrptFlags;
+
+  /// Unique identifier for this node.
+  UINT32            Identifier;
 } CM_ARM_SMMUV1_SMMUV2_NODE;
 
 /** A structure that describes the
@@ -604,6 +618,9 @@ typedef struct CmArmSmmuV3Node {
   UINT32            ProximityDomain;
   /// Index into the array of ID mapping
   UINT32            DeviceIdMappingIndex;
+
+  /// Unique identifier for this node.
+  UINT32            Identifier;
 } CM_ARM_SMMUV3_NODE;
 
 /** A structure that describes the
@@ -628,6 +645,9 @@ typedef struct CmArmPmcgNode {
 
   /// Reference token for the IORT node associated with this node
   CM_OBJECT_TOKEN   ReferenceToken;
+
+  /// Unique identifier for this node.
+  UINT32            Identifier;
 } CM_ARM_PMCG_NODE;
 
 /** A structure that describes the
@@ -946,6 +966,46 @@ typedef struct CmArmLpiInfo {
   CHAR8                                   StateName[16];
 } CM_ARM_LPI_INFO;
 
+/** A structure that describes the
+    RMR node for the Platform.
+
+    ID: EArmObjRmr
+*/
+typedef struct CmArmRmrNode {
+  /// An unique token used to identify this object
+  CM_OBJECT_TOKEN   Token;
+  /// Number of ID mappings
+  UINT32            IdMappingCount;
+  /// Reference token for the ID mapping array
+  CM_OBJECT_TOKEN   IdMappingToken;
+
+  /// Unique identifier for this node.
+  UINT32            Identifier;
+
+  /// Reserved Memory Range flags.
+  UINT32            Flags;
+
+  /// Memory range descriptor count.
+  UINT32            MemRangeDescCount;
+  /// Reference token for the Memory Range descriptor array
+  CM_OBJECT_TOKEN   MemRangeDescToken;
+} CM_ARM_RMR_NODE;
+
+/** A structure that describes the
+    Memory Range descriptor.
+
+    ID: EArmObjMemoryRangeDescriptor
+*/
+typedef struct CmArmRmrDescriptor {
+  /// Base address of Reserved Memory Range,
+  /// aligned to a page size of 64K.
+  UINT64            BaseAddress;
+
+  /// Length of the Reserved Memory range.
+  /// Must be a multiple of the page size of 64K.
+  UINT64            Length;
+} CM_ARM_MEMORY_RANGE_DESCRIPTOR;
+
 #pragma pack()
 
 #endif // ARM_NAMESPACE_OBJECTS_H_
-- 
'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#83544): https://edk2.groups.io/g/devel/message/83544
Mute This Topic: https://groups.io/mt/86954321/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to