[PATCH 1/3] dts/upstream: write fdtfile path to /chosen/fdtfile

Mark Kettenis mark.kettenis at xs4all.nl
Wed Jun 11 14:13:40 CEST 2025


> From: Casey Connolly <casey.connolly at linaro.org>
> Date: Tue, 10 Jun 2025 18:23:33 +0200

Hi Casey,

> Since we're using the upstream file structure, we know at build time
> the path to each DTB that we build. These same paths are used relative
> to some (maybe version specific) dtb directory on the boot partition
> or ESP.
> 
> By recording this path at build time and embedding it into the
> devicetree, we can set the fdtfile environment variable with 100%
> certainty that it is correct.
> 
> Devicetree file names are already treated as stable kernel API upstream,
> since they are used by OS loaders extensively.

But when something similar was suggested some time ago, the Linux
kernel folks explicitly stated that the file names are ~*not*
considered to be ABI.

So I think this proposal should be discussed in a broader context,
probably on the devicetree-spec at vger.kernel.org mailing list.

> Embedding the path into the devicetree itself just simplifies the
> process and allows U-Boot or the OS loader to select a devicetree of a
> different version for the specific board that U-Boot is running on.
> 
> Signed-off-by: Casey Connolly <casey.connolly at linaro.org>
> ---
>  scripts/Makefile.lib | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index e89a4a51b74ddccfd9f0a6463cdeded12eaa5235..1f95bda0597c14d2ee785eb8058d607a6c819a56 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -360,16 +360,31 @@ $(obj)/%.dtbo.S: $(obj)/%.dtbo
>  ifeq ($(CONFIG_OF_LIBFDT_OVERLAY),y)
>  DTC_FLAGS += -@
>  endif
>  
> +ifeq ($(CONFIG_ARM64),y)
> +dt_dir := dts/upstream/src/arm64
> +else
> +dt_dir := dts/upstream/src/$(ARCH)
> +endif
> +
> +ifeq ($(CONFIG_OF_UPSTREAM),y)
> +# Embed the upstream path to the DTB into it as /chosen/fdtfile. This property is used
> +# at runtime to set the fdtfile variable
> +dt_extra_snippet = / { chosen { fdtfile = "$(subst $(dt_dir)/,,$@)"; }; };
> +else
> +dt_extra_snippet =
> +endif
> +
>  quiet_cmd_dtc = DTC     $@
>  # Modified for U-Boot
>  # Bring in any U-Boot-specific include at the end of the file
>  # And finally any custom .dtsi fragments specified with CONFIG_DEVICE_TREE_INCLUDES
>  cmd_dtc = mkdir -p $(dir ${dtc-tmp}) ; \
>  	(cat $< > $(pre-tmp)); \
>  	$(foreach f,$(subst $(quote),,$(dtsi_include_list) $(CONFIG_DEVICE_TREE_INCLUDES)), \
>  	  echo '$(pound)include "$(f)"' >> $(pre-tmp);) \
> +	[[ -z "$(dt_extra_snippet)" ]] || echo '$(dt_extra_snippet)' >> $(pre-tmp); \
>  	$(HOSTCC) -E $(dtc_cpp_flags) -I$(obj) -x assembler-with-cpp -o $(dtc-tmp) $(pre-tmp) ; \
>  	$(DTC) -O dtb -o $@ -b 0 \
>  		-i $(dir $<) -i $(u_boot_dtsi_loc) $(DTC_FLAGS) \
>  		-d $(depfile).dtc.tmp $(dtc-tmp) || \
> 
> -- 
> 2.49.0
> 
> 


More information about the U-Boot mailing list