From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Ben Widawsky <benjamin.widawsky@intel.com>
Cc: Intel GFX <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH] drm/i915/bdw: cs-stall before state cache invld w/a
Date: Sat, 12 Apr 2014 11:46:02 +0300 [thread overview]
Message-ID: <20140412084601.GJ18465@intel.com> (raw)
In-Reply-To: <1397267168-21743-1-git-send-email-benjamin.widawsky@intel.com>
On Fri, Apr 11, 2014 at 06:46:08PM -0700, Ben Widawsky wrote:
> We do this already for previous GENs. I guess we must do it for BDW too
> according to DOCS.
>
> "Pipe_control with CS-stall bit set must be issued before a
> pipe-control command that has the State Cache Invalidate bit set."
>
> This does not solve the problem I have unfortunately.
>
> I didn't check if this was in Ville's CHV series. If it was, I
> apologize.
No, but it was posted by Ken some time ago already. I picked up Ken's
patches and was going to repost them as part of my next workarounds
series.
>
> NOTE: I tried to use smaller lengths for the command, but nothing made
> it happy except 6.
>
> Cc: Kenneth Graunke <kenneth@whitecape.org>
> Cc: Jordan Justen <jljusten@gmail.com>
> Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
> ---
> drivers/gpu/drm/i915/intel_ringbuffer.c | 19 ++++++++++++++++---
> 1 file changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index a9b04d1..092dea0 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -266,17 +266,25 @@ gen6_render_ring_flush(struct intel_ring_buffer *ring,
> static int
> gen7_render_ring_cs_stall_wa(struct intel_ring_buffer *ring)
> {
> - int ret;
> + int ret, size = 4;
>
> - ret = intel_ring_begin(ring, 4);
> + if (IS_BROADWELL(ring->dev))
> + size += 2;
> +
> + ret = intel_ring_begin(ring, size);
> if (ret)
> return ret;
>
> - intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
> + intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(size));
> intel_ring_emit(ring, PIPE_CONTROL_CS_STALL |
> PIPE_CONTROL_STALL_AT_SCOREBOARD);
> intel_ring_emit(ring, 0);
> intel_ring_emit(ring, 0);
> + if (IS_BROADWELL(ring->dev)) {
> + intel_ring_emit(ring, 0);
> + intel_ring_emit(ring, 0);
> + }
> +
> intel_ring_advance(ring);
>
> return 0;
> @@ -389,6 +397,11 @@ gen8_render_ring_flush(struct intel_ring_buffer *ring,
> flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
> flags |= PIPE_CONTROL_QW_WRITE;
> flags |= PIPE_CONTROL_GLOBAL_GTT_IVB;
> +
> + /* Workaround: we must issue a pipe_control with CS-stall bit
> + * set before a pipe_control command that has the state cache
> + * invalidate bit set. */
> + gen7_render_ring_cs_stall_wa(ring);
> }
>
> ret = intel_ring_begin(ring, 6);
> --
> 1.9.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
prev parent reply other threads:[~2014-04-12 8:46 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-12 1:46 [PATCH] drm/i915/bdw: cs-stall before state cache invld w/a Ben Widawsky
2014-04-12 8:46 ` Ville Syrjälä [this message]
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=20140412084601.GJ18465@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=benjamin.widawsky@intel.com \
--cc=intel-gfx@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.