aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-02-17 11:38:33 -0500
committerChris Wilson <chris@chris-wilson.co.uk>2017-02-20 09:32:25 -0500
commit944a36d472be642d0d082d2480fe2b40046602a9 (patch)
tree57a2b7a932fb454c5d230bb75e7921c8da28ab32 /drivers/gpu/drm/i915/intel_ringbuffer.c
parent8d8c386c38692c1183b2c0ecffb84de91b8b32b0 (diff)
drm/i915: Assert that the request->tail is always qword aligned
The hardware requires that the tail pointer only advance in qword units, so assert that the value we write is aligned to qwords, and similarly enforce this restriction onto the request->tail. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170217163833.731-1-chris@chris-wilson.co.uk Reviewed-by: MichaƂ Winiarski <michal.winiarski@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index d56f384938f7..f62afffef682 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -784,6 +784,7 @@ static void i9xx_submit_request(struct drm_i915_gem_request *request)
784 784
785 i915_gem_request_submit(request); 785 i915_gem_request_submit(request);
786 786
787 GEM_BUG_ON(!IS_ALIGNED(request->tail, 8));
787 I915_WRITE_TAIL(request->engine, request->tail); 788 I915_WRITE_TAIL(request->engine, request->tail);
788} 789}
789 790
@@ -795,6 +796,7 @@ static void i9xx_emit_breadcrumb(struct drm_i915_gem_request *req, u32 *cs)
795 *cs++ = MI_USER_INTERRUPT; 796 *cs++ = MI_USER_INTERRUPT;
796 797
797 req->tail = intel_ring_offset(req, cs); 798 req->tail = intel_ring_offset(req, cs);
799 GEM_BUG_ON(!IS_ALIGNED(req->tail, 8));
798} 800}
799 801
800static const int i9xx_emit_breadcrumb_sz = 4; 802static const int i9xx_emit_breadcrumb_sz = 4;
@@ -833,6 +835,7 @@ static void gen8_render_emit_breadcrumb(struct drm_i915_gem_request *req,
833 *cs++ = MI_NOOP; 835 *cs++ = MI_NOOP;
834 836
835 req->tail = intel_ring_offset(req, cs); 837 req->tail = intel_ring_offset(req, cs);
838 GEM_BUG_ON(!IS_ALIGNED(req->tail, 8));
836} 839}
837 840
838static const int gen8_render_emit_breadcrumb_sz = 8; 841static const int gen8_render_emit_breadcrumb_sz = 8;