diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c | 24 | 
1 files changed, 17 insertions, 7 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c index 6bd961fb43dc..82256558e0f5 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_powerplay.c @@ -183,13 +183,6 @@ static int amdgpu_pp_sw_fini(void *handle)  	if (ret)  		return ret; -#ifdef CONFIG_DRM_AMD_POWERPLAY -	if (adev->pp_enabled) { -		amdgpu_pm_sysfs_fini(adev); -		amd_powerplay_fini(adev->powerplay.pp_handle); -	} -#endif -  	return ret;  } @@ -223,6 +216,22 @@ static int amdgpu_pp_hw_fini(void *handle)  	return ret;  } +static void amdgpu_pp_late_fini(void *handle) +{ +#ifdef CONFIG_DRM_AMD_POWERPLAY +	struct amdgpu_device *adev = (struct amdgpu_device *)handle; + +	if (adev->pp_enabled) { +		amdgpu_pm_sysfs_fini(adev); +		amd_powerplay_fini(adev->powerplay.pp_handle); +	} + +	if (adev->powerplay.ip_funcs->late_fini) +		adev->powerplay.ip_funcs->late_fini( +			  adev->powerplay.pp_handle); +#endif +} +  static int amdgpu_pp_suspend(void *handle)  {  	int ret = 0; @@ -311,6 +320,7 @@ const struct amd_ip_funcs amdgpu_pp_ip_funcs = {  	.sw_fini = amdgpu_pp_sw_fini,  	.hw_init = amdgpu_pp_hw_init,  	.hw_fini = amdgpu_pp_hw_fini, +	.late_fini = amdgpu_pp_late_fini,  	.suspend = amdgpu_pp_suspend,  	.resume = amdgpu_pp_resume,  	.is_idle = amdgpu_pp_is_idle, | 
