From: "Sami Mujawar" <sami.mujawar@arm.com>
To: <devel@edk2.groups.io>
Cc: Sami Mujawar <sami.mujawar@arm.com>, <pierre.gondois@arm.com>,
<Anshuman.Khandual@arm.com>, <Matteo.Carlini@arm.com>,
<Akanksha.Jain2@arm.com>, <Sibel.Allinson@arm.com>,
<jeshuas@nvidia.com>, <nd@arm.com>
Subject: [edk2-devel] [PATCH v3 05/13] DynamicTablesPkg: Update MADT generator for ACPI 6.5
Date: Fri, 22 Sep 2023 15:35:08 +0100 [thread overview]
Message-ID: <20230922143516.4764-6-sami.mujawar@arm.com> (raw)
In-Reply-To: <20230922143516.4764-1-sami.mujawar@arm.com>
The ACPI 6.5 specification updates the MADT table to add
a new field to GICC for specifying the TRBE interrupt and
also adds support for Online Capable flag to the GICC flags.
The Online Capable flags should be passed transparently
through as specified in the CM_ARM_GICC_INFO.Flags field
and only require the MADT table revision to be setup to
6 to reflect the ACPI 6.5 specification.
The TRBE field needs to be appropriately setup in the
GICC structure.
Therefore, update the MADT generator to reflect the
above updates required for supporting ACPI 6.5
Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
---
Notes:
v3:
- Setting TRBE interrupt to 0 for ACPI 6.4 is [Pierre]
not required as the MADT table is zero allocated.
- Removed superfluous initialisation of TRBE interrupt [Sami]
field for ACPI 6.4.
v2:
- TRBE interrupt not set correctly for ACPI 6.4 [Jeshua]
- Fixed issue with setting TRBE interrupt [Sami]
Ref: https://edk2.groups.io/g/devel/message/107427
v2:
- TRBE interrupt not set correctly for ACPI 6.4 [Jeshua]
- Fixed issue with setting TRBE interrupt [Sami]
Ref: https://edk2.groups.io/g/devel/message/107427
DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c | 79 +++++++++++---------
1 file changed, 42 insertions(+), 37 deletions(-)
diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c
index 2102a59faf498eaab7777c509443461ada999610..df8734ed7f51087c75cfe99ea31dbf0b1aea87d0 100644
--- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c
+++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c
@@ -1,11 +1,11 @@
/** @file
MADT Table Generator
- Copyright (c) 2017 - 2020, ARM Limited. All rights reserved.
+ Copyright (c) 2017 - 2023, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
@par Reference(s):
- - ACPI 6.3 Specification - January 2019
+ - ACPI 6.5 Specification - Aug 29, 2022
**/
@@ -82,7 +82,7 @@ GET_OBJECT_LIST (
);
/** This function updates the GIC CPU Interface Information in the
- EFI_ACPI_6_3_GIC_STRUCTURE structure.
+ EFI_ACPI_6_5_GIC_STRUCTURE structure.
@param [in] Gicc Pointer to GIC CPU Interface structure.
@param [in] GicCInfo Pointer to the GIC CPU Interface Information.
@@ -91,7 +91,7 @@ GET_OBJECT_LIST (
STATIC
VOID
AddGICC (
- IN EFI_ACPI_6_3_GIC_STRUCTURE *CONST Gicc,
+ IN EFI_ACPI_6_5_GIC_STRUCTURE *CONST Gicc,
IN CONST CM_ARM_GICC_INFO *CONST GicCInfo,
IN CONST UINT8 MadtRev
)
@@ -100,9 +100,9 @@ AddGICC (
ASSERT (GicCInfo != NULL);
// UINT8 Type
- Gicc->Type = EFI_ACPI_6_3_GIC;
+ Gicc->Type = EFI_ACPI_6_5_GIC;
// UINT8 Length
- Gicc->Length = sizeof (EFI_ACPI_6_3_GIC_STRUCTURE);
+ Gicc->Length = sizeof (EFI_ACPI_6_5_GIC_STRUCTURE);
// UINT16 Reserved
Gicc->Reserved = EFI_ACPI_RESERVED_WORD;
@@ -148,6 +148,11 @@ AddGICC (
// in EFI_ACPI_6_2_GIC_STRUCTURE.
Gicc->SpeOverflowInterrupt = 0;
}
+
+ // UINT16 TrbeInterrupt
+ if (MadtRev > EFI_ACPI_6_4_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION) {
+ Gicc->TrbeInterrupt = GicCInfo->TrbeInterrupt;
+ }
}
/**
@@ -214,7 +219,7 @@ IsAcpiUidEqual (
STATIC
EFI_STATUS
AddGICCList (
- IN EFI_ACPI_6_3_GIC_STRUCTURE *Gicc,
+ IN EFI_ACPI_6_5_GIC_STRUCTURE *Gicc,
IN CONST CM_ARM_GICC_INFO *GicCInfo,
IN UINT32 GicCCount,
IN CONST UINT8 MadtRev
@@ -252,7 +257,7 @@ AddGICCList (
STATIC
VOID
AddGICD (
- EFI_ACPI_6_3_GIC_DISTRIBUTOR_STRUCTURE *CONST Gicd,
+ EFI_ACPI_6_5_GIC_DISTRIBUTOR_STRUCTURE *CONST Gicd,
CONST CM_ARM_GICD_INFO *CONST GicDInfo
)
{
@@ -260,9 +265,9 @@ AddGICD (
ASSERT (GicDInfo != NULL);
// UINT8 Type
- Gicd->Type = EFI_ACPI_6_3_GICD;
+ Gicd->Type = EFI_ACPI_6_5_GICD;
// UINT8 Length
- Gicd->Length = sizeof (EFI_ACPI_6_3_GIC_DISTRIBUTOR_STRUCTURE);
+ Gicd->Length = sizeof (EFI_ACPI_6_5_GIC_DISTRIBUTOR_STRUCTURE);
// UINT16 Reserved
Gicd->Reserved1 = EFI_ACPI_RESERVED_WORD;
// UINT32 Identifier
@@ -289,15 +294,15 @@ AddGICD (
STATIC
VOID
AddGICMsiFrame (
- IN EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE *CONST GicMsiFrame,
+ IN EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE *CONST GicMsiFrame,
IN CONST CM_ARM_GIC_MSI_FRAME_INFO *CONST GicMsiFrameInfo
)
{
ASSERT (GicMsiFrame != NULL);
ASSERT (GicMsiFrameInfo != NULL);
- GicMsiFrame->Type = EFI_ACPI_6_3_GIC_MSI_FRAME;
- GicMsiFrame->Length = sizeof (EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE);
+ GicMsiFrame->Type = EFI_ACPI_6_5_GIC_MSI_FRAME;
+ GicMsiFrame->Length = sizeof (EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE);
GicMsiFrame->Reserved1 = EFI_ACPI_RESERVED_WORD;
GicMsiFrame->GicMsiFrameId = GicMsiFrameInfo->GicMsiFrameId;
GicMsiFrame->PhysicalBaseAddress = GicMsiFrameInfo->PhysicalBaseAddress;
@@ -316,7 +321,7 @@ AddGICMsiFrame (
STATIC
VOID
AddGICMsiFrameInfoList (
- IN EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE *GicMsiFrame,
+ IN EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE *GicMsiFrame,
IN CONST CM_ARM_GIC_MSI_FRAME_INFO *GicMsiFrameInfo,
IN UINT32 GicMsiFrameCount
)
@@ -337,15 +342,15 @@ AddGICMsiFrameInfoList (
STATIC
VOID
AddGICRedistributor (
- IN EFI_ACPI_6_3_GICR_STRUCTURE *CONST Gicr,
+ IN EFI_ACPI_6_5_GICR_STRUCTURE *CONST Gicr,
IN CONST CM_ARM_GIC_REDIST_INFO *CONST GicRedistributorInfo
)
{
ASSERT (Gicr != NULL);
ASSERT (GicRedistributorInfo != NULL);
- Gicr->Type = EFI_ACPI_6_3_GICR;
- Gicr->Length = sizeof (EFI_ACPI_6_3_GICR_STRUCTURE);
+ Gicr->Type = EFI_ACPI_6_5_GICR;
+ Gicr->Length = sizeof (EFI_ACPI_6_5_GICR_STRUCTURE);
Gicr->Reserved = EFI_ACPI_RESERVED_WORD;
Gicr->DiscoveryRangeBaseAddress =
GicRedistributorInfo->DiscoveryRangeBaseAddress;
@@ -361,7 +366,7 @@ AddGICRedistributor (
STATIC
VOID
AddGICRedistributorList (
- IN EFI_ACPI_6_3_GICR_STRUCTURE *Gicr,
+ IN EFI_ACPI_6_5_GICR_STRUCTURE *Gicr,
IN CONST CM_ARM_GIC_REDIST_INFO *GicRInfo,
IN UINT32 GicRCount
)
@@ -382,15 +387,15 @@ AddGICRedistributorList (
STATIC
VOID
AddGICInterruptTranslationService (
- IN EFI_ACPI_6_3_GIC_ITS_STRUCTURE *CONST GicIts,
+ IN EFI_ACPI_6_5_GIC_ITS_STRUCTURE *CONST GicIts,
IN CONST CM_ARM_GIC_ITS_INFO *CONST GicItsInfo
)
{
ASSERT (GicIts != NULL);
ASSERT (GicItsInfo != NULL);
- GicIts->Type = EFI_ACPI_6_3_GIC_ITS;
- GicIts->Length = sizeof (EFI_ACPI_6_3_GIC_ITS_STRUCTURE);
+ GicIts->Type = EFI_ACPI_6_5_GIC_ITS;
+ GicIts->Length = sizeof (EFI_ACPI_6_5_GIC_ITS_STRUCTURE);
GicIts->Reserved = EFI_ACPI_RESERVED_WORD;
GicIts->GicItsId = GicItsInfo->GicItsId;
GicIts->PhysicalBaseAddress = GicItsInfo->PhysicalBaseAddress;
@@ -407,7 +412,7 @@ AddGICInterruptTranslationService (
STATIC
VOID
AddGICItsList (
- IN EFI_ACPI_6_3_GIC_ITS_STRUCTURE *GicIts,
+ IN EFI_ACPI_6_5_GIC_ITS_STRUCTURE *GicIts,
IN CONST CM_ARM_GIC_ITS_INFO *GicItsInfo,
IN UINT32 GicItsCount
)
@@ -470,7 +475,7 @@ BuildMadtTable (
UINT32 GicRedistOffset;
UINT32 GicItsOffset;
- EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *Madt;
+ EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *Madt;
ASSERT (This != NULL);
ASSERT (AcpiTableInfo != NULL);
@@ -602,22 +607,22 @@ BuildMadtTable (
goto error_handler;
}
- TableSize = sizeof (EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER);
+ TableSize = sizeof (EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER);
GicCOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GIC_STRUCTURE) * GicCCount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GIC_STRUCTURE) * GicCCount);
GicDOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GIC_DISTRIBUTOR_STRUCTURE) * GicDCount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GIC_DISTRIBUTOR_STRUCTURE) * GicDCount);
GicMSIOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE) * GicMSICount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE) * GicMSICount);
GicRedistOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GICR_STRUCTURE) * GicRedistCount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GICR_STRUCTURE) * GicRedistCount);
GicItsOffset = TableSize;
- TableSize += (sizeof (EFI_ACPI_6_3_GIC_ITS_STRUCTURE) * GicItsCount);
+ TableSize += (sizeof (EFI_ACPI_6_5_GIC_ITS_STRUCTURE) * GicItsCount);
// Allocate the Buffer for MADT table
*Table = (EFI_ACPI_DESCRIPTION_HEADER *)AllocateZeroPool (TableSize);
@@ -633,7 +638,7 @@ BuildMadtTable (
goto error_handler;
}
- Madt = (EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *)*Table;
+ Madt = (EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *)*Table;
DEBUG ((
DEBUG_INFO,
@@ -659,7 +664,7 @@ BuildMadtTable (
}
Status = AddGICCList (
- (EFI_ACPI_6_3_GIC_STRUCTURE *)((UINT8 *)Madt + GicCOffset),
+ (EFI_ACPI_6_5_GIC_STRUCTURE *)((UINT8 *)Madt + GicCOffset),
GicCInfo,
GicCCount,
Madt->Header.Revision
@@ -674,13 +679,13 @@ BuildMadtTable (
}
AddGICD (
- (EFI_ACPI_6_3_GIC_DISTRIBUTOR_STRUCTURE *)((UINT8 *)Madt + GicDOffset),
+ (EFI_ACPI_6_5_GIC_DISTRIBUTOR_STRUCTURE *)((UINT8 *)Madt + GicDOffset),
GicDInfo
);
if (GicMSICount != 0) {
AddGICMsiFrameInfoList (
- (EFI_ACPI_6_3_GIC_MSI_FRAME_STRUCTURE *)((UINT8 *)Madt + GicMSIOffset),
+ (EFI_ACPI_6_5_GIC_MSI_FRAME_STRUCTURE *)((UINT8 *)Madt + GicMSIOffset),
GicMSIInfo,
GicMSICount
);
@@ -688,7 +693,7 @@ BuildMadtTable (
if (GicRedistCount != 0) {
AddGICRedistributorList (
- (EFI_ACPI_6_3_GICR_STRUCTURE *)((UINT8 *)Madt + GicRedistOffset),
+ (EFI_ACPI_6_5_GICR_STRUCTURE *)((UINT8 *)Madt + GicRedistOffset),
GicRedistInfo,
GicRedistCount
);
@@ -696,7 +701,7 @@ BuildMadtTable (
if (GicItsCount != 0) {
AddGICItsList (
- (EFI_ACPI_6_3_GIC_ITS_STRUCTURE *)((UINT8 *)Madt + GicItsOffset),
+ (EFI_ACPI_6_5_GIC_ITS_STRUCTURE *)((UINT8 *)Madt + GicItsOffset),
GicItsInfo,
GicItsCount
);
@@ -764,9 +769,9 @@ ACPI_TABLE_GENERATOR MadtGenerator = {
// Generator Description
L"ACPI.STD.MADT.GENERATOR",
// ACPI Table Signature
- EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
+ EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
// ACPI Table Revision supported by this Generator
- EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
+ EFI_ACPI_6_5_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
// Minimum supported ACPI Table Revision
EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
// Creator ID
--
'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)'
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#109004): https://edk2.groups.io/g/devel/message/109004
Mute This Topic: https://groups.io/mt/101522272/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
next prev parent reply other threads:[~2023-09-22 14:35 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-22 14:35 [edk2-devel] [PATCH v3 00/11] Update MADT for ACPI 6.5, and add TRBE & ETE support Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 01/13] MdePkg: MADT: Add Online capable flag in GICC Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 02/13] MdePkg: MADT: Add TRBE interrupt to GICC Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 03/13] DynamicTablesPkg: Add TRBE interrupt to GICC object Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 04/13] DynamicTablesPkg: Add TRBE interrupt to GICC object parser Sami Mujawar
2023-09-22 14:35 ` Sami Mujawar [this message]
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 06/13] DynamicTablesPkg: Update FADT generator to ACPI 6.5 Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 07/13] ShellPkg: Acpiview: Update MADT parser for TRBE interrupt Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 08/13] DynamicTablesPkg: Add an ET info object to Arm namespace Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 09/13] DynamicTablesPkg: Add an ET info object parser Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 10/13] DynamicTablesPkg: Add ETE device to CPU node in AML Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 11/13] DynamicTablesPkg: Fix referencing of CPC token Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 12/13] ArmPkg/ArmLib: Add ArmHasTrbe () helper function Sami Mujawar
2023-09-22 14:35 ` [edk2-devel] [PATCH v3 13/13] ArmPkg/ArmLib: Add ArmHasEte " Sami Mujawar
2023-09-22 14:50 ` [edk2-devel] [PATCH v3 00/11] Update MADT for ACPI 6.5, and add TRBE & ETE support PierreGondois
2023-10-23 15:30 ` Jeshua Smith via groups.io
2023-10-24 8:43 ` Sami Mujawar
2023-10-26 9:08 ` Gao, Zhichao
2023-10-30 14:16 ` Sami Mujawar
2023-09-22 16:19 ` Leif Lindholm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230922143516.4764-6-sami.mujawar@arm.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox