From: Ville Syrjälä <[email protected]>

If SCL is changing we need to take the LRR codepath to update
it during a fastset. Account for that in lrr_params_changed().

The current code will only notice the SCL change if the position
of the delayed vblank also changes. But that might not happen
when using the VRR timing generator because the delayed vblank
is then defined by the guardband instead of the SCL.

Signed-off-by: Ville Syrjälä <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_display.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index 09d3eb422ad4..490b4f2907e1 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -5711,12 +5711,16 @@ static int intel_modeset_checks(struct 
intel_atomic_state *state)
        return 0;
 }
 
-static bool lrr_params_changed(const struct drm_display_mode 
*old_adjusted_mode,
-                              const struct drm_display_mode *new_adjusted_mode)
+static bool lrr_params_changed(const struct intel_crtc_state *old_crtc_state,
+                              const struct intel_crtc_state *new_crtc_state)
 {
+       const struct drm_display_mode *old_adjusted_mode = 
&old_crtc_state->hw.adjusted_mode;
+       const struct drm_display_mode *new_adjusted_mode = 
&new_crtc_state->hw.adjusted_mode;
+
        return old_adjusted_mode->crtc_vblank_start != 
new_adjusted_mode->crtc_vblank_start ||
                old_adjusted_mode->crtc_vblank_end != 
new_adjusted_mode->crtc_vblank_end ||
-               old_adjusted_mode->crtc_vtotal != 
new_adjusted_mode->crtc_vtotal;
+               old_adjusted_mode->crtc_vtotal != 
new_adjusted_mode->crtc_vtotal ||
+               old_crtc_state->set_context_latency != 
new_crtc_state->set_context_latency;
 }
 
 static void intel_crtc_check_fastset(const struct intel_crtc_state 
*old_crtc_state,
@@ -5742,8 +5746,7 @@ static void intel_crtc_check_fastset(const struct 
intel_crtc_state *old_crtc_sta
                                   &new_crtc_state->dp_m_n))
                new_crtc_state->update_m_n = false;
 
-       if (!lrr_params_changed(&old_crtc_state->hw.adjusted_mode,
-                               &new_crtc_state->hw.adjusted_mode))
+       if (!lrr_params_changed(old_crtc_state, new_crtc_state))
                new_crtc_state->update_lrr = false;
 
        if (intel_crtc_needs_modeset(new_crtc_state))
-- 
2.49.1

Reply via email to