summaryrefslogtreecommitdiff
path: root/Platform/RaspberryPi/RPi3
AgeCommit message (Collapse)AuthorFilesLines
2026-07-21Platform/RaspberryPi: Add GPTLib dependencyThamballi Sreelalitha1-0/+1
Add GPTLib to the affected RaspberryPi platform DSC files to resolve build failures caused by the introduction of the new GPTLib dependency in edk2. Signed-off-by: Thamballi Sreelalitha <sreelali@qti.qualcomm.com>
2026-05-28Global: Switch AArch64 platforms to CpuExceptionHandlerLibVishal Oliyil Kunnil1-2/+1
Replace ArmPkg DefaultExceptionHandlerLib and ArmExceptionLib with UefiCpuPkg/CpuExceptionHandlerLib across AArch64 platforms. Signed-off-by: Vishal Oliyil Kunnil <vishalo@qti.qualcomm.com>
2026-04-17Global: Consume ArmLib from MdePkgOliver Smith-Denny1-1/+1
edk2 is moving ArmLib to MdePkg. Update DSCs accordingly. Signed-off-by: Oliver Smith-Denny <osde@microsoft.com> [ardb: add missed instance in N1SdpPlatform.dsc] Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2025-10-02Platform/RaspberryPi: add default PeilessSecMeasureLibLevi Yun1-0/+1
As edk2 introduce PeilessSecMeasureLib [0], PeilessSec requires to link PeilessSecMeasureLib. Set the default PeilessSecMeasureLib with PeilessSecMeasureNullLib. Link: https://github.com/tianocore/edk2/pull/11344 [0] Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com>
2025-07-28Platform/RaspberryPi: add ArmTransferListLib for PeilessSecLevi Yun1-0/+1
Since the edk2 commit b1096651d808 ("ArmPlatformPkg: Capture TransferList information for PeilessSec") PeilessSec requires the ArmTransferListLib. To resolve build failure, add ArmTransferListLib. Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com>
2025-07-08Platform/RaspberryPi: Remove UGA supportPierre Gondois1-3/+0
The Universal Graphics Adapter (UGA) is a graphic abstraction. The UGA I/O and Draw protocols are deprecated since UEFI 2.0 was introduced. Cf. the UEFI spec v2.9: "Appendix L - EFI 1.10 Protocol Changes and Deprecation List" section L.2 "Deprecated Protocols" Remove the UGA support. Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
2025-07-05Update ArmMmuLib library pathAjan Zhong1-1/+1
ArmMmuLib is moved from ArmPkg to UefiCpuPkg, update ArmMmuLib path for all platforms to adapt EDK2 change. Signed-off-by: Ajan Zhong <ajan.zhong@newfw.com>
2025-06-02Platform/RaspberryPi: migrate RPi3/RPi4 to MdePkg BaseFdtLibLeif Lindholm1-4/+1
EmbeddedPkg FdtLib is getting deleted. Migrate RPI to MdePkg BaseFdtLib which is the replacement. Signed-off-by: Leif Lindholm <leif.lindholm@oss.qualcomm.com>
2025-05-25Platform/RaspberryPi: Add missing Hash2Dxe for HTTP bootArd Biesheuvel2-0/+2
HTTP boot has been broken on RPi ever since the PixieFail CVE fixes were applied, as the TCP driver now relies on Hash2Dxe (and the EFI RNG protocol) to produce cryptographically strong sequence numbers. Add the missing driver to restore HTTP boot functionality. Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2025-04-30Platform/RaspberryPi: use MdePkg BaseFdtLibLeif Lindholm1-2/+5
Map individual users of obsolete EmbeddedPkg FdtLib to that version for now - they will need converting. Signed-off-by: Leif Lindholm <leif.lindholm@oss.qualcomm.com>
2025-04-11Various Arm/AArch64 platforms: make PcdVFPEnabled AArch32-onlyLeif Lindholm1-1/+0
Since UEFI requires AArch64 to support FP/NEON, the Pcd to decide whether to enable (or disable trapping of) those instructions has changed to be ARM-only in edk2, and the enabling to be unconditional for AArch64. So drop the explicit setting to 1 for all AArch64 platforms, and move the setting to a .ARM section for the one dual-architecture platform in the tree (Juno) Signed-off-by: Leif Lindholm <leif.lindholm@oss.qualcomm.com>
2025-04-10Platform/RaspberryPi: RPi3: Update Library Paths for SMC/SVC/FFAKun Qin1-1/+1
This commit adapts to the new locations of the SMC, SVC, and FFA libraries following their relocation from ArmPkg. The changes are based on the updates introduced in the following PR: https://github.com/tianocore/edk2/pull/10929. Signed-off-by: Kun Qin <kun.qin@microsoft.com>
2025-01-30Platform,Silicon: Remove references to ArmDisassemblerLibArd Biesheuvel1-1/+0
ArmDisassemblerLib is no longer used, and will be removed from edk2. So drop all references to it across the repo. Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2025-01-30Platform/Silicon: drop PcdRelocateVectorTable from various Arm .dsc filesLeif Lindholm1-3/+0
These platforms all set PcdRelocateVectorTable to its default value of FALSE. Since the Pcd is getting dropped in edk2, skip the setting here. Signed-off-by: Leif Lindholm <leif.lindholm@oss.qualcomm.com>
2024-11-14Cleanup Null Stack Cookie ImplementationOliver Smith-Denny1-3/+0
edk2 PR https://github.com/tianocore/edk2/pull/6433 cleans up the null stack cookie implementation, no longer requiring DSCs to manually add the null stack cookie lib to Sec modules. This commit changes all DSCs in edk2-platforms to drop the manual adding. Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
2024-09-24Update to New StackCheckLibOliver Smith-Denny1-3/+3
edk2 PR https://github.com/tianocore/edk2/pull/5957 removed BaseStackCheckLib and added StackCheckLibNull (amongst others). This PR updates all dscs/dsc.incs to remove the old BaseStackCheckLib and if appropriate, add StackCheckLibNull to LibraryClasses.common.SEC or to specific SEC libs. For all other component types, MdeLibs.dsc.inc links them to StackCheckLibNull. This does all dscs at once as it is formulaic and fixes build breaks. Continuous-integration-options: PatchCheck.ignore-multi-package Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
2024-09-16ARM/AARCH64 Platforms: Drop ArmCompilerIntrinsicsLibOliver Smith-Denny1-6/+0
edk2 PR https://github.com/tianocore/edk2/pull/6048 moves ArmCompilerIntrinsicsLib to MdePkg and into MdeLibs.dsc.inc. This patch drops all of the references to the ArmPkg location as these platforms are now getting it from MdeLibs.dsc.inc. This is done in one shot as it is a breaking change and has no functional impact. Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Leif Lindholm <quic_llindhol@quicinc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Continuous-integration-options: PatchCheck.ignore-multi-package Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
2024-08-28Platform AARCH64: Move PrePi users to PeilessSec.infArd Biesheuvel2-4/+3
PrePi has been superseded by PeilessSec.inf, which is a more common naming for the SEC module, aligned with other architectures. No functional changes intended. Switch all users to PeilessSec.inf so the old implementation can be retired from EDK2. No ArmPlatformStackLib resolution is needed in this case, so drop those as well. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Jeremy Linton <jeremy.linton@arm.com> Tested-by: Jeremy Linton <jeremy.linton@arm.com>
2024-07-30Platform/RaspberryPi: Drop platform specific EfiResetSystemLibArd Biesheuvel1-1/+0
Drop the now unused EfiResetSystemLib implementation, which has been superseded by the generic one from EDK2. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
2024-07-30Platform/RaspberryPi: Switch to generic reset runtimeArd Biesheuvel2-4/+4
Drop the reference to the special reset runtime DXE driver in EmbeddedPkg, and move to the one in MdeModulePkg shared between all architectures. This version implements reset notifications, allowing us to retire the home grown version of that functionality in a subsequent patch. Add depexes to the components that rely on the reset notification protocols to ensure that they are not dispatched before those protocols are made available by the reset runtime DXE driver. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
2024-07-30Platform/RaspberryPi: Use depex based dispatch order for varstoreArd Biesheuvel1-1/+5
The VarBlockServiceDxe driver needs to be dispatched before the common VariableRuntimeDxe, but we are currently relying on FDF order and lack of transitive dependencies for this, which is fragile, and will break once we move to the generic reset runtime. So use the existing helper library for this, which can be plugged into the generic variable drivers, and force them to depex on a GUID that can be installed as a NULL protocol in VarBlockServiceDxe. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
2024-07-30Platform/RaspberryPi: Fix line endings in DSCsArd Biesheuvel1-1/+1
Get rid of spurious LF-only line endings. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
2024-03-11Platform/RaspberryPi: Give the user control over the XHCI mailboxJeremy Linton1-0/+6
It's a complete tossup whether removing the mailbox call after we have set up the XHCI works for a given kernel+distro in DT mode. So lets give users who want to try DT the option of flipping this on/off. Users that don't want to have to deal with DT, can use ACPI. Signed-off-by: Jeremy Linton <jeremy.linton@arm.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
2023-12-01Platform/RaspberryPi: Add ImagePropertiesRecordLib InstanceTaylor Beebe1-0/+1
ImagePropertiesRecordLib is used by DxeMain and PiSmmCore, so it needs to be added to most platforms. Signed-off-by: Taylor Beebe <taylor.d.beebe@gmail.com> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Leif Lindholm <quic_llindhol@quicinc.com> Cc: Jeremy Linton <jeremy.linton@arm.com>
2022-08-16RaspberryPi: Platform Build: Resolving newly introduced dependencyKun Qin1-0/+1
The new changes in SecureBootVariableLib brought in a new dependency of PlatformPKProtectionLib. This change added the new library instance from SecurityPkg to resolve RaspberryPi platforms build. Signed-off-by: Kun Qin <kuqin12@gmail.com> Reviewed-by: Jeremy Linton <jeremy.linton@arm.com>
2022-05-19RaspberryPi: Add VariableFlashInfoLibMichael Kubacki1-0/+1
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3479 Adds an instance for the library class VariableFlashInfoLib that was recently introduced in MdeModulePkg. This change is made to allow the new variable driver to build that has a dependency on this library class and does not require any further platform changes. Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Leif Lindholm <quic_llindhol@quicinc.com> Cc: Jeremy Linton <jeremy.linton@arm.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> Tested-by: Jeremy Linton <jeremy.linton@arm.com> Reviewed-by: Jeremy Linton <jeremy.linton@arm.com> Acked-by: Ard Biesheuvel <ardb@kernel.org>
2022-02-08Platform/RaspberryPi: Add 'clock-frequency' property for miniuartAdrien Thierry1-0/+5
Describe the miniuart clock frequency in a _DSD property, so that it can be read from the Linux driver [1] The miniuart clock frequency is the core clock frequency on the Raspberry Pi. It can be modified by the user using the 'core_freq' property in the config.txt file. So, we fetch it from the underlying Raspberry Pi firmware. [1] https://lore.kernel.org/all/20220207232129.402882-1-athierry@redhat.com/ Signed-off-by: Adrien Thierry <athierry@redhat.com> Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
2021-08-22Platform/RaspberryPi: Add XHCI/PCI selection menuJeremy Linton1-0/+6
Arm has standardized a PCI SMC conduit that can be used to access the PCI config space in a standardized way. This functionality doesn't yet exist in many OS/Distro's. Lets add another advanced config item that allows the user to toggle between presenting the XHCI on the base RPi4 as a platform device, or presenting this newer PCIe conduit. The CM4 doesn't have an attached XHCI controller soldered to the PCIe, so PCIe mode is the default. Signed-off-by: Jeremy Linton <jeremy.linton@arm.com> Reviewed-by: Andrei Warkentin <awarkentin@vmware.com> Reviewed-By: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> Tested-by: Jared McNeill <jmcneill@invisible.ca>
2021-08-04Platform: add SecureBootVariableLib resolution to various ARM platformsGrzegorz Bernacki1-0/+2
The edk2 patch SecurityPkg: Create library for setting Secure Boot variables. removes generic functions from SecureBootConfigDxe and places them into SecureBootVariableLib. This patch adds SecureBootVariableLib mapping for each ARM platform which uses SecureBootConfigDxe. Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com> Reviewed-by: Graeme Gregory <graeme@nuviainc.com> #SbsaQemu Reviewed by: Sami Mujawar <sami.mujawar@arm.com> #ArmVExpress
2021-08-03Revert "Platform/RaspberryPi: Setup option for disabling Fast Boot"Grzegorz Bernacki1-8/+1
This reverts commit efdc159ef7c9f15581a0f63d755a1530ff475156. This commit is not longer required as Boot Discovery Policy has been implemented for Raspberry Pi. Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com> Reviewed-by: Sunny Wang <sunny.wang@arm.com> Reviewed-by: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie> Tested-by: Pete Batard <pete@akeo.ie>
2021-06-12Platform/RaspberryPi: Dynamically build UARTs info in ACPISunny Wang1-0/+8
Changes: 1. Add code to ConfigDxe driver and AcpiTables module to dynamically build either Mini UART or PL011 UART info in ACPI. This also fixes the issue discussed in https://github.com/pftf/RPi4/issues/118. 2. Cleanup by moving duplicate Debug Port 2 table related defines and structures to a newly created header file (RpiDebugPort2Table.h). Testing Done: - Booted to UEFI shell and use acpiview command to check the result of the different UART settings in config.txt (enabling either Mini UART or PL011) and SPCR, DBG2 tables and device BTH0 are dynamically changed as expected. Signed-off-by: Sunny Wang <sunny.wang@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie> Tested-by: Pete Batard <pete@akeo.ie>
2021-04-15Platform/RaspberryPi: Setup option for disabling Fast BootSunny Wang1-1/+8
This is a fix for https://github.com/pftf/RPi4/issues/114. Changes: 1. Add a setup option called BootPolicy and consume the setting during boot to decide whether to perform or skip ConnectAll. 2. The Default setting is set to Full discovery because it is not worth enabling Fast boot by default on RaspberryPi systems. Enabling it just saves boot time about 1 second, but caused a lot of issues. Testing Done: - Booted to Standalone UEFI shell on SD card and use drivers command to check the result with Fast Boot and Full discovery settings. Then, child/device handles are created as expected. Note and to-do items: - The root cause looks like that boot loaders and some tools like grub and iPXE haven't supported selective connect/Fast boot. However, system firmware should still provide a setup option for user to enable Fast boot with old version boot loaders and tools, which is why we proposed this change. We will also report this issue to boot loader and tool vendors/open source GitHubs. - We will add more options for connecting specific type devices so that we can still have the shortest boot time for all use cases. Cc: Jeremy Linton <jeremy.linton@arm.com> Cc: Sami Mujawar <sami.mujawar@arm.com> Link: https://github.com/pftf/RPi4/issues/144 Link: https://github.com/pftf/RPi4/issues/114 Signed-off-by: Sunny Wang <sunny.wang@arm.com> Acked-by: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie>
2021-03-31Platform/RaspberryPi: Consume MdeLibs.dsc.inc for RegisterFilterLibDandan Bi1-1/+4
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3246 MdeLibs.dsc.inc was added for some basic/default library instances provided by MdePkg and RegisterFilterLibNull Library was also added into it as the first version of MdeLibs.dsc.inc. So update platform dsc to consume MdeLibs.dsc.inc for RegisterFilterLibNull which will be consumed by IoLib and BaseLib. Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Pete Batard <pete@akeo.ie> Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
2021-02-20Platform/RaspberryPi: User control of eMMC2 DMAJeremy Linton1-0/+1
DMA translation on the eMMC2 vary based on SoC, and this is made worse by the poor _DMA support in Linux. For now the "safe" option is to simply run the eMMC2 controller in PIO mode. More advanced users or !Linux operating systems may choose to enable this to gain a perf boost. Signed-off-by: Jeremy Linton <jeremy.linton@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie> Reviewed-by: Andrei Warkentin <awarkentin@vmware.com>
2021-01-04Platform/RaspberryPi: Add system/user defined reset delayPete Batard1-0/+6
Due to the method in which NV variables are stored on removable media for the Raspberry Pi platform, and the manner in which we dump updated variables right before reset, it is possible, and has been repeatedly demonstrated with SSD-based USB 3.0 devices, that the updated file does not actually end up being written to permanent storage, due to the device write-cache not having enough time to be flushed before reset. To compensate for this, since we don't know of a generic method that would allow turning off USB mass storage devices write cache (and also because we are seeing an issue that seems related for SD-based media), we add a new reset delay PCD, which can be set by the user, and which we also set as required when NV variables are being dumped. Our testing show that, with more than 3 seconds of extra delay, the storage media has enough time to finalize its internal write, thus solving the issue of configuration changes not being persisted. Signed-off-by: Pete Batard <pete@akeo.ie> Reviewed-by: Andrei Warkentin <awarkentin@vmware.com> Tested-by: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
2020-11-20Platform/RaspberryPi: get RPi4 and RPi3 building again.Andrei Warkentin1-0/+3
Add VariablePolicyLib and its dependency. Testing: Pi 4 boot. Signed-off-by: Andrei Warkentin <andrey.warkentin@gmail.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
2020-11-04Platforms/RaspberryPi: Fix incorrect display resolutionSamer El-Haj-Mahmoud1-2/+2
Fix https://github.com/pftf/RPi4/issues/100 by swapping RPi DisplayDxe resolution settings for 640x480 and 800x600, which were incorrectly mapped to the settings shown in the Setup configuration variable. Signed-off-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie> Reviewed-by: Andrei Warkentin <awarkentin@vmware.com>
2020-09-27Platforms/RaspberryPi: Fix RPi3 RngLib build errorSamer El-Haj-Mahmoud1-0/+1
Commit b5701a4c7a0fb185e0c5b9db9525939c78664bfd introduced RngLib dependency for OpensslLib, and caused the RPi build to break for lack of an RngLib instance. This patch adds RngLib using the DxeRngLib flavor, which is a wrapper around the the EFI_RNG_PROTOCOL that the platform already produces. Signed-off-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com> Reviewed-by: Andrei Warkentin <awarkentin@vmware.com>
2020-09-01Platform/RaspberryPi4: Allow the user to set TempJeremy Linton1-0/+1
Now that we have the ability to enable an AML fan object, allow the user to select the temperature at which the fan cycles on. Signed-off-by: Jeremy Linton <jeremy.linton@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie>
2020-09-01Platform/RaspberryPi: Add entry for user fan controlJeremy Linton1-0/+5
Add a menu item that allows the user to enable GPIO based fan control via SSDT and the previous NameObj replacement commit. This should only be seen/enabled on RPI4 because that is what its been tested with. Given GPIO pin current limitations its likely that a bit of additional circuitry is required to drive a fan, and the GPIO high/low signal can only be used as a enable/disable signal. A search for "rpi npn gpio fan" or similar should turn up some hits for how to do this. Alternatively there are some commercial boards (FAN SHIM) which operate via simple GPIO control. Signed-off-by: Jeremy Linton <jeremy.linton@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie>
2020-08-13Platforms/RaspberryPi: Set RPi3 Language supported to EnglishSamer El-Haj-Mahmoud1-1/+4
Set the supported RPi3 platform language to English (US), and remove French. This fixes https://github.com/pftf/RPi4/issues/35 Cc: Leif Lindholm <leif@nuviainc.com> Cc: Pete Batard <pete@akeo.ie> Cc: Andrei Warkentin <awarkentin@vmware.com> Cc: Ard Biesheuvel <ard.biesheuvel@arm.com> Signed-off-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie>
2020-07-08Platform/RaspberryPi: Switch RPi3 USB NIC driver to Ax88772cSamer El-Haj-Mahmoud2-2/+2
Switch the ASIX USB NIC driver used in the RPi3 to the new Ax88772c. Signed-off-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
2020-06-17Platforms/RaspberryPi: Add RPi3 settings to ReadmeSamer El-Haj-Mahmoud via groups.io1-0/+61
Add a section to the the RPi3 readme for 'Configuration Settings', with instructions on scripting from the UEFI Shell. Signed-off-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
2020-06-12Platforms/RaspberryPi: Remove DebugShowUEFIExitSamer El-Haj-Mahmoud1-1/+0
The "Verbose ExitBootServices" feature was originally added to the RPi as part of early OS enablement to show that the OS boot loader did actually call ExitBootServices (back when OS boot used to crash shortly after that). This is no longer needed, and should be removed as part of cleaning the RPi PlatformBootManager to be more in-line with the ArmPkg version. Cc: Leif Lindholm <leif@nuviainc.com> Cc: Pete Batard <pete@akeo.ie> Signed-off-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@arm.com> Reviewed-by: Andrei Warkentin <awarkentin@vmware.com>
2020-05-11Platform/RaspberryPi: default DisplayDxe to just native modeAndrei Warkentin1-1/+5
The scaled resolutions are useful, but are not the default expected by most users. Linux and BSDs don't set preferred resolution in their OS loader, so when booting via setup UI, the OS is left running at 800x600, not the native resolution. This looks crummy. Signed-off-by: Andrei Warkentin <andrey.warkentin@gmail.com> Reviewed-by: Pete Batard <pete@akeo.ie> Tested-by: Pete Batard <pete@akeo.ie>
2020-05-11RPi: allow selecting DT-only modeAndrei Warkentin1-2/+6
Today the Pies can be booted in a way where only ACPI is exposed, or both ACPI and DT are exposed. This adds one more mode - DT only, no ACPI. The target audience is developers. When both are exposed, it's up to the OS to decide which gets used, and that choice can differ between OSes, Note: this does _not_ change defaults. Pi 3 still defaults to ACPI + DT, while Pi 4 still defaults to ACPI only. We don't really want to remove DT + ACPI mode - it is the default on Pi 3, and removing it is bound to just annoy users - WoA and NetBSD (voa UEFI) on Pi 3 only work with ACPI, while everything else (Linux, FreeBSD) only work with DT. I'd make an analogy of MPS and ACPI being exposed for the longest time ever together on PCs. Testing: OpenBSD on Pi 4 with DT-only and ACPI-only boots. Signed-off-by: Andrei Warkentin <andrey.warkentin@gmail.com> Reviewed-by: Pete Batard <pete@akeo.ie>
2020-05-06Platform/RaspberryPi: create DXE phase SerialPortLib version for RPi3Ard Biesheuvel1-1/+1
The Raspberry Pi 3 derives its 16550 baud clock from the variable core clock, and so any reprogramming of the baud rate needs to take the actual core clock value into account. Introduce a DXE phase version of DualSerialPortLib that discovers this value in its constructor, using the RPi firmware protocol, and wire it up for the RPi3 platform. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie> Tested-by: Pete Batard <pete@akeo.ie>
2020-05-06Platform/RaspberryPi: query firmware for 16550 input clock at boot on RPi3Ard Biesheuvel1-0/+1
Query the firmware for the clock rate that is used to drive the 16550 baud clock, so that we can program the correct baud rate. Co-authored-by: Pete Batard <pete@akeo.ie> Co-authored-by: Andrei Warkentin <andrey.warkentin@gmail.com> Co-authored-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Signed-off-by: Pete Batard <pete@akeo.ie> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie> Tested-by: Pete Batard <pete@akeo.ie>
2020-05-06Platform/RaspberryPi: fix 16550 divisor calculation logicArd Biesheuvel1-1/+3
The 16550 'miniUART' on the Raspberry Pi gets its input clock from different sources on RPi3 and RPi4. Fix the logic that derives the divisor for the 16550 baud clock on the respective platforms. While at it, make the input clock PCD patchable for RPi3 so we can manipulate it at runtime in a future patch. Co-authored-by: Pete Batard <pete@akeo.ie> Co-authored-by: Andrei Warkentin <andrey.warkentin@gmail.com> Co-authored-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Signed-off-by: Pete Batard <pete@akeo.ie> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie> Tested-by: Pete Batard <pete@akeo.ie>
2020-05-06Platform/RaspberryPi: introduce DebugDualSerialPortLibArd Biesheuvel1-3/+9
On DEBUG builds that use the serial port directly for debug output, every module reinitializes the UART hardware, through the DebugLib constructor calling SerialPortInitialize. This is unnecessary, but usually harmless. However, in cases where this requires information that is non-trivial to obtain (e.g., the rate of the clock source feeding the baud clock), it results in a special kind of dependency hell that can only be fully appreciated by seasoned EDK2 connoisseurs [0]. As a first step towards solving this mess, implement a special version of the Raspberry Pi dual serial port library that only implements the SerialPortInitialize() and SerialPortWrite() library functions, and make the former an empty stub. This makes it only suitable for use by modules that inherit a dependency on SerialPortLib via DebugLib, and requires us to ensure that the baud clock is programmed correctly by the SEC phase. Use this version of the library to satisfy all SerialPortLib dependencies except the ones in PrePi and in SerialDxe. These will retain the full version, which is the only one that still consumes PcdSerialClockRate. [0] There are two distinct problems making this mess almost unsolvable: - SerialPortInitialize() is called directly in various places instead of relying on constructor ordering, so adding a constructor to a SerialPortLib implementation does not help, - Constructor ordering resolution in the EDK2 tooling fails to take transitive dependencies into account if an intermediate library has no constructor it self. For instance, if LibA depends on LibB, which depends on LibC, the constructors of LibA and LibC could be called in any order if LibB does not have a constructor itself (and fixing this breaks all the platforms in the tree) Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Reviewed-by: Pete Batard <pete@akeo.ie> Tested-by: Pete Batard <pete@akeo.ie>