]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/xe/vf: Obtain value of GMDID register from GuC
authorMichal Wajdeczko <michal.wajdeczko@intel.com>
Thu, 23 May 2024 19:22:37 +0000 (21:22 +0200)
committerMichal Wajdeczko <michal.wajdeczko@intel.com>
Fri, 24 May 2024 08:02:28 +0000 (10:02 +0200)
VFs don't have access to the GMDID register and must obtain it
value using GuC VF ABI KLV query. Add function for doing that.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240523192240.844-4-michal.wajdeczko@intel.com
drivers/gpu/drm/xe/xe_gt_sriov_vf.c
drivers/gpu/drm/xe/xe_gt_sriov_vf.h

index 237486a80fb5e1bf02d90914ff1d6da6a1e80a8e..5b8771f831f7a66cc3916ba9fa614648ee2c4871 100644 (file)
@@ -284,6 +284,35 @@ static int guc_action_query_single_klv64(struct xe_guc *guc, u32 key, u64 *value
        return 0;
 }
 
+/**
+ * xe_gt_sriov_vf_gmdid - Query GMDID over MMIO.
+ * @gt: the &xe_gt
+ *
+ * This function is for VF use only.
+ *
+ * Return: value of GMDID KLV on success or 0 on failure.
+ */
+u32 xe_gt_sriov_vf_gmdid(struct xe_gt *gt)
+{
+       const char *type = xe_gt_is_media_type(gt) ? "media" : "graphics";
+       struct xe_guc *guc = &gt->uc.guc;
+       u32 value;
+       int err;
+
+       xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
+       xe_gt_assert(gt, gt->sriov.vf.guc_version.major > 1 || gt->sriov.vf.guc_version.minor >= 2);
+
+       err = guc_action_query_single_klv32(guc, GUC_KLV_GLOBAL_CFG_GMD_ID_KEY, &value);
+       if (unlikely(err)) {
+               xe_gt_sriov_err(gt, "Failed to obtain %s GMDID (%pe)\n",
+                               type, ERR_PTR(err));
+               return 0;
+       }
+
+       xe_gt_sriov_dbg(gt, "%s GMDID = %#x\n", type, value);
+       return value;
+}
+
 static int vf_get_ggtt_info(struct xe_gt *gt)
 {
        struct xe_gt_sriov_vf_selfconfig *config = &gt->sriov.vf.self_config;
index be69c1025320ad1b5ee3cd6d186837d4b03d285f..0391ed72a57053fc6f45ef926bc8ab7a97618e07 100644 (file)
@@ -17,6 +17,7 @@ int xe_gt_sriov_vf_query_config(struct xe_gt *gt);
 int xe_gt_sriov_vf_connect(struct xe_gt *gt);
 int xe_gt_sriov_vf_query_runtime(struct xe_gt *gt);
 
+u32 xe_gt_sriov_vf_gmdid(struct xe_gt *gt);
 u16 xe_gt_sriov_vf_guc_ids(struct xe_gt *gt);
 u32 xe_gt_sriov_vf_read32(struct xe_gt *gt, struct xe_reg reg);