diff mbox

drm/exynos: fimd: fix screen shaking issue on i80 mode

Message ID 1411527361-23813-1-git-send-email-inki.dae@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

Inki Dae Sept. 24, 2014, 2:56 a.m. UTC
This patch resolves a issue that screen is shaked after resumed.

The issue could be incurred when overlay registers are updated to
new buffer while fimd is still transmitting video data.

So this patch make sure to wait for the completion of the transmission
if fimd is transmitting video data before updating overlay registers.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fimd.c |   19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
diff mbox

Patch

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 2f896df..8a45a70 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -665,6 +665,25 @@  static void fimd_win_commit(struct exynos_drm_manager *mgr, int zpos)
 	}
 
 	/*
+	 * Wait for the completion of current transmission if fimd is still
+	 * transmitting video data.
+	 *
+	 * Below codes resolve following issue:
+	 * when resumed, fimd_win_commit() could be called to update overlay
+	 * relevent registers and then pae flip could be performed by userspace
+	 * request. The problem is that te interrupt could occur and
+	 * fimd_trigger() could be called before fimd_win_commit is called by
+	 * page flip function, exynos_drm_crtc_page_flip.
+	 *
+	 * In this case, there is a problem that fimd_win_commit() is called by
+	 * the page flip request while fimd is still transmitting video data
+	 * so overlay registers are updated to new buffer. That makes screen
+	 * to be shaked.
+	 */
+	if (ctx->i80_if && atomic_read(&ctx->triggering))
+		fimd_wait_for_vblank(mgr);
+
+	/*
 	 * SHADOWCON/PRTCON register is used for enabling timing.
 	 *
 	 * for example, once only width value of a register is set,