dts: Add ability to build fallback DTBOs from arch/$(ARCH)/dts

Currently the enablement of OF_UPSTREAM results on the build system
searching for DTs only in dts/upstream/ . There are platforms which
use U-Boot specific DTBOs applied on top of U-Boot control DT during
SPL stage, and source DTs for these are located in arch/$(ARCH)/dtb.

Add dedicated 'dtbos' target which builds only .dtbos and not .dtbs and
in case CONFIG_OF_UPSTREAM_INCLUDE_LOCAL_FALLBACK_DTBOS is enabled, build
this target for arch/$(ARCH)/dtb to generate local U-Boot specific DTBOs.

Adjust top level Makefile so binman would search for .dtb and .dtbo in
both OF_UPSTREAM specific paths and arch/$(ARCH)/dtb for the .dtbo case
in case CONFIG_OF_UPSTREAM_INCLUDE_LOCAL_FALLBACK_DTBOS is enabled.

Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
Signed-off-by: Marek Vasut <marex@denx.de>
This commit is contained in:
Marek Vasut 2024-10-17 03:08:40 +02:00 committed by Fabio Estevam
parent 608a31bdec
commit a55c4836f3
4 changed files with 39 additions and 1 deletions

View file

@ -1383,7 +1383,11 @@ of_list := "$(ext_dtb_list)"
of_list_dirs := $(dir $(EXT_DTB))
else
of_list := $(CONFIG_OF_LIST)
ifneq ($(CONFIG_OF_UPSTREAM_INCLUDE_LOCAL_FALLBACK_DTBOS),)
of_list_dirs := $(dt_dir) arch/$(ARCH)/dts
else
of_list_dirs := $(dt_dir)
endif
default_dt := $(if $(DEVICE_TREE),$(DEVICE_TREE),$(CONFIG_DEFAULT_DEVICE_TREE))
endif

View file

@ -125,6 +125,22 @@ config OF_UPSTREAM_VENDOR
help
Select the vendor to build all devicetree files for.
config OF_UPSTREAM_INCLUDE_LOCAL_FALLBACK_DTBOS
bool "Build local DTBOs as fallback for DTBOs missing upstream"
default n
depends on OF_UPSTREAM
help
Enable building DTBOs from arch/$(ARCH)/dts as a fallback for
DTBOs which are not part of Linux kernel upstream yet. This is
a stopgap measure to expedite OF_UPSTREAM switch for platforms
which already have main DT in Linux kernel upstream, but still
have leftover DTBOs in U-Boot tree.
Do not use this option, upstream your DTs and DTBOs instead.
If the upstreaming is in progress, use with utmost caution.
If unsure, say N.
choice
prompt "Provider of DTB for DT control"
depends on OF_CONTROL

View file

@ -20,6 +20,12 @@ else
dt_dir := arch/$(ARCH)/dts
endif
ifneq ($(CONFIG_OF_UPSTREAM_INCLUDE_LOCAL_FALLBACK_DTBOS),)
local_dtbos := local-dtbos
else
local_dtbos :=
endif
ifneq ($(EXT_DTB),)
DTB := $(EXT_DTB)
else
@ -40,7 +46,7 @@ endif
targets += dt.dtb
$(DTB): arch-dtbs
$(DTB): arch-dtbs $(local_dtbos)
$(Q)test -e $@ || ( \
echo >&2; \
echo >&2 "Device Tree Source ($@) is not correctly specified."; \
@ -53,6 +59,12 @@ PHONY += arch-dtbs
arch-dtbs:
$(Q)$(MAKE) $(build)=$(dt_dir) dtbs
ifneq ($(CONFIG_OF_UPSTREAM_INCLUDE_LOCAL_FALLBACK_DTBOS),)
PHONY += local-dtbos
local-dtbos:
$(Q)$(MAKE) $(build)=arch/$(ARCH)/dts dtbos
endif
ifeq ($(CONFIG_XPL_BUILD),y)
obj-$(CONFIG_OF_EMBED) := dt-spl.dtb.o
# support "out-of-tree" build for dtb-spl

View file

@ -21,4 +21,10 @@ PHONY += dtbs
dtbs: $(addprefix $(obj)/, $(dtb-y))
@:
ifneq ($(CONFIG_OF_UPSTREAM_INCLUDE_LOCAL_FALLBACK_DTBOS),)
PHONY += dtbos
dtbos: $(addprefix $(obj)/, $(filter-out %.dtb,$(dtb-y)))
@:
endif
clean-files := *.dtb *.dtbo */*.dtb */*.dtbo *_HS