[openwrt/openwrt] ipq40xx: Move reserved-memory DT to qcom-ipq4019.dtsi

LEDE Commits lede-commits at lists.infradead.org
Fri Apr 20 12:02:03 PDT 2018


mkresin pushed a commit to openwrt/openwrt.git, branch master:
https://git.lede-project.org/c4c2a8f00c6ee233d493b124b7771ce1beeda041

commit c4c2a8f00c6ee233d493b124b7771ce1beeda041
Author: Sven Eckelmann <sven.eckelmann at openmesh.com>
AuthorDate: Wed Apr 18 09:48:51 2018 +0200

    ipq40xx: Move reserved-memory DT to qcom-ipq4019.dtsi
    
    The tz and smem reserved-memory information handled in the upstream Linux
    sources by the SoC specific dtsi and not by the the boards dts. Using the
    same approach in OpenWrt avoids unneccessary duplication.
    
    Signed-off-by: Sven Eckelmann <sven.eckelmann at openmesh.com>
---
 .../arch/arm/boot/dts/qcom-ipq4018-a42.dts         | 16 ----
 .../arch/arm/boot/dts/qcom-ipq4018-ex61x0v2.dtsi   | 16 ----
 .../arch/arm/boot/dts/qcom-ipq4018-fritz4040.dts   | 16 ----
 .../arch/arm/boot/dts/qcom-ipq4018-jalapeno.dts    | 16 ----
 .../arch/arm/boot/dts/qcom-ipq4018-rt-ac58u.dts    | 16 ----
 .../arch/arm/boot/dts/qcom-ipq4028-wpj428.dts      | 16 ----
 .../arch/arm/boot/dts/qcom-ipq4029-gl-b1300.dts    | 16 ----
 .../arch/arm/boot/dts/qcom-ipq4029-mr33.dts        | 16 ----
 ...pq4019-ap-dk01.1-c1-add-spi-and-ram-nodes.patch | 18 +----
 ...-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch | 88 ++++++++++++++++++++++
 10 files changed, 89 insertions(+), 145 deletions(-)

diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-a42.dts b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-a42.dts
index 3838f88..20330af 100644
--- a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-a42.dts
+++ b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-a42.dts
@@ -25,22 +25,6 @@
 	model = "OpenMesh A42";
 	compatible = "openmesh,a42", "qcom,ipq4019";
 
-	reserved-memory {
-		#address-cells = <0x1>;
-		#size-cells = <0x1>;
-		ranges;
-
-		smem at 87e00000 {
-			reg = <0x87e00000 0x080000>;
-			no-map;
-		};
-
-		tz at 87e80000 {
-			reg = <0x87e80000 0x180000>;
-			no-map;
-		};
-	};
-
 	soc {
 		mdio at 90000 {
 			status = "okay";
diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-ex61x0v2.dtsi b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-ex61x0v2.dtsi
index 14c1caa..dd0098e 100644
--- a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-ex61x0v2.dtsi
+++ b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-ex61x0v2.dtsi
@@ -25,22 +25,6 @@
 	model = "Netgear EX61X0v2";
 	compatible = "netgear,ex61x0v2", "qcom,ipq4019";
 
-	reserved-memory {
-		#address-cells = <0x1>;
-		#size-cells = <0x1>;
-		ranges;
-
-		smem at 87e00000 {
-			reg = <0x87e00000 0x080000>;
-			no-map;
-		};
-
-		tz at 87e80000 {
-			reg = <0x87e80000 0x180000>;
-			no-map;
-		};
-	};
-
 	soc {
 		mdio at 90000 {
 			status = "okay";
diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-fritz4040.dts b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-fritz4040.dts
index 865e1fb..3768cd8 100644
--- a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-fritz4040.dts
+++ b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-fritz4040.dts
@@ -31,22 +31,6 @@
 		led-upgrade = &flash;
 	};
 
-	reserved-memory {
-		#address-cells = <0x1>;
-		#size-cells = <0x1>;
-		ranges;
-
-		smem at 87e00000 {
-			reg = <0x87e00000 0x080000>;
-			no-map;
-		};
-
-		tz at 87e80000 {
-			reg = <0x87e80000 0x180000>;
-			no-map;
-		};
-	};
-
 	soc {
 		mdio at 90000 {
 			status = "okay";
diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-jalapeno.dts b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-jalapeno.dts
index f9ea31a..ee203b0 100644
--- a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-jalapeno.dts
+++ b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-jalapeno.dts
@@ -25,22 +25,6 @@
 	model = "8devices Jalapeno";
 	compatible = "8dev,jalapeno", "qcom,ipq4019";
 
-	reserved-memory {
-		#address-cells = <0x1>;
-		#size-cells = <0x1>;
-		ranges;
-
-		smem at 87e00000 {
-			reg = <0x87e00000 0x080000>;
-			no-map;
-		};
-
-		tz at 87e80000 {
-			reg = <0x87e80000 0x180000>;
-			no-map;
-		};
-	};
-
 	soc {
 		mdio at 90000 {
 			status = "okay";
diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-rt-ac58u.dts b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-rt-ac58u.dts
index 446da04..e0bb968 100644
--- a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-rt-ac58u.dts
+++ b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4018-rt-ac58u.dts
@@ -36,22 +36,6 @@
 		led-upgrade = &power;
 	};
 
-	reserved-memory {
-		#address-cells = <0x1>;
-		#size-cells = <0x1>;
-		ranges;
-
-		smem at 87e00000 {
-			reg = <0x87e00000 0x080000>;
-			no-map;
-		};
-
-		tz at 87e80000 {
-			reg = <0x87e80000 0x180000>;
-			no-map;
-		};
-	};
-
 	soc {
 		mdio at 90000 {
 			status = "okay";
diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4028-wpj428.dts b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4028-wpj428.dts
index e970e76..f9f0f96 100644
--- a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4028-wpj428.dts
+++ b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4028-wpj428.dts
@@ -26,22 +26,6 @@
 	model = "Compex WPJ428";
 	compatible = "compex,wpj428", "qcom,ipq4019";
 
-	reserved-memory {
-		#address-cells = <0x1>;
-		#size-cells = <0x1>;
-		ranges;
-
-		smem at 87e00000 {
-			reg = <0x87e00000 0x080000>;
-			no-map;
-		};
-
-		tz at 87e80000 {
-			reg = <0x87e80000 0x180000>;
-			no-map;
-		};
-	};
-
 	soc {
 		mdio at 90000 {
 			status = "okay";
diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4029-gl-b1300.dts b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4029-gl-b1300.dts
index a34d2cd..b55d945 100644
--- a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4029-gl-b1300.dts
+++ b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4029-gl-b1300.dts
@@ -35,22 +35,6 @@
 		reg = <0x80000000 0x10000000>;
 	};
 
-	reserved-memory {
-		#address-cells = <0x1>;
-		#size-cells = <0x1>;
-		ranges;
-
-		smem at 87e00000 {
-			reg = <0x87e00000 0x080000>;
-			no-map;
-		};
-
-		tz at 87e80000 {
-			reg = <0x87e80000 0x180000>;
-			no-map;
-		};
-	};
-
 	soc {
 		mdio at 90000 {
 			status = "okay";
diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4029-mr33.dts b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4029-mr33.dts
index c52bcf1..8bbfb0b 100644
--- a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4029-mr33.dts
+++ b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4029-mr33.dts
@@ -34,22 +34,6 @@
 		reg = <0x80000000 0x10000000>;
 	};
 
-	reserved-memory {
-		#address-cells = <0x1>;
-		#size-cells = <0x1>;
-		ranges;
-
-		smem at 87e00000 {
-			reg = <0x87e00000 0x080000>;
-			no-map;
-		};
-
-		tz at 87e80000 {
-			reg = <0x87e80000 0x180000>;
-			no-map;
-		};
-	};
-
 	soc {
 		mdio at 90000 {
 			status = "okay";
diff --git a/target/linux/ipq40xx/patches-4.14/864-07-dts-ipq4019-ap-dk01.1-c1-add-spi-and-ram-nodes.patch b/target/linux/ipq40xx/patches-4.14/864-07-dts-ipq4019-ap-dk01.1-c1-add-spi-and-ram-nodes.patch
index 3043d63..a358a56 100644
--- a/target/linux/ipq40xx/patches-4.14/864-07-dts-ipq4019-ap-dk01.1-c1-add-spi-and-ram-nodes.patch
+++ b/target/linux/ipq40xx/patches-4.14/864-07-dts-ipq4019-ap-dk01.1-c1-add-spi-and-ram-nodes.patch
@@ -1,6 +1,6 @@
 --- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1-c1.dts
 +++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1-c1.dts
-@@ -19,4 +19,87 @@
+@@ -19,4 +19,71 @@
  / {
  	model = "Qualcomm Technologies, Inc. IPQ40xx/AP-DK01.1-C1";
  
@@ -8,22 +8,6 @@
 +		device_type = "memory";
 +		reg = <0x80000000 0x10000000>;
 +	};
-+
-+	reserved-memory {
-+		#address-cells = <0x1>;
-+		#size-cells = <0x1>;
-+		ranges;
-+
-+		smem at 87e00000 {
-+			reg = <0x87e00000 0x080000>;
-+			no-map;
-+		};
-+
-+		tz at 87e80000 {
-+			reg = <0x87e80000 0x180000>;
-+			no-map;
-+		};
-+	};
 +};
 +
 +&spi_0 {
diff --git a/target/linux/ipq40xx/patches-4.14/865-ARM-dts-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch b/target/linux/ipq40xx/patches-4.14/865-ARM-dts-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch
new file mode 100644
index 0000000..56ae66b
--- /dev/null
+++ b/target/linux/ipq40xx/patches-4.14/865-ARM-dts-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch
@@ -0,0 +1,88 @@
+From fc566294610fa49e9d8c31c4ecc9c82f49b11f59 Mon Sep 17 00:00:00 2001
+From: Sven Eckelmann <sven.eckelmann at openmesh.com>
+Date: Wed, 18 Apr 2018 09:10:44 +0200
+Subject: [PATCH] ARM: dts: ipq4019: Add TZ and SMEM reserved regions
+
+The QSEE (trustzone) is started on IPQ4019 before Linux is started.
+According to QCA, it is placed in in the the memory region
+0x87e80000-0x88000000 and must not be accessed directly. There is an
+additional memory region 0x87e00000-0x87E80000 smem which which can be used
+for communication with the TZ. The driver for the latter is not yet ready
+but it is still not allowed to use this memory region like any other
+memory region.
+
+Not reserving this memory region either leads to kernel crashes, kernel
+hangs (often during the boot) or bus errors for userspace programs. The
+latter happens when a program is using a memory region which is mapped to
+these physical memory regions.
+
+  [  571.758058] Unhandled fault: imprecise external abort (0xc06) at 0x01715ff8
+  [  571.758099] pgd = cebec000
+  [  571.763826] [01715ff8] *pgd=8e7fa835, *pte=87e7f75f, *ppte=87e7fc7f
+  Bus error
+
+Signed-off-by: Sven Eckelmann <sven.eckelmann at openmesh.com>
+
+Forwarded: https://patchwork.kernel.org/patch/10347459/
+---
+Cc: Sricharan Ramabadhran <srichara at qti.qualcomm.com>
+Cc: Senthilkumar N L <snlakshm at qti.qualcomm.com>
+
+There are additional memory regions which have to be initialized first by
+Linux. So they are currently not used. We were told by QCA that the
+features QSDK uses them for are:
+
+* crash dump feature
+  - a couple of regions used when 'qca,scm_restart_reason' dt node has the
+    value 'dload_status' not set to 1
+    + apps_bl <0x87000000 0x400000>
+    + sbl <0x87400000 0x100000>
+    + cnss_debug <0x87400000 0x100000>
+    + cpu_context_dump <0x87b00000 0x080000>
+  - required driver not available in Linux
+  - safe to remove
+* QSEE app execution
+  - region tz_apps <0x87b80000 0x280000>
+  - required driver not available in Linux
+  - safe to remove
+* communication with TZ/QSEE
+  - region smem <0x87b80000 0x280000>
+  - driver changes not yet upstreamed
+  - must not be removed because any access can crash kernel/program
+* trustzone (QSEE) private memory
+  - region tz <0x87e80000 0x180000>
+  - must not be removed because any access can crash kernel/program
+
+The problem with the missing regions was reported in 2016 [1]. So maybe
+this change qualifies for a stable at vger.kernel.org submission.
+
+[1] https://www.spinics.net/lists/linux-arm-msm/msg21536.html
+---
+ arch/arm/boot/dts/qcom-ipq4019.dtsi | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
++++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
+@@ -23,6 +23,22 @@
+ 	compatible = "qcom,ipq4019";
+ 	interrupt-parent = <&intc>;
+ 
++	reserved-memory {
++		#address-cells = <0x1>;
++		#size-cells = <0x1>;
++		ranges;
++
++		smem_region: smem at 87e00000 {
++			reg = <0x87e00000 0x080000>;
++			no-map;
++		};
++
++		tz at 87e80000 {
++			reg = <0x87e80000 0x180000>;
++			no-map;
++		};
++	};
++
+ 	aliases {
+ 		spi0 = &spi_0;
+ 		spi1 = &spi_1;



More information about the lede-commits mailing list