diff options
author | Alper Nebi Yasak <alpernebiyasak@gmail.com> | 2024-02-05 20:22:12 +0300 |
---|---|---|
committer | Nico Huber <nico.h@gmx.de> | 2024-08-16 16:17:29 +0000 |
commit | 8cc1d79ed0c3e523e080b9ae9bab35bb6d70d62e (patch) | |
tree | 598671bfab219ed3d3df2807fea486d2404e0689 /src/mainboard/emulation | |
parent | de1a74454ffaaca11c6735814ad1b97cc6e522cd (diff) |
mainboard/qemu-aarch64: Get top of memory from device-tree blob
Trying to probe RAM space to figure out top of memory causes an
exception on AArch64 virtual machines with recent versions of QEMU, but
we temporarily enable exception handlers for that and use it to help
detect if a RAM address is usable or not. However, QEMU docs recommend
reading device information from the device-tree blob it provides us at
the start of RAM.
A previous commit adds a library function to parse device-tree blob that
QEMU provides us. Use it to determine top of memory in AArch64 QEMU
virtual machines, but still fall back to the RAM probing approach as a
last-ditch effort.
Change-Id: I4cc888b57cf98e0797ce7f9ddfa2eb34d14cd9c1
Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/80364
Reviewed-by: Maximilian Brune <maximilian.brune@9elements.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Diffstat (limited to 'src/mainboard/emulation')
-rw-r--r-- | src/mainboard/emulation/qemu-aarch64/Kconfig | 1 | ||||
-rw-r--r-- | src/mainboard/emulation/qemu-aarch64/cbmem.c | 8 | ||||
-rw-r--r-- | src/mainboard/emulation/qemu-aarch64/memlayout.ld | 1 |
3 files changed, 10 insertions, 0 deletions
diff --git a/src/mainboard/emulation/qemu-aarch64/Kconfig b/src/mainboard/emulation/qemu-aarch64/Kconfig index af689baac3..42f9110df4 100644 --- a/src/mainboard/emulation/qemu-aarch64/Kconfig +++ b/src/mainboard/emulation/qemu-aarch64/Kconfig @@ -11,6 +11,7 @@ config BOARD_SPECIFIC_OPTIONS select ARCH_VERSTAGE_ARMV8_64 select ARCH_ROMSTAGE_ARMV8_64 select ARCH_RAMSTAGE_ARMV8_64 + select FLATTENED_DEVICE_TREE select ARM64_USE_ARCH_TIMER select BOARD_ROMSIZE_KB_16384 select BOOTBLOCK_CUSTOM diff --git a/src/mainboard/emulation/qemu-aarch64/cbmem.c b/src/mainboard/emulation/qemu-aarch64/cbmem.c index 389ff4ead0..4cdd44f993 100644 --- a/src/mainboard/emulation/qemu-aarch64/cbmem.c +++ b/src/mainboard/emulation/qemu-aarch64/cbmem.c @@ -3,8 +3,16 @@ #include <cbmem.h> #include <ramdetect.h> #include <symbols.h> +#include <device_tree.h> +DECLARE_REGION(fdt) uintptr_t cbmem_top_chipset(void) { + uint64_t top; + + top = fdt_get_memory_top((void *)_fdt); + if (top) + return MIN(top, (uint64_t)4 * GiB - 1); + return (uintptr_t)_dram + (probe_ramsize((uintptr_t)_dram, CONFIG_DRAM_SIZE_MB) * MiB); } diff --git a/src/mainboard/emulation/qemu-aarch64/memlayout.ld b/src/mainboard/emulation/qemu-aarch64/memlayout.ld index 9c1bb197ce..d27c0158cf 100644 --- a/src/mainboard/emulation/qemu-aarch64/memlayout.ld +++ b/src/mainboard/emulation/qemu-aarch64/memlayout.ld @@ -18,6 +18,7 @@ SECTIONS BL31(0xe000000, 0x1000000) DRAM_START(0x40000000) + REGION(fdt, 0x40000000, 1M, 8) BOOTBLOCK(0x60010000, 64K) STACK(0x60020000, 54K) CBFS_MCACHE(0x6002D800, 8K) |