<div dir="ltr"><div>Thanks. I'll push both patches with emit_ib_size updated for this patch.<br></div><div><br></div><div>Marek<br></div><div><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jun 27, 2019 at 3:50 AM zhoucm1 <<a href="mailto:zhoucm1@amd.com">zhoucm1@amd.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">any reason for not care .emit_ib_size in this one?<br>
<br>
-David<br>
<br>
<br>
On 2019年06月27日 06:35, Marek Olšák wrote:<br>
> From: Marek Olšák <<a href="mailto:marek.olsak@amd.com" target="_blank">marek.olsak@amd.com</a>><br>
><br>
> Signed-off-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com" target="_blank">marek.olsak@amd.com</a>><br>
> ---<br>
>   drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 17 +++++++++++++++++<br>
>   1 file changed, 17 insertions(+)<br>
><br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c<br>
> index 6baaa65a1daa..5b807a19bbbf 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c<br>
> @@ -4257,20 +4257,36 @@ static void gfx_v10_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,<br>
>   }<br>
>   <br>
>   static void gfx_v10_0_ring_emit_ib_compute(struct amdgpu_ring *ring,<br>
>                                          struct amdgpu_job *job,<br>
>                                          struct amdgpu_ib *ib,<br>
>                                          uint32_t flags)<br>
>   {<br>
>       unsigned vmid = AMDGPU_JOB_GET_VMID(job);<br>
>       u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);<br>
>   <br>
> +     /* Currently, there is a high possibility to get wave ID mismatch<br>
> +      * between ME and GDS, leading to a hw deadlock, because ME generates<br>
> +      * different wave IDs than the GDS expects. This situation happens<br>
> +      * randomly when at least 5 compute pipes use GDS ordered append.<br>
> +      * The wave IDs generated by ME are also wrong after suspend/resume.<br>
> +      * Those are probably bugs somewhere else in the kernel driver.<br>
> +      *<br>
> +      * Writing GDS_COMPUTE_MAX_WAVE_ID resets wave ID counters in ME and<br>
> +      * GDS to 0 for this ring (me/pipe).<br>
> +      */<br>
> +     if (ib->flags & AMDGPU_IB_FLAG_RESET_GDS_MAX_WAVE_ID) {<br>
> +             amdgpu_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1));<br>
> +             amdgpu_ring_write(ring, mmGDS_COMPUTE_MAX_WAVE_ID);<br>
> +             amdgpu_ring_write(ring, ring->adev->gds.gds_compute_max_wave_id);<br>
> +     }<br>
> +<br>
>       amdgpu_ring_write(ring, PACKET3(PACKET3_INDIRECT_BUFFER, 2));<br>
>       BUG_ON(ib->gpu_addr & 0x3); /* Dword align */<br>
>       amdgpu_ring_write(ring,<br>
>   #ifdef __BIG_ENDIAN<br>
>                               (2 << 0) |<br>
>   #endif<br>
>                               lower_32_bits(ib->gpu_addr));<br>
>       amdgpu_ring_write(ring, upper_32_bits(ib->gpu_addr));<br>
>       amdgpu_ring_write(ring, control);<br>
>   }<br>
> @@ -5103,20 +5119,21 @@ static void gfx_v10_0_set_rlc_funcs(struct amdgpu_device *adev)<br>
>       }<br>
>   }<br>
>   <br>
>   static void gfx_v10_0_set_gds_init(struct amdgpu_device *adev)<br>
>   {<br>
>       /* init asic gds info */<br>
>       switch (adev->asic_type) {<br>
>       case CHIP_NAVI10:<br>
>       default:<br>
>               adev->gds.gds_size = 0x10000;<br>
> +             adev->gds.gds_compute_max_wave_id = 0x4ff;<br>
>               adev->gds.vgt_gs_max_wave_id = 0x3ff;<br>
>               break;<br>
>       }<br>
>   <br>
>       adev->gds.gws_size = 64;<br>
>       adev->gds.oa_size = 16;<br>
>   }<br>
>   <br>
>   static void gfx_v10_0_set_user_wgp_inactive_bitmap_per_sh(struct amdgpu_device *adev,<br>
>                                                         u32 bitmap)<br>
<br>
</blockquote></div></div>