From: Alvin Lee <alvin.l...@amd.com>

[Why]
There are situations where we go from 2 pipe to 1 pipe in MPO, but this
isn't a pipe split being lost -- it's a plane disappearing in (i.e. video 
overlay
goes away) so we lose one pipe. In these situations we don't want to
disable the pipe in a separate operation from the rest of the pipe
programming sequence. We only want to disable a pipe in a
separate operation when we're actually disabling pipe split.

[How]
Make sure the pipe being lost has the same stream AND plane
as the old top pipe to ensure.

Signed-off-by: Alvin Lee <alvin.l...@amd.com>
Acked-by: Aurabindo Pillai <aurabindo.pil...@amd.com>
---
 .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c  | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c 
b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
index 8ca94f506195..d0f3bf953d02 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
@@ -2765,7 +2765,7 @@ bool dcn10_disconnect_pipes(
                struct dc *dc,
                struct dc_state *context)
 {
-               bool found_stream = false;
+               bool found_pipe = false;
                int i, j;
                struct dce_hwseq *hws = dc->hwseq;
                struct dc_state *old_ctx = dc->current_state;
@@ -2805,26 +2805,28 @@ bool dcn10_disconnect_pipes(
                                        old_ctx->res_ctx.pipe_ctx[i].top_pipe) {
 
                                        /* Find the top pipe in the new ctx for 
the bottom pipe that we
-                                        * want to remove by comparing the 
streams. If both pipes are being
-                                        * disabled then do it in the regular 
pipe programming sequence
+                                        * want to remove by comparing the 
streams and planes. If both
+                                        * pipes are being disabled then do it 
in the regular pipe
+                                        * programming sequence
                                         */
                                        for (j = 0; j < 
dc->res_pool->pipe_count; j++) {
                                                if 
(old_ctx->res_ctx.pipe_ctx[i].top_pipe->stream == 
context->res_ctx.pipe_ctx[j].stream &&
+                                                       
old_ctx->res_ctx.pipe_ctx[i].top_pipe->plane_state == 
context->res_ctx.pipe_ctx[j].plane_state &&
                                                        
!context->res_ctx.pipe_ctx[j].top_pipe &&
                                                        
!context->res_ctx.pipe_ctx[j].update_flags.bits.disable) {
-                                                       found_stream = true;
+                                                       found_pipe = true;
                                                        break;
                                                }
                                        }
 
                                        // Disconnect if the top pipe lost it's 
pipe split
-                                       if (found_stream && 
!context->res_ctx.pipe_ctx[j].bottom_pipe) {
+                                       if (found_pipe && 
!context->res_ctx.pipe_ctx[j].bottom_pipe) {
                                                
hws->funcs.plane_atomic_disconnect(dc, &dc->current_state->res_ctx.pipe_ctx[i]);
                                                DC_LOG_DC("Reset mpcc for pipe 
%d\n", dc->current_state->res_ctx.pipe_ctx[i].pipe_idx);
                                                mpcc_disconnected = true;
                                        }
                                }
-                               found_stream = false;
+                               found_pipe = false;
                        }
                }
 
-- 
2.25.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to