plat/arm: Introduce ARM_LINUX_KERNEL_AS_BL33 build option
authorAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Fri, 11 May 2018 10:15:10 +0000 (11:15 +0100)
committerAntonio Nino Diaz <antonio.ninodiaz@arm.com>
Fri, 11 May 2018 10:15:10 +0000 (11:15 +0100)
commitb726c1690736110be349fd84f87a70d5272ab805
tree66011c6d1132f21a2975d5c940872040bfced3b0
parent885ca54a75e14a63c375b5d12852dc7ef2c0b568
plat/arm: Introduce ARM_LINUX_KERNEL_AS_BL33 build option

Normally, BL33 needs to contain a boot loader like U-Boot or UEFI that
eventually gives control to the OS. However, in some cases, this boot
sequence may be too slow. For example, when doing tests in a
cycle-accurate emulator, the user may only be interested in the
interaction between the Trusted Firmware and the OS, not in the boot
process itself.

The new option ARM_LINUX_KERNEL_AS_BL33 allows BL33 to contain the Linux
kernel image by changing the value of registers x0-x3 to the values
expected by the kernel. This option requires the device tree blob (DTB)
to be present in memory. Its address must be specified in the newly
introduced ARM_PRELOADED_DTB_BASE build option. For now, it only supports
AArch64 kernels.

This option is only available when RESET_TO_BL31=1. For this reason
the BL33 binary must be preloaded in memory and PRELOADED_BL33_BASE must
be used.

For example, if the kernel is loaded at 0x80080000 and the DTB is loaded
at address 0x82000000, the firmware could be built like this:

    CROSS_COMPILE=aarch64-linux-gnu-  \
    make PLAT=fvp DEBUG=1             \
    RESET_TO_BL31=1                   \
    ARM_LINUX_KERNEL_AS_BL33=1        \
    PRELOADED_BL33_BASE=0x80080000    \
    ARM_PRELOADED_DTB_BASE=0x82000000 \
    all fip

Change-Id: If9dc847c65ae2d0c27b51f0fd44fc06b28497db9
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
docs/user-guide.rst
plat/arm/common/arm_bl31_setup.c
plat/arm/common/arm_common.mk