[PATCH] mach-snapdragon: smem: Use available_length for RAM partition v2+

Aswin Murugan aswin.murugan at oss.qualcomm.com
Mon Jul 13 18:35:04 CEST 2026


Using length field exposes dynamic carveout regions to kernel, causing
crashes when accessing these reserved memory areas. Subsystems like
hypervisor perform runtime carveouts & records it in SMEM.

RAM partition table v2+ includes available_length field which reflects
memory available after these dynamic carveouts, while length field
represents total partition size. Switch to available_length for v2+
to exclude runtime carveout regions.

Signed-off-by: Aswin Murugan <aswin.murugan at oss.qualcomm.com>
---
This patch is based on changes[1] in Qualcomm U-Boot Custodian Tree
[1] https://lore.kernel.org/u-boot/20260618-b4-modernise-smem-v3-0-472391477988@linaro.org/
---
 arch/arm/mach-snapdragon/dram.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arm/mach-snapdragon/dram.c b/arch/arm/mach-snapdragon/dram.c
index 0b97b698322..914ee6cd4ff 100644
--- a/arch/arm/mach-snapdragon/dram.c
+++ b/arch/arm/mach-snapdragon/dram.c
@@ -70,7 +70,8 @@ int dram_init_banksize(void)
 				 (v == 1 ? ((struct ram_partition_entry_v1 *)(e))->field : \
 				  ((struct ram_partition_entry_v3 *)(e))->field))
 #define entry_start(v, e) entry_field(v, e, start_address)
-#define entry_length(v, e) entry_field(v, e, length)
+#define entry_length(v, e) (v > 1 ? ((struct ram_partition_entry_v3 *)(e))->available_length : \
+                            entry_field(v, e, length))
 #define entry_category(v, e) entry_field(v, e, partition_category)
 #define entry_domain(v, e) entry_field(v, e, partition_domain)
 #define entry_type(v, e) entry_field(v, e, partition_type)
-- 
2.34.1



More information about the U-Boot mailing list