platform.mk 6.86 KB
Newer Older
1
#
Yann Gautier's avatar
Yann Gautier committed
2
# Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
3
4
5
6
7
8
9
10
11
#
# SPDX-License-Identifier: BSD-3-Clause
#

ARM_CORTEX_A7		:=	yes
ARM_WITH_NEON		:=	yes
BL2_AT_EL3		:=	1
USE_COHERENT_MEM	:=	0

Yann Gautier's avatar
Yann Gautier committed
12
13
ENABLE_PIE		:=	1

14
15
STM32_TF_VERSION	?=	0

16
17
18
# Enable dynamic memory mapping
PLAT_XLAT_TABLES_DYNAMIC :=	1

19
20
ifeq ($(AARCH32_SP),sp_min)
# Disable Neon support: sp_min runtime may conflict with non-secure world
21
TF_CFLAGS		+=	-mfloat-abi=soft
22
23
endif

24
25
26
# Not needed for Cortex-A7
WORKAROUND_CVE_2017_5715:=	0

27
28
# Number of TF-A copies in the device
STM32_TF_A_COPIES		:=	2
29
STM32_BL33_PARTS_NUM		:=	1
Yann Gautier's avatar
Yann Gautier committed
30
ifeq ($(AARCH32_SP),optee)
31
STM32_RUNTIME_PARTS_NUM		:=	3
Yann Gautier's avatar
Yann Gautier committed
32
else
33
STM32_RUNTIME_PARTS_NUM		:=	0
Yann Gautier's avatar
Yann Gautier committed
34
endif
35
36
37
PLAT_PARTITION_MAX_ENTRIES	:=	$(shell echo $$(($(STM32_TF_A_COPIES) + \
							 $(STM32_BL33_PARTS_NUM) + \
							 $(STM32_RUNTIME_PARTS_NUM))))
38

39
40
41
# Boot devices
STM32MP_EMMC		?=	0
STM32MP_SDMMC		?=	0
42
STM32MP_RAW_NAND	?=	0
43
STM32MP_SPI_NAND	?=	0
44
STM32MP_SPI_NOR		?=	0
45

46
ifeq ($(filter 1,${STM32MP_EMMC} ${STM32MP_SDMMC} ${STM32MP_RAW_NAND} \
47
	${STM32MP_SPI_NAND} ${STM32MP_SPI_NOR}),)
48
49
50
$(error "No boot device driver is enabled")
endif

Yann Gautier's avatar
Yann Gautier committed
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Device tree
DTB_FILE_NAME		?=	stm32mp157c-ev1.dtb
FDT_SOURCES		:=	$(addprefix fdts/, $(patsubst %.dtb,%.dts,$(DTB_FILE_NAME)))
DTC_FLAGS		+=	-Wno-unit_address_vs_reg

# Macros and rules to build TF binary
STM32_TF_ELF_LDFLAGS	:=	--hash-style=gnu --as-needed
STM32_TF_STM32		:=	$(addprefix ${BUILD_PLAT}/tf-a-, $(patsubst %.dtb,%.stm32,$(DTB_FILE_NAME)))
STM32_TF_LINKERFILE	:=	${BUILD_PLAT}/stm32mp1.ld

ASFLAGS			+= -DBL2_BIN_PATH=\"${BUILD_PLAT}/bl2.bin\"
ifeq ($(AARCH32_SP),sp_min)
# BL32 is built only if using SP_MIN
BL32_DEP		:= bl32
ASFLAGS			+= -DBL32_BIN_PATH=\"${BUILD_PLAT}/bl32.bin\"
endif

# Variables for use with stm32image
STM32IMAGEPATH		?= tools/stm32image
STM32IMAGE		?= ${STM32IMAGEPATH}/stm32image${BIN_EXT}

# Enable flags for C files
73
$(eval $(call assert_booleans,\
Yann Gautier's avatar
Yann Gautier committed
74
75
76
77
78
79
80
81
82
83
84
85
86
	$(sort \
		STM32MP_EMMC \
		STM32MP_SDMMC \
		STM32MP_RAW_NAND \
		STM32MP_SPI_NAND \
		STM32MP_SPI_NOR \
		PLAT_XLAT_TABLES_DYNAMIC \
)))

$(eval $(call assert_numerics,\
	$(sort \
		STM32_TF_A_COPIES \
		PLAT_PARTITION_MAX_ENTRIES \
87
88
89
)))

$(eval $(call add_defines,\
Yann Gautier's avatar
Yann Gautier committed
90
91
92
93
94
95
96
97
98
	$(sort \
		STM32MP_EMMC \
		STM32MP_SDMMC \
		STM32MP_RAW_NAND \
		STM32MP_SPI_NAND \
		STM32MP_SPI_NOR \
		PLAT_XLAT_TABLES_DYNAMIC \
		STM32_TF_A_COPIES \
		PLAT_PARTITION_MAX_ENTRIES \
99
)))
100

Yann Gautier's avatar
Yann Gautier committed
101
# Include paths and source files
102
103
PLAT_INCLUDES		:=	-Iplat/st/common/include/
PLAT_INCLUDES		+=	-Iplat/st/stm32mp1/include/
104
105
106

include lib/libfdt/libfdt.mk

107
108
PLAT_BL_COMMON_SOURCES	:=	common/fdt_wrappers.c					\
				plat/st/common/stm32mp_common.c				\
109
				plat/st/stm32mp1/stm32mp1_private.c
110

111
PLAT_BL_COMMON_SOURCES	+=	drivers/st/uart/aarch32/stm32_console.S
112
113
114
115
116
117
118
119
120
121

ifneq (${ENABLE_STACK_PROTECTOR},0)
PLAT_BL_COMMON_SOURCES	+=	plat/st/stm32mp1/stm32mp1_stack_protector.c
endif

include lib/xlat_tables_v2/xlat_tables.mk
PLAT_BL_COMMON_SOURCES	+=	${XLAT_TABLES_LIB_SRCS}

PLAT_BL_COMMON_SOURCES	+=	lib/cpus/aarch32/cortex_a7.S

122
PLAT_BL_COMMON_SOURCES	+=	drivers/arm/tzc/tzc400.c				\
123
124
				drivers/delay_timer/delay_timer.c			\
				drivers/delay_timer/generic_delay_timer.c		\
Yann Gautier's avatar
Yann Gautier committed
125
				drivers/st/bsec/bsec.c					\
Yann Gautier's avatar
Yann Gautier committed
126
				drivers/st/clk/stm32mp_clkfunc.c			\
127
				drivers/st/clk/stm32mp1_clk.c				\
128
				drivers/st/ddr/stm32mp1_ddr_helpers.c			\
Yann Gautier's avatar
Yann Gautier committed
129
				drivers/st/gpio/stm32_gpio.c				\
130
				drivers/st/i2c/stm32_i2c.c				\
Yann Gautier's avatar
Yann Gautier committed
131
				drivers/st/iwdg/stm32_iwdg.c				\
132
133
				drivers/st/pmic/stm32mp_pmic.c				\
				drivers/st/pmic/stpmic1.c				\
134
				drivers/st/reset/stm32mp1_reset.c			\
135
				plat/st/common/stm32mp_dt.c				\
136
				plat/st/stm32mp1/stm32mp1_context.c			\
Yann Gautier's avatar
Yann Gautier committed
137
				plat/st/stm32mp1/stm32mp1_dbgmcu.c			\
138
				plat/st/stm32mp1/stm32mp1_helper.S			\
139
140
				plat/st/stm32mp1/stm32mp1_security.c			\
				plat/st/stm32mp1/stm32mp1_syscfg.c
141

142
143
BL2_SOURCES		+=	drivers/io/io_block.c					\
				drivers/io/io_dummy.c					\
144
				drivers/io/io_mtd.c					\
145
				drivers/io/io_storage.c					\
146
				drivers/st/crypto/stm32_hash.c				\
147
				drivers/st/io/io_stm32image.c				\
148
				plat/st/common/stm32mp_auth.c				\
149
				plat/st/common/bl2_io_storage.c				\
150
151
				plat/st/stm32mp1/bl2_plat_setup.c

152
ifneq ($(filter 1,${STM32MP_EMMC} ${STM32MP_SDMMC}),)
153
154
155
156
157
BL2_SOURCES		+=	drivers/mmc/mmc.c					\
				drivers/partition/gpt.c					\
				drivers/partition/partition.c				\
				drivers/st/io/io_mmc.c					\
				drivers/st/mmc/stm32_sdmmc2.c
158
endif
159

160
161
162
163
164
165
ifeq (${STM32MP_RAW_NAND},1)
$(eval $(call add_define_val,NAND_ONFI_DETECT,1))
BL2_SOURCES		+=	drivers/mtd/nand/raw_nand.c				\
				drivers/st/fmc/stm32_fmc2_nand.c
endif

166
167
168
169
ifeq (${STM32MP_SPI_NAND},1)
BL2_SOURCES		+=	drivers/mtd/nand/spi_nand.c
endif

170
171
172
173
174
ifeq (${STM32MP_SPI_NOR},1)
BL2_SOURCES		+=	drivers/mtd/nor/spi_nor.c
endif

ifneq ($(filter 1,${STM32MP_SPI_NAND} ${STM32MP_SPI_NOR}),)
175
176
177
178
179
BL2_SOURCES		+=	drivers/mtd/spi-mem/spi_mem.c				\
				drivers/st/spi/stm32_qspi.c
endif

ifneq ($(filter 1,${STM32MP_RAW_NAND} ${STM32MP_SPI_NAND}),)
180
181
182
183
184
BL2_SOURCES		+=	drivers/mtd/nand/core.c
endif

ifneq ($(filter 1,${STM32MP_RAW_NAND} ${STM32MP_SPI_NAND} ${STM32MP_SPI_NOR}),)
BL2_SOURCES		+=	plat/st/stm32mp1/stm32mp1_boot_device.c
185
186
endif

187
188
189
BL2_SOURCES		+=	drivers/st/ddr/stm32mp1_ddr.c				\
				drivers/st/ddr/stm32mp1_ram.c

190
191
192
193
BL2_SOURCES		+=	common/desc_image_load.c				\
				plat/st/stm32mp1/plat_bl2_mem_params_desc.c		\
				plat/st/stm32mp1/plat_image_load.c

Yann Gautier's avatar
Yann Gautier committed
194
195
196
197
ifeq ($(AARCH32_SP),optee)
BL2_SOURCES		+=	lib/optee/optee_utils.c
endif

Yann Gautier's avatar
Yann Gautier committed
198
199
# Compilation rules
.PHONY: check_dtc_version stm32image clean_stm32image
200
201
.SUFFIXES:

202
all: check_dtc_version stm32image ${STM32_TF_STM32}
203
204
205

distclean realclean clean: clean_stm32image

206
207
208
stm32image: ${STM32IMAGE}

${STM32IMAGE}: ${STM32IMAGE_SRC}
209
210
211
212
213
214
215
216
217
218
219
220
221
222
	${Q}${MAKE} CPPFLAGS="" --no-print-directory -C ${STM32IMAGEPATH}

clean_stm32image:
	${Q}${MAKE} --no-print-directory -C ${STM32IMAGEPATH} clean

check_dtc_version:
	$(eval DTC_V = $(shell $(DTC) -v | awk '{print $$NF}'))
	$(eval DTC_VERSION = $(shell printf "%d" $(shell echo ${DTC_V} | cut -d- -f1 | sed "s/\./0/g")))
	@if [ ${DTC_VERSION} -lt 10404 ]; then \
		echo "dtc version too old (${DTC_V}), you need at least version 1.4.4"; \
		false; \
	fi


223
224
225
226
227
${BUILD_PLAT}/stm32mp1-%.o: ${BUILD_PLAT}/fdts/%.dtb plat/st/stm32mp1/stm32mp1.S bl2 ${BL32_DEP}
	@echo "  AS      stm32mp1.S"
	${Q}${AS} ${ASFLAGS} ${TF_CFLAGS} \
		-DDTB_BIN_PATH=\"$<\" \
		-c plat/st/stm32mp1/stm32mp1.S -o $@
228

229
$(eval $(call MAKE_LD,${STM32_TF_LINKERFILE},plat/st/stm32mp1/stm32mp1.ld.S,2))
230

231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
tf-a-%.elf: stm32mp1-%.o ${STM32_TF_LINKERFILE}
	@echo "  LDS     $<"
	${Q}${LD} -o $@ ${STM32_TF_ELF_LDFLAGS} -Map=$(@:.elf=.map) --script ${STM32_TF_LINKERFILE} $<

tf-a-%.bin: tf-a-%.elf
	${Q}${OC} -O binary $< $@
	@echo
	@echo "Built $@ successfully"
	@echo

tf-a-%.stm32: ${STM32IMAGE} tf-a-%.bin
	@echo
	@echo "Generate $@"
	$(eval LOADADDR = $(shell cat $(@:.stm32=.map) | grep RAM | awk '{print $$2}'))
	$(eval ENTRY = $(shell cat $(@:.stm32=.map) | grep "__BL2_IMAGE_START" | awk '{print $$1}'))
	${Q}${STM32IMAGE} -s $(word 2,$^) -d $@ \
		-l $(LOADADDR) -e ${ENTRY} \
		-v ${STM32_TF_VERSION}
	@echo