[PATCH v2] efi: Make FDT extra space configurable

Ilias Apalodimas ilias.apalodimas at linaro.org
Fri Apr 11 12:00:57 CEST 2025


On Tue, 18 Mar 2025 at 11:23, Pawel Kochanowski <pkochanowski at sii.pl> 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>
> ---
> 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,
> --
> 2.43.0
>

Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>


More information about the U-Boot mailing list