[Intel-xe] [PATCH v2 2/2] drm/xe: Fix GMD_ID to revid

Lucas De Marchi lucas.demarchi at intel.com
Tue Jun 13 18:03:56 UTC 2023


In order to calculate revid, let peek_gmdid() return the raw value of
the register, then calculate arch, release and rev. Also rename the
variables to make clear what are the as signed values.

While at it, add _MASK suffix to GMD_ID_REVID for consistency with the
other fields.

v2: Add _MASK suffix to GMD_ID_REVID (Gustavo)

Reviewed-by: Gustavo Sousa <gustavo.sousa at intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h |  2 +-
 drivers/gpu/drm/xe/xe_pci.c          | 29 +++++++++++++++-------------
 drivers/gpu/drm/xe/xe_pci_types.h    |  2 +-
 3 files changed, 18 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index 0f920175526e..5b2ba95b0696 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -32,7 +32,7 @@
 #define GMD_ID					XE_REG(0xd8c)
 #define   GMD_ID_ARCH_MASK			REG_GENMASK(31, 22)
 #define   GMD_ID_RELEASE_MASK			REG_GENMASK(21, 14)
-#define   GMD_ID_REVID				REG_GENMASK(5, 0)
+#define   GMD_ID_REVID_MASK			REG_GENMASK(5, 0)
 
 #define FORCEWAKE_ACK_GT_MTL			XE_REG(0xdfc)
 
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index bd1f59b49928..c71d8f223d35 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -407,8 +407,7 @@ static u32 peek_gmdid(struct xe_device *xe, u32 gmdid_offset)
 	ver = ioread32(map);
 	pci_iounmap(pdev, map);
 
-	return REG_FIELD_GET(GMD_ID_ARCH_MASK, ver) * 100 +
-		REG_FIELD_GET(GMD_ID_RELEASE_MASK, ver);
+	return ver;
 }
 
 /*
@@ -442,13 +441,15 @@ static void handle_gmdid(struct xe_device *xe,
 			 u32 *graphics_revid,
 			 u32 *media_revid)
 {
-	u32 ver;
+	u32 verx100, gmdid;
 
-	ver = peek_gmdid(xe, GMD_ID.addr);
-	*graphics_revid = REG_FIELD_GET(GMD_ID_REVID, ver);
+	gmdid = peek_gmdid(xe, GMD_ID.addr);
+	verx100 = REG_FIELD_GET(GMD_ID_ARCH_MASK, gmdid) * 100 +
+		  REG_FIELD_GET(GMD_ID_RELEASE_MASK, gmdid);
+	*graphics_revid = REG_FIELD_GET(GMD_ID_REVID_MASK, gmdid);
 	for (int i = 0; i < ARRAY_SIZE(graphics_ip_map); i++) {
-		if (ver == graphics_ip_map[i].ver) {
-			xe->info.graphics_verx100 = ver;
+		if (verx100 == graphics_ip_map[i].verx100) {
+			xe->info.graphics_verx100 = verx100;
 			*graphics = graphics_ip_map[i].ip;
 
 			break;
@@ -457,14 +458,16 @@ static void handle_gmdid(struct xe_device *xe,
 
 	if (!xe->info.graphics_verx100) {
 		drm_err(&xe->drm, "Hardware reports unknown graphics version %u.%02u\n",
-			ver / 100, ver % 100);
+			verx100 / 100, verx100 % 100);
 	}
 
-	ver = peek_gmdid(xe, GMD_ID.addr + 0x380000);
-	*media_revid = REG_FIELD_GET(GMD_ID_REVID, ver);
+	gmdid = peek_gmdid(xe, GMD_ID.addr + 0x380000);
+	verx100 = REG_FIELD_GET(GMD_ID_ARCH_MASK, gmdid) * 100 +
+		  REG_FIELD_GET(GMD_ID_RELEASE_MASK, gmdid);
+	*media_revid = REG_FIELD_GET(GMD_ID_REVID_MASK, gmdid);
 	for (int i = 0; i < ARRAY_SIZE(media_ip_map); i++) {
-		if (ver == media_ip_map[i].ver) {
-			xe->info.media_verx100 = ver;
+		if (verx100 == media_ip_map[i].verx100) {
+			xe->info.media_verx100 = verx100;
 			*media = media_ip_map[i].ip;
 
 			break;
@@ -473,7 +476,7 @@ static void handle_gmdid(struct xe_device *xe,
 
 	if (!xe->info.media_verx100) {
 		drm_err(&xe->drm, "Hardware reports unknown media version %u.%02u\n",
-			ver / 100, ver % 100);
+			verx100 / 100, verx100 % 100);
 	}
 }
 
diff --git a/drivers/gpu/drm/xe/xe_pci_types.h b/drivers/gpu/drm/xe/xe_pci_types.h
index ba31b933eb8e..70858836cc5b 100644
--- a/drivers/gpu/drm/xe/xe_pci_types.h
+++ b/drivers/gpu/drm/xe/xe_pci_types.h
@@ -37,7 +37,7 @@ struct xe_media_desc {
 };
 
 struct gmdid_map {
-	unsigned int ver;
+	unsigned int verx100;
 	const void *ip;
 };
 
-- 
2.40.1



More information about the Intel-xe mailing list