drm/amdgpu/swsmu: add smu11 helper to get manual fan speed (v2)
authorAlex Deucher <alexander.deucher@amd.com>
Tue, 25 Aug 2020 18:35:50 +0000 (14:35 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 3 Sep 2020 18:46:55 +0000 (14:46 -0400)
Will be used to fetch the fan speeds when manual fan mode is
set.

v2: squash in a Coverity fix from Colin Ian King

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

index 8307e2b790daf9e1becf1d28a701594bbe203e83..1f9575a4dfe7c9e1d8951ba824f141b30f6d4a8b 100644 (file)
@@ -203,6 +203,9 @@ smu_v11_0_set_fan_control_mode(struct smu_context *smu,
 int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,
                                       uint32_t speed);
 
+int smu_v11_0_get_fan_speed_rpm(struct smu_context *smu,
+                               uint32_t *speed);
+
 int smu_v11_0_set_xgmi_pstate(struct smu_context *smu,
                                     uint32_t pstate);
 
index 5abc06f7c9f3a1dec9c9816c048b93c35f77a5cd..f5aeb0b5cf977874178f8a2e6d30490da9e90350 100644 (file)
@@ -1153,6 +1153,27 @@ int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,
        return ret;
 }
 
+int smu_v11_0_get_fan_speed_rpm(struct smu_context *smu,
+                               uint32_t *speed)
+{
+       struct amdgpu_device *adev = smu->adev;
+       uint32_t tach_period, crystal_clock_freq;
+       uint64_t tmp64;
+
+       tach_period = REG_GET_FIELD(RREG32_SOC15(THM, 0, mmCG_TACH_CTRL),
+                                   CG_TACH_CTRL, TARGET_PERIOD);
+       if (!tach_period)
+               return -EINVAL;
+
+       crystal_clock_freq = amdgpu_asic_get_xclk(adev);
+
+       tmp64 = (uint64_t)crystal_clock_freq * 60 * 10000;
+       do_div(tmp64, (tach_period * 8));
+       *speed = (uint32_t)tmp64;
+
+       return 0;
+}
+
 int smu_v11_0_set_xgmi_pstate(struct smu_context *smu,
                                     uint32_t pstate)
 {