diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c index 18873c2286f9..eaf91d0e831e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |||
@@ -1096,6 +1096,80 @@ static ssize_t amdgpu_hwmon_get_fan1_input(struct device *dev, | |||
1096 | return sprintf(buf, "%i\n", speed); | 1096 | return sprintf(buf, "%i\n", speed); |
1097 | } | 1097 | } |
1098 | 1098 | ||
1099 | static ssize_t amdgpu_hwmon_show_vddgfx(struct device *dev, | ||
1100 | struct device_attribute *attr, | ||
1101 | char *buf) | ||
1102 | { | ||
1103 | struct amdgpu_device *adev = dev_get_drvdata(dev); | ||
1104 | struct drm_device *ddev = adev->ddev; | ||
1105 | u32 vddgfx; | ||
1106 | int r, size = sizeof(vddgfx); | ||
1107 | |||
1108 | /* Can't get voltage when the card is off */ | ||
1109 | if ((adev->flags & AMD_IS_PX) && | ||
1110 | (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) | ||
1111 | return -EINVAL; | ||
1112 | |||
1113 | /* sanity check PP is enabled */ | ||
1114 | if (!(adev->powerplay.pp_funcs && | ||
1115 | adev->powerplay.pp_funcs->read_sensor)) | ||
1116 | return -EINVAL; | ||
1117 | |||
1118 | /* get the voltage */ | ||
1119 | r = amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VDDGFX, | ||
1120 | (void *)&vddgfx, &size); | ||
1121 | if (r) | ||
1122 | return r; | ||
1123 | |||
1124 | return snprintf(buf, PAGE_SIZE, "%d\n", vddgfx); | ||
1125 | } | ||
1126 | |||
1127 | static ssize_t amdgpu_hwmon_show_vddgfx_label(struct device *dev, | ||
1128 | struct device_attribute *attr, | ||
1129 | char *buf) | ||
1130 | { | ||
1131 | return snprintf(buf, PAGE_SIZE, "vddgfx\n"); | ||
1132 | } | ||
1133 | |||
1134 | static ssize_t amdgpu_hwmon_show_vddnb(struct device *dev, | ||
1135 | struct device_attribute *attr, | ||
1136 | char *buf) | ||
1137 | { | ||
1138 | struct amdgpu_device *adev = dev_get_drvdata(dev); | ||
1139 | struct drm_device *ddev = adev->ddev; | ||
1140 | u32 vddnb; | ||
1141 | int r, size = sizeof(vddnb); | ||
1142 | |||
1143 | /* only APUs have vddnb */ | ||
1144 | if (adev->flags & AMD_IS_APU) | ||
1145 | return -EINVAL; | ||
1146 | |||
1147 | /* Can't get voltage when the card is off */ | ||
1148 | if ((adev->flags & AMD_IS_PX) && | ||
1149 | (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) | ||
1150 | return -EINVAL; | ||
1151 | |||
1152 | /* sanity check PP is enabled */ | ||
1153 | if (!(adev->powerplay.pp_funcs && | ||
1154 | adev->powerplay.pp_funcs->read_sensor)) | ||
1155 | return -EINVAL; | ||
1156 | |||
1157 | /* get the voltage */ | ||
1158 | r = amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VDDNB, | ||
1159 | (void *)&vddnb, &size); | ||
1160 | if (r) | ||
1161 | return r; | ||
1162 | |||
1163 | return snprintf(buf, PAGE_SIZE, "%d\n", vddnb); | ||
1164 | } | ||
1165 | |||
1166 | static ssize_t amdgpu_hwmon_show_vddnb_label(struct device *dev, | ||
1167 | struct device_attribute *attr, | ||
1168 | char *buf) | ||
1169 | { | ||
1170 | return snprintf(buf, PAGE_SIZE, "vddnb\n"); | ||
1171 | } | ||
1172 | |||
1099 | static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, amdgpu_hwmon_show_temp, NULL, 0); | 1173 | static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, amdgpu_hwmon_show_temp, NULL, 0); |
1100 | static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 0); | 1174 | static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 0); |
1101 | static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 1); | 1175 | static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 1); |
@@ -1104,6 +1178,10 @@ static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, amdgpu_hwmon_get_pwm1_ | |||
1104 | static SENSOR_DEVICE_ATTR(pwm1_min, S_IRUGO, amdgpu_hwmon_get_pwm1_min, NULL, 0); | 1178 | static SENSOR_DEVICE_ATTR(pwm1_min, S_IRUGO, amdgpu_hwmon_get_pwm1_min, NULL, 0); |
1105 | static SENSOR_DEVICE_ATTR(pwm1_max, S_IRUGO, amdgpu_hwmon_get_pwm1_max, NULL, 0); | 1179 | static SENSOR_DEVICE_ATTR(pwm1_max, S_IRUGO, amdgpu_hwmon_get_pwm1_max, NULL, 0); |
1106 | static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, amdgpu_hwmon_get_fan1_input, NULL, 0); | 1180 | static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, amdgpu_hwmon_get_fan1_input, NULL, 0); |
1181 | static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, amdgpu_hwmon_show_vddgfx, NULL, 0); | ||
1182 | static SENSOR_DEVICE_ATTR(in0_label, S_IRUGO, amdgpu_hwmon_show_vddgfx_label, NULL, 0); | ||
1183 | static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, amdgpu_hwmon_show_vddnb, NULL, 0); | ||
1184 | static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, amdgpu_hwmon_show_vddnb_label, NULL, 0); | ||
1107 | 1185 | ||
1108 | static struct attribute *hwmon_attributes[] = { | 1186 | static struct attribute *hwmon_attributes[] = { |
1109 | &sensor_dev_attr_temp1_input.dev_attr.attr, | 1187 | &sensor_dev_attr_temp1_input.dev_attr.attr, |
@@ -1114,6 +1192,10 @@ static struct attribute *hwmon_attributes[] = { | |||
1114 | &sensor_dev_attr_pwm1_min.dev_attr.attr, | 1192 | &sensor_dev_attr_pwm1_min.dev_attr.attr, |
1115 | &sensor_dev_attr_pwm1_max.dev_attr.attr, | 1193 | &sensor_dev_attr_pwm1_max.dev_attr.attr, |
1116 | &sensor_dev_attr_fan1_input.dev_attr.attr, | 1194 | &sensor_dev_attr_fan1_input.dev_attr.attr, |
1195 | &sensor_dev_attr_in0_input.dev_attr.attr, | ||
1196 | &sensor_dev_attr_in0_label.dev_attr.attr, | ||
1197 | &sensor_dev_attr_in1_input.dev_attr.attr, | ||
1198 | &sensor_dev_attr_in1_label.dev_attr.attr, | ||
1117 | NULL | 1199 | NULL |
1118 | }; | 1200 | }; |
1119 | 1201 | ||