aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/exynos
diff options
context:
space:
mode:
authorSeung-Woo Kim <sw0312.kim@samsung.com>2012-04-23 07:30:13 -0400
committerInki Dae <inki.dae@samsung.com>2012-05-17 07:14:23 -0400
commit8379e4823d04e2552e1395c2410fc16733e28c6e (patch)
tree59b1f74409b8a3e89d91b9a6c80e328ad8d3aa1c /drivers/gpu/drm/exynos
parentab27af85e3154380e65a293b893f79ea0416afdf (diff)
drm/exynos: fixed wrong pageflip finish event for interlace mode
Pageflip finish event for interlace mode has bug on checking top field vsync because of comparing between dma address converted by start coordinates and non-converted dma address. Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
Diffstat (limited to 'drivers/gpu/drm/exynos')
-rw-r--r--drivers/gpu/drm/exynos/exynos_mixer.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
index 2f6727a4e76..3bc01a6b5e9 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -886,7 +886,7 @@ static irqreturn_t mixer_irq_handler(int irq, void *arg)
886 struct exynos_drm_hdmi_context *drm_hdmi_ctx = arg; 886 struct exynos_drm_hdmi_context *drm_hdmi_ctx = arg;
887 struct mixer_context *ctx = drm_hdmi_ctx->ctx; 887 struct mixer_context *ctx = drm_hdmi_ctx->ctx;
888 struct mixer_resources *res = &ctx->mixer_res; 888 struct mixer_resources *res = &ctx->mixer_res;
889 u32 val, val_base; 889 u32 val, base, shadow;
890 890
891 spin_lock(&res->reg_slock); 891 spin_lock(&res->reg_slock);
892 892
@@ -897,12 +897,14 @@ static irqreturn_t mixer_irq_handler(int irq, void *arg)
897 if (val & MXR_INT_STATUS_VSYNC) { 897 if (val & MXR_INT_STATUS_VSYNC) {
898 /* interlace scan need to check shadow register */ 898 /* interlace scan need to check shadow register */
899 if (ctx->interlace) { 899 if (ctx->interlace) {
900 val_base = mixer_reg_read(res, MXR_GRAPHIC_BASE_S(0)); 900 base = mixer_reg_read(res, MXR_GRAPHIC_BASE(0));
901 if (ctx->win_data[0].dma_addr != val_base) 901 shadow = mixer_reg_read(res, MXR_GRAPHIC_BASE_S(0));
902 if (base != shadow)
902 goto out; 903 goto out;
903 904
904 val_base = mixer_reg_read(res, MXR_GRAPHIC_BASE_S(1)); 905 base = mixer_reg_read(res, MXR_GRAPHIC_BASE(1));
905 if (ctx->win_data[1].dma_addr != val_base) 906 shadow = mixer_reg_read(res, MXR_GRAPHIC_BASE_S(1));
907 if (base != shadow)
906 goto out; 908 goto out;
907 } 909 }
908 910