drm/i915/gt: Increase a time to retry RING_HEAD reset
authorNitin Gote <nitin.r.gote@intel.com>
Tue, 17 Dec 2024 06:35:32 +0000 (12:05 +0530)
committerAndi Shyti <andi.shyti@linux.intel.com>
Wed, 18 Dec 2024 14:26:09 +0000 (15:26 +0100)
Issue seen again where engine resets fails because the engine resumes from
an incorrect RING_HEAD. HEAD is still not 0 even after writing into it.
This seems to be timing issue and we experimented different values from 5ms
to 50ms and found out that 50ms works best based on testing.
So, if write doesn't succeed at first then retry again.

v2: add a comment (Andi Shyti)

Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12806
Signed-off-by: Nitin Gote <nitin.r.gote@intel.com>
Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241217063532.2729031-1-nitin.r.gote@intel.com
drivers/gpu/drm/i915/gt/intel_ring_submission.c

index 32f3b52a183af69725fced5c4096459f9c85b35c..d56410863f269c780646b2399d1fac630c96475c 100644 (file)
@@ -230,8 +230,13 @@ static int xcs_resume(struct intel_engine_cs *engine)
 
        set_pp_dir(engine);
 
-       /* First wake the ring up to an empty/idle ring */
-       for ((kt) = ktime_get() + (2 * NSEC_PER_MSEC);
+       /*
+        * First wake the ring up to an empty/idle ring.
+        * Use 50ms of delay to let the engine write successfully
+        * for all platforms. Experimented with different values and
+        * determined that 50ms works best based on testing.
+        */
+       for ((kt) = ktime_get() + (50 * NSEC_PER_MSEC);
                        ktime_before(ktime_get(), (kt)); cpu_relax()) {
                /*
                 * In case of resets fails because engine resumes from