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.

Best regards

Heinrich


And then how this kind of breaking change will be handled by
distros and everyone else is something I wonder about.


Reply via email to