From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Subject: Re: [PATCH 11/15] drm/i915/display: Use vrr.guardband to derive vblank_start
Date: Thu, 11 Sep 2025 17:25:27 +0300 [thread overview]
Message-ID: <aMLb17oJa__bPVoA@intel.com> (raw)
In-Reply-To: <20250911024554.692469-12-ankit.k.nautiyal@intel.com>
On Thu, Sep 11, 2025 at 08:15:50AM +0530, Ankit Nautiyal wrote:
> When VRR TG is always enabled and an optimized guardband is used, the pipe
> vblank start is derived from the guardband.
> Currently TRANS_SET_CONTEXT_LATENCY is programmed with crtc_vblank_start -
> crtc_vdisplay, which is ~1 when guardband matches the vblank length.
> With shorter guardband this become a large window.
>
> To avoid misprogramming TRANS_SET_CONTEXT_LATENCY, clamp the scl value to 1
> when using optimized guardband.
>
> Also update the VRR get config logic to set crtc_vblank_start based on
> vtotal - guardband, during readback.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 36 ++++++++++++++++----
> drivers/gpu/drm/i915/display/intel_vrr.c | 9 ++++-
> 2 files changed, 38 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 55bea1374dc4..73aec6d4686a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -2638,6 +2638,30 @@ transcoder_has_vrr(const struct intel_crtc_state *crtc_state)
> return HAS_VRR(display) && !transcoder_is_dsi(cpu_transcoder);
> }
>
> +static int intel_set_context_latency(const struct intel_crtc_state *crtc_state,
> + int crtc_vblank_start,
> + int crtc_vdisplay)
> +{
> + struct intel_display *display = to_intel_display(crtc_state);
> +
> + /*
> + * When VRR TG is always on and optimized guardband is used,
> + * the pipe vblank start is based on the guardband,
> + * TRANS_SET_CONTEXT_LATENCY cannot be used to configure it.
> + */
> + if (intel_vrr_always_use_vrr_tg(display))
> + return clamp(crtc_vblank_start - crtc_vdisplay, 0, 1);
What are you trying to achieve with this? As in what problem are you
seeing with the current SCL programming?
> +
> + /*
> + * VBLANK_START no longer works on ADL+, instead we must use
> + * TRANS_SET_CONTEXT_LATENCY to configure the pipe vblank start.
> + */
> + if (DISPLAY_VER(display) >= 13)
> + return crtc_vblank_start - crtc_vdisplay;
> +
> + return 0;
> +}
> +
> static void intel_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
> {
> struct intel_display *display = to_intel_display(crtc_state);
> @@ -2671,14 +2695,12 @@ static void intel_set_transcoder_timings(const struct intel_crtc_state *crtc_sta
> vsyncshift += adjusted_mode->crtc_htotal;
> }
>
> - /*
> - * VBLANK_START no longer works on ADL+, instead we must use
> - * TRANS_SET_CONTEXT_LATENCY to configure the pipe vblank start.
> - */
> if (DISPLAY_VER(display) >= 13) {
> intel_de_write(display,
> TRANS_SET_CONTEXT_LATENCY(display, cpu_transcoder),
> - crtc_vblank_start - crtc_vdisplay);
> + intel_set_context_latency(crtc_state,
> + crtc_vblank_start,
> + crtc_vdisplay));
>
> /*
> * VBLANK_START not used by hw, just clear it
> @@ -2768,7 +2790,9 @@ static void intel_set_transcoder_timings_lrr(const struct intel_crtc_state *crtc
> if (DISPLAY_VER(display) >= 13) {
> intel_de_write(display,
> TRANS_SET_CONTEXT_LATENCY(display, cpu_transcoder),
> - crtc_vblank_start - crtc_vdisplay);
> + intel_set_context_latency(crtc_state,
> + crtc_vblank_start,
> + crtc_vdisplay));
>
> /*
> * VBLANK_START not used by hw, just clear it
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 855974174afd..e124ef4e0ff4 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -749,11 +749,18 @@ void intel_vrr_get_config(struct intel_crtc_state *crtc_state)
> * 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.
> + *
> + * With Optimized guardband, the vblank start is Vtotal - guardband
> */
> - if (intel_vrr_always_use_vrr_tg(display))
> + 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;
> +
> + crtc_state->hw.adjusted_mode.crtc_vblank_start =
> + crtc_state->hw.adjusted_mode.crtc_vtotal -
> + crtc_state->vrr.guardband;
> + }
> }
>
> vrr_enable = trans_vrr_ctl & VRR_CTL_VRR_ENABLE;
> --
> 2.45.2
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2025-09-11 14:25 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-11 2:45 [PATCH 00/15] Optimize vrr.guardband and fix LRR Ankit Nautiyal
2025-09-11 2:45 ` [PATCH 01/15] drm/i915/vrr: Use crtc_vsync_start/end for computing vrr.vsync_start/end Ankit Nautiyal
2025-09-11 2:45 ` [PATCH 02/15] drm/i915/skl_watermark: Fix the scaling factor for chroma subsampling Ankit Nautiyal
2025-09-11 2:45 ` [PATCH 03/15] drm/i915/skl_watermark: Pass linetime as argument to latency helpers Ankit Nautiyal
2025-09-11 13:58 ` Ville Syrjälä
2025-09-14 6:00 ` Nautiyal, Ankit K
2025-09-11 2:45 ` [PATCH 04/15] drm/i915/skl_scaler: Introduce helper for chroma downscale factor Ankit Nautiyal
2025-09-11 2:45 ` [PATCH 05/15] drm/i915/display: Extract helpers to set dsc/scaler prefill latencies Ankit Nautiyal
2025-09-11 14:01 ` Ville Syrjälä
2025-09-14 6:02 ` Nautiyal, Ankit K
2025-09-11 2:45 ` [PATCH 06/15] drm/i915/dp: Add SDP latency computation helper Ankit Nautiyal
2025-09-11 14:14 ` Ville Syrjälä
2025-09-14 6:03 ` Nautiyal, Ankit K
2025-09-11 2:45 ` [PATCH 07/15] drm/i915/alpm: Add function to compute max link-wake latency Ankit Nautiyal
2025-09-11 2:45 ` [PATCH 08/15] drm/i915/vrr: Use vrr.sync_start for getting vtotal Ankit Nautiyal
2025-09-11 2:45 ` [PATCH 09/15] drm/i915/display: Add guardband check for feature latencies Ankit Nautiyal
2025-09-11 2:45 ` [PATCH 10/15] drm/i915/skl_watermark: Remove redundant latency checks from vblank validation Ankit Nautiyal
2025-09-11 14:22 ` Ville Syrjälä
2025-09-14 6:04 ` Nautiyal, Ankit K
2025-09-11 2:45 ` [PATCH 11/15] drm/i915/display: Use vrr.guardband to derive vblank_start Ankit Nautiyal
2025-09-11 14:25 ` Ville Syrjälä [this message]
2025-09-14 5:59 ` Nautiyal, Ankit K
2025-09-15 12:32 ` Ville Syrjälä
2025-09-16 14:30 ` Nautiyal, Ankit K
2025-09-16 14:38 ` Nautiyal, Ankit K
2025-09-16 18:56 ` Ville Syrjälä
2025-09-17 10:38 ` Nautiyal, Ankit K
2025-09-17 12:36 ` Ville Syrjälä
2025-09-17 10:51 ` Ville Syrjälä
2025-09-17 12:07 ` Shankar, Uma
2025-09-17 20:51 ` Ville Syrjälä
2025-09-17 21:12 ` Ville Syrjälä
2025-09-11 2:45 ` [PATCH 12/15] drm/i915/vrr: Introduce helper to compute min static guardband Ankit Nautiyal
2025-09-11 2:45 ` [PATCH 13/15] drm/i915/display: Use optimized guardband to set vblank start Ankit Nautiyal
2025-09-11 2:45 ` [PATCH 14/15] drm/i915/panel: Refactor helper to get highest fixed mode Ankit Nautiyal
2025-09-11 14:37 ` Ville Syrjälä
2025-09-14 6:08 ` Nautiyal, Ankit K
2025-09-11 2:45 ` [PATCH 15/15] drm/i915/vrr: Fix seamless_mn drrs for PTL Ankit Nautiyal
2025-09-11 14:41 ` Ville Syrjälä
2025-09-14 6:07 ` Nautiyal, Ankit K
2025-09-15 13:25 ` Ville Syrjälä
2025-09-11 3:11 ` ✓ CI.KUnit: success for Optimize vrr.guardband and fix LRR (rev11) Patchwork
2025-09-11 3:47 ` ✓ Xe.CI.BAT: " Patchwork
2025-09-11 6:06 ` ✓ i915.CI.BAT: success for Optimize vrr.guardband and fix LRR (rev10) Patchwork
2025-09-11 9:27 ` ✓ Xe.CI.Full: success for Optimize vrr.guardband and fix LRR (rev11) Patchwork
2025-09-11 19:16 ` ✗ i915.CI.Full: failure for Optimize vrr.guardband and fix LRR (rev10) Patchwork
2025-09-12 14:03 ` [PATCH 00/15] Optimize vrr.guardband and fix LRR Ville Syrjälä
2025-09-14 6:24 ` Nautiyal, Ankit K
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aMLb17oJa__bPVoA@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=ankit.k.nautiyal@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.