diff options
author | Evan Quan <evan.quan@amd.com> | 2019-04-17 23:53:04 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2019-05-24 13:20:47 -0400 |
commit | 901cb599dbc233fc325e3602e7c1218d2c24359c (patch) | |
tree | b08e0ba946b8355571217be1152c58d8ce5fc56c /drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |
parent | 437ccd175a7a3c9871536a26b2d28e3c99515e7f (diff) |
drm/amd/powerplay: support temperature emergency max values
These new interfaces(temp1_emergency, temp2_emergency,
temp3_emergency) are supported on SOC15 dGPUs only.
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c index 1f78deadb770..7093b4efc3a7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |||
@@ -1446,6 +1446,32 @@ static ssize_t amdgpu_hwmon_show_mem_temp_thresh(struct device *dev, | |||
1446 | return snprintf(buf, PAGE_SIZE, "%d\n", temp); | 1446 | return snprintf(buf, PAGE_SIZE, "%d\n", temp); |
1447 | } | 1447 | } |
1448 | 1448 | ||
1449 | static ssize_t amdgpu_hwmon_show_temp_emergency(struct device *dev, | ||
1450 | struct device_attribute *attr, | ||
1451 | char *buf) | ||
1452 | { | ||
1453 | struct amdgpu_device *adev = dev_get_drvdata(dev); | ||
1454 | int channel = to_sensor_dev_attr(attr)->index; | ||
1455 | int temp = 0; | ||
1456 | |||
1457 | if (channel >= PP_TEMP_MAX) | ||
1458 | return -EINVAL; | ||
1459 | |||
1460 | switch (channel) { | ||
1461 | case PP_TEMP_JUNCTION: | ||
1462 | temp = adev->pm.dpm.thermal.max_hotspot_emergency_temp; | ||
1463 | break; | ||
1464 | case PP_TEMP_EDGE: | ||
1465 | temp = adev->pm.dpm.thermal.max_edge_emergency_temp; | ||
1466 | break; | ||
1467 | case PP_TEMP_MEM: | ||
1468 | temp = adev->pm.dpm.thermal.max_mem_emergency_temp; | ||
1469 | break; | ||
1470 | } | ||
1471 | |||
1472 | return snprintf(buf, PAGE_SIZE, "%d\n", temp); | ||
1473 | } | ||
1474 | |||
1449 | static ssize_t amdgpu_hwmon_get_pwm1_enable(struct device *dev, | 1475 | static ssize_t amdgpu_hwmon_get_pwm1_enable(struct device *dev, |
1450 | struct device_attribute *attr, | 1476 | struct device_attribute *attr, |
1451 | char *buf) | 1477 | char *buf) |
@@ -2023,6 +2049,9 @@ static ssize_t amdgpu_hwmon_show_mclk_label(struct device *dev, | |||
2023 | * - temp[1-3]_crit_hyst: temperature hysteresis for critical limit in millidegrees Celsius | 2049 | * - temp[1-3]_crit_hyst: temperature hysteresis for critical limit in millidegrees Celsius |
2024 | * - temp2_crit_hyst and temp3_crit_hyst are supported on SOC15 dGPUs only | 2050 | * - temp2_crit_hyst and temp3_crit_hyst are supported on SOC15 dGPUs only |
2025 | * | 2051 | * |
2052 | * - temp[1-3]_emergency: temperature emergency max value(asic shutdown) in millidegrees Celsius | ||
2053 | * - these are supported on SOC15 dGPUs only | ||
2054 | * | ||
2026 | * hwmon interfaces for GPU voltage: | 2055 | * hwmon interfaces for GPU voltage: |
2027 | * | 2056 | * |
2028 | * - in0_input: the voltage on the GPU in millivolts | 2057 | * - in0_input: the voltage on the GPU in millivolts |
@@ -2072,10 +2101,13 @@ static ssize_t amdgpu_hwmon_show_mclk_label(struct device *dev, | |||
2072 | static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, amdgpu_hwmon_show_temp, NULL, 0); | 2101 | static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, amdgpu_hwmon_show_temp, NULL, 0); |
2073 | static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 0); | 2102 | static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 0); |
2074 | static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 1); | 2103 | static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, amdgpu_hwmon_show_temp_thresh, NULL, 1); |
2104 | static SENSOR_DEVICE_ATTR(temp1_emergency, S_IRUGO, amdgpu_hwmon_show_temp_emergency, NULL, PP_TEMP_EDGE); | ||
2075 | static SENSOR_DEVICE_ATTR(temp2_crit, S_IRUGO, amdgpu_hwmon_show_hotspot_temp_thresh, NULL, 0); | 2105 | static SENSOR_DEVICE_ATTR(temp2_crit, S_IRUGO, amdgpu_hwmon_show_hotspot_temp_thresh, NULL, 0); |
2076 | static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, amdgpu_hwmon_show_hotspot_temp_thresh, NULL, 1); | 2106 | static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, amdgpu_hwmon_show_hotspot_temp_thresh, NULL, 1); |
2107 | static SENSOR_DEVICE_ATTR(temp2_emergency, S_IRUGO, amdgpu_hwmon_show_temp_emergency, NULL, PP_TEMP_JUNCTION); | ||
2077 | static SENSOR_DEVICE_ATTR(temp3_crit, S_IRUGO, amdgpu_hwmon_show_mem_temp_thresh, NULL, 0); | 2108 | static SENSOR_DEVICE_ATTR(temp3_crit, S_IRUGO, amdgpu_hwmon_show_mem_temp_thresh, NULL, 0); |
2078 | static SENSOR_DEVICE_ATTR(temp3_crit_hyst, S_IRUGO, amdgpu_hwmon_show_mem_temp_thresh, NULL, 1); | 2109 | static SENSOR_DEVICE_ATTR(temp3_crit_hyst, S_IRUGO, amdgpu_hwmon_show_mem_temp_thresh, NULL, 1); |
2110 | static SENSOR_DEVICE_ATTR(temp3_emergency, S_IRUGO, amdgpu_hwmon_show_temp_emergency, NULL, PP_TEMP_MEM); | ||
2079 | static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, amdgpu_hwmon_get_pwm1, amdgpu_hwmon_set_pwm1, 0); | 2111 | static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, amdgpu_hwmon_get_pwm1, amdgpu_hwmon_set_pwm1, 0); |
2080 | static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, amdgpu_hwmon_get_pwm1_enable, amdgpu_hwmon_set_pwm1_enable, 0); | 2112 | static SENSOR_DEVICE_ATTR(pwm1_enable, S_IRUGO | S_IWUSR, amdgpu_hwmon_get_pwm1_enable, amdgpu_hwmon_set_pwm1_enable, 0); |
2081 | static SENSOR_DEVICE_ATTR(pwm1_min, S_IRUGO, amdgpu_hwmon_get_pwm1_min, NULL, 0); | 2113 | static SENSOR_DEVICE_ATTR(pwm1_min, S_IRUGO, amdgpu_hwmon_get_pwm1_min, NULL, 0); |
@@ -2106,6 +2138,9 @@ static struct attribute *hwmon_attributes[] = { | |||
2106 | &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr, | 2138 | &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr, |
2107 | &sensor_dev_attr_temp3_crit.dev_attr.attr, | 2139 | &sensor_dev_attr_temp3_crit.dev_attr.attr, |
2108 | &sensor_dev_attr_temp3_crit_hyst.dev_attr.attr, | 2140 | &sensor_dev_attr_temp3_crit_hyst.dev_attr.attr, |
2141 | &sensor_dev_attr_temp1_emergency.dev_attr.attr, | ||
2142 | &sensor_dev_attr_temp2_emergency.dev_attr.attr, | ||
2143 | &sensor_dev_attr_temp3_emergency.dev_attr.attr, | ||
2109 | &sensor_dev_attr_pwm1.dev_attr.attr, | 2144 | &sensor_dev_attr_pwm1.dev_attr.attr, |
2110 | &sensor_dev_attr_pwm1_enable.dev_attr.attr, | 2145 | &sensor_dev_attr_pwm1_enable.dev_attr.attr, |
2111 | &sensor_dev_attr_pwm1_min.dev_attr.attr, | 2146 | &sensor_dev_attr_pwm1_min.dev_attr.attr, |
@@ -2234,7 +2269,10 @@ static umode_t hwmon_attributes_visible(struct kobject *kobj, | |||
2234 | (attr == &sensor_dev_attr_temp2_crit.dev_attr.attr || | 2269 | (attr == &sensor_dev_attr_temp2_crit.dev_attr.attr || |
2235 | attr == &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr || | 2270 | attr == &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr || |
2236 | attr == &sensor_dev_attr_temp3_crit.dev_attr.attr || | 2271 | attr == &sensor_dev_attr_temp3_crit.dev_attr.attr || |
2237 | attr == &sensor_dev_attr_temp3_crit_hyst.dev_attr.attr)) | 2272 | attr == &sensor_dev_attr_temp3_crit_hyst.dev_attr.attr || |
2273 | attr == &sensor_dev_attr_temp1_emergency.dev_attr.attr || | ||
2274 | attr == &sensor_dev_attr_temp2_emergency.dev_attr.attr || | ||
2275 | attr == &sensor_dev_attr_temp3_emergency.dev_attr.attr)) | ||
2238 | return 0; | 2276 | return 0; |
2239 | 2277 | ||
2240 | return effective_mode; | 2278 | return effective_mode; |