Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
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