riscv: v2025.10-rc2 fails on QEMU with "Failed to reserve memory for fdt"
Sughosh Ganu
sughosh.ganu at linaro.org
Wed Aug 13 09:58:48 CEST 2025
On Tue, 12 Aug 2025 at 20:47, Vivian Wang <wangruikang at iscas.ac.cn> wrote:
>
> Hi,
>
> On QEMU 10.0.2 (NixOS unstable), U-Boot v2025.10-rc2 with
> qemu-riscv64_smode_defconfig fails to boot a loaded kernel, with a
> "Failed to reserve memory for fdt" error. Explicitly loading an FDT
> seems to fix this, so this looks like a problem with reusing the boot FDT.
>
> My steps are:
>
> mkdir -p vmshare/extlinux
> echo 'label 0' > vmshare/extlinux/extlinux.conf
> echo ' linux /Image' >> vmshare/extlinux/extlinux.conf
> cp .../Image vmshare/ # Grab a Linux kernel
> qemu-system-riscv64 -m 1G -M virt -nographic -kernel u-boot.bin \
> -drive file=fat:ro:vmshare,format=raw,read-only=on
>
> Resulting in:
>
> Device 0: 1af4 VirtIO Block Device
> Type: Hard Disk
> Capacity: 504.0 MB = 0.4 GB (1032192 x 512)
> ... is now current device
> Scanning virtio 0:1...
> Found /extlinux/extlinux.conf
> Retrieving file: /extlinux/extlinux.conf
> 1: 0
> Retrieving file: /Image
> Moving Image from 0x84000000 to 0x80200000, end=0x81e88000
> ## Flattened Device Tree blob at bee8f640
> Booting using the fdt blob at 0xbee8f640
> Working FDT set to bee8f640
> Failed to reserve memory for fdt at 0xbee8f640
> FDT creation failed! hanging...### ERROR ### Please RESET the board ###
Looks like the FDT is part of the region reserved for U-boot image
post relocation. That region is marked as no-overwrite, meaning any
other allocation attempt to the region will fail. Please check the
relevant log below. The relevant code is in
boot/image-fdt.c:boot_relocate_fdt(). The code gets exercised because
fdt_high and initrd_high are being set to all ones. This was working
in 2025.07 simply because the function call's return value was not
being checked.
I am not sure why fdt_high and initrd_rd are being set to all ones.
The documentation suggests that this is not a good thing. I removed
this setting of fdt_high from include/configs/qemu-riscv.h, and with
that the platform boots.
Relevant boot log
-----------------------
U-Boot 2025.10-rc2-dirty (Aug 13 2025 - 12:56:52 +0530)
CPU: riscv
Model: riscv-virtio,qemu
DRAM: 1 GiB
Core: 26 devices, 14 uclasses, devicetree: board
Flash: 32 MiB
Loading Environment from nowhere... OK
In: serial,usbkbd
Out: serial,vidconsole
Err: serial,vidconsole
No USB controllers found
Net: No ethernet found.
Working FDT set to beeb1ac0
Hit any key to stop autoboot: 0
=> bdin
boot_params = 0x0000000000000000
DRAM bank = 0x0000000000000000
-> start = 0x0000000080000000
-> size = 0x0000000040000000
flashstart = 0x0000000020000000
flashsize = 0x0000000002000000
flashoffset = 0x0000000000000000
baudrate = 115200 bps
relocaddr = 0x00000000bf6d3000
reloc off = 0x000000003f4d3000
Build = 64-bit
current eth = unknown
eth-1addr = (not set)
IP addr = <NULL>
fdt_blob = 0x00000000beeb1ac0
lmb_dump_all:
memory.count = 0x1
memory[0] [0x80000000-0xbfffffff], 0x40000000 bytes, flags: none
reserved.count = 0x3
reserved[0] [0x80000000-0x8001ffff], 0x20000 bytes, flags: no-overwrite
reserved[1] [0xbdeae000-0xbdeb0fff], 0x3000 bytes, flags:
no-notify, no-overwrite
reserved[2] [0xbdeb1ab0-0xbfffffff], 0x214e550 bytes, flags:
no-overwrite <----- This is where the FDT resides.
-sughosh
>
> (See bottom for full output including OpenSBI)
>
> The same steps succeeds with U-Boot 2025.07, so this appears to be a
> regression. I haven't yet done a bisection or any (successful)
> debugging, but this check seems to be added in [1].
>
> Sughosh Ganu: This message seems to be added by [1]. Do you have any idea?
>
> Vivian "dramforever" Wang
>
> [1]:
> https://lore.kernel.org/u-boot/20250617104346.1379981-1-sughosh.ganu@linaro.org/
>
>
> Full log output:
>
> OpenSBI v1.5.1
> ____ _____ ____ _____
> / __ \ / ____| _ \_ _|
> | | | |_ __ ___ _ __ | (___ | |_) || |
> | | | | '_ \ / _ \ '_ \ \___ \| _ < | |
> | |__| | |_) | __/ | | |____) | |_) || |_
> \____/| .__/ \___|_| |_|_____/|____/_____|
> | |
> |_|
>
> Platform Name : riscv-virtio,qemu
> Platform Features : medeleg
> Platform HART Count : 1
> Platform IPI Device : aclint-mswi
> Platform Timer Device : aclint-mtimer @ 10000000Hz
> Platform Console Device : uart8250
> Platform HSM Device : ---
> Platform PMU Device : ---
> Platform Reboot Device : syscon-reboot
> Platform Shutdown Device : syscon-poweroff
> Platform Suspend Device : ---
> Platform CPPC Device : ---
> Firmware Base : 0x80000000
> Firmware Size : 327 KB
> Firmware RW Offset : 0x40000
> Firmware RW Size : 71 KB
> Firmware Heap Offset : 0x49000
> Firmware Heap Size : 35 KB (total), 2 KB (reserved), 11 KB (used), 21 KB (free)
> Firmware Scratch Size : 4096 B (total), 416 B (used), 3680 B (free)
> Runtime SBI Version : 2.0
>
> Domain0 Name : root
> Domain0 Boot HART : 0
> Domain0 HARTs : 0*
> Domain0 Region00 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W)
> Domain0 Region01 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W)
> Domain0 Region02 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: ()
> Domain0 Region03 : 0x0000000080040000-0x000000008005ffff M: (R,W) S/U: ()
> Domain0 Region04 : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: ()
> Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W)
> Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W)
> Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X)
> Domain0 Next Address : 0x0000000080200000
> Domain0 Next Arg1 : 0x00000000bfe00000
> Domain0 Next Mode : S-mode
> Domain0 SysReset : yes
> Domain0 SysSuspend : yes
>
> Boot HART ID : 0
> Boot HART Domain : root
> Boot HART Priv Version : v1.12
> Boot HART Base ISA : rv64imafdch
> Boot HART ISA Extensions : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu
> Boot HART PMP Count : 16
> Boot HART PMP Granularity : 2 bits
> Boot HART PMP Address Bits: 54
> Boot HART MHPM Info : 16 (0x0007fff8)
> Boot HART Debug Triggers : 2 triggers
> Boot HART MIDELEG : 0x0000000000001666
> Boot HART MEDELEG : 0x0000000000f0b509
>
>
> U-Boot 2025.10-rc2 (Jan 01 1980 - 00:00:00 +0000)
>
> CPU: riscv
> Model: riscv-virtio,qemu
> DRAM: 1 GiB
> using memory 0xbee91000-0xbf6b1000 for malloc()
> Core: 27 devices, 14 uclasses, devicetree: board
> Flash: 32 MiB
> Loading Environment from nowhere... OK
> In: serial,usbkbd
> Out: serial,vidconsole
> Err: serial,vidconsole
> No USB controllers found
> Net: No ethernet found.
>
> Working FDT set to bee8f640
> Hit any key to stop autoboot: 0
>
> Device 0: unknown device
>
> Device 0: 1af4 VirtIO Block Device
> Type: Hard Disk
> Capacity: 504.0 MB = 0.4 GB (1032192 x 512)
> ... is now current device
> Scanning virtio 0:1...
> Found /extlinux/extlinux.conf
> Retrieving file: /extlinux/extlinux.conf
> 1: 0
> Retrieving file: /Image
> Moving Image from 0x84000000 to 0x80200000, end=0x81e88000
> ## Flattened Device Tree blob at bee8f640
> Booting using the fdt blob at 0xbee8f640
> Working FDT set to bee8f640
> Failed to reserve memory for fdt at 0xbee8f640
> FDT creation failed! hanging...### ERROR ### Please RESET the board ###
>
More information about the U-Boot
mailing list