coreboot/payloads/external
Maximilian Brune b62f86be43 payloads: Add leanefi payload
This adds another external payload to coreboot. The payload has been
heavily based on u-boots UEFI implementation.

The leanefi payload is basically a translator from coreboot to UEFI. It
takes the coreboot tables and transforms them into UEFI interfaces.
Although it can potentially load any efi application that can
handle the minimized interface that leanefi provides, it has only
been tested with LinuxBoot (v6.3.5) as a payload. It has been optimized
to support only those interfaces that Linux requires to start.

Among other leanefi does not support:
- efi capsule update (also efi system resource table)
- efi variables
- efi text input protocol (it can only output)
- most boot services. mostly memory services are left (e.g. alloc/free)
- all runtime services (although there is still a very small runtime
  footprint that is planned to be removed in the near future)
- TCG2/TPM (although that is mostly because of laziness)
The README.md currently provides more details on why.

The payload currently only supports arm64 and has only been tested
on emulation/simulator targets. The original motivation was to get ACPI
on arm64 published to the OS without using EDK2. It is however also
possible to supply the leanefi with a FDT that is published to the OS.
At that point one would however probably use coreboot only instead of
this shim layer on top. It would be way nicer to have Linux support
something else than UEFI to propagate the ACPI tables, but it requires
to get the Linux maintainer/community on board. So for now this shim
layer ciruimvents that.

LBBR Test:
// 1. dump FDT from QEMU like mentioned in aarch64 coreboot doc
// 2. compile u-root however you like (aarch64)
// 3. compile Linux (embed u-root initramfs via Kconfig)
// 4. copy Linux kernel to payloads/leanefi/Image
// 5. copy following coreboot defconfig to configs/defconfig:
CONFIG_BOARD_EMULATION_QEMU_AARCH64=y
CONFIG_PAYLOAD_NONE=n
CONFIG_PAYLOAD_LEANEFI=y
CONFIG_LEANEFI_PAYLOAD=y
CONFIG_LEANEFI_PAYLOAD_PATH="[path-to-linux]/arch/arm64/boot/Image"
CONFIG_LEANEFI_FDT=y
CONFIG_LEANEFI_FDT_PATH="[path-to-dumped-DTB]"
// 6. compile coreboot
make defconfig
make -j$(nproc)
// 7. run qemu like mentioned in coreboot doc (no FIT)
// 8. say hello to u-root and optionally kexec into the next kernel

Signed-off-by: Maximilian Brune <maximilian.brune@9elements.com>
Change-Id: I4093378e89c3cb43fb0846666de80a7da36b03f1
Reviewed-on: https://review.coreboot.org/c/coreboot/+/78913
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Ron Minnich <rminnich@gmail.com>
Reviewed-by: Felix Singer <service+coreboot-gerrit@felixsinger.de>
2024-06-04 00:26:14 +00:00
..
BOOTBOOT treewide: Move stdlib.h to commonlib 2024-03-15 10:09:43 +00:00
coreDOOM payloads: Add SPDX headers to Kconfig 2024-02-18 01:57:39 +00:00
depthcharge payloads/depthcharge: Add DEPTHCHARGE_REPO and DEPTHCHARGE_BRANCH 2024-03-04 22:47:08 +00:00
edk2 payload/external/edk2: Explicitly define the build arch as X64 2024-05-15 16:49:26 +00:00
FILO payloads: Add SPDX headers to Kconfig 2024-02-18 01:57:39 +00:00
GRUB2 payloads: Add SPDX headers to Kconfig 2024-02-18 01:57:39 +00:00
iPXE payloads/iPXE: Hook up TRUST_CMD switch 2024-05-29 19:22:57 +00:00
leanefi payloads: Add leanefi payload 2024-06-04 00:26:14 +00:00
linux payloads: Add SPDX headers to Kconfig 2024-02-18 01:57:39 +00:00
LinuxBoot LinuxBoot/Makefile: initramfs not build for bzImage 2024-05-11 18:28:30 +00:00
Memtest86Plus payloads: Add SPDX headers to Kconfig 2024-02-18 01:57:39 +00:00
SeaBIOS payloads: Add SPDX headers to Kconfig 2024-02-18 01:57:39 +00:00
skiboot payloads/external/skiboot/Makefile: fix output on make clean 2022-09-28 17:35:37 +00:00
tint tint: upgrade the tint payload to 0.07 version 2023-08-08 16:03:38 +00:00
U-Boot payloads/U-Boot: Upgrade from U-Boot v2023.07 to v2024.4 2024-05-04 21:03:55 +00:00
.gitignore payloads/edk2: Move building to directory called workspace 2022-08-24 21:27:24 +00:00
Makefile.mk payloads: Add leanefi payload 2024-06-04 00:26:14 +00:00