[PATCH v2] efi: Make FDT extra space configurable

Heinrich Schuchardt xypron.glpk at gmx.de
Fri Apr 11 08:20:04 CEST 2025


On 3/18/25 10:22, Pawel Kochanowski wrote:
> U-Boot currently reserves only 0x3000 bytes when copying the FDT
> in copy_fdt(), which may not be sufficient if additional nodes
> (such as FMAN firmware) are added later.
>
> This patch uses the exisitng SYS_FDT_PAD to reserve space for FDT fixup
> instead of hardcoded value.
>
> This change prevents potential corruption when resizing FDT after
> EFI boot, especially when firmware like FMAN requires additional
> space.
>
> Signed-off-by: Gabriel Nesteruk <gnesteruk at sii.pl>
> Signed-off-by: Pawel Kochanowski <pkochanowski at sii.pl>

Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>

> ---
> Changes since version 1:
> - Removed custom CONFIG_FDT_EXTRA_SPACE in favor of already present SYS_FDT_PAD
> - Use the define also in efi_dt_fixup.c
>
>   lib/efi_loader/efi_dt_fixup.c | 2 +-
>   lib/efi_loader/efi_helper.c   | 2 +-
>   2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/efi_loader/efi_dt_fixup.c b/lib/efi_loader/efi_dt_fixup.c
> index 26928cfc454..544e1aa9808 100644
> --- a/lib/efi_loader/efi_dt_fixup.c
> +++ b/lib/efi_loader/efi_dt_fixup.c
> @@ -168,7 +168,7 @@ efi_dt_fixup(struct efi_dt_fixup_protocol *this, void *dtb,
>   		/* Check size */
>   		required_size = fdt_off_dt_strings(dtb) +
>   				fdt_size_dt_strings(dtb) +
> -				0x3000;
> +				CONFIG_SYS_FDT_PAD;
>   		total_size = fdt_totalsize(dtb);
>   		if (required_size < total_size)
>   			required_size = total_size;
> diff --git a/lib/efi_loader/efi_helper.c b/lib/efi_loader/efi_helper.c
> index 04b2efc4a3b..40e5d31575a 100644
> --- a/lib/efi_loader/efi_helper.c
> +++ b/lib/efi_loader/efi_helper.c
> @@ -477,7 +477,7 @@ static efi_status_t copy_fdt(void **fdtp)
>   	 * needs to be expanded later.
>   	 */
>   	fdt = *fdtp;
> -	fdt_pages = efi_size_in_pages(fdt_totalsize(fdt) + 0x3000);
> +	fdt_pages = efi_size_in_pages(fdt_totalsize(fdt) + CONFIG_SYS_FDT_PAD);
>   	fdt_size = fdt_pages << EFI_PAGE_SHIFT;
>
>   	ret = efi_allocate_pages(EFI_ALLOCATE_ANY_PAGES,



More information about the U-Boot mailing list