Allow the user to disable kernel queues.  This can be used
to free up vmid resources if kernel queues are not needed.

Set amdgpu.user_queue=2 to disable kernel queues.

Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c 
b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c
index 250316704dfac..e023ae958459b 100644
--- a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c
@@ -118,6 +118,19 @@ static int jpeg_v5_0_1_early_init(struct amdgpu_ip_block 
*ip_block)
        if (!adev->jpeg.num_jpeg_inst || adev->jpeg.num_jpeg_inst > 
AMDGPU_MAX_JPEG_INSTANCES)
                return -ENOENT;
 
+       switch (amdgpu_user_queue) {
+       case -1:
+       case 0:
+       default:
+               adev->jpeg.disable_kq = false;
+               adev->jpeg.disable_uq = true;
+               break;
+       case 2:
+               adev->jpeg.disable_kq = true;
+               adev->jpeg.disable_uq = true;
+               break;
+       }
+
        adev->jpeg.num_jpeg_rings = AMDGPU_MAX_JPEG_RINGS;
        jpeg_v5_0_1_set_dec_ring_funcs(adev);
        jpeg_v5_0_1_set_irq_funcs(adev);
@@ -172,6 +185,10 @@ static int jpeg_v5_0_1_sw_init(struct amdgpu_ip_block 
*ip_block)
                for (j = 0; j < adev->jpeg.num_jpeg_rings; ++j) {
                        ring = &adev->jpeg.inst[i].ring_dec[j];
                        ring->use_doorbell = true;
+                       if (adev->jpeg.disable_kq) {
+                               ring->no_scheduler = true;
+                               ring->no_user_submission = true;
+                       }
                        ring->vm_hub = AMDGPU_MMHUB0(adev->jpeg.inst[i].aid_id);
                        if (!amdgpu_sriov_vf(adev)) {
                                ring->doorbell_index =
-- 
2.54.0

Reply via email to