mirror of https://gitee.com/openkylin/linux.git
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:
parent
1ef893e274
commit
cd3e05a795
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue