On 12/11/2024 2:39 AM, Ville Syrjala wrote:
From: Ville Syrjälä <[email protected]>

On ICL/TGL vmin/vmax/flipline won't actually match the
vtotal valeues (currently they do, but that is wrong and

typo: values


needs to be fixed). Add a few helpers that will compute the
actual vtotal values for us.

Signed-off-by: Ville Syrjälä <[email protected]>

Reviewed-by: Ankit Nautiyal <[email protected]>


---
  drivers/gpu/drm/i915/display/intel_dsb.c    |  2 +-
  drivers/gpu/drm/i915/display/intel_vblank.c |  4 ++--
  drivers/gpu/drm/i915/display/intel_vrr.c    | 11 +++++++++++
  drivers/gpu/drm/i915/display/intel_vrr.h    |  2 ++
  4 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c 
b/drivers/gpu/drm/i915/display/intel_dsb.c
index e6f8fc743fb4..fcb8bf9cb313 100644
--- a/drivers/gpu/drm/i915/display/intel_dsb.c
+++ b/drivers/gpu/drm/i915/display/intel_dsb.c
@@ -140,7 +140,7 @@ static int dsb_vtotal(struct intel_atomic_state *state,
        const struct intel_crtc_state *crtc_state = 
pre_commit_crtc_state(state, crtc);
if (pre_commit_is_vrr_active(state, crtc))
-               return crtc_state->vrr.vmax;
+               return intel_vrr_vmax_vtotal(crtc_state);
        else
                return intel_mode_vtotal(&crtc_state->hw.adjusted_mode);
  }
diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c 
b/drivers/gpu/drm/i915/display/intel_vblank.c
index a95fb3349eba..6f0e0c64187d 100644
--- a/drivers/gpu/drm/i915/display/intel_vblank.c
+++ b/drivers/gpu/drm/i915/display/intel_vblank.c
@@ -523,8 +523,8 @@ void intel_crtc_update_active_timings(const struct 
intel_crtc_state *crtc_state,
                drm_WARN_ON(display->drm,
                            (mode_flags & I915_MODE_FLAG_VRR) == 0);
- adjusted_mode.crtc_vtotal = crtc_state->vrr.vmax;
-               adjusted_mode.crtc_vblank_end = crtc_state->vrr.vmax;
+               adjusted_mode.crtc_vtotal = intel_vrr_vmax_vtotal(crtc_state);
+               adjusted_mode.crtc_vblank_end = 
intel_vrr_vmax_vtotal(crtc_state);
                adjusted_mode.crtc_vblank_start = 
intel_vrr_vmin_vblank_start(crtc_state);
                vmax_vblank_start = intel_vrr_vmax_vblank_start(crtc_state);
        } else {
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c 
b/drivers/gpu/drm/i915/display/intel_vrr.c
index 1b0a8e001141..0d40402fe043 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.c
+++ b/drivers/gpu/drm/i915/display/intel_vrr.c
@@ -103,6 +103,17 @@ static int intel_vrr_vblank_exit_length(const struct 
intel_crtc_state *crtc_stat
                return crtc_state->vrr.pipeline_full + 
crtc_state->framestart_delay + 1;
  }
+int intel_vrr_vmin_vtotal(const struct intel_crtc_state *crtc_state)
+{
+       /* Min vblank actually determined by flipline that is always >=vmin+1 */
+       return crtc_state->vrr.vmin + 1;
+}
+
+int intel_vrr_vmax_vtotal(const struct intel_crtc_state *crtc_state)
+{
+       return crtc_state->vrr.vmax;
+}
+
  int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state)
  {
        /* Min vblank actually determined by flipline that is always >=vmin+1 */
diff --git a/drivers/gpu/drm/i915/display/intel_vrr.h 
b/drivers/gpu/drm/i915/display/intel_vrr.h
index b3b45c675020..75db88ae9cc4 100644
--- a/drivers/gpu/drm/i915/display/intel_vrr.h
+++ b/drivers/gpu/drm/i915/display/intel_vrr.h
@@ -26,6 +26,8 @@ void intel_vrr_send_push(const struct intel_crtc_state 
*crtc_state);
  bool intel_vrr_is_push_sent(const struct intel_crtc_state *crtc_state);
  void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state);
  void intel_vrr_get_config(struct intel_crtc_state *crtc_state);
+int intel_vrr_vmax_vtotal(const struct intel_crtc_state *crtc_state);
+int intel_vrr_vmin_vtotal(const struct intel_crtc_state *crtc_state);
  int intel_vrr_vmax_vblank_start(const struct intel_crtc_state *crtc_state);
  int intel_vrr_vmin_vblank_start(const struct intel_crtc_state *crtc_state);

Reply via email to