arm64: dts: qcom: msm8916: Reserve MBA memory dynamically
authorStephan Gerhold <stephan@gerhold.net>
Mon, 11 Sep 2023 17:41:47 +0000 (19:41 +0200)
committerBjorn Andersson <andersson@kernel.org>
Wed, 20 Sep 2023 16:27:44 +0000 (09:27 -0700)
At a first glance the MBA memory region on MSM8916 looks intentionally
placed at the fixed address 0x8ea00000. This is what the ELF headers of
the firmware specify as base address, and the typical Qualcomm-specific
bits suggest the binary is not relocatable.

However, on a closer look this is pointless: Unlike other firmware
images the hardware expects to have the raw ELF image loaded to the MBA
region, including the ELF header (without parsing it at all). This
means that we actually just load the ELF header (not the code!) at
0x8ea00000. The real LOAD segments follow at arbitrary aligned
addresses depending on the structure of the ELF binary.

In practice it looks like we can use an arbitrary 1 MiB-aligned region
for MBA. The downstream/vendor kernel just allocates this dynamically
at an arbitrary (aligned) address.

Drop the pointless fixed address and use the new dynamic reserved
memory mechanism to allocate a region close to the others. This reduces
gaps in the memory map and provides Linux with more contiguous memory.

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Link: https://lore.kernel.org/r/20230911-msm8916-rmem-v1-5-b7089ec3e3a1@gerhold.net
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
arch/arm64/boot/dts/qcom/msm8916.dtsi

index 840ae8a1987725a8e3dc548ae525d22122b3de19..018e662aebe6d0300ab186f5d3389d12b9662f6e 100644 (file)
                        no-map;
                };
 
-               mba_mem: mba@8ea00000 {
+               mba_mem: mba {
+                       size = <0x0 0x100000>;
+                       alignment = <0x0 0x100000>;
+                       alloc-ranges = <0x0 0x86800000 0x0 0x8000000>;
                        no-map;
-                       reg = <0 0x8ea00000 0 0x100000>;
                };
        };