From: Dale Zhao Date: Fri, 29 May 2020 08:57:02 +0000 (+0800) Subject: drm/amd/display: Disable pipe split for modes with borders X-Git-Tag: v5.9-rc1~134^2~19^2~105 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a0a85ac4eac9b1560d9a40d6636f82f81162de10;p=thirdparty%2Fkernel%2Flinux.git drm/amd/display: Disable pipe split for modes with borders [Why] For some special timing with border, like DMT 640*480 72Hz, pipe split can't handle well. Thus, it will be black screen for these special timing. [How] Disable pipe split for these timing with borders as W/A. Signed-off-by: Dale Zhao Reviewed-by: Tony Cheng Acked-by: Qingqing Zhuo Signed-off-by: Alex Deucher --- diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c index afa99f9675587..fb167393b8fef 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c @@ -2666,6 +2666,23 @@ int dcn20_validate_apply_pipe_split_flags( if (plane_count > dc->res_pool->pipe_count / 2) avoid_split = true; + /* W/A: Mode timing with borders may not work well with pipe split, avoid for this corner case */ + for (i = 0; i < dc->res_pool->pipe_count; i++) { + struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i]; + struct dc_crtc_timing timing; + + if (!pipe->stream) + continue; + else { + timing = pipe->stream->timing; + if (timing.h_border_left + timing.h_border_right + + timing.v_border_top + timing.v_border_bottom > 0) { + avoid_split = true; + break; + } + } + } + /* Avoid split loop looks for lowest voltage level that allows most unsplit pipes possible */ if (avoid_split) { for (i = 0, pipe_idx = 0; i < dc->res_pool->pipe_count; i++) {