mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-19 02:54:24 +00:00

The Raspberry Pi 4 is a single board computer with four Cortex-A72 cores. From a TF-A perspective it is quite similar to the Raspberry Pi 3, although it comes with more memory (up to 4GB) and has a GIC. This initial port though differs quite a lot from the existing rpi3 platform port, mainly due to taking a much simpler and more robust approach to loading the non-secure payload: The GPU firmware of the SoC, which is responsible for initial platform setup (including DRAM initialisation), already loads the kernel, device tree and the "armstub" into DRAM. We take advantage of this, by placing just a BL31 component into the armstub8.bin component, which will be executed first, in AArch64 EL3. The non-secure payload can be a kernel or a boot loader (U-Boot or EDK-2), disguised as the "kernel" image and loaded by the GPU firmware. So this is just a BL31-only port, which directly drops into EL2 and executes whatever has been loaded as the "kernel" image, handing over the DTB address in x0. Change-Id: I636f4d1f661821566ad9e341d69ba36f6bbfb546 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
108 lines
2.8 KiB
Makefile
108 lines
2.8 KiB
Makefile
#
|
|
# Copyright (c) 2013-2019, ARM Limited and Contributors. All rights reserved.
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
|
|
include lib/libfdt/libfdt.mk
|
|
include lib/xlat_tables_v2/xlat_tables.mk
|
|
|
|
PLAT_INCLUDES := -Iplat/rpi/common/include \
|
|
-Iplat/rpi/rpi4/include
|
|
|
|
PLAT_BL_COMMON_SOURCES := drivers/ti/uart/aarch64/16550_console.S \
|
|
plat/rpi/common/rpi3_common.c \
|
|
${XLAT_TABLES_LIB_SRCS}
|
|
|
|
BL31_SOURCES += lib/cpus/aarch64/cortex_a72.S \
|
|
plat/rpi/rpi4/aarch64/plat_helpers.S \
|
|
drivers/arm/gic/common/gic_common.c \
|
|
drivers/arm/gic/v2/gicv2_helpers.c \
|
|
drivers/arm/gic/v2/gicv2_main.c \
|
|
plat/common/plat_gicv2.c \
|
|
plat/rpi/rpi4/rpi4_bl31_setup.c \
|
|
plat/rpi/common/rpi3_pm.c \
|
|
plat/common/plat_psci_common.c \
|
|
plat/rpi/common/rpi3_topology.c \
|
|
${LIBFDT_SRCS}
|
|
|
|
# For now we only support BL31, using the kernel loaded by the GPU firmware.
|
|
RESET_TO_BL31 := 1
|
|
|
|
# All CPUs enter armstub8.bin.
|
|
COLD_BOOT_SINGLE_CPU := 0
|
|
|
|
# Tune compiler for Cortex-A72
|
|
ifeq ($(notdir $(CC)),armclang)
|
|
TF_CFLAGS_aarch64 += -mcpu=cortex-a72
|
|
else ifneq ($(findstring clang,$(notdir $(CC))),)
|
|
TF_CFLAGS_aarch64 += -mcpu=cortex-a72
|
|
else
|
|
TF_CFLAGS_aarch64 += -mtune=cortex-a72
|
|
endif
|
|
|
|
|
|
# Enable all errata workarounds for Cortex-A72
|
|
ERRATA_A72_859971 := 1
|
|
|
|
WORKAROUND_CVE_2017_5715 := 1
|
|
|
|
# Add new default target when compiling this platform
|
|
all: bl31
|
|
|
|
# Build config flags
|
|
# ------------------
|
|
|
|
# Disable stack protector by default
|
|
ENABLE_STACK_PROTECTOR := 0
|
|
|
|
# Have different sections for code and rodata
|
|
SEPARATE_CODE_AND_RODATA := 1
|
|
|
|
# Use Coherent memory
|
|
USE_COHERENT_MEM := 1
|
|
|
|
# Platform build flags
|
|
# --------------------
|
|
|
|
# Assume that BL33 isn't the Linux kernel by default
|
|
RPI3_DIRECT_LINUX_BOOT := 0
|
|
|
|
# BL33 images are in AArch64 by default
|
|
RPI3_BL33_IN_AARCH32 := 0
|
|
|
|
# UART to use at runtime. -1 means the runtime UART is disabled.
|
|
# Any other value means the default UART will be used.
|
|
RPI3_RUNTIME_UART := 0
|
|
|
|
# Use normal memory mapping for ROM, FIP, SRAM and DRAM
|
|
RPI3_USE_UEFI_MAP := 0
|
|
|
|
# Process platform flags
|
|
# ----------------------
|
|
|
|
$(eval $(call add_define,RPI3_BL33_IN_AARCH32))
|
|
$(eval $(call add_define,RPI3_DIRECT_LINUX_BOOT))
|
|
ifdef RPI3_PRELOADED_DTB_BASE
|
|
$(eval $(call add_define,RPI3_PRELOADED_DTB_BASE))
|
|
endif
|
|
$(eval $(call add_define,RPI3_RUNTIME_UART))
|
|
$(eval $(call add_define,RPI3_USE_UEFI_MAP))
|
|
|
|
# Verify build config
|
|
# -------------------
|
|
#
|
|
ifneq (${RPI3_DIRECT_LINUX_BOOT}, 0)
|
|
ifndef RPI3_PRELOADED_DTB_BASE
|
|
$(error Error: RPI3_PRELOADED_DTB_BASE needed if RPI3_DIRECT_LINUX_BOOT=1)
|
|
endif
|
|
endif
|
|
|
|
ifeq (${ARCH},aarch32)
|
|
$(error Error: AArch32 not supported on rpi4)
|
|
endif
|
|
|
|
ifneq ($(ENABLE_STACK_PROTECTOR), 0)
|
|
PLAT_BL_COMMON_SOURCES += drivers/rpi3/rng/rpi3_rng.c \
|
|
plat/rpi/common/rpi3_stack_protector.c
|
|
endif
|