mirror of https://github.com/acidanthera/audk.git
DynamicTablesPkg: IORT set reference to Id array only if present
The IORT table generator is setting up a reference to ID array for nodes even when the ID Mapping count is zero. This is not an issue as an OS would only access the ID Reference if the ID mapping count is not zero. However, it would be good to set the reference to ID array to zero when the ID Mapping count is zero rather than populating it with an incorrect value. Signed-off-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Pierre Gondois <pierre.gondois@arm.com>
This commit is contained in:
parent
65c4f3f2be
commit
f5cea604a6
|
@ -876,9 +876,9 @@ AddNamedComponentNodes (
|
||||||
NcNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
NcNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||||
|
|
||||||
ObjectNameLength = AsciiStrLen (NodeList->ObjectName) + 1;
|
ObjectNameLength = AsciiStrLen (NodeList->ObjectName) + 1;
|
||||||
NcNode->Node.IdReference =
|
NcNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?
|
||||||
(UINT32)(sizeof (EFI_ACPI_6_0_IO_REMAPPING_NAMED_COMP_NODE) +
|
0 : ((UINT32)(sizeof (EFI_ACPI_6_0_IO_REMAPPING_NAMED_COMP_NODE) +
|
||||||
(ALIGN_VALUE (ObjectNameLength, 4)));
|
(ALIGN_VALUE (ObjectNameLength, 4))));
|
||||||
|
|
||||||
// Named Component specific data
|
// Named Component specific data
|
||||||
NcNode->Flags = NodeList->Flags;
|
NcNode->Flags = NodeList->Flags;
|
||||||
|
@ -1007,7 +1007,8 @@ AddRootComplexNodes (
|
||||||
RcNode->Node.Revision = 1;
|
RcNode->Node.Revision = 1;
|
||||||
RcNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
RcNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||||
RcNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
RcNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||||
RcNode->Node.IdReference = sizeof (EFI_ACPI_6_0_IO_REMAPPING_RC_NODE);
|
RcNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?
|
||||||
|
0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_RC_NODE);
|
||||||
|
|
||||||
// Root Complex specific data
|
// Root Complex specific data
|
||||||
RcNode->CacheCoherent = NodeList->CacheCoherent;
|
RcNode->CacheCoherent = NodeList->CacheCoherent;
|
||||||
|
@ -1188,11 +1189,12 @@ AddSmmuV1V2Nodes (
|
||||||
SmmuNode->Node.Revision = 0;
|
SmmuNode->Node.Revision = 0;
|
||||||
SmmuNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
SmmuNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||||
SmmuNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
SmmuNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||||
SmmuNode->Node.IdReference = sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE) +
|
SmmuNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?
|
||||||
(NodeList->ContextInterruptCount *
|
0 : (sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_NODE) +
|
||||||
sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT)) +
|
(NodeList->ContextInterruptCount *
|
||||||
(NodeList->PmuInterruptCount *
|
sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT)) +
|
||||||
sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT));
|
(NodeList->PmuInterruptCount *
|
||||||
|
sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU_INT)));
|
||||||
|
|
||||||
// SMMU v1/v2 specific data
|
// SMMU v1/v2 specific data
|
||||||
SmmuNode->Base = NodeList->BaseAddress;
|
SmmuNode->Base = NodeList->BaseAddress;
|
||||||
|
@ -1360,8 +1362,8 @@ AddSmmuV3Nodes (
|
||||||
SmmuV3Node->Node.Revision = 2;
|
SmmuV3Node->Node.Revision = 2;
|
||||||
SmmuV3Node->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
SmmuV3Node->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||||
SmmuV3Node->Node.NumIdMappings = NodeList->IdMappingCount;
|
SmmuV3Node->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||||
SmmuV3Node->Node.IdReference =
|
SmmuV3Node->Node.IdReference = (NodeList->IdMappingCount == 0) ?
|
||||||
sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE);
|
0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_SMMU3_NODE);
|
||||||
|
|
||||||
// SMMUv3 specific data
|
// SMMUv3 specific data
|
||||||
SmmuV3Node->Base = NodeList->BaseAddress;
|
SmmuV3Node->Base = NodeList->BaseAddress;
|
||||||
|
@ -1491,7 +1493,8 @@ AddPmcgNodes (
|
||||||
PmcgNode->Node.Revision = 1;
|
PmcgNode->Node.Revision = 1;
|
||||||
PmcgNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
PmcgNode->Node.Reserved = EFI_ACPI_RESERVED_DWORD;
|
||||||
PmcgNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
PmcgNode->Node.NumIdMappings = NodeList->IdMappingCount;
|
||||||
PmcgNode->Node.IdReference = sizeof (EFI_ACPI_6_0_IO_REMAPPING_PMCG_NODE);
|
PmcgNode->Node.IdReference = (NodeList->IdMappingCount == 0) ?
|
||||||
|
0 : sizeof (EFI_ACPI_6_0_IO_REMAPPING_PMCG_NODE);
|
||||||
|
|
||||||
// PMCG specific data
|
// PMCG specific data
|
||||||
PmcgNode->Base = NodeList->BaseAddress;
|
PmcgNode->Base = NodeList->BaseAddress;
|
||||||
|
|
Loading…
Reference in New Issue