xref: /rk3399_ARM-atf/plat/st/stm32mp1/platform.mk (revision a2e0123484e62df8ed9f2943dbd158471bf31221)
1#
2# Copyright (c) 2015-2022, ARM Limited and Contributors. All rights reserved.
3#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6
7ARM_CORTEX_A7		:=	yes
8ARM_WITH_NEON		:=	yes
9BL2_AT_EL3		:=	1
10USE_COHERENT_MEM	:=	0
11
12STM32MP_EARLY_CONSOLE	?=	0
13STM32MP_RECONFIGURE_CONSOLE ?=	0
14STM32MP_UART_BAUDRATE	?=	115200
15
16# Allow TF-A to concatenate BL2 & BL32 binaries in a single file,
17# share DTB file between BL2 and BL32
18# If it is set to 0, then FIP is used
19STM32MP_USE_STM32IMAGE	?=	0
20
21TRUSTED_BOARD_BOOT	?=	0
22STM32MP_USE_EXTERNAL_HEAP ?=	0
23
24# Use secure library from the ROM code for authentication
25STM32MP_CRYPTO_ROM_LIB	?=	0
26
27# Please don't increment this value without good understanding of
28# the monotonic counter
29STM32_TF_VERSION	?=	0
30
31# Enable dynamic memory mapping
32PLAT_XLAT_TABLES_DYNAMIC :=	1
33
34# Default Device tree
35DTB_FILE_NAME		?=	stm32mp157c-ev1.dtb
36
37STM32MP13		?=	0
38STM32MP15		?=	0
39
40ifeq ($(STM32MP13),1)
41ifeq ($(STM32MP15),1)
42$(error Cannot enable both flags STM32MP13 and STM32MP15)
43endif
44STM32MP13		:=	1
45STM32MP15		:=	0
46else ifeq ($(STM32MP15),1)
47STM32MP13		:=	0
48STM32MP15		:=	1
49else ifneq ($(findstring stm32mp13,$(DTB_FILE_NAME)),)
50STM32MP13		:=	1
51STM32MP15		:=	0
52else ifneq ($(findstring stm32mp15,$(DTB_FILE_NAME)),)
53STM32MP13		:=	0
54STM32MP15		:=	1
55endif
56
57ifeq ($(STM32MP13),1)
58# Will use SRAM2 as mbedtls heap
59STM32MP_USE_EXTERNAL_HEAP :=	1
60
61# DDR controller with single AXI port and 16-bit interface
62STM32MP_DDR_DUAL_AXI_PORT:=	0
63STM32MP_DDR_32BIT_INTERFACE:=	0
64
65ifeq (${TRUSTED_BOARD_BOOT},1)
66# PKA algo to include
67PKA_USE_NIST_P256	:=	1
68PKA_USE_BRAINPOOL_P256T1:=	1
69endif
70
71# STM32 image header version v2.0
72STM32_HEADER_VERSION_MAJOR:=	2
73STM32_HEADER_VERSION_MINOR:=	0
74endif
75
76ifeq ($(STM32MP15),1)
77# DDR controller with dual AXI port and 32-bit interface
78STM32MP_DDR_DUAL_AXI_PORT:=	1
79STM32MP_DDR_32BIT_INTERFACE:=	1
80
81# STM32 image header version v1.0
82STM32_HEADER_VERSION_MAJOR:=	1
83STM32_HEADER_VERSION_MINOR:=	0
84
85# Add OP-TEE reserved shared memory area in mapping
86STM32MP15_OPTEE_RSV_SHM	:=	1
87$(eval $(call add_defines,STM32MP15_OPTEE_RSV_SHM))
88
89STM32MP_CRYPTO_ROM_LIB :=	1
90
91# Decryption support
92ifneq ($(DECRYPTION_SUPPORT),none)
93$(error "DECRYPTION_SUPPORT not supported on STM32MP15")
94endif
95endif
96
97# STM32 image header binary type for BL2
98STM32_HEADER_BL2_BINARY_TYPE:=	0x10
99
100ifeq ($(AARCH32_SP),sp_min)
101# Disable Neon support: sp_min runtime may conflict with non-secure world
102TF_CFLAGS		+=	-mfloat-abi=soft
103endif
104
105TF_CFLAGS		+=	-Wsign-compare
106TF_CFLAGS		+=	-Wformat-signedness
107
108# Not needed for Cortex-A7
109WORKAROUND_CVE_2017_5715:=	0
110WORKAROUND_CVE_2022_23960:=	0
111
112# Number of TF-A copies in the device
113STM32_TF_A_COPIES		:=	2
114
115# PLAT_PARTITION_MAX_ENTRIES must take care of STM32_TF-A_COPIES and other partitions
116# such as metadata (2) to find all the FIP partitions (default is 2).
117PLAT_PARTITION_MAX_ENTRIES	:=	$(shell echo $$(($(STM32_TF_A_COPIES) + 4)))
118
119ifeq (${PSA_FWU_SUPPORT},1)
120ifneq (${STM32MP_USE_STM32IMAGE},1)
121# Number of banks of updatable firmware
122NR_OF_FW_BANKS			:=	2
123NR_OF_IMAGES_IN_FW_BANK		:=	1
124
125FWU_MAX_PART = $(shell echo $$(($(STM32_TF_A_COPIES) + 2 + $(NR_OF_FW_BANKS))))
126ifeq ($(shell test $(FWU_MAX_PART) -gt $(PLAT_PARTITION_MAX_ENTRIES); echo $$?),0)
127$(error "Required partition number is $(FWU_MAX_PART) where PLAT_PARTITION_MAX_ENTRIES is only \
128$(PLAT_PARTITION_MAX_ENTRIES)")
129endif
130else
131$(error FWU Feature enabled only with FIP images)
132endif
133endif
134
135ifeq ($(STM32MP13),1)
136STM32_HASH_VER		:=	4
137STM32_RNG_VER		:=	4
138else # Assuming STM32MP15
139STM32_HASH_VER		:=	2
140STM32_RNG_VER		:=	2
141endif
142
143# Boot devices
144STM32MP_EMMC		?=	0
145STM32MP_SDMMC		?=	0
146STM32MP_RAW_NAND	?=	0
147STM32MP_SPI_NAND	?=	0
148STM32MP_SPI_NOR		?=	0
149STM32MP_EMMC_BOOT	?=	0
150
151# Serial boot devices
152STM32MP_USB_PROGRAMMER	?=	0
153STM32MP_UART_PROGRAMMER	?=	0
154
155# Download load address for serial boot devices
156DWL_BUFFER_BASE 	?=	0xC7000000
157
158# Device tree
159ifeq ($(STM32MP13),1)
160BL2_DTSI		:=	stm32mp13-bl2.dtsi
161FDT_SOURCES		:=	$(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl2.dts,$(DTB_FILE_NAME)))
162else
163ifeq ($(STM32MP_USE_STM32IMAGE),1)
164ifeq ($(AARCH32_SP),optee)
165BL2_DTSI		:=	stm32mp15-bl2.dtsi
166FDT_SOURCES		:=	$(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl2.dts,$(DTB_FILE_NAME)))
167else
168FDT_SOURCES		:=	$(addprefix fdts/, $(patsubst %.dtb,%.dts,$(DTB_FILE_NAME)))
169endif
170else
171BL2_DTSI		:=	stm32mp15-bl2.dtsi
172FDT_SOURCES		:=	$(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl2.dts,$(DTB_FILE_NAME)))
173ifeq ($(AARCH32_SP),sp_min)
174BL32_DTSI		:=	stm32mp15-bl32.dtsi
175FDT_SOURCES		+=	$(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl32.dts,$(DTB_FILE_NAME)))
176endif
177endif
178endif
179
180$(eval DTC_V = $(shell $(DTC) -v | awk '{print $$NF}'))
181$(eval DTC_VERSION = $(shell printf "%d" $(shell echo ${DTC_V} | cut -d- -f1 | sed "s/\./0/g" | grep -o "[0-9]*")))
182DTC_CPPFLAGS		+=	${INCLUDES}
183DTC_FLAGS		+=	-Wno-unit_address_vs_reg
184ifeq ($(shell test $(DTC_VERSION) -ge 10601; echo $$?),0)
185DTC_FLAGS		+=	-Wno-interrupt_provider
186endif
187
188# Macros and rules to build TF binary
189STM32_TF_ELF_LDFLAGS	:=	--hash-style=gnu --as-needed
190STM32_TF_STM32		:=	$(addprefix ${BUILD_PLAT}/tf-a-, $(patsubst %.dtb,%.stm32,$(DTB_FILE_NAME)))
191STM32_TF_LINKERFILE	:=	${BUILD_PLAT}/stm32mp1.ld
192
193ASFLAGS			+= -DBL2_BIN_PATH=\"${BUILD_PLAT}/bl2.bin\"
194ifeq ($(AARCH32_SP),sp_min)
195# BL32 is built only if using SP_MIN
196BL32_DEP		:= bl32
197ASFLAGS			+= -DBL32_BIN_PATH=\"${BUILD_PLAT}/bl32.bin\"
198endif
199
200# Variables for use with stm32image
201STM32IMAGEPATH		?= tools/stm32image
202STM32IMAGE		?= ${STM32IMAGEPATH}/stm32image${BIN_EXT}
203STM32IMAGE_SRC		:= ${STM32IMAGEPATH}/stm32image.c
204
205ifneq (${STM32MP_USE_STM32IMAGE},1)
206FIP_DEPS		+=	dtbs
207STM32MP_HW_CONFIG	:=	${BL33_CFG}
208STM32MP_FW_CONFIG_NAME	:=	$(patsubst %.dtb,%-fw-config.dtb,$(DTB_FILE_NAME))
209STM32MP_FW_CONFIG	:=	${BUILD_PLAT}/fdts/$(STM32MP_FW_CONFIG_NAME)
210ifneq (${AARCH32_SP},none)
211FDT_SOURCES		+=	$(addprefix fdts/, $(patsubst %.dtb,%.dts,$(STM32MP_FW_CONFIG_NAME)))
212endif
213# Add the FW_CONFIG to FIP and specify the same to certtool
214$(eval $(call TOOL_ADD_PAYLOAD,${STM32MP_FW_CONFIG},--fw-config))
215# Add the HW_CONFIG to FIP and specify the same to certtool
216$(eval $(call TOOL_ADD_PAYLOAD,${STM32MP_HW_CONFIG},--hw-config))
217ifeq ($(GENERATE_COT),1)
218STM32MP_CFG_CERT	:=	$(BUILD_PLAT)/stm32mp_cfg_cert.crt
219# Add the STM32MP_CFG_CERT to FIP and specify the same to certtool
220$(eval $(call TOOL_ADD_PAYLOAD,${STM32MP_CFG_CERT},--stm32mp-cfg-cert))
221endif
222ifeq ($(AARCH32_SP),sp_min)
223STM32MP_TOS_FW_CONFIG	:= $(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl32.dtb,$(DTB_FILE_NAME)))
224$(eval $(call TOOL_ADD_PAYLOAD,${STM32MP_TOS_FW_CONFIG},--tos-fw-config))
225else
226# Add the build options to pack Trusted OS Extra1 and Trusted OS Extra2 images
227# in the FIP if the platform requires.
228ifneq ($(BL32_EXTRA1),)
229$(eval $(call TOOL_ADD_IMG,BL32_EXTRA1,--tos-fw-extra1,,$(ENCRYPT_BL32)))
230endif
231ifneq ($(BL32_EXTRA2),)
232$(eval $(call TOOL_ADD_IMG,BL32_EXTRA2,--tos-fw-extra2,,$(ENCRYPT_BL32)))
233endif
234endif
235endif
236
237# Enable flags for C files
238$(eval $(call assert_booleans,\
239	$(sort \
240		PKA_USE_BRAINPOOL_P256T1 \
241		PKA_USE_NIST_P256 \
242		PLAT_TBBR_IMG_DEF \
243		PLAT_XLAT_TABLES_DYNAMIC \
244		STM32MP_CRYPTO_ROM_LIB \
245		STM32MP_DDR_32BIT_INTERFACE \
246		STM32MP_DDR_DUAL_AXI_PORT \
247		STM32MP_EARLY_CONSOLE \
248		STM32MP_EMMC \
249		STM32MP_EMMC_BOOT \
250		STM32MP_RAW_NAND \
251		STM32MP_RECONFIGURE_CONSOLE \
252		STM32MP_SDMMC \
253		STM32MP_SPI_NAND \
254		STM32MP_SPI_NOR \
255		STM32MP_UART_PROGRAMMER \
256		STM32MP_USB_PROGRAMMER \
257		STM32MP_USE_EXTERNAL_HEAP \
258		STM32MP_USE_STM32IMAGE \
259		STM32MP13 \
260		STM32MP15 \
261)))
262
263$(eval $(call assert_numerics,\
264	$(sort \
265		PLAT_PARTITION_MAX_ENTRIES \
266		STM32_HASH_VER \
267		STM32_HEADER_VERSION_MAJOR \
268		STM32_RNG_VER \
269		STM32_TF_A_COPIES \
270		STM32_TF_VERSION \
271		STM32MP_UART_BAUDRATE \
272)))
273
274$(eval $(call add_defines,\
275	$(sort \
276		DWL_BUFFER_BASE \
277		PKA_USE_BRAINPOOL_P256T1 \
278		PKA_USE_NIST_P256 \
279		PLAT_PARTITION_MAX_ENTRIES \
280		PLAT_TBBR_IMG_DEF \
281		PLAT_XLAT_TABLES_DYNAMIC \
282		STM32_HASH_VER \
283		STM32_HEADER_VERSION_MAJOR \
284		STM32_RNG_VER \
285		STM32_TF_A_COPIES \
286		STM32_TF_VERSION \
287		STM32MP_CRYPTO_ROM_LIB \
288		STM32MP_DDR_32BIT_INTERFACE \
289		STM32MP_DDR_DUAL_AXI_PORT \
290		STM32MP_EARLY_CONSOLE \
291		STM32MP_EMMC \
292		STM32MP_EMMC_BOOT \
293		STM32MP_RAW_NAND \
294		STM32MP_RECONFIGURE_CONSOLE \
295		STM32MP_SDMMC \
296		STM32MP_SPI_NAND \
297		STM32MP_SPI_NOR \
298		STM32MP_UART_BAUDRATE \
299		STM32MP_UART_PROGRAMMER \
300		STM32MP_USB_PROGRAMMER \
301		STM32MP_USE_EXTERNAL_HEAP \
302		STM32MP_USE_STM32IMAGE \
303		STM32MP13 \
304		STM32MP15 \
305)))
306
307# Include paths and source files
308PLAT_INCLUDES		:=	-Iplat/st/common/include/
309PLAT_INCLUDES		+=	-Iplat/st/stm32mp1/include/
310
311ifeq (${STM32MP_USE_STM32IMAGE},1)
312include common/fdt_wrappers.mk
313else
314include lib/fconf/fconf.mk
315endif
316include lib/libfdt/libfdt.mk
317
318PLAT_BL_COMMON_SOURCES	:=	common/uuid.c						\
319				plat/st/common/stm32mp_common.c				\
320				plat/st/stm32mp1/stm32mp1_private.c
321
322PLAT_BL_COMMON_SOURCES	+=	drivers/st/uart/aarch32/stm32_console.S
323
324ifneq (${ENABLE_STACK_PROTECTOR},0)
325PLAT_BL_COMMON_SOURCES	+=	plat/st/stm32mp1/stm32mp1_stack_protector.c
326endif
327
328include lib/xlat_tables_v2/xlat_tables.mk
329PLAT_BL_COMMON_SOURCES	+=	${XLAT_TABLES_LIB_SRCS}
330
331PLAT_BL_COMMON_SOURCES	+=	lib/cpus/aarch32/cortex_a7.S
332
333PLAT_BL_COMMON_SOURCES	+=	drivers/arm/tzc/tzc400.c				\
334				drivers/clk/clk.c					\
335				drivers/delay_timer/delay_timer.c			\
336				drivers/delay_timer/generic_delay_timer.c		\
337				drivers/st/bsec/bsec2.c					\
338				drivers/st/clk/stm32mp_clkfunc.c			\
339				drivers/st/ddr/stm32mp_ddr.c				\
340				drivers/st/ddr/stm32mp1_ddr_helpers.c			\
341				drivers/st/gpio/stm32_gpio.c				\
342				drivers/st/i2c/stm32_i2c.c				\
343				drivers/st/iwdg/stm32_iwdg.c				\
344				drivers/st/pmic/stm32mp_pmic.c				\
345				drivers/st/pmic/stpmic1.c				\
346				drivers/st/regulator/regulator_core.c			\
347				drivers/st/regulator/regulator_fixed.c			\
348				drivers/st/reset/stm32mp1_reset.c			\
349				plat/st/common/stm32mp_dt.c				\
350				plat/st/stm32mp1/stm32mp1_dbgmcu.c			\
351				plat/st/stm32mp1/stm32mp1_helper.S			\
352				plat/st/stm32mp1/stm32mp1_syscfg.c
353
354ifeq ($(STM32MP13),1)
355PLAT_BL_COMMON_SOURCES	+=	drivers/st/clk/clk-stm32-core.c				\
356				drivers/st/clk/clk-stm32mp13.c				\
357				drivers/st/crypto/stm32_rng.c
358else
359PLAT_BL_COMMON_SOURCES	+=	drivers/st/clk/stm32mp1_clk.c
360endif
361
362ifneq (${STM32MP_USE_STM32IMAGE},1)
363BL2_SOURCES		+=	${FCONF_SOURCES} ${FCONF_DYN_SOURCES}
364
365BL2_SOURCES		+=	drivers/io/io_fip.c					\
366				plat/st/common/bl2_io_storage.c				\
367				plat/st/common/stm32mp_fconf_io.c			\
368				plat/st/stm32mp1/plat_bl2_mem_params_desc.c		\
369				plat/st/stm32mp1/stm32mp1_fconf_firewall.c
370else
371BL2_SOURCES		+=	${FDT_WRAPPERS_SOURCES}
372
373BL2_SOURCES		+=	drivers/io/io_dummy.c					\
374				drivers/st/io/io_stm32image.c				\
375				plat/st/common/bl2_stm32_io_storage.c			\
376				plat/st/stm32mp1/plat_bl2_stm32_mem_params_desc.c	\
377				plat/st/stm32mp1/stm32mp1_security.c
378endif
379
380include lib/zlib/zlib.mk
381
382ifeq (${PSA_FWU_SUPPORT},1)
383include drivers/fwu/fwu.mk
384endif
385
386
387BL2_SOURCES		+=	$(ZLIB_SOURCES)
388
389BL2_SOURCES		+=	drivers/io/io_block.c					\
390				drivers/io/io_mtd.c					\
391				drivers/io/io_storage.c					\
392				drivers/st/crypto/stm32_hash.c				\
393				plat/st/stm32mp1/bl2_plat_setup.c
394
395ifneq (${DECRYPTION_SUPPORT},none)
396BL2_SOURCES		+=	drivers/io/io_encrypted.c
397endif
398
399ifeq (${TRUSTED_BOARD_BOOT},1)
400AUTH_SOURCES		:=	drivers/auth/auth_mod.c					\
401				drivers/auth/crypto_mod.c				\
402				drivers/auth/img_parser_mod.c
403
404ifeq (${GENERATE_COT},1)
405TFW_NVCTR_VAL		:=	0
406NTFW_NVCTR_VAL		:=	0
407KEY_SIZE		:=
408KEY_ALG			:=	ecdsa
409HASH_ALG		:=	sha256
410
411ifeq (${SAVE_KEYS},1)
412TRUSTED_WORLD_KEY	?=	${BUILD_PLAT}/trusted.pem
413NON_TRUSTED_WORLD_KEY	?=	${BUILD_PLAT}/non-trusted.pem
414BL32_KEY		?=	${BUILD_PLAT}/trusted_os.pem
415BL33_KEY		?=	${BUILD_PLAT}/non-trusted_os.pem
416endif
417
418endif
419TF_MBEDTLS_KEY_ALG 	:=	ecdsa
420MBEDTLS_CONFIG_FILE	?=	"<stm32mp1_mbedtls_config.h>"
421
422include drivers/auth/mbedtls/mbedtls_x509.mk
423
424COT_DESC_IN_DTB		:=	1
425AUTH_SOURCES		+=	lib/fconf/fconf_cot_getter.c				\
426				lib/fconf/fconf_tbbr_getter.c				\
427				plat/st/common/stm32mp_crypto_lib.c
428
429ifeq ($(STM32MP13),1)
430AUTH_SOURCES		+=	drivers/st/crypto/stm32_pka.c
431AUTH_SOURCES		+=	drivers/st/crypto/stm32_saes.c
432endif
433
434BL2_SOURCES		+=	$(AUTH_SOURCES)						\
435				plat/st/common/stm32mp_trusted_boot.c
436endif
437
438ifneq ($(filter 1,${STM32MP_EMMC} ${STM32MP_SDMMC}),)
439BL2_SOURCES		+=	drivers/mmc/mmc.c					\
440				drivers/partition/gpt.c					\
441				drivers/partition/partition.c				\
442				drivers/st/io/io_mmc.c					\
443				drivers/st/mmc/stm32_sdmmc2.c
444endif
445
446ifeq (${STM32MP_RAW_NAND},1)
447$(eval $(call add_define_val,NAND_ONFI_DETECT,1))
448BL2_SOURCES		+=	drivers/mtd/nand/raw_nand.c				\
449				drivers/st/fmc/stm32_fmc2_nand.c
450endif
451
452ifeq (${STM32MP_SPI_NAND},1)
453BL2_SOURCES		+=	drivers/mtd/nand/spi_nand.c
454endif
455
456ifeq (${STM32MP_SPI_NOR},1)
457ifneq (${STM32MP_FORCE_MTD_START_OFFSET},)
458$(eval $(call add_define_val,STM32MP_NOR_FIP_OFFSET,${STM32MP_FORCE_MTD_START_OFFSET}))
459endif
460BL2_SOURCES		+=	drivers/mtd/nor/spi_nor.c
461endif
462
463ifneq ($(filter 1,${STM32MP_SPI_NAND} ${STM32MP_SPI_NOR}),)
464BL2_SOURCES		+=	drivers/mtd/spi-mem/spi_mem.c				\
465				drivers/st/spi/stm32_qspi.c
466endif
467
468ifneq ($(filter 1,${STM32MP_RAW_NAND} ${STM32MP_SPI_NAND}),)
469ifneq (${STM32MP_FORCE_MTD_START_OFFSET},)
470$(eval $(call add_define_val,STM32MP_NAND_FIP_OFFSET,${STM32MP_FORCE_MTD_START_OFFSET}))
471endif
472BL2_SOURCES		+=	drivers/mtd/nand/core.c
473endif
474
475ifneq ($(filter 1,${STM32MP_RAW_NAND} ${STM32MP_SPI_NAND} ${STM32MP_SPI_NOR}),)
476BL2_SOURCES		+=	plat/st/stm32mp1/stm32mp1_boot_device.c
477endif
478
479ifneq ($(filter 1,${STM32MP_UART_PROGRAMMER} ${STM32MP_USB_PROGRAMMER}),)
480BL2_SOURCES		+=	drivers/io/io_memmap.c
481endif
482
483ifeq (${STM32MP_UART_PROGRAMMER},1)
484BL2_SOURCES		+=	drivers/st/uart/stm32_uart.c				\
485				plat/st/common/stm32cubeprogrammer_uart.c
486endif
487
488ifeq (${STM32MP_USB_PROGRAMMER},1)
489#The DFU stack uses only one end point, reduce the USB stack footprint
490$(eval $(call add_define_val,CONFIG_USBD_EP_NB,1U))
491BL2_SOURCES		+=	drivers/st/usb/stm32mp1_usb.c				\
492				drivers/usb/usb_device.c				\
493				plat/st/common/stm32cubeprogrammer_usb.c		\
494				plat/st/common/usb_dfu.c					\
495				plat/st/stm32mp1/stm32mp1_usb_dfu.c
496endif
497
498BL2_SOURCES		+=	drivers/st/ddr/stm32mp_ddr_test.c			\
499				drivers/st/ddr/stm32mp_ram.c				\
500				drivers/st/ddr/stm32mp1_ddr.c				\
501				drivers/st/ddr/stm32mp1_ram.c
502
503BL2_SOURCES		+=	common/desc_image_load.c				\
504				plat/st/stm32mp1/plat_image_load.c
505
506BL2_SOURCES		+=	lib/optee/optee_utils.c
507
508# Compilation rules
509.PHONY: check_dtc_version stm32image clean_stm32image check_boot_device
510.SUFFIXES:
511
512all: check_dtc_version stm32image ${STM32_TF_STM32}
513
514distclean realclean clean: clean_stm32image
515
516bl2: check_boot_device
517
518check_boot_device:
519	@if [ ${STM32MP_EMMC} != 1 ] && \
520	    [ ${STM32MP_SDMMC} != 1 ] && \
521	    [ ${STM32MP_RAW_NAND} != 1 ] && \
522	    [ ${STM32MP_SPI_NAND} != 1 ] && \
523	    [ ${STM32MP_SPI_NOR} != 1 ] && \
524	    [ ${STM32MP_UART_PROGRAMMER} != 1 ] && \
525	    [ ${STM32MP_USB_PROGRAMMER} != 1 ]; then \
526		echo "No boot device driver is enabled"; \
527		false; \
528	fi
529
530stm32image: ${STM32IMAGE}
531
532${STM32IMAGE}: ${STM32IMAGE_SRC}
533	${Q}${MAKE} CPPFLAGS="" --no-print-directory -C ${STM32IMAGEPATH}
534
535clean_stm32image:
536	${Q}${MAKE} --no-print-directory -C ${STM32IMAGEPATH} clean
537
538check_dtc_version:
539	@if [ ${DTC_VERSION} -lt 10404 ]; then \
540		echo "dtc version too old (${DTC_V}), you need at least version 1.4.4"; \
541		false; \
542	fi
543
544ifeq ($(STM32MP_USE_STM32IMAGE)-$(AARCH32_SP),1-sp_min)
545${BUILD_PLAT}/stm32mp1-%.o: ${BUILD_PLAT}/fdts/%.dtb plat/st/stm32mp1/stm32mp1.S bl2 ${BL32_DEP}
546	@echo "  AS      stm32mp1.S"
547	${Q}${AS} ${ASFLAGS} ${TF_CFLAGS} \
548		-DDTB_BIN_PATH=\"$<\" \
549		-c $(word 2,$^) -o $@
550else
551# Create DTB file for BL2
552${BUILD_PLAT}/fdts/%-bl2.dts: fdts/%.dts fdts/${BL2_DTSI} | ${BUILD_PLAT} fdt_dirs
553	@echo '#include "$(patsubst fdts/%,%,$<)"' > $@
554	@echo '#include "${BL2_DTSI}"' >> $@
555
556${BUILD_PLAT}/fdts/%-bl2.dtb: ${BUILD_PLAT}/fdts/%-bl2.dts
557
558ifeq ($(AARCH32_SP),sp_min)
559# Create DTB file for BL32
560${BUILD_PLAT}/fdts/%-bl32.dts: fdts/%.dts fdts/${BL32_DTSI} | ${BUILD_PLAT} fdt_dirs
561	@echo '#include "$(patsubst fdts/%,%,$<)"' > $@
562	@echo '#include "${BL32_DTSI}"' >> $@
563
564${BUILD_PLAT}/fdts/%-bl32.dtb: ${BUILD_PLAT}/fdts/%-bl32.dts
565endif
566
567${BUILD_PLAT}/stm32mp1-%.o: ${BUILD_PLAT}/fdts/%-bl2.dtb plat/st/stm32mp1/stm32mp1.S bl2
568	@echo "  AS      stm32mp1.S"
569	${Q}${AS} ${ASFLAGS} ${TF_CFLAGS} \
570		-DDTB_BIN_PATH=\"$<\" \
571		-c plat/st/stm32mp1/stm32mp1.S -o $@
572endif
573
574$(eval $(call MAKE_LD,${STM32_TF_LINKERFILE},plat/st/stm32mp1/stm32mp1.ld.S,bl2))
575
576tf-a-%.elf: stm32mp1-%.o ${STM32_TF_LINKERFILE}
577	@echo "  LDS     $<"
578	${Q}${LD} -o $@ ${STM32_TF_ELF_LDFLAGS} -Map=$(@:.elf=.map) --script ${STM32_TF_LINKERFILE} $<
579
580tf-a-%.bin: tf-a-%.elf
581	${Q}${OC} -O binary $< $@
582	@echo
583	@echo "Built $@ successfully"
584	@echo
585
586tf-a-%.stm32: ${STM32IMAGE} tf-a-%.bin
587	@echo
588	@echo "Generate $@"
589	$(eval LOADADDR = $(shell cat $(@:.stm32=.map) | grep RAM | awk '{print $$2}'))
590	$(eval ENTRY = $(shell cat $(@:.stm32=.map) | grep "__BL2_IMAGE_START" | awk '{print $$1}'))
591	${Q}${STM32IMAGE} -s $(word 2,$^) -d $@ \
592		-l $(LOADADDR) -e ${ENTRY} \
593		-v ${STM32_TF_VERSION} \
594		-m ${STM32_HEADER_VERSION_MAJOR} \
595		-n ${STM32_HEADER_VERSION_MINOR} \
596		-b ${STM32_HEADER_BL2_BINARY_TYPE}
597	@echo
598