drm/amdgpu/mes11: fix to unmap legacy queue
authorJack Xiao <Jack.Xiao@amd.com>
Wed, 22 Jun 2022 04:45:24 +0000 (12:45 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 5 Jul 2022 20:17:13 +0000 (16:17 -0400)
MES fw updated to support unmapping legacy gfx/compute queue.

Signed-off-by: Jack Xiao <Jack.Xiao@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/mes_v11_0.c
drivers/gpu/drm/amd/include/mes_v11_api_def.h

index 5bdc2babb070b087cb1cae677d1052a7896c28db..6b07a8b23d67157d26d59a1f411208e25bb63ac3 100644 (file)
@@ -216,7 +216,7 @@ static int mes_v11_0_unmap_legacy_queue(struct amdgpu_mes *mes,
        mes_remove_queue_pkt.header.opcode = MES_SCH_API_REMOVE_QUEUE;
        mes_remove_queue_pkt.header.dwsize = API_FRAME_SIZE_IN_DWORDS;
 
-       mes_remove_queue_pkt.doorbell_offset = input->doorbell_offset << 2;
+       mes_remove_queue_pkt.doorbell_offset = input->doorbell_offset;
        mes_remove_queue_pkt.gang_context_addr = 0;
 
        mes_remove_queue_pkt.pipe_id = input->pipe_id;
@@ -228,10 +228,9 @@ static int mes_v11_0_unmap_legacy_queue(struct amdgpu_mes *mes,
                mes_remove_queue_pkt.tf_data =
                        lower_32_bits(input->trail_fence_data);
        } else {
-               if (input->queue_type == AMDGPU_RING_TYPE_GFX)
-                       mes_remove_queue_pkt.unmap_legacy_gfx_queue = 1;
-               else
-                       mes_remove_queue_pkt.unmap_kiq_utility_queue = 1;
+               mes_remove_queue_pkt.unmap_legacy_queue = 1;
+               mes_remove_queue_pkt.queue_type =
+                       convert_to_mes_queue_type(input->queue_type);
        }
 
        mes_remove_queue_pkt.api_status.api_completion_fence_addr =
index 1d37ec2cd737752c24544c749aa44123f4bbf9f4..80dab1146439e97dc9ad45434729d1fddee658a5 100644 (file)
@@ -227,6 +227,7 @@ union MESAPI_SET_HW_RESOURCES {
                        uint32_t        uint32_t_all;
                };
                uint32_t        oversubscription_timer;
+               uint64_t        doorbell_info;
        };
 
        uint32_t        max_dwords_in_api[API_FRAME_SIZE_IN_DWORDS];
@@ -286,7 +287,8 @@ union MESAPI__REMOVE_QUEUE {
                        uint32_t unmap_legacy_gfx_queue   : 1;
                        uint32_t unmap_kiq_utility_queue  : 1;
                        uint32_t preempt_legacy_gfx_queue : 1;
-                       uint32_t reserved                 : 29;
+                       uint32_t unmap_legacy_queue       : 1;
+                       uint32_t reserved                 : 28;
                };
                struct MES_API_STATUS       api_status;
 
@@ -295,6 +297,8 @@ union MESAPI__REMOVE_QUEUE {
 
                uint64_t                    tf_addr;
                uint32_t                    tf_data;
+
+               enum MES_QUEUE_TYPE         queue_type;
        };
 
        uint32_t        max_dwords_in_api[API_FRAME_SIZE_IN_DWORDS];