blob: 94414379572790e5f8b44f84e4648beb7a9badb7 [file] [log] [blame]
Jens Wiklander419e0d22015-12-07 14:37:10 +01001#
Alexei Fedorov6e19bd52020-02-21 10:17:26 +00002# Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved.
Jens Wiklander419e0d22015-12-07 14:37:10 +01003#
dp-arm82cb2c12017-05-03 09:38:09 +01004# SPDX-License-Identifier: BSD-3-Clause
Jens Wiklander419e0d22015-12-07 14:37:10 +01005#
6
Hongbo Zhangd27c8802018-04-19 14:42:23 +08007# Use the GICv2 driver on QEMU by default
8QEMU_USE_GIC_DRIVER := QEMU_GICV2
9
Etienne Carriere765ed9f2018-02-02 13:23:22 +010010ifeq (${ARM_ARCH_MAJOR},7)
11# ARMv7 Qemu support in trusted firmware expects the Cortex-A15 model.
12# Qemu Cortex-A15 model does not implement the virtualization extension.
13# For this reason, we cannot set ARM_CORTEX_A15=yes and must define all
14# the ARMv7 build directives.
15MARCH32_DIRECTIVE := -mcpu=cortex-a15
16$(eval $(call add_define,ARMV7_SUPPORTS_LARGE_PAGE_ADDRESSING))
17$(eval $(call add_define,ARMV7_SUPPORTS_GENERIC_TIMER))
Jerome Forissiere7a54032020-02-07 11:13:46 +010018$(eval $(call add_define,ARMV7_SUPPORTS_VFP))
Etienne Carriere765ed9f2018-02-02 13:23:22 +010019# Qemu expects a BL32 boot stage.
20NEED_BL32 := yes
21endif # ARMv7
22
23ifeq (${SPD},opteed)
24add-lib-optee := yes
25endif
26ifeq ($(AARCH32_SP),optee)
27add-lib-optee := yes
28endif
29
Jens Wiklander419e0d22015-12-07 14:37:10 +010030include lib/libfdt/libfdt.mk
31
Fu Wei64b31122017-05-27 21:21:42 +080032ifeq ($(NEED_BL32),yes)
33$(eval $(call add_define,QEMU_LOAD_BL32))
34endif
35
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +020036PLAT_QEMU_PATH := plat/qemu/qemu
37PLAT_QEMU_COMMON_PATH := plat/qemu/common
38PLAT_INCLUDES := -Iinclude/plat/arm/common/ \
39 -I${PLAT_QEMU_COMMON_PATH}/include \
40 -I${PLAT_QEMU_PATH}/include \
41 -Iinclude/common/tbbr
Jens Wiklander419e0d22015-12-07 14:37:10 +010042
Etienne Carriere765ed9f2018-02-02 13:23:22 +010043ifeq (${ARM_ARCH_MAJOR},8)
44PLAT_INCLUDES += -Iinclude/plat/arm/common/${ARCH}
45endif
46
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +020047PLAT_BL_COMMON_SOURCES := ${PLAT_QEMU_COMMON_PATH}/qemu_common.c \
48 ${PLAT_QEMU_COMMON_PATH}/qemu_console.c \
49 drivers/arm/pl011/${ARCH}/pl011_console.S
Fu Weidd923602017-07-31 18:28:32 +080050
Fu Weidd923602017-07-31 18:28:32 +080051include lib/xlat_tables_v2/xlat_tables.mk
Fu Weidd923602017-07-31 18:28:32 +080052PLAT_BL_COMMON_SOURCES += ${XLAT_TABLES_LIB_SRCS}
Jens Wiklander419e0d22015-12-07 14:37:10 +010053
Michalis Pappas5cc34b12017-10-18 09:43:37 +080054ifneq (${TRUSTED_BOARD_BOOT},0)
55
56 include drivers/auth/mbedtls/mbedtls_crypto.mk
57 include drivers/auth/mbedtls/mbedtls_x509.mk
58
Michalis Pappas5cc34b12017-10-18 09:43:37 +080059 AUTH_SOURCES := drivers/auth/auth_mod.c \
60 drivers/auth/crypto_mod.c \
61 drivers/auth/img_parser_mod.c \
Manish V Badarkhead43c492020-05-16 16:36:39 +010062 drivers/auth/tbbr/tbbr_cot_common.c
Michalis Pappas5cc34b12017-10-18 09:43:37 +080063
Michalis Pappas5cc34b12017-10-18 09:43:37 +080064 BL1_SOURCES += ${AUTH_SOURCES} \
65 bl1/tbbr/tbbr_img_desc.c \
66 plat/common/tbbr/plat_tbbr.c \
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +020067 ${PLAT_QEMU_COMMON_PATH}/qemu_trusted_boot.c \
Manish V Badarkhead43c492020-05-16 16:36:39 +010068 $(PLAT_QEMU_COMMON_PATH)/qemu_rotpk.S \
69 drivers/auth/tbbr/tbbr_cot_bl1.c
Michalis Pappas5cc34b12017-10-18 09:43:37 +080070
71 BL2_SOURCES += ${AUTH_SOURCES} \
72 plat/common/tbbr/plat_tbbr.c \
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +020073 ${PLAT_QEMU_COMMON_PATH}/qemu_trusted_boot.c \
Manish V Badarkhead43c492020-05-16 16:36:39 +010074 $(PLAT_QEMU_COMMON_PATH)/qemu_rotpk.S \
75 drivers/auth/tbbr/tbbr_cot_bl2.c
Michalis Pappas5cc34b12017-10-18 09:43:37 +080076
77 ROT_KEY = $(BUILD_PLAT)/rot_key.pem
78 ROTPK_HASH = $(BUILD_PLAT)/rotpk_sha256.bin
79
80 $(eval $(call add_define_val,ROTPK_HASH,'"$(ROTPK_HASH)"'))
81
82 $(BUILD_PLAT)/bl1/qemu_rotpk.o: $(ROTPK_HASH)
83 $(BUILD_PLAT)/bl2/qemu_rotpk.o: $(ROTPK_HASH)
84
85 certificates: $(ROT_KEY)
86
87 $(ROT_KEY):
88 @echo " OPENSSL $@"
89 $(Q)openssl genrsa 2048 > $@ 2>/dev/null
90
91 $(ROTPK_HASH): $(ROT_KEY)
92 @echo " OPENSSL $@"
93 $(Q)openssl rsa -in $< -pubout -outform DER 2>/dev/null |\
94 openssl dgst -sha256 -binary > $@ 2>/dev/null
95endif
96
Jens Wiklander419e0d22015-12-07 14:37:10 +010097BL1_SOURCES += drivers/io/io_semihosting.c \
98 drivers/io/io_storage.c \
99 drivers/io/io_fip.c \
100 drivers/io/io_memmap.c \
101 lib/semihosting/semihosting.c \
Etienne Carriere765ed9f2018-02-02 13:23:22 +0100102 lib/semihosting/${ARCH}/semihosting_call.S \
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +0200103 ${PLAT_QEMU_COMMON_PATH}/qemu_io_storage.c \
104 ${PLAT_QEMU_COMMON_PATH}/${ARCH}/plat_helpers.S \
105 ${PLAT_QEMU_COMMON_PATH}/qemu_bl1_setup.c
Jens Wiklander419e0d22015-12-07 14:37:10 +0100106
Etienne Carriere765ed9f2018-02-02 13:23:22 +0100107ifeq (${ARM_ARCH_MAJOR},8)
108BL1_SOURCES += lib/cpus/aarch64/aem_generic.S \
109 lib/cpus/aarch64/cortex_a53.S \
110 lib/cpus/aarch64/cortex_a57.S
111else
112BL1_SOURCES += lib/cpus/${ARCH}/cortex_a15.S
113endif
114
Jens Wiklander419e0d22015-12-07 14:37:10 +0100115BL2_SOURCES += drivers/io/io_semihosting.c \
116 drivers/io/io_storage.c \
117 drivers/io/io_fip.c \
118 drivers/io/io_memmap.c \
Jens Wiklander419e0d22015-12-07 14:37:10 +0100119 lib/semihosting/semihosting.c \
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +0200120 lib/semihosting/${ARCH}/semihosting_call.S \
121 ${PLAT_QEMU_COMMON_PATH}/qemu_io_storage.c \
122 ${PLAT_QEMU_COMMON_PATH}/${ARCH}/plat_helpers.S \
123 ${PLAT_QEMU_COMMON_PATH}/qemu_bl2_setup.c \
124 ${PLAT_QEMU_COMMON_PATH}/qemu_bl2_mem_params_desc.c \
125 ${PLAT_QEMU_COMMON_PATH}/qemu_image_load.c \
126 common/fdt_fixup.c \
Fu Wei64b31122017-05-27 21:21:42 +0800127 common/desc_image_load.c
Jens Wiklander106cd732018-09-04 15:08:48 +0200128
Etienne Carriere765ed9f2018-02-02 13:23:22 +0100129ifeq ($(add-lib-optee),yes)
Jens Wiklandere2af1ca2017-08-24 13:16:26 +0200130BL2_SOURCES += lib/optee/optee_utils.c
131endif
132
Sumit Garg51857762019-11-14 17:34:56 +0530133ifneq (${DECRYPTION_SUPPORT},none)
134BL1_SOURCES += drivers/io/io_encrypted.c
135BL2_SOURCES += drivers/io/io_encrypted.c
136endif
137
Hongbo Zhangd27c8802018-04-19 14:42:23 +0800138QEMU_GICV2_SOURCES := drivers/arm/gic/v2/gicv2_helpers.c \
Hongbo Zhang17953ff2018-04-19 13:06:07 +0800139 drivers/arm/gic/v2/gicv2_main.c \
140 drivers/arm/gic/common/gic_common.c \
141 plat/common/plat_gicv2.c \
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +0200142 ${PLAT_QEMU_COMMON_PATH}/qemu_gicv2.c
Jens Wiklander419e0d22015-12-07 14:37:10 +0100143
Alexei Fedorova6ea06f2020-03-23 18:45:17 +0000144# Include GICv3 driver files
145include drivers/arm/gic/v3/gicv3.mk
146
147QEMU_GICV3_SOURCES := ${GICV3_SOURCES} \
Hongbo Zhangd27c8802018-04-19 14:42:23 +0800148 plat/common/plat_gicv3.c \
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +0200149 ${PLAT_QEMU_COMMON_PATH}/qemu_gicv3.c
Hongbo Zhangd27c8802018-04-19 14:42:23 +0800150
151ifeq (${QEMU_USE_GIC_DRIVER}, QEMU_GICV2)
152QEMU_GIC_SOURCES := ${QEMU_GICV2_SOURCES}
153else ifeq (${QEMU_USE_GIC_DRIVER}, QEMU_GICV3)
154QEMU_GIC_SOURCES := ${QEMU_GICV3_SOURCES}
155else
156$(error "Incorrect GIC driver chosen for QEMU platform")
157endif
158
Etienne Carriere765ed9f2018-02-02 13:23:22 +0100159ifeq (${ARM_ARCH_MAJOR},8)
Jens Wiklander419e0d22015-12-07 14:37:10 +0100160BL31_SOURCES += lib/cpus/aarch64/aem_generic.S \
161 lib/cpus/aarch64/cortex_a53.S \
162 lib/cpus/aarch64/cortex_a57.S \
Andrew Walbran61cbd412020-01-15 14:18:04 +0000163 lib/semihosting/semihosting.c \
164 lib/semihosting/${ARCH}/semihosting_call.S \
Jens Wiklanderccdbae72017-08-24 13:16:20 +0200165 plat/common/plat_psci_common.c \
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +0200166 ${PLAT_QEMU_COMMON_PATH}/qemu_pm.c \
167 ${PLAT_QEMU_COMMON_PATH}/topology.c \
168 ${PLAT_QEMU_COMMON_PATH}/aarch64/plat_helpers.S \
169 ${PLAT_QEMU_COMMON_PATH}/qemu_bl31_setup.c \
Hongbo Zhang17953ff2018-04-19 13:06:07 +0800170 ${QEMU_GIC_SOURCES}
Etienne Carriere765ed9f2018-02-02 13:23:22 +0100171endif
Jens Wiklandere2af1ca2017-08-24 13:16:26 +0200172
173# Add the build options to pack Trusted OS Extra1 and Trusted OS Extra2 images
174# in the FIP if the platform requires.
175ifneq ($(BL32_EXTRA1),)
Sumit Garg51857762019-11-14 17:34:56 +0530176ifneq (${DECRYPTION_SUPPORT},none)
177$(eval $(call TOOL_ADD_IMG,bl32_extra1,--tos-fw-extra1,,$(ENCRYPT_BL32)))
178else
Masahiro Yamada33950dd2018-01-26 11:42:01 +0900179$(eval $(call TOOL_ADD_IMG,bl32_extra1,--tos-fw-extra1))
Jens Wiklandere2af1ca2017-08-24 13:16:26 +0200180endif
Sumit Garg51857762019-11-14 17:34:56 +0530181endif
Jens Wiklandere2af1ca2017-08-24 13:16:26 +0200182ifneq ($(BL32_EXTRA2),)
Sumit Garg51857762019-11-14 17:34:56 +0530183ifneq (${DECRYPTION_SUPPORT},none)
184$(eval $(call TOOL_ADD_IMG,bl32_extra2,--tos-fw-extra2,,$(ENCRYPT_BL32)))
185else
Masahiro Yamada33950dd2018-01-26 11:42:01 +0900186$(eval $(call TOOL_ADD_IMG,bl32_extra2,--tos-fw-extra2))
Jens Wiklandere2af1ca2017-08-24 13:16:26 +0200187endif
Sumit Garg51857762019-11-14 17:34:56 +0530188endif
Jens Wiklandere2af1ca2017-08-24 13:16:26 +0200189
Michalis Pappas27e0cca2018-02-28 14:36:03 +0800190SEPARATE_CODE_AND_RODATA := 1
Michalis Pappasf68d22e2018-03-20 14:30:00 +0800191ENABLE_STACK_PROTECTOR := 0
192ifneq ($(ENABLE_STACK_PROTECTOR), 0)
Radoslaw Biernacki301d27d2018-05-17 22:19:11 +0200193 PLAT_BL_COMMON_SOURCES += ${PLAT_QEMU_COMMON_PATH}/qemu_stack_protector.c
Michalis Pappasf68d22e2018-03-20 14:30:00 +0800194endif
Michalis Pappas4c746fc2018-03-24 12:38:31 +0800195
Jens Wiklander419e0d22015-12-07 14:37:10 +0100196BL32_RAM_LOCATION := tdram
197ifeq (${BL32_RAM_LOCATION}, tsram)
198 BL32_RAM_LOCATION_ID = SEC_SRAM_ID
199else ifeq (${BL32_RAM_LOCATION}, tdram)
200 BL32_RAM_LOCATION_ID = SEC_DRAM_ID
201else
202 $(error "Unsupported BL32_RAM_LOCATION value")
203endif
204
205# Process flags
206$(eval $(call add_define,BL32_RAM_LOCATION_ID))
David Cunado3872fc22017-10-31 23:19:21 +0000207
Andrew Walbran74464d52020-01-15 14:11:31 +0000208# Don't have the Linux kernel as a BL33 image by default
209ARM_LINUX_KERNEL_AS_BL33 := 0
210$(eval $(call assert_boolean,ARM_LINUX_KERNEL_AS_BL33))
211$(eval $(call add_define,ARM_LINUX_KERNEL_AS_BL33))
212
213ARM_PRELOADED_DTB_BASE := PLAT_QEMU_DT_BASE
214$(eval $(call add_define,ARM_PRELOADED_DTB_BASE))
215
David Cunado3872fc22017-10-31 23:19:21 +0000216# Do not enable SVE
217ENABLE_SVE_FOR_NS := 0