> -----Original Message----- > From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf > Of Monk Liu > Sent: Tuesday, February 07, 2017 1:11 AM > To: amd-gfx at lists.freedesktop.org > 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 <Monk.Liu at amd.com> 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 <alexander.deucher at amd.com> > --- > 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 > amd-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx