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?

Best regards

Heinrich

Reply via email to