freedreno/msm: dump out submit info on error

User should only see these with LIBGL_DEBUG=verbose.  But in case you
are hitting issues like "handle X at index Y already on submit list"
errors from the kernel, this gives some useful visibility for debug.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
diff --git a/freedreno/msm/msm_ringbuffer.c b/freedreno/msm/msm_ringbuffer.c
index 842574e..5ddea57 100644
--- a/freedreno/msm/msm_ringbuffer.c
+++ b/freedreno/msm/msm_ringbuffer.c
@@ -31,6 +31,7 @@
 #endif
 
 #include <assert.h>
+#include <inttypes.h>
 
 #include "freedreno_ringbuffer.h"
 #include "msm_priv.h"
@@ -228,7 +229,7 @@
 	struct drm_msm_gem_submit req = {
 			.pipe = to_msm_pipe(ring->pipe)->pipe,
 	};
-	uint32_t i, submit_offset, size;
+	uint32_t i, j, submit_offset, size;
 	int ret;
 
 	submit_offset = offset_bytes(last_start, ring->start);
@@ -258,6 +259,23 @@
 			&req, sizeof(req));
 	if (ret) {
 		ERROR_MSG("submit failed: %d (%s)", ret, strerror(errno));
+		ERROR_MSG("  pipe:  %u", req.pipe);
+		for (i = 0; i < msm_ring->submit.nr_bos; i++) {
+			struct drm_msm_gem_submit_bo *bo = &msm_ring->submit.bos[i];
+			ERROR_MSG("  bos[%d]: handle=%u, flags=%x", i, bo->handle, bo->flags);
+		}
+		for (i = 0; i < msm_ring->submit.nr_cmds; i++) {
+			struct drm_msm_gem_submit_cmd *cmd = &msm_ring->submit.cmds[i];
+			struct drm_msm_gem_submit_reloc *relocs = U642VOID(cmd->relocs);
+			ERROR_MSG("  cmd[%d]: type=%u, submit_idx=%u, submit_offset=%u, size=%u\n",
+					i, cmd->type, cmd->submit_idx, cmd->submit_offset, cmd->size);
+			for (j = 0; j < cmd->nr_relocs; j++) {
+				struct drm_msm_gem_submit_reloc *r = &relocs[j];
+				ERROR_MSG("    reloc[%d]: submit_offset=%u, or=%08x, shift=%d, reloc_idx=%u"
+						", reloc_offset=%"PRIu64, j, r->submit_offset, r->or, r->shift,
+						r->reloc_idx, r->reloc_offset);
+			}
+		}
 	} else {
 		/* update timestamp on all rings associated with submit: */
 		for (i = 0; i < msm_ring->submit.nr_cmds; i++) {