Make provision for fixed refresh rate timings while updating the
crtc timings for vrr.

Signed-off-by: Ankit Nautiyal <[email protected]>
---
 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

Reply via email to