> -----Original Message-----
> From: amd-gfx [mailto:[email protected]] On Behalf
> Of Monk Liu
> Sent: Tuesday, February 07, 2017 1:11 AM
> To: [email protected]
> Cc: Liu, Monk
> Subject: [PATCH 19/20] drm/amdgpu:use nop to clear ring buffer
> 
> this is for a fine GPU reset/resume, which should
> use nop clear ringbuffer prior to kickoff engine.
> 
> and also use the same clear macro in ring_init.
> 
> Change-Id: I7693891fd4431d64c025d052f1dd0ba797f2f0b7
> Signed-off-by: Monk Liu <[email protected]>

I'd suggest breaking this into two patches, one to add the new ring function 
and another to convert the IPs to use it.  With that fixed:
Reviewed-by: Alex Deucher <[email protected]>


> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 7 +++++++
>  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c    | 1 +
>  drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c   | 1 +
>  4 files changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> index 7bacf3c..37d8422 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> @@ -230,7 +230,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev,
> struct amdgpu_ring *ring,
>                       dev_err(adev->dev, "(%d) ring create failed\n", r);
>                       return r;
>               }
> -             memset((void *)ring->ring, 0, ring->ring_size);
> +             amdgpu_ring_clear_ring(ring);
>       }
>       ring->ptr_mask = (ring->ring_size / 4) - 1;
>       ring->max_dw = max_dw;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
> index 0e57b04..3fd4ce8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
> @@ -186,5 +186,12 @@ int amdgpu_ring_init(struct amdgpu_device *adev,
> struct amdgpu_ring *ring,
>                    unsigned ring_size, struct amdgpu_irq_src *irq_src,
>                    unsigned irq_type);
>  void amdgpu_ring_fini(struct amdgpu_ring *ring);
> +static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring)
> +{
> +     int i = 0;
> +     while (i <= ring->ptr_mask)
> +             ring->ring[i++] = ring->funcs->nop;
> +
> +}
> 
>  #endif
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> index 5f688d4..0ce00ff 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -4509,6 +4509,7 @@ static int gfx_v8_0_cp_gfx_resume(struct
> amdgpu_device *adev)
>       }
> 
>       /* start the ring */
> +     amdgpu_ring_clear_ring(ring);
>       gfx_v8_0_cp_gfx_start(adev);
>       ring->ready = true;
>       r = amdgpu_ring_test_ring(ring);
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
> b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
> index 9394ca6..d5206f5 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
> @@ -615,6 +615,7 @@ static int sdma_v3_0_gfx_resume(struct
> amdgpu_device *adev)
> 
>       for (i = 0; i < adev->sdma.num_instances; i++) {
>               ring = &adev->sdma.instance[i].ring;
> +             amdgpu_ring_clear_ring(ring);
>               wb_offset = (ring->rptr_offs * 4);
> 
>               mutex_lock(&adev->srbm_mutex);
> --
> 2.7.4
> 
> _______________________________________________
> amd-gfx mailing list
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to