diff --git a/.pick_status.json b/.pick_status.json index f8ddc9ed9fe..01d0b004b63 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -4564,7 +4564,7 @@ "description": "panvk: Fix instrumentation on v12+", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "172dead3df385c43c1de8291a3bd154c3f0f6530", "notes": null diff --git a/src/panfrost/genxml/cs_builder.h b/src/panfrost/genxml/cs_builder.h index e177e72c912..20c99b568e2 100644 --- a/src/panfrost/genxml/cs_builder.h +++ b/src/panfrost/genxml/cs_builder.h @@ -432,12 +432,14 @@ cs_dst64(struct cs_builder *b, struct cs_index dst) return cs_dst_tuple(b, dst, 2, BITFIELD_MASK(2)); } +#define CS_MAX_REG_TUPLE_SIZE 16 + static inline struct cs_index cs_reg_tuple(ASSERTED struct cs_builder *b, uint8_t reg, uint8_t size) { assert(reg + size <= b->conf.nr_registers - b->conf.nr_kernel_registers && "overflowed register file"); - assert(size <= 16 && "unsupported"); + assert(size <= CS_MAX_REG_TUPLE_SIZE && "unsupported"); return (struct cs_index){ .type = CS_INDEX_REGISTER, diff --git a/src/panfrost/vulkan/csf/panvk_vX_utrace.c b/src/panfrost/vulkan/csf/panvk_vX_utrace.c index f1adbfe0b0a..e54a6653580 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_utrace.c +++ b/src/panfrost/vulkan/csf/panvk_vX_utrace.c @@ -40,7 +40,8 @@ cmd_copy_data(struct cs_builder *b, uint64_t dst_addr, uint64_t src_addr, */ const struct cs_index dst_addr_reg = cs_scratch_reg64(b, 0); const struct cs_index src_addr_reg = cs_scratch_reg64(b, 2); - const uint32_t temp_count = CS_REG_SCRATCH_COUNT - 4; + const uint32_t temp_count = + MIN2(CS_REG_SCRATCH_COUNT - 4, CS_MAX_REG_TUPLE_SIZE); while (size) { cs_move64_to(b, dst_addr_reg, dst_addr);