Commit 953c2901 authored by Anthony Koo's avatar Anthony Koo Committed by Alex Deucher

drm/amd/display: refactor vupdate interrupt registration

We only need to register once OS calls the interrupt control.
Also, if we are entering static screen mode, disable after ramping is done.
Disable shall be done via timer of 2 seconds regardless of ramping
complete or not, just to simplify.

Also, ramp to mid instead of min, due to better flicker performance...
Signed-off-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Reviewed-by: default avatarAric Cyr <Aric.Cyr@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 9410a377
...@@ -109,12 +109,6 @@ static unsigned int calc_duration_in_us_from_v_total( ...@@ -109,12 +109,6 @@ static unsigned int calc_duration_in_us_from_v_total(
* 1000) * stream->timing.h_total, * 1000) * stream->timing.h_total,
stream->timing.pix_clk_khz)); stream->timing.pix_clk_khz));
if (duration_in_us < in_vrr->min_duration_in_us)
duration_in_us = in_vrr->min_duration_in_us;
if (duration_in_us > in_vrr->max_duration_in_us)
duration_in_us = in_vrr->max_duration_in_us;
return duration_in_us; return duration_in_us;
} }
...@@ -230,10 +224,9 @@ static void update_v_total_for_static_ramp( ...@@ -230,10 +224,9 @@ static void update_v_total_for_static_ramp(
} }
} }
v_total = calc_v_total_from_duration(stream, v_total = div64_u64(div64_u64(((unsigned long long)(
in_out_vrr, current_duration_in_us) * stream->timing.pix_clk_khz),
current_duration_in_us); stream->timing.h_total), 1000);
in_out_vrr->adjust.v_total_min = v_total; in_out_vrr->adjust.v_total_min = v_total;
in_out_vrr->adjust.v_total_max = v_total; in_out_vrr->adjust.v_total_max = v_total;
...@@ -702,7 +695,11 @@ void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync, ...@@ -702,7 +695,11 @@ void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync,
} else if (in_out_vrr->state == VRR_STATE_ACTIVE_FIXED) { } else if (in_out_vrr->state == VRR_STATE_ACTIVE_FIXED) {
in_out_vrr->fixed.target_refresh_in_uhz = in_out_vrr->fixed.target_refresh_in_uhz =
in_out_vrr->min_refresh_in_uhz; in_out_vrr->min_refresh_in_uhz;
if (in_out_vrr->fixed.ramping_active) { if (in_out_vrr->fixed.ramping_active &&
in_out_vrr->fixed.fixed_active) {
/* Do not update vtotals if ramping is already active
* in order to continue ramp from current refresh.
*/
in_out_vrr->fixed.fixed_active = true; in_out_vrr->fixed.fixed_active = true;
} else { } else {
in_out_vrr->fixed.fixed_active = true; in_out_vrr->fixed.fixed_active = true;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment