]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/amd/display: Refactor SMU tracing
authorDillon Varone <Dillon.Varone@amd.com>
Wed, 10 Sep 2025 14:55:48 +0000 (10:55 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 23 Sep 2025 14:31:51 +0000 (10:31 -0400)
[WHY&HOW]
Add new tracing and performance measurements for SMU messaging.

Reviewed-by: Alvin Lee <alvin.lee2@amd.com>
Signed-off-by: Dillon Varone <Dillon.Varone@amd.com>
Signed-off-by: Ivan Lipski <ivan.lipski@amd.com>
Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_services.c
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.c
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr_smu_msg.c
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn401/dcn401_clk_mgr_smu_msg.c
drivers/gpu/drm/amd/display/dc/dm_services.h

index 132de4071efd4f4adfc825e5f268b0af943fd83b..8550d5e8b75304d58916dc57c005931c3ba56c6f 100644 (file)
@@ -53,11 +53,11 @@ void dm_perf_trace_timestamp(const char *func_name, unsigned int line, struct dc
                                    func_name, line);
 }
 
-void dm_trace_smu_msg(uint32_t msg_id, uint32_t param_in, struct dc_context *ctx)
+void dm_trace_smu_enter(uint32_t msg_id, uint32_t param_in, unsigned int delay, struct dc_context *ctx)
 {
 }
 
-void dm_trace_smu_delay(uint32_t delay, struct dc_context *ctx)
+void dm_trace_smu_exit(bool success, uint32_t response, struct dc_context *ctx)
 {
 }
 
index 3253115a153dd9475c871198a8ed50f43a6b6fa5..827bc2431d5d854e9750673db1bec15f3343ed68 100644 (file)
@@ -69,7 +69,7 @@ static uint32_t dcn30_smu_wait_for_response(struct clk_mgr_internal *clk_mgr, un
 
        /* handle DALSMC_Result_CmdRejectedBusy? */
 
-       TRACE_SMU_DELAY(delay_us * (initial_max_retries - max_retries), clk_mgr->base.ctx);
+       TRACE_SMU_MSG_DELAY(0, 0, delay_us * (initial_max_retries - max_retries), clk_mgr->base.ctx);
 
        return reg;
 }
index cf2d35363e8b979f3fca1e2eb4122d0eee38f3b4..5d80fdf63ffcdfc794fbdb188f346bec5f36a8c7 100644 (file)
@@ -63,7 +63,8 @@ static uint32_t dcn32_smu_wait_for_response(struct clk_mgr_internal *clk_mgr, un
                        udelay(delay_us);
        } while (max_retries--);
 
-       TRACE_SMU_DELAY(delay_us * (initial_max_retries - max_retries), clk_mgr->base.ctx);
+       TRACE_SMU_MSG_DELAY(0, 0, delay_us * (initial_max_retries - max_retries), clk_mgr->base.ctx);
+
 
        return reg;
 }
@@ -120,7 +121,7 @@ static uint32_t dcn32_smu_wait_for_response_delay(struct clk_mgr_internal *clk_m
                *total_delay_us += delay_us;
        } while (max_retries--);
 
-       TRACE_SMU_DELAY(*total_delay_us, clk_mgr->base.ctx);
+       TRACE_SMU_MSG_DELAY(0, 0, *total_delay_us, clk_mgr->base.ctx);
 
        return reg;
 }
index 347a0d66d653f80f8dcfa528084859991659f49c..3a263840893e3c179dbb4ed0dcf5ef9ac0b64c80 100644 (file)
@@ -57,6 +57,8 @@ static bool dcn401_smu_send_msg_with_param(struct clk_mgr_internal *clk_mgr, uin
        /* Wait for response register to be ready */
        dcn401_smu_wait_for_response(clk_mgr, 10, 200000);
 
+       TRACE_SMU_MSG_ENTER(msg_id, param_in, clk_mgr->base.ctx);
+
        /* Clear response register */
        REG_WRITE(DAL_RESP_REG, 0);
 
@@ -71,9 +73,11 @@ static bool dcn401_smu_send_msg_with_param(struct clk_mgr_internal *clk_mgr, uin
                if (param_out)
                        *param_out = REG_READ(DAL_ARG_REG);
 
+               TRACE_SMU_MSG_EXIT(true, param_out ? *param_out : 0, clk_mgr->base.ctx);
                return true;
        }
 
+       TRACE_SMU_MSG_EXIT(false, 0, clk_mgr->base.ctx);
        return false;
 }
 
@@ -102,8 +106,6 @@ static uint32_t dcn401_smu_wait_for_response_delay(struct clk_mgr_internal *clk_
                *total_delay_us += delay_us;
        } while (max_retries--);
 
-       TRACE_SMU_DELAY(*total_delay_us, clk_mgr->base.ctx);
-
        return reg;
 }
 
@@ -115,6 +117,8 @@ static bool dcn401_smu_send_msg_with_param_delay(struct clk_mgr_internal *clk_mg
        /* Wait for response register to be ready */
        dcn401_smu_wait_for_response_delay(clk_mgr, 10, 200000, &delay1_us);
 
+       TRACE_SMU_MSG_ENTER(msg_id, param_in, clk_mgr->base.ctx);
+
        /* Clear response register */
        REG_WRITE(DAL_RESP_REG, 0);
 
@@ -124,18 +128,18 @@ static bool dcn401_smu_send_msg_with_param_delay(struct clk_mgr_internal *clk_mg
        /* Trigger the message transaction by writing the message ID */
        REG_WRITE(DAL_MSG_REG, msg_id);
 
-       TRACE_SMU_MSG(msg_id, param_in, clk_mgr->base.ctx);
-
        /* Wait for response */
        if (dcn401_smu_wait_for_response_delay(clk_mgr, 10, 200000, &delay2_us) == DALSMC_Result_OK) {
                if (param_out)
                        *param_out = REG_READ(DAL_ARG_REG);
 
                *total_delay_us = delay1_us + delay2_us;
+               TRACE_SMU_MSG_EXIT(true, param_out ? *param_out : 0, clk_mgr->base.ctx);
                return true;
        }
 
        *total_delay_us = delay1_us + 2000000;
+       TRACE_SMU_MSG_EXIT(false, 0, clk_mgr->base.ctx);
        return false;
 }
 
index 7b398d4f44398bf2f99b467885ed0c19da3c705b..fbbf9c757b3c362360ca6bfedb0d81c142591058 100644 (file)
@@ -277,12 +277,13 @@ void dm_perf_trace_timestamp(const char *func_name, unsigned int line, struct dc
 /*
  * SMU message tracing
  */
-void dm_trace_smu_msg(uint32_t msg_id, uint32_t param_in, struct dc_context *ctx);
-void dm_trace_smu_delay(uint32_t delay, struct dc_context *ctx);
-
-#define TRACE_SMU_MSG(msg_id, param_in, ctx)   dm_trace_smu_msg(msg_id, param_in, ctx)
-#define TRACE_SMU_DELAY(response_delay, ctx)   dm_trace_smu_delay(response_delay, ctx)
+void dm_trace_smu_enter(uint32_t msg_id, uint32_t param_in, unsigned int delay, struct dc_context *ctx);
+void dm_trace_smu_exit(bool success, uint32_t response, struct dc_context *ctx);
 
+#define TRACE_SMU_MSG_DELAY(msg_id, param_in, delay, ctx)      dm_trace_smu_enter(msg_id, param_in, delay, ctx)
+#define TRACE_SMU_MSG(msg_id, param_in, ctx)   dm_trace_smu_enter(msg_id, param_in, 0, ctx)
+#define TRACE_SMU_MSG_ENTER(msg_id, param_in, ctx)     dm_trace_smu_enter(msg_id, param_in, 0, ctx)
+#define TRACE_SMU_MSG_EXIT(success, response, ctx)     dm_trace_smu_exit(success, response, ctx)
 
 /*
  * DMUB Interfaces