Skip to content

Commit d794091

Browse files
Nicholas Kazlauskasalexdeucher
authored andcommitted
drm/amd/display: Fix max vstartup calculation for modes with borders
[Why] Vertical and horizontal borders in timings are treated as increasing the active area - vblank and hblank actually shrink. Our input into DML does not include these borders so it incorrectly assumes it has more time than available for vstartup and tmdl calculations for some modes with borders. An example of such a timing would be 640x480@72Hz: h_total: 832 h_border_left: 8 h_addressable: 640 h_border_right: 8 h_front_porch: 16 h_sync_width: 40 v_total: 520 v_border_top: 8 v_addressable: 480 v_border_bottom: 8 v_front_porch: 1 v_sync_width: 3 pix_clk_100hz: 315000 [How] Include borders as part of destination vactive/hactive. This change DCN20+ so it has wide impact, but the destination vactive and hactive are only really used for vstartup calculation anyway. Most modes do not have vertical or horizontal borders. Reviewed-by: Dmytro Laktyushkin <[email protected]> Acked-by: Rodrigo Siqueira <[email protected]> Signed-off-by: Nicholas Kazlauskas <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 32f1d0c commit d794091

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,8 +2093,10 @@ int dcn20_populate_dml_pipes_from_context(
20932093
- timing->v_border_bottom;
20942094
pipes[pipe_cnt].pipe.dest.htotal = timing->h_total;
20952095
pipes[pipe_cnt].pipe.dest.vtotal = v_total;
2096-
pipes[pipe_cnt].pipe.dest.hactive = timing->h_addressable;
2097-
pipes[pipe_cnt].pipe.dest.vactive = timing->v_addressable;
2096+
pipes[pipe_cnt].pipe.dest.hactive =
2097+
timing->h_addressable + timing->h_border_left + timing->h_border_right;
2098+
pipes[pipe_cnt].pipe.dest.vactive =
2099+
timing->v_addressable + timing->v_border_top + timing->v_border_bottom;
20982100
pipes[pipe_cnt].pipe.dest.interlaced = timing->flags.INTERLACE;
20992101
pipes[pipe_cnt].pipe.dest.pixel_rate_mhz = timing->pix_clk_100hz/10000.0;
21002102
if (timing->timing_3d_format == TIMING_3D_FORMAT_HW_FRAME_PACKING)

0 commit comments

Comments
 (0)