Re: [PATCH 3/3] drm/amd/powerplay: support hwmon max/min fan speed setting on Vega20

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



-       percent = current_rpm * 100 / pp_table->FanMaximumRpm;
+       percent = (current_rpm * 100) /
+               hwmgr->thermal_controller.fanInfo.ulMaxRPM;


Better check hwmgr->thermal_controller.fanInfo.ulMaxRPM not equal to 0.


Best Regards

Rex


From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> on behalf of Evan Quan <evan.quan@xxxxxxx>
Sent: Wednesday, October 24, 2018 4:11 PM
To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx
Cc: Quan, Evan
Subject: [PATCH 3/3] drm/amd/powerplay: support hwmon max/min fan speed setting on Vega20
 
Added support for hwmon max/min fan speed setting on Vega20.

Change-Id: Ieab42c744d6c54f8b85a71be80f7c6832ae7352b
Signed-off-by: Evan Quan <evan.quan@xxxxxxx>
---
 .../drm/amd/powerplay/hwmgr/vega20_hwmgr.c    |  4 ++
 .../drm/amd/powerplay/hwmgr/vega20_thermal.c  | 56 ++++++++++++++++++-
 .../drm/amd/powerplay/hwmgr/vega20_thermal.h  |  4 ++
 3 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
index 57143d51e3ee..2513e6be3219 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
@@ -3539,6 +3539,10 @@ static const struct pp_hwmgr_func vega20_hwmgr_funcs = {
                 vega20_get_fan_control_mode,
         .set_fan_control_mode =
                 vega20_set_fan_control_mode,
+       .set_fan_speed_max_rpm =
+               vega20_fan_ctrl_set_fan_speed_max_rpm,
+       .set_fan_speed_min_rpm =
+               vega20_fan_ctrl_set_fan_speed_min_rpm,
         /* smu memory related */
         .notify_cac_buffer_info =
                 vega20_notify_cac_buffer_info,
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.c
index ede54e87e287..da9fd2168dcb 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.c
@@ -118,7 +118,6 @@ int vega20_fan_ctrl_get_fan_speed_percent(struct pp_hwmgr *hwmgr,
                 uint32_t *speed)
 {
         struct vega20_hwmgr *data = "" vega20_hwmgr *)(hwmgr->backend);
-       PPTable_t *pp_table = &(data->smc_state_table.pp_table);
         uint32_t current_rpm, percent = 0;
         int ret = 0;
 
@@ -126,7 +125,8 @@ int vega20_fan_ctrl_get_fan_speed_percent(struct pp_hwmgr *hwmgr,
         if (ret)
                 return ret;
 
-       percent = current_rpm * 100 / pp_table->FanMaximumRpm;
+       percent = (current_rpm * 100) /
+               hwmgr->thermal_controller.fanInfo.ulMaxRPM;
 
         *speed = percent > 100 ? 100 : percent;
 
@@ -208,6 +208,58 @@ int vega20_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr, uint32_t speed)
         return vega20_fan_ctrl_set_static_mode(hwmgr, FDO_PWM_MODE_STATIC_RPM);
 }
 
+int vega20_fan_ctrl_set_fan_speed_max_rpm(struct pp_hwmgr *hwmgr, uint32_t speed)
+{
+       struct vega20_hwmgr *data = "" vega20_hwmgr *)(hwmgr->backend);
+       struct vega20_od8_settings *od8_settings = &(data->od8_settings);
+       int ret = 0;
+
+       if ((od8_settings->overdrive8_capabilities & OD8_ACOUSTIC_LIMIT_SCLK) &&
+           (speed > od8_settings->od8_settings_array[OD8_SETTING_FAN_ACOUSTIC_LIMIT].max_value ||
+            speed < od8_settings->od8_settings_array[OD8_SETTING_FAN_ACOUSTIC_LIMIT].min_value))
+               return -EINVAL;
+
+       ret = smum_send_msg_to_smc_with_parameter(hwmgr,
+                       PPSMC_MSG_SetFanMaxRpm,
+                       speed);
+       PP_ASSERT_WITH_CODE(!ret,
+                       "Set FanMaxRpm Failed!",
+                       return ret);
+
+       hwmgr->thermal_controller.fanInfo.ulMinRPM =
+               (speed * hwmgr->thermal_controller.fanInfo.ulMinPWM) / 255;
+
+       return ret;
+}
+
+int vega20_fan_ctrl_set_fan_speed_min_rpm(struct pp_hwmgr *hwmgr, uint32_t speed)
+{
+       struct vega20_hwmgr *data = "" vega20_hwmgr *)(hwmgr->backend);
+       struct vega20_od8_settings *od8_settings = &(data->od8_settings);
+       int ret = 0;
+       uint32_t pwm = 0;
+
+       if ((od8_settings->overdrive8_capabilities & OD8_FAN_SPEED_MIN) &&
+           (speed > od8_settings->od8_settings_array[OD8_FAN_SPEED_MIN].max_value ||
+            speed < od8_settings->od8_settings_array[OD8_FAN_SPEED_MIN].min_value))
+               return -EINVAL;
+
+       if (speed > hwmgr->thermal_controller.fanInfo.ulMaxRPM)
+               return -EINVAL;
+
+       pwm = (speed * 255) / hwmgr->thermal_controller.fanInfo.ulMaxRPM;
+       ret = smum_send_msg_to_smc_with_parameter(hwmgr,
+                       PPSMC_MSG_SetFanMinPwm,
+                       pwm);
+       PP_ASSERT_WITH_CODE(!ret,
+                       "Set FanMinPwm Failed!",
+                       return ret);
+
+       hwmgr->thermal_controller.fanInfo.ulMinPWM = pwm;
+
+       return ret;
+}
+
 /**
 * Reads the remote temperature from the SIslands thermal controller.
 *
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.h b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.h
index 2d1769bbd24e..ddfc950e90ca 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.h
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_thermal.h
@@ -56,6 +56,10 @@ extern int vega20_fan_ctrl_get_fan_speed_rpm(struct pp_hwmgr *hwmgr,
                 uint32_t *speed);
 extern int vega20_fan_ctrl_set_fan_speed_rpm(struct pp_hwmgr *hwmgr,
                 uint32_t speed);
+extern int vega20_fan_ctrl_set_fan_speed_max_rpm(struct pp_hwmgr *hwmgr,
+               uint32_t speed);
+extern int vega20_fan_ctrl_set_fan_speed_min_rpm(struct pp_hwmgr *hwmgr,
+               uint32_t speed);
 extern int vega20_fan_ctrl_get_fan_speed_percent(struct pp_hwmgr *hwmgr,
                 uint32_t *speed);
 extern int vega20_fan_ctrl_set_fan_speed_percent(struct pp_hwmgr *hwmgr,
--
2.19.1

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

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

[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux