xref: /OK3568_Linux_fs/u-boot/dts/Makefile (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#
2*4882a593Smuzhiyun# Copyright (c) 2011 The Chromium OS Authors.
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# SPDX-License-Identifier:	GPL-2.0+
5*4882a593Smuzhiyun#
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun# This Makefile builds the internal U-Boot fdt if CONFIG_OF_CONTROL is
8*4882a593Smuzhiyun# enabled. See doc/README.fdt-control for more details.
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunDEVICE_TREE ?= $(CONFIG_DEFAULT_DEVICE_TREE:"%"=%)
11*4882a593Smuzhiyunifeq ($(DEVICE_TREE),)
12*4882a593SmuzhiyunDEVICE_TREE := unset
13*4882a593Smuzhiyunendif
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunARCH_PATH := arch/$(ARCH)/dts
16*4882a593Smuzhiyundtb_depends := arch-dtbs
17*4882a593Smuzhiyun
18*4882a593Smuzhiyunifneq ($(EXT_DTB),)
19*4882a593SmuzhiyunDTB := $(EXT_DTB)
20*4882a593Smuzhiyunelse
21*4882a593SmuzhiyunDTB := $(ARCH_PATH)/$(DEVICE_TREE).dtb
22*4882a593Smuzhiyundtb_depends += $(DTB:.dtb=.dts)
23*4882a593Smuzhiyunendif
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun# Pass the original device tree file through fdtgrep twice. The first pass
26*4882a593Smuzhiyun# removes any unwanted nodes (i.e. those which don't have the
27*4882a593Smuzhiyun# 'u-boot,dm-pre-reloc' property and thus are not needed by SPL. The second
28*4882a593Smuzhiyun# pass removes various unused properties from the remaining nodes.
29*4882a593Smuzhiyun# The output is typically a much smaller device tree file.
30*4882a593Smuzhiyunifeq ($(CONFIG_TPL_BUILD),y)
31*4882a593Smuzhiyunfdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-tpl
32*4882a593Smuzhiyunelse
33*4882a593Smuzhiyunfdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-spl
34*4882a593Smuzhiyunendif
35*4882a593Smuzhiyun
36*4882a593Smuzhiyunquiet_cmd_fdtgrep = FDTGREP $@
37*4882a593Smuzhiyun      cmd_fdtgrep = $(objtree)/tools/fdtgrep $(fdtgrep_props) -RT $< \
38*4882a593Smuzhiyun                -n /chosen -n /config -O dtb | \
39*4882a593Smuzhiyun        $(objtree)/tools/fdtgrep -r -O dtb - -o $@ \
40*4882a593Smuzhiyun                $(addprefix -P ,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS)))
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunquiet_cmd_fdtgrep_uboot = FDTGREP $@
43*4882a593Smuzhiyun      cmd_fdtgrep_uboot = $(objtree)/tools/fdtgrep $(fdtgrep_props) -RT $< \
44*4882a593Smuzhiyun		-n /chosen -n /config -O dtb | \
45*4882a593Smuzhiyun	$(objtree)/tools/fdtgrep -r -O dtb - -o $@ \
46*4882a593Smuzhiyun		$(addprefix -P ,$(subst $\",,$(CONFIG_OF_U_BOOT_REMOVE_PROPS)))
47*4882a593Smuzhiyun
48*4882a593Smuzhiyunfdtgrep_tpl_props := -b u-boot,dm-pre-reloc -b u-boot,dm-tpl
49*4882a593Smuzhiyunquiet_cmd_fdtgrep_tpl = FDTGREP $@
50*4882a593Smuzhiyun      cmd_fdtgrep_tpl = $(objtree)/tools/fdtgrep $(fdtgrep_tpl_props) -RT $< \
51*4882a593Smuzhiyun                -n /chosen -n config -O dtb | \
52*4882a593Smuzhiyun        $(objtree)/tools/fdtgrep -r -O dtb - -o $@ \
53*4882a593Smuzhiyun                $(addprefix -P ,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS)))
54*4882a593Smuzhiyun
55*4882a593Smuzhiyunfdtgrep_spl_minimum_props := -b u-boot,dm-spl
56*4882a593Smuzhiyunquiet_cmd_fdtgrep_spl_minimum = FDTGREP $@
57*4882a593Smuzhiyun      cmd_fdtgrep_spl_minimum = $(objtree)/tools/fdtgrep $(fdtgrep_spl_minimum_props) -RT $< \
58*4882a593Smuzhiyun                -n /chosen -n config -O dtb | \
59*4882a593Smuzhiyun        $(objtree)/tools/fdtgrep -r -O dtb - -o $@ \
60*4882a593Smuzhiyun                $(addprefix -P ,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS)))
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun$(obj)/dt-tpl.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE
63*4882a593Smuzhiyun	$(call if_changed,fdtgrep_tpl)
64*4882a593Smuzhiyun
65*4882a593Smuzhiyunifeq ($(CONFIG_SPL_DTB_MINIMUM),y)
66*4882a593Smuzhiyun$(obj)/dt-spl.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE
67*4882a593Smuzhiyun	$(call if_changed,fdtgrep_spl_minimum)
68*4882a593Smuzhiyunelse
69*4882a593Smuzhiyun$(obj)/dt-spl.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE
70*4882a593Smuzhiyun	$(call if_changed,fdtgrep)
71*4882a593Smuzhiyunendif
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun# Normally, usbplug is enabled with kernel dtb disabled
74*4882a593Smuzhiyunifneq ($(CONFIG_USING_KERNEL_DTB)$(CONFIG_SUPPORT_USBPLUG),)
75*4882a593Smuzhiyun$(obj)/dt.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE
76*4882a593Smuzhiyunifneq ($(CONFIG_OF_U_BOOT_REMOVE_PROPS), "")
77*4882a593Smuzhiyun	$(call if_changed,fdtgrep_uboot)
78*4882a593Smuzhiyunelse
79*4882a593Smuzhiyun	$(call if_changed,fdtgrep)
80*4882a593Smuzhiyunendif
81*4882a593Smuzhiyunelse
82*4882a593Smuzhiyun$(obj)/dt.dtb: $(DTB) FORCE
83*4882a593Smuzhiyun	$(call if_changed,shipped)
84*4882a593Smuzhiyunendif
85*4882a593Smuzhiyun
86*4882a593Smuzhiyuntargets += dt.dtb dt-spl.dtb dt-tpl.dtb
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun$(DTB): $(dtb_depends)
89*4882a593Smuzhiyunifeq ($(EXT_DTB),)
90*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(ARCH_PATH) $@
91*4882a593Smuzhiyunendif
92*4882a593Smuzhiyun	$(Q)test -e $@ || (						\
93*4882a593Smuzhiyun	echo >&2;							\
94*4882a593Smuzhiyun	echo >&2 "Device Tree Source is not correctly specified.";	\
95*4882a593Smuzhiyun	echo >&2 "Please define 'CONFIG_DEFAULT_DEVICE_TREE'";		\
96*4882a593Smuzhiyun	echo >&2 "or build with 'DEVICE_TREE=<device_tree>' argument";	\
97*4882a593Smuzhiyun	echo >&2;							\
98*4882a593Smuzhiyun	/bin/false)
99*4882a593Smuzhiyun
100*4882a593Smuzhiyunarch-dtbs:
101*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(ARCH_PATH) dtbs
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun.SECONDARY: $(obj)/dt.dtb.S $(obj)/dt-spl.dtb.S $(obj)/dt-tpl.dtb.S
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun
106*4882a593Smuzhiyunifeq ($(CONFIG_SPL_BUILD),y)
107*4882a593Smuzhiyunobj-$(CONFIG_OF_EMBED) := dt-spl.dtb.o
108*4882a593Smuzhiyun# support "out-of-tree" build for dtb-spl
109*4882a593Smuzhiyun$(obj)/dt-tpl.dtb.o: $(obj)/dt-tpl.dtb.S FORCE
110*4882a593Smuzhiyun	$(call if_changed_dep,as_o_S)
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun$(obj)/dt-spl.dtb.o: $(obj)/dt-spl.dtb.S FORCE
113*4882a593Smuzhiyun	$(call if_changed_dep,as_o_S)
114*4882a593Smuzhiyunelse
115*4882a593Smuzhiyunobj-$(CONFIG_OF_EMBED) := dt.dtb.o
116*4882a593Smuzhiyunendif
117*4882a593Smuzhiyun
118*4882a593Smuzhiyundtbs: $(obj)/dt.dtb $(obj)/dt-spl.dtb $(obj)/dt-tpl.dtb
119*4882a593Smuzhiyun	@:
120*4882a593Smuzhiyun
121*4882a593Smuzhiyunclean-files := dt.dtb.S dt-spl.dtb.S dt-tpl.dtb.S
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun# Let clean descend into dts directories
124*4882a593Smuzhiyunsubdir- += ../arch/arm/dts ../arch/microblaze/dts ../arch/mips/dts ../arch/sandbox/dts ../arch/x86/dts
125