From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 13/14] drm/i915: Workaround VLV/CHV sprite1->sprite0 enable underrun
Date: Thu, 15 Dec 2016 16:34:58 +0100 [thread overview]
Message-ID: <459d9bd2-d9dd-8f31-1f2d-ee8faa069967@linux.intel.com> (raw)
In-Reply-To: <1481574931-8658-14-git-send-email-ville.syrjala@linux.intel.com>
Op 12-12-16 om 21:35 schreef ville.syrjala@linux.intel.com:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> On VLV/CHV enabling sprite0 when sprite1 has already been enabled may
> lead to an underrun. This only happens when sprite0 FIFO size is zero
> prior to enabling it. Hence an effective workaround is to always
> allocate at least one cacheline for sprite0 when sprite1 is active.
>
> I've not observed this sort of failure during any other type of plane
> enable/disable sequence.
>
> Testcase: igt/kms_plane_blinker
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> drivers/gpu/drm/i915/intel_pm.c | 24 +++++++++++++++++++++++-
> 1 file changed, 23 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index fa882cdcac52..75a5bde43723 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -1006,6 +1006,12 @@ static uint16_t vlv_compute_wm_level(const struct intel_crtc_state *crtc_state,
> return min_t(int, wm, USHRT_MAX);
> }
>
> +static bool vlv_need_sprite0_fifo_workaround(unsigned int active_planes)
> +{
> + return (active_planes & (BIT(PLANE_SPRITE0) |
> + BIT(PLANE_SPRITE1))) == BIT(PLANE_SPRITE1);
> +}
> +
> static int vlv_compute_fifo(struct intel_crtc_state *crtc_state)
> {
> struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
> @@ -1016,12 +1022,25 @@ static int vlv_compute_fifo(struct intel_crtc_state *crtc_state)
> int num_active_planes = hweight32(active_planes);
> const int fifo_size = 511;
> int fifo_extra, fifo_left = fifo_size;
> + int sprite0_fifo_extra = 0;
> unsigned int total_rate;
> enum plane_id plane_id;
>
> + /*
> + * When enabling sprite0 after sprite1 has already been enabled
> + * we tend to get an underrun unless sprite0 already has some
> + * FIFO space allcoated. Hence we always allocate at least one
> + * cacheline for sprite0 whenever sprite1 is enabled.
> + *
> + * All other plane enable sequences appear immune to this problem.
> + */
> + if (vlv_need_sprite0_fifo_workaround(active_planes))
> + sprite0_fifo_extra = 1;
I don't think you need crtc_state->active_planes just for this, it adds a lot of tracking for something that could be done by
if (noninverted->plane[SPRITE1] && !noninverted->plane[SPRITE0])
/* allocate 1 for sprite 0 */
Maybe drop that patch?
> total_rate = noninverted->plane[PLANE_PRIMARY] +
> noninverted->plane[PLANE_SPRITE0] +
> - noninverted->plane[PLANE_SPRITE1];
> + noninverted->plane[PLANE_SPRITE1] +
> + sprite0_fifo_extra;
>
> if (total_rate > fifo_size)
> return -EINVAL;
> @@ -1042,6 +1061,9 @@ static int vlv_compute_fifo(struct intel_crtc_state *crtc_state)
> fifo_left -= fifo_state->plane[plane_id];
> }
>
> + fifo_state->plane[PLANE_SPRITE0] += sprite0_fifo_extra;
> + fifo_left -= sprite0_fifo_extra;
> +
> fifo_state->plane[PLANE_CURSOR] = 63;
>
> fifo_extra = DIV_ROUND_UP(fifo_left, num_active_planes ?: 1);
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-12-15 15:35 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-12 20:35 [PATCH 00/14] drm/i915: VLV/CHV two-stage watermarks ville.syrjala
2016-12-12 20:35 ` [PATCH 01/14] drm/i915: Track visible planes in a bitmask ville.syrjala
2016-12-15 14:56 ` Maarten Lankhorst
2016-12-15 15:02 ` Ville Syrjälä
2016-12-15 17:11 ` Maarten Lankhorst
2016-12-15 17:20 ` Ville Syrjälä
2016-12-12 20:35 ` [PATCH 02/14] drm/i915: Track plane fifo sizes under intel_crtc ville.syrjala
2016-12-15 14:58 ` Maarten Lankhorst
2017-02-16 17:48 ` Ville Syrjälä
2016-12-12 20:35 ` [PATCH 03/14] drm/i915: Move vlv wms from crtc->wm_state to crtc->wm.active.vlv ville.syrjala
2016-12-12 20:35 ` [PATCH 04/14] drm/i915: Plop vlv wm state into crtc_state ville.syrjala
2016-12-12 20:35 ` [PATCH 05/14] drm/i915: Plop vlv/chv fifo sizes into crtc state ville.syrjala
2016-12-12 20:35 ` [PATCH 06/14] drm/i915: Compute VLV/CHV FIFO sizes based on the PM2 watermarks ville.syrjala
2016-12-12 20:35 ` [PATCH 07/14] drm/i915: Compute vlv/chv wms the atomic way ville.syrjala
2016-12-15 15:30 ` Maarten Lankhorst
2016-12-15 15:38 ` Ville Syrjälä
2016-12-15 15:45 ` Maarten Lankhorst
2016-12-15 16:09 ` Ville Syrjälä
2016-12-15 17:12 ` Maarten Lankhorst
2016-12-15 17:17 ` Ville Syrjälä
2016-12-29 15:42 ` Maarten Lankhorst
2016-12-12 20:35 ` [PATCH 08/14] drm/i915: Skip useless watermark/FIFO related work on VLV/CHV when not needed ville.syrjala
2016-12-15 15:37 ` Maarten Lankhorst
2017-02-16 17:54 ` Ville Syrjälä
2016-12-12 20:35 ` [PATCH 09/14] drm/i915: Compute proper intermediate wms for vlv/cvh ville.syrjala
2016-12-12 20:35 ` [PATCH 10/14] drm/i915: Nuke crtc->wm.cxsr_allowed ville.syrjala
2016-12-12 20:35 ` [PATCH 11/14] drm/i915: Only use update_wm_{pre, post} for pre-ilk platforms ville.syrjala
2016-12-12 20:35 ` [PATCH 12/14] drm/i915: Sanitize VLV/CHV watermarks properly ville.syrjala
2016-12-12 20:35 ` [PATCH 13/14] drm/i915: Workaround VLV/CHV sprite1->sprite0 enable underrun ville.syrjala
2016-12-15 15:34 ` Maarten Lankhorst [this message]
2016-12-15 15:47 ` Ville Syrjälä
2016-12-15 16:13 ` Maarten Lankhorst
2016-12-15 16:18 ` Ville Syrjälä
2016-12-12 20:35 ` [PATCH 14/14] drm/i915: Kill level 0 wm hack for VLV/CHV ville.syrjala
2016-12-15 17:10 ` Maarten Lankhorst
2016-12-12 20:35 ` [PATCH i-g-t] tests: Add kms_plane_blinker ville.syrjala
2016-12-15 15:17 ` Maarten Lankhorst
2016-12-15 15:23 ` Ville Syrjälä
2016-12-15 15:28 ` Maarten Lankhorst
2016-12-15 15:36 ` Ville Syrjälä
2016-12-15 15:41 ` Maarten Lankhorst
2016-12-15 16:42 ` Ville Syrjälä
2016-12-15 17:26 ` Ville Syrjälä
2016-12-19 7:07 ` Maarten Lankhorst
2016-12-12 21:15 ` ✗ Fi.CI.BAT: warning for drm/i915: VLV/CHV two-stage watermarks Patchwork
2016-12-13 7:42 ` Saarinen, Jani
2016-12-13 8:40 ` Chris Wilson
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=459d9bd2-d9dd-8f31-1f2d-ee8faa069967@linux.intel.com \
--to=maarten.lankhorst@linux.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox