Message ID | 20230911-msm8916-rmem-v1-5-b7089ec3e3a1@gerhold.net (mailing list archive) |
---|---|
State | Accepted |
Commit | b4f3a410061bf5a8cc148c9435479da580abf85b |
Headers | show |
Series | arm64: dts: qcom: msm8916/39: Reserve firmware memory dynamically | expand |
On 11.09.2023 19:41, Stephan Gerhold wrote: > 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> Konrad
diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi index c237f3e48c86..38f6c8ea605a 100644 --- a/arch/arm64/boot/dts/qcom/msm8916.dtsi +++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi @@ -102,9 +102,11 @@ venus_mem: venus { 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>; }; };
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> --- arch/arm64/boot/dts/qcom/msm8916.dtsi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)