summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShameer Kolothum <shameerali.kolothum.thodi@huawei.com>2021-03-25 13:58:21 +0000
committerShameer Kolothum <shameerali.kolothum.thodi@huawei.com>2021-03-25 13:58:21 +0000
commit8710a708faed728ea2672b8da842b2e9af1cf5bd (patch)
tree4a6c8106b4f762210f9ab15c137228cd97a6e705
parentfd14f13c8bc378a7b934b9c840bbc24a3eeae4c2 (diff)
downloadacpica-8710a708faed728ea2672b8da842b2e9af1cf5bd.tar.gz
IORT: Updates for revision E.b
IORT revision E.b (ARM DEN 0049E.b) contains a few additions like, -Added an identifier field in the node descriptors to aid table cross-referencing. -Introduced the Reserved Memory Range(RMR) node. This is used to describe memory ranges that are used by endpoints and require a unity mapping in SMMU. -Introduced a flag in the RC node to express support for PRI. -Added a flag in the RC node to declare support for PASID forward information. Please note that IORT Rev E and E.a have known issues and are not supported. Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
-rw-r--r--source/common/dmtbdump2.c59
-rw-r--r--source/common/dmtbinfo2.c34
-rw-r--r--source/compiler/dttable1.c69
-rw-r--r--source/compiler/dttemplate.h43
-rw-r--r--source/include/acdisasm.h3
-rw-r--r--source/include/actbinfo.h3
-rw-r--r--source/include/actbl2.h27
-rw-r--r--source/tools/acpisrc/astable.c2
8 files changed, 210 insertions, 30 deletions
diff --git a/source/common/dmtbdump2.c b/source/common/dmtbdump2.c
index 7dcf401c8..80d9d4597 100644
--- a/source/common/dmtbdump2.c
+++ b/source/common/dmtbdump2.c
@@ -181,6 +181,7 @@ AcpiDmDumpIort (
ACPI_IORT_NODE *IortNode;
ACPI_IORT_ITS_GROUP *IortItsGroup = NULL;
ACPI_IORT_SMMU *IortSmmu = NULL;
+ ACPI_IORT_RMR *IortRmr = NULL;
UINT32 Offset;
UINT32 NodeOffset;
UINT32 Length;
@@ -188,6 +189,7 @@ AcpiDmDumpIort (
char *String;
UINT32 i;
UINT32 MappingByteLength;
+ UINT8 Revision;
/* Main table */
@@ -198,6 +200,17 @@ AcpiDmDumpIort (
return;
}
+ Revision = Table->Revision;
+
+ /* Both IORT Rev E and E.a have known issues and are not supported */
+
+ if (Revision == 1 || Revision == 2)
+ {
+ AcpiOsPrintf ("\n**** Unsupported IORT revision 0x%X\n",
+ Revision);
+ return;
+ }
+
Iort = ACPI_CAST_PTR (ACPI_TABLE_IORT, Table);
Offset = sizeof (ACPI_TABLE_IORT);
@@ -221,8 +234,18 @@ AcpiDmDumpIort (
IortNode = ACPI_ADD_PTR (ACPI_IORT_NODE, Table, Offset);
AcpiOsPrintf ("\n");
Length = ACPI_OFFSET (ACPI_IORT_NODE, NodeData);
- Status = AcpiDmDumpTable (Table->Length, Offset,
- IortNode, Length, AcpiDmTableInfoIortHdr);
+
+ if (Revision == 0)
+ {
+ Status = AcpiDmDumpTable (Table->Length, Offset,
+ IortNode, Length, AcpiDmTableInfoIortHdr);
+ }
+ else if (Revision >= 3)
+ {
+ Status = AcpiDmDumpTable (Table->Length, Offset,
+ IortNode, Length, AcpiDmTableInfoIortHdr3);
+ }
+
if (ACPI_FAILURE (Status))
{
return;
@@ -272,6 +295,13 @@ AcpiDmDumpIort (
Length = IortNode->Length - NodeOffset;
break;
+ case ACPI_IORT_NODE_RMR:
+
+ InfoTable = AcpiDmTableInfoIort6;
+ Length = IortNode->Length - NodeOffset;
+ IortRmr = ACPI_ADD_PTR (ACPI_IORT_RMR, IortNode, NodeOffset);
+ break;
+
default:
AcpiOsPrintf ("\n**** Unknown IORT node type 0x%X\n",
@@ -391,7 +421,30 @@ AcpiDmDumpIort (
}
break;
- default:
+ case ACPI_IORT_NODE_RMR:
+
+ /* Validate IortRmr to avoid compiler warnings */
+ if (IortRmr)
+ {
+ NodeOffset = IortRmr->RmrOffset;
+ Length = sizeof (ACPI_IORT_RMR_DESC);
+ for (i = 0; i < IortRmr->RmrCount; i++)
+ {
+ AcpiOsPrintf ("\n");
+ Status = AcpiDmDumpTable (Table->Length, Offset + NodeOffset,
+ ACPI_ADD_PTR (ACPI_IORT_NODE, IortNode, NodeOffset),
+ Length, AcpiDmTableInfoIort6a);
+ if (ACPI_FAILURE (Status))
+ {
+ return;
+ }
+
+ NodeOffset += Length;
+ }
+ }
+ break;
+
+ default:
break;
}
diff --git a/source/common/dmtbinfo2.c b/source/common/dmtbinfo2.c
index 89dc10596..9bb4b48c0 100644
--- a/source/common/dmtbinfo2.c
+++ b/source/common/dmtbinfo2.c
@@ -218,7 +218,20 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[] =
{ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0},
{ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH},
{ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0},
- {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Reserved), "Reserved", 0},
+ {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Identifier), "Reserved", 0},
+ {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0},
+ {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+/* Common Subtable header (one per Subtable)- Revision 3 */
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr3[] =
+{
+ {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Type), "Type", 0},
+ {ACPI_DMT_UINT16, ACPI_IORTH_OFFSET (Length), "Length", DT_LENGTH},
+ {ACPI_DMT_UINT8, ACPI_IORTH_OFFSET (Revision), "Revision", 0},
+ {ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (Identifier), "Identifier", 0},
{ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingCount), "Mapping Count", 0},
{ACPI_DMT_UINT32, ACPI_IORTH_OFFSET (MappingOffset), "Mapping Offset", 0},
ACPI_DMT_TERMINATOR
@@ -369,6 +382,25 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoIort5[] =
};
+/* 0x06: RMR */
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoIort6[] =
+{
+ {ACPI_DMT_UINT32, ACPI_IORT6_OFFSET (Flags), "Flags (decoded below)", 0},
+ {ACPI_DMT_FLAG0, ACPI_IORT6_FLAG_OFFSET (Flags, 0), "Remapping Permitted", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT6_OFFSET (RmrCount), "Number of RMR Descriptors", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT6_OFFSET (RmrOffset), "RMR Descriptor Offset", 0},
+ ACPI_DMT_TERMINATOR
+};
+
+ACPI_DMTABLE_INFO AcpiDmTableInfoIort6a[] =
+{
+ {ACPI_DMT_UINT64, ACPI_IORT6A_OFFSET (BaseAddress), "Base Address of RMR", DT_OPTIONAL},
+ {ACPI_DMT_UINT64, ACPI_IORT6A_OFFSET (Length), "Length of RMR", 0},
+ {ACPI_DMT_UINT32, ACPI_IORT6A_OFFSET (Reserved), "Reserved", 0},
+ ACPI_DMT_TERMINATOR
+};
+
/*******************************************************************************
*
* IVRS - I/O Virtualization Reporting Structure
diff --git a/source/compiler/dttable1.c b/source/compiler/dttable1.c
index 222eb2733..458a71743 100644
--- a/source/compiler/dttable1.c
+++ b/source/compiler/dttable1.c
@@ -1656,10 +1656,12 @@ DtCompileIort (
DT_SUBTABLE *ParentTable;
DT_FIELD **PFieldList = (DT_FIELD **) List;
DT_FIELD *SubtableStart;
+ ACPI_TABLE_HEADER *Table;
ACPI_TABLE_IORT *Iort;
ACPI_IORT_NODE *IortNode;
ACPI_IORT_ITS_GROUP *IortItsGroup;
ACPI_IORT_SMMU *IortSmmu;
+ ACPI_IORT_RMR *IortRmr;
UINT32 NodeNumber;
UINT32 NodeLength;
UINT32 IdMappingNumber;
@@ -1667,6 +1669,8 @@ DtCompileIort (
UINT32 ContextIrptNumber;
UINT32 PmuIrptNumber;
UINT32 PaddingLength;
+ UINT8 Revision;
+ UINT32 RmrCount;
ParentTable = DtPeekSubtable ();
@@ -1679,6 +1683,17 @@ DtCompileIort (
}
DtInsertSubtable (ParentTable, Subtable);
+ Table = ACPI_CAST_PTR (ACPI_TABLE_HEADER, ParentTable->Buffer);
+ Revision = Table->Revision;
+
+ /* Both IORT Rev E and E.a have known issues and are not supported */
+
+ if (Revision == 1 || Revision == 2)
+ {
+ DtError (ASL_ERROR, ASL_MSG_UNSUPPORTED, NULL, "IORT table revision");
+ return (AE_ERROR);
+ }
+
/*
* Using ACPI_SUB_PTR, We needn't define a separate structure. Care
* should be taken to avoid accessing ACPI_TABLE_HEADER fields.
@@ -1719,8 +1734,17 @@ DtCompileIort (
while (*PFieldList)
{
SubtableStart = *PFieldList;
- Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortHdr,
- &Subtable);
+ if (Revision == 0)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortHdr,
+ &Subtable);
+ }
+ else if (Revision >= 3)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIortHdr3,
+ &Subtable);
+ }
+
if (ACPI_FAILURE (Status))
{
return (Status);
@@ -1938,7 +1962,46 @@ DtCompileIort (
NodeLength += Subtable->Length;
break;
- default:
+ case ACPI_IORT_NODE_RMR:
+
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort6,
+ &Subtable);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ DtInsertSubtable (ParentTable, Subtable);
+ IortRmr = ACPI_CAST_PTR (ACPI_IORT_RMR, Subtable->Buffer);
+ NodeLength += Subtable->Length;
+
+ /* Compile RMR Descriptors */
+
+ RmrCount = 0;
+ IortRmr->RmrOffset = NodeLength;
+ while (*PFieldList)
+ {
+ Status = DtCompileTable (PFieldList, AcpiDmTableInfoIort6a,
+ &Subtable);
+ if (ACPI_FAILURE (Status))
+ {
+ return (Status);
+ }
+
+ if (!Subtable)
+ {
+ break;
+ }
+
+ DtInsertSubtable (ParentTable, Subtable);
+ NodeLength += sizeof (ACPI_IORT_RMR_DESC);
+ RmrCount++;
+ }
+
+ IortRmr->RmrCount = RmrCount;
+ break;
+
+ default:
DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "IORT");
return (AE_ERROR);
diff --git a/source/compiler/dttemplate.h b/source/compiler/dttemplate.h
index 85bab9e82..fbe68ec9f 100644
--- a/source/compiler/dttemplate.h
+++ b/source/compiler/dttemplate.h
@@ -718,39 +718,39 @@ const unsigned char TemplateHpet[] =
const unsigned char TemplateIort[] =
{
- 0x49,0x4F,0x52,0x54,0xF8,0x01,0x00,0x00, /* 00000000 "IORT...." */
- 0x00,0x72,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 ".rINTEL " */
+ 0x49,0x4F,0x52,0x54,0x3C,0x02,0x00,0x00, /* 00000000 "IORT<..." */
+ 0x03,0xF1,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */
0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
- 0x13,0x03,0x18,0x20,0x06,0x00,0x00,0x00, /* 00000020 "... ...." */
+ 0x05,0x01,0x21,0x20,0x07,0x00,0x00,0x00, /* 00000020 "..! ...." */
0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "4......." */
- 0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00, /* 00000030 "........" */
+ 0x49,0x4F,0x52,0x54,0x00,0x18,0x00,0x01, /* 00000030 "IORT...." */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000040 "........" */
- 0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00, /* 00000048 "........" */
+ 0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x04, /* 00000048 "........" */
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000050 "........" */
0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000058 "l......." */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000060 "........" */
0x00,0x5C,0x5F,0x53,0x42,0x2E,0x50,0x43, /* 00000068 ".\_SB.PC" */
0x49,0x30,0x2E,0x44,0x45,0x56,0x30,0x00, /* 00000070 "I0.DEV0." */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000088 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000090 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000098 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "........" */
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A8 "........" */
+ 0x49,0x4F,0x52,0x54,0x3C,0x02,0x00,0x00, /* 00000078 "IORT<..." */
+ 0x03,0xF2,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000080 "..INTEL " */
+ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000088 "Template" */
+ 0x00,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000090 "....INTL" */
+ 0x05,0x01,0x21,0x20,0x07,0x00,0x00,0x00, /* 00000098 "..! ...." */
+ 0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000A0 "4......." */
+ 0x49,0x4F,0x52,0x54,0x00,0x18,0x00,0x01, /* 000000A8 "IORT...." */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B0 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000B8 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000C0 "........" */
- 0x00,0x00,0x00,0x00,0x02,0x38,0x00,0x00, /* 000000C8 ".....8.." */
+ 0x00,0x00,0x00,0x00,0x02,0x38,0x00,0x03, /* 000000C8 ".....8.." */
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000000D0 "........" */
0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000D8 "$......." */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E0 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000E8 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F0 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000000F8 "........" */
- 0x00,0x00,0x00,0x00,0x03,0x60,0x00,0x01, /* 00000100 ".....`.." */
+ 0x00,0x00,0x00,0x00,0x03,0x60,0x00,0x03, /* 00000100 ".....`.." */
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000108 "........" */
0x4C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000110 "L......." */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000118 "........" */
@@ -762,7 +762,7 @@ const unsigned char TemplateIort[] =
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000148 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000150 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000158 "........" */
- 0x00,0x00,0x00,0x00,0x04,0x58,0x00,0x01, /* 00000160 ".....X.." */
+ 0x00,0x00,0x00,0x00,0x04,0x58,0x00,0x04, /* 00000160 ".....X.." */
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000168 "........" */
0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000170 "D......." */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000178 "........" */
@@ -773,14 +773,23 @@ const unsigned char TemplateIort[] =
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001A0 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001A8 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001B0 "........" */
- 0x00,0x00,0x00,0x00,0x05,0x3C,0x00,0x01, /* 000001B8 ".....<.." */
+ 0x00,0x00,0x00,0x00,0x05,0x3C,0x00,0x02, /* 000001B8 ".....<.." */
0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000001C0 "........" */
0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001C8 "(......." */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D0 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001D8 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E0 "........" */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001E8 "........" */
- 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00 /* 000001F0 "........" */
+ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 000001F0 "........" */
+ 0x06,0x44,0x00,0x01,0x00,0x00,0x00,0x00, /* 000001F8 ".D......" */
+ 0x01,0x00,0x00,0x00,0x30,0x00,0x00,0x00, /* 00000200 "....0..." */
+ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, /* 00000208 "........" */
+ 0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000210 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000218 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000220 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000228 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000230 "........" */
+ 0x01,0x00,0x00,0x00 /* 00000238 "...." */
};
const unsigned char TemplateIvrs[] =
diff --git a/source/include/acdisasm.h b/source/include/acdisasm.h
index afa68bcf7..f02f32399 100644
--- a/source/include/acdisasm.h
+++ b/source/include/acdisasm.h
@@ -457,8 +457,11 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort3b[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort3c[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort4[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort5[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort6[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoIort6a[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortAcc[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr[];
+extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortHdr3[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortMap[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIortPad[];
extern ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs[];
diff --git a/source/include/actbinfo.h b/source/include/actbinfo.h
index 6dd184809..af10c774d 100644
--- a/source/include/actbinfo.h
+++ b/source/include/actbinfo.h
@@ -263,6 +263,8 @@
#define ACPI_IORT3A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_GSI,f)
#define ACPI_IORT4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_SMMU_V3,f)
#define ACPI_IORT5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_PMCG,f)
+#define ACPI_IORT6_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_RMR,f)
+#define ACPI_IORT6A_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_RMR_DESC,f)
#define ACPI_IORTA_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_MEMORY_ACCESS,f)
#define ACPI_IORTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_NODE,f)
#define ACPI_IORTM_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_IORT_ID_MAPPING,f)
@@ -393,6 +395,7 @@
#define ACPI_IORT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU,f,o)
#define ACPI_IORT3a_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_GSI,f,o)
#define ACPI_IORT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_SMMU_V3,f,o)
+#define ACPI_IORT6_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_RMR,f,o)
#define ACPI_IORTA_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_MEMORY_ACCESS,f,o)
#define ACPI_IORTM_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_IORT_ID_MAPPING,f,o)
#define ACPI_LPITH_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (ACPI_LPIT_HEADER,f,o)
diff --git a/source/include/actbl2.h b/source/include/actbl2.h
index 1768666b4..71c39e862 100644
--- a/source/include/actbl2.h
+++ b/source/include/actbl2.h
@@ -214,7 +214,7 @@
* IORT - IO Remapping Table
*
* Conforms to "IO Remapping Table System Software on ARM Platforms",
- * Document number: ARM DEN 0049D, March 2018
+ * Document number: ARM DEN 0049E.b, Feb 2021
*
******************************************************************************/
@@ -236,7 +236,7 @@ typedef struct acpi_iort_node
UINT8 Type;
UINT16 Length;
UINT8 Revision;
- UINT32 Reserved;
+ UINT32 Identifier;
UINT32 MappingCount;
UINT32 MappingOffset;
char NodeData[1];
@@ -252,7 +252,8 @@ enum AcpiIortNodeType
ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
ACPI_IORT_NODE_SMMU = 0x03,
ACPI_IORT_NODE_SMMU_V3 = 0x04,
- ACPI_IORT_NODE_PMCG = 0x05
+ ACPI_IORT_NODE_PMCG = 0x05,
+ ACPI_IORT_NODE_RMR = 0x06,
};
@@ -333,10 +334,11 @@ typedef struct acpi_iort_root_complex
} ACPI_IORT_ROOT_COMPLEX;
-/* Values for AtsAttribute field above */
+/* Masks for AtsAttribute field above */
-#define ACPI_IORT_ATS_SUPPORTED 0x00000001 /* The root complex supports ATS */
-#define ACPI_IORT_ATS_UNSUPPORTED 0x00000000 /* The root complex doesn't support ATS */
+#define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */
+#define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */
+#define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */
typedef struct acpi_iort_smmu
@@ -417,6 +419,19 @@ typedef struct acpi_iort_pmcg
} ACPI_IORT_PMCG;
+typedef struct acpi_iort_rmr {
+ UINT32 Flags;
+ UINT32 RmrCount;
+ UINT32 RmrOffset;
+
+} ACPI_IORT_RMR;
+
+typedef struct acpi_iort_rmr_desc {
+ UINT64 BaseAddress;
+ UINT64 Length;
+ UINT32 Reserved;
+
+} ACPI_IORT_RMR_DESC;
/*******************************************************************************
*
diff --git a/source/tools/acpisrc/astable.c b/source/tools/acpisrc/astable.c
index b1d21ce6c..7c457f03b 100644
--- a/source/tools/acpisrc/astable.c
+++ b/source/tools/acpisrc/astable.c
@@ -776,6 +776,8 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = {
{"ACPI_IORT_SMMU_GSI", SRC_TYPE_STRUCT},
{"ACPI_IORT_SMMU_V3", SRC_TYPE_STRUCT},
{"ACPI_IORT_PMCG", SRC_TYPE_STRUCT},
+ {"ACPI_IORT_RMR", SRC_TYPE_STRUCT},
+ {"ACPI_IORT_RMR_DESC", SRC_TYPE_STRUCT},
{"ACPI_IVRS_HEADER", SRC_TYPE_STRUCT},
{"ACPI_IVRS_HARDWARE", SRC_TYPE_STRUCT},
{"ACPI_IVRS_DE_HEADER", SRC_TYPE_STRUCT},