| #
de9fdb9b |
| 14-May-2021 |
Andre Przywara <andre.przywara@arm.com> |
feat(arm_fpga): add kernel trampoline
The arm64 Linux kernel needed to be loaded at a certain offset within any 2MB aligned region; this value was configured at compile time and stored in the Linux
feat(arm_fpga): add kernel trampoline
The arm64 Linux kernel needed to be loaded at a certain offset within any 2MB aligned region; this value was configured at compile time and stored in the Linux kernel image header. The default value was always 512KiB, so this is the value we use in the TF-A build system for the kernel load address. However the whole scheme around the TEXT_OFFSET changed in Linux v5.8: Linux kernels became fully relocatable, so this value is largely ignored now, and its default value changed to 0. The only remainder is a warning message at boot time in case there is a mismatch: [Firmware Bug]: Kernel image misaligned at boot, please fix your bootloader!
To avoid this warning, and to make TF-A Linux kernel boot protocol compliant, we should load newer kernels to offset 0 of a 2 MB region. This can be done by the user at FPGA boot time, but BL31 needs to know about this address. As we can't change the build default to 0 without breaking older kernels, we should try to make a build dealing with both versions:
This patch introduces a small trampoline code, which gets loaded at 512KB of DRAM, and branches up to 2MB. If users load their newer kernels at 2MB, this trampoline will cover them. In case an older kernel is loaded at 512KB, it will overwrite this trampoline code, so it would still work.
Change-Id: If49ca86f5dca380036caf2555349748722901277 Signed-off-by: Andre Przywara <andre.przywara@arm.com>
show more ...
|