mirror of https://github.com/acidanthera/audk.git
MdePkg: IORT header update for IORT Rev E.d spec
Bugzilla: 3458 - Add support IORT Rev E.d specification updates (https://bugzilla.tianocore.org/show_bug.cgi?id=3458) The IO Remapping Table, Platform Design Document, Revision E.d, Feb 2022 (https://developer.arm.com/documentation/den0049/) introduces the following updates, collectively including the updates and errata fixes to Rev E, Rev E.a, Rev E.b, Rev E.c: - increments the IORT table revision to 5. - 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. - adds flag to indicate if the root complex supports PASID. - adds flags to define access privilege and attributes for the memory ranges. 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_REVISION_00. Also update the IORT generator in DynamicTablesPkg to fix the compilation errors so that Git Bisect can work. Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Zhichao Gao <zhichao.gao@intel.com>
This commit is contained in:
parent
238f903e8d
commit
4c55f6394f
|
@ -766,7 +766,7 @@ AddItsGroupNodes (
|
|||
ItsGroupNode->Node.Type = EFI_ACPI_IORT_TYPE_ITS_GROUP;
|
||||
ItsGroupNode->Node.Length = (UINT16)NodeLength;
|
||||
ItsGroupNode->Node.Revision = 0;
|
||||
ItsGroupNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||
ItsGroupNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;
|
||||
ItsGroupNode->Node.NumIdMappings = 0;
|
||||
ItsGroupNode->Node.IdReference = 0;
|
||||
|
||||
|
@ -872,7 +872,7 @@ AddNamedComponentNodes (
|
|||
NcNode->Node.Type = EFI_ACPI_IORT_TYPE_NAMED_COMP;
|
||||
NcNode->Node.Length = (UINT16)NodeLength;
|
||||
NcNode->Node.Revision = 2;
|
||||
NcNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||
NcNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;
|
||||
NcNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||
|
||||
ObjectNameLength = AsciiStrLen (NodeList->ObjectName) + 1;
|
||||
|
@ -1005,7 +1005,7 @@ AddRootComplexNodes (
|
|||
RcNode->Node.Type = EFI_ACPI_IORT_TYPE_ROOT_COMPLEX;
|
||||
RcNode->Node.Length = (UINT16)NodeLength;
|
||||
RcNode->Node.Revision = 1;
|
||||
RcNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||
RcNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;
|
||||
RcNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||
RcNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?
|
||||
0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_RC_NODE);
|
||||
|
@ -1018,9 +1018,8 @@ AddRootComplexNodes (
|
|||
RcNode->AtsAttribute = NodeList->AtsAttribute;
|
||||
RcNode->PciSegmentNumber = NodeList->PciSegmentNumber;
|
||||
RcNode->MemoryAddressSize = NodeList->MemoryAddressSize;
|
||||
RcNode->PasidCapabilities = EFI_ACPI_RESERVED_WORD;
|
||||
RcNode->Reserved1[0] = EFI_ACPI_RESERVED_BYTE;
|
||||
RcNode->Reserved1[1] = EFI_ACPI_RESERVED_BYTE;
|
||||
RcNode->Reserved1[2] = EFI_ACPI_RESERVED_BYTE;
|
||||
|
||||
if (NodeList->IdMappingCount > 0) {
|
||||
if (NodeList->IdMappingToken == CM_NULL_TOKEN) {
|
||||
|
@ -1188,7 +1187,7 @@ AddSmmuV1V2Nodes (
|
|||
SmmuNode->Node.Type = EFI_ACPI_IORT_TYPE_SMMUv1v2;
|
||||
SmmuNode->Node.Length = (UINT16)NodeLength;
|
||||
SmmuNode->Node.Revision = 0;
|
||||
SmmuNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||
SmmuNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;
|
||||
SmmuNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||
SmmuNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?
|
||||
0 : (sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE) +
|
||||
|
@ -1387,7 +1386,7 @@ AddSmmuV3Nodes (
|
|||
SmmuV3Node->Node.Type = EFI_ACPI_IORT_TYPE_SMMUv3;
|
||||
SmmuV3Node->Node.Length = (UINT16)NodeLength;
|
||||
SmmuV3Node->Node.Revision = 2;
|
||||
SmmuV3Node->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||
SmmuV3Node->Node.Identifier = EFI_ACPI_RESERVED_DWORD;
|
||||
SmmuV3Node->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||
SmmuV3Node->Node.IdReference = (NodeList->IdMappingCount == 0) ?
|
||||
0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE);
|
||||
|
@ -1518,7 +1517,7 @@ AddPmcgNodes (
|
|||
PmcgNode->Node.Type = EFI_ACPI_IORT_TYPE_PMCG;
|
||||
PmcgNode->Node.Length = (UINT16)NodeLength;
|
||||
PmcgNode->Node.Revision = 1;
|
||||
PmcgNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||
PmcgNode->Node.Identifier = EFI_ACPI_RESERVED_DWORD;
|
||||
PmcgNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||
PmcgNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?
|
||||
0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_PMCG_NODE);
|
||||
|
@ -2258,9 +2257,9 @@ ACPI_IORT_GENERATOR IortGenerator = {
|
|||
// ACPI Table Signature
|
||||
EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE,
|
||||
// ACPI Table Revision supported by this Generator
|
||||
EFI_ACPI_IO_REMAPPING_TABLE_REVISION,
|
||||
EFI_ACPI_IO_REMAPPING_TABLE_REVISION_00,
|
||||
// Minimum supported ACPI Table Revision
|
||||
EFI_ACPI_IO_REMAPPING_TABLE_REVISION,
|
||||
EFI_ACPI_IO_REMAPPING_TABLE_REVISION_00,
|
||||
// Creator ID
|
||||
TABLE_GENERATOR_CREATOR_ID_ARM,
|
||||
// Creator Revision
|
||||
|
|
|
@ -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 - 2022, Arm Limited. All rights reserved.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
@par Reference(s):
|
||||
- IO Remapping Table, Platform Design Document, Revision E.d, Feb 2022
|
||||
(https://developer.arm.com/documentation/den0049/)
|
||||
|
||||
@par Glossary:
|
||||
- Ref : Reference
|
||||
- Mem : Memory
|
||||
- Desc : Descriptor
|
||||
**/
|
||||
|
||||
#ifndef __IO_REMAPPING_TABLE_H__
|
||||
|
@ -14,7 +21,9 @@
|
|||
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
|
||||
#define EFI_ACPI_IO_REMAPPING_TABLE_REVISION 0x0
|
||||
#define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_00 0x0
|
||||
#define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_04 0x4 // Deprecated
|
||||
#define EFI_ACPI_IO_REMAPPING_TABLE_REVISION_05 0x5
|
||||
|
||||
#define EFI_ACPI_IORT_TYPE_ITS_GROUP 0x0
|
||||
#define EFI_ACPI_IORT_TYPE_NAMED_COMP 0x1
|
||||
|
@ -22,6 +31,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,10 +65,34 @@
|
|||
#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_ROOT_COMPLEX_PASID_UNSUPPORTED 0x0
|
||||
#define EFI_ACPI_IORT_ROOT_COMPLEX_PASID_SUPPORTED BIT1
|
||||
|
||||
#define EFI_ACPI_IORT_RMR_REMAP_NOT_PERMITTED 0x0
|
||||
#define EFI_ACPI_IORT_RMR_REMAP_PERMITTED BIT0
|
||||
|
||||
#define EFI_ACPI_IORT_RMR_ACCESS_REQ_NOT_PRIVILEGED 0x0
|
||||
#define EFI_ACPI_IORT_RMR_ACCESS_REQ_PRIVILEGED BIT1
|
||||
|
||||
#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_NGNRNE 0x0
|
||||
#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_NGNRE 0x1
|
||||
#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_NGRE 0x2
|
||||
#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_DEV_GRE 0x3
|
||||
#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_NORM_IN_NC_OUT_NC 0x4
|
||||
#define EFI_ACPI_IORT_RMR_ACCESS_ATTRIB_NORM_IN_WB_OUT_WB_ISH 0x5
|
||||
|
||||
#define EFI_ACPI_IORT_ID_MAPPING_FLAGS_SINGLE BIT0
|
||||
|
||||
#define EFI_ACPI_IORT_RMR_NODE_REVISION_02 0x2 // Deprecated
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
///
|
||||
|
@ -89,7 +123,7 @@ typedef struct {
|
|||
UINT8 Type;
|
||||
UINT16 Length;
|
||||
UINT8 Revision;
|
||||
UINT32 Reserved;
|
||||
UINT32 Identifier;
|
||||
UINT32 NumIdMappings;
|
||||
UINT32 IdReference;
|
||||
} EFI_ACPI_6_0_IO_REMAPPING_NODE;
|
||||
|
@ -118,7 +152,9 @@ typedef struct {
|
|||
UINT32 AtsAttribute;
|
||||
UINT32 PciSegmentNumber;
|
||||
UINT8 MemoryAddressSize;
|
||||
UINT8 Reserved1[3];
|
||||
UINT16 PasidCapabilities;
|
||||
UINT8 Reserved1[1];
|
||||
UINT32 Flags;
|
||||
} EFI_ACPI_6_0_IO_REMAPPING_RC_NODE;
|
||||
|
||||
///
|
||||
|
@ -198,6 +234,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
|
||||
|
|
Loading…
Reference in New Issue