Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77d981b1 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'exynos-drm-fixes-for-v4.19-rc7' of...

Merge tag 'exynos-drm-fixes-for-v4.19-rc7' of git://git.kernel.org/pub/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: default avatarDave Airlie <airlied@redhat.com>

From: Inki Dae <inki.dae@samsung.com>
Link: https://patchwork.freedesktop.org/patch/msgid/1538360696-23579-1-git-send-email-inki.dae@samsung.com
parents 17b57b18 1feda5eb
Loading
Loading
Loading
Loading
+6 −28
Original line number Diff line number Diff line
@@ -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;

	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,6 +79,7 @@ static inline void __exynos_iommu_detach(struct exynos_drm_private *priv,
{
	struct iommu_domain *domain = priv->mapping;

	if (dev != priv->dma_dev)
		iommu_detach_device(domain, dev);
}
#else