From: Stephan Gerhold <stephan@gerhold.net>
To: Bjorn Andersson <andersson@kernel.org>
Cc: Andy Gross <agross@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
Stephan Gerhold <stephan@gerhold.net>
Subject: [PATCH 4/9] arm64: dts: qcom: msm8916: Reserve firmware memory dynamically
Date: Mon, 11 Sep 2023 19:41:46 +0200 [thread overview]
Message-ID: <20230911-msm8916-rmem-v1-4-b7089ec3e3a1@gerhold.net> (raw)
In-Reply-To: <20230911-msm8916-rmem-v1-0-b7089ec3e3a1@gerhold.net>
Most of the reserved firmware memory on MSM8916 can be relocated when
respecting the required alignment. To avoid having to precompute the
reserved memory regions in every board DT, describe the actual
requirements (size, alignment, alloc-ranges) using the dynamic reserved
memory allocation.
This approach has several advantages:
1. We can define "templates" for the reserved memory regions in
msm8916.dtsi and keep only device-specific details in the board DT.
This is useful for the "mpss" region size for example, which varies
from device to device. It is no longer necessary to redefine all
firmware regions to shift their addresses.
2. When some of the functionality (e.g. WCNSS, Modem, Venus) is not
enabled or needed for a device, the reserved memory can stay
disabled, freeing up the unused reservation for Linux.
3. Devices with special requirements for one of the firmware regions
are handled automatically. For example, msm8916-longcheer-l8150
has non-relocatable "wcnss" firmware that must be loaded exactly
at address 0x8b600000. When this is defined as a static region,
the other dynamic allocations automatically adjust to a different
place with suitable alignment.
All in all this approach significantly reduces the boilerplate necessary
to define the different firmware regions, and makes it easier to enable
functionality on the different devices.
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
---
.../boot/dts/qcom/msm8916-longcheer-l8150.dts | 9 +++++++--
arch/arm64/boot/dts/qcom/msm8916-ufi.dtsi | 11 ++++-------
arch/arm64/boot/dts/qcom/msm8916.dtsi | 22 ++++++++++++++++++----
3 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
index a0bb8de54fb6..503155aefa55 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
+++ b/arch/arm64/boot/dts/qcom/msm8916-longcheer-l8150.dts
@@ -23,9 +23,14 @@ chosen {
stdout-path = "serial0";
};
+ /*
+ * For some reason, the signed wcnss firmware is not relocatable.
+ * It must be loaded at 0x8b600000. All other firmware is relocatable,
+ * so place wcnss at the fixed address and then all other firmware
+ * regions will be automatically allocated at a fitting place.
+ */
reserved-memory {
- /* wcnss.mdt is not relocatable, so it must be loaded at 0x8b600000 */
- /delete-node/ wcnss@89300000;
+ /delete-node/ wcnss;
wcnss_mem: wcnss@8b600000 {
reg = <0x0 0x8b600000 0x0 0x600000>;
diff --git a/arch/arm64/boot/dts/qcom/msm8916-ufi.dtsi b/arch/arm64/boot/dts/qcom/msm8916-ufi.dtsi
index 69f268db4df9..1d92c2e57216 100644
--- a/arch/arm64/boot/dts/qcom/msm8916-ufi.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916-ufi.dtsi
@@ -17,13 +17,6 @@ chosen {
stdout-path = "serial0";
};
- reserved-memory {
- mpss_mem: mpss@86800000 {
- reg = <0x0 0x86800000 0x0 0x5500000>;
- no-map;
- };
- };
-
gpio-keys {
compatible = "gpio-keys";
@@ -91,6 +84,10 @@ &mpss {
status = "okay";
};
+&mpss_mem {
+ reg = <0x0 0x86800000 0x0 0x5500000>;
+};
+
&pm8916_usbin {
status = "okay";
};
diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
index 0257cbbb4971..c237f3e48c86 100644
--- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
@@ -74,17 +74,31 @@ rfsa@867e0000 {
};
mpss_mem: mpss@86800000 {
+ /*
+ * The memory region for the mpss firmware is generally
+ * relocatable and could be allocated dynamically.
+ * However, many firmware versions tend to fail when
+ * loaded to some special addresses, so it is hard to
+ * define reliable alloc-ranges.
+ *
+ * alignment = <0x0 0x400000>;
+ * alloc-ranges = <0x0 0x86800000 0x0 0x8000000>;
+ */
reg = <0x0 0x86800000 0x0 0x2b00000>;
no-map;
};
- wcnss_mem: wcnss@89300000 {
- reg = <0x0 0x89300000 0x0 0x600000>;
+ wcnss_mem: wcnss {
+ size = <0x0 0x600000>;
+ alignment = <0x0 0x100000>;
+ alloc-ranges = <0x0 0x86800000 0x0 0x8000000>;
no-map;
};
- venus_mem: venus@89900000 {
- reg = <0x0 0x89900000 0x0 0x600000>;
+ venus_mem: venus {
+ size = <0x0 0x600000>;
+ alignment = <0x0 0x100000>;
+ alloc-ranges = <0x0 0x86800000 0x0 0x8000000>;
no-map;
};
--
2.42.0
next prev parent reply other threads:[~2023-09-11 20:50 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-11 17:41 [PATCH 0/9] arm64: dts: qcom: msm8916/39: Reserve firmware memory dynamically Stephan Gerhold
2023-09-11 17:41 ` [PATCH 1/9] arm64: dts: qcom: msm8916: Disable venus by default Stephan Gerhold
2023-09-12 6:34 ` Bryan O'Donoghue
2023-09-11 17:41 ` [PATCH 2/9] arm64: dts: qcom: msm8916/39: Disable GPU " Stephan Gerhold
2023-09-12 6:35 ` Bryan O'Donoghue
2023-09-12 7:45 ` Konrad Dybcio
2023-09-11 17:41 ` [PATCH 3/9] arm64: dts: qcom: msm8916-ufi: Drop gps_mem for now Stephan Gerhold
2023-09-12 6:36 ` Bryan O'Donoghue
2023-09-12 7:42 ` Stephan Gerhold
2023-09-11 17:41 ` Stephan Gerhold [this message]
2023-09-13 9:06 ` [PATCH 4/9] arm64: dts: qcom: msm8916: Reserve firmware memory dynamically Konrad Dybcio
2023-09-13 9:12 ` Bryan O'Donoghue
2023-09-13 10:14 ` Stephan Gerhold
2023-09-13 19:39 ` Konrad Dybcio
2023-09-14 14:09 ` Stephan Gerhold
2023-09-15 13:52 ` Konrad Dybcio
2023-09-15 14:00 ` Stephan Gerhold
2023-09-11 17:41 ` [PATCH 5/9] arm64: dts: qcom: msm8916: Reserve MBA " Stephan Gerhold
2023-09-13 8:59 ` Konrad Dybcio
2023-09-11 17:41 ` [PATCH 6/9] arm64: dts: qcom: msm8939: Reserve firmware " Stephan Gerhold
2023-09-11 17:41 ` [PATCH 7/9] arm64: dts: qcom: msm8916/39: Disable unneeded firmware reservations Stephan Gerhold
2023-09-15 13:51 ` Konrad Dybcio
2023-09-15 14:02 ` Stephan Gerhold
2023-09-11 17:41 ` [PATCH 8/9] arm64: dts: qcom: msm8916/39: Move mpss_mem size to boards Stephan Gerhold
2023-09-15 13:51 ` Konrad Dybcio
2023-09-15 14:03 ` Stephan Gerhold
2023-09-11 17:41 ` [PATCH 9/9] arm64: dts: qcom: msm8916/39: Fix venus memory size Stephan Gerhold
2023-09-12 7:50 ` Konrad Dybcio
2023-09-20 17:14 ` [PATCH 0/9] arm64: dts: qcom: msm8916/39: Reserve firmware memory dynamically Bjorn Andersson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230911-msm8916-rmem-v1-4-b7089ec3e3a1@gerhold.net \
--to=stephan@gerhold.net \
--cc=agross@kernel.org \
--cc=andersson@kernel.org \
--cc=bryan.odonoghue@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=konrad.dybcio@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).