]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Revert "drm/i915: correctly order the ring init sequence"
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 7 Aug 2012 07:54:14 +0000 (09:54 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 12 Oct 2012 20:47:23 +0000 (05:47 +0900)
This reverts 622ecb9ace2ec006b58f6779732961945ea303ca which is
commit 0d8957c8a90bbb5d34fab9a304459448a5131e06 upstream.

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.

Reported-by: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Yang Guang <guang.a.yang@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/i915/intel_ringbuffer.c

index b5e7bd9e1f8fb08d5c5e0715bad836e5e826b7c4..e5b84ff89ca58234b5c7e0d30fa8e97583d6357d 100644 (file)
@@ -280,6 +280,8 @@ static int init_ring_common(struct intel_ring_buffer *ring)
        I915_WRITE_HEAD(ring, 0);
        ring->write_tail(ring, 0);
 
+       /* Initialize the ring. */
+       I915_WRITE_START(ring, obj->gtt_offset);
        head = I915_READ_HEAD(ring) & HEAD_ADDR;
 
        /* G45 ring initialization fails to reset head to zero */
@@ -305,11 +307,6 @@ static int init_ring_common(struct intel_ring_buffer *ring)
                }
        }
 
-       /* Initialize the ring. This must happen _after_ we've cleared the ring
-        * registers with the above sequence (the readback of the HEAD registers
-        * also enforces ordering), otherwise the hw might lose the new ring
-        * register values. */
-       I915_WRITE_START(ring, obj->gtt_offset);
        I915_WRITE_CTL(ring,
                        ((ring->size - PAGE_SIZE) & RING_NR_PAGES)
                        | RING_VALID);