diff --git a/src/panfrost/vulkan/csf/panvk_vX_gpu_queue.c b/src/panfrost/vulkan/csf/panvk_vX_gpu_queue.c index a2328994c99..c4848fe575b 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_gpu_queue.c +++ b/src/panfrost/vulkan/csf/panvk_vX_gpu_queue.c @@ -1462,8 +1462,12 @@ panvk_per_arch(gpu_queue_check_status)(struct vk_queue *vk_queue) for (uint32_t i = 0; i < PANVK_SUBQUEUE_COUNT; i++) { panvk_priv_mem_readback(queue->subqueues[i].context, 0, struct panvk_cs_subqueue_context, subq_ctx) { - if (subq_ctx->last_error != 0) + if (subq_ctx->last_error != 0) { + /* Check printf buffer one more time before exiting */ + u_printf_with_ctx(stdout, &dev->printf.ctx); + return vk_queue_set_lost(&queue->vk, "CS_FAULT"); + } } } @@ -1472,6 +1476,9 @@ panvk_per_arch(gpu_queue_check_status)(struct vk_queue *vk_queue) if (!ret && !state.state) return VK_SUCCESS; + /* Check printf buffer one more time before exiting */ + u_printf_with_ctx(stdout, &dev->printf.ctx); + vk_queue_set_lost(&queue->vk, "group state: err=%d, state=0x%x, fatal_queues=0x%x", ret, state.state, state.fatal_queues); diff --git a/src/panfrost/vulkan/jm/panvk_vX_gpu_queue.c b/src/panfrost/vulkan/jm/panvk_vX_gpu_queue.c index e3bd9de131e..bc1bc0fcc75 100644 --- a/src/panfrost/vulkan/jm/panvk_vX_gpu_queue.c +++ b/src/panfrost/vulkan/jm/panvk_vX_gpu_queue.c @@ -393,8 +393,11 @@ panvk_per_arch(QueueWaitIdle)(VkQueue _queue) /* we need to use vk_common_QueueWaitIdle if we ever go threaded */ assert(queue->vk.submit.mode != VK_QUEUE_SUBMIT_MODE_THREADED); - if (vk_device_is_lost(&dev->vk)) + if (vk_device_is_lost(&dev->vk)) { + /* Check printf buffer one more time before exiting */ + u_printf_with_ctx(stdout, &dev->printf.ctx); return VK_ERROR_DEVICE_LOST; + } ASSERTED int ret = drmSyncobjWait(dev->drm_fd, &queue->sync, 1, INT64_MAX, DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL,