Ard, This patch was applied to the "tip" (as of Mar 24), so the changes you referred to were already taken into account. Moreover, this patch enforces that tables do *not* get copied in memory space below 4GB's, if so desired (by setting a PCD).
Thanks, Leo. -----Original Message----- From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] Sent: Thursday, March 24, 2016 4:10 PM To: Duran, Leo Cc: edk2-devel@lists.01.org; Leif Lindholm; Leendert van Doorn Subject: Re: [PATCH] MdeModulePkg: support for ACPI tables only above 4GB's On 24 March 2016 at 21:30, Leo Duran <leo.du...@amd.com> wrote: > From: Leendert van Doorn <leend...@paramecium.org> > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Leo Duran <leo.du...@amd.com> I already fixed this issue upstream. Please refer to f9bbb8d9c3f0 MdeModulePkg: AcpiTableDxe: make 4 GB table allocation limit optional You will need to add this to the Seattle .DSCs gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x20 > --- > MdeModulePkg/MdeModulePkg.dec | 6 ++++ > .../Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf | 3 +- > .../Acpi/AcpiTableDxe/AcpiTableProtocol.c | 41 > ++++++++++++++-------- > 3 files changed, 35 insertions(+), 15 deletions(-) > > diff --git a/MdeModulePkg/MdeModulePkg.dec > b/MdeModulePkg/MdeModulePkg.dec index 1a20561..61db352 100644 > --- a/MdeModulePkg/MdeModulePkg.dec > +++ b/MdeModulePkg/MdeModulePkg.dec > @@ -651,6 +651,12 @@ > # @Prompt Enable PEI StatusCode replay in DXE phase > > gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeReplayIn|FALSE|BOOLEAN|0x0 > 001002d > > + ## Indicates if ACPI will create an RSDT and XSDT table.<BR><BR> > + ## The RSDT contains 32-bit points and hence has to lie in 0-4GB > + memory.<BR> ## Setting this to TRUE will only generate an XSDT with > + 64-bit pointers.<BR> # @Prompt Enable ACPI 64-bit pointers. > + > + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiNo32BitAddressSupport|FALSE|BO > + OLEAN|0x0001002e > + > ## Indicates if ACPI SDT protocol will be installed.<BR><BR> > # TRUE - Installs ACPI SDT protocol.<BR> > # FALSE - Does not install ACPI SDT protocol.<BR> > diff --git a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > index 3ec39c0..aff7599 100644 > --- a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > +++ b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > @@ -60,7 +60,8 @@ > gEfiAcpiTableGuid ## PRODUCES ## SystemTable > > [FeaturePcd] > - gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol ## > CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol ## CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiNo32BitAddressSupport ## CONSUMES > > [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultOemId ## CONSUMES > diff --git > a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > index 7f95b9d..7872c2b 100644 > --- a/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > +++ b/MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableProtocol.c > @@ -167,7 +167,8 @@ PublishTables ( > // Add the RSD_PTR to the system table and store that we have installed the > // tables. > // > - if ((Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0) { > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport) && > + (Version & EFI_ACPI_TABLE_VERSION_1_0B) != 0) { > Status = gBS->InstallConfigurationTable (&gEfiAcpi10TableGuid, > AcpiTableInstance->Rsdp1); > if (EFI_ERROR (Status)) { > return EFI_ABORTED; > @@ -393,7 +394,8 @@ ReallocateAcpiTableBuffer ( > // > // Update RSDP to point to the new Rsdt and Xsdt address. > // > - if ((PcdGet32 (PcdAcpiExposedTableVersions) & > EFI_ACPI_TABLE_VERSION_1_0B) != 0) { > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport) && > + (PcdGet32 (PcdAcpiExposedTableVersions) & > + EFI_ACPI_TABLE_VERSION_1_0B) != 0) { > AcpiTableInstance->Rsdp1->RsdtAddress = (UINT32) (UINTN) > AcpiTableInstance->Rsdt1; > AcpiTableInstance->Rsdp3->RsdtAddress = (UINT32) (UINTN) > AcpiTableInstance->Rsdt3; > } > @@ -518,7 +520,7 @@ AddTableToList ( > // > ASSERT ((EFI_PAGE_SIZE % 64) == 0); > Status = gBS->AllocatePages ( > - AllocateMaxAddress, > + mAcpiTableAllocType, > EfiACPIMemoryNVS, > CurrentTableList->NumberOfPages, > &CurrentTableList->PageAddress @@ -593,8 +595,10 > @@ AddTableToList ( > // > // Update pointers in FADT. If tables don't exist this will put NULL > pointers there. > // > - AcpiTableInstance->Fadt1->FirmwareCtrl = (UINT32) (UINTN) > AcpiTableInstance->Facs1; > - AcpiTableInstance->Fadt1->Dsdt = (UINT32) (UINTN) > AcpiTableInstance->Dsdt1; > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport)) { > + AcpiTableInstance->Fadt1->FirmwareCtrl = (UINT32) (UINTN) > AcpiTableInstance->Facs1; > + AcpiTableInstance->Fadt1->Dsdt = (UINT32) (UINTN) > AcpiTableInstance->Dsdt1; > + } > > // > // RSDP OEM information is updated to match the FADT OEM > information @@ -633,7 +637,8 @@ AddTableToList ( > // Note: If the FIRMWARE_CTRL is non-zero, then X_FIRMWARE_CTRL must > be zero, and > // vice-versa. > // > - if ((UINT64)(UINTN)AcpiTableInstance->Facs3 < BASE_4GB) { > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport) && > + (UINT64)(UINTN)AcpiTableInstance->Facs3 < BASE_4GB) { > AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) > AcpiTableInstance->Facs3; > ZeroMem (&AcpiTableInstance->Fadt3->XFirmwareCtrl, sizeof (UINT64)); > } else { > @@ -645,7 +650,8 @@ AddTableToList ( > ); > AcpiTableInstance->Fadt3->FirmwareCtrl = 0; > } > - if ((UINT64)(UINTN)AcpiTableInstance->Dsdt3 < BASE_4GB) { > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport) && > + (UINT64)(UINTN)AcpiTableInstance->Dsdt3 < BASE_4GB) { > AcpiTableInstance->Fadt3->Dsdt = (UINT32) (UINTN) > AcpiTableInstance->Dsdt3; > ZeroMem (&AcpiTableInstance->Fadt3->XDsdt, sizeof (UINT64)); > } else { > @@ -741,7 +747,8 @@ AddTableToList ( > // If FADT already exists, update table pointers. > // > if (AcpiTableInstance->Fadt1 != NULL) { > - AcpiTableInstance->Fadt1->FirmwareCtrl = (UINT32) (UINTN) > AcpiTableInstance->Facs1; > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport)) > + AcpiTableInstance->Fadt1->FirmwareCtrl = (UINT32) (UINTN) > + AcpiTableInstance->Facs1; > > // > // Checksum FADT table > @@ -769,7 +776,8 @@ AddTableToList ( > // Note: If the FIRMWARE_CTRL is non-zero, then X_FIRMWARE_CTRL must > be zero, and > // vice-versa. > // > - if ((UINT64)(UINTN)AcpiTableInstance->Facs3 < BASE_4GB) { > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport) && > + (UINT64)(UINTN)AcpiTableInstance->Facs3 < BASE_4GB) { > AcpiTableInstance->Fadt3->FirmwareCtrl = (UINT32) (UINTN) > AcpiTableInstance->Facs3; > ZeroMem (&AcpiTableInstance->Fadt3->XFirmwareCtrl, sizeof > (UINT64)); > } else { > @@ -825,7 +833,8 @@ AddTableToList ( > // If FADT already exists, update table pointers. > // > if (AcpiTableInstance->Fadt1 != NULL) { > - AcpiTableInstance->Fadt1->Dsdt = (UINT32) (UINTN) > AcpiTableInstance->Dsdt1; > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport)) > + AcpiTableInstance->Fadt1->Dsdt = (UINT32) (UINTN) > + AcpiTableInstance->Dsdt1; > > // > // Checksum FADT table > @@ -849,7 +858,8 @@ AddTableToList ( > // If FADT already exists, update table pointers. > // > if (AcpiTableInstance->Fadt3 != NULL) { > - if ((UINT64)(UINTN)AcpiTableInstance->Dsdt3 < BASE_4GB) { > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport) && > + (UINT64)(UINTN)AcpiTableInstance->Dsdt3 < BASE_4GB) { > AcpiTableInstance->Fadt3->Dsdt = (UINT32) (UINTN) > AcpiTableInstance->Dsdt3; > } > Buffer64 = (UINT64) (UINTN) > AcpiTableInstance->Dsdt3; > @@ -1645,7 +1655,8 @@ AcpiTableAcpiTableConstructor ( > // If ACPI v1.0b is among the ACPI versions we aim to support, we have to > // ensure that all memory allocations are below 4 GB. > // > - if ((PcdGet32 (PcdAcpiExposedTableVersions) & > EFI_ACPI_TABLE_VERSION_1_0B) != 0) { > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport) && > + (PcdGet32 (PcdAcpiExposedTableVersions) & > + EFI_ACPI_TABLE_VERSION_1_0B) != 0) { > mAcpiTableAllocType = AllocateMaxAddress; > } else { > mAcpiTableAllocType = AllocateAnyPages; @@ -1744,7 +1755,8 @@ > AcpiTableAcpiTableConstructor ( > CopyMem (&AcpiTableInstance->Rsdp1->Signature, &CurrentData, sizeof > (UINT64)); > CopyMem (AcpiTableInstance->Rsdp1->OemId, PcdGetPtr > (PcdAcpiDefaultOemId), sizeof (AcpiTableInstance->Rsdp1->OemId)); > AcpiTableInstance->Rsdp1->Reserved = EFI_ACPI_RESERVED_BYTE; > - AcpiTableInstance->Rsdp1->RsdtAddress = (UINT32) (UINTN) > AcpiTableInstance->Rsdt1; > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport)) > + AcpiTableInstance->Rsdp1->RsdtAddress = (UINT32) (UINTN) > + AcpiTableInstance->Rsdt1; > } > > CurrentData = > EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE; > @@ -1752,7 +1764,8 @@ AcpiTableAcpiTableConstructor ( > CopyMem (AcpiTableInstance->Rsdp3->OemId, PcdGetPtr (PcdAcpiDefaultOemId), > sizeof (AcpiTableInstance->Rsdp3->OemId)); > AcpiTableInstance->Rsdp3->Revision = > EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION; > AcpiTableInstance->Rsdp3->Length = sizeof > (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER); > - if ((PcdGet32 (PcdAcpiExposedTableVersions) & > EFI_ACPI_TABLE_VERSION_1_0B) != 0) { > + if (!FeaturePcdGet (PcdAcpiNo32BitAddressSupport) && > + (PcdGet32 (PcdAcpiExposedTableVersions) & > + EFI_ACPI_TABLE_VERSION_1_0B) != 0) { > AcpiTableInstance->Rsdp3->RsdtAddress = (UINT32) (UINTN) > AcpiTableInstance->Rsdt3; > } > CurrentData = (UINT64) (UINTN) AcpiTableInstance->Xsdt; > -- > 1.9.1 > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel