Commit 080e613c authored by Satyajit Sahu's avatar Satyajit Sahu Committed by Alex Deucher
Browse files

drm/amdgpu/vce: set the priority for each ring



VCE has multiple rings. Set the proper priority level for each
ring while initializing.

Signed-off-by: default avatarSatyajit Sahu <satyajit.sahu@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent a0a2f7bb
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1167,3 +1167,17 @@ int amdgpu_vce_ring_test_ib(struct amdgpu_ring *ring, long timeout)
	amdgpu_bo_free_kernel(&bo, NULL, NULL);
	return r;
}

enum amdgpu_ring_priority_level amdgpu_vce_get_ring_prio(int ring)
{
	switch(ring) {
	case 0:
		return AMDGPU_RING_PRIO_0;
	case 1:
		return AMDGPU_RING_PRIO_1;
	case 2:
		return AMDGPU_RING_PRIO_2;
	default:
		return AMDGPU_RING_PRIO_0;
	}
}
+1 −0
Original line number Diff line number Diff line
@@ -71,5 +71,6 @@ void amdgpu_vce_ring_begin_use(struct amdgpu_ring *ring);
void amdgpu_vce_ring_end_use(struct amdgpu_ring *ring);
unsigned amdgpu_vce_ring_get_emit_ib_size(struct amdgpu_ring *ring);
unsigned amdgpu_vce_ring_get_dma_frame_size(struct amdgpu_ring *ring);
enum amdgpu_ring_priority_level amdgpu_vce_get_ring_prio(int ring);

#endif
+3 −1
Original line number Diff line number Diff line
@@ -431,10 +431,12 @@ static int vce_v2_0_sw_init(void *handle)
		return r;

	for (i = 0; i < adev->vce.num_rings; i++) {
		enum amdgpu_ring_priority_level hw_prio = amdgpu_vce_get_ring_prio(i);

		ring = &adev->vce.ring[i];
		sprintf(ring->name, "vce%d", i);
		r = amdgpu_ring_init(adev, ring, 512, &adev->vce.irq, 0,
				     AMDGPU_RING_PRIO_DEFAULT, NULL);
				     hw_prio, NULL);
		if (r)
			return r;
	}
+3 −1
Original line number Diff line number Diff line
@@ -440,10 +440,12 @@ static int vce_v3_0_sw_init(void *handle)
		return r;

	for (i = 0; i < adev->vce.num_rings; i++) {
		enum amdgpu_ring_priority_level hw_prio = amdgpu_vce_get_ring_prio(i);

		ring = &adev->vce.ring[i];
		sprintf(ring->name, "vce%d", i);
		r = amdgpu_ring_init(adev, ring, 512, &adev->vce.irq, 0,
				     AMDGPU_RING_PRIO_DEFAULT, NULL);
				     hw_prio, NULL);
		if (r)
			return r;
	}
+3 −1
Original line number Diff line number Diff line
@@ -463,6 +463,8 @@ static int vce_v4_0_sw_init(void *handle)
	}

	for (i = 0; i < adev->vce.num_rings; i++) {
		enum amdgpu_ring_priority_level hw_prio = amdgpu_vce_get_ring_prio(i);

		ring = &adev->vce.ring[i];
		sprintf(ring->name, "vce%d", i);
		if (amdgpu_sriov_vf(adev)) {
@@ -478,7 +480,7 @@ static int vce_v4_0_sw_init(void *handle)
				ring->doorbell_index = adev->doorbell_index.uvd_vce.vce_ring2_3 * 2 + 1;
		}
		r = amdgpu_ring_init(adev, ring, 512, &adev->vce.irq, 0,
				     AMDGPU_RING_PRIO_DEFAULT, NULL);
				     hw_prio, NULL);
		if (r)
			return r;
	}