diff options
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index bf0195a96d53..414af1e2973b 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
@@ -289,8 +289,6 @@ static int init_ring_common(struct intel_ring_buffer *ring) | |||
289 | I915_WRITE_HEAD(ring, 0); | 289 | I915_WRITE_HEAD(ring, 0); |
290 | ring->write_tail(ring, 0); | 290 | ring->write_tail(ring, 0); |
291 | 291 | ||
292 | /* Initialize the ring. */ | ||
293 | I915_WRITE_START(ring, obj->gtt_offset); | ||
294 | head = I915_READ_HEAD(ring) & HEAD_ADDR; | 292 | head = I915_READ_HEAD(ring) & HEAD_ADDR; |
295 | 293 | ||
296 | /* G45 ring initialization fails to reset head to zero */ | 294 | /* G45 ring initialization fails to reset head to zero */ |
@@ -316,6 +314,11 @@ static int init_ring_common(struct intel_ring_buffer *ring) | |||
316 | } | 314 | } |
317 | } | 315 | } |
318 | 316 | ||
317 | /* Initialize the ring. This must happen _after_ we've cleared the ring | ||
318 | * registers with the above sequence (the readback of the HEAD registers | ||
319 | * also enforces ordering), otherwise the hw might lose the new ring | ||
320 | * register values. */ | ||
321 | I915_WRITE_START(ring, obj->gtt_offset); | ||
319 | I915_WRITE_CTL(ring, | 322 | I915_WRITE_CTL(ring, |
320 | ((ring->size - PAGE_SIZE) & RING_NR_PAGES) | 323 | ((ring->size - PAGE_SIZE) & RING_NR_PAGES) |
321 | | RING_VALID); | 324 | | RING_VALID); |