mach-snapdragon: fix erroneous lmb allocations
authorCasey Connolly <casey.connolly@linaro.org>
Mon, 11 Aug 2025 10:45:13 +0000 (12:45 +0200)
committerCasey Connolly <casey.connolly@linaro.org>
Wed, 13 Aug 2025 13:14:04 +0000 (15:14 +0200)
In commit 6e4675b8e5d8 ("lmb: replace the lmb_alloc() and
lmb_alloc_base() API's") an additional allocation was mistakenly
introduced resulting in ${kernel_comp_size} containing the address of a
second 64mb region rather than the actual value of KERNEL_COMP_SIZE.

Additionally, in commit b40d7b8f72f1 ("Merge patch series "lmb: use
a single API for all allocations"") merge conflict resulted in an
additional 128mb allocation for ${loadaddr} when CONFIG_FASTBOOT
is enabled, where it should actually be set to the same value as
${fastboot_addr_r} to respect size constraints (and since it doesn't
seem to interfer with any bootflows).

Fixup both of these, freeing up 192mb of memory.

Fixes: 6e4675b8e5d8 ("lmb: replace the lmb_alloc() and lmb_alloc_base() API's")
Fixes: b40d7b8f72f1 ("Merge patch series "lmb: use a single API for all allocations"")
Link: https://lore.kernel.org/r/20250811104710.1896382-1-casey.connolly@linaro.org
Signed-off-by: Casey Connolly <casey.connolly@linaro.org>
arch/arm/mach-snapdragon/board.c

index fc921a4..5fb3240 100644 (file)
@@ -534,8 +534,7 @@ int board_late_init(void)
                env_set_hex("ramdisk_addr_r", addr) : 1;
        status |= !lmb_alloc(KERNEL_COMP_SIZE, &addr) ?
                env_set_hex("kernel_comp_addr_r", addr) : 1;
-       status |= !lmb_alloc(KERNEL_COMP_SIZE, &addr) ?
-               env_set_hex("kernel_comp_size", addr) : 1;
+       status |= env_set_hex("kernel_comp_size", KERNEL_COMP_SIZE);
        status |= !lmb_alloc(SZ_4M, &addr) ?
                env_set_hex("scriptaddr", addr) : 1;
        status |= !lmb_alloc(SZ_4M, &addr) ?
@@ -544,9 +543,13 @@ int board_late_init(void)
        if (IS_ENABLED(CONFIG_FASTBOOT)) {
                status |= !lmb_alloc(FASTBOOT_BUF_SIZE, &addr) ?
                        env_set_hex("fastboot_addr_r", addr) : 1;
-               /* override loadaddr for memory rich soc */
-               status |= !lmb_alloc(SZ_128M, &addr) ?
-                       env_set_hex("loadaddr", addr) : 1;
+               /*
+                * Override loadaddr for memory rich soc since ${loadaddr} and
+                * ${kernel_addr_r} need to be different for the Android boot image
+                * flow. It's typically safe for ${loadaddr} to be the same address
+                * as the fastboot buffer.
+                */
+               status |= env_set_hex("loadaddr", addr);
        }
 
        fdt_status |= !lmb_alloc(SZ_2M, &addr) ?