From 619463837fb9c6f68bea7551f0309324fdfff394 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 8 Nov 2024 13:00:19 -0800 Subject: [PATCH] panvk: fix a missing cache invalidation For the host-to-device domain operation, it is possible that wait_sb_mask is empty but there is a cache invalidaton, Signed-off-by: Chia-I Wu Reviewed-by: Boris Brezillon Part-of: --- src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c index 9f360c4f3f9..5779d8fbc7d 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_buffer.c @@ -497,13 +497,12 @@ panvk_per_arch(CmdPipelineBarrier2)(VkCommandBuffer commandBuffer, } for (uint32_t i = 0; i < PANVK_SUBQUEUE_COUNT; i++) { - if (!deps.src[i].wait_sb_mask) - continue; struct cs_builder *b = panvk_get_cs_builder(cmdbuf, i); struct panvk_cs_state *cs_state = &cmdbuf->state.cs[i]; - cs_wait_slots(b, deps.src[i].wait_sb_mask, false); + if (deps.src[i].wait_sb_mask) + cs_wait_slots(b, deps.src[i].wait_sb_mask, false); struct panvk_cache_flush_info cache_flush = deps.src[i].cache_flush; if (cache_flush.l2 != MALI_CS_FLUSH_MODE_NONE || @@ -521,6 +520,8 @@ panvk_per_arch(CmdPipelineBarrier2)(VkCommandBuffer commandBuffer, struct cs_index sync_addr = cs_scratch_reg64(b, 0); struct cs_index add_val = cs_scratch_reg64(b, 2); + assert(deps.src[i].wait_sb_mask); + cs_load64_to(b, sync_addr, cs_subqueue_ctx_reg(b), offsetof(struct panvk_cs_subqueue_context, syncobjs)); cs_wait_slot(b, SB_ID(LS), false);