drm/msm: Stop using iommu_present()
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Thu, 16 Jun 2022 08:11:04 +0000 (11:11 +0300)
committerRob Clark <robdclark@chromium.org>
Thu, 7 Jul 2022 01:54:13 +0000 (18:54 -0700)
Even if some IOMMU has registered itself on the platform "bus", that
doesn't necessarily mean it provides translation for the device we
care about. Replace iommu_present() with a more appropriate check.

On Qualcomm platforms the IOMMU can be specified either for the MDP/DPU
device or for its parent MDSS device depending on the actual platform.
Check both of them, since that is how both DPU and MDP5 drivers work.

Co-developed-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/489699/
Link: https://lore.kernel.org/r/20220616081106.350262-4-dmitry.baryshkov@linaro.org
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/msm_drv.c

index 57a66093e67111b69c509b6a384cf913eabf0b36..df0df55d26f9276b7e0e69f52b72bcf48a4c2262 100644 (file)
@@ -271,8 +271,14 @@ bool msm_use_mmu(struct drm_device *dev)
 {
        struct msm_drm_private *priv = dev->dev_private;
 
-       /* a2xx comes with its own MMU */
-       return priv->is_a2xx || iommu_present(&platform_bus_type);
+       /*
+        * a2xx comes with its own MMU
+        * On other platforms IOMMU can be declared specified either for the
+        * MDP/DPU device or for its parent, MDSS device.
+        */
+       return priv->is_a2xx ||
+               device_iommu_mapped(dev->dev) ||
+               device_iommu_mapped(dev->dev->parent);
 }
 
 static int msm_init_vram(struct drm_device *dev)