xref: /rk3399_ARM-atf/plat/rpi/rpi3/platform.mk (revision ab13addd845e596fb5fba51da8d0f672cdf35eff)
1*ab13adddSAndre Przywara#
2*ab13adddSAndre Przywara# Copyright (c) 2013-2018, ARM Limited and Contributors. All rights reserved.
3*ab13adddSAndre Przywara#
4*ab13adddSAndre Przywara# SPDX-License-Identifier: BSD-3-Clause
5*ab13adddSAndre Przywara#
6*ab13adddSAndre Przywara
7*ab13adddSAndre Przywarainclude lib/libfdt/libfdt.mk
8*ab13adddSAndre Przywarainclude lib/xlat_tables_v2/xlat_tables.mk
9*ab13adddSAndre Przywara
10*ab13adddSAndre PrzywaraPLAT_INCLUDES		:=	-Iplat/rpi/rpi3/include
11*ab13adddSAndre Przywara
12*ab13adddSAndre PrzywaraPLAT_BL_COMMON_SOURCES	:=	drivers/ti/uart/aarch64/16550_console.S	\
13*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_common.c		\
14*ab13adddSAndre Przywara				${XLAT_TABLES_LIB_SRCS}
15*ab13adddSAndre Przywara
16*ab13adddSAndre PrzywaraBL1_SOURCES		+=	drivers/io/io_fip.c			\
17*ab13adddSAndre Przywara				drivers/io/io_memmap.c			\
18*ab13adddSAndre Przywara				drivers/io/io_storage.c			\
19*ab13adddSAndre Przywara				lib/cpus/aarch64/cortex_a53.S		\
20*ab13adddSAndre Przywara				plat/common/aarch64/platform_mp_stack.S	\
21*ab13adddSAndre Przywara				plat/rpi/rpi3/aarch64/plat_helpers.S	\
22*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_bl1_setup.c		\
23*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_io_storage.c		\
24*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_mbox.c
25*ab13adddSAndre Przywara
26*ab13adddSAndre PrzywaraBL2_SOURCES		+=	common/desc_image_load.c		\
27*ab13adddSAndre Przywara				drivers/io/io_fip.c			\
28*ab13adddSAndre Przywara				drivers/io/io_memmap.c			\
29*ab13adddSAndre Przywara				drivers/io/io_storage.c			\
30*ab13adddSAndre Przywara				drivers/gpio/gpio.c			\
31*ab13adddSAndre Przywara				drivers/delay_timer/delay_timer.c	\
32*ab13adddSAndre Przywara				drivers/delay_timer/generic_delay_timer.c \
33*ab13adddSAndre Przywara				drivers/rpi3/gpio/rpi3_gpio.c		\
34*ab13adddSAndre Przywara				drivers/io/io_block.c			\
35*ab13adddSAndre Przywara				drivers/mmc/mmc.c			\
36*ab13adddSAndre Przywara				drivers/rpi3/sdhost/rpi3_sdhost.c	\
37*ab13adddSAndre Przywara				plat/common/aarch64/platform_mp_stack.S	\
38*ab13adddSAndre Przywara				plat/rpi/rpi3/aarch64/plat_helpers.S	\
39*ab13adddSAndre Przywara				plat/rpi/rpi3/aarch64/rpi3_bl2_mem_params_desc.c \
40*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_bl2_setup.c		\
41*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_image_load.c		\
42*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_io_storage.c
43*ab13adddSAndre Przywara
44*ab13adddSAndre PrzywaraBL31_SOURCES		+=	lib/cpus/aarch64/cortex_a53.S		\
45*ab13adddSAndre Przywara				plat/common/plat_psci_common.c		\
46*ab13adddSAndre Przywara				plat/rpi/rpi3/aarch64/plat_helpers.S	\
47*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_bl31_setup.c		\
48*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_pm.c			\
49*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_topology.c		\
50*ab13adddSAndre Przywara				${LIBFDT_SRCS}
51*ab13adddSAndre Przywara
52*ab13adddSAndre Przywara# Tune compiler for Cortex-A53
53*ab13adddSAndre Przywaraifeq ($(notdir $(CC)),armclang)
54*ab13adddSAndre Przywara    TF_CFLAGS_aarch64	+=	-mcpu=cortex-a53
55*ab13adddSAndre Przywaraelse ifneq ($(findstring clang,$(notdir $(CC))),)
56*ab13adddSAndre Przywara    TF_CFLAGS_aarch64	+=	-mcpu=cortex-a53
57*ab13adddSAndre Przywaraelse
58*ab13adddSAndre Przywara    TF_CFLAGS_aarch64	+=	-mtune=cortex-a53
59*ab13adddSAndre Przywaraendif
60*ab13adddSAndre Przywara
61*ab13adddSAndre Przywara# Platform Makefile target
62*ab13adddSAndre Przywara# ------------------------
63*ab13adddSAndre Przywara
64*ab13adddSAndre PrzywaraRPI3_BL1_PAD_BIN	:=	${BUILD_PLAT}/bl1_pad.bin
65*ab13adddSAndre PrzywaraRPI3_ARMSTUB8_BIN	:=	${BUILD_PLAT}/armstub8.bin
66*ab13adddSAndre Przywara
67*ab13adddSAndre Przywara# Add new default target when compiling this platform
68*ab13adddSAndre Przywaraall: armstub
69*ab13adddSAndre Przywara
70*ab13adddSAndre Przywara# This target concatenates BL1 and the FIP so that the base addresses match the
71*ab13adddSAndre Przywara# ones defined in the memory map
72*ab13adddSAndre Przywaraarmstub: bl1 fip
73*ab13adddSAndre Przywara	@echo "  CAT     $@"
74*ab13adddSAndre Przywara	${Q}cp ${BUILD_PLAT}/bl1.bin ${RPI3_BL1_PAD_BIN}
75*ab13adddSAndre Przywara	${Q}truncate --size=131072 ${RPI3_BL1_PAD_BIN}
76*ab13adddSAndre Przywara	${Q}cat ${RPI3_BL1_PAD_BIN} ${BUILD_PLAT}/fip.bin > ${RPI3_ARMSTUB8_BIN}
77*ab13adddSAndre Przywara	@${ECHO_BLANK_LINE}
78*ab13adddSAndre Przywara	@echo "Built $@ successfully"
79*ab13adddSAndre Przywara	@${ECHO_BLANK_LINE}
80*ab13adddSAndre Przywara
81*ab13adddSAndre Przywara# Build config flags
82*ab13adddSAndre Przywara# ------------------
83*ab13adddSAndre Przywara
84*ab13adddSAndre Przywara# Enable all errata workarounds for Cortex-A53
85*ab13adddSAndre PrzywaraERRATA_A53_826319		:= 1
86*ab13adddSAndre PrzywaraERRATA_A53_835769		:= 1
87*ab13adddSAndre PrzywaraERRATA_A53_836870		:= 1
88*ab13adddSAndre PrzywaraERRATA_A53_843419		:= 1
89*ab13adddSAndre PrzywaraERRATA_A53_855873		:= 1
90*ab13adddSAndre Przywara
91*ab13adddSAndre PrzywaraWORKAROUND_CVE_2017_5715	:= 0
92*ab13adddSAndre Przywara
93*ab13adddSAndre Przywara# Disable stack protector by default
94*ab13adddSAndre PrzywaraENABLE_STACK_PROTECTOR	 	:= 0
95*ab13adddSAndre Przywara
96*ab13adddSAndre Przywara# Reset to BL31 isn't supported
97*ab13adddSAndre PrzywaraRESET_TO_BL31			:= 0
98*ab13adddSAndre Przywara
99*ab13adddSAndre Przywara# Have different sections for code and rodata
100*ab13adddSAndre PrzywaraSEPARATE_CODE_AND_RODATA	:= 1
101*ab13adddSAndre Przywara
102*ab13adddSAndre Przywara# Use Coherent memory
103*ab13adddSAndre PrzywaraUSE_COHERENT_MEM		:= 1
104*ab13adddSAndre Przywara
105*ab13adddSAndre Przywara# Platform build flags
106*ab13adddSAndre Przywara# --------------------
107*ab13adddSAndre Przywara
108*ab13adddSAndre Przywara# BL33 images are in AArch64 by default
109*ab13adddSAndre PrzywaraRPI3_BL33_IN_AARCH32		:= 0
110*ab13adddSAndre Przywara
111*ab13adddSAndre Przywara# Assume that BL33 isn't the Linux kernel by default
112*ab13adddSAndre PrzywaraRPI3_DIRECT_LINUX_BOOT		:= 0
113*ab13adddSAndre Przywara
114*ab13adddSAndre Przywara# UART to use at runtime. -1 means the runtime UART is disabled.
115*ab13adddSAndre Przywara# Any other value means the default UART will be used.
116*ab13adddSAndre PrzywaraRPI3_RUNTIME_UART		:= -1
117*ab13adddSAndre Przywara
118*ab13adddSAndre Przywara# Use normal memory mapping for ROM, FIP, SRAM and DRAM
119*ab13adddSAndre PrzywaraRPI3_USE_UEFI_MAP		:= 0
120*ab13adddSAndre Przywara
121*ab13adddSAndre Przywara# BL32 location
122*ab13adddSAndre PrzywaraRPI3_BL32_RAM_LOCATION	:= tdram
123*ab13adddSAndre Przywaraifeq (${RPI3_BL32_RAM_LOCATION}, tsram)
124*ab13adddSAndre Przywara  RPI3_BL32_RAM_LOCATION_ID = SEC_SRAM_ID
125*ab13adddSAndre Przywaraelse ifeq (${RPI3_BL32_RAM_LOCATION}, tdram)
126*ab13adddSAndre Przywara  RPI3_BL32_RAM_LOCATION_ID = SEC_DRAM_ID
127*ab13adddSAndre Przywaraelse
128*ab13adddSAndre Przywara  $(error "Unsupported RPI3_BL32_RAM_LOCATION value")
129*ab13adddSAndre Przywaraendif
130*ab13adddSAndre Przywara
131*ab13adddSAndre Przywara# Process platform flags
132*ab13adddSAndre Przywara# ----------------------
133*ab13adddSAndre Przywara
134*ab13adddSAndre Przywara$(eval $(call add_define,RPI3_BL32_RAM_LOCATION_ID))
135*ab13adddSAndre Przywara$(eval $(call add_define,RPI3_BL33_IN_AARCH32))
136*ab13adddSAndre Przywara$(eval $(call add_define,RPI3_DIRECT_LINUX_BOOT))
137*ab13adddSAndre Przywaraifdef RPI3_PRELOADED_DTB_BASE
138*ab13adddSAndre Przywara$(eval $(call add_define,RPI3_PRELOADED_DTB_BASE))
139*ab13adddSAndre Przywaraendif
140*ab13adddSAndre Przywara$(eval $(call add_define,RPI3_RUNTIME_UART))
141*ab13adddSAndre Przywara$(eval $(call add_define,RPI3_USE_UEFI_MAP))
142*ab13adddSAndre Przywara
143*ab13adddSAndre Przywara# Verify build config
144*ab13adddSAndre Przywara# -------------------
145*ab13adddSAndre Przywara#
146*ab13adddSAndre Przywaraifneq (${RPI3_DIRECT_LINUX_BOOT}, 0)
147*ab13adddSAndre Przywara  ifndef RPI3_PRELOADED_DTB_BASE
148*ab13adddSAndre Przywara    $(error Error: RPI3_PRELOADED_DTB_BASE needed if RPI3_DIRECT_LINUX_BOOT=1)
149*ab13adddSAndre Przywara  endif
150*ab13adddSAndre Przywaraendif
151*ab13adddSAndre Przywara
152*ab13adddSAndre Przywaraifneq (${RESET_TO_BL31}, 0)
153*ab13adddSAndre Przywara  $(error Error: rpi3 needs RESET_TO_BL31=0)
154*ab13adddSAndre Przywaraendif
155*ab13adddSAndre Przywara
156*ab13adddSAndre Przywaraifeq (${ARCH},aarch32)
157*ab13adddSAndre Przywara  $(error Error: AArch32 not supported on rpi3)
158*ab13adddSAndre Przywaraendif
159*ab13adddSAndre Przywara
160*ab13adddSAndre Przywaraifneq ($(ENABLE_STACK_PROTECTOR), 0)
161*ab13adddSAndre PrzywaraPLAT_BL_COMMON_SOURCES	+=	plat/rpi/rpi3/rpi3_rng.c		\
162*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_stack_protector.c
163*ab13adddSAndre Przywaraendif
164*ab13adddSAndre Przywara
165*ab13adddSAndre Przywaraifeq (${SPD},opteed)
166*ab13adddSAndre PrzywaraBL2_SOURCES	+=							\
167*ab13adddSAndre Przywara		lib/optee/optee_utils.c
168*ab13adddSAndre Przywaraendif
169*ab13adddSAndre Przywara
170*ab13adddSAndre Przywara# Add the build options to pack Trusted OS Extra1 and Trusted OS Extra2 images
171*ab13adddSAndre Przywara# in the FIP if the platform requires.
172*ab13adddSAndre Przywaraifneq ($(BL32_EXTRA1),)
173*ab13adddSAndre Przywara$(eval $(call TOOL_ADD_IMG,BL32_EXTRA1,--tos-fw-extra1))
174*ab13adddSAndre Przywaraendif
175*ab13adddSAndre Przywaraifneq ($(BL32_EXTRA2),)
176*ab13adddSAndre Przywara$(eval $(call TOOL_ADD_IMG,BL32_EXTRA2,--tos-fw-extra2))
177*ab13adddSAndre Przywaraendif
178*ab13adddSAndre Przywara
179*ab13adddSAndre Przywaraifneq (${TRUSTED_BOARD_BOOT},0)
180*ab13adddSAndre Przywara
181*ab13adddSAndre Przywara    include drivers/auth/mbedtls/mbedtls_crypto.mk
182*ab13adddSAndre Przywara    include drivers/auth/mbedtls/mbedtls_x509.mk
183*ab13adddSAndre Przywara
184*ab13adddSAndre Przywara    AUTH_SOURCES	:=	drivers/auth/auth_mod.c			\
185*ab13adddSAndre Przywara				drivers/auth/crypto_mod.c		\
186*ab13adddSAndre Przywara				drivers/auth/img_parser_mod.c		\
187*ab13adddSAndre Przywara				drivers/auth/tbbr/tbbr_cot.c
188*ab13adddSAndre Przywara
189*ab13adddSAndre Przywara    BL1_SOURCES		+=	${AUTH_SOURCES}				\
190*ab13adddSAndre Przywara				bl1/tbbr/tbbr_img_desc.c		\
191*ab13adddSAndre Przywara				plat/common/tbbr/plat_tbbr.c		\
192*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_trusted_boot.c     	\
193*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_rotpk.S
194*ab13adddSAndre Przywara
195*ab13adddSAndre Przywara    BL2_SOURCES		+=	${AUTH_SOURCES}				\
196*ab13adddSAndre Przywara				plat/common/tbbr/plat_tbbr.c		\
197*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_trusted_boot.c     	\
198*ab13adddSAndre Przywara				plat/rpi/rpi3/rpi3_rotpk.S
199*ab13adddSAndre Przywara
200*ab13adddSAndre Przywara    ROT_KEY             = $(BUILD_PLAT)/rot_key.pem
201*ab13adddSAndre Przywara    ROTPK_HASH          = $(BUILD_PLAT)/rotpk_sha256.bin
202*ab13adddSAndre Przywara
203*ab13adddSAndre Przywara    $(eval $(call add_define_val,ROTPK_HASH,'"$(ROTPK_HASH)"'))
204*ab13adddSAndre Przywara
205*ab13adddSAndre Przywara    $(BUILD_PLAT)/bl1/rpi3_rotpk.o: $(ROTPK_HASH)
206*ab13adddSAndre Przywara    $(BUILD_PLAT)/bl2/rpi3_rotpk.o: $(ROTPK_HASH)
207*ab13adddSAndre Przywara
208*ab13adddSAndre Przywara    certificates: $(ROT_KEY)
209*ab13adddSAndre Przywara
210*ab13adddSAndre Przywara    $(ROT_KEY):
211*ab13adddSAndre Przywara	@echo "  OPENSSL $@"
212*ab13adddSAndre Przywara	$(Q)openssl genrsa 2048 > $@ 2>/dev/null
213*ab13adddSAndre Przywara
214*ab13adddSAndre Przywara    $(ROTPK_HASH): $(ROT_KEY)
215*ab13adddSAndre Przywara	@echo "  OPENSSL $@"
216*ab13adddSAndre Przywara	$(Q)openssl rsa -in $< -pubout -outform DER 2>/dev/null |\
217*ab13adddSAndre Przywara	openssl dgst -sha256 -binary > $@ 2>/dev/null
218*ab13adddSAndre Przywaraendif
219