<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<p style="font-family:Calibri;font-size:10pt;color:#008000;margin:5pt;font-style:normal;font-weight:normal;text-decoration:none;" align="Left">
[Public]<br>
</p>
<br>
<div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="appendonsend"></div>
<div style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<hr style="display: inline-block; width: 98%;">
<div id="divRplyFwdMsg" dir="ltr"><span style="font-family: Calibri, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);"><b>From:</b> Deucher, Alexander <Alexander.Deucher@amd.com><br>
<b>Sent:</b> Thursday, May 8, 2025 1:24 PM<br>
<b>To:</b> amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc:</b> Deucher, Alexander <Alexander.Deucher@amd.com>; Chen, Michael <Michael.Chen@amd.com>; Liu, Shaoyun <Shaoyun.Liu@amd.com><br>
<b>Subject:</b> [PATCH] drm/amdgpu/mes12: rework pipe selection for legacy queues</span>
<div> </div>
</div>
<div class="elementToProof" style="font-size: 11pt;">Only use the KIQ pipe for the scheduler queue.  For legacy<br>
kernel queues, use the scheduler pipe.  This aligns with<br>
mes11.<br>
<br>
Cc: Michael Chen <Michael.Chen@amd.com><br>
Cc: Shaoyun Liu <Shaoyun.Liu@amd.com><br>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com><br>
---<br>
 drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 11 ++++++++++-<br>
 drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h |  4 +++-<br>
 drivers/gpu/drm/amd/amdgpu/mes_v12_0.c  | 18 +++++++++---------<br>
 3 files changed, 22 insertions(+), 11 deletions(-)<br>
<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c<br>
index 2febb63ab2322..f665daf71780d 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c<br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c<br>
@@ -299,6 +299,9 @@ int amdgpu_mes_map_legacy_queue(struct amdgpu_device *adev,<br>
         queue_input.queue_id = ring->queue;<br>
         queue_input.mqd_addr = amdgpu_bo_gpu_offset(ring->mqd_obj);<br>
         queue_input.wptr_addr = ring->wptr_gpu_addr;<br>
+       /* need to use KIQ pipe to map the scheduler queue */<br>
+       if (ring == &adev->mes.ring[AMDGPU_MES_SCHED_PIPE])<br>
+               queue_input.use_kiq = true;<br>
 <br>
         r = adev->mes.funcs->map_legacy_queue(&adev->mes, &queue_input);<br>
         if (r)<br>
@@ -323,6 +326,10 @@ int amdgpu_mes_unmap_legacy_queue(struct amdgpu_device *adev,<br>
         queue_input.trail_fence_addr = gpu_addr;<br>
         queue_input.trail_fence_data = seq;<br>
 <br>
+       /* need to use KIQ pipe to unmap the scheduler queue */<br>
+       if (ring == &adev->mes.ring[AMDGPU_MES_SCHED_PIPE])<br>
+               queue_input.use_kiq = true;<br>
+<br>
         r = adev->mes.funcs->unmap_legacy_queue(&adev->mes, &queue_input);<br>
         if (r)<br>
                 DRM_ERROR("failed to unmap legacy queue\n");<br>
@@ -349,7 +356,9 @@ int amdgpu_mes_reset_legacy_queue(struct amdgpu_device *adev,<br>
         queue_input.wptr_addr = ring->wptr_gpu_addr;<br>
         queue_input.vmid = vmid;<br>
         queue_input.use_mmio = use_mmio;<br>
-       queue_input.is_kq = true;<br>
+       /* need to use KIQ pipe to reset the scheduler queue */<br>
+       if (ring == &adev->mes.ring[AMDGPU_MES_SCHED_PIPE])<br>
+               queue_input.use_kiq = true;<br>
         if (ring->funcs->type == AMDGPU_RING_TYPE_GFX)<br>
                 queue_input.legacy_gfx = true;<br>
<br>
</div>
<div class="elementToProof" style="font-size: 11pt;">We are not supposed to reset scheduler queue, so this change is not necessary. </div>
<div class="elementToProof" style="font-size: 11pt;"><br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h<br>
index a41f65b4f733a..d1836ad93ccfe 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h<br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h<br>
@@ -242,6 +242,7 @@ struct mes_map_legacy_queue_input {<br>
         uint32_t                           queue_id;<br>
         uint64_t                           mqd_addr;<br>
         uint64_t                           wptr_addr;<br>
+       bool                               use_kiq;<br>
 };<br>
 <br>
 struct mes_unmap_legacy_queue_input {<br>
@@ -252,6 +253,7 @@ struct mes_unmap_legacy_queue_input {<br>
         uint32_t                           queue_id;<br>
         uint64_t                           trail_fence_addr;<br>
         uint64_t                           trail_fence_data;<br>
+       bool                               use_kiq;<br>
 };<br>
 <br>
 struct mes_suspend_gang_input {<br>
@@ -277,7 +279,7 @@ struct mes_reset_queue_input {<br>
         uint64_t                           wptr_addr;<br>
         uint32_t                           vmid;<br>
         bool                               legacy_gfx;<br>
-       bool                               is_kq;<br>
+       bool                               use_kiq;<br>
 };<br>
 <br>
 enum mes_misc_opcode {<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/mes_v12_0.c b/drivers/gpu/drm/amd/amdgpu/mes_v12_0.c<br>
index b4f17332d4664..8f2e24ecf747f 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/mes_v12_0.c<br>
+++ b/drivers/gpu/drm/amd/amdgpu/mes_v12_0.c<br>
@@ -515,7 +515,7 @@ static int mes_v12_0_map_legacy_queue(struct amdgpu_mes *mes,<br>
                 convert_to_mes_queue_type(input->queue_type);<br>
         mes_add_queue_pkt.map_legacy_kq = 1;<br>
 <br>
-       if (mes->adev->enable_uni_mes)<br>
+       if (input->use_kiq)<br>
                 pipe = AMDGPU_MES_KIQ_PIPE;<br>
         else<br>
                 pipe = AMDGPU_MES_SCHED_PIPE;<br>
@@ -554,7 +554,7 @@ static int mes_v12_0_unmap_legacy_queue(struct amdgpu_mes *mes,<br>
                         convert_to_mes_queue_type(input->queue_type);<br>
         }<br>
 <br>
-       if (mes->adev->enable_uni_mes)<br>
+       if (input->use_kiq)<br>
                 pipe = AMDGPU_MES_KIQ_PIPE;<br>
         else<br>
                 pipe = AMDGPU_MES_SCHED_PIPE;<br>
@@ -869,7 +869,7 @@ static int mes_v12_0_reset_hw_queue(struct amdgpu_mes *mes,<br>
                 mes_reset_queue_pkt.doorbell_offset = input->doorbell_offset;<br>
         }<br>
 <br>
-       if (input->is_kq)<br>
+       if (input->use_kiq)<br>
                 pipe = AMDGPU_MES_KIQ_PIPE;<br>
         else<br>
                 pipe = AMDGPU_MES_SCHED_PIPE;<br>
@@ -1339,7 +1339,7 @@ static int mes_v12_0_kiq_enable_queue(struct amdgpu_device *adev)<br>
                 return r;<br>
         }<br>
 <br>
-       kiq->pmf->kiq_map_queues(kiq_ring, &adev->mes.ring[0]);<br>
+       kiq->pmf->kiq_map_queues(kiq_ring, &adev->mes.ring[AMDGPU_MES_SCHED_PIPE]);<br>
 <br>
         r = amdgpu_ring_test_ring(kiq_ring);<br>
         if (r) {<br>
@@ -1608,7 +1608,7 @@ static void mes_v12_0_kiq_dequeue_sched(struct amdgpu_device *adev)<br>
         soc21_grbm_select(adev, 0, 0, 0, 0);<br>
         mutex_unlock(&adev->srbm_mutex);<br>
 <br>
-       adev->mes.ring[0].sched.ready = false;<br>
+       adev->mes.ring[AMDGPU_MES_SCHED_PIPE].sched.ready = false;<br>
 }<br>
 <br>
 static void mes_v12_0_kiq_setting(struct amdgpu_ring *ring)<br>
@@ -1687,7 +1687,7 @@ static int mes_v12_0_kiq_hw_init(struct amdgpu_device *adev)<br>
 <br>
 static int mes_v12_0_kiq_hw_fini(struct amdgpu_device *adev)<br>
 {<br>
-       if (adev->mes.ring[0].sched.ready) {<br>
+       if (adev->mes.ring[AMDGPU_MES_SCHED_PIPE].sched.ready) {<br>
                 if (adev->enable_uni_mes)<br>
                         amdgpu_mes_unmap_legacy_queue(adev,<br>
                                       &adev->mes.ring[AMDGPU_MES_SCHED_PIPE],<br>
@@ -1695,7 +1695,7 @@ static int mes_v12_0_kiq_hw_fini(struct amdgpu_device *adev)<br>
                 else<br>
                         mes_v12_0_kiq_dequeue_sched(adev);<br>
 <br>
-               adev->mes.ring[0].sched.ready = false;<br>
+               adev->mes.ring[AMDGPU_MES_SCHED_PIPE].sched.ready = false;<br>
         }<br>
 <br>
         mes_v12_0_enable(adev, false);<br>
@@ -1708,7 +1708,7 @@ static int mes_v12_0_hw_init(struct amdgpu_ip_block *ip_block)<br>
         int r;<br>
         struct amdgpu_device *adev = ip_block->adev;<br>
 <br>
-       if (adev->mes.ring[0].sched.ready)<br>
+       if (adev->mes.ring[AMDGPU_MES_SCHED_PIPE].sched.ready)<br>
                 goto out;<br>
 <br>
         if (!adev->enable_mes_kiq) {<br>
@@ -1763,7 +1763,7 @@ static int mes_v12_0_hw_init(struct amdgpu_ip_block *ip_block)<br>
          * with MES enabled.<br>
          */<br>
         adev->gfx.kiq[0].ring.sched.ready = false;<br>
-       adev->mes.ring[0].sched.ready = true;<br>
+       adev->mes.ring[AMDGPU_MES_SCHED_PIPE].sched.ready = true;<br>
 <br>
         return 0;<br>
 <br>
--<br>
2.49.0<br>
<br>
</div>
</div>
</body>
</html>