the energy accumulator becomes valid again after an unsupported
firmware range. add gpu metrics gates for:

- SMU 13.0.10: 80.93.0
- SMU 13.0.7: 82.98.0
- SMU 14.0.2: 102.72.0

Signed-off-by: Kevin Wang <[email protected]>
---
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 6 ++++--
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 3 ++-
 drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 7 +++++--
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
index e868bfe1f0e1..6eb829d0edb0 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
@@ -2093,9 +2093,11 @@ static ssize_t smu_v13_0_0_get_gpu_metrics(struct 
smu_context *smu,
        gpu_metrics->average_socket_power = metrics->AverageSocketPower;
 
        if ((mp1_ver == IP_VERSION(13, 0, 0) &&
-            (smu->smc_fw_version <= 0x004e1e00 || smu->smc_fw_version >= 
0x004e8600)) ||
+            (smu->smc_fw_version <= 0x004e1e00 ||
+             smu->smc_fw_version >= 0x004e8600)) ||
            (mp1_ver == IP_VERSION(13, 0, 10) &&
-            smu->smc_fw_version <= 0x00500800))
+            (smu->smc_fw_version <= 0x00500800 ||
+             smu->smc_fw_version >= 0x00505d00)))
                gpu_metrics->energy_accumulator = metrics->EnergyAccumulator;
 
        if (metrics->AverageGfxActivity <= SMU_13_0_0_BUSY_THRESHOLD)
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
index b0399dd49639..64590965fe56 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
@@ -2097,7 +2097,8 @@ static ssize_t smu_v13_0_7_get_gpu_metrics(struct 
smu_context *smu,
                                               metrics->Vcn1ActivityPercentage);
 
        gpu_metrics->average_socket_power = metrics->AverageSocketPower;
-       if (smu->smc_fw_version <= 0x00521400)
+       if (smu->smc_fw_version <= 0x00521400 ||
+           smu->smc_fw_version >= 0x00526200)
                gpu_metrics->energy_accumulator = metrics->EnergyAccumulator;
 
        if (metrics->AverageGfxActivity <= SMU_13_0_7_BUSY_THRESHOLD)
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
index d91bfa8998d4..20abf342a30c 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
@@ -2172,8 +2172,11 @@ static ssize_t smu_v14_0_2_get_gpu_metrics(struct 
smu_context *smu,
                                               metrics->Vcn1ActivityPercentage);
 
        gpu_metrics->average_socket_power = metrics->AverageSocketPower;
-       if (mp1_ver == IP_VERSION(14, 0, 3) && smu->smc_fw_version >= 
0x00685000)
-           gpu_metrics->energy_accumulator = metrics->EnergyAccumulator;
+       if ((mp1_ver == IP_VERSION(14, 0, 2) &&
+            smu->smc_fw_version >= 0x00664800) ||
+           (mp1_ver == IP_VERSION(14, 0, 3) &&
+            smu->smc_fw_version >= 0x00685000))
+               gpu_metrics->energy_accumulator = metrics->EnergyAccumulator;
 
        if (metrics->AverageGfxActivity <= SMU_14_0_2_BUSY_THRESHOLD)
                gpu_metrics->average_gfxclk_frequency = 
metrics->AverageGfxclkFrequencyPostDs;
-- 
2.55.0

Reply via email to