Merge tag 'drm-intel-gt-next-2023-03-16' of git://anongit.freedesktop.org/drm/drm...
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / intel_uncore.c
index f4b3b20630182f040b02979e8a0c28c5b476fc77..e1e1f34490c8e465765c8a460b6dd667051325a6 100644 (file)
@@ -2748,14 +2748,25 @@ static void driver_initiated_flr(struct intel_uncore *uncore)
        /* Trigger the actual Driver-FLR */
        intel_uncore_rmw_fw(uncore, GU_CNTL, 0, DRIVERFLR);
 
+       /* Wait for hardware teardown to complete */
+       ret = intel_wait_for_register_fw(uncore, GU_CNTL,
+                                        DRIVERFLR, 0,
+                                        flr_timeout_ms);
+       if (ret) {
+               drm_err(&i915->drm, "Driver-FLR-teardown wait completion failed! %d\n", ret);
+               return;
+       }
+
+       /* Wait for hardware/firmware re-init to complete */
        ret = intel_wait_for_register_fw(uncore, GU_DEBUG,
                                         DRIVERFLR_STATUS, DRIVERFLR_STATUS,
                                         flr_timeout_ms);
        if (ret) {
-               drm_err(&i915->drm, "wait for Driver-FLR completion failed! %d\n", ret);
+               drm_err(&i915->drm, "Driver-FLR-reinit wait completion failed! %d\n", ret);
                return;
        }
 
+       /* Clear sticky completion status */
        intel_uncore_write_fw(uncore, GU_DEBUG, DRIVERFLR_STATUS);
 }