Perform dependent to independent throttle status translation for
vangogh.
---
 .../gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c  | 41 +++++++++++++++++--
 1 file changed, 37 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
index 77f532a49e37..6e3cfb4bda1d 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
@@ -251,6 +251,37 @@ static int vangogh_tables_init(struct smu_context *smu)
        return -ENOMEM;
 }
 
+static uint32_t vangogh_get_indep_throttler_status(
+                                       unsigned long dep_throttler_status)
+{
+       unsigned long indep_throttler_status = 0;
+
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_SPL, &indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_SPL, &dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_FPPT, &indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_FPPT, &dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_SPPT, &indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_SPPT, &dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_SPPT_APU, 
&indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_SPPT_APU, 
&dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_THM_CORE, 
&indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_THM_CORE, 
&dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_THM_GFX, 
&indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_THM_GFX, 
&dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_THM_SOC, 
&indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_THM_SOC, 
&dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_TDC_VDD, 
&indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_TDC_VDD, 
&dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_TDC_SOC, 
&indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_TDC_SOC, 
&dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_TDC_GFX, 
&indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_TDC_GFX, 
&dep_throttler_status));
+       __assign_bit(INDEP_THROTTLER_STATUS_BIT_TDC_CVIP, 
&indep_throttler_status,
+                 test_bit(THROTTLER_STATUS_BIT_TDC_CVIP, 
&dep_throttler_status));
+
+       return (uint32_t)indep_throttler_status;
+}
+
 static int vangogh_get_legacy_smu_metrics_data(struct smu_context *smu,
                                       MetricsMember_t member,
                                       uint32_t *value)
@@ -304,7 +335,7 @@ static int vangogh_get_legacy_smu_metrics_data(struct 
smu_context *smu,
                SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
                break;
        case METRICS_THROTTLER_STATUS:
-               *value = metrics->ThrottlerStatus;
+               *value = 
vangogh_get_indep_throttler_status(metrics->ThrottlerStatus);
                break;
        case METRICS_VOLTAGE_VDDGFX:
                *value = metrics->Voltage[2];
@@ -379,7 +410,7 @@ static int vangogh_get_smu_metrics_data(struct smu_context 
*smu,
                SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
                break;
        case METRICS_THROTTLER_STATUS:
-               *value = metrics->Current.ThrottlerStatus;
+               *value = 
vangogh_get_indep_throttler_status(metrics->Current.ThrottlerStatus);
                break;
        case METRICS_VOLTAGE_VDDGFX:
                *value = metrics->Current.Voltage[2];
@@ -1673,7 +1704,8 @@ static ssize_t vangogh_get_legacy_gpu_metrics(struct 
smu_context *smu,
                sizeof(uint16_t) * 4);
        gpu_metrics->current_l3clk[0] = metrics.L3Frequency[0];
 
-       gpu_metrics->throttle_status = metrics.ThrottlerStatus;
+       gpu_metrics->throttle_status =
+                       
vangogh_get_indep_throttler_status(metrics.ThrottlerStatus);
 
        gpu_metrics->system_clock_counter = ktime_get_boottime_ns();
 
@@ -1734,7 +1766,8 @@ static ssize_t vangogh_get_gpu_metrics(struct smu_context 
*smu,
                sizeof(uint16_t) * 4);
        gpu_metrics->current_l3clk[0] = metrics.Current.L3Frequency[0];
 
-       gpu_metrics->throttle_status = metrics.Current.ThrottlerStatus;
+       gpu_metrics->throttle_status =
+                       
vangogh_get_indep_throttler_status(metrics.Current.ThrottlerStatus);
 
        gpu_metrics->system_clock_counter = ktime_get_boottime_ns();
 
-- 
2.17.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to