drm/sti: force cursor CLUT fetch
authorFabien Dessenne <fabien.dessenne@st.com>
Mon, 25 Jan 2016 16:58:48 +0000 (17:58 +0100)
committerVincent Abriou <vincent.abriou@st.com>
Fri, 26 Feb 2016 09:03:59 +0000 (10:03 +0100)
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 <fabien.dessenne@st.com>
Reviewed-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Reviewed-by: Vincent Abriou <vincent.abriou@st.com>
drivers/gpu/drm/sti/sti_cursor.c

index a19693a..8cac640 100644 (file)
@@ -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;
 }