]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/amd/display: fix split threshold w/a to work with mpo
authorDmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Fri, 28 Feb 2020 22:23:31 +0000 (17:23 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 19 Mar 2020 04:03:04 +0000 (00:03 -0400)
Right now only stream count is used to avoid split.  This change updates
the W/A to check plane count instead.

Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Reviewed-by: Wesley Chalmers <Wesley.Chalmers@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c

index de7b12520d72e32b47eef48da019e7fdf8cea0c6..faf4f5ef17959695dffc9f12322546544706cdc0 100644 (file)
@@ -2568,38 +2568,25 @@ int dcn20_validate_apply_pipe_split_flags(
                bool *split)
 {
        int i, pipe_idx, vlevel_split;
+       int plane_count = 0;
        bool force_split = false;
-       bool avoid_split = dc->debug.pipe_split_policy != MPC_SPLIT_DYNAMIC;
+       bool avoid_split = dc->debug.pipe_split_policy == MPC_SPLIT_AVOID;
 
-       /* Single display loop, exits if there is more than one display */
+       if (context->stream_count > 1) {
+               if (dc->debug.pipe_split_policy == MPC_SPLIT_AVOID_MULT_DISP)
+                       avoid_split = true;
+       } else if (dc->debug.force_single_disp_pipe_split)
+                       force_split = true;
+
+       /* TODO: fix dc bugs and remove this split threshold thing */
        for (i = 0; i < dc->res_pool->pipe_count; i++) {
                struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i];
-               bool exit_loop = false;
-
-               if (!pipe->stream || pipe->top_pipe)
-                       continue;
 
-               if (dc->debug.force_single_disp_pipe_split) {
-                       if (!force_split)
-                               force_split = true;
-                       else {
-                               force_split = false;
-                               exit_loop = true;
-                       }
-               }
-               if (dc->debug.pipe_split_policy == MPC_SPLIT_AVOID_MULT_DISP) {
-                       if (avoid_split)
-                               avoid_split = false;
-                       else {
-                               avoid_split = true;
-                               exit_loop = true;
-                       }
-               }
-               if (exit_loop)
-                       break;
+               if (pipe->stream && !pipe->prev_odm_pipe &&
+                               (!pipe->top_pipe || pipe->top_pipe->plane_state != pipe->plane_state))
+                       ++plane_count;
        }
-       /* TODO: fix dc bugs and remove this split threshold thing */
-       if (context->stream_count > dc->res_pool->pipe_count / 2)
+       if (plane_count > dc->res_pool->pipe_count / 2)
                avoid_split = true;
 
        /* Avoid split loop looks for lowest voltage level that allows most unsplit pipes possible */