]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
imx9: scmi: Fix SPL trampoline buffer for 1GB DDR
authorYe Li <ye.li@nxp.com>
Thu, 18 Jun 2026 01:17:47 +0000 (09:17 +0800)
committerFabio Estevam <festevam@gmail.com>
Fri, 26 Jun 2026 19:50:55 +0000 (16:50 -0300)
After supporting get DRAM size from SM, the trampoline buffer address
still depends on PHYS_SDRAM_SIZE. If the real DDR size is less than
PHYS_SDRAM_SIZE, the trampoline buffer address is invalid and SPL will
crash. So use board_phys_sdram_size to get real DDR size to calculate
correct address.

Fixes: e1cc7117b630 ("imx9: scmi: Get DDR size through SM SCMI API")
Signed-off-by: Ye Li <ye.li@nxp.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Tested-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
arch/arm/mach-imx/imx9/scmi/soc.c

index fbee435786cd69ae68ffc3a9018c6b7610265d95..1abd987c0817ccd96b8f16f55abd31cd6686c94a 100644 (file)
@@ -985,10 +985,11 @@ enum boot_device get_boot_device(void)
 
 bool arch_check_dst_in_secure(void *start, ulong size)
 {
-       ulong ns_end = CFG_SYS_SDRAM_BASE + PHYS_SDRAM_SIZE;
-#ifdef PHYS_SDRAM_2_SIZE
-       ns_end += PHYS_SDRAM_2_SIZE;
-#endif
+       ulong ns_end;
+       phys_size_t dram_size;
+
+       board_phys_sdram_size(&dram_size);
+       ns_end = CFG_SYS_SDRAM_BASE + dram_size;
 
        if ((ulong)start < CFG_SYS_SDRAM_BASE || (ulong)start + size > ns_end)
                return true;
@@ -998,5 +999,10 @@ bool arch_check_dst_in_secure(void *start, ulong size)
 
 void *arch_get_container_trampoline(void)
 {
-       return (void *)((ulong)CFG_SYS_SDRAM_BASE + PHYS_SDRAM_SIZE - SZ_16M);
+       phys_size_t size;
+
+       board_phys_sdram_size(&size);
+       size = (size > PHYS_SDRAM_SIZE) ? PHYS_SDRAM_SIZE : size;
+
+       return (void *)((ulong)CFG_SYS_SDRAM_BASE + size - SZ_16M);
 }