1*4882a593Smuzhiyun################################################################################ 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# arm-trusted-firmware 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun################################################################################ 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_VERSION = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_VERSION)) 8*4882a593Smuzhiyun 9*4882a593Smuzhiyunifeq ($(ARM_TRUSTED_FIRMWARE_VERSION),custom) 10*4882a593Smuzhiyun# Handle custom ATF tarballs as specified by the configuration 11*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_TARBALL = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION)) 12*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_SITE = $(patsubst %/,%,$(dir $(ARM_TRUSTED_FIRMWARE_TARBALL))) 13*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_SOURCE = $(notdir $(ARM_TRUSTED_FIRMWARE_TARBALL)) 14*4882a593Smuzhiyunelse ifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT),y) 15*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_SITE = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL)) 16*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_SITE_METHOD = git 17*4882a593Smuzhiyunelse 18*4882a593Smuzhiyun# Handle stable official ATF versions 19*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_SITE = $(call github,ARM-software,arm-trusted-firmware,$(ARM_TRUSTED_FIRMWARE_VERSION)) 20*4882a593Smuzhiyun# The licensing of custom or from-git versions is unknown. 21*4882a593Smuzhiyun# This is valid only for the latest (i.e. known) version. 22*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_VERSION),y) 23*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_LICENSE = BSD-3-Clause 24*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_LICENSE_FILES = docs/license.rst 25*4882a593Smuzhiyunendif 26*4882a593Smuzhiyunendif 27*4882a593Smuzhiyun 28*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE)$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_LATEST_VERSION),y) 29*4882a593SmuzhiyunBR_NO_CHECK_HASH_FOR += $(ARM_TRUSTED_FIRMWARE_SOURCE) 30*4882a593Smuzhiyunendif 31*4882a593Smuzhiyun 32*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_INSTALL_IMAGES = YES 33*4882a593Smuzhiyun 34*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_DTC),y) 35*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += host-dtc 36*4882a593Smuzhiyunendif 37*4882a593Smuzhiyun 38*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_NEEDS_ARM32_TOOLCHAIN),y) 39*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += host-arm-gnu-a-toolchain 40*4882a593Smuzhiyunendif 41*4882a593Smuzhiyun 42*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_PLATFORM = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM)) 43*4882a593Smuzhiyun 44*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_DEBUG),y) 45*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += DEBUG=1 46*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_IMG_DIR = $(@D)/build/$(ARM_TRUSTED_FIRMWARE_PLATFORM)/debug 47*4882a593Smuzhiyunelse 48*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_IMG_DIR = $(@D)/build/$(ARM_TRUSTED_FIRMWARE_PLATFORM)/release 49*4882a593Smuzhiyunendif 50*4882a593Smuzhiyun 51*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += \ 52*4882a593Smuzhiyun CROSS_COMPILE="$(TARGET_CROSS)" \ 53*4882a593Smuzhiyun $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_VARIABLES)) \ 54*4882a593Smuzhiyun PLAT=$(ARM_TRUSTED_FIRMWARE_PLATFORM) 55*4882a593Smuzhiyun 56*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_ENV += \ 57*4882a593Smuzhiyun $(TARGET_MAKE_ENV) \ 58*4882a593Smuzhiyun ENABLE_STACK_PROTECTOR=$(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_SSP_LEVEL)) 59*4882a593Smuzhiyun 60*4882a593Smuzhiyunifeq ($(BR2_ARM_CPU_ARMV7A),y) 61*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += ARM_ARCH_MAJOR=7 62*4882a593Smuzhiyunelse ifeq ($(BR2_ARM_CPU_ARMV8A),y) 63*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += ARM_ARCH_MAJOR=8 64*4882a593Smuzhiyunendif 65*4882a593Smuzhiyun 66*4882a593Smuzhiyunifeq ($(BR2_arm),y) 67*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += ARCH=aarch32 68*4882a593Smuzhiyunelse ifeq ($(BR2_aarch64),y) 69*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += ARCH=aarch64 70*4882a593Smuzhiyunendif 71*4882a593Smuzhiyun 72*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_OPTEE),y) 73*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += optee-os 74*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += \ 75*4882a593Smuzhiyun BL32=$(BINARIES_DIR)/tee-header_v2.bin \ 76*4882a593Smuzhiyun BL32_EXTRA1=$(BINARIES_DIR)/tee-pager_v2.bin \ 77*4882a593Smuzhiyun BL32_EXTRA2=$(BINARIES_DIR)/tee-pageable_v2.bin 78*4882a593Smuzhiyunifeq ($(BR2_aarch64),y) 79*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += SPD=opteed 80*4882a593Smuzhiyunendif 81*4882a593Smuzhiyunifeq ($(BR2_arm),y) 82*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += AARCH32_SP=optee 83*4882a593Smuzhiyunendif 84*4882a593Smuzhiyunendif # BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_OPTEE 85*4882a593Smuzhiyun 86*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_EDK2_AS_BL33),y) 87*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += edk2 88*4882a593Smuzhiyun# Since the flash device name vary between platforms, we use the variable 89*4882a593Smuzhiyun# provided by the EDK2 package for this. Using this variable here is OK 90*4882a593Smuzhiyun# as it will expand after all dependencies are resolved, inside _BUILD_CMDS. 91*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += \ 92*4882a593Smuzhiyun BL33=$(BINARIES_DIR)/$(call qstrip,$(BR2_TARGET_EDK2_FD_NAME).fd) 93*4882a593Smuzhiyunendif 94*4882a593Smuzhiyun 95*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33),y) 96*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_UBOOT_BIN = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_BL33_IMAGE)) 97*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += BL33=$(BINARIES_DIR)/$(ARM_TRUSTED_FIRMWARE_UBOOT_BIN) 98*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += uboot 99*4882a593Smuzhiyunendif 100*4882a593Smuzhiyun 101*4882a593Smuzhiyunifeq ($(BR2_TARGET_VEXPRESS_FIRMWARE),y) 102*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += SCP_BL2=$(BINARIES_DIR)/scp-fw.bin 103*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += vexpress-firmware 104*4882a593Smuzhiyunendif 105*4882a593Smuzhiyun 106*4882a593Smuzhiyunifeq ($(BR2_TARGET_BINARIES_MARVELL),y) 107*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += SCP_BL2=$(BINARIES_DIR)/scp-fw.bin 108*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += binaries-marvell 109*4882a593Smuzhiyunendif 110*4882a593Smuzhiyun 111*4882a593Smuzhiyunifeq ($(BR2_TARGET_MV_DDR_MARVELL),y) 112*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += MV_DDR_PATH=$(MV_DDR_MARVELL_DIR) 113*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += mv-ddr-marvell 114*4882a593Smuzhiyunendif 115*4882a593Smuzhiyun 116*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_TARGETS = all 117*4882a593Smuzhiyun 118*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP),y) 119*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_TARGETS += fip 120*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += host-openssl 121*4882a593Smuzhiyun# fiptool only exists in newer (>= 1.3) versions of ATF, so we build 122*4882a593Smuzhiyun# it conditionally. We need to explicitly build it as it requires 123*4882a593Smuzhiyun# OpenSSL, and therefore needs to be passed proper variables to find 124*4882a593Smuzhiyun# the host OpenSSL. 125*4882a593Smuzhiyundefine ARM_TRUSTED_FIRMWARE_BUILD_FIPTOOL 126*4882a593Smuzhiyun if test -d $(@D)/tools/fiptool; then \ 127*4882a593Smuzhiyun $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D)/tools/fiptool \ 128*4882a593Smuzhiyun $(ARM_TRUSTED_FIRMWARE_MAKE_OPTS) \ 129*4882a593Smuzhiyun CPPFLAGS="$(HOST_CPPFLAGS)" \ 130*4882a593Smuzhiyun LDLIBS="$(HOST_LDFLAGS) -lcrypto" ; \ 131*4882a593Smuzhiyun fi 132*4882a593Smuzhiyunendef 133*4882a593Smuzhiyunendif 134*4882a593Smuzhiyun 135*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31),y) 136*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_TARGETS += bl31 137*4882a593Smuzhiyunendif 138*4882a593Smuzhiyun 139*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL31_UBOOT),y) 140*4882a593Smuzhiyundefine ARM_TRUSTED_FIRMWARE_BL31_UBOOT_BUILD 141*4882a593Smuzhiyun# Get the entry point address from the elf. 142*4882a593Smuzhiyun BASE_ADDR=$$($(TARGET_READELF) -h $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/bl31/bl31.elf | \ 143*4882a593Smuzhiyun sed -r '/^ Entry point address:\s*(.*)/!d; s//\1/') && \ 144*4882a593Smuzhiyun $(MKIMAGE) \ 145*4882a593Smuzhiyun -A $(MKIMAGE_ARCH) -O arm-trusted-firmware -C none \ 146*4882a593Smuzhiyun -a $${BASE_ADDR} -e $${BASE_ADDR} \ 147*4882a593Smuzhiyun -d $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/bl31.bin \ 148*4882a593Smuzhiyun $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/atf-uboot.ub 149*4882a593Smuzhiyunendef 150*4882a593Smuzhiyundefine ARM_TRUSTED_FIRMWARE_BL31_UBOOT_INSTALL 151*4882a593Smuzhiyun $(INSTALL) -m 0644 $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/atf-uboot.ub \ 152*4882a593Smuzhiyun $(BINARIES_DIR)/atf-uboot.ub 153*4882a593Smuzhiyunendef 154*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_OPTS += RESET_TO_BL31=1 155*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_DEPENDENCIES += host-uboot-tools 156*4882a593Smuzhiyunendif 157*4882a593Smuzhiyun 158*4882a593Smuzhiyunifeq ($(BR2_TARGET_UBOOT_NEEDS_ATF_BL31_ELF),y) 159*4882a593Smuzhiyundefine ARM_TRUSTED_FIRMWARE_BL31_UBOOT_INSTALL_ELF 160*4882a593Smuzhiyun $(INSTALL) -D -m 0644 $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/bl31/bl31.elf \ 161*4882a593Smuzhiyun $(BINARIES_DIR)/bl31.elf 162*4882a593Smuzhiyunendef 163*4882a593Smuzhiyunendif 164*4882a593Smuzhiyun 165*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_MAKE_TARGETS += \ 166*4882a593Smuzhiyun $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_ADDITIONAL_TARGETS)) 167*4882a593Smuzhiyun 168*4882a593SmuzhiyunARM_TRUSTED_FIRMWARE_CUSTOM_DTS_PATH = $(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_DTS_PATH)) 169*4882a593Smuzhiyun 170*4882a593Smuzhiyundefine ARM_TRUSTED_FIRMWARE_BUILD_CMDS 171*4882a593Smuzhiyun $(if $(ARM_TRUSTED_FIRMWARE_CUSTOM_DTS_PATH), 172*4882a593Smuzhiyun cp -f $(ARM_TRUSTED_FIRMWARE_CUSTOM_DTS_PATH) $(@D)/fdts/ 173*4882a593Smuzhiyun ) 174*4882a593Smuzhiyun $(ARM_TRUSTED_FIRMWARE_BUILD_FIPTOOL) 175*4882a593Smuzhiyun $(ARM_TRUSTED_FIRMWARE_MAKE_ENV) $(MAKE) -C $(@D) \ 176*4882a593Smuzhiyun $(ARM_TRUSTED_FIRMWARE_MAKE_OPTS) \ 177*4882a593Smuzhiyun $(ARM_TRUSTED_FIRMWARE_MAKE_TARGETS) 178*4882a593Smuzhiyun $(ARM_TRUSTED_FIRMWARE_BL31_UBOOT_BUILD) 179*4882a593Smuzhiyunendef 180*4882a593Smuzhiyun 181*4882a593Smuzhiyundefine ARM_TRUSTED_FIRMWARE_INSTALL_IMAGES_CMDS 182*4882a593Smuzhiyun $(foreach f,$(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_IMAGES)), \ 183*4882a593Smuzhiyun cp -dpf $(ARM_TRUSTED_FIRMWARE_IMG_DIR)/$(f) $(BINARIES_DIR)/ 184*4882a593Smuzhiyun ) 185*4882a593Smuzhiyun $(ARM_TRUSTED_FIRMWARE_BL31_UBOOT_INSTALL) 186*4882a593Smuzhiyun $(ARM_TRUSTED_FIRMWARE_BL31_UBOOT_INSTALL_ELF) 187*4882a593Smuzhiyunendef 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun# Configuration check 190*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE)$(BR_BUILDING),yy) 191*4882a593Smuzhiyun 192*4882a593Smuzhiyunifeq ($(ARM_TRUSTED_FIRMWARE_VERSION),custom) 193*4882a593Smuzhiyunifeq ($(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION))),) 194*4882a593Smuzhiyun$(error No tarball location specified. Please check BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_TARBALL_LOCATION)) 195*4882a593Smuzhiyunendif 196*4882a593Smuzhiyunendif 197*4882a593Smuzhiyun 198*4882a593Smuzhiyunifeq ($(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_GIT),y) 199*4882a593Smuzhiyunifeq ($(call qstrip,$(BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL)),) 200*4882a593Smuzhiyun$(error No repository specified. Please check BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_REPO_URL) 201*4882a593Smuzhiyunendif 202*4882a593Smuzhiyunendif 203*4882a593Smuzhiyun 204*4882a593Smuzhiyunendif 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun$(eval $(generic-package)) 207