[3.13.y.z extended stable] Patch "drm/i915: read HEAD register back in init_ring_common() to enforce ordering" has been added to staging queue

Kamal Mostafa kamal at canonical.com
Mon Sep 15 22:08:04 UTC 2014

This is a note to let you know that I have just added a patch titled

    drm/i915: read HEAD register back in init_ring_common() to enforce ordering

to the linux-3.13.y-queue branch of the 3.13.y.z extended stable tree 
which can be found at:


This patch is scheduled to be released in version

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.13.y.z tree, see



>From 2e9f10873a124818a724715bcb42aefff4d0d2c0 Mon Sep 17 00:00:00 2001
From: Jiri Kosina <jkosina at suse.cz>
Date: Thu, 7 Aug 2014 16:29:53 +0200
Subject: drm/i915: read HEAD register back in init_ring_common() to enforce

commit ece4a17d237a79f63fbfaf3f724a12b6d500555c upstream.

Withtout this, ring initialization fails reliabily during resume with

	[drm:init_ring_common] *ERROR* render ring initialization failed ctl 0001f001 head ffffff8804 tail 00000000 start 000e4000

This is not a complete fix, but it is verified to make the ring
initialization failures during resume much less likely.

We were not able to root-cause this bug (likely HW-specific to Gen4 chips)
yet. This is therefore used as a ducttape before problem is fully
understood and proper fix created, so that people don't suffer from
completely unusable systems in the meantime.

The discussion and debugging is happening at


Signed-off-by: Jiri Kosina <jkosina at suse.cz>
Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
Signed-off-by: Kamal Mostafa <kamal at canonical.com>
 drivers/gpu/drm/i915/intel_ringbuffer.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 53f5458..dfb8546 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -473,6 +473,9 @@ static int init_ring_common(struct intel_ring_buffer *ring)

+	/* Enforce ordering by reading HEAD register back */
+	I915_READ_HEAD(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

More information about the kernel-team mailing list