OpenDuet: Fix handoff of ACPI v1.0 (#585)

This is long-standing bug, going back to the transition from
EFI to UEFI (tianore/edk to tianocore/edk2).

The default ACPI level was changed from 1.0 to 2.0, but this
code in Duet was not changed to match.

Signed-off-by: Mike Beaton <mjsbeaton@gmail.com>
This commit is contained in:
Mike Beaton 2025-10-10 00:15:30 +01:00 committed by GitHub
parent 6e20078ec5
commit ec2713af48
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 15 additions and 8 deletions

View File

@ -280,7 +280,7 @@ HOB_TEMPLATE gHobTemplate = {
sizeof (TABLE_HOB), // Hob size
0 // reserved
},
EFI_ACPI_TABLE_GUID
ACPI_10_TABLE_GUID
},
0
},

View File

@ -199,7 +199,7 @@ FindAcpiPtr (
//
// Check ACPI2.0 table
//
if ((int)Hob->Acpi20.Table != -1) {
if ((int)Hob->Acpi20.Table != 0) {
Rsdp = (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)(UINTN)Hob->Acpi20.Table;
Rsdt = (RSDT_TABLE *)(UINTN)Rsdp->RsdtAddress;
Xsdt = NULL;
@ -225,7 +225,7 @@ FindAcpiPtr (
//
// Check ACPI1.0 table
//
if ((AcpiTable == NULL) && ((int)Hob->Acpi.Table != -1)) {
if ((AcpiTable == NULL) && ((int)Hob->Acpi.Table != 0)) {
Rsdp = (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)(UINTN)Hob->Acpi.Table;
Rsdt = (RSDT_TABLE *)(UINTN)Rsdp->RsdtAddress;
//
@ -435,8 +435,16 @@ PrepareHobLegacyTable (
IN HOB_TEMPLATE *Hob
)
{
Hob->Acpi.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)FindAcpiRsdPtr ();
Hob->Acpi20.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)FindAcpiRsdPtr ();
EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *AcpiRsdPtr;
AcpiRsdPtr = FindAcpiRsdPtr ();
Hob->Acpi.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)AcpiRsdPtr;
if ((AcpiRsdPtr != NULL) && (AcpiRsdPtr->Revision >= 2)) {
Hob->Acpi20.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)AcpiRsdPtr;
} else {
Hob->Acpi20.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)NULL;
}
Hob->Smbios.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)FindSMBIOSPtr ();
Hob->Mps.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)FindMPSPtr ();

View File

@ -42,7 +42,7 @@ Abstract:
EFI_GUID *gTableGuidArray[] = {
&gEfiAcpi10TableGuid,
&gEfiAcpiTableGuid,
&gEfiAcpi20TableGuid,
&gEfiSmbiosTableGuid,
&gEfiSmbios3TableGuid
};
@ -239,7 +239,7 @@ Returns:
//
AcpiHeader = (VOID *)(UINTN)(*(UINT64 *)(*Table));
if (CompareGuid (TableGuid, &gEfiAcpiTableGuid) || CompareGuid (TableGuid, &gEfiAcpi20TableGuid)) {
if (CompareGuid (TableGuid, &gEfiAcpi10TableGuid) || CompareGuid (TableGuid, &gEfiAcpi20TableGuid)) {
if (((EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiHeader)->Reserved == 0x00) {
//
// If Acpi 1.0 Table, then RSDP structure doesn't contain Length field, use structure size

View File

@ -63,7 +63,6 @@
gEfiAcpi20TableGuid
gEfiSmbiosTableGuid
gEfiSmbios3TableGuid
gEfiAcpiTableGuid
gLdrMemoryDescriptorGuid
[Protocols]