[PATCH 3/3] drm/exynos: remove drm_iommu_attach_device_if_possible

Marek Szyprowski m.szyprowski at samsung.com
Thu Jul 2 07:01:34 PDT 2015


Hello,

On 2015-07-02 14:49, Joonyoung Shim wrote:
> Already drm_iommu_attach_device checks whether support iommu internally.
> It should clear channels always regardless iommu support. We didn't know
> because we can detect the problem when iommu is enabled, so we don't
> have to use drm_iommu_attach_device_if_possible and then we can remove
> drm_iommu_attach_device_if_possible and clear_channels function pointer.
>
> Signed-off-by: Joonyoung Shim <jy0922.shim at samsung.com>

Tested-by: Marek Szyprowski <m.szyprowski at samsung.com>

> ---
>   drivers/gpu/drm/exynos/exynos5433_drm_decon.c |  5 +++--
>   drivers/gpu/drm/exynos/exynos7_drm_decon.c    |  5 +++--
>   drivers/gpu/drm/exynos/exynos_drm_drv.h       |  1 -
>   drivers/gpu/drm/exynos/exynos_drm_fimd.c      |  5 +++--
>   drivers/gpu/drm/exynos/exynos_drm_iommu.c     | 11 -----------
>   drivers/gpu/drm/exynos/exynos_drm_iommu.h     | 11 -----------
>   drivers/gpu/drm/exynos/exynos_mixer.c         |  3 +--
>   7 files changed, 10 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
> index ba43437..b2794f8 100644
> --- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
> +++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
> @@ -463,7 +463,6 @@ static struct exynos_drm_crtc_ops decon_crtc_ops = {
>   	.win_commit		= decon_win_commit,
>   	.win_disable		= decon_win_disable,
>   	.te_handler		= decon_te_irq_handler,
> -	.clear_channels		= decon_clear_channels,
>   };
>   
>   static int decon_bind(struct device *dev, struct device *master, void *data)
> @@ -497,7 +496,9 @@ static int decon_bind(struct device *dev, struct device *master, void *data)
>   		goto err;
>   	}
>   
> -	ret = drm_iommu_attach_device_if_possible(ctx->crtc, drm_dev, dev);
> +	decon_clear_channels(ctx->crtc);
> +
> +	ret = drm_iommu_attach_device(drm_dev, dev);
>   	if (ret)
>   		goto err;
>   
> diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
> index 2c29635..a80b918 100644
> --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c
> +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
> @@ -126,7 +126,9 @@ static int decon_ctx_initialize(struct decon_context *ctx,
>   	ctx->drm_dev = drm_dev;
>   	ctx->pipe = priv->pipe++;
>   
> -	ret = drm_iommu_attach_device_if_possible(ctx->crtc, drm_dev, ctx->dev);
> +	decon_clear_channels(ctx->crtc);
> +
> +	ret = drm_iommu_attach_device(drm_dev, ctx->dev);
>   	if (ret)
>   		priv->pipe--;
>   
> @@ -622,7 +624,6 @@ static const struct exynos_drm_crtc_ops decon_crtc_ops = {
>   	.wait_for_vblank = decon_wait_for_vblank,
>   	.win_commit = decon_win_commit,
>   	.win_disable = decon_win_disable,
> -	.clear_channels = decon_clear_channels,
>   };
>   
>   
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h b/drivers/gpu/drm/exynos/exynos_drm_drv.h
> index dd00f16..7da593f 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_drv.h
> +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h
> @@ -177,7 +177,6 @@ struct exynos_drm_crtc_ops {
>   	void (*win_disable)(struct exynos_drm_crtc *crtc, unsigned int zpos);
>   	void (*te_handler)(struct exynos_drm_crtc *crtc);
>   	void (*clock_enable)(struct exynos_drm_crtc *crtc, bool enable);
> -	void (*clear_channels)(struct exynos_drm_crtc *crtc);
>   };
>   
>   /*
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> index 300730c..8d362b9 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -887,7 +887,6 @@ static const struct exynos_drm_crtc_ops fimd_crtc_ops = {
>   	.win_disable = fimd_win_disable,
>   	.te_handler = fimd_te_handler,
>   	.clock_enable = fimd_dp_clock_enable,
> -	.clear_channels = fimd_clear_channels,
>   };
>   
>   static irqreturn_t fimd_irq_handler(int irq, void *dev_id)
> @@ -957,7 +956,9 @@ static int fimd_bind(struct device *dev, struct device *master, void *data)
>   	if (ctx->display)
>   		exynos_drm_create_enc_conn(drm_dev, ctx->display);
>   
> -	ret = drm_iommu_attach_device_if_possible(ctx->crtc, drm_dev, dev);
> +	fimd_clear_channels(ctx->crtc);
> +
> +	ret = drm_iommu_attach_device(drm_dev, dev);
>   	if (ret)
>   		priv->pipe--;
>   
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_iommu.c b/drivers/gpu/drm/exynos/exynos_drm_iommu.c
> index 4c2ec1b..055e8ec 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_iommu.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_iommu.c
> @@ -142,14 +142,3 @@ void drm_iommu_detach_device(struct drm_device *drm_dev,
>   	iommu_detach_device(mapping->domain, subdrv_dev);
>   	drm_release_iommu_mapping(drm_dev);
>   }
> -
> -int drm_iommu_attach_device_if_possible(struct exynos_drm_crtc *exynos_crtc,
> -			struct drm_device *drm_dev, struct device *subdrv_dev)
> -{
> -	if (is_drm_iommu_supported(drm_dev)) {
> -		if (exynos_crtc->ops->clear_channels)
> -			exynos_crtc->ops->clear_channels(exynos_crtc);
> -	}
> -
> -	return drm_iommu_attach_device(drm_dev, subdrv_dev);
> -}
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_iommu.h b/drivers/gpu/drm/exynos/exynos_drm_iommu.h
> index a90357f..dc1b544 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_iommu.h
> +++ b/drivers/gpu/drm/exynos/exynos_drm_iommu.h
> @@ -34,10 +34,6 @@ static inline bool is_drm_iommu_supported(struct drm_device *drm_dev)
>   	return dev->archdata.mapping ? true : false;
>   }
>   
> -int drm_iommu_attach_device_if_possible(
> -		struct exynos_drm_crtc *exynos_crtc, struct drm_device *drm_dev,
> -		struct device *subdrv_dev);
> -
>   #else
>   
>   static inline int drm_create_iommu_mapping(struct drm_device *drm_dev)
> @@ -65,12 +61,5 @@ static inline bool is_drm_iommu_supported(struct drm_device *drm_dev)
>   	return false;
>   }
>   
> -static inline int drm_iommu_attach_device_if_possible(
> -		struct exynos_drm_crtc *exynos_crtc, struct drm_device *drm_dev,
> -		struct device *subdrv_dev)
> -{
> -	return 0;
> -}
> -
>   #endif
>   #endif
> diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
> index 1a01c48..8c461b1 100644
> --- a/drivers/gpu/drm/exynos/exynos_mixer.c
> +++ b/drivers/gpu/drm/exynos/exynos_mixer.c
> @@ -881,8 +881,7 @@ static int mixer_initialize(struct mixer_context *mixer_ctx,
>   		}
>   	}
>   
> -	ret = drm_iommu_attach_device_if_possible(mixer_ctx->crtc, drm_dev,
> -								mixer_ctx->dev);
> +	ret = drm_iommu_attach_device(drm_dev, mixer_ctx->dev);
>   	if (ret)
>   		priv->pipe--;
>   

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland



More information about the dri-devel mailing list