[AMD Official Use Only]
> -----Original Message----- > From: Lazar, Lijo <[email protected]> > Sent: Monday, October 18, 2021 4:05 PM > To: Quan, Evan <[email protected]>; [email protected] > Cc: Deucher, Alexander <[email protected]>; Grodzovsky, > Andrey <[email protected]> > Subject: Re: [PATCH] drm/amdgpu: fix Polaris12 uvd crash on driver unload > > > > On 10/18/2021 1:06 PM, Quan, Evan wrote: > > [AMD Official Use Only] > > > > Ping.. > > > >> -----Original Message----- > >> From: Quan, Evan <[email protected]> > >> Sent: Monday, October 11, 2021 4:28 PM > >> To: [email protected] > >> Cc: Deucher, Alexander <[email protected]>; Grodzovsky, > >> Andrey <[email protected]>; Quan, Evan > <[email protected]> > >> 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 <[email protected]> > >> 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. [Quan, Evan] This is not intended to fix Boris' issue. It just adds the missing in previous Andrey's fix cdccf1ffe1a3 drm/amdgpu: Fix crash on device remove/driver unload BR Evan > > 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
