diff options
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.patch | 70 |
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 + |