[coreboot-gerrit] Change in coreboot[master]: mb/emulation/qemu-armv8: Add new board for ARMv8

Patrick Rudolph (Code Review) gerrit at coreboot.org
Mon Feb 19 14:23:46 CET 2018


Patrick Rudolph has uploaded this change for review. ( https://review.coreboot.org/23812


Change subject: mb/emulation/qemu-armv8: Add new board for ARMv8
......................................................................

mb/emulation/qemu-armv8: Add new board for ARMv8

Ported the ARMv7 board to ARMv8.
Added custom bootblock, as the memory mapped NOR flash shouldn't be
written to. The bootblock relocates itself to SRAM.

Tested on QEMU:
qemu-system-aarch64 -M vexpress-a9 -cpu cortex-a53 -m 1024 \
 -bios build/coreboot.rom -nographic

Change-Id: Ib4f2fd43afb855c2ae5760d9ee6ae1478b09104c
Signed-off-by: Patrick Rudolph <patrick.rudolph at 9elements.com>
---
M src/cpu/armltd/Kconfig
M src/cpu/armltd/Makefile.inc
A src/cpu/armltd/cortex-a53/Kconfig
A src/mainboard/emulation/qemu-armv8/Kconfig
A src/mainboard/emulation/qemu-armv8/Kconfig.name
A src/mainboard/emulation/qemu-armv8/Makefile.inc
A src/mainboard/emulation/qemu-armv8/board_info.txt
A src/mainboard/emulation/qemu-armv8/bootblock_custom.S
A src/mainboard/emulation/qemu-armv8/cbmem.c
A src/mainboard/emulation/qemu-armv8/devicetree.cb
A src/mainboard/emulation/qemu-armv8/mainboard.c
A src/mainboard/emulation/qemu-armv8/mainboard.h
A src/mainboard/emulation/qemu-armv8/media.c
A src/mainboard/emulation/qemu-armv8/memlayout.ld
A src/mainboard/emulation/qemu-armv8/memorymap.h
A src/mainboard/emulation/qemu-armv8/mmio.c
A src/mainboard/emulation/qemu-armv8/romstage.c
A src/mainboard/emulation/qemu-armv8/timer.c
18 files changed, 546 insertions(+), 0 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/12/23812/1

diff --git a/src/cpu/armltd/Kconfig b/src/cpu/armltd/Kconfig
index af0c5c5..fc01735 100644
--- a/src/cpu/armltd/Kconfig
+++ b/src/cpu/armltd/Kconfig
@@ -1 +1,2 @@
 source src/cpu/armltd/cortex-a9/Kconfig
+source src/cpu/armltd/cortex-a53/Kconfig
diff --git a/src/cpu/armltd/Makefile.inc b/src/cpu/armltd/Makefile.inc
index 014742f..cd6acf1 100644
--- a/src/cpu/armltd/Makefile.inc
+++ b/src/cpu/armltd/Makefile.inc
@@ -1 +1,2 @@
 subdirs-$(CONFIG_CPU_ARMLTD_CORTEX_A9) += cortex-a9
+subdirs-$(CONFIG_CPU_ARMLTD_CORTEX_A53) += cortex-a53
diff --git a/src/cpu/armltd/cortex-a53/Kconfig b/src/cpu/armltd/cortex-a53/Kconfig
new file mode 100644
index 0000000..67d6476
--- /dev/null
+++ b/src/cpu/armltd/cortex-a53/Kconfig
@@ -0,0 +1,12 @@
+config CPU_ARMLTD_CORTEX_A53
+	bool
+	select ARCH_ARMV8_1
+	select ARCH_BOOTBLOCK_ARMV8_64
+	select ARCH_RAMSTAGE_ARMV8_64
+	select ARCH_ROMSTAGE_ARMV8_64
+	select ARCH_VERSTAGE_ARMV8_64
+	default n
+
+if CPU_ARMLTD_CORTEX_A53
+
+endif
diff --git a/src/mainboard/emulation/qemu-armv8/Kconfig b/src/mainboard/emulation/qemu-armv8/Kconfig
new file mode 100644
index 0000000..00c02e0
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/Kconfig
@@ -0,0 +1,55 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2013 Google Inc.
+##
+## This software is licensed under the terms of the GNU General Public
+## License version 2, as published by the Free Software Foundation, and
+## may be copied, distributed, and modified under those terms.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+
+# Emulation for ARM Ltd Versatile Express Cortex-A53
+#  http://www.arm.com/products/tools/development-boards/versatile-express
+
+# To execute, do:
+# export QEMU_AUDIO_DRV = none
+# qemu-system-aarch64 -M vexpress-a9 -cpu cortex-a53 -m 1024 -bios build/coreboot.rom -nographic
+
+if BOARD_EMULATION_QEMU_ARMV8
+
+config BOARD_SPECIFIC_OPTIONS # dummy
+	def_bool y
+	select CPU_ARMLTD_CORTEX_A53
+	select DRIVERS_UART_PL011
+	select BOOTBLOCK_CONSOLE
+	select CONSOLE_SERIAL
+	select MAINBOARD_HAS_NATIVE_VGA_INIT
+	select MAINBOARD_FORCE_NATIVE_VGA_INIT
+	select HAVE_LINEAR_FRAMEBUFFER
+	select BOARD_ROMSIZE_KB_4096
+	select BOOT_DEVICE_NOT_SPI_FLASH
+	select BOOTBLOCK_CUSTOM
+	select DRIVERS_ARM_SP804
+	select GENERIC_UDELAY
+
+config MAINBOARD_DIR
+	string
+	default emulation/qemu-armv8
+
+config MAINBOARD_PART_NUMBER
+	string
+	default "QEMU ARMv8"
+
+config MAX_CPUS
+	int
+	default 2
+
+config MAINBOARD_VENDOR
+	string
+	default "ARM Ltd."
+
+endif #  BOARD_EMULATION_QEMU_ARMV8
diff --git a/src/mainboard/emulation/qemu-armv8/Kconfig.name b/src/mainboard/emulation/qemu-armv8/Kconfig.name
new file mode 100644
index 0000000..ed1c343
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/Kconfig.name
@@ -0,0 +1,2 @@
+config BOARD_EMULATION_QEMU_ARMV8
+	bool "QEMU armv8 (vexpress-a9)"
diff --git a/src/mainboard/emulation/qemu-armv8/Makefile.inc b/src/mainboard/emulation/qemu-armv8/Makefile.inc
new file mode 100644
index 0000000..ccbd3de
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/Makefile.inc
@@ -0,0 +1,38 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2013 Google Inc.
+##
+## This software is licensed under the terms of the GNU General Public
+## License version 2, as published by the Free Software Foundation, and
+## may be copied, distributed, and modified under those terms.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+
+romstage-y += romstage.c
+
+romstage-y += cbmem.c
+ramstage-y += cbmem.c
+
+bootblock-y += media.c
+romstage-y += media.c
+ramstage-y += media.c
+
+bootblock-y += timer.c
+romstage-y += timer.c
+ramstage-y += timer.c
+
+bootblock-y += mmio.c
+romstage-y += mmio.c
+ramstage-y += mmio.c
+
+bootblock-y += memlayout.ld
+romstage-y += memlayout.ld
+ramstage-y += memlayout.ld
+
+bootblock-y += bootblock_custom.S
+bootblock-y += ../../../lib/bootblock.c
+
diff --git a/src/mainboard/emulation/qemu-armv8/board_info.txt b/src/mainboard/emulation/qemu-armv8/board_info.txt
new file mode 100644
index 0000000..0301be5
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/board_info.txt
@@ -0,0 +1,3 @@
+Board name: QEMU armv8 (vexpress-a9)
+Category: emulation
+Board URL: http://wiki.qemu.org/Main_Page
diff --git a/src/mainboard/emulation/qemu-armv8/bootblock_custom.S b/src/mainboard/emulation/qemu-armv8/bootblock_custom.S
new file mode 100644
index 0000000..1c1230d
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/bootblock_custom.S
@@ -0,0 +1,61 @@
+/*
+ * Early initialization code for aarch64 (a.k.a. armv8)
+ *
+ * Copyright 2018-present  Facebook, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <arch/asm.h>
+#include "memorymap.h"
+
+ENTRY(_start)
+    .org 0
+    ic      ialluis
+
+relocate:
+    /* Get code position */
+    mov     x1, #VEXPRESS_NORFLASH_START
+    mov     x0, #VEXPRESS_SRAM_START
+
+    /* FIXME: Don't hardcode bootblock length */
+    mov     x2, #0x10000
+    b       copy_code
+
+.align 7
+copy_code:
+    ldp     q0, q1, [x1], 32    /* Load 32 bytes */
+    subs    w2, w2, 32          /* Subtract 32 from length, setting flags */
+    stp     q0, q1, [x0], 32    /* Store 32 bytes */
+    b.gt    copy_code           /* Repeat if length is still positive */
+    dmb     sy
+
+    /* Load the actual location we're suppose to be at */
+    adr     x0, after_relocate  /* Relative address */
+    adr     x1, _start          /* Relative address */
+    sub     x0, x0, x1     /* This only works if _start is suppose to be zero */
+
+    mov x1, #VEXPRESS_SRAM_START
+    add     x0, x1, x0
+    br      x0
+
+after_relocate:
+     bl start
+ENDPROC(_start)
+
+ENTRY(start)
+
+    bl      arm64_init_cpu
+
+    /* Call C entry */
+    bl      main
+
+ENDPROC(start)
diff --git a/src/mainboard/emulation/qemu-armv8/cbmem.c b/src/mainboard/emulation/qemu-armv8/cbmem.c
new file mode 100644
index 0000000..e35e016
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/cbmem.c
@@ -0,0 +1,69 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2016 Vladimir Serbinenko <phcoder at gmail.com>
+ * Copyright 2018-present  Facebook, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <stddef.h>
+#include <cbmem.h>
+#include <symbols.h>
+#include <arch/io.h>
+#include "mainboard.h"
+#include "memorymap.h"
+
+#define PATTERN1 0x55
+#define PATTERN2 0xaa
+
+/* Returns 1 if mebibyte mb is present and 0 otherwise.  */
+static int probe_mb(int mb)
+{
+	char *ptr = (char *) VEXPRESS_DRAM_START + (mb << 20) + 0xfffff;
+	char old;
+	if (ptr < (char *) &_eprogram) {
+		/* Don't probe below _end to avoid accidentally clobering
+		   oneself.  */
+		return 1;
+	}
+
+	old = read8(ptr);
+	write8(ptr, PATTERN1);
+	if (read8(ptr) != PATTERN1)
+		return 0;
+	write8(ptr, PATTERN2);
+	if (read8(ptr) != PATTERN2)
+		return 0;
+	write8(ptr, old);
+	return 1;
+}
+
+int probe_ramsize(void)
+{
+	int i;
+	int discovered = 0;
+	static int saved_result;
+	if (saved_result)
+		return saved_result;
+	/* Compact binary search.  */
+	/* 1 GiB is the largest supported RAM by this machine.  */
+	for (i = 9; i >= 0; i--)
+		if (probe_mb(discovered | (1 << i)))
+			discovered |= (1 << i);
+	discovered++;
+	saved_result = discovered;
+	return discovered;
+}
+
+void *cbmem_top(void)
+{
+	return _dram + (probe_ramsize() << 20);
+}
diff --git a/src/mainboard/emulation/qemu-armv8/devicetree.cb b/src/mainboard/emulation/qemu-armv8/devicetree.cb
new file mode 100644
index 0000000..19a9bad
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/devicetree.cb
@@ -0,0 +1,20 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2013 Google, Inc.
+##
+## This software is licensed under the terms of the GNU General Public
+## License version 2, as published by the Free Software Foundation, and
+## may be copied, distributed, and modified under those terms.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+
+# TODO fill with Versatile Express board data in QEMU.
+chip cpu/armltd/cortex-a53
+	chip drivers/generic/generic # I2C0 controller
+		device i2c 6 on end # Fake component for testing
+	end
+end
diff --git a/src/mainboard/emulation/qemu-armv8/mainboard.c b/src/mainboard/emulation/qemu-armv8/mainboard.c
new file mode 100644
index 0000000..c53aec9
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/mainboard.c
@@ -0,0 +1,72 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2016 Vladimir Serbinenko <phcoder at gmail.com>
+ * Copyright 2018-present  Facebook, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 or, at your option, any later
+ * version of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <console/console.h>
+#include <device/device.h>
+#include <cbmem.h>
+#include <string.h>
+#include <halt.h>
+#include "mainboard.h"
+#include "memorymap.h"
+#include <edid.h>
+#include <arch/io.h>
+
+static void init_gfx(void)
+{
+	uint32_t *pl111;
+	struct edid edid;
+	/* width is at most 4096 */
+	/* height is at most 1024 */
+	int width = 800, height = 600;
+	uint32_t framebuffer = VEXPRESS_FRAMEBUFFER_START;
+	pl111 = (uint32_t *) VEXPRESS_PL111;
+	write32(pl111, (width / 4) - 4);
+	write32(pl111 + 1, height - 1);
+	/* registers 2, 3 and 5 are ignored by qemu. Set them correctly if
+	   we ever go for real hw.  */
+	/* framebuffer adress offset. Has to be in vram.  */
+	write32(pl111 + 4, framebuffer);
+	write32(pl111 + 7, 0);
+	write32(pl111 + 10, 0xff);
+	write32(pl111 + 6, (5 << 1) | 0x801);
+
+	edid.framebuffer_bits_per_pixel = 32;
+	edid.bytes_per_line = width * 4;
+	edid.x_resolution = width;
+	edid.y_resolution = height;
+
+	set_vbe_mode_info_valid(&edid, framebuffer);
+}
+
+static void mainboard_enable(device_t dev)
+{
+	int discovered;
+	if (!dev) {
+		printk(BIOS_EMERG, "No dev0; die\n");
+		halt();
+	}
+
+	discovered = probe_ramsize();
+	printk(BIOS_DEBUG, "%d MiB of RAM discovered\n", discovered);
+	ram_resource(dev, 0, VEXPRESS_DRAM_START >> 10, discovered << 10);
+	cbmem_recovery(0);
+	init_gfx();
+}
+
+struct chip_operations mainboard_ops = {
+	.enable_dev = mainboard_enable,
+};
diff --git a/src/mainboard/emulation/qemu-armv8/mainboard.h b/src/mainboard/emulation/qemu-armv8/mainboard.h
new file mode 100644
index 0000000..ce46f17
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/mainboard.h
@@ -0,0 +1,24 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2016 Vladimir Serbinenko <phcoder at gmail.com>
+ * Copyright 2018-present  Facebook, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 or, at your option, any later
+ * version of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef QEMU_ARMV8_MAINBOARD_H
+#define QEMU_ARMV8_MAINBOARD_H
+
+/* Returns RAM size in mebibytes.  */
+int probe_ramsize(void);
+
+#endif
diff --git a/src/mainboard/emulation/qemu-armv8/media.c b/src/mainboard/emulation/qemu-armv8/media.c
new file mode 100644
index 0000000..be1ca4b
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/media.c
@@ -0,0 +1,26 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2013 Google, Inc.
+ * Copyright 2018-present  Facebook, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+#include <boot_device.h>
+#include "memorymap.h"
+
+/* Maps directly to NOR flash up to ROM size. */
+static const struct mem_region_device boot_dev =
+    MEM_REGION_DEV_RO_INIT((void *)VEXPRESS_NORFLASH_START, CONFIG_ROM_SIZE);
+
+const struct region_device *boot_device_ro(void)
+{
+	return &boot_dev.rdev;
+}
diff --git a/src/mainboard/emulation/qemu-armv8/memlayout.ld b/src/mainboard/emulation/qemu-armv8/memlayout.ld
new file mode 100644
index 0000000..9c3351f
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/memlayout.ld
@@ -0,0 +1,42 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2014 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <memlayout.h>
+
+#include <arch/header.ld>
+#include "memorymap.h"
+
+/*
+ * This map is designed to work with new qemu vexpress memory layout and
+ * with -bios option which neatly puts coreboot into flash and so payloads
+ * can find CBFS and we don't risk overwriting CBFS.
+ *
+ * Prior to Jul 2014 qemu aliased 0 to begining of RAM instead of flash
+ * and -bios was unusable as $pc pointed to 0 which was zero-filled as a
+ * workaround we suggested using -kernel but this still had all the issues
+ * of having fake-ROM in RAM. In fact it was even worse as fake ROM ends
+ * up exactly at addresses needed to load Linux.
+ */
+SECTIONS
+{
+	SRAM_START(VEXPRESS_SRAM_START)
+	BOOTBLOCK(VEXPRESS_SRAM_START, 64K)
+	SRAM_END(VEXPRESS_SRAM_START + 0x200000)
+
+	DRAM_START(VEXPRESS_DRAM_START)
+	STACK(VEXPRESS_DRAM_START, 64K)
+	ROMSTAGE(VEXPRESS_DRAM_START + 0x10000, 128K)
+	RAMSTAGE(VEXPRESS_DRAM_START + 0x30000, 16M)
+}
diff --git a/src/mainboard/emulation/qemu-armv8/memorymap.h b/src/mainboard/emulation/qemu-armv8/memorymap.h
new file mode 100644
index 0000000..f9a9ef3
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/memorymap.h
@@ -0,0 +1,32 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2018-present  Facebook, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+#ifndef QEMU_ARMV8_MEMORYMAP_H_
+#define QEMU_ARMV8_MEMORYMAP_H_
+
+/*
+ * Memory map for qemu vexpress-a9 since
+ * 6ec1588e09770ac7e9c60194faff6101111fc7f0 (Jul 2014):
+ */
+
+#define VEXPRESS_NORFLASH_START        (0x00000000)
+#define VEXPRESS_UART0_IO_ADDRESS      (0x10009000)
+#define VEXPRESS_TIMER01               (0x10011000)
+#define VEXPRESS_PL111                 (0x10020000)
+#define VEXPRESS_SRAM_START            (0x48000000)
+#define VEXPRESS_FRAMEBUFFER_START     (0x4c000000)
+#define VEXPRESS_DRAM_START            (0x60000000)
+
+
+#endif /* QEMU_ARMV8_MEMORYMAP_H_ */
diff --git a/src/mainboard/emulation/qemu-armv8/mmio.c b/src/mainboard/emulation/qemu-armv8/mmio.c
new file mode 100644
index 0000000..8d3eaef
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/mmio.c
@@ -0,0 +1,35 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2016 Vladimir Serbinenko <phcoder at gmail.com>
+ * Copyright 2018-present  Facebook, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 or, at your option, any later
+ * version of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+#include <console/uart.h>
+#include <drivers/arm/sp804/sp804.h>
+#include "memorymap.h"
+
+uintptr_t uart_platform_base(int idx)
+{
+	if (idx == 0)
+		return VEXPRESS_UART0_IO_ADDRESS;
+
+	return 0;
+}
+
+uintptr_t timer_platform_baseptr(const size_t idx)
+{
+	if (idx == 0)
+		return VEXPRESS_TIMER01;
+
+	return 0;
+}
diff --git a/src/mainboard/emulation/qemu-armv8/romstage.c b/src/mainboard/emulation/qemu-armv8/romstage.c
new file mode 100644
index 0000000..b6314ccd
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/romstage.c
@@ -0,0 +1,23 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2013 Google, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <console/console.h>
+#include <program_loading.h>
+
+void main(void)
+{
+	console_init();
+	run_ramstage();
+}
diff --git a/src/mainboard/emulation/qemu-armv8/timer.c b/src/mainboard/emulation/qemu-armv8/timer.c
new file mode 100644
index 0000000..8163200
--- /dev/null
+++ b/src/mainboard/emulation/qemu-armv8/timer.c
@@ -0,0 +1,30 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2013 Google, Inc.
+ * Copyright 2018-present  Facebook, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <drivers/arm/sp804/sp804.h>
+#include <delay.h>
+#include <timer.h>
+
+void init_timer(void)
+{
+	sp804_init(0);
+}
+
+void timer_monotonic_get(struct mono_time *mt)
+{
+	/* QEMU's timer runs at 1MHz, no need to change the raw value */
+	mono_time_set_usecs(mt, sp804_timer_raw_value(0));
+}

-- 
To view, visit https://review.coreboot.org/23812
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib4f2fd43afb855c2ae5760d9ee6ae1478b09104c
Gerrit-Change-Number: 23812
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Rudolph <patrick.rudolph at 9elements.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180219/4e8dbe52/attachment-0001.html>


More information about the coreboot-gerrit mailing list