From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> We already have the plane pointer in before calling .update_plane() or disable_plane() so pass it directly to those calls avoiding a new conversion from zpos to struct exynos_drm_plane. Signed-off-by: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx> --- drivers/gpu/drm/exynos/exynos7_drm_decon.c | 26 +++++++++----------------- drivers/gpu/drm/exynos/exynos_drm_drv.h | 6 ++++-- drivers/gpu/drm/exynos/exynos_drm_fimd.c | 24 ++++++++---------------- drivers/gpu/drm/exynos/exynos_drm_plane.c | 4 ++-- drivers/gpu/drm/exynos/exynos_drm_vidi.c | 22 +++++----------------- drivers/gpu/drm/exynos/exynos_mixer.c | 28 +++++++++++++++------------- 6 files changed, 43 insertions(+), 67 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos7_drm_decon.c b/drivers/gpu/drm/exynos/exynos7_drm_decon.c index f2b2139..acbb712 100644 --- a/drivers/gpu/drm/exynos/exynos7_drm_decon.c +++ b/drivers/gpu/drm/exynos/exynos7_drm_decon.c @@ -392,24 +392,20 @@ static void decon_shadow_protect_win(struct decon_context *ctx, writel(val, ctx->regs + SHADOWCON); } -static void decon_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) +static void decon_update_plane(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane) { struct decon_context *ctx = crtc->ctx; struct drm_display_mode *mode = &crtc->base.state->adjusted_mode; - struct exynos_drm_plane *plane; int padding; unsigned long val, alpha; unsigned int last_x; unsigned int last_y; + unsigned int win = plane->zpos; if (ctx->suspended) return; - if (win < 0 || win >= WINDOWS_NR) - return; - - plane = &ctx->planes[win]; - /* If suspended, enable this on resume */ if (ctx->suspended) { plane->resume = true; @@ -510,17 +506,13 @@ static void decon_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) plane->enabled = true; } -static void decon_disable_plane(struct exynos_drm_crtc *crtc, unsigned int win) +static void decon_disable_plane(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane) { struct decon_context *ctx = crtc->ctx; - struct exynos_drm_plane *plane; + unsigned int win = plane->zpos; u32 val; - if (win < 0 || win >= WINDOWS_NR) - return; - - plane = &ctx->planes[win]; - if (ctx->suspended) { /* do not resume this window*/ plane->resume = false; @@ -554,7 +546,7 @@ static void decon_window_suspend(struct decon_context *ctx) plane = &ctx->planes[i]; plane->resume = plane->enabled; if (plane->enabled) - decon_disable_plane(ctx->crtc, i); + decon_disable_plane(ctx->crtc, plane); } } @@ -578,9 +570,9 @@ static void decon_apply(struct decon_context *ctx) for (i = 0; i < WINDOWS_NR; i++) { plane = &ctx->planes[i]; if (plane->enabled) - decon_update_plane(ctx->crtc, i); + decon_update_plane(ctx->crtc, plane); else - decon_disable_plane(ctx->crtc, i); + decon_disable_plane(ctx->crtc, plane); } decon_commit(ctx->crtc); diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h b/drivers/gpu/drm/exynos/exynos_drm_drv.h index 1858dae..0d19aaf 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.h +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h @@ -185,8 +185,10 @@ struct exynos_drm_crtc_ops { int (*enable_vblank)(struct exynos_drm_crtc *crtc); void (*disable_vblank)(struct exynos_drm_crtc *crtc); void (*wait_for_vblank)(struct exynos_drm_crtc *crtc); - void (*update_plane)(struct exynos_drm_crtc *crtc, unsigned int zpos); - void (*disable_plane)(struct exynos_drm_crtc *crtc, unsigned int zpos); + void (*update_plane)(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane); + void (*disable_plane)(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane); void (*te_handler)(struct exynos_drm_crtc *crtc); void (*clock_enable)(struct exynos_drm_crtc *crtc, bool enable); }; diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 9c8522b..5a3f9f2 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c @@ -618,22 +618,18 @@ static void fimd_shadow_protect_win(struct fimd_context *ctx, writel(val, ctx->regs + reg); } -static void fimd_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) +static void fimd_update_plane(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane) { struct fimd_context *ctx = crtc->ctx; - struct exynos_drm_plane *plane; dma_addr_t dma_addr; unsigned long val, size, offset; unsigned int last_x, last_y, buf_offsize, line_size; + unsigned int win = plane->zpos; if (ctx->suspended) return; - if (win < 0 || win >= WINDOWS_NR) - return; - - plane = &ctx->planes[win]; - /* If suspended, enable this on resume */ if (ctx->suspended) { plane->resume = true; @@ -734,15 +730,11 @@ static void fimd_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) atomic_set(&ctx->win_updated, 1); } -static void fimd_disable_plane(struct exynos_drm_crtc *crtc, unsigned int win) +static void fimd_disable_plane(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane) { struct fimd_context *ctx = crtc->ctx; - struct exynos_drm_plane *plane; - - if (win < 0 || win >= WINDOWS_NR) - return; - - plane = &ctx->planes[win]; + unsigned int win = plane->zpos; if (ctx->suspended) { /* do not resume this window*/ @@ -773,7 +765,7 @@ static void fimd_window_suspend(struct fimd_context *ctx) plane = &ctx->planes[i]; plane->resume = plane->enabled; if (plane->enabled) - fimd_disable_plane(ctx->crtc, i); + fimd_disable_plane(ctx->crtc, plane); } } @@ -788,7 +780,7 @@ static void fimd_window_resume(struct fimd_context *ctx) plane->resume = false; if (plane->enabled) - fimd_update_plane(ctx->crtc, i); + fimd_update_plane(ctx->crtc, plane); } } diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c b/drivers/gpu/drm/exynos/exynos_drm_plane.c index eb9eec9..b5aa5b7 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_plane.c +++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c @@ -180,7 +180,7 @@ static void exynos_plane_atomic_update(struct drm_plane *plane, state->src_w >> 16, state->src_h >> 16); if (exynos_crtc->ops->update_plane) - exynos_crtc->ops->update_plane(exynos_crtc, exynos_plane->zpos); + exynos_crtc->ops->update_plane(exynos_crtc, exynos_plane); } static void exynos_plane_atomic_disable(struct drm_plane *plane, @@ -194,7 +194,7 @@ static void exynos_plane_atomic_disable(struct drm_plane *plane, if (exynos_crtc->ops->disable_plane) exynos_crtc->ops->disable_plane(exynos_crtc, - exynos_plane->zpos); + exynos_plane); } static const struct drm_plane_helper_funcs plane_helper_funcs = { diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index ac9348b..e5089f2 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -118,19 +118,14 @@ static void vidi_disable_vblank(struct exynos_drm_crtc *crtc) ctx->vblank_on = false; } -static void vidi_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) +static void vidi_update_plane(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane) { struct vidi_context *ctx = crtc->ctx; - struct exynos_drm_plane *plane; if (ctx->suspended) return; - if (win < 0 || win >= WINDOWS_NR) - return; - - plane = &ctx->planes[win]; - plane->enabled = true; DRM_DEBUG_KMS("dma_addr = %pad\n", plane->dma_addr); @@ -139,17 +134,10 @@ static void vidi_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) schedule_work(&ctx->work); } -static void vidi_disable_plane(struct exynos_drm_crtc *crtc, unsigned int win) +static void vidi_disable_plane(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane) { - struct vidi_context *ctx = crtc->ctx; - struct exynos_drm_plane *plane; - - if (win < 0 || win >= WINDOWS_NR) - return; - - plane = &ctx->planes[win]; plane->enabled = false; - /* TODO. */ } @@ -170,7 +158,7 @@ static void vidi_enable(struct exynos_drm_crtc *crtc) for (i = 0; i < WINDOWS_NR; i++) { plane = &ctx->planes[i]; if (plane->enabled) - vidi_update_plane(ctx->crtc, i); + vidi_update_plane(ctx->crtc, plane); } mutex_unlock(&ctx->lock); diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c index 3521359..bf71b43 100644 --- a/drivers/gpu/drm/exynos/exynos_mixer.c +++ b/drivers/gpu/drm/exynos/exynos_mixer.c @@ -920,11 +920,12 @@ static void mixer_disable_vblank(struct exynos_drm_crtc *crtc) mixer_reg_writemask(res, MXR_INT_EN, 0, MXR_INT_EN_VSYNC); } -static void mixer_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) +static void mixer_update_plane(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane) { struct mixer_context *mixer_ctx = crtc->ctx; - DRM_DEBUG_KMS("win: %d\n", win); + DRM_DEBUG_KMS("win: %d\n", plane->zpos); mutex_lock(&mixer_ctx->mixer_mutex); if (!mixer_ctx->powered) { @@ -933,26 +934,27 @@ static void mixer_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) } mutex_unlock(&mixer_ctx->mixer_mutex); - if (win > 1 && mixer_ctx->vp_enabled) - vp_video_buffer(mixer_ctx, win); + if (plane->zpos > 1 && mixer_ctx->vp_enabled) + vp_video_buffer(mixer_ctx, plane->zpos); else - mixer_graph_buffer(mixer_ctx, win); + mixer_graph_buffer(mixer_ctx, plane->zpos); - mixer_ctx->planes[win].enabled = true; + plane->enabled = true; } -static void mixer_disable_plane(struct exynos_drm_crtc *crtc, unsigned int win) +static void mixer_disable_plane(struct exynos_drm_crtc *crtc, + struct exynos_drm_plane *plane) { struct mixer_context *mixer_ctx = crtc->ctx; struct mixer_resources *res = &mixer_ctx->mixer_res; unsigned long flags; - DRM_DEBUG_KMS("win: %d\n", win); + DRM_DEBUG_KMS("win: %d\n", plane->zpos); mutex_lock(&mixer_ctx->mixer_mutex); if (!mixer_ctx->powered) { mutex_unlock(&mixer_ctx->mixer_mutex); - mixer_ctx->planes[win].resume = false; + plane->resume = false; return; } mutex_unlock(&mixer_ctx->mixer_mutex); @@ -960,12 +962,12 @@ static void mixer_disable_plane(struct exynos_drm_crtc *crtc, unsigned int win) spin_lock_irqsave(&res->reg_slock, flags); mixer_vsync_set_update(mixer_ctx, false); - mixer_cfg_layer(mixer_ctx, win, false); + mixer_cfg_layer(mixer_ctx, plane->zpos, false); mixer_vsync_set_update(mixer_ctx, true); spin_unlock_irqrestore(&res->reg_slock, flags); - mixer_ctx->planes[win].enabled = false; + plane->enabled = false; } static void mixer_wait_for_vblank(struct exynos_drm_crtc *crtc) @@ -1008,7 +1010,7 @@ static void mixer_window_suspend(struct mixer_context *ctx) for (i = 0; i < MIXER_WIN_NR; i++) { plane = &ctx->planes[i]; plane->resume = plane->enabled; - mixer_disable_plane(ctx->crtc, i); + mixer_disable_plane(ctx->crtc, plane); } mixer_wait_for_vblank(ctx->crtc); } @@ -1023,7 +1025,7 @@ static void mixer_window_resume(struct mixer_context *ctx) plane->enabled = plane->resume; plane->resume = false; if (plane->enabled) - mixer_update_plane(ctx->crtc, i); + mixer_update_plane(ctx->crtc, plane); } } -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html