return 0;
}
+static bool has_gmdid(struct xe_device *xe)
+{
+ return GRAPHICS_VERx100(xe) >= 1270;
+}
+
/**
* xe_gt_sriov_vf_gmdid - Query GMDID over MMIO.
* @gt: the &xe_gt
int err;
xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
+ xe_gt_assert(gt, !GRAPHICS_VERx100(gt_to_xe(gt)) || has_gmdid(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);
return config->num_ctxs ? 0 : -ENODATA;
}
+static void vf_cache_gmdid(struct xe_gt *gt)
+{
+ xe_gt_assert(gt, has_gmdid(gt_to_xe(gt)));
+ xe_gt_assert(gt, IS_SRIOV_VF(gt_to_xe(gt)));
+
+ gt->sriov.vf.runtime.gmdid = xe_gt_sriov_vf_gmdid(gt);
+}
+
/**
* xe_gt_sriov_vf_query_config - Query SR-IOV config data over MMIO.
* @gt: the &xe_gt
if (unlikely(err))
return err;
+ if (has_gmdid(xe))
+ vf_cache_gmdid(gt);
+
return 0;
}
* struct xe_gt_sriov_vf_runtime - VF runtime data.
*/
struct xe_gt_sriov_vf_runtime {
+ /** @gmdid: cached value of the GDMID register. */
+ u32 gmdid;
/** @regs_size: size of runtime register array. */
u32 regs_size;
/** @num_regs: number of runtime registers in the array. */