2 # Copyright (c) 2011 The Chromium OS Authors.
4 # SPDX-License-Identifier: GPL-2.0+
7 # This Makefile builds the internal U-Boot fdt if CONFIG_OF_CONTROL is
8 # enabled. See doc/README.fdt-control for more details.
10 DEVICE_TREE ?
= $(CONFIG_DEFAULT_DEVICE_TREE
:"%"=%)
11 ifeq ($(DEVICE_TREE
),)
15 ARCH_PATH
:= arch
/$(ARCH
)/dts
16 dtb_depends
:= arch-dtbs
21 DTB
:= $(ARCH_PATH
)/$(DEVICE_TREE
).dtb
22 dtb_depends
+= $(DTB
:.dtb
=.dts
)
25 # Pass the original device tree file through fdtgrep twice. The first pass
26 # removes any unwanted nodes (i.e. those which don't have the
27 # 'u-boot,dm-pre-reloc' property and thus are not needed by SPL. The second
28 # pass removes various unused properties from the remaining nodes.
29 # The output is typically a much smaller device tree file.
30 ifeq ($(CONFIG_TPL_BUILD
),y
)
31 fdtgrep_props
:= -b u-boot
,dm-pre-reloc
-b u-boot
,dm-tpl
33 fdtgrep_props
:= -b u-boot
,dm-pre-reloc
-b u-boot
,dm-spl
35 quiet_cmd_fdtgrep
= FDTGREP
$@
36 cmd_fdtgrep
= $(objtree
)/tools
/fdtgrep
$(fdtgrep_props
) -RT
$< \
37 -n
/chosen
-n
/config
-O dtb | \
38 $(objtree
)/tools
/fdtgrep
-r
-O dtb
- -o
$@ \
39 $(addprefix -P
,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS
)))
41 $(obj
)/dt-spl.dtb
: $(DTB
) $(objtree
)/tools
/fdtgrep FORCE
42 $(call if_changed
,fdtgrep
)
44 $(obj
)/dt.dtb
: $(DTB
) FORCE
45 $(call if_changed
,shipped
)
47 targets
+= dt.dtb dt-spl.dtb
49 $(DTB
): $(dtb_depends
)
51 $(Q
)$(MAKE
) $(build
)=$(ARCH_PATH
) $@
55 echo
>&2 "Device Tree Source is not correctly specified."; \
56 echo
>&2 "Please define 'CONFIG_DEFAULT_DEVICE_TREE'"; \
57 echo
>&2 "or build with 'DEVICE_TREE=<device_tree>' argument"; \
62 $(Q
)$(MAKE
) $(build
)=$(ARCH_PATH
) dtbs
64 .SECONDARY
: $(obj
)/dt.dtb.S
$(obj
)/dt-spl.dtb.S
67 ifeq ($(CONFIG_SPL_BUILD
),y
)
68 obj-
$(CONFIG_OF_EMBED
) := dt-spl.dtb.o
69 # support "out-of-tree" build for dtb-spl
70 $(obj
)/dt-spl.dtb.o
: $(obj
)/dt-spl.dtb.S FORCE
71 $(call if_changed_dep
,as_o_S
)
73 obj-
$(CONFIG_OF_EMBED
) := dt.dtb.o
76 dtbs
: $(obj
)/dt.dtb
$(obj
)/dt-spl.dtb
79 clean-files
:= dt.dtb.S dt-spl.dtb.S
81 # Let clean descend into dts directories
82 subdir-
+= ..
/arch
/arm
/dts ..
/arch
/microblaze
/dts ..
/arch
/mips
/dts ..
/arch
/sandbox
/dts ..
/arch
/x86
/dts