On Wed, 14 Jan 2026 at 16:44, Casey Connolly <[email protected]> wrote: > > Hi Balaji, > > No, we aren't adding platform-specific hardcoded memory maps to U-Boot. > Reserved memory should be specified in devicetree and added to the EFI > memory map automatically (Ilias?).
Yes, the reserved memory regions should only be added to the DT. The EFI subsystem will scan that and mark it as EiReserved (efi_carve_out_dt_rsv()). We want to keep the DT and the efi memory mnap in sync Cheers /Ilias > > Kind regards, > > On 07/01/2026 10:14, Balaji Selvanathan wrote: > > Implemented platform-specific reserved memory registration for EFI on > > Qualcomm Snapdragon platforms. This adds SoC-specific memory regions > > to the EFI memory map. > > > > Added qcom_reserved_memory.c with predefined memory regions for QCS615 > > and QCM6490/SC7280 SoCs. The implementation detects the SoC type > > from device tree and registers appropriate memory regions > > via efi_add_memory_map(). > > > > Implemented efi_add_known_memory() in board.c to hook into the EFI > > memory initialization. > > > > Signed-off-by: Balaji Selvanathan <[email protected]> > > --- > > arch/arm/mach-snapdragon/Makefile | 1 + > > arch/arm/mach-snapdragon/board.c | 15 +++ > > arch/arm/mach-snapdragon/qcom-priv.h | 10 ++ > > .../mach-snapdragon/qcom_reserved_memory.c | 114 ++++++++++++++++++ > > 4 files changed, 140 insertions(+) > > create mode 100644 arch/arm/mach-snapdragon/qcom_reserved_memory.c > > > > diff --git a/arch/arm/mach-snapdragon/Makefile > > b/arch/arm/mach-snapdragon/Makefile > > index 343e825c6fd..19820a075e8 100644 > > --- a/arch/arm/mach-snapdragon/Makefile > > +++ b/arch/arm/mach-snapdragon/Makefile > > @@ -4,4 +4,5 @@ > > > > obj-y += board.o > > obj-$(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) += capsule_update.o > > +obj-$(CONFIG_EFI_LOADER) += qcom_reserved_memory.o > > obj-$(CONFIG_OF_LIVE) += of_fixup.o > > diff --git a/arch/arm/mach-snapdragon/board.c > > b/arch/arm/mach-snapdragon/board.c > > index 5fb3240acc5..0259623d382 100644 > > --- a/arch/arm/mach-snapdragon/board.c > > +++ b/arch/arm/mach-snapdragon/board.c > > @@ -709,6 +709,21 @@ static void carve_out_reserved_memory(void) > > } > > } > > > > +#ifdef CONFIG_EFI_LOADER > > +/** > > + * efi_add_known_memory() - Add platform-specific reserved memory to EFI > > map > > + * > > + * This function is called by the EFI memory initialization code to allow > > + * platforms to add their reserved memory regions to the EFI memory map. > > + * For Qualcomm platforms, this delegates to > > qcom_add_reserved_memory_to_efi() > > + * which handles SoC-specific reserved memory regions. > > + */ > > +void efi_add_known_memory(void) > > +{ > > + qcom_add_reserved_memory_to_efi(); > > +} > > +#endif /* CONFIG_EFI_LOADER */ > > + > > /* This function open-codes setup_all_pgtables() so that we can > > * insert additional mappings *before* turning on the MMU. > > */ > > diff --git a/arch/arm/mach-snapdragon/qcom-priv.h > > b/arch/arm/mach-snapdragon/qcom-priv.h > > index b8bf574e8bb..b488516cfdb 100644 > > --- a/arch/arm/mach-snapdragon/qcom-priv.h > > +++ b/arch/arm/mach-snapdragon/qcom-priv.h > > @@ -17,6 +17,16 @@ enum qcom_boot_source { > > > > extern enum qcom_boot_source qcom_boot_source; > > > > +#if IS_ENABLED(CONFIG_EFI_LOADER) > > +/** > > + * qcom_add_reserved_memory_to_efi() - Add Qualcomm SoC reserved memory to > > EFI > > + * > > + * This function detects the SoC type and adds the appropriate reserved > > + * memory regions to the EFI memory map. Called from > > efi_add_known_memory(). > > + */ > > +void qcom_add_reserved_memory_to_efi(void); > > +#endif /* CONFIG_EFI_LOADER */ > > + > > #if IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT) > > void qcom_configure_capsule_updates(void); > > #else > > diff --git a/arch/arm/mach-snapdragon/qcom_reserved_memory.c > > b/arch/arm/mach-snapdragon/qcom_reserved_memory.c > > new file mode 100644 > > index 00000000000..e670f74bc1f > > --- /dev/null > > +++ b/arch/arm/mach-snapdragon/qcom_reserved_memory.c > > @@ -0,0 +1,114 @@ > > +// SPDX-License-Identifier: GPL-2.0-only > > +/* > > + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. > > + */ > > + > > +#include <efi_loader.h> > > +#include <fdt_support.h> > > +#include <log.h> > > +#include <linux/sizes.h> > > +#include <asm/global_data.h> > > +#include "qcom-priv.h" > > + > > +DECLARE_GLOBAL_DATA_PTR; > > + > > +/** > > + * struct reserved_mem_region - Reserved memory region descriptor > > + * @start: Physical start address of the region > > + * @size: Size of the region in bytes > > + * @name: Human-readable name for logging > > + */ > > +struct reserved_mem_region { > > + u64 start; > > + u64 size; > > + const char *name; > > +}; > > + > > +/* QCS615 reserved memory regions */ > > +static const struct reserved_mem_region qcs615_reserved[] = { > > + { 0x80000000, 0x600000, "hyp" }, > > + { 0x85D00000, 0x200000, "boot" }, > > + { 0x85F00000, 0x20000, "aop" }, > > + { 0x85F40000, 0x30000, "xbl_dt" }, > > + { 0x86200000, 0x100000, "tz_stat" }, > > + { 0x86300000, 0x1200000, "tags" }, > > + { 0x87500000, 0x500000, "tz" }, > > + { 0x87A00000, 0x1C00000, "tzapps" }, > > + { 0x8AB00000, 0xCC17000, "pil" }, > > + { 0xA0000000, 0x1600000, "secure_dsp" }, > > +}; > > + > > +/* SC7280/QCM6490 reserved memory regions */ > > +static const struct reserved_mem_region sc7280_reserved[] = { > > + { 0x80600000, 0x100000, "axon_dma" }, > > + { 0x80894000, 0x40000, "xbl_dt" }, > > + { 0x84300000, 0x16B00000, "pil_reserved" }, > > + { 0xE1000000, 0x2400000, "display" }, > > +}; > > + > > +/** > > + * add_soc_reserved_memory() - Add SoC-specific reserved memory to EFI map > > + * @regions: Array of reserved memory regions > > + * @count: Number of regions in the array > > + * @soc_name: SoC name for logging > > + * > > + * This function iterates through the provided reserved memory regions and > > + * adds them to the EFI memory map with type EFI_RESERVED_MEMORY_TYPE. > > + */ > > +static void add_soc_reserved_memory(const struct reserved_mem_region > > *regions, > > + int count, const char *soc_name) > > +{ > > + int i; > > + > > + log_debug("Adding %s reserved memory to EFI map (%d regions)\n", > > + soc_name, count); > > + > > + for (i = 0; i < count; i++) { > > + efi_status_t ret; > > + > > + ret = efi_add_memory_map(regions[i].start, > > + regions[i].size, > > + EFI_RESERVED_MEMORY_TYPE); > > + > > + if (ret != EFI_SUCCESS) { > > + log_err("%s: Failed to reserve %s (0x%llx-0x%llx): > > %lu\n", > > + soc_name, regions[i].name, > > + regions[i].start, > > + regions[i].start + regions[i].size, > > + ret & ~EFI_ERROR_MASK); > > + } else { > > + log_debug("%s: Reserved %s: 0x%llx-0x%llx (%llu > > KB)\n", > > + soc_name, regions[i].name, > > + regions[i].start, > > + regions[i].start + regions[i].size, > > + regions[i].size / 1024); > > + } > > + } > > +} > > + > > +/** > > + * qcom_add_reserved_memory_to_efi() - Add Qualcomm SoC reserved memory to > > EFI > > + * > > + * This function detects the SoC type from the device tree and adds the > > + * appropriate reserved memory regions to the EFI memory map. > > + * > > + * Supported SoCs: > > + * - QCS615 (Talos) > > + * - QCM6490/SC7280 (Kodiak) > > + */ > > +void qcom_add_reserved_memory_to_efi(void) > > +{ > > + /* Detect SoC and add appropriate reserved memory */ > > + if (fdt_node_check_compatible(gd->fdt_blob, 0, "qcom,qcs615") == 0) { > > + add_soc_reserved_memory(qcs615_reserved, > > + ARRAY_SIZE(qcs615_reserved), > > + "QCS615"); > > + } else if (fdt_node_check_compatible(gd->fdt_blob, 0, "qcom,qcm6490") > > == 0 || > > + fdt_node_check_compatible(gd->fdt_blob, 0, "qcom,sc7280") > > == 0) { > > + add_soc_reserved_memory(sc7280_reserved, > > + ARRAY_SIZE(sc7280_reserved), > > + "QCM6490/SC7280"); > > + } else { > > + log_debug("No SoC-specific reserved memory to add\n"); > > + } > > +} > > -- > // Casey (she/her) >

