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] -=-=-=-=-=-=-=-=-=-=-=-