drm/amd/display: calculate the remain segments for all pipes
[ Upstream commit d3069feecdb5542604d29b59acfd1fd213bad95b ] [WHY] In some cases the remain de-tile buffer segments will be greater than zero if we don't add the non-top pipe to calculate, at this time the override de-tile buffer size will be valid and used. But it makes the de-tile buffer segments used finally for all of pipes exceed the maximum. [HOW] Add the non-top pipe to calculate the remain de-tile buffer segments. Don't set override size to use the average according to pipe count if the value exceed the maximum. Reviewed-by: Charlene Liu <charlene.liu@amd.com> Signed-off-by: Zhikai Zhai <zhikai.zhai@amd.com> Signed-off-by: Tom Chung <chiahsuan.chung@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
65e51bc280
commit
83e4f1de08
@@ -1699,7 +1699,7 @@ static int dcn315_populate_dml_pipes_from_context(
|
|||||||
pipes[pipe_cnt].dout.dsc_input_bpc = 0;
|
pipes[pipe_cnt].dout.dsc_input_bpc = 0;
|
||||||
DC_FP_START();
|
DC_FP_START();
|
||||||
dcn31_zero_pipe_dcc_fraction(pipes, pipe_cnt);
|
dcn31_zero_pipe_dcc_fraction(pipes, pipe_cnt);
|
||||||
if (pixel_rate_crb && !pipe->top_pipe && !pipe->prev_odm_pipe) {
|
if (pixel_rate_crb) {
|
||||||
int bpp = source_format_to_bpp(pipes[pipe_cnt].pipe.src.source_format);
|
int bpp = source_format_to_bpp(pipes[pipe_cnt].pipe.src.source_format);
|
||||||
/* Ceil to crb segment size */
|
/* Ceil to crb segment size */
|
||||||
int approx_det_segs_required_for_pstate = dcn_get_approx_det_segs_required_for_pstate(
|
int approx_det_segs_required_for_pstate = dcn_get_approx_det_segs_required_for_pstate(
|
||||||
@@ -1756,7 +1756,6 @@ static int dcn315_populate_dml_pipes_from_context(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pipe->top_pipe && !pipe->prev_odm_pipe) {
|
|
||||||
bool split_required = pipe->stream->timing.pix_clk_100hz >= dcn_get_max_non_odm_pix_rate_100hz(&dc->dml.soc)
|
bool split_required = pipe->stream->timing.pix_clk_100hz >= dcn_get_max_non_odm_pix_rate_100hz(&dc->dml.soc)
|
||||||
|| (pipe->plane_state && pipe->plane_state->src_rect.width > 5120);
|
|| (pipe->plane_state && pipe->plane_state->src_rect.width > 5120);
|
||||||
|
|
||||||
@@ -1777,7 +1776,6 @@ static int dcn315_populate_dml_pipes_from_context(
|
|||||||
pipes[pipe_cnt].pipe.src.det_size_override *= DCN3_15_CRB_SEGMENT_SIZE_KB;
|
pipes[pipe_cnt].pipe.src.det_size_override *= DCN3_15_CRB_SEGMENT_SIZE_KB;
|
||||||
|
|
||||||
crb_idx++;
|
crb_idx++;
|
||||||
}
|
|
||||||
pipe_cnt++;
|
pipe_cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user