From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 13/14] drm/i915: Workaround VLV/CHV sprite1->sprite0 enable underrun
Date: Thu, 15 Dec 2016 17:47:08 +0200 [thread overview]
Message-ID: <20161215154708.GK31595@intel.com> (raw)
In-Reply-To: <459d9bd2-d9dd-8f31-1f2d-ee8faa069967@linux.intel.com>
On Thu, Dec 15, 2016 at 04:34:58PM +0100, Maarten Lankhorst wrote:
> 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?
We'll want it for other things outside of the vlv watermark code as
well. So figured this is a good excuse for getting the ball rolling,
> > 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);
>
--
Ville Syrjälä
Intel OTC
_______________________________________________
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:47 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
2016-12-15 15:47 ` Ville Syrjälä [this message]
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=20161215154708.GK31595@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=maarten.lankhorst@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.