aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3283-drm-amdgpu-pm-use-read_sensor-API-to-get-temperature.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3283-drm-amdgpu-pm-use-read_sensor-API-to-get-temperature.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3283-drm-amdgpu-pm-use-read_sensor-API-to-get-temperature.patch70
1 files changed, 70 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3283-drm-amdgpu-pm-use-read_sensor-API-to-get-temperature.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3283-drm-amdgpu-pm-use-read_sensor-API-to-get-temperature.patch
new file mode 100644
index 00000000..e12bbe04
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3283-drm-amdgpu-pm-use-read_sensor-API-to-get-temperature.patch
@@ -0,0 +1,70 @@
+From 930d4c5f76ed1a4019bb1d5bca3533cdf23447de Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 24 Jan 2018 17:27:54 -0500
+Subject: [PATCH 3283/4131] drm/amdgpu/pm: use read_sensor API to get
+ temperature
+
+Rather than using the amdgpu_dpm_get_temperature. Both
+provide access to the temperature.
+
+Reviewed-by: Rex Zhu <Rex.Zhu@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 24 ++++++++++++++++--------
+ 1 file changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+index c72185b..16d795f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+@@ -934,17 +934,23 @@ static ssize_t amdgpu_hwmon_show_temp(struct device *dev,
+ {
+ struct amdgpu_device *adev = dev_get_drvdata(dev);
+ struct drm_device *ddev = adev->ddev;
+- int temp;
++ int r, temp, size = sizeof(temp);
+
+ /* Can't get temperature when the card is off */
+ if ((adev->flags & AMD_IS_PX) &&
+ (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
+ return -EINVAL;
+
+- if (!adev->powerplay.pp_funcs->get_temperature)
+- temp = 0;
+- else
+- temp = amdgpu_dpm_get_temperature(adev);
++ /* sanity check PP is enabled */
++ if (!(adev->powerplay.pp_funcs &&
++ adev->powerplay.pp_funcs->read_sensor))
++ return -EINVAL;
++
++ /* get the temperature */
++ r = amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GPU_TEMP,
++ (void *)&temp, &size);
++ if (r)
++ return r;
+
+ return snprintf(buf, PAGE_SIZE, "%d\n", temp);
+ }
+@@ -1304,13 +1310,15 @@ void amdgpu_dpm_thermal_work_handler(struct work_struct *work)
+ pm.dpm.thermal.work);
+ /* switch to the thermal state */
+ enum amd_pm_state_type dpm_state = POWER_STATE_TYPE_INTERNAL_THERMAL;
++ int temp, size = sizeof(temp);
+
+ if (!adev->pm.dpm_enabled)
+ return;
+
+- if (adev->powerplay.pp_funcs->get_temperature) {
+- int temp = amdgpu_dpm_get_temperature(adev);
+-
++ if (adev->powerplay.pp_funcs &&
++ adev->powerplay.pp_funcs->read_sensor &&
++ !amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GPU_TEMP,
++ (void *)&temp, &size)) {
+ if (temp < adev->pm.dpm.thermal.min_temp)
+ /* switch back the user state */
+ dpm_state = adev->pm.dpm.user_state;
+--
+2.7.4
+