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] -=-=-=-=-=-=-=-=-=-=-=-