diff options
Diffstat (limited to 'freedreno/msm/msm_ringbuffer.c')
-rw-r--r-- | freedreno/msm/msm_ringbuffer.c | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/freedreno/msm/msm_ringbuffer.c b/freedreno/msm/msm_ringbuffer.c index 7eebac18..301ac66f 100644 --- a/freedreno/msm/msm_ringbuffer.c +++ b/freedreno/msm/msm_ringbuffer.c | |||
@@ -295,13 +295,35 @@ static void flush_reset(struct fd_ringbuffer *ring) | |||
295 | msm_ring->nr_bos = 0; | 295 | msm_ring->nr_bos = 0; |
296 | } | 296 | } |
297 | 297 | ||
298 | static void dump_submit(struct msm_ringbuffer *msm_ring) | ||
299 | { | ||
300 | uint32_t i, j; | ||
301 | |||
302 | for (i = 0; i < msm_ring->submit.nr_bos; i++) { | ||
303 | struct drm_msm_gem_submit_bo *bo = &msm_ring->submit.bos[i]; | ||
304 | ERROR_MSG(" bos[%d]: handle=%u, flags=%x", i, bo->handle, bo->flags); | ||
305 | } | ||
306 | for (i = 0; i < msm_ring->submit.nr_cmds; i++) { | ||
307 | struct drm_msm_gem_submit_cmd *cmd = &msm_ring->submit.cmds[i]; | ||
308 | struct drm_msm_gem_submit_reloc *relocs = U642VOID(cmd->relocs); | ||
309 | ERROR_MSG(" cmd[%d]: type=%u, submit_idx=%u, submit_offset=%u, size=%u", | ||
310 | i, cmd->type, cmd->submit_idx, cmd->submit_offset, cmd->size); | ||
311 | for (j = 0; j < cmd->nr_relocs; j++) { | ||
312 | struct drm_msm_gem_submit_reloc *r = &relocs[j]; | ||
313 | ERROR_MSG(" reloc[%d]: submit_offset=%u, or=%08x, shift=%d, reloc_idx=%u" | ||
314 | ", reloc_offset=%"PRIu64, j, r->submit_offset, r->or, r->shift, | ||
315 | r->reloc_idx, r->reloc_offset); | ||
316 | } | ||
317 | } | ||
318 | } | ||
319 | |||
298 | static int msm_ringbuffer_flush(struct fd_ringbuffer *ring, uint32_t *last_start) | 320 | static int msm_ringbuffer_flush(struct fd_ringbuffer *ring, uint32_t *last_start) |
299 | { | 321 | { |
300 | struct msm_ringbuffer *msm_ring = to_msm_ringbuffer(ring); | 322 | struct msm_ringbuffer *msm_ring = to_msm_ringbuffer(ring); |
301 | struct drm_msm_gem_submit req = { | 323 | struct drm_msm_gem_submit req = { |
302 | .pipe = to_msm_pipe(ring->pipe)->pipe, | 324 | .pipe = to_msm_pipe(ring->pipe)->pipe, |
303 | }; | 325 | }; |
304 | uint32_t i, j, submit_offset, size; | 326 | uint32_t i, submit_offset, size; |
305 | int ret; | 327 | int ret; |
306 | 328 | ||
307 | submit_offset = offset_bytes(last_start, ring->start); | 329 | submit_offset = offset_bytes(last_start, ring->start); |
@@ -331,23 +353,7 @@ static int msm_ringbuffer_flush(struct fd_ringbuffer *ring, uint32_t *last_start | |||
331 | &req, sizeof(req)); | 353 | &req, sizeof(req)); |
332 | if (ret) { | 354 | if (ret) { |
333 | ERROR_MSG("submit failed: %d (%s)", ret, strerror(errno)); | 355 | ERROR_MSG("submit failed: %d (%s)", ret, strerror(errno)); |
334 | ERROR_MSG(" pipe: %u", req.pipe); | 356 | dump_submit(msm_ring); |
335 | for (i = 0; i < msm_ring->submit.nr_bos; i++) { | ||
336 | struct drm_msm_gem_submit_bo *bo = &msm_ring->submit.bos[i]; | ||
337 | ERROR_MSG(" bos[%d]: handle=%u, flags=%x", i, bo->handle, bo->flags); | ||
338 | } | ||
339 | for (i = 0; i < msm_ring->submit.nr_cmds; i++) { | ||
340 | struct drm_msm_gem_submit_cmd *cmd = &msm_ring->submit.cmds[i]; | ||
341 | struct drm_msm_gem_submit_reloc *relocs = U642VOID(cmd->relocs); | ||
342 | ERROR_MSG(" cmd[%d]: type=%u, submit_idx=%u, submit_offset=%u, size=%u", | ||
343 | i, cmd->type, cmd->submit_idx, cmd->submit_offset, cmd->size); | ||
344 | for (j = 0; j < cmd->nr_relocs; j++) { | ||
345 | struct drm_msm_gem_submit_reloc *r = &relocs[j]; | ||
346 | ERROR_MSG(" reloc[%d]: submit_offset=%u, or=%08x, shift=%d, reloc_idx=%u" | ||
347 | ", reloc_offset=%"PRIu64, j, r->submit_offset, r->or, r->shift, | ||
348 | r->reloc_idx, r->reloc_offset); | ||
349 | } | ||
350 | } | ||
351 | } else if (!ret) { | 357 | } else if (!ret) { |
352 | /* update timestamp on all rings associated with submit: */ | 358 | /* update timestamp on all rings associated with submit: */ |
353 | for (i = 0; i < msm_ring->submit.nr_cmds; i++) { | 359 | for (i = 0; i < msm_ring->submit.nr_cmds; i++) { |