OSDN Git Service

drm/amdgpu/swsmu/navi1x: simplify sensor handling
authorAlex Deucher <alexander.deucher@amd.com>
Tue, 1 Dec 2020 18:24:28 +0000 (13:24 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 2 Dec 2020 22:37:16 +0000 (17:37 -0500)
Just query the metrics table directly rather than going through
an extra level of functions.

Reviewed-by: Evan Quan <evan.quan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c

index 59bd7cd..51e8312 100644 (file)
@@ -1302,44 +1302,6 @@ static int navi10_display_config_changed(struct smu_context *smu)
        return ret;
 }
 
-static int navi10_get_gpu_power(struct smu_context *smu, uint32_t *value)
-{
-       if (!value)
-               return -EINVAL;
-
-       return navi10_get_smu_metrics_data(smu,
-                                          METRICS_AVERAGE_SOCKETPOWER,
-                                          value);
-}
-
-static int navi10_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 = navi10_get_smu_metrics_data(smu,
-                                                 METRICS_AVERAGE_GFXACTIVITY,
-                                                 value);
-               break;
-       case AMDGPU_PP_SENSOR_MEM_LOAD:
-               ret = navi10_get_smu_metrics_data(smu,
-                                                 METRICS_AVERAGE_MEMACTIVITY,
-                                                 value);
-               break;
-       default:
-               dev_err(smu->adev->dev, "Invalid sensor for retrieving clock activity\n");
-               return -EINVAL;
-       }
-
-       return ret;
-}
-
 static bool navi10_is_dpm_running(struct smu_context *smu)
 {
        int ret = 0;
@@ -1652,39 +1614,6 @@ static int navi10_set_watermarks_table(struct smu_context *smu,
        return 0;
 }
 
-static int navi10_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 = navi10_get_smu_metrics_data(smu,
-                                                 METRICS_TEMPERATURE_HOTSPOT,
-                                                 value);
-               break;
-       case AMDGPU_PP_SENSOR_EDGE_TEMP:
-               ret = navi10_get_smu_metrics_data(smu,
-                                                 METRICS_TEMPERATURE_EDGE,
-                                                 value);
-               break;
-       case AMDGPU_PP_SENSOR_MEM_TEMP:
-               ret = navi10_get_smu_metrics_data(smu,
-                                                 METRICS_TEMPERATURE_MEM,
-                                                 value);
-               break;
-       default:
-               dev_err(smu->adev->dev, "Invalid sensor for retrieving temp\n");
-               return -EINVAL;
-       }
-
-       return ret;
-}
-
 static int navi10_read_sensor(struct smu_context *smu,
                                 enum amd_pp_sensors sensor,
                                 void *data, uint32_t *size)
@@ -1703,18 +1632,39 @@ static int navi10_read_sensor(struct smu_context *smu,
                *size = 4;
                break;
        case AMDGPU_PP_SENSOR_MEM_LOAD:
+               ret = navi10_get_smu_metrics_data(smu,
+                                                 METRICS_AVERAGE_MEMACTIVITY,
+                                                 (uint32_t *)data);
+               *size = 4;
+               break;
        case AMDGPU_PP_SENSOR_GPU_LOAD:
-               ret = navi10_get_current_activity_percent(smu, sensor, (uint32_t *)data);
+               ret = navi10_get_smu_metrics_data(smu,
+                                                 METRICS_AVERAGE_GFXACTIVITY,
+                                                 (uint32_t *)data);
                *size = 4;
                break;
        case AMDGPU_PP_SENSOR_GPU_POWER:
-               ret = navi10_get_gpu_power(smu, (uint32_t *)data);
+               ret = navi10_get_smu_metrics_data(smu,
+                                                 METRICS_AVERAGE_SOCKETPOWER,
+                                                 (uint32_t *)data);
                *size = 4;
                break;
        case AMDGPU_PP_SENSOR_HOTSPOT_TEMP:
+               ret = navi10_get_smu_metrics_data(smu,
+                                                 METRICS_TEMPERATURE_HOTSPOT,
+                                                 (uint32_t *)data);
+               *size = 4;
+               break;
        case AMDGPU_PP_SENSOR_EDGE_TEMP:
+               ret = navi10_get_smu_metrics_data(smu,
+                                                 METRICS_TEMPERATURE_EDGE,
+                                                 (uint32_t *)data);
+               *size = 4;
+               break;
        case AMDGPU_PP_SENSOR_MEM_TEMP:
-               ret = navi10_thermal_get_temperature(smu, sensor, (uint32_t *)data);
+               ret = navi10_get_smu_metrics_data(smu,
+                                                 METRICS_TEMPERATURE_MEM,
+                                                 (uint32_t *)data);
                *size = 4;
                break;
        case AMDGPU_PP_SENSOR_GFX_MCLK: