[PATCH 5/6] drm/amd/pm: Add vangogh throttler translation

Graham Sider Graham.Sider at amd.com
Thu May 20 14:29:29 UTC 2021


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



More information about the amd-gfx mailing list