drm/exynos: remove drm_iommu_attach_device_if_possible
authorJoonyoung Shim <jy0922.shim@samsung.com>
Thu, 2 Jul 2015 12:49:39 +0000 (21:49 +0900)
committerInki Dae <inki.dae@samsung.com>
Sun, 16 Aug 2015 01:23:33 +0000 (10:23 +0900)
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@samsung.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos5433_drm_decon.c
drivers/gpu/drm/exynos/exynos7_drm_decon.c
drivers/gpu/drm/exynos/exynos_drm_drv.h
drivers/gpu/drm/exynos/exynos_drm_fimd.c
drivers/gpu/drm/exynos/exynos_drm_iommu.c
drivers/gpu/drm/exynos/exynos_drm_iommu.h
drivers/gpu/drm/exynos/exynos_mixer.c

index ba43437014cebc3ee4ef15d09e92a39a4d94e78e..b2794f815b3c466f4ceef28f3ad606fa564caf30 100644 (file)
@@ -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;
 
index 2c296353c9c393c758b08dc9b621a17b1462eb1e..a80b9184c86619178f828136dd75d18dabc93c61 100644 (file)
@@ -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,
 };
 
 
index dd00f160c1e58c9563341a5736d5d19d07932da7..7da593fd081f4904aeeb2c9a123d7f3c7923e031 100644 (file)
@@ -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);
 };
 
 /*
index 300730c7af63f891b30b95c5d9dc0b6ffacf3464..8d362b9365d3ce860db6a4a38233dff566b2116f 100644 (file)
@@ -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--;
 
index 4c2ec1bef252aff5934def492e4b767809c6e436..055e8ec2ef212e831f4eaccf6ecfc3bd7ac76ba0 100644 (file)
@@ -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);
-}
index a90357fc163da80fec0bb203f64afd6cc3f2c14f..dc1b5441f4911be18f197a415d4de9fc9151636c 100644 (file)
@@ -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
index c6384feaf2a271d0f924f2082d7a8fe3a25341ad..370e0a306ad0e3109c3d5d58ea12afa2246f77da 100644 (file)
@@ -884,8 +884,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--;