No, it is just me getting confused between HEAD and START. Ok, I wonder if this is the missing piece of magic (on top of the current bug branch):
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index b46b3e928a7f..12c59e945f8e 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c @@ -530,15 +530,14 @@ static int init_ring_common(struct intel_ring_buffer *ring) ((ring->size - PAGE_SIZE) & RING_NR_PAGES) | RING_VALID);
- if (I915_READ_START(ring) != i915_gem_obj_ggtt_offset(obj)) { + if (I915_READ_HEAD(ring)) { printk(KERN_ERR "%s initialization failed" - " [%08x != %08x], fudging\n", + " [head now %08x], fudging\n", ring->name, - I915_READ_START(ring), - i915_gem_obj_ggtt_offset(obj)); - I915_WRITE_START(ring, i915_gem_obj_ggtt_offset(obj)); - POSTING_READ(ring); + I915_READ_HEAD(ring)); + I915_WRITE_HEAD(ring, 0); + (void)I915_READ_HEAD(ring); }
iowrite32(MI_NOOP, ring->virtual_start + 0);
No, it is just me getting confused between HEAD and START. Ok, I wonder if this is the missing piece of magic (on top of the current bug branch):
diff --git a/drivers/ gpu/drm/ i915/intel_ ringbuffer. c b/drivers/ gpu/drm/ i915/intel_ ringbuffer. c .12c59e945f8e 100644 gpu/drm/ i915/intel_ ringbuffer. c gpu/drm/ i915/intel_ ringbuffer. c common( struct intel_ring_buffer *ring)
((ring- >size - PAGE_SIZE) & RING_NR_PAGES)
| RING_VALID);
index b46b3e928a7f.
--- a/drivers/
+++ b/drivers/
@@ -530,15 +530,14 @@ static int init_ring_
- if (I915_READ_ START(ring) != i915_gem_ obj_ggtt_ offset( obj)) { HEAD(ring) ) {
printk( KERN_ERR
"%s initialization failed"
ring- >name, START(ring) , obj_ggtt_ offset( obj)); START(ring, i915_gem_ obj_ggtt_ offset( obj)); HEAD(ring) ); HEAD(ring, 0); READ_HEAD( ring);
+ if (I915_READ_
- " [%08x != %08x], fudging\n",
+ " [head now %08x], fudging\n",
- I915_READ_
- i915_gem_
- I915_WRITE_
- POSTING_READ(ring);
+ I915_READ_
+ I915_WRITE_
+ (void)I915_
}