|
@@ -1184,6 +1184,8 @@ static int intel_init_ring_buffer(struct drm_device *dev,
|
|
|
if (IS_I830(ring->dev) || IS_845G(ring->dev))
|
|
|
ring->effective_size -= 128;
|
|
|
|
|
|
+ intel_ring_init_seqno(ring, dev_priv->last_seqno);
|
|
|
+
|
|
|
return 0;
|
|
|
|
|
|
err_unmap:
|
|
@@ -1431,26 +1433,18 @@ int intel_ring_begin(struct intel_ring_buffer *ring,
|
|
|
return __intel_ring_begin(ring, num_dwords * sizeof(uint32_t));
|
|
|
}
|
|
|
|
|
|
-int intel_ring_handle_seqno_wrap(struct intel_ring_buffer *ring)
|
|
|
+void intel_ring_init_seqno(struct intel_ring_buffer *ring, u32 seqno)
|
|
|
{
|
|
|
- int ret;
|
|
|
+ struct drm_i915_private *dev_priv = ring->dev->dev_private;
|
|
|
|
|
|
BUG_ON(ring->outstanding_lazy_request);
|
|
|
|
|
|
- if (INTEL_INFO(ring->dev)->gen < 6)
|
|
|
- return 0;
|
|
|
-
|
|
|
- ret = __intel_ring_begin(ring, 6 * sizeof(uint32_t));
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
-
|
|
|
- /* Leaving a stale, pre-wrap seqno behind in the mboxes will result in
|
|
|
- * post-wrap semaphore waits completing immediately. Clear them. */
|
|
|
- update_mboxes(ring, ring->signal_mbox[0]);
|
|
|
- update_mboxes(ring, ring->signal_mbox[1]);
|
|
|
- intel_ring_advance(ring);
|
|
|
+ if (INTEL_INFO(ring->dev)->gen >= 6) {
|
|
|
+ I915_WRITE(RING_SYNC_0(ring->mmio_base), 0);
|
|
|
+ I915_WRITE(RING_SYNC_1(ring->mmio_base), 0);
|
|
|
+ }
|
|
|
|
|
|
- return 0;
|
|
|
+ ring->set_seqno(ring, seqno);
|
|
|
}
|
|
|
|
|
|
void intel_ring_advance(struct intel_ring_buffer *ring)
|