mb/emulation/qemu-aarch64: Add ARM trusted firmware support
Linux expects a working PSCI and hangs if not found. Add BL31 into CBFS as '-M virt,secure=on -bios ' commands line arguments cause qemu's internal PSCI emulation to shutdown. BL31 is placed in qemu's SECURERAM memory region and won't conflict with resources in DRAM. Tested on qemu-system-aarch64: Fixes a hang and allows to boot into Linux 5.4.14 userspace. Change-Id: I809742522240185431621cc4fd8b9c7deaf2bb54 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/38535 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
parent
977b8e83cb
commit
792fd51b14
|
@ -27,6 +27,7 @@ config BOARD_SPECIFIC_OPTIONS
|
||||||
select MAINBOARD_FORCE_NATIVE_VGA_INIT
|
select MAINBOARD_FORCE_NATIVE_VGA_INIT
|
||||||
select MAINBOARD_HAS_NATIVE_VGA_INIT
|
select MAINBOARD_HAS_NATIVE_VGA_INIT
|
||||||
select MISSING_BOARD_RESET
|
select MISSING_BOARD_RESET
|
||||||
|
select ARM64_USE_ARM_TRUSTED_FIRMWARE
|
||||||
|
|
||||||
config MAINBOARD_DIR
|
config MAINBOARD_DIR
|
||||||
string
|
string
|
||||||
|
|
|
@ -24,3 +24,5 @@ ramstage-y += memlayout.ld
|
||||||
bootblock-y += bootblock_custom.S
|
bootblock-y += bootblock_custom.S
|
||||||
|
|
||||||
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
|
CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
|
||||||
|
|
||||||
|
BL31_MAKEARGS += PLAT=qemu ARM_ARCH_MAJOR=8 M0_CROSS_COMPILE="$(CROSS_COMPILE_arm)"
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
#include <bootblock_common.h>
|
#include <bootblock_common.h>
|
||||||
#include <symbols.h>
|
#include <symbols.h>
|
||||||
|
|
||||||
|
extern u8 _secram[], _esecram[];
|
||||||
|
|
||||||
void bootblock_mainboard_init(void)
|
void bootblock_mainboard_init(void)
|
||||||
{
|
{
|
||||||
mmu_init();
|
mmu_init();
|
||||||
|
@ -29,5 +31,7 @@ void bootblock_mainboard_init(void)
|
||||||
mmu_config_range(_romstage, REGION_SIZE(romstage), MA_MEM | MA_S | MA_RW);
|
mmu_config_range(_romstage, REGION_SIZE(romstage), MA_MEM | MA_S | MA_RW);
|
||||||
mmu_config_range(_ramstage, REGION_SIZE(ramstage), MA_MEM | MA_S | MA_RW);
|
mmu_config_range(_ramstage, REGION_SIZE(ramstage), MA_MEM | MA_S | MA_RW);
|
||||||
|
|
||||||
|
mmu_config_range(_secram, REGION_SIZE(secram), MA_MEM | MA_S | MA_RW);
|
||||||
|
|
||||||
mmu_enable();
|
mmu_enable();
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
* 0x0905_0000..0x0907_0000: SMMU (smmu-v3)
|
* 0x0905_0000..0x0907_0000: SMMU (smmu-v3)
|
||||||
* 0x0a00_0000..0x0a00_0200: MMIO (virtio)
|
* 0x0a00_0000..0x0a00_0200: MMIO (virtio)
|
||||||
* 0x0c00_0000..0x0e00_0000: Platform bus
|
* 0x0c00_0000..0x0e00_0000: Platform bus
|
||||||
|
* 0x0e00_0000..0x0eff_ffff: Secure SRAM
|
||||||
* 0x4000_0000..: RAM
|
* 0x4000_0000..: RAM
|
||||||
*/
|
*/
|
||||||
#define VIRT_UART_BASE 0x09000000
|
#define VIRT_UART_BASE 0x09000000
|
||||||
|
@ -32,3 +33,4 @@
|
||||||
#define VIRT_SMMU_BASE 0x09050000
|
#define VIRT_SMMU_BASE 0x09050000
|
||||||
#define VIRT_MMIO_BASE 0x0a000000
|
#define VIRT_MMIO_BASE 0x0a000000
|
||||||
#define VIRT_PLATFORM_BUS_BASE 0x0c000000
|
#define VIRT_PLATFORM_BUS_BASE 0x0c000000
|
||||||
|
#define VIRT_SECRAM_BASE 0xe000000
|
||||||
|
|
|
@ -10,6 +10,14 @@
|
||||||
#include <ramdetect.h>
|
#include <ramdetect.h>
|
||||||
#include <symbols.h>
|
#include <symbols.h>
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
|
#include <bootmem.h>
|
||||||
|
|
||||||
|
extern u8 _secram[], _esecram[];
|
||||||
|
|
||||||
|
void bootmem_platform_add_ranges(void)
|
||||||
|
{
|
||||||
|
bootmem_add_range((uintptr_t)_secram, REGION_SIZE(secram), BM_MEM_BL31);
|
||||||
|
}
|
||||||
|
|
||||||
static void mainboard_enable(struct device *dev)
|
static void mainboard_enable(struct device *dev)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@ SECTIONS
|
||||||
{
|
{
|
||||||
REGION(flash, 0x00000000, CONFIG_ROM_SIZE, 8)
|
REGION(flash, 0x00000000, CONFIG_ROM_SIZE, 8)
|
||||||
|
|
||||||
|
REGION(secram, 0xe000000, 0x1000000, 4096)
|
||||||
DRAM_START(0x40000000)
|
DRAM_START(0x40000000)
|
||||||
BOOTBLOCK(0x60010000, 64K)
|
BOOTBLOCK(0x60010000, 64K)
|
||||||
STACK(0x60020000, 62K)
|
STACK(0x60020000, 62K)
|
||||||
|
|
Loading…
Reference in New Issue