|
@@ -223,6 +223,22 @@ static int amdgpu_pp_hw_fini(void *handle)
|
|
|
return ret;
|
|
return ret;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static void amdgpu_pp_late_fini(void *handle)
|
|
|
|
|
+{
|
|
|
|
|
+ struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
|
|
|
|
+
|
|
|
|
|
+#ifdef CONFIG_DRM_AMD_POWERPLAY
|
|
|
|
|
+ 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)
|
|
static int amdgpu_pp_suspend(void *handle)
|
|
|
{
|
|
{
|
|
|
int ret = 0;
|
|
int ret = 0;
|
|
@@ -311,6 +327,7 @@ const struct amd_ip_funcs amdgpu_pp_ip_funcs = {
|
|
|
.sw_fini = amdgpu_pp_sw_fini,
|
|
.sw_fini = amdgpu_pp_sw_fini,
|
|
|
.hw_init = amdgpu_pp_hw_init,
|
|
.hw_init = amdgpu_pp_hw_init,
|
|
|
.hw_fini = amdgpu_pp_hw_fini,
|
|
.hw_fini = amdgpu_pp_hw_fini,
|
|
|
|
|
+ .late_fini = amdgpu_pp_late_fini,
|
|
|
.suspend = amdgpu_pp_suspend,
|
|
.suspend = amdgpu_pp_suspend,
|
|
|
.resume = amdgpu_pp_resume,
|
|
.resume = amdgpu_pp_resume,
|
|
|
.is_idle = amdgpu_pp_is_idle,
|
|
.is_idle = amdgpu_pp_is_idle,
|