xref: /arm-trusted-firmware/plat/brcm/board/common/board_common.mk (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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