Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Wajdeczko <michal.wajdeczko@intel.com>
To: intel-xe@lists.freedesktop.org
Subject: [PATCH 5/6] drm/xe/vf: Cache value of the GMDID register
Date: Thu, 23 May 2024 21:22:39 +0200	[thread overview]
Message-ID: <20240523192240.844-6-michal.wajdeczko@intel.com> (raw)
In-Reply-To: <20240523192240.844-1-michal.wajdeczko@intel.com>

Read and cache value of the GMDID register as part of the config
query that VF driver is doing over MMIO.

While the VF driver likely already obtained the value of the GMDID
register once during the early driver probe, we couldn't cache it
then as the GT structures were not ready yet.

Cache it now, in case the driver needs it later when the GuC MMIO
communication, required to query GMDID from GuC, could be no longer
desired as it will be replaced by the CTB communication.

While around, assert that we will query GMDID only when applicable.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/xe_gt_sriov_vf.c       | 17 +++++++++++++++++
 drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h |  2 ++
 2 files changed, 19 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
index 5b8771f831f7..347ab7060588 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf.c
@@ -284,6 +284,11 @@ static int guc_action_query_single_klv64(struct xe_guc *guc, u32 key, u64 *value
 	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
@@ -300,6 +305,7 @@ u32 xe_gt_sriov_vf_gmdid(struct xe_gt *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);
@@ -409,6 +415,14 @@ static int vf_get_submission_cfg(struct xe_gt *gt)
 	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
@@ -436,6 +450,9 @@ int xe_gt_sriov_vf_query_config(struct xe_gt *gt)
 	if (unlikely(err))
 		return err;
 
+	if (has_gmdid(xe))
+		vf_cache_gmdid(gt);
+
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
index 519492f4b7d0..a57f13b5afcd 100644
--- a/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_vf_types.h
@@ -52,6 +52,8 @@ struct xe_gt_sriov_vf_selfconfig {
  * 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. */
-- 
2.43.0


  parent reply	other threads:[~2024-05-23 19:23 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-23 19:22 [PATCH 0/6] VF: Use the runtime registers Michal Wajdeczko
2024-05-23 19:22 ` [PATCH 1/6] drm/xe/vf: Use register values obtained from the PF Michal Wajdeczko
2024-05-23 21:28   ` Matt Roper
2024-05-23 19:22 ` [PATCH 2/6] drm/xe/guc: Add GLOBAL_CFG_GMD_ID KLV definition Michal Wajdeczko
2024-05-23 20:50   ` Matt Roper
2024-05-23 19:22 ` [PATCH 3/6] drm/xe/vf: Obtain value of GMDID register from GuC Michal Wajdeczko
2024-05-23 20:52   ` Matt Roper
2024-05-23 19:22 ` [PATCH 4/6] drm/xe/vf: Provide early access to GMDID register Michal Wajdeczko
2024-05-23 21:08   ` Matt Roper
2024-05-23 21:17     ` Matt Roper
2024-05-23 21:43       ` Michal Wajdeczko
2024-05-23 22:30   ` [PATCH v2 " Michal Wajdeczko
2024-05-23 19:22 ` Michal Wajdeczko [this message]
2024-05-23 21:20   ` [PATCH 5/6] drm/xe/vf: Cache value of the " Matt Roper
2024-05-23 19:22 ` [PATCH 6/6] drm/xe/vf: Treat GMDID as another runtime register Michal Wajdeczko
2024-05-23 21:21   ` Matt Roper
2024-05-23 19:29 ` ✓ CI.Patch_applied: success for VF: Use the runtime registers Patchwork
2024-05-23 19:29 ` ✓ CI.checkpatch: " Patchwork
2024-05-23 19:30 ` ✓ CI.KUnit: " Patchwork
2024-05-23 19:41 ` ✓ CI.Build: " Patchwork
2024-05-23 19:44 ` ✓ CI.Hooks: " Patchwork
2024-05-23 19:45 ` ✓ CI.checksparse: " Patchwork
2024-05-23 23:05 ` ✓ CI.Patch_applied: success for VF: Use the runtime registers (rev2) Patchwork
2024-05-23 23:06 ` ✓ CI.checkpatch: " Patchwork
2024-05-23 23:07 ` ✓ CI.KUnit: " Patchwork
2024-05-23 23:18 ` ✓ CI.Build: " Patchwork
2024-05-23 23:19 ` ✗ CI.FULL: failure for VF: Use the runtime registers Patchwork
2024-05-23 23:21 ` ✓ CI.Hooks: success for VF: Use the runtime registers (rev2) Patchwork
2024-05-23 23:22 ` ✓ CI.checksparse: " Patchwork
2024-05-23 23:49 ` ✓ CI.BAT: " Patchwork
2024-05-24  2:10 ` ✗ CI.FULL: failure " Patchwork
2024-05-24  7:50   ` Michal Wajdeczko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240523192240.844-6-michal.wajdeczko@intel.com \
    --to=michal.wajdeczko@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox