Skip to content

Commit

Permalink
Merge tag 'exynos-drm-fixes-for-v4.19-rc7' of git://git.kernel.org/pu…
Browse files Browse the repository at this point in the history
…b/scm/linux/kernel/git/daeinki/drm-exynos into drm-fixes

Use default iommu domain instead of fake one
- This patch makes it to reuse default IOMMU domain instead of
  allocating a fake IOMMU domain, and allows some design changes
  for enhancement of IOMMU framework[1] without breaking Exynos DRM.

[1] https://www.spinics.net/lists/arm-kernel/msg676098.html

Signed-off-by: Dave Airlie <[email protected]>

From: Inki Dae <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
  • Loading branch information
airlied committed Oct 3, 2018
2 parents 17b57b1 + 1feda5e commit 77d981b
Showing 1 changed file with 6 additions and 28 deletions.
34 changes: 6 additions & 28 deletions drivers/gpu/drm/exynos/exynos_drm_iommu.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -94,15 +69,18 @@ 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,
struct device *dev)
{
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
Expand Down

0 comments on commit 77d981b

Please sign in to comment.