drm/amd/display: fix LFC tearing at top of screen
authorAnthony Koo <Anthony.Koo@amd.com>
Fri, 6 Apr 2018 16:12:06 +0000 (12:12 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 27 Aug 2018 16:10:54 +0000 (11:10 -0500)
Tearing occurred because new VTOTAL MIN/MAX was being programmed
too early.
The flip can happen within the VUPDATE high region, and the new min/max
would take effect immediately. But this means that frame is not variable
anymore, and tearing would occur when the flip actually happens.

The fixed insert duration should be programmed on the first VUPDATE
interrupt instead.

Signed-off-by: Anthony Koo <Anthony.Koo@amd.com>
Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/modules/freesync/freesync.c

index abd5c9374eb32d57b04d2bdad1af0299d14d3247..daad60ec1ce3b843545da6cc7d1256668d4c8d8f 100644 (file)
@@ -371,12 +371,6 @@ static void apply_below_the_range(struct core_freesync *core_freesync,
                        inserted_frame_duration_in_us;
                in_out_vrr->btr.frames_to_insert = frames_to_insert;
                in_out_vrr->btr.frame_counter = frames_to_insert;
-
-               in_out_vrr->adjust.v_total_min =
-                       calc_v_total_from_duration(stream, in_out_vrr,
-                               in_out_vrr->btr.inserted_duration_in_us);
-               in_out_vrr->adjust.v_total_max =
-                               in_out_vrr->adjust.v_total_min;
        }
 }