drm/xe: Wait for success on guc done.
authorRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 12 Jan 2023 22:25:07 +0000 (17:25 -0500)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 12 Dec 2023 19:05:59 +0000 (14:05 -0500)
Rather than a constant check on proto and wait not busy,
let's wait for the expected success and then check the
protocol afterwards.

With this, we can now use the regular xe_mmio_wait32
and kill this local need for the wait_for.

Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
drivers/gpu/drm/xe/xe_guc.c

index 7e8451e60d2d3b79d840b5cee86be130956c535c..6ecf493c26b5e7a29d3019961ba978cd4c3cb25d 100644 (file)
 #include "i915_reg_defs.h"
 #include "gt/intel_gt_regs.h"
 
-#include <linux/delay.h>
-/*
- * FIXME: This header has been deemed evil and we need to kill it. Temporarily
- * including so we can use 'wait_for'.
- */
-#include "i915_utils.h"
-
 /* TODO: move to common file */
 #define GUC_PVC_MOCS_INDEX_MASK                REG_GENMASK(25, 24)
 #define PVC_MOCS_UC_INDEX              1
@@ -688,19 +681,17 @@ timeout:
        header = xe_mmio_read32(gt, reply_reg);
        if (FIELD_GET(GUC_HXG_MSG_0_TYPE, header) ==
            GUC_HXG_TYPE_NO_RESPONSE_BUSY) {
-#define done ({ header = xe_mmio_read32(gt, reply_reg); \
-               FIELD_GET(GUC_HXG_MSG_0_ORIGIN, header) != \
-               GUC_HXG_ORIGIN_GUC || \
-               FIELD_GET(GUC_HXG_MSG_0_TYPE, header) != \
-               GUC_HXG_TYPE_NO_RESPONSE_BUSY; })
 
-               ret = wait_for(done, 1000);
-               if (unlikely(ret))
-                       goto timeout;
+               ret = xe_mmio_wait32(gt, reply_reg,
+                                    FIELD_PREP(GUC_HXG_MSG_0_TYPE,
+                                               GUC_HXG_TYPE_RESPONSE_SUCCESS),
+                                    GUC_HXG_MSG_0_TYPE, 1000, &header);
+
                if (unlikely(FIELD_GET(GUC_HXG_MSG_0_ORIGIN, header) !=
-                                      GUC_HXG_ORIGIN_GUC))
+                            GUC_HXG_ORIGIN_GUC))
                        goto proto;
-#undef done
+               if (unlikely(ret))
+                       goto timeout;
        }
 
        if (FIELD_GET(GUC_HXG_MSG_0_TYPE, header) ==