[PATCH v2 0/8] efi_loader: improve device-tree loading

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Wed Jun 5 10:40:42 CEST 2024


On 29.05.24 18:30, Simon Glass wrote:
> Hi,
> 
> On Tue, 28 May 2024 at 18:38, E Shattow <lucent at gmail.com> wrote:
>>
>> Hi,
>>
>> On Tue, May 28, 2024 at 7:43 AM Heinrich Schuchardt
>> <heinrich.schuchardt at 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


More information about the U-Boot mailing list