xref: /aosp_15_r20/external/arm-trusted-firmware/plat/arm/common/arm_common.mk (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park#
2*54fd6939SJiyong Park# Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park#
4*54fd6939SJiyong Park# SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park#
6*54fd6939SJiyong Park
7*54fd6939SJiyong Parkinclude common/fdt_wrappers.mk
8*54fd6939SJiyong Park
9*54fd6939SJiyong Parkifeq (${ARCH}, aarch64)
10*54fd6939SJiyong Park  # On ARM standard platorms, the TSP can execute from Trusted SRAM, Trusted
11*54fd6939SJiyong Park  # DRAM (if available) or the TZC secured area of DRAM.
12*54fd6939SJiyong Park  # TZC secured DRAM is the default.
13*54fd6939SJiyong Park
14*54fd6939SJiyong Park  ARM_TSP_RAM_LOCATION	?=	dram
15*54fd6939SJiyong Park
16*54fd6939SJiyong Park  ifeq (${ARM_TSP_RAM_LOCATION}, tsram)
17*54fd6939SJiyong Park    ARM_TSP_RAM_LOCATION_ID = ARM_TRUSTED_SRAM_ID
18*54fd6939SJiyong Park  else ifeq (${ARM_TSP_RAM_LOCATION}, tdram)
19*54fd6939SJiyong Park    ARM_TSP_RAM_LOCATION_ID = ARM_TRUSTED_DRAM_ID
20*54fd6939SJiyong Park  else ifeq (${ARM_TSP_RAM_LOCATION}, dram)
21*54fd6939SJiyong Park    ARM_TSP_RAM_LOCATION_ID = ARM_DRAM_ID
22*54fd6939SJiyong Park  else
23*54fd6939SJiyong Park    $(error "Unsupported ARM_TSP_RAM_LOCATION value")
24*54fd6939SJiyong Park  endif
25*54fd6939SJiyong Park
26*54fd6939SJiyong Park  # Process flags
27*54fd6939SJiyong Park  # Process ARM_BL31_IN_DRAM flag
28*54fd6939SJiyong Park  ARM_BL31_IN_DRAM		:=	0
29*54fd6939SJiyong Park  $(eval $(call assert_boolean,ARM_BL31_IN_DRAM))
30*54fd6939SJiyong Park  $(eval $(call add_define,ARM_BL31_IN_DRAM))
31*54fd6939SJiyong Parkelse
32*54fd6939SJiyong Park  ARM_TSP_RAM_LOCATION_ID = ARM_TRUSTED_SRAM_ID
33*54fd6939SJiyong Parkendif
34*54fd6939SJiyong Park
35*54fd6939SJiyong Park$(eval $(call add_define,ARM_TSP_RAM_LOCATION_ID))
36*54fd6939SJiyong Park
37*54fd6939SJiyong Park
38*54fd6939SJiyong Park# For the original power-state parameter format, the State-ID can be encoded
39*54fd6939SJiyong Park# according to the recommended encoding or zero. This flag determines which
40*54fd6939SJiyong Park# State-ID encoding to be parsed.
41*54fd6939SJiyong ParkARM_RECOM_STATE_ID_ENC := 0
42*54fd6939SJiyong Park
43*54fd6939SJiyong Park# If the PSCI_EXTENDED_STATE_ID is set, then ARM_RECOM_STATE_ID_ENC need to
44*54fd6939SJiyong Park# be set. Else throw a build error.
45*54fd6939SJiyong Parkifeq (${PSCI_EXTENDED_STATE_ID}, 1)
46*54fd6939SJiyong Park  ifeq (${ARM_RECOM_STATE_ID_ENC}, 0)
47*54fd6939SJiyong Park    $(error Build option ARM_RECOM_STATE_ID_ENC needs to be set if \
48*54fd6939SJiyong Park            PSCI_EXTENDED_STATE_ID is set for ARM platforms)
49*54fd6939SJiyong Park  endif
50*54fd6939SJiyong Parkendif
51*54fd6939SJiyong Park
52*54fd6939SJiyong Park# Process ARM_RECOM_STATE_ID_ENC flag
53*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_RECOM_STATE_ID_ENC))
54*54fd6939SJiyong Park$(eval $(call add_define,ARM_RECOM_STATE_ID_ENC))
55*54fd6939SJiyong Park
56*54fd6939SJiyong Park# Process ARM_DISABLE_TRUSTED_WDOG flag
57*54fd6939SJiyong Park# By default, Trusted Watchdog is always enabled unless
58*54fd6939SJiyong Park# SPIN_ON_BL1_EXIT or ENABLE_RME is set
59*54fd6939SJiyong ParkARM_DISABLE_TRUSTED_WDOG	:=	0
60*54fd6939SJiyong Parkifneq ($(filter 1,${SPIN_ON_BL1_EXIT} ${ENABLE_RME}),)
61*54fd6939SJiyong ParkARM_DISABLE_TRUSTED_WDOG	:=	1
62*54fd6939SJiyong Parkendif
63*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_DISABLE_TRUSTED_WDOG))
64*54fd6939SJiyong Park$(eval $(call add_define,ARM_DISABLE_TRUSTED_WDOG))
65*54fd6939SJiyong Park
66*54fd6939SJiyong Park# Process ARM_CONFIG_CNTACR
67*54fd6939SJiyong ParkARM_CONFIG_CNTACR		:=	1
68*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_CONFIG_CNTACR))
69*54fd6939SJiyong Park$(eval $(call add_define,ARM_CONFIG_CNTACR))
70*54fd6939SJiyong Park
71*54fd6939SJiyong Park# Process ARM_BL31_IN_DRAM flag
72*54fd6939SJiyong ParkARM_BL31_IN_DRAM		:=	0
73*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_BL31_IN_DRAM))
74*54fd6939SJiyong Park$(eval $(call add_define,ARM_BL31_IN_DRAM))
75*54fd6939SJiyong Park
76*54fd6939SJiyong Park# Process ARM_PLAT_MT flag
77*54fd6939SJiyong ParkARM_PLAT_MT			:=	0
78*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_PLAT_MT))
79*54fd6939SJiyong Park$(eval $(call add_define,ARM_PLAT_MT))
80*54fd6939SJiyong Park
81*54fd6939SJiyong Park# Use translation tables library v2 by default
82*54fd6939SJiyong ParkARM_XLAT_TABLES_LIB_V1		:=	0
83*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_XLAT_TABLES_LIB_V1))
84*54fd6939SJiyong Park$(eval $(call add_define,ARM_XLAT_TABLES_LIB_V1))
85*54fd6939SJiyong Park
86*54fd6939SJiyong Park# Don't have the Linux kernel as a BL33 image by default
87*54fd6939SJiyong ParkARM_LINUX_KERNEL_AS_BL33	:=	0
88*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_LINUX_KERNEL_AS_BL33))
89*54fd6939SJiyong Park$(eval $(call add_define,ARM_LINUX_KERNEL_AS_BL33))
90*54fd6939SJiyong Park
91*54fd6939SJiyong Parkifeq (${ARM_LINUX_KERNEL_AS_BL33},1)
92*54fd6939SJiyong Park  ifneq (${ARCH},aarch64)
93*54fd6939SJiyong Park    ifneq (${RESET_TO_SP_MIN},1)
94*54fd6939SJiyong Park      $(error "ARM_LINUX_KERNEL_AS_BL33 is only available if RESET_TO_SP_MIN=1.")
95*54fd6939SJiyong Park    endif
96*54fd6939SJiyong Park  endif
97*54fd6939SJiyong Park  ifndef PRELOADED_BL33_BASE
98*54fd6939SJiyong Park    $(error "PRELOADED_BL33_BASE must be set if ARM_LINUX_KERNEL_AS_BL33 is used.")
99*54fd6939SJiyong Park  endif
100*54fd6939SJiyong Park  ifeq (${RESET_TO_BL31},1)
101*54fd6939SJiyong Park    ifndef ARM_PRELOADED_DTB_BASE
102*54fd6939SJiyong Park      $(error "ARM_PRELOADED_DTB_BASE must be set if ARM_LINUX_KERNEL_AS_BL33 is
103*54fd6939SJiyong Park       used with RESET_TO_BL31.")
104*54fd6939SJiyong Park    endif
105*54fd6939SJiyong Park    $(eval $(call add_define,ARM_PRELOADED_DTB_BASE))
106*54fd6939SJiyong Park  endif
107*54fd6939SJiyong Parkendif
108*54fd6939SJiyong Park
109*54fd6939SJiyong Park# Arm Ethos-N NPU SiP service
110*54fd6939SJiyong ParkARM_ETHOSN_NPU_DRIVER			:=	0
111*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_ETHOSN_NPU_DRIVER))
112*54fd6939SJiyong Park$(eval $(call add_define,ARM_ETHOSN_NPU_DRIVER))
113*54fd6939SJiyong Park
114*54fd6939SJiyong Park# Use an implementation of SHA-256 with a smaller memory footprint but reduced
115*54fd6939SJiyong Park# speed.
116*54fd6939SJiyong Park$(eval $(call add_define,MBEDTLS_SHA256_SMALLER))
117*54fd6939SJiyong Park
118*54fd6939SJiyong Park# Add the build options to pack Trusted OS Extra1 and Trusted OS Extra2 images
119*54fd6939SJiyong Park# in the FIP if the platform requires.
120*54fd6939SJiyong Parkifneq ($(BL32_EXTRA1),)
121*54fd6939SJiyong Park$(eval $(call TOOL_ADD_IMG,bl32_extra1,--tos-fw-extra1))
122*54fd6939SJiyong Parkendif
123*54fd6939SJiyong Parkifneq ($(BL32_EXTRA2),)
124*54fd6939SJiyong Park$(eval $(call TOOL_ADD_IMG,bl32_extra2,--tos-fw-extra2))
125*54fd6939SJiyong Parkendif
126*54fd6939SJiyong Park
127*54fd6939SJiyong Park# Enable PSCI_STAT_COUNT/RESIDENCY APIs on ARM platforms
128*54fd6939SJiyong ParkENABLE_PSCI_STAT		:=	1
129*54fd6939SJiyong ParkENABLE_PMF			:=	1
130*54fd6939SJiyong Park
131*54fd6939SJiyong Park# Override the standard libc with optimised libc_asm
132*54fd6939SJiyong ParkOVERRIDE_LIBC			:=	1
133*54fd6939SJiyong Parkifeq (${OVERRIDE_LIBC},1)
134*54fd6939SJiyong Park    include lib/libc/libc_asm.mk
135*54fd6939SJiyong Parkendif
136*54fd6939SJiyong Park
137*54fd6939SJiyong Park# On ARM platforms, separate the code and read-only data sections to allow
138*54fd6939SJiyong Park# mapping the former as executable and the latter as execute-never.
139*54fd6939SJiyong ParkSEPARATE_CODE_AND_RODATA	:=	1
140*54fd6939SJiyong Park
141*54fd6939SJiyong Park# On ARM platforms, disable SEPARATE_NOBITS_REGION by default. Both PROGBITS
142*54fd6939SJiyong Park# and NOBITS sections of BL31 image are adjacent to each other and loaded
143*54fd6939SJiyong Park# into Trusted SRAM.
144*54fd6939SJiyong ParkSEPARATE_NOBITS_REGION		:=	0
145*54fd6939SJiyong Park
146*54fd6939SJiyong Park# In order to support SEPARATE_NOBITS_REGION for Arm platforms, we need to load
147*54fd6939SJiyong Park# BL31 PROGBITS into secure DRAM space and BL31 NOBITS into SRAM. Hence mandate
148*54fd6939SJiyong Park# the build to require that ARM_BL31_IN_DRAM is enabled as well.
149*54fd6939SJiyong Parkifeq ($(SEPARATE_NOBITS_REGION),1)
150*54fd6939SJiyong Park    ifneq ($(ARM_BL31_IN_DRAM),1)
151*54fd6939SJiyong Park         $(error For SEPARATE_NOBITS_REGION, ARM_BL31_IN_DRAM must be enabled)
152*54fd6939SJiyong Park    endif
153*54fd6939SJiyong Park    ifneq ($(RECLAIM_INIT_CODE),0)
154*54fd6939SJiyong Park          $(error For SEPARATE_NOBITS_REGION, RECLAIM_INIT_CODE cannot be supported)
155*54fd6939SJiyong Park    endif
156*54fd6939SJiyong Parkendif
157*54fd6939SJiyong Park
158*54fd6939SJiyong Park# Disable ARM Cryptocell by default
159*54fd6939SJiyong ParkARM_CRYPTOCELL_INTEG		:=	0
160*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_CRYPTOCELL_INTEG))
161*54fd6939SJiyong Park$(eval $(call add_define,ARM_CRYPTOCELL_INTEG))
162*54fd6939SJiyong Park
163*54fd6939SJiyong Park# Enable PIE support for RESET_TO_BL31/RESET_TO_SP_MIN case
164*54fd6939SJiyong Parkifneq ($(filter 1,${RESET_TO_BL31} ${RESET_TO_SP_MIN}),)
165*54fd6939SJiyong Park	ENABLE_PIE			:=	1
166*54fd6939SJiyong Parkendif
167*54fd6939SJiyong Park
168*54fd6939SJiyong Park# CryptoCell integration relies on coherent buffers for passing data from
169*54fd6939SJiyong Park# the AP CPU to the CryptoCell
170*54fd6939SJiyong Parkifeq (${ARM_CRYPTOCELL_INTEG},1)
171*54fd6939SJiyong Park    ifeq (${USE_COHERENT_MEM},0)
172*54fd6939SJiyong Park        $(error "ARM_CRYPTOCELL_INTEG needs USE_COHERENT_MEM to be set.")
173*54fd6939SJiyong Park    endif
174*54fd6939SJiyong Parkendif
175*54fd6939SJiyong Park
176*54fd6939SJiyong Park# Disable GPT parser support, use FIP image by default
177*54fd6939SJiyong ParkARM_GPT_SUPPORT			:=	0
178*54fd6939SJiyong Park$(eval $(call assert_boolean,ARM_GPT_SUPPORT))
179*54fd6939SJiyong Park$(eval $(call add_define,ARM_GPT_SUPPORT))
180*54fd6939SJiyong Park
181*54fd6939SJiyong Park# Include necessary sources to parse GPT image
182*54fd6939SJiyong Parkifeq (${ARM_GPT_SUPPORT}, 1)
183*54fd6939SJiyong Park  BL2_SOURCES	+=	drivers/partition/gpt.c		\
184*54fd6939SJiyong Park			drivers/partition/partition.c
185*54fd6939SJiyong Parkendif
186*54fd6939SJiyong Park
187*54fd6939SJiyong Park# Enable CRC instructions via extension for ARMv8-A CPUs.
188*54fd6939SJiyong Park# For ARMv8.1-A, and onwards CRC instructions are default enabled.
189*54fd6939SJiyong Park# Enable HW computed CRC support unconditionally in BL2 component.
190*54fd6939SJiyong Parkifeq (${ARM_ARCH_MINOR},0)
191*54fd6939SJiyong Park  BL2_CPPFLAGS += -march=armv8-a+crc
192*54fd6939SJiyong Parkendif
193*54fd6939SJiyong Park
194*54fd6939SJiyong Parkifeq ($(PSA_FWU_SUPPORT),1)
195*54fd6939SJiyong Park    # GPT support is recommended as per PSA FWU specification hence
196*54fd6939SJiyong Park    # PSA FWU implementation is tightly coupled with GPT support,
197*54fd6939SJiyong Park    # and it does not support other formats.
198*54fd6939SJiyong Park    ifneq ($(ARM_GPT_SUPPORT),1)
199*54fd6939SJiyong Park      $(error For PSA_FWU_SUPPORT, ARM_GPT_SUPPORT must be enabled)
200*54fd6939SJiyong Park    endif
201*54fd6939SJiyong Park    FWU_MK := drivers/fwu/fwu.mk
202*54fd6939SJiyong Park    $(info Including ${FWU_MK})
203*54fd6939SJiyong Park    include ${FWU_MK}
204*54fd6939SJiyong Parkendif
205*54fd6939SJiyong Park
206*54fd6939SJiyong Parkifeq (${ARCH}, aarch64)
207*54fd6939SJiyong ParkPLAT_INCLUDES		+=	-Iinclude/plat/arm/common/aarch64
208*54fd6939SJiyong Parkendif
209*54fd6939SJiyong Park
210*54fd6939SJiyong ParkPLAT_BL_COMMON_SOURCES	+=	plat/arm/common/${ARCH}/arm_helpers.S		\
211*54fd6939SJiyong Park				plat/arm/common/arm_common.c			\
212*54fd6939SJiyong Park				plat/arm/common/arm_console.c
213*54fd6939SJiyong Park
214*54fd6939SJiyong Parkifeq (${ARM_XLAT_TABLES_LIB_V1}, 1)
215*54fd6939SJiyong ParkPLAT_BL_COMMON_SOURCES 	+=	lib/xlat_tables/xlat_tables_common.c	      \
216*54fd6939SJiyong Park				lib/xlat_tables/${ARCH}/xlat_tables.c
217*54fd6939SJiyong Parkelse
218*54fd6939SJiyong Parkifeq (${XLAT_MPU_LIB_V1}, 1)
219*54fd6939SJiyong Parkinclude lib/xlat_mpu/xlat_mpu.mk
220*54fd6939SJiyong ParkPLAT_BL_COMMON_SOURCES	+=	${XLAT_MPU_LIB_V1_SRCS}
221*54fd6939SJiyong Parkelse
222*54fd6939SJiyong Parkinclude lib/xlat_tables_v2/xlat_tables.mk
223*54fd6939SJiyong ParkPLAT_BL_COMMON_SOURCES	+=      ${XLAT_TABLES_LIB_SRCS}
224*54fd6939SJiyong Parkendif
225*54fd6939SJiyong Parkendif
226*54fd6939SJiyong Park
227*54fd6939SJiyong ParkARM_IO_SOURCES		+=	plat/arm/common/arm_io_storage.c		\
228*54fd6939SJiyong Park				plat/arm/common/fconf/arm_fconf_io.c
229*54fd6939SJiyong Parkifeq (${SPD},spmd)
230*54fd6939SJiyong Park    ifeq (${BL2_ENABLE_SP_LOAD},1)
231*54fd6939SJiyong Park         ARM_IO_SOURCES		+=	plat/arm/common/fconf/arm_fconf_sp.c
232*54fd6939SJiyong Park    endif
233*54fd6939SJiyong Parkendif
234*54fd6939SJiyong Park
235*54fd6939SJiyong ParkBL1_SOURCES		+=	drivers/io/io_fip.c				\
236*54fd6939SJiyong Park				drivers/io/io_memmap.c				\
237*54fd6939SJiyong Park				drivers/io/io_storage.c				\
238*54fd6939SJiyong Park				plat/arm/common/arm_bl1_setup.c			\
239*54fd6939SJiyong Park				plat/arm/common/arm_err.c			\
240*54fd6939SJiyong Park				${ARM_IO_SOURCES}
241*54fd6939SJiyong Park
242*54fd6939SJiyong Parkifdef EL3_PAYLOAD_BASE
243*54fd6939SJiyong Park# Need the plat_arm_program_trusted_mailbox() function to release secondary CPUs from
244*54fd6939SJiyong Park# their holding pen
245*54fd6939SJiyong ParkBL1_SOURCES		+=	plat/arm/common/arm_pm.c
246*54fd6939SJiyong Parkendif
247*54fd6939SJiyong Park
248*54fd6939SJiyong ParkBL2_SOURCES		+=	drivers/delay_timer/delay_timer.c		\
249*54fd6939SJiyong Park				drivers/delay_timer/generic_delay_timer.c	\
250*54fd6939SJiyong Park				drivers/io/io_fip.c				\
251*54fd6939SJiyong Park				drivers/io/io_memmap.c				\
252*54fd6939SJiyong Park				drivers/io/io_storage.c				\
253*54fd6939SJiyong Park				plat/arm/common/arm_bl2_setup.c			\
254*54fd6939SJiyong Park				plat/arm/common/arm_err.c			\
255*54fd6939SJiyong Park				common/tf_crc32.c				\
256*54fd6939SJiyong Park				${ARM_IO_SOURCES}
257*54fd6939SJiyong Park
258*54fd6939SJiyong Park# Firmware Configuration Framework sources
259*54fd6939SJiyong Parkinclude lib/fconf/fconf.mk
260*54fd6939SJiyong Park
261*54fd6939SJiyong ParkBL1_SOURCES		+=	${FCONF_SOURCES} ${FCONF_DYN_SOURCES}
262*54fd6939SJiyong ParkBL2_SOURCES		+=	${FCONF_SOURCES} ${FCONF_DYN_SOURCES}
263*54fd6939SJiyong Park
264*54fd6939SJiyong Park# Add `libfdt` and Arm common helpers required for Dynamic Config
265*54fd6939SJiyong Parkinclude lib/libfdt/libfdt.mk
266*54fd6939SJiyong Park
267*54fd6939SJiyong ParkDYN_CFG_SOURCES		+=	plat/arm/common/arm_dyn_cfg.c		\
268*54fd6939SJiyong Park				plat/arm/common/arm_dyn_cfg_helpers.c	\
269*54fd6939SJiyong Park				common/uuid.c
270*54fd6939SJiyong Park
271*54fd6939SJiyong ParkDYN_CFG_SOURCES		+=	${FDT_WRAPPERS_SOURCES}
272*54fd6939SJiyong Park
273*54fd6939SJiyong ParkBL1_SOURCES		+=	${DYN_CFG_SOURCES}
274*54fd6939SJiyong ParkBL2_SOURCES		+=	${DYN_CFG_SOURCES}
275*54fd6939SJiyong Park
276*54fd6939SJiyong Parkifeq (${BL2_AT_EL3},1)
277*54fd6939SJiyong ParkBL2_SOURCES		+=	plat/arm/common/arm_bl2_el3_setup.c
278*54fd6939SJiyong Parkendif
279*54fd6939SJiyong Park
280*54fd6939SJiyong Park# Because BL1/BL2 execute in AArch64 mode but BL32 in AArch32 we need to use
281*54fd6939SJiyong Park# the AArch32 descriptors.
282*54fd6939SJiyong Parkifeq (${JUNO_AARCH32_EL3_RUNTIME},1)
283*54fd6939SJiyong ParkBL2_SOURCES		+=	plat/arm/common/aarch32/arm_bl2_mem_params_desc.c
284*54fd6939SJiyong Parkelse
285*54fd6939SJiyong Parkifeq ($(filter ${TARGET_PLATFORM}, fpga fvp),)
286*54fd6939SJiyong ParkBL2_SOURCES		+=	plat/arm/common/${ARCH}/arm_bl2_mem_params_desc.c
287*54fd6939SJiyong Parkendif
288*54fd6939SJiyong Parkendif
289*54fd6939SJiyong ParkBL2_SOURCES		+=	plat/arm/common/arm_image_load.c		\
290*54fd6939SJiyong Park				common/desc_image_load.c
291*54fd6939SJiyong Parkifeq (${SPD},opteed)
292*54fd6939SJiyong ParkBL2_SOURCES		+=	lib/optee/optee_utils.c
293*54fd6939SJiyong Parkendif
294*54fd6939SJiyong Park
295*54fd6939SJiyong ParkBL2U_SOURCES		+=	drivers/delay_timer/delay_timer.c		\
296*54fd6939SJiyong Park				drivers/delay_timer/generic_delay_timer.c	\
297*54fd6939SJiyong Park				plat/arm/common/arm_bl2u_setup.c
298*54fd6939SJiyong Park
299*54fd6939SJiyong ParkBL31_SOURCES		+=	plat/arm/common/arm_bl31_setup.c		\
300*54fd6939SJiyong Park				plat/arm/common/arm_pm.c			\
301*54fd6939SJiyong Park				plat/arm/common/arm_topology.c			\
302*54fd6939SJiyong Park				plat/common/plat_psci_common.c
303*54fd6939SJiyong Park
304*54fd6939SJiyong Parkifneq ($(filter 1,${ENABLE_PMF} ${ARM_ETHOSN_NPU_DRIVER}),)
305*54fd6939SJiyong ParkARM_SVC_HANDLER_SRCS :=
306*54fd6939SJiyong Park
307*54fd6939SJiyong Parkifeq (${ENABLE_PMF},1)
308*54fd6939SJiyong ParkARM_SVC_HANDLER_SRCS	+=	lib/pmf/pmf_smc.c
309*54fd6939SJiyong Parkendif
310*54fd6939SJiyong Park
311*54fd6939SJiyong Parkifeq (${ARM_ETHOSN_NPU_DRIVER},1)
312*54fd6939SJiyong ParkARM_SVC_HANDLER_SRCS	+=	plat/arm/common/fconf/fconf_ethosn_getter.c	\
313*54fd6939SJiyong Park				drivers/delay_timer/delay_timer.c		\
314*54fd6939SJiyong Park				drivers/arm/ethosn/ethosn_smc.c
315*54fd6939SJiyong Parkendif
316*54fd6939SJiyong Park
317*54fd6939SJiyong Parkifeq (${ARCH}, aarch64)
318*54fd6939SJiyong ParkBL31_SOURCES		+=	plat/arm/common/aarch64/execution_state_switch.c\
319*54fd6939SJiyong Park				plat/arm/common/arm_sip_svc.c			\
320*54fd6939SJiyong Park				${ARM_SVC_HANDLER_SRCS}
321*54fd6939SJiyong Parkelse
322*54fd6939SJiyong ParkBL32_SOURCES		+=	plat/arm/common/arm_sip_svc.c			\
323*54fd6939SJiyong Park				${ARM_SVC_HANDLER_SRCS}
324*54fd6939SJiyong Parkendif
325*54fd6939SJiyong Parkendif
326*54fd6939SJiyong Park
327*54fd6939SJiyong Parkifeq (${EL3_EXCEPTION_HANDLING},1)
328*54fd6939SJiyong ParkBL31_SOURCES		+=	plat/common/aarch64/plat_ehf.c
329*54fd6939SJiyong Parkendif
330*54fd6939SJiyong Park
331*54fd6939SJiyong Parkifeq (${SDEI_SUPPORT},1)
332*54fd6939SJiyong ParkBL31_SOURCES		+=	plat/arm/common/aarch64/arm_sdei.c
333*54fd6939SJiyong Parkifeq (${SDEI_IN_FCONF},1)
334*54fd6939SJiyong ParkBL31_SOURCES		+=	plat/arm/common/fconf/fconf_sdei_getter.c
335*54fd6939SJiyong Parkendif
336*54fd6939SJiyong Parkendif
337*54fd6939SJiyong Park
338*54fd6939SJiyong Park# RAS sources
339*54fd6939SJiyong Parkifeq (${RAS_EXTENSION},1)
340*54fd6939SJiyong ParkBL31_SOURCES		+=	lib/extensions/ras/std_err_record.c		\
341*54fd6939SJiyong Park				lib/extensions/ras/ras_common.c
342*54fd6939SJiyong Parkendif
343*54fd6939SJiyong Park
344*54fd6939SJiyong Park# Pointer Authentication sources
345*54fd6939SJiyong Parkifeq (${ENABLE_PAUTH}, 1)
346*54fd6939SJiyong ParkPLAT_BL_COMMON_SOURCES	+=	plat/arm/common/aarch64/arm_pauth.c	\
347*54fd6939SJiyong Park				lib/extensions/pauth/pauth_helpers.S
348*54fd6939SJiyong Parkendif
349*54fd6939SJiyong Park
350*54fd6939SJiyong Parkifeq (${SPD},spmd)
351*54fd6939SJiyong ParkBL31_SOURCES		+=	plat/common/plat_spmd_manifest.c	\
352*54fd6939SJiyong Park				common/uuid.c				\
353*54fd6939SJiyong Park				${LIBFDT_SRCS}
354*54fd6939SJiyong Park
355*54fd6939SJiyong ParkBL31_SOURCES		+=	${FDT_WRAPPERS_SOURCES}
356*54fd6939SJiyong Parkendif
357*54fd6939SJiyong Park
358*54fd6939SJiyong Parkifneq (${TRUSTED_BOARD_BOOT},0)
359*54fd6939SJiyong Park
360*54fd6939SJiyong Park    # Include common TBB sources
361*54fd6939SJiyong Park    AUTH_SOURCES	:=	drivers/auth/auth_mod.c				\
362*54fd6939SJiyong Park				drivers/auth/crypto_mod.c			\
363*54fd6939SJiyong Park				drivers/auth/img_parser_mod.c			\
364*54fd6939SJiyong Park				lib/fconf/fconf_tbbr_getter.c
365*54fd6939SJiyong Park
366*54fd6939SJiyong Park    # Include the selected chain of trust sources.
367*54fd6939SJiyong Park    ifeq (${COT},tbbr)
368*54fd6939SJiyong Park            BL1_SOURCES	+=	drivers/auth/tbbr/tbbr_cot_common.c		\
369*54fd6939SJiyong Park				drivers/auth/tbbr/tbbr_cot_bl1.c
370*54fd6939SJiyong Park        ifneq (${COT_DESC_IN_DTB},0)
371*54fd6939SJiyong Park            BL2_SOURCES	+=	lib/fconf/fconf_cot_getter.c
372*54fd6939SJiyong Park        else
373*54fd6939SJiyong Park            BL2_SOURCES	+=	drivers/auth/tbbr/tbbr_cot_common.c	\
374*54fd6939SJiyong Park				drivers/auth/tbbr/tbbr_cot_bl2.c
375*54fd6939SJiyong Park        endif
376*54fd6939SJiyong Park    else ifeq (${COT},dualroot)
377*54fd6939SJiyong Park        AUTH_SOURCES	+=	drivers/auth/dualroot/cot.c
378*54fd6939SJiyong Park    else
379*54fd6939SJiyong Park        $(error Unknown chain of trust ${COT})
380*54fd6939SJiyong Park    endif
381*54fd6939SJiyong Park
382*54fd6939SJiyong Park    BL1_SOURCES		+=	${AUTH_SOURCES}					\
383*54fd6939SJiyong Park				bl1/tbbr/tbbr_img_desc.c			\
384*54fd6939SJiyong Park				plat/arm/common/arm_bl1_fwu.c			\
385*54fd6939SJiyong Park				plat/common/tbbr/plat_tbbr.c
386*54fd6939SJiyong Park
387*54fd6939SJiyong Park    BL2_SOURCES		+=	${AUTH_SOURCES}					\
388*54fd6939SJiyong Park				plat/common/tbbr/plat_tbbr.c
389*54fd6939SJiyong Park
390*54fd6939SJiyong Park    $(eval $(call TOOL_ADD_IMG,ns_bl2u,--fwu,FWU_))
391*54fd6939SJiyong Park
392*54fd6939SJiyong Park    # We expect to locate the *.mk files under the directories specified below
393*54fd6939SJiyong Parkifeq (${ARM_CRYPTOCELL_INTEG},0)
394*54fd6939SJiyong Park    CRYPTO_LIB_MK := drivers/auth/mbedtls/mbedtls_crypto.mk
395*54fd6939SJiyong Parkelse
396*54fd6939SJiyong Park    CRYPTO_LIB_MK := drivers/auth/cryptocell/cryptocell_crypto.mk
397*54fd6939SJiyong Parkendif
398*54fd6939SJiyong Park    IMG_PARSER_LIB_MK := drivers/auth/mbedtls/mbedtls_x509.mk
399*54fd6939SJiyong Park
400*54fd6939SJiyong Park    $(info Including ${CRYPTO_LIB_MK})
401*54fd6939SJiyong Park    include ${CRYPTO_LIB_MK}
402*54fd6939SJiyong Park
403*54fd6939SJiyong Park    $(info Including ${IMG_PARSER_LIB_MK})
404*54fd6939SJiyong Park    include ${IMG_PARSER_LIB_MK}
405*54fd6939SJiyong Park
406*54fd6939SJiyong Parkendif
407*54fd6939SJiyong Park
408*54fd6939SJiyong Parkifeq (${RECLAIM_INIT_CODE}, 1)
409*54fd6939SJiyong Park    ifeq (${ARM_XLAT_TABLES_LIB_V1}, 1)
410*54fd6939SJiyong Park        $(error "To reclaim init code xlat tables v2 must be used")
411*54fd6939SJiyong Park    endif
412*54fd6939SJiyong Parkendif
413*54fd6939SJiyong Park
414*54fd6939SJiyong Parkifeq (${MEASURED_BOOT},1)
415*54fd6939SJiyong Park    MEASURED_BOOT_MK := drivers/measured_boot/event_log/event_log.mk
416*54fd6939SJiyong Park    $(info Including ${MEASURED_BOOT_MK})
417*54fd6939SJiyong Park    include ${MEASURED_BOOT_MK}
418*54fd6939SJiyong Parkendif
419