drm/xe: Split GuC communication initialization
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Thu, 11 Jan 2024 16:20:51 +0000 (17:20 +0100)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Thu, 11 Jan 2024 18:14:19 +0000 (19:14 +0100)
Soon we will be trying to communicate with the GuC firmware very
early during VF driver probe, before we finish normal init steps.
Split GuC communication initialization code so the GuC MMIO based
communication xe_guc_mmio_send() functions will work where needed.

Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://lore.kernel.org/r/20240111162051.585-1-michal.wajdeczko@intel.com
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
drivers/gpu/drm/xe/xe_guc.c
drivers/gpu/drm/xe/xe_guc.h

index 6e73ebf6725148996faf1d73f15611b7250bf53a..0fd9b5efe4c2d6b7a5886415754365e6596ffc7b 100644 (file)
@@ -243,6 +243,22 @@ static void guc_fini(struct drm_device *drm, void *arg)
        xe_force_wake_put(gt_to_fw(guc_to_gt(guc)), XE_FORCEWAKE_ALL);
 }
 
+/**
+ * xe_guc_comm_init_early - early initialization of GuC communication
+ * @guc: the &xe_guc to initialize
+ *
+ * Must be called prior to first MMIO communication with GuC firmware.
+ */
+void xe_guc_comm_init_early(struct xe_guc *guc)
+{
+       struct xe_gt *gt = guc_to_gt(guc);
+
+       if (xe_gt_is_media_type(gt))
+               guc->notify_reg = MED_GUC_HOST_INTERRUPT;
+       else
+               guc->notify_reg = GUC_HOST_INTERRUPT;
+}
+
 int xe_guc_init(struct xe_guc *guc)
 {
        struct xe_device *xe = guc_to_xe(guc);
@@ -283,10 +299,7 @@ int xe_guc_init(struct xe_guc *guc)
 
        guc_init_params(guc);
 
-       if (xe_gt_is_media_type(gt))
-               guc->notify_reg = MED_GUC_HOST_INTERRUPT;
-       else
-               guc->notify_reg = GUC_HOST_INTERRUPT;
+       xe_guc_comm_init_early(guc);
 
        xe_uc_fw_change_status(&guc->fw, XE_UC_FIRMWARE_LOADABLE);
 
index d3e49e7fd7c34f15867fd612a07d3f04161ab60b..94f2dc5f6f90bade89eeb1eab8602a80cf52e7ba 100644 (file)
@@ -13,6 +13,7 @@
 
 struct drm_printer;
 
+void xe_guc_comm_init_early(struct xe_guc *guc);
 int xe_guc_init(struct xe_guc *guc);
 int xe_guc_init_post_hwconfig(struct xe_guc *guc);
 int xe_guc_post_load_init(struct xe_guc *guc);