b/drivers/gpu/drm/i915/i915_irq.c
@@ -2831,7 +2831,7 @@ semaphore_waits_for(struct intel_engine_cs *ring,
u32 *seqno)
head &= ring->buffer->size - 1;
/* This here seems to blow up */
- cmd = ioread32(ring->buffer->virtual_start + head);
+ cmd = intel_ringbuffer_read(ring->buffer, head);
if (cmd == ipehr)
break;
@@ -2841,11 +2841,11 @@ semaphore_waits_for(struct intel_engine_cs
*ring, u32 *seqno)
if (!i)
return NULL;
- *seqno = ioread32(ring->buffer->virtual_start + head + 4) + 1;
+ *seqno = intel_ringbuffer_read(ring->buffer, head + 4) + 1;
if (INTEL_INFO(ring->dev)->gen >= 8) {
- offset = ioread32(ring->buffer->virtual_start + head + 12);
+ offset = intel_ringbuffer_read(ring->buffer, head +
12);
offset <<= 32;
- offset = ioread32(ring->buffer->virtual_start +
head + 8);
+ offset = intel_ringbuffer_read(ring->buffer, head + 8);
}
return semaphore_wait_to_signaller_ring(ring, ipehr, offset);
}
b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -1999,7 +1999,7 @@ void intel_unpin_ringbuffer_obj(struct
intel_ringbuffer *ringbuf)
if (HAS_LLC(ringbuf->obj->base.dev) &&
!ringbuf->obj->stolen)
vunmap(ringbuf->virtual_start);
else
- iounmap(ringbuf->virtual_start);
+ iounmap((void __iomem
*)ringbuf->virtual_start);
ringbuf->virtual_start = NULL;
i915_gem_object_ggtt_unpin(ringbuf->obj);
}
@@ -2059,7 +2059,7 @@ int intel_pin_and_map_ringbuffer_obj(struct
drm_device *dev,
return ret;
}
- ringbuf->virtual_start =
ioremap_wc(dev_priv->gtt.mappable_base +
+
ringbuf->virtual_start = (void __force
*)ioremap_wc(dev_priv->gtt.mappable_base +
i915_gem_obj_ggtt_offset(obj),
ringbuf->size);
if (ringbuf->virtual_start == NULL) {
i915_gem_object_ggtt_unpin(obj);
b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -448,6 +448,13 @@ static inline void intel_ringbuffer_advance(struct
intel_ringbuffer *rb)
rb->tail &= rb->size - 1;
}
+static inline u32 intel_ringbuffer_read(const struct intel_ringbuffer
*rb,
+ const u32 offset)
+{
+ WARN_ON(offset >= rb->size);
+ return *(uint32_t *)(rb->virtual_start + offset);
+}
+
static inline void intel_ring_emit(struct intel_engine_cs *ring,