@@ -1455,6 +1455,29 @@ u64 xe_gt_sriov_pf_config_get_lmem(struct xe_gt *gt, unsigned int vfid)
return size;
}
+/**
+ * xe_gt_sriov_pf_config_get_lmem_addr - Get VF's LMEM starting addr.
+ * @gt: the &xe_gt
+ * @vfid: the VF identifier
+ *
+ * This function can only be called on PF.
+ *
+ * Return: VF's starting address in LMEM.
+ */
+dma_addr_t xe_gt_sriov_pf_config_get_lmem_addr(struct xe_gt *gt,
+ unsigned int vfid)
+{
+ struct xe_gt_sriov_config *config;
+ dma_addr_t addr;
+
+ mutex_lock(xe_gt_sriov_pf_master_mutex(gt));
+ config = pf_pick_vf_config(gt, vfid);
+ addr = xe_bo_addr(config->lmem_obj, 0, PAGE_SIZE);
+ mutex_unlock(xe_gt_sriov_pf_master_mutex(gt));
+
+ return addr;
+}
+
/**
* xe_gt_sriov_pf_config_set_lmem - Provision VF with LMEM.
* @gt: the &xe_gt (can't be media)
@@ -31,6 +31,7 @@ int xe_gt_sriov_pf_config_set_fair_dbs(struct xe_gt *gt, unsigned int vfid, unsi
int xe_gt_sriov_pf_config_bulk_set_dbs(struct xe_gt *gt, unsigned int vfid, unsigned int num_vfs,
u32 num_dbs);
+dma_addr_t xe_gt_sriov_pf_config_get_lmem_addr(struct xe_gt *gt, unsigned int vfid);
u64 xe_gt_sriov_pf_config_get_lmem(struct xe_gt *gt, unsigned int vfid);
int xe_gt_sriov_pf_config_set_lmem(struct xe_gt *gt, unsigned int vfid, u64 size);
int xe_gt_sriov_pf_config_set_fair_lmem(struct xe_gt *gt, unsigned int vfid, unsigned int num_vfs);
To properly import a dmabuf that is associated with a VF (or that originates in a Guest VM that includes a VF), we need to know where in LMEM the VF's allocated region starts. The function introduced in this patch does just that by returning the DPA associated with the BO that backs the VF's region in LMEM. Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com> --- drivers/gpu/drm/xe/xe_gt_sriov_pf_config.c | 23 ++++++++++++++++++++++ drivers/gpu/drm/xe/xe_gt_sriov_pf_config.h | 1 + 2 files changed, 24 insertions(+)