[PATCH 5/9] drm/exynos: pass struct exynos_drm_plane in update/enable
Gustavo Padovan
gustavo at padovan.org
Wed Jun 3 07:30:28 PDT 2015
From: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
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 at collabora.co.uk>
---
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
More information about the dri-devel
mailing list