Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03382dfb authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Print the batchbuffer offset next to BBADDR in error state



It is useful when looking at captured error states to check the recorded
BBADDR register (the address of the last batchbuffer instruction loaded)
against the expected offset of the batch buffer, and so do a quick check
that (a) the capture is true or (b) HEAD hasn't wandered off into the
badlands.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1471254551-25805-30-git-send-email-chris@chris-wilson.co.uk
parent c84455b4
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -775,6 +775,7 @@ struct drm_i915_error_state {
		struct drm_i915_error_object {
		struct drm_i915_error_object {
			int page_count;
			int page_count;
			u64 gtt_offset;
			u64 gtt_offset;
			u64 gtt_size;
			u32 *pages[0];
			u32 *pages[0];
		} *ringbuffer, *batchbuffer, *wa_batchbuffer, *ctx, *hws_page;
		} *ringbuffer, *batchbuffer, *wa_batchbuffer, *ctx, *hws_page;


+13 −2
Original line number Original line Diff line number Diff line
@@ -242,8 +242,16 @@ static void error_print_engine(struct drm_i915_error_state_buf *m,
	err_printf(m, "  IPEIR: 0x%08x\n", ee->ipeir);
	err_printf(m, "  IPEIR: 0x%08x\n", ee->ipeir);
	err_printf(m, "  IPEHR: 0x%08x\n", ee->ipehr);
	err_printf(m, "  IPEHR: 0x%08x\n", ee->ipehr);
	err_printf(m, "  INSTDONE: 0x%08x\n", ee->instdone);
	err_printf(m, "  INSTDONE: 0x%08x\n", ee->instdone);
	if (ee->batchbuffer) {
		u64 start = ee->batchbuffer->gtt_offset;
		u64 end = start + ee->batchbuffer->gtt_size;

		err_printf(m, "  batch: [0x%08x_%08x, 0x%08x_%08x]\n",
			   upper_32_bits(start), lower_32_bits(start),
			   upper_32_bits(end), lower_32_bits(end));
	}
	if (INTEL_GEN(m->i915) >= 4) {
	if (INTEL_GEN(m->i915) >= 4) {
		err_printf(m, "  BBADDR: 0x%08x %08x\n",
		err_printf(m, "  BBADDR: 0x%08x_%08x\n",
			   (u32)(ee->bbaddr>>32), (u32)ee->bbaddr);
			   (u32)(ee->bbaddr>>32), (u32)ee->bbaddr);
		err_printf(m, "  BB_STATE: 0x%08x\n", ee->bbstate);
		err_printf(m, "  BB_STATE: 0x%08x\n", ee->bbstate);
		err_printf(m, "  INSTPS: 0x%08x\n", ee->instps);
		err_printf(m, "  INSTPS: 0x%08x\n", ee->instps);
@@ -677,7 +685,10 @@ i915_error_object_create(struct drm_i915_private *dev_priv,
	if (!dst)
	if (!dst)
		return NULL;
		return NULL;


	reloc_offset = dst->gtt_offset = vma->node.start;
	dst->gtt_offset = vma->node.start;
	dst->gtt_size = vma->node.size;

	reloc_offset = dst->gtt_offset;
	use_ggtt = (src->cache_level == I915_CACHE_NONE &&
	use_ggtt = (src->cache_level == I915_CACHE_NONE &&
		   (vma->flags & I915_VMA_GLOBAL_BIND) &&
		   (vma->flags & I915_VMA_GLOBAL_BIND) &&
		   reloc_offset + num_pages * PAGE_SIZE <= ggtt->mappable_end);
		   reloc_offset + num_pages * PAGE_SIZE <= ggtt->mappable_end);