Move gen5 blitter work-around to lib
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 25 Mar 2011 21:09:28 +0000 (22:09 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 25 Mar 2011 21:09:28 +0000 (22:09 +0100)
Suggested by Chris Wilson to prevent utterly strange gpu hangs.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
lib/intel_batchbuffer.c
tests/gem_stress.c

index 449d46d..14446df 100644 (file)
@@ -72,6 +72,8 @@ intel_batchbuffer_free(struct intel_batchbuffer *batch)
        free(batch);
 }
 
+#define CMD_POLY_STIPPLE_OFFSET       0x7906
+
 void
 intel_batchbuffer_flush(struct intel_batchbuffer *batch)
 {
@@ -82,6 +84,13 @@ intel_batchbuffer_flush(struct intel_batchbuffer *batch)
        if (used == 0)
                return;
 
+       if (IS_GEN5(batch->devid)) {
+               BEGIN_BATCH(2);
+               OUT_BATCH(CMD_POLY_STIPPLE_OFFSET << 16);
+               OUT_BATCH(0);
+               ADVANCE_BATCH();
+       }
+
        /* Round batchbuffer usage to 2 DWORDs. */
        if ((used & 4) == 0) {
                *(uint32_t *) (batch->ptr) = 0; /* noop */
index 5aa6def..e8d9188 100644 (file)
@@ -166,13 +166,6 @@ static void keep_gpu_busy(void)
        OUT_BATCH(src_pitch);
        OUT_RELOC(busy_bo, I915_GEM_DOMAIN_RENDER, 0, 0);
        ADVANCE_BATCH();
-
-       if (IS_GEN5(devid)) {
-               BEGIN_BATCH(2);
-               OUT_BATCH(CMD_POLY_STIPPLE_OFFSET << 16);
-               OUT_BATCH(0);
-               ADVANCE_BATCH();
-       }
 }
 
 static unsigned int copyfunc_seq = 0;
@@ -288,13 +281,6 @@ static void blitter_copyfunc(struct scratch_buf *src, unsigned src_x, unsigned s
        OUT_RELOC(src->bo, I915_GEM_DOMAIN_RENDER, 0, 0);
        ADVANCE_BATCH();
 
-       if (IS_GEN5(devid)) {
-               BEGIN_BATCH(2);
-               OUT_BATCH(CMD_POLY_STIPPLE_OFFSET << 16);
-               OUT_BATCH(0);
-               ADVANCE_BATCH();
-       }
-
        if (!(keep_gpu_busy_counter & 1) && !fence_storm)
                keep_gpu_busy();