浏览代码

drm/amdgpu: fix UVD suspend and resume for VI APU

User space passed the same handle before suspend and after resume,
so we have remove the session and handle destroy, and keep the
firmware untouched.

Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Cc: stable@vger.kernel.org
Leo Liu 10 年之前
父节点
当前提交
1f4452105c
共有 1 个文件被更改,包括 12 次插入8 次删除
  1. 12 8
      drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c

+ 12 - 8
drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c

@@ -214,10 +214,12 @@ static int uvd_v6_0_suspend(void *handle)
 	int r;
 	int r;
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
 
-	r = amdgpu_uvd_suspend(adev);
-	if (r)
-		return r;
-
+	/* Skip this for APU for now */
+	if (!(adev->flags & AMD_IS_APU)) {
+		r = amdgpu_uvd_suspend(adev);
+		if (r)
+			return r;
+	}
 	r = uvd_v6_0_hw_fini(adev);
 	r = uvd_v6_0_hw_fini(adev);
 	if (r)
 	if (r)
 		return r;
 		return r;
@@ -230,10 +232,12 @@ static int uvd_v6_0_resume(void *handle)
 	int r;
 	int r;
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
 
-	r = amdgpu_uvd_resume(adev);
-	if (r)
-		return r;
-
+	/* Skip this for APU for now */
+	if (!(adev->flags & AMD_IS_APU)) {
+		r = amdgpu_uvd_resume(adev);
+		if (r)
+			return r;
+	}
 	r = uvd_v6_0_hw_init(adev);
 	r = uvd_v6_0_hw_init(adev);
 	if (r)
 	if (r)
 		return r;
 		return r;