drm/amdgpu/pm: handle fan properly when card is powered down
Return an error if the user tried to check or set the fan parameters while the card is powered down (e.g., on a PX/HG system for example). This makes the fan consistent with the temperature stuff. Acked-by: Christian König <christian.koenig@amd.com> Reviewed-by: Rex Zhu <Rex.Zhu@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -991,6 +991,11 @@ static ssize_t amdgpu_hwmon_set_pwm1_enable(struct device *dev,
|
|||||||
int err;
|
int err;
|
||||||
int value;
|
int value;
|
||||||
|
|
||||||
|
/* Can't adjust fan when the card is off */
|
||||||
|
if ((adev->flags & AMD_IS_PX) &&
|
||||||
|
(adev->ddev->switch_power_state != DRM_SWITCH_POWER_ON))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (!adev->powerplay.pp_funcs->set_fan_control_mode)
|
if (!adev->powerplay.pp_funcs->set_fan_control_mode)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@@ -1025,6 +1030,11 @@ static ssize_t amdgpu_hwmon_set_pwm1(struct device *dev,
|
|||||||
int err;
|
int err;
|
||||||
u32 value;
|
u32 value;
|
||||||
|
|
||||||
|
/* Can't adjust fan when the card is off */
|
||||||
|
if ((adev->flags & AMD_IS_PX) &&
|
||||||
|
(adev->ddev->switch_power_state != DRM_SWITCH_POWER_ON))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
err = kstrtou32(buf, 10, &value);
|
err = kstrtou32(buf, 10, &value);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@@ -1048,6 +1058,11 @@ static ssize_t amdgpu_hwmon_get_pwm1(struct device *dev,
|
|||||||
int err;
|
int err;
|
||||||
u32 speed = 0;
|
u32 speed = 0;
|
||||||
|
|
||||||
|
/* Can't adjust fan when the card is off */
|
||||||
|
if ((adev->flags & AMD_IS_PX) &&
|
||||||
|
(adev->ddev->switch_power_state != DRM_SWITCH_POWER_ON))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (adev->powerplay.pp_funcs->get_fan_speed_percent) {
|
if (adev->powerplay.pp_funcs->get_fan_speed_percent) {
|
||||||
err = amdgpu_dpm_get_fan_speed_percent(adev, &speed);
|
err = amdgpu_dpm_get_fan_speed_percent(adev, &speed);
|
||||||
if (err)
|
if (err)
|
||||||
@@ -1067,6 +1082,11 @@ static ssize_t amdgpu_hwmon_get_fan1_input(struct device *dev,
|
|||||||
int err;
|
int err;
|
||||||
u32 speed = 0;
|
u32 speed = 0;
|
||||||
|
|
||||||
|
/* Can't adjust fan when the card is off */
|
||||||
|
if ((adev->flags & AMD_IS_PX) &&
|
||||||
|
(adev->ddev->switch_power_state != DRM_SWITCH_POWER_ON))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (adev->powerplay.pp_funcs->get_fan_speed_rpm) {
|
if (adev->powerplay.pp_funcs->get_fan_speed_rpm) {
|
||||||
err = amdgpu_dpm_get_fan_speed_rpm(adev, &speed);
|
err = amdgpu_dpm_get_fan_speed_rpm(adev, &speed);
|
||||||
if (err)
|
if (err)
|
||||||
|
|||||||
Reference in New Issue
Block a user