* [PATCH v10 0/2] lib/intel_device_info: get the xe .graphics_rel from GMD_ID
@ 2026-01-12 19:17 Xin Wang
2026-01-12 19:17 ` [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version " Xin Wang
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Xin Wang @ 2026-01-12 19:17 UTC (permalink / raw)
To: igt-dev; +Cc: Xin Wang
This series enables IGT to retrieve the accurate IP minor version
(graphics_rel) at runtime for xe platforms with GMD_ID support,
instead of relying on hardcoded values in the PCI device table.
Background:
-----------
Current IGT uses static PCI device tables with hardcoded graphics_rel
values. For Xe2 platforms, Different device instances may have
different graphics_rel (minor version) values
The kernel's GMD_ID ioctl provides accurate runtime IP version
information (ip_ver_major.ip_ver_minor) which should be used for
platform-specific workarounds and feature detection.
Solution:
---------
This series adds support to query xe device info at runtime:
Patch 1/2: Get runtime xe device graphics version from GMD_ID
- Populate graphics versions in xe_device from GMD_ID ioctl
- Cache device ipver by devid in global map for efficient lookup
- Provide xe_ipver_cache_lookup() API for other components
Patch 2/2: Query runtime xe device graphics versions
- Use runtime xe device ipver for Gen20+ platforms
- Use weak symbol linkage to avoid breaking static library builds
- Remove hardcoded graphics_rel from static table for xe platforms
Benefits:
---------
- Accurate IP version for platform-specific workarounds
- Proper feature detection for hardware variants
- Unified device info API between i915 and xe drivers
- No changes needed to existing test code
V2:
- set the graphics version info in xe_device_get() don't copy
the whole struct of the intel_device_info
- update the graphics_rel when the info is already in the cache
V3:
- Optimize the coding style
V4:
- add braces around the else statement body
V5:
- add new struct xe_device_ipver to hold the ipver info
- separate cache map to eliminate collision (Roper, Matthew D)
- changed function name to xe_ipver_cache_lookup() to avoid
confusion (Roper, Matthew D)
V6:
- optimize the coding style. (Summers, Stuart)
V7:
- rebased to latest mainline
Xin Wang (2):
lib/xe/xe_query: Get runtime xe device graphics version from GMD_ID
lib/intel_device_info: Query runtime xe device graphics versions
lib/intel_chipset.h | 6 +++++
lib/intel_device_info.c | 26 +++++++++++++++++---
lib/xe/xe_query.c | 54 ++++++++++++++++++++++++++++++++++++++++-
lib/xe/xe_query.h | 4 +++
4 files changed, 86 insertions(+), 4 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version from GMD_ID
2026-01-12 19:17 [PATCH v10 0/2] lib/intel_device_info: get the xe .graphics_rel from GMD_ID Xin Wang
@ 2026-01-12 19:17 ` Xin Wang
2026-01-15 8:00 ` Zbigniew Kempczyński
2026-01-12 19:17 ` [PATCH v10 2/2] lib/intel_device_info: Query runtime xe device graphics versions Xin Wang
` (3 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Xin Wang @ 2026-01-12 19:17 UTC (permalink / raw)
To: igt-dev; +Cc: Xin Wang, Kamil Konieczny, Matt Roper, Ravi Kumar V
This allows IGT to query the exact IP version for xe platforms.
Key changes:
- Add xe_device_ipver field to xe_device structure
- set the graphics versions based on the GMD_ID
- Cache device ipver in global map indexed by devid for efficient lookup
- Implement xe_ipver_cache_lookup() to retrieve cached ipver by devid
- Clean up cached device ipver when xe_device is released
V2:
- add new struct xe_device_ipver to hold the ipver info
- separate cache map to eliminate collision (Roper, Matthew D)
- changed function name to xe_ipver_cache_lookup() to avoid
confusion (Roper, Matthew D)
V3:
- optimize the coding style. (Summers, Stuart)
Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Xin Wang <x.wang@intel.com>
Reviewed-by: Ravi Kumar V <ravi.kumar.vodapalli@intel.com>
---
lib/intel_chipset.h | 6 +++++
lib/xe/xe_query.c | 54 ++++++++++++++++++++++++++++++++++++++++++++-
lib/xe/xe_query.h | 4 ++++
3 files changed, 63 insertions(+), 1 deletion(-)
diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
index cc2225110..424811f7c 100644
--- a/lib/intel_chipset.h
+++ b/lib/intel_chipset.h
@@ -100,6 +100,12 @@ struct intel_device_info {
const char *codename;
};
+struct xe_device_ipver {
+ uint32_t devid;
+ uint16_t graphics_ver;
+ uint16_t graphics_rel;
+};
+
const struct intel_device_info *intel_get_device_info(uint16_t devid) __attribute__((pure));
const struct intel_cmds_info *intel_get_cmds_info(uint16_t devid) __attribute__((pure));
diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c
index 981d76948..823a29f2d 100644
--- a/lib/xe/xe_query.c
+++ b/lib/xe/xe_query.c
@@ -210,6 +210,22 @@ static struct xe_device_cache {
struct igt_map *map;
} cache;
+static struct xe_ipver_cache {
+ pthread_mutex_t mutex;
+ struct igt_map *map;
+} xe_ipver;
+
+struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid)
+{
+ struct xe_device_ipver *ipver;
+
+ pthread_mutex_lock(&xe_ipver.mutex);
+ ipver = igt_map_search(xe_ipver.map, &devid);
+ pthread_mutex_unlock(&xe_ipver.mutex);
+
+ return ipver;
+}
+
static struct xe_device *find_in_cache_unlocked(int fd)
{
return igt_map_search(cache.map, &fd);
@@ -270,6 +286,24 @@ struct xe_device *xe_device_get(int fd)
for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
xe_dev->gt_mask |= (1ull << xe_dev->gt_list->gt_list[gt].gt_id);
+ /*
+ * Set graphics_ver and graphics_rel based on the main GT's GMD_ID.
+ * We should use the hardcoded value for the non-GMD_ID platforms (ip_ver_major == 0)
+ */
+ xe_dev->ipver.devid = 0;
+ for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++) {
+ if (xe_dev->gt_list->gt_list[gt].type == DRM_XE_QUERY_GT_TYPE_MAIN &&
+ xe_dev->gt_list->gt_list[gt].ip_ver_major) {
+ igt_debug("Setting graphics_ver to %u and graphics_rel to %u\n",
+ xe_dev->gt_list->gt_list[gt].ip_ver_major,
+ xe_dev->gt_list->gt_list[gt].ip_ver_minor);
+ xe_dev->ipver.graphics_ver = xe_dev->gt_list->gt_list[gt].ip_ver_major;
+ xe_dev->ipver.graphics_rel = xe_dev->gt_list->gt_list[gt].ip_ver_minor;
+ xe_dev->ipver.devid = xe_dev->dev_id;
+ break;
+ }
+ }
+
/* Tile IDs may be non-consecutive; keep a mask of valid IDs */
for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
xe_dev->tile_mask |= (1ull << xe_dev->gt_list->gt_list[gt].tile_id);
@@ -304,6 +338,11 @@ struct xe_device *xe_device_get(int fd)
prev = find_in_cache_unlocked(fd);
if (!prev) {
igt_map_insert(cache.map, &xe_dev->fd, xe_dev);
+ if (xe_dev->ipver.devid) {
+ pthread_mutex_lock(&xe_ipver.mutex);
+ igt_map_insert(xe_ipver.map, &xe_dev->ipver.devid, &xe_dev->ipver);
+ pthread_mutex_unlock(&xe_ipver.mutex);
+ }
} else {
xe_device_free(xe_dev);
xe_dev = prev;
@@ -315,7 +354,15 @@ struct xe_device *xe_device_get(int fd)
static void delete_in_cache(struct igt_map_entry *entry)
{
- xe_device_free((struct xe_device *)entry->data);
+ struct xe_device *xe_dev = (struct xe_device *)entry->data;
+
+ if (xe_dev->ipver.devid) {
+ pthread_mutex_lock(&xe_ipver.mutex);
+ igt_map_remove(xe_ipver.map, &xe_dev->ipver.devid, NULL);
+ pthread_mutex_unlock(&xe_ipver.mutex);
+ }
+
+ xe_device_free(xe_dev);
}
/**
@@ -365,13 +412,18 @@ static void xe_device_destroy_cache(void)
pthread_mutex_lock(&cache.cache_mutex);
igt_map_destroy(cache.map, delete_in_cache);
pthread_mutex_unlock(&cache.cache_mutex);
+ pthread_mutex_lock(&xe_ipver.mutex);
+ igt_map_destroy(xe_ipver.map, NULL);
+ pthread_mutex_unlock(&xe_ipver.mutex);
}
static void xe_device_cache_init(void)
{
pthread_mutex_init(&cache.cache_mutex, NULL);
+ pthread_mutex_init(&xe_ipver.mutex, NULL);
xe_device_destroy_cache();
cache.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
+ xe_ipver.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
}
#define xe_dev_FN(_NAME, _FIELD, _TYPE) \
diff --git a/lib/xe/xe_query.h b/lib/xe/xe_query.h
index d7a9f95f9..19690cff3 100644
--- a/lib/xe/xe_query.h
+++ b/lib/xe/xe_query.h
@@ -74,6 +74,9 @@ struct xe_device {
/** @dev_id: Device id of xe device */
uint16_t dev_id;
+
+ /** @ipver: Device ip version */
+ struct xe_device_ipver ipver;
};
#define xe_for_each_engine(__fd, __hwe) \
@@ -181,6 +184,7 @@ static inline void *xe_query_device(int fd, uint32_t type, uint32_t *size)
}
struct xe_device *xe_device_get(int fd);
+struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid);
void xe_device_put(int fd);
int xe_query_eu_count(int fd, int gt);
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v10 2/2] lib/intel_device_info: Query runtime xe device graphics versions
2026-01-12 19:17 [PATCH v10 0/2] lib/intel_device_info: get the xe .graphics_rel from GMD_ID Xin Wang
2026-01-12 19:17 ` [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version " Xin Wang
@ 2026-01-12 19:17 ` Xin Wang
2026-01-12 20:38 ` ✓ Xe.CI.BAT: success for lib/intel_device_info: get the xe .graphics_rel from GMD_ID Patchwork
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Xin Wang @ 2026-01-12 19:17 UTC (permalink / raw)
To: igt-dev; +Cc: Xin Wang, Kamil Konieczny, Matt Roper, Ravi Kumar V
For platforms with graphics_ver >= 20, query the runtime xe device ver
instead of relying solely on hardcoded values from the PCI device table.
This enables accurate IP minor version (graphics_rel) detection for
platforms like Xe2 where different steppings have different IP versions.
Implementation details:
- Use weak symbol linkage for xe_ipver_cache_lookup() to handle static
library compilation (libigt_chipset.a, libigt_device_scan.a) without
xe_query.c dependencies which are used for i915 tools (i915_perf and
intel_gpu_top)
- Provide a weak stub that returns NULL when xe_query is not linked
- For Gen20+ platforms, prefer runtime xe device versions over static data
- Fall back to PCI table if xe device info is unavailable
- Reset cache on query failure to allow retry
Remove hardcoded graphics_rel from static table entries for xe devices
as they will be populated at runtime from GMD_ID.
This unifies device info handling between i915 and xe drivers, enabling:
- Platform-specific workarounds based on accurate IP versions
- Consistent device info API across both drivers
Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Xin Wang <x.wang@intel.com>
Reviewed-by: Ravi Kumar V <ravi.kumar.vodapalli@intel.com>
---
lib/intel_device_info.c | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/lib/intel_device_info.c b/lib/intel_device_info.c
index 20147479a..3bc20ab68 100644
--- a/lib/intel_device_info.c
+++ b/lib/intel_device_info.c
@@ -3,6 +3,16 @@
#include "i915_pciids_local.h"
#include <strings.h> /* ffs() */
+#include <stddef.h>
+#include <string.h>
+
+/* Weak symbol stub - will be overridden if xe_query.c is linked */
+struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid) __attribute__((weak));
+
+struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid)
+{
+ return NULL;
+}
static const struct intel_device_info intel_generic_info = {
.graphics_ver = 0,
@@ -505,7 +515,6 @@ static const struct intel_device_info intel_pontevecchio_info = {
static const struct intel_device_info intel_lunarlake_info = {
.graphics_ver = 20,
- .graphics_rel = 4,
.display_ver = 20,
.has_4tile = true,
.has_flatccs = true,
@@ -517,7 +526,6 @@ static const struct intel_device_info intel_lunarlake_info = {
static const struct intel_device_info intel_battlemage_info = {
.graphics_ver = 20,
- .graphics_rel = 1,
.display_ver = 14,
.has_4tile = true,
.has_flatccs = true,
@@ -529,7 +537,6 @@ static const struct intel_device_info intel_battlemage_info = {
static const struct intel_device_info intel_pantherlake_info = {
.graphics_ver = 30,
- .graphics_rel = 0,
.display_ver = 30,
.has_4tile = true,
.has_flatccs = true,
@@ -700,6 +707,8 @@ const struct intel_device_info *intel_get_device_info(uint16_t devid)
{
static __thread const struct intel_device_info *cache = &intel_generic_info;
static __thread uint16_t cached_devid;
+ static __thread struct intel_device_info xe_dev_info;
+ struct xe_device_ipver *ipver;
int i;
if (cached_devid == devid)
@@ -714,6 +723,17 @@ const struct intel_device_info *intel_get_device_info(uint16_t devid)
cached_devid = devid;
cache = (void *)intel_device_match[i].match_data;
+ if (cache->graphics_ver >= 20) {
+ ipver = xe_ipver_cache_lookup(devid);
+ if (ipver && ipver->devid == devid) {
+ memcpy(&xe_dev_info, cache, sizeof(struct intel_device_info));
+ xe_dev_info.graphics_ver = ipver->graphics_ver;
+ xe_dev_info.graphics_rel = ipver->graphics_rel;
+ cache = &xe_dev_info;
+ } else {
+ cached_devid = 0;
+ }
+ }
out:
return cache;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* ✓ Xe.CI.BAT: success for lib/intel_device_info: get the xe .graphics_rel from GMD_ID
2026-01-12 19:17 [PATCH v10 0/2] lib/intel_device_info: get the xe .graphics_rel from GMD_ID Xin Wang
2026-01-12 19:17 ` [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version " Xin Wang
2026-01-12 19:17 ` [PATCH v10 2/2] lib/intel_device_info: Query runtime xe device graphics versions Xin Wang
@ 2026-01-12 20:38 ` Patchwork
2026-01-12 20:50 ` ✗ i915.CI.BAT: failure " Patchwork
2026-01-13 3:22 ` ✓ Xe.CI.Full: success " Patchwork
4 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2026-01-12 20:38 UTC (permalink / raw)
To: Xin Wang; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 1491 bytes --]
== Series Details ==
Series: lib/intel_device_info: get the xe .graphics_rel from GMD_ID
URL : https://patchwork.freedesktop.org/series/159978/
State : success
== Summary ==
CI Bug Log - changes from XEIGT_8697_BAT -> XEIGTPW_14326_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (12 -> 12)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in XEIGTPW_14326_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@xe_waitfence@reltime:
- bat-dg2-oem2: [PASS][1] -> [FAIL][2] ([Intel XE#6520])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/bat-dg2-oem2/igt@xe_waitfence@reltime.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/bat-dg2-oem2/igt@xe_waitfence@reltime.html
[Intel XE#6520]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6520
Build changes
-------------
* IGT: IGT_8697 -> IGTPW_14326
* Linux: xe-4368-e9383891a008f23b432b7b3c4ca2d7dd0f49824d -> xe-4370-fb2e525015f1b65b83809995601ea7827ee08ab9
IGTPW_14326: 14326
IGT_8697: 8697
xe-4368-e9383891a008f23b432b7b3c4ca2d7dd0f49824d: e9383891a008f23b432b7b3c4ca2d7dd0f49824d
xe-4370-fb2e525015f1b65b83809995601ea7827ee08ab9: fb2e525015f1b65b83809995601ea7827ee08ab9
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/index.html
[-- Attachment #2: Type: text/html, Size: 2067 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* ✗ i915.CI.BAT: failure for lib/intel_device_info: get the xe .graphics_rel from GMD_ID
2026-01-12 19:17 [PATCH v10 0/2] lib/intel_device_info: get the xe .graphics_rel from GMD_ID Xin Wang
` (2 preceding siblings ...)
2026-01-12 20:38 ` ✓ Xe.CI.BAT: success for lib/intel_device_info: get the xe .graphics_rel from GMD_ID Patchwork
@ 2026-01-12 20:50 ` Patchwork
2026-01-13 3:22 ` ✓ Xe.CI.Full: success " Patchwork
4 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2026-01-12 20:50 UTC (permalink / raw)
To: Xin Wang; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 4226 bytes --]
== Series Details ==
Series: lib/intel_device_info: get the xe .graphics_rel from GMD_ID
URL : https://patchwork.freedesktop.org/series/159978/
State : failure
== Summary ==
CI Bug Log - changes from IGT_8697 -> IGTPW_14326
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with IGTPW_14326 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in IGTPW_14326, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/index.html
Participating hosts (42 -> 40)
------------------------------
Additional (1): fi-kbl-7567u
Missing (3): bat-dg2-13 fi-snb-2520m bat-adls-6
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_14326:
### IGT changes ###
#### Possible regressions ####
* igt@i915_pm_rpm@module-reload:
- bat-dg2-9: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8697/bat-dg2-9/igt@i915_pm_rpm@module-reload.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/bat-dg2-9/igt@i915_pm_rpm@module-reload.html
Known issues
------------
Here are the changes found in IGTPW_14326 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@gem_huc_copy@huc-copy:
- fi-kbl-7567u: NOTRUN -> [SKIP][3] ([i915#2190])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/fi-kbl-7567u/igt@gem_huc_copy@huc-copy.html
* igt@gem_lmem_swapping@parallel-random-engines:
- fi-kbl-7567u: NOTRUN -> [SKIP][4] ([i915#4613]) +3 other tests skip
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/fi-kbl-7567u/igt@gem_lmem_swapping@parallel-random-engines.html
* igt@i915_selftest@live:
- bat-mtlp-8: [PASS][5] -> [DMESG-FAIL][6] ([i915#12061]) +1 other test dmesg-fail
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8697/bat-mtlp-8/igt@i915_selftest@live.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/bat-mtlp-8/igt@i915_selftest@live.html
* igt@kms_dsc@dsc-basic:
- fi-kbl-7567u: NOTRUN -> [SKIP][7] +12 other tests skip
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/fi-kbl-7567u/igt@kms_dsc@dsc-basic.html
#### Possible fixes ####
* igt@i915_selftest@live@workarounds:
- bat-dg2-14: [DMESG-FAIL][8] ([i915#12061]) -> [PASS][9] +1 other test pass
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8697/bat-dg2-14/igt@i915_selftest@live@workarounds.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/bat-dg2-14/igt@i915_selftest@live@workarounds.html
- bat-mtlp-9: [DMESG-FAIL][10] ([i915#12061]) -> [PASS][11] +1 other test pass
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8697/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/bat-mtlp-9/igt@i915_selftest@live@workarounds.html
- bat-arls-6: [DMESG-FAIL][12] ([i915#12061]) -> [PASS][13] +1 other test pass
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8697/bat-arls-6/igt@i915_selftest@live@workarounds.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/bat-arls-6/igt@i915_selftest@live@workarounds.html
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
[i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_8697 -> IGTPW_14326
* Linux: CI_DRM_17808 -> CI_DRM_17809
CI-20190529: 20190529
CI_DRM_17808: 630dc29de423d3640e7b2ee4a7125e0433d9eb7f @ git://anongit.freedesktop.org/gfx-ci/linux
CI_DRM_17809: 38e0a7138ef62d49ddc449601fc5456099ef33b2 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_14326: 14326
IGT_8697: 8697
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14326/index.html
[-- Attachment #2: Type: text/html, Size: 5228 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* ✓ Xe.CI.Full: success for lib/intel_device_info: get the xe .graphics_rel from GMD_ID
2026-01-12 19:17 [PATCH v10 0/2] lib/intel_device_info: get the xe .graphics_rel from GMD_ID Xin Wang
` (3 preceding siblings ...)
2026-01-12 20:50 ` ✗ i915.CI.BAT: failure " Patchwork
@ 2026-01-13 3:22 ` Patchwork
4 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2026-01-13 3:22 UTC (permalink / raw)
To: Xin Wang; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 34636 bytes --]
== Series Details ==
Series: lib/intel_device_info: get the xe .graphics_rel from GMD_ID
URL : https://patchwork.freedesktop.org/series/159978/
State : success
== Summary ==
CI Bug Log - changes from XEIGT_8697_FULL -> XEIGTPW_14326_FULL
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in XEIGTPW_14326_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_3d@basic:
- shard-lnl: NOTRUN -> [SKIP][1] ([Intel XE#6011])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-2/igt@kms_3d@basic.html
* igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-c-edp-1:
- shard-lnl: [PASS][2] -> [FAIL][3] ([Intel XE#5993]) +3 other tests fail
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-lnl-8/igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-c-edp-1.html
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-2/igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-c-edp-1.html
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
- shard-bmg: NOTRUN -> [SKIP][4] ([Intel XE#2370])
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
* igt@kms_big_fb@x-tiled-16bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][5] ([Intel XE#2327]) +2 other tests skip
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-addfb:
- shard-bmg: NOTRUN -> [SKIP][6] ([Intel XE#2328])
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@kms_big_fb@y-tiled-addfb.html
* igt@kms_big_fb@y-tiled-addfb-size-overflow:
- shard-bmg: NOTRUN -> [SKIP][7] ([Intel XE#610])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-7/igt@kms_big_fb@y-tiled-addfb-size-overflow.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip:
- shard-bmg: NOTRUN -> [SKIP][8] ([Intel XE#1124]) +5 other tests skip
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#1124]) +1 other test skip
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-7/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p:
- shard-bmg: NOTRUN -> [SKIP][10] ([Intel XE#2314] / [Intel XE#2894]) +2 other tests skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p.html
* igt@kms_bw@linear-tiling-3-displays-2560x1440p:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#367])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@kms_bw@linear-tiling-3-displays-2560x1440p.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs:
- shard-lnl: NOTRUN -> [SKIP][12] ([Intel XE#2887]) +1 other test skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][13] ([Intel XE#2887]) +17 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs@pipe-c-dp-2:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2652] / [Intel XE#787]) +17 other tests skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs@pipe-c-dp-2.html
* igt@kms_chamelium_frames@hdmi-cmp-planes-random:
- shard-bmg: NOTRUN -> [SKIP][15] ([Intel XE#2252]) +5 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@kms_chamelium_frames@hdmi-cmp-planes-random.html
* igt@kms_cursor_crc@cursor-offscreen-128x42:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#2320]) +4 other tests skip
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@kms_cursor_crc@cursor-offscreen-128x42.html
* igt@kms_cursor_crc@cursor-random-128x42:
- shard-lnl: NOTRUN -> [SKIP][17] ([Intel XE#1424]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-8/igt@kms_cursor_crc@cursor-random-128x42.html
* igt@kms_dp_link_training@non-uhbr-sst:
- shard-bmg: [PASS][18] -> [DMESG-WARN][19] ([Intel XE#5254])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-9/igt@kms_dp_link_training@non-uhbr-sst.html
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@kms_dp_link_training@non-uhbr-sst.html
* igt@kms_dp_linktrain_fallback@dp-fallback:
- shard-bmg: [PASS][20] -> [FAIL][21] ([Intel XE#4367])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-4/igt@kms_dp_linktrain_fallback@dp-fallback.html
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@kms_dp_linktrain_fallback@dp-fallback.html
* igt@kms_dsc@dsc-with-output-formats:
- shard-bmg: NOTRUN -> [SKIP][22] ([Intel XE#2244])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-4/igt@kms_dsc@dsc-with-output-formats.html
* igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-different-formats:
- shard-lnl: NOTRUN -> [SKIP][23] ([Intel XE#4422])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-8/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-different-formats.html
* igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area:
- shard-bmg: NOTRUN -> [SKIP][24] ([Intel XE#4422]) +1 other test skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-out-visible-area.html
* igt@kms_fbcon_fbt@psr:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#776])
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-8/igt@kms_fbcon_fbt@psr.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling:
- shard-bmg: NOTRUN -> [SKIP][26] ([Intel XE#2293] / [Intel XE#2380]) +6 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@pipe-a-valid-mode:
- shard-bmg: NOTRUN -> [SKIP][27] ([Intel XE#2293]) +6 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][28] ([Intel XE#4141]) +14 other tests skip
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#2311]) +21 other tests skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#651])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#2313]) +26 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][32] ([Intel XE#656]) +1 other test skip
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-1/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-shrfb-draw-blt.html
* igt@kms_hdr@bpc-switch:
- shard-bmg: [PASS][33] -> [ABORT][34] ([Intel XE#6740]) +3 other tests abort
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-10/igt@kms_hdr@bpc-switch.html
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-8/igt@kms_hdr@bpc-switch.html
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-bmg: NOTRUN -> [SKIP][35] ([Intel XE#6901])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@kms_joiner@invalid-modeset-big-joiner.html
* igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
- shard-bmg: NOTRUN -> [SKIP][36] ([Intel XE#2925])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
* igt@kms_plane_multiple@tiling-y:
- shard-bmg: NOTRUN -> [SKIP][37] ([Intel XE#5020])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@kms_plane_multiple@tiling-y.html
* igt@kms_pm_backlight@brightness-with-dpms:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#2938])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@kms_pm_backlight@brightness-with-dpms.html
* igt@kms_pm_dc@dc6-psr:
- shard-lnl: [PASS][39] -> [FAIL][40] ([Intel XE#718])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-lnl-4/igt@kms_pm_dc@dc6-psr.html
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-1/igt@kms_pm_dc@dc6-psr.html
- shard-bmg: NOTRUN -> [SKIP][41] ([Intel XE#2392])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@kms_pm_dc@dc6-psr.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-bmg: NOTRUN -> [SKIP][42] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#836])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@kms_pm_rpm@dpms-lpsp.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf:
- shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#1406] / [Intel XE#1489]) +4 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html
* igt@kms_psr2_su@page_flip-p010:
- shard-bmg: NOTRUN -> [SKIP][44] ([Intel XE#1406] / [Intel XE#2387])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@kms_psr2_su@page_flip-p010.html
* igt@kms_psr@pr-sprite-plane-onoff:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#1406] / [Intel XE#2234] / [Intel XE#2850]) +9 other tests skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@kms_psr@pr-sprite-plane-onoff.html
- shard-lnl: NOTRUN -> [SKIP][46] ([Intel XE#1406])
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-7/igt@kms_psr@pr-sprite-plane-onoff.html
* igt@kms_psr@psr2-primary-render:
- shard-bmg: NOTRUN -> [SKIP][47] ([Intel XE#1406] / [Intel XE#2234])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@kms_psr@psr2-primary-render.html
* igt@kms_rotation_crc@bad-tiling:
- shard-bmg: NOTRUN -> [SKIP][48] ([Intel XE#3414] / [Intel XE#3904])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@kms_rotation_crc@bad-tiling.html
* igt@kms_scaling_modes@scaling-mode-full:
- shard-bmg: NOTRUN -> [SKIP][49] ([Intel XE#2413])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@kms_scaling_modes@scaling-mode-full.html
* igt@kms_sharpness_filter@filter-modifiers:
- shard-bmg: NOTRUN -> [SKIP][50] ([Intel XE#6503]) +2 other tests skip
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-7/igt@kms_sharpness_filter@filter-modifiers.html
* igt@kms_vrr@flip-basic:
- shard-bmg: NOTRUN -> [SKIP][51] ([Intel XE#1499])
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@kms_vrr@flip-basic.html
* igt@xe_eudebug@basic-vm-bind-extended-discovery:
- shard-lnl: NOTRUN -> [SKIP][52] ([Intel XE#4837])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-7/igt@xe_eudebug@basic-vm-bind-extended-discovery.html
* igt@xe_eudebug@basic-vm-bind-metadata-discovery:
- shard-bmg: NOTRUN -> [SKIP][53] ([Intel XE#4837]) +7 other tests skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@xe_eudebug@basic-vm-bind-metadata-discovery.html
* igt@xe_eudebug_online@pagefault-one-of-many:
- shard-bmg: NOTRUN -> [SKIP][54] ([Intel XE#6665])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@xe_eudebug_online@pagefault-one-of-many.html
* igt@xe_eudebug_online@resume-one:
- shard-bmg: NOTRUN -> [SKIP][55] ([Intel XE#4837] / [Intel XE#6665]) +2 other tests skip
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-4/igt@xe_eudebug_online@resume-one.html
* igt@xe_evict@evict-large-multi-vm:
- shard-lnl: NOTRUN -> [SKIP][56] ([Intel XE#688])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-3/igt@xe_evict@evict-large-multi-vm.html
* igt@xe_evict@evict-mixed-many-threads-small:
- shard-bmg: [PASS][57] -> [INCOMPLETE][58] ([Intel XE#6321])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-1/igt@xe_evict@evict-mixed-many-threads-small.html
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@xe_evict@evict-mixed-many-threads-small.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-defer-bind:
- shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#2322]) +7 other tests skip
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-4/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-defer-bind.html
* igt@xe_exec_basic@multigpu-once-userptr-invalidate:
- shard-lnl: NOTRUN -> [SKIP][60] ([Intel XE#1392]) +1 other test skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-8/igt@xe_exec_basic@multigpu-once-userptr-invalidate.html
* igt@xe_exec_multi_queue@one-queue-dyn-priority-smem:
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#6874]) +1 other test skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-3/igt@xe_exec_multi_queue@one-queue-dyn-priority-smem.html
* igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-dyn-priority-smem:
- shard-bmg: NOTRUN -> [SKIP][62] ([Intel XE#6874]) +24 other tests skip
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-dyn-priority-smem.html
* igt@xe_exec_system_allocator@many-64k-mmap-new-huge:
- shard-bmg: NOTRUN -> [SKIP][63] ([Intel XE#5007])
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@xe_exec_system_allocator@many-64k-mmap-new-huge.html
* igt@xe_exec_system_allocator@many-execqueues-mmap-huge-nomemset:
- shard-bmg: NOTRUN -> [SKIP][64] ([Intel XE#4943]) +26 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@xe_exec_system_allocator@many-execqueues-mmap-huge-nomemset.html
* igt@xe_exec_system_allocator@process-many-execqueues-mmap-huge-nomemset:
- shard-lnl: NOTRUN -> [SKIP][65] ([Intel XE#4943]) +2 other tests skip
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-5/igt@xe_exec_system_allocator@process-many-execqueues-mmap-huge-nomemset.html
* igt@xe_mmap@small-bar:
- shard-bmg: NOTRUN -> [SKIP][66] ([Intel XE#586])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@xe_mmap@small-bar.html
* igt@xe_module_load@load:
- shard-bmg: ([PASS][67], [PASS][68], [PASS][69], [PASS][70], [PASS][71], [PASS][72], [PASS][73], [PASS][74], [PASS][75], [PASS][76], [PASS][77], [PASS][78], [PASS][79], [PASS][80], [PASS][81], [PASS][82], [PASS][83], [PASS][84], [PASS][85], [PASS][86], [PASS][87], [PASS][88], [PASS][89], [PASS][90], [PASS][91]) -> ([PASS][92], [PASS][93], [PASS][94], [PASS][95], [PASS][96], [PASS][97], [PASS][98], [PASS][99], [PASS][100], [PASS][101], [PASS][102], [PASS][103], [SKIP][104], [PASS][105], [PASS][106], [PASS][107], [PASS][108], [PASS][109], [PASS][110], [PASS][111], [PASS][112], [PASS][113], [PASS][114], [PASS][115], [PASS][116], [PASS][117]) ([Intel XE#2457])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-10/igt@xe_module_load@load.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-1/igt@xe_module_load@load.html
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-3/igt@xe_module_load@load.html
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-6/igt@xe_module_load@load.html
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-2/igt@xe_module_load@load.html
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-7/igt@xe_module_load@load.html
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-2/igt@xe_module_load@load.html
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-8/igt@xe_module_load@load.html
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-4/igt@xe_module_load@load.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-8/igt@xe_module_load@load.html
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-8/igt@xe_module_load@load.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-1/igt@xe_module_load@load.html
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-1/igt@xe_module_load@load.html
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-9/igt@xe_module_load@load.html
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-2/igt@xe_module_load@load.html
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-10/igt@xe_module_load@load.html
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-3/igt@xe_module_load@load.html
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-4/igt@xe_module_load@load.html
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-9/igt@xe_module_load@load.html
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-6/igt@xe_module_load@load.html
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-9/igt@xe_module_load@load.html
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-10/igt@xe_module_load@load.html
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-7/igt@xe_module_load@load.html
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-9/igt@xe_module_load@load.html
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-7/igt@xe_module_load@load.html
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@xe_module_load@load.html
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@xe_module_load@load.html
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-8/igt@xe_module_load@load.html
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@xe_module_load@load.html
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-7/igt@xe_module_load@load.html
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-8/igt@xe_module_load@load.html
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@xe_module_load@load.html
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-7/igt@xe_module_load@load.html
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@xe_module_load@load.html
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@xe_module_load@load.html
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@xe_module_load@load.html
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@xe_module_load@load.html
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@xe_module_load@load.html
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@xe_module_load@load.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@xe_module_load@load.html
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@xe_module_load@load.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-4/igt@xe_module_load@load.html
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@xe_module_load@load.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-4/igt@xe_module_load@load.html
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@xe_module_load@load.html
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@xe_module_load@load.html
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-7/igt@xe_module_load@load.html
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-6/igt@xe_module_load@load.html
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@xe_module_load@load.html
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@xe_module_load@load.html
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@xe_module_load@load.html
* igt@xe_multigpu_svm@mgpu-atomic-op-basic:
- shard-bmg: NOTRUN -> [SKIP][118] ([Intel XE#6964]) +2 other tests skip
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@xe_multigpu_svm@mgpu-atomic-op-basic.html
* igt@xe_pat@pat-index-xelp:
- shard-bmg: NOTRUN -> [SKIP][119] ([Intel XE#2245])
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@xe_pat@pat-index-xelp.html
* igt@xe_pm@s2idle-d3cold-basic-exec:
- shard-bmg: NOTRUN -> [SKIP][120] ([Intel XE#2284]) +2 other tests skip
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-4/igt@xe_pm@s2idle-d3cold-basic-exec.html
* igt@xe_pxp@pxp-termination-key-update-post-termination-irq:
- shard-bmg: NOTRUN -> [SKIP][121] ([Intel XE#4733])
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@xe_pxp@pxp-termination-key-update-post-termination-irq.html
* igt@xe_query@multigpu-query-engines:
- shard-bmg: NOTRUN -> [SKIP][122] ([Intel XE#944])
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@xe_query@multigpu-query-engines.html
* igt@xe_sriov_flr@flr-each-isolation:
- shard-bmg: [PASS][123] -> [FAIL][124] ([Intel XE#6569])
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-7/igt@xe_sriov_flr@flr-each-isolation.html
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@xe_sriov_flr@flr-each-isolation.html
#### Possible fixes ####
* igt@kms_flip@flip-vs-expired-vblank-interruptible@c-dp2:
- shard-bmg: [FAIL][125] -> [PASS][126] +1 other test pass
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-8/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-dp2.html
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-10/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-dp2.html
* igt@kms_flip@flip-vs-expired-vblank@c-edp1:
- shard-lnl: [FAIL][127] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][128] +1 other test pass
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-3/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
* igt@kms_hdr@static-swap:
- shard-bmg: [ABORT][129] ([Intel XE#6740]) -> [PASS][130] +5 other tests pass
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-9/igt@kms_hdr@static-swap.html
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-3/igt@kms_hdr@static-swap.html
* igt@kms_plane@plane-panning-bottom-right-suspend:
- shard-bmg: [INCOMPLETE][131] ([Intel XE#1035]) -> [PASS][132]
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-6/igt@kms_plane@plane-panning-bottom-right-suspend.html
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@kms_plane@plane-panning-bottom-right-suspend.html
* igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a:
- shard-bmg: [SKIP][133] -> [PASS][134]
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-6/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a.html
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a.html
* igt@kms_pm_rpm@i2c:
- shard-bmg: [FAIL][135] ([Intel XE#5099]) -> [PASS][136]
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-6/igt@kms_pm_rpm@i2c.html
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@kms_pm_rpm@i2c.html
* igt@xe_compute_preempt@compute-preempt-many-vram-evict@engine-drm_xe_engine_class_compute:
- shard-bmg: [ABORT][137] ([Intel XE#3970]) -> [PASS][138] +1 other test pass
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-10/igt@xe_compute_preempt@compute-preempt-many-vram-evict@engine-drm_xe_engine_class_compute.html
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-2/igt@xe_compute_preempt@compute-preempt-many-vram-evict@engine-drm_xe_engine_class_compute.html
* igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-multi-vma:
- shard-lnl: [FAIL][139] ([Intel XE#6353]) -> [PASS][140]
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-lnl-1/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-multi-vma.html
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-lnl-7/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-multi-vma.html
* igt@xe_sriov_auto_provisioning@fair-allocation@numvfs-random:
- shard-bmg: [FAIL][141] ([Intel XE#5937]) -> [PASS][142] +4 other tests pass
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-2/igt@xe_sriov_auto_provisioning@fair-allocation@numvfs-random.html
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-9/igt@xe_sriov_auto_provisioning@fair-allocation@numvfs-random.html
#### Warnings ####
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][143] ([Intel XE#3544]) -> [SKIP][144] ([Intel XE#3374] / [Intel XE#3544])
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8697/shard-bmg-2/igt@kms_hdr@brightness-with-hdr.html
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/shard-bmg-1/igt@kms_hdr@brightness-with-hdr.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#1035]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1035
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
[Intel XE#2245]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2245
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2328]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2328
[Intel XE#2370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2370
[Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
[Intel XE#2387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2387
[Intel XE#2392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2392
[Intel XE#2413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2413
[Intel XE#2457]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2457
[Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
[Intel XE#2925]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2925
[Intel XE#2938]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2938
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#3970]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3970
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4367
[Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
[Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
[Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837
[Intel XE#4943]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4943
[Intel XE#5007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5007
[Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
[Intel XE#5099]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5099
[Intel XE#5254]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5254
[Intel XE#586]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/586
[Intel XE#5937]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5937
[Intel XE#5993]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5993
[Intel XE#6011]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6011
[Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#6353]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6353
[Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#6569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6569
[Intel XE#6665]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6665
[Intel XE#6740]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6740
[Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
[Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* IGT: IGT_8697 -> IGTPW_14326
* Linux: xe-4368-e9383891a008f23b432b7b3c4ca2d7dd0f49824d -> xe-4370-fb2e525015f1b65b83809995601ea7827ee08ab9
IGTPW_14326: 14326
IGT_8697: 8697
xe-4368-e9383891a008f23b432b7b3c4ca2d7dd0f49824d: e9383891a008f23b432b7b3c4ca2d7dd0f49824d
xe-4370-fb2e525015f1b65b83809995601ea7827ee08ab9: fb2e525015f1b65b83809995601ea7827ee08ab9
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14326/index.html
[-- Attachment #2: Type: text/html, Size: 38283 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version from GMD_ID
2026-01-12 19:17 ` [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version " Xin Wang
@ 2026-01-15 8:00 ` Zbigniew Kempczyński
2026-01-16 18:55 ` Wang, X
2026-01-16 21:33 ` Matt Roper
0 siblings, 2 replies; 12+ messages in thread
From: Zbigniew Kempczyński @ 2026-01-15 8:00 UTC (permalink / raw)
To: Xin Wang; +Cc: igt-dev, Kamil Konieczny, Matt Roper, Ravi Kumar V
On Mon, Jan 12, 2026 at 07:17:31PM +0000, Xin Wang wrote:
> This allows IGT to query the exact IP version for xe platforms.
>
> Key changes:
> - Add xe_device_ipver field to xe_device structure
> - set the graphics versions based on the GMD_ID
> - Cache device ipver in global map indexed by devid for efficient lookup
> - Implement xe_ipver_cache_lookup() to retrieve cached ipver by devid
> - Clean up cached device ipver when xe_device is released
>
> V2:
> - add new struct xe_device_ipver to hold the ipver info
> - separate cache map to eliminate collision (Roper, Matthew D)
> - changed function name to xe_ipver_cache_lookup() to avoid
> confusion (Roper, Matthew D)
>
> V3:
> - optimize the coding style. (Summers, Stuart)
>
> Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> Cc: Matt Roper <matthew.d.roper@intel.com>
> Signed-off-by: Xin Wang <x.wang@intel.com>
> Reviewed-by: Ravi Kumar V <ravi.kumar.vodapalli@intel.com>
> ---
> lib/intel_chipset.h | 6 +++++
> lib/xe/xe_query.c | 54 ++++++++++++++++++++++++++++++++++++++++++++-
> lib/xe/xe_query.h | 4 ++++
> 3 files changed, 63 insertions(+), 1 deletion(-)
>
> diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
> index cc2225110..424811f7c 100644
> --- a/lib/intel_chipset.h
> +++ b/lib/intel_chipset.h
> @@ -100,6 +100,12 @@ struct intel_device_info {
> const char *codename;
> };
>
> +struct xe_device_ipver {
> + uint32_t devid;
> + uint16_t graphics_ver;
> + uint16_t graphics_rel;
> +};
> +
> const struct intel_device_info *intel_get_device_info(uint16_t devid) __attribute__((pure));
>
> const struct intel_cmds_info *intel_get_cmds_info(uint16_t devid) __attribute__((pure));
> diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c
> index 981d76948..823a29f2d 100644
> --- a/lib/xe/xe_query.c
> +++ b/lib/xe/xe_query.c
> @@ -210,6 +210,22 @@ static struct xe_device_cache {
> struct igt_map *map;
> } cache;
>
> +static struct xe_ipver_cache {
> + pthread_mutex_t mutex;
> + struct igt_map *map;
> +} xe_ipver;
> +
> +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid)
> +{
> + struct xe_device_ipver *ipver;
> +
> + pthread_mutex_lock(&xe_ipver.mutex);
> + ipver = igt_map_search(xe_ipver.map, &devid);
> + pthread_mutex_unlock(&xe_ipver.mutex);
> +
> + return ipver;
> +}
> +
Please forgive me for sharing my thoughts only now.
I wondered about this a bit and according to current code shape
I don't like this design - especially ip_ver cache in xe_query.
I mean I don't like to use external cache which might or might not
be filled at time of calling intel_get_device_info().
At the moment I see following options:
1. Provide update function intel_device_info_update(devid, ver, rel)
allowing to update rel field during xe_device_get(). This still
keeps intel_device_info.c independent but rel field might be
incorrect. BTW I would set it in static definition to -1 (max
unsigned) to catch it is not set/updated properly during
intel_get_device_info().
2. Add new function intel_get_device_info_by_fd() which will support
passing fd instead devid and migrate code to use it. Most of our code
uses fd to acquire device id before calling intel_get_device_info()
[exception is igt_device_scan which uses pci devid directly]. This
will break intel_device_info.c independency because we start calling
driver functions, but maybe it is time to do this (GMD_ID).
Digression: It seems when INTEL_DEVID_OVERRIDE won't work properly
but I wouldn't care about it for now.
3. Mix 1 and 2 but build hash map from intel_device_match[] in the
constructor and update it during xe_device_get(). Pros of this
is we could stop using 'static __thread' for caching last info.
--
Zbigniew
> static struct xe_device *find_in_cache_unlocked(int fd)
> {
> return igt_map_search(cache.map, &fd);
> @@ -270,6 +286,24 @@ struct xe_device *xe_device_get(int fd)
> for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
> xe_dev->gt_mask |= (1ull << xe_dev->gt_list->gt_list[gt].gt_id);
>
> + /*
> + * Set graphics_ver and graphics_rel based on the main GT's GMD_ID.
> + * We should use the hardcoded value for the non-GMD_ID platforms (ip_ver_major == 0)
> + */
> + xe_dev->ipver.devid = 0;
> + for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++) {
> + if (xe_dev->gt_list->gt_list[gt].type == DRM_XE_QUERY_GT_TYPE_MAIN &&
> + xe_dev->gt_list->gt_list[gt].ip_ver_major) {
> + igt_debug("Setting graphics_ver to %u and graphics_rel to %u\n",
> + xe_dev->gt_list->gt_list[gt].ip_ver_major,
> + xe_dev->gt_list->gt_list[gt].ip_ver_minor);
> + xe_dev->ipver.graphics_ver = xe_dev->gt_list->gt_list[gt].ip_ver_major;
> + xe_dev->ipver.graphics_rel = xe_dev->gt_list->gt_list[gt].ip_ver_minor;
> + xe_dev->ipver.devid = xe_dev->dev_id;
> + break;
> + }
> + }
> +
> /* Tile IDs may be non-consecutive; keep a mask of valid IDs */
> for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
> xe_dev->tile_mask |= (1ull << xe_dev->gt_list->gt_list[gt].tile_id);
> @@ -304,6 +338,11 @@ struct xe_device *xe_device_get(int fd)
> prev = find_in_cache_unlocked(fd);
> if (!prev) {
> igt_map_insert(cache.map, &xe_dev->fd, xe_dev);
> + if (xe_dev->ipver.devid) {
> + pthread_mutex_lock(&xe_ipver.mutex);
> + igt_map_insert(xe_ipver.map, &xe_dev->ipver.devid, &xe_dev->ipver);
> + pthread_mutex_unlock(&xe_ipver.mutex);
> + }
> } else {
> xe_device_free(xe_dev);
> xe_dev = prev;
> @@ -315,7 +354,15 @@ struct xe_device *xe_device_get(int fd)
>
> static void delete_in_cache(struct igt_map_entry *entry)
> {
> - xe_device_free((struct xe_device *)entry->data);
> + struct xe_device *xe_dev = (struct xe_device *)entry->data;
> +
> + if (xe_dev->ipver.devid) {
> + pthread_mutex_lock(&xe_ipver.mutex);
> + igt_map_remove(xe_ipver.map, &xe_dev->ipver.devid, NULL);
> + pthread_mutex_unlock(&xe_ipver.mutex);
> + }
> +
> + xe_device_free(xe_dev);
> }
>
> /**
> @@ -365,13 +412,18 @@ static void xe_device_destroy_cache(void)
> pthread_mutex_lock(&cache.cache_mutex);
> igt_map_destroy(cache.map, delete_in_cache);
> pthread_mutex_unlock(&cache.cache_mutex);
> + pthread_mutex_lock(&xe_ipver.mutex);
> + igt_map_destroy(xe_ipver.map, NULL);
> + pthread_mutex_unlock(&xe_ipver.mutex);
> }
>
> static void xe_device_cache_init(void)
> {
> pthread_mutex_init(&cache.cache_mutex, NULL);
> + pthread_mutex_init(&xe_ipver.mutex, NULL);
> xe_device_destroy_cache();
> cache.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
> + xe_ipver.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
> }
>
> #define xe_dev_FN(_NAME, _FIELD, _TYPE) \
> diff --git a/lib/xe/xe_query.h b/lib/xe/xe_query.h
> index d7a9f95f9..19690cff3 100644
> --- a/lib/xe/xe_query.h
> +++ b/lib/xe/xe_query.h
> @@ -74,6 +74,9 @@ struct xe_device {
>
> /** @dev_id: Device id of xe device */
> uint16_t dev_id;
> +
> + /** @ipver: Device ip version */
> + struct xe_device_ipver ipver;
> };
>
> #define xe_for_each_engine(__fd, __hwe) \
> @@ -181,6 +184,7 @@ static inline void *xe_query_device(int fd, uint32_t type, uint32_t *size)
> }
>
> struct xe_device *xe_device_get(int fd);
> +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid);
> void xe_device_put(int fd);
>
> int xe_query_eu_count(int fd, int gt);
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version from GMD_ID
2026-01-15 8:00 ` Zbigniew Kempczyński
@ 2026-01-16 18:55 ` Wang, X
2026-01-16 21:33 ` Matt Roper
1 sibling, 0 replies; 12+ messages in thread
From: Wang, X @ 2026-01-16 18:55 UTC (permalink / raw)
To: Zbigniew Kempczyński
Cc: igt-dev, Kamil Konieczny, Matt Roper, Ravi Kumar V
Hi Zbigniew,
On 1/15/2026 00:00, Zbigniew Kempczyński wrote:
> On Mon, Jan 12, 2026 at 07:17:31PM +0000, Xin Wang wrote:
>> This allows IGT to query the exact IP version for xe platforms.
>>
>> Key changes:
>> - Add xe_device_ipver field to xe_device structure
>> - set the graphics versions based on the GMD_ID
>> - Cache device ipver in global map indexed by devid for efficient lookup
>> - Implement xe_ipver_cache_lookup() to retrieve cached ipver by devid
>> - Clean up cached device ipver when xe_device is released
>>
>> V2:
>> - add new struct xe_device_ipver to hold the ipver info
>> - separate cache map to eliminate collision (Roper, Matthew D)
>> - changed function name to xe_ipver_cache_lookup() to avoid
>> confusion (Roper, Matthew D)
>>
>> V3:
>> - optimize the coding style. (Summers, Stuart)
>>
>> Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
>> Cc: Matt Roper <matthew.d.roper@intel.com>
>> Signed-off-by: Xin Wang <x.wang@intel.com>
>> Reviewed-by: Ravi Kumar V <ravi.kumar.vodapalli@intel.com>
>> ---
>> lib/intel_chipset.h | 6 +++++
>> lib/xe/xe_query.c | 54 ++++++++++++++++++++++++++++++++++++++++++++-
>> lib/xe/xe_query.h | 4 ++++
>> 3 files changed, 63 insertions(+), 1 deletion(-)
>>
>> diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
>> index cc2225110..424811f7c 100644
>> --- a/lib/intel_chipset.h
>> +++ b/lib/intel_chipset.h
>> @@ -100,6 +100,12 @@ struct intel_device_info {
>> const char *codename;
>> };
>>
>> +struct xe_device_ipver {
>> + uint32_t devid;
>> + uint16_t graphics_ver;
>> + uint16_t graphics_rel;
>> +};
>> +
>> const struct intel_device_info *intel_get_device_info(uint16_t devid) __attribute__((pure));
>>
>> const struct intel_cmds_info *intel_get_cmds_info(uint16_t devid) __attribute__((pure));
>> diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c
>> index 981d76948..823a29f2d 100644
>> --- a/lib/xe/xe_query.c
>> +++ b/lib/xe/xe_query.c
>> @@ -210,6 +210,22 @@ static struct xe_device_cache {
>> struct igt_map *map;
>> } cache;
>>
>> +static struct xe_ipver_cache {
>> + pthread_mutex_t mutex;
>> + struct igt_map *map;
>> +} xe_ipver;
>> +
>> +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid)
>> +{
>> + struct xe_device_ipver *ipver;
>> +
>> + pthread_mutex_lock(&xe_ipver.mutex);
>> + ipver = igt_map_search(xe_ipver.map, &devid);
>> + pthread_mutex_unlock(&xe_ipver.mutex);
>> +
>> + return ipver;
>> +}
>> +
> Please forgive me for sharing my thoughts only now.
>
> I wondered about this a bit and according to current code shape
> I don't like this design - especially ip_ver cache in xe_query.
> I mean I don't like to use external cache which might or might not
> be filled at time of calling intel_get_device_info().
>
> At the moment I see following options:
>
> 1. Provide update function intel_device_info_update(devid, ver, rel)
> allowing to update rel field during xe_device_get(). This still
> keeps intel_device_info.c independent but rel field might be
> incorrect. BTW I would set it in static definition to -1 (max
> unsigned) to catch it is not set/updated properly during
> intel_get_device_info().
>
> 2. Add new function intel_get_device_info_by_fd() which will support
> passing fd instead devid and migrate code to use it. Most of our code
> uses fd to acquire device id before calling intel_get_device_info()
> [exception is igt_device_scan which uses pci devid directly]. This
> will break intel_device_info.c independency because we start calling
> driver functions, but maybe it is time to do this (GMD_ID).
>
> Digression: It seems when INTEL_DEVID_OVERRIDE won't work properly
> but I wouldn't care about it for now.
>
> 3. Mix 1 and 2 but build hash map from intel_device_match[] in the
> constructor and update it during xe_device_get(). Pros of this
> is we could stop using 'static __thread' for caching last info.
>
> --
> Zbigniew
Thanks for the review. In the first version of the patch
(https://patchwork.freedesktop.org/series/155527/#rev2), I
introduced three new APIs specifically for Xe devices
(gen >= 20). However, the Xe.CI Full runs reported many
failures, and it became clear that a proper fix would
require changes across more components than I initially
expected.
For this series, my goal is to provide the smallest and
least-intrusive set of changes needed to resolve the
immediate issue, without triggering a broader refactor of
the device-info infrastructure.
I would like to try option 3 to address the current
solution.
>> static struct xe_device *find_in_cache_unlocked(int fd)
>> {
>> ...cut...
>>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version from GMD_ID
2026-01-15 8:00 ` Zbigniew Kempczyński
2026-01-16 18:55 ` Wang, X
@ 2026-01-16 21:33 ` Matt Roper
2026-01-19 7:43 ` Wang, X
2026-01-19 10:36 ` Zbigniew Kempczyński
1 sibling, 2 replies; 12+ messages in thread
From: Matt Roper @ 2026-01-16 21:33 UTC (permalink / raw)
To: Zbigniew Kempczyński
Cc: Xin Wang, igt-dev, Kamil Konieczny, Ravi Kumar V
On Thu, Jan 15, 2026 at 09:00:53AM +0100, Zbigniew Kempczyński wrote:
> On Mon, Jan 12, 2026 at 07:17:31PM +0000, Xin Wang wrote:
> > This allows IGT to query the exact IP version for xe platforms.
> >
> > Key changes:
> > - Add xe_device_ipver field to xe_device structure
> > - set the graphics versions based on the GMD_ID
> > - Cache device ipver in global map indexed by devid for efficient lookup
> > - Implement xe_ipver_cache_lookup() to retrieve cached ipver by devid
> > - Clean up cached device ipver when xe_device is released
> >
> > V2:
> > - add new struct xe_device_ipver to hold the ipver info
> > - separate cache map to eliminate collision (Roper, Matthew D)
> > - changed function name to xe_ipver_cache_lookup() to avoid
> > confusion (Roper, Matthew D)
> >
> > V3:
> > - optimize the coding style. (Summers, Stuart)
> >
> > Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> > Cc: Matt Roper <matthew.d.roper@intel.com>
> > Signed-off-by: Xin Wang <x.wang@intel.com>
> > Reviewed-by: Ravi Kumar V <ravi.kumar.vodapalli@intel.com>
> > ---
> > lib/intel_chipset.h | 6 +++++
> > lib/xe/xe_query.c | 54 ++++++++++++++++++++++++++++++++++++++++++++-
> > lib/xe/xe_query.h | 4 ++++
> > 3 files changed, 63 insertions(+), 1 deletion(-)
> >
> > diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
> > index cc2225110..424811f7c 100644
> > --- a/lib/intel_chipset.h
> > +++ b/lib/intel_chipset.h
> > @@ -100,6 +100,12 @@ struct intel_device_info {
> > const char *codename;
> > };
> >
> > +struct xe_device_ipver {
> > + uint32_t devid;
> > + uint16_t graphics_ver;
> > + uint16_t graphics_rel;
> > +};
> > +
> > const struct intel_device_info *intel_get_device_info(uint16_t devid) __attribute__((pure));
> >
> > const struct intel_cmds_info *intel_get_cmds_info(uint16_t devid) __attribute__((pure));
> > diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c
> > index 981d76948..823a29f2d 100644
> > --- a/lib/xe/xe_query.c
> > +++ b/lib/xe/xe_query.c
> > @@ -210,6 +210,22 @@ static struct xe_device_cache {
> > struct igt_map *map;
> > } cache;
> >
> > +static struct xe_ipver_cache {
> > + pthread_mutex_t mutex;
> > + struct igt_map *map;
> > +} xe_ipver;
> > +
> > +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid)
> > +{
> > + struct xe_device_ipver *ipver;
> > +
> > + pthread_mutex_lock(&xe_ipver.mutex);
> > + ipver = igt_map_search(xe_ipver.map, &devid);
> > + pthread_mutex_unlock(&xe_ipver.mutex);
> > +
> > + return ipver;
> > +}
> > +
>
> Please forgive me for sharing my thoughts only now.
>
> I wondered about this a bit and according to current code shape
> I don't like this design - especially ip_ver cache in xe_query.
> I mean I don't like to use external cache which might or might not
> be filled at time of calling intel_get_device_info().
>
> At the moment I see following options:
>
> 1. Provide update function intel_device_info_update(devid, ver, rel)
> allowing to update rel field during xe_device_get(). This still
> keeps intel_device_info.c independent but rel field might be
> incorrect. BTW I would set it in static definition to -1 (max
> unsigned) to catch it is not set/updated properly during
> intel_get_device_info().
>
> 2. Add new function intel_get_device_info_by_fd() which will support
> passing fd instead devid and migrate code to use it. Most of our code
> uses fd to acquire device id before calling intel_get_device_info()
> [exception is igt_device_scan which uses pci devid directly]. This
> will break intel_device_info.c independency because we start calling
> driver functions, but maybe it is time to do this (GMD_ID).
>
> Digression: It seems when INTEL_DEVID_OVERRIDE won't work properly
> but I wouldn't care about it for now.
>
> 3. Mix 1 and 2 but build hash map from intel_device_match[] in the
> constructor and update it during xe_device_get(). Pros of this
> is we could stop using 'static __thread' for caching last info.
The problem is that "graphics version" and "media version" are not
supposed to be a characteristic of a general device type anymore. An
individual device will have some version number, but another device of
the same "type" with the same PCI ID can can potentially have a
different IP version. We've been lucky enough so far to still have
unique PCI IDs for cases where the version numbers are different (at
least for production parts), but this is not something that we're
supposed to be relying on since the IP disaggregation happened around
the MTL timeframe. Personally I think that hacks that keep treating
versions as something associated with a device type are just making the
problem harder to untangle.
For a proper solution, I think we really need to separate the concept of
"traits associated with a type of device" (which is the stuff we have in
the device info structure which can be accurately looked up by PCI ID)
from "IP version associated with a specific device instance" (which on
modern platforms can only be accurately looked up in the context of a
specific device handle such as a FD).
So aside from a few special cases, we want IGT to stop translating PCI
IDs into version numbers and instead start translating fd's into version
numbers. The special case exceptions I can think of that don't really
have a way to do fd-based lookups are:
* tools/tests that bypass the driver entirely (possibly running without
the driver loaded) and just use libpciaccess for direct BAR access.
Most of these either don't have version-based conditions or only have
version conditions matching against very old platforms (where a
PCIID-based lookup is "safe")
* the old i915-era error dump decoder tool just reads its information
(including PCI ID) from a dump file on disk. The tool might be
executed on a completely different machine from where the dump was
originally captured. I don't think this tool has been updated since
gen8 (everyone switched over to using the Mesa tool instead), and I
don't think it would function at all on any of our modern platforms.
So if this tool is still useful at all, it would only be on ancient
i915 platforms where a PCIID-based lookup is "safe."
The solution I suggested during an earlier review of this series was:
* Create separate "version from PCI ID" APIs that can be used in the
few special cases listed above, and migrate those uses over.
* Change the signature of intel_gen / intel_graphics_ver to take an FD
rather than a PCI ID; when running on Xe this would do the lookup via
the query ioctl to get an accurate value.
* Update intel_gen / intel_graphics_ver:
- If running on i915, fall back to the device_info lookup that
we've always used. That's safe for all i915 platforms except
MTL/ARL, and we were lucky enough that they never created any
production MTL/ARL platforms where a single PCI ID had different
possible versions, so it winds up being safe there too.
- If running on Xe, use the query ioctl to obtain the version
number. This will return the proper value for all platforms
officially supported by Xe (i.e., Xe2 and later). It will return
0 on pre-MTL platforms (which aren't officially supported), but in
that case IGT can fall back to the i915 approach above.
I did a mockup of the first two parts several months ago:
https://github.com/mattrope/intel-gpu-tools/commits/forupstream/version_query/
Since the function interface is changing, it's a lot of churn, but most
of it can be auto-converted quickly via Coccinelle.
Matt
>
> --
> Zbigniew
>
> > static struct xe_device *find_in_cache_unlocked(int fd)
> > {
> > return igt_map_search(cache.map, &fd);
> > @@ -270,6 +286,24 @@ struct xe_device *xe_device_get(int fd)
> > for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
> > xe_dev->gt_mask |= (1ull << xe_dev->gt_list->gt_list[gt].gt_id);
> >
> > + /*
> > + * Set graphics_ver and graphics_rel based on the main GT's GMD_ID.
> > + * We should use the hardcoded value for the non-GMD_ID platforms (ip_ver_major == 0)
> > + */
> > + xe_dev->ipver.devid = 0;
> > + for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++) {
> > + if (xe_dev->gt_list->gt_list[gt].type == DRM_XE_QUERY_GT_TYPE_MAIN &&
> > + xe_dev->gt_list->gt_list[gt].ip_ver_major) {
> > + igt_debug("Setting graphics_ver to %u and graphics_rel to %u\n",
> > + xe_dev->gt_list->gt_list[gt].ip_ver_major,
> > + xe_dev->gt_list->gt_list[gt].ip_ver_minor);
> > + xe_dev->ipver.graphics_ver = xe_dev->gt_list->gt_list[gt].ip_ver_major;
> > + xe_dev->ipver.graphics_rel = xe_dev->gt_list->gt_list[gt].ip_ver_minor;
> > + xe_dev->ipver.devid = xe_dev->dev_id;
> > + break;
> > + }
> > + }
> > +
> > /* Tile IDs may be non-consecutive; keep a mask of valid IDs */
> > for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
> > xe_dev->tile_mask |= (1ull << xe_dev->gt_list->gt_list[gt].tile_id);
> > @@ -304,6 +338,11 @@ struct xe_device *xe_device_get(int fd)
> > prev = find_in_cache_unlocked(fd);
> > if (!prev) {
> > igt_map_insert(cache.map, &xe_dev->fd, xe_dev);
> > + if (xe_dev->ipver.devid) {
> > + pthread_mutex_lock(&xe_ipver.mutex);
> > + igt_map_insert(xe_ipver.map, &xe_dev->ipver.devid, &xe_dev->ipver);
> > + pthread_mutex_unlock(&xe_ipver.mutex);
> > + }
> > } else {
> > xe_device_free(xe_dev);
> > xe_dev = prev;
> > @@ -315,7 +354,15 @@ struct xe_device *xe_device_get(int fd)
> >
> > static void delete_in_cache(struct igt_map_entry *entry)
> > {
> > - xe_device_free((struct xe_device *)entry->data);
> > + struct xe_device *xe_dev = (struct xe_device *)entry->data;
> > +
> > + if (xe_dev->ipver.devid) {
> > + pthread_mutex_lock(&xe_ipver.mutex);
> > + igt_map_remove(xe_ipver.map, &xe_dev->ipver.devid, NULL);
> > + pthread_mutex_unlock(&xe_ipver.mutex);
> > + }
> > +
> > + xe_device_free(xe_dev);
> > }
> >
> > /**
> > @@ -365,13 +412,18 @@ static void xe_device_destroy_cache(void)
> > pthread_mutex_lock(&cache.cache_mutex);
> > igt_map_destroy(cache.map, delete_in_cache);
> > pthread_mutex_unlock(&cache.cache_mutex);
> > + pthread_mutex_lock(&xe_ipver.mutex);
> > + igt_map_destroy(xe_ipver.map, NULL);
> > + pthread_mutex_unlock(&xe_ipver.mutex);
> > }
> >
> > static void xe_device_cache_init(void)
> > {
> > pthread_mutex_init(&cache.cache_mutex, NULL);
> > + pthread_mutex_init(&xe_ipver.mutex, NULL);
> > xe_device_destroy_cache();
> > cache.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
> > + xe_ipver.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
> > }
> >
> > #define xe_dev_FN(_NAME, _FIELD, _TYPE) \
> > diff --git a/lib/xe/xe_query.h b/lib/xe/xe_query.h
> > index d7a9f95f9..19690cff3 100644
> > --- a/lib/xe/xe_query.h
> > +++ b/lib/xe/xe_query.h
> > @@ -74,6 +74,9 @@ struct xe_device {
> >
> > /** @dev_id: Device id of xe device */
> > uint16_t dev_id;
> > +
> > + /** @ipver: Device ip version */
> > + struct xe_device_ipver ipver;
> > };
> >
> > #define xe_for_each_engine(__fd, __hwe) \
> > @@ -181,6 +184,7 @@ static inline void *xe_query_device(int fd, uint32_t type, uint32_t *size)
> > }
> >
> > struct xe_device *xe_device_get(int fd);
> > +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid);
> > void xe_device_put(int fd);
> >
> > int xe_query_eu_count(int fd, int gt);
> > --
> > 2.43.0
> >
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version from GMD_ID
2026-01-16 21:33 ` Matt Roper
@ 2026-01-19 7:43 ` Wang, X
2026-01-19 10:36 ` Zbigniew Kempczyński
1 sibling, 0 replies; 12+ messages in thread
From: Wang, X @ 2026-01-19 7:43 UTC (permalink / raw)
To: Matt Roper, Zbigniew Kempczyński
Cc: igt-dev, Kamil Konieczny, Ravi Kumar V
On 1/16/2026 13:33, Matt Roper wrote:
> On Thu, Jan 15, 2026 at 09:00:53AM +0100, Zbigniew Kempczyński wrote:
>> On Mon, Jan 12, 2026 at 07:17:31PM +0000, Xin Wang wrote:
>>> This allows IGT to query the exact IP version for xe platforms.
>>>
>>> Key changes:
>>> - Add xe_device_ipver field to xe_device structure
>>> - set the graphics versions based on the GMD_ID
>>> - Cache device ipver in global map indexed by devid for efficient lookup
>>> - Implement xe_ipver_cache_lookup() to retrieve cached ipver by devid
>>> - Clean up cached device ipver when xe_device is released
>>>
>>> V2:
>>> - add new struct xe_device_ipver to hold the ipver info
>>> - separate cache map to eliminate collision (Roper, Matthew D)
>>> - changed function name to xe_ipver_cache_lookup() to avoid
>>> confusion (Roper, Matthew D)
>>>
>>> V3:
>>> - optimize the coding style. (Summers, Stuart)
>>>
>>> Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
>>> Cc: Matt Roper <matthew.d.roper@intel.com>
>>> Signed-off-by: Xin Wang <x.wang@intel.com>
>>> Reviewed-by: Ravi Kumar V <ravi.kumar.vodapalli@intel.com>
>>> ---
>>> lib/intel_chipset.h | 6 +++++
>>> lib/xe/xe_query.c | 54 ++++++++++++++++++++++++++++++++++++++++++++-
>>> lib/xe/xe_query.h | 4 ++++
>>> 3 files changed, 63 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
>>> index cc2225110..424811f7c 100644
>>> --- a/lib/intel_chipset.h
>>> +++ b/lib/intel_chipset.h
>>> @@ -100,6 +100,12 @@ struct intel_device_info {
>>> const char *codename;
>>> };
>>>
>>> +struct xe_device_ipver {
>>> + uint32_t devid;
>>> + uint16_t graphics_ver;
>>> + uint16_t graphics_rel;
>>> +};
>>> +
>>> const struct intel_device_info *intel_get_device_info(uint16_t devid) __attribute__((pure));
>>>
>>> const struct intel_cmds_info *intel_get_cmds_info(uint16_t devid) __attribute__((pure));
>>> diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c
>>> index 981d76948..823a29f2d 100644
>>> --- a/lib/xe/xe_query.c
>>> +++ b/lib/xe/xe_query.c
>>> @@ -210,6 +210,22 @@ static struct xe_device_cache {
>>> struct igt_map *map;
>>> } cache;
>>>
>>> +static struct xe_ipver_cache {
>>> + pthread_mutex_t mutex;
>>> + struct igt_map *map;
>>> +} xe_ipver;
>>> +
>>> +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid)
>>> +{
>>> + struct xe_device_ipver *ipver;
>>> +
>>> + pthread_mutex_lock(&xe_ipver.mutex);
>>> + ipver = igt_map_search(xe_ipver.map, &devid);
>>> + pthread_mutex_unlock(&xe_ipver.mutex);
>>> +
>>> + return ipver;
>>> +}
>>> +
>> Please forgive me for sharing my thoughts only now.
>>
>> I wondered about this a bit and according to current code shape
>> I don't like this design - especially ip_ver cache in xe_query.
>> I mean I don't like to use external cache which might or might not
>> be filled at time of calling intel_get_device_info().
>>
>> At the moment I see following options:
>>
>> 1. Provide update function intel_device_info_update(devid, ver, rel)
>> allowing to update rel field during xe_device_get(). This still
>> keeps intel_device_info.c independent but rel field might be
>> incorrect. BTW I would set it in static definition to -1 (max
>> unsigned) to catch it is not set/updated properly during
>> intel_get_device_info().
>>
>> 2. Add new function intel_get_device_info_by_fd() which will support
>> passing fd instead devid and migrate code to use it. Most of our code
>> uses fd to acquire device id before calling intel_get_device_info()
>> [exception is igt_device_scan which uses pci devid directly]. This
>> will break intel_device_info.c independency because we start calling
>> driver functions, but maybe it is time to do this (GMD_ID).
>>
>> Digression: It seems when INTEL_DEVID_OVERRIDE won't work properly
>> but I wouldn't care about it for now.
>>
>> 3. Mix 1 and 2 but build hash map from intel_device_match[] in the
>> constructor and update it during xe_device_get(). Pros of this
>> is we could stop using 'static __thread' for caching last info.
> The problem is that "graphics version" and "media version" are not
> supposed to be a characteristic of a general device type anymore. An
> individual device will have some version number, but another device of
> the same "type" with the same PCI ID can can potentially have a
> different IP version. We've been lucky enough so far to still have
> unique PCI IDs for cases where the version numbers are different (at
> least for production parts), but this is not something that we're
> supposed to be relying on since the IP disaggregation happened around
> the MTL timeframe. Personally I think that hacks that keep treating
> versions as something associated with a device type are just making the
> problem harder to untangle.
>
> For a proper solution, I think we really need to separate the concept of
> "traits associated with a type of device" (which is the stuff we have in
> the device info structure which can be accurately looked up by PCI ID)
> from "IP version associated with a specific device instance" (which on
> modern platforms can only be accurately looked up in the context of a
> specific device handle such as a FD).
>
> So aside from a few special cases, we want IGT to stop translating PCI
> IDs into version numbers and instead start translating fd's into version
> numbers. The special case exceptions I can think of that don't really
> have a way to do fd-based lookups are:
>
> * tools/tests that bypass the driver entirely (possibly running without
> the driver loaded) and just use libpciaccess for direct BAR access.
> Most of these either don't have version-based conditions or only have
> version conditions matching against very old platforms (where a
> PCIID-based lookup is "safe")
>
> * the old i915-era error dump decoder tool just reads its information
> (including PCI ID) from a dump file on disk. The tool might be
> executed on a completely different machine from where the dump was
> originally captured. I don't think this tool has been updated since
> gen8 (everyone switched over to using the Mesa tool instead), and I
> don't think it would function at all on any of our modern platforms.
> So if this tool is still useful at all, it would only be on ancient
> i915 platforms where a PCIID-based lookup is "safe."
>
>
> The solution I suggested during an earlier review of this series was:
>
> * Create separate "version from PCI ID" APIs that can be used in the
> few special cases listed above, and migrate those uses over.
>
> * Change the signature of intel_gen / intel_graphics_ver to take an FD
> rather than a PCI ID; when running on Xe this would do the lookup via
> the query ioctl to get an accurate value.
>
> * Update intel_gen / intel_graphics_ver:
> - If running on i915, fall back to the device_info lookup that
> we've always used. That's safe for all i915 platforms except
> MTL/ARL, and we were lucky enough that they never created any
> production MTL/ARL platforms where a single PCI ID had different
> possible versions, so it winds up being safe there too.
>
> - If running on Xe, use the query ioctl to obtain the version
> number. This will return the proper value for all platforms
> officially supported by Xe (i.e., Xe2 and later). It will return
> 0 on pre-MTL platforms (which aren't officially supported), but in
> that case IGT can fall back to the i915 approach above.
>
> I did a mockup of the first two parts several months ago:
>
> https://github.com/mattrope/intel-gpu-tools/commits/forupstream/version_query/
>
> Since the function interface is changing, it's a lot of churn, but most
> of it can be auto-converted quickly via Coccinelle.
>
>
> Matt
I created 2 series:
fd-based API:
https://patchwork.freedesktop.org/series/160271/
inject the graphics ver from xe_device_get(), keep the API unchanged
https://patchwork.freedesktop.org/series/160239/
>> --
>> Zbigniew
>>
>>> static struct xe_device *find_in_cache_unlocked(int fd)
>>> {
>>> return igt_map_search(cache.map, &fd);
>>> @@ -270,6 +286,24 @@ struct xe_device *xe_device_get(int fd)
>>> for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
>>> xe_dev->gt_mask |= (1ull << xe_dev->gt_list->gt_list[gt].gt_id);
>>>
>>> + /*
>>> + * Set graphics_ver and graphics_rel based on the main GT's GMD_ID.
>>> + * We should use the hardcoded value for the non-GMD_ID platforms (ip_ver_major == 0)
>>> + */
>>> + xe_dev->ipver.devid = 0;
>>> + for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++) {
>>> + if (xe_dev->gt_list->gt_list[gt].type == DRM_XE_QUERY_GT_TYPE_MAIN &&
>>> + xe_dev->gt_list->gt_list[gt].ip_ver_major) {
>>> + igt_debug("Setting graphics_ver to %u and graphics_rel to %u\n",
>>> + xe_dev->gt_list->gt_list[gt].ip_ver_major,
>>> + xe_dev->gt_list->gt_list[gt].ip_ver_minor);
>>> + xe_dev->ipver.graphics_ver = xe_dev->gt_list->gt_list[gt].ip_ver_major;
>>> + xe_dev->ipver.graphics_rel = xe_dev->gt_list->gt_list[gt].ip_ver_minor;
>>> + xe_dev->ipver.devid = xe_dev->dev_id;
>>> + break;
>>> + }
>>> + }
>>> +
>>> /* Tile IDs may be non-consecutive; keep a mask of valid IDs */
>>> for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
>>> xe_dev->tile_mask |= (1ull << xe_dev->gt_list->gt_list[gt].tile_id);
>>> @@ -304,6 +338,11 @@ struct xe_device *xe_device_get(int fd)
>>> prev = find_in_cache_unlocked(fd);
>>> if (!prev) {
>>> igt_map_insert(cache.map, &xe_dev->fd, xe_dev);
>>> + if (xe_dev->ipver.devid) {
>>> + pthread_mutex_lock(&xe_ipver.mutex);
>>> + igt_map_insert(xe_ipver.map, &xe_dev->ipver.devid, &xe_dev->ipver);
>>> + pthread_mutex_unlock(&xe_ipver.mutex);
>>> + }
>>> } else {
>>> xe_device_free(xe_dev);
>>> xe_dev = prev;
>>> @@ -315,7 +354,15 @@ struct xe_device *xe_device_get(int fd)
>>>
>>> static void delete_in_cache(struct igt_map_entry *entry)
>>> {
>>> - xe_device_free((struct xe_device *)entry->data);
>>> + struct xe_device *xe_dev = (struct xe_device *)entry->data;
>>> +
>>> + if (xe_dev->ipver.devid) {
>>> + pthread_mutex_lock(&xe_ipver.mutex);
>>> + igt_map_remove(xe_ipver.map, &xe_dev->ipver.devid, NULL);
>>> + pthread_mutex_unlock(&xe_ipver.mutex);
>>> + }
>>> +
>>> + xe_device_free(xe_dev);
>>> }
>>>
>>> /**
>>> @@ -365,13 +412,18 @@ static void xe_device_destroy_cache(void)
>>> pthread_mutex_lock(&cache.cache_mutex);
>>> igt_map_destroy(cache.map, delete_in_cache);
>>> pthread_mutex_unlock(&cache.cache_mutex);
>>> + pthread_mutex_lock(&xe_ipver.mutex);
>>> + igt_map_destroy(xe_ipver.map, NULL);
>>> + pthread_mutex_unlock(&xe_ipver.mutex);
>>> }
>>>
>>> static void xe_device_cache_init(void)
>>> {
>>> pthread_mutex_init(&cache.cache_mutex, NULL);
>>> + pthread_mutex_init(&xe_ipver.mutex, NULL);
>>> xe_device_destroy_cache();
>>> cache.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
>>> + xe_ipver.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
>>> }
>>>
>>> #define xe_dev_FN(_NAME, _FIELD, _TYPE) \
>>> diff --git a/lib/xe/xe_query.h b/lib/xe/xe_query.h
>>> index d7a9f95f9..19690cff3 100644
>>> --- a/lib/xe/xe_query.h
>>> +++ b/lib/xe/xe_query.h
>>> @@ -74,6 +74,9 @@ struct xe_device {
>>>
>>> /** @dev_id: Device id of xe device */
>>> uint16_t dev_id;
>>> +
>>> + /** @ipver: Device ip version */
>>> + struct xe_device_ipver ipver;
>>> };
>>>
>>> #define xe_for_each_engine(__fd, __hwe) \
>>> @@ -181,6 +184,7 @@ static inline void *xe_query_device(int fd, uint32_t type, uint32_t *size)
>>> }
>>>
>>> struct xe_device *xe_device_get(int fd);
>>> +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid);
>>> void xe_device_put(int fd);
>>>
>>> int xe_query_eu_count(int fd, int gt);
>>> --
>>> 2.43.0
>>>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version from GMD_ID
2026-01-16 21:33 ` Matt Roper
2026-01-19 7:43 ` Wang, X
@ 2026-01-19 10:36 ` Zbigniew Kempczyński
2026-01-20 23:15 ` Matt Roper
1 sibling, 1 reply; 12+ messages in thread
From: Zbigniew Kempczyński @ 2026-01-19 10:36 UTC (permalink / raw)
To: Matt Roper; +Cc: Xin Wang, igt-dev, Kamil Konieczny, Ravi Kumar V
On Fri, Jan 16, 2026 at 01:33:58PM -0800, Matt Roper wrote:
> On Thu, Jan 15, 2026 at 09:00:53AM +0100, Zbigniew Kempczyński wrote:
> > On Mon, Jan 12, 2026 at 07:17:31PM +0000, Xin Wang wrote:
> > > This allows IGT to query the exact IP version for xe platforms.
> > >
> > > Key changes:
> > > - Add xe_device_ipver field to xe_device structure
> > > - set the graphics versions based on the GMD_ID
> > > - Cache device ipver in global map indexed by devid for efficient lookup
> > > - Implement xe_ipver_cache_lookup() to retrieve cached ipver by devid
> > > - Clean up cached device ipver when xe_device is released
> > >
> > > V2:
> > > - add new struct xe_device_ipver to hold the ipver info
> > > - separate cache map to eliminate collision (Roper, Matthew D)
> > > - changed function name to xe_ipver_cache_lookup() to avoid
> > > confusion (Roper, Matthew D)
> > >
> > > V3:
> > > - optimize the coding style. (Summers, Stuart)
> > >
> > > Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> > > Cc: Matt Roper <matthew.d.roper@intel.com>
> > > Signed-off-by: Xin Wang <x.wang@intel.com>
> > > Reviewed-by: Ravi Kumar V <ravi.kumar.vodapalli@intel.com>
> > > ---
> > > lib/intel_chipset.h | 6 +++++
> > > lib/xe/xe_query.c | 54 ++++++++++++++++++++++++++++++++++++++++++++-
> > > lib/xe/xe_query.h | 4 ++++
> > > 3 files changed, 63 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
> > > index cc2225110..424811f7c 100644
> > > --- a/lib/intel_chipset.h
> > > +++ b/lib/intel_chipset.h
> > > @@ -100,6 +100,12 @@ struct intel_device_info {
> > > const char *codename;
> > > };
> > >
> > > +struct xe_device_ipver {
> > > + uint32_t devid;
> > > + uint16_t graphics_ver;
> > > + uint16_t graphics_rel;
> > > +};
> > > +
> > > const struct intel_device_info *intel_get_device_info(uint16_t devid) __attribute__((pure));
> > >
> > > const struct intel_cmds_info *intel_get_cmds_info(uint16_t devid) __attribute__((pure));
> > > diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c
> > > index 981d76948..823a29f2d 100644
> > > --- a/lib/xe/xe_query.c
> > > +++ b/lib/xe/xe_query.c
> > > @@ -210,6 +210,22 @@ static struct xe_device_cache {
> > > struct igt_map *map;
> > > } cache;
> > >
> > > +static struct xe_ipver_cache {
> > > + pthread_mutex_t mutex;
> > > + struct igt_map *map;
> > > +} xe_ipver;
> > > +
> > > +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid)
> > > +{
> > > + struct xe_device_ipver *ipver;
> > > +
> > > + pthread_mutex_lock(&xe_ipver.mutex);
> > > + ipver = igt_map_search(xe_ipver.map, &devid);
> > > + pthread_mutex_unlock(&xe_ipver.mutex);
> > > +
> > > + return ipver;
> > > +}
> > > +
> >
> > Please forgive me for sharing my thoughts only now.
> >
> > I wondered about this a bit and according to current code shape
> > I don't like this design - especially ip_ver cache in xe_query.
> > I mean I don't like to use external cache which might or might not
> > be filled at time of calling intel_get_device_info().
> >
> > At the moment I see following options:
> >
> > 1. Provide update function intel_device_info_update(devid, ver, rel)
> > allowing to update rel field during xe_device_get(). This still
> > keeps intel_device_info.c independent but rel field might be
> > incorrect. BTW I would set it in static definition to -1 (max
> > unsigned) to catch it is not set/updated properly during
> > intel_get_device_info().
> >
> > 2. Add new function intel_get_device_info_by_fd() which will support
> > passing fd instead devid and migrate code to use it. Most of our code
> > uses fd to acquire device id before calling intel_get_device_info()
> > [exception is igt_device_scan which uses pci devid directly]. This
> > will break intel_device_info.c independency because we start calling
> > driver functions, but maybe it is time to do this (GMD_ID).
> >
> > Digression: It seems when INTEL_DEVID_OVERRIDE won't work properly
> > but I wouldn't care about it for now.
> >
> > 3. Mix 1 and 2 but build hash map from intel_device_match[] in the
> > constructor and update it during xe_device_get(). Pros of this
> > is we could stop using 'static __thread' for caching last info.
>
> The problem is that "graphics version" and "media version" are not
> supposed to be a characteristic of a general device type anymore. An
> individual device will have some version number, but another device of
> the same "type" with the same PCI ID can can potentially have a
> different IP version. We've been lucky enough so far to still have
> unique PCI IDs for cases where the version numbers are different (at
> least for production parts), but this is not something that we're
> supposed to be relying on since the IP disaggregation happened around
> the MTL timeframe. Personally I think that hacks that keep treating
> versions as something associated with a device type are just making the
> problem harder to untangle.
Thanks for explaining this. I wasn't aware same PCI ID may map to
different IP versions. If I'm not wrong atm kernel also doesn't have
this addressed yet (pciidlist[] still maps PCI ID to some device
characteristics). Is it possible the opossite that same ver/rel may map
to different PCI IDs? This would complicate things even more, especially
we heavily depend on some flags set for device (has_flatccs, etc). Or
ver/rel will uniquely determine other device characteristics? If yes
may we replace PCI ID to ver/rel as a key for device info?
>
> For a proper solution, I think we really need to separate the concept of
> "traits associated with a type of device" (which is the stuff we have in
> the device info structure which can be accurately looked up by PCI ID)
> from "IP version associated with a specific device instance" (which on
> modern platforms can only be accurately looked up in the context of a
> specific device handle such as a FD).
I'm not sure what you've written is equal to my previous comment? I mean
ver/rel is a device characteristic key?
--
Zbigniew
>
> So aside from a few special cases, we want IGT to stop translating PCI
> IDs into version numbers and instead start translating fd's into version
> numbers. The special case exceptions I can think of that don't really
> have a way to do fd-based lookups are:
>
> * tools/tests that bypass the driver entirely (possibly running without
> the driver loaded) and just use libpciaccess for direct BAR access.
> Most of these either don't have version-based conditions or only have
> version conditions matching against very old platforms (where a
> PCIID-based lookup is "safe")
>
> * the old i915-era error dump decoder tool just reads its information
> (including PCI ID) from a dump file on disk. The tool might be
> executed on a completely different machine from where the dump was
> originally captured. I don't think this tool has been updated since
> gen8 (everyone switched over to using the Mesa tool instead), and I
> don't think it would function at all on any of our modern platforms.
> So if this tool is still useful at all, it would only be on ancient
> i915 platforms where a PCIID-based lookup is "safe."
>
>
> The solution I suggested during an earlier review of this series was:
>
> * Create separate "version from PCI ID" APIs that can be used in the
> few special cases listed above, and migrate those uses over.
>
> * Change the signature of intel_gen / intel_graphics_ver to take an FD
> rather than a PCI ID; when running on Xe this would do the lookup via
> the query ioctl to get an accurate value.
>
> * Update intel_gen / intel_graphics_ver:
> - If running on i915, fall back to the device_info lookup that
> we've always used. That's safe for all i915 platforms except
> MTL/ARL, and we were lucky enough that they never created any
> production MTL/ARL platforms where a single PCI ID had different
> possible versions, so it winds up being safe there too.
>
> - If running on Xe, use the query ioctl to obtain the version
> number. This will return the proper value for all platforms
> officially supported by Xe (i.e., Xe2 and later). It will return
> 0 on pre-MTL platforms (which aren't officially supported), but in
> that case IGT can fall back to the i915 approach above.
>
> I did a mockup of the first two parts several months ago:
>
> https://github.com/mattrope/intel-gpu-tools/commits/forupstream/version_query/
>
> Since the function interface is changing, it's a lot of churn, but most
> of it can be auto-converted quickly via Coccinelle.
>
>
> Matt
>
> >
> > --
> > Zbigniew
> >
> > > static struct xe_device *find_in_cache_unlocked(int fd)
> > > {
> > > return igt_map_search(cache.map, &fd);
> > > @@ -270,6 +286,24 @@ struct xe_device *xe_device_get(int fd)
> > > for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
> > > xe_dev->gt_mask |= (1ull << xe_dev->gt_list->gt_list[gt].gt_id);
> > >
> > > + /*
> > > + * Set graphics_ver and graphics_rel based on the main GT's GMD_ID.
> > > + * We should use the hardcoded value for the non-GMD_ID platforms (ip_ver_major == 0)
> > > + */
> > > + xe_dev->ipver.devid = 0;
> > > + for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++) {
> > > + if (xe_dev->gt_list->gt_list[gt].type == DRM_XE_QUERY_GT_TYPE_MAIN &&
> > > + xe_dev->gt_list->gt_list[gt].ip_ver_major) {
> > > + igt_debug("Setting graphics_ver to %u and graphics_rel to %u\n",
> > > + xe_dev->gt_list->gt_list[gt].ip_ver_major,
> > > + xe_dev->gt_list->gt_list[gt].ip_ver_minor);
> > > + xe_dev->ipver.graphics_ver = xe_dev->gt_list->gt_list[gt].ip_ver_major;
> > > + xe_dev->ipver.graphics_rel = xe_dev->gt_list->gt_list[gt].ip_ver_minor;
> > > + xe_dev->ipver.devid = xe_dev->dev_id;
> > > + break;
> > > + }
> > > + }
> > > +
> > > /* Tile IDs may be non-consecutive; keep a mask of valid IDs */
> > > for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
> > > xe_dev->tile_mask |= (1ull << xe_dev->gt_list->gt_list[gt].tile_id);
> > > @@ -304,6 +338,11 @@ struct xe_device *xe_device_get(int fd)
> > > prev = find_in_cache_unlocked(fd);
> > > if (!prev) {
> > > igt_map_insert(cache.map, &xe_dev->fd, xe_dev);
> > > + if (xe_dev->ipver.devid) {
> > > + pthread_mutex_lock(&xe_ipver.mutex);
> > > + igt_map_insert(xe_ipver.map, &xe_dev->ipver.devid, &xe_dev->ipver);
> > > + pthread_mutex_unlock(&xe_ipver.mutex);
> > > + }
> > > } else {
> > > xe_device_free(xe_dev);
> > > xe_dev = prev;
> > > @@ -315,7 +354,15 @@ struct xe_device *xe_device_get(int fd)
> > >
> > > static void delete_in_cache(struct igt_map_entry *entry)
> > > {
> > > - xe_device_free((struct xe_device *)entry->data);
> > > + struct xe_device *xe_dev = (struct xe_device *)entry->data;
> > > +
> > > + if (xe_dev->ipver.devid) {
> > > + pthread_mutex_lock(&xe_ipver.mutex);
> > > + igt_map_remove(xe_ipver.map, &xe_dev->ipver.devid, NULL);
> > > + pthread_mutex_unlock(&xe_ipver.mutex);
> > > + }
> > > +
> > > + xe_device_free(xe_dev);
> > > }
> > >
> > > /**
> > > @@ -365,13 +412,18 @@ static void xe_device_destroy_cache(void)
> > > pthread_mutex_lock(&cache.cache_mutex);
> > > igt_map_destroy(cache.map, delete_in_cache);
> > > pthread_mutex_unlock(&cache.cache_mutex);
> > > + pthread_mutex_lock(&xe_ipver.mutex);
> > > + igt_map_destroy(xe_ipver.map, NULL);
> > > + pthread_mutex_unlock(&xe_ipver.mutex);
> > > }
> > >
> > > static void xe_device_cache_init(void)
> > > {
> > > pthread_mutex_init(&cache.cache_mutex, NULL);
> > > + pthread_mutex_init(&xe_ipver.mutex, NULL);
> > > xe_device_destroy_cache();
> > > cache.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
> > > + xe_ipver.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
> > > }
> > >
> > > #define xe_dev_FN(_NAME, _FIELD, _TYPE) \
> > > diff --git a/lib/xe/xe_query.h b/lib/xe/xe_query.h
> > > index d7a9f95f9..19690cff3 100644
> > > --- a/lib/xe/xe_query.h
> > > +++ b/lib/xe/xe_query.h
> > > @@ -74,6 +74,9 @@ struct xe_device {
> > >
> > > /** @dev_id: Device id of xe device */
> > > uint16_t dev_id;
> > > +
> > > + /** @ipver: Device ip version */
> > > + struct xe_device_ipver ipver;
> > > };
> > >
> > > #define xe_for_each_engine(__fd, __hwe) \
> > > @@ -181,6 +184,7 @@ static inline void *xe_query_device(int fd, uint32_t type, uint32_t *size)
> > > }
> > >
> > > struct xe_device *xe_device_get(int fd);
> > > +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid);
> > > void xe_device_put(int fd);
> > >
> > > int xe_query_eu_count(int fd, int gt);
> > > --
> > > 2.43.0
> > >
>
> --
> Matt Roper
> Graphics Software Engineer
> Linux GPU Platform Enablement
> Intel Corporation
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version from GMD_ID
2026-01-19 10:36 ` Zbigniew Kempczyński
@ 2026-01-20 23:15 ` Matt Roper
0 siblings, 0 replies; 12+ messages in thread
From: Matt Roper @ 2026-01-20 23:15 UTC (permalink / raw)
To: Zbigniew Kempczyński
Cc: Xin Wang, igt-dev, Kamil Konieczny, Ravi Kumar V
On Mon, Jan 19, 2026 at 11:36:27AM +0100, Zbigniew Kempczyński wrote:
> On Fri, Jan 16, 2026 at 01:33:58PM -0800, Matt Roper wrote:
> > On Thu, Jan 15, 2026 at 09:00:53AM +0100, Zbigniew Kempczyński wrote:
> > > On Mon, Jan 12, 2026 at 07:17:31PM +0000, Xin Wang wrote:
> > > > This allows IGT to query the exact IP version for xe platforms.
> > > >
> > > > Key changes:
> > > > - Add xe_device_ipver field to xe_device structure
> > > > - set the graphics versions based on the GMD_ID
> > > > - Cache device ipver in global map indexed by devid for efficient lookup
> > > > - Implement xe_ipver_cache_lookup() to retrieve cached ipver by devid
> > > > - Clean up cached device ipver when xe_device is released
> > > >
> > > > V2:
> > > > - add new struct xe_device_ipver to hold the ipver info
> > > > - separate cache map to eliminate collision (Roper, Matthew D)
> > > > - changed function name to xe_ipver_cache_lookup() to avoid
> > > > confusion (Roper, Matthew D)
> > > >
> > > > V3:
> > > > - optimize the coding style. (Summers, Stuart)
> > > >
> > > > Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> > > > Cc: Matt Roper <matthew.d.roper@intel.com>
> > > > Signed-off-by: Xin Wang <x.wang@intel.com>
> > > > Reviewed-by: Ravi Kumar V <ravi.kumar.vodapalli@intel.com>
> > > > ---
> > > > lib/intel_chipset.h | 6 +++++
> > > > lib/xe/xe_query.c | 54 ++++++++++++++++++++++++++++++++++++++++++++-
> > > > lib/xe/xe_query.h | 4 ++++
> > > > 3 files changed, 63 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
> > > > index cc2225110..424811f7c 100644
> > > > --- a/lib/intel_chipset.h
> > > > +++ b/lib/intel_chipset.h
> > > > @@ -100,6 +100,12 @@ struct intel_device_info {
> > > > const char *codename;
> > > > };
> > > >
> > > > +struct xe_device_ipver {
> > > > + uint32_t devid;
> > > > + uint16_t graphics_ver;
> > > > + uint16_t graphics_rel;
> > > > +};
> > > > +
> > > > const struct intel_device_info *intel_get_device_info(uint16_t devid) __attribute__((pure));
> > > >
> > > > const struct intel_cmds_info *intel_get_cmds_info(uint16_t devid) __attribute__((pure));
> > > > diff --git a/lib/xe/xe_query.c b/lib/xe/xe_query.c
> > > > index 981d76948..823a29f2d 100644
> > > > --- a/lib/xe/xe_query.c
> > > > +++ b/lib/xe/xe_query.c
> > > > @@ -210,6 +210,22 @@ static struct xe_device_cache {
> > > > struct igt_map *map;
> > > > } cache;
> > > >
> > > > +static struct xe_ipver_cache {
> > > > + pthread_mutex_t mutex;
> > > > + struct igt_map *map;
> > > > +} xe_ipver;
> > > > +
> > > > +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid)
> > > > +{
> > > > + struct xe_device_ipver *ipver;
> > > > +
> > > > + pthread_mutex_lock(&xe_ipver.mutex);
> > > > + ipver = igt_map_search(xe_ipver.map, &devid);
> > > > + pthread_mutex_unlock(&xe_ipver.mutex);
> > > > +
> > > > + return ipver;
> > > > +}
> > > > +
> > >
> > > Please forgive me for sharing my thoughts only now.
> > >
> > > I wondered about this a bit and according to current code shape
> > > I don't like this design - especially ip_ver cache in xe_query.
> > > I mean I don't like to use external cache which might or might not
> > > be filled at time of calling intel_get_device_info().
> > >
> > > At the moment I see following options:
> > >
> > > 1. Provide update function intel_device_info_update(devid, ver, rel)
> > > allowing to update rel field during xe_device_get(). This still
> > > keeps intel_device_info.c independent but rel field might be
> > > incorrect. BTW I would set it in static definition to -1 (max
> > > unsigned) to catch it is not set/updated properly during
> > > intel_get_device_info().
> > >
> > > 2. Add new function intel_get_device_info_by_fd() which will support
> > > passing fd instead devid and migrate code to use it. Most of our code
> > > uses fd to acquire device id before calling intel_get_device_info()
> > > [exception is igt_device_scan which uses pci devid directly]. This
> > > will break intel_device_info.c independency because we start calling
> > > driver functions, but maybe it is time to do this (GMD_ID).
> > >
> > > Digression: It seems when INTEL_DEVID_OVERRIDE won't work properly
> > > but I wouldn't care about it for now.
> > >
> > > 3. Mix 1 and 2 but build hash map from intel_device_match[] in the
> > > constructor and update it during xe_device_get(). Pros of this
> > > is we could stop using 'static __thread' for caching last info.
> >
> > The problem is that "graphics version" and "media version" are not
> > supposed to be a characteristic of a general device type anymore. An
> > individual device will have some version number, but another device of
> > the same "type" with the same PCI ID can can potentially have a
> > different IP version. We've been lucky enough so far to still have
> > unique PCI IDs for cases where the version numbers are different (at
> > least for production parts), but this is not something that we're
> > supposed to be relying on since the IP disaggregation happened around
> > the MTL timeframe. Personally I think that hacks that keep treating
> > versions as something associated with a device type are just making the
> > problem harder to untangle.
>
> Thanks for explaining this. I wasn't aware same PCI ID may map to
> different IP versions. If I'm not wrong atm kernel also doesn't have
> this addressed yet (pciidlist[] still maps PCI ID to some device
> characteristics).
I think the kernel should support this all properly today. In xe_pci.c,
we track two different sets of characteristics and look them up
independently. PCI ID is only used to pick xe_device_desc structures
that have "platform" and "subplatform" characteristics (e.g.,
"BMG-G21"). That's roughly equivalent to the IGT device info
structures. For modern platforms with official version numbers reported
via GMD_ID, we independently map the GMD_ID values reported by hardware
into xe_graphics_desc and xe_media_desc descriptors that provide
characteristics for the IP (e.g., "Xe2_HPG"). Anything that's tied to
the graphics/media IP itself (usually GT-level stuff) uses fields from
the graphics/media descriptors and is unaffected by what the PCI ID
indicates the platform is. Conversely, anything tied to the
platform/SoC uses fields from the platform descriptors and is unaffected
by what the GMD_ID registers claim the IP blocks are.
If some new variant of LNL were to show up tomorrow that integrated Xe3
IP instead of Xe2 IP, the KMD should handle that properly, even if the
PCI ID was the same as one of our regular Xe2-based LNL's.
Before GMD_ID showed up in MTL/ARL, there used to truly be a fixed
association between "platform" and "graphics/media IP block." In the
XeKMD those old platforms are handled by directly assigning the
appropriate IP descriptor to .pre_gmdid_graphics_ip and
.pre_gmdid_media_ip fields in the device descriptor. For modern GMD_ID
platforms, those fields are left NULL so that the proper IPs are
selected according to GMD_ID value at runtime.
> Is it possible the opossite that same ver/rel may map
> to different PCI IDs?
Yeah, this happens all the time. There are about 13 different PCI IDs
associated with the BMG platform and subplatforms, and today all such
BMG devices are using either graphics version 20.01 or 20.02. So a
single IP ver+rel can appear on lots of different PCI IDs. We shouldn't
assume that other IP versions won't show up in the future (possibly even
paired with some of the existing PCI IDs), but that's where things stand
today.
We've been pretty lucky so far that even though we're not supposed to
tie PCI ID directly to IP version, the products that have been created
so far have tended to keep using new PCI IDs in cases where new they
also start integrating a new IP version with a different GMD_ID. That
isn't something they guarantee they'll continue doing, and I think there
have already been a few cases in early pre-production hardware where
we've had multiple devices with the same PCI but different GMD_IDs.
> This would complicate things even more, especially
> we heavily depend on some flags set for device (has_flatccs, etc). Or
> ver/rel will uniquely determine other device characteristics? If yes
> may we replace PCI ID to ver/rel as a key for device info?
I think IGT, like the KMD, needs to track two different sets of
characteristics:
PCI ID: Platform/Subplatform Information:
- "IS_FOOLAKE" platform identity checks
- is_discrete
- has_lmem
- has_flattcs
- has_display
- userspace workarounds listed against an SoC stepping (not sure if
any such workarounds actually exist; these are rare even on the
KMD side)
- ...etc...
GMD_ID: IP Information (usually GT-specific);
- GPU instructions supported (and field details)
- behavior & field layout of userspace-accessible registers
- userspace workarounds listed against a graphics/media release
(using GMD_ID value match specific release(s) affected)
For the graphics/media IP items, we don't always need to set them as
fields in a descriptor structure if the code has access to the GMD_ID
value reported by the hardware since a lot of times the code can just do
a >= version check instead.
>
> >
> > For a proper solution, I think we really need to separate the concept of
> > "traits associated with a type of device" (which is the stuff we have in
> > the device info structure which can be accurately looked up by PCI ID)
> > from "IP version associated with a specific device instance" (which on
> > modern platforms can only be accurately looked up in the context of a
> > specific device handle such as a FD).
>
> I'm not sure what you've written is equal to my previous comment? I mean
> ver/rel is a device characteristic key?
I was trying to distinguish type of device (e.g., "BMG") from a specific
instance of that device type (i.e., the specific BMG card I'm running
these tests on right now). Given a PCI ID, we know the type of device
since PCI ID ranges mapped to device type. But for device-instance
information, we need to read a register on the device itself to see the
version number that it self-reports, and then make other decisions based
on that (either by comparing the version number directly, or by using a
separate GMD_ID -> table lookup).
Matt
>
> --
> Zbigniew
>
> >
> > So aside from a few special cases, we want IGT to stop translating PCI
> > IDs into version numbers and instead start translating fd's into version
> > numbers. The special case exceptions I can think of that don't really
> > have a way to do fd-based lookups are:
> >
> > * tools/tests that bypass the driver entirely (possibly running without
> > the driver loaded) and just use libpciaccess for direct BAR access.
> > Most of these either don't have version-based conditions or only have
> > version conditions matching against very old platforms (where a
> > PCIID-based lookup is "safe")
> >
> > * the old i915-era error dump decoder tool just reads its information
> > (including PCI ID) from a dump file on disk. The tool might be
> > executed on a completely different machine from where the dump was
> > originally captured. I don't think this tool has been updated since
> > gen8 (everyone switched over to using the Mesa tool instead), and I
> > don't think it would function at all on any of our modern platforms.
> > So if this tool is still useful at all, it would only be on ancient
> > i915 platforms where a PCIID-based lookup is "safe."
> >
> >
> > The solution I suggested during an earlier review of this series was:
> >
> > * Create separate "version from PCI ID" APIs that can be used in the
> > few special cases listed above, and migrate those uses over.
> >
> > * Change the signature of intel_gen / intel_graphics_ver to take an FD
> > rather than a PCI ID; when running on Xe this would do the lookup via
> > the query ioctl to get an accurate value.
> >
> > * Update intel_gen / intel_graphics_ver:
> > - If running on i915, fall back to the device_info lookup that
> > we've always used. That's safe for all i915 platforms except
> > MTL/ARL, and we were lucky enough that they never created any
> > production MTL/ARL platforms where a single PCI ID had different
> > possible versions, so it winds up being safe there too.
> >
> > - If running on Xe, use the query ioctl to obtain the version
> > number. This will return the proper value for all platforms
> > officially supported by Xe (i.e., Xe2 and later). It will return
> > 0 on pre-MTL platforms (which aren't officially supported), but in
> > that case IGT can fall back to the i915 approach above.
> >
> > I did a mockup of the first two parts several months ago:
> >
> > https://github.com/mattrope/intel-gpu-tools/commits/forupstream/version_query/
> >
> > Since the function interface is changing, it's a lot of churn, but most
> > of it can be auto-converted quickly via Coccinelle.
> >
> >
> > Matt
> >
> > >
> > > --
> > > Zbigniew
> > >
> > > > static struct xe_device *find_in_cache_unlocked(int fd)
> > > > {
> > > > return igt_map_search(cache.map, &fd);
> > > > @@ -270,6 +286,24 @@ struct xe_device *xe_device_get(int fd)
> > > > for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
> > > > xe_dev->gt_mask |= (1ull << xe_dev->gt_list->gt_list[gt].gt_id);
> > > >
> > > > + /*
> > > > + * Set graphics_ver and graphics_rel based on the main GT's GMD_ID.
> > > > + * We should use the hardcoded value for the non-GMD_ID platforms (ip_ver_major == 0)
> > > > + */
> > > > + xe_dev->ipver.devid = 0;
> > > > + for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++) {
> > > > + if (xe_dev->gt_list->gt_list[gt].type == DRM_XE_QUERY_GT_TYPE_MAIN &&
> > > > + xe_dev->gt_list->gt_list[gt].ip_ver_major) {
> > > > + igt_debug("Setting graphics_ver to %u and graphics_rel to %u\n",
> > > > + xe_dev->gt_list->gt_list[gt].ip_ver_major,
> > > > + xe_dev->gt_list->gt_list[gt].ip_ver_minor);
> > > > + xe_dev->ipver.graphics_ver = xe_dev->gt_list->gt_list[gt].ip_ver_major;
> > > > + xe_dev->ipver.graphics_rel = xe_dev->gt_list->gt_list[gt].ip_ver_minor;
> > > > + xe_dev->ipver.devid = xe_dev->dev_id;
> > > > + break;
> > > > + }
> > > > + }
> > > > +
> > > > /* Tile IDs may be non-consecutive; keep a mask of valid IDs */
> > > > for (int gt = 0; gt < xe_dev->gt_list->num_gt; gt++)
> > > > xe_dev->tile_mask |= (1ull << xe_dev->gt_list->gt_list[gt].tile_id);
> > > > @@ -304,6 +338,11 @@ struct xe_device *xe_device_get(int fd)
> > > > prev = find_in_cache_unlocked(fd);
> > > > if (!prev) {
> > > > igt_map_insert(cache.map, &xe_dev->fd, xe_dev);
> > > > + if (xe_dev->ipver.devid) {
> > > > + pthread_mutex_lock(&xe_ipver.mutex);
> > > > + igt_map_insert(xe_ipver.map, &xe_dev->ipver.devid, &xe_dev->ipver);
> > > > + pthread_mutex_unlock(&xe_ipver.mutex);
> > > > + }
> > > > } else {
> > > > xe_device_free(xe_dev);
> > > > xe_dev = prev;
> > > > @@ -315,7 +354,15 @@ struct xe_device *xe_device_get(int fd)
> > > >
> > > > static void delete_in_cache(struct igt_map_entry *entry)
> > > > {
> > > > - xe_device_free((struct xe_device *)entry->data);
> > > > + struct xe_device *xe_dev = (struct xe_device *)entry->data;
> > > > +
> > > > + if (xe_dev->ipver.devid) {
> > > > + pthread_mutex_lock(&xe_ipver.mutex);
> > > > + igt_map_remove(xe_ipver.map, &xe_dev->ipver.devid, NULL);
> > > > + pthread_mutex_unlock(&xe_ipver.mutex);
> > > > + }
> > > > +
> > > > + xe_device_free(xe_dev);
> > > > }
> > > >
> > > > /**
> > > > @@ -365,13 +412,18 @@ static void xe_device_destroy_cache(void)
> > > > pthread_mutex_lock(&cache.cache_mutex);
> > > > igt_map_destroy(cache.map, delete_in_cache);
> > > > pthread_mutex_unlock(&cache.cache_mutex);
> > > > + pthread_mutex_lock(&xe_ipver.mutex);
> > > > + igt_map_destroy(xe_ipver.map, NULL);
> > > > + pthread_mutex_unlock(&xe_ipver.mutex);
> > > > }
> > > >
> > > > static void xe_device_cache_init(void)
> > > > {
> > > > pthread_mutex_init(&cache.cache_mutex, NULL);
> > > > + pthread_mutex_init(&xe_ipver.mutex, NULL);
> > > > xe_device_destroy_cache();
> > > > cache.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
> > > > + xe_ipver.map = igt_map_create(igt_map_hash_32, igt_map_equal_32);
> > > > }
> > > >
> > > > #define xe_dev_FN(_NAME, _FIELD, _TYPE) \
> > > > diff --git a/lib/xe/xe_query.h b/lib/xe/xe_query.h
> > > > index d7a9f95f9..19690cff3 100644
> > > > --- a/lib/xe/xe_query.h
> > > > +++ b/lib/xe/xe_query.h
> > > > @@ -74,6 +74,9 @@ struct xe_device {
> > > >
> > > > /** @dev_id: Device id of xe device */
> > > > uint16_t dev_id;
> > > > +
> > > > + /** @ipver: Device ip version */
> > > > + struct xe_device_ipver ipver;
> > > > };
> > > >
> > > > #define xe_for_each_engine(__fd, __hwe) \
> > > > @@ -181,6 +184,7 @@ static inline void *xe_query_device(int fd, uint32_t type, uint32_t *size)
> > > > }
> > > >
> > > > struct xe_device *xe_device_get(int fd);
> > > > +struct xe_device_ipver *xe_ipver_cache_lookup(uint32_t devid);
> > > > void xe_device_put(int fd);
> > > >
> > > > int xe_query_eu_count(int fd, int gt);
> > > > --
> > > > 2.43.0
> > > >
> >
> > --
> > Matt Roper
> > Graphics Software Engineer
> > Linux GPU Platform Enablement
> > Intel Corporation
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-01-20 23:15 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-12 19:17 [PATCH v10 0/2] lib/intel_device_info: get the xe .graphics_rel from GMD_ID Xin Wang
2026-01-12 19:17 ` [PATCH v10 1/2] lib/xe/xe_query: Get runtime xe device graphics version " Xin Wang
2026-01-15 8:00 ` Zbigniew Kempczyński
2026-01-16 18:55 ` Wang, X
2026-01-16 21:33 ` Matt Roper
2026-01-19 7:43 ` Wang, X
2026-01-19 10:36 ` Zbigniew Kempczyński
2026-01-20 23:15 ` Matt Roper
2026-01-12 19:17 ` [PATCH v10 2/2] lib/intel_device_info: Query runtime xe device graphics versions Xin Wang
2026-01-12 20:38 ` ✓ Xe.CI.BAT: success for lib/intel_device_info: get the xe .graphics_rel from GMD_ID Patchwork
2026-01-12 20:50 ` ✗ i915.CI.BAT: failure " Patchwork
2026-01-13 3:22 ` ✓ Xe.CI.Full: success " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox