drm/amd/display: enable plane if container of plane_status changed
authorHugo Hu <hugo.hu@amd.com>
Wed, 13 May 2020 08:36:28 +0000 (16:36 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 May 2020 18:00:51 +0000 (14:00 -0400)
[why]
We hit an issue which driver reallocate a pipe from desktop bottom
pipe to video bottom pipe. In this case, driver need to re-enable
plane.

[how]
Enable plane if container of plane status changed.

Signed-off-by: Hugo Hu <hugo.hu@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c

index 223e314d26b4db6285db57d43c10eacac32d245a..13183bd7ea0ff08384894e6fb2d505478c45b2de 100644 (file)
@@ -1160,13 +1160,20 @@ void dcn20_pipe_control_lock(
 
 static void dcn20_detect_pipe_changes(struct pipe_ctx *old_pipe, struct pipe_ctx *new_pipe)
 {
+       bool plane_state_update = false;
        new_pipe->update_flags.raw = 0;
 
        /* Exit on unchanged, unused pipe */
        if (!old_pipe->plane_state && !new_pipe->plane_state)
                return;
+
+       /* Detect plane state update */
+       if (old_pipe->plane_state && new_pipe->plane_state
+                       && (old_pipe->plane_state != new_pipe->plane_state)) {
+               plane_state_update = true;
+       }
        /* Detect pipe enable/disable */
-       if (!old_pipe->plane_state && new_pipe->plane_state) {
+       if ((!old_pipe->plane_state && new_pipe->plane_state) || plane_state_update) {
                new_pipe->update_flags.bits.enable = 1;
                new_pipe->update_flags.bits.mpcc = 1;
                new_pipe->update_flags.bits.dppclk = 1;