mb/emulation/qemu-armv7: Fix board
Fix multiple issues allowing to boot until "Payload not loaded": * The FMAP_CACHE was placed in memory mapped flash - Place the FMAP_CACHE in DRAM. * The FMAP_CACHE was overlapping the BOOTBLOCK, which has a default size of 128KiB. - Increase the bootblock size in memlayout to 128KiB to match the FMAP. * The heap in bootblock wasn't usable. - Add a linking check in armv7 common bootblock to relocate itself to the linked address. * A FIT payload couldn't be compiled in as the POSTRAM_CBFS_CACHE was missing. - Add the POSTRAM_CBFS_CACHE to memlayout. * The coreboot log is spammed with missing timestamp table error messages - Add TIMESTAMP table to memlayout. Tested on QEMU armv7 vexpress. Change-Id: Ib9357a5c059ca179826c5a7e7616a5c688ec2e95 Signed-off-by: Patrick Rudolph <siro@das-labor.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/39187 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
This commit is contained in:
parent
935495f3e7
commit
6588652ef5
2 changed files with 39 additions and 8 deletions
|
@ -62,14 +62,43 @@ init_stack_loop:
|
||||||
cmp r0, r1
|
cmp r0, r1
|
||||||
bne init_stack_loop
|
bne init_stack_loop
|
||||||
|
|
||||||
|
/* Set stackpointer in internal RAM */
|
||||||
|
ldr sp, =_estack
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For platforms where the flash is memory mapped (qemu), check if the
|
||||||
|
* bootblock needs to relocate itself.
|
||||||
|
*/
|
||||||
|
check_position:
|
||||||
|
adr r0, check_position
|
||||||
|
ldr r1, =check_position
|
||||||
|
|
||||||
|
cmp r0, r1
|
||||||
|
beq call_bootblock
|
||||||
|
|
||||||
|
/* Calculate source */
|
||||||
|
ldr r2, =_program
|
||||||
|
sub r1, r1, r2
|
||||||
|
sub r1, r0, r1
|
||||||
|
/* Get destination */
|
||||||
|
ldr r0, =_program
|
||||||
|
/* Get size */
|
||||||
|
ldr r2, =_eprogram
|
||||||
|
sub r2, r2, r0
|
||||||
|
|
||||||
|
bl memcpy
|
||||||
|
|
||||||
|
/* Get absolute address */
|
||||||
|
ldr lr, =call_bootblock
|
||||||
|
/* Directly modify pc as branch instruction changes the state */
|
||||||
|
mov pc, lr
|
||||||
|
|
||||||
call_bootblock:
|
call_bootblock:
|
||||||
|
|
||||||
/* Restore parameter passed in by maskrom/vendor firmware. */
|
/* Restore parameter passed in by maskrom/vendor firmware. */
|
||||||
ldr r0, =maskrom_param
|
ldr r0, =maskrom_param
|
||||||
str r10, [r0]
|
str r10, [r0]
|
||||||
|
|
||||||
/* Set stackpointer in internal RAM to call bootblock main() */
|
|
||||||
ldr sp, =_estack
|
|
||||||
ldr r0,=0x00000000
|
ldr r0,=0x00000000
|
||||||
/*
|
/*
|
||||||
* The current design of cpu_info places the struct at the top of the
|
* The current design of cpu_info places the struct at the top of the
|
||||||
|
|
|
@ -28,14 +28,16 @@ SECTIONS
|
||||||
{
|
{
|
||||||
/* TODO: does this thing emulate SRAM? */
|
/* TODO: does this thing emulate SRAM? */
|
||||||
|
|
||||||
BOOTBLOCK(0x00000, 64K)
|
REGION(flash, 0, CONFIG_ROM_SIZE, 4K)
|
||||||
FMAP_CACHE(0x10000, 2K)
|
|
||||||
|
|
||||||
DRAM_START(0x60000000)
|
DRAM_START(0x60000000)
|
||||||
STACK(0x60000000, 64K)
|
STACK(0x60000000, 64K)
|
||||||
ROMSTAGE(0x60010000, 128K)
|
BOOTBLOCK(0x60010000, 128K)
|
||||||
RAMSTAGE(0x60030000, 16M)
|
FMAP_CACHE(0x60030000, 4K)
|
||||||
|
TIMESTAMP(0x60031000, 1K)
|
||||||
/* TODO: Implement MMU support and move TTB to a better location. */
|
/* TODO: Implement MMU support and move TTB to a better location. */
|
||||||
TTB(0x61030000, 16K)
|
TTB(0x60034000, 16K)
|
||||||
|
ROMSTAGE(0x60038000, 128K)
|
||||||
|
RAMSTAGE(0x60060000, 16M)
|
||||||
|
POSTRAM_CBFS_CACHE(0x61060000, 8M)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue