platform.mk 5.47 KB
Newer Older
1
#
2
# Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
3
#
dp-arm's avatar
dp-arm committed
4
# SPDX-License-Identifier: BSD-3-Clause
5
6
#

7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ifeq (${ARM_ARCH_MAJOR},7)
# ARMv7 Qemu support in trusted firmware expects the Cortex-A15 model.
# Qemu Cortex-A15 model does not implement the virtualization extension.
# For this reason, we cannot set ARM_CORTEX_A15=yes and must define all
# the ARMv7 build directives.
MARCH32_DIRECTIVE 	:= 	-mcpu=cortex-a15
$(eval $(call add_define,ARMV7_SUPPORTS_LARGE_PAGE_ADDRESSING))
$(eval $(call add_define,ARMV7_SUPPORTS_GENERIC_TIMER))
# Qemu expects a BL32 boot stage.
NEED_BL32		:=	yes
endif # ARMv7

ifeq (${SPD},opteed)
add-lib-optee 		:= 	yes
endif
ifeq ($(AARCH32_SP),optee)
add-lib-optee 		:= 	yes
endif

26
27
include lib/libfdt/libfdt.mk

Fu Wei's avatar
Fu Wei committed
28
29
# Enable new version of image loading on QEMU platforms
LOAD_IMAGE_V2		:=	1
30
31
32
ifneq ($(LOAD_IMAGE_V2),1)
$(error Error: qemu needs LOAD_IMAGE_V2=1)
endif
Fu Wei's avatar
Fu Wei committed
33
34
35
36
37

ifeq ($(NEED_BL32),yes)
$(eval $(call add_define,QEMU_LOAD_BL32))
endif

38
PLAT_PATH               :=      plat/qemu/
39
40
41
42
PLAT_INCLUDES		:=	-Iinclude/plat/arm/common/		\
				-Iplat/qemu/include			\
				-Iinclude/common/tbbr

43
44
45
46
ifeq (${ARM_ARCH_MAJOR},8)
PLAT_INCLUDES		+=	-Iinclude/plat/arm/common/${ARCH}
endif

47
48
49
50
51
# Use translation tables library v2 by default
ARM_XLAT_TABLES_LIB_V1		:=	0
$(eval $(call assert_boolean,ARM_XLAT_TABLES_LIB_V1))
$(eval $(call add_define,ARM_XLAT_TABLES_LIB_V1))

52

53
54
55
PLAT_BL_COMMON_SOURCES	:=	plat/qemu/qemu_common.c			  \
				plat/qemu/qemu_console.c		  \
				drivers/arm/pl011/${ARCH}/pl011_console.S \
56
57
58

ifeq (${ARM_XLAT_TABLES_LIB_V1}, 1)
PLAT_BL_COMMON_SOURCES	+=	lib/xlat_tables/xlat_tables_common.c		\
59
				lib/xlat_tables/${ARCH}/xlat_tables.c
60
61
62
63
64
else
include lib/xlat_tables_v2/xlat_tables.mk

PLAT_BL_COMMON_SOURCES	+=	${XLAT_TABLES_LIB_SRCS}
endif
65

66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
ifneq (${TRUSTED_BOARD_BOOT},0)

    include drivers/auth/mbedtls/mbedtls_crypto.mk
    include drivers/auth/mbedtls/mbedtls_x509.mk

    USE_TBBR_DEFS	:=	1

    AUTH_SOURCES	:=	drivers/auth/auth_mod.c			\
				drivers/auth/crypto_mod.c		\
				drivers/auth/img_parser_mod.c		\
				drivers/auth/tbbr/tbbr_cot.c

    PLAT_INCLUDES	+=	-Iinclude/bl1/tbbr

    BL1_SOURCES		+=	${AUTH_SOURCES}				\
				bl1/tbbr/tbbr_img_desc.c		\
				plat/common/tbbr/plat_tbbr.c		\
				plat/qemu/qemu_trusted_boot.c	     	\
				$(PLAT_PATH)/qemu_rotpk.S

    BL2_SOURCES		+=	${AUTH_SOURCES}				\
				plat/common/tbbr/plat_tbbr.c		\
				plat/qemu/qemu_trusted_boot.c	     	\
				$(PLAT_PATH)/qemu_rotpk.S

    ROT_KEY             = $(BUILD_PLAT)/rot_key.pem
    ROTPK_HASH          = $(BUILD_PLAT)/rotpk_sha256.bin

    $(eval $(call add_define_val,ROTPK_HASH,'"$(ROTPK_HASH)"'))

    $(BUILD_PLAT)/bl1/qemu_rotpk.o: $(ROTPK_HASH)
    $(BUILD_PLAT)/bl2/qemu_rotpk.o: $(ROTPK_HASH)

    certificates: $(ROT_KEY)

    $(ROT_KEY):
	@echo "  OPENSSL $@"
	$(Q)openssl genrsa 2048 > $@ 2>/dev/null

    $(ROTPK_HASH): $(ROT_KEY)
	@echo "  OPENSSL $@"
	$(Q)openssl rsa -in $< -pubout -outform DER 2>/dev/null |\
	openssl dgst -sha256 -binary > $@ 2>/dev/null
endif

111
112
113
114
115
BL1_SOURCES		+=	drivers/io/io_semihosting.c		\
				drivers/io/io_storage.c			\
				drivers/io/io_fip.c			\
				drivers/io/io_memmap.c			\
				lib/semihosting/semihosting.c		\
116
				lib/semihosting/${ARCH}/semihosting_call.S \
117
				plat/qemu/qemu_io_storage.c		\
118
				plat/qemu/${ARCH}/plat_helpers.S	\
119
120
				plat/qemu/qemu_bl1_setup.c

121
122
123
124
125
126
127
128
ifeq (${ARM_ARCH_MAJOR},8)
BL1_SOURCES		+=	lib/cpus/aarch64/aem_generic.S		\
				lib/cpus/aarch64/cortex_a53.S		\
				lib/cpus/aarch64/cortex_a57.S
else
BL1_SOURCES		+=	lib/cpus/${ARCH}/cortex_a15.S
endif

129
130
131
132
133
BL2_SOURCES		+=	drivers/io/io_semihosting.c		\
				drivers/io/io_storage.c			\
				drivers/io/io_fip.c			\
				drivers/io/io_memmap.c			\
				lib/semihosting/semihosting.c		\
134
				lib/semihosting/${ARCH}/semihosting_call.S\
135
				plat/qemu/qemu_io_storage.c		\
136
				plat/qemu/${ARCH}/plat_helpers.S	\
137
				plat/qemu/qemu_bl2_setup.c		\
138
139
				plat/qemu/dt.c				\
				plat/qemu/qemu_bl2_mem_params_desc.c	\
Fu Wei's avatar
Fu Wei committed
140
141
				plat/qemu/qemu_image_load.c		\
				common/desc_image_load.c
142

143
ifeq ($(add-lib-optee),yes)
144
145
146
BL2_SOURCES		+=	lib/optee/optee_utils.c
endif

147

148
ifeq (${ARM_ARCH_MAJOR},8)
149
150
151
152
153
154
BL31_SOURCES		+=	lib/cpus/aarch64/aem_generic.S		\
				lib/cpus/aarch64/cortex_a53.S		\
				lib/cpus/aarch64/cortex_a57.S		\
				drivers/arm/gic/v2/gicv2_helpers.c	\
				drivers/arm/gic/v2/gicv2_main.c		\
				drivers/arm/gic/common/gic_common.c	\
Santeri Salko's avatar
Santeri Salko committed
155
				plat/common/plat_gicv2.c		\
156
				plat/common/plat_psci_common.c		\
157
158
159
				plat/qemu/qemu_pm.c			\
				plat/qemu/topology.c			\
				plat/qemu/aarch64/plat_helpers.S	\
Santeri Salko's avatar
Santeri Salko committed
160
				plat/qemu/qemu_bl31_setup.c
161
endif
162
163
164
165

# Add the build options to pack Trusted OS Extra1 and Trusted OS Extra2 images
# in the FIP if the platform requires.
ifneq ($(BL32_EXTRA1),)
166
$(eval $(call TOOL_ADD_IMG,bl32_extra1,--tos-fw-extra1))
167
168
endif
ifneq ($(BL32_EXTRA2),)
169
$(eval $(call TOOL_ADD_IMG,bl32_extra2,--tos-fw-extra2))
170
171
endif

172
SEPARATE_CODE_AND_RODATA := 1
173
174
175
176
ENABLE_STACK_PROTECTOR	 := 0
ifneq ($(ENABLE_STACK_PROTECTOR), 0)
	PLAT_BL_COMMON_SOURCES += plat/qemu/qemu_stack_protector.c
endif
177
178
179
180
181
182

# Use MULTI_CONSOLE_API by default only on AArch64
# as it is not yet supported on AArch32
ifeq ($(ARCH),aarch64)
MULTI_CONSOLE_API	:= 1
endif
183

184
185
186
187
188
189
190
191
192
193
194
195
196
197
# Disable the PSCI platform compatibility layer
ENABLE_PLAT_COMPAT	:= 	0

BL32_RAM_LOCATION	:=	tdram
ifeq (${BL32_RAM_LOCATION}, tsram)
  BL32_RAM_LOCATION_ID = SEC_SRAM_ID
else ifeq (${BL32_RAM_LOCATION}, tdram)
  BL32_RAM_LOCATION_ID = SEC_DRAM_ID
else
  $(error "Unsupported BL32_RAM_LOCATION value")
endif

# Process flags
$(eval $(call add_define,BL32_RAM_LOCATION_ID))
198
199
200

# Do not enable SVE
ENABLE_SVE_FOR_NS	:=	0