summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Serbinenko <phcoder@gmail.com>2016-02-18 16:21:15 +0100
committerVladimir Serbinenko <phcoder@gmail.com>2016-02-20 07:31:44 +0100
commitf2134f3bab18a9c8968eef3e4233c82170af9629 (patch)
treee6e7f000f10ef0a33c97510da901f1e2d091ebd1
parentbd1fdc6e84cae1f3fa705ae229a6b8ab67f2960a (diff)
downloadcoreboot-f2134f3bab18a9c8968eef3e4233c82170af9629.tar.xz
Fix qemu-armv7 memory map
Old map does not work on recent qemu. New map puts coreboot to ROM, so it behave more like most real machines would. For details on this map see comment in memlayout.ld Change-Id: If1f3328b511daca32ba93da5a6d44402508b37e9 Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com> Reviewed-on: https://review.coreboot.org/13748 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins)
-rw-r--r--src/mainboard/emulation/qemu-armv7/media.c4
-rw-r--r--src/mainboard/emulation/qemu-armv7/memlayout.ld33
2 files changed, 22 insertions, 15 deletions
diff --git a/src/mainboard/emulation/qemu-armv7/media.c b/src/mainboard/emulation/qemu-armv7/media.c
index cb0b2757aa..e9feaf43c7 100644
--- a/src/mainboard/emulation/qemu-armv7/media.c
+++ b/src/mainboard/emulation/qemu-armv7/media.c
@@ -14,9 +14,9 @@
*/
#include <boot_device.h>
-/* Maps directly to qemu memory mapped space of 0x10000 up to rom size. */
+/* Maps directly to NOR flash up to rom size. */
static const struct mem_region_device boot_dev =
- MEM_REGION_DEV_INIT((void *)0x10000, CONFIG_ROM_SIZE);
+ MEM_REGION_DEV_INIT((void *)0x0, CONFIG_ROM_SIZE);
const struct region_device *boot_device_ro(void)
{
diff --git a/src/mainboard/emulation/qemu-armv7/memlayout.ld b/src/mainboard/emulation/qemu-armv7/memlayout.ld
index 0b139a2742..1b3a48bad3 100644
--- a/src/mainboard/emulation/qemu-armv7/memlayout.ld
+++ b/src/mainboard/emulation/qemu-armv7/memlayout.ld
@@ -18,26 +18,33 @@
#include <arch/header.ld>
/*
- * Memory map for qemu vexpress-a9:
+ * Memory map for qemu vexpress-a9 since
+ * 6ec1588e09770ac7e9c60194faff6101111fc7f0 (Jul 2014):
*
- * 0x0000_0000: jump instruction (by qemu)
- * 0x0001_0000: bootblock (entry of kernel / firmware)
- * 0x0002_0000: romstage, assume up to 128KB in size.
- * 0x0007_ff00: stack pointer
- * 0x0010_0000: CBFS header
- * 0x0011_0000: CBFS data
- * 0x0100_0000: reserved for ramstage
+ * 0x0000_0000: NOR flash
* 0x1000_0000: I/O map address
+ * 0x6000_0000: RAM
*/
+/*
+ * 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
{
/* TODO: does this thing emulate SRAM? */
- BOOTBLOCK(0x10000, 64K)
- ROMSTAGE(0x20000, 128K)
- STACK(0x000FC000, 16K)
+ BOOTBLOCK(0x00000, 64K)
- DRAM_START(0x01000000)
- RAMSTAGE(0x01000000, 16M)
+ DRAM_START(0x60000000)
+ STACK(0x60000000, 64K)
+ ROMSTAGE(0x60010000, 128K)
+ RAMSTAGE(0x60030000, 16M)
}