Hi Nitin, On Mon, Feb 24, 2025 at 12:01:04PM +0530, Nitin Gote wrote: > Sometimes engine reset fails because the engine resumes from an > incorrect RING_HEAD. Engine head failed to set to zero even after > writing into it. This is a timing issue and we experimented > different values and found out that 20ms delay works best based > on testing. > > So, add a 20ms delay to let engine resumes from correct RING_HEAD. > > Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13650 > Signed-off-by: Nitin Gote <nitin.r.gote@xxxxxxxxx> > --- > drivers/gpu/drm/i915/gt/intel_ring_submission.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/gpu/drm/i915/gt/intel_ring_submission.c b/drivers/gpu/drm/i915/gt/intel_ring_submission.c > index 6e9977b2d180..5576f000e965 100644 > --- a/drivers/gpu/drm/i915/gt/intel_ring_submission.c > +++ b/drivers/gpu/drm/i915/gt/intel_ring_submission.c > @@ -365,6 +365,13 @@ static void reset_prepare(struct intel_engine_cs *engine) > ENGINE_READ_FW(engine, RING_HEAD), > ENGINE_READ_FW(engine, RING_TAIL), > ENGINE_READ_FW(engine, RING_START)); > + /* > + * Sometimes engine head failed to set to zero even after writing into it. > + * Use 20ms delay to let engine resumes from correct RING_HEAD. > + * Experimented different values and determined that 20ms works best > + * based on testing. > + */ > + mdelay(20); Is there any extremely strong reason for using mdelay here, rather than any other delay function? Andi > if (!stop_ring(engine)) { > drm_err(&engine->i915->drm, > "failed to set %s head to zero " > -- > 2.25.1