Modify the helper intel_crtc_update_active_timings() to update the timings based on the given vrr.mode. Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@xxxxxxxxx> --- drivers/gpu/drm/i915/display/intel_display.c | 6 +++--- drivers/gpu/drm/i915/display/intel_vblank.c | 22 ++++++++++++-------- drivers/gpu/drm/i915/display/intel_vblank.h | 4 +++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index a920d06278fe..2127888d459e 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -1319,7 +1319,7 @@ static void intel_pre_plane_update(struct intel_atomic_state *state, if (intel_crtc_vrr_disabling(state, crtc)) { intel_vrr_disable(old_crtc_state); - intel_crtc_update_active_timings(old_crtc_state, false); + intel_crtc_update_active_timings(old_crtc_state, INTEL_VRRTG_MODE_NONE); } if (audio_disabling(old_crtc_state, new_crtc_state)) @@ -7189,7 +7189,7 @@ static void intel_enable_crtc(struct intel_atomic_state *state, intel_atomic_get_new_crtc_state(state, pipe_crtc); /* VRR will be enable later, if required */ - intel_crtc_update_active_timings(pipe_crtc_state, false); + intel_crtc_update_active_timings(pipe_crtc_state, INTEL_VRRTG_MODE_NONE); } dev_priv->display.funcs.display->crtc_enable(state, crtc); @@ -7281,7 +7281,7 @@ static void intel_update_crtc(struct intel_atomic_state *state, if (intel_crtc_vrr_enabling(state, crtc) || new_crtc_state->update_m_n || new_crtc_state->update_lrr) intel_crtc_update_active_timings(new_crtc_state, - intel_vrr_is_enabled(new_crtc_state)); + new_crtc_state->vrr.mode); /* * We usually enable FIFO underrun interrupts as part of the diff --git a/drivers/gpu/drm/i915/display/intel_vblank.c b/drivers/gpu/drm/i915/display/intel_vblank.c index 4efd4f7d497a..3ed814245b61 100644 --- a/drivers/gpu/drm/i915/display/intel_vblank.c +++ b/drivers/gpu/drm/i915/display/intel_vblank.c @@ -510,22 +510,26 @@ void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc) static void intel_crtc_active_timings(struct drm_display_mode *mode, int *vmax_vblank_start, const struct intel_crtc_state *crtc_state, - bool vrr_enable) + enum intel_vrrtg_mode vrr_mode) { drm_mode_init(mode, &crtc_state->hw.adjusted_mode); *vmax_vblank_start = 0; - if (!vrr_enable) + if (vrr_mode == INTEL_VRRTG_MODE_NONE) return; - mode->crtc_vtotal = intel_vrr_vmax_vtotal(crtc_state); - 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); + if (vrr_mode == INTEL_VRRTG_MODE_VRR) { + mode->crtc_vtotal = intel_vrr_vmax_vtotal(crtc_state); + 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 { + MISSING_CASE(vrr_mode); + } } void intel_crtc_update_active_timings(const struct intel_crtc_state *crtc_state, - bool vrr_enable) + enum intel_vrrtg_mode vrr_mode) { struct intel_display *display = to_intel_display(crtc_state); struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); @@ -535,9 +539,9 @@ void intel_crtc_update_active_timings(const struct intel_crtc_state *crtc_state, unsigned long irqflags; intel_crtc_active_timings(&adjusted_mode, &vmax_vblank_start, - crtc_state, vrr_enable); + crtc_state, vrr_mode); - if (vrr_enable) + if (vrr_mode != INTEL_VRRTG_MODE_NONE) drm_WARN_ON(display->drm, (mode_flags & I915_MODE_FLAG_VRR) == 0); else mode_flags &= ~I915_MODE_FLAG_VRR; diff --git a/drivers/gpu/drm/i915/display/intel_vblank.h b/drivers/gpu/drm/i915/display/intel_vblank.h index 21fbb08d61d5..addd6db14df2 100644 --- a/drivers/gpu/drm/i915/display/intel_vblank.h +++ b/drivers/gpu/drm/i915/display/intel_vblank.h @@ -9,6 +9,8 @@ #include <linux/ktime.h> #include <linux/types.h> +enum intel_vrrtg_mode; + struct drm_crtc; struct drm_display_mode; struct intel_atomic_state; @@ -41,7 +43,7 @@ int intel_get_crtc_scanline(struct intel_crtc *crtc); void intel_wait_for_pipe_scanline_stopped(struct intel_crtc *crtc); void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc); void intel_crtc_update_active_timings(const struct intel_crtc_state *crtc_state, - bool vrr_enable); + enum intel_vrrtg_mode vrr_mode); int intel_crtc_scanline_offset(const struct intel_crtc_state *crtc_state); const struct intel_crtc_state * -- 2.45.2