Merge tag 'pinctrl-v4.20-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[sfrench/cifs-2.6.git] / drivers / gpu / drm / exynos / exynos_drm_iommu.h
index 87f6b5672e1193a1df76bf3c09eb69abfd966e55..797d9ee5f15a75c5aee52966d0145b7023e94574 100644 (file)
@@ -55,37 +55,12 @@ static inline void __exynos_iommu_detach(struct exynos_drm_private *priv,
 static inline int __exynos_iommu_create_mapping(struct exynos_drm_private *priv,
                                        unsigned long start, unsigned long size)
 {
-       struct iommu_domain *domain;
-       int ret;
-
-       domain = iommu_domain_alloc(priv->dma_dev->bus);
-       if (!domain)
-               return -ENOMEM;
-
-       ret = iommu_get_dma_cookie(domain);
-       if (ret)
-               goto free_domain;
-
-       ret = iommu_dma_init_domain(domain, start, size, NULL);
-       if (ret)
-               goto put_cookie;
-
-       priv->mapping = domain;
+       priv->mapping = iommu_get_domain_for_dev(priv->dma_dev);
        return 0;
-
-put_cookie:
-       iommu_put_dma_cookie(domain);
-free_domain:
-       iommu_domain_free(domain);
-       return ret;
 }
 
 static inline void __exynos_iommu_release_mapping(struct exynos_drm_private *priv)
 {
-       struct iommu_domain *domain = priv->mapping;
-
-       iommu_put_dma_cookie(domain);
-       iommu_domain_free(domain);
        priv->mapping = NULL;
 }
 
@@ -94,7 +69,9 @@ static inline int __exynos_iommu_attach(struct exynos_drm_private *priv,
 {
        struct iommu_domain *domain = priv->mapping;
 
-       return iommu_attach_device(domain, dev);
+       if (dev != priv->dma_dev)
+               return iommu_attach_device(domain, dev);
+       return 0;
 }
 
 static inline void __exynos_iommu_detach(struct exynos_drm_private *priv,
@@ -102,7 +79,8 @@ static inline void __exynos_iommu_detach(struct exynos_drm_private *priv,
 {
        struct iommu_domain *domain = priv->mapping;
 
-       iommu_detach_device(domain, dev);
+       if (dev != priv->dma_dev)
+               iommu_detach_device(domain, dev);
 }
 #else
 #error Unsupported architecture and IOMMU/DMA-mapping glue code