drm/amd/amdgpu: expose fan rpm though hwmon
Only for cards that are supported by powerplay. Signed-off-by: Grazvydas Ignotas <notasas@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:

committed by
Alex Deucher

parent
72a16a9d59
commit
81c1514bf8
@@ -317,6 +317,11 @@ struct amdgpu_dpm_funcs {
|
|||||||
(adev)->powerplay.pp_funcs->get_fan_speed_percent((adev)->powerplay.pp_handle, (s)) : \
|
(adev)->powerplay.pp_funcs->get_fan_speed_percent((adev)->powerplay.pp_handle, (s)) : \
|
||||||
(adev)->pm.funcs->get_fan_speed_percent((adev), (s)))
|
(adev)->pm.funcs->get_fan_speed_percent((adev), (s)))
|
||||||
|
|
||||||
|
#define amdgpu_dpm_get_fan_speed_rpm(adev, s) \
|
||||||
|
((adev)->pp_enabled ? \
|
||||||
|
(adev)->powerplay.pp_funcs->get_fan_speed_rpm((adev)->powerplay.pp_handle, (s)) : \
|
||||||
|
-EINVAL)
|
||||||
|
|
||||||
#define amdgpu_dpm_get_sclk(adev, l) \
|
#define amdgpu_dpm_get_sclk(adev, l) \
|
||||||
((adev)->pp_enabled ? \
|
((adev)->pp_enabled ? \
|
||||||
(adev)->powerplay.pp_funcs->get_sclk((adev)->powerplay.pp_handle, (l)) : \
|
(adev)->powerplay.pp_funcs->get_sclk((adev)->powerplay.pp_handle, (l)) : \
|
||||||
|
@@ -737,6 +737,21 @@ static ssize_t amdgpu_hwmon_get_pwm1(struct device *dev,
|
|||||||
return sprintf(buf, "%i\n", speed);
|
return sprintf(buf, "%i\n", speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t amdgpu_hwmon_get_fan1_input(struct device *dev,
|
||||||
|
struct device_attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct amdgpu_device *adev = dev_get_drvdata(dev);
|
||||||
|
int err;
|
||||||
|
u32 speed;
|
||||||
|
|
||||||
|
err = amdgpu_dpm_get_fan_speed_rpm(adev, &speed);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
return sprintf(buf, "%i\n", speed);
|
||||||
|
}
|
||||||
|
|
||||||
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, amdgpu_hwmon_show_temp, NULL, 0);
|
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, amdgpu_hwmon_show_temp, NULL, 0);
|
||||||
static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 0);
|
static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 0);
|
||||||
static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 1);
|
static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 1);
|
||||||
@@ -744,6 +759,7 @@ static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, amdgpu_hwmon_get_pwm1, amdgpu
|
|||||||
static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, amdgpu_hwmon_get_pwm1_enable, amdgpu_hwmon_set_pwm1_enable, 0);
|
static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, amdgpu_hwmon_get_pwm1_enable, amdgpu_hwmon_set_pwm1_enable, 0);
|
||||||
static SENSOR_DEVICE_ATTR(pwm1_min, S_IRUGO, amdgpu_hwmon_get_pwm1_min, NULL, 0);
|
static SENSOR_DEVICE_ATTR(pwm1_min, S_IRUGO, amdgpu_hwmon_get_pwm1_min, NULL, 0);
|
||||||
static SENSOR_DEVICE_ATTR(pwm1_max, S_IRUGO, amdgpu_hwmon_get_pwm1_max, NULL, 0);
|
static SENSOR_DEVICE_ATTR(pwm1_max, S_IRUGO, amdgpu_hwmon_get_pwm1_max, NULL, 0);
|
||||||
|
static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, amdgpu_hwmon_get_fan1_input, NULL, 0);
|
||||||
|
|
||||||
static struct attribute *hwmon_attributes[] = {
|
static struct attribute *hwmon_attributes[] = {
|
||||||
&sensor_dev_attr_temp1_input.dev_attr.attr,
|
&sensor_dev_attr_temp1_input.dev_attr.attr,
|
||||||
@@ -753,6 +769,7 @@ static struct attribute *hwmon_attributes[] = {
|
|||||||
&sensor_dev_attr_pwm1_enable.dev_attr.attr,
|
&sensor_dev_attr_pwm1_enable.dev_attr.attr,
|
||||||
&sensor_dev_attr_pwm1_min.dev_attr.attr,
|
&sensor_dev_attr_pwm1_min.dev_attr.attr,
|
||||||
&sensor_dev_attr_pwm1_max.dev_attr.attr,
|
&sensor_dev_attr_pwm1_max.dev_attr.attr,
|
||||||
|
&sensor_dev_attr_fan1_input.dev_attr.attr,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -804,6 +821,10 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj,
|
|||||||
attr == &sensor_dev_attr_pwm1_min.dev_attr.attr))
|
attr == &sensor_dev_attr_pwm1_min.dev_attr.attr))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* requires powerplay */
|
||||||
|
if (attr == &sensor_dev_attr_fan1_input.dev_attr.attr)
|
||||||
|
return 0;
|
||||||
|
|
||||||
return effective_mode;
|
return effective_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user