]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/i915: Introduce intel_vrr_{vmin,vmax}_vtotal()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 10 Dec 2024 21:09:53 +0000 (23:09 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 15 Jan 2025 17:28:20 +0000 (19:28 +0200)
On ICL/TGL vmin/vmax/flipline won't actually match the
vtotal values (currently they do, but that is wrong and
needs to be fixed). Add a few helpers that will compute the
actual vtotal values for us.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241210211007.5976-5-ville.syrjala@linux.intel.com
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
drivers/gpu/drm/i915/display/intel_dsb.c
drivers/gpu/drm/i915/display/intel_vblank.c
drivers/gpu/drm/i915/display/intel_vrr.c
drivers/gpu/drm/i915/display/intel_vrr.h

index e6f8fc743fb405569aaf33422727f04b1862df0a..fcb8bf9cb313226bc73ca4b940aa35766b0d8eb2 100644 (file)
@@ -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);
 }
index a95fb3349eba7568ef88bcec30147733da90321b..6f0e0c64187da2c6903a2a3a087685b46c42ebf4 100644 (file)
@@ -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 {
index 66f9ce2b4486fb09959b0afbd2c9f0538177d722..2e9c286bb0799f098fddfa746964df5465365fd0 100644 (file)
@@ -102,6 +102,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 */
index b3b45c675020767667d6d6e3498874bdc8a10450..75db88ae9cc4451ef809e4d1691acbcd7a68f4f4 100644 (file)
@@ -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);