[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 15:06:21 UTC 2019


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

> Quoting Mika Kuoppala (2019-08-09 15:13:44)
>> 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.
>
> Haunted is an apt description for
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_6667/fi-elk-e7500/dmesg0.log
> Every time.

I almost did 'you never should see this debug firing' earlier.
That kind of assertions are torn apart so quick.

Like now, I am stunned in awe.

-Mika


More information about the Intel-gfx-trybot mailing list