Commit 1e1d1393 authored by Gustavo Padovan's avatar Gustavo Padovan Committed by Inki Dae

drm/exynos: pass struct exynos_drm_plane in update/enable

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.

v2: don't remove check for suspended in FIMD (comment by Joonyoung)
Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
Reviewed-by: default avatarJoonyoung Shim <jy0922.shim@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent 9cc7610a
...@@ -219,17 +219,13 @@ static void decon_shadow_protect_win(struct decon_context *ctx, int win, ...@@ -219,17 +219,13 @@ static void decon_shadow_protect_win(struct decon_context *ctx, int win,
writel(val, ctx->addr + DECON_SHADOWCON); writel(val, ctx->addr + DECON_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 decon_context *ctx = crtc->ctx;
struct exynos_drm_plane *plane; unsigned int win = plane->zpos;
u32 val; u32 val;
if (win < 0 || win >= WINDOWS_NR)
return;
plane = &ctx->planes[win];
if (ctx->suspended) if (ctx->suspended)
return; return;
...@@ -277,17 +273,13 @@ static void decon_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) ...@@ -277,17 +273,13 @@ static void decon_update_plane(struct exynos_drm_crtc *crtc, unsigned int win)
atomic_set(&ctx->win_updated, 1); atomic_set(&ctx->win_updated, 1);
} }
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 decon_context *ctx = crtc->ctx;
struct exynos_drm_plane *plane; unsigned int win = plane->zpos;
u32 val; u32 val;
if (win < 0 || win >= WINDOWS_NR)
return;
plane = &ctx->planes[win];
if (ctx->suspended) if (ctx->suspended)
return; return;
...@@ -378,7 +370,7 @@ static void decon_disable(struct exynos_drm_crtc *crtc) ...@@ -378,7 +370,7 @@ static void decon_disable(struct exynos_drm_crtc *crtc)
* a destroyed buffer later. * a destroyed buffer later.
*/ */
for (i = 0; i < WINDOWS_NR; i++) for (i = 0; i < WINDOWS_NR; i++)
decon_disable_plane(crtc, i); decon_disable_plane(crtc, &ctx->planes[i]);
decon_swreset(ctx); decon_swreset(ctx);
......
...@@ -383,24 +383,20 @@ static void decon_shadow_protect_win(struct decon_context *ctx, ...@@ -383,24 +383,20 @@ static void decon_shadow_protect_win(struct decon_context *ctx,
writel(val, ctx->regs + SHADOWCON); 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 decon_context *ctx = crtc->ctx;
struct drm_display_mode *mode = &crtc->base.state->adjusted_mode; struct drm_display_mode *mode = &crtc->base.state->adjusted_mode;
struct exynos_drm_plane *plane;
int padding; int padding;
unsigned long val, alpha; unsigned long val, alpha;
unsigned int last_x; unsigned int last_x;
unsigned int last_y; unsigned int last_y;
unsigned int win = plane->zpos;
if (ctx->suspended) if (ctx->suspended)
return; return;
if (win < 0 || win >= WINDOWS_NR)
return;
plane = &ctx->planes[win];
/* /*
* SHADOWCON/PRTCON register is used for enabling timing. * SHADOWCON/PRTCON register is used for enabling timing.
* *
...@@ -493,17 +489,13 @@ static void decon_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) ...@@ -493,17 +489,13 @@ static void decon_update_plane(struct exynos_drm_crtc *crtc, unsigned int win)
writel(val, ctx->regs + DECON_UPDATE); writel(val, ctx->regs + DECON_UPDATE);
} }
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 decon_context *ctx = crtc->ctx;
struct exynos_drm_plane *plane; unsigned int win = plane->zpos;
u32 val; u32 val;
if (win < 0 || win >= WINDOWS_NR)
return;
plane = &ctx->planes[win];
if (ctx->suspended) if (ctx->suspended)
return; return;
...@@ -599,7 +591,7 @@ static void decon_disable(struct exynos_drm_crtc *crtc) ...@@ -599,7 +591,7 @@ static void decon_disable(struct exynos_drm_crtc *crtc)
* a destroyed buffer later. * a destroyed buffer later.
*/ */
for (i = 0; i < WINDOWS_NR; i++) for (i = 0; i < WINDOWS_NR; i++)
decon_disable_plane(crtc, i); decon_disable_plane(crtc, &ctx->planes[i]);
clk_disable_unprepare(ctx->vclk); clk_disable_unprepare(ctx->vclk);
clk_disable_unprepare(ctx->eclk); clk_disable_unprepare(ctx->eclk);
......
...@@ -173,8 +173,10 @@ struct exynos_drm_crtc_ops { ...@@ -173,8 +173,10 @@ struct exynos_drm_crtc_ops {
int (*enable_vblank)(struct exynos_drm_crtc *crtc); int (*enable_vblank)(struct exynos_drm_crtc *crtc);
void (*disable_vblank)(struct exynos_drm_crtc *crtc); void (*disable_vblank)(struct exynos_drm_crtc *crtc);
void (*wait_for_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 (*update_plane)(struct exynos_drm_crtc *crtc,
void (*disable_plane)(struct exynos_drm_crtc *crtc, unsigned int zpos); 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 (*te_handler)(struct exynos_drm_crtc *crtc);
void (*clock_enable)(struct exynos_drm_crtc *crtc, bool enable); void (*clock_enable)(struct exynos_drm_crtc *crtc, bool enable);
}; };
......
...@@ -607,22 +607,18 @@ static void fimd_shadow_protect_win(struct fimd_context *ctx, ...@@ -607,22 +607,18 @@ static void fimd_shadow_protect_win(struct fimd_context *ctx,
writel(val, ctx->regs + reg); 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 fimd_context *ctx = crtc->ctx;
struct exynos_drm_plane *plane;
dma_addr_t dma_addr; dma_addr_t dma_addr;
unsigned long val, size, offset; unsigned long val, size, offset;
unsigned int last_x, last_y, buf_offsize, line_size; unsigned int last_x, last_y, buf_offsize, line_size;
unsigned int win = plane->zpos;
if (ctx->suspended) if (ctx->suspended)
return; return;
if (win < 0 || win >= WINDOWS_NR)
return;
plane = &ctx->planes[win];
/* /*
* SHADOWCON/PRTCON register is used for enabling timing. * SHADOWCON/PRTCON register is used for enabling timing.
* *
...@@ -715,15 +711,11 @@ static void fimd_update_plane(struct exynos_drm_crtc *crtc, unsigned int win) ...@@ -715,15 +711,11 @@ static void fimd_update_plane(struct exynos_drm_crtc *crtc, unsigned int win)
atomic_set(&ctx->win_updated, 1); 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 fimd_context *ctx = crtc->ctx;
struct exynos_drm_plane *plane; unsigned int win = plane->zpos;
if (win < 0 || win >= WINDOWS_NR)
return;
plane = &ctx->planes[win];
if (ctx->suspended) if (ctx->suspended)
return; return;
...@@ -785,7 +777,7 @@ static void fimd_disable(struct exynos_drm_crtc *crtc) ...@@ -785,7 +777,7 @@ static void fimd_disable(struct exynos_drm_crtc *crtc)
* a destroyed buffer later. * a destroyed buffer later.
*/ */
for (i = 0; i < WINDOWS_NR; i++) for (i = 0; i < WINDOWS_NR; i++)
fimd_disable_plane(crtc, i); fimd_disable_plane(crtc, &ctx->planes[i]);
fimd_enable_vblank(crtc); fimd_enable_vblank(crtc);
fimd_wait_for_vblank(crtc); fimd_wait_for_vblank(crtc);
......
...@@ -180,7 +180,7 @@ static void exynos_plane_atomic_update(struct drm_plane *plane, ...@@ -180,7 +180,7 @@ static void exynos_plane_atomic_update(struct drm_plane *plane,
state->src_w >> 16, state->src_h >> 16); state->src_w >> 16, state->src_h >> 16);
if (exynos_crtc->ops->update_plane) 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, static void exynos_plane_atomic_disable(struct drm_plane *plane,
...@@ -194,7 +194,7 @@ 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) if (exynos_crtc->ops->disable_plane)
exynos_crtc->ops->disable_plane(exynos_crtc, exynos_crtc->ops->disable_plane(exynos_crtc,
exynos_plane->zpos); exynos_plane);
} }
static const struct drm_plane_helper_funcs plane_helper_funcs = { static const struct drm_plane_helper_funcs plane_helper_funcs = {
......
...@@ -118,19 +118,14 @@ static void vidi_disable_vblank(struct exynos_drm_crtc *crtc) ...@@ -118,19 +118,14 @@ static void vidi_disable_vblank(struct exynos_drm_crtc *crtc)
ctx->vblank_on = false; 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 vidi_context *ctx = crtc->ctx;
struct exynos_drm_plane *plane;
if (ctx->suspended) if (ctx->suspended)
return; return;
if (win < 0 || win >= WINDOWS_NR)
return;
plane = &ctx->planes[win];
DRM_DEBUG_KMS("dma_addr = %pad\n", plane->dma_addr); DRM_DEBUG_KMS("dma_addr = %pad\n", plane->dma_addr);
if (ctx->vblank_on) if (ctx->vblank_on)
......
...@@ -927,28 +927,30 @@ static void mixer_disable_vblank(struct exynos_drm_crtc *crtc) ...@@ -927,28 +927,30 @@ static void mixer_disable_vblank(struct exynos_drm_crtc *crtc)
mixer_reg_writemask(res, MXR_INT_EN, 0, MXR_INT_EN_VSYNC); 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; struct mixer_context *mixer_ctx = crtc->ctx;
DRM_DEBUG_KMS("win: %d\n", win); DRM_DEBUG_KMS("win: %d\n", plane->zpos);
if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags)) if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags))
return; return;
if (win > 1 && mixer_ctx->vp_enabled) if (plane->zpos > 1 && mixer_ctx->vp_enabled)
vp_video_buffer(mixer_ctx, win); vp_video_buffer(mixer_ctx, plane->zpos);
else else
mixer_graph_buffer(mixer_ctx, win); mixer_graph_buffer(mixer_ctx, plane->zpos);
} }
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_context *mixer_ctx = crtc->ctx;
struct mixer_resources *res = &mixer_ctx->mixer_res; struct mixer_resources *res = &mixer_ctx->mixer_res;
unsigned long flags; unsigned long flags;
DRM_DEBUG_KMS("win: %d\n", win); DRM_DEBUG_KMS("win: %d\n", plane->zpos);
if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags)) if (!test_bit(MXR_BIT_POWERED, &mixer_ctx->flags))
return; return;
...@@ -956,7 +958,7 @@ static void mixer_disable_plane(struct exynos_drm_crtc *crtc, unsigned int win) ...@@ -956,7 +958,7 @@ static void mixer_disable_plane(struct exynos_drm_crtc *crtc, unsigned int win)
spin_lock_irqsave(&res->reg_slock, flags); spin_lock_irqsave(&res->reg_slock, flags);
mixer_vsync_set_update(mixer_ctx, false); 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); mixer_vsync_set_update(mixer_ctx, true);
spin_unlock_irqrestore(&res->reg_slock, flags); spin_unlock_irqrestore(&res->reg_slock, flags);
...@@ -1053,7 +1055,7 @@ static void mixer_disable(struct exynos_drm_crtc *crtc) ...@@ -1053,7 +1055,7 @@ static void mixer_disable(struct exynos_drm_crtc *crtc)
mixer_regs_dump(ctx); mixer_regs_dump(ctx);
for (i = 0; i < MIXER_WIN_NR; i++) for (i = 0; i < MIXER_WIN_NR; i++)
mixer_disable_plane(crtc, i); mixer_disable_plane(crtc, &ctx->planes[i]);
clear_bit(MXR_BIT_POWERED, &ctx->flags); clear_bit(MXR_BIT_POWERED, &ctx->flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment