From 634fc7f144655efe6ec324b8c91da9aa352cb8db Mon Sep 17 00:00:00 2001 From: Alex Deucher <alexander.deucher@amd.com> Date: Wed, 27 Jan 2021 16:29:37 -0500 Subject: [PATCH] drm/amdgpu/pm/smu11: query hw for manual fan control if no setting has been specified yet. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> --- drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 11 ++++++++++- drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 11 ++++++++++- .../gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 11 ++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c index f0cc4de9ced50..ee7827c55626e 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c @@ -1098,7 +1098,16 @@ static int arcturus_get_fan_speed_percent(struct smu_context *smu, *speed = rpm * 100 / smu->fan_max_rpm; return ret; default: - *speed = smu->user_dpm_profile.fan_speed_percent; + if (smu->user_dpm_profile.fan_speed_percent) { + *speed = smu->user_dpm_profile.fan_speed_percent; + } else { + ret = arcturus_get_smu_metrics_data(smu, + METRICS_CURR_FANSPEED, + &rpm); + if (!ret && smu->fan_max_rpm) + *speed = rpm * 100 / smu->fan_max_rpm; + return ret; + } return 0; } } diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c index f7f78daffd275..943f870f1109e 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c @@ -1335,7 +1335,16 @@ static int navi10_get_fan_speed_percent(struct smu_context *smu, *speed = rpm * 100 / smu->fan_max_rpm; return ret; default: - *speed = smu->user_dpm_profile.fan_speed_percent; + if (smu->user_dpm_profile.fan_speed_percent) { + *speed = smu->user_dpm_profile.fan_speed_percent; + } else { + ret = navi10_get_smu_metrics_data(smu, + METRICS_CURR_FANSPEED, + &rpm); + if (!ret && smu->fan_max_rpm) + *speed = rpm * 100 / smu->fan_max_rpm; + return ret; + } return 0; } } diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c index e3ba40d9f83f9..5447ecfe59845 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c @@ -1255,7 +1255,16 @@ static int sienna_cichlid_get_fan_speed_percent(struct smu_context *smu, *speed = rpm * 100 / smu->fan_max_rpm; return ret; default: - *speed = smu->user_dpm_profile.fan_speed_percent; + if (smu->user_dpm_profile.fan_speed_percent) { + *speed = smu->user_dpm_profile.fan_speed_percent; + } else { + ret = sienna_cichlid_get_smu_metrics_data(smu, + METRICS_CURR_FANSPEED, + &rpm); + if (!ret && smu->fan_max_rpm) + *speed = rpm * 100 / smu->fan_max_rpm; + return ret; + } return 0; } } -- GitLab