[PATCH] drm/i915/display: Ensure enough lines between delayed VBlank and VBlank
Murthy, Arun R
arun.r.murthy at intel.com
Tue Apr 22 04:59:27 UTC 2025
> -----Original Message-----
> From: Hogander, Jouni <jouni.hogander at intel.com>
> Sent: Tuesday, April 22, 2025 10:16 AM
> To: Murthy, Arun R <arun.r.murthy at intel.com>; intel-xe at lists.freedesktop.org;
> intel-gfx at lists.freedesktop.org
> Subject: Re: [PATCH] drm/i915/display: Ensure enough lines between delayed
> VBlank and VBlank
>
> On Sun, 2025-04-20 at 15:50 +0000, Murthy, Arun R wrote:
> > > -----Original Message-----
> > > From: Intel-gfx <intel-gfx-bounces at lists.freedesktop.org> On Behalf
> > > Of Jouni Högander
> > > Sent: Thursday, April 17, 2025 11:54 PM
> > > To: intel-gfx at lists.freedesktop.org; intel-xe at lists.freedesktop.org
> > > Cc: Hogander, Jouni <jouni.hogander at intel.com>
> > > Subject: [PATCH] drm/i915/display: Ensure enough lines between
> > > delayed VBlank and VBlank
> > >
> > > To deterministically capture the transition of the state machine
> > > going from SRDOFFACK to IDLE, the delayed V. Blank should be at
> > > least one line after the non-delayed V. Blank.
> > >
> > > Ensure this by following instructions from Bspec.
> > >
> > > Bspec: 69897
> > > Signed-off-by: Jouni Högander <jouni.hogander at intel.com>
> > > ---
> > > drivers/gpu/drm/i915/display/intel_display.c | 11 ++++++++++-
> > > drivers/gpu/drm/i915/display/intel_vrr.c | 18
> > > ++++++++++++++++--
> > > 2 files changed, 26 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> > > b/drivers/gpu/drm/i915/display/intel_display.c
> > > index db524d01e574d..94156efa5aa93 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > @@ -2747,9 +2747,18 @@ static void
> > > intel_set_transcoder_timings_lrr(const
> > > struct intel_crtc_state *crtc
> > > }
> > >
> > > if (DISPLAY_VER(display) >= 13) {
> > Changes looks good. But per Bspec 69985 looks like this change is not
> > applicable for Xe3+
>
> How about if I change it like this:
>
> int min_lat = intel_vrr_always_use_vrr_tg(display) || crtc_state-
> >vrr.enable ? 1 : 0;
>
The func intel_vrr_always_use_vrr_tg return true if display >=30, so should it be !intel_vrr_always_use_vrr_tg()
Thanks and Regards,
Arun R Murthy
--------------------
> also guardband could be:
>
> if (intel_vrr_always_use_vrr_tg(display) || crtc_state->vrr.enable)
> guardband = max(crtc_state->vrr.vmin - adjusted_mode-
> >crtc_vblank_start, crtc_state->vrr.vmax - adjusted_mode->crtc_vdisplay
> - 1);
> else
> guardband = crtc_state->vrr.vmin - adjusted_mode-
> >crtc_vblank_start;
>
> What do you think?
>
> BR,
>
> Jouni Högander
>
> >
> > Thanks and Regards,
> > Arun R Murthy
> > -------------------
> > > + /*
> > > + * Comment on SRD_STATUS register in Bspec:
> > > + *
> > > + * To deterministically capture the transition of
> > > the state
> > > + * machine going from SRDOFFACK to IDLE, the
> > > delayed V. Blank
> > > + * should be at least one line after the non-
> > > delayed V. Blank.
> > > + *
> > > + * Legacy TG: TRANS_SET_CONTEXT_LATENCY > 0
> > > + */
> > > intel_de_write(display,
> > > TRANS_SET_CONTEXT_LATENCY(display,
> > > cpu_transcoder),
> > > - crtc_vblank_start - crtc_vdisplay);
> > > + max(crtc_vblank_start -
> > > crtc_vdisplay, 1));
> > >
> > > /*
> > > * 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 c6565baf815a1..3a27ded45ee04 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> > > @@ -422,8 +422,22 @@ void intel_vrr_compute_config_late(struct
> > > intel_crtc_state *crtc_state)
> > > return;
> > >
> > > if (DISPLAY_VER(display) >= 13) {
> > > - crtc_state->vrr.guardband =
> > > - crtc_state->vrr.vmin - adjusted_mode-
> > > > crtc_vblank_start;
> > > + /*
> > > + * Comment on SRD_STATUS register in Bspec:
> > > + *
> > > + * To deterministically capture the transition of
> > > the state
> > > + * machine going from SRDOFFACK to IDLE, the
> > > delayed V. Blank
> > > + * should be at least one line after the non-
> > > delayed V. Blank.
> > > + * This can be done by ensuring the VRR Guardband
> > > programming is
> > > + * less than the non-delayed V. Blank.
> > > + *
> > > + * TRANS_VRR_CTL[ VRR Guardband ] <
> > > (TRANS_VRR_VMAX[
> > > VRR Vmax ]
> > > + * - TRANS_VTOTAL[ Vertical Active ])
> > > + */
> > > + crtc_state->vrr.guardband = min(crtc_state-
> > > >vrr.vmin -
> > > + adjusted_mode-
> > > > crtc_vblank_start,
> > > + crtc_state-
> > > >vrr.vmax -
> > > + adjusted_mode-
> > > >crtc_vdisplay
> > > - 1);
> > > } else {
> > > /* hardware imposes one extra scanline somewhere */
> > > crtc_state->vrr.pipeline_full =
> > > --
> > > 2.43.0
> >
More information about the Intel-xe
mailing list