Commit b2adc530 authored by Andrzej Hajda's avatar Andrzej Hajda Committed by Inki Dae

drm/exynos/decon5433: simplify shadow protect code

There is no point in protecting only particular windows during update.
Signed-off-by: default avatarAndrzej Hajda <a.hajda@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent 3ba80845
...@@ -313,23 +313,20 @@ static void decon_win_set_pixfmt(struct decon_context *ctx, unsigned int win, ...@@ -313,23 +313,20 @@ static void decon_win_set_pixfmt(struct decon_context *ctx, unsigned int win,
writel(val, ctx->addr + DECON_WINCONx(win)); writel(val, ctx->addr + DECON_WINCONx(win));
} }
static void decon_shadow_protect_win(struct decon_context *ctx, int win, static void decon_shadow_protect(struct decon_context *ctx, bool protect)
bool protect)
{ {
decon_set_bits(ctx, DECON_SHADOWCON, SHADOWCON_Wx_PROTECT(win), decon_set_bits(ctx, DECON_SHADOWCON, SHADOWCON_PROTECT_MASK,
protect ? ~0 : 0); protect ? ~0 : 0);
} }
static void decon_atomic_begin(struct exynos_drm_crtc *crtc) static void decon_atomic_begin(struct exynos_drm_crtc *crtc)
{ {
struct decon_context *ctx = crtc->ctx; struct decon_context *ctx = crtc->ctx;
int i;
if (test_bit(BIT_SUSPENDED, &ctx->flags)) if (test_bit(BIT_SUSPENDED, &ctx->flags))
return; return;
for (i = ctx->first_win; i < WINDOWS_NR; i++) decon_shadow_protect(ctx, true);
decon_shadow_protect_win(ctx, i, true);
} }
#define BIT_VAL(x, e, s) (((x) & ((1 << ((e) - (s) + 1)) - 1)) << (s)) #define BIT_VAL(x, e, s) (((x) & ((1 << ((e) - (s) + 1)) - 1)) << (s))
...@@ -412,15 +409,13 @@ static void decon_atomic_flush(struct exynos_drm_crtc *crtc) ...@@ -412,15 +409,13 @@ static void decon_atomic_flush(struct exynos_drm_crtc *crtc)
{ {
struct decon_context *ctx = crtc->ctx; struct decon_context *ctx = crtc->ctx;
unsigned long flags; unsigned long flags;
int i;
if (test_bit(BIT_SUSPENDED, &ctx->flags)) if (test_bit(BIT_SUSPENDED, &ctx->flags))
return; return;
spin_lock_irqsave(&ctx->vblank_lock, flags); spin_lock_irqsave(&ctx->vblank_lock, flags);
for (i = ctx->first_win; i < WINDOWS_NR; i++) decon_shadow_protect(ctx, false);
decon_shadow_protect_win(ctx, i, false);
decon_set_bits(ctx, DECON_UPDATE, STANDALONE_UPDATE_F, ~0); decon_set_bits(ctx, DECON_UPDATE, STANDALONE_UPDATE_F, ~0);
...@@ -540,11 +535,10 @@ static void decon_clear_channels(struct exynos_drm_crtc *crtc) ...@@ -540,11 +535,10 @@ static void decon_clear_channels(struct exynos_drm_crtc *crtc)
goto err; goto err;
} }
for (win = 0; win < WINDOWS_NR; win++) { decon_shadow_protect(ctx, true);
decon_shadow_protect_win(ctx, win, true); for (win = 0; win < WINDOWS_NR; win++)
decon_set_bits(ctx, DECON_WINCONx(win), WINCONx_ENWIN_F, 0); decon_set_bits(ctx, DECON_WINCONx(win), WINCONx_ENWIN_F, 0);
decon_shadow_protect_win(ctx, win, false); decon_shadow_protect(ctx, false);
}
decon_set_bits(ctx, DECON_UPDATE, STANDALONE_UPDATE_F, ~0); decon_set_bits(ctx, DECON_UPDATE, STANDALONE_UPDATE_F, ~0);
......
...@@ -118,6 +118,7 @@ ...@@ -118,6 +118,7 @@
#define WINCONx_ENWIN_F (1 << 0) #define WINCONx_ENWIN_F (1 << 0)
/* SHADOWCON */ /* SHADOWCON */
#define SHADOWCON_PROTECT_MASK GENMASK(14, 10)
#define SHADOWCON_Wx_PROTECT(n) (1 << (10 + (n))) #define SHADOWCON_Wx_PROTECT(n) (1 << (10 + (n)))
/* VIDOSDxD */ /* VIDOSDxD */
......
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