diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_execbuffer.c | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 15 |
2 files changed, 13 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 7b3ae2333dbf..1a1c04db6c80 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c | |||
| @@ -1268,7 +1268,7 @@ relocate_entry(struct i915_vma *vma, | |||
| 1268 | else if (gen >= 4) | 1268 | else if (gen >= 4) |
| 1269 | len = 4; | 1269 | len = 4; |
| 1270 | else | 1270 | else |
| 1271 | len = 6; | 1271 | len = 3; |
| 1272 | 1272 | ||
| 1273 | batch = reloc_gpu(eb, vma, len); | 1273 | batch = reloc_gpu(eb, vma, len); |
| 1274 | if (IS_ERR(batch)) | 1274 | if (IS_ERR(batch)) |
| @@ -1309,11 +1309,6 @@ relocate_entry(struct i915_vma *vma, | |||
| 1309 | *batch++ = MI_STORE_DWORD_IMM | MI_MEM_VIRTUAL; | 1309 | *batch++ = MI_STORE_DWORD_IMM | MI_MEM_VIRTUAL; |
| 1310 | *batch++ = addr; | 1310 | *batch++ = addr; |
| 1311 | *batch++ = target_offset; | 1311 | *batch++ = target_offset; |
| 1312 | |||
| 1313 | /* And again for good measure (blb/pnv) */ | ||
| 1314 | *batch++ = MI_STORE_DWORD_IMM | MI_MEM_VIRTUAL; | ||
| 1315 | *batch++ = addr; | ||
| 1316 | *batch++ = target_offset; | ||
| 1317 | } | 1312 | } |
| 1318 | 1313 | ||
| 1319 | goto out; | 1314 | goto out; |
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 74a4d587c312..02f6a9b81083 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
| @@ -69,19 +69,28 @@ unsigned int intel_ring_update_space(struct intel_ring *ring) | |||
| 69 | static int | 69 | static int |
| 70 | gen2_render_ring_flush(struct i915_request *rq, u32 mode) | 70 | gen2_render_ring_flush(struct i915_request *rq, u32 mode) |
| 71 | { | 71 | { |
| 72 | unsigned int num_store_dw; | ||
| 72 | u32 cmd, *cs; | 73 | u32 cmd, *cs; |
| 73 | 74 | ||
| 74 | cmd = MI_FLUSH; | 75 | cmd = MI_FLUSH; |
| 75 | 76 | num_store_dw = 0; | |
| 76 | if (mode & EMIT_INVALIDATE) | 77 | if (mode & EMIT_INVALIDATE) |
| 77 | cmd |= MI_READ_FLUSH; | 78 | cmd |= MI_READ_FLUSH; |
| 79 | if (mode & EMIT_FLUSH) | ||
| 80 | num_store_dw = 4; | ||
| 78 | 81 | ||
| 79 | cs = intel_ring_begin(rq, 2); | 82 | cs = intel_ring_begin(rq, 2 + 3 * num_store_dw); |
| 80 | if (IS_ERR(cs)) | 83 | if (IS_ERR(cs)) |
| 81 | return PTR_ERR(cs); | 84 | return PTR_ERR(cs); |
| 82 | 85 | ||
| 83 | *cs++ = cmd; | 86 | *cs++ = cmd; |
| 84 | *cs++ = MI_NOOP; | 87 | while (num_store_dw--) { |
| 88 | *cs++ = MI_STORE_DWORD_IMM | MI_MEM_VIRTUAL; | ||
| 89 | *cs++ = i915_scratch_offset(rq->i915); | ||
| 90 | *cs++ = 0; | ||
| 91 | } | ||
| 92 | *cs++ = MI_FLUSH | MI_NO_WRITE_FLUSH; | ||
| 93 | |||
| 85 | intel_ring_advance(rq, cs); | 94 | intel_ring_advance(rq, cs); |
| 86 | 95 | ||
| 87 | return 0; | 96 | return 0; |
