From: Clay King <[email protected]>

[Why]
When transitioning between topologies such as multi-display to single
display ODM 2:1, pipes might not be freed before use.

[How]
In dc_commit_streams, commit an additional, minimal transition if
original transition is not seamless to ensure pipes are freed.

Reviewed-by: Alvin Lee <[email protected]>
Signed-off-by: Clay King <[email protected]>
Signed-off-by: Wayne Lin <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/core/dc.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c 
b/drivers/gpu/drm/amd/display/dc/core/dc.c
index 61d0940cd41f..c17e5843e8b7 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -2399,6 +2399,18 @@ enum dc_status dc_commit_streams(struct dc *dc, struct 
dc_commit_streams_params
                goto fail;
        }
 
+       /*
+        * If not already seamless, make transition seamless by inserting 
intermediate minimal transition
+        */
+       if (dc->hwss.is_pipe_topology_transition_seamless &&
+                       !dc->hwss.is_pipe_topology_transition_seamless(dc, 
dc->current_state, context)) {
+               res = commit_minimal_transition_state(dc, context);
+               if (res != DC_OK) {
+                       BREAK_TO_DEBUGGER();
+                       goto fail;
+               }
+       }
+
        res = dc_commit_state_no_check(dc, context);
 
        for (i = 0; i < params->stream_count; i++) {
-- 
2.43.0

Reply via email to