]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/xe/vf: Boostrap all GTs immediately after MMIO init
authorDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Tue, 3 Jun 2025 23:54:35 +0000 (16:54 -0700)
committerDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Fri, 6 Jun 2025 15:33:18 +0000 (08:33 -0700)
Currently we perform the bootstrap for the primary GT early on during
device init, while the media GT bootstrap happens when we try and fetch
the hwconfig table. For consistency, move the bootstrap of the media GT
happen at the same time as the primary GT, so that all the subsequent
code can rely on both GTs being in the same state.

v2: Also drop config query from min_guc_load since we now do it
    early (Michal)

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Link: https://lore.kernel.org/r/20250603235432.720833-8-daniele.ceraolospurio@intel.com
drivers/gpu/drm/xe/xe_device.c
drivers/gpu/drm/xe/xe_guc.c

index d4b6e623aa48b778f06e8dc8ca56d5f18b122f66..7d9a31868ea99021eaba1a6245691cf95a12c0f9 100644 (file)
@@ -802,18 +802,19 @@ int xe_device_probe(struct xe_device *xe)
                 * be performed.
                 */
                xe_gt_mmio_init(gt);
-       }
 
-       for_each_tile(tile, xe, id) {
                if (IS_SRIOV_VF(xe)) {
-                       xe_guc_comm_init_early(&tile->primary_gt->uc.guc);
-                       err = xe_gt_sriov_vf_bootstrap(tile->primary_gt);
+                       xe_guc_comm_init_early(&gt->uc.guc);
+                       err = xe_gt_sriov_vf_bootstrap(gt);
                        if (err)
                                return err;
-                       err = xe_gt_sriov_vf_query_config(tile->primary_gt);
+                       err = xe_gt_sriov_vf_query_config(gt);
                        if (err)
                                return err;
                }
+       }
+
+       for_each_tile(tile, xe, id) {
                err = xe_ggtt_init_early(tile->mem.ggtt);
                if (err)
                        return err;
index 52453845d1bd311110e2a08ab4695017b9d18a91..209e5d53c290c7f5d5402aaaded61b273745f1aa 100644 (file)
@@ -1102,14 +1102,6 @@ static int vf_guc_min_load_for_hwconfig(struct xe_guc *guc)
        struct xe_gt *gt = guc_to_gt(guc);
        int ret;
 
-       ret = xe_gt_sriov_vf_bootstrap(gt);
-       if (ret)
-               return ret;
-
-       ret = xe_gt_sriov_vf_query_config(gt);
-       if (ret)
-               return ret;
-
        ret = xe_guc_hwconfig_init(guc);
        if (ret)
                return ret;