Make provision for fixed refresh rate timings while updating the crtc timings for vrr. Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@xxxxxxxxx> --- drivers/gpu/drm/i915/display/intel_vblank.c | 5 +++++ drivers/gpu/drm/i915/display/intel_vrr.c | 7 ++++++- drivers/gpu/drm/i915/display/intel_vrr.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c index 3ed814245b61..8abcf4c2cfe7 100644 --- a/drivers/gpu/drm/i915/display/intel_vblank.c +++ b/drivers/gpu/drm/i915/display/intel_vblank.c @@ -523,6 +523,11 @@ static void intel_crtc_active_timings(struct drm_display_mode *mode, mode->crtc_vblank_end = intel_vrr_vmax_vtotal(crtc_state); mode->crtc_vblank_start = intel_vrr_vmin_vblank_start(crtc_state); *vmax_vblank_start = intel_vrr_vmax_vblank_start(crtc_state); + } else if (vrr_mode == INTEL_VRRTG_MODE_FIXED_RR) { + mode->crtc_vtotal = intel_vrr_fixed_rr_vtotal(crtc_state); + mode->crtc_vblank_end = intel_vrr_fixed_rr_vtotal(crtc_state); + mode->crtc_vblank_start = intel_vrr_vmin_vblank_start(crtc_state); + *vmax_vblank_start = intel_vrr_fixed_rr_vmax_vblank_start(crtc_state); } else { MISSING_CASE(vrr_mode); } diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c index c852de748ce3..e44335cdc383 100644 --- a/drivers/gpu/drm/i915/display/intel_vrr.c +++ b/drivers/gpu/drm/i915/display/intel_vrr.c @@ -250,7 +250,6 @@ void intel_vrr_compute_vrr_timings(struct intel_crtc_state *crtc_state) * For fixed refresh rate mode Vmin, Vmax and Flipline all are set to * Vtotal value. */ -static int intel_vrr_fixed_rr_vtotal(const struct intel_crtc_state *crtc_state) { struct intel_display *display = to_intel_display(crtc_state); @@ -263,6 +262,12 @@ int intel_vrr_fixed_rr_vtotal(const struct intel_crtc_state *crtc_state) intel_vrr_real_vblank_delay(crtc_state); } +int intel_vrr_fixed_rr_vmax_vblank_start(const struct intel_crtc_state *crtc_state) +{ + return intel_vrr_fixed_rr_vtotal(crtc_state) - + intel_vrr_vblank_exit_length(crtc_state); +} + static int intel_vrr_fixed_rr_vmax(const struct intel_crtc_state *crtc_state) { diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h b/drivers/gpu/drm/i915/display/intel_vrr.h index 5ae8d6409f1a..9ba988af703a 100644 --- a/drivers/gpu/drm/i915/display/intel_vrr.h +++ b/drivers/gpu/drm/i915/display/intel_vrr.h @@ -35,5 +35,7 @@ int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state); int intel_vrr_vblank_delay(const struct intel_crtc_state *crtc_state); bool intel_vrr_is_enabled(const struct intel_crtc_state *crtc_state); bool intel_vrr_is_mode_vrr(const struct intel_crtc_state *crtc_state); +int intel_vrr_fixed_rr_vtotal(const struct intel_crtc_state *crtc_state); +int intel_vrr_fixed_rr_vmax_vblank_start(const struct intel_crtc_state *crtc_state); #endif /* __INTEL_VRR_H__ */ -- 2.45.2