From: Alexander Sverdlin <alexander.sverdlin@gmail.com>
To: buildroot@buildroot.org
Cc: Alexander Sverdlin <alexander.sverdlin@gmail.com>,
Romain Naour <romain.naour@smile.fr>
Subject: [Buildroot] [PATCH v2] boot/uboot: support custom DTS with CONFIG_OF_UPSTREAM
Date: Sun, 13 Sep 2026 15:35:15 +0200 [thread overview]
Message-ID: <20260913133520.3423773-1-alexander.sverdlin@gmail.com> (raw)
Since U-Boot 2024.07, boards with CONFIG_OF_UPSTREAM build their device
trees from dts/upstream/src/<arch>/<vendor>/ instead of arch/<arch>/dts/,
so the files copied by BR2_TARGET_UBOOT_CUSTOM_DTS_PATH were ignored and
the build failed with "No rule to make target".
Derive the destination from the U-Boot configuration, including the vendor
sub-directory taken from CONFIG_DEFAULT_DEVICE_TREE. That tree keeps the
Linux architecture naming, so aarch64 has to be mapped back from
UBOOT_ARCH ("arm") to "arm64".
Signed-off-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
---
Changelog:
v2:
- handle *u-boot.dtsi separately
- document the new behaviour with OF_UPSTREAM-enabled U-Boot builds
v1:
https://lore.kernel.org/all/20260901145225.579733-1-alexander.sverdlin@gmail.com/
boot/uboot/Config.in | 13 +++++++++++--
boot/uboot/uboot.mk | 30 +++++++++++++++++++++++++++---
2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/boot/uboot/Config.in b/boot/uboot/Config.in
index 1eabd10407..1795f22b20 100644
--- a/boot/uboot/Config.in
+++ b/boot/uboot/Config.in
@@ -803,8 +803,17 @@ config BR2_TARGET_UBOOT_CUSTOM_DTS_PATH
string "Device Tree Source file paths"
help
Space-separated list of paths to device tree source files
- that will be copied to arch/ARCH/dts/ before starting the
- build.
+ that will be copied before starting the build.
+
+ They are copied to arch/ARCH/dts/, except that a configuration
+ with CONFIG_OF_UPSTREAM (U-Boot 2024.07 and later) builds its
+ device trees from the vendor directory below dts/upstream/src/
+ that CONFIG_DEFAULT_DEVICE_TREE names, so they are copied
+ there instead.
+
+ The *u-boot.dtsi fragments U-Boot includes on its own are
+ copied to arch/ARCH/dts/ in either case, as that is the only
+ place it looks for them.
To use this device tree source file, the U-Boot configuration
file must refer to it.
diff --git a/boot/uboot/uboot.mk b/boot/uboot/uboot.mk
index 5b3f46ac74..1453308c17 100644
--- a/boot/uboot/uboot.mk
+++ b/boot/uboot/uboot.mk
@@ -426,10 +426,34 @@ endif # BR2_TARGET_UBOOT_BUILD_SYSTEM_LEGACY
UBOOT_CUSTOM_DTS_PATH = $(call qstrip,$(BR2_TARGET_UBOOT_CUSTOM_DTS_PATH))
+# With CONFIG_OF_UPSTREAM the device trees are built from dts/upstream/src/
+# instead of arch/<arch>/dts/, in the vendor sub-directory encoded in the
+# device tree name. That tree keeps the Linux architecture naming, so aarch64
+# has to be mapped back from UBOOT_ARCH ("arm") to "arm64". The fragments
+# U-Boot includes on its own are searched for in arch/<arch>/dts/ only, so
+# they stay there whatever the device trees do.
+define UBOOT_INSTALL_CUSTOM_DTS
+ arch_dir="arch/$(UBOOT_ARCH)/dts"; \
+ dts_dir="$$arch_dir"; \
+ if grep -q "^CONFIG_OF_UPSTREAM=y" $(@D)/.config; then \
+ if grep -q "^CONFIG_ARM64=y" $(@D)/.config; then \
+ dts_dir="dts/upstream/src/arm64"; \
+ else \
+ dts_dir="dts/upstream/src/$(UBOOT_ARCH)"; \
+ fi; \
+ dt=$$(sed -n 's/^CONFIG_DEFAULT_DEVICE_TREE="\(.*\)"$$/\1/p' $(@D)/.config); \
+ case "$$dt" in */*) dts_dir="$$dts_dir/$${dt%/*}";; esac; \
+ fi; \
+ for dts in $(UBOOT_CUSTOM_DTS_PATH); do \
+ case "$$dts" in \
+ *u-boot.dtsi) cp -f "$$dts" $(@D)/$$arch_dir/;; \
+ *) cp -f "$$dts" $(@D)/$$dts_dir/;; \
+ esac; \
+ done
+endef
+
define UBOOT_BUILD_CMDS
- $(if $(UBOOT_CUSTOM_DTS_PATH),
- cp -f $(UBOOT_CUSTOM_DTS_PATH) $(@D)/arch/$(UBOOT_ARCH)/dts/
- )
+ $(if $(UBOOT_CUSTOM_DTS_PATH),$(UBOOT_INSTALL_CUSTOM_DTS))
$(TARGET_CONFIGURE_OPTS) \
PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
PKG_CONFIG_SYSROOT_DIR="/" \
--
2.55.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
reply other threads:[~2026-09-13 13:35 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260913133520.3423773-1-alexander.sverdlin@gmail.com \
--to=alexander.sverdlin@gmail.com \
--cc=buildroot@buildroot.org \
--cc=romain.naour@smile.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox