Reviewed-by: Rebecca Cran <quic_rc...@quicinc.com>


On 11/10/21 03:55, Sami Mujawar wrote:
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 IORT header file to reflect these changes,
and also rename the EFI_ACPI_IO_REMAPPING_TABLE_REVISION macro to
EFI_ACPI_IO_REMAPPING_TABLE_REV0.

Signed-off-by: Sami Mujawar <sami.muja...@arm.com>
Reviewed-by: Zhichao Gao <zhichao....@intel.com>
---

Notes:
     v2:
       - Set EFI_ACPI_IO_REMAPPING_TABLE_REVISION to Rev 0 as     [SAMI]
         setting to Rev 3 will break existing platforms. The
         problem is that existing code would not be populating
         the Identifier field in the nodes. This can lead to
         non-unique values in the Identifier field.
v3:
      - Submit patch series to update platform code to use the       [LIMING]
        EFI_ACPI_IO_REMAPPING_TABLE_REV0 macro.
        Ref: https://edk2.groups.io/g/devel/topic/83618423#76799
      - Removed definition of EFI_ACPI_IO_REMAPPING_TABLE_REVISION   [SAMI]
        as EFI_ACPI_IO_REMAPPING_TABLE_REV0 has been provided for
        representing Rev 0. Also, a corresponding patch series
        for updating the platforms in edk2-platforms repository
        shall be submitted to the edk2 mailing list.
      - Include r-b received from v2 series.                         [SAMI]
        Ref: https://edk2.groups.io/g/devel/topic/83600724#76660

  MdePkg/Include/IndustryStandard/IoRemappingTable.h | 66 +++++++++++++++++---
  1 file changed, 59 insertions(+), 7 deletions(-)

diff --git a/MdePkg/Include/IndustryStandard/IoRemappingTable.h 
b/MdePkg/Include/IndustryStandard/IoRemappingTable.h
index 
90504e3a6715be7facc6450c6ff0e1eab92cd3c7..e80164a07f4d561cd85994b4f785e76f2eab4586
 100644
--- a/MdePkg/Include/IndustryStandard/IoRemappingTable.h
+++ b/MdePkg/Include/IndustryStandard/IoRemappingTable.h
@@ -1,12 +1,19 @@
  /** @file
-  ACPI IO Remapping Table (IORT) as specified in ARM spec DEN0049D
-
-  
http://infocenter.arm.com/help/topic/com.arm.doc.den0049d/DEN0049D_IO_Remapping_Table.pdf
+  ACPI IO Remapping Table (IORT) definitions.
Copyright (c) 2017, Linaro Limited. All rights reserved.<BR>
-  Copyright (c) 2018, ARM Limited. All rights reserved.<BR>
+  Copyright (c) 2018 - 2021, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
+
+  @par Reference(s):
+  - IO Remapping Table, Platform Design Document, Revision E.b, Feb 2021
+    (https://developer.arm.com/documentation/den0049/)
+
+  @par Glossary:
+  - Ref  : Reference
+  - Mem  : Memory
+  - Desc : Descriptor
  **/
#ifndef __IO_REMAPPING_TABLE_H__
@@ -14,7 +21,8 @@
#include <IndustryStandard/Acpi.h> -#define EFI_ACPI_IO_REMAPPING_TABLE_REVISION 0x0
+#define EFI_ACPI_IO_REMAPPING_TABLE_REV0      0x0
+#define EFI_ACPI_IO_REMAPPING_TABLE_REV3      0x3
#define EFI_ACPI_IORT_TYPE_ITS_GROUP 0x0
  #define EFI_ACPI_IORT_TYPE_NAMED_COMP               0x1
@@ -22,6 +30,7 @@
  #define EFI_ACPI_IORT_TYPE_SMMUv1v2                 0x3
  #define EFI_ACPI_IORT_TYPE_SMMUv3                   0x4
  #define EFI_ACPI_IORT_TYPE_PMCG                     0x5
+#define EFI_ACPI_IORT_TYPE_RMR                      0x6
#define EFI_ACPI_IORT_MEM_ACCESS_PROP_CCA BIT0 @@ -55,7 +64,16 @@
  #define EFI_ACPI_IORT_SMMUv3_MODEL_CAVIUM_CN99XX    0x2
#define EFI_ACPI_IORT_ROOT_COMPLEX_ATS_UNSUPPORTED 0x0
-#define EFI_ACPI_IORT_ROOT_COMPLEX_ATS_SUPPORTED    0x1
+#define EFI_ACPI_IORT_ROOT_COMPLEX_ATS_SUPPORTED    BIT0
+
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PRI_UNSUPPORTED  0x0
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PRI_SUPPORTED    BIT1
+
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_FWD_UNSUPPORTED  0x0
+#define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_FWD_SUPPORTED    BIT2
+
+#define EFI_ACPI_IORT_RMR_REMAP_NOT_PERMITTED       0x0
+#define EFI_ACPI_IORT_RMR_REMAP_PERMITTED           BIT0
#define EFI_ACPI_IORT_ID_MAPPING_FLAGS_SINGLE BIT0 @@ -89,7 +107,7 @@ typedef struct {
    UINT8                                   Type;
    UINT16                                  Length;
    UINT8                                   Revision;
-  UINT32                                  Reserved;
+  UINT32                                  Identifier;
    UINT32                                  NumIdMappings;
    UINT32                                  IdReference;
  } EFI_ACPI_6_0_IO_REMAPPING_NODE;
@@ -198,6 +216,40 @@ typedef struct {
  //EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE      OverflowInterruptMsiMapping[1];
  } EFI_ACPI_6_0_IO_REMAPPING_PMCG_NODE;
+///
+/// Memory Range Descriptor.
+///
+typedef struct {
+  /// Base address of Reserved Memory Range,
+  /// aligned to a page size of 64K.
+  UINT64                                  Base;
+
+  /// Length of the Reserved Memory range.
+  /// Must be a multiple of the page size of 64K.
+  UINT64                                  Length;
+
+  /// Reserved, must be zero.
+  UINT32                                  Reserved;
+} EFI_ACPI_6_0_IO_REMAPPING_MEM_RANGE_DESC;
+
+///
+/// Node type 6: Reserved Memory Range (RMR) node
+///
+typedef struct {
+  EFI_ACPI_6_0_IO_REMAPPING_NODE              Node;
+
+  /// RMR flags
+  UINT32                                      Flags;
+
+  /// Memory range descriptor count.
+  UINT32                                      NumMemRangeDesc;
+
+  /// Offset of the memory range descriptor array.
+  UINT32                                      MemRangeDescRef;
+// EFI_ACPI_6_0_IO_REMAPPING_ID_TABLE         IdMapping[1];
+// EFI_ACPI_6_0_IO_REMAPPING_MEM_RANGE_DESC   MemRangeDesc[1];
+} EFI_ACPI_6_0_IO_REMAPPING_RMR_NODE;
+
  #pragma pack()
#endif


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


Reply via email to