> -----Original Message-----
> From: Nautiyal, Ankit K <ankit.k.nauti...@intel.com>
> Sent: 07 August 2025 16:46
> To: intel-gfx@lists.freedesktop.org; intel...@lists.freedesktop.org
> Cc: ville.syrj...@linux.intel.com; jani.nik...@linux.intel.com; Golani,
> Mitulkumar Ajitkumar <mitulkumar.ajitkumar.gol...@intel.com>; Nautiyal,
> Ankit K <ankit.k.nauti...@intel.com>
> Subject: [PATCH 07/12] drm/i915/vrr: Use vrr.sync_start for getting vtotal
> 
> Currently, in intel_vrr_get_config() crtc_vtotal is computed from vrr.vmin 
> vtotal,
> since the VTOTAL.Vtotal bits are deprecated.
> Since vmin is currently set to crtc_vtotal, this gives us the vtotal.
> However, as we move to optimized guardband, vmin will be modified to set to
> the minimum Vtotal for highest refresh rate supported.
> 
> Instead of depending on vmin, compute vtotal from crtc_vsync_start and
> vrr.vsync_start. This works since vrr.vsync_start is measured from the end of
> vblank, and crtc_vsync_start is measured from start of the scanline. Together
> their sum is equal to the crtc_vtotal.
> 
> Signed-off-by: Ankit Nautiyal <ankit.k.nauti...@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_vrr.c | 21 ++++++++++-----------
>  1 file changed, 10 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c
> b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 3eed37f271b0..46a85720411f 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -735,17 +735,6 @@ void intel_vrr_get_config(struct intel_crtc_state
> *crtc_state)
>                                                    TRANS_VRR_VMAX(display,
> cpu_transcoder)) + 1;
>               crtc_state->vrr.vmin = intel_de_read(display,
>                                                    TRANS_VRR_VMIN(display,
> cpu_transcoder)) + 1;
> -
> -             /*
> -              * For platforms that always use VRR Timing Generator, the
> VTOTAL.Vtotal
> -              * bits are not filled. Since for these platforms TRAN_VMIN is
> always
> -              * filled with crtc_vtotal, use TRAN_VRR_VMIN to get the vtotal
> for
> -              * adjusted_mode.
> -              */
> -             if (intel_vrr_always_use_vrr_tg(display))
> -                     crtc_state->hw.adjusted_mode.crtc_vtotal =
> -                             intel_vrr_vmin_vtotal(crtc_state);
> -
>               if (HAS_AS_SDP(display)) {
>                       trans_vrr_vsync =
>                               intel_de_read(display,
> @@ -755,6 +744,16 @@ void intel_vrr_get_config(struct intel_crtc_state
> *crtc_state)
>                       crtc_state->vrr.vsync_end =
>                               REG_FIELD_GET(VRR_VSYNC_END_MASK,
> trans_vrr_vsync);
>               }
> +             /*
> +              * For platforms that always use VRR Timing Generator, the
> VTOTAL.Vtotal
> +              * bits are not filled. Since vrr.vsync_start is computed as:
> +              * crtc_vtotal - crtc_vsync_start, we can derive vtotal from
> +              * vrr.vsync_start and crtc_vsync_start.
> +              */
> +             if (intel_vrr_always_use_vrr_tg(display))
> +                     crtc_state->hw.adjusted_mode.crtc_vtotal =
> +                             crtc_state-
> >hw.adjusted_mode.crtc_vsync_start +
> +                             crtc_state->vrr.vsync_start;

Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.gol...@intel.com>
>       }
> 
>       vrr_enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE;
> --
> 2.45.2

Reply via email to