
On 29.05.24 18:30, Simon Glass wrote:
Hi,
On Tue, 28 May 2024 at 18:38, E Shattow lucent@gmail.com wrote:
Hi,
On Tue, May 28, 2024 at 7:43 AM Heinrich Schuchardt heinrich.schuchardt@canonical.com wrote:
In U-Boot EFI boot options can already specify both an EFI binary and an initrd. With this series we can additionally define the matching device-tree to be loaded in the boot option.
With the last patch the boot manager will fall back the device-tree specified by $fdtfile in directories '/dtb/', '/', or '/dtb/current/' on the boot device if no device-tree is specified in the boot option or via a bootefi command parameter.
As tested the $fdtfile environment variable has no effect on global EFI boot when i.e. EFI/BOOT/BOOTRISCV64.EFI on EFI System Partition and no user-added boot option; $fdtfile env variable is not used with "mmc 0" or whichever global boot option is enabled by default in the boot order.
Adding a boot option for EFI/BOOT/BOOTRISCV64.EFI and giving this priority in the boot order allows $fdtfile to be effective here. This is consistent with what is described by the series. Would the global EFI boot also get support for $fdtfile either with this or a later series?
v2: Update efi_dp_concat() instead of new function efi_dp_merge(). Carve out a function efi_load_option_dp_join() which we can use both for the eficonfig and the efidebug command. Rename variables id_dp, final_dp_size. Rename create_initrd_dp() to create_lo_dp_part(). Use enum as parameter for create_lo_dp_part(). Put all related changes into one patch.
Heinrich Schuchardt (8): efi_loader: allow concatenation with contained end node cmd: eficonfig: add support for setting fdt cmd: efidebug: add support for setting fdt efi_loader: load device-tree specified in boot option efi_loader: move distro_efi_get_fdt_name() efi_loader: return binary from efi_dp_from_lo() efi_loader: export efi_load_image_from_path efi_loader: load distro dtb in bootmgr
boot/bootmeth_efi.c | 60 +--------- cmd/eficonfig.c | 83 +++++++++---- cmd/efidebug.c | 130 +++++++++++++++------ include/efi_loader.h | 24 +++- lib/efi_loader/Makefile | 1 + lib/efi_loader/efi_bootbin.c | 2 +- lib/efi_loader/efi_bootmgr.c | 75 +++++++++++- lib/efi_loader/efi_boottime.c | 3 +- lib/efi_loader/efi_device_path.c | 40 ++++--- lib/efi_loader/efi_device_path_utilities.c | 2 +- lib/efi_loader/efi_fdt.c | 117 +++++++++++++++++++ lib/efi_loader/efi_helper.c | 44 +++++++ 12 files changed, 445 insertions(+), 136 deletions(-) create mode 100644 lib/efi_loader/efi_fdt.c
-- 2.43.0
Can we use the best-match compatible approach as expected by the new 'make image.fit' in Linux?
Filenames should be deprecated IMO. I am happy to help work on how to do that if you agree.
Hello Simon,
It is the OS that creates boot options. The OS can determine the exact dtb file based on the compatible string and the kernel version once per kernel upgrade. This is much more efficient than doing the same on every boot.
Replacing $fdtfile by a matching logic could make sense. But please consider the effect on boot time if have to read through more than 1000 arm64 dtbs with U-Boot's non-caching file-system drivers.
Best regards
Heinrich