Hi Joseph,
On 2026-07-13T08:45:48, Joseph Guo <[email protected]> wrote:
> boot: image-fdt: downgrade -EINVAL reservation failure to debug
>
> When boot_fdt_handle_region() attempts to reserve a DTS reserved-memory
> region via lmb_alloc_mem(), it may receive -EINVAL if the region's
> physical address falls outside the LMB-managed memory range (i.e.
> below PHYS_SDRAM on platforms where U-Boot does not manage the lower
> DRAM window).
>
> A typical example is platforms like i.MX95 where PHYS_SDRAM starts at
> 0x90000000, but remoteproc/rpmsg carveouts (vdev vrings, vdev buffer,
> resource table) are placed at 0x88xxxxxx by hardware convention. Those
> addresses are unreachable by U-Boot's allocator anyway, so failing to
> mark them reserved has no practical consequence -- U-Boot will never
> accidentally place the initrd or FDT blob there.
>
> Printing ERROR for a condition that is harmless and expected on many
> platforms is misleading. Downgrade the -EINVAL case to debug() to
> suppress the spurious output while preserving full visibility under
> DEBUG/log builds.
>
> [...]
>
> boot/image-fdt.c | 3 +++
> 1 file changed, 3 insertions(+)
> diff --git a/boot/image-fdt.c b/boot/image-fdt.c
> @@ -95,6 +95,9 @@ static void boot_fdt_handle_region(u64 addr, u64 size, u32
> flags, bool free)
> + } else if (ret == -EINVAL) {
> + debug(" skipping fdt memory region outside LMB range
> (addr=%llx size=%llx flags=%x)\n",
> + (unsigned long long)addr, (unsigned long long)size,
> flags);
Just to note, -EINVAL from _lmb_alloc_addr() is also returned when the
region only partially overlaps available memory, e.g. a reserved-memory
node that straddles the start of PHYS_SDRAM or spans a hole between
banks. Part of such a region is reachable by U-Boot's allocator, so
silently skipping it means the initrd or FDT could still be placed
there - exactly what the commit message says cannot happen.
I see this patch is being dropped in favour of Jonas's version, but the
same applies there: perhaps only downgrade the message when the region
has no overlap at all with LMB memory, or clamp the reservation to the
overlapping portion.
Regards,
Simon