Skip to content

Commit 0d8957c

Browse files
committed
drm/i915: correctly order the ring init sequence
We may only start to set up the new register values after having confirmed that the ring is truely off. Otherwise the hw might lose the newly written register values. This is caught later on in the init sequence, when we check whether the register writes have stuck. Cc: stable@vger.kernel.org Reviewed-by: Jani Nikula <jani.nikula@intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50522 Tested-by: Yang Guang <guang.a.yang@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
1 parent da612d8 commit 0d8957c

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

drivers/gpu/drm/i915/intel_ringbuffer.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,6 @@ static int init_ring_common(struct intel_ring_buffer *ring)
289289
I915_WRITE_HEAD(ring, 0);
290290
ring->write_tail(ring, 0);
291291

292-
/* Initialize the ring. */
293-
I915_WRITE_START(ring, obj->gtt_offset);
294292
head = I915_READ_HEAD(ring) & HEAD_ADDR;
295293

296294
/* G45 ring initialization fails to reset head to zero */
@@ -316,6 +314,11 @@ static int init_ring_common(struct intel_ring_buffer *ring)
316314
}
317315
}
318316

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);
319322
I915_WRITE_CTL(ring,
320323
((ring->size - PAGE_SIZE) & RING_NR_PAGES)
321324
| RING_VALID);

0 commit comments

Comments
 (0)