<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<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:#0000FF;margin:5pt;font-style:normal;font-weight:normal;text-decoration:none;" align="Left">
[AMD Official Use Only - AMD Internal Distribution Only]<br>
</p>
<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);">
Thanks Alex, </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 have created an integration branch for GFX12, and cleaned up and ported these patches. We will finish testing and start the code review of these patches soon. </div>
<div id="appendonsend" style="color: inherit;"></div>
<div 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-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
Regards</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
Shashank</div>
<hr style="display: inline-block; width: 98%;">
<div id="divRplyFwdMsg" dir="ltr" style="color: inherit;"><span style="font-family: Calibri, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);"><b>From:</b> Alex Deucher <alexdeucher@gmail.com><br>
<b>Sent:</b> Friday, October 18, 2024 9:18 PM<br>
<b>To:</b> Sharma, Shashank <Shashank.Sharma@amd.com><br>
<b>Cc:</b> Deucher, Alexander <Alexander.Deucher@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>; Somalapuram, Amaranath <Amaranath.Somalapuram@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>; Yadav, Arvind <Arvind.Yadav@amd.com><br>
<b>Subject:</b> Re: [PATCH] drm/amdgpu: enable userqueue support for GFX12</span>
<div> </div>
</div>
<div style="font-size: 11pt;">On Tue, Oct 15, 2024 at 12:37 PM Sharma, Shashank<br>
<shashank.sharma@amd.com> wrote:<br>
><br>
><br>
> On 15/10/2024 16:58, Alex Deucher wrote:<br>
> > On Tue, Oct 15, 2024 at 6:13 AM Sharma, Shashank<br>
> > <shashank.sharma@amd.com> wrote:<br>
> >> Hello Alex,<br>
> >><br>
> >> On 14/10/2024 22:29, Deucher, Alexander wrote:<br>
> >><br>
> >> [AMD Official Use Only - AMD Internal Distribution Only]<br>
> >><br>
> >> -----Original Message-----<br>
> >> From: Sharma, Shashank <Shashank.Sharma@amd.com><br>
> >> Sent: Thursday, October 10, 2024 2:08 PM<br>
> >> To: amd-gfx@lists.freedesktop.org<br>
> >> Cc: Somalapuram, Amaranath <Amaranath.Somalapuram@amd.com>; Deucher,<br>
> >> Alexander <Alexander.Deucher@amd.com>; Koenig, Christian<br>
> >> <Christian.Koenig@amd.com>; Yadav, Arvind <Arvind.Yadav@amd.com>; Sharma,<br>
> >> Shashank <Shashank.Sharma@amd.com><br>
> >> Subject: [PATCH] drm/amdgpu: enable userqueue support for GFX12<br>
> >><br>
> >> From: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com><br>
> >><br>
> >> This patch enables Usermode queue support across GFX, Compute and SDMA IPs<br>
> >> on GFX12/SDMA7. It typically reuses Navi3X userqueue IP functions to create and<br>
> >> destroy MQDs.<br>
> >><br>
> >> I would like to make this more explicit.  In mes_v11_0_userqueue.c, I would suggest splitting out any non-gfx11 specific code into some new helpers in mes_userqueue.c.  E.g.,<br>
> >><br>
> >> mes_v11_0_map_gtt_bo_to_gart() -> mes_userq_map_gtt_bo_to_gart()<br>
> >> mes_v11_0_create_wptr_mapping() -> mes_userq_create_wptr_mapping()<br>
> >> mes_v11_0_userq_map() -> mes_userq_map()<br>
> >> mes_v11_0_userq_unmap() -> mes_userq_unmap()<br>
> >> mes_v11_0_userq_mqd_destroy() -> mes_userq_mqd_destroy()<br>
> >><br>
> >> Initial patch sets had all these functions named similar to 'mes_userq_* ' only, but later you recommended that we should have mention of _v11_0 to indicate the IP specific stuff, as there might be IP specific way of mapping/unmapping/creating and destroying
 the queues. So with this comment we might be going back to the same version.<br>
> > Well that was before gfx12 support was on our radar.  Generally, you<br>
> > develop for the first generation and if there are things that you can<br>
> > pull out into common code and share across generations, then you<br>
> > should do that when you add support for the next generation.<br>
> Noted,<br>
> >> As of now, v12 UQ was tested using the the same methods as V11 UQs, and found it functional. We might need more information before taking this step.<br>
> > You would need to verify that the V11 and V12 MQDs are the same.<br>
> > EIther way, I would recommend making v11 and v12 variants the the<br>
> > functions which populate the MQDs that the firmware uses.  There is<br>
> > alays a chance that the firmware may repurpose some of the fields for<br>
> > different things that can lead to subtle bugs.  At the end of the day,<br>
> > I think we'll end up with a bunch of helpers in mes_userqueue.c and<br>
> > then a function or two in mes_v11_0_userqueue.c and<br>
> > mes_v12_0_userqueue.c.  Alternatively, you could just put the helpers<br>
> > in amdgpu_mes.c and the gfx11 and gfx12 specific functions in<br>
> > mes_v11_0.c and mes_v12_0.c since it will probably only be a function<br>
> > or two.  You could even add a callback for the MQD specific changes<br>
> > and add a wrapper like the other functions in amdgpu_mes.c and the<br>
> > generic functions in mes_v11_0_userqueue.c.  That would make<br>
> > everything symmetric for mes managed queues.<br>
> ><br>
> > Alex<br>
><br>
> Thanks, Noted, I would do the recommended changes.<br>
<br>
A took a longer look at the changes and it turns out I could move all<br>
of the IP specific stuff into the IP specific code.  I hacked together<br>
the attached untested patches to clean this up.<br>
<br>
Alex<br>
<br>
<br>
><br>
> - Shashank<br>
><br>
> >> - Shashank<br>
> >><br>
> >> However, mes_v11_userq_create_ctx_space() uses the v11 mqd structures which may not match the v12 structures.  We should add a v12 implementation for any functions that use the v12 structures.<br>
> >><br>
> >> Alex<br>
> >><br>
> >> Cc: Alex Deucher <alexander.deucher@amd.com><br>
> >> Cc: Christian Koenig <christian.koenig@amd.com><br>
> >> Cc: Arvind Yadav <arvind.yadav@amd.com><br>
> >> Signed-off-by: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com><br>
> >> Signed-off-by: Shashank Sharma <shashank.sharma@amd.com><br>
> >> ---<br>
> >>   drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 5 +++++<br>
> >> drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c | 6 ++++++<br>
> >>   2 files changed, 11 insertions(+)<br>
> >><br>
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c<br>
> >> b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c<br>
> >> index 9fec28d8a5fc..d511996c374d 100644<br>
> >> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c<br>
> >> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c<br>
> >> @@ -46,6 +46,7 @@<br>
> >>   #include "gfx_v12_0.h"<br>
> >>   #include "nbif_v6_3_1.h"<br>
> >>   #include "mes_v12_0.h"<br>
> >> +#include "mes_v11_0_userqueue.h"<br>
> >><br>
> >>   #define GFX12_NUM_GFX_RINGS  1<br>
> >>   #define GFX12_MEC_HPD_SIZE   2048<br>
> >> @@ -1335,6 +1336,10 @@ static int gfx_v12_0_sw_init(struct amdgpu_ip_block<br>
> >> *ip_block)<br>
> >>                adev->gfx.mec.num_mec = 2;<br>
> >>                adev->gfx.mec.num_pipe_per_mec = 2;<br>
> >>                adev->gfx.mec.num_queue_per_pipe = 4;<br>
> >> +#ifdef CONFIG_DRM_AMDGPU_NAVI3X_USERQ<br>
> >> +             adev->userq_funcs[AMDGPU_HW_IP_GFX] =<br>
> >> &userq_mes_v11_0_funcs;<br>
> >> +             adev->userq_funcs[AMDGPU_HW_IP_COMPUTE] =<br>
> >> &userq_mes_v11_0_funcs;<br>
> >> +#endif<br>
> >>                break;<br>
> >>        default:<br>
> >>                adev->gfx.me.num_me = 1;<br>
> >> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c<br>
> >> b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c<br>
> >> index 24f24974ac1d..badcf38bb8b6 100644<br>
> >> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c<br>
> >> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c<br>
> >> @@ -42,6 +42,7 @@<br>
> >>   #include "sdma_common.h"<br>
> >>   #include "sdma_v7_0.h"<br>
> >>   #include "v12_structs.h"<br>
> >> +#include "mes_v11_0_userqueue.h"<br>
> >><br>
> >>   MODULE_FIRMWARE("amdgpu/sdma_7_0_0.bin");<br>
> >>   MODULE_FIRMWARE("amdgpu/sdma_7_0_1.bin");<br>
> >> @@ -1317,6 +1318,11 @@ static int sdma_v7_0_sw_init(struct amdgpu_ip_block<br>
> >> *ip_block)<br>
> >>        else<br>
> >>                DRM_ERROR("Failed to allocated memory for SDMA IP Dump\n");<br>
> >><br>
> >> +#ifdef CONFIG_DRM_AMDGPU_NAVI3X_USERQ<br>
> >> +     adev->userq_funcs[AMDGPU_HW_IP_DMA] = &userq_mes_v11_0_funcs;<br>
> >> #endif<br>
> >> +<br>
> >> +<br>
> >>        return r;<br>
> >>   }<br>
> >><br>
> >> --<br>
> >> 2.46.2</div>
</div>
</body>
</html>