You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
286 lines
7.4 KiB
286 lines
7.4 KiB
4 months ago
|
#
|
||
|
# Copyright (c) 2015 - 2020, Broadcom
|
||
|
#
|
||
|
# SPDX-License-Identifier: BSD-3-Clause
|
||
|
#
|
||
|
|
||
|
PLAT_BL_COMMON_SOURCES += plat/brcm/board/common/board_common.c
|
||
|
|
||
|
# If no board config makefile, do not include it
|
||
|
ifneq (${BOARD_CFG},)
|
||
|
BOARD_CFG_MAKE := $(shell find plat/brcm/board/${PLAT} -name '${BOARD_CFG}.mk')
|
||
|
$(eval $(call add_define,BOARD_CFG))
|
||
|
ifneq (${BOARD_CFG_MAKE},)
|
||
|
$(info Including ${BOARD_CFG_MAKE})
|
||
|
include ${BOARD_CFG_MAKE}
|
||
|
else
|
||
|
$(error Error: File ${BOARD_CFG}.mk not found in plat/brcm/board/${PLAT})
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
# To compile with highest log level (VERBOSE) set value to 50
|
||
|
LOG_LEVEL := 40
|
||
|
|
||
|
# Use custom generic timer clock
|
||
|
ifneq (${GENTIMER_ACTUAL_CLOCK},)
|
||
|
$(info Using GENTIMER_ACTUAL_CLOCK=$(GENTIMER_ACTUAL_CLOCK))
|
||
|
SYSCNT_FREQ := $(GENTIMER_ACTUAL_CLOCK)
|
||
|
$(eval $(call add_define,SYSCNT_FREQ))
|
||
|
endif
|
||
|
|
||
|
ifeq (${DRIVER_EMMC_ENABLE},)
|
||
|
DRIVER_EMMC_ENABLE :=1
|
||
|
endif
|
||
|
|
||
|
ifeq (${DRIVER_SPI_ENABLE},)
|
||
|
DRIVER_SPI_ENABLE := 0
|
||
|
endif
|
||
|
|
||
|
# By default, Trusted Watchdog is always enabled unless SPIN_ON_BL1_EXIT is set
|
||
|
ifeq (${BRCM_DISABLE_TRUSTED_WDOG},)
|
||
|
BRCM_DISABLE_TRUSTED_WDOG := 0
|
||
|
endif
|
||
|
ifeq (${SPIN_ON_BL1_EXIT}, 1)
|
||
|
BRCM_DISABLE_TRUSTED_WDOG := 1
|
||
|
endif
|
||
|
|
||
|
$(eval $(call assert_boolean,BRCM_DISABLE_TRUSTED_WDOG))
|
||
|
$(eval $(call add_define,BRCM_DISABLE_TRUSTED_WDOG))
|
||
|
|
||
|
# Process ARM_BL31_IN_DRAM flag
|
||
|
ifeq (${ARM_BL31_IN_DRAM},)
|
||
|
ARM_BL31_IN_DRAM := 0
|
||
|
endif
|
||
|
$(eval $(call assert_boolean,ARM_BL31_IN_DRAM))
|
||
|
$(eval $(call add_define,ARM_BL31_IN_DRAM))
|
||
|
|
||
|
ifeq (${STANDALONE_BL2},yes)
|
||
|
BL2_LOG_LEVEL := 40
|
||
|
$(eval $(call add_define,MMU_DISABLED))
|
||
|
endif
|
||
|
|
||
|
# BL2 XIP from QSPI
|
||
|
RUN_BL2_FROM_QSPI := 0
|
||
|
ifeq (${RUN_BL2_FROM_QSPI},1)
|
||
|
$(eval $(call add_define,RUN_BL2_FROM_QSPI))
|
||
|
endif
|
||
|
|
||
|
# BL2 XIP from NAND
|
||
|
RUN_BL2_FROM_NAND := 0
|
||
|
ifeq (${RUN_BL2_FROM_NAND},1)
|
||
|
$(eval $(call add_define,RUN_BL2_FROM_NAND))
|
||
|
endif
|
||
|
|
||
|
ifneq (${ELOG_AP_UART_LOG_BASE},)
|
||
|
$(eval $(call add_define,ELOG_AP_UART_LOG_BASE))
|
||
|
endif
|
||
|
|
||
|
ifeq (${ELOG_SUPPORT},1)
|
||
|
ifeq (${ELOG_STORE_MEDIA},DDR)
|
||
|
$(eval $(call add_define,ELOG_STORE_MEDIA_DDR))
|
||
|
ifneq (${ELOG_STORE_OFFSET},)
|
||
|
$(eval $(call add_define,ELOG_STORE_OFFSET))
|
||
|
endif
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
ifneq (${BL2_LOG_LEVEL},)
|
||
|
$(eval $(call add_define,BL2_LOG_LEVEL))
|
||
|
endif
|
||
|
|
||
|
ifneq (${BL31_LOG_LEVEL},)
|
||
|
$(eval $(call add_define,BL31_LOG_LEVEL))
|
||
|
endif
|
||
|
|
||
|
# Use CRMU SRAM from iHOST
|
||
|
ifneq (${USE_CRMU_SRAM},)
|
||
|
$(eval $(call add_define,USE_CRMU_SRAM))
|
||
|
endif
|
||
|
|
||
|
# Use PIO mode if DDR is not used
|
||
|
ifeq (${USE_DDR},yes)
|
||
|
EMMC_USE_DMA := 1
|
||
|
else
|
||
|
EMMC_USE_DMA := 0
|
||
|
endif
|
||
|
$(eval $(call add_define,EMMC_USE_DMA))
|
||
|
|
||
|
# On BRCM platforms, separate the code and read-only data sections to allow
|
||
|
# mapping the former as executable and the latter as execute-never.
|
||
|
SEPARATE_CODE_AND_RODATA := 1
|
||
|
|
||
|
# Use generic OID definition (tbbr_oid.h)
|
||
|
USE_TBBR_DEFS := 1
|
||
|
|
||
|
PLAT_INCLUDES += -Iplat/brcm/board/common \
|
||
|
-Iinclude/drivers/brcm \
|
||
|
-Iinclude/drivers/brcm/emmc
|
||
|
|
||
|
PLAT_BL_COMMON_SOURCES += plat/brcm/common/brcm_common.c \
|
||
|
plat/brcm/board/common/cmn_sec.c \
|
||
|
plat/brcm/board/common/bcm_console.c \
|
||
|
plat/brcm/board/common/brcm_mbedtls.c \
|
||
|
plat/brcm/board/common/plat_setup.c \
|
||
|
plat/brcm/board/common/platform_common.c \
|
||
|
drivers/arm/sp804/sp804_delay_timer.c \
|
||
|
drivers/brcm/sotp.c \
|
||
|
drivers/delay_timer/delay_timer.c \
|
||
|
drivers/io/io_fip.c \
|
||
|
drivers/io/io_memmap.c \
|
||
|
drivers/io/io_storage.c \
|
||
|
plat/brcm/common/brcm_io_storage.c \
|
||
|
plat/brcm/board/common/err.c \
|
||
|
plat/brcm/board/common/sbl_util.c \
|
||
|
drivers/arm/sp805/sp805.c
|
||
|
|
||
|
# Add RNG driver
|
||
|
DRIVER_RNG_ENABLE := 1
|
||
|
ifeq (${DRIVER_RNG_ENABLE},1)
|
||
|
PLAT_BL_COMMON_SOURCES += drivers/brcm/rng.c
|
||
|
endif
|
||
|
|
||
|
# Add eMMC driver
|
||
|
ifeq (${DRIVER_EMMC_ENABLE},1)
|
||
|
$(eval $(call add_define,DRIVER_EMMC_ENABLE))
|
||
|
|
||
|
EMMC_SOURCES += drivers/brcm/emmc/emmc_chal_sd.c \
|
||
|
drivers/brcm/emmc/emmc_csl_sdcard.c \
|
||
|
drivers/brcm/emmc/emmc_csl_sdcmd.c \
|
||
|
drivers/brcm/emmc/emmc_pboot_hal_memory_drv.c
|
||
|
|
||
|
PLAT_BL_COMMON_SOURCES += ${EMMC_SOURCES}
|
||
|
|
||
|
ifeq (${DRIVER_EMMC_ENABLE_DATA_WIDTH_8BIT},)
|
||
|
$(eval $(call add_define,DRIVER_EMMC_ENABLE_DATA_WIDTH_8BIT))
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
BL2_SOURCES += plat/brcm/common/brcm_bl2_mem_params_desc.c \
|
||
|
plat/brcm/common/brcm_image_load.c \
|
||
|
common/desc_image_load.c
|
||
|
|
||
|
BL2_SOURCES += plat/brcm/common/brcm_bl2_setup.c
|
||
|
|
||
|
BL31_SOURCES += plat/brcm/common/brcm_bl31_setup.c
|
||
|
|
||
|
ifeq (${BCM_ELOG},yes)
|
||
|
ELOG_SOURCES += plat/brcm/board/common/bcm_elog.c
|
||
|
BL2_SOURCES += ${ELOG_SOURCES}
|
||
|
BL31_SOURCES += ${ELOG_SOURCES}
|
||
|
endif
|
||
|
|
||
|
# Add spi driver
|
||
|
ifeq (${DRIVER_SPI_ENABLE},1)
|
||
|
PLAT_BL_COMMON_SOURCES += drivers/brcm/spi/iproc_spi.c \
|
||
|
drivers/brcm/spi/iproc_qspi.c
|
||
|
endif
|
||
|
|
||
|
# Add spi nor/flash driver
|
||
|
ifeq (${DRIVER_SPI_NOR_ENABLE},1)
|
||
|
PLAT_BL_COMMON_SOURCES += drivers/brcm/spi_sf.c \
|
||
|
drivers/brcm/spi_flash.c
|
||
|
endif
|
||
|
|
||
|
ifeq (${DRIVER_OCOTP_ENABLE},1)
|
||
|
$(eval $(call add_define,DRIVER_OCOTP_ENABLE))
|
||
|
BL2_SOURCES += drivers/brcm/ocotp.c
|
||
|
endif
|
||
|
|
||
|
# Enable FRU table support
|
||
|
ifeq (${USE_FRU},yes)
|
||
|
$(eval $(call add_define,USE_FRU))
|
||
|
BL2_SOURCES += drivers/brcm/fru.c
|
||
|
endif
|
||
|
|
||
|
# Enable GPIO support
|
||
|
ifeq (${USE_GPIO},yes)
|
||
|
$(eval $(call add_define,USE_GPIO))
|
||
|
BL2_SOURCES += drivers/gpio/gpio.c
|
||
|
BL2_SOURCES += drivers/brcm/iproc_gpio.c
|
||
|
ifeq (${GPIO_SUPPORT_FLOAT_DETECTION},yes)
|
||
|
$(eval $(call add_define,GPIO_SUPPORT_FLOAT_DETECTION))
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
# Include mbedtls if it can be located
|
||
|
MBEDTLS_DIR := mbedtls
|
||
|
MBEDTLS_CHECK := $(shell find ${MBEDTLS_DIR}/include -name '${MBEDTLS_DIR}')
|
||
|
|
||
|
ifneq (${MBEDTLS_CHECK},)
|
||
|
$(info Found mbedTLS at ${MBEDTLS_DIR})
|
||
|
PLAT_INCLUDES += -I${MBEDTLS_DIR}/include/mbedtls
|
||
|
# Specify mbedTLS configuration file
|
||
|
MBEDTLS_CONFIG_FILE := "<brcm_mbedtls_config.h>"
|
||
|
|
||
|
# By default, use RSA keys
|
||
|
KEY_ALG := rsa_1_5
|
||
|
|
||
|
# Include common TBB sources
|
||
|
AUTH_SOURCES += drivers/auth/auth_mod.c \
|
||
|
drivers/auth/crypto_mod.c \
|
||
|
drivers/auth/img_parser_mod.c \
|
||
|
drivers/auth/tbbr/tbbr_cot_common.c \
|
||
|
drivers/auth/tbbr/tbbr_cot_bl2.c
|
||
|
|
||
|
BL2_SOURCES += ${AUTH_SOURCES}
|
||
|
|
||
|
# Use ATF framework for MBEDTLS
|
||
|
TRUSTED_BOARD_BOOT := 1
|
||
|
CRYPTO_LIB_MK := drivers/auth/mbedtls/mbedtls_crypto.mk
|
||
|
IMG_PARSER_LIB_MK := drivers/auth/mbedtls/mbedtls_x509.mk
|
||
|
$(info Including ${CRYPTO_LIB_MK})
|
||
|
include ${CRYPTO_LIB_MK}
|
||
|
$(info Including ${IMG_PARSER_LIB_MK})
|
||
|
include ${IMG_PARSER_LIB_MK}
|
||
|
|
||
|
# Use ATF secure boot functions
|
||
|
# Use Hardcoded hash for devel
|
||
|
|
||
|
ARM_ROTPK_LOCATION=arm_rsa
|
||
|
ifeq (${ARM_ROTPK_LOCATION}, arm_rsa)
|
||
|
ARM_ROTPK_LOCATION_ID=ARM_ROTPK_DEVEL_RSA_ID
|
||
|
ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem
|
||
|
else ifeq (${ARM_ROTPK_LOCATION}, brcm_rsa)
|
||
|
ARM_ROTPK_LOCATION_ID=BRCM_ROTPK_SOTP_RSA_ID
|
||
|
ifeq (${ROT_KEY},)
|
||
|
ROT_KEY=plat/brcm/board/common/rotpk/rsa_dauth2048_key.pem
|
||
|
endif
|
||
|
KEY_FIND := $(shell m="${ROT_KEY}"; [ -f "$$m" ] && echo "$$m")
|
||
|
ifeq (${KEY_FIND},)
|
||
|
$(error Error: No ${ROT_KEY} located)
|
||
|
else
|
||
|
$(info Using ROT_KEY: ${ROT_KEY})
|
||
|
endif
|
||
|
else
|
||
|
$(error "Unsupported ARM_ROTPK_LOCATION value")
|
||
|
endif
|
||
|
|
||
|
$(eval $(call add_define,ARM_ROTPK_LOCATION_ID))
|
||
|
PLAT_BL_COMMON_SOURCES+=plat/brcm/board/common/board_arm_trusted_boot.c
|
||
|
endif
|
||
|
|
||
|
#M0 runtime firmware
|
||
|
ifdef SCP_BL2
|
||
|
$(eval $(call add_define,NEED_SCP_BL2))
|
||
|
SCP_CFG_DIR=$(dir ${SCP_BL2})
|
||
|
PLAT_INCLUDES += -I${SCP_CFG_DIR}
|
||
|
endif
|
||
|
|
||
|
ifneq (${NEED_BL33},yes)
|
||
|
# If there is no BL33, BL31 will jump to this address.
|
||
|
ifeq (${USE_DDR},yes)
|
||
|
PRELOADED_BL33_BASE := 0x80000000
|
||
|
else
|
||
|
PRELOADED_BL33_BASE := 0x74000000
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
# Use translation tables library v1 by default
|
||
|
ARM_XLAT_TABLES_LIB_V1 := 1
|
||
|
ifeq (${ARM_XLAT_TABLES_LIB_V1}, 1)
|
||
|
$(eval $(call assert_boolean,ARM_XLAT_TABLES_LIB_V1))
|
||
|
$(eval $(call add_define,ARM_XLAT_TABLES_LIB_V1))
|
||
|
PLAT_BL_COMMON_SOURCES += lib/xlat_tables/aarch64/xlat_tables.c \
|
||
|
lib/xlat_tables/xlat_tables_common.c
|
||
|
endif
|