return 0;
 }
 
+static bool
+can_use_semaphore_wait(struct i915_request *to, struct i915_request *from)
+{
+       return to->engine->gt->ggtt == from->engine->gt->ggtt;
+}
+
 static int
 emit_semaphore_wait(struct i915_request *to,
                    struct i915_request *from,
        const intel_engine_mask_t mask = READ_ONCE(from->engine)->mask;
        struct i915_sw_fence *wait = &to->submit;
 
+       if (!can_use_semaphore_wait(to, from))
+               goto await_fence;
+
        if (!intel_context_use_semaphores(to->context))
                goto await_fence;
 
         * immediate execution, and so we must wait until it reaches the
         * active slot.
         */
-       if (intel_engine_has_semaphores(to->engine) &&
+       if (can_use_semaphore_wait(to, from) &&
+           intel_engine_has_semaphores(to->engine) &&
            !i915_request_has_initial_breadcrumb(to)) {
                err = __emit_semaphore_wait(to, from, from->fence.seqno - 1);
                if (err < 0)