]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: ensure committing streams is seamless
authorClay King <clayking@amd.com>
Mon, 7 Jul 2025 17:21:30 +0000 (13:21 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:34:09 +0000 (15:34 -0500)
[ Upstream commit ca74cc428f2b9d0170c56b473dbcfd7fa01daf2d ]

[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 <alvin.lee2@amd.com>
Signed-off-by: Clay King <clayking@amd.com>
Signed-off-by: Wayne Lin <wayne.lin@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/dc/core/dc.c

index 13d5f0451fecf4078d1ff4abb62c6e03789f94ea..bdcbebd5722d48132d6ffe1dd8a968628546230a 100644 (file)
@@ -2182,6 +2182,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++) {