arm_fpga: Add ROM trampoline

The application cores of the FPGAs used in Arm Ltd. start execution at
address 0x0. This is the location of some (emulated) ROM area (which can
be written to by the uploading tool).
Since the arm_fpga port is configured to run from DRAM, we load BL31 to
the beginning of DRAM (mapped at 2GB). This requires some small
trampoline code in the "ROM" to jump to the BL31 entry point.

To avoid some extra magic binary, add a tiny assembly file with that
trivial jump instruction to the tree, so this binary can be created
alongside BL31.

Change-Id: I9e4439fc0f093fa24dd49a8377c9edb030fbb477
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
This commit is contained in:
Andre Przywara 2020-08-03 13:06:38 +01:00
parent b48883c79a
commit f45c6d8623
2 changed files with 26 additions and 0 deletions

View File

@ -100,4 +100,6 @@ BL31_SOURCES += common/fdt_wrappers.c \
${FPGA_CPU_LIBS} \
${FPGA_GIC_SOURCES}
$(eval $(call MAKE_S,$(BUILD_PLAT),plat/arm/board/arm_fpga/rom_trampoline.S,31))
all: bl31

View File

@ -0,0 +1,24 @@
/*
* Copyright (c) 2020, ARM Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
* The Arm Ltd. FPGA images start execution at address 0x0, which is
* mapped at an (emulated) ROM image. The payload uploader can write to
* this memory, but write access by the CPU cores is prohibited.
*
* Provide a simple trampoline to start BL31 execution at the actual
* load address. We put the DTB address in x0, so any code in DRAM could
* make use of that information (not yet used in BL31 right now).
*/
#include <asm_macros.S>
#include <common/bl_common.ld.h>
.text
.global _start
_start:
mov_imm x1, BL31_BASE /* beginning of DRAM */
mov_imm x0, FPGA_PRELOADED_DTB_BASE
br x1