1bbb0b128SSimon Glass# 2bbb0b128SSimon Glass# Copyright (c) 2011 The Chromium OS Authors. 3bbb0b128SSimon Glass# 41a459660SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+ 5bbb0b128SSimon Glass# 6bbb0b128SSimon Glass 7bbb0b128SSimon Glass# This Makefile builds the internal U-Boot fdt if CONFIG_OF_CONTROL is 8bbb0b128SSimon Glass# enabled. See doc/README.fdt-control for more details. 9bbb0b128SSimon Glass 10efcf8619SMasahiro YamadaDEVICE_TREE ?= $(CONFIG_DEFAULT_DEVICE_TREE:"%"=%) 11efcf8619SMasahiro Yamadaifeq ($(DEVICE_TREE),) 123284c8b8SMasahiro YamadaDEVICE_TREE := unset 13efcf8619SMasahiro Yamadaendif 14bbb0b128SSimon Glass 1527cb7300SJames BaleanARCH_PATH := arch/$(ARCH)/dts 1627cb7300SJames Baleandtb_depends := arch-dtbs 1727cb7300SJames Balean 18d18926afSSimon Glassifneq ($(EXT_DTB),) 19d18926afSSimon GlassDTB := $(EXT_DTB) 2063b4b5baSSimon Glasselse 2127cb7300SJames BaleanDTB := $(ARCH_PATH)/$(DEVICE_TREE).dtb 2227cb7300SJames Baleandtb_depends += $(DTB:.dtb=.dts) 2363b4b5baSSimon Glassendif 24bbb0b128SSimon Glass 256222c401SGoldschmidt Simon# Pass the original device tree file through fdtgrep twice. The first pass 266222c401SGoldschmidt Simon# removes any unwanted nodes (i.e. those which don't have the 276222c401SGoldschmidt Simon# 'u-boot,dm-pre-reloc' property and thus are not needed by SPL. The second 286222c401SGoldschmidt Simon# pass removes various unused properties from the remaining nodes. 296222c401SGoldschmidt Simon# The output is typically a much smaller device tree file. 306222c401SGoldschmidt Simonifeq ($(CONFIG_TPL_BUILD),y) 316222c401SGoldschmidt Simonfdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-tpl 326222c401SGoldschmidt Simonelse 336222c401SGoldschmidt Simonfdtgrep_props := -b u-boot,dm-pre-reloc -b u-boot,dm-spl 346222c401SGoldschmidt Simonendif 35*c48a3a80SJoseph Chen 366222c401SGoldschmidt Simonquiet_cmd_fdtgrep = FDTGREP $@ 376222c401SGoldschmidt Simon cmd_fdtgrep = $(objtree)/tools/fdtgrep $(fdtgrep_props) -RT $< \ 386222c401SGoldschmidt Simon -n /chosen -n /config -O dtb | \ 396222c401SGoldschmidt Simon $(objtree)/tools/fdtgrep -r -O dtb - -o $@ \ 406222c401SGoldschmidt Simon $(addprefix -P ,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS))) 416222c401SGoldschmidt Simon 42*c48a3a80SJoseph Chenquiet_cmd_fdtgrep_uboot = FDTGREP $@ 43*c48a3a80SJoseph Chen cmd_fdtgrep_uboot = $(objtree)/tools/fdtgrep $(fdtgrep_props) -RT $< \ 44*c48a3a80SJoseph Chen -n /chosen -n /config -O dtb | \ 45*c48a3a80SJoseph Chen $(objtree)/tools/fdtgrep -r -O dtb - -o $@ \ 46*c48a3a80SJoseph Chen $(addprefix -P ,$(subst $\",,$(CONFIG_OF_U_BOOT_REMOVE_PROPS))) 47*c48a3a80SJoseph Chen 488dd9db5dSJoseph Chenfdtgrep_tpl_props := -b u-boot,dm-pre-reloc -b u-boot,dm-tpl 498dd9db5dSJoseph Chenquiet_cmd_fdtgrep_tpl = FDTGREP $@ 508dd9db5dSJoseph Chen cmd_fdtgrep_tpl = $(objtree)/tools/fdtgrep $(fdtgrep_tpl_props) -RT $< \ 514447bf16SJoseph Chen -n /chosen -n config -O dtb | \ 524447bf16SJoseph Chen $(objtree)/tools/fdtgrep -r -O dtb - -o $@ \ 534447bf16SJoseph Chen $(addprefix -P ,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS))) 544447bf16SJoseph Chen 554447bf16SJoseph Chenfdtgrep_spl_minimum_props := -b u-boot,dm-spl 564447bf16SJoseph Chenquiet_cmd_fdtgrep_spl_minimum = FDTGREP $@ 574447bf16SJoseph Chen cmd_fdtgrep_spl_minimum = $(objtree)/tools/fdtgrep $(fdtgrep_spl_minimum_props) -RT $< \ 584447bf16SJoseph Chen -n /chosen -n config -O dtb | \ 598dd9db5dSJoseph Chen $(objtree)/tools/fdtgrep -r -O dtb - -o $@ \ 608dd9db5dSJoseph Chen $(addprefix -P ,$(subst $\",,$(CONFIG_OF_SPL_REMOVE_PROPS))) 618dd9db5dSJoseph Chen 628dd9db5dSJoseph Chen$(obj)/dt-tpl.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE 638dd9db5dSJoseph Chen $(call if_changed,fdtgrep_tpl) 648dd9db5dSJoseph Chen 654447bf16SJoseph Chenifeq ($(CONFIG_SPL_DTB_MINIMUM),y) 664447bf16SJoseph Chen$(obj)/dt-spl.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE 674447bf16SJoseph Chen $(call if_changed,fdtgrep_spl_minimum) 684447bf16SJoseph Chenelse 696222c401SGoldschmidt Simon$(obj)/dt-spl.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE 706222c401SGoldschmidt Simon $(call if_changed,fdtgrep) 714447bf16SJoseph Chenendif 726222c401SGoldschmidt Simon 73*c48a3a80SJoseph Chen# Normally, usbplug is enabled with kernel dtb disabled 744a2b8db4SJoseph Chenifneq ($(CONFIG_USING_KERNEL_DTB)$(CONFIG_SUPPORT_USBPLUG),) 75fcdd83d4SJoseph Chen$(obj)/dt.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE 76*c48a3a80SJoseph Chenifneq ($(CONFIG_OF_U_BOOT_REMOVE_PROPS), "") 77*c48a3a80SJoseph Chen $(call if_changed,fdtgrep_uboot) 78*c48a3a80SJoseph Chenelse 79fcdd83d4SJoseph Chen $(call if_changed,fdtgrep) 80*c48a3a80SJoseph Chenendif 81fcdd83d4SJoseph Chenelse 823284c8b8SMasahiro Yamada$(obj)/dt.dtb: $(DTB) FORCE 83b9d1dbd4SMasahiro Yamada $(call if_changed,shipped) 84fcdd83d4SJoseph Chenendif 85bbb0b128SSimon Glass 868dd9db5dSJoseph Chentargets += dt.dtb dt-spl.dtb dt-tpl.dtb 87bbb0b128SSimon Glass 8827cb7300SJames Balean$(DTB): $(dtb_depends) 8927cb7300SJames Baleanifeq ($(EXT_DTB),) 9027cb7300SJames Balean $(Q)$(MAKE) $(build)=$(ARCH_PATH) $@ 9127cb7300SJames Baleanendif 923284c8b8SMasahiro Yamada $(Q)test -e $@ || ( \ 933284c8b8SMasahiro Yamada echo >&2; \ 943284c8b8SMasahiro Yamada echo >&2 "Device Tree Source is not correctly specified."; \ 953284c8b8SMasahiro Yamada echo >&2 "Please define 'CONFIG_DEFAULT_DEVICE_TREE'"; \ 963284c8b8SMasahiro Yamada echo >&2 "or build with 'DEVICE_TREE=<device_tree>' argument"; \ 973284c8b8SMasahiro Yamada echo >&2; \ 983284c8b8SMasahiro Yamada /bin/false) 993284c8b8SMasahiro Yamada 1003284c8b8SMasahiro Yamadaarch-dtbs: 10127cb7300SJames Balean $(Q)$(MAKE) $(build)=$(ARCH_PATH) dtbs 1026ab6b2afSMasahiro Yamada 1038dd9db5dSJoseph Chen.SECONDARY: $(obj)/dt.dtb.S $(obj)/dt-spl.dtb.S $(obj)/dt-tpl.dtb.S 1046ab6b2afSMasahiro Yamada 1056222c401SGoldschmidt Simon 1066222c401SGoldschmidt Simonifeq ($(CONFIG_SPL_BUILD),y) 1076222c401SGoldschmidt Simonobj-$(CONFIG_OF_EMBED) := dt-spl.dtb.o 1086222c401SGoldschmidt Simon# support "out-of-tree" build for dtb-spl 1098dd9db5dSJoseph Chen$(obj)/dt-tpl.dtb.o: $(obj)/dt-tpl.dtb.S FORCE 1108dd9db5dSJoseph Chen $(call if_changed_dep,as_o_S) 1118dd9db5dSJoseph Chen 1126222c401SGoldschmidt Simon$(obj)/dt-spl.dtb.o: $(obj)/dt-spl.dtb.S FORCE 1136222c401SGoldschmidt Simon $(call if_changed_dep,as_o_S) 1146222c401SGoldschmidt Simonelse 1156ab6b2afSMasahiro Yamadaobj-$(CONFIG_OF_EMBED) := dt.dtb.o 1166222c401SGoldschmidt Simonendif 1176ab6b2afSMasahiro Yamada 1188dd9db5dSJoseph Chendtbs: $(obj)/dt.dtb $(obj)/dt-spl.dtb $(obj)/dt-tpl.dtb 1196ab6b2afSMasahiro Yamada @: 1206ab6b2afSMasahiro Yamada 1218dd9db5dSJoseph Chenclean-files := dt.dtb.S dt-spl.dtb.S dt-tpl.dtb.S 1223284c8b8SMasahiro Yamada 1233284c8b8SMasahiro Yamada# Let clean descend into dts directories 124be6b2b31SMasahiro Yamadasubdir- += ../arch/arm/dts ../arch/microblaze/dts ../arch/mips/dts ../arch/sandbox/dts ../arch/x86/dts 125