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

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Sun Oct 22 18:34:08 CEST 2023


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?

Best regards

Heinrich


More information about the U-Boot mailing list