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)
This commit is contained in:
Vladimir Serbinenko 2016-02-18 16:21:15 +01:00
parent bd1fdc6e84
commit f2134f3bab
2 changed files with 22 additions and 15 deletions

View File

@ -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)
{

View File

@ -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)
}