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