platform.mk 6.73 KB
Newer Older
1
#
2
# Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
3
4
5
6
7
8
9
10
11
12
13
#
# SPDX-License-Identifier: BSD-3-Clause
#

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

STM32_TF_VERSION	?=	0

14
15
16
# Enable dynamic memory mapping
PLAT_XLAT_TABLES_DYNAMIC :=	1

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

22
23
24
# Not needed for Cortex-A7
WORKAROUND_CVE_2017_5715:=	0

25
26
# Number of TF-A copies in the device
STM32_TF_A_COPIES		:=	2
Yann Gautier's avatar
Yann Gautier committed
27
28
29
ifeq ($(AARCH32_SP),optee)
PLAT_PARTITION_MAX_ENTRIES	:=	$(shell echo $$(($(STM32_TF_A_COPIES) + 4)))
else
30
PLAT_PARTITION_MAX_ENTRIES	:=	$(shell echo $$(($(STM32_TF_A_COPIES) + 1)))
Yann Gautier's avatar
Yann Gautier committed
31
endif
32

33
34
35
# Boot devices
STM32MP_EMMC		?=	0
STM32MP_SDMMC		?=	0
36
STM32MP_RAW_NAND	?=	0
37
STM32MP_SPI_NAND	?=	0
38
STM32MP_SPI_NOR		?=	0
39

40
ifeq ($(filter 1,${STM32MP_EMMC} ${STM32MP_SDMMC} ${STM32MP_RAW_NAND} \
41
	${STM32MP_SPI_NAND} ${STM32MP_SPI_NOR}),)
42
43
44
$(error "No boot device driver is enabled")
endif

Yann Gautier's avatar
Yann Gautier committed
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 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
67
$(eval $(call assert_booleans,\
Yann Gautier's avatar
Yann Gautier committed
68
69
70
71
72
73
74
75
76
77
78
79
80
	$(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 \
81
82
83
)))

$(eval $(call add_defines,\
Yann Gautier's avatar
Yann Gautier committed
84
85
86
87
88
89
90
91
92
	$(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 \
93
)))
94

Yann Gautier's avatar
Yann Gautier committed
95
# Include paths and source files
96
97
PLAT_INCLUDES		:=	-Iplat/st/common/include/
PLAT_INCLUDES		+=	-Iplat/st/stm32mp1/include/
98
99
100

include lib/libfdt/libfdt.mk

101
102
PLAT_BL_COMMON_SOURCES	:=	common/fdt_wrappers.c					\
				plat/st/common/stm32mp_common.c				\
103
				plat/st/stm32mp1/stm32mp1_private.c
104

105
PLAT_BL_COMMON_SOURCES	+=	drivers/st/uart/aarch32/stm32_console.S
106
107
108
109
110
111
112
113
114
115

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

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

136
137
BL2_SOURCES		+=	drivers/io/io_block.c					\
				drivers/io/io_dummy.c					\
138
				drivers/io/io_mtd.c					\
139
				drivers/io/io_storage.c					\
140
				drivers/st/crypto/stm32_hash.c				\
141
				drivers/st/io/io_stm32image.c				\
142
				plat/st/common/stm32mp_auth.c				\
143
				plat/st/common/bl2_io_storage.c				\
144
145
				plat/st/stm32mp1/bl2_plat_setup.c

146
ifneq ($(filter 1,${STM32MP_EMMC} ${STM32MP_SDMMC}),)
147
148
149
150
151
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
152
endif
153

154
155
156
157
158
159
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

160
161
162
163
ifeq (${STM32MP_SPI_NAND},1)
BL2_SOURCES		+=	drivers/mtd/nand/spi_nand.c
endif

164
165
166
167
168
ifeq (${STM32MP_SPI_NOR},1)
BL2_SOURCES		+=	drivers/mtd/nor/spi_nor.c
endif

ifneq ($(filter 1,${STM32MP_SPI_NAND} ${STM32MP_SPI_NOR}),)
169
170
171
172
173
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}),)
174
175
176
177
178
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
179
180
endif

181
182
183
BL2_SOURCES		+=	drivers/st/ddr/stm32mp1_ddr.c				\
				drivers/st/ddr/stm32mp1_ram.c

184
185
186
187
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
188
189
190
191
ifeq ($(AARCH32_SP),optee)
BL2_SOURCES		+=	lib/optee/optee_utils.c
endif

Yann Gautier's avatar
Yann Gautier committed
192
193
# Compilation rules
.PHONY: check_dtc_version stm32image clean_stm32image
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
.SUFFIXES:

all: check_dtc_version ${STM32_TF_STM32} stm32image

distclean realclean clean: clean_stm32image

stm32image:
	${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


215
216
${BUILD_PLAT}/stm32mp1-%.o:	${BUILD_PLAT}/fdts/%.dtb plat/st/stm32mp1/stm32mp1.S bl2 ${BL32_DEP}
			@echo "  AS      stm32mp1.S"
217
			${Q}${AS} ${ASFLAGS} ${TF_CFLAGS} \
218
				-DDTB_BIN_PATH=\"$<\" \
219
220
				-c plat/st/stm32mp1/stm32mp1.S -o $@

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

223
tf-a-%.elf:		stm32mp1-%.o ${STM32_TF_LINKERFILE}
224
			@echo "  LDS     $<"
225
			${Q}${LD} -o $@ ${STM32_TF_ELF_LDFLAGS} -Map=$(@:.elf=.map) --script ${STM32_TF_LINKERFILE} $<
226

227
228
tf-a-%.bin:		tf-a-%.elf
			${Q}${OC} -O binary $< $@
229
230
231
232
			@echo
			@echo "Built $@ successfully"
			@echo

233
tf-a-%.stm32:		tf-a-%.bin stm32image
234
235
			@echo
			@echo "Generated $@"
236
237
			$(eval LOADADDR =  $(shell cat $(@:.stm32=.map) | grep RAM | awk '{print $$2}'))
			$(eval ENTRY =  $(shell cat $(@:.stm32=.map) | grep "__BL2_IMAGE_START" | awk '{print $$1}'))
238
			${STM32IMAGE} -s $< -d $@ -l $(LOADADDR) -e ${ENTRY} -v ${STM32_TF_VERSION}
239
			@echo