1*91f16700Schasinglulu# 2*91f16700Schasinglulu# Copyright (c) 2015 - 2021, Broadcom 3*91f16700Schasinglulu# 4*91f16700Schasinglulu# SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu# 6*91f16700Schasinglulu 7*91f16700SchasingluluPLAT_BL_COMMON_SOURCES += plat/brcm/board/common/board_common.c 8*91f16700Schasinglulu 9*91f16700Schasinglulu# If no board config makefile, do not include it 10*91f16700Schasingluluifneq (${BOARD_CFG},) 11*91f16700SchasingluluBOARD_CFG_MAKE := $(shell find plat/brcm/board/${PLAT} -name '${BOARD_CFG}.mk') 12*91f16700Schasinglulu$(eval $(call add_define,BOARD_CFG)) 13*91f16700Schasingluluifneq (${BOARD_CFG_MAKE},) 14*91f16700Schasinglulu$(info Including ${BOARD_CFG_MAKE}) 15*91f16700Schasingluluinclude ${BOARD_CFG_MAKE} 16*91f16700Schasingluluelse 17*91f16700Schasinglulu$(error Error: File ${BOARD_CFG}.mk not found in plat/brcm/board/${PLAT}) 18*91f16700Schasingluluendif 19*91f16700Schasingluluendif 20*91f16700Schasinglulu 21*91f16700Schasinglulu# To compile with highest log level (VERBOSE) set value to 50 22*91f16700SchasingluluLOG_LEVEL := 40 23*91f16700Schasinglulu 24*91f16700Schasinglulu# Use custom generic timer clock 25*91f16700Schasingluluifneq (${GENTIMER_ACTUAL_CLOCK},) 26*91f16700Schasinglulu$(info Using GENTIMER_ACTUAL_CLOCK=$(GENTIMER_ACTUAL_CLOCK)) 27*91f16700SchasingluluSYSCNT_FREQ := $(GENTIMER_ACTUAL_CLOCK) 28*91f16700Schasinglulu$(eval $(call add_define,SYSCNT_FREQ)) 29*91f16700Schasingluluendif 30*91f16700Schasinglulu 31*91f16700Schasingluluifeq (${DRIVER_EMMC_ENABLE},) 32*91f16700SchasingluluDRIVER_EMMC_ENABLE :=1 33*91f16700Schasingluluendif 34*91f16700Schasinglulu 35*91f16700Schasingluluifeq (${DRIVER_SPI_ENABLE},) 36*91f16700SchasingluluDRIVER_SPI_ENABLE := 0 37*91f16700Schasingluluendif 38*91f16700Schasinglulu 39*91f16700Schasingluluifeq (${DRIVER_I2C_ENABLE},) 40*91f16700SchasingluluDRIVER_I2C_ENABLE := 0 41*91f16700Schasingluluendif 42*91f16700Schasinglulu 43*91f16700Schasinglulu# By default, Trusted Watchdog is always enabled unless SPIN_ON_BL1_EXIT is set 44*91f16700Schasingluluifeq (${BRCM_DISABLE_TRUSTED_WDOG},) 45*91f16700SchasingluluBRCM_DISABLE_TRUSTED_WDOG := 0 46*91f16700Schasingluluendif 47*91f16700Schasingluluifeq (${SPIN_ON_BL1_EXIT}, 1) 48*91f16700SchasingluluBRCM_DISABLE_TRUSTED_WDOG := 1 49*91f16700Schasingluluendif 50*91f16700Schasinglulu 51*91f16700Schasinglulu$(eval $(call assert_boolean,BRCM_DISABLE_TRUSTED_WDOG)) 52*91f16700Schasinglulu$(eval $(call add_define,BRCM_DISABLE_TRUSTED_WDOG)) 53*91f16700Schasinglulu 54*91f16700Schasinglulu# Process ARM_BL31_IN_DRAM flag 55*91f16700Schasingluluifeq (${ARM_BL31_IN_DRAM},) 56*91f16700SchasingluluARM_BL31_IN_DRAM := 0 57*91f16700Schasingluluendif 58*91f16700Schasinglulu$(eval $(call assert_boolean,ARM_BL31_IN_DRAM)) 59*91f16700Schasinglulu$(eval $(call add_define,ARM_BL31_IN_DRAM)) 60*91f16700Schasinglulu 61*91f16700Schasingluluifeq (${STANDALONE_BL2},yes) 62*91f16700SchasingluluBL2_LOG_LEVEL := 40 63*91f16700Schasinglulu$(eval $(call add_define,MMU_DISABLED)) 64*91f16700Schasingluluendif 65*91f16700Schasinglulu 66*91f16700Schasinglulu# BL2 XIP from QSPI 67*91f16700SchasingluluRUN_BL2_FROM_QSPI := 0 68*91f16700Schasingluluifeq (${RUN_BL2_FROM_QSPI},1) 69*91f16700Schasinglulu$(eval $(call add_define,RUN_BL2_FROM_QSPI)) 70*91f16700Schasingluluendif 71*91f16700Schasinglulu 72*91f16700Schasinglulu# BL2 XIP from NAND 73*91f16700SchasingluluRUN_BL2_FROM_NAND := 0 74*91f16700Schasingluluifeq (${RUN_BL2_FROM_NAND},1) 75*91f16700Schasinglulu$(eval $(call add_define,RUN_BL2_FROM_NAND)) 76*91f16700Schasingluluendif 77*91f16700Schasinglulu 78*91f16700Schasingluluifneq (${ELOG_AP_UART_LOG_BASE},) 79*91f16700Schasinglulu$(eval $(call add_define,ELOG_AP_UART_LOG_BASE)) 80*91f16700Schasingluluendif 81*91f16700Schasinglulu 82*91f16700Schasingluluifeq (${ELOG_SUPPORT},1) 83*91f16700Schasingluluifeq (${ELOG_STORE_MEDIA},DDR) 84*91f16700Schasinglulu$(eval $(call add_define,ELOG_STORE_MEDIA_DDR)) 85*91f16700Schasingluluifneq (${ELOG_STORE_OFFSET},) 86*91f16700Schasinglulu$(eval $(call add_define,ELOG_STORE_OFFSET)) 87*91f16700Schasingluluendif 88*91f16700Schasingluluendif 89*91f16700Schasingluluendif 90*91f16700Schasinglulu 91*91f16700Schasingluluifneq (${BL2_LOG_LEVEL},) 92*91f16700Schasinglulu$(eval $(call add_define,BL2_LOG_LEVEL)) 93*91f16700Schasingluluendif 94*91f16700Schasinglulu 95*91f16700Schasingluluifneq (${BL31_LOG_LEVEL},) 96*91f16700Schasinglulu$(eval $(call add_define,BL31_LOG_LEVEL)) 97*91f16700Schasingluluendif 98*91f16700Schasinglulu 99*91f16700Schasinglulu# Use CRMU SRAM from iHOST 100*91f16700Schasingluluifneq (${USE_CRMU_SRAM},) 101*91f16700Schasinglulu$(eval $(call add_define,USE_CRMU_SRAM)) 102*91f16700Schasingluluendif 103*91f16700Schasinglulu 104*91f16700Schasinglulu# Use PIO mode if DDR is not used 105*91f16700Schasingluluifeq (${USE_DDR},yes) 106*91f16700SchasingluluEMMC_USE_DMA := 1 107*91f16700Schasingluluelse 108*91f16700SchasingluluEMMC_USE_DMA := 0 109*91f16700Schasingluluendif 110*91f16700Schasinglulu$(eval $(call add_define,EMMC_USE_DMA)) 111*91f16700Schasinglulu 112*91f16700Schasinglulu# On BRCM platforms, separate the code and read-only data sections to allow 113*91f16700Schasinglulu# mapping the former as executable and the latter as execute-never. 114*91f16700SchasingluluSEPARATE_CODE_AND_RODATA := 1 115*91f16700Schasinglulu 116*91f16700Schasinglulu# Use generic OID definition (tbbr_oid.h) 117*91f16700SchasingluluUSE_TBBR_DEFS := 1 118*91f16700Schasinglulu 119*91f16700SchasingluluPLAT_INCLUDES += -Iplat/brcm/board/common \ 120*91f16700Schasinglulu -Iinclude/drivers/brcm \ 121*91f16700Schasinglulu -Iinclude/drivers/brcm/emmc \ 122*91f16700Schasinglulu -Iinclude/drivers/brcm/mdio 123*91f16700Schasinglulu 124*91f16700SchasingluluPLAT_BL_COMMON_SOURCES += plat/brcm/common/brcm_common.c \ 125*91f16700Schasinglulu plat/brcm/board/common/cmn_sec.c \ 126*91f16700Schasinglulu plat/brcm/board/common/bcm_console.c \ 127*91f16700Schasinglulu plat/brcm/board/common/brcm_mbedtls.c \ 128*91f16700Schasinglulu plat/brcm/board/common/plat_setup.c \ 129*91f16700Schasinglulu plat/brcm/board/common/platform_common.c \ 130*91f16700Schasinglulu drivers/arm/sp804/sp804_delay_timer.c \ 131*91f16700Schasinglulu drivers/brcm/sotp.c \ 132*91f16700Schasinglulu drivers/delay_timer/delay_timer.c \ 133*91f16700Schasinglulu drivers/io/io_fip.c \ 134*91f16700Schasinglulu drivers/io/io_memmap.c \ 135*91f16700Schasinglulu drivers/io/io_storage.c \ 136*91f16700Schasinglulu plat/brcm/common/brcm_io_storage.c \ 137*91f16700Schasinglulu plat/brcm/board/common/err.c \ 138*91f16700Schasinglulu plat/brcm/board/common/sbl_util.c \ 139*91f16700Schasinglulu drivers/arm/sp805/sp805.c 140*91f16700Schasinglulu 141*91f16700Schasinglulu# Add RNG driver 142*91f16700SchasingluluDRIVER_RNG_ENABLE := 1 143*91f16700Schasingluluifeq (${DRIVER_RNG_ENABLE},1) 144*91f16700SchasingluluPLAT_BL_COMMON_SOURCES += drivers/brcm/rng.c 145*91f16700Schasingluluendif 146*91f16700Schasinglulu 147*91f16700Schasinglulu# Add eMMC driver 148*91f16700Schasingluluifeq (${DRIVER_EMMC_ENABLE},1) 149*91f16700Schasinglulu$(eval $(call add_define,DRIVER_EMMC_ENABLE)) 150*91f16700Schasinglulu 151*91f16700SchasingluluEMMC_SOURCES += drivers/brcm/emmc/emmc_chal_sd.c \ 152*91f16700Schasinglulu drivers/brcm/emmc/emmc_csl_sdcard.c \ 153*91f16700Schasinglulu drivers/brcm/emmc/emmc_csl_sdcmd.c \ 154*91f16700Schasinglulu drivers/brcm/emmc/emmc_pboot_hal_memory_drv.c 155*91f16700Schasinglulu 156*91f16700SchasingluluPLAT_BL_COMMON_SOURCES += ${EMMC_SOURCES} 157*91f16700Schasinglulu 158*91f16700Schasingluluifeq (${DRIVER_EMMC_ENABLE_DATA_WIDTH_8BIT},) 159*91f16700Schasinglulu$(eval $(call add_define,DRIVER_EMMC_ENABLE_DATA_WIDTH_8BIT)) 160*91f16700Schasingluluendif 161*91f16700Schasingluluendif 162*91f16700Schasinglulu 163*91f16700SchasingluluBL2_SOURCES += plat/brcm/common/brcm_bl2_mem_params_desc.c \ 164*91f16700Schasinglulu plat/brcm/common/brcm_image_load.c \ 165*91f16700Schasinglulu common/desc_image_load.c 166*91f16700Schasinglulu 167*91f16700SchasingluluBL2_SOURCES += plat/brcm/common/brcm_bl2_setup.c 168*91f16700Schasinglulu 169*91f16700SchasingluluBL31_SOURCES += plat/brcm/common/brcm_bl31_setup.c 170*91f16700Schasinglulu 171*91f16700Schasingluluifeq (${BCM_ELOG},yes) 172*91f16700SchasingluluELOG_SOURCES += plat/brcm/board/common/bcm_elog.c 173*91f16700SchasingluluBL2_SOURCES += ${ELOG_SOURCES} 174*91f16700SchasingluluBL31_SOURCES += ${ELOG_SOURCES} 175*91f16700Schasingluluendif 176*91f16700Schasinglulu 177*91f16700Schasinglulu# Add spi driver 178*91f16700Schasingluluifeq (${DRIVER_SPI_ENABLE},1) 179*91f16700SchasingluluPLAT_BL_COMMON_SOURCES += drivers/brcm/spi/iproc_spi.c \ 180*91f16700Schasinglulu drivers/brcm/spi/iproc_qspi.c 181*91f16700Schasingluluendif 182*91f16700Schasinglulu 183*91f16700Schasinglulu# Add spi nor/flash driver 184*91f16700Schasingluluifeq (${DRIVER_SPI_NOR_ENABLE},1) 185*91f16700SchasingluluPLAT_BL_COMMON_SOURCES += drivers/brcm/spi_sf.c \ 186*91f16700Schasinglulu drivers/brcm/spi_flash.c 187*91f16700Schasingluluendif 188*91f16700Schasinglulu 189*91f16700Schasingluluifeq (${DRIVER_I2C_ENABLE},1) 190*91f16700Schasinglulu$(eval $(call add_define,DRIVER_I2C_ENABLE)) 191*91f16700SchasingluluBL2_SOURCES += drivers/brcm/i2c/i2c.c 192*91f16700SchasingluluPLAT_INCLUDES += -Iinclude/drivers/brcm/i2c 193*91f16700Schasingluluendif 194*91f16700Schasinglulu 195*91f16700Schasingluluifeq (${DRIVER_OCOTP_ENABLE},1) 196*91f16700Schasinglulu$(eval $(call add_define,DRIVER_OCOTP_ENABLE)) 197*91f16700SchasingluluBL2_SOURCES += drivers/brcm/ocotp.c 198*91f16700Schasingluluendif 199*91f16700Schasinglulu 200*91f16700Schasinglulu# Enable FRU table support 201*91f16700Schasingluluifeq (${USE_FRU},yes) 202*91f16700Schasinglulu$(eval $(call add_define,USE_FRU)) 203*91f16700SchasingluluBL2_SOURCES += drivers/brcm/fru.c 204*91f16700Schasingluluendif 205*91f16700Schasinglulu 206*91f16700Schasinglulu# Enable GPIO support 207*91f16700Schasingluluifeq (${USE_GPIO},yes) 208*91f16700Schasinglulu$(eval $(call add_define,USE_GPIO)) 209*91f16700SchasingluluBL2_SOURCES += drivers/gpio/gpio.c 210*91f16700SchasingluluBL2_SOURCES += drivers/brcm/iproc_gpio.c 211*91f16700Schasingluluifeq (${GPIO_SUPPORT_FLOAT_DETECTION},yes) 212*91f16700Schasinglulu$(eval $(call add_define,GPIO_SUPPORT_FLOAT_DETECTION)) 213*91f16700Schasingluluendif 214*91f16700Schasingluluendif 215*91f16700Schasinglulu 216*91f16700Schasinglulu# Include mbedtls if it can be located 217*91f16700SchasingluluMBEDTLS_DIR ?= mbedtls 218*91f16700SchasingluluMBEDTLS_CHECK := $(shell find ${MBEDTLS_DIR}/include -name '$(notdir ${MBEDTLS_DIR})') 219*91f16700Schasinglulu 220*91f16700Schasingluluifneq (${MBEDTLS_CHECK},) 221*91f16700Schasinglulu$(info Found mbedTLS at ${MBEDTLS_DIR}) 222*91f16700SchasingluluPLAT_INCLUDES += -I${MBEDTLS_DIR}/include/mbedtls 223*91f16700Schasinglulu 224*91f16700Schasinglulu# By default, use RSA keys 225*91f16700SchasingluluKEY_ALG := rsa_1_5 226*91f16700Schasinglulu 227*91f16700Schasinglulu# Include common TBB sources 228*91f16700SchasingluluAUTH_SOURCES += drivers/auth/auth_mod.c \ 229*91f16700Schasinglulu drivers/auth/crypto_mod.c \ 230*91f16700Schasinglulu drivers/auth/img_parser_mod.c \ 231*91f16700Schasinglulu drivers/auth/tbbr/tbbr_cot_common.c \ 232*91f16700Schasinglulu drivers/auth/tbbr/tbbr_cot_bl2.c 233*91f16700Schasinglulu 234*91f16700SchasingluluBL2_SOURCES += ${AUTH_SOURCES} 235*91f16700Schasinglulu 236*91f16700Schasinglulu# Use ATF framework for MBEDTLS 237*91f16700SchasingluluTRUSTED_BOARD_BOOT := 1 238*91f16700SchasingluluCRYPTO_LIB_MK := drivers/auth/mbedtls/mbedtls_crypto.mk 239*91f16700SchasingluluIMG_PARSER_LIB_MK := drivers/auth/mbedtls/mbedtls_x509.mk 240*91f16700Schasinglulu$(info Including ${CRYPTO_LIB_MK}) 241*91f16700Schasingluluinclude ${CRYPTO_LIB_MK} 242*91f16700Schasinglulu$(info Including ${IMG_PARSER_LIB_MK}) 243*91f16700Schasingluluinclude ${IMG_PARSER_LIB_MK} 244*91f16700Schasinglulu 245*91f16700Schasinglulu# Use ATF secure boot functions 246*91f16700Schasinglulu# Use Hardcoded hash for devel 247*91f16700Schasinglulu 248*91f16700SchasingluluARM_ROTPK_LOCATION=arm_rsa 249*91f16700Schasingluluifeq (${ARM_ROTPK_LOCATION}, arm_rsa) 250*91f16700SchasingluluARM_ROTPK_LOCATION_ID=ARM_ROTPK_DEVEL_RSA_ID 251*91f16700SchasingluluROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem 252*91f16700Schasingluluelse ifeq (${ARM_ROTPK_LOCATION}, brcm_rsa) 253*91f16700SchasingluluARM_ROTPK_LOCATION_ID=BRCM_ROTPK_SOTP_RSA_ID 254*91f16700Schasingluluifeq (${ROT_KEY},) 255*91f16700SchasingluluROT_KEY=plat/brcm/board/common/rotpk/rsa_dauth2048_key.pem 256*91f16700Schasingluluendif 257*91f16700SchasingluluKEY_FIND := $(shell m="${ROT_KEY}"; [ -f "$$m" ] && echo "$$m") 258*91f16700Schasingluluifeq (${KEY_FIND},) 259*91f16700Schasinglulu$(error Error: No ${ROT_KEY} located) 260*91f16700Schasingluluelse 261*91f16700Schasinglulu$(info Using ROT_KEY: ${ROT_KEY}) 262*91f16700Schasingluluendif 263*91f16700Schasingluluelse 264*91f16700Schasinglulu$(error "Unsupported ARM_ROTPK_LOCATION value") 265*91f16700Schasingluluendif 266*91f16700Schasinglulu 267*91f16700Schasinglulu$(eval $(call add_define,ARM_ROTPK_LOCATION_ID)) 268*91f16700SchasingluluPLAT_BL_COMMON_SOURCES+=plat/brcm/board/common/board_arm_trusted_boot.c 269*91f16700Schasingluluendif 270*91f16700Schasinglulu 271*91f16700Schasinglulu#M0 runtime firmware 272*91f16700Schasingluluifdef SCP_BL2 273*91f16700Schasinglulu$(eval $(call add_define,NEED_SCP_BL2)) 274*91f16700SchasingluluSCP_CFG_DIR=$(dir ${SCP_BL2}) 275*91f16700SchasingluluPLAT_INCLUDES += -I${SCP_CFG_DIR} 276*91f16700Schasingluluendif 277*91f16700Schasinglulu 278*91f16700Schasingluluifneq (${NEED_BL33},yes) 279*91f16700Schasinglulu# If there is no BL33, BL31 will jump to this address. 280*91f16700Schasingluluifeq (${USE_DDR},yes) 281*91f16700SchasingluluPRELOADED_BL33_BASE := 0x80000000 282*91f16700Schasingluluelse 283*91f16700SchasingluluPRELOADED_BL33_BASE := 0x74000000 284*91f16700Schasingluluendif 285*91f16700Schasingluluendif 286*91f16700Schasinglulu 287*91f16700Schasinglulu# Use translation tables library v1 by default 288*91f16700SchasingluluARM_XLAT_TABLES_LIB_V1 := 1 289*91f16700Schasingluluifeq (${ARM_XLAT_TABLES_LIB_V1}, 1) 290*91f16700Schasinglulu$(eval $(call assert_boolean,ARM_XLAT_TABLES_LIB_V1)) 291*91f16700Schasinglulu$(eval $(call add_define,ARM_XLAT_TABLES_LIB_V1)) 292*91f16700SchasingluluPLAT_BL_COMMON_SOURCES += lib/xlat_tables/aarch64/xlat_tables.c \ 293*91f16700Schasinglulu lib/xlat_tables/xlat_tables_common.c 294*91f16700Schasingluluendif 295