drm/amd/display: Do cursor updates after stream updates
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Fri, 25 Jan 2019 20:30:24 +0000 (15:30 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 19 Feb 2019 20:58:26 +0000 (15:58 -0500)
[Why]
Cursor updates used to happen after vblank/flip/stream updates before
the stream update refactor. They now happen before stream updates
which means that they're not going to be synced with fb changes
and that they're going to programmed for pipes that we're disabling
within the same commit.

[How]
Move them after stream updates.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: David Francis <David.Francis@amd.com>
Acked-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 3e593d08deaf160e770a98dfdbbfe4184b652e25..7579592052cc07a6f7a073719b1671abffc5e66a 100644 (file)
@@ -4663,10 +4663,9 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
                struct dc_plane_state *dc_plane;
                struct dm_plane_state *dm_new_plane_state = to_dm_plane_state(new_plane_state);
 
-               if (plane->type == DRM_PLANE_TYPE_CURSOR) {
-                       handle_cursor_update(plane, old_plane_state);
+               /* Cursor plane is handled after stream updates */
+               if (plane->type == DRM_PLANE_TYPE_CURSOR)
                        continue;
-               }
 
                if (!fb || !crtc || pcrtc != crtc)
                        continue;
@@ -4866,6 +4865,10 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
                mutex_unlock(&dm->dc_lock);
        }
 
+       for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, i)
+               if (plane->type == DRM_PLANE_TYPE_CURSOR)
+                       handle_cursor_update(plane, old_plane_state);
+
 cleanup:
        kfree(flip);
        kfree(full);