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