]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/vf: Enable VF migration only on supported GuC versions
authorSatyanarayana K V P <satyanarayana.k.v.p@intel.com>
Mon, 1 Dec 2025 09:50:13 +0000 (15:20 +0530)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Tue, 2 Dec 2025 15:11:24 +0000 (16:11 +0100)
Enable VF migration starting with GuC 70.54.0 (compatibility version
1.27.0) which supports additional VF2GUC_RESFIX_START message required
to handle migration recovery in a more robust way.

Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Tomasz Lis <tomasz.lis@intel.com>
Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Link: https://patch.msgid.link/20251201095011.21453-7-satyanarayana.k.v.p@intel.com
drivers/gpu/drm/xe/xe_sriov_vf.c

index 284ce37ca92d7ab8577051da8c55474129cc9c42..d56b8cfea50b155e04d21d63148783d328e60ff3 100644 (file)
@@ -170,6 +170,26 @@ void xe_sriov_vf_init_early(struct xe_device *xe)
        vf_migration_init_early(xe);
 }
 
+static bool vf_migration_init_late(struct xe_device *xe)
+{
+       struct xe_gt *gt = xe_root_mmio_gt(xe);
+       struct xe_uc_fw_version guc_version;
+
+       if (!xe_sriov_vf_migration_supported(xe))
+               return 0;
+
+       xe_gt_sriov_vf_guc_versions(gt, NULL, &guc_version);
+       if (MAKE_GUC_VER_STRUCT(guc_version) < MAKE_GUC_VER(1, 27, 0)) {
+               xe_sriov_vf_migration_disable(xe,
+                                             "requires GuC ABI >= 1.27.0, but only %u.%u.%u found",
+                                             guc_version.major, guc_version.minor,
+                                             guc_version.patch);
+               return 0;
+       }
+
+       return xe_sriov_vf_ccs_init(xe);
+}
+
 /**
  * xe_sriov_vf_init_late() - SR-IOV VF late initialization functions.
  * @xe: the &xe_device to initialize
@@ -180,7 +200,7 @@ void xe_sriov_vf_init_early(struct xe_device *xe)
  */
 int xe_sriov_vf_init_late(struct xe_device *xe)
 {
-       return xe_sriov_vf_ccs_init(xe);
+       return vf_migration_init_late(xe);
 }
 
 static int sa_info_vf_ccs(struct seq_file *m, void *data)