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 4/6] drm/xe/vf: Provide early access to GMDID register
Date: Thu, 23 May 2024 21:22:38 +0200	[thread overview]
Message-ID: <20240523192240.844-5-michal.wajdeczko@intel.com> (raw)
In-Reply-To: <20240523192240.844-1-michal.wajdeczko@intel.com>

VFs do not have direct access to the GMDID register and must obtain
its value from the GuC. Since we need GMDID value very early in the
driver probe flow, before we even start the full setup of GT and GuC
data structures, we must do some early initializations ourselves.

Additionally, since we also need GMDID for the media GT, which isn't
created yet, temporarly tweak the root GT type into MEDIA to allow
communication with the correct GuC, as only it can provide the value
of the media GMDID register.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/xe_pci.c | 47 ++++++++++++++++++++++++++++++++++---
 1 file changed, 44 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index ece410289f6c..eefac633dbc1 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -20,6 +20,8 @@
 #include "xe_device.h"
 #include "xe_drv.h"
 #include "xe_gt.h"
+#include "xe_gt_sriov_vf.h"
+#include "xe_guc.h"
 #include "xe_macros.h"
 #include "xe_mmio.h"
 #include "xe_module.h"
@@ -471,10 +473,49 @@ static void read_gmdid(struct xe_device *xe, enum xe_gmdid_type type, u32 *ver,
 
 	KUNIT_STATIC_STUB_REDIRECT(read_gmdid, xe, type, ver, revid);
 
-	if (type == GMDID_MEDIA)
-		gmdid_reg.addr += MEDIA_GT_GSI_OFFSET;
+	if (IS_SRIOV_VF(xe)) {
+		/*
+		 * To get the value of the GMDID register, VFs must obtain it
+		 * from the GuC using MMIO communication.
+		 *
+		 * Note that at this point the xe_gt is not fully uninitialized
+		 * and only basic access to MMIO registers is possible. To use
+		 * our existing GuC communication functions we must perform at
+		 * least basic xe_gt and xe_guc initialization.
+		 *
+		 * Since to obtain the value of GMDID_MEDIA we need to use the
+		 * media GuC, temporarly tweak the gt type.
+		 */
+		xe_gt_assert(gt, gt->info.type == XE_GT_TYPE_UNINITIALIZED);
+
+		if (type == GMDID_MEDIA) {
+			gt->info.id = 1;
+			gt->info.type = XE_GT_TYPE_MEDIA;
+		} else {
+			gt->info.id = 0;
+			gt->info.type = XE_GT_TYPE_MAIN;
+		}
+
+		xe_guc_comm_init_early(&gt->uc.guc);
+
+		/* don't bother with GMDID if failed to negotiate the GuC ABI */
+		val = xe_gt_sriov_vf_bootstrap(gt) ? 0 : xe_gt_sriov_vf_gmdid(gt);
+
+		/* undo */
+		gt->info.id = 0;
+		gt->info.type = XE_GT_TYPE_UNINITIALIZED;
+	} else {
+		/*
+		 * We need to apply the GSI offset explicitly here as at this
+		 * point the xe_gt is not fully uninitialized and only basic
+		 * access to MMIO registers is possible.
+		 */
+		if (type == GMDID_MEDIA)
+			gmdid_reg.addr += MEDIA_GT_GSI_OFFSET;
+
+		val = xe_mmio_read32(gt, gmdid_reg);
+	}
 
-	val = xe_mmio_read32(gt, gmdid_reg);
 	*ver = REG_FIELD_GET(GMD_ID_ARCH_MASK, val) * 100 + REG_FIELD_GET(GMD_ID_RELEASE_MASK, val);
 	*revid = REG_FIELD_GET(GMD_ID_REVID, val);
 }
-- 
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 ` Michal Wajdeczko [this message]
2024-05-23 21:08   ` [PATCH 4/6] drm/xe/vf: Provide early access to GMDID register 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 ` [PATCH 5/6] drm/xe/vf: Cache value of the " Michal Wajdeczko
2024-05-23 21:20   ` 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-5-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