rpi4: Accommodate "armstub8.bin" header at the beginning of BL31 image
authorAndre Przywara <andre.przywara@arm.com>
Wed, 10 Jul 2019 17:09:18 +0000 (18:09 +0100)
committerAndre Przywara <andre.przywara@arm.com>
Wed, 25 Sep 2019 10:45:35 +0000 (11:45 +0100)
commitc4597e13a2925cc6bf802d9376238f5de18b292a
tree3815242cf1a7368ca1649aedf6eede9f12db5549
parentf5cb15b0c886afaa41c5d3dad8e859b6a41f76ab
rpi4: Accommodate "armstub8.bin" header at the beginning of BL31 image

The Raspberry Pi GPU firmware checks for a magic value at offset 240
(0xf0) of the armstub8.bin image it loads. If that value matches,
it writes the kernel load address and the DTB address into subsequent
memory locations.
We can use these addresses to avoid hardcoding these values into the BL31
image, to make it more flexible and a drop-in replacement for the
official armstub8.bin.

Reserving just 16 bytes at offset 240 of the final image file is not easily
possible, though, as this location is in the middle of the generic BL31
entry point code.
However we can prepend an extra section before the actual BL31 image, to
contain the magic and addresses. This needs to be 4KB, because the
actual BL31 entry point needs to be page aligned.

Use the platform linker script hook that the generic code provides, to
add an almost empty 4KB code block before the entry point code. The very
first word contains a branch instruction to jump over this page, into
the actual entry code.
This also gives us plenty of room for the SMP pens later.

Change-Id: I38caa5e7195fa39cbef8600933a03d86f09263d6
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
plat/rpi/rpi4/aarch64/armstub8_header.S [new file with mode: 0644]
plat/rpi/rpi4/include/plat.ld.S [new file with mode: 0644]
plat/rpi/rpi4/platform.mk
plat/rpi/rpi4/rpi4_bl31_setup.c