From: Andrzej Hajda <a.hajda@samsung.com>
Date: Wed, 5 Apr 2017 09:28:29 +0200
Subject: drm/exynos/decon5433: always do sw-trigger when vblanks enabled
Git-commit: 366dcad34c2fe1684bd93892d06e774e44600f34
Patch-mainline: v4.13-rc1
References: FATE#326289 FATE#326079 FATE#326049 FATE#322398 FATE#326166
When vblanks are enabled userspace and/or kernel can expect vblank
interrupt at declared period of time. To generate vblank interrupt
image transfer must be triggered. This patch fixes vblank timeouts
in case of sw-trigger mode.
Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
drivers/gpu/drm/exynos/exynos5433_drm_decon.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
--- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
+++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
@@ -49,6 +49,7 @@ static const char * const decon_clks_nam
enum decon_flag_bits {
BIT_CLKS_ENABLED,
+ BIT_IRQS_ENABLED,
BIT_WIN_UPDATED,
BIT_SUSPENDED
};
@@ -104,6 +105,7 @@ static int decon_enable_vblank(struct ex
val |= VIDINTCON0_INTFRMEN | VIDINTCON0_FRAMESEL_FP;
writel(val, ctx->addr + DECON_VIDINTCON0);
+ set_bit(BIT_IRQS_ENABLED, &ctx->flags);
return 0;
}
@@ -112,6 +114,7 @@ static void decon_disable_vblank(struct
{
struct decon_context *ctx = crtc->ctx;
+ clear_bit(BIT_IRQS_ENABLED, &ctx->flags);
if (test_bit(BIT_SUSPENDED, &ctx->flags))
return;
@@ -518,7 +521,8 @@ static void decon_te_irq_handler(struct
(ctx->out_type & I80_HW_TRG))
return;
- if (test_and_clear_bit(BIT_WIN_UPDATED, &ctx->flags))
+ if (test_and_clear_bit(BIT_WIN_UPDATED, &ctx->flags) ||
+ test_bit(BIT_IRQS_ENABLED, &ctx->flags))
decon_set_bits(ctx, DECON_TRIGCON, TRIGCON_SWTRIGCMD, ~0);
}