From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) by mx.groups.io with SMTP id smtpd.web10.8830.1576757698340192908 for ; Thu, 19 Dec 2019 04:15:00 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@akeo-ie.20150623.gappssmtp.com header.s=20150623 header.b=evk6+KxJ; spf=none, err=permanent DNS error (domain: akeo.ie, ip: 209.85.221.50, mailfrom: pete@akeo.ie) Received: by mail-wr1-f50.google.com with SMTP id y11so5748802wrt.6 for ; Thu, 19 Dec 2019 04:14:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=akeo-ie.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MFkgbDMbKazRl17cRP6tUPCC3RFXZUYSLs2baqICc4s=; b=evk6+KxJJqt1BNpS2Ov5WykplIY+m9Qj57cgAe3aZV71jJyQTMH/q6Etk8zzLKnCjC 5pQKkatUcn+4s+QW4Io2CyjALOlEb/YaJzFoxVo9ZHFk+WYqrg79OlAuoXhlUG6HVlOC qQLwkfu56Z2JBjuw1s0OFy/67jSHlsRFq+lDxHaJAlXDU68XWk/I1XbSw4Julj9z5iqj q2gMoiy7GxehPkuvNyFtH4FpU8DBQ5RCM5jsZ2gyySCfBmpn3OIYopEY2N3uL17r7J2o L8U2QjpGJw37U5kQU/4vqoiRJvx/MS+Nm6joKBpBzvJ9Ei3m2q9OH1i7yhMk5DQuqlX3 KTQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MFkgbDMbKazRl17cRP6tUPCC3RFXZUYSLs2baqICc4s=; b=ZRfl55q2lN/2o3hy/j3dISCEWqqENYlP0PZI6nM+6Ty45Cema3V/7bwoz46Q9d3e/u +2Hu82SFTGwGKHgKiFFpgGjOg/qMnJhZC122URsVL3DX6BC09laoQnByJoFfUMCweTnX EH8hmsKiNwQv8w1P8c7AmDUK6b2ya2ca46aDPRR5LRqipyYq5I6NV4LCcD8GtK4ER+Ud gBOyMvtaqAda5so+P71QYOMyGqWoV0WEnWOXr3ygcgoyX09pl8GwepvINVpCTftDbVgk SOJyyGo2Kzb8cT4+KI8EFLpRX3EBrqWx/q84E/IlMGC80/dq/0S354syP6JoQ98qf0hi RLUg== X-Gm-Message-State: APjAAAWYRnnWIIb4uOHg03oNZLSeI48wIOqgkdPZ4gMc2T1xb4DbiYmR uKvsaQ2bJGySo8JfsvFRsOxOYrxFXug= X-Google-Smtp-Source: APXvYqzGvjfmVs0t60bamnaL/MH4k8947eirK0xmsSW9f6DQR+HdJ8YzEgZrrO5MFzwHUsErOun/eg== X-Received: by 2002:adf:ec83:: with SMTP id z3mr8951075wrn.133.1576757696639; Thu, 19 Dec 2019 04:14:56 -0800 (PST) Return-Path: Received: from localhost.localdomain ([84.203.77.210]) by smtp.gmail.com with ESMTPSA id u8sm5823147wmm.15.2019.12.19.04.14.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 Dec 2019 04:14:56 -0800 (PST) From: "Pete Batard" To: devel@edk2.groups.io Cc: ard.biesheuvel@linaro.org, leif.lindholm@linaro.org, philmd@redhat.com Subject: [edk2-platforms][PATCH v2 7/7] Platform/RPi4: Add ACPI basic mode build option Date: Thu, 19 Dec 2019 12:14:34 +0000 Message-Id: <20191219121434.2856-8-pete@akeo.ie> X-Mailer: git-send-email 2.21.0.windows.1 In-Reply-To: <20191219121434.2856-1-pete@akeo.ie> References: <20191219121434.2856-1-pete@akeo.ie> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Ard Biesheuvel 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 Reviewed-by: Leif Lindholm --- 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 acfbfee185b0..74afc0f89451 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