u-boot/lib/efi_loader
Ilias Apalodimas 53f6a5aa86 efi_loader: Replace config option for initrd loading
Up to now we install EFI_LOAD_FILE2_PROTOCOL to load an initrd
unconditionally. Although we correctly return various EFI exit codes
depending on the file status (i.e EFI_NO_MEDIA, EFI_NOT_FOUND etc), the
kernel loader, only falls back to the cmdline interpreted initrd if the
protocol is not installed.

This creates a problem for EFI installers, since they won't be able to
load their own initrd and continue the installation. It also makes the
feature hard to use, since we can either have a single initrd or we have
to recompile u-boot if the filename changes.

So let's introduce a different logic that will decouple the initrd
path from the config option we currently have.
When defining a UEFI BootXXXX we can use the filepathlist and store
a file path pointing to our initrd. Specifically the EFI spec describes:

"The first element of the array is a device path that describes the device
and location of the Image for this load option. Other device paths may
optionally exist in the FilePathList, but their usage is OSV specific"

When the EFI application is launched through the bootmgr, we'll try to
interpret the extra device path. If that points to a file that exists on
our disk, we'll now install the load_file2 and the efi-stub will be able
to use it.

This opens up another path using U-Boot and defines a new boot flow.
A user will be able to control the kernel/initrd pairs without explicit
cmdline args or GRUB.

Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-03-25 20:14:26 +01:00
..
.gitignore efi_loader: git ignore helloworld_efi.S 2020-01-07 18:08:20 +01:00
efi_acpi.c efi_loader: ACPI tables must be in EfiACPIReclaimMemory 2021-02-26 16:17:43 +01:00
efi_bootmgr.c efi_loader: Replace config option for initrd loading 2021-03-25 20:14:26 +01:00
efi_boottime.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
efi_capsule.c efi: Fix compiler warnings 2021-03-25 20:08:41 +01:00
efi_console.c efi_loader: NULL dereference in EFI console 2021-03-25 20:08:57 +01:00
efi_device_path.c efi_loader: Add device path related functions for initrd via Boot#### 2021-03-25 20:14:25 +01:00
efi_device_path_to_text.c efi_loader: Uart device path 2021-03-25 20:09:17 +01:00
efi_device_path_utilities.c SPDX: Convert a few files that were missed before 2018-05-10 20:38:35 -04:00
efi_disk.c Allow last block to be read 2021-02-21 09:21:35 +01:00
efi_dt_fixup.c efi_loader: fix memory type for memory reservation block 2021-03-25 20:07:18 +01:00
efi_file.c efi_loader: Add helper functions for EFI 2021-03-25 20:14:25 +01:00
efi_firmware.c efi: Fix compiler warnings 2021-03-25 20:08:41 +01:00
efi_freestanding.c efi_loader: fix freestanding memmove() 2020-03-22 11:06:23 +01:00
efi_gop.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
efi_helper.c efi_loader: Add helper functions for EFI 2021-03-25 20:14:25 +01:00
efi_hii.c efi_loader: ListPackageLists() return EFI_NOT_FOUND 2019-06-20 22:26:19 +00:00
efi_hii_config.c efi_loader: remove EFI_HII_CONFIG_ROUTING_PROTOCOL 2020-12-10 09:15:32 +01:00
efi_image_loader.c efi_loader: don't load beyond VirtualSize 2021-02-14 10:34:15 +01:00
efi_load_initrd.c efi_loader: Replace config option for initrd loading 2021-03-25 20:14:26 +01:00
efi_load_options.c efi_loader: move load options to new module 2021-01-19 18:56:08 +01:00
efi_memory.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
efi_net.c efi_loader: fix use after free in receive path 2020-10-19 22:59:53 +02:00
efi_rng.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
efi_root_node.c efi_loader: remove EFI_UNICODE_COLLATION_PROTOCOL 2021-01-20 08:17:17 +01:00
efi_runtime.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
efi_setup.c efi_loader: switch to non-secure mode later 2021-01-29 20:22:40 +01:00
efi_signature.c efi: capsule: Add support for uefi capsule authentication 2020-12-31 14:41:31 +01:00
efi_smbios.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
efi_string.c efi_loader: Add size checks to efi_create_indexed_name() 2020-12-31 14:33:23 +01:00
efi_tcg2.c efi_loader: Introduce eventlog support for TCG2_PROTOCOL 2020-12-03 21:22:40 +01:00
efi_unicode_collation.c efi_loader: carve out utf_to_cp() 2021-03-07 17:37:13 +01:00
efi_var_common.c efi_loader: Add helper functions for EFI 2021-03-25 20:14:25 +01:00
efi_var_file.c efi_loader: Enable run-time variable support for tee based variables 2020-08-01 11:57:41 +02:00
efi_var_mem.c efi_loader: Avoid emitting efi_var_buf to .GOT 2021-01-20 08:17:17 +01:00
efi_var_seed.S efi_loader: pre-seed UEFI variables 2020-07-16 12:37:02 +02:00
efi_variable.c efi_loader: Make the pkcs7 header parsing function an extern 2020-12-31 14:41:31 +01:00
efi_variable_tee.c efi_loader: Avoid emitting efi_var_buf to .GOT 2021-01-20 08:17:17 +01:00
efi_watchdog.c efi_loader: function descriptions efi_watchdog.c 2020-04-16 08:10:02 +02:00
helloworld.c efi_loader: print boot device and file path in helloworld 2021-01-13 02:38:00 +01:00
Kconfig efi_loader: Replace config option for initrd loading 2021-03-25 20:14:26 +01:00
Makefile efi_loader: Add helper functions for EFI 2021-03-25 20:14:25 +01:00