return NULL;
}
-static u32 peek_gmdid(struct xe_device *xe, u32 gmdid_offset)
+static void peek_gmdid(struct xe_device *xe, u32 gmdid_offset, 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));
- u32 ver;
+ u32 val;
if (!map) {
drm_err(&xe->drm, "Failed to read GMD_ID (%#x) from PCI BAR.\n",
gmdid_offset);
- return 0;
+ *ver = 0;
+ *revid = 0;
+
+ return;
}
- ver = ioread32(map);
+ val = ioread32(map);
pci_iounmap(pdev, map);
- return REG_FIELD_GET(GMD_ID_ARCH_MASK, ver) * 100 +
- REG_FIELD_GET(GMD_ID_RELEASE_MASK, ver);
+ *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);
}
/*
{
u32 ver;
- ver = peek_gmdid(xe, GMD_ID.addr);
- *graphics_revid = REG_FIELD_GET(GMD_ID_REVID, ver);
+ peek_gmdid(xe, GMD_ID.addr, &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;
ver / 100, ver % 100);
}
- ver = peek_gmdid(xe, GMD_ID.addr + 0x380000);
- *media_revid = REG_FIELD_GET(GMD_ID_REVID, ver);
+ peek_gmdid(xe, GMD_ID.addr + 0x380000, &ver, media_revid);
+
for (int i = 0; i < ARRAY_SIZE(media_ip_map); i++) {
if (ver == media_ip_map[i].ver) {
xe->info.media_verx100 = ver;