On Mon, May 04, 2026 at 08:57:41PM +0200, Casey Connolly wrote:
> It is possible to derive the memory map for a Qualcomm platform from the
> SMEM shared memory region. The memory map is populated by the preloader.
> 
> Introduce support for parsing this data and using it to populate
> U-Boot's memory map. Since we aren't yet sure if this will work for
> every platform, it is not yet used in all cases, if U-Boot is booted
> with an internal FDT which has the memory map defined, this will
> be used instead.
> 
> If the FDT is internal FDT with no memory map defined, then U-Boot will
> try to use SMEM. This should remove the need to define the memory map
> statically in a U-Boot overlay for boards that don't chainload.
> 
> Signed-off-by: Casey Connolly <[email protected]>

Thanks a lot for working on this!

On DragonBoard 410c with (qcom_)dragonboard410c_defconfig:

        $ make qcom_dragonboard410c_defconfig
          HOSTCC  scripts/basic/fixdep
          GEN     Makefile
          HOSTCC  scripts/kconfig/conf.o
          YACC    scripts/kconfig/zconf.tab.[ch]
          LEX     scripts/kconfig/zconf.lex.c
          HOSTCC  scripts/kconfig/zconf.tab.o
          HOSTLD  scripts/kconfig/conf

        WARNING: unmet direct dependencies detected for QCOM_SMEM
          Depends on [n]: SOC_QCOM [=n]
          Selected by [y]:
          - ARCH_SNAPDRAGON [=y] && <choice>

        WARNING: unmet direct dependencies detected for QCOM_SMEM
          Depends on [n]: SOC_QCOM [=n]
          Selected by [y]:
          - ARCH_SNAPDRAGON [=y] && <choice>

I added CONFIG_SOC_QCOM=y in (qcom_)dragonboard410c_defconfig to
workaround this, but we probably should select SOC_QCOM for
ARCH_SNAPDRAGON to fix this properly.

Then:

        $ make
        aarch64-linux-gnu-ld: arch/arm/mach-snapdragon/dram.o: in function 
`qcom_configure_capsule_updates':
        arch/arm/mach-snapdragon/qcom-priv.h:38: multiple definition of 
`qcom_configure_capsule_updates';
        
arch/arm/mach-snapdragon/board.o:arch/arm/mach-snapdragon/qcom-priv.h:38: first 
defined here

I added:

diff --git a/arch/arm/mach-snapdragon/qcom-priv.h 
b/arch/arm/mach-snapdragon/qcom-priv.h
index 39dc8fcc76a..27e5c54e512 100644
--- a/arch/arm/mach-snapdragon/qcom-priv.h
+++ b/arch/arm/mach-snapdragon/qcom-priv.h
@@ -35,7 +35,7 @@ extern enum qcom_memmap_source qcom_memmap_source;
 #if IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)
 void qcom_configure_capsule_updates(void);
 #else
-void qcom_configure_capsule_updates(void) {}
+static inline void qcom_configure_capsule_updates(void) {}
 #endif /* EFI_HAVE_CAPSULE_SUPPORT */

With that fixed:

U-Boot 2026.07-rc2-...
Qualcomm-DragonBoard 410C

DRAM:  1 GiB
...
U-Boot loaded from XBL
Memory map loaded from INTERNAL_FDT

Then I removed the /memory map in the internal FDT (delete
arch/arm/dts/apq8016-sbc-u-boot.dtsi), and it detects the correct 2 GiB
RAM on this board!

U-Boot 2026.07-rc2-...
Qualcomm-DragonBoard 410C

DRAM:  2 GiB
...
U-Boot loaded from XBL
Memory map loaded from SMEM

So feel free to add my Tested-by: # db410c if you fix the errors
mentioned above (also feel free to include a patch to delete
arch/arm/dts/apq8016-sbc-u-boot.dtsi, or I can do this myself later once
your series lands).

Thanks!
Stephan

Reply via email to