drm/sti: do not post GDP command if no update
authorVincent Abriou <vincent.abriou@st.com>
Thu, 2 Feb 2017 08:50:48 +0000 (09:50 +0100)
committerVincent Abriou <vincent.abriou@st.com>
Fri, 10 Feb 2017 08:34:39 +0000 (09:34 +0100)
Do not process update requests with unmodified parameters.

This typically happens when the driver is called with legacy
(non-atomic) IOCTL : in that case atomic_update() is called multiple
times with the same parameters.

Signed-off-by: Vincent Abriou <vincent.abriou@st.com>
drivers/gpu/drm/sti/sti_gdp.c

index 7f6d0790cca6d9064d9484848309aec5c8e60b4d..86279f5022c28a6ccf00efa66fff90f21a136f21 100644 (file)
@@ -708,6 +708,21 @@ static void sti_gdp_atomic_update(struct drm_plane *drm_plane,
        if (!crtc || !fb)
                return;
 
+       if ((oldstate->fb == state->fb) &&
+           (oldstate->crtc_x == state->crtc_x) &&
+           (oldstate->crtc_y == state->crtc_y) &&
+           (oldstate->crtc_w == state->crtc_w) &&
+           (oldstate->crtc_h == state->crtc_h) &&
+           (oldstate->src_x == state->src_x) &&
+           (oldstate->src_y == state->src_y) &&
+           (oldstate->src_w == state->src_w) &&
+           (oldstate->src_h == state->src_h)) {
+               /* No change since last update, do not post cmd */
+               DRM_DEBUG_DRIVER("No change, not posting cmd\n");
+               plane->status = STI_PLANE_UPDATED;
+               return;
+       }
+
        if (!gdp->vtg) {
                struct sti_compositor *compo = dev_get_drvdata(gdp->dev);
                struct sti_mixer *mixer = to_sti_mixer(crtc);