<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 dir="ltr" id="divRplyFwdMsg"><span style="font-family: Calibri, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);"><b>From:</b> amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of Alex Deucher <alexander.deucher@amd.com><br>
<b>Sent:</b> Monday, April 28, 2025 5:20 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>; Khatri, Sunil <Sunil.Khatri@amd.com>; Liang, Prike <Prike.Liang@amd.com><br>
<b>Subject:</b> [PATCH 5/8] drm/amdgpu/mes12: add support for setting gang submit</span>
<div> </div>
</div>
<div class="elementToProof" style="font-size: 11pt;">Enable a primary and secondary queue that schedule together.<br>
<br>
v2: fix offset of api_status (Prike)<br>
<br>
Acked-by: Sunil Khatri <sunil.khatri@amd.com><br>
Reviewed-by: Prike Liang <Prike.Liang@amd.com><br>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com><br>
---<br>
drivers/gpu/drm/amd/amdgpu/mes_v12_0.c | 28 ++++++++++++++++++++++++++<br>
1 file changed, 28 insertions(+)<br>
<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 f9f2fbc0a7166..57d8b78210f9f 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/mes_v12_0.c<br>
+++ b/drivers/gpu/drm/amd/amdgpu/mes_v12_0.c<br>
@@ -879,6 +879,33 @@ static int mes_v12_0_reset_hw_queue(struct amdgpu_mes *mes,<br>
offsetof(union MESAPI__RESET, api_status));<br>
}<br>
<br>
+static int mes_v12_0_set_gang_submit(struct amdgpu_mes *mes,<br>
+ struct mes_set_gang_submit_input *input)<br>
+{<br>
+ union MESAPI__SET_GANG_SUBMIT mes_gang_submit_pkt;<br>
+ int pipe;<br>
+<br>
+ memset(&mes_gang_submit_pkt, 0, sizeof(mes_gang_submit_pkt));<br>
+<br>
+ mes_gang_submit_pkt.header.type = MES_API_TYPE_SCHEDULER;<br>
+ mes_gang_submit_pkt.header.opcode = MES_SCH_API_SET_GANG_SUBMIT;<br>
+ mes_gang_submit_pkt.header.dwsize = API_FRAME_SIZE_IN_DWORDS;<br>
+<br>
+ mes_gang_submit_pkt.set_gang_submit.gang_context_addr =<br>
+ input->primary_gang_context_addr;<br>
+ mes_gang_submit_pkt.set_gang_submit.slave_gang_context_addr =<br>
+ input->secondary_gang_context_addr;<br>
+<br>
+ if (mes->adev->enable_uni_mes)<br>
+ pipe = AMDGPU_MES_KIQ_PIPE;<br>
+ else<br>
+ pipe = AMDGPU_MES_SCHED_PIPE;<br>
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
I think this packet should be always submitted to AMDGPU_MES_SCHED_PIPE, same pipe </div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
as in mes_v12_0_add_hw_queue where the queue is created.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
This is because HWS on AMDGPU_MES_KIQ_PIPE does not have the queue information.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-size: 11pt;">+<br>
+ return mes_v12_0_submit_pkt_and_poll_completion(mes, pipe,<br>
+ &mes_gang_submit_pkt, sizeof(mes_gang_submit_pkt),<br>
+ offsetof(union MESAPI__SET_GANG_SUBMIT, api_status));<br>
+}<br>
+<br>
static const struct amdgpu_mes_funcs mes_v12_0_funcs = {<br>
.add_hw_queue = mes_v12_0_add_hw_queue,<br>
.remove_hw_queue = mes_v12_0_remove_hw_queue,<br>
@@ -888,6 +915,7 @@ static const struct amdgpu_mes_funcs mes_v12_0_funcs = {<br>
.resume_gang = mes_v12_0_resume_gang,<br>
.misc_op = mes_v12_0_misc_op,<br>
.reset_hw_queue = mes_v12_0_reset_hw_queue,<br>
+ .set_gang_submit = mes_v12_0_set_gang_submit,<br>
};<br>
<br>
static int mes_v12_0_allocate_ucode_buffer(struct amdgpu_device *adev,<br>
--<br>
2.49.0<br>
<br>
</div>
</div>
</body>
</html>