[PATCH] drm/amdgpu: fix Polaris12 uvd crash on driver unload
Lazar, Lijo
lijo.lazar at amd.com
Mon Oct 18 08:04:36 UTC 2021
On 10/18/2021 1:06 PM, Quan, Evan wrote:
> [AMD Official Use Only]
>
> Ping..
>
>> -----Original Message-----
>> From: Quan, Evan <Evan.Quan at amd.com>
>> Sent: Monday, October 11, 2021 4:28 PM
>> To: amd-gfx at lists.freedesktop.org
>> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>; Grodzovsky,
>> Andrey <Andrey.Grodzovsky at amd.com>; Quan, Evan
>> <Evan.Quan at 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.quan at 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
More information about the amd-gfx
mailing list