[Mesa-dev] [PATCH v2 07/42] i965: Implement programming of the L3 configuration.
Kenneth Graunke
kenneth at whitecape.org
Tue Nov 24 02:45:45 PST 2015
On Monday, November 23, 2015 11:09:22 PM Jordan Justen wrote:
> On 2015-11-17 21:54:39, Jordan Justen wrote:
> > From: Francisco Jerez <currojerez at riseup.net>
> >
> > ---
> > src/mesa/drivers/dri/i965/gen7_l3_state.c | 95 +++++++++++++++++++++++++++++++
> > 1 file changed, 95 insertions(+)
> >
> > diff --git a/src/mesa/drivers/dri/i965/gen7_l3_state.c b/src/mesa/drivers/dri/i965/gen7_l3_state.c
> > index 8f9ba5b..48bca29 100644
> > --- a/src/mesa/drivers/dri/i965/gen7_l3_state.c
> > +++ b/src/mesa/drivers/dri/i965/gen7_l3_state.c
> > @@ -161,3 +161,98 @@ get_l3_way_size(const struct brw_device_info *devinfo)
> > else
> > return 2 << devinfo->gt;
> > }
> > +
> > +/**
> > + * Program the hardware to use the specified L3 configuration.
> > + */
> > +static void
> > +setup_l3_config(struct brw_context *brw, const struct brw_l3_config *cfg)
> > +{
> > + const bool has_dc = cfg->n[L3P_DC] || cfg->n[L3P_ALL];
> > + const bool has_is = cfg->n[L3P_IS] || cfg->n[L3P_RO] || cfg->n[L3P_ALL];
> > + const bool has_c = cfg->n[L3P_C] || cfg->n[L3P_RO] || cfg->n[L3P_ALL];
> > + const bool has_t = cfg->n[L3P_T] || cfg->n[L3P_RO] || cfg->n[L3P_ALL];
> > + const bool has_slm = cfg->n[L3P_SLM];
> > +
> > + /* According to the hardware docs, the L3 partitioning can only be changed
> > + * while the pipeline is completely drained and the caches are flushed,
> > + * what involves a first PIPE_CONTROL flush which stalls the pipeline and
> > + * initiates invalidation of the relevant caches...
> > + */
> > + brw_emit_pipe_control_flush(brw,
> > + PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
> > + PIPE_CONTROL_CONST_CACHE_INVALIDATE |
> > + PIPE_CONTROL_INSTRUCTION_INVALIDATE |
> > + PIPE_CONTROL_DATA_CACHE_INVALIDATE |
> > + PIPE_CONTROL_NO_WRITE |
> > + PIPE_CONTROL_CS_STALL);
> > +
> > + /* ...followed by a second stalling flush which guarantees that
> > + * invalidation is complete when the L3 configuration registers are
> > + * modified.
> > + */
> > + brw_emit_pipe_control_flush(brw,
> > + PIPE_CONTROL_DATA_CACHE_INVALIDATE |
> > + PIPE_CONTROL_NO_WRITE |
> > + PIPE_CONTROL_CS_STALL);
>
> On Ivy Bridge, these two pipe control calls are causing the simulator
> to complain. The message seems to indicate that, essentially the
> gen8_add_cs_stall_workaround_bits workaround is not being applied.
>
> Looking at the IVB PRM, vol 2, part 1, "1.10.4.1 PIPE_CONTROL" under
> bit20 for "CS Stall" is does seem to indicate that CS Stall also
> requires 1 of several other bits to be added.
>
> For example, adding PIPE_CONTROL_STALL_AT_SCOREBOARD to this call, and
> the one below makes the simulator happy. But, perhaps
> gen8_add_cs_stall_workaround_bits should be applied to SNB - HSW as
> well?
>
> -Jordan
I would definitely ack a patch to do gen8_add_cs_stall_workaround_bits
on Gen6-8 and rename it to gen6_add_cs_stall_workaround_bits. AFAICT
it's always been needed; we just missed it and I was being conservative
during the Broadwell enabling.
--Ken
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151124/1a4d85cf/attachment.sig>
More information about the mesa-dev
mailing list