Commit 0f3b9542 authored by Wenjing Liu's avatar Wenjing Liu Committed by Alex Deucher
Browse files

drm/amd/display: Refactor recout calculation with a more generic formula



[Why]
Current recout calculation has a few assumptions and implementation
for MPO + ODM combine calculation is very specific. The equation has
too many cases without enough comments to document the detail.

[How]
The change remove the following assumptions:
1. When MPO is enabled, we only allow ODM Combine 2:1
2. ODM Combine always has even segment width.
3. Secondary MPO plane's pipe_ctx copies pre_odm_pipe from
its top pipe.

The change applies a generic formula with more details in comment to
document this solution so it is eaiser to learn and debug later.

Reviewed-by: default avatarDmytro Laktyushkin <dmytro.laktyushkin@amd.com>
Acked-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarWenjing Liu <wenjing.liu@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 6917b0b7
Loading
Loading
Loading
Loading
+398 −162

File changed.

Preview size limit exceeded, changes collapsed.

+2 −2
Original line number Diff line number Diff line
@@ -854,8 +854,8 @@ bool dcn21_fast_validate_bw(struct dc *dc,
		/* We only support full screen mpo with ODM */
		if (vba->ODMCombineEnabled[vba->pipe_plane[pipe_idx]] != dm_odm_combine_mode_disabled
				&& pipe->plane_state && mpo_pipe
				&& memcmp(&mpo_pipe->plane_res.scl_data.recout,
						&pipe->plane_res.scl_data.recout,
				&& memcmp(&mpo_pipe->plane_state->clip_rect,
						&pipe->stream->src,
						sizeof(struct rect)) != 0) {
			ASSERT(mpo_pipe->plane_state != pipe->plane_state);
			goto validate_fail;
+2 −2
Original line number Diff line number Diff line
@@ -1705,8 +1705,8 @@ noinline bool dcn30_internal_validate_bw(
			/* We only support full screen mpo with ODM */
			if (vba->ODMCombineEnabled[vba->pipe_plane[pipe_idx]] != dm_odm_combine_mode_disabled
					&& pipe->plane_state && mpo_pipe
					&& memcmp(&mpo_pipe->plane_res.scl_data.recout,
							&pipe->plane_res.scl_data.recout,
					&& memcmp(&mpo_pipe->plane_state->clip_rect,
							&pipe->stream->src,
							sizeof(struct rect)) != 0) {
				ASSERT(mpo_pipe->plane_state != pipe->plane_state);
				goto validate_fail;
+2 −2
Original line number Diff line number Diff line
@@ -1717,8 +1717,8 @@ bool dcn32_internal_validate_bw(struct dc *dc,
		if (vba->ODMCombineEnabled[vba->pipe_plane[pipe_idx]] != dm_odm_combine_mode_disabled
				&& !dc->config.enable_windowed_mpo_odm
				&& pipe->plane_state && mpo_pipe
				&& memcmp(&mpo_pipe->plane_res.scl_data.recout,
						&pipe->plane_res.scl_data.recout,
				&& memcmp(&mpo_pipe->plane_state->clip_rect,
						&pipe->stream->src,
						sizeof(struct rect)) != 0) {
			ASSERT(mpo_pipe->plane_state != pipe->plane_state);
			goto validate_fail;