@@ -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
@@ -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;
@@ -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 *
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@intel.com> --- 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(-)