@@ -21,14 +21,37 @@ chosen {
stdout-path = "serial0";
};
+ /*
+ * For some reason, the wcnss firmware is not relocatable, so it must be
+ * loaded at 0x8b600000. Unfortunately this overlaps with the memory
+ * region usually used for the modem firmware (0x86800000-0x8b800000).
+ * However, the modem firmware is relocatable, so wcnss is placed at the
+ * fixed address and all other firmware regions are moved to a fitting place.
+ */
reserved-memory {
- /* wcnss.mdt is not relocatable, so it must be loaded at 0x8b600000 */
+ /delete-node/ mpss@86800000;
/delete-node/ wcnss@89300000;
+ /delete-node/ venus@89900000;
wcnss_mem: wcnss@8b600000 {
reg = <0x0 0x8b600000 0x0 0x600000>;
no-map;
};
+
+ venus_mem: venus@8bc00000 {
+ reg = <0x0 0x8bc00000 0x0 0x500000>;
+ no-map;
+ };
+
+ mpss_mem: mpss@8ec00000 {
+ reg = <0x0 0x8ec00000 0x0 0x5000000>;
+ no-map;
+ };
+
+ gps_mem: gps@93c00000 {
+ reg = <0x0 0x93c00000 0x0 0x200000>;
+ no-map;
+ };
};
gpio-keys {
@@ -218,6 +241,10 @@ &blsp1_uart2 {
status = "okay";
};
+&mpss {
+ status = "okay";
+};
+
&pm8916_resin {
status = "okay";
linux,code = <KEY_VOLUMEDOWN>;
@@ -36,11 +36,35 @@ chosen {
};
reserved-memory {
+ /delete-node/ mpss@86800000;
+ /delete-node/ wcnss@89300000;
+ /delete-node/ venus@89900000;
+
/* Additional memory used by Samsung firmware modifications */
tz-apps@85500000 {
reg = <0x0 0x85500000 0x0 0xb00000>;
no-map;
};
+
+ mpss_mem: mpss@86800000 {
+ reg = <0x0 0x86800000 0x0 0x5a00000>;
+ no-map;
+ };
+
+ gps_mem: gps@8c200000 {
+ reg = <0x0 0x8c200000 0x0 0x200000>;
+ no-map;
+ };
+
+ wcnss_mem: wcnss@8c400000 {
+ reg = <0x0 0x8c400000 0x0 0x600000>;
+ no-map;
+ };
+
+ venus_mem: venus@8ca00000 {
+ reg = <0x0 0x8ca00000 0x0 0x500000>;
+ no-map;
+ };
};
gpio-keys {
@@ -263,6 +287,10 @@ &blsp1_uart2 {
status = "okay";
};
+&mpss {
+ status = "okay";
+};
+
&pm8916_resin {
status = "okay";
linux,code = <KEY_VOLUMEDOWN>;
DO NOT APPLY - this is just an example to show the motivation for the patch series. For clarity only some of the device trees are updated. On MSM8916 there are different independent firmware regions, e.g. for the modem (mpss), WiFi/Bluetooth (wcnss) or video acceleration (venus). They need a specific size but the address is relocatable within a certain memory region as long as the necessary alignment is respected. The modem firmware size varies from device to device depending on the available functionality. Right now msm8916.dtsi specifies the firmware sizes for the DragonBoard 410c SBC, which has smaller firmware because the modem firmware only implements GPS but not LTE etc. The modem firmware is much larger on actual smartphones. Unfortunately, changing the modem/mpss reserved memory size requires shifting all following reserved memory regions to new addresses as well, even though the size for the wcnss/venus firmware is the same for all devices. This introduces quite a lot of churn with many magic addresses and room for errors. Only two devices are shown in the example below, but similar diffs would need to be applied to 30+ more similar MSM8916 device trees. Note that msm8916-longcheer-l8150 is a single exception where the wcnss firmware is not relocatable and must be loaded at a specific address. It is included here to show that the dynamic reserved memory allocation in the next patch handles this automatically. Signed-off-by: Stephan Gerhold <stephan@gerhold.net> --- .../boot/dts/qcom/msm8916-longcheer-l8150.dts | 29 +++++++++++++++++++++- .../boot/dts/qcom/msm8916-samsung-serranove.dts | 28 +++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-)