[PATCH 1/4] drm/i915/vrr: Use vrr.sync_start for getting vtotal

Golani, Mitulkumar Ajitkumar mitulkumar.ajitkumar.golani at intel.com
Wed Jul 16 06:59:58 UTC 2025



> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces at lists.freedesktop.org> On Behalf Of Ankit
> Nautiyal
> Sent: 07 July 2025 11:33
> To: intel-gfx at lists.freedesktop.org; intel-xe at lists.freedesktop.org
> Cc: ville.syrjala at linux.intel.com; Nautiyal, Ankit K <ankit.k.nautiyal at intel.com>
> Subject: [PATCH 1/4] 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.nautiyal at 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;

On the perspective where we don't want to rely on vmin_vtotal and to find alternate way to calculate the crtc_vtotal, Change LGTM.
Reviewed-by: Mitul Golani <mitulkumar.ajitkumar.golani at intel.com>

>  	}
> 
>  	vrr_enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE;
> --
> 2.45.2



More information about the Intel-xe mailing list