All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] drm/exynos: remove to use ifdef CONFIG_ARM_DMA_USE_IOMMU
@ 2015-07-02 12:49 Joonyoung Shim
  2015-07-02 12:49 ` [PATCH 2/3] drm/exynos: remove unnecessary checking to support iommu Joonyoung Shim
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Joonyoung Shim @ 2015-07-02 12:49 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim, m.szyprowski

If CONFIG_ARM_DMA_USE_IOMMU is disable, CONFIG_DRM_EXYNOS_IOMMU also is
disable. When CONFIG_DRM_EXYNOS_IOMMU is disable,
is_drm_iommu_supported() returns always false, so we can remove to use
ifdef CONFIG_ARM_DMA_USE_IOMMU in is_drm_iommu_supported().

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_iommu.h | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_iommu.h b/drivers/gpu/drm/exynos/exynos_drm_iommu.h
index 8341c7a..a90357f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_iommu.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_iommu.h
@@ -29,13 +29,9 @@ void drm_iommu_detach_device(struct drm_device *dev_dev,
 
 static inline bool is_drm_iommu_supported(struct drm_device *drm_dev)
 {
-#ifdef CONFIG_ARM_DMA_USE_IOMMU
 	struct device *dev = drm_dev->dev;
 
 	return dev->archdata.mapping ? true : false;
-#else
-	return false;
-#endif
 }
 
 int drm_iommu_attach_device_if_possible(
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] drm/exynos: remove unnecessary checking to support iommu
  2015-07-02 12:49 [PATCH 1/3] drm/exynos: remove to use ifdef CONFIG_ARM_DMA_USE_IOMMU Joonyoung Shim
@ 2015-07-02 12:49 ` Joonyoung Shim
  2015-07-02 14:00   ` Marek Szyprowski
  2015-07-02 12:49 ` [PATCH 3/3] drm/exynos: remove drm_iommu_attach_device_if_possible Joonyoung Shim
  2015-07-02 14:00 ` [PATCH 1/3] drm/exynos: remove to use ifdef CONFIG_ARM_DMA_USE_IOMMU Marek Szyprowski
  2 siblings, 1 reply; 6+ messages in thread
From: Joonyoung Shim @ 2015-07-02 12:49 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim, m.szyprowski

Already drm_iommu_attach_device and drm_iommu_detach_device check
whether support iommu internally, so we don't have to call
is_drm_iommu_supported before call them.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos5433_drm_decon.c |  3 +--
 drivers/gpu/drm/exynos/exynos7_drm_decon.c    |  3 +--
 drivers/gpu/drm/exynos/exynos_drm_fimd.c      |  9 +--------
 drivers/gpu/drm/exynos/exynos_drm_g2d.c       |  6 ------
 drivers/gpu/drm/exynos/exynos_drm_iommu.c     | 11 +++--------
 drivers/gpu/drm/exynos/exynos_drm_ipp.c       | 16 ++++++----------
 drivers/gpu/drm/exynos/exynos_mixer.c         |  3 +--
 7 files changed, 13 insertions(+), 38 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
index 8b1225f..ba43437 100644
--- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
+++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
@@ -514,8 +514,7 @@ static void decon_unbind(struct device *dev, struct device *master, void *data)
 	decon_disable(ctx->crtc);
 
 	/* detach this sub driver from iommu mapping if supported. */
-	if (is_drm_iommu_supported(ctx->drm_dev))
-		drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
+	drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
 }
 
 static const struct component_ops decon_component_ops = {
diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
index 362532a..2c29635 100644
--- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c
+++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
@@ -136,8 +136,7 @@ static int decon_ctx_initialize(struct decon_context *ctx,
 static void decon_ctx_remove(struct decon_context *ctx)
 {
 	/* detach this sub driver from iommu mapping if supported. */
-	if (is_drm_iommu_supported(ctx->drm_dev))
-		drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
+	drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
 }
 
 static u32 decon_calc_clkdiv(struct decon_context *ctx,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 794e56c..300730c 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -348,13 +348,6 @@ static void fimd_clear_channels(struct exynos_drm_crtc *crtc)
 	pm_runtime_put(ctx->dev);
 }
 
-static void fimd_iommu_detach_devices(struct fimd_context *ctx)
-{
-	/* detach this sub driver from iommu mapping if supported. */
-	if (is_drm_iommu_supported(ctx->drm_dev))
-		drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
-}
-
 static u32 fimd_calc_clkdiv(struct fimd_context *ctx,
 		const struct drm_display_mode *mode)
 {
@@ -978,7 +971,7 @@ static void fimd_unbind(struct device *dev, struct device *master,
 
 	fimd_disable(ctx->crtc);
 
-	fimd_iommu_detach_devices(ctx);
+	drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
 
 	if (ctx->display)
 		exynos_dpi_remove(ctx->display);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
index 7584834..7fb8d0b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
@@ -1288,9 +1288,6 @@ static int g2d_subdrv_probe(struct drm_device *drm_dev, struct device *dev)
 		return ret;
 	}
 
-	if (!is_drm_iommu_supported(drm_dev))
-		return 0;
-
 	ret = drm_iommu_attach_device(drm_dev, dev);
 	if (ret < 0) {
 		dev_err(dev, "failed to enable iommu.\n");
@@ -1303,9 +1300,6 @@ static int g2d_subdrv_probe(struct drm_device *drm_dev, struct device *dev)
 
 static void g2d_subdrv_remove(struct drm_device *drm_dev, struct device *dev)
 {
-	if (!is_drm_iommu_supported(drm_dev))
-		return;
-
 	drm_iommu_detach_device(drm_dev, dev);
 }
 
diff --git a/drivers/gpu/drm/exynos/exynos_drm_iommu.c b/drivers/gpu/drm/exynos/exynos_drm_iommu.c
index d4ec746..4c2ec1b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_iommu.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_iommu.c
@@ -87,10 +87,8 @@ int drm_iommu_attach_device(struct drm_device *drm_dev,
 	struct device *dev = drm_dev->dev;
 	int ret;
 
-	if (!dev->archdata.mapping) {
-		DRM_ERROR("iommu_mapping is null.\n");
-		return -EFAULT;
-	}
+	if (!dev->archdata.mapping)
+		return 0;
 
 	subdrv_dev->dma_parms = devm_kzalloc(subdrv_dev,
 					sizeof(*subdrv_dev->dma_parms),
@@ -148,13 +146,10 @@ void drm_iommu_detach_device(struct drm_device *drm_dev,
 int drm_iommu_attach_device_if_possible(struct exynos_drm_crtc *exynos_crtc,
 			struct drm_device *drm_dev, struct device *subdrv_dev)
 {
-	int ret = 0;
-
 	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);
 	}
 
-	return ret;
+	return drm_iommu_attach_device(drm_dev, subdrv_dev);
 }
diff --git a/drivers/gpu/drm/exynos/exynos_drm_ipp.c b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
index 67e5451..67d2423 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_ipp.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
@@ -1622,12 +1622,10 @@ static int ipp_subdrv_probe(struct drm_device *drm_dev, struct device *dev)
 		INIT_LIST_HEAD(&ippdrv->cmd_list);
 		mutex_init(&ippdrv->cmd_lock);
 
-		if (is_drm_iommu_supported(drm_dev)) {
-			ret = drm_iommu_attach_device(drm_dev, ippdrv->dev);
-			if (ret) {
-				DRM_ERROR("failed to activate iommu\n");
-				goto err;
-			}
+		ret = drm_iommu_attach_device(drm_dev, ippdrv->dev);
+		if (ret) {
+			DRM_ERROR("failed to activate iommu\n");
+			goto err;
 		}
 	}
 
@@ -1637,8 +1635,7 @@ err:
 	/* get ipp driver entry */
 	list_for_each_entry_continue_reverse(ippdrv, &exynos_drm_ippdrv_list,
 						drv_list) {
-		if (is_drm_iommu_supported(drm_dev))
-			drm_iommu_detach_device(drm_dev, ippdrv->dev);
+		drm_iommu_detach_device(drm_dev, ippdrv->dev);
 
 		ipp_remove_id(&ctx->ipp_idr, &ctx->ipp_lock,
 				ippdrv->prop_list.ipp_id);
@@ -1654,8 +1651,7 @@ static void ipp_subdrv_remove(struct drm_device *drm_dev, struct device *dev)
 
 	/* get ipp driver entry */
 	list_for_each_entry_safe(ippdrv, t, &exynos_drm_ippdrv_list, drv_list) {
-		if (is_drm_iommu_supported(drm_dev))
-			drm_iommu_detach_device(drm_dev, ippdrv->dev);
+		drm_iommu_detach_device(drm_dev, ippdrv->dev);
 
 		ipp_remove_id(&ctx->ipp_idr, &ctx->ipp_lock,
 				ippdrv->prop_list.ipp_id);
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
index 60538bf..1a01c48 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -891,8 +891,7 @@ static int mixer_initialize(struct mixer_context *mixer_ctx,
 
 static void mixer_ctx_remove(struct mixer_context *mixer_ctx)
 {
-	if (is_drm_iommu_supported(mixer_ctx->drm_dev))
-		drm_iommu_detach_device(mixer_ctx->drm_dev, mixer_ctx->dev);
+	drm_iommu_detach_device(mixer_ctx->drm_dev, mixer_ctx->dev);
 }
 
 static int mixer_enable_vblank(struct exynos_drm_crtc *crtc)
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] drm/exynos: remove drm_iommu_attach_device_if_possible
  2015-07-02 12:49 [PATCH 1/3] drm/exynos: remove to use ifdef CONFIG_ARM_DMA_USE_IOMMU Joonyoung Shim
  2015-07-02 12:49 ` [PATCH 2/3] drm/exynos: remove unnecessary checking to support iommu Joonyoung Shim
@ 2015-07-02 12:49 ` Joonyoung Shim
  2015-07-02 14:01   ` Marek Szyprowski
  2015-07-02 14:00 ` [PATCH 1/3] drm/exynos: remove to use ifdef CONFIG_ARM_DMA_USE_IOMMU Marek Szyprowski
  2 siblings, 1 reply; 6+ messages in thread
From: Joonyoung Shim @ 2015-07-02 12:49 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim, m.szyprowski

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>
---
 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--;
 
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] drm/exynos: remove to use ifdef CONFIG_ARM_DMA_USE_IOMMU
  2015-07-02 12:49 [PATCH 1/3] drm/exynos: remove to use ifdef CONFIG_ARM_DMA_USE_IOMMU Joonyoung Shim
  2015-07-02 12:49 ` [PATCH 2/3] drm/exynos: remove unnecessary checking to support iommu Joonyoung Shim
  2015-07-02 12:49 ` [PATCH 3/3] drm/exynos: remove drm_iommu_attach_device_if_possible Joonyoung Shim
@ 2015-07-02 14:00 ` Marek Szyprowski
  2 siblings, 0 replies; 6+ messages in thread
From: Marek Szyprowski @ 2015-07-02 14:00 UTC (permalink / raw)
  To: Joonyoung Shim, dri-devel; +Cc: sw0312.kim

Hello,

On 2015-07-02 14:49, Joonyoung Shim wrote:
> If CONFIG_ARM_DMA_USE_IOMMU is disable, CONFIG_DRM_EXYNOS_IOMMU also is
> disable. When CONFIG_DRM_EXYNOS_IOMMU is disable,
> is_drm_iommu_supported() returns always false, so we can remove to use
> ifdef CONFIG_ARM_DMA_USE_IOMMU in is_drm_iommu_supported().
>
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>

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

> ---
>   drivers/gpu/drm/exynos/exynos_drm_iommu.h | 4 ----
>   1 file changed, 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_iommu.h b/drivers/gpu/drm/exynos/exynos_drm_iommu.h
> index 8341c7a..a90357f 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_iommu.h
> +++ b/drivers/gpu/drm/exynos/exynos_drm_iommu.h
> @@ -29,13 +29,9 @@ void drm_iommu_detach_device(struct drm_device *dev_dev,
>   
>   static inline bool is_drm_iommu_supported(struct drm_device *drm_dev)
>   {
> -#ifdef CONFIG_ARM_DMA_USE_IOMMU
>   	struct device *dev = drm_dev->dev;
>   
>   	return dev->archdata.mapping ? true : false;
> -#else
> -	return false;
> -#endif
>   }
>   
>   int drm_iommu_attach_device_if_possible(

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

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/3] drm/exynos: remove unnecessary checking to support iommu
  2015-07-02 12:49 ` [PATCH 2/3] drm/exynos: remove unnecessary checking to support iommu Joonyoung Shim
@ 2015-07-02 14:00   ` Marek Szyprowski
  0 siblings, 0 replies; 6+ messages in thread
From: Marek Szyprowski @ 2015-07-02 14:00 UTC (permalink / raw)
  To: Joonyoung Shim, dri-devel; +Cc: sw0312.kim

Hello,

On 2015-07-02 14:49, Joonyoung Shim wrote:
> Already drm_iommu_attach_device and drm_iommu_detach_device check
> whether support iommu internally, so we don't have to call
> is_drm_iommu_supported before call them.
>
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>

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

> ---
>   drivers/gpu/drm/exynos/exynos5433_drm_decon.c |  3 +--
>   drivers/gpu/drm/exynos/exynos7_drm_decon.c    |  3 +--
>   drivers/gpu/drm/exynos/exynos_drm_fimd.c      |  9 +--------
>   drivers/gpu/drm/exynos/exynos_drm_g2d.c       |  6 ------
>   drivers/gpu/drm/exynos/exynos_drm_iommu.c     | 11 +++--------
>   drivers/gpu/drm/exynos/exynos_drm_ipp.c       | 16 ++++++----------
>   drivers/gpu/drm/exynos/exynos_mixer.c         |  3 +--
>   7 files changed, 13 insertions(+), 38 deletions(-)
>
> diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
> index 8b1225f..ba43437 100644
> --- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
> +++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
> @@ -514,8 +514,7 @@ static void decon_unbind(struct device *dev, struct device *master, void *data)
>   	decon_disable(ctx->crtc);
>   
>   	/* detach this sub driver from iommu mapping if supported. */
> -	if (is_drm_iommu_supported(ctx->drm_dev))
> -		drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
> +	drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
>   }
>   
>   static const struct component_ops decon_component_ops = {
> diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
> index 362532a..2c29635 100644
> --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c
> +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c
> @@ -136,8 +136,7 @@ static int decon_ctx_initialize(struct decon_context *ctx,
>   static void decon_ctx_remove(struct decon_context *ctx)
>   {
>   	/* detach this sub driver from iommu mapping if supported. */
> -	if (is_drm_iommu_supported(ctx->drm_dev))
> -		drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
> +	drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
>   }
>   
>   static u32 decon_calc_clkdiv(struct decon_context *ctx,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> index 794e56c..300730c 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -348,13 +348,6 @@ static void fimd_clear_channels(struct exynos_drm_crtc *crtc)
>   	pm_runtime_put(ctx->dev);
>   }
>   
> -static void fimd_iommu_detach_devices(struct fimd_context *ctx)
> -{
> -	/* detach this sub driver from iommu mapping if supported. */
> -	if (is_drm_iommu_supported(ctx->drm_dev))
> -		drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
> -}
> -
>   static u32 fimd_calc_clkdiv(struct fimd_context *ctx,
>   		const struct drm_display_mode *mode)
>   {
> @@ -978,7 +971,7 @@ static void fimd_unbind(struct device *dev, struct device *master,
>   
>   	fimd_disable(ctx->crtc);
>   
> -	fimd_iommu_detach_devices(ctx);
> +	drm_iommu_detach_device(ctx->drm_dev, ctx->dev);
>   
>   	if (ctx->display)
>   		exynos_dpi_remove(ctx->display);
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> index 7584834..7fb8d0b 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> @@ -1288,9 +1288,6 @@ static int g2d_subdrv_probe(struct drm_device *drm_dev, struct device *dev)
>   		return ret;
>   	}
>   
> -	if (!is_drm_iommu_supported(drm_dev))
> -		return 0;
> -
>   	ret = drm_iommu_attach_device(drm_dev, dev);
>   	if (ret < 0) {
>   		dev_err(dev, "failed to enable iommu.\n");
> @@ -1303,9 +1300,6 @@ static int g2d_subdrv_probe(struct drm_device *drm_dev, struct device *dev)
>   
>   static void g2d_subdrv_remove(struct drm_device *drm_dev, struct device *dev)
>   {
> -	if (!is_drm_iommu_supported(drm_dev))
> -		return;
> -
>   	drm_iommu_detach_device(drm_dev, dev);
>   }
>   
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_iommu.c b/drivers/gpu/drm/exynos/exynos_drm_iommu.c
> index d4ec746..4c2ec1b 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_iommu.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_iommu.c
> @@ -87,10 +87,8 @@ int drm_iommu_attach_device(struct drm_device *drm_dev,
>   	struct device *dev = drm_dev->dev;
>   	int ret;
>   
> -	if (!dev->archdata.mapping) {
> -		DRM_ERROR("iommu_mapping is null.\n");
> -		return -EFAULT;
> -	}
> +	if (!dev->archdata.mapping)
> +		return 0;
>   
>   	subdrv_dev->dma_parms = devm_kzalloc(subdrv_dev,
>   					sizeof(*subdrv_dev->dma_parms),
> @@ -148,13 +146,10 @@ void drm_iommu_detach_device(struct drm_device *drm_dev,
>   int drm_iommu_attach_device_if_possible(struct exynos_drm_crtc *exynos_crtc,
>   			struct drm_device *drm_dev, struct device *subdrv_dev)
>   {
> -	int ret = 0;
> -
>   	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);
>   	}
>   
> -	return ret;
> +	return drm_iommu_attach_device(drm_dev, subdrv_dev);
>   }
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_ipp.c b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
> index 67e5451..67d2423 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_ipp.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
> @@ -1622,12 +1622,10 @@ static int ipp_subdrv_probe(struct drm_device *drm_dev, struct device *dev)
>   		INIT_LIST_HEAD(&ippdrv->cmd_list);
>   		mutex_init(&ippdrv->cmd_lock);
>   
> -		if (is_drm_iommu_supported(drm_dev)) {
> -			ret = drm_iommu_attach_device(drm_dev, ippdrv->dev);
> -			if (ret) {
> -				DRM_ERROR("failed to activate iommu\n");
> -				goto err;
> -			}
> +		ret = drm_iommu_attach_device(drm_dev, ippdrv->dev);
> +		if (ret) {
> +			DRM_ERROR("failed to activate iommu\n");
> +			goto err;
>   		}
>   	}
>   
> @@ -1637,8 +1635,7 @@ err:
>   	/* get ipp driver entry */
>   	list_for_each_entry_continue_reverse(ippdrv, &exynos_drm_ippdrv_list,
>   						drv_list) {
> -		if (is_drm_iommu_supported(drm_dev))
> -			drm_iommu_detach_device(drm_dev, ippdrv->dev);
> +		drm_iommu_detach_device(drm_dev, ippdrv->dev);
>   
>   		ipp_remove_id(&ctx->ipp_idr, &ctx->ipp_lock,
>   				ippdrv->prop_list.ipp_id);
> @@ -1654,8 +1651,7 @@ static void ipp_subdrv_remove(struct drm_device *drm_dev, struct device *dev)
>   
>   	/* get ipp driver entry */
>   	list_for_each_entry_safe(ippdrv, t, &exynos_drm_ippdrv_list, drv_list) {
> -		if (is_drm_iommu_supported(drm_dev))
> -			drm_iommu_detach_device(drm_dev, ippdrv->dev);
> +		drm_iommu_detach_device(drm_dev, ippdrv->dev);
>   
>   		ipp_remove_id(&ctx->ipp_idr, &ctx->ipp_lock,
>   				ippdrv->prop_list.ipp_id);
> diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
> index 60538bf..1a01c48 100644
> --- a/drivers/gpu/drm/exynos/exynos_mixer.c
> +++ b/drivers/gpu/drm/exynos/exynos_mixer.c
> @@ -891,8 +891,7 @@ static int mixer_initialize(struct mixer_context *mixer_ctx,
>   
>   static void mixer_ctx_remove(struct mixer_context *mixer_ctx)
>   {
> -	if (is_drm_iommu_supported(mixer_ctx->drm_dev))
> -		drm_iommu_detach_device(mixer_ctx->drm_dev, mixer_ctx->dev);
> +	drm_iommu_detach_device(mixer_ctx->drm_dev, mixer_ctx->dev);
>   }
>   
>   static int mixer_enable_vblank(struct exynos_drm_crtc *crtc)

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

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] drm/exynos: remove drm_iommu_attach_device_if_possible
  2015-07-02 12:49 ` [PATCH 3/3] drm/exynos: remove drm_iommu_attach_device_if_possible Joonyoung Shim
@ 2015-07-02 14:01   ` Marek Szyprowski
  0 siblings, 0 replies; 6+ messages in thread
From: Marek Szyprowski @ 2015-07-02 14:01 UTC (permalink / raw)
  To: Joonyoung Shim, dri-devel; +Cc: sw0312.kim

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@samsung.com>

Tested-by: Marek Szyprowski <m.szyprowski@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

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-07-02 14:01 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-02 12:49 [PATCH 1/3] drm/exynos: remove to use ifdef CONFIG_ARM_DMA_USE_IOMMU Joonyoung Shim
2015-07-02 12:49 ` [PATCH 2/3] drm/exynos: remove unnecessary checking to support iommu Joonyoung Shim
2015-07-02 14:00   ` Marek Szyprowski
2015-07-02 12:49 ` [PATCH 3/3] drm/exynos: remove drm_iommu_attach_device_if_possible Joonyoung Shim
2015-07-02 14:01   ` Marek Szyprowski
2015-07-02 14:00 ` [PATCH 1/3] drm/exynos: remove to use ifdef CONFIG_ARM_DMA_USE_IOMMU Marek Szyprowski

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.