[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