In the s2idle stress test sdma resume fail occasionally,in the failed case GPU is in the gfxoff state.This issue may introduce by FSDL miss handle doorbell S/R and now temporary fix the issue by forcing exit gfxoff for sdma resume. Signed-off-by: Prike Liang <Prike.Liang@xxxxxxx> --- drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c index 24b0195..af759ab 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c @@ -7608,6 +7608,14 @@ static int gfx_v10_0_suspend(void *handle) static int gfx_v10_0_resume(void *handle) { + struct amdgpu_device *adev = (struct amdgpu_device *)handle; + + /* TODO: check whether can submit a doorbell request to raise + * a doorbell fence to exit gfxoff. + */ + if (adev->in_s0ix) + amdgpu_gfx_off_ctrl(adev, false); + return gfx_v10_0_hw_init(handle); } @@ -7819,6 +7827,9 @@ static int gfx_v10_0_late_init(void *handle) struct amdgpu_device *adev = (struct amdgpu_device *)handle; int r; + if (adev->in_s0ix) + amdgpu_gfx_off_ctrl(adev, true); + r = amdgpu_irq_get(adev, &adev->gfx.priv_reg_irq, 0); if (r) return r; -- 2.7.4