[PATCH v6 09/11] mach-snapdragon: Add commands to create wrapper ELF
Balaji Selvanathan
balaji.selvanathan at oss.qualcomm.com
Sun Jun 28 15:12:26 CEST 2026
Hi Varada,
On 6/23/2026 12:18 PM, Varadarajan Narayanan wrote:
> The IPQ5210 boot ROM expects the SPL binary image to be embedded within
> an ELF along with additional binaries. Hence add the relevant commands
> and linker script needed to convert u-boot-spl.bin to the expected
> format.
>
> Signed-off-by: Varadarajan Narayanan <varadarajan.narayanan at oss.qualcomm.com>
Reviewed-by: Balaji Selvanathan <balaji.selvanathan at oss.qualcomm.com>
Regards,
Balaji
> ---
> v4: Use $(obj) for u-boot-spl.wrap-elf
>
> v3: s/a image/an image/
> Add SPDX header to linker script
> Pre-process linker script to use IMAGE_TEXT_BASE instead of hard coding it
> ---
> arch/arm/mach-snapdragon/Kconfig | 7 ++++++
> .../mach-snapdragon/ipq5210-spl-wrap-elf.lds | 18 ++++++++++++++
> scripts/Makefile.xpl | 24 +++++++++++++++++++
> 3 files changed, 49 insertions(+)
> create mode 100644 arch/arm/mach-snapdragon/ipq5210-spl-wrap-elf.lds
>
> diff --git a/arch/arm/mach-snapdragon/Kconfig b/arch/arm/mach-snapdragon/Kconfig
> index d3de8693b5a..d94cb6206e8 100644
> --- a/arch/arm/mach-snapdragon/Kconfig
> +++ b/arch/arm/mach-snapdragon/Kconfig
> @@ -42,4 +42,11 @@ config SYS_CONFIG_NAME
> Based on this option include/configs/<CONFIG_SYS_CONFIG_NAME>.h header
> will be used for board configuration.
>
> +config SPL_WRAPPER_ELF
> + bool "Create wrapper ELF for applicable platforms"
> + depends on SPL
> + help
> + Some platforms embed the U-Boot SPL binary within an ELF as a segment.
> + Additional tools are used to convert this ELF into an image that is
> + usable for the boot ROM.
> endif
> diff --git a/arch/arm/mach-snapdragon/ipq5210-spl-wrap-elf.lds b/arch/arm/mach-snapdragon/ipq5210-spl-wrap-elf.lds
> new file mode 100644
> index 00000000000..5a582e65ca0
> --- /dev/null
> +++ b/arch/arm/mach-snapdragon/ipq5210-spl-wrap-elf.lds
> @@ -0,0 +1,18 @@
> +/*
> + * SPDX-License-Identifier: GPL-2.0
> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
> + */
> +PHDRS {
> + ptype PT_LOAD FLAGS(0x7);
> +}
> +
> +ENTRY(_entry)
> +
> +SECTIONS {
> + . = IMAGE_TEXT_BASE;
> + _entry = . ;
> + data : {
> + *(.data)
> + . = ALIGN(4);
> + } :ptype
> +}
> diff --git a/scripts/Makefile.xpl b/scripts/Makefile.xpl
> index a3fd3e1375f..6e9f24b748a 100644
> --- a/scripts/Makefile.xpl
> +++ b/scripts/Makefile.xpl
> @@ -256,6 +256,26 @@ MKIMAGEFLAGS_boot.bin = -T zynqmpimage -R $(srctree)/$(CONFIG_BOOT_INIT_FILE) \
> -n "$(shell cd $(srctree); readlink -f $(CONFIG_PMUFW_INIT_FILE))"
> endif
>
> +ifeq ($(CONFIG_SPL_WRAPPER_ELF),y)
> +# Convert ELF to object file
> +OBJCOPYFLAGS_$(SPL_BIN).bin.o = -I binary -O elf64-littleaarch64
> +
> +# Wrap the object file inside a ELF
> +QCOM_SPL_SOC = $(shell echo $(notdir "$(CONFIG_DEFAULT_DEVICE_TREE)") | cut -f1 -d-)
> +QCOM_SPL_WRAP_LDS = $(srctree)/arch/arm/mach-snapdragon/$(QCOM_SPL_SOC)-spl-wrap-elf.lds
> +LDFLAGS_$(SPL_BIN).wrap-elf = -T $(obj)/$(SPL_BIN).wrap-elf.lds
> +
> +$(obj)/$(SPL_BIN).wrap-elf.lds: $(QCOM_SPL_WRAP_LDS) FORCE
> + $(call if_changed_dep,cpp_lds)
> +
> +$(obj)/$(SPL_BIN).bin.o: $(obj)/$(SPL_BIN).bin $(obj)/$(SPL_BIN).wrap-elf.lds FORCE
> + $(call if_changed,objcopy)
> +
> +$(obj)/$(SPL_BIN).wrap-elf: $(obj)/$(SPL_BIN).bin.o FORCE
> + $(call if_changed,ld)
> +
> +endif
> +
> $(obj)/$(SPL_BIN)-align.bin: $(obj)/$(SPL_BIN).bin
> @dd if=$< of=$@ conv=sync bs=4 2>/dev/null;
>
> @@ -302,6 +322,10 @@ INPUTS-$(CONFIG_ARCH_ZYNQMP) += $(obj)/boot.bin
>
> INPUTS-$(CONFIG_ARCH_MEDIATEK) += $(obj)/u-boot-spl-mtk.bin
>
> +ifeq ($(CONFIG_ARCH_SNAPDRAGON),y)
> +INPUTS-$(CONFIG_SPL_WRAPPER_ELF) += $(obj)/u-boot-spl.wrap-elf
> +endif
> +
> all: $(INPUTS-y)
>
> quiet_cmd_cat = CAT $@
More information about the U-Boot
mailing list