]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/pm: remove invalid gpu_metrics.energy_accumulator on smu v13.0.x
authorYang Wang <kevinyang.wang@amd.com>
Thu, 26 Feb 2026 03:51:06 +0000 (22:51 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 4 Mar 2026 18:14:59 +0000 (13:14 -0500)
v1:
The metrics->EnergyAccumulator field has been deprecated on newer pmfw.

v2:
add smu 13.0.0/13.0.7/13.0.10 support.

Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 8de9edb35976fa56565dc8fbb5d1310e8e10187c)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c

index e030f1e186cb7f3680c1f7e345b0f149681d3482..b32c053950c90dde4f42d2efc64299f1054419c5 100644 (file)
@@ -2034,6 +2034,7 @@ static ssize_t smu_v13_0_0_get_gpu_metrics(struct smu_context *smu,
                        smu, SMU_DRIVER_TABLE_GPU_METRICS);
        SmuMetricsExternal_t metrics_ext;
        SmuMetrics_t *metrics = &metrics_ext.SmuMetrics;
+       uint32_t mp1_ver = amdgpu_ip_version(smu->adev, MP1_HWIP, 0);
        int ret = 0;
 
        ret = smu_cmn_get_metrics_table(smu,
@@ -2058,7 +2059,12 @@ static ssize_t smu_v13_0_0_get_gpu_metrics(struct smu_context *smu,
                                               metrics->Vcn1ActivityPercentage);
 
        gpu_metrics->average_socket_power = metrics->AverageSocketPower;
-       gpu_metrics->energy_accumulator = metrics->EnergyAccumulator;
+
+       if ((mp1_ver == IP_VERSION(13, 0, 0) && smu->smc_fw_version <= 0x004e1e00) ||
+           (mp1_ver == IP_VERSION(13, 0, 10) && smu->smc_fw_version <= 0x00500800))
+               gpu_metrics->energy_accumulator = metrics->EnergyAccumulator;
+       else
+               gpu_metrics->energy_accumulator = UINT_MAX;
 
        if (metrics->AverageGfxActivity <= SMU_13_0_0_BUSY_THRESHOLD)
                gpu_metrics->average_gfxclk_frequency = metrics->AverageGfxclkFrequencyPostDs;
index af0482c9caa75bf74aa8551e8b2f70c3dda0fbf6..f08cfa510a8a9e9c95ab314fb800ed1fff76e322 100644 (file)
@@ -2065,7 +2065,8 @@ static ssize_t smu_v13_0_7_get_gpu_metrics(struct smu_context *smu,
                                               metrics->Vcn1ActivityPercentage);
 
        gpu_metrics->average_socket_power = metrics->AverageSocketPower;
-       gpu_metrics->energy_accumulator = metrics->EnergyAccumulator;
+       gpu_metrics->energy_accumulator = smu->smc_fw_version <= 0x00521400 ?
+               metrics->EnergyAccumulator : UINT_MAX;
 
        if (metrics->AverageGfxActivity <= SMU_13_0_7_BUSY_THRESHOLD)
                gpu_metrics->average_gfxclk_frequency = metrics->AverageGfxclkFrequencyPostDs;