lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 831/917] drm/amdgpu: fix uvd crash on Polaris12 during driver unloading
    Date
    From: Evan Quan <evan.quan@amd.com>

    [ Upstream commit 4fc30ea780e0a5c1c019bc2e44f8523e1eed9051 ]

    There was a change(below) target for such issue:
    d82e2c249c8f ("drm/amdgpu: Fix crash on device remove/driver unload")
    But the fix for VI ASICs was missing there. This is a supplement for
    that.

    Fixes: d82e2c249c8f ("drm/amdgpu: Fix crash on device remove/driver unload")

    Signed-off-by: Evan Quan <evan.quan@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    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 bc571833632ea..72f8762907681 100644
    --- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
    +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
    @@ -543,6 +543,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);
    +
    + 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
    @@ -567,17 +580,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.33.0


    \
     
     \ /
      Last update: 2021-11-16 01:10    [W:3.897 / U:0.316 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site