From 0b9d0416fc28e27cb279021d17bb59e7eba43edb Mon Sep 17 00:00:00 2001 From: Fabien Dessenne Date: Mon, 25 Jan 2016 17:58:48 +0100 Subject: [PATCH] drm/sti: force cursor CLUT fetch It may happen that the cursor is displayed with wrong colors which can be explained by a CLUT wrongly fetched at the first display. Fetching the CLUT at each commit (=move) ensures that the right colors are used, at least from the first cursor move. Signed-off-by: Fabien Dessenne Reviewed-by: Benjamin Gaignard Reviewed-by: Vincent Abriou --- drivers/gpu/drm/sti/sti_cursor.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/sti/sti_cursor.c b/drivers/gpu/drm/sti/sti_cursor.c index a19693adace2..8cac6403475d 100644 --- a/drivers/gpu/drm/sti/sti_cursor.c +++ b/drivers/gpu/drm/sti/sti_cursor.c @@ -127,7 +127,6 @@ static void sti_cursor_atomic_update(struct drm_plane *drm_plane, /* src_x are in 16.16 format */ int src_w = state->src_w >> 16; int src_h = state->src_h >> 16; - bool first_prepare = plane->status == STI_PLANE_DISABLED ? true : false; struct drm_gem_cma_object *cma_obj; u32 y, x; u32 val; @@ -193,12 +192,6 @@ static void sti_cursor_atomic_update(struct drm_plane *drm_plane, val = y << 16 | x; writel(val, cursor->regs + CUR_AWE); - if (first_prepare) { - /* Set and fetch CLUT */ - writel(cursor->clut_paddr, cursor->regs + CUR_CML); - writel(CUR_CTL_CLUT_UPDATE, cursor->regs + CUR_CTL); - } - /* Set memory location, size, and position */ writel(cursor->pixmap.paddr, cursor->regs + CUR_PML); writel(cursor->width, cursor->regs + CUR_PMP); @@ -208,6 +201,10 @@ static void sti_cursor_atomic_update(struct drm_plane *drm_plane, x = sti_vtg_get_pixel_number(*mode, dst_x); writel((y << 16) | x, cursor->regs + CUR_VPO); + /* Set and fetch CLUT */ + writel(cursor->clut_paddr, cursor->regs + CUR_CML); + writel(CUR_CTL_CLUT_UPDATE, cursor->regs + CUR_CTL); + plane->status = STI_PLANE_UPDATED; } -- 2.39.2