drm/amd/display: fix split threshold w/a to work with mpo

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>
This commit is contained in:
Dmytro Laktyushkin 2020-02-28 17:23:31 -05:00 committed by Alex Deucher
parent 1ef893e274
commit cd3e05a795
1 changed files with 13 additions and 26 deletions

View File

@ -2568,38 +2568,25 @@ int dcn20_validate_apply_pipe_split_flags(
bool *split) bool *split)
{ {
int i, pipe_idx, vlevel_split; int i, pipe_idx, vlevel_split;
int plane_count = 0;
bool force_split = false; 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++) { for (i = 0; i < dc->res_pool->pipe_count; i++) {
struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i]; struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i];
bool exit_loop = false;
if (!pipe->stream || pipe->top_pipe) if (pipe->stream && !pipe->prev_odm_pipe &&
continue; (!pipe->top_pipe || pipe->top_pipe->plane_state != pipe->plane_state))
++plane_count;
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;
} }
/* TODO: fix dc bugs and remove this split threshold thing */ if (plane_count > dc->res_pool->pipe_count / 2)
if (context->stream_count > dc->res_pool->pipe_count / 2)
avoid_split = true; avoid_split = true;
/* Avoid split loop looks for lowest voltage level that allows most unsplit pipes possible */ /* Avoid split loop looks for lowest voltage level that allows most unsplit pipes possible */