If platform version < 0.3 then we want EHCI. Otherwise XHCI needs to be
present.

The problem:

LocateAndInstallAcpiFromFvConditional() gets only DBG2 and FACP tables.
Looks like synchronization issue as there were moments when it got all
present tables.

Anyway even if all goes well then SSDT nodes for both XHCI and EHCI were
present in resulting system.
---
 Platform/Qemu/SbsaQemu/SbsaQemu.dsc                  |  2 +
 .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf      |  3 +
 .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c        | 62 ++++++++++++++++++++
 3 files changed, 67 insertions(+)

diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc 
b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc
index 3900fed0c7dc..80ea4ed2edd2 100644
--- a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc
+++ b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc
@@ -172,6 +172,8 @@ [LibraryClasses.common]
 
   
ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseReportStatusCodeLibNull.inf
 
+  AcpiLib|EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
+
   ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
   ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
 
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf 
b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
index 7c7e08e0fd3a..c67f9a92fd4c 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
@@ -29,6 +29,7 @@ [Packages]
   Silicon/Qemu/SbsaQemu/SbsaQemu.dec
 
 [LibraryClasses]
+  AcpiLib
   ArmLib
   BaseMemoryLib
   BaseLib
@@ -50,6 +51,8 @@ [Pcd]
   gArmTokenSpaceGuid.PcdGicRedistributorsBase
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdGicItsBase
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdSmmuBase
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMajor
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMinor
 
 [Depex]
   gEfiAcpiTableProtocolGuid                       ## CONSUMES
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c 
b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
index fd849ca1594b..b103111606e3 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
@@ -10,6 +10,7 @@
 #include <IndustryStandard/AcpiAml.h>
 #include <IndustryStandard/IoRemappingTable.h>
 #include <IndustryStandard/SbsaQemuAcpi.h>
+#include <IndustryStandard/SbsaQemuPlatformVersion.h>
 #include <Library/AcpiLib.h>
 #include <Library/ArmLib.h>
 #include <Library/BaseMemoryLib.h>
@@ -26,6 +27,14 @@
 
 #pragma pack(1)
 
+/*
+ * The GUID inside Silicon/Qemu/SbsaQemu/AcpiTables/AcpiTables.inf _must_ match
+ * below.
+ */
+STATIC CONST EFI_GUID mAcpiTableFile = {
+  0x7E374E25, 0x8E01, 0x4FEE, { 0x87, 0xf2, 0x39, 0x0C, 0x23, 0xC6, 0x06, 0xCD 
}
+  //7E374E25-8E01-4FEE-87F2-390C23C606CD
+};
 
 static UINTN GicItsBase;
 
@@ -682,6 +691,55 @@ AddGtdtTable (
   return Status;
 }
 
+//
+// Monitor the ACPI tables being installed and when
+// a DSDT/SSDT is detected check do we want to enable
+// EHCI or XHCI USB controller
+//
+STATIC
+BOOLEAN
+HandleDynamicNamespace (
+  IN  EFI_ACPI_DESCRIPTION_HEADER   *AcpiHeader
+  )
+{
+  switch (AcpiHeader->Signature) {
+  case SIGNATURE_32 ('D', 'S', 'D', 'T'):
+  case SIGNATURE_32 ('S', 'S', 'D', 'T'):
+    if (AcpiHeader->OemTableId == SIGNATURE_64 ('S', 'B', 'S', 'A', 'X', 'H', 
'C', 'I'))
+    {
+      DEBUG ((DEBUG_ERROR, "HRW: XHCI\n"));
+      if (! PLATFORM_VERSION_LESS_THAN(0, 3) )
+      {
+
+      DEBUG ((DEBUG_ERROR, "HRW: XHCI enabled\n"));
+        return TRUE;
+      }
+      else
+      {
+        DEBUG ((DEBUG_ERROR, "HRW: XHCI disabled\n"));
+        return FALSE;
+      }
+    }
+    if (AcpiHeader->OemTableId == SIGNATURE_64 ('S', 'B', 'S', 'A', 'E', 'H', 
'C', 'I'))
+    {
+      DEBUG ((DEBUG_ERROR, "HRW: EHCI\n"));
+      if ( PLATFORM_VERSION_LESS_THAN(0, 3) )
+      {
+
+      DEBUG ((DEBUG_ERROR, "HRW: EHCI enabled\n"));
+        return TRUE;
+      }
+      else
+      {
+        DEBUG ((DEBUG_ERROR, "HRW: EHCI disabled\n"));
+        return FALSE;
+      }
+    }
+  }
+
+  return TRUE;
+}
+
 EFI_STATUS
 EFIAPI
 InitializeSbsaQemuAcpiDxe (
@@ -738,5 +796,9 @@ InitializeSbsaQemuAcpiDxe (
     DEBUG ((DEBUG_ERROR, "Failed to add GTDT table\n"));
   }
 
+  Status = LocateAndInstallAcpiFromFvConditional (&mAcpiTableFile,
+                                                  &HandleDynamicNamespace);
+  ASSERT_EFI_ERROR (Status);
+
   return EFI_SUCCESS;
 }

-- 
2.41.0



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#109591): https://edk2.groups.io/g/devel/message/109591
Mute This Topic: https://groups.io/mt/101938744/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to