/*
         * Wait for the GuC to start up.
         * NB: Docs recommend not using the interrupt for completion.
-        * Measurements indicate this should take no more than 20ms, so a
+        * Measurements indicate this should take no more than 20ms
+        * (assuming the GT clock is at maximum frequency). So, a
         * timeout here indicates that the GuC has failed and is unusable.
         * (Higher levels of the driver may decide to reset the GuC and
         * attempt the ucode load again if this happens.)
+        *
+        * FIXME: There is a known (but exceedingly unlikely) race condition
+        * where the asynchronous frequency management code could reduce
+        * the GT clock while a GuC reload is in progress (during a full
+        * GT reset). A fix is in progress but there are complex locking
+        * issues to be resolved. In the meantime bump the timeout to
+        * 200ms. Even at slowest clock, this should be sufficient. And
+        * in the working case, a larger timeout makes no difference.
         */
-       ret = wait_for(guc_ready(uncore, &status), 100);
+       ret = wait_for(guc_ready(uncore, &status), 200);
        if (ret) {
                struct drm_device *drm = &uncore->i915->drm;