drm/amd/display: change number of cursor policy for dml calculation.
[Why] vstartup calculation is incorrect due to use 2 number of cursors and result in an underflow when playing video in full screen mode and combines graphic plane and video plane. [How] Apply new policy for dml calculation. 1 cursor for graphic plane, 0 cursor for video plane. Signed-off-by: Yongqiang Sun <yongqiang.sun@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
f9b9b6d972
commit
8f174fdbe9
@ -299,7 +299,6 @@ void optc1_set_vtg_params(struct timing_generator *optc,
|
||||
uint32_t asic_blank_end;
|
||||
uint32_t v_init;
|
||||
uint32_t v_fp2 = 0;
|
||||
int32_t vertical_line_start;
|
||||
|
||||
struct optc *optc1 = DCN10TG_FROM_TG(optc);
|
||||
|
||||
@ -316,9 +315,8 @@ void optc1_set_vtg_params(struct timing_generator *optc,
|
||||
patched_crtc_timing.v_border_top;
|
||||
|
||||
/* if VSTARTUP is before VSYNC, FP2 is the offset, otherwise 0 */
|
||||
vertical_line_start = asic_blank_end - optc1->vstartup_start + 1;
|
||||
if (vertical_line_start < 0)
|
||||
v_fp2 = -vertical_line_start;
|
||||
if (optc1->vstartup_start > asic_blank_end)
|
||||
v_fp2 = optc1->vstartup_start - asic_blank_end;
|
||||
|
||||
/* Interlace */
|
||||
if (REG(OTG_INTERLACE_CONTROL)) {
|
||||
|
@ -153,6 +153,7 @@ struct _vcs_dpi_ip_params_st dcn2_0_ip = {
|
||||
.xfc_supported = true,
|
||||
.xfc_fill_bw_overhead_percent = 10.0,
|
||||
.xfc_fill_constant_bytes = 0,
|
||||
.number_of_cursors = 1,
|
||||
};
|
||||
|
||||
struct _vcs_dpi_ip_params_st dcn2_0_nv14_ip = {
|
||||
@ -220,7 +221,8 @@ struct _vcs_dpi_ip_params_st dcn2_0_nv14_ip = {
|
||||
.xfc_supported = true,
|
||||
.xfc_fill_bw_overhead_percent = 10.0,
|
||||
.xfc_fill_constant_bytes = 0,
|
||||
.ptoi_supported = 0
|
||||
.ptoi_supported = 0,
|
||||
.number_of_cursors = 1,
|
||||
};
|
||||
|
||||
struct _vcs_dpi_soc_bounding_box_st dcn2_0_soc = {
|
||||
@ -2042,14 +2044,17 @@ int dcn20_populate_dml_pipes_from_context(
|
||||
/* todo: default max for now, until there is logic reflecting this in dc*/
|
||||
pipes[pipe_cnt].dout.output_bpc = 12;
|
||||
/*
|
||||
* Use max cursor settings for calculations to minimize
|
||||
* For graphic plane, cursor number is 1, nv12 is 0
|
||||
* bw calculations due to cursor on/off
|
||||
*/
|
||||
pipes[pipe_cnt].pipe.src.num_cursors = 2;
|
||||
if (res_ctx->pipe_ctx[i].plane_state &&
|
||||
res_ctx->pipe_ctx[i].plane_state->address.type == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE)
|
||||
pipes[pipe_cnt].pipe.src.num_cursors = 0;
|
||||
else
|
||||
pipes[pipe_cnt].pipe.src.num_cursors = dc->dml.ip.number_of_cursors;
|
||||
|
||||
pipes[pipe_cnt].pipe.src.cur0_src_width = 256;
|
||||
pipes[pipe_cnt].pipe.src.cur0_bpp = dm_cur_32bit;
|
||||
pipes[pipe_cnt].pipe.src.cur1_src_width = 256;
|
||||
pipes[pipe_cnt].pipe.src.cur1_bpp = dm_cur_32bit;
|
||||
|
||||
if (!res_ctx->pipe_ctx[i].plane_state) {
|
||||
pipes[pipe_cnt].pipe.src.is_hsplit = pipes[pipe_cnt].pipe.dest.odm_combine != dm_odm_combine_mode_disabled;
|
||||
|
@ -156,7 +156,8 @@ struct _vcs_dpi_ip_params_st dcn2_1_ip = {
|
||||
.xfc_supported = false,
|
||||
.xfc_fill_bw_overhead_percent = 10.0,
|
||||
.xfc_fill_constant_bytes = 0,
|
||||
.ptoi_supported = 0
|
||||
.ptoi_supported = 0,
|
||||
.number_of_cursors = 1,
|
||||
};
|
||||
|
||||
struct _vcs_dpi_soc_bounding_box_st dcn2_1_soc = {
|
||||
|
@ -204,6 +204,7 @@ struct _vcs_dpi_ip_params_st {
|
||||
unsigned int LineBufferFixedBpp;
|
||||
unsigned int can_vstartup_lines_exceed_vsync_plus_back_porch_lines_minus_one;
|
||||
unsigned int bug_forcing_LC_req_same_size_fixed;
|
||||
unsigned int number_of_cursors;
|
||||
};
|
||||
|
||||
struct _vcs_dpi_display_xfc_params_st {
|
||||
|
Loading…
Reference in New Issue
Block a user