[PATCH v3 1/1] efi_loader: expose the device-tree file name

Rob Herring robh at kernel.org
Thu Oct 26 17:43:17 CEST 2023


On Sun, Oct 22, 2023 at 4:32 PM Heinrich Schuchardt
<heinrich.schuchardt at canonical.com> wrote:
>
> On 10/22/23 19:08, Tom Rini wrote:
> > On Sun, Oct 22, 2023 at 06:34:08PM +0200, Heinrich Schuchardt wrote:
> >> On 10/22/23 17:55, Tom Rini wrote:
> >>> On Sun, Oct 22, 2023 at 10:47:33AM +0200, Heinrich Schuchardt wrote:
> >>>
> >>>> Forward and backward compatibility of Linux kernel device-trees is
> >>>> sometimes missing. One solution approach is to load a kernel specific
> >>>> device-tree. This can either be done via a U-Boot scripts (like the one
> >>>> generated by Debian package flash-kernel or by a boot loader like GRUB.
> >>>> The boot loader approach currently requires to know the device-tree name
> >>>> before first boot which makes it unusable for generic images.
> >>>>
> >>>> Expose the device-tree file name as EFI variable FdtFile.
> >>>> This will allow bootloaders to load a kernel specific device-tree.
> >>>>
> >>>> The variable will not be exposed on ACPI based systems or if the
> >>>> environment variable fdtfile is not defined.
> >>>>
> >>>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> >>>> ---
> >>>> v3:
> >>>>    Add documentation
> >>>> v2:
> >>>>    Use a unique GUID to enable future U-Boot independent
> >>>>    standardization.
> >>>>    Do not try to add the variable on ACPI based systems.
> >>>> ---
> >>>>    doc/develop/uefi/uefi.rst  | 17 +++++++++++++++++
> >>>>    include/efi_loader.h       |  5 +++++
> >>>>    lib/efi_loader/efi_setup.c | 30 ++++++++++++++++++++++++++++++
> >>>>    3 files changed, 52 insertions(+)
> >>>>
> >>>> diff --git a/doc/develop/uefi/uefi.rst b/doc/develop/uefi/uefi.rst
> >>>> index fb16ac743a..a81d09ae81 100644
> >>>> --- a/doc/develop/uefi/uefi.rst
> >>>> +++ b/doc/develop/uefi/uefi.rst
> >>>> @@ -916,6 +916,23 @@ So our final format of the FilePathList[] is::
> >>>>        Loaded image - end node (0xff) - VenMedia - initrd_1 - [end node (0x01) - initrd_n ...] - end node (0xff)
> >>>> +EFI variable FdtFile
> >>>> +~~~~~~~~~~~~~~~~~~~~
> >>>> +
> >>>> +Ideally U-Boot would always expose a device-tree that can be used for booting
> >>>> +any operating systems. Unfortunately operating systems like Linux sometimes
> >>>> +break forward and backward compatibility. In this case there is a need to load
> >>>> +an operating system version specific device-tree.
> >>>> +
> >>>> +U-Boot has an environment variable fdtfile identifying the device-tree file to
> >>>> +load. The content of this variable is exposed as EFI variable Fdtfile, vendor
> >>>> +GUID d45dde69-3bd6-40e0-90d5-6b606aa57730. It contains the device-tree path
> >>>> +name as a NUL terminated ASCII string.
> >>>> +
> >>>> +On 32bit ARM this is currently only a file name, e.g. 'imx6dl-wandboard.dtb'.
> >>>> +On other architectures the file name is preceded by the vendor directory, e.g.
> >>>> +'rockchip/rk3326-odroid-go2.dtb'.
> >>>
> >>> The Linux Kernel has split 32bit ARM up by directory now, too.
> >>
> >> Since Linux v6.5. That is why I wrote "currently". Once we migrate the
> >> values of $fdtfile in U-Boot we may want to change
> >> distro_efi_try_bootflow_files() to search both with and without vendor
> >> directory.
> >>
> >> Are there already plans for that migration?
> >
> > Right, v6.5 is out and has this change and v6.6 will be out soon enough,
> > so the documentation we're adding here and now should be worded such
> > that doesn't get stuck on these specifics.
>
> Should I add a sentence:
>
> Linux v6.5 has added vendor directories on 32bit ARM and U-Boot is
> expected to follow suit.

Note that while this is correct, the install (make dtbs_install) still
uses a flat directory. That was to not break existing users. It is
currently not a visible config option. Perhaps it should be if there's
a desire to move to having sub-directories for the install?

Rob


More information about the U-Boot mailing list