drm/amdgpu/vce: set the priority for each ring
authorSatyajit Sahu <satyajit.sahu@amd.com>
Fri, 27 Aug 2021 06:11:08 +0000 (11:41 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 1 Sep 2021 20:55:11 +0000 (16:55 -0400)
VCE has multiple rings. Set the proper priority level for each
ring while initializing.

Signed-off-by: Satyajit Sahu <satyajit.sahu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.h
drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
drivers/gpu/drm/amd/amdgpu/vce_v4_0.c

index 8e8dee9..e9fdf49 100644 (file)
@@ -1167,3 +1167,17 @@ error:
        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;
+       }
+}
index d6d83a3..be4a6e7 100644 (file)
@@ -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
index b70c17f..84e488f 100644 (file)
@@ -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;
        }
index 9de6689..2a18c1e 100644 (file)
@@ -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;
        }
index fec902b..044cf9d 100644 (file)
@@ -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;
        }