All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Shankar, Uma" <uma.shankar@intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>,
	"intel-gfx@lists.freedesktop.org"
	<intel-gfx@lists.freedesktop.org>
Subject: RE: [PATCH 3/9] drm/i915: Introduce struct intel_vblank_evade_ctx
Date: Wed, 20 Dec 2023 11:22:02 +0000	[thread overview]
Message-ID: <CY5PR11MB63444DD253EFE5F411C832C2F496A@CY5PR11MB6344.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20231213102519.13500-4-ville.syrjala@linux.intel.com>



> -----Original Message-----
> From: Intel-gfx <intel-gfx-bounces@lists.freedesktop.org> On Behalf Of Ville
> Syrjala
> Sent: Wednesday, December 13, 2023 3:55 PM
> To: intel-gfx@lists.freedesktop.org
> Subject: [PATCH 3/9] drm/i915: Introduce struct intel_vblank_evade_ctx
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Collect the information needed for vblank evasions into a structure that we can
> pass around more easily.
> 
> And let's rename intel_crtc_vblank_evade_scanlines() to just
> intel_vblank_evade_init() so that better describes the intended usage of
> initializing the context.

Looks Good to me.
Reviewed-by: Uma Shankar <uma.shankar@intel.com>

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_crtc.c | 40 +++++++++++++----------
>  1 file changed, 22 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c
> b/drivers/gpu/drm/i915/display/intel_crtc.c
> index 4df8927bb062..93474fc9e502 100644
> --- a/drivers/gpu/drm/i915/display/intel_crtc.c
> +++ b/drivers/gpu/drm/i915/display/intel_crtc.c
> @@ -471,9 +471,13 @@ static int intel_mode_vblank_start(const struct
> drm_display_mode *mode)
>  	return vblank_start;
>  }
> 
> -static void intel_crtc_vblank_evade_scanlines(const struct intel_crtc_state
> *old_crtc_state,
> -					      const struct intel_crtc_state
> *new_crtc_state,
> -					      int *min, int *max, int *vblank_start)
> +struct intel_vblank_evade_ctx {
> +	int min, max, vblank_start;
> +};
> +
> +static void intel_vblank_evade_init(const struct intel_crtc_state *old_crtc_state,
> +				    const struct intel_crtc_state *new_crtc_state,
> +				    struct intel_vblank_evade_ctx *evade)
>  {
>  	struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
>  	const struct intel_crtc_state *crtc_state; @@ -498,17 +502,17 @@
> static void intel_crtc_vblank_evade_scanlines(const struct intel_crtc_state *old
>  			    new_crtc_state->update_m_n || new_crtc_state-
> >update_lrr);
> 
>  		if (intel_vrr_is_push_sent(crtc_state))
> -			*vblank_start = intel_vrr_vmin_vblank_start(crtc_state);
> +			evade->vblank_start =
> intel_vrr_vmin_vblank_start(crtc_state);
>  		else
> -			*vblank_start =
> intel_vrr_vmax_vblank_start(crtc_state);
> +			evade->vblank_start =
> intel_vrr_vmax_vblank_start(crtc_state);
>  	} else {
> -		*vblank_start = intel_mode_vblank_start(adjusted_mode);
> +		evade->vblank_start =
> intel_mode_vblank_start(adjusted_mode);
>  	}
> 
>  	/* FIXME needs to be calibrated sensibly */
> -	*min = *vblank_start - intel_usecs_to_scanlines(adjusted_mode,
> -
> 	VBLANK_EVASION_TIME_US);
> -	*max = *vblank_start - 1;
> +	evade->min = evade->vblank_start -
> intel_usecs_to_scanlines(adjusted_mode,
> +
> 	VBLANK_EVASION_TIME_US);
> +	evade->max = evade->vblank_start - 1;
> 
>  	/*
>  	 * M/N and TRANS_VTOTAL are double buffered on the transcoder's @@
> -519,7 +523,7 @@ static void intel_crtc_vblank_evade_scanlines(const struct
> intel_crtc_state *old
>  	 * hence we must kick off the commit before that.
>  	 */
>  	if (new_crtc_state->dsb || new_crtc_state->update_m_n ||
> new_crtc_state->update_lrr)
> -		*min -= adjusted_mode->crtc_vblank_start - adjusted_mode-
> >crtc_vdisplay;
> +		evade->min -= adjusted_mode->crtc_vblank_start -
> +adjusted_mode->crtc_vdisplay;
>  }
> 
>  /**
> @@ -544,10 +548,11 @@ void intel_pipe_update_start(struct intel_atomic_state
> *state,
>  	struct intel_crtc_state *new_crtc_state =
>  		intel_atomic_get_new_crtc_state(state, crtc);
>  	long timeout = msecs_to_jiffies_timeout(1);
> -	int scanline, min, max, vblank_start;
> +	int scanline;
>  	wait_queue_head_t *wq = drm_crtc_vblank_waitqueue(&crtc->base);
>  	bool need_vlv_dsi_wa = (IS_VALLEYVIEW(dev_priv) ||
> IS_CHERRYVIEW(dev_priv)) &&
>  		intel_crtc_has_type(new_crtc_state, INTEL_OUTPUT_DSI);
> +	struct intel_vblank_evade_ctx evade;
>  	DEFINE_WAIT(wait);
> 
>  	intel_psr_lock(new_crtc_state);
> @@ -565,9 +570,8 @@ void intel_pipe_update_start(struct intel_atomic_state
> *state,
>  	if (intel_crtc_needs_vblank_work(new_crtc_state))
>  		intel_crtc_vblank_work_init(new_crtc_state);
> 
> -	intel_crtc_vblank_evade_scanlines(old_crtc_state, new_crtc_state,
> -					  &min, &max, &vblank_start);
> -	if (min <= 0 || max <= 0)
> +	intel_vblank_evade_init(old_crtc_state, new_crtc_state, &evade);
> +	if (evade.min <= 0 || evade.max <= 0)
>  		goto irq_disable;
> 
>  	if (drm_WARN_ON(&dev_priv->drm, drm_crtc_vblank_get(&crtc-
> >base)))
> @@ -582,8 +586,8 @@ void intel_pipe_update_start(struct intel_atomic_state
> *state,
> 
>  	local_irq_disable();
> 
> -	crtc->debug.min_vbl = min;
> -	crtc->debug.max_vbl = max;
> +	crtc->debug.min_vbl = evade.min;
> +	crtc->debug.max_vbl = evade.max;
>  	trace_intel_pipe_update_start(crtc);
> 
>  	for (;;) {
> @@ -595,7 +599,7 @@ void intel_pipe_update_start(struct intel_atomic_state
> *state,
>  		prepare_to_wait(wq, &wait, TASK_UNINTERRUPTIBLE);
> 
>  		scanline = intel_get_crtc_scanline(crtc);
> -		if (scanline < min || scanline > max)
> +		if (scanline < evade.min || scanline > evade.max)
>  			break;
> 
>  		if (!timeout) {
> @@ -629,7 +633,7 @@ void intel_pipe_update_start(struct intel_atomic_state
> *state,
>  	 *
>  	 * FIXME figure out if BXT+ DSI suffers from this as well
>  	 */
> -	while (need_vlv_dsi_wa && scanline == vblank_start)
> +	while (need_vlv_dsi_wa && scanline == evade.vblank_start)
>  		scanline = intel_get_crtc_scanline(crtc);
> 
>  	drm_crtc_vblank_put(&crtc->base);
> --
> 2.41.0


  reply	other threads:[~2023-12-20 11:22 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-13 10:25 [PATCH 0/9] drm/i915: Cursor vblank evasion Ville Syrjala
2023-12-13 10:25 ` [PATCH 1/9] drm/i915: Decouple intel_crtc_vblank_evade_scanlines() from atomic commits Ville Syrjala
2023-12-20 11:11   ` Shankar, Uma
2023-12-13 10:25 ` [PATCH 2/9] drm/i915: Reorder drm_vblank_put() vs. need_vlv_dsi_wa Ville Syrjala
2023-12-20 11:20   ` Shankar, Uma
2023-12-13 10:25 ` [PATCH 3/9] drm/i915: Introduce struct intel_vblank_evade_ctx Ville Syrjala
2023-12-20 11:22   ` Shankar, Uma [this message]
2023-12-13 10:25 ` [PATCH 4/9] drm/i915: Include need_vlv_dsi_wa in intel_vblank_evade_ctx Ville Syrjala
2023-12-20 11:22   ` Shankar, Uma
2023-12-13 10:25 ` [PATCH 5/9] drm/i915: Extract intel_vblank_evade() Ville Syrjala
2023-12-20 11:26   ` Shankar, Uma
2023-12-13 10:25 ` [PATCH 6/9] drm/i915: Move the min/max scanline sanity check into intel_vblank_evade() Ville Syrjala
2023-12-20 11:27   ` Shankar, Uma
2023-12-13 10:25 ` [PATCH 7/9] drm/i915: Move intel_vblank_evade() & co. into intel_vblank.c Ville Syrjala
2023-12-20 11:28   ` Shankar, Uma
2023-12-13 10:25 ` [PATCH 8/9] drm/i915: Perform vblank evasion around legacy cursor updates Ville Syrjala
2023-12-20 11:41   ` Shankar, Uma
2023-12-20 11:45     ` Shankar, Uma
2023-12-20 14:48       ` Ville Syrjälä
2023-12-22  5:07         ` Shankar, Uma
2024-01-16 20:49   ` [PATCH v2 " Ville Syrjala
2024-01-17 13:16     ` Hogander, Jouni
2024-01-18  7:53     ` Hogander, Jouni
2024-01-18  9:03     ` Hogander, Jouni
2023-12-13 10:25 ` [PATCH 9/9] Revert "drm/i915/xe2lpd: Treat cursor plane as regular plane for DDB allocation" Ville Syrjala
2023-12-13 11:28   ` Lisovskiy, Stanislav
2023-12-13 15:15     ` Ville Syrjälä
2023-12-13 15:29       ` Ville Syrjälä
2023-12-15 11:15         ` Ville Syrjälä
2024-01-09 12:17           ` Lisovskiy, Stanislav
2023-12-13 20:51 ` ✗ Fi.CI.SPARSE: warning for drm/i915: Cursor vblank evasion Patchwork
2023-12-13 21:08 ` ✗ Fi.CI.BAT: failure " Patchwork
2023-12-18 10:35   ` Saarinen, Jani
2024-01-18  8:04     ` Illipilli, TejasreeX
2024-01-19  8:11       ` Saarinen, Jani
2023-12-19 11:54 ` ✓ Fi.CI.BAT: success " Patchwork
2023-12-19 13:51 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-01-09 12:34 ` ✗ Fi.CI.SPARSE: warning for drm/i915: Cursor vblank evasion (rev2) Patchwork
2024-01-09 12:48 ` ✓ Fi.CI.BAT: success " Patchwork
2024-01-09 15:10 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-01-16 21:22 ` ✗ Fi.CI.SPARSE: warning for drm/i915: Cursor vblank evasion (rev3) Patchwork
2024-01-16 21:36 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-01-17  8:02 ` ✓ Fi.CI.IGT: success for drm/i915: Cursor vblank evasion (rev2) Patchwork
2024-01-17  8:07 ` ✓ Fi.CI.BAT: success for drm/i915: Cursor vblank evasion (rev3) Patchwork
2024-01-17 10:31 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-01-17 11:30 ` [PATCH 0/9] drm/i915: Cursor vblank evasion Shankar, Uma
2024-01-17 12:13   ` Ville Syrjälä
2024-01-18  7:57 ` ✓ Fi.CI.IGT: success for drm/i915: Cursor vblank evasion (rev3) Patchwork
2024-01-22 11:43 ` ✗ Fi.CI.SPARSE: warning for drm/i915: Cursor vblank evasion (rev4) Patchwork
2024-01-22 11:56 ` ✓ Fi.CI.BAT: success " Patchwork
2024-01-22 15:03 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-01-22 16:59   ` Ville Syrjälä

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=CY5PR11MB63444DD253EFE5F411C832C2F496A@CY5PR11MB6344.namprd11.prod.outlook.com \
    --to=uma.shankar@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=ville.syrjala@linux.intel.com \
    /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.