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

drm/amdgpu/sdma: consolidate engine reset handling



Move the force completion handling into the common
engine reset function.  No need to duplicate it for
every IP version.

Reviewed-by: default avatarJesse Zhang <Jesse.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 91134e80
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -590,10 +590,13 @@ int amdgpu_sdma_reset_engine(struct amdgpu_device *adev, uint32_t instance_id)
	 * to be submitted to the queues after the reset is complete.
	 */
	if (!ret) {
		amdgpu_fence_driver_force_completion(gfx_ring);
		drm_sched_wqueue_start(&gfx_ring->sched);
		if (adev->sdma.has_page_queue)
		if (adev->sdma.has_page_queue) {
			amdgpu_fence_driver_force_completion(page_ring);
			drm_sched_wqueue_start(&page_ring->sched);
		}
	}
	mutex_unlock(&sdma_instance->engine_reset_mutex);

	return ret;
+1 −16
Original line number Diff line number Diff line
@@ -1714,7 +1714,7 @@ static int sdma_v4_4_2_stop_queue(struct amdgpu_ring *ring)
static int sdma_v4_4_2_restore_queue(struct amdgpu_ring *ring)
{
	struct amdgpu_device *adev = ring->adev;
	u32 inst_mask, tmp_mask;
	u32 inst_mask;
	int i, r;

	inst_mask = 1 << ring->me;
@@ -1733,21 +1733,6 @@ static int sdma_v4_4_2_restore_queue(struct amdgpu_ring *ring)
	}

	r = sdma_v4_4_2_inst_start(adev, inst_mask, true);
	if (r)
		return r;

	tmp_mask = inst_mask;
	for_each_inst(i, tmp_mask) {
		ring = &adev->sdma.instance[i].ring;

		amdgpu_fence_driver_force_completion(ring);

		if (adev->sdma.has_page_queue) {
			struct amdgpu_ring *page = &adev->sdma.instance[i].page;

			amdgpu_fence_driver_force_completion(page);
		}
	}

	return r;
}
+2 −4
Original line number Diff line number Diff line
@@ -1618,10 +1618,8 @@ static int sdma_v5_0_restore_queue(struct amdgpu_ring *ring)

	r = sdma_v5_0_gfx_resume_instance(adev, inst_id, true);
	amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
	if (r)

	return r;
	amdgpu_fence_driver_force_completion(ring);
	return 0;
}

static int sdma_v5_0_ring_preempt_ib(struct amdgpu_ring *ring)
+2 −4
Original line number Diff line number Diff line
@@ -1534,10 +1534,8 @@ static int sdma_v5_2_restore_queue(struct amdgpu_ring *ring)
	r = sdma_v5_2_gfx_resume_instance(adev, inst_id, true);

	amdgpu_gfx_rlc_exit_safe_mode(adev, 0);
	if (r)

	return r;
	amdgpu_fence_driver_force_completion(ring);
	return 0;
}

static int sdma_v5_2_ring_preempt_ib(struct amdgpu_ring *ring)