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 <[email protected]> --- This patch is based on changes[1] in Qualcomm U-Boot Custodian Tree [1] https://lore.kernel.org/u-boot/[email protected]/ --- 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

