All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable
@ 2020-12-01 17:44 Alex Deucher
  2020-12-01 17:44 ` [PATCH 2/5] drm/amdgpu/powerplay/psm: return an error in power state init Alex Deucher
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Alex Deucher @ 2020-12-01 17:44 UTC (permalink / raw)
  To: amd-gfx; +Cc: Alex Deucher

Rather than just silently dropping it.  Also fixes a set but
unused variable warning.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
index 7eada3098ffc..1b47f94e0331 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
@@ -3141,6 +3141,8 @@ static int vega10_get_pp_table_entry(struct pp_hwmgr *hwmgr,
 
 	result = vega10_get_powerplay_table_entry(hwmgr, entry_index, state,
 			vega10_get_pp_table_entry_callback_func);
+	if (result)
+		return result;
 
 	/*
 	 * This is the earliest time we have all the dependency table
-- 
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/5] drm/amdgpu/powerplay/psm: return an error in power state init
  2020-12-01 17:44 [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable Alex Deucher
@ 2020-12-01 17:44 ` Alex Deucher
  2020-12-02  2:09   ` Quan, Evan
  2020-12-01 17:44 ` [PATCH 3/5] drm/amdgpu/swsmu/vangogh: simplify sensor handling Alex Deucher
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Alex Deucher @ 2020-12-01 17:44 UTC (permalink / raw)
  To: amd-gfx; +Cc: Alex Deucher

Rather than just silently dropping it.  Also fixes a set but
unused variable warning.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c
index 31a32a79cfc2..67d7da0b6fed 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c
@@ -74,6 +74,13 @@ int psm_init_power_state_table(struct pp_hwmgr *hwmgr)
 
 	for (i = 0; i < table_entries; i++) {
 		result = hwmgr->hwmgr_func->get_pp_table_entry(hwmgr, i, state);
+		if (result) {
+			kfree(hwmgr->request_ps);
+			kfree(hwmgr->ps);
+			hwmgr->request_ps = NULL;
+			hwmgr->ps = NULL;
+			return -EINVAL;
+		}
 
 		if (state->classification.flags & PP_StateClassificationFlag_Boot) {
 			hwmgr->boot_ps = state;
-- 
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/5] drm/amdgpu/swsmu/vangogh: simplify sensor handling
  2020-12-01 17:44 [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable Alex Deucher
  2020-12-01 17:44 ` [PATCH 2/5] drm/amdgpu/powerplay/psm: return an error in power state init Alex Deucher
@ 2020-12-01 17:44 ` Alex Deucher
  2020-12-02  2:09   ` Quan, Evan
  2020-12-01 17:44 ` [PATCH 4/5] drm/amdgpu/swsmu/vangogh: use metrics table for voltages Alex Deucher
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Alex Deucher @ 2020-12-01 17:44 UTC (permalink / raw)
  To: amd-gfx; +Cc: Alex Deucher

Just query the metrics table directly rather than going through
an extra level of functions.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 .../gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c  | 114 +++---------------
 1 file changed, 20 insertions(+), 94 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 56704181c5a9..1645509cdab8 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
@@ -396,95 +396,6 @@ static bool vangogh_is_dpm_running(struct smu_context *smu)
 	return !!(feature_enabled & SMC_DPM_FEATURE);
 }
 
-static int vangogh_get_current_activity_percent(struct smu_context *smu,
-					       enum amd_pp_sensors sensor,
-					       uint32_t *value)
-{
-	int ret = 0;
-
-	if (!value)
-		return -EINVAL;
-
-	switch (sensor) {
-	case AMDGPU_PP_SENSOR_GPU_LOAD:
-		ret = vangogh_get_smu_metrics_data(smu,
-						  METRICS_AVERAGE_GFXACTIVITY,
-						  value);
-		if (ret)
-			return ret;
-		break;
-	default:
-		dev_err(smu->adev->dev, "Invalid sensor for retrieving clock activity\n");
-		return -EINVAL;
-	}
-
-	return 0;
-}
-
-static int vangogh_get_gpu_power(struct smu_context *smu, uint32_t *value)
-{
-	if (!value)
-		return -EINVAL;
-
-	return vangogh_get_smu_metrics_data(smu,
-					   METRICS_AVERAGE_SOCKETPOWER,
-					   value);
-}
-
-static int vangogh_thermal_get_temperature(struct smu_context *smu,
-					     enum amd_pp_sensors sensor,
-					     uint32_t *value)
-{
-	int ret = 0;
-
-	if (!value)
-		return -EINVAL;
-
-	switch (sensor) {
-	case AMDGPU_PP_SENSOR_HOTSPOT_TEMP:
-		ret = vangogh_get_smu_metrics_data(smu,
-						  METRICS_TEMPERATURE_HOTSPOT,
-						  value);
-		break;
-	case AMDGPU_PP_SENSOR_EDGE_TEMP:
-		ret = vangogh_get_smu_metrics_data(smu,
-						  METRICS_TEMPERATURE_EDGE,
-						  value);
-		break;
-	default:
-		dev_err(smu->adev->dev, "Invalid sensor for retrieving temp\n");
-		return -EINVAL;
-	}
-
-	return ret;
-}
-
-static int vangogh_get_current_clk_freq_by_table(struct smu_context *smu,
-				       enum smu_clk_type clk_type,
-				       uint32_t *value)
-{
-	MetricsMember_t member_type;
-
-	switch (clk_type) {
-	case SMU_GFXCLK:
-		member_type = METRICS_AVERAGE_GFXCLK;
-		break;
-	case SMU_MCLK:
-	case SMU_UCLK:
-		member_type = METRICS_AVERAGE_UCLK;
-		break;
-	case SMU_SOCCLK:
-		member_type = METRICS_AVERAGE_SOCCLK;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	return vangogh_get_smu_metrics_data(smu,
-					   member_type,
-					   value);
-}
-
 static int vangogh_print_fine_grain_clk(struct smu_context *smu,
 			enum smu_clk_type clk_type, char *buf)
 {
@@ -526,25 +437,40 @@ static int vangogh_read_sensor(struct smu_context *smu,
 	mutex_lock(&smu->sensor_lock);
 	switch (sensor) {
 	case AMDGPU_PP_SENSOR_GPU_LOAD:
-		ret = vangogh_get_current_activity_percent(smu, sensor, (uint32_t *)data);
+		ret = vangogh_get_smu_metrics_data(smu,
+						   METRICS_AVERAGE_GFXACTIVITY,
+						   (uint32_t *)data);
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_GPU_POWER:
-		ret = vangogh_get_gpu_power(smu, (uint32_t *)data);
+		ret = vangogh_get_smu_metrics_data(smu,
+						   METRICS_AVERAGE_SOCKETPOWER,
+						   (uint32_t *)data);
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_EDGE_TEMP:
+		ret = vangogh_get_smu_metrics_data(smu,
+						   METRICS_TEMPERATURE_EDGE,
+						   (uint32_t *)data);
+		*size = 4;
+		break;
 	case AMDGPU_PP_SENSOR_HOTSPOT_TEMP:
-		ret = vangogh_thermal_get_temperature(smu, sensor, (uint32_t *)data);
+		ret = vangogh_get_smu_metrics_data(smu,
+						   METRICS_TEMPERATURE_HOTSPOT,
+						   (uint32_t *)data);
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_GFX_MCLK:
-		ret = vangogh_get_current_clk_freq_by_table(smu, SMU_UCLK, (uint32_t *)data);
+		ret = vangogh_get_smu_metrics_data(smu,
+						   METRICS_AVERAGE_UCLK,
+						   (uint32_t *)data);
 		*(uint32_t *)data *= 100;
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_GFX_SCLK:
-		ret = vangogh_get_current_clk_freq_by_table(smu, SMU_GFXCLK, (uint32_t *)data);
+		ret = vangogh_get_smu_metrics_data(smu,
+						    METRICS_AVERAGE_GFXCLK,
+						    (uint32_t *)data);
 		*(uint32_t *)data *= 100;
 		*size = 4;
 		break;
-- 
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/5] drm/amdgpu/swsmu/vangogh: use metrics table for voltages
  2020-12-01 17:44 [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable Alex Deucher
  2020-12-01 17:44 ` [PATCH 2/5] drm/amdgpu/powerplay/psm: return an error in power state init Alex Deucher
  2020-12-01 17:44 ` [PATCH 3/5] drm/amdgpu/swsmu/vangogh: simplify sensor handling Alex Deucher
@ 2020-12-01 17:44 ` Alex Deucher
  2020-12-02  2:13   ` Quan, Evan
  2020-12-01 17:44 ` [PATCH 5/5] drm/amdgpu/swsmu/renoir: simplify sensor handling Alex Deucher
  2020-12-02  2:09 ` [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable Quan, Evan
  4 siblings, 1 reply; 10+ messages in thread
From: Alex Deucher @ 2020-12-01 17:44 UTC (permalink / raw)
  To: amd-gfx; +Cc: Alex Deucher

Fixes voltage reading for vddgfx and adds support for vddsoc.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 .../gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c  | 20 ++++++++++++++++---
 1 file changed, 17 insertions(+), 3 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 1645509cdab8..3bc7395c5fb7 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
@@ -265,6 +265,12 @@ static int vangogh_get_smu_metrics_data(struct smu_context *smu,
 	case METRICS_THROTTLER_STATUS:
 		*value = metrics->ThrottlerStatus;
 		break;
+	case METRICS_TEMPERATURE_VRGFX:
+		*value = metrics->Voltage[2];
+		break;
+	case METRICS_TEMPERATURE_VRSOC:
+		*value = metrics->Voltage[1];
+		break;
 	default:
 		*value = UINT_MAX;
 		break;
@@ -469,13 +475,21 @@ static int vangogh_read_sensor(struct smu_context *smu,
 		break;
 	case AMDGPU_PP_SENSOR_GFX_SCLK:
 		ret = vangogh_get_smu_metrics_data(smu,
-						    METRICS_AVERAGE_GFXCLK,
-						    (uint32_t *)data);
+						   METRICS_AVERAGE_GFXCLK,
+						   (uint32_t *)data);
 		*(uint32_t *)data *= 100;
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_VDDGFX:
-		ret = smu_v11_0_get_gfx_vdd(smu, (uint32_t *)data);
+		ret = vangogh_get_smu_metrics_data(smu,
+						   METRICS_TEMPERATURE_VRGFX,
+						   (uint32_t *)data);
+		*size = 4;
+		break;
+	case AMDGPU_PP_SENSOR_VDDNB:
+		ret = vangogh_get_smu_metrics_data(smu,
+						   METRICS_TEMPERATURE_VRSOC,
+						   (uint32_t *)data);
 		*size = 4;
 		break;
 	default:
-- 
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/5] drm/amdgpu/swsmu/renoir: simplify sensor handling
  2020-12-01 17:44 [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable Alex Deucher
                   ` (2 preceding siblings ...)
  2020-12-01 17:44 ` [PATCH 4/5] drm/amdgpu/swsmu/vangogh: use metrics table for voltages Alex Deucher
@ 2020-12-01 17:44 ` Alex Deucher
  2020-12-02  2:14   ` Quan, Evan
  2020-12-02  2:09 ` [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable Quan, Evan
  4 siblings, 1 reply; 10+ messages in thread
From: Alex Deucher @ 2020-12-01 17:44 UTC (permalink / raw)
  To: amd-gfx; +Cc: Alex Deucher

Just query the metrics table directly rather than going through
an extra level of functions.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 .../gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c   | 205 ++++++++----------
 1 file changed, 93 insertions(+), 112 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c
index d3641a8ed99c..37e65c0b6136 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c
@@ -492,28 +492,6 @@ static int renoir_dpm_set_jpeg_enable(struct smu_context *smu, bool enable)
 	return ret;
 }
 
-static int renoir_get_current_clk_freq_by_table(struct smu_context *smu,
-				       enum smu_clk_type clk_type,
-				       uint32_t *value)
-{
-	int ret = 0, clk_id = 0;
-	SmuMetrics_t metrics;
-
-	ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-	if (ret)
-		return ret;
-
-	clk_id = smu_cmn_to_asic_specific_index(smu,
-						CMN2ASIC_MAPPING_CLK,
-						clk_type);
-	if (clk_id < 0)
-		return clk_id;
-
-	*value = metrics.ClockFrequency[clk_id];
-
-	return ret;
-}
-
 static int renoir_force_dpm_limit_value(struct smu_context *smu, bool highest)
 {
 	int ret = 0, i = 0;
@@ -574,88 +552,6 @@ static int renoir_unforce_dpm_levels(struct smu_context *smu) {
 	return ret;
 }
 
-static int renoir_get_gpu_temperature(struct smu_context *smu, uint32_t *value)
-{
-	int ret = 0;
-	SmuMetrics_t metrics;
-
-	if (!value)
-		return -EINVAL;
-
-	ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-	if (ret)
-		return ret;
-
-	*value = (metrics.GfxTemperature / 100) *
-		SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
-
-	return 0;
-}
-
-static int renoir_get_current_activity_percent(struct smu_context *smu,
-					       enum amd_pp_sensors sensor,
-					       uint32_t *value)
-{
-	int ret = 0;
-	SmuMetrics_t metrics;
-
-	if (!value)
-		return -EINVAL;
-
-	ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-	if (ret)
-		return ret;
-
-	switch (sensor) {
-	case AMDGPU_PP_SENSOR_GPU_LOAD:
-		*value = metrics.AverageGfxActivity / 100;
-		break;
-	default:
-		dev_err(smu->adev->dev, "Invalid sensor for retrieving clock activity\n");
-		return -EINVAL;
-	}
-
-	return 0;
-}
-
-static int renoir_get_vddc(struct smu_context *smu, uint32_t *value,
-			   unsigned int index)
-{
-	int ret = 0;
-	SmuMetrics_t metrics;
-
-	if (index >= 2)
-		return -EINVAL;
-
-	if (!value)
-		return -EINVAL;
-
-	ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-	if (ret)
-		return ret;
-
-	*value = metrics.Voltage[index];
-
-	return 0;
-}
-
-static int renoir_get_power(struct smu_context *smu, uint32_t *value)
-{
-	int ret = 0;
-	SmuMetrics_t metrics;
-
-	if (!value)
-		return -EINVAL;
-
-	ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-	if (ret)
-		return ret;
-
-	*value = metrics.CurrentSocketPower << 8;
-
-	return 0;
-}
-
 /*
  * This interface get dpm clock table for dc
  */
@@ -1011,6 +907,71 @@ static int renoir_get_power_profile_mode(struct smu_context *smu,
 	return size;
 }
 
+static int renoir_get_smu_metrics_data(struct smu_context *smu,
+				       MetricsMember_t member,
+				       uint32_t *value)
+{
+	struct smu_table_context *smu_table = &smu->smu_table;
+
+	SmuMetrics_t *metrics = (SmuMetrics_t *)smu_table->metrics_table;
+	int ret = 0;
+
+	mutex_lock(&smu->metrics_lock);
+
+	ret = smu_cmn_get_metrics_table_locked(smu,
+					       NULL,
+					       false);
+	if (ret) {
+		mutex_unlock(&smu->metrics_lock);
+		return ret;
+	}
+
+	switch (member) {
+	case METRICS_AVERAGE_GFXCLK:
+		*value = metrics->ClockFrequency[CLOCK_GFXCLK];
+		break;
+	case METRICS_AVERAGE_SOCCLK:
+		*value = metrics->ClockFrequency[CLOCK_SOCCLK];
+		break;
+	case METRICS_AVERAGE_UCLK:
+		*value = metrics->ClockFrequency[CLOCK_FCLK];
+		break;
+	case METRICS_AVERAGE_GFXACTIVITY:
+		*value = metrics->AverageGfxActivity / 100;
+		break;
+	case METRICS_AVERAGE_VCNACTIVITY:
+		*value = metrics->AverageUvdActivity / 100;
+		break;
+	case METRICS_AVERAGE_SOCKETPOWER:
+		*value = metrics->CurrentSocketPower << 8;
+		break;
+	case METRICS_TEMPERATURE_EDGE:
+		*value = (metrics->GfxTemperature / 100) *
+			SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
+		break;
+	case METRICS_TEMPERATURE_HOTSPOT:
+		*value = (metrics->SocTemperature / 100) *
+			SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
+		break;
+	case METRICS_THROTTLER_STATUS:
+		*value = metrics->ThrottlerStatus;
+		break;
+	case METRICS_TEMPERATURE_VRGFX:
+		*value = metrics->Voltage[0];
+		break;
+	case METRICS_TEMPERATURE_VRSOC:
+		*value = metrics->Voltage[1];
+		break;
+	default:
+		*value = UINT_MAX;
+		break;
+	}
+
+	mutex_unlock(&smu->metrics_lock);
+
+	return ret;
+}
+
 static int renoir_read_sensor(struct smu_context *smu,
 				 enum amd_pp_sensors sensor,
 				 void *data, uint32_t *size)
@@ -1023,33 +984,53 @@ static int renoir_read_sensor(struct smu_context *smu,
 	mutex_lock(&smu->sensor_lock);
 	switch (sensor) {
 	case AMDGPU_PP_SENSOR_GPU_LOAD:
-		ret = renoir_get_current_activity_percent(smu, sensor, (uint32_t *)data);
+		ret = renoir_get_smu_metrics_data(smu,
+						  METRICS_AVERAGE_GFXACTIVITY,
+						  (uint32_t *)data);
+		*size = 4;
+		break;
+	case AMDGPU_PP_SENSOR_EDGE_TEMP:
+		ret = renoir_get_smu_metrics_data(smu,
+						  METRICS_TEMPERATURE_EDGE,
+						  (uint32_t *)data);
 		*size = 4;
 		break;
-	case AMDGPU_PP_SENSOR_GPU_TEMP:
-		ret = renoir_get_gpu_temperature(smu, (uint32_t *)data);
+	case AMDGPU_PP_SENSOR_HOTSPOT_TEMP:
+		ret = renoir_get_smu_metrics_data(smu,
+						  METRICS_TEMPERATURE_HOTSPOT,
+						  (uint32_t *)data);
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_GFX_MCLK:
-		ret = renoir_get_current_clk_freq_by_table(smu, SMU_UCLK, (uint32_t *)data);
+		ret = renoir_get_smu_metrics_data(smu,
+						  METRICS_AVERAGE_UCLK,
+						  (uint32_t *)data);
 		*(uint32_t *)data *= 100;
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_GFX_SCLK:
-		ret = renoir_get_current_clk_freq_by_table(smu, SMU_GFXCLK, (uint32_t *)data);
+		ret = renoir_get_smu_metrics_data(smu,
+						  METRICS_AVERAGE_GFXCLK,
+						  (uint32_t *)data);
 		*(uint32_t *)data *= 100;
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_VDDGFX:
-		ret = renoir_get_vddc(smu, (uint32_t *)data, 0);
+		ret = renoir_get_smu_metrics_data(smu,
+						  METRICS_TEMPERATURE_VRGFX,
+						  (uint32_t *)data);
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_VDDNB:
-		ret = renoir_get_vddc(smu, (uint32_t *)data, 1);
+		ret = renoir_get_smu_metrics_data(smu,
+						  METRICS_TEMPERATURE_VRSOC,
+						  (uint32_t *)data);
 		*size = 4;
 		break;
 	case AMDGPU_PP_SENSOR_GPU_POWER:
-		ret = renoir_get_power(smu, (uint32_t *)data);
+		ret = renoir_get_smu_metrics_data(smu,
+						  METRICS_AVERAGE_SOCKETPOWER,
+						  (uint32_t *)data);
 		*size = 4;
 		break;
 	default:
-- 
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* RE: [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable
  2020-12-01 17:44 [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable Alex Deucher
                   ` (3 preceding siblings ...)
  2020-12-01 17:44 ` [PATCH 5/5] drm/amdgpu/swsmu/renoir: simplify sensor handling Alex Deucher
@ 2020-12-02  2:09 ` Quan, Evan
  4 siblings, 0 replies; 10+ messages in thread
From: Quan, Evan @ 2020-12-02  2:09 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx; +Cc: Deucher, Alexander

[AMD Official Use Only - Internal Distribution Only]

Reviewed-by: Evan Quan <evan.quan@amd.com>

-----Original Message-----
From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Alex Deucher
Sent: Wednesday, December 2, 2020 1:44 AM
To: amd-gfx@lists.freedesktop.org
Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
Subject: [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable

Rather than just silently dropping it.  Also fixes a set but unused variable warning.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
index 7eada3098ffc..1b47f94e0331 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
@@ -3141,6 +3141,8 @@ static int vega10_get_pp_table_entry(struct pp_hwmgr *hwmgr,

 result = vega10_get_powerplay_table_entry(hwmgr, entry_index, state,
 vega10_get_pp_table_entry_callback_func);
+if (result)
+return result;

 /*
  * This is the earliest time we have all the dependency table
--
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=04%7C01%7Cevan.quan%40amd.com%7Ce9c8e4747b3c469a054108d89620be2e%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637424414658644669%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=O9VmlrFffcLWVvvmfhk%2FcLPKE0r%2FDmLcUR4VHtDa%2FnA%3D&amp;reserved=0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* RE: [PATCH 2/5] drm/amdgpu/powerplay/psm: return an error in power state init
  2020-12-01 17:44 ` [PATCH 2/5] drm/amdgpu/powerplay/psm: return an error in power state init Alex Deucher
@ 2020-12-02  2:09   ` Quan, Evan
  0 siblings, 0 replies; 10+ messages in thread
From: Quan, Evan @ 2020-12-02  2:09 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx; +Cc: Deucher, Alexander

[AMD Official Use Only - Internal Distribution Only]

Reviewed-by: Evan Quan <evan.quan@amd.com>

-----Original Message-----
From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Alex Deucher
Sent: Wednesday, December 2, 2020 1:44 AM
To: amd-gfx@lists.freedesktop.org
Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
Subject: [PATCH 2/5] drm/amdgpu/powerplay/psm: return an error in power state init

Rather than just silently dropping it.  Also fixes a set but unused variable warning.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c
index 31a32a79cfc2..67d7da0b6fed 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c
@@ -74,6 +74,13 @@ int psm_init_power_state_table(struct pp_hwmgr *hwmgr)

 for (i = 0; i < table_entries; i++) {
 result = hwmgr->hwmgr_func->get_pp_table_entry(hwmgr, i, state);
+if (result) {
+kfree(hwmgr->request_ps);
+kfree(hwmgr->ps);
+hwmgr->request_ps = NULL;
+hwmgr->ps = NULL;
+return -EINVAL;
+}

 if (state->classification.flags & PP_StateClassificationFlag_Boot) {
 hwmgr->boot_ps = state;
--
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=04%7C01%7Cevan.quan%40amd.com%7C6b3c9c6f67554f33eeef08d89620bf47%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637424414687587645%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=0P4V5TAf4ipNfI1NpMlKBNn%2BG9UQxE258Phfzso5XzY%3D&amp;reserved=0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* RE: [PATCH 3/5] drm/amdgpu/swsmu/vangogh: simplify sensor handling
  2020-12-01 17:44 ` [PATCH 3/5] drm/amdgpu/swsmu/vangogh: simplify sensor handling Alex Deucher
@ 2020-12-02  2:09   ` Quan, Evan
  0 siblings, 0 replies; 10+ messages in thread
From: Quan, Evan @ 2020-12-02  2:09 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx; +Cc: Deucher, Alexander

[AMD Official Use Only - Internal Distribution Only]

Reviewed-by: Evan Quan <evan.quan@amd.com>

-----Original Message-----
From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Alex Deucher
Sent: Wednesday, December 2, 2020 1:44 AM
To: amd-gfx@lists.freedesktop.org
Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
Subject: [PATCH 3/5] drm/amdgpu/swsmu/vangogh: simplify sensor handling

Just query the metrics table directly rather than going through an extra level of functions.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 .../gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c  | 114 +++---------------
 1 file changed, 20 insertions(+), 94 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 56704181c5a9..1645509cdab8 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
@@ -396,95 +396,6 @@ static bool vangogh_is_dpm_running(struct smu_context *smu)
 return !!(feature_enabled & SMC_DPM_FEATURE);  }

-static int vangogh_get_current_activity_percent(struct smu_context *smu,
-       enum amd_pp_sensors sensor,
-       uint32_t *value)
-{
-int ret = 0;
-
-if (!value)
-return -EINVAL;
-
-switch (sensor) {
-case AMDGPU_PP_SENSOR_GPU_LOAD:
-ret = vangogh_get_smu_metrics_data(smu,
-  METRICS_AVERAGE_GFXACTIVITY,
-  value);
-if (ret)
-return ret;
-break;
-default:
-dev_err(smu->adev->dev, "Invalid sensor for retrieving clock activity\n");
-return -EINVAL;
-}
-
-return 0;
-}
-
-static int vangogh_get_gpu_power(struct smu_context *smu, uint32_t *value) -{
-if (!value)
-return -EINVAL;
-
-return vangogh_get_smu_metrics_data(smu,
-   METRICS_AVERAGE_SOCKETPOWER,
-   value);
-}
-
-static int vangogh_thermal_get_temperature(struct smu_context *smu,
-     enum amd_pp_sensors sensor,
-     uint32_t *value)
-{
-int ret = 0;
-
-if (!value)
-return -EINVAL;
-
-switch (sensor) {
-case AMDGPU_PP_SENSOR_HOTSPOT_TEMP:
-ret = vangogh_get_smu_metrics_data(smu,
-  METRICS_TEMPERATURE_HOTSPOT,
-  value);
-break;
-case AMDGPU_PP_SENSOR_EDGE_TEMP:
-ret = vangogh_get_smu_metrics_data(smu,
-  METRICS_TEMPERATURE_EDGE,
-  value);
-break;
-default:
-dev_err(smu->adev->dev, "Invalid sensor for retrieving temp\n");
-return -EINVAL;
-}
-
-return ret;
-}
-
-static int vangogh_get_current_clk_freq_by_table(struct smu_context *smu,
-       enum smu_clk_type clk_type,
-       uint32_t *value)
-{
-MetricsMember_t member_type;
-
-switch (clk_type) {
-case SMU_GFXCLK:
-member_type = METRICS_AVERAGE_GFXCLK;
-break;
-case SMU_MCLK:
-case SMU_UCLK:
-member_type = METRICS_AVERAGE_UCLK;
-break;
-case SMU_SOCCLK:
-member_type = METRICS_AVERAGE_SOCCLK;
-break;
-default:
-return -EINVAL;
-}
-
-return vangogh_get_smu_metrics_data(smu,
-   member_type,
-   value);
-}
-
 static int vangogh_print_fine_grain_clk(struct smu_context *smu,
 enum smu_clk_type clk_type, char *buf)  { @@ -526,25 +437,40 @@ static int vangogh_read_sensor(struct smu_context *smu,
 mutex_lock(&smu->sensor_lock);
 switch (sensor) {
 case AMDGPU_PP_SENSOR_GPU_LOAD:
-ret = vangogh_get_current_activity_percent(smu, sensor, (uint32_t *)data);
+ret = vangogh_get_smu_metrics_data(smu,
+   METRICS_AVERAGE_GFXACTIVITY,
+   (uint32_t *)data);
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_GPU_POWER:
-ret = vangogh_get_gpu_power(smu, (uint32_t *)data);
+ret = vangogh_get_smu_metrics_data(smu,
+   METRICS_AVERAGE_SOCKETPOWER,
+   (uint32_t *)data);
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_EDGE_TEMP:
+ret = vangogh_get_smu_metrics_data(smu,
+   METRICS_TEMPERATURE_EDGE,
+   (uint32_t *)data);
+*size = 4;
+break;
 case AMDGPU_PP_SENSOR_HOTSPOT_TEMP:
-ret = vangogh_thermal_get_temperature(smu, sensor, (uint32_t *)data);
+ret = vangogh_get_smu_metrics_data(smu,
+   METRICS_TEMPERATURE_HOTSPOT,
+   (uint32_t *)data);
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_GFX_MCLK:
-ret = vangogh_get_current_clk_freq_by_table(smu, SMU_UCLK, (uint32_t *)data);
+ret = vangogh_get_smu_metrics_data(smu,
+   METRICS_AVERAGE_UCLK,
+   (uint32_t *)data);
 *(uint32_t *)data *= 100;
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_GFX_SCLK:
-ret = vangogh_get_current_clk_freq_by_table(smu, SMU_GFXCLK, (uint32_t *)data);
+ret = vangogh_get_smu_metrics_data(smu,
+    METRICS_AVERAGE_GFXCLK,
+    (uint32_t *)data);
 *(uint32_t *)data *= 100;
 *size = 4;
 break;
--
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=04%7C01%7Cevan.quan%40amd.com%7C5f115dcc956a4de6e39b08d89620c005%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637424414689469422%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=fCDZnzOSHhcDw4Um2KZ%2ByK%2B8CInYTywSZBLSgYwa8YQ%3D&amp;reserved=0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* RE: [PATCH 4/5] drm/amdgpu/swsmu/vangogh: use metrics table for voltages
  2020-12-01 17:44 ` [PATCH 4/5] drm/amdgpu/swsmu/vangogh: use metrics table for voltages Alex Deucher
@ 2020-12-02  2:13   ` Quan, Evan
  0 siblings, 0 replies; 10+ messages in thread
From: Quan, Evan @ 2020-12-02  2:13 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx; +Cc: Deucher, Alexander

[AMD Official Use Only - Internal Distribution Only]

-----Original Message-----
From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Alex Deucher
Sent: Wednesday, December 2, 2020 1:44 AM
To: amd-gfx@lists.freedesktop.org
Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
Subject: [PATCH 4/5] drm/amdgpu/swsmu/vangogh: use metrics table for voltages

Fixes voltage reading for vddgfx and adds support for vddsoc.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 .../gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c  | 20 ++++++++++++++++---
 1 file changed, 17 insertions(+), 3 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 1645509cdab8..3bc7395c5fb7 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
@@ -265,6 +265,12 @@ static int vangogh_get_smu_metrics_data(struct smu_context *smu,
 case METRICS_THROTTLER_STATUS:
 *value = metrics->ThrottlerStatus;
 break;
+case METRICS_TEMPERATURE_VRGFX:
[Quan, Evan] "METRICS_TEMPERATURE_VRGFX" is not proper to use here. A new macro like "METRICS_VDDGFX" is recommended.
+*value = metrics->Voltage[2];
+break;
+case METRICS_TEMPERATURE_VRSOC:
[Quan, Evan] A new macro like "METRICS_VDDNB" or "METRICS_VDDSOC" is recommended.
+*value = metrics->Voltage[1];
+break;
 default:
 *value = UINT_MAX;
 break;
@@ -469,13 +475,21 @@ static int vangogh_read_sensor(struct smu_context *smu,
 break;
 case AMDGPU_PP_SENSOR_GFX_SCLK:
 ret = vangogh_get_smu_metrics_data(smu,
-    METRICS_AVERAGE_GFXCLK,
-    (uint32_t *)data);
+   METRICS_AVERAGE_GFXCLK,
+   (uint32_t *)data);
 *(uint32_t *)data *= 100;
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_VDDGFX:
-ret = smu_v11_0_get_gfx_vdd(smu, (uint32_t *)data);
+ret = vangogh_get_smu_metrics_data(smu,
+   METRICS_TEMPERATURE_VRGFX,
+   (uint32_t *)data);
+*size = 4;
+break;
+case AMDGPU_PP_SENSOR_VDDNB:
+ret = vangogh_get_smu_metrics_data(smu,
+   METRICS_TEMPERATURE_VRSOC,
+   (uint32_t *)data);
 *size = 4;
 break;
 default:
--
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=04%7C01%7Cevan.quan%40amd.com%7C3084bf7338b747344a0e08d89620c0d8%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637424414710951019%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=2af8UhjkqHLS3gSRl0HEb87RGLPPHfwSoqKdO%2Bu2xHU%3D&amp;reserved=0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* RE: [PATCH 5/5] drm/amdgpu/swsmu/renoir: simplify sensor handling
  2020-12-01 17:44 ` [PATCH 5/5] drm/amdgpu/swsmu/renoir: simplify sensor handling Alex Deucher
@ 2020-12-02  2:14   ` Quan, Evan
  0 siblings, 0 replies; 10+ messages in thread
From: Quan, Evan @ 2020-12-02  2:14 UTC (permalink / raw)
  To: Alex Deucher, amd-gfx; +Cc: Deucher, Alexander

[AMD Official Use Only - Internal Distribution Only]

-----Original Message-----
From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Alex Deucher
Sent: Wednesday, December 2, 2020 1:44 AM
To: amd-gfx@lists.freedesktop.org
Cc: Deucher, Alexander <Alexander.Deucher@amd.com>
Subject: [PATCH 5/5] drm/amdgpu/swsmu/renoir: simplify sensor handling

Just query the metrics table directly rather than going through
an extra level of functions.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 .../gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c   | 205 ++++++++----------
 1 file changed, 93 insertions(+), 112 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c
index d3641a8ed99c..37e65c0b6136 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu12/renoir_ppt.c
@@ -492,28 +492,6 @@ static int renoir_dpm_set_jpeg_enable(struct smu_context *smu, bool enable)
 return ret;
 }

-static int renoir_get_current_clk_freq_by_table(struct smu_context *smu,
-       enum smu_clk_type clk_type,
-       uint32_t *value)
-{
-int ret = 0, clk_id = 0;
-SmuMetrics_t metrics;
-
-ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-if (ret)
-return ret;
-
-clk_id = smu_cmn_to_asic_specific_index(smu,
-CMN2ASIC_MAPPING_CLK,
-clk_type);
-if (clk_id < 0)
-return clk_id;
-
-*value = metrics.ClockFrequency[clk_id];
-
-return ret;
-}
-
 static int renoir_force_dpm_limit_value(struct smu_context *smu, bool highest)
 {
 int ret = 0, i = 0;
@@ -574,88 +552,6 @@ static int renoir_unforce_dpm_levels(struct smu_context *smu) {
 return ret;
 }

-static int renoir_get_gpu_temperature(struct smu_context *smu, uint32_t *value)
-{
-int ret = 0;
-SmuMetrics_t metrics;
-
-if (!value)
-return -EINVAL;
-
-ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-if (ret)
-return ret;
-
-*value = (metrics.GfxTemperature / 100) *
-SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
-
-return 0;
-}
-
-static int renoir_get_current_activity_percent(struct smu_context *smu,
-       enum amd_pp_sensors sensor,
-       uint32_t *value)
-{
-int ret = 0;
-SmuMetrics_t metrics;
-
-if (!value)
-return -EINVAL;
-
-ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-if (ret)
-return ret;
-
-switch (sensor) {
-case AMDGPU_PP_SENSOR_GPU_LOAD:
-*value = metrics.AverageGfxActivity / 100;
-break;
-default:
-dev_err(smu->adev->dev, "Invalid sensor for retrieving clock activity\n");
-return -EINVAL;
-}
-
-return 0;
-}
-
-static int renoir_get_vddc(struct smu_context *smu, uint32_t *value,
-   unsigned int index)
-{
-int ret = 0;
-SmuMetrics_t metrics;
-
-if (index >= 2)
-return -EINVAL;
-
-if (!value)
-return -EINVAL;
-
-ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-if (ret)
-return ret;
-
-*value = metrics.Voltage[index];
-
-return 0;
-}
-
-static int renoir_get_power(struct smu_context *smu, uint32_t *value)
-{
-int ret = 0;
-SmuMetrics_t metrics;
-
-if (!value)
-return -EINVAL;
-
-ret = smu_cmn_get_metrics_table(smu, &metrics, false);
-if (ret)
-return ret;
-
-*value = metrics.CurrentSocketPower << 8;
-
-return 0;
-}
-
 /*
  * This interface get dpm clock table for dc
  */
@@ -1011,6 +907,71 @@ static int renoir_get_power_profile_mode(struct smu_context *smu,
 return size;
 }

+static int renoir_get_smu_metrics_data(struct smu_context *smu,
+       MetricsMember_t member,
+       uint32_t *value)
+{
+struct smu_table_context *smu_table = &smu->smu_table;
+
+SmuMetrics_t *metrics = (SmuMetrics_t *)smu_table->metrics_table;
+int ret = 0;
+
+mutex_lock(&smu->metrics_lock);
+
+ret = smu_cmn_get_metrics_table_locked(smu,
+       NULL,
+       false);
+if (ret) {
+mutex_unlock(&smu->metrics_lock);
+return ret;
+}
+
+switch (member) {
+case METRICS_AVERAGE_GFXCLK:
+*value = metrics->ClockFrequency[CLOCK_GFXCLK];
+break;
+case METRICS_AVERAGE_SOCCLK:
+*value = metrics->ClockFrequency[CLOCK_SOCCLK];
+break;
+case METRICS_AVERAGE_UCLK:
+*value = metrics->ClockFrequency[CLOCK_FCLK];
+break;
+case METRICS_AVERAGE_GFXACTIVITY:
+*value = metrics->AverageGfxActivity / 100;
+break;
+case METRICS_AVERAGE_VCNACTIVITY:
+*value = metrics->AverageUvdActivity / 100;
+break;
+case METRICS_AVERAGE_SOCKETPOWER:
+*value = metrics->CurrentSocketPower << 8;
+break;
+case METRICS_TEMPERATURE_EDGE:
+*value = (metrics->GfxTemperature / 100) *
+SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
+break;
+case METRICS_TEMPERATURE_HOTSPOT:
+*value = (metrics->SocTemperature / 100) *
+SMU_TEMPERATURE_UNITS_PER_CENTIGRADES;
+break;
+case METRICS_THROTTLER_STATUS:
+*value = metrics->ThrottlerStatus;
+break;
+case METRICS_TEMPERATURE_VRGFX:
+*value = metrics->Voltage[0];
+break;
+case METRICS_TEMPERATURE_VRSOC:
[Quan, Evan] same as patch4. New macros like "METRICS_VDDGFX" , "METRICS_VDDSOC/NB" are recommended.
+*value = metrics->Voltage[1];
+break;
+default:
+*value = UINT_MAX;
+break;
+}
+
+mutex_unlock(&smu->metrics_lock);
+
+return ret;
+}
+
 static int renoir_read_sensor(struct smu_context *smu,
  enum amd_pp_sensors sensor,
  void *data, uint32_t *size)
@@ -1023,33 +984,53 @@ static int renoir_read_sensor(struct smu_context *smu,
 mutex_lock(&smu->sensor_lock);
 switch (sensor) {
 case AMDGPU_PP_SENSOR_GPU_LOAD:
-ret = renoir_get_current_activity_percent(smu, sensor, (uint32_t *)data);
+ret = renoir_get_smu_metrics_data(smu,
+  METRICS_AVERAGE_GFXACTIVITY,
+  (uint32_t *)data);
+*size = 4;
+break;
+case AMDGPU_PP_SENSOR_EDGE_TEMP:
+ret = renoir_get_smu_metrics_data(smu,
+  METRICS_TEMPERATURE_EDGE,
+  (uint32_t *)data);
 *size = 4;
 break;
-case AMDGPU_PP_SENSOR_GPU_TEMP:
-ret = renoir_get_gpu_temperature(smu, (uint32_t *)data);
+case AMDGPU_PP_SENSOR_HOTSPOT_TEMP:
+ret = renoir_get_smu_metrics_data(smu,
+  METRICS_TEMPERATURE_HOTSPOT,
+  (uint32_t *)data);
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_GFX_MCLK:
-ret = renoir_get_current_clk_freq_by_table(smu, SMU_UCLK, (uint32_t *)data);
+ret = renoir_get_smu_metrics_data(smu,
+  METRICS_AVERAGE_UCLK,
+  (uint32_t *)data);
 *(uint32_t *)data *= 100;
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_GFX_SCLK:
-ret = renoir_get_current_clk_freq_by_table(smu, SMU_GFXCLK, (uint32_t *)data);
+ret = renoir_get_smu_metrics_data(smu,
+  METRICS_AVERAGE_GFXCLK,
+  (uint32_t *)data);
 *(uint32_t *)data *= 100;
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_VDDGFX:
-ret = renoir_get_vddc(smu, (uint32_t *)data, 0);
+ret = renoir_get_smu_metrics_data(smu,
+  METRICS_TEMPERATURE_VRGFX,
+  (uint32_t *)data);
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_VDDNB:
-ret = renoir_get_vddc(smu, (uint32_t *)data, 1);
+ret = renoir_get_smu_metrics_data(smu,
+  METRICS_TEMPERATURE_VRSOC,
+  (uint32_t *)data);
 *size = 4;
 break;
 case AMDGPU_PP_SENSOR_GPU_POWER:
-ret = renoir_get_power(smu, (uint32_t *)data);
+ret = renoir_get_smu_metrics_data(smu,
+  METRICS_AVERAGE_SOCKETPOWER,
+  (uint32_t *)data);
 *size = 4;
 break;
 default:
--
2.25.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&amp;data=04%7C01%7Cevan.quan%40amd.com%7C0d39a3402b1f49d4a89408d89620c172%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637424414718000026%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=nXeNXvyiMx2A2ZZOZ9OSUc9lPfpMQ4Ppbr%2FQo5xRa%2FU%3D&amp;reserved=0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2020-12-02  2:14 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-01 17:44 [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable Alex Deucher
2020-12-01 17:44 ` [PATCH 2/5] drm/amdgpu/powerplay/psm: return an error in power state init Alex Deucher
2020-12-02  2:09   ` Quan, Evan
2020-12-01 17:44 ` [PATCH 3/5] drm/amdgpu/swsmu/vangogh: simplify sensor handling Alex Deucher
2020-12-02  2:09   ` Quan, Evan
2020-12-01 17:44 ` [PATCH 4/5] drm/amdgpu/swsmu/vangogh: use metrics table for voltages Alex Deucher
2020-12-02  2:13   ` Quan, Evan
2020-12-01 17:44 ` [PATCH 5/5] drm/amdgpu/swsmu/renoir: simplify sensor handling Alex Deucher
2020-12-02  2:14   ` Quan, Evan
2020-12-02  2:09 ` [PATCH 1/5] drm/amdgpu/powerplay/vega10: handle error in getting pptable Quan, Evan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.