drm/amd/display: Add minimal pipe split transition state
authorDillon Varone <dillon.varone@amd.com>
Thu, 17 Feb 2022 20:33:03 +0000 (15:33 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Mar 2022 18:25:15 +0000 (14:25 -0400)
[WHY?] When adding/removng a plane to some configurations,
unsupported pipe programming can occur when moving to a new plane.

[HOW?]
Add a safe transistion state before programming new configuration.

Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Alan Liu <HaoPing.Liu@amd.com>
Signed-off-by: Dillon Varone <dillon.varone@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc.c

index 61e3bb9..01b5996 100644 (file)
@@ -1082,7 +1082,8 @@ static void disable_dangling_plane(struct dc *dc, struct dc_state *context)
                                break;
                        }
                }
-               if (!should_disable && pipe_split_change)
+               if (!should_disable && pipe_split_change &&
+                               dc->current_state->stream_count != context->stream_count)
                        should_disable = true;
 
                if (should_disable && old_stream) {
@@ -1690,6 +1691,7 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c
        struct pipe_ctx *pipe;
        int i, k, l;
        struct dc_stream_state *dc_streams[MAX_STREAMS] = {0};
+       struct dc_state *old_state;
 
 #if defined(CONFIG_DRM_AMD_DC_DCN)
        dc_z10_restore(dc);
@@ -1808,10 +1810,11 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c
        for (i = 0; i < context->stream_count; i++)
                context->streams[i]->mode_changed = false;
 
-       dc_release_state(dc->current_state);
-
+       old_state = dc->current_state;
        dc->current_state = context;
 
+       dc_release_state(old_state);
+
        dc_retain_state(dc->current_state);
 
        return result;