diff options
author | Rob Clark <[email protected]> | 2014-06-13 17:39:59 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2014-06-22 07:25:43 -0400 |
commit | c63450e8298a34aa0f4077a846b5b0467cdeb567 (patch) | |
tree | 2dff165e5f801450ea29c512076f6232472b9c2f /src/gallium/drivers/freedreno/freedreno_context.h | |
parent | b2c1f3a0198d2abf98e965a7a022ad8c9ec4f43c (diff) |
freedreno/a3xx: WFI fixes/cleanup
Blob driver seems to need WFI in some cases after CP_EVENT_WRITE,
implying that this is asynchronous and should reset needs_wfi.
Also, CP_INVALIDATE_STATE seems to need WFI. But CP_LOAD_STATE
does not.
The blob driver also puts WFIs before writing GRAS_CL_VPORT registers.
The latter may be a work-around, as these registers should be banked/
context registers. I haven't yet found a lockup that this averts, but
I expect viewport to change infrequently so out of paranoia I will
keep these for now.
Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/freedreno_context.h')
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_context.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_context.h b/src/gallium/drivers/freedreno/freedreno_context.h index 46984823427..0051c9ddcab 100644 --- a/src/gallium/drivers/freedreno/freedreno_context.h +++ b/src/gallium/drivers/freedreno/freedreno_context.h @@ -363,6 +363,17 @@ fd_wfi(struct fd_context *ctx, struct fd_ringbuffer *ring) } } +/* emit a CP_EVENT_WRITE: + */ +static inline void +fd_event_write(struct fd_context *ctx, struct fd_ringbuffer *ring, + enum vgt_event_type evt) +{ + OUT_PKT3(ring, CP_EVENT_WRITE, 1); + OUT_RING(ring, evt); + fd_reset_wfi(ctx); +} + struct pipe_context * fd_context_init(struct fd_context *ctx, struct pipe_screen *pscreen, const uint8_t *primtypes, void *priv); |