summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/display/dc/dcn30
diff options
context:
space:
mode:
authorEric Bernstein <eric.bernstein@amd.com>2021-12-10 15:04:06 -0800
committerAlex Deucher <alexander.deucher@amd.com>2021-12-14 16:08:33 -0500
commitb477143566d5b16c8b92ffec2cb3a896fe818509 (patch)
treedae61c86f3492937394ec07d7072cfdd8350b7ee /drivers/gpu/drm/amd/display/dc/dcn30
parent47e62dbd8dd30af66e8fdf1930a326971609dd32 (diff)
drm/amd/display: ODM + MPO window on only one half of ODM
[Why] For ODM + MPO window on one half of ODM, only 3 pipes should be allocated and scaling parameters adjusted to handle this case [How] Fix pipe allocation when MPO viewport is only on one side of ODM split, and modify scaling paramters. Added diags test cases for ODM + windows MPO, where MPO window is on right half, left half, and both halves or ODM. Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> Acked-by: Pavle Kotarac <Pavle.Kotarac@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Eric Bernstein <eric.bernstein@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/dcn30')
-rw-r--r--drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c
index f786fff4a445..369ceeeddc7e 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c
@@ -1761,6 +1761,17 @@ static bool dcn30_split_stream_for_mpc_or_odm(
int pipe_idx = sec_pipe->pipe_idx;
const struct resource_pool *pool = dc->res_pool;
+ if (pri_pipe->plane_state) {
+ /* ODM + window MPO, where MPO window is on left half only */
+ if (pri_pipe->plane_state->clip_rect.x + pri_pipe->plane_state->clip_rect.width <=
+ pri_pipe->stream->src.x + pri_pipe->stream->src.width/2)
+ return true;
+
+ /* ODM + window MPO, where MPO window is on right half only */
+ if (pri_pipe->plane_state->clip_rect.x >= pri_pipe->stream->src.width/2)
+ return true;
+ }
+
*sec_pipe = *pri_pipe;
sec_pipe->pipe_idx = pipe_idx;