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

Reply via email to