<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">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p style="margin-top:0;margin-bottom:0">Thanks David.</p>
<p style="margin-top:0;margin-bottom:0">I think we can use ring->idx.</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">Best Regards</p>
<p style="margin-top:0;margin-bottom:0">Rex<br>
<br>
</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" color="#000000" face="Calibri, sans-serif"><b>From:</b> Zhou, David(ChunMing)<br>
<b>Sent:</b> Wednesday, October 24, 2018 2:55 PM<br>
<b>To:</b> Zhu, Rex; amd-gfx@lists.freedesktop.org<br>
<b>Cc:</b> Zhu, Rex<br>
<b>Subject:</b> RE: [PATCH v2] drm/amdgpu: Patch csa mc address in IB packet</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText"><br>
<br>
> -----Original Message-----<br>
> From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Rex<br>
> Zhu<br>
> Sent: Wednesday, October 24, 2018 2:03 PM<br>
> To: amd-gfx@lists.freedesktop.org<br>
> Cc: Zhu, Rex <Rex.Zhu@amd.com><br>
> Subject: [PATCH v2] drm/amdgpu: Patch csa mc address in IB packet<br>
> <br>
> the csa buffer is used by sdma engine to do context save when preemption<br>
> happens. it the mc address is zero, mean the preemtpion feature(MCBP) is<br>
> disabled.<br>
> <br>
> Signed-off-by: Rex Zhu <Rex.Zhu@amd.com><br>
> ---<br>
>  drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 13 +++++++++++++<br>
> drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h |  2 ++<br>
>  drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c   |  8 ++++++--<br>
>  drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c   |  8 ++++++--<br>
>  4 files changed, 27 insertions(+), 4 deletions(-)<br>
> <br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c<br>
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c<br>
> index 0fb9907..24b80bc 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c<br>
> @@ -40,3 +40,16 @@ struct amdgpu_sdma_instance *<br>
> amdgpu_get_sdma_instance(struct amdgpu_ring *ring)<br>
> <br>
>        return NULL;<br>
>  }<br>
> +<br>
> +int amdgpu_get_sdma_index(struct amdgpu_ring *ring, uint32_t *index) {<br>
> +     struct amdgpu_device *adev = ring->adev;<br>
> +     int i;<br>
> +<br>
> +     for (i = 0; i < adev->sdma.num_instances; i++)<br>
> +             if (ring == &adev->sdma.instance[i].ring ||<br>
> +                 ring == &adev->sdma.instance[i].page)<br>
> +                     return i;<br>
> +<br>
> +     return -EINVAL;<br>
> +}<br>
<br>
Loop for checking works,  but looks not good.<br>
<br>
If you need ring index, you can define them first as enum, and evaluate enum index to ring when ring initializing.<br>
<br>
Regards,<br>
David Zhou<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h<br>
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h<br>
> index 479a245..314078a 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h<br>
> @@ -26,6 +26,7 @@<br>
> <br>
>  /* max number of IP instances */<br>
>  #define AMDGPU_MAX_SDMA_INSTANCES            2<br>
> +#define AMDGPU_SDMA_CSA_SIZE                 (1024)<br>
> <br>
>  enum amdgpu_sdma_irq {<br>
>        AMDGPU_SDMA_IRQ_TRAP0 = 0,<br>
> @@ -96,4 +97,5 @@ struct amdgpu_buffer_funcs {  struct<br>
> amdgpu_sdma_instance *  amdgpu_get_sdma_instance(struct amdgpu_ring<br>
> *ring);<br>
> <br>
> +int amdgpu_get_sdma_index(struct amdgpu_ring *ring, uint32_t *index);<br>
>  #endif<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c<br>
> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c<br>
> index f5e6aa2..fdc5d75 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c<br>
> @@ -424,7 +424,11 @@ static void sdma_v3_0_ring_emit_ib(struct<br>
> amdgpu_ring *ring,<br>
>                                   bool ctx_switch)<br>
>  {<br>
>        unsigned vmid = GET_VMID(job);<br>
> +     uint64_t csa_mc_addr = job ? job->csa_mc_addr : 0;<br>
> +     uint32_t i = 0;<br>
> <br>
> +     if (amdgpu_get_sdma_index(ring, &i))<br>
> +             return -EINVAL;<br>
>        /* IB packet must end on a 8 DW boundary */<br>
>        sdma_v3_0_ring_insert_nop(ring, (10 - (lower_32_bits(ring->wptr) &<br>
> 7)) % 8);<br>
> <br>
> @@ -434,8 +438,8 @@ static void sdma_v3_0_ring_emit_ib(struct<br>
> amdgpu_ring *ring,<br>
>        amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr) & 0xffffffe0);<br>
>        amdgpu_ring_write(ring, upper_32_bits(ib->gpu_addr));<br>
>        amdgpu_ring_write(ring, ib->length_dw);<br>
> -     amdgpu_ring_write(ring, 0);<br>
> -     amdgpu_ring_write(ring, 0);<br>
> +     amdgpu_ring_write(ring, lower_32_bits(csa_mc_addr + i *<br>
> AMDGPU_SDMA_CSA_SIZE));<br>
> +     amdgpu_ring_write(ring, upper_32_bits(csa_mc_addr + i *<br>
> +AMDGPU_SDMA_CSA_SIZE));<br>
> <br>
>  }<br>
> <br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c<br>
> b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c<br>
> index 2282ac1..e69a584 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c<br>
> @@ -507,7 +507,11 @@ static void sdma_v4_0_ring_emit_ib(struct<br>
> amdgpu_ring *ring,<br>
>                                   bool ctx_switch)<br>
>  {<br>
>        unsigned vmid = GET_VMID(job);<br>
> +     uint64_t csa_mc_addr = job ? job->csa_mc_addr : 0;<br>
> +     uint32_t i = 0;<br>
> <br>
> +     if (amdgpu_get_sdma_index(ring, &i))<br>
> +             return -EINVAL;<br>
>        /* IB packet must end on a 8 DW boundary */<br>
>        sdma_v4_0_ring_insert_nop(ring, (10 - (lower_32_bits(ring->wptr) &<br>
> 7)) % 8);<br>
> <br>
> @@ -517,8 +521,8 @@ static void sdma_v4_0_ring_emit_ib(struct<br>
> amdgpu_ring *ring,<br>
>        amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr) & 0xffffffe0);<br>
>        amdgpu_ring_write(ring, upper_32_bits(ib->gpu_addr));<br>
>        amdgpu_ring_write(ring, ib->length_dw);<br>
> -     amdgpu_ring_write(ring, 0);<br>
> -     amdgpu_ring_write(ring, 0);<br>
> +     amdgpu_ring_write(ring, lower_32_bits(csa_mc_addr + i *<br>
> AMDGPU_SDMA_CSA_SIZE));<br>
> +     amdgpu_ring_write(ring, upper_32_bits(csa_mc_addr + i *<br>
> +AMDGPU_SDMA_CSA_SIZE));<br>
> <br>
>  }<br>
> <br>
> --<br>
> 1.9.1<br>
> <br>
> _______________________________________________<br>
> amd-gfx mailing list<br>
> amd-gfx@lists.freedesktop.org<br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx" id="LPlnk375103" class="OWAAutoLink" previewremoved="true">
https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a>
<div id="LPBorder_GT_15403648696980.35762518566836554" style="margin-bottom: 20px; overflow: auto; width: 100%; text-indent: 0px;">
<table id="LPContainer_15403648696960.10036405789195024" style="width: 90%; background-color: rgb(255, 255, 255); position: relative; overflow: auto; padding-top: 20px; padding-bottom: 20px; margin-top: 20px; border-top: 1px dotted rgb(200, 200, 200); border-bottom: 1px dotted rgb(200, 200, 200);" role="presentation" cellspacing="0">
<tbody>
<tr style="border-spacing: 0px;" valign="top">
<td id="TextCell_15403648696980.18458402442769917" style="vertical-align: top; position: relative; padding: 0px; display: table-cell;" colspan="2">
<div id="LPRemovePreviewContainer_15403648696980.35276803274853286"></div>
<div id="LPTitle_15403648696980.1974260840697557" style="top: 0px; color: rgb(0, 120, 215); font-weight: 400; font-size: 21px; font-family: "wf_segoe-ui_light", "Segoe UI Light", "Segoe WP Light", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif; line-height: 21px;">
<a id="LPUrlAnchor_15403648696980.59037122274775" style="text-decoration: none;" href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx" target="_blank">amd-gfx Info Page - freedesktop.org</a></div>
<div id="LPMetadata_15403648696980.43033328175241337" style="margin: 10px 0px 16px; color: rgb(102, 102, 102); font-weight: 400; font-family: "wf_segoe-ui_normal", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif; font-size: 14px; line-height: 14px;">
lists.freedesktop.org</div>
<div id="LPDescription_15403648696980.07083429375985362" style="display: block; color: rgb(102, 102, 102); font-weight: 400; font-family: "wf_segoe-ui_normal", "Segoe UI", "Segoe WP", Tahoma, Arial, sans-serif; font-size: 14px; line-height: 20px; max-height: 100px; overflow: hidden;">
To see the collection of prior postings to the list, visit the amd-gfx Archives.. Using amd-gfx: To post a message to all the list members, send email to amd-gfx@lists.freedesktop.org. You can subscribe to the list, or change your existing subscription, in
 the sections below.</div>
</td>
</tr>
</tbody>
</table>
</div>
<br>
</div>
</span></font></div>
</div>
</div>
</body>
</html>