[coreboot-gerrit] Patch set updated for coreboot: Fix qemu-armv7 memory map

Vladimir Serbinenko (phcoder@gmail.com) gerrit at coreboot.org
Fri Feb 19 22:42:49 CET 2016


Vladimir Serbinenko (phcoder at gmail.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13748

-gerrit

commit da7ac1c1c48fd334bbc68074999ea94f1bcb4f97
Author: Vladimir Serbinenko <phcoder at gmail.com>
Date:   Thu Feb 18 16:21:15 2016 +0100

    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 at gmail.com>
---
 src/mainboard/emulation/qemu-armv7/media.c      |  4 +--
 src/mainboard/emulation/qemu-armv7/memlayout.ld | 33 +++++++++++++++----------
 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 cb0b275..e9feaf4 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 0b139a2..1b3a48b 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)
 }



More information about the coreboot-gerrit mailing list