On 10/18/2021 1:06 PM, Quan, Evan wrote:
[AMD Official Use Only]

Ping..

-----Original Message-----
From: Quan, Evan <evan.q...@amd.com>
Sent: Monday, October 11, 2021 4:28 PM
To: amd-gfx@lists.freedesktop.org
Cc: Deucher, Alexander <alexander.deuc...@amd.com>; Grodzovsky,
Andrey <andrey.grodzov...@amd.com>; Quan, Evan
<evan.q...@amd.com>
Subject: [PATCH] drm/amdgpu: fix Polaris12 uvd crash on driver unload

This is a supplement for the change below:
cdccf1ffe1a3 drm/amdgpu: Fix crash on device remove/driver unload

Signed-off-by: Evan Quan <evan.q...@amd.com>
Change-Id: Iedc25e2f572f04772511d56781b01b481e22fd00
---
  drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 24 +++++++++++++-----------
  1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index d5d023a24269..2d558c2f417d 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -534,6 +534,19 @@ static int uvd_v6_0_hw_fini(void *handle)  {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;

+       cancel_delayed_work_sync(&adev->uvd.idle_work);
+

To solve Boris' issue, this patch should be modified such that DPM disable done by the idle job shouldn't be executed during hw_fini. Preventing powergate during suspend is not needed.

Thanks,
Lijo

+       if (RREG32(mmUVD_STATUS) != 0)
+               uvd_v6_0_stop(adev);
+
+       return 0;
+}
+
+static int uvd_v6_0_suspend(void *handle) {
+       int r;
+       struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+
        /*
         * Proper cleanups before halting the HW engine:
         *   - cancel the delayed idle work
@@ -558,17 +571,6 @@ static int uvd_v6_0_hw_fini(void *handle)
                                                       AMD_CG_STATE_GATE);
        }

-       if (RREG32(mmUVD_STATUS) != 0)
-               uvd_v6_0_stop(adev);
-
-       return 0;
-}
-
-static int uvd_v6_0_suspend(void *handle) -{
-       int r;
-       struct amdgpu_device *adev = (struct amdgpu_device *)handle;
-
        r = uvd_v6_0_hw_fini(adev);
        if (r)
                return r;
--
2.29.0

Reply via email to