aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Winiarski <[email protected]>2023-12-05 02:33:00 +0100
committerRodrigo Vivi <[email protected]>2023-12-21 11:45:11 -0500
commit51fb5ef209b988a3acee3bc7de04bb70aec51ff5 (patch)
treea344c5e0dfc2ea472ab81761e43d1bee71b8267d
parent4f122766f9043c30b879b44f7dc2ca540b5422cd (diff)
drm/xe: Don't "peek" into GMD_ID
Now that MMIO init got moved to device early, we can use regular xe_mmio_read helpers to get to GMD_ID register. Signed-off-by: Michał Winiarski <[email protected]> Reviewed-by: Matthew Brost <[email protected]> Reviewed-by: Lucas De Marchi <[email protected]> Signed-off-by: Rodrigo Vivi <[email protected]>
-rw-r--r--drivers/gpu/drm/xe/xe_pci.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index d1b8f268ce09..b2e87746e8d8 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -21,6 +21,7 @@
#include "xe_drv.h"
#include "xe_gt.h"
#include "xe_macros.h"
+#include "xe_mmio.h"
#include "xe_module.h"
#include "xe_pci_types.h"
#include "xe_pm.h"
@@ -444,26 +445,22 @@ find_subplatform(const struct xe_device *xe, const struct xe_device_desc *desc)
return NULL;
}
-static void peek_gmdid(struct xe_device *xe, u32 gmdid_offset, u32 *ver, u32 *revid)
+enum xe_gmdid_type {
+ GMDID_GRAPHICS,
+ GMDID_MEDIA
+};
+
+static void read_gmdid(struct xe_device *xe, enum xe_gmdid_type type, u32 *ver, u32 *revid)
{
- struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
- void __iomem *map = pci_iomap_range(pdev, 0, gmdid_offset, sizeof(u32));
+ struct xe_gt *gt = xe_root_mmio_gt(xe);
+ struct xe_reg gmdid_reg = GMD_ID;
u32 val;
- if (!map) {
- drm_err(&xe->drm, "Failed to read GMD_ID (%#x) from PCI BAR.\n",
- gmdid_offset);
- *ver = 0;
- *revid = 0;
+ if (type == GMDID_MEDIA)
+ gmdid_reg.addr += MEDIA_GT_GSI_OFFSET;
- return;
- }
-
- val = ioread32(map);
- pci_iounmap(pdev, map);
-
- *ver = REG_FIELD_GET(GMD_ID_ARCH_MASK, val) * 100 +
- REG_FIELD_GET(GMD_ID_RELEASE_MASK, val);
+ 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);
}
@@ -496,7 +493,8 @@ static void handle_gmdid(struct xe_device *xe,
{
u32 ver;
- peek_gmdid(xe, GMD_ID.addr, &ver, graphics_revid);
+ read_gmdid(xe, GMDID_GRAPHICS, &ver, graphics_revid);
+
for (int i = 0; i < ARRAY_SIZE(graphics_ip_map); i++) {
if (ver == graphics_ip_map[i].ver) {
xe->info.graphics_verx100 = ver;
@@ -511,7 +509,7 @@ static void handle_gmdid(struct xe_device *xe,
ver / 100, ver % 100);
}
- peek_gmdid(xe, GMD_ID.addr + 0x380000, &ver, media_revid);
+ read_gmdid(xe, GMDID_MEDIA, &ver, media_revid);
/* Media may legitimately be fused off / not present */
if (ver == 0)