14353bb20SYann Gautier# 2231a0adbSYann Gautier# Copyright (c) 2015-2023, Arm Limited and Contributors. All rights reserved. 34353bb20SYann Gautier# 44353bb20SYann Gautier# SPDX-License-Identifier: BSD-3-Clause 54353bb20SYann Gautier# 64353bb20SYann Gautier 7a430382fSYann Gautierinclude plat/st/common/common.mk 8a430382fSYann Gautier 94353bb20SYann GautierARM_CORTEX_A7 := yes 104353bb20SYann GautierARM_WITH_NEON := yes 114353bb20SYann GautierUSE_COHERENT_MEM := 0 124353bb20SYann Gautier 1399a5d8d0SYann Gautier# Default Device tree 1499a5d8d0SYann GautierDTB_FILE_NAME ?= stm32mp157c-ev1.dtb 1599a5d8d0SYann Gautier 1699a5d8d0SYann GautierSTM32MP13 ?= 0 1799a5d8d0SYann GautierSTM32MP15 ?= 0 1899a5d8d0SYann Gautier 19bdec516eSSebastien Pasdeloupifeq ($(STM32MP13),1) 2099a5d8d0SYann Gautierifeq ($(STM32MP15),1) 2199a5d8d0SYann Gautier$(error Cannot enable both flags STM32MP13 and STM32MP15) 2299a5d8d0SYann Gautierendif 23bdec516eSSebastien PasdeloupSTM32MP13 := 1 24bdec516eSSebastien PasdeloupSTM32MP15 := 0 2599a5d8d0SYann Gautierelse ifeq ($(STM32MP15),1) 2699a5d8d0SYann GautierSTM32MP13 := 0 2799a5d8d0SYann GautierSTM32MP15 := 1 2899a5d8d0SYann Gautierelse ifneq ($(findstring stm32mp13,$(DTB_FILE_NAME)),) 2999a5d8d0SYann GautierSTM32MP13 := 1 3099a5d8d0SYann GautierSTM32MP15 := 0 3199a5d8d0SYann Gautierelse ifneq ($(findstring stm32mp15,$(DTB_FILE_NAME)),) 3299a5d8d0SYann GautierSTM32MP13 := 0 3399a5d8d0SYann GautierSTM32MP15 := 1 3499a5d8d0SYann Gautierendif 35bdec516eSSebastien Pasdeloup 3699a5d8d0SYann Gautierifeq ($(STM32MP13),1) 37beb625f9SLionel Debieve# Will use SRAM2 as mbedtls heap 38beb625f9SLionel DebieveSTM32MP_USE_EXTERNAL_HEAP := 1 39beb625f9SLionel Debieve 40bdec516eSSebastien Pasdeloup# DDR controller with single AXI port and 16-bit interface 41bdec516eSSebastien PasdeloupSTM32MP_DDR_DUAL_AXI_PORT:= 0 42bdec516eSSebastien PasdeloupSTM32MP_DDR_32BIT_INTERFACE:= 0 43bdec516eSSebastien Pasdeloup 44beb625f9SLionel Debieveifeq (${TRUSTED_BOARD_BOOT},1) 45beb625f9SLionel Debieve# PKA algo to include 46beb625f9SLionel DebievePKA_USE_NIST_P256 := 1 47beb625f9SLionel DebievePKA_USE_BRAINPOOL_P256T1:= 1 48beb625f9SLionel Debieveendif 49beb625f9SLionel Debieve 50bdec516eSSebastien Pasdeloup# STM32 image header version v2.0 51bdec516eSSebastien PasdeloupSTM32_HEADER_VERSION_MAJOR:= 2 52bdec516eSSebastien PasdeloupSTM32_HEADER_VERSION_MINOR:= 0 5399a5d8d0SYann Gautierendif 54bdec516eSSebastien Pasdeloup 5599a5d8d0SYann Gautierifeq ($(STM32MP15),1) 5688f4fb8fSYann Gautier# DDR controller with dual AXI port and 32-bit interface 5788f4fb8fSYann GautierSTM32MP_DDR_DUAL_AXI_PORT:= 1 5888f4fb8fSYann GautierSTM32MP_DDR_32BIT_INTERFACE:= 1 5988f4fb8fSYann Gautier 602d8886acSNicolas Le Bayon# STM32 image header version v1.0 612d8886acSNicolas Le BayonSTM32_HEADER_VERSION_MAJOR:= 1 622d8886acSNicolas Le BayonSTM32_HEADER_VERSION_MINOR:= 0 63722ca35eSYann Gautier 64722ca35eSYann Gautier# Add OP-TEE reserved shared memory area in mapping 65722ca35eSYann GautierSTM32MP15_OPTEE_RSV_SHM := 1 66722ca35eSYann Gautier$(eval $(call add_defines,STM32MP15_OPTEE_RSV_SHM)) 67ad3e46a3SLionel Debieve 68ad3e46a3SLionel DebieveSTM32MP_CRYPTO_ROM_LIB := 1 69cd791164SLionel Debieve 70cd791164SLionel Debieve# Decryption support 71cd791164SLionel Debieveifneq ($(DECRYPTION_SUPPORT),none) 72cd791164SLionel Debieve$(error "DECRYPTION_SUPPORT not supported on STM32MP15") 73cd791164SLionel Debieveendif 74bdec516eSSebastien Pasdeloupendif 752d8886acSNicolas Le Bayon 76*e0e2d64fSYann GautierPKA_USE_NIST_P256 ?= 0 77*e0e2d64fSYann GautierPKA_USE_BRAINPOOL_P256T1 ?= 0 78*e0e2d64fSYann Gautier 79e4ee1ab9SEtienne Carriereifeq ($(AARCH32_SP),sp_min) 80e4ee1ab9SEtienne Carriere# Disable Neon support: sp_min runtime may conflict with non-secure world 81e4ee1ab9SEtienne CarriereTF_CFLAGS += -mfloat-abi=soft 82e4ee1ab9SEtienne Carriereendif 83e4ee1ab9SEtienne Carriere 844353bb20SYann Gautier# Not needed for Cortex-A7 854353bb20SYann GautierWORKAROUND_CVE_2017_5715:= 0 869b2510b6SBipin RaviWORKAROUND_CVE_2022_23960:= 0 874353bb20SYann Gautier 888fc6fb5cSYann Gautier# Number of TF-A copies in the device 898fc6fb5cSYann GautierSTM32_TF_A_COPIES := 2 908fc6fb5cSYann Gautier 918fc6fb5cSYann Gautier# PLAT_PARTITION_MAX_ENTRIES must take care of STM32_TF-A_COPIES and other partitions 928fc6fb5cSYann Gautier# such as metadata (2) to find all the FIP partitions (default is 2). 938fc6fb5cSYann GautierPLAT_PARTITION_MAX_ENTRIES := $(shell echo $$(($(STM32_TF_A_COPIES) + 4))) 948fc6fb5cSYann Gautier 95ad216c10SSughosh Ganuifeq (${PSA_FWU_SUPPORT},1) 96ad216c10SSughosh Ganu# Number of banks of updatable firmware 97ad216c10SSughosh GanuNR_OF_FW_BANKS := 2 98ad216c10SSughosh GanuNR_OF_IMAGES_IN_FW_BANK := 1 99ad216c10SSughosh Ganu 1008fc6fb5cSYann GautierFWU_MAX_PART = $(shell echo $$(($(STM32_TF_A_COPIES) + 2 + $(NR_OF_FW_BANKS)))) 1018fc6fb5cSYann Gautierifeq ($(shell test $(FWU_MAX_PART) -gt $(PLAT_PARTITION_MAX_ENTRIES); echo $$?),0) 1028fc6fb5cSYann Gautier$(error "Required partition number is $(FWU_MAX_PART) where PLAT_PARTITION_MAX_ENTRIES is only \ 1038fc6fb5cSYann Gautier$(PLAT_PARTITION_MAX_ENTRIES)") 1048fc6fb5cSYann Gautierendif 1051989a19cSYann Gautierendif 106aec7de41SYann Gautier 10768039f2dSNicolas Toromanoffifeq ($(STM32MP13),1) 10868039f2dSNicolas ToromanoffSTM32_HASH_VER := 4 10927423744SNicolas Le BayonSTM32_RNG_VER := 4 11068039f2dSNicolas Toromanoffelse # Assuming STM32MP15 11168039f2dSNicolas ToromanoffSTM32_HASH_VER := 2 11227423744SNicolas Le BayonSTM32_RNG_VER := 2 11368039f2dSNicolas Toromanoffendif 11468039f2dSNicolas Toromanoff 1154b2f23e5SPatrick Delaunay# Download load address for serial boot devices 1164b2f23e5SPatrick DelaunayDWL_BUFFER_BASE ?= 0xC7000000 1174b2f23e5SPatrick Delaunay 1182eaffd51SYann Gautier# Device tree 119d38eaf99SYann Gautierifeq ($(STM32MP13),1) 120d38eaf99SYann GautierBL2_DTSI := stm32mp13-bl2.dtsi 121d38eaf99SYann GautierFDT_SOURCES := $(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl2.dts,$(DTB_FILE_NAME))) 122d38eaf99SYann Gautierelse 1231d204ee4SYann GautierBL2_DTSI := stm32mp15-bl2.dtsi 1241d204ee4SYann GautierFDT_SOURCES := $(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl2.dts,$(DTB_FILE_NAME))) 1251d204ee4SYann Gautierifeq ($(AARCH32_SP),sp_min) 1261d204ee4SYann GautierBL32_DTSI := stm32mp15-bl32.dtsi 1271d204ee4SYann GautierFDT_SOURCES += $(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl32.dts,$(DTB_FILE_NAME))) 1281d204ee4SYann Gautierendif 1291d204ee4SYann Gautierendif 130ca88c761SYann Gautier 1312eaffd51SYann Gautier# Macros and rules to build TF binary 1322eaffd51SYann GautierSTM32_TF_STM32 := $(addprefix ${BUILD_PLAT}/tf-a-, $(patsubst %.dtb,%.stm32,$(DTB_FILE_NAME))) 133a430382fSYann GautierSTM32_LD_FILE := plat/st/stm32mp1/stm32mp1.ld.S 134a430382fSYann GautierSTM32_BINARY_MAPPING := plat/st/stm32mp1/stm32mp1.S 1352eaffd51SYann Gautier 1362eaffd51SYann Gautierifeq ($(AARCH32_SP),sp_min) 1372eaffd51SYann Gautier# BL32 is built only if using SP_MIN 1382eaffd51SYann GautierBL32_DEP := bl32 1392eaffd51SYann GautierASFLAGS += -DBL32_BIN_PATH=\"${BUILD_PLAT}/bl32.bin\" 1402eaffd51SYann Gautierendif 1412eaffd51SYann Gautier 14229332bcdSYann GautierSTM32MP_FW_CONFIG_NAME := $(patsubst %.dtb,%-fw-config.dtb,$(DTB_FILE_NAME)) 14329332bcdSYann GautierSTM32MP_FW_CONFIG := ${BUILD_PLAT}/fdts/$(STM32MP_FW_CONFIG_NAME) 14429332bcdSYann Gautierifneq (${AARCH32_SP},none) 14529332bcdSYann GautierFDT_SOURCES += $(addprefix fdts/, $(patsubst %.dtb,%.dts,$(STM32MP_FW_CONFIG_NAME))) 14629332bcdSYann Gautierendif 14729332bcdSYann Gautier# Add the FW_CONFIG to FIP and specify the same to certtool 14829332bcdSYann Gautier$(eval $(call TOOL_ADD_PAYLOAD,${STM32MP_FW_CONFIG},--fw-config)) 149beb625f9SLionel Debieveifeq ($(GENERATE_COT),1) 150beb625f9SLionel DebieveSTM32MP_CFG_CERT := $(BUILD_PLAT)/stm32mp_cfg_cert.crt 151beb625f9SLionel Debieve# Add the STM32MP_CFG_CERT to FIP and specify the same to certtool 152beb625f9SLionel Debieve$(eval $(call TOOL_ADD_PAYLOAD,${STM32MP_CFG_CERT},--stm32mp-cfg-cert)) 153beb625f9SLionel Debieveendif 1541d204ee4SYann Gautierifeq ($(AARCH32_SP),sp_min) 1551d204ee4SYann GautierSTM32MP_TOS_FW_CONFIG := $(addprefix ${BUILD_PLAT}/fdts/, $(patsubst %.dtb,%-bl32.dtb,$(DTB_FILE_NAME))) 1561d204ee4SYann Gautier$(eval $(call TOOL_ADD_PAYLOAD,${STM32MP_TOS_FW_CONFIG},--tos-fw-config)) 1571d204ee4SYann Gautierendif 1581d204ee4SYann Gautier 1592eaffd51SYann Gautier# Enable flags for C files 160327131c4SLeonardo Sandoval$(eval $(call assert_booleans,\ 161327131c4SLeonardo Sandoval $(sort \ 162beb625f9SLionel Debieve PKA_USE_BRAINPOOL_P256T1 \ 163beb625f9SLionel Debieve PKA_USE_NIST_P256 \ 164ad3e46a3SLionel Debieve STM32MP_CRYPTO_ROM_LIB \ 16588f4fb8fSYann Gautier STM32MP_DDR_32BIT_INTERFACE \ 16688f4fb8fSYann Gautier STM32MP_DDR_DUAL_AXI_PORT \ 167beb625f9SLionel Debieve STM32MP_USE_EXTERNAL_HEAP \ 168bdec516eSSebastien Pasdeloup STM32MP13 \ 169bdec516eSSebastien Pasdeloup STM32MP15 \ 1702eaffd51SYann Gautier))) 1712eaffd51SYann Gautier 1722eaffd51SYann Gautier$(eval $(call assert_numerics,\ 1732eaffd51SYann Gautier $(sort \ 1742eaffd51SYann Gautier PLAT_PARTITION_MAX_ENTRIES \ 17568039f2dSNicolas Toromanoff STM32_HASH_VER \ 176beb625f9SLionel Debieve STM32_HEADER_VERSION_MAJOR \ 17727423744SNicolas Le Bayon STM32_RNG_VER \ 178ce21ee89SYann Gautier STM32_TF_A_COPIES \ 179327131c4SLeonardo Sandoval))) 180327131c4SLeonardo Sandoval 181327131c4SLeonardo Sandoval$(eval $(call add_defines,\ 182327131c4SLeonardo Sandoval $(sort \ 1834b2f23e5SPatrick Delaunay DWL_BUFFER_BASE \ 184beb625f9SLionel Debieve PKA_USE_BRAINPOOL_P256T1 \ 185beb625f9SLionel Debieve PKA_USE_NIST_P256 \ 186ce21ee89SYann Gautier PLAT_PARTITION_MAX_ENTRIES \ 187beb625f9SLionel Debieve PLAT_TBBR_IMG_DEF \ 18868039f2dSNicolas Toromanoff STM32_HASH_VER \ 189beb625f9SLionel Debieve STM32_HEADER_VERSION_MAJOR \ 19027423744SNicolas Le Bayon STM32_RNG_VER \ 1912eaffd51SYann Gautier STM32_TF_A_COPIES \ 192ad3e46a3SLionel Debieve STM32MP_CRYPTO_ROM_LIB \ 19388f4fb8fSYann Gautier STM32MP_DDR_32BIT_INTERFACE \ 19488f4fb8fSYann Gautier STM32MP_DDR_DUAL_AXI_PORT \ 195beb625f9SLionel Debieve STM32MP_USE_EXTERNAL_HEAP \ 196bdec516eSSebastien Pasdeloup STM32MP13 \ 197bdec516eSSebastien Pasdeloup STM32MP15 \ 198327131c4SLeonardo Sandoval))) 19946554b64SNicolas Le Bayon 2002eaffd51SYann Gautier# Include paths and source files 201c9d75b3cSYann GautierPLAT_INCLUDES += -Iplat/st/stm32mp1/include/ 2024353bb20SYann Gautier 203a430382fSYann GautierPLAT_BL_COMMON_SOURCES += plat/st/stm32mp1/stm32mp1_private.c 2044353bb20SYann Gautier 205985ee0b7SJulius WernerPLAT_BL_COMMON_SOURCES += drivers/st/uart/aarch32/stm32_console.S 2064353bb20SYann Gautier 2074353bb20SYann Gautierifneq (${ENABLE_STACK_PROTECTOR},0) 2084353bb20SYann GautierPLAT_BL_COMMON_SOURCES += plat/st/stm32mp1/stm32mp1_stack_protector.c 2094353bb20SYann Gautierendif 2104353bb20SYann Gautier 2114353bb20SYann GautierPLAT_BL_COMMON_SOURCES += lib/cpus/aarch32/cortex_a7.S 2124353bb20SYann Gautier 213d304158eSYann GautierPLAT_BL_COMMON_SOURCES += drivers/arm/tzc/tzc400.c \ 214072d7532SNicolas Le Bayon drivers/st/bsec/bsec2.c \ 21510a511ceSYann Gautier drivers/st/ddr/stm32mp1_ddr_helpers.c \ 216435832abSYann Gautier drivers/st/i2c/stm32_i2c.c \ 21773680c23SYann Gautier drivers/st/iwdg/stm32_iwdg.c \ 21823684d0eSYann Gautier drivers/st/pmic/stm32mp_pmic.c \ 21923684d0eSYann Gautier drivers/st/pmic/stpmic1.c \ 2207839a050SYann Gautier drivers/st/reset/stm32mp1_reset.c \ 22173680c23SYann Gautier plat/st/stm32mp1/stm32mp1_dbgmcu.c \ 22210a511ceSYann Gautier plat/st/stm32mp1/stm32mp1_helper.S \ 223f33b2433SYann Gautier plat/st/stm32mp1/stm32mp1_syscfg.c 2244353bb20SYann Gautier 2259be88e75SGabriel Fernandezifeq ($(STM32MP13),1) 2269be88e75SGabriel FernandezPLAT_BL_COMMON_SOURCES += drivers/st/clk/clk-stm32-core.c \ 22727423744SNicolas Le Bayon drivers/st/clk/clk-stm32mp13.c \ 22827423744SNicolas Le Bayon drivers/st/crypto/stm32_rng.c 2299be88e75SGabriel Fernandezelse 2309be88e75SGabriel FernandezPLAT_BL_COMMON_SOURCES += drivers/st/clk/stm32mp1_clk.c 2319be88e75SGabriel Fernandezendif 2329be88e75SGabriel Fernandez 233a430382fSYann GautierBL2_SOURCES += plat/st/stm32mp1/plat_bl2_mem_params_desc.c \ 2344584e01dSLionel Debieve plat/st/stm32mp1/stm32mp1_fconf_firewall.c 2351d204ee4SYann Gautier 2367da7f1f0SRohit Nerifeq (${PSA_FWU_SUPPORT},1) 237ad216c10SSughosh Ganuinclude drivers/fwu/fwu.mk 2387da7f1f0SRohit Nerendif 2397da7f1f0SRohit Ner 240a430382fSYann GautierBL2_SOURCES += drivers/st/crypto/stm32_hash.c \ 2414353bb20SYann Gautier plat/st/stm32mp1/bl2_plat_setup.c 2424353bb20SYann Gautier 243beb625f9SLionel Debieveifeq (${TRUSTED_BOARD_BOOT},1) 244beb625f9SLionel Debieveifeq ($(STM32MP13),1) 245a430382fSYann GautierBL2_SOURCES += drivers/st/crypto/stm32_pka.c 246a430382fSYann GautierBL2_SOURCES += drivers/st/crypto/stm32_saes.c 247beb625f9SLionel Debieveendif 248beb625f9SLionel Debieveendif 249beb625f9SLionel Debieve 25046554b64SNicolas Le Bayonifneq ($(filter 1,${STM32MP_EMMC} ${STM32MP_SDMMC}),) 251a430382fSYann GautierBL2_SOURCES += drivers/st/mmc/stm32_sdmmc2.c 25246554b64SNicolas Le Bayonendif 253aec7de41SYann Gautier 25412e21dfdSLionel Debieveifeq (${STM32MP_RAW_NAND},1) 255a430382fSYann GautierBL2_SOURCES += drivers/st/fmc/stm32_fmc2_nand.c 256b1b218fbSLionel Debieveendif 257b1b218fbSLionel Debieve 258b1b218fbSLionel Debieveifneq ($(filter 1,${STM32MP_SPI_NAND} ${STM32MP_SPI_NOR}),) 259a430382fSYann GautierBL2_SOURCES += drivers/st/spi/stm32_qspi.c 260b1b218fbSLionel Debieveendif 261b1b218fbSLionel Debieve 262b1b218fbSLionel Debieveifneq ($(filter 1,${STM32MP_RAW_NAND} ${STM32MP_SPI_NAND} ${STM32MP_SPI_NOR}),) 263b1b218fbSLionel DebieveBL2_SOURCES += plat/st/stm32mp1/stm32mp1_boot_device.c 26412e21dfdSLionel Debieveendif 26512e21dfdSLionel Debieve 2669083fa11SPatrick Delaunayifeq (${STM32MP_UART_PROGRAMMER},1) 267a430382fSYann GautierBL2_SOURCES += drivers/st/uart/stm32_uart.c 2689083fa11SPatrick Delaunayendif 2699083fa11SPatrick Delaunay 270fa92fef0SPatrick Delaunayifeq (${STM32MP_USB_PROGRAMMER},1) 271fa92fef0SPatrick Delaunay#The DFU stack uses only one end point, reduce the USB stack footprint 272fa92fef0SPatrick Delaunay$(eval $(call add_define_val,CONFIG_USBD_EP_NB,1U)) 2739083fa11SPatrick DelaunayBL2_SOURCES += drivers/st/usb/stm32mp1_usb.c \ 274fa92fef0SPatrick Delaunay plat/st/stm32mp1/stm32mp1_usb_dfu.c 275fa92fef0SPatrick Delaunayendif 276fa92fef0SPatrick Delaunay 277a430382fSYann GautierBL2_SOURCES += drivers/st/ddr/stm32mp1_ddr.c \ 27810a511ceSYann Gautier drivers/st/ddr/stm32mp1_ram.c 27910a511ceSYann Gautier 280a430382fSYann GautierBL2_SOURCES += plat/st/stm32mp1/plat_image_load.c 2811d204ee4SYann Gautier 2821d204ee4SYann Gautierifeq ($(AARCH32_SP),sp_min) 2831d204ee4SYann Gautier# Create DTB file for BL32 2841d204ee4SYann Gautier${BUILD_PLAT}/fdts/%-bl32.dts: fdts/%.dts fdts/${BL32_DTSI} | ${BUILD_PLAT} fdt_dirs 2851d204ee4SYann Gautier @echo '#include "$(patsubst fdts/%,%,$<)"' > $@ 2861d204ee4SYann Gautier @echo '#include "${BL32_DTSI}"' >> $@ 2871d204ee4SYann Gautier 2881d204ee4SYann Gautier${BUILD_PLAT}/fdts/%-bl32.dtb: ${BUILD_PLAT}/fdts/%-bl32.dts 2891d204ee4SYann Gautierendif 2901d204ee4SYann Gautier 291a430382fSYann Gautierinclude plat/st/common/common_rules.mk 292