aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq40xx/patches-4.14/082-ARM-dts-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch
diff options
context:
space:
mode:
authorJohn Crispin <john@phrozen.org>2018-07-24 14:38:57 +0200
committerJohn Crispin <john@phrozen.org>2018-07-25 12:13:18 +0200
commit95672e04335ea0d7d8f468cec8f63d593cc6ede6 (patch)
treeccd1420a003235f2c495c90f7cbc888d236f979b /target/linux/ipq40xx/patches-4.14/082-ARM-dts-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch
parente8c58e7ddd29df41a26b20e0930292d911f5f788 (diff)
downloadupstream-95672e04335ea0d7d8f468cec8f63d593cc6ede6.tar.gz
upstream-95672e04335ea0d7d8f468cec8f63d593cc6ede6.tar.bz2
upstream-95672e04335ea0d7d8f468cec8f63d593cc6ede6.zip
ipq40xx: use patches that were sent upstream
Signed-off-by: John Crispin <john@phrozen.org>
Diffstat (limited to 'target/linux/ipq40xx/patches-4.14/082-ARM-dts-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch')
-rw-r--r--target/linux/ipq40xx/patches-4.14/082-ARM-dts-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/target/linux/ipq40xx/patches-4.14/082-ARM-dts-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch b/target/linux/ipq40xx/patches-4.14/082-ARM-dts-ipq4019-Add-TZ-and-SMEM-reserved-regions.patch
new file mode 100644
index 0000000000..56ae66b089
--- /dev/null
+++ b/target/linux/ipq40xx/patches-4.14/082-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@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@openmesh.com>
+
+Forwarded: https://patchwork.kernel.org/patch/10347459/
+---
+Cc: Sricharan Ramabadhran <srichara@qti.qualcomm.com>
+Cc: Senthilkumar N L <snlakshm@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@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@87e00000 {
++ reg = <0x87e00000 0x080000>;
++ no-map;
++ };
++
++ tz@87e80000 {
++ reg = <0x87e80000 0x180000>;
++ no-map;
++ };
++ };
++
+ aliases {
+ spi0 = &spi_0;
+ spi1 = &spi_1;