[edk2-devel] [Patch V2] MinPlatformPkg: Check if Acpi table is already installed.

Ni, Ray ray.ni at intel.com
Wed Dec 8 06:41:31 UTC 2021


Nate,
I don't consider it as a hack. UefiPayloadPkg requires that bootloader produces all ACPI tables.
Now we are in a middle stage. So, only the MCFG and FADT are produced (as gUniversalPayloadAcpiTableGuid HOB) in PEI phase.

Thanks,
Ray


-----Original Message-----
From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Nate DeSimone
Sent: Wednesday, December 8, 2021 10:06 AM
To: Sravanthi, K KavyaX <k.kavyax.sravanthi at intel.com>; devel at edk2.groups.io
Cc: Chiu, Chasel <chasel.chiu at intel.com>; Liming Gao <gaoliming at byosoft.com.cn>; Dong, Eric <eric.dong at intel.com>; Oram, Isaac W <isaac.w.oram at intel.com>; Michael Kubacki <michael.kubacki at microsoft.com>
Subject: Re: [edk2-devel] [Patch V2] MinPlatformPkg: Check if Acpi table is already installed.

This seems like a hack to me. One of the major goals of the Minimum Platform Architecture is consistency. A board override for the MinPlatform provided installation of the MCFG table runs counter to that goal. Every field in the MCFG table produced by MinPlatform's implementation is fully customizable by board code via the PciSegmentInfoLib's GetPciSegmentInfo() function. If a multi-segment MCFG table is needed, then all the board needs to do is choose a different implementation of PciSegmentInfoLib than the default one (MinPlatformPkg\Pci\Library\PciSegmentInfoLibSimple\PciSegmentInfoLibSimple.inf)

I cannot conceive of any reason why a board override of this functionality is required. Why do you need this? 

-----Original Message-----
From: Sravanthi, K KavyaX <k.kavyax.sravanthi at intel.com> 
Sent: Sunday, December 5, 2021 10:16 PM
To: devel at edk2.groups.io
Cc: Sravanthi, K KavyaX <k.kavyax.sravanthi at intel.com>; Chiu, Chasel <chasel.chiu at intel.com>; Desimone, Nathaniel L <nathaniel.l.desimone at intel.com>; Liming Gao <gaoliming at byosoft.com.cn>; Dong, Eric <eric.dong at intel.com>
Subject: [Patch V2] MinPlatformPkg: Check if Acpi table is already installed.

Check if Acpi table is already installed by locating the first ACPI table in XSDT/RSDT based on Signature

Cc: Chasel Chiu <chasel.chiu at intel.com>
Cc: Nate DeSimone <nathaniel.l.desimone at intel.com>
Cc: Liming Gao <gaoliming at byosoft.com.cn>
Cc: Eric Dong <eric.dong at intel.com>
Signed-off-by: kavya <k.kavyax.sravanthi at intel.com>
Reviewed-by: Zhiguang Liu <zhiguang.liu at intel.com>
---
 Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c
index 785cf4c2f9..dcbb8b7c7f 100644
--- a/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c
+++ b/Platform/Intel/MinPlatformPkg/Acpi/AcpiTables/AcpiPlatform.c
@@ -1048,12 +1048,21 @@ InstallMcfgFromScratch (  {
   EFI_STATUS                                                                            Status;
   EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_HEADER                        *McfgTable;
+  EFI_ACPI_COMMON_HEADER                                                                *Mcfg;
   EFI_ACPI_MEMORY_MAPPED_ENHANCED_CONFIGURATION_SPACE_BASE_ADDRESS_ALLOCATION_STRUCTURE *Segment;
   UINTN                                                                                 Index;
   UINTN                                                                                 SegmentCount;
   PCI_SEGMENT_INFO                                                                      *PciSegmentInfo;
   UINTN                                                                                 TableHandle;
 
+  Mcfg = (EFI_ACPI_COMMON_HEADER *) EfiLocateFirstAcpiTable (
+                                      EFI_ACPI_3_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE
+                                      );  if (Mcfg != NULL) {
+    DEBUG ((DEBUG_INFO, "MCFG table already installed\n"));
+    return EFI_SUCCESS;
+  }
+
   PciSegmentInfo = GetPciSegmentInfo (&SegmentCount);
 
   McfgTable = AllocateZeroPool (
@@ -1365,6 +1374,7 @@ UpdateLocalTable (  {
   EFI_STATUS                    Status;
   EFI_ACPI_COMMON_HEADER        *CurrentTable;
+  EFI_ACPI_COMMON_HEADER        *Table;
   EFI_ACPI_TABLE_VERSION        Version;
   UINTN                         TableHandle;
   UINTN                         Index;
@@ -1372,6 +1382,14 @@ UpdateLocalTable (
   for (Index = 0; Index < sizeof(mLocalTable)/sizeof(mLocalTable[0]); Index++) {
     CurrentTable = mLocalTable[Index];
 
+    Table = (EFI_ACPI_COMMON_HEADER *) EfiLocateFirstAcpiTable (CurrentTable->Signature);
+    if (Table != NULL) {
+      DEBUG ((DEBUG_INFO, "Acpi table with signature=%c%c%c%c already installed\n",
+            ((CHAR8*)&CurrentTable->Signature)[0], ((CHAR8*)&CurrentTable->Signature)[1],
+            ((CHAR8*)&CurrentTable->Signature)[2], ((CHAR8*)&CurrentTable->Signature)[3]));
+      continue;
+    }
+
     PlatformUpdateTables (CurrentTable, &Version);
 
     TableHandle = 0;
--
2.16.2.windows.1








-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#84489): https://edk2.groups.io/g/devel/message/84489
Mute This Topic: https://groups.io/mt/87535133/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list