Commit 6ef82ac6 authored by Prike Liang's avatar Prike Liang Committed by Alex Deucher
Browse files

drm/amdgpu: reset gpu for s3 suspend abort case



In the s3 suspend abort case some type of gfx9 power
rail not turn off from FCH side and this will put the
GPU in an unknown power status, so let's reset the gpu
to a known good power state before reinitialize gpu
device.

Signed-off-by: default avatarPrike Liang <Prike.Liang@amd.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 93bafa32
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1298,10 +1298,32 @@ static int soc15_common_suspend(void *handle)
	return soc15_common_hw_fini(adev);
}

static bool soc15_need_reset_on_resume(struct amdgpu_device *adev)
{
	u32 sol_reg;

	sol_reg = RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81);

	/* Will reset for the following suspend abort cases.
	 * 1) Only reset limit on APU side, dGPU hasn't checked yet.
	 * 2) S3 suspend abort and TOS already launched.
	 */
	if (adev->flags & AMD_IS_APU && adev->in_s3 &&
			!adev->suspend_complete &&
			sol_reg)
		return true;

	return false;
}

static int soc15_common_resume(void *handle)
{
	struct amdgpu_device *adev = (struct amdgpu_device *)handle;

	if (soc15_need_reset_on_resume(adev)) {
		dev_info(adev->dev, "S3 suspend abort case, let's reset ASIC.\n");
		soc15_asic_reset(adev);
	}
	return soc15_common_hw_init(adev);
}