| 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 |
| |
| |
| @@ -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 |
| |
| |
| @@ -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"); |