This implements the LoadFile2 initrd loading protocol, which is essentially a callback face into the bootloader to load the initrd data into a caller provided buffer. This means the bootloader no longer has to contain any policy regarding where to load the initrd (which differs between architectures and kernel versions) and no longer has to manipulate arch specific data structures such as DT or struct bootparams to inform the OS where the initrd resides in memory. Sample output from booting a recent Linux/arm64 kernel: grub> insmod part_msdos grub> linux (hd0,msdos1)/Image grub> initrd (hd0,msdos1)/initrd.img grub> boot EFI stub: Booting Linux Kernel... EFI stub: EFI_RNG_PROTOCOL unavailable, KASLR will be disabled EFI stub: Generating empty DTB EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path EFI stub: Exiting boot services and installing virtual address map... [ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x411fd070] Cc: grub-devel@xxxxxxx Cc: daniel.kiper@xxxxxxxxxx Cc: leif@xxxxxxxxxxxx Ard Biesheuvel (4): loader/linux: permit NULL argument for argv[] in grub_initrd_load() efi: add definition of LoadFile2 protocol efi: implemented LoadFile2 initr loading protocol for Linux linux: ignore FDT unless we need to modify it grub-core/commands/efi/lsefi.c | 1 + grub-core/loader/arm64/linux.c | 139 ++++++++++++++++++-- grub-core/loader/efi/fdt.c | 7 +- grub-core/loader/linux.c | 2 +- include/grub/efi/api.h | 15 +++ 5 files changed, 149 insertions(+), 15 deletions(-) -- 2.17.1