drm/amdgpu/swsmu: handle manual fan readback on SMU11
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 27 Aug 2020 04:12:38 +0000 (00:12 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 3 Sep 2020 18:46:55 +0000 (14:46 -0400)
Need to read back from registers for manual mode rather than
using the metrics table.

Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1164
Reviewed-by: Evan Quan <evan.quan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c

index f6d9b0db3e823eb7c90a1388c447919208007111..2ce6ad9c6609454734246e9653b3828d9cd18bce 100644 (file)
@@ -1123,9 +1123,14 @@ static int arcturus_get_fan_speed_rpm(struct smu_context *smu,
        if (!speed)
                return -EINVAL;
 
-       return arcturus_get_smu_metrics_data(smu,
-                                            METRICS_CURR_FANSPEED,
-                                            speed);
+       switch (smu_v11_0_get_fan_control_mode(smu)) {
+       case AMD_FAN_CTRL_AUTO:
+               return arcturus_get_smu_metrics_data(smu,
+                                                    METRICS_CURR_FANSPEED,
+                                                    speed);
+       default:
+               return smu_v11_0_get_fan_speed_rpm(smu, speed);
+       }
 }
 
 static int arcturus_get_fan_parameters(struct smu_context *smu)
index 87b5f9ff4021222655b96218f1078db8e01eaa92..42d53cca73600a0880e62abd885667ba9927e7fd 100644 (file)
@@ -1362,9 +1362,14 @@ static int navi10_get_fan_speed_rpm(struct smu_context *smu,
        if (!speed)
                return -EINVAL;
 
-       return navi10_get_smu_metrics_data(smu,
-                                          METRICS_CURR_FANSPEED,
-                                          speed);
+       switch (smu_v11_0_get_fan_control_mode(smu)) {
+       case AMD_FAN_CTRL_AUTO:
+               return navi10_get_smu_metrics_data(smu,
+                                                  METRICS_CURR_FANSPEED,
+                                                  speed);
+       default:
+               return smu_v11_0_get_fan_speed_rpm(smu, speed);
+       }
 }
 
 static int navi10_get_fan_parameters(struct smu_context *smu)
index 863372436b984eba555b55f10f78d1e14e16cd1b..5c22611d5878b5a215078a10820a99a0f2bdd1a3 100644 (file)
@@ -1169,9 +1169,14 @@ static int sienna_cichlid_get_fan_speed_rpm(struct smu_context *smu,
        if (!speed)
                return -EINVAL;
 
-       return sienna_cichlid_get_smu_metrics_data(smu,
-                                                  METRICS_CURR_FANSPEED,
-                                                  speed);
+       switch (smu_v11_0_get_fan_control_mode(smu)) {
+       case AMD_FAN_CTRL_AUTO:
+               return sienna_cichlid_get_smu_metrics_data(smu,
+                                                          METRICS_CURR_FANSPEED,
+                                                          speed);
+       default:
+               return smu_v11_0_get_fan_speed_rpm(smu, speed);
+       }
 }
 
 static int sienna_cichlid_get_fan_parameters(struct smu_context *smu)