summaryrefslogtreecommitdiffstats
path: root/arm-tegra-fix-gpu-iommu.patch
diff options
context:
space:
mode:
authorJustin M. Forbes <jforbes@fedoraproject.org>2017-07-24 16:25:32 -0500
committerJustin M. Forbes <jforbes@fedoraproject.org>2017-07-24 16:25:32 -0500
commit3ff7c261fbea5db34bb9a494c82e0252f3d03c01 (patch)
tree63b819dd4bba6cc2dde96072e57dcb7832060a8f /arm-tegra-fix-gpu-iommu.patch
parent884e6796ebde5335d93ffec1fb63d7fed736df57 (diff)
downloadkernel-3ff7c261fbea5db34bb9a494c82e0252f3d03c01.tar.gz
kernel-3ff7c261fbea5db34bb9a494c82e0252f3d03c01.tar.xz
kernel-3ff7c261fbea5db34bb9a494c82e0252f3d03c01.zip
Linux v4.12.3
Diffstat (limited to 'arm-tegra-fix-gpu-iommu.patch')
-rw-r--r--arm-tegra-fix-gpu-iommu.patch95
1 files changed, 95 insertions, 0 deletions
diff --git a/arm-tegra-fix-gpu-iommu.patch b/arm-tegra-fix-gpu-iommu.patch
new file mode 100644
index 000000000..8d2809b46
--- /dev/null
+++ b/arm-tegra-fix-gpu-iommu.patch
@@ -0,0 +1,95 @@
+From patchwork Sun Jul 9 16:36:14 2017
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: ARM: tegra: Register host1x node with iommu binding on tegra124
+From: Paul Kocialkowski <contact@paulk.fr>
+X-Patchwork-Id: 9831825
+Message-Id: <20170709163614.6746-1-contact@paulk.fr>
+To: linux-arm-kernel@lists.infradead.org, linux-tegra@vger.kernel.org,
+ linux-kernel@vger.kernel.org
+Cc: Thierry Reding <thierry.reding@gmail.com>,
+ Stephen Warren <swarren@wwwdotorg.org>,
+ Mikko Perttunen <mperttunen@nvidia.com>,
+ Paul Kocialkowski <contact@paulk.fr>,
+ Jonathan Hunter <jonathanh@nvidia.com>
+Date: Sun, 9 Jul 2017 19:36:14 +0300
+
+This registers the host1x node with the SMMU (as HC swgroup) to allow
+the host1x code to attach to it. It avoid failing the probe sequence,
+which resulted in the tegra drm driver not probing and thus nothing
+being displayed on-screen.
+
+Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
+---
+ arch/arm/boot/dts/tegra124.dtsi | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/boot/dts/tegra124.dtsi b/arch/arm/boot/dts/tegra124.dtsi
+index 187a36c6d0fc..b3b89befffeb 100644
+--- a/arch/arm/boot/dts/tegra124.dtsi
++++ b/arch/arm/boot/dts/tegra124.dtsi
+@@ -85,6 +85,7 @@
+ clocks = <&tegra_car TEGRA124_CLK_HOST1X>;
+ resets = <&tegra_car 28>;
+ reset-names = "host1x";
++ iommus = <&mc TEGRA_SWGROUP_HC>;
+
+ #address-cells = <2>;
+ #size-cells = <2>;
+From patchwork Mon Jul 10 19:33:05 2017
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: gpu: host1x: Free the IOMMU domain when there is no device to attach
+From: Paul Kocialkowski <contact@paulk.fr>
+X-Patchwork-Id: 9833721
+Message-Id: <20170710193305.5987-1-contact@paulk.fr>
+To: linux-arm-kernel@lists.infradead.org, linux-tegra@vger.kernel.org,
+ linux-kernel@vger.kernel.org
+Cc: Thierry Reding <thierry.reding@gmail.com>,
+ Stephen Warren <swarren@wwwdotorg.org>,
+ Mikko Perttunen <mperttunen@nvidia.com>,
+ Paul Kocialkowski <contact@paulk.fr>,
+ Jonathan Hunter <jonathanh@nvidia.com>
+Date: Mon, 10 Jul 2017 21:33:05 +0200
+
+When there is no device to attach to the IOMMU domain, as may be the
+case when the device-tree does not contain the proper iommu node, it is
+best to keep going without IOMMU support rather than failing.
+This allows the driver to probe and function instead of taking down
+all of the tegra drm driver, leading to missing display support.
+
+Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
+Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com>
+---
+ drivers/gpu/host1x/dev.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c
+index ac65f52850a6..f296738d0de8 100644
+--- a/drivers/gpu/host1x/dev.c
++++ b/drivers/gpu/host1x/dev.c
+@@ -186,8 +186,13 @@ static int host1x_probe(struct platform_device *pdev)
+ return -ENOMEM;
+
+ err = iommu_attach_device(host->domain, &pdev->dev);
+- if (err)
++ if (err == -ENODEV) {
++ iommu_domain_free(host->domain);
++ host->domain = NULL;
++ goto iommu_skip;
++ } else if (err) {
+ goto fail_free_domain;
++ }
+
+ geometry = &host->domain->geometry;
+
+@@ -198,6 +203,7 @@ static int host1x_probe(struct platform_device *pdev)
+ host->iova_end = geometry->aperture_end;
+ }
+
++iommu_skip:
+ err = host1x_channel_list_init(host);
+ if (err) {
+ dev_err(&pdev->dev, "failed to initialize channel list\n");