Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/gem: Specify address type for chained reloc batches

It is required that a chained batch be in the same address domain as its
parent, and also that must be specified in the command for earlier gen
as it is not inferred from the chaining until gen6.

Fixes: 964a9b0f611e ("drm/i915/gem: Use chained reloc batches")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200504125149.4396-1-chris@chris-wilson.co.uk

+6 -6
+6 -6
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
··· 1004 1004 GEM_BUG_ON(cache->rq_size + RELOC_TAIL > PAGE_SIZE / sizeof(u32)); 1005 1005 cmd = cache->rq_cmd + cache->rq_size; 1006 1006 *cmd++ = MI_ARB_CHECK; 1007 - if (cache->gen >= 8) { 1007 + if (cache->gen >= 8) 1008 1008 *cmd++ = MI_BATCH_BUFFER_START_GEN8; 1009 - *cmd++ = lower_32_bits(batch->node.start); 1010 - *cmd++ = upper_32_bits(batch->node.start); 1011 - } else { 1009 + else if (cache->gen >= 6) 1012 1010 *cmd++ = MI_BATCH_BUFFER_START; 1013 - *cmd++ = lower_32_bits(batch->node.start); 1014 - } 1011 + else 1012 + *cmd++ = MI_BATCH_BUFFER_START | MI_BATCH_GTT; 1013 + *cmd++ = lower_32_bits(batch->node.start); 1014 + *cmd++ = upper_32_bits(batch->node.start); /* Always 0 for gen<8 */ 1015 1015 i915_gem_object_flush_map(cache->rq_vma->obj); 1016 1016 i915_gem_object_unpin_map(cache->rq_vma->obj); 1017 1017 cache->rq_vma = NULL;