On Wed, Dec 18, 2019 at 11:41:56 +0000, Pete Batard wrote:
> From: Ard Biesheuvel <ard.biesheu...@linaro.org>
> 
> Add an ACPI_BASIC_MODE_ENABLE flag to produces builds intended to run in
> ACPI mode without any additional requirements (memory limits, acpi=force,
> etc).
> 
> This flag is disabled by default.
> 
> Signed-off-by: Pete Batard <p...@akeo.ie>

Reviewed-by: Leif Lindholm <leif.lindh...@linaro.org>

> ---
>  Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf  | 3 +++
>  Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c | 8 ++++++++
>  Platform/RaspberryPi/RPi4/RPi4.dsc                        | 6 ++++++
>  Platform/RaspberryPi/RPi4/RPi4.fdf                        | 3 +++
>  Platform/RaspberryPi/RPi4/Readme.md                       | 9 +++++++--
>  Platform/RaspberryPi/RaspberryPi.dec                      | 3 +++
>  6 files changed, 30 insertions(+), 2 deletions(-)
> 
> diff --git a/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf 
> b/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf
> index 77cdbe399a06..9abcc2cc0075 100644
> --- a/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf
> +++ b/Platform/RaspberryPi/Library/PlatformLib/PlatformLib.inf
> @@ -59,5 +59,8 @@ [FixedPcd]
>    gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize
>    gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize
>  
> +[FeaturePcd]
> +  gRaspberryPiTokenSpaceGuid.PcdAcpiBasicMode
> +
>  [Ppis]
>    gArmMpCoreInfoPpiGuid
> diff --git a/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c 
> b/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c
> index f8223d1b94e8..4b388465cdde 100644
> --- a/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c
> +++ b/Platform/RaspberryPi/Library/PlatformLib/RaspberryPiMem.c
> @@ -155,6 +155,14 @@ ArmPlatformGetVirtualMemoryMap (
>    VirtualMemoryInfo[Index].Type             = RPI_MEM_UNMAPPED_REGION;
>    VirtualMemoryInfo[Index++].Name           = L"SoC Reserved (283x)";
>  
> +  if (FeaturePcdGet (PcdAcpiBasicMode)) {
> +    //
> +    // Limit the memory to 3 GB to work around the DMA bugs in the SoC 
> without
> +    // having to rely on IORT or _DMA descriptions.
> +    //
> +    SystemMemorySize = MIN(SystemMemorySize, 3U * SIZE_1GB);
> +  }
> +
>    // If we have RAM above the 1 GB mark, declare it
>    if (SystemMemorySize - SIZE_1GB > 0) {
>      VirtualMemoryTable[Index].PhysicalBase  = FixedPcdGet64 
> (PcdExtendedMemoryBase);
> diff --git a/Platform/RaspberryPi/RPi4/RPi4.dsc 
> b/Platform/RaspberryPi/RPi4/RPi4.dsc
> index ccf5bd5b9ef3..02de104df5bf 100644
> --- a/Platform/RaspberryPi/RPi4/RPi4.dsc
> +++ b/Platform/RaspberryPi/RPi4/RPi4.dsc
> @@ -39,6 +39,7 @@ [Defines]
>    DEFINE INCLUDE_TFTP_COMMAND    = FALSE
>    DEFINE DEBUG_PRINT_ERROR_LEVEL = 0x8000004F
>    DEFINE PL011_ENABLE            = FALSE
> +  DEFINE ACPI_BASIC_MODE_ENABLE  = FALSE
>  
>  
> ################################################################################
>  #
> @@ -263,6 +264,8 @@ [PcdsFeatureFlag.common]
>    gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE
>    gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE
>  
> +  gRaspberryPiTokenSpaceGuid.PcdAcpiBasicMode|$(ACPI_BASIC_MODE_ENABLE)
> +
>  [PcdsFixedAtBuild.common]
>    gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000
>    gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000
> @@ -558,12 +561,15 @@ [Components.common]
>    MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
>    MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
>    Platform/RaspberryPi/Drivers/DisplayDxe/DisplayDxe.inf
> +  EmbeddedPkg/Drivers/ConsolePrefDxe/ConsolePrefDxe.inf
>  
>    MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
>  
>    ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
>    Platform/RaspberryPi/Drivers/RpiFirmwareDxe/RpiFirmwareDxe.inf
> +!if $(ACPI_BASIC_MODE_ENABLE) == FALSE
>    Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.inf
> +!endif
>    Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
>    ArmPkg/Drivers/TimerDxe/TimerDxe.inf
>    MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
> diff --git a/Platform/RaspberryPi/RPi4/RPi4.fdf 
> b/Platform/RaspberryPi/RPi4/RPi4.fdf
> index 50fe554ec9ec..2bcfdb3244f6 100644
> --- a/Platform/RaspberryPi/RPi4/RPi4.fdf
> +++ b/Platform/RaspberryPi/RPi4/RPi4.fdf
> @@ -208,10 +208,13 @@ [FV.FvMain]
>    INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
>    INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
>    INF Platform/RaspberryPi/Drivers/DisplayDxe/DisplayDxe.inf
> +  INF EmbeddedPkg/Drivers/ConsolePrefDxe/ConsolePrefDxe.inf
>  
>    INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
>    INF Platform/RaspberryPi/Drivers/RpiFirmwareDxe/RpiFirmwareDxe.inf
> +!if $(ACPI_BASIC_MODE_ENABLE) == FALSE
>    INF Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.inf
> +!endif
>    INF Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
>    INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf
>    INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
> diff --git a/Platform/RaspberryPi/RPi4/Readme.md 
> b/Platform/RaspberryPi/RPi4/Readme.md
> index 2ef38d1b2062..83e901c57b08 100644
> --- a/Platform/RaspberryPi/RPi4/Readme.md
> +++ b/Platform/RaspberryPi/RPi4/Readme.md
> @@ -16,8 +16,9 @@ Raspberry Pi is a trademark of the [Raspberry Pi 
> Foundation](https://www.raspber
>  This firmware is still in development stage, meaning that it comes with the
>  following __major__ limitations:
>  
> -- USB is likely to work only in pre-OS phase at this stage (nonstandard ECAM,
> -  missing ACPI tables).
> +- USB may only work in pre-OS phase at this stage due to nonstandard ECAM,
> +  missing/incomplete ACPI tables as well as other factors. For Linux, using
> +  the `ACPI_BASIC_MODE_ENABLE` build option may help.
>  - Serial I/O from the OS may not work due to CPU throttling affecting the
>    miniUART baudrate. This can be worked around by using the `PL011_ENABLE`
>    compilation option.
> @@ -27,6 +28,10 @@ following __major__ limitations:
>  Build instructions from the top level edk2-platforms Readme.md apply.
>  
>  The following additional build options are also available:
> +- `-D ACPI_BASIC_MODE_ENABLE=1`: Limits OS visible memory to 3 GB and forces
> +  ACPI (by disabling the Device Tree driver altogether). This may be required
> +  to boot Operating Systems such as Linux on account of the current PCIe/xHCI
> +  limitations.
>  - `-D PL011_ENABLE=1`: Selects PL011 for the serial console instead of the
>    miniUART (default). This doesn't change the GPIO pinout for the UART but
>    can be useful if you find that the miniUART baud rate changes when the
> diff --git a/Platform/RaspberryPi/RaspberryPi.dec 
> b/Platform/RaspberryPi/RaspberryPi.dec
> index c7e17350544a..bc378ffbfb8d 100644
> --- a/Platform/RaspberryPi/RaspberryPi.dec
> +++ b/Platform/RaspberryPi/RaspberryPi.dec
> @@ -57,3 +57,6 @@ [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, 
> PcdsDynamicEx]
>    gRaspberryPiTokenSpaceGuid.PcdCustomCpuClock|0|UINT32|0x00000016
>    gRaspberryPiTokenSpaceGuid.PcdDisplayEnableScaledVModes|0|UINT8|0x00000017
>    gRaspberryPiTokenSpaceGuid.PcdDisplayEnableSShot|0|UINT32|0x00000018
> +
> +[PcdsFeatureFlag.common]
> +  gRaspberryPiTokenSpaceGuid.PcdAcpiBasicMode|FALSE|BOOLEAN|0x00000019
> -- 
> 2.21.0.windows.1
> 

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#52349): https://edk2.groups.io/g/devel/message/52349
Mute This Topic: https://groups.io/mt/68791818/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to