Commit a98cec22 authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu: fix SDMA suspend/resume on SR-IOV



Update all SDMA versions that support SR-IOV to properly
tear down the ttm buffer functions on suspend.

Tested-by: default avatarBokun Zhang <Bokun.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 571c0536
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1940,8 +1940,11 @@ static int sdma_v4_0_hw_fini(void *handle)
	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
	int i;

	if (amdgpu_sriov_vf(adev))
	if (amdgpu_sriov_vf(adev)) {
		/* disable the scheduler for SDMA */
		amdgpu_sdma_unset_buffer_funcs_helper(adev);
		return 0;
	}

	for (i = 0; i < adev->sdma.num_instances; i++) {
		amdgpu_irq_put(adev, &adev->sdma.ecc_irq,
+4 −1
Original line number Diff line number Diff line
@@ -1456,8 +1456,11 @@ static int sdma_v5_0_hw_fini(void *handle)
{
	struct amdgpu_device *adev = (struct amdgpu_device *)handle;

	if (amdgpu_sriov_vf(adev))
	if (amdgpu_sriov_vf(adev)) {
		/* disable the scheduler for SDMA */
		amdgpu_sdma_unset_buffer_funcs_helper(adev);
		return 0;
	}

	sdma_v5_0_ctx_switch_enable(adev, false);
	sdma_v5_0_enable(adev, false);
+6 −10
Original line number Diff line number Diff line
@@ -1349,19 +1349,15 @@ static int sdma_v5_2_hw_fini(void *handle)
{
	struct amdgpu_device *adev = (struct amdgpu_device *)handle;

	/*
	 * Under SRIOV, the VF cannot single-mindedly stop SDMA engine
	 * However, we still need to clean up the DRM entity
	 * Therefore, we will re-enable SDMA afterwards.
	 */
	sdma_v5_2_ctx_switch_enable(adev, false);
	sdma_v5_2_enable(adev, false);

	if (amdgpu_sriov_vf(adev)) {
		sdma_v5_2_enable(adev, true);
		sdma_v5_2_ctx_switch_enable(adev, true);
		/* disable the scheduler for SDMA */
		amdgpu_sdma_unset_buffer_funcs_helper(adev);
		return 0;
	}

	sdma_v5_2_ctx_switch_enable(adev, false);
	sdma_v5_2_enable(adev, false);

	return 0;
}

+4 −1
Original line number Diff line number Diff line
@@ -1311,8 +1311,11 @@ static int sdma_v6_0_hw_fini(void *handle)
{
	struct amdgpu_device *adev = (struct amdgpu_device *)handle;

	if (amdgpu_sriov_vf(adev))
	if (amdgpu_sriov_vf(adev)) {
		/* disable the scheduler for SDMA */
		amdgpu_sdma_unset_buffer_funcs_helper(adev);
		return 0;
	}

	sdma_v6_0_ctx_switch_enable(adev, false);
	sdma_v6_0_enable(adev, false);