1# SPDX-License-Identifier: GPL-2.0+
2#
3# (C) Copyright 2000-2006
4# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5#
6# (C) Copyright 2011 Freescale Semiconductor, Inc.
7
8ifeq ($(SOC),$(filter $(SOC),mx25 mx35 mx5 mx6 mx7 imx8m imx9 vf610))
9obj-y	= iomux-v3.o
10endif
11
12ifeq ($(SOC),$(filter $(SOC),imx8m))
13ifneq ($(CONFIG_SPL_BUILD),y)
14obj-$(CONFIG_IMX_BOOTAUX) += imx_bootaux.o
15endif
16obj-$(CONFIG_ENV_IS_IN_MMC) += mmc_env.o
17obj-$(CONFIG_FEC_MXC) += mac.o
18obj-$(CONFIG_DWC_ETH_QOS) += mac.o
19obj-$(CONFIG_SYS_I2C_MXC) += i2c-mxv7.o
20obj-$(CONFIG_IMX_HAB) += hab.o
21obj-y += cpu.o
22endif
23
24ifeq ($(SOC),$(filter $(SOC),mx5 mx6))
25obj-y	+= cpu.o speed.o
26ifneq ($(CONFIG_MX51),y)
27obj-y	+= mmdc_size.o
28endif
29obj-$(CONFIG_GPT_TIMER) += timer.o
30obj-$(CONFIG_SYS_I2C_MXC) += i2c-mxv7.o
31endif
32ifeq ($(SOC),$(filter $(SOC),mx7 mx6 mxs imx8m imx8 imx9 imxrt))
33obj-y	+= misc.o
34obj-$(CONFIG_CMD_PRIBLOB) += priblob.o
35obj-$(CONFIG_SPL_BUILD)	+= spl.o
36endif
37ifeq ($(SOC),$(filter $(SOC),mx7))
38obj-y	+= cpu.o
39obj-$(CONFIG_SYS_I2C_MXC) += i2c-mxv7.o
40obj-$(CONFIG_ENV_IS_IN_MMC) += mmc_env.o
41endif
42ifeq ($(SOC),$(filter $(SOC),mx7 imx8m))
43ifneq ($(CONFIG_SPL_BUILD),y)
44obj-$(CONFIG_FSL_MFGPROT) += cmd_mfgprot.o
45endif
46endif
47ifeq ($(SOC),$(filter $(SOC),mx5 mx6 mx7))
48obj-$(CONFIG_IMX_VIDEO_SKIP) += video.o
49endif
50ifeq ($(SOC),$(filter $(SOC),mx6 mx7))
51obj-y	+= cache.o init.o
52obj-$(CONFIG_FEC_MXC) += mac.o
53obj-$(CONFIG_IMX_RDC) += rdc-sema.o
54ifneq ($(CONFIG_SPL_BUILD),y)
55obj-$(CONFIG_IMX_BOOTAUX) += imx_bootaux.o
56endif
57obj-$(CONFIG_SATA) += sata.o
58obj-$(CONFIG_IMX_HAB)    += hab.o
59obj-$(CONFIG_SYSCOUNTER_TIMER) += syscounter.o
60endif
61ifeq ($(SOC),$(filter $(SOC),mx7ulp))
62obj-y  += cache.o mmdc_size.o
63obj-$(CONFIG_IMX_HAB) += hab.o
64endif
65ifeq ($(SOC),$(filter $(SOC),vf610))
66obj-y += ddrmc-vf610.o
67obj-$(CONFIG_DDRMC_VF610_CALIBRATION) += ddrmc-vf610-calibration.o
68endif
69ifneq ($(CONFIG_SPL_BUILD),y)
70obj-$(CONFIG_CMD_BMODE) += cmd_bmode.o
71obj-$(CONFIG_CMD_HDMIDETECT) += cmd_hdmidet.o
72obj-$(CONFIG_CMD_DEKBLOB) += cmd_dek.o
73obj-$(CONFIG_CMD_NANDBCB) += cmd_nandbcb.o
74endif
75
76ifeq ($(CONFIG_SPL_BUILD),y)
77obj-$(CONFIG_SPL_LOAD_IMX_CONTAINER) += image-container.o parse-container.o
78endif
79
80ifeq ($(SOC),$(filter $(SOC),imx8ulp imx9))
81obj-$(CONFIG_AHAB_BOOT) += ele_ahab.o
82endif
83
84PLUGIN = board/$(BOARDDIR)/plugin
85
86ifeq ($(CONFIG_USE_IMXIMG_PLUGIN),y)
87
88$(PLUGIN).o: $(PLUGIN).S FORCE
89	$(Q)mkdir -p $(dir $@)
90	$(call if_changed_dep,as_o_S)
91
92$(PLUGIN).bin: $(PLUGIN).o FORCE
93	$(Q)mkdir -p $(dir $@)
94	$(OBJCOPY) -O binary --gap-fill 0xff $< $@
95else
96
97$(PLUGIN).bin:
98
99endif
100
101quiet_cmd_cpp_cfg = CFGS    $@
102      cmd_cpp_cfg = $(CPP) $(cpp_flags) -D__ASSEMBLY__ -x c -o $@ $<
103
104# mkimage source config file
105IMX_CONFIG = $(CONFIG_IMX_CONFIG:"%"=%)
106
107# How to create a cpp processed config file, they all use the same source
108%.cfgout: $(IMX_CONFIG) FORCE
109	$(Q)mkdir -p $(dir $@)
110	$(call if_changed_dep,cpp_cfg)
111
112IMX_CONTAINER_CFG = $(CONFIG_IMX_CONTAINER_CFG:"%"=%)
113container.cfg: $(IMX_CONTAINER_CFG) FORCE
114	$(Q)mkdir -p $(dir $@)
115	$(call if_changed_dep,cpp_cfg)
116
117ifeq ($(CONFIG_ARCH_IMX8), y)
118CNTR_DEPFILES := $(srctree)/tools/imx_cntr_image.sh
119IMAGE_TYPE := imx8image
120ifeq ($(CONFIG_SPL_BUILD),y)
121SPL_DEPFILE_EXISTS := $(shell $(CPP) $(cpp_flags) -x c -o spl/u-boot-spl.cfgout $(srctree)/$(IMX_CONFIG); if [ -f spl/u-boot-spl.cfgout ]; then $(CNTR_DEPFILES) spl/u-boot-spl.cfgout; echo $$?; fi)
122endif
123DEPFILE_EXISTS := $(shell $(CPP) $(cpp_flags) -x c -o u-boot-dtb.cfgout $(srctree)/$(IMX_CONFIG); if [ -f u-boot-dtb.cfgout ]; then $(CNTR_DEPFILES) u-boot-dtb.cfgout; echo $$?; fi)
124else ifeq ($(CONFIG_ARCH_IMX8M), y)
125IMAGE_TYPE := imx8mimage
126DEPFILE_EXISTS := 0
127else
128IMAGE_TYPE := imximage
129DEPFILE_EXISTS := 0
130endif
131
132MKIMAGEFLAGS_u-boot.imx = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) \
133	-T $(IMAGE_TYPE) -e $(CONFIG_TEXT_BASE)
134u-boot.imx: MKIMAGEOUTPUT = u-boot.imx.log
135
136u-boot.imx: u-boot.bin u-boot.cfgout $(PLUGIN).bin FORCE
137	$(call if_changed,mkimage)
138
139quiet_cmd_u-boot-nand_imx = GEN     $@
140cmd_u-boot-nand_imx = (dd bs=1024 count=1 if=/dev/zero 2>/dev/null) | cat - $< > $@
141
142u-boot-nand.imx: u-boot.imx FORCE
143	$(call if_changed,u-boot-nand_imx)
144
145ifeq ($(CONFIG_MULTI_DTB_FIT),y)
146MKIMAGEFLAGS_u-boot-dtb.imx = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) \
147	-T $(IMAGE_TYPE) -e $(CONFIG_TEXT_BASE)
148u-boot-dtb.imx: MKIMAGEOUTPUT = u-boot-dtb.imx.log
149
150u-boot-dtb.imx: u-boot-fit-dtb.bin u-boot-dtb.cfgout $(PLUGIN).bin FORCE
151ifeq ($(DEPFILE_EXISTS),0)
152	$(call if_changed,mkimage)
153endif
154else ifeq ($(CONFIG_OF_SEPARATE),y)
155MKIMAGEFLAGS_u-boot-dtb.imx = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) \
156	-T $(IMAGE_TYPE) -e $(CONFIG_TEXT_BASE)
157u-boot-dtb.imx: MKIMAGEOUTPUT = u-boot-dtb.imx.log
158
159u-boot-dtb.imx: u-boot-dtb.bin u-boot-dtb.cfgout $(PLUGIN).bin FORCE
160ifeq ($(DEPFILE_EXISTS),0)
161	$(call if_changed,mkimage)
162endif
163endif
164
165ifdef CONFIG_ARM64
166ifeq ($(CONFIG_ARCH_IMX8M), y)
167
168SPL: spl/u-boot-spl.bin spl/u-boot-spl.cfgout FORCE
169
170MKIMAGEFLAGS_flash.bin = -n spl/u-boot-spl.cfgout \
171		   -T $(IMAGE_TYPE) -e $(CONFIG_SPL_TEXT_BASE)
172flash.bin: MKIMAGEOUTPUT = flash.log
173
174spl/u-boot-spl.cfgout: $(IMX_CONFIG) FORCE
175	$(Q)mkdir -p $(dir $@)
176	$(call if_changed_dep,cpp_cfg)
177
178spl/u-boot-spl-ddr.bin: spl/u-boot-spl.bin spl/u-boot-spl.cfgout FORCE
179
180flash.bin: spl/u-boot-spl-ddr.bin u-boot.itb FORCE
181	$(call if_changed,mkimage)
182endif
183
184ifeq ($(CONFIG_ARCH_IMX8), y)
185SPL:
186
187MKIMAGEFLAGS_flash.bin = -n spl/u-boot-spl.cfgout -T $(IMAGE_TYPE) -e 0x100000
188flash.bin: MKIMAGEOUTPUT = flash.log
189
190MKIMAGEFLAGS_u-boot.cnt = -n container.cfg -T $(IMAGE_TYPE) -e 0x100000
191u-boot.cnt: MKIMAGEOUTPUT = u-boot.cnt.log
192
193ifeq ($(CONFIG_SPL_LOAD_IMX_CONTAINER), y)
194u-boot.cnt: u-boot.bin container.cfg FORCE
195	$(call if_changed,mkimage)
196flash.bin: spl/u-boot-spl.bin FORCE
197	$(call if_changed,mkimage)
198	@flashbin_size=`wc -c flash.bin | awk '{print $$1}'`; \
199                   pad_cnt=$$(((flashbin_size + 0x400 - 1) / 0x400)); \
200                   echo "append u-boot.cnt at $$pad_cnt KB"; \
201                   dd if=u-boot.cnt of=flash.bin bs=1K seek=$$pad_cnt;
202else
203flash.bin: spl/u-boot-spl.bin FORCE
204	$(call if_changed,mkimage)
205endif
206endif
207
208ifeq ($(CONFIG_ARCH_IMX9), y)
209SPL:
210endif
211
212else
213MKIMAGEFLAGS_SPL = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) \
214		   -T $(IMAGE_TYPE) -e $(CONFIG_SPL_TEXT_BASE)
215SPL: MKIMAGEOUTPUT = SPL.log
216
217SPL: spl/u-boot-spl.bin spl/u-boot-spl.cfgout $(PLUGIN).bin FORCE
218	$(call if_changed,mkimage)
219
220MKIMAGEFLAGS_u-boot.uim = -A arm -O U-Boot -a $(CONFIG_TEXT_BASE) \
221		-e $(CONFIG_TEXT_BASE) -C none -T firmware
222
223u-boot.uim: u-boot.bin FORCE
224	$(call if_changed,mkimage)
225
226OBJCOPYFLAGS += -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
227append = cat $(filter-out $< $(PHONY), $^) >> $@
228
229quiet_cmd_pad_cat = CAT     $@
230cmd_pad_cat = $(cmd_objcopy) && $(append) || rm -f $@
231
232u-boot-with-spl.imx: SPL $(if $(CONFIG_OF_SEPARATE),u-boot.img,u-boot.uim) FORCE
233	$(call if_changed,pad_cat)
234
235u-boot-with-nand-spl.imx: spl/u-boot-nand-spl.imx $(if $(CONFIG_OF_SEPARATE),u-boot.img,u-boot.uim) FORCE
236	$(call if_changed,pad_cat)
237
238quiet_cmd_u-boot-nand-spl_imx = GEN     $@
239cmd_u-boot-nand-spl_imx = (printf '\000\000\000\000\106\103\102\040\001' && \
240	dd bs=1015 count=1 if=/dev/zero 2>/dev/null) | cat - $< > $@
241
242spl/u-boot-nand-spl.imx: SPL FORCE
243	$(call if_changed,u-boot-nand-spl_imx)
244endif
245
246targets += $(addprefix ../../../,SPL spl/u-boot-spl.cfgout u-boot-dtb.cfgout u-boot.cfgout u-boot.uim spl/u-boot-nand-spl.imx)
247
248obj-$(CONFIG_MX5) += mx5/
249obj-$(CONFIG_MX6) += mx6/
250obj-$(CONFIG_MX7) += mx7/
251obj-$(CONFIG_ARCH_MX7ULP) += mx7ulp/
252obj-$(CONFIG_ARCH_IMX8ULP) += imx8ulp/
253obj-$(CONFIG_IMX8M) += imx8m/
254obj-$(CONFIG_ARCH_IMX8) += imx8/
255obj-$(CONFIG_ARCH_IMX9) += imx9/
256obj-$(CONFIG_ARCH_IMXRT) += imxrt/
257
258obj-$(CONFIG_SPL_BOOTROM_SUPPORT) += spl_imx_romapi.o
259obj-$(CONFIG_IMX8_ROMAPI) += romapi.o
260