From f10244d8d977ee1c15e73c745b96ba5b37ae8912 Mon Sep 17 00:00:00 2001 From: "Nagulendran, Iswara" Date: Tue, 29 Apr 2025 14:10:10 -0400 Subject: [PATCH] amd/vpelib: Setup cost profiling support Add logs to profile registers writes. Reviewed-by: Roy Chan Reviewed-by: Jesse Agate Acked-by: ChuanYu Tseng Signed-off-by: Nagulendran, Iswara Part-of: --- .../vpelib/src/chip/vpe10/vpe10_vpe_desc_writer.c | 7 +++++++ .../vpelib/src/chip/vpe11/vpe11_vpe_desc_writer.c | 3 +++ src/amd/vpelib/src/core/config_writer.c | 6 ++++++ src/amd/vpelib/src/core/inc/config_writer.h | 6 ++++++ src/amd/vpelib/src/core/inc/vpe_desc_writer.h | 3 +++ src/amd/vpelib/src/core/vpelib.c | 14 ++++++++++++++ 6 files changed, 39 insertions(+) diff --git a/src/amd/vpelib/src/chip/vpe10/vpe10_vpe_desc_writer.c b/src/amd/vpelib/src/chip/vpe10/vpe10_vpe_desc_writer.c index 47703326f22..a5ff81d746b 100644 --- a/src/amd/vpelib/src/chip/vpe10/vpe10_vpe_desc_writer.c +++ b/src/amd/vpelib/src/chip/vpe10/vpe10_vpe_desc_writer.c @@ -46,6 +46,9 @@ enum vpe_status vpe10_vpe_desc_writer_init( writer->base_gpu_va = buf->gpu_va; writer->buf = buf; writer->num_config_desc = 0; +#ifdef VPE_REGISTER_PROFILE + writer->reuse_num_config_dec = 0; +#endif writer->plane_desc_added = false; writer->status = VPE_STATUS_OK; @@ -123,6 +126,10 @@ void vpe10_vpe_desc_writer_add_config_desc( writer->buf->gpu_va += size; writer->buf->size -= size; writer->num_config_desc++; +#ifdef VPE_REGISTER_PROFILE + if (reuse) + writer->reuse_num_config_dec++; +#endif } void vpe10_vpe_desc_writer_complete(struct vpe_desc_writer *writer) diff --git a/src/amd/vpelib/src/chip/vpe11/vpe11_vpe_desc_writer.c b/src/amd/vpelib/src/chip/vpe11/vpe11_vpe_desc_writer.c index 1fc17da2008..f295adbc0c8 100644 --- a/src/amd/vpelib/src/chip/vpe11/vpe11_vpe_desc_writer.c +++ b/src/amd/vpelib/src/chip/vpe11/vpe11_vpe_desc_writer.c @@ -47,6 +47,9 @@ enum vpe_status vpe11_vpe_desc_writer_init( writer->base_gpu_va = buf->gpu_va; writer->buf = buf; writer->num_config_desc = 0; +#ifdef VPE_REGISTER_PROFILE + writer->reuse_num_config_dec = 0; +#endif writer->plane_desc_added = false; writer->status = VPE_STATUS_OK; diff --git a/src/amd/vpelib/src/core/config_writer.c b/src/amd/vpelib/src/core/config_writer.c index 5eb92271f4e..cc6f3d7b8b8 100644 --- a/src/amd/vpelib/src/core/config_writer.c +++ b/src/amd/vpelib/src/core/config_writer.c @@ -207,6 +207,9 @@ void config_writer_fill_direct_config_packet_header( return; } +#ifdef VPE_REGISTER_PROFILE + writer->register_count += packet->bits.VPEP_CONFIG_DATA_SIZE + 1; +#endif cmd_space = (uint32_t *)(uintptr_t)writer->buf->cpu_va; *cmd_space++ = packet->u32all; writer->buf->cpu_va += w_size; @@ -241,6 +244,9 @@ void config_writer_fill_direct_config_packet( return; } +#ifdef VPE_REGISTER_PROFILE + writer->register_count++; +#endif cmd_space = (uint32_t *)(uintptr_t)writer->buf->cpu_va; *cmd_space++ = packet->u32all; // Write header writer->buf->cpu_va += sizeof(uint32_t); diff --git a/src/amd/vpelib/src/core/inc/config_writer.h b/src/amd/vpelib/src/core/inc/config_writer.h index 090779b587e..79e6e5ef2ca 100644 --- a/src/amd/vpelib/src/core/inc/config_writer.h +++ b/src/amd/vpelib/src/core/inc/config_writer.h @@ -91,6 +91,12 @@ struct config_writer { void *callback_ctx; config_callback_t callback; enum vpe_status status; + +#ifdef VPE_REGISTER_PROFILE + uint64_t register_count; + uint64_t total_config_count; + uint64_t reused_config_count; +#endif }; /** initialize the config writer. diff --git a/src/amd/vpelib/src/core/inc/vpe_desc_writer.h b/src/amd/vpelib/src/core/inc/vpe_desc_writer.h index 47ec75a793e..88b8ef5d119 100644 --- a/src/amd/vpelib/src/core/inc/vpe_desc_writer.h +++ b/src/amd/vpelib/src/core/inc/vpe_desc_writer.h @@ -41,6 +41,9 @@ struct vpe_desc_writer { uint64_t base_cpu_va; uint32_t num_config_desc; +#ifdef VPE_REGISTER_PROFILE + uint32_t reuse_num_config_dec; +#endif bool plane_desc_added; enum vpe_status status; diff --git a/src/amd/vpelib/src/core/vpelib.c b/src/amd/vpelib/src/core/vpelib.c index 2aab5371c14..e07b1f32a5f 100644 --- a/src/amd/vpelib/src/core/vpelib.c +++ b/src/amd/vpelib/src/core/vpelib.c @@ -654,6 +654,11 @@ enum vpe_status vpe_build_commands( vpe_priv = container_of(vpe, struct vpe_priv, pub); +#ifdef VPE_REGISTER_PROFILE + vpe_priv->config_writer.register_count = 0; + vpe_priv->config_writer.total_config_count = 0; + vpe_priv->config_writer.reused_config_count = 0; +#endif if (!vpe_priv->ops_support) { VPE_ASSERT(vpe_priv->ops_support); status = VPE_STATUS_NOT_SUPPORTED; @@ -788,7 +793,16 @@ enum vpe_status vpe_build_commands( } } } +#ifdef VPE_REGISTER_PROFILE + vpe_priv->config_writer.total_config_count += vpe_priv->vpe_desc_writer.num_config_desc; + vpe_priv->config_writer.reused_config_count += vpe_priv->vpe_desc_writer.reuse_num_config_dec; +#endif } +#ifdef VPE_REGISTER_PROFILE + vpe_log("Total Registers Accessed: % d\n", vpe_priv->config_writer.register_count); + vpe_log("Total Config Descriptors: % d\n", vpe_priv->config_writer.total_config_count); + vpe_log("Total Re-used Config Descriptors: % d\n", vpe_priv->config_writer.reused_config_count); +#endif if ((status == VPE_STATUS_OK) && (vpe_priv->collaboration_mode == true)) { status = builder->build_collaborate_sync_cmd(vpe_priv, &curr_bufs); if (status != VPE_STATUS_OK) {