On Sun, Oct 22, 2023 at 4:32 PM Heinrich Schuchardt <heinrich.schucha...@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.schucha...@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