* [PATCH 0/5] Future-proof for multi-tile + multi-GT cases
@ 2025-06-13 0:14 Matt Roper
2025-06-13 0:14 ` [PATCH 1/5] drm/xe: Export xe_step_name for kunit tests Matt Roper
` (6 more replies)
0 siblings, 7 replies; 12+ messages in thread
From: Matt Roper @ 2025-06-13 0:14 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.d.roper
Today all of our platforms fall into one of three cases:
* Single tile platforms with a single (primary) GT
* Single tile platforms with two GTs (primary + media)
* Two-tile platforms with a single GT (primary) in each
Our numbering of GTs has been a bit inconsistent between platforms
(e.g., GT1 is the media GT on some platforms, but the second tile's
primary GT on others). In the future we'll likely have platforms that
are both multi-tile and multi-GT, which will make the situation more
confusing. We could also wind up with more than just two types of GTs
at some point in the future.
Going forward we should standardize the way we assign uapi GT IDs to
internal GT structures. Let's declare that for userspace GT ID n,
GT[n]'s tile = n / (max gt per tile)
GT[n]'s slot within tile = n % (max gt per tile)
If we allow 'max gt per tile' to vary by platform, we can support any
possible future tile/GT combinations (even if new types of GTs show up)
without changing any behavior of our existing platforms.
Matt Roper (5):
drm/xe: Export xe_step_name for kunit tests
drm/xe: Track maximum GTs per tile on a per-platform basis
drm/xe/tests/pci: Ensure all platforms have a valid GT/tile count
drm/xe: Assign GT IDs properly on multi-tile + multi-GT platforms
drm/xe: Don't compare GT ID to GT count when determining valid GTs
drivers/gpu/drm/xe/tests/xe_pci.c | 24 +++++++++
drivers/gpu/drm/xe/tests/xe_pci_test.c | 15 ++++++
drivers/gpu/drm/xe/tests/xe_pci_test.h | 3 ++
drivers/gpu/drm/xe/xe_device.h | 47 ++++++++----------
drivers/gpu/drm/xe/xe_device_types.h | 2 +
drivers/gpu/drm/xe/xe_eu_stall.c | 6 ++-
drivers/gpu/drm/xe/xe_exec_queue.c | 2 +-
drivers/gpu/drm/xe/xe_hw_engine.c | 3 +-
drivers/gpu/drm/xe/xe_mmio.c | 8 ---
drivers/gpu/drm/xe/xe_pci.c | 68 ++++++++------------------
drivers/gpu/drm/xe/xe_pci_types.h | 40 +++++++++++++++
drivers/gpu/drm/xe/xe_pmu.c | 4 +-
drivers/gpu/drm/xe/xe_query.c | 2 +-
drivers/gpu/drm/xe/xe_step.c | 2 +
14 files changed, 138 insertions(+), 88 deletions(-)
--
2.49.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/5] drm/xe: Export xe_step_name for kunit tests
2025-06-13 0:14 [PATCH 0/5] Future-proof for multi-tile + multi-GT cases Matt Roper
@ 2025-06-13 0:14 ` Matt Roper
2025-06-13 15:52 ` Michal Wajdeczko
2025-06-13 0:14 ` [PATCH 2/5] drm/xe: Track maximum GTs per tile on a per-platform basis Matt Roper
` (5 subsequent siblings)
6 siblings, 1 reply; 12+ messages in thread
From: Matt Roper @ 2025-06-13 0:14 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.d.roper
xe_step_name() is used by xe_assert(), so adding assertions to functions
like xe_device_get_gt() will result in
ERROR: modpost: "xe_step_name" [drivers/gpu/drm/xe/tests/xe_test.ko] undefined!
while building the kunit tests. Export xe_step_name to avoid these
build failures when adding assertions.
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
drivers/gpu/drm/xe/xe_step.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_step.c b/drivers/gpu/drm/xe/xe_step.c
index c77b5c317fa0..10e88f2c9615 100644
--- a/drivers/gpu/drm/xe/xe_step.c
+++ b/drivers/gpu/drm/xe/xe_step.c
@@ -5,6 +5,7 @@
#include "xe_step.h"
+#include <kunit/visibility.h>
#include <linux/bitfield.h>
#include "xe_device.h"
@@ -255,3 +256,4 @@ const char *xe_step_name(enum xe_step step)
return "**";
}
}
+EXPORT_SYMBOL_IF_KUNIT(xe_step_name);
--
2.49.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/5] drm/xe: Track maximum GTs per tile on a per-platform basis
2025-06-13 0:14 [PATCH 0/5] Future-proof for multi-tile + multi-GT cases Matt Roper
2025-06-13 0:14 ` [PATCH 1/5] drm/xe: Export xe_step_name for kunit tests Matt Roper
@ 2025-06-13 0:14 ` Matt Roper
2025-06-13 20:32 ` Lucas De Marchi
2025-06-13 0:14 ` [PATCH 3/5] drm/xe/tests/pci: Ensure all platforms have a valid GT/tile count Matt Roper
` (4 subsequent siblings)
6 siblings, 1 reply; 12+ messages in thread
From: Matt Roper @ 2025-06-13 0:14 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.d.roper
Today all of our platforms fall into one of three cases:
* Single tile platforms with a single (primary) GT
* Single tile platforms with two GTs (primary + media)
* Two-tile platforms with a single GT (primary) in each
Our numbering of GTs has been a bit inconsistent between platforms
(e.g., GT1 is the media GT on some platforms, but the second tile's
primary GT on others). In the future we'll likely have platforms that
are both multi-tile and multi-GT, which will make the situation more
confusing. We could also wind up with more than just two types of GTs
at some point in the future.
Going forward we should standardize the way we assign uapi GT IDs to
internal GT structures. Let's declare that for userspace GT ID n,
GT[n]'s tile = n / (max gt per tile)
GT[n]'s slot within tile = n % (max gt per tile)
We don't want the GT numbering to change for any of our current
platforms since the current IDs are part of our ABI contract with
userspace so this means we should track the 'max gt per tile' value on a
per-platform basis rather than just using a single value across the
driver. Encode this into device descriptors in xe_pci.c and use the
per-platform number for various checks in the code. Constant
XE_MAX_GT_PER_TILE will remain just as the maximum across all platforms
for easy of sizing array allocations.
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
drivers/gpu/drm/xe/xe_device.h | 41 +++++++++++++---------------
drivers/gpu/drm/xe/xe_device_types.h | 2 ++
drivers/gpu/drm/xe/xe_pci.c | 18 ++++++++++++
drivers/gpu/drm/xe/xe_pmu.c | 4 ++-
drivers/gpu/drm/xe/xe_query.c | 2 +-
5 files changed, 43 insertions(+), 24 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index 0bc3bc8e6803..6e8d912df357 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -60,35 +60,32 @@ static inline struct xe_tile *xe_device_get_root_tile(struct xe_device *xe)
return &xe->tiles[0];
}
+/*
+ * Highest GT/tile count for any platform. Used only for memory allocation
+ * sizing. Any logic looping over GTs or mapping userspace GT IDs into GT
+ * structures should use the per-platform xe->info.max_gt_per_tile instead.
+ */
#define XE_MAX_GT_PER_TILE 2
-static inline struct xe_gt *xe_tile_get_gt(struct xe_tile *tile, u8 gt_id)
-{
- if (drm_WARN_ON(&tile_to_xe(tile)->drm, gt_id >= XE_MAX_GT_PER_TILE))
- gt_id = 0;
-
- return gt_id ? tile->media_gt : tile->primary_gt;
-}
-
static inline struct xe_gt *xe_device_get_gt(struct xe_device *xe, u8 gt_id)
{
- struct xe_tile *root_tile = xe_device_get_root_tile(xe);
+ struct xe_tile *tile;
struct xe_gt *gt;
- /*
- * FIXME: This only works for now because multi-tile and standalone
- * media are mutually exclusive on the platforms we have today.
- *
- * id => GT mapping may change once we settle on how we want to handle
- * our UAPI.
- */
- if (MEDIA_VER(xe) >= 13) {
- gt = xe_tile_get_gt(root_tile, gt_id);
- } else {
- if (drm_WARN_ON(&xe->drm, gt_id >= XE_MAX_TILES_PER_DEVICE))
- gt_id = 0;
+ if (gt_id >= xe->info.tile_count * xe->info.max_gt_per_tile)
+ return NULL;
- gt = xe->tiles[gt_id].primary_gt;
+ tile = &xe->tiles[gt_id / xe->info.max_gt_per_tile];
+ switch (gt_id % xe->info.max_gt_per_tile) {
+ default:
+ xe_assert(xe, false);
+ fallthrough;
+ case 0:
+ gt = tile->primary_gt;
+ break;
+ case 1:
+ gt = tile->media_gt;
+ break;
}
if (!gt)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index ac27389ccb8b..5fae3a66a992 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -293,6 +293,8 @@ struct xe_device {
u8 vram_flags;
/** @info.tile_count: Number of tiles */
u8 tile_count;
+ /** @info.max_gt_per_tile: Number of GT IDs allocated to each tile */
+ u8 max_gt_per_tile;
/** @info.gt_count: Total number of GTs for entire device */
u8 gt_count;
/** @info.vm_max_level: Max VM level */
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 5d24cc320d72..3b997c941bbc 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -57,6 +57,7 @@ struct xe_device_desc {
u8 dma_mask_size;
u8 max_remote_tiles:2;
+ u8 max_gt_per_tile:2;
u8 require_force_probe:1;
u8 is_dgfx:1;
@@ -205,6 +206,7 @@ static const struct xe_device_desc tgl_desc = {
.dma_mask_size = 39,
.has_display = true,
.has_llc = true,
+ .max_gt_per_tile = 1,
.require_force_probe = true,
};
@@ -215,6 +217,7 @@ static const struct xe_device_desc rkl_desc = {
.dma_mask_size = 39,
.has_display = true,
.has_llc = true,
+ .max_gt_per_tile = 1,
.require_force_probe = true,
};
@@ -228,6 +231,7 @@ static const struct xe_device_desc adl_s_desc = {
.has_display = true,
.has_llc = true,
.has_sriov = IS_ENABLED(CONFIG_DRM_XE_DEBUG),
+ .max_gt_per_tile = 1,
.require_force_probe = true,
.subplatforms = (const struct xe_subplatform_desc[]) {
{ XE_SUBPLATFORM_ALDERLAKE_S_RPLS, "RPLS", adls_rpls_ids },
@@ -245,6 +249,7 @@ static const struct xe_device_desc adl_p_desc = {
.has_display = true,
.has_llc = true,
.has_sriov = IS_ENABLED(CONFIG_DRM_XE_DEBUG),
+ .max_gt_per_tile = 1,
.require_force_probe = true,
.subplatforms = (const struct xe_subplatform_desc[]) {
{ XE_SUBPLATFORM_ALDERLAKE_P_RPLU, "RPLU", adlp_rplu_ids },
@@ -260,6 +265,7 @@ static const struct xe_device_desc adl_n_desc = {
.has_display = true,
.has_llc = true,
.has_sriov = IS_ENABLED(CONFIG_DRM_XE_DEBUG),
+ .max_gt_per_tile = 1,
.require_force_probe = true,
};
@@ -274,6 +280,7 @@ static const struct xe_device_desc dg1_desc = {
.dma_mask_size = 39,
.has_display = true,
.has_heci_gscfi = 1,
+ .max_gt_per_tile = 1,
.require_force_probe = true,
};
@@ -296,6 +303,7 @@ static const struct xe_device_desc ats_m_desc = {
.pre_gmdid_graphics_ip = &graphics_ip_xehpg,
.pre_gmdid_media_ip = &media_ip_xehpm,
.dma_mask_size = 46,
+ .max_gt_per_tile = 1,
.require_force_probe = true,
DG2_FEATURES,
@@ -307,6 +315,7 @@ static const struct xe_device_desc dg2_desc = {
.pre_gmdid_graphics_ip = &graphics_ip_xehpg,
.pre_gmdid_media_ip = &media_ip_xehpm,
.dma_mask_size = 46,
+ .max_gt_per_tile = 1,
.require_force_probe = true,
DG2_FEATURES,
@@ -322,6 +331,7 @@ static const __maybe_unused struct xe_device_desc pvc_desc = {
.dma_mask_size = 52,
.has_display = false,
.has_heci_gscfi = 1,
+ .max_gt_per_tile = 1,
.max_remote_tiles = 1,
.require_force_probe = true,
.has_mbx_power_limits = false,
@@ -334,6 +344,7 @@ static const struct xe_device_desc mtl_desc = {
.dma_mask_size = 46,
.has_display = true,
.has_pxp = true,
+ .max_gt_per_tile = 2,
};
static const struct xe_device_desc lnl_desc = {
@@ -341,6 +352,7 @@ static const struct xe_device_desc lnl_desc = {
.dma_mask_size = 46,
.has_display = true,
.has_pxp = true,
+ .max_gt_per_tile = 2,
.needs_scratch = true,
};
@@ -352,6 +364,7 @@ static const struct xe_device_desc bmg_desc = {
.has_fan_control = true,
.has_mbx_power_limits = true,
.has_heci_cscfi = 1,
+ .max_gt_per_tile = 2,
.needs_scratch = true,
};
@@ -360,6 +373,7 @@ static const struct xe_device_desc ptl_desc = {
.dma_mask_size = 46,
.has_display = true,
.has_sriov = true,
+ .max_gt_per_tile = 2,
.require_force_probe = true,
.needs_scratch = true,
};
@@ -608,6 +622,10 @@ static int xe_info_init_early(struct xe_device *xe,
xe->info.probe_display = IS_ENABLED(CONFIG_DRM_XE_DISPLAY) &&
xe_modparam.probe_display &&
desc->has_display;
+
+ xe_assert(xe, desc->max_gt_per_tile > 0);
+ xe_assert(xe, desc->max_gt_per_tile <= XE_MAX_GT_PER_TILE);
+ xe->info.max_gt_per_tile = desc->max_gt_per_tile;
xe->info.tile_count = 1 + desc->max_remote_tiles;
err = xe_tile_init_early(xe_device_get_root_tile(xe), xe, 0);
diff --git a/drivers/gpu/drm/xe/xe_pmu.c b/drivers/gpu/drm/xe/xe_pmu.c
index 69df0e3520a5..94a8e1db71e4 100644
--- a/drivers/gpu/drm/xe/xe_pmu.c
+++ b/drivers/gpu/drm/xe/xe_pmu.c
@@ -160,7 +160,9 @@ static bool event_gt_forcewake(struct perf_event *event)
static bool event_supported(struct xe_pmu *pmu, unsigned int gt,
unsigned int id)
{
- if (gt >= XE_MAX_GT_PER_TILE)
+ struct xe_device *xe = container_of(pmu, typeof(*xe), pmu);
+
+ if (gt >= xe->info.max_gt_per_tile)
return false;
return id < sizeof(pmu->supported_events) * BITS_PER_BYTE &&
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index 2dbf4066d86f..6220a5a36b83 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -141,7 +141,7 @@ query_engine_cycles(struct xe_device *xe,
return -EINVAL;
eci = &resp.eci;
- if (eci->gt_id >= XE_MAX_GT_PER_TILE)
+ if (eci->gt_id >= xe->info.max_gt_per_tile)
return -EINVAL;
gt = xe_device_get_gt(xe, eci->gt_id);
--
2.49.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/5] drm/xe/tests/pci: Ensure all platforms have a valid GT/tile count
2025-06-13 0:14 [PATCH 0/5] Future-proof for multi-tile + multi-GT cases Matt Roper
2025-06-13 0:14 ` [PATCH 1/5] drm/xe: Export xe_step_name for kunit tests Matt Roper
2025-06-13 0:14 ` [PATCH 2/5] drm/xe: Track maximum GTs per tile on a per-platform basis Matt Roper
@ 2025-06-13 0:14 ` Matt Roper
2025-06-13 17:59 ` Michal Wajdeczko
2025-06-13 0:14 ` [PATCH 4/5] drm/xe: Assign GT IDs properly on multi-tile + multi-GT platforms Matt Roper
` (3 subsequent siblings)
6 siblings, 1 reply; 12+ messages in thread
From: Matt Roper @ 2025-06-13 0:14 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.d.roper
Add a simple kunit test to ensure each platform's GT per tile count is
non-zero and does not exceed the global XE_MAX_GT_PER_TILE definition.
We need to move 'struct xe_subplatform_desc' from the .c file to the
types header to ensure it is accessible from the kunit test.
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
drivers/gpu/drm/xe/tests/xe_pci.c | 24 ++++++++++++++++
drivers/gpu/drm/xe/tests/xe_pci_test.c | 15 ++++++++++
drivers/gpu/drm/xe/tests/xe_pci_test.h | 3 ++
drivers/gpu/drm/xe/xe_pci.c | 38 ------------------------
drivers/gpu/drm/xe/xe_pci_types.h | 40 ++++++++++++++++++++++++++
5 files changed, 82 insertions(+), 38 deletions(-)
diff --git a/drivers/gpu/drm/xe/tests/xe_pci.c b/drivers/gpu/drm/xe/tests/xe_pci.c
index 1d3e2e50c355..f8858e193213 100644
--- a/drivers/gpu/drm/xe/tests/xe_pci.c
+++ b/drivers/gpu/drm/xe/tests/xe_pci.c
@@ -56,6 +56,30 @@ void xe_call_for_each_media_ip(xe_media_fn xe_fn)
}
EXPORT_SYMBOL_IF_KUNIT(xe_call_for_each_media_ip);
+/**
+ * xe_call_for_each_platform - Iterate over all recognized platforms
+ * @xe_fn: Function to call for each device.
+ *
+ * This function iterates over the descriptors for all platforms recognized
+ * by the driver and calls @xe_fn: for each one of them.
+ */
+void xe_call_for_each_platform(xe_platform_fn xe_fn)
+{
+ const struct xe_device_desc *desc, *last = NULL;
+
+ for (int i = 0; i < ARRAY_SIZE(pciidlist); i++) {
+ desc = (const struct xe_device_desc *)pciidlist[i].driver_data;
+ if (!desc)
+ break;
+ if (desc == last)
+ continue;
+
+ xe_fn(desc);
+ last = desc;
+ }
+}
+EXPORT_SYMBOL_IF_KUNIT(xe_call_for_each_platform);
+
static void fake_read_gmdid(struct xe_device *xe, enum xe_gmdid_type type,
u32 *ver, u32 *revid)
{
diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.c b/drivers/gpu/drm/xe/tests/xe_pci_test.c
index 744a37583d2d..a401a91af555 100644
--- a/drivers/gpu/drm/xe/tests/xe_pci_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_pci_test.c
@@ -42,6 +42,15 @@ static void check_media_ip(const struct xe_media_desc *media)
KUNIT_ASSERT_EQ(test, mask, 0);
}
+static void check_platform_gt_count(const struct xe_device_desc *platform)
+{
+ struct kunit *test = kunit_get_current_test();
+ int max_gt = platform->max_gt_per_tile;
+
+ KUNIT_ASSERT_GT(test, max_gt, 0);
+ KUNIT_ASSERT_LE(test, max_gt, XE_MAX_GT_PER_TILE);
+}
+
static void xe_gmdid_graphics_ip(struct kunit *test)
{
xe_call_for_each_graphics_ip(check_graphics_ip);
@@ -52,9 +61,15 @@ static void xe_gmdid_media_ip(struct kunit *test)
xe_call_for_each_media_ip(check_media_ip);
}
+static void xe_platform_gt_count(struct kunit *test)
+{
+ xe_call_for_each_platform(check_platform_gt_count);
+}
+
static struct kunit_case xe_pci_tests[] = {
KUNIT_CASE(xe_gmdid_graphics_ip),
KUNIT_CASE(xe_gmdid_media_ip),
+ KUNIT_CASE(xe_platform_gt_count),
{}
};
diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.h b/drivers/gpu/drm/xe/tests/xe_pci_test.h
index ede46800aff1..5abbf522f7a8 100644
--- a/drivers/gpu/drm/xe/tests/xe_pci_test.h
+++ b/drivers/gpu/drm/xe/tests/xe_pci_test.h
@@ -14,13 +14,16 @@
struct xe_device;
struct xe_graphics_desc;
struct xe_media_desc;
+struct xe_device_desc;
typedef int (*xe_device_fn)(struct xe_device *);
typedef void (*xe_graphics_fn)(const struct xe_graphics_desc *);
typedef void (*xe_media_fn)(const struct xe_media_desc *);
+typedef void (*xe_platform_fn)(const struct xe_device_desc *);
void xe_call_for_each_graphics_ip(xe_graphics_fn xe_fn);
void xe_call_for_each_media_ip(xe_media_fn xe_fn);
+void xe_call_for_each_platform(xe_platform_fn xe_fn);
struct xe_pci_fake_data {
enum xe_sriov_mode sriov_mode;
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 3b997c941bbc..a4885f64c2c4 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -38,44 +38,6 @@ enum toggle_d3cold {
D3COLD_ENABLE,
};
-struct xe_subplatform_desc {
- enum xe_subplatform subplatform;
- const char *name;
- const u16 *pciidlist;
-};
-
-struct xe_device_desc {
- /* Should only ever be set for platforms without GMD_ID */
- const struct xe_ip *pre_gmdid_graphics_ip;
- /* Should only ever be set for platforms without GMD_ID */
- const struct xe_ip *pre_gmdid_media_ip;
-
- const char *platform_name;
- const struct xe_subplatform_desc *subplatforms;
-
- enum xe_platform platform;
-
- u8 dma_mask_size;
- u8 max_remote_tiles:2;
- u8 max_gt_per_tile:2;
-
- u8 require_force_probe:1;
- u8 is_dgfx:1;
-
- u8 has_display:1;
- u8 has_fan_control:1;
- u8 has_heci_gscfi:1;
- u8 has_heci_cscfi:1;
- u8 has_llc:1;
- u8 has_mbx_power_limits:1;
- u8 has_pxp:1;
- u8 has_sriov:1;
- u8 needs_scratch:1;
- u8 skip_guc_pc:1;
- u8 skip_mtcfg:1;
- u8 skip_pcode:1;
-};
-
__diag_push();
__diag_ignore_all("-Woverride-init", "Allow field overrides in table");
diff --git a/drivers/gpu/drm/xe/xe_pci_types.h b/drivers/gpu/drm/xe/xe_pci_types.h
index ca6b10d35573..e4bfbafa6809 100644
--- a/drivers/gpu/drm/xe/xe_pci_types.h
+++ b/drivers/gpu/drm/xe/xe_pci_types.h
@@ -8,6 +8,46 @@
#include <linux/types.h>
+#include "xe_platform_types.h"
+
+struct xe_subplatform_desc {
+ enum xe_subplatform subplatform;
+ const char *name;
+ const u16 *pciidlist;
+};
+
+struct xe_device_desc {
+ /* Should only ever be set for platforms without GMD_ID */
+ const struct xe_ip *pre_gmdid_graphics_ip;
+ /* Should only ever be set for platforms without GMD_ID */
+ const struct xe_ip *pre_gmdid_media_ip;
+
+ const char *platform_name;
+ const struct xe_subplatform_desc *subplatforms;
+
+ enum xe_platform platform;
+
+ u8 dma_mask_size;
+ u8 max_remote_tiles:2;
+ u8 max_gt_per_tile:2;
+
+ u8 require_force_probe:1;
+ u8 is_dgfx:1;
+
+ u8 has_display:1;
+ u8 has_fan_control:1;
+ u8 has_heci_gscfi:1;
+ u8 has_heci_cscfi:1;
+ u8 has_llc:1;
+ u8 has_mbx_power_limits:1;
+ u8 has_pxp:1;
+ u8 has_sriov:1;
+ u8 needs_scratch:1;
+ u8 skip_guc_pc:1;
+ u8 skip_mtcfg:1;
+ u8 skip_pcode:1;
+};
+
struct xe_graphics_desc {
u8 va_bits;
u8 vm_max_level;
--
2.49.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/5] drm/xe: Assign GT IDs properly on multi-tile + multi-GT platforms
2025-06-13 0:14 [PATCH 0/5] Future-proof for multi-tile + multi-GT cases Matt Roper
` (2 preceding siblings ...)
2025-06-13 0:14 ` [PATCH 3/5] drm/xe/tests/pci: Ensure all platforms have a valid GT/tile count Matt Roper
@ 2025-06-13 0:14 ` Matt Roper
2025-06-13 0:14 ` [PATCH 5/5] drm/xe: Don't compare GT ID to GT count when determining valid GTs Matt Roper
` (2 subsequent siblings)
6 siblings, 0 replies; 12+ messages in thread
From: Matt Roper @ 2025-06-13 0:14 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.d.roper
Although "multi-tile" and "multiple GTs per tile" are mutually-exclusive
characteristics on all of our platforms today, this may not always be
true. Assign GT IDs according to xe->info.max_gt_per_tile in a way that
should work even if future platforms have different configurations.
This patch should not change the behavior of current platforms; it only
future-proofs for potential future designs.
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
drivers/gpu/drm/xe/xe_mmio.c | 8 --------
drivers/gpu/drm/xe/xe_pci.c | 14 ++++----------
2 files changed, 4 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index 7357458bc0d2..b65d888ee8e4 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -82,14 +82,6 @@ static void mmio_multi_tile_setup(struct xe_device *xe, size_t tile_mmio_size)
drm_info(&xe->drm, "tile_count: %d, reduced_tile_count %d\n",
xe->info.tile_count, tile_count);
xe->info.tile_count = tile_count;
-
- /*
- * FIXME: Needs some work for standalone media, but
- * should be impossible with multi-tile for now:
- * multi-tile platform with standalone media doesn't
- * exist
- */
- xe->info.gt_count = xe->info.tile_count;
}
}
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index a4885f64c2c4..b29252abbf3e 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -687,10 +687,11 @@ static int xe_info_init(struct xe_device *xe,
*/
for_each_tile(tile, xe, id) {
gt = tile->primary_gt;
- gt->info.id = xe->info.gt_count++;
gt->info.type = XE_GT_TYPE_MAIN;
+ gt->info.id = tile->id * xe->info.max_gt_per_tile;
gt->info.has_indirect_ring_state = graphics_desc->has_indirect_ring_state;
gt->info.engine_mask = graphics_desc->hw_engine_mask;
+ xe->info.gt_count++;
if (MEDIA_VER(xe) < 13 && media_desc)
gt->info.engine_mask |= media_desc->hw_engine_mask;
@@ -708,17 +709,10 @@ static int xe_info_init(struct xe_device *xe,
gt = tile->media_gt;
gt->info.type = XE_GT_TYPE_MEDIA;
+ gt->info.id = tile->id * xe->info.max_gt_per_tile + 1;
gt->info.has_indirect_ring_state = media_desc->has_indirect_ring_state;
gt->info.engine_mask = media_desc->hw_engine_mask;
-
- /*
- * FIXME: At the moment multi-tile and standalone media are
- * mutually exclusive on current platforms. We'll need to
- * come up with a better way to number GTs if we ever wind
- * up with platforms that support both together.
- */
- drm_WARN_ON(&xe->drm, id != 0);
- gt->info.id = xe->info.gt_count++;
+ xe->info.gt_count++;
}
return 0;
--
2.49.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 5/5] drm/xe: Don't compare GT ID to GT count when determining valid GTs
2025-06-13 0:14 [PATCH 0/5] Future-proof for multi-tile + multi-GT cases Matt Roper
` (3 preceding siblings ...)
2025-06-13 0:14 ` [PATCH 4/5] drm/xe: Assign GT IDs properly on multi-tile + multi-GT platforms Matt Roper
@ 2025-06-13 0:14 ` Matt Roper
2025-06-13 7:36 ` ✗ CI.checkpatch: warning for Future-proof for multi-tile + multi-GT cases Patchwork
2025-06-13 7:37 ` ✗ CI.KUnit: failure " Patchwork
6 siblings, 0 replies; 12+ messages in thread
From: Matt Roper @ 2025-06-13 0:14 UTC (permalink / raw)
To: intel-xe; +Cc: matthew.d.roper
On current platforms with multiple GTs, all of the GT IDs are
consecutive; as a result we know that the GT IDs range from 0 to
gt_count-1 and can determine if a GT ID is valid by comparing against
the count. The consecutive nature of GT IDs may not hold true on future
platforms if/when we have platforms that are both multi-tile and have
multiple GTs within each tile. Once such platforms exist, it's quite
possible that we could wind up with something like a GT list composed of
IDs 0, 2, and 3 with no GT 1 (which would be a 2-tile platform with
media only on the second tile).
To future-proof the code we should stop comparing against the GT count
to determine whether a GT ID is valid or not. Instead we should do an
actual lookup of the ID to determine whether the GT exists. This also
means that our GT loop macro should not end at the GT count, but should
rather examine the entire space up to (# of tiles) * (max GT per tile)
to ensure it doesn't stop prematurely.
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
drivers/gpu/drm/xe/xe_device.h | 6 +-----
drivers/gpu/drm/xe/xe_eu_stall.c | 6 ++++--
drivers/gpu/drm/xe/xe_exec_queue.c | 2 +-
drivers/gpu/drm/xe/xe_hw_engine.c | 3 ++-
4 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index 6e8d912df357..22ebfd6fa474 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -127,12 +127,8 @@ static inline bool xe_device_uc_enabled(struct xe_device *xe)
for ((id__) = 1; (id__) < (xe__)->info.tile_count; (id__)++) \
for_each_if((tile__) = &(xe__)->tiles[(id__)])
-/*
- * FIXME: This only works for now since multi-tile and standalone media
- * happen to be mutually exclusive. Future platforms may change this...
- */
#define for_each_gt(gt__, xe__, id__) \
- for ((id__) = 0; (id__) < (xe__)->info.gt_count; (id__)++) \
+ for ((id__) = 0; (id__) < (xe__)->info.tile_count * (xe__)->info.max_gt_per_tile; (id__)++) \
for_each_if((gt__) = xe_device_get_gt((xe__), (id__)))
static inline struct xe_force_wake *gt_to_fw(struct xe_gt *gt)
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index 96732613b4b7..af7916315ac6 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -258,11 +258,13 @@ static int set_prop_eu_stall_wait_num_reports(struct xe_device *xe, u64 value,
static int set_prop_eu_stall_gt_id(struct xe_device *xe, u64 value,
struct eu_stall_open_properties *props)
{
- if (value >= xe->info.gt_count) {
+ struct xe_gt *gt = xe_device_get_gt(xe, value);
+
+ if (!gt) {
drm_dbg(&xe->drm, "Invalid GT ID %llu for EU stall sampling\n", value);
return -EINVAL;
}
- props->gt = xe_device_get_gt(xe, value);
+ props->gt = gt;
return 0;
}
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index fee22358cc09..8991b4aed440 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -610,7 +610,7 @@ int xe_exec_queue_create_ioctl(struct drm_device *dev, void *data,
if (XE_IOCTL_DBG(xe, err))
return -EFAULT;
- if (XE_IOCTL_DBG(xe, eci[0].gt_id >= xe->info.gt_count))
+ if (XE_IOCTL_DBG(xe, !xe_device_get_gt(xe, eci[0].gt_id)))
return -EINVAL;
if (args->flags & DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT)
diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
index 3439c8522d01..796ba8c34a16 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine.c
+++ b/drivers/gpu/drm/xe/xe_hw_engine.c
@@ -1059,12 +1059,13 @@ struct xe_hw_engine *
xe_hw_engine_lookup(struct xe_device *xe,
struct drm_xe_engine_class_instance eci)
{
+ struct xe_gt *gt = xe_device_get_gt(xe, eci.gt_id);
unsigned int idx;
if (eci.engine_class >= ARRAY_SIZE(user_to_xe_engine_class))
return NULL;
- if (eci.gt_id >= xe->info.gt_count)
+ if (!gt)
return NULL;
idx = array_index_nospec(eci.engine_class,
--
2.49.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* ✗ CI.checkpatch: warning for Future-proof for multi-tile + multi-GT cases
2025-06-13 0:14 [PATCH 0/5] Future-proof for multi-tile + multi-GT cases Matt Roper
` (4 preceding siblings ...)
2025-06-13 0:14 ` [PATCH 5/5] drm/xe: Don't compare GT ID to GT count when determining valid GTs Matt Roper
@ 2025-06-13 7:36 ` Patchwork
2025-06-13 7:37 ` ✗ CI.KUnit: failure " Patchwork
6 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2025-06-13 7:36 UTC (permalink / raw)
To: Matt Roper; +Cc: intel-xe
== Series Details ==
Series: Future-proof for multi-tile + multi-GT cases
URL : https://patchwork.freedesktop.org/series/150192/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
202708c00696422fd217223bb679a353a5936e23
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 71afbb33c96c3dbba93ef3c53a6e5e11701645f0
Author: Matt Roper <matthew.d.roper@intel.com>
Date: Thu Jun 12 17:14:44 2025 -0700
drm/xe: Don't compare GT ID to GT count when determining valid GTs
On current platforms with multiple GTs, all of the GT IDs are
consecutive; as a result we know that the GT IDs range from 0 to
gt_count-1 and can determine if a GT ID is valid by comparing against
the count. The consecutive nature of GT IDs may not hold true on future
platforms if/when we have platforms that are both multi-tile and have
multiple GTs within each tile. Once such platforms exist, it's quite
possible that we could wind up with something like a GT list composed of
IDs 0, 2, and 3 with no GT 1 (which would be a 2-tile platform with
media only on the second tile).
To future-proof the code we should stop comparing against the GT count
to determine whether a GT ID is valid or not. Instead we should do an
actual lookup of the ID to determine whether the GT exists. This also
means that our GT loop macro should not end at the GT count, but should
rather examine the entire space up to (# of tiles) * (max GT per tile)
to ensure it doesn't stop prematurely.
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
+ /mt/dim checkpatch 93593ca3b525390c11682f32f6d803032acd56b2 drm-intel
3127852a154a drm/xe: Export xe_step_name for kunit tests
-:9: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#9:
ERROR: modpost: "xe_step_name" [drivers/gpu/drm/xe/tests/xe_test.ko] undefined!
total: 0 errors, 1 warnings, 0 checks, 11 lines checked
b8e42ba265d0 drm/xe: Track maximum GTs per tile on a per-platform basis
af6a50d81323 drm/xe/tests/pci: Ensure all platforms have a valid GT/tile count
-:30: ERROR:OPEN_BRACE: that open brace { should be on the previous line
#30: FILE: drivers/gpu/drm/xe/tests/xe_pci.c:66:
+void xe_call_for_each_platform(xe_platform_fn xe_fn)
+{
total: 1 errors, 0 warnings, 0 checks, 166 lines checked
37516d7f9349 drm/xe: Assign GT IDs properly on multi-tile + multi-GT platforms
71afbb33c96c drm/xe: Don't compare GT ID to GT count when determining valid GTs
-:40: WARNING:LONG_LINE: line length of 101 exceeds 100 columns
#40: FILE: drivers/gpu/drm/xe/xe_device.h:131:
+ for ((id__) = 0; (id__) < (xe__)->info.tile_count * (xe__)->info.max_gt_per_tile; (id__)++) \
total: 0 errors, 1 warnings, 0 checks, 50 lines checked
^ permalink raw reply [flat|nested] 12+ messages in thread
* ✗ CI.KUnit: failure for Future-proof for multi-tile + multi-GT cases
2025-06-13 0:14 [PATCH 0/5] Future-proof for multi-tile + multi-GT cases Matt Roper
` (5 preceding siblings ...)
2025-06-13 7:36 ` ✗ CI.checkpatch: warning for Future-proof for multi-tile + multi-GT cases Patchwork
@ 2025-06-13 7:37 ` Patchwork
6 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2025-06-13 7:37 UTC (permalink / raw)
To: Matt Roper; +Cc: intel-xe
== Series Details ==
Series: Future-proof for multi-tile + multi-GT cases
URL : https://patchwork.freedesktop.org/series/150192/
State : failure
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[07:36:09] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[07:36:13] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[07:36:40] Starting KUnit Kernel (1/1)...
[07:36:40] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[07:36:40] ================== guc_buf (11 subtests) ===================
[07:36:40] [PASSED] test_smallest
[07:36:40] [PASSED] test_largest
[07:36:40] [PASSED] test_granular
[07:36:40] [PASSED] test_unique
[07:36:40] [PASSED] test_overlap
[07:36:40] [PASSED] test_reusable
[07:36:40] [PASSED] test_too_big
[07:36:40] [PASSED] test_flush
[07:36:40] [PASSED] test_lookup
[07:36:40] [PASSED] test_data
[07:36:40] [PASSED] test_class
[07:36:40] ===================== [PASSED] guc_buf =====================
[07:36:40] =================== guc_dbm (7 subtests) ===================
[07:36:40] [PASSED] test_empty
[07:36:40] [PASSED] test_default
[07:36:40] ======================== test_size ========================
[07:36:40] [PASSED] 4
[07:36:40] [PASSED] 8
[07:36:40] [PASSED] 32
[07:36:40] [PASSED] 256
[07:36:40] ==================== [PASSED] test_size ====================
[07:36:40] ======================= test_reuse ========================
[07:36:40] [PASSED] 4
[07:36:40] [PASSED] 8
[07:36:40] [PASSED] 32
[07:36:40] [PASSED] 256
[07:36:40] =================== [PASSED] test_reuse ====================
[07:36:40] =================== test_range_overlap ====================
[07:36:40] [PASSED] 4
[07:36:40] [PASSED] 8
[07:36:40] [PASSED] 32
[07:36:40] [PASSED] 256
[07:36:40] =============== [PASSED] test_range_overlap ================
[07:36:40] =================== test_range_compact ====================
[07:36:40] [PASSED] 4
[07:36:40] [PASSED] 8
[07:36:40] [PASSED] 32
[07:36:40] [PASSED] 256
[07:36:40] =============== [PASSED] test_range_compact ================
[07:36:40] ==================== test_range_spare =====================
[07:36:40] [PASSED] 4
[07:36:40] [PASSED] 8
[07:36:40] [PASSED] 32
[07:36:40] [PASSED] 256
[07:36:40] ================ [PASSED] test_range_spare =================
[07:36:40] ===================== [PASSED] guc_dbm =====================
[07:36:40] =================== guc_idm (6 subtests) ===================
[07:36:40] [PASSED] bad_init
[07:36:40] [PASSED] no_init
[07:36:40] [PASSED] init_fini
[07:36:40] [PASSED] check_used
[07:36:40] [PASSED] check_quota
[07:36:40] [PASSED] check_all
[07:36:40] ===================== [PASSED] guc_idm =====================
[07:36:40] ================== no_relay (3 subtests) ===================
[07:36:40] [PASSED] xe_drops_guc2pf_if_not_ready
[07:36:40] [PASSED] xe_drops_guc2vf_if_not_ready
[07:36:40] [PASSED] xe_rejects_send_if_not_ready
[07:36:40] ==================== [PASSED] no_relay =====================
[07:36:40] ================== pf_relay (14 subtests) ==================
[07:36:40] [PASSED] pf_rejects_guc2pf_too_short
[07:36:40] [PASSED] pf_rejects_guc2pf_too_long
[07:36:40] [PASSED] pf_rejects_guc2pf_no_payload
[07:36:40] [PASSED] pf_fails_no_payload
[07:36:40] [PASSED] pf_fails_bad_origin
[07:36:40] [PASSED] pf_fails_bad_type
[07:36:40] [PASSED] pf_txn_reports_error
[07:36:40] [PASSED] pf_txn_sends_pf2guc
[07:36:40] [PASSED] pf_sends_pf2guc
[07:36:40] [SKIPPED] pf_loopback_nop
[07:36:40] [SKIPPED] pf_loopback_echo
[07:36:40] [SKIPPED] pf_loopback_fail
[07:36:40] [SKIPPED] pf_loopback_busy
[07:36:40] [SKIPPED] pf_loopback_retry
[07:36:40] ==================== [PASSED] pf_relay =====================
[07:36:40] ================== vf_relay (3 subtests) ===================
[07:36:40] [PASSED] vf_rejects_guc2vf_too_short
[07:36:40] [PASSED] vf_rejects_guc2vf_too_long
[07:36:40] [PASSED] vf_rejects_guc2vf_no_payload
[07:36:40] ==================== [PASSED] vf_relay =====================
[07:36:40] ================= pf_service (11 subtests) =================
[07:36:40] [PASSED] pf_negotiate_any
[07:36:40] [PASSED] pf_negotiate_base_match
[07:36:40] [PASSED] pf_negotiate_base_newer
[07:36:40] [PASSED] pf_negotiate_base_next
[07:36:40] [SKIPPED] pf_negotiate_base_older
[07:36:40] [PASSED] pf_negotiate_base_prev
[07:36:40] [PASSED] pf_negotiate_latest_match
[07:36:40] [PASSED] pf_negotiate_latest_newer
[07:36:40] [PASSED] pf_negotiate_latest_next
[07:36:40] [SKIPPED] pf_negotiate_latest_older
[07:36:40] [SKIPPED] pf_negotiate_latest_prev
[07:36:40] =================== [PASSED] pf_service ====================
[07:36:40] ===================== lmtt (1 subtest) =====================
[07:36:40] ======================== test_ops =========================
[07:36:40] [PASSED] 2-level
[07:36:40] [PASSED] multi-level
[07:36:40] ==================== [PASSED] test_ops =====================
[07:36:40] ====================== [PASSED] lmtt =======================
[07:36:40] =================== xe_mocs (2 subtests) ===================
[07:36:40] ================ xe_live_mocs_kernel_kunit ================
[07:36:40] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[07:36:40] ================ xe_live_mocs_reset_kunit =================
[07:36:40] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[07:36:40] ==================== [SKIPPED] xe_mocs =====================
[07:36:40] ================= xe_migrate (2 subtests) ==================
[07:36:40] ================= xe_migrate_sanity_kunit =================
[07:36:40] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[07:36:40] ================== xe_validate_ccs_kunit ==================
[07:36:40] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[07:36:40] =================== [SKIPPED] xe_migrate ===================
[07:36:40] ================== xe_dma_buf (1 subtest) ==================
[07:36:40] ==================== xe_dma_buf_kunit =====================
[07:36:40] ================ [SKIPPED] xe_dma_buf_kunit ================
[07:36:40] =================== [SKIPPED] xe_dma_buf ===================
[07:36:40] ================= xe_bo_shrink (1 subtest) =================
[07:36:40] =================== xe_bo_shrink_kunit ====================
[07:36:40] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[07:36:40] ================== [SKIPPED] xe_bo_shrink ==================
[07:36:40] ==================== xe_bo (2 subtests) ====================
[07:36:40] ================== xe_ccs_migrate_kunit ===================
[07:36:40] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[07:36:40] ==================== xe_bo_evict_kunit ====================
[07:36:40] =============== [SKIPPED] xe_bo_evict_kunit ================
[07:36:40] ===================== [SKIPPED] xe_bo ======================
[07:36:40] ==================== args (11 subtests) ====================
[07:36:40] [PASSED] count_args_test
[07:36:40] [PASSED] call_args_example
[07:36:40] [PASSED] call_args_test
[07:36:40] [PASSED] drop_first_arg_example
[07:36:40] [PASSED] drop_first_arg_test
[07:36:40] [PASSED] first_arg_example
[07:36:40] [PASSED] first_arg_test
[07:36:40] [PASSED] last_arg_example
[07:36:40] [PASSED] last_arg_test
[07:36:40] [PASSED] pick_arg_example
[07:36:40] [PASSED] sep_comma_example
[07:36:40] ====================== [PASSED] args =======================
[07:36:40] =================== xe_pci (3 subtests) ====================
[07:36:40] [PASSED] xe_gmdid_graphics_ip
[07:36:40] [PASSED] xe_gmdid_media_ip
[07:36:40] [PASSED] xe_platform_gt_count
[07:36:40] ===================== [PASSED] xe_pci ======================
[07:36:40] =================== xe_rtp (2 subtests) ====================
[07:36:40] =============== xe_rtp_process_to_sr_tests ================
[07:36:40] [PASSED] coalesce-same-reg
[07:36:40] [PASSED] no-match-no-add
[07:36:40] [PASSED] match-or
[07:36:40] [PASSED] match-or-xfail
[07:36:40] [PASSED] no-match-no-add-multiple-rules
[07:36:40] [PASSED] two-regs-two-entries
[07:36:40] [PASSED] clr-one-set-other
[07:36:40] [PASSED] set-field
[07:36:40] [PASSED] conflict-duplicate
stty: 'standard input': Inappropriate ioctl for device
[07:36:40] [PASSED] conflict-not-disjoint
[07:36:40] [PASSED] conflict-reg-type
[07:36:40] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[07:36:40] ================== xe_rtp_process_tests ===================
[07:36:40] [PASSED] active1
[07:36:40] [PASSED] active2
[07:36:40] [PASSED] active-inactive
[07:36:40] [PASSED] inactive-active
[07:36:40] [PASSED] inactive-1st_or_active-inactive
[07:36:40] [PASSED] inactive-2nd_or_active-inactive
[07:36:40] [PASSED] inactive-last_or_active-inactive
[07:36:40] [PASSED] inactive-no_or_active-inactive
[07:36:40] ============== [PASSED] xe_rtp_process_tests ===============
[07:36:40] ===================== [PASSED] xe_rtp ======================
[07:36:40] ==================== xe_wa (1 subtest) =====================
[07:36:40] ======================== xe_wa_gt =========================
[07:36:40] [PASSED] TIGERLAKE (B0)
[07:36:40] [PASSED] DG1 (A0)
[07:36:40] [PASSED] DG1 (B0)
[07:36:40] [PASSED] ALDERLAKE_S (A0)
[07:36:40] [PASSED] ALDERLAKE_S (B0)
[07:36:40] [PASSED] ALDERLAKE_S (C0)
[07:36:40] [PASSED] ALDERLAKE_S (D0)
[07:36:40] [PASSED] ALDERLAKE_P (A0)
[07:36:40] [PASSED] ALDERLAKE_P (B0)
[07:36:40] [PASSED] ALDERLAKE_P (C0)
[07:36:40] [PASSED] ALDERLAKE_S_RPLS (D0)
[07:36:40] [PASSED] ALDERLAKE_P_RPLU (E0)
[07:36:40] [PASSED] DG2_G10 (C0)
[07:36:40] [PASSED] DG2_G11 (B1)
[07:36:40] [PASSED] DG2_G12 (A1)
[07:36:40] [PASSED] METEORLAKE (g:A0, m:A0)
[07:36:40] [PASSED] METEORLAKE (g:A0, m:A0)
[07:36:40] [PASSED] METEORLAKE (g:A0, m:A0)
[07:36:40] [PASSED] LUNARLAKE (g:A0, m:A0)
[07:36:40] [PASSED] LUNARLAKE (g:B0, m:A0)
[07:36:40] [PASSED] BATTLEMAGE (g:A0, m:A1)
[07:36:40] ==================== [PASSED] xe_wa_gt =====================
[07:36:40] ====================== [PASSED] xe_wa ======================
[07:36:40] ============================================================
[07:36:40] Testing complete. Ran 134 tests: passed: 118, skipped: 16
[07:36:40] Elapsed time: 31.474s total, 4.159s configuring, 26.999s building, 0.298s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[07:36:41] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[07:36:42] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[07:37:04] Starting KUnit Kernel (1/1)...
[07:37:04] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[07:37:04] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[07:37:04] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[07:37:04] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[07:37:04] =========== drm_validate_clone_mode (2 subtests) ===========
[07:37:04] ============== drm_test_check_in_clone_mode ===============
[07:37:04] [PASSED] in_clone_mode
[07:37:04] [PASSED] not_in_clone_mode
[07:37:04] ========== [PASSED] drm_test_check_in_clone_mode ===========
[07:37:04] =============== drm_test_check_valid_clones ===============
[07:37:04] [PASSED] not_in_clone_mode
[07:37:04] [PASSED] valid_clone
[07:37:04] [PASSED] invalid_clone
[07:37:04] =========== [PASSED] drm_test_check_valid_clones ===========
[07:37:04] ============= [PASSED] drm_validate_clone_mode =============
[07:37:04] ============= drm_validate_modeset (1 subtest) =============
[07:37:04] [PASSED] drm_test_check_connector_changed_modeset
[07:37:04] ============== [PASSED] drm_validate_modeset ===============
[07:37:04] ====== drm_test_bridge_get_current_state (2 subtests) ======
[07:37:04] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[07:37:04] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[07:37:04] ======== [PASSED] drm_test_bridge_get_current_state ========
[07:37:04] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[07:37:04] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[07:37:04] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[07:37:04] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[07:37:04] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[07:37:04] ============== drm_bridge_alloc (2 subtests) ===============
[07:37:04] [PASSED] drm_test_drm_bridge_alloc_basic
[07:37:04] [PASSED] drm_test_drm_bridge_alloc_get_put
[07:37:04] ================ [PASSED] drm_bridge_alloc =================
[07:37:04] ================== drm_buddy (7 subtests) ==================
[07:37:04] [PASSED] drm_test_buddy_alloc_limit
[07:37:04] [PASSED] drm_test_buddy_alloc_optimistic
[07:37:04] [PASSED] drm_test_buddy_alloc_pessimistic
[07:37:04] [PASSED] drm_test_buddy_alloc_pathological
[07:37:04] [PASSED] drm_test_buddy_alloc_contiguous
[07:37:04] [PASSED] drm_test_buddy_alloc_clear
[07:37:04] [PASSED] drm_test_buddy_alloc_range_bias
[07:37:04] ==================== [PASSED] drm_buddy ====================
[07:37:04] ============= drm_cmdline_parser (40 subtests) =============
[07:37:04] [PASSED] drm_test_cmdline_force_d_only
[07:37:04] [PASSED] drm_test_cmdline_force_D_only_dvi
[07:37:04] [PASSED] drm_test_cmdline_force_D_only_hdmi
[07:37:04] [PASSED] drm_test_cmdline_force_D_only_not_digital
[07:37:04] [PASSED] drm_test_cmdline_force_e_only
[07:37:04] [PASSED] drm_test_cmdline_res
[07:37:04] [PASSED] drm_test_cmdline_res_vesa
[07:37:04] [PASSED] drm_test_cmdline_res_vesa_rblank
[07:37:04] [PASSED] drm_test_cmdline_res_rblank
[07:37:04] [PASSED] drm_test_cmdline_res_bpp
[07:37:04] [PASSED] drm_test_cmdline_res_refresh
[07:37:04] [PASSED] drm_test_cmdline_res_bpp_refresh
[07:37:04] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[07:37:04] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[07:37:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[07:37:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[07:37:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[07:37:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[07:37:04] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[07:37:04] [PASSED] drm_test_cmdline_res_margins_force_on
[07:37:04] [PASSED] drm_test_cmdline_res_vesa_margins
[07:37:04] [PASSED] drm_test_cmdline_name
[07:37:04] [PASSED] drm_test_cmdline_name_bpp
[07:37:04] [PASSED] drm_test_cmdline_name_option
[07:37:04] [PASSED] drm_test_cmdline_name_bpp_option
[07:37:04] [PASSED] drm_test_cmdline_rotate_0
[07:37:04] [PASSED] drm_test_cmdline_rotate_90
[07:37:04] [PASSED] drm_test_cmdline_rotate_180
[07:37:04] [PASSED] drm_test_cmdline_rotate_270
[07:37:04] [PASSED] drm_test_cmdline_hmirror
[07:37:04] [PASSED] drm_test_cmdline_vmirror
[07:37:04] [PASSED] drm_test_cmdline_margin_options
[07:37:04] [PASSED] drm_test_cmdline_multiple_options
[07:37:04] [PASSED] drm_test_cmdline_bpp_extra_and_option
[07:37:04] [PASSED] drm_test_cmdline_extra_and_option
[07:37:04] [PASSED] drm_test_cmdline_freestanding_options
[07:37:04] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[07:37:04] [PASSED] drm_test_cmdline_panel_orientation
[07:37:04] ================ drm_test_cmdline_invalid =================
[07:37:04] [PASSED] margin_only
[07:37:04] [PASSED] interlace_only
[07:37:04] [PASSED] res_missing_x
[07:37:04] [PASSED] res_missing_y
[07:37:04] [PASSED] res_bad_y
[07:37:04] [PASSED] res_missing_y_bpp
[07:37:04] [PASSED] res_bad_bpp
[07:37:04] [PASSED] res_bad_refresh
[07:37:04] [PASSED] res_bpp_refresh_force_on_off
[07:37:04] [PASSED] res_invalid_mode
[07:37:04] [PASSED] res_bpp_wrong_place_mode
[07:37:04] [PASSED] name_bpp_refresh
[07:37:04] [PASSED] name_refresh
[07:37:04] [PASSED] name_refresh_wrong_mode
[07:37:04] [PASSED] name_refresh_invalid_mode
[07:37:04] [PASSED] rotate_multiple
[07:37:04] [PASSED] rotate_invalid_val
[07:37:04] [PASSED] rotate_truncated
[07:37:04] [PASSED] invalid_option
[07:37:04] [PASSED] invalid_tv_option
[07:37:04] [PASSED] truncated_tv_option
[07:37:04] ============ [PASSED] drm_test_cmdline_invalid =============
[07:37:04] =============== drm_test_cmdline_tv_options ===============
[07:37:04] [PASSED] NTSC
[07:37:04] [PASSED] NTSC_443
[07:37:04] [PASSED] NTSC_J
[07:37:04] [PASSED] PAL
[07:37:04] [PASSED] PAL_M
[07:37:04] [PASSED] PAL_N
[07:37:04] [PASSED] SECAM
[07:37:04] [PASSED] MONO_525
[07:37:04] [PASSED] MONO_625
[07:37:04] =========== [PASSED] drm_test_cmdline_tv_options ===========
[07:37:04] =============== [PASSED] drm_cmdline_parser ================
[07:37:04] ========== drmm_connector_hdmi_init (20 subtests) ==========
[07:37:04] [PASSED] drm_test_connector_hdmi_init_valid
[07:37:04] [PASSED] drm_test_connector_hdmi_init_bpc_8
[07:37:04] [PASSED] drm_test_connector_hdmi_init_bpc_10
[07:37:04] [PASSED] drm_test_connector_hdmi_init_bpc_12
[07:37:04] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[07:37:04] [PASSED] drm_test_connector_hdmi_init_bpc_null
[07:37:04] [PASSED] drm_test_connector_hdmi_init_formats_empty
[07:37:04] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[07:37:04] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[07:37:04] [PASSED] supported_formats=0x9 yuv420_allowed=1
[07:37:04] [PASSED] supported_formats=0x9 yuv420_allowed=0
[07:37:04] [PASSED] supported_formats=0x3 yuv420_allowed=1
[07:37:04] [PASSED] supported_formats=0x3 yuv420_allowed=0
[07:37:04] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[07:37:04] [PASSED] drm_test_connector_hdmi_init_null_ddc
[07:37:04] [PASSED] drm_test_connector_hdmi_init_null_product
[07:37:04] [PASSED] drm_test_connector_hdmi_init_null_vendor
[07:37:04] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[07:37:04] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[07:37:04] [PASSED] drm_test_connector_hdmi_init_product_valid
[07:37:04] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[07:37:04] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[07:37:04] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[07:37:04] ========= drm_test_connector_hdmi_init_type_valid =========
[07:37:04] [PASSED] HDMI-A
[07:37:04] [PASSED] HDMI-B
[07:37:04] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[07:37:04] ======== drm_test_connector_hdmi_init_type_invalid ========
[07:37:04] [PASSED] Unknown
[07:37:04] [PASSED] VGA
[07:37:04] [PASSED] DVI-I
[07:37:04] [PASSED] DVI-D
[07:37:04] [PASSED] DVI-A
[07:37:04] [PASSED] Composite
[07:37:04] [PASSED] SVIDEO
[07:37:04] [PASSED] LVDS
[07:37:04] [PASSED] Component
[07:37:04] [PASSED] DIN
[07:37:04] [PASSED] DP
[07:37:04] [PASSED] TV
[07:37:04] [PASSED] eDP
[07:37:04] [PASSED] Virtual
[07:37:04] [PASSED] DSI
[07:37:04] [PASSED] DPI
[07:37:04] [PASSED] Writeback
[07:37:04] [PASSED] SPI
[07:37:04] [PASSED] USB
[07:37:04] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[07:37:04] ============ [PASSED] drmm_connector_hdmi_init =============
[07:37:04] ============= drmm_connector_init (3 subtests) =============
[07:37:04] [PASSED] drm_test_drmm_connector_init
[07:37:04] [PASSED] drm_test_drmm_connector_init_null_ddc
[07:37:04] ========= drm_test_drmm_connector_init_type_valid =========
[07:37:04] [PASSED] Unknown
[07:37:04] [PASSED] VGA
[07:37:04] [PASSED] DVI-I
[07:37:04] [PASSED] DVI-D
[07:37:04] [PASSED] DVI-A
[07:37:04] [PASSED] Composite
[07:37:04] [PASSED] SVIDEO
[07:37:04] [PASSED] LVDS
[07:37:04] [PASSED] Component
[07:37:04] [PASSED] DIN
[07:37:04] [PASSED] DP
[07:37:04] [PASSED] HDMI-A
[07:37:04] [PASSED] HDMI-B
[07:37:04] [PASSED] TV
[07:37:04] [PASSED] eDP
[07:37:04] [PASSED] Virtual
[07:37:04] [PASSED] DSI
[07:37:04] [PASSED] DPI
[07:37:04] [PASSED] Writeback
[07:37:04] [PASSED] SPI
[07:37:04] [PASSED] USB
[07:37:04] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[07:37:04] =============== [PASSED] drmm_connector_init ===============
[07:37:04] ========= drm_connector_dynamic_init (6 subtests) ==========
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_init
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_init_properties
[07:37:04] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[07:37:04] [PASSED] Unknown
[07:37:04] [PASSED] VGA
[07:37:04] [PASSED] DVI-I
[07:37:04] [PASSED] DVI-D
[07:37:04] [PASSED] DVI-A
[07:37:04] [PASSED] Composite
[07:37:04] [PASSED] SVIDEO
[07:37:04] [PASSED] LVDS
[07:37:04] [PASSED] Component
[07:37:04] [PASSED] DIN
[07:37:04] [PASSED] DP
[07:37:04] [PASSED] HDMI-A
[07:37:04] [PASSED] HDMI-B
[07:37:04] [PASSED] TV
[07:37:04] [PASSED] eDP
[07:37:04] [PASSED] Virtual
[07:37:04] [PASSED] DSI
[07:37:04] [PASSED] DPI
[07:37:04] [PASSED] Writeback
[07:37:04] [PASSED] SPI
[07:37:04] [PASSED] USB
[07:37:04] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[07:37:04] ======== drm_test_drm_connector_dynamic_init_name =========
[07:37:04] [PASSED] Unknown
[07:37:04] [PASSED] VGA
[07:37:04] [PASSED] DVI-I
[07:37:04] [PASSED] DVI-D
[07:37:04] [PASSED] DVI-A
[07:37:04] [PASSED] Composite
[07:37:04] [PASSED] SVIDEO
[07:37:04] [PASSED] LVDS
[07:37:04] [PASSED] Component
[07:37:04] [PASSED] DIN
[07:37:04] [PASSED] DP
[07:37:04] [PASSED] HDMI-A
[07:37:04] [PASSED] HDMI-B
[07:37:04] [PASSED] TV
[07:37:04] [PASSED] eDP
[07:37:04] [PASSED] Virtual
[07:37:04] [PASSED] DSI
[07:37:04] [PASSED] DPI
[07:37:04] [PASSED] Writeback
[07:37:04] [PASSED] SPI
[07:37:04] [PASSED] USB
[07:37:04] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[07:37:04] =========== [PASSED] drm_connector_dynamic_init ============
[07:37:04] ==== drm_connector_dynamic_register_early (4 subtests) =====
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[07:37:04] ====== [PASSED] drm_connector_dynamic_register_early =======
[07:37:04] ======= drm_connector_dynamic_register (7 subtests) ========
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[07:37:04] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[07:37:04] ========= [PASSED] drm_connector_dynamic_register ==========
[07:37:04] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[07:37:04] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[07:37:04] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[07:37:04] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[07:37:04] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[07:37:04] ========== drm_test_get_tv_mode_from_name_valid ===========
[07:37:04] [PASSED] NTSC
[07:37:04] [PASSED] NTSC-443
[07:37:04] [PASSED] NTSC-J
[07:37:04] [PASSED] PAL
[07:37:04] [PASSED] PAL-M
[07:37:04] [PASSED] PAL-N
[07:37:04] [PASSED] SECAM
[07:37:04] [PASSED] Mono
[07:37:04] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[07:37:04] [PASSED] drm_test_get_tv_mode_from_name_truncated
[07:37:04] ============ [PASSED] drm_get_tv_mode_from_name ============
[07:37:04] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[07:37:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[07:37:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[07:37:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[07:37:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[07:37:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[07:37:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[07:37:04] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[07:37:04] [PASSED] VIC 96
[07:37:04] [PASSED] VIC 97
[07:37:04] [PASSED] VIC 101
[07:37:04] [PASSED] VIC 102
[07:37:04] [PASSED] VIC 106
[07:37:04] [PASSED] VIC 107
[07:37:04] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[07:37:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[07:37:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[07:37:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[07:37:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[07:37:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[07:37:04] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[07:37:04] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[07:37:04] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[07:37:04] [PASSED] Automatic
[07:37:04] [PASSED] Full
[07:37:04] [PASSED] Limited 16:235
[07:37:04] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[07:37:04] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[07:37:04] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[07:37:04] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[07:37:04] === drm_test_drm_hdmi_connector_get_output_format_name ====
[07:37:04] [PASSED] RGB
[07:37:04] [PASSED] YUV 4:2:0
[07:37:04] [PASSED] YUV 4:2:2
[07:37:04] [PASSED] YUV 4:4:4
[07:37:04] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[07:37:04] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[07:37:04] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[07:37:04] ============= drm_damage_helper (21 subtests) ==============
[07:37:04] [PASSED] drm_test_damage_iter_no_damage
[07:37:04] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[07:37:04] [PASSED] drm_test_damage_iter_no_damage_src_moved
[07:37:04] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[07:37:04] [PASSED] drm_test_damage_iter_no_damage_not_visible
[07:37:04] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[07:37:04] [PASSED] drm_test_damage_iter_no_damage_no_fb
[07:37:04] [PASSED] drm_test_damage_iter_simple_damage
[07:37:04] [PASSED] drm_test_damage_iter_single_damage
[07:37:04] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[07:37:04] [PASSED] drm_test_damage_iter_single_damage_outside_src
[07:37:04] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[07:37:04] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[07:37:04] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[07:37:04] [PASSED] drm_test_damage_iter_single_damage_src_moved
[07:37:04] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[07:37:04] [PASSED] drm_test_damage_iter_damage
[07:37:04] [PASSED] drm_test_damage_iter_damage_one_intersect
[07:37:04] [PASSED] drm_test_damage_iter_damage_one_outside
[07:37:04] [PASSED] drm_test_damage_iter_damage_src_moved
[07:37:04] [PASSED] drm_test_damage_iter_damage_not_visible
[07:37:04] ================ [PASSED] drm_damage_helper ================
[07:37:04] ============== drm_dp_mst_helper (3 subtests) ==============
[07:37:04] ============== drm_test_dp_mst_calc_pbn_mode ==============
[07:37:04] [PASSED] Clock 154000 BPP 30 DSC disabled
[07:37:04] [PASSED] Clock 234000 BPP 30 DSC disabled
[07:37:04] [PASSED] Clock 297000 BPP 24 DSC disabled
[07:37:04] [PASSED] Clock 332880 BPP 24 DSC enabled
[07:37:04] [PASSED] Clock 324540 BPP 24 DSC enabled
[07:37:04] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[07:37:04] ============== drm_test_dp_mst_calc_pbn_div ===============
[07:37:04] [PASSED] Link rate 2000000 lane count 4
[07:37:04] [PASSED] Link rate 2000000 lane count 2
[07:37:04] [PASSED] Link rate 2000000 lane count 1
[07:37:04] [PASSED] Link rate 1350000 lane count 4
[07:37:04] [PASSED] Link rate 1350000 lane count 2
[07:37:04] [PASSED] Link rate 1350000 lane count 1
[07:37:04] [PASSED] Link rate 1000000 lane count 4
[07:37:04] [PASSED] Link rate 1000000 lane count 2
[07:37:04] [PASSED] Link rate 1000000 lane count 1
[07:37:04] [PASSED] Link rate 810000 lane count 4
[07:37:04] [PASSED] Link rate 810000 lane count 2
[07:37:04] [PASSED] Link rate 810000 lane count 1
[07:37:04] [PASSED] Link rate 540000 lane count 4
[07:37:04] [PASSED] Link rate 540000 lane count 2
[07:37:04] [PASSED] Link rate 540000 lane count 1
[07:37:04] [PASSED] Link rate 270000 lane count 4
[07:37:04] [PASSED] Link rate 270000 lane count 2
[07:37:04] [PASSED] Link rate 270000 lane count 1
[07:37:04] [PASSED] Link rate 162000 lane count 4
[07:37:04] [PASSED] Link rate 162000 lane count 2
[07:37:04] [PASSED] Link rate 162000 lane count 1
[07:37:04] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[07:37:04] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[07:37:04] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[07:37:04] [PASSED] DP_POWER_UP_PHY with port number
[07:37:04] [PASSED] DP_POWER_DOWN_PHY with port number
[07:37:04] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[07:37:04] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[07:37:04] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[07:37:04] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[07:37:04] [PASSED] DP_QUERY_PAYLOAD with port number
[07:37:04] [PASSED] DP_QUERY_PAYLOAD with VCPI
[07:37:04] [PASSED] DP_REMOTE_DPCD_READ with port number
[07:37:04] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[07:37:04] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[07:37:04] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[07:37:04] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[07:37:04] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[07:37:04] [PASSED] DP_REMOTE_I2C_READ with port number
[07:37:04] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[07:37:04] [PASSED] DP_REMOTE_I2C_READ with transactions array
[07:37:04] [PASSED] DP_REMOTE_I2C_WRITE with port number
[07:37:04] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[07:37:04] [PASSED] DP_REMOTE_I2C_WRITE with data array
[07:37:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[07:37:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[07:37:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[07:37:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[07:37:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[07:37:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[07:37:04] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[07:37:04] ================ [PASSED] drm_dp_mst_helper ================
[07:37:04] ================== drm_exec (7 subtests) ===================
[07:37:04] [PASSED] sanitycheck
[07:37:04] [PASSED] test_lock
[07:37:04] [PASSED] test_lock_unlock
[07:37:04] [PASSED] test_duplicates
[07:37:04] [PASSED] test_prepare
[07:37:04] [PASSED] test_prepare_array
[07:37:04] [PASSED] test_multiple_loops
[07:37:04] ==================== [PASSED] drm_exec =====================
[07:37:04] =========== drm_format_helper_test (18 subtests) ===========
[07:37:04] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] # drm_test_fb_xrgb8888_to_gray8: EXPECTATION FAILED at drivers/gpu/drm/tests/drm_format_helper_test.c:672
[07:37:04] Expected buf == result->expected, but
[07:37:04] buf ==
[07:37:04] ff 00 4c <95><1c><69><e2> b2
[07:37:04] result->expected ==
[07:37:04] ff 00 4c <99><19><66><e5> b2
[07:37:04] [FAILED] well_known_colors
[07:37:04] # drm_test_fb_xrgb8888_to_gray8: EXPECTATION FAILED at drivers/gpu/drm/tests/drm_format_helper_test.c:672
[07:37:04] Expected buf == result->expected, but
[07:37:04] buf ==
[07:37:04] <3d><32><c1> 00 00 <ba><3d><32> 00 00 34 <ba><3d> 00 00
[07:37:04] result->expected ==
[07:37:04] <3c><33><c4> 00 00 <bb><3c><33> 00 00 34 <bb><3c> 00 00
[07:37:04] [FAILED] destination_pitch
[07:37:04] # drm_test_fb_xrgb8888_to_gray8: pass:2 fail:2 skip:0 total:4
[07:37:04] ========== [FAILED] drm_test_fb_xrgb8888_to_gray8 ==========
[07:37:04] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[07:37:04] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[07:37:04] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[07:37:04] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[07:37:04] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[07:37:04] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[07:37:04] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[07:37:04] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[07:37:04] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[07:37:04] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[07:37:04] ============== drm_test_fb_xrgb8888_to_mono ===============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[07:37:04] ==================== drm_test_fb_swab =====================
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ================ [PASSED] drm_test_fb_swab =================
[07:37:04] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[07:37:04] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[07:37:04] [PASSED] single_pixel_source_buffer
[07:37:04] [PASSED] single_pixel_clip_rectangle
[07:37:04] [PASSED] well_known_colors
[07:37:04] [PASSED] destination_pitch
[07:37:04] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[07:37:04] ================= drm_test_fb_clip_offset =================
[07:37:04] [PASSED] pass through
[07:37:04] [PASSED] horizontal offset
[07:37:04] [PASSED] vertical offset
[07:37:04] [PASSED] horizontal and vertical offset
[07:37:04] [PASSED] horizontal offset (custom pitch)
[07:37:04] [PASSED] vertical offset (custom pitch)
[07:37:04] [PASSED] horizontal and vertical offset (custom pitch)
[07:37:04] ============= [PASSED] drm_test_fb_clip_offset =============
[07:37:04] ============== drm_test_fb_build_fourcc_list ==============
[07:37:04] [PASSED] no native formats
[07:37:04] [PASSED] XRGB8888 as native format
[07:37:04] [PASSED] remove duplicates
[07:37:04] [PASSED] convert alpha formats
[07:37:04] [PASSED] random formats
[07:37:04] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[07:37:04] =================== drm_test_fb_memcpy ====================
[07:37:04] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[07:37:04] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[07:37:04] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[07:37:04] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[07:37:04] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[07:37:04] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[07:37:04] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[07:37:04] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[07:37:04] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[07:37:04] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[07:37:04] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[07:37:04] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[07:37:04] =============== [PASSED] drm_test_fb_memcpy ================
[07:37:04] # module: drm_format_helper_test
[07:37:04] # drm_format_helper_test: pass:17 fail:1 skip:0 total:18
[07:37:04] # Totals: pass:82 fail:2 skip:0 total:84
[07:37:04] ============= [FAILED] drm_format_helper_test ==============
[07:37:04] ================= drm_format (18 subtests) =================
[07:37:04] [PASSED] drm_test_format_block_width_invalid
[07:37:04] [PASSED] drm_test_format_block_width_one_plane
[07:37:04] [PASSED] drm_test_format_block_width_two_plane
[07:37:04] [PASSED] drm_test_format_block_width_three_plane
[07:37:04] [PASSED] drm_test_format_block_width_tiled
[07:37:04] [PASSED] drm_test_format_block_height_invalid
[07:37:04] [PASSED] drm_test_format_block_height_one_plane
[07:37:04] [PASSED] drm_test_format_block_height_two_plane
[07:37:04] [PASSED] drm_test_format_block_height_three_plane
[07:37:04] [PASSED] drm_test_format_block_height_tiled
[07:37:04] [PASSED] drm_test_format_min_pitch_invalid
[07:37:04] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[07:37:04] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[07:37:04] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[07:37:04] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[07:37:04] [PASSED] drm_test_format_min_pitch_two_plane
[07:37:04] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[07:37:04] [PASSED] drm_test_format_min_pitch_tiled
[07:37:04] =================== [PASSED] drm_format ====================
[07:37:04] ============== drm_framebuffer (10 subtests) ===============
[07:37:04] ========== drm_test_framebuffer_check_src_coords ==========
[07:37:04] [PASSED] Success: source fits into fb
[07:37:04] [PASSED] Fail: overflowing fb with x-axis coordinate
[07:37:04] [PASSED] Fail: overflowing fb with y-axis coordinate
[07:37:04] [PASSED] Fail: overflowing fb with source width
[07:37:04] [PASSED] Fail: overflowing fb with source height
[07:37:04] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[07:37:04] [PASSED] drm_test_framebuffer_cleanup
[07:37:04] =============== drm_test_framebuffer_create ===============
[07:37:04] [PASSED] ABGR8888 normal sizes
[07:37:04] [PASSED] ABGR8888 max sizes
[07:37:04] [PASSED] ABGR8888 pitch greater than min required
[07:37:04] [PASSED] ABGR8888 pitch less than min required
[07:37:04] [PASSED] ABGR8888 Invalid width
[07:37:04] [PASSED] ABGR8888 Invalid buffer handle
[07:37:04] [PASSED] No pixel format
[07:37:04] [PASSED] ABGR8888 Width 0
[07:37:04] [PASSED] ABGR8888 Height 0
[07:37:04] [PASSED] ABGR8888 Out of bound height * pitch combination
[07:37:04] [PASSED] ABGR8888 Large buffer offset
[07:37:04] [PASSED] ABGR8888 Buffer offset for inexistent plane
[07:37:04] [PASSED] ABGR8888 Invalid flag
[07:37:04] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[07:37:04] [PASSED] ABGR8888 Valid buffer modifier
[07:37:04] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[07:37:04] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[07:37:04] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[07:37:04] [PASSED] NV12 Normal sizes
[07:37:04] [PASSED] NV12 Max sizes
[07:37:04] [PASSED] NV12 Invalid pitch
[07:37:04] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[07:37:04] [PASSED] NV12 different modifier per-plane
[07:37:04] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[07:37:04] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[07:37:04] [PASSED] NV12 Modifier for inexistent plane
[07:37:04] [PASSED] NV12 Handle for inexistent plane
[07:37:04] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[07:37:04] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[07:37:04] [PASSED] YVU420 Normal sizes
[07:37:04] [PASSED] YVU420 Max sizes
[07:37:04] [PASSED] YVU420 Invalid pitch
[07:37:04] [PASSED] YVU420 Different pitches
[07:37:04] [PASSED] YVU420 Different buffer offsets/pitches
[07:37:04] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[07:37:04] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[07:37:04] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[07:37:04] [PASSED] YVU420 Valid modifier
[07:37:04] [PASSED] YVU420 Different modifiers per plane
[07:37:04] [PASSED] YVU420 Modifier for inexistent plane
[07:37:04] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[07:37:04] [PASSED] X0L2 Normal sizes
[07:37:04] [PASSED] X0L2 Max sizes
[07:37:04] [PASSED] X0L2 Invalid pitch
[07:37:04] [PASSED] X0L2 Pitch greater than minimum required
[07:37:04] [PASSED] X0L2 Handle for inexistent plane
[07:37:04] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[07:37:04] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[07:37:04] [PASSED] X0L2 Valid modifier
[07:37:04] [PASSED] X0L2 Modifier for inexistent plane
[07:37:04] =========== [PASSED] drm_test_framebuffer_create ===========
[07:37:04] [PASSED] drm_test_framebuffer_free
[07:37:04] [PASSED] drm_test_framebuffer_init
[07:37:04] [PASSED] drm_test_framebuffer_init_bad_format
[07:37:04] [PASSED] drm_test_framebuffer_init_dev_mismatch
[07:37:04] [PASSED] drm_test_framebuffer_lookup
[07:37:04] [PASSED] drm_test_framebuffer_lookup_inexistent
[07:37:04] [PASSED] drm_test_framebuffer_modifiers_not_supported
[07:37:04] ================= [PASSED] drm_framebuffer =================
[07:37:04] ================ drm_gem_shmem (8 subtests) ================
[07:37:04] [PASSED] drm_gem_shmem_test_obj_create
[07:37:04] [PASSED] drm_gem_shmem_test_obj_create_private
[07:37:04] [PASSED] drm_gem_shmem_test_pin_pages
[07:37:04] [PASSED] drm_gem_shmem_test_vmap
[07:37:04] [PASSED] drm_gem_shmem_test_get_pages_sgt
[07:37:04] [PASSED] drm_gem_shmem_test_get_sg_table
[07:37:04] [PASSED] drm_gem_shmem_test_madvise
[07:37:04] [PASSED] drm_gem_shmem_test_purge
[07:37:04] ================== [PASSED] drm_gem_shmem ==================
[07:37:04] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[07:37:04] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[07:37:04] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[07:37:04] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[07:37:04] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[07:37:04] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[07:37:04] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[07:37:04] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[07:37:04] [PASSED] Automatic
[07:37:04] [PASSED] Full
[07:37:04] [PASSED] Limited 16:235
[07:37:04] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[07:37:04] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[07:37:04] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[07:37:04] [PASSED] drm_test_check_disable_connector
[07:37:04] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[07:37:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[07:37:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[07:37:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[07:37:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[07:37:04] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[07:37:04] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[07:37:04] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[07:37:04] [PASSED] drm_test_check_output_bpc_dvi
[07:37:04] [PASSED] drm_test_check_output_bpc_format_vic_1
[07:37:04] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[07:37:04] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[07:37:04] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[07:37:04] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[07:37:04] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[07:37:04] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[07:37:04] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[07:37:04] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[07:37:04] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[07:37:04] [PASSED] drm_test_check_broadcast_rgb_value
[07:37:04] [PASSED] drm_test_check_bpc_8_value
[07:37:04] [PASSED] drm_test_check_bpc_10_value
[07:37:04] [PASSED] drm_test_check_bpc_12_value
[07:37:04] [PASSED] drm_test_check_format_value
[07:37:04] [PASSED] drm_test_check_tmds_char_value
[07:37:04] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[07:37:04] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[07:37:04] [PASSED] drm_test_check_mode_valid
[07:37:04] [PASSED] drm_test_check_mode_valid_reject
[07:37:04] [PASSED] drm_test_check_mode_valid_reject_rate
[07:37:04] [PASSED] drm_test_check_mode_valid_reject_max_clock
[07:37:04] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[07:37:04] ================= drm_managed (2 subtests) =================
[07:37:04] [PASSED] drm_test_managed_release_action
[07:37:04] [PASSED] drm_test_managed_run_action
[07:37:04] =================== [PASSED] drm_managed ===================
[07:37:04] =================== drm_mm (6 subtests) ====================
[07:37:04] [PASSED] drm_test_mm_init
[07:37:04] [PASSED] drm_test_mm_debug
[07:37:04] [PASSED] drm_test_mm_align32
[07:37:04] [PASSED] drm_test_mm_align64
[07:37:04] [PASSED] drm_test_mm_lowest
[07:37:04] [PASSED] drm_test_mm_highest
[07:37:04] ===================== [PASSED] drm_mm ======================
[07:37:04] ============= drm_modes_analog_tv (5 subtests) =============
[07:37:04] [PASSED] drm_test_modes_analog_tv_mono_576i
[07:37:04] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[07:37:04] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[07:37:04] [PASSED] drm_test_modes_analog_tv_pal_576i
[07:37:04] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[07:37:04] =============== [PASSED] drm_modes_analog_tv ===============
[07:37:04] ============== drm_plane_helper (2 subtests) ===============
[07:37:04] =============== drm_test_check_plane_state ================
[07:37:04] [PASSED] clipping_simple
[07:37:04] [PASSED] clipping_rotate_reflect
[07:37:04] [PASSED] positioning_simple
[07:37:04] [PASSED] upscaling
[07:37:04] [PASSED] downscaling
[07:37:04] [PASSED] rounding1
[07:37:04] [PASSED] rounding2
[07:37:04] [PASSED] rounding3
[07:37:04] [PASSED] rounding4
[07:37:04] =========== [PASSED] drm_test_check_plane_state ============
[07:37:04] =========== drm_test_check_invalid_plane_state ============
[07:37:04] [PASSED] positioning_invalid
[07:37:04] [PASSED] upscaling_invalid
[07:37:04] [PASSED] downscaling_invalid
[07:37:04] ======= [PASSED] drm_test_check_invalid_plane_state ========
[07:37:04] ================ [PASSED] drm_plane_helper =================
[07:37:04] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[07:37:04] ====== drm_test_connector_helper_tv_get_modes_check =======
[07:37:04] [PASSED] None
[07:37:04] [PASSED] PAL
[07:37:04] [PASSED] NTSC
[07:37:04] [PASSED] Both, NTSC Default
[07:37:04] [PASSED] Both, PAL Default
[07:37:04] [PASSED] Both, NTSC Default, with PAL on command-line
[07:37:04] [PASSED] Both, PAL Default, with NTSC on command-line
[07:37:04] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[07:37:04] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[07:37:04] ================== drm_rect (9 subtests) ===================
[07:37:04] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[07:37:04] [PASSED] drm_test_rect_clip_scaled_not_clipped
[07:37:04] [PASSED] drm_test_rect_clip_scaled_clipped
[07:37:04] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[07:37:04] ================= drm_test_rect_intersect =================
[07:37:04] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[07:37:04] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[07:37:04] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[07:37:04] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[07:37:04] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[07:37:04] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[07:37:04] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[07:37:04] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[07:37:04] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[07:37:04] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[07:37:04] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[07:37:04] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
stty: 'standard input': Inappropriate ioctl for device
[07:37:04] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[07:37:04] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[07:37:04] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[07:37:04] ============= [PASSED] drm_test_rect_intersect =============
[07:37:04] ================ drm_test_rect_calc_hscale ================
[07:37:04] [PASSED] normal use
[07:37:04] [PASSED] out of max range
[07:37:04] [PASSED] out of min range
[07:37:04] [PASSED] zero dst
[07:37:04] [PASSED] negative src
[07:37:04] [PASSED] negative dst
[07:37:04] ============ [PASSED] drm_test_rect_calc_hscale ============
[07:37:04] ================ drm_test_rect_calc_vscale ================
[07:37:04] [PASSED] normal use
[07:37:04] [PASSED] out of max range
[07:37:04] [PASSED] out of min range
[07:37:04] [PASSED] zero dst
[07:37:04] [PASSED] negative src
[07:37:04] [PASSED] negative dst
[07:37:04] ============ [PASSED] drm_test_rect_calc_vscale ============
[07:37:04] ================== drm_test_rect_rotate ===================
[07:37:04] [PASSED] reflect-x
[07:37:04] [PASSED] reflect-y
[07:37:04] [PASSED] rotate-0
[07:37:04] [PASSED] rotate-90
[07:37:04] [PASSED] rotate-180
[07:37:04] [PASSED] rotate-270
[07:37:04] ============== [PASSED] drm_test_rect_rotate ===============
[07:37:04] ================ drm_test_rect_rotate_inv =================
[07:37:04] [PASSED] reflect-x
[07:37:04] [PASSED] reflect-y
[07:37:04] [PASSED] rotate-0
[07:37:04] [PASSED] rotate-90
[07:37:04] [PASSED] rotate-180
[07:37:04] [PASSED] rotate-270
[07:37:04] ============ [PASSED] drm_test_rect_rotate_inv =============
[07:37:04] ==================== [PASSED] drm_rect =====================
[07:37:04] ============================================================
[07:37:04] Testing complete. Ran 616 tests: passed: 614, failed: 2
[07:37:04] Failures: drm_format_helper_test.drm_test_fb_xrgb8888_to_gray8.well_known_colors, drm_format_helper_test.drm_test_fb_xrgb8888_to_gray8.destination_pitch
[07:37:04] Elapsed time: 23.533s total, 1.689s configuring, 21.678s building, 0.144s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/5] drm/xe: Export xe_step_name for kunit tests
2025-06-13 0:14 ` [PATCH 1/5] drm/xe: Export xe_step_name for kunit tests Matt Roper
@ 2025-06-13 15:52 ` Michal Wajdeczko
0 siblings, 0 replies; 12+ messages in thread
From: Michal Wajdeczko @ 2025-06-13 15:52 UTC (permalink / raw)
To: Matt Roper, intel-xe
On 13.06.2025 02:14, Matt Roper wrote:
> xe_step_name() is used by xe_assert(), so adding assertions to functions
> like xe_device_get_gt() will result in
>
> ERROR: modpost: "xe_step_name" [drivers/gpu/drm/xe/tests/xe_test.ko] undefined!
>
> while building the kunit tests. Export xe_step_name to avoid these
> build failures when adding assertions.
>
> Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
this looks exactly as my patch from Feb [1] so it must be good ;)
Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
[1] https://patchwork.freedesktop.org/patch/638883/?series=145269&rev=1
> ---
> drivers/gpu/drm/xe/xe_step.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_step.c b/drivers/gpu/drm/xe/xe_step.c
> index c77b5c317fa0..10e88f2c9615 100644
> --- a/drivers/gpu/drm/xe/xe_step.c
> +++ b/drivers/gpu/drm/xe/xe_step.c
> @@ -5,6 +5,7 @@
>
> #include "xe_step.h"
>
> +#include <kunit/visibility.h>
> #include <linux/bitfield.h>
>
> #include "xe_device.h"
> @@ -255,3 +256,4 @@ const char *xe_step_name(enum xe_step step)
> return "**";
> }
> }
> +EXPORT_SYMBOL_IF_KUNIT(xe_step_name);
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/5] drm/xe/tests/pci: Ensure all platforms have a valid GT/tile count
2025-06-13 0:14 ` [PATCH 3/5] drm/xe/tests/pci: Ensure all platforms have a valid GT/tile count Matt Roper
@ 2025-06-13 17:59 ` Michal Wajdeczko
2025-06-13 19:21 ` Michal Wajdeczko
0 siblings, 1 reply; 12+ messages in thread
From: Michal Wajdeczko @ 2025-06-13 17:59 UTC (permalink / raw)
To: Matt Roper, intel-xe
On 13.06.2025 02:14, Matt Roper wrote:
> Add a simple kunit test to ensure each platform's GT per tile count is
> non-zero and does not exceed the global XE_MAX_GT_PER_TILE definition.
>
> We need to move 'struct xe_subplatform_desc' from the .c file to the
> types header to ensure it is accessible from the kunit test.
>
...
> diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.h b/drivers/gpu/drm/xe/tests/xe_pci_test.h
> index ede46800aff1..5abbf522f7a8 100644
> --- a/drivers/gpu/drm/xe/tests/xe_pci_test.h
> +++ b/drivers/gpu/drm/xe/tests/xe_pci_test.h
> @@ -14,13 +14,16 @@
> struct xe_device;
> struct xe_graphics_desc;
> struct xe_media_desc;
> +struct xe_device_desc;
>
> typedef int (*xe_device_fn)(struct xe_device *);
note: this is not used, can be dropped/replaced
> typedef void (*xe_graphics_fn)(const struct xe_graphics_desc *);
> typedef void (*xe_media_fn)(const struct xe_media_desc *);
> +typedef void (*xe_platform_fn)(const struct xe_device_desc *);
this is more like 'device_desc' function, so either:
xe_device_desc_fn
or
xe_device_fn
since previous typedef is not used anywhere
>
> void xe_call_for_each_graphics_ip(xe_graphics_fn xe_fn);
> void xe_call_for_each_media_ip(xe_media_fn xe_fn);
> +void xe_call_for_each_platform(xe_platform_fn xe_fn);
to match above pattern maybe:
void xe_call_for_each_device_desc(xe_device_desc_fn fn);
then later we could add really something like:
typedef void (*xe_platform_fn)(enum xe_platform platform,
enum xe_subplatform subplatform);
void xe_call_for_each_platform(xe_platform_fn xe_fn);
which would help us create new tests based on per-platform pattern.
or maybe we should already start converting existing tests that use
xe_call_for_each() into parametrized tests that use generators instead?
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/5] drm/xe/tests/pci: Ensure all platforms have a valid GT/tile count
2025-06-13 17:59 ` Michal Wajdeczko
@ 2025-06-13 19:21 ` Michal Wajdeczko
0 siblings, 0 replies; 12+ messages in thread
From: Michal Wajdeczko @ 2025-06-13 19:21 UTC (permalink / raw)
To: Matt Roper, intel-xe
On 13.06.2025 19:59, Michal Wajdeczko wrote:
>
>
> On 13.06.2025 02:14, Matt Roper wrote:
>> Add a simple kunit test to ensure each platform's GT per tile count is
>> non-zero and does not exceed the global XE_MAX_GT_PER_TILE definition.
>>
>> We need to move 'struct xe_subplatform_desc' from the .c file to the
>> types header to ensure it is accessible from the kunit test.
>>
>
> ...
>
>> diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.h b/drivers/gpu/drm/xe/tests/xe_pci_test.h
>> index ede46800aff1..5abbf522f7a8 100644
>> --- a/drivers/gpu/drm/xe/tests/xe_pci_test.h
>> +++ b/drivers/gpu/drm/xe/tests/xe_pci_test.h
>> @@ -14,13 +14,16 @@
>> struct xe_device;
>> struct xe_graphics_desc;
>> struct xe_media_desc;
>> +struct xe_device_desc;
>>
>> typedef int (*xe_device_fn)(struct xe_device *);
>
> note: this is not used, can be dropped/replaced
>
>> typedef void (*xe_graphics_fn)(const struct xe_graphics_desc *);
>> typedef void (*xe_media_fn)(const struct xe_media_desc *);
>> +typedef void (*xe_platform_fn)(const struct xe_device_desc *);
>
> this is more like 'device_desc' function, so either:
>
> xe_device_desc_fn
> or
> xe_device_fn
>
> since previous typedef is not used anywhere
>
>>
>> void xe_call_for_each_graphics_ip(xe_graphics_fn xe_fn);
>> void xe_call_for_each_media_ip(xe_media_fn xe_fn);
>> +void xe_call_for_each_platform(xe_platform_fn xe_fn);
>
> to match above pattern maybe:
>
> void xe_call_for_each_device_desc(xe_device_desc_fn fn);
>
> then later we could add really something like:
>
> typedef void (*xe_platform_fn)(enum xe_platform platform,
> enum xe_subplatform subplatform);
>
> void xe_call_for_each_platform(xe_platform_fn xe_fn);
>
> which would help us create new tests based on per-platform pattern.
>
> or maybe we should already start converting existing tests that use
> xe_call_for_each() into parametrized tests that use generators instead?
please see https://patchwork.freedesktop.org/series/150254/
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/5] drm/xe: Track maximum GTs per tile on a per-platform basis
2025-06-13 0:14 ` [PATCH 2/5] drm/xe: Track maximum GTs per tile on a per-platform basis Matt Roper
@ 2025-06-13 20:32 ` Lucas De Marchi
0 siblings, 0 replies; 12+ messages in thread
From: Lucas De Marchi @ 2025-06-13 20:32 UTC (permalink / raw)
To: Matt Roper; +Cc: intel-xe
On Thu, Jun 12, 2025 at 05:14:41PM -0700, Matt Roper wrote:
>Today all of our platforms fall into one of three cases:
> * Single tile platforms with a single (primary) GT
> * Single tile platforms with two GTs (primary + media)
> * Two-tile platforms with a single GT (primary) in each
>
>Our numbering of GTs has been a bit inconsistent between platforms
>(e.g., GT1 is the media GT on some platforms, but the second tile's
>primary GT on others). In the future we'll likely have platforms that
>are both multi-tile and multi-GT, which will make the situation more
>confusing. We could also wind up with more than just two types of GTs
>at some point in the future.
>
>Going forward we should standardize the way we assign uapi GT IDs to
>internal GT structures. Let's declare that for userspace GT ID n,
>
> GT[n]'s tile = n / (max gt per tile)
> GT[n]'s slot within tile = n % (max gt per tile)
>
>We don't want the GT numbering to change for any of our current
>platforms since the current IDs are part of our ABI contract with
>userspace so this means we should track the 'max gt per tile' value on a
>per-platform basis rather than just using a single value across the
>driver. Encode this into device descriptors in xe_pci.c and use the
>per-platform number for various checks in the code. Constant
>XE_MAX_GT_PER_TILE will remain just as the maximum across all platforms
>for easy of sizing array allocations.
>
>Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Lucas De Marchi
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-06-13 20:33 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-13 0:14 [PATCH 0/5] Future-proof for multi-tile + multi-GT cases Matt Roper
2025-06-13 0:14 ` [PATCH 1/5] drm/xe: Export xe_step_name for kunit tests Matt Roper
2025-06-13 15:52 ` Michal Wajdeczko
2025-06-13 0:14 ` [PATCH 2/5] drm/xe: Track maximum GTs per tile on a per-platform basis Matt Roper
2025-06-13 20:32 ` Lucas De Marchi
2025-06-13 0:14 ` [PATCH 3/5] drm/xe/tests/pci: Ensure all platforms have a valid GT/tile count Matt Roper
2025-06-13 17:59 ` Michal Wajdeczko
2025-06-13 19:21 ` Michal Wajdeczko
2025-06-13 0:14 ` [PATCH 4/5] drm/xe: Assign GT IDs properly on multi-tile + multi-GT platforms Matt Roper
2025-06-13 0:14 ` [PATCH 5/5] drm/xe: Don't compare GT ID to GT count when determining valid GTs Matt Roper
2025-06-13 7:36 ` ✗ CI.checkpatch: warning for Future-proof for multi-tile + multi-GT cases Patchwork
2025-06-13 7:37 ` ✗ CI.KUnit: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox