Commit cd3e05a7 authored by Dmytro Laktyushkin's avatar Dmytro Laktyushkin Committed by Alex Deucher
Browse files

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: default avatarDmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Reviewed-by: default avatarWesley Chalmers <Wesley.Chalmers@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 1ef893e2
Loading
Loading
Loading
Loading
+13 −26
Original line number Diff line number Diff line
@@ -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 (pipe->stream && !pipe->prev_odm_pipe &&
				(!pipe->top_pipe || pipe->top_pipe->plane_state != pipe->plane_state))
			++plane_count;
	}
		}
		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 (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 */