Patrick Rudolph has uploaded this change for review.

View Change

mb/emulation/qemu-aarch64: Add ARM trusted firmware support

Tested on qemu-system-aarch64:
Fixes a hang and allows to boot into Linux userspace.

Change-Id: I809742522240185431621cc4fd8b9c7deaf2bb54
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
---
M src/mainboard/emulation/qemu-aarch64/Kconfig
M src/mainboard/emulation/qemu-aarch64/Makefile.inc
M src/mainboard/emulation/qemu-aarch64/bootblock.c
M src/mainboard/emulation/qemu-aarch64/include/mainboard/addressmap.h
M src/mainboard/emulation/qemu-aarch64/mainboard.c
M src/mainboard/emulation/qemu-aarch64/memlayout.ld
6 files changed, 19 insertions(+), 0 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/35/38535/1
diff --git a/src/mainboard/emulation/qemu-aarch64/Kconfig b/src/mainboard/emulation/qemu-aarch64/Kconfig
index 895446d..0579b04 100644
--- a/src/mainboard/emulation/qemu-aarch64/Kconfig
+++ b/src/mainboard/emulation/qemu-aarch64/Kconfig
@@ -27,6 +27,7 @@
select MAINBOARD_FORCE_NATIVE_VGA_INIT
select MAINBOARD_HAS_NATIVE_VGA_INIT
select MISSING_BOARD_RESET
+ select ARM64_USE_ARM_TRUSTED_FIRMWARE

config MAINBOARD_DIR
string
diff --git a/src/mainboard/emulation/qemu-aarch64/Makefile.inc b/src/mainboard/emulation/qemu-aarch64/Makefile.inc
index 4d5f2bd..b710f15 100644
--- a/src/mainboard/emulation/qemu-aarch64/Makefile.inc
+++ b/src/mainboard/emulation/qemu-aarch64/Makefile.inc
@@ -24,3 +24,5 @@
bootblock-y += bootblock_custom.S

CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
+
+BL31_MAKEARGS += PLAT=qemu ARM_ARCH_MAJOR=8 M0_CROSS_COMPILE="$(CROSS_COMPILE_arm)"
diff --git a/src/mainboard/emulation/qemu-aarch64/bootblock.c b/src/mainboard/emulation/qemu-aarch64/bootblock.c
index 2c878b6..d4b3c6f 100644
--- a/src/mainboard/emulation/qemu-aarch64/bootblock.c
+++ b/src/mainboard/emulation/qemu-aarch64/bootblock.c
@@ -16,6 +16,8 @@
#include <bootblock_common.h>
#include <symbols.h>

+extern u8 _secram[], _esecram[];
+
void bootblock_mainboard_init(void)
{
mmu_init();
@@ -27,5 +29,7 @@
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(_secram, REGION_SIZE(secram), MA_MEM | MA_S | MA_RW);
+
mmu_enable();
}
diff --git a/src/mainboard/emulation/qemu-aarch64/include/mainboard/addressmap.h b/src/mainboard/emulation/qemu-aarch64/include/mainboard/addressmap.h
index 6f0c802..7233863 100644
--- a/src/mainboard/emulation/qemu-aarch64/include/mainboard/addressmap.h
+++ b/src/mainboard/emulation/qemu-aarch64/include/mainboard/addressmap.h
@@ -23,6 +23,7 @@
* 0x0905_0000..0x0907_0000: SMMU (smmu-v3)
* 0x0a00_0000..0x0a00_0200: MMIO (virtio)
* 0x0c00_0000..0x0e00_0000: Platform bus
+ * 0x0e00_0000..0x0eff_ffff: Secure SRAM
* 0x4000_0000..: RAM
*/
#define VIRT_UART_BASE 0x09000000
@@ -32,3 +33,4 @@
#define VIRT_SMMU_BASE 0x09050000
#define VIRT_MMIO_BASE 0x0a000000
#define VIRT_PLATFORM_BUS_BASE 0x0c000000
+#define VIRT_SECRAM_BASE 0xe000000
diff --git a/src/mainboard/emulation/qemu-aarch64/mainboard.c b/src/mainboard/emulation/qemu-aarch64/mainboard.c
index 5735455..7eaed5b 100644
--- a/src/mainboard/emulation/qemu-aarch64/mainboard.c
+++ b/src/mainboard/emulation/qemu-aarch64/mainboard.c
@@ -10,6 +10,15 @@
#include <ramdetect.h>
#include <symbols.h>
#include <device/device.h>
+#include <bootmem.h>
+#include <console/console.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)
{
diff --git a/src/mainboard/emulation/qemu-aarch64/memlayout.ld b/src/mainboard/emulation/qemu-aarch64/memlayout.ld
index cd86073..beb30a3 100644
--- a/src/mainboard/emulation/qemu-aarch64/memlayout.ld
+++ b/src/mainboard/emulation/qemu-aarch64/memlayout.ld
@@ -22,6 +22,7 @@
{
REGION(flash, 0x00000000, CONFIG_ROM_SIZE, 8)

+ REGION(secram, 0xe000000, 0xf000000, 4096)
DRAM_START(0x40000000)
BOOTBLOCK(0x60010000, 64K)
STACK(0x60020000, 62K)

To view, visit change 38535. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I809742522240185431621cc4fd8b9c7deaf2bb54
Gerrit-Change-Number: 38535
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Rudolph <patrick.rudolph@9elements.com>
Gerrit-Reviewer: Julius Werner <jwerner@chromium.org>
Gerrit-Reviewer: Martin Roth <martinroth@google.com>
Gerrit-Reviewer: Patrick Georgi <pgeorgi@google.com>
Gerrit-Reviewer: Patrick Rudolph <patrick.rudolph@9elements.com>
Gerrit-MessageType: newchange