public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Jeshua Smith via groups.io" <jeshuas=nvidia.com@groups.io>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
	"sami.mujawar@arm.com" <sami.mujawar@arm.com>
Cc: "pierre.gondois@arm.com" <pierre.gondois@arm.com>,
	"Anshuman.Khandual@arm.com" <Anshuman.Khandual@arm.com>,
	"Matteo.Carlini@arm.com" <Matteo.Carlini@arm.com>,
	"Akanksha.Jain2@arm.com" <Akanksha.Jain2@arm.com>,
	"Sibel.Allinson@arm.com" <Sibel.Allinson@arm.com>,
	"nd@arm.com" <nd@arm.com>
Subject: Re: [edk2-devel] [PATCH v1 05/11] DynamicTablesPkg: Update MADT generator for ACPI 6.5
Date: Tue, 1 Aug 2023 15:44:00 +0000	[thread overview]
Message-ID: <DM6PR12MB3371D7D0FE4B35DA4C2A22F0DB0AA@DM6PR12MB3371.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20230725102758.28132-6-sami.mujawar@arm.com>

It looks like you are setting the wrong field here (should be TrbeInterrupt, not SpeOverflowInterrupt):
+    // Setting TrbeInterrupt to 0 ensures backward compatibility with
+    // ACPI 6.4
+    Gicc->SpeOverflowInterrupt = 0;

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Sami Mujawar via groups.io
Sent: Tuesday, July 25, 2023 4:28 AM
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; nd@arm.com
Subject: [edk2-devel] [PATCH v1 05/11] DynamicTablesPkg: Update MADT generator for ACPI 6.5

External email: Use caution opening links or attachments


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>
---
 DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c | 83 +++++++++++---------
 1 file changed, 46 insertions(+), 37 deletions(-)

diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/MadtGenerator.c
index 2102a59faf498eaab7777c509443461ada999610..c90548bc97aa1b086f21c8378f242b2b073307f3 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,15 @@ 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;  } else {
+    // Setting TrbeInterrupt to 0 ensures backward compatibility with
+    // ACPI 6.4
+    Gicc->SpeOverflowInterrupt = 0;
+  }
 }

 /**
@@ -214,7 +223,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 +261,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 +269,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 +298,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 +325,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 +346,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 +370,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 +391,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 +416,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 +479,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 +611,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 +642,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 +668,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 +683,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 +697,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 +705,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 +773,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 (#107427): https://edk2.groups.io/g/devel/message/107427
Mute This Topic: https://groups.io/mt/100347387/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



  reply	other threads:[~2023-08-01 15:44 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-25 10:27 [edk2-devel] [PATCH v1 00/11] Update MADT for ACPI 6.5, and add TRBE & ETE support Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 01/11] MdePkg: MADT: Add Online capable flag in GICC Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 02/11] MdePkg: MADT: Add TRBE interrupt to GICC Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 03/11] DynamicTablesPkg: Add TRBE interrupt to GICC object Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 04/11] DynamicTablesPkg: Add TRBE interrupt to GICC object parser Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 05/11] DynamicTablesPkg: Update MADT generator for ACPI 6.5 Sami Mujawar
2023-08-01 15:44   ` Jeshua Smith via groups.io [this message]
2023-08-03  7:07     ` Sami Mujawar
2023-09-11 16:58       ` Jeshua Smith via groups.io
2023-09-11 17:59         ` Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 06/11] DynamicTablesPkg: Update FADT generator to " Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 07/11] ShellPkg: Acpiview: Update MADT parser for TRBE interrupt Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 08/11] DynamicTablesPkg: Add an ET info object to Arm namespace Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 09/11] DynamicTablesPkg: Add an ET info object parser Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 10/11] DynamicTablesPkg: Add ETE device to CPU node in AML Sami Mujawar
2023-07-25 10:27 ` [edk2-devel] [PATCH v1 11/11] DynamicTablesPkg: Fix referencing of CPC token Sami Mujawar

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=DM6PR12MB3371D7D0FE4B35DA4C2A22F0DB0AA@DM6PR12MB3371.namprd12.prod.outlook.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