[AMD Official Use Only - AMD Internal Distribution Only] Reviewed-by: Asad Kamal <[email protected]>
Thanks & Regards Asad -----Original Message----- From: Lazar, Lijo <[email protected]> Sent: Friday, December 12, 2025 2:01 PM To: [email protected] Cc: Zhang, Hawking <[email protected]>; Deucher, Alexander <[email protected]>; Kamal, Asad <[email protected]> Subject: [PATCH] drm/amd/pm: Return right size for gpuboard metrics Change to switch style checks and return the correct size for gpu board metrics. Signed-off-by: Lijo Lazar <[email protected]> --- .../drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c index 91a17db7912b..44d5f134a87a 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c @@ -693,30 +693,21 @@ static ssize_t smu_v13_0_12_get_temp_metrics(struct smu_context *smu, u32 idx, sensors; ssize_t size; - if (type == SMU_TEMP_METRIC_BASEBOARD) { - /* Initialize base board temperature metrics */ - table_id = SMU_DRIVER_TABLE_BASEBOARD_TEMP_METRICS; - baseboard_temp_metrics = - (struct amdgpu_baseboard_temp_metrics_v1_0 *) - smu_driver_table_ptr(smu, table_id); - size = sizeof(*baseboard_temp_metrics); - } else { - table_id = SMU_DRIVER_TABLE_GPUBOARD_TEMP_METRICS; - gpuboard_temp_metrics = - (struct amdgpu_gpuboard_temp_metrics_v1_0 *) - smu_driver_table_ptr(smu, table_id); - size = sizeof(*baseboard_temp_metrics); - } - ret = smu_v13_0_12_get_system_metrics_table(smu); if (ret) return ret; sys_table = &tables[SMU_TABLE_PMFW_SYSTEM_METRICS]; metrics = (SystemMetricsTable_t *)sys_table->cache.buffer; - smu_driver_table_update_cache_time(smu, table_id); - if (type == SMU_TEMP_METRIC_GPUBOARD) { + switch (type) { + case SMU_TEMP_METRIC_GPUBOARD: + table_id = SMU_DRIVER_TABLE_GPUBOARD_TEMP_METRICS; + gpuboard_temp_metrics = + (struct amdgpu_gpuboard_temp_metrics_v1_0 *) + smu_driver_table_ptr(smu, table_id); + size = sizeof(*gpuboard_temp_metrics); + gpuboard_temp_metrics->accumulation_counter = metrics->AccumulationCounter; gpuboard_temp_metrics->label_version = metrics->LabelVersion; gpuboard_temp_metrics->node_id = metrics->NodeIdentifier; @@ -743,7 +734,15 @@ static ssize_t smu_v13_0_12_get_temp_metrics(struct smu_context *smu, idx++; } } - } else if (type == SMU_TEMP_METRIC_BASEBOARD) { + memcpy(table, gpuboard_temp_metrics, size); + break; + case SMU_TEMP_METRIC_BASEBOARD: + table_id = SMU_DRIVER_TABLE_BASEBOARD_TEMP_METRICS; + baseboard_temp_metrics = + (struct amdgpu_baseboard_temp_metrics_v1_0 *) + smu_driver_table_ptr(smu, table_id); + size = sizeof(*baseboard_temp_metrics); + baseboard_temp_metrics->accumulation_counter = metrics->AccumulationCounter; baseboard_temp_metrics->label_version = metrics->LabelVersion; baseboard_temp_metrics->node_id = metrics->NodeIdentifier; @@ -758,12 +757,12 @@ static ssize_t smu_v13_0_12_get_temp_metrics(struct smu_context *smu, idx++; } } - } - - if (type == SMU_TEMP_METRIC_BASEBOARD) memcpy(table, baseboard_temp_metrics, size); - else - memcpy(table, gpuboard_temp_metrics, size); + break; + default: + return -EINVAL; + } + smu_driver_table_update_cache_time(smu, table_id); return size; } -- 2.49.0
