diff options
| author | Alex Deucher <alexander.deucher@amd.com> | 2018-01-25 01:27:54 +0300 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2018-02-19 22:18:51 +0300 | 
| commit | 71c9b9adad7ec9c119a4aa0de99543aee716e417 (patch) | |
| tree | 1fb6cb858a68a89a04b0b7938b0e9eb770a9b3dd /drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | |
| parent | 2976fc2622b1e77236bea9f88a68f6ac5d2fa6ab (diff) | |
| download | linux-71c9b9adad7ec9c119a4aa0de99543aee716e417.tar.xz | |
drm/amdgpu/pm: use read_sensor API to get temperature
Rather than using the amdgpu_dpm_get_temperature.  Both
provide access to the temperature.
Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Rex Zhu <Rex.Zhu@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 | 24 | 
1 files 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 17f9f3ad9bd1..659467aa9920 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c @@ -936,17 +936,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);  } @@ -1306,13 +1312,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; | 
