[PATCH 04/19] drm/i915: Drop the fudge warning on ring restart for ctg/elk

Mika Kuoppala mika.kuoppala at linux.intel.com
Fri Aug 9 14:13:44 UTC 2019


Chris Wilson <chris at chris-wilson.co.uk> writes:

> Since we have already stopped the ring, cleared the ring, disabled the
> ring (and verifying the ring is clear), a later debug message that the
> ring is no longer clear serves no function. It appears it restarts
> anyway, and we verify that the ring started correctly afterwards.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  drivers/gpu/drm/i915/gt/intel_ringbuffer.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
> index aa2f06b80961..78b4235f9c0f 100644
> --- a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
> @@ -644,6 +644,7 @@ static int xcs_resume(struct intel_engine_cs *engine)
>  
>  	intel_uncore_forcewake_get(engine->uncore, FORCEWAKE_ALL);
>  
> +	/* WaClearRingBufHeadRegAtInit:ctg,elk */
>  	if (!stop_ring(engine)) {
>  		/* G45 ring initialization often fails to reset head to zero */
>  		DRM_DEBUG_DRIVER("%s head not reset to zero "
> @@ -675,19 +676,16 @@ static int xcs_resume(struct intel_engine_cs *engine)
>  	intel_engine_reset_breadcrumbs(engine);
>  
>  	/* Enforce ordering by reading HEAD register back */
> -	ENGINE_READ(engine, RING_HEAD);
> +	ENGINE_POSTING_READ(engine, RING_HEAD);
>  
> -	/* Initialize the ring. This must happen _after_ we've cleared the ring
> +	/*
> +	 * Initialize the ring. This must happen _after_ we've cleared the ring
>  	 * registers with the above sequence (the readback of the HEAD registers
>  	 * also enforces ordering), otherwise the hw might lose the new ring
> -	 * register values. */
> +	 * register values.
> +	 */
>  	ENGINE_WRITE(engine, RING_START, i915_ggtt_offset(ring->vma));
>  
> -	/* WaClearRingBufHeadRegAtInit:ctg,elk */
> -	if (ENGINE_READ(engine, RING_HEAD))
> -		DRM_DEBUG_DRIVER("%s initialization failed [head=%08x], fudging\n",
> -				 engine->name, ENGINE_READ(engine, RING_HEAD));
> -

stop_ring seems to contain enough paranoia for this wa and plenty
to spare. A really paranoid could glue the debug to the posting
read above to hit two flies with one stroke.

But after two retries on stopping and clearing the head, you
really have to be haunted by it.

Acked-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>

>  	/* Check that the ring offsets point within the ring! */
>  	GEM_BUG_ON(!intel_ring_offset_valid(ring, ring->head));
>  	GEM_BUG_ON(!intel_ring_offset_valid(ring, ring->tail));
> -- 
> 2.23.0.rc1
>
> _______________________________________________
> Intel-gfx-trybot mailing list
> Intel-gfx-trybot at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx-trybot


More information about the Intel-gfx-trybot mailing list