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|0x0001002d > > + ## 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|BOOLEAN|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