public inbox for intel-xe@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH 0/3] drm/xe/oa: Wa_14026633728
@ 2026-04-07  3:02 Ashutosh Dixit
  2026-04-07  3:02 ` [PATCH 1/3] drm/xe/oa: Use xe_map layer Ashutosh Dixit
                   ` (5 more replies)
  0 siblings, 6 replies; 15+ messages in thread
From: Ashutosh Dixit @ 2026-04-07  3:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Ashutosh Dixit (3):
  drm/xe/oa: Use xe_map layer
  drm/xe/oa: Use drm_gem_mmap_obj for OA buffer mmap
  drm/xe/oa: Implement Wa_14026633728

 drivers/gpu/drm/xe/xe_oa.c         | 117 +++++++++++++++--------------
 drivers/gpu/drm/xe/xe_oa_types.h   |   3 -
 drivers/gpu/drm/xe/xe_wa_oob.rules |   1 +
 3 files changed, 62 insertions(+), 59 deletions(-)

-- 
2.48.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 1/3] drm/xe/oa: Use xe_map layer
  2026-04-07  3:02 [PATCH 0/3] drm/xe/oa: Wa_14026633728 Ashutosh Dixit
@ 2026-04-07  3:02 ` Ashutosh Dixit
  2026-04-07 22:49   ` Umesh Nerlige Ramappa
  2026-04-07  3:02 ` [PATCH 2/3] drm/xe/oa: Use drm_gem_mmap_obj for OA buffer mmap Ashutosh Dixit
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 15+ messages in thread
From: Ashutosh Dixit @ 2026-04-07  3:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

OA code should have used xe_map layer to begin with. In CRI, the OA buffer
can be located both in system and device memory. For these reasons, move OA
code to use the xe_map layer when accessing the OA buffer.

Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_oa.c       | 88 ++++++++++++++++++--------------
 drivers/gpu/drm/xe/xe_oa_types.h |  3 --
 2 files changed, 49 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 6337e671c97ae..dfd3b6a789cc3 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -213,32 +213,40 @@ static u32 xe_oa_hw_tail_read(struct xe_oa_stream *stream)
 #define oa_report_header_64bit(__s) \
 	((__s)->oa_buffer.format->header == HDR_64_BIT)
 
-static u64 oa_report_id(struct xe_oa_stream *stream, void *report)
+static u64 oa_report_id(struct xe_oa_stream *stream, u32 tail)
 {
-	return oa_report_header_64bit(stream) ? *(u64 *)report : *(u32 *)report;
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
+	return oa_report_header_64bit(stream) ?
+		xe_map_rd(stream->oa->xe, map, tail, u64) :
+		xe_map_rd(stream->oa->xe, map, tail, u32);
 }
 
-static void oa_report_id_clear(struct xe_oa_stream *stream, u32 *report)
+static void oa_report_id_clear(struct xe_oa_stream *stream, u32 head)
 {
-	if (oa_report_header_64bit(stream))
-		*(u64 *)report = 0;
-	else
-		*report = 0;
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
+	oa_report_header_64bit(stream) ?
+		xe_map_wr(stream->oa->xe, map, head, u64, 0) :
+		xe_map_wr(stream->oa->xe, map, head, u32, 0);
 }
 
-static u64 oa_timestamp(struct xe_oa_stream *stream, void *report)
+static u64 oa_timestamp(struct xe_oa_stream *stream, u32 tail)
 {
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
 	return oa_report_header_64bit(stream) ?
-		*((u64 *)report + 1) :
-		*((u32 *)report + 1);
+		xe_map_rd(stream->oa->xe, map, tail + 2, u64) :
+		xe_map_rd(stream->oa->xe, map, tail + 1, u32);
 }
 
-static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 *report)
+static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 head)
 {
-	if (oa_report_header_64bit(stream))
-		*(u64 *)&report[2] = 0;
-	else
-		report[1] = 0;
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
+	oa_report_header_64bit(stream) ?
+		xe_map_wr(stream->oa->xe, map, head + 2, u64, 0) :
+		xe_map_wr(stream->oa->xe, map, head + 1, u32, 0);
 }
 
 static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
@@ -275,9 +283,7 @@ static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
 	 * they were written.  If not : (╯°□°)╯︵ ┻━┻
 	 */
 	while (xe_oa_circ_diff(stream, tail, stream->oa_buffer.tail) >= report_size) {
-		void *report = stream->oa_buffer.vaddr + tail;
-
-		if (oa_report_id(stream, report) || oa_timestamp(stream, report))
+		if (oa_report_id(stream, tail) || oa_timestamp(stream, tail))
 			break;
 
 		tail = xe_oa_circ_diff(stream, tail, report_size);
@@ -311,30 +317,37 @@ static enum hrtimer_restart xe_oa_poll_check_timer_cb(struct hrtimer *hrtimer)
 	return HRTIMER_RESTART;
 }
 
+static inline unsigned long
+xe_oa_copy_to_user(void __user *dst, const struct iosys_map *src, size_t src_offset, size_t len)
+{
+	if (src->is_iomem)
+		return copy_to_user(dst, src->vaddr_iomem + src_offset, len);
+	else
+		return copy_to_user(dst, src->vaddr + src_offset, len);
+}
+
 static int xe_oa_append_report(struct xe_oa_stream *stream, char __user *buf,
-			       size_t count, size_t *offset, const u8 *report)
+			       size_t count, size_t *offset, u32 head)
 {
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
 	int report_size = stream->oa_buffer.format->size;
 	int report_size_partial;
-	u8 *oa_buf_end;
 
 	if ((count - *offset) < report_size)
 		return -ENOSPC;
 
 	buf += *offset;
 
-	oa_buf_end = stream->oa_buffer.vaddr + stream->oa_buffer.circ_size;
-	report_size_partial = oa_buf_end - report;
+	report_size_partial = stream->oa_buffer.circ_size - head;
 
 	if (report_size_partial < report_size) {
-		if (copy_to_user(buf, report, report_size_partial))
+		if (xe_oa_copy_to_user(buf, map, head, report_size_partial))
 			return -EFAULT;
 		buf += report_size_partial;
 
-		if (copy_to_user(buf, stream->oa_buffer.vaddr,
-				 report_size - report_size_partial))
+		if (xe_oa_copy_to_user(buf, map, 0, report_size - report_size_partial))
 			return -EFAULT;
-	} else if (copy_to_user(buf, report, report_size)) {
+	} else if (xe_oa_copy_to_user(buf, map, head, report_size)) {
 		return -EFAULT;
 	}
 
@@ -347,7 +360,6 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
 				size_t count, size_t *offset)
 {
 	int report_size = stream->oa_buffer.format->size;
-	u8 *oa_buf_base = stream->oa_buffer.vaddr;
 	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
 	size_t start_offset = *offset;
 	unsigned long flags;
@@ -364,26 +376,24 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
 
 	for (; xe_oa_circ_diff(stream, tail, head);
 	     head = xe_oa_circ_incr(stream, head, report_size)) {
-		u8 *report = oa_buf_base + head;
-
-		ret = xe_oa_append_report(stream, buf, count, offset, report);
+		ret = xe_oa_append_report(stream, buf, count, offset, head);
 		if (ret)
 			break;
 
 		if (!(stream->oa_buffer.circ_size % report_size)) {
 			/* Clear out report id and timestamp to detect unlanded reports */
-			oa_report_id_clear(stream, (void *)report);
-			oa_timestamp_clear(stream, (void *)report);
+			oa_report_id_clear(stream, head);
+			oa_timestamp_clear(stream, head);
 		} else {
-			u8 *oa_buf_end = stream->oa_buffer.vaddr + stream->oa_buffer.circ_size;
-			u32 part = oa_buf_end - report;
+			struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+			u32 part = stream->oa_buffer.circ_size - head;
 
 			/* Zero out the entire report */
 			if (report_size <= part) {
-				memset(report, 0, report_size);
+				xe_map_memset(stream->oa->xe, map, head, 0, report_size);
 			} else {
-				memset(report, 0, part);
-				memset(oa_buf_base, 0, report_size - part);
+				xe_map_memset(stream->oa->xe, map, head, 0, part);
+				xe_map_memset(stream->oa->xe, map, 0, 0, report_size - part);
 			}
 		}
 	}
@@ -436,7 +446,8 @@ static void xe_oa_init_oa_buffer(struct xe_oa_stream *stream)
 	spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
 
 	/* Zero out the OA buffer since we rely on zero report id and timestamp fields */
-	memset(stream->oa_buffer.vaddr, 0, xe_bo_size(stream->oa_buffer.bo));
+	xe_map_memset(stream->oa->xe, &stream->oa_buffer.bo->vmap, 0, 0,
+		      xe_bo_size(stream->oa_buffer.bo));
 }
 
 static u32 __format_to_oactrl(const struct xe_oa_format *format, int counter_sel_mask)
@@ -891,7 +902,6 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
 	stream->oa_buffer.bo = bo;
 	/* mmap implementation requires OA buffer to be in system memory */
 	xe_assert(stream->oa->xe, bo->vmap.is_iomem == 0);
-	stream->oa_buffer.vaddr = bo->vmap.vaddr;
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index b03ffd5134834..2dd550c93b8ac 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -162,9 +162,6 @@ struct xe_oa_buffer {
 	/** @format: xe_bo backing the OA buffer */
 	struct xe_bo *bo;
 
-	/** @vaddr: mapped vaddr of the OA buffer */
-	u8 *vaddr;
-
 	/** @ptr_lock: Lock protecting reads/writes to head/tail pointers */
 	spinlock_t ptr_lock;
 
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 2/3] drm/xe/oa: Use drm_gem_mmap_obj for OA buffer mmap
  2026-04-07  3:02 [PATCH 0/3] drm/xe/oa: Wa_14026633728 Ashutosh Dixit
  2026-04-07  3:02 ` [PATCH 1/3] drm/xe/oa: Use xe_map layer Ashutosh Dixit
@ 2026-04-07  3:02 ` Ashutosh Dixit
  2026-04-07 22:52   ` Umesh Nerlige Ramappa
  2026-04-07  3:02 ` [PATCH 3/3] drm/xe/oa: Implement Wa_14026633728 Ashutosh Dixit
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 15+ messages in thread
From: Ashutosh Dixit @ 2026-04-07  3:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

OA buffer mmap can currently only mmap OA buffer in system memory. CRI
MERTOA buffer can be located in device memory. Switch OA buffer mmap to
using drm_gem_mmap_obj, which can handle mmap's of both system and device
memory buffers.

Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_oa.c | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index dfd3b6a789cc3..0e65141e57ee8 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -9,6 +9,7 @@
 #include <linux/poll.h>
 
 #include <drm/drm_drv.h>
+#include <drm/drm_gem.h>
 #include <drm/drm_managed.h>
 #include <drm/drm_syncobj.h>
 #include <uapi/drm/xe_drm.h>
@@ -900,8 +901,6 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
 		return PTR_ERR(bo);
 
 	stream->oa_buffer.bo = bo;
-	/* mmap implementation requires OA buffer to be in system memory */
-	xe_assert(stream->oa->xe, bo->vmap.is_iomem == 0);
 	return 0;
 }
 
@@ -1683,8 +1682,6 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
 {
 	struct xe_oa_stream *stream = file->private_data;
 	struct xe_bo *bo = stream->oa_buffer.bo;
-	unsigned long start = vma->vm_start;
-	int i, ret;
 
 	if (xe_observation_paranoid && !perfmon_capable()) {
 		drm_dbg(&stream->oa->xe->drm, "Insufficient privilege to map OA buffer\n");
@@ -1692,7 +1689,7 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
 	}
 
 	/* Can mmap the entire OA buffer or nothing (no partial OA buffer mmaps) */
-	if (vma->vm_end - vma->vm_start != xe_bo_size(stream->oa_buffer.bo)) {
+	if (vma->vm_end - vma->vm_start != xe_bo_size(bo)) {
 		drm_dbg(&stream->oa->xe->drm, "Wrong mmap size, must be OA buffer size\n");
 		return -EINVAL;
 	}
@@ -1708,17 +1705,7 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
 	vm_flags_mod(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_DONTCOPY,
 		     VM_MAYWRITE | VM_MAYEXEC);
 
-	xe_assert(stream->oa->xe, bo->ttm.ttm->num_pages == vma_pages(vma));
-	for (i = 0; i < bo->ttm.ttm->num_pages; i++) {
-		ret = remap_pfn_range(vma, start, page_to_pfn(bo->ttm.ttm->pages[i]),
-				      PAGE_SIZE, vma->vm_page_prot);
-		if (ret)
-			break;
-
-		start += PAGE_SIZE;
-	}
-
-	return ret;
+	return drm_gem_mmap_obj(&bo->ttm.base, xe_bo_size(bo), vma);
 }
 
 static const struct file_operations xe_oa_fops = {
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 3/3] drm/xe/oa: Implement Wa_14026633728
  2026-04-07  3:02 [PATCH 0/3] drm/xe/oa: Wa_14026633728 Ashutosh Dixit
  2026-04-07  3:02 ` [PATCH 1/3] drm/xe/oa: Use xe_map layer Ashutosh Dixit
  2026-04-07  3:02 ` [PATCH 2/3] drm/xe/oa: Use drm_gem_mmap_obj for OA buffer mmap Ashutosh Dixit
@ 2026-04-07  3:02 ` Ashutosh Dixit
  2026-04-07 23:17   ` Umesh Nerlige Ramappa
  2026-04-07  3:10 ` ✓ CI.KUnit: success for drm/xe/oa: Wa_14026633728 Patchwork
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 15+ messages in thread
From: Ashutosh Dixit @ 2026-04-07  3:02 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

CRI Wa_14026633728 requires MERTOA buffer to be allocated in device memory,
not system memory (which is the default for OA buffers).

Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_oa.c         | 10 +++++++++-
 drivers/gpu/drm/xe/xe_wa_oob.rules |  1 +
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 0e65141e57ee8..f65cec62a0d2d 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -250,6 +250,11 @@ static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 head)
 		xe_map_wr(stream->oa->xe, map, head + 1, u32, 0);
 }
 
+static bool mert_wa_14026633728(struct xe_oa_stream *s)
+{
+	return s->oa_unit->type == DRM_XE_OA_UNIT_TYPE_MERT && XE_GT_WA(s->gt, 14026633728);
+}
+
 static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
 {
 	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
@@ -892,11 +897,14 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
 
 static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
 {
+	u32 vram = mert_wa_14026633728(stream) ?
+		XE_BO_FLAG_VRAM_IF_DGFX(xe_device_get_root_tile(stream->oa->xe)) :
+		XE_BO_FLAG_SYSTEM;
 	struct xe_bo *bo;
 
 	bo = xe_bo_create_pin_map_novm(stream->oa->xe, stream->gt->tile,
 				       size, ttm_bo_type_kernel,
-				       XE_BO_FLAG_SYSTEM | XE_BO_FLAG_GGTT, false);
+				       vram | XE_BO_FLAG_GGTT, false);
 	if (IS_ERR(bo))
 		return PTR_ERR(bo);
 
diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
index f8a185103b805..a7c1bd9bcb943 100644
--- a/drivers/gpu/drm/xe/xe_wa_oob.rules
+++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
@@ -65,3 +65,4 @@
 
 14025883347	MEDIA_VERSION_RANGE(1301, 3503)
 		GRAPHICS_VERSION_RANGE(2004, 3005)
+14026633728	PLATFORM(CRESCENTISLAND)
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* ✓ CI.KUnit: success for drm/xe/oa: Wa_14026633728
  2026-04-07  3:02 [PATCH 0/3] drm/xe/oa: Wa_14026633728 Ashutosh Dixit
                   ` (2 preceding siblings ...)
  2026-04-07  3:02 ` [PATCH 3/3] drm/xe/oa: Implement Wa_14026633728 Ashutosh Dixit
@ 2026-04-07  3:10 ` Patchwork
  2026-04-07  3:51 ` ✓ Xe.CI.BAT: " Patchwork
  2026-04-07  5:02 ` ✓ Xe.CI.FULL: " Patchwork
  5 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-04-07  3:10 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

== Series Details ==

Series: drm/xe/oa: Wa_14026633728
URL   : https://patchwork.freedesktop.org/series/164412/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[03:09:08] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[03:09: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
[03:09:44] Starting KUnit Kernel (1/1)...
[03:09:44] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[03:09:44] ================== guc_buf (11 subtests) ===================
[03:09:44] [PASSED] test_smallest
[03:09:44] [PASSED] test_largest
[03:09:44] [PASSED] test_granular
[03:09:44] [PASSED] test_unique
[03:09:44] [PASSED] test_overlap
[03:09:44] [PASSED] test_reusable
[03:09:44] [PASSED] test_too_big
[03:09:44] [PASSED] test_flush
[03:09:44] [PASSED] test_lookup
[03:09:44] [PASSED] test_data
[03:09:44] [PASSED] test_class
[03:09:44] ===================== [PASSED] guc_buf =====================
[03:09:44] =================== guc_dbm (7 subtests) ===================
[03:09:44] [PASSED] test_empty
[03:09:44] [PASSED] test_default
[03:09:44] ======================== test_size  ========================
[03:09:44] [PASSED] 4
[03:09:44] [PASSED] 8
[03:09:44] [PASSED] 32
[03:09:44] [PASSED] 256
[03:09:44] ==================== [PASSED] test_size ====================
[03:09:44] ======================= test_reuse  ========================
[03:09:44] [PASSED] 4
[03:09:44] [PASSED] 8
[03:09:44] [PASSED] 32
[03:09:44] [PASSED] 256
[03:09:44] =================== [PASSED] test_reuse ====================
[03:09:44] =================== test_range_overlap  ====================
[03:09:44] [PASSED] 4
[03:09:44] [PASSED] 8
[03:09:44] [PASSED] 32
[03:09:44] [PASSED] 256
[03:09:44] =============== [PASSED] test_range_overlap ================
[03:09:44] =================== test_range_compact  ====================
[03:09:44] [PASSED] 4
[03:09:44] [PASSED] 8
[03:09:44] [PASSED] 32
[03:09:44] [PASSED] 256
[03:09:44] =============== [PASSED] test_range_compact ================
[03:09:44] ==================== test_range_spare  =====================
[03:09:44] [PASSED] 4
[03:09:44] [PASSED] 8
[03:09:44] [PASSED] 32
[03:09:44] [PASSED] 256
[03:09:44] ================ [PASSED] test_range_spare =================
[03:09:44] ===================== [PASSED] guc_dbm =====================
[03:09:44] =================== guc_idm (6 subtests) ===================
[03:09:44] [PASSED] bad_init
[03:09:44] [PASSED] no_init
[03:09:44] [PASSED] init_fini
[03:09:44] [PASSED] check_used
[03:09:44] [PASSED] check_quota
[03:09:44] [PASSED] check_all
[03:09:44] ===================== [PASSED] guc_idm =====================
[03:09:44] ================== no_relay (3 subtests) ===================
[03:09:44] [PASSED] xe_drops_guc2pf_if_not_ready
[03:09:44] [PASSED] xe_drops_guc2vf_if_not_ready
[03:09:44] [PASSED] xe_rejects_send_if_not_ready
[03:09:44] ==================== [PASSED] no_relay =====================
[03:09:44] ================== pf_relay (14 subtests) ==================
[03:09:44] [PASSED] pf_rejects_guc2pf_too_short
[03:09:44] [PASSED] pf_rejects_guc2pf_too_long
[03:09:44] [PASSED] pf_rejects_guc2pf_no_payload
[03:09:44] [PASSED] pf_fails_no_payload
[03:09:44] [PASSED] pf_fails_bad_origin
[03:09:44] [PASSED] pf_fails_bad_type
[03:09:44] [PASSED] pf_txn_reports_error
[03:09:44] [PASSED] pf_txn_sends_pf2guc
[03:09:44] [PASSED] pf_sends_pf2guc
[03:09:44] [SKIPPED] pf_loopback_nop
[03:09:44] [SKIPPED] pf_loopback_echo
[03:09:44] [SKIPPED] pf_loopback_fail
[03:09:44] [SKIPPED] pf_loopback_busy
[03:09:44] [SKIPPED] pf_loopback_retry
[03:09:44] ==================== [PASSED] pf_relay =====================
[03:09:44] ================== vf_relay (3 subtests) ===================
[03:09:44] [PASSED] vf_rejects_guc2vf_too_short
[03:09:44] [PASSED] vf_rejects_guc2vf_too_long
[03:09:44] [PASSED] vf_rejects_guc2vf_no_payload
[03:09:44] ==================== [PASSED] vf_relay =====================
[03:09:44] ================ pf_gt_config (9 subtests) =================
[03:09:44] [PASSED] fair_contexts_1vf
[03:09:44] [PASSED] fair_doorbells_1vf
[03:09:44] [PASSED] fair_ggtt_1vf
[03:09:44] ====================== fair_vram_1vf  ======================
[03:09:44] [PASSED] 3.50 GiB
[03:09:44] [PASSED] 11.5 GiB
[03:09:44] [PASSED] 15.5 GiB
[03:09:44] [PASSED] 31.5 GiB
[03:09:44] [PASSED] 63.5 GiB
[03:09:44] [PASSED] 1.91 GiB
[03:09:44] ================== [PASSED] fair_vram_1vf ==================
[03:09:44] ================ fair_vram_1vf_admin_only  =================
[03:09:44] [PASSED] 3.50 GiB
[03:09:44] [PASSED] 11.5 GiB
[03:09:44] [PASSED] 15.5 GiB
[03:09:44] [PASSED] 31.5 GiB
[03:09:44] [PASSED] 63.5 GiB
[03:09:44] [PASSED] 1.91 GiB
[03:09:44] ============ [PASSED] fair_vram_1vf_admin_only =============
[03:09:44] ====================== fair_contexts  ======================
[03:09:44] [PASSED] 1 VF
[03:09:44] [PASSED] 2 VFs
[03:09:44] [PASSED] 3 VFs
[03:09:44] [PASSED] 4 VFs
[03:09:44] [PASSED] 5 VFs
[03:09:44] [PASSED] 6 VFs
[03:09:44] [PASSED] 7 VFs
[03:09:44] [PASSED] 8 VFs
[03:09:44] [PASSED] 9 VFs
[03:09:44] [PASSED] 10 VFs
[03:09:44] [PASSED] 11 VFs
[03:09:44] [PASSED] 12 VFs
[03:09:44] [PASSED] 13 VFs
[03:09:44] [PASSED] 14 VFs
[03:09:44] [PASSED] 15 VFs
[03:09:44] [PASSED] 16 VFs
[03:09:44] [PASSED] 17 VFs
[03:09:44] [PASSED] 18 VFs
[03:09:44] [PASSED] 19 VFs
[03:09:44] [PASSED] 20 VFs
[03:09:44] [PASSED] 21 VFs
[03:09:44] [PASSED] 22 VFs
[03:09:44] [PASSED] 23 VFs
[03:09:44] [PASSED] 24 VFs
[03:09:44] [PASSED] 25 VFs
[03:09:44] [PASSED] 26 VFs
[03:09:44] [PASSED] 27 VFs
[03:09:44] [PASSED] 28 VFs
[03:09:44] [PASSED] 29 VFs
[03:09:44] [PASSED] 30 VFs
[03:09:44] [PASSED] 31 VFs
[03:09:44] [PASSED] 32 VFs
[03:09:44] [PASSED] 33 VFs
[03:09:44] [PASSED] 34 VFs
[03:09:44] [PASSED] 35 VFs
[03:09:44] [PASSED] 36 VFs
[03:09:44] [PASSED] 37 VFs
[03:09:44] [PASSED] 38 VFs
[03:09:44] [PASSED] 39 VFs
[03:09:44] [PASSED] 40 VFs
[03:09:44] [PASSED] 41 VFs
[03:09:44] [PASSED] 42 VFs
[03:09:44] [PASSED] 43 VFs
[03:09:44] [PASSED] 44 VFs
[03:09:44] [PASSED] 45 VFs
[03:09:44] [PASSED] 46 VFs
[03:09:44] [PASSED] 47 VFs
[03:09:44] [PASSED] 48 VFs
[03:09:44] [PASSED] 49 VFs
[03:09:44] [PASSED] 50 VFs
[03:09:44] [PASSED] 51 VFs
[03:09:44] [PASSED] 52 VFs
[03:09:44] [PASSED] 53 VFs
[03:09:44] [PASSED] 54 VFs
[03:09:44] [PASSED] 55 VFs
[03:09:44] [PASSED] 56 VFs
[03:09:44] [PASSED] 57 VFs
[03:09:44] [PASSED] 58 VFs
[03:09:44] [PASSED] 59 VFs
[03:09:44] [PASSED] 60 VFs
[03:09:44] [PASSED] 61 VFs
[03:09:44] [PASSED] 62 VFs
[03:09:44] [PASSED] 63 VFs
[03:09:44] ================== [PASSED] fair_contexts ==================
[03:09:44] ===================== fair_doorbells  ======================
[03:09:44] [PASSED] 1 VF
[03:09:44] [PASSED] 2 VFs
[03:09:44] [PASSED] 3 VFs
[03:09:44] [PASSED] 4 VFs
[03:09:44] [PASSED] 5 VFs
[03:09:44] [PASSED] 6 VFs
[03:09:44] [PASSED] 7 VFs
[03:09:44] [PASSED] 8 VFs
[03:09:44] [PASSED] 9 VFs
[03:09:44] [PASSED] 10 VFs
[03:09:44] [PASSED] 11 VFs
[03:09:44] [PASSED] 12 VFs
[03:09:44] [PASSED] 13 VFs
[03:09:44] [PASSED] 14 VFs
[03:09:44] [PASSED] 15 VFs
[03:09:44] [PASSED] 16 VFs
[03:09:44] [PASSED] 17 VFs
[03:09:44] [PASSED] 18 VFs
[03:09:44] [PASSED] 19 VFs
[03:09:44] [PASSED] 20 VFs
[03:09:44] [PASSED] 21 VFs
[03:09:44] [PASSED] 22 VFs
[03:09:44] [PASSED] 23 VFs
[03:09:44] [PASSED] 24 VFs
[03:09:44] [PASSED] 25 VFs
[03:09:44] [PASSED] 26 VFs
[03:09:44] [PASSED] 27 VFs
[03:09:44] [PASSED] 28 VFs
[03:09:44] [PASSED] 29 VFs
[03:09:44] [PASSED] 30 VFs
[03:09:44] [PASSED] 31 VFs
[03:09:44] [PASSED] 32 VFs
[03:09:44] [PASSED] 33 VFs
[03:09:44] [PASSED] 34 VFs
[03:09:44] [PASSED] 35 VFs
[03:09:44] [PASSED] 36 VFs
[03:09:44] [PASSED] 37 VFs
[03:09:44] [PASSED] 38 VFs
[03:09:44] [PASSED] 39 VFs
[03:09:44] [PASSED] 40 VFs
[03:09:44] [PASSED] 41 VFs
[03:09:44] [PASSED] 42 VFs
[03:09:44] [PASSED] 43 VFs
[03:09:44] [PASSED] 44 VFs
[03:09:44] [PASSED] 45 VFs
[03:09:44] [PASSED] 46 VFs
[03:09:44] [PASSED] 47 VFs
[03:09:44] [PASSED] 48 VFs
[03:09:44] [PASSED] 49 VFs
[03:09:44] [PASSED] 50 VFs
[03:09:44] [PASSED] 51 VFs
[03:09:44] [PASSED] 52 VFs
[03:09:44] [PASSED] 53 VFs
[03:09:44] [PASSED] 54 VFs
[03:09:44] [PASSED] 55 VFs
[03:09:44] [PASSED] 56 VFs
[03:09:44] [PASSED] 57 VFs
[03:09:44] [PASSED] 58 VFs
[03:09:44] [PASSED] 59 VFs
[03:09:44] [PASSED] 60 VFs
[03:09:44] [PASSED] 61 VFs
[03:09:44] [PASSED] 62 VFs
[03:09:44] [PASSED] 63 VFs
[03:09:44] ================= [PASSED] fair_doorbells ==================
[03:09:44] ======================== fair_ggtt  ========================
[03:09:44] [PASSED] 1 VF
[03:09:44] [PASSED] 2 VFs
[03:09:44] [PASSED] 3 VFs
[03:09:44] [PASSED] 4 VFs
[03:09:44] [PASSED] 5 VFs
[03:09:44] [PASSED] 6 VFs
[03:09:44] [PASSED] 7 VFs
[03:09:44] [PASSED] 8 VFs
[03:09:44] [PASSED] 9 VFs
[03:09:44] [PASSED] 10 VFs
[03:09:44] [PASSED] 11 VFs
[03:09:44] [PASSED] 12 VFs
[03:09:44] [PASSED] 13 VFs
[03:09:44] [PASSED] 14 VFs
[03:09:44] [PASSED] 15 VFs
[03:09:44] [PASSED] 16 VFs
[03:09:44] [PASSED] 17 VFs
[03:09:44] [PASSED] 18 VFs
[03:09:44] [PASSED] 19 VFs
[03:09:44] [PASSED] 20 VFs
[03:09:44] [PASSED] 21 VFs
[03:09:44] [PASSED] 22 VFs
[03:09:44] [PASSED] 23 VFs
[03:09:44] [PASSED] 24 VFs
[03:09:44] [PASSED] 25 VFs
[03:09:44] [PASSED] 26 VFs
[03:09:44] [PASSED] 27 VFs
[03:09:44] [PASSED] 28 VFs
[03:09:44] [PASSED] 29 VFs
[03:09:44] [PASSED] 30 VFs
[03:09:44] [PASSED] 31 VFs
[03:09:44] [PASSED] 32 VFs
[03:09:44] [PASSED] 33 VFs
[03:09:44] [PASSED] 34 VFs
[03:09:44] [PASSED] 35 VFs
[03:09:44] [PASSED] 36 VFs
[03:09:44] [PASSED] 37 VFs
[03:09:44] [PASSED] 38 VFs
[03:09:44] [PASSED] 39 VFs
[03:09:44] [PASSED] 40 VFs
[03:09:44] [PASSED] 41 VFs
[03:09:44] [PASSED] 42 VFs
[03:09:44] [PASSED] 43 VFs
[03:09:44] [PASSED] 44 VFs
[03:09:44] [PASSED] 45 VFs
[03:09:44] [PASSED] 46 VFs
[03:09:44] [PASSED] 47 VFs
[03:09:44] [PASSED] 48 VFs
[03:09:44] [PASSED] 49 VFs
[03:09:44] [PASSED] 50 VFs
[03:09:44] [PASSED] 51 VFs
[03:09:44] [PASSED] 52 VFs
[03:09:44] [PASSED] 53 VFs
[03:09:44] [PASSED] 54 VFs
[03:09:44] [PASSED] 55 VFs
[03:09:44] [PASSED] 56 VFs
[03:09:44] [PASSED] 57 VFs
[03:09:44] [PASSED] 58 VFs
[03:09:44] [PASSED] 59 VFs
[03:09:44] [PASSED] 60 VFs
[03:09:44] [PASSED] 61 VFs
[03:09:44] [PASSED] 62 VFs
[03:09:44] [PASSED] 63 VFs
[03:09:44] ==================== [PASSED] fair_ggtt ====================
[03:09:45] ======================== fair_vram  ========================
[03:09:45] [PASSED] 1 VF
[03:09:45] [PASSED] 2 VFs
[03:09:45] [PASSED] 3 VFs
[03:09:45] [PASSED] 4 VFs
[03:09:45] [PASSED] 5 VFs
[03:09:45] [PASSED] 6 VFs
[03:09:45] [PASSED] 7 VFs
[03:09:45] [PASSED] 8 VFs
[03:09:45] [PASSED] 9 VFs
[03:09:45] [PASSED] 10 VFs
[03:09:45] [PASSED] 11 VFs
[03:09:45] [PASSED] 12 VFs
[03:09:45] [PASSED] 13 VFs
[03:09:45] [PASSED] 14 VFs
[03:09:45] [PASSED] 15 VFs
[03:09:45] [PASSED] 16 VFs
[03:09:45] [PASSED] 17 VFs
[03:09:45] [PASSED] 18 VFs
[03:09:45] [PASSED] 19 VFs
[03:09:45] [PASSED] 20 VFs
[03:09:45] [PASSED] 21 VFs
[03:09:45] [PASSED] 22 VFs
[03:09:45] [PASSED] 23 VFs
[03:09:45] [PASSED] 24 VFs
[03:09:45] [PASSED] 25 VFs
[03:09:45] [PASSED] 26 VFs
[03:09:45] [PASSED] 27 VFs
[03:09:45] [PASSED] 28 VFs
[03:09:45] [PASSED] 29 VFs
[03:09:45] [PASSED] 30 VFs
[03:09:45] [PASSED] 31 VFs
[03:09:45] [PASSED] 32 VFs
[03:09:45] [PASSED] 33 VFs
[03:09:45] [PASSED] 34 VFs
[03:09:45] [PASSED] 35 VFs
[03:09:45] [PASSED] 36 VFs
[03:09:45] [PASSED] 37 VFs
[03:09:45] [PASSED] 38 VFs
[03:09:45] [PASSED] 39 VFs
[03:09:45] [PASSED] 40 VFs
[03:09:45] [PASSED] 41 VFs
[03:09:45] [PASSED] 42 VFs
[03:09:45] [PASSED] 43 VFs
[03:09:45] [PASSED] 44 VFs
[03:09:45] [PASSED] 45 VFs
[03:09:45] [PASSED] 46 VFs
[03:09:45] [PASSED] 47 VFs
[03:09:45] [PASSED] 48 VFs
[03:09:45] [PASSED] 49 VFs
[03:09:45] [PASSED] 50 VFs
[03:09:45] [PASSED] 51 VFs
[03:09:45] [PASSED] 52 VFs
[03:09:45] [PASSED] 53 VFs
[03:09:45] [PASSED] 54 VFs
[03:09:45] [PASSED] 55 VFs
[03:09:45] [PASSED] 56 VFs
[03:09:45] [PASSED] 57 VFs
[03:09:45] [PASSED] 58 VFs
[03:09:45] [PASSED] 59 VFs
[03:09:45] [PASSED] 60 VFs
[03:09:45] [PASSED] 61 VFs
[03:09:45] [PASSED] 62 VFs
[03:09:45] [PASSED] 63 VFs
[03:09:45] ==================== [PASSED] fair_vram ====================
[03:09:45] ================== [PASSED] pf_gt_config ===================
[03:09:45] ===================== lmtt (1 subtest) =====================
[03:09:45] ======================== test_ops  =========================
[03:09:45] [PASSED] 2-level
[03:09:45] [PASSED] multi-level
[03:09:45] ==================== [PASSED] test_ops =====================
[03:09:45] ====================== [PASSED] lmtt =======================
[03:09:45] ================= pf_service (11 subtests) =================
[03:09:45] [PASSED] pf_negotiate_any
[03:09:45] [PASSED] pf_negotiate_base_match
[03:09:45] [PASSED] pf_negotiate_base_newer
[03:09:45] [PASSED] pf_negotiate_base_next
[03:09:45] [SKIPPED] pf_negotiate_base_older
[03:09:45] [PASSED] pf_negotiate_base_prev
[03:09:45] [PASSED] pf_negotiate_latest_match
[03:09:45] [PASSED] pf_negotiate_latest_newer
[03:09:45] [PASSED] pf_negotiate_latest_next
[03:09:45] [SKIPPED] pf_negotiate_latest_older
[03:09:45] [SKIPPED] pf_negotiate_latest_prev
[03:09:45] =================== [PASSED] pf_service ====================
[03:09:45] ================= xe_guc_g2g (2 subtests) ==================
[03:09:45] ============== xe_live_guc_g2g_kunit_default  ==============
[03:09:45] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[03:09:45] ============== xe_live_guc_g2g_kunit_allmem  ===============
[03:09:45] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[03:09:45] =================== [SKIPPED] xe_guc_g2g ===================
[03:09:45] =================== xe_mocs (2 subtests) ===================
[03:09:45] ================ xe_live_mocs_kernel_kunit  ================
[03:09:45] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[03:09:45] ================ xe_live_mocs_reset_kunit  =================
[03:09:45] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[03:09:45] ==================== [SKIPPED] xe_mocs =====================
[03:09:45] ================= xe_migrate (2 subtests) ==================
[03:09:45] ================= xe_migrate_sanity_kunit  =================
[03:09:45] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[03:09:45] ================== xe_validate_ccs_kunit  ==================
[03:09:45] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[03:09:45] =================== [SKIPPED] xe_migrate ===================
[03:09:45] ================== xe_dma_buf (1 subtest) ==================
[03:09:45] ==================== xe_dma_buf_kunit  =====================
[03:09:45] ================ [SKIPPED] xe_dma_buf_kunit ================
[03:09:45] =================== [SKIPPED] xe_dma_buf ===================
[03:09:45] ================= xe_bo_shrink (1 subtest) =================
[03:09:45] =================== xe_bo_shrink_kunit  ====================
[03:09:45] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[03:09:45] ================== [SKIPPED] xe_bo_shrink ==================
[03:09:45] ==================== xe_bo (2 subtests) ====================
[03:09:45] ================== xe_ccs_migrate_kunit  ===================
[03:09:45] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[03:09:45] ==================== xe_bo_evict_kunit  ====================
[03:09:45] =============== [SKIPPED] xe_bo_evict_kunit ================
[03:09:45] ===================== [SKIPPED] xe_bo ======================
[03:09:45] ==================== args (13 subtests) ====================
[03:09:45] [PASSED] count_args_test
[03:09:45] [PASSED] call_args_example
[03:09:45] [PASSED] call_args_test
[03:09:45] [PASSED] drop_first_arg_example
[03:09:45] [PASSED] drop_first_arg_test
[03:09:45] [PASSED] first_arg_example
[03:09:45] [PASSED] first_arg_test
[03:09:45] [PASSED] last_arg_example
[03:09:45] [PASSED] last_arg_test
[03:09:45] [PASSED] pick_arg_example
[03:09:45] [PASSED] if_args_example
[03:09:45] [PASSED] if_args_test
[03:09:45] [PASSED] sep_comma_example
[03:09:45] ====================== [PASSED] args =======================
[03:09:45] =================== xe_pci (3 subtests) ====================
[03:09:45] ==================== check_graphics_ip  ====================
[03:09:45] [PASSED] 12.00 Xe_LP
[03:09:45] [PASSED] 12.10 Xe_LP+
[03:09:45] [PASSED] 12.55 Xe_HPG
[03:09:45] [PASSED] 12.60 Xe_HPC
[03:09:45] [PASSED] 12.70 Xe_LPG
[03:09:45] [PASSED] 12.71 Xe_LPG
[03:09:45] [PASSED] 12.74 Xe_LPG+
[03:09:45] [PASSED] 20.01 Xe2_HPG
[03:09:45] [PASSED] 20.02 Xe2_HPG
[03:09:45] [PASSED] 20.04 Xe2_LPG
[03:09:45] [PASSED] 30.00 Xe3_LPG
[03:09:45] [PASSED] 30.01 Xe3_LPG
[03:09:45] [PASSED] 30.03 Xe3_LPG
[03:09:45] [PASSED] 30.04 Xe3_LPG
[03:09:45] [PASSED] 30.05 Xe3_LPG
[03:09:45] [PASSED] 35.10 Xe3p_LPG
[03:09:45] [PASSED] 35.11 Xe3p_XPC
[03:09:45] ================ [PASSED] check_graphics_ip ================
[03:09:45] ===================== check_media_ip  ======================
[03:09:45] [PASSED] 12.00 Xe_M
[03:09:45] [PASSED] 12.55 Xe_HPM
[03:09:45] [PASSED] 13.00 Xe_LPM+
[03:09:45] [PASSED] 13.01 Xe2_HPM
[03:09:45] [PASSED] 20.00 Xe2_LPM
[03:09:45] [PASSED] 30.00 Xe3_LPM
[03:09:45] [PASSED] 30.02 Xe3_LPM
[03:09:45] [PASSED] 35.00 Xe3p_LPM
[03:09:45] [PASSED] 35.03 Xe3p_HPM
[03:09:45] ================= [PASSED] check_media_ip ==================
[03:09:45] =================== check_platform_desc  ===================
[03:09:45] [PASSED] 0x9A60 (TIGERLAKE)
[03:09:45] [PASSED] 0x9A68 (TIGERLAKE)
[03:09:45] [PASSED] 0x9A70 (TIGERLAKE)
[03:09:45] [PASSED] 0x9A40 (TIGERLAKE)
[03:09:45] [PASSED] 0x9A49 (TIGERLAKE)
[03:09:45] [PASSED] 0x9A59 (TIGERLAKE)
[03:09:45] [PASSED] 0x9A78 (TIGERLAKE)
[03:09:45] [PASSED] 0x9AC0 (TIGERLAKE)
[03:09:45] [PASSED] 0x9AC9 (TIGERLAKE)
[03:09:45] [PASSED] 0x9AD9 (TIGERLAKE)
[03:09:45] [PASSED] 0x9AF8 (TIGERLAKE)
[03:09:45] [PASSED] 0x4C80 (ROCKETLAKE)
[03:09:45] [PASSED] 0x4C8A (ROCKETLAKE)
[03:09:45] [PASSED] 0x4C8B (ROCKETLAKE)
[03:09:45] [PASSED] 0x4C8C (ROCKETLAKE)
[03:09:45] [PASSED] 0x4C90 (ROCKETLAKE)
[03:09:45] [PASSED] 0x4C9A (ROCKETLAKE)
[03:09:45] [PASSED] 0x4680 (ALDERLAKE_S)
[03:09:45] [PASSED] 0x4682 (ALDERLAKE_S)
[03:09:45] [PASSED] 0x4688 (ALDERLAKE_S)
[03:09:45] [PASSED] 0x468A (ALDERLAKE_S)
[03:09:45] [PASSED] 0x468B (ALDERLAKE_S)
[03:09:45] [PASSED] 0x4690 (ALDERLAKE_S)
[03:09:45] [PASSED] 0x4692 (ALDERLAKE_S)
[03:09:45] [PASSED] 0x4693 (ALDERLAKE_S)
[03:09:45] [PASSED] 0x46A0 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46A1 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46A2 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46A3 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46A6 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46A8 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46AA (ALDERLAKE_P)
[03:09:45] [PASSED] 0x462A (ALDERLAKE_P)
[03:09:45] [PASSED] 0x4626 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x4628 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46B0 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46B1 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46B2 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46B3 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46C0 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46C1 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46C2 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46C3 (ALDERLAKE_P)
[03:09:45] [PASSED] 0x46D0 (ALDERLAKE_N)
[03:09:45] [PASSED] 0x46D1 (ALDERLAKE_N)
[03:09:45] [PASSED] 0x46D2 (ALDERLAKE_N)
[03:09:45] [PASSED] 0x46D3 (ALDERLAKE_N)
[03:09:45] [PASSED] 0x46D4 (ALDERLAKE_N)
[03:09:45] [PASSED] 0xA721 (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA7A1 (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA7A9 (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA7AC (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA7AD (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA720 (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA7A0 (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA7A8 (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA7AA (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA7AB (ALDERLAKE_P)
[03:09:45] [PASSED] 0xA780 (ALDERLAKE_S)
[03:09:45] [PASSED] 0xA781 (ALDERLAKE_S)
[03:09:45] [PASSED] 0xA782 (ALDERLAKE_S)
[03:09:45] [PASSED] 0xA783 (ALDERLAKE_S)
[03:09:45] [PASSED] 0xA788 (ALDERLAKE_S)
[03:09:45] [PASSED] 0xA789 (ALDERLAKE_S)
[03:09:45] [PASSED] 0xA78A (ALDERLAKE_S)
[03:09:45] [PASSED] 0xA78B (ALDERLAKE_S)
[03:09:45] [PASSED] 0x4905 (DG1)
[03:09:45] [PASSED] 0x4906 (DG1)
[03:09:45] [PASSED] 0x4907 (DG1)
[03:09:45] [PASSED] 0x4908 (DG1)
[03:09:45] [PASSED] 0x4909 (DG1)
[03:09:45] [PASSED] 0x56C0 (DG2)
[03:09:45] [PASSED] 0x56C2 (DG2)
[03:09:45] [PASSED] 0x56C1 (DG2)
[03:09:45] [PASSED] 0x7D51 (METEORLAKE)
[03:09:45] [PASSED] 0x7DD1 (METEORLAKE)
[03:09:45] [PASSED] 0x7D41 (METEORLAKE)
[03:09:45] [PASSED] 0x7D67 (METEORLAKE)
[03:09:45] [PASSED] 0xB640 (METEORLAKE)
[03:09:45] [PASSED] 0x56A0 (DG2)
[03:09:45] [PASSED] 0x56A1 (DG2)
[03:09:45] [PASSED] 0x56A2 (DG2)
[03:09:45] [PASSED] 0x56BE (DG2)
[03:09:45] [PASSED] 0x56BF (DG2)
[03:09:45] [PASSED] 0x5690 (DG2)
[03:09:45] [PASSED] 0x5691 (DG2)
[03:09:45] [PASSED] 0x5692 (DG2)
[03:09:45] [PASSED] 0x56A5 (DG2)
[03:09:45] [PASSED] 0x56A6 (DG2)
[03:09:45] [PASSED] 0x56B0 (DG2)
[03:09:45] [PASSED] 0x56B1 (DG2)
[03:09:45] [PASSED] 0x56BA (DG2)
[03:09:45] [PASSED] 0x56BB (DG2)
[03:09:45] [PASSED] 0x56BC (DG2)
[03:09:45] [PASSED] 0x56BD (DG2)
[03:09:45] [PASSED] 0x5693 (DG2)
[03:09:45] [PASSED] 0x5694 (DG2)
[03:09:45] [PASSED] 0x5695 (DG2)
[03:09:45] [PASSED] 0x56A3 (DG2)
[03:09:45] [PASSED] 0x56A4 (DG2)
[03:09:45] [PASSED] 0x56B2 (DG2)
[03:09:45] [PASSED] 0x56B3 (DG2)
[03:09:45] [PASSED] 0x5696 (DG2)
[03:09:45] [PASSED] 0x5697 (DG2)
[03:09:45] [PASSED] 0xB69 (PVC)
[03:09:45] [PASSED] 0xB6E (PVC)
[03:09:45] [PASSED] 0xBD4 (PVC)
[03:09:45] [PASSED] 0xBD5 (PVC)
[03:09:45] [PASSED] 0xBD6 (PVC)
[03:09:45] [PASSED] 0xBD7 (PVC)
[03:09:45] [PASSED] 0xBD8 (PVC)
[03:09:45] [PASSED] 0xBD9 (PVC)
[03:09:45] [PASSED] 0xBDA (PVC)
[03:09:45] [PASSED] 0xBDB (PVC)
[03:09:45] [PASSED] 0xBE0 (PVC)
[03:09:45] [PASSED] 0xBE1 (PVC)
[03:09:45] [PASSED] 0xBE5 (PVC)
[03:09:45] [PASSED] 0x7D40 (METEORLAKE)
[03:09:45] [PASSED] 0x7D45 (METEORLAKE)
[03:09:45] [PASSED] 0x7D55 (METEORLAKE)
[03:09:45] [PASSED] 0x7D60 (METEORLAKE)
[03:09:45] [PASSED] 0x7DD5 (METEORLAKE)
[03:09:45] [PASSED] 0x6420 (LUNARLAKE)
[03:09:45] [PASSED] 0x64A0 (LUNARLAKE)
[03:09:45] [PASSED] 0x64B0 (LUNARLAKE)
[03:09:45] [PASSED] 0xE202 (BATTLEMAGE)
[03:09:45] [PASSED] 0xE209 (BATTLEMAGE)
[03:09:45] [PASSED] 0xE20B (BATTLEMAGE)
[03:09:45] [PASSED] 0xE20C (BATTLEMAGE)
[03:09:45] [PASSED] 0xE20D (BATTLEMAGE)
[03:09:45] [PASSED] 0xE210 (BATTLEMAGE)
[03:09:45] [PASSED] 0xE211 (BATTLEMAGE)
[03:09:45] [PASSED] 0xE212 (BATTLEMAGE)
[03:09:45] [PASSED] 0xE216 (BATTLEMAGE)
[03:09:45] [PASSED] 0xE220 (BATTLEMAGE)
[03:09:45] [PASSED] 0xE221 (BATTLEMAGE)
[03:09:45] [PASSED] 0xE222 (BATTLEMAGE)
[03:09:45] [PASSED] 0xE223 (BATTLEMAGE)
[03:09:45] [PASSED] 0xB080 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB081 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB082 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB083 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB084 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB085 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB086 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB087 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB08F (PANTHERLAKE)
[03:09:45] [PASSED] 0xB090 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB0A0 (PANTHERLAKE)
[03:09:45] [PASSED] 0xB0B0 (PANTHERLAKE)
[03:09:45] [PASSED] 0xFD80 (PANTHERLAKE)
[03:09:45] [PASSED] 0xFD81 (PANTHERLAKE)
[03:09:45] [PASSED] 0xD740 (NOVALAKE_S)
[03:09:45] [PASSED] 0xD741 (NOVALAKE_S)
[03:09:45] [PASSED] 0xD742 (NOVALAKE_S)
[03:09:45] [PASSED] 0xD743 (NOVALAKE_S)
[03:09:45] [PASSED] 0xD744 (NOVALAKE_S)
[03:09:45] [PASSED] 0xD745 (NOVALAKE_S)
[03:09:45] [PASSED] 0x674C (CRESCENTISLAND)
[03:09:45] [PASSED] 0xD750 (NOVALAKE_P)
[03:09:45] [PASSED] 0xD751 (NOVALAKE_P)
[03:09:45] [PASSED] 0xD752 (NOVALAKE_P)
[03:09:45] [PASSED] 0xD753 (NOVALAKE_P)
[03:09:45] [PASSED] 0xD754 (NOVALAKE_P)
[03:09:45] [PASSED] 0xD755 (NOVALAKE_P)
[03:09:45] [PASSED] 0xD756 (NOVALAKE_P)
[03:09:45] [PASSED] 0xD757 (NOVALAKE_P)
[03:09:45] [PASSED] 0xD75F (NOVALAKE_P)
[03:09:45] =============== [PASSED] check_platform_desc ===============
[03:09:45] ===================== [PASSED] xe_pci ======================
[03:09:45] =================== xe_rtp (2 subtests) ====================
[03:09:45] =============== xe_rtp_process_to_sr_tests  ================
[03:09:45] [PASSED] coalesce-same-reg
[03:09:45] [PASSED] no-match-no-add
[03:09:45] [PASSED] match-or
[03:09:45] [PASSED] match-or-xfail
[03:09:45] [PASSED] no-match-no-add-multiple-rules
[03:09:45] [PASSED] two-regs-two-entries
[03:09:45] [PASSED] clr-one-set-other
[03:09:45] [PASSED] set-field
[03:09:45] [PASSED] conflict-duplicate
stty: 'standard input': Inappropriate ioctl for device
[03:09:45] [PASSED] conflict-not-disjoint
[03:09:45] [PASSED] conflict-reg-type
[03:09:45] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[03:09:45] ================== xe_rtp_process_tests  ===================
[03:09:45] [PASSED] active1
[03:09:45] [PASSED] active2
[03:09:45] [PASSED] active-inactive
[03:09:45] [PASSED] inactive-active
[03:09:45] [PASSED] inactive-1st_or_active-inactive
[03:09:45] [PASSED] inactive-2nd_or_active-inactive
[03:09:45] [PASSED] inactive-last_or_active-inactive
[03:09:45] [PASSED] inactive-no_or_active-inactive
[03:09:45] ============== [PASSED] xe_rtp_process_tests ===============
[03:09:45] ===================== [PASSED] xe_rtp ======================
[03:09:45] ==================== xe_wa (1 subtest) =====================
[03:09:45] ======================== xe_wa_gt  =========================
[03:09:45] [PASSED] TIGERLAKE B0
[03:09:45] [PASSED] DG1 A0
[03:09:45] [PASSED] DG1 B0
[03:09:45] [PASSED] ALDERLAKE_S A0
[03:09:45] [PASSED] ALDERLAKE_S B0
[03:09:45] [PASSED] ALDERLAKE_S C0
[03:09:45] [PASSED] ALDERLAKE_S D0
[03:09:45] [PASSED] ALDERLAKE_P A0
[03:09:45] [PASSED] ALDERLAKE_P B0
[03:09:45] [PASSED] ALDERLAKE_P C0
[03:09:45] [PASSED] ALDERLAKE_S RPLS D0
[03:09:45] [PASSED] ALDERLAKE_P RPLU E0
[03:09:45] [PASSED] DG2 G10 C0
[03:09:45] [PASSED] DG2 G11 B1
[03:09:45] [PASSED] DG2 G12 A1
[03:09:45] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[03:09:45] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[03:09:45] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[03:09:45] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[03:09:45] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[03:09:45] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[03:09:45] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[03:09:45] ==================== [PASSED] xe_wa_gt =====================
[03:09:45] ====================== [PASSED] xe_wa ======================
[03:09:45] ============================================================
[03:09:45] Testing complete. Ran 597 tests: passed: 579, skipped: 18
[03:09:45] Elapsed time: 36.240s total, 4.194s configuring, 31.429s building, 0.591s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[03:09:45] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[03:09:46] 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
[03:10:11] Starting KUnit Kernel (1/1)...
[03:10:11] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[03:10:11] ============ drm_test_pick_cmdline (2 subtests) ============
[03:10:11] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[03:10:11] =============== drm_test_pick_cmdline_named  ===============
[03:10:11] [PASSED] NTSC
[03:10:11] [PASSED] NTSC-J
[03:10:11] [PASSED] PAL
[03:10:11] [PASSED] PAL-M
[03:10:11] =========== [PASSED] drm_test_pick_cmdline_named ===========
[03:10:11] ============== [PASSED] drm_test_pick_cmdline ==============
[03:10:11] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[03:10:11] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[03:10:11] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[03:10:11] =========== drm_validate_clone_mode (2 subtests) ===========
[03:10:11] ============== drm_test_check_in_clone_mode  ===============
[03:10:11] [PASSED] in_clone_mode
[03:10:11] [PASSED] not_in_clone_mode
[03:10:11] ========== [PASSED] drm_test_check_in_clone_mode ===========
[03:10:11] =============== drm_test_check_valid_clones  ===============
[03:10:11] [PASSED] not_in_clone_mode
[03:10:11] [PASSED] valid_clone
[03:10:11] [PASSED] invalid_clone
[03:10:11] =========== [PASSED] drm_test_check_valid_clones ===========
[03:10:11] ============= [PASSED] drm_validate_clone_mode =============
[03:10:11] ============= drm_validate_modeset (1 subtest) =============
[03:10:11] [PASSED] drm_test_check_connector_changed_modeset
[03:10:11] ============== [PASSED] drm_validate_modeset ===============
[03:10:11] ====== drm_test_bridge_get_current_state (2 subtests) ======
[03:10:11] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[03:10:11] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[03:10:11] ======== [PASSED] drm_test_bridge_get_current_state ========
[03:10:11] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[03:10:11] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[03:10:11] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[03:10:11] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[03:10:11] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[03:10:11] ============== drm_bridge_alloc (2 subtests) ===============
[03:10:11] [PASSED] drm_test_drm_bridge_alloc_basic
[03:10:11] [PASSED] drm_test_drm_bridge_alloc_get_put
[03:10:11] ================ [PASSED] drm_bridge_alloc =================
[03:10:11] ============= drm_cmdline_parser (40 subtests) =============
[03:10:11] [PASSED] drm_test_cmdline_force_d_only
[03:10:11] [PASSED] drm_test_cmdline_force_D_only_dvi
[03:10:11] [PASSED] drm_test_cmdline_force_D_only_hdmi
[03:10:11] [PASSED] drm_test_cmdline_force_D_only_not_digital
[03:10:11] [PASSED] drm_test_cmdline_force_e_only
[03:10:11] [PASSED] drm_test_cmdline_res
[03:10:11] [PASSED] drm_test_cmdline_res_vesa
[03:10:11] [PASSED] drm_test_cmdline_res_vesa_rblank
[03:10:11] [PASSED] drm_test_cmdline_res_rblank
[03:10:11] [PASSED] drm_test_cmdline_res_bpp
[03:10:11] [PASSED] drm_test_cmdline_res_refresh
[03:10:11] [PASSED] drm_test_cmdline_res_bpp_refresh
[03:10:11] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[03:10:11] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[03:10:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[03:10:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[03:10:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[03:10:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[03:10:11] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[03:10:11] [PASSED] drm_test_cmdline_res_margins_force_on
[03:10:11] [PASSED] drm_test_cmdline_res_vesa_margins
[03:10:11] [PASSED] drm_test_cmdline_name
[03:10:11] [PASSED] drm_test_cmdline_name_bpp
[03:10:11] [PASSED] drm_test_cmdline_name_option
[03:10:11] [PASSED] drm_test_cmdline_name_bpp_option
[03:10:11] [PASSED] drm_test_cmdline_rotate_0
[03:10:11] [PASSED] drm_test_cmdline_rotate_90
[03:10:11] [PASSED] drm_test_cmdline_rotate_180
[03:10:11] [PASSED] drm_test_cmdline_rotate_270
[03:10:11] [PASSED] drm_test_cmdline_hmirror
[03:10:11] [PASSED] drm_test_cmdline_vmirror
[03:10:11] [PASSED] drm_test_cmdline_margin_options
[03:10:11] [PASSED] drm_test_cmdline_multiple_options
[03:10:11] [PASSED] drm_test_cmdline_bpp_extra_and_option
[03:10:11] [PASSED] drm_test_cmdline_extra_and_option
[03:10:11] [PASSED] drm_test_cmdline_freestanding_options
[03:10:11] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[03:10:11] [PASSED] drm_test_cmdline_panel_orientation
[03:10:11] ================ drm_test_cmdline_invalid  =================
[03:10:11] [PASSED] margin_only
[03:10:11] [PASSED] interlace_only
[03:10:11] [PASSED] res_missing_x
[03:10:11] [PASSED] res_missing_y
[03:10:11] [PASSED] res_bad_y
[03:10:11] [PASSED] res_missing_y_bpp
[03:10:11] [PASSED] res_bad_bpp
[03:10:11] [PASSED] res_bad_refresh
[03:10:11] [PASSED] res_bpp_refresh_force_on_off
[03:10:11] [PASSED] res_invalid_mode
[03:10:11] [PASSED] res_bpp_wrong_place_mode
[03:10:11] [PASSED] name_bpp_refresh
[03:10:11] [PASSED] name_refresh
[03:10:11] [PASSED] name_refresh_wrong_mode
[03:10:11] [PASSED] name_refresh_invalid_mode
[03:10:11] [PASSED] rotate_multiple
[03:10:11] [PASSED] rotate_invalid_val
[03:10:11] [PASSED] rotate_truncated
[03:10:11] [PASSED] invalid_option
[03:10:11] [PASSED] invalid_tv_option
[03:10:11] [PASSED] truncated_tv_option
[03:10:11] ============ [PASSED] drm_test_cmdline_invalid =============
[03:10:11] =============== drm_test_cmdline_tv_options  ===============
[03:10:11] [PASSED] NTSC
[03:10:11] [PASSED] NTSC_443
[03:10:11] [PASSED] NTSC_J
[03:10:11] [PASSED] PAL
[03:10:11] [PASSED] PAL_M
[03:10:11] [PASSED] PAL_N
[03:10:11] [PASSED] SECAM
[03:10:11] [PASSED] MONO_525
[03:10:11] [PASSED] MONO_625
[03:10:11] =========== [PASSED] drm_test_cmdline_tv_options ===========
[03:10:11] =============== [PASSED] drm_cmdline_parser ================
[03:10:11] ========== drmm_connector_hdmi_init (20 subtests) ==========
[03:10:11] [PASSED] drm_test_connector_hdmi_init_valid
[03:10:11] [PASSED] drm_test_connector_hdmi_init_bpc_8
[03:10:11] [PASSED] drm_test_connector_hdmi_init_bpc_10
[03:10:11] [PASSED] drm_test_connector_hdmi_init_bpc_12
[03:10:11] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[03:10:11] [PASSED] drm_test_connector_hdmi_init_bpc_null
[03:10:11] [PASSED] drm_test_connector_hdmi_init_formats_empty
[03:10:11] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[03:10:11] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[03:10:11] [PASSED] supported_formats=0x9 yuv420_allowed=1
[03:10:11] [PASSED] supported_formats=0x9 yuv420_allowed=0
[03:10:11] [PASSED] supported_formats=0x5 yuv420_allowed=1
[03:10:11] [PASSED] supported_formats=0x5 yuv420_allowed=0
[03:10:11] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[03:10:11] [PASSED] drm_test_connector_hdmi_init_null_ddc
[03:10:11] [PASSED] drm_test_connector_hdmi_init_null_product
[03:10:11] [PASSED] drm_test_connector_hdmi_init_null_vendor
[03:10:11] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[03:10:11] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[03:10:11] [PASSED] drm_test_connector_hdmi_init_product_valid
[03:10:11] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[03:10:11] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[03:10:11] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[03:10:11] ========= drm_test_connector_hdmi_init_type_valid  =========
[03:10:11] [PASSED] HDMI-A
[03:10:11] [PASSED] HDMI-B
[03:10:11] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[03:10:11] ======== drm_test_connector_hdmi_init_type_invalid  ========
[03:10:11] [PASSED] Unknown
[03:10:11] [PASSED] VGA
[03:10:11] [PASSED] DVI-I
[03:10:11] [PASSED] DVI-D
[03:10:11] [PASSED] DVI-A
[03:10:11] [PASSED] Composite
[03:10:11] [PASSED] SVIDEO
[03:10:11] [PASSED] LVDS
[03:10:11] [PASSED] Component
[03:10:11] [PASSED] DIN
[03:10:11] [PASSED] DP
[03:10:11] [PASSED] TV
[03:10:11] [PASSED] eDP
[03:10:11] [PASSED] Virtual
[03:10:11] [PASSED] DSI
[03:10:11] [PASSED] DPI
[03:10:11] [PASSED] Writeback
[03:10:11] [PASSED] SPI
[03:10:11] [PASSED] USB
[03:10:11] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[03:10:11] ============ [PASSED] drmm_connector_hdmi_init =============
[03:10:11] ============= drmm_connector_init (3 subtests) =============
[03:10:11] [PASSED] drm_test_drmm_connector_init
[03:10:11] [PASSED] drm_test_drmm_connector_init_null_ddc
[03:10:11] ========= drm_test_drmm_connector_init_type_valid  =========
[03:10:11] [PASSED] Unknown
[03:10:11] [PASSED] VGA
[03:10:11] [PASSED] DVI-I
[03:10:11] [PASSED] DVI-D
[03:10:11] [PASSED] DVI-A
[03:10:11] [PASSED] Composite
[03:10:11] [PASSED] SVIDEO
[03:10:11] [PASSED] LVDS
[03:10:11] [PASSED] Component
[03:10:11] [PASSED] DIN
[03:10:11] [PASSED] DP
[03:10:11] [PASSED] HDMI-A
[03:10:11] [PASSED] HDMI-B
[03:10:11] [PASSED] TV
[03:10:11] [PASSED] eDP
[03:10:11] [PASSED] Virtual
[03:10:11] [PASSED] DSI
[03:10:11] [PASSED] DPI
[03:10:11] [PASSED] Writeback
[03:10:11] [PASSED] SPI
[03:10:11] [PASSED] USB
[03:10:11] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[03:10:11] =============== [PASSED] drmm_connector_init ===============
[03:10:11] ========= drm_connector_dynamic_init (6 subtests) ==========
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_init
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_init_properties
[03:10:11] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[03:10:11] [PASSED] Unknown
[03:10:11] [PASSED] VGA
[03:10:11] [PASSED] DVI-I
[03:10:11] [PASSED] DVI-D
[03:10:11] [PASSED] DVI-A
[03:10:11] [PASSED] Composite
[03:10:11] [PASSED] SVIDEO
[03:10:11] [PASSED] LVDS
[03:10:11] [PASSED] Component
[03:10:11] [PASSED] DIN
[03:10:11] [PASSED] DP
[03:10:11] [PASSED] HDMI-A
[03:10:11] [PASSED] HDMI-B
[03:10:11] [PASSED] TV
[03:10:11] [PASSED] eDP
[03:10:11] [PASSED] Virtual
[03:10:11] [PASSED] DSI
[03:10:11] [PASSED] DPI
[03:10:11] [PASSED] Writeback
[03:10:11] [PASSED] SPI
[03:10:11] [PASSED] USB
[03:10:11] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[03:10:11] ======== drm_test_drm_connector_dynamic_init_name  =========
[03:10:11] [PASSED] Unknown
[03:10:11] [PASSED] VGA
[03:10:11] [PASSED] DVI-I
[03:10:11] [PASSED] DVI-D
[03:10:11] [PASSED] DVI-A
[03:10:11] [PASSED] Composite
[03:10:11] [PASSED] SVIDEO
[03:10:11] [PASSED] LVDS
[03:10:11] [PASSED] Component
[03:10:11] [PASSED] DIN
[03:10:11] [PASSED] DP
[03:10:11] [PASSED] HDMI-A
[03:10:11] [PASSED] HDMI-B
[03:10:11] [PASSED] TV
[03:10:11] [PASSED] eDP
[03:10:11] [PASSED] Virtual
[03:10:11] [PASSED] DSI
[03:10:11] [PASSED] DPI
[03:10:11] [PASSED] Writeback
[03:10:11] [PASSED] SPI
[03:10:11] [PASSED] USB
[03:10:11] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[03:10:11] =========== [PASSED] drm_connector_dynamic_init ============
[03:10:11] ==== drm_connector_dynamic_register_early (4 subtests) =====
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[03:10:11] ====== [PASSED] drm_connector_dynamic_register_early =======
[03:10:11] ======= drm_connector_dynamic_register (7 subtests) ========
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[03:10:11] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[03:10:11] ========= [PASSED] drm_connector_dynamic_register ==========
[03:10:11] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[03:10:11] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[03:10:11] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[03:10:11] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[03:10:11] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[03:10:11] ========== drm_test_get_tv_mode_from_name_valid  ===========
[03:10:11] [PASSED] NTSC
[03:10:11] [PASSED] NTSC-443
[03:10:11] [PASSED] NTSC-J
[03:10:11] [PASSED] PAL
[03:10:11] [PASSED] PAL-M
[03:10:11] [PASSED] PAL-N
[03:10:11] [PASSED] SECAM
[03:10:11] [PASSED] Mono
[03:10:11] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[03:10:11] [PASSED] drm_test_get_tv_mode_from_name_truncated
[03:10:11] ============ [PASSED] drm_get_tv_mode_from_name ============
[03:10:11] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[03:10:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[03:10:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[03:10:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[03:10:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[03:10:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[03:10:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[03:10:11] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[03:10:11] [PASSED] VIC 96
[03:10:11] [PASSED] VIC 97
[03:10:11] [PASSED] VIC 101
[03:10:11] [PASSED] VIC 102
[03:10:11] [PASSED] VIC 106
[03:10:11] [PASSED] VIC 107
[03:10:11] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[03:10:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[03:10:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[03:10:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[03:10:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[03:10:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[03:10:11] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[03:10:11] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[03:10:11] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[03:10:11] [PASSED] Automatic
[03:10:11] [PASSED] Full
[03:10:11] [PASSED] Limited 16:235
[03:10:11] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[03:10:11] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[03:10:11] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[03:10:11] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[03:10:11] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[03:10:11] [PASSED] RGB
[03:10:11] [PASSED] YUV 4:2:0
[03:10:11] [PASSED] YUV 4:2:2
[03:10:11] [PASSED] YUV 4:4:4
[03:10:11] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[03:10:11] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[03:10:11] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[03:10:11] ============= drm_damage_helper (21 subtests) ==============
[03:10:11] [PASSED] drm_test_damage_iter_no_damage
[03:10:11] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[03:10:11] [PASSED] drm_test_damage_iter_no_damage_src_moved
[03:10:11] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[03:10:11] [PASSED] drm_test_damage_iter_no_damage_not_visible
[03:10:11] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[03:10:11] [PASSED] drm_test_damage_iter_no_damage_no_fb
[03:10:11] [PASSED] drm_test_damage_iter_simple_damage
[03:10:11] [PASSED] drm_test_damage_iter_single_damage
[03:10:11] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[03:10:11] [PASSED] drm_test_damage_iter_single_damage_outside_src
[03:10:11] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[03:10:11] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[03:10:11] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[03:10:11] [PASSED] drm_test_damage_iter_single_damage_src_moved
[03:10:11] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[03:10:11] [PASSED] drm_test_damage_iter_damage
[03:10:11] [PASSED] drm_test_damage_iter_damage_one_intersect
[03:10:11] [PASSED] drm_test_damage_iter_damage_one_outside
[03:10:11] [PASSED] drm_test_damage_iter_damage_src_moved
[03:10:11] [PASSED] drm_test_damage_iter_damage_not_visible
[03:10:11] ================ [PASSED] drm_damage_helper ================
[03:10:11] ============== drm_dp_mst_helper (3 subtests) ==============
[03:10:11] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[03:10:11] [PASSED] Clock 154000 BPP 30 DSC disabled
[03:10:11] [PASSED] Clock 234000 BPP 30 DSC disabled
[03:10:11] [PASSED] Clock 297000 BPP 24 DSC disabled
[03:10:11] [PASSED] Clock 332880 BPP 24 DSC enabled
[03:10:11] [PASSED] Clock 324540 BPP 24 DSC enabled
[03:10:11] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[03:10:11] ============== drm_test_dp_mst_calc_pbn_div  ===============
[03:10:11] [PASSED] Link rate 2000000 lane count 4
[03:10:11] [PASSED] Link rate 2000000 lane count 2
[03:10:11] [PASSED] Link rate 2000000 lane count 1
[03:10:11] [PASSED] Link rate 1350000 lane count 4
[03:10:11] [PASSED] Link rate 1350000 lane count 2
[03:10:11] [PASSED] Link rate 1350000 lane count 1
[03:10:11] [PASSED] Link rate 1000000 lane count 4
[03:10:11] [PASSED] Link rate 1000000 lane count 2
[03:10:11] [PASSED] Link rate 1000000 lane count 1
[03:10:11] [PASSED] Link rate 810000 lane count 4
[03:10:11] [PASSED] Link rate 810000 lane count 2
[03:10:11] [PASSED] Link rate 810000 lane count 1
[03:10:11] [PASSED] Link rate 540000 lane count 4
[03:10:11] [PASSED] Link rate 540000 lane count 2
[03:10:11] [PASSED] Link rate 540000 lane count 1
[03:10:11] [PASSED] Link rate 270000 lane count 4
[03:10:11] [PASSED] Link rate 270000 lane count 2
[03:10:11] [PASSED] Link rate 270000 lane count 1
[03:10:11] [PASSED] Link rate 162000 lane count 4
[03:10:11] [PASSED] Link rate 162000 lane count 2
[03:10:11] [PASSED] Link rate 162000 lane count 1
[03:10:11] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[03:10:11] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[03:10:11] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[03:10:11] [PASSED] DP_POWER_UP_PHY with port number
[03:10:11] [PASSED] DP_POWER_DOWN_PHY with port number
[03:10:11] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[03:10:11] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[03:10:11] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[03:10:11] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[03:10:11] [PASSED] DP_QUERY_PAYLOAD with port number
[03:10:11] [PASSED] DP_QUERY_PAYLOAD with VCPI
[03:10:11] [PASSED] DP_REMOTE_DPCD_READ with port number
[03:10:11] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[03:10:11] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[03:10:11] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[03:10:11] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[03:10:11] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[03:10:11] [PASSED] DP_REMOTE_I2C_READ with port number
[03:10:11] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[03:10:11] [PASSED] DP_REMOTE_I2C_READ with transactions array
[03:10:11] [PASSED] DP_REMOTE_I2C_WRITE with port number
[03:10:11] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[03:10:11] [PASSED] DP_REMOTE_I2C_WRITE with data array
[03:10:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[03:10:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[03:10:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[03:10:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[03:10:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[03:10:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[03:10:11] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[03:10:11] ================ [PASSED] drm_dp_mst_helper ================
[03:10:11] ================== drm_exec (7 subtests) ===================
[03:10:11] [PASSED] sanitycheck
[03:10:11] [PASSED] test_lock
[03:10:11] [PASSED] test_lock_unlock
[03:10:11] [PASSED] test_duplicates
[03:10:11] [PASSED] test_prepare
[03:10:11] [PASSED] test_prepare_array
[03:10:11] [PASSED] test_multiple_loops
[03:10:11] ==================== [PASSED] drm_exec =====================
[03:10:11] =========== drm_format_helper_test (17 subtests) ===========
[03:10:11] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[03:10:11] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[03:10:11] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[03:10:11] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[03:10:11] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[03:10:11] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[03:10:11] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[03:10:11] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[03:10:11] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[03:10:11] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[03:10:11] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[03:10:11] ============== drm_test_fb_xrgb8888_to_mono  ===============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[03:10:11] ==================== drm_test_fb_swab  =====================
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ================ [PASSED] drm_test_fb_swab =================
[03:10:11] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[03:10:11] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[03:10:11] [PASSED] single_pixel_source_buffer
[03:10:11] [PASSED] single_pixel_clip_rectangle
[03:10:11] [PASSED] well_known_colors
[03:10:11] [PASSED] destination_pitch
[03:10:11] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[03:10:11] ================= drm_test_fb_clip_offset  =================
[03:10:11] [PASSED] pass through
[03:10:11] [PASSED] horizontal offset
[03:10:11] [PASSED] vertical offset
[03:10:11] [PASSED] horizontal and vertical offset
[03:10:11] [PASSED] horizontal offset (custom pitch)
[03:10:11] [PASSED] vertical offset (custom pitch)
[03:10:11] [PASSED] horizontal and vertical offset (custom pitch)
[03:10:11] ============= [PASSED] drm_test_fb_clip_offset =============
[03:10:11] =================== drm_test_fb_memcpy  ====================
[03:10:11] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[03:10:11] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[03:10:11] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[03:10:11] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[03:10:11] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[03:10:11] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[03:10:11] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[03:10:11] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[03:10:11] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[03:10:11] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[03:10:11] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[03:10:11] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[03:10:11] =============== [PASSED] drm_test_fb_memcpy ================
[03:10:11] ============= [PASSED] drm_format_helper_test ==============
[03:10:11] ================= drm_format (18 subtests) =================
[03:10:11] [PASSED] drm_test_format_block_width_invalid
[03:10:11] [PASSED] drm_test_format_block_width_one_plane
[03:10:11] [PASSED] drm_test_format_block_width_two_plane
[03:10:11] [PASSED] drm_test_format_block_width_three_plane
[03:10:11] [PASSED] drm_test_format_block_width_tiled
[03:10:11] [PASSED] drm_test_format_block_height_invalid
[03:10:11] [PASSED] drm_test_format_block_height_one_plane
[03:10:11] [PASSED] drm_test_format_block_height_two_plane
[03:10:11] [PASSED] drm_test_format_block_height_three_plane
[03:10:11] [PASSED] drm_test_format_block_height_tiled
[03:10:11] [PASSED] drm_test_format_min_pitch_invalid
[03:10:11] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[03:10:11] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[03:10:11] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[03:10:11] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[03:10:11] [PASSED] drm_test_format_min_pitch_two_plane
[03:10:11] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[03:10:11] [PASSED] drm_test_format_min_pitch_tiled
[03:10:11] =================== [PASSED] drm_format ====================
[03:10:11] ============== drm_framebuffer (10 subtests) ===============
[03:10:11] ========== drm_test_framebuffer_check_src_coords  ==========
[03:10:11] [PASSED] Success: source fits into fb
[03:10:11] [PASSED] Fail: overflowing fb with x-axis coordinate
[03:10:11] [PASSED] Fail: overflowing fb with y-axis coordinate
[03:10:11] [PASSED] Fail: overflowing fb with source width
[03:10:11] [PASSED] Fail: overflowing fb with source height
[03:10:11] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[03:10:11] [PASSED] drm_test_framebuffer_cleanup
[03:10:11] =============== drm_test_framebuffer_create  ===============
[03:10:11] [PASSED] ABGR8888 normal sizes
[03:10:11] [PASSED] ABGR8888 max sizes
[03:10:11] [PASSED] ABGR8888 pitch greater than min required
[03:10:11] [PASSED] ABGR8888 pitch less than min required
[03:10:11] [PASSED] ABGR8888 Invalid width
[03:10:11] [PASSED] ABGR8888 Invalid buffer handle
[03:10:11] [PASSED] No pixel format
[03:10:11] [PASSED] ABGR8888 Width 0
[03:10:11] [PASSED] ABGR8888 Height 0
[03:10:11] [PASSED] ABGR8888 Out of bound height * pitch combination
[03:10:11] [PASSED] ABGR8888 Large buffer offset
[03:10:11] [PASSED] ABGR8888 Buffer offset for inexistent plane
[03:10:11] [PASSED] ABGR8888 Invalid flag
[03:10:11] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[03:10:11] [PASSED] ABGR8888 Valid buffer modifier
[03:10:11] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[03:10:11] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[03:10:11] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[03:10:11] [PASSED] NV12 Normal sizes
[03:10:11] [PASSED] NV12 Max sizes
[03:10:11] [PASSED] NV12 Invalid pitch
[03:10:11] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[03:10:11] [PASSED] NV12 different  modifier per-plane
[03:10:11] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[03:10:11] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[03:10:11] [PASSED] NV12 Modifier for inexistent plane
[03:10:11] [PASSED] NV12 Handle for inexistent plane
[03:10:11] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[03:10:11] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[03:10:11] [PASSED] YVU420 Normal sizes
[03:10:11] [PASSED] YVU420 Max sizes
[03:10:11] [PASSED] YVU420 Invalid pitch
[03:10:11] [PASSED] YVU420 Different pitches
[03:10:11] [PASSED] YVU420 Different buffer offsets/pitches
[03:10:11] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[03:10:11] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[03:10:11] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[03:10:11] [PASSED] YVU420 Valid modifier
[03:10:11] [PASSED] YVU420 Different modifiers per plane
[03:10:11] [PASSED] YVU420 Modifier for inexistent plane
[03:10:11] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[03:10:11] [PASSED] X0L2 Normal sizes
[03:10:11] [PASSED] X0L2 Max sizes
[03:10:11] [PASSED] X0L2 Invalid pitch
[03:10:11] [PASSED] X0L2 Pitch greater than minimum required
[03:10:11] [PASSED] X0L2 Handle for inexistent plane
[03:10:11] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[03:10:11] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[03:10:11] [PASSED] X0L2 Valid modifier
[03:10:11] [PASSED] X0L2 Modifier for inexistent plane
[03:10:11] =========== [PASSED] drm_test_framebuffer_create ===========
[03:10:11] [PASSED] drm_test_framebuffer_free
[03:10:11] [PASSED] drm_test_framebuffer_init
[03:10:11] [PASSED] drm_test_framebuffer_init_bad_format
[03:10:11] [PASSED] drm_test_framebuffer_init_dev_mismatch
[03:10:11] [PASSED] drm_test_framebuffer_lookup
[03:10:11] [PASSED] drm_test_framebuffer_lookup_inexistent
[03:10:11] [PASSED] drm_test_framebuffer_modifiers_not_supported
[03:10:11] ================= [PASSED] drm_framebuffer =================
[03:10:11] ================ drm_gem_shmem (8 subtests) ================
[03:10:11] [PASSED] drm_gem_shmem_test_obj_create
[03:10:11] [PASSED] drm_gem_shmem_test_obj_create_private
[03:10:11] [PASSED] drm_gem_shmem_test_pin_pages
[03:10:11] [PASSED] drm_gem_shmem_test_vmap
[03:10:11] [PASSED] drm_gem_shmem_test_get_sg_table
[03:10:11] [PASSED] drm_gem_shmem_test_get_pages_sgt
[03:10:11] [PASSED] drm_gem_shmem_test_madvise
[03:10:11] [PASSED] drm_gem_shmem_test_purge
[03:10:11] ================== [PASSED] drm_gem_shmem ==================
[03:10:11] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[03:10:11] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[03:10:11] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[03:10:11] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[03:10:11] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[03:10:11] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[03:10:11] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[03:10:11] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[03:10:11] [PASSED] Automatic
[03:10:11] [PASSED] Full
[03:10:11] [PASSED] Limited 16:235
[03:10:11] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[03:10:11] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[03:10:11] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[03:10:11] [PASSED] drm_test_check_disable_connector
[03:10:11] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[03:10:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[03:10:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[03:10:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[03:10:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[03:10:11] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[03:10:11] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[03:10:11] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[03:10:11] [PASSED] drm_test_check_output_bpc_dvi
[03:10:11] [PASSED] drm_test_check_output_bpc_format_vic_1
[03:10:11] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[03:10:11] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[03:10:11] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[03:10:11] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[03:10:11] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[03:10:11] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[03:10:11] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[03:10:11] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[03:10:11] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[03:10:11] [PASSED] drm_test_check_broadcast_rgb_value
[03:10:11] [PASSED] drm_test_check_bpc_8_value
[03:10:11] [PASSED] drm_test_check_bpc_10_value
[03:10:11] [PASSED] drm_test_check_bpc_12_value
[03:10:11] [PASSED] drm_test_check_format_value
[03:10:11] [PASSED] drm_test_check_tmds_char_value
[03:10:11] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[03:10:11] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[03:10:11] [PASSED] drm_test_check_mode_valid
[03:10:11] [PASSED] drm_test_check_mode_valid_reject
[03:10:11] [PASSED] drm_test_check_mode_valid_reject_rate
[03:10:11] [PASSED] drm_test_check_mode_valid_reject_max_clock
[03:10:11] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[03:10:11] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[03:10:11] [PASSED] drm_test_check_infoframes
[03:10:11] [PASSED] drm_test_check_reject_avi_infoframe
[03:10:11] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[03:10:11] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[03:10:11] [PASSED] drm_test_check_reject_audio_infoframe
[03:10:11] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[03:10:11] ================= drm_managed (2 subtests) =================
[03:10:11] [PASSED] drm_test_managed_release_action
[03:10:11] [PASSED] drm_test_managed_run_action
[03:10:11] =================== [PASSED] drm_managed ===================
[03:10:11] =================== drm_mm (6 subtests) ====================
[03:10:11] [PASSED] drm_test_mm_init
[03:10:11] [PASSED] drm_test_mm_debug
[03:10:11] [PASSED] drm_test_mm_align32
[03:10:11] [PASSED] drm_test_mm_align64
[03:10:11] [PASSED] drm_test_mm_lowest
[03:10:11] [PASSED] drm_test_mm_highest
[03:10:11] ===================== [PASSED] drm_mm ======================
[03:10:11] ============= drm_modes_analog_tv (5 subtests) =============
[03:10:11] [PASSED] drm_test_modes_analog_tv_mono_576i
[03:10:11] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[03:10:11] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[03:10:11] [PASSED] drm_test_modes_analog_tv_pal_576i
[03:10:11] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[03:10:11] =============== [PASSED] drm_modes_analog_tv ===============
[03:10:11] ============== drm_plane_helper (2 subtests) ===============
[03:10:11] =============== drm_test_check_plane_state  ================
[03:10:11] [PASSED] clipping_simple
[03:10:11] [PASSED] clipping_rotate_reflect
[03:10:11] [PASSED] positioning_simple
[03:10:11] [PASSED] upscaling
[03:10:11] [PASSED] downscaling
[03:10:11] [PASSED] rounding1
[03:10:11] [PASSED] rounding2
[03:10:11] [PASSED] rounding3
[03:10:11] [PASSED] rounding4
[03:10:11] =========== [PASSED] drm_test_check_plane_state ============
[03:10:11] =========== drm_test_check_invalid_plane_state  ============
[03:10:11] [PASSED] positioning_invalid
[03:10:11] [PASSED] upscaling_invalid
[03:10:11] [PASSED] downscaling_invalid
[03:10:11] ======= [PASSED] drm_test_check_invalid_plane_state ========
[03:10:11] ================ [PASSED] drm_plane_helper =================
[03:10:11] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[03:10:11] ====== drm_test_connector_helper_tv_get_modes_check  =======
[03:10:11] [PASSED] None
[03:10:11] [PASSED] PAL
[03:10:11] [PASSED] NTSC
[03:10:11] [PASSED] Both, NTSC Default
[03:10:11] [PASSED] Both, PAL Default
[03:10:11] [PASSED] Both, NTSC Default, with PAL on command-line
[03:10:11] [PASSED] Both, PAL Default, with NTSC on command-line
[03:10:11] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[03:10:11] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[03:10:11] ================== drm_rect (9 subtests) ===================
[03:10:11] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[03:10:11] [PASSED] drm_test_rect_clip_scaled_not_clipped
[03:10:11] [PASSED] drm_test_rect_clip_scaled_clipped
[03:10:11] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[03:10:11] ================= drm_test_rect_intersect  =================
[03:10:11] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[03:10:11] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[03:10:11] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[03:10:11] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[03:10:11] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[03:10:11] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[03:10:11] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[03:10:11] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[03:10:11] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[03:10:11] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[03:10:11] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[03:10:11] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[03:10:11] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[03:10:11] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[03:10:11] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[03:10:11] ============= [PASSED] drm_test_rect_intersect =============
[03:10:11] ================ drm_test_rect_calc_hscale  ================
[03:10:11] [PASSED] normal use
[03:10:11] [PASSED] out of max range
[03:10:11] [PASSED] out of min range
[03:10:11] [PASSED] zero dst
[03:10:11] [PASSED] negative src
[03:10:11] [PASSED] negative dst
[03:10:11] ============ [PASSED] drm_test_rect_calc_hscale ============
[03:10:11] ================ drm_test_rect_calc_vscale  ================
[03:10:11] [PASSED] normal use
[03:10:11] [PASSED] out of max range
[03:10:11] [PASSED] out of min range
[03:10:11] [PASSED] zero dst
[03:10:11] [PASSED] negative src
[03:10:11] [PASSED] negative dst
stty: 'standard input': Inappropriate ioctl for device
[03:10:11] ============ [PASSED] drm_test_rect_calc_vscale ============
[03:10:11] ================== drm_test_rect_rotate  ===================
[03:10:11] [PASSED] reflect-x
[03:10:11] [PASSED] reflect-y
[03:10:11] [PASSED] rotate-0
[03:10:11] [PASSED] rotate-90
[03:10:11] [PASSED] rotate-180
[03:10:11] [PASSED] rotate-270
[03:10:11] ============== [PASSED] drm_test_rect_rotate ===============
[03:10:11] ================ drm_test_rect_rotate_inv  =================
[03:10:11] [PASSED] reflect-x
[03:10:11] [PASSED] reflect-y
[03:10:11] [PASSED] rotate-0
[03:10:11] [PASSED] rotate-90
[03:10:11] [PASSED] rotate-180
[03:10:11] [PASSED] rotate-270
[03:10:11] ============ [PASSED] drm_test_rect_rotate_inv =============
[03:10:11] ==================== [PASSED] drm_rect =====================
[03:10:11] ============ drm_sysfb_modeset_test (1 subtest) ============
[03:10:11] ============ drm_test_sysfb_build_fourcc_list  =============
[03:10:11] [PASSED] no native formats
[03:10:11] [PASSED] XRGB8888 as native format
[03:10:11] [PASSED] remove duplicates
[03:10:11] [PASSED] convert alpha formats
[03:10:11] [PASSED] random formats
[03:10:11] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[03:10:11] ============= [PASSED] drm_sysfb_modeset_test ==============
[03:10:11] ================== drm_fixp (2 subtests) ===================
[03:10:11] [PASSED] drm_test_int2fixp
[03:10:11] [PASSED] drm_test_sm2fixp
[03:10:11] ==================== [PASSED] drm_fixp =====================
[03:10:11] ============================================================
[03:10:11] Testing complete. Ran 621 tests: passed: 621
[03:10:11] Elapsed time: 26.546s total, 1.654s configuring, 24.671s building, 0.180s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[03:10:11] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[03:10: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
[03:10:22] Starting KUnit Kernel (1/1)...
[03:10:22] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[03:10:23] ================= ttm_device (5 subtests) ==================
[03:10:23] [PASSED] ttm_device_init_basic
[03:10:23] [PASSED] ttm_device_init_multiple
[03:10:23] [PASSED] ttm_device_fini_basic
[03:10:23] [PASSED] ttm_device_init_no_vma_man
[03:10:23] ================== ttm_device_init_pools  ==================
[03:10:23] [PASSED] No DMA allocations, no DMA32 required
[03:10:23] [PASSED] DMA allocations, DMA32 required
[03:10:23] [PASSED] No DMA allocations, DMA32 required
[03:10:23] [PASSED] DMA allocations, no DMA32 required
[03:10:23] ============== [PASSED] ttm_device_init_pools ==============
[03:10:23] =================== [PASSED] ttm_device ====================
[03:10:23] ================== ttm_pool (8 subtests) ===================
[03:10:23] ================== ttm_pool_alloc_basic  ===================
[03:10:23] [PASSED] One page
[03:10:23] [PASSED] More than one page
[03:10:23] [PASSED] Above the allocation limit
[03:10:23] [PASSED] One page, with coherent DMA mappings enabled
[03:10:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[03:10:23] ============== [PASSED] ttm_pool_alloc_basic ===============
[03:10:23] ============== ttm_pool_alloc_basic_dma_addr  ==============
[03:10:23] [PASSED] One page
[03:10:23] [PASSED] More than one page
[03:10:23] [PASSED] Above the allocation limit
[03:10:23] [PASSED] One page, with coherent DMA mappings enabled
[03:10:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[03:10:23] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[03:10:23] [PASSED] ttm_pool_alloc_order_caching_match
[03:10:23] [PASSED] ttm_pool_alloc_caching_mismatch
[03:10:23] [PASSED] ttm_pool_alloc_order_mismatch
[03:10:23] [PASSED] ttm_pool_free_dma_alloc
[03:10:23] [PASSED] ttm_pool_free_no_dma_alloc
[03:10:23] [PASSED] ttm_pool_fini_basic
[03:10:23] ==================== [PASSED] ttm_pool =====================
[03:10:23] ================ ttm_resource (8 subtests) =================
[03:10:23] ================= ttm_resource_init_basic  =================
[03:10:23] [PASSED] Init resource in TTM_PL_SYSTEM
[03:10:23] [PASSED] Init resource in TTM_PL_VRAM
[03:10:23] [PASSED] Init resource in a private placement
[03:10:23] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[03:10:23] ============= [PASSED] ttm_resource_init_basic =============
[03:10:23] [PASSED] ttm_resource_init_pinned
[03:10:23] [PASSED] ttm_resource_fini_basic
[03:10:23] [PASSED] ttm_resource_manager_init_basic
[03:10:23] [PASSED] ttm_resource_manager_usage_basic
[03:10:23] [PASSED] ttm_resource_manager_set_used_basic
[03:10:23] [PASSED] ttm_sys_man_alloc_basic
[03:10:23] [PASSED] ttm_sys_man_free_basic
[03:10:23] ================== [PASSED] ttm_resource ===================
[03:10:23] =================== ttm_tt (15 subtests) ===================
[03:10:23] ==================== ttm_tt_init_basic  ====================
[03:10:23] [PASSED] Page-aligned size
[03:10:23] [PASSED] Extra pages requested
[03:10:23] ================ [PASSED] ttm_tt_init_basic ================
[03:10:23] [PASSED] ttm_tt_init_misaligned
[03:10:23] [PASSED] ttm_tt_fini_basic
[03:10:23] [PASSED] ttm_tt_fini_sg
[03:10:23] [PASSED] ttm_tt_fini_shmem
[03:10:23] [PASSED] ttm_tt_create_basic
[03:10:23] [PASSED] ttm_tt_create_invalid_bo_type
[03:10:23] [PASSED] ttm_tt_create_ttm_exists
[03:10:23] [PASSED] ttm_tt_create_failed
[03:10:23] [PASSED] ttm_tt_destroy_basic
[03:10:23] [PASSED] ttm_tt_populate_null_ttm
[03:10:23] [PASSED] ttm_tt_populate_populated_ttm
[03:10:23] [PASSED] ttm_tt_unpopulate_basic
[03:10:23] [PASSED] ttm_tt_unpopulate_empty_ttm
[03:10:23] [PASSED] ttm_tt_swapin_basic
[03:10:23] ===================== [PASSED] ttm_tt ======================
[03:10:23] =================== ttm_bo (14 subtests) ===================
[03:10:23] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[03:10:23] [PASSED] Cannot be interrupted and sleeps
[03:10:23] [PASSED] Cannot be interrupted, locks straight away
[03:10:23] [PASSED] Can be interrupted, sleeps
[03:10:23] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[03:10:23] [PASSED] ttm_bo_reserve_locked_no_sleep
[03:10:23] [PASSED] ttm_bo_reserve_no_wait_ticket
[03:10:23] [PASSED] ttm_bo_reserve_double_resv
[03:10:23] [PASSED] ttm_bo_reserve_interrupted
[03:10:23] [PASSED] ttm_bo_reserve_deadlock
[03:10:23] [PASSED] ttm_bo_unreserve_basic
[03:10:23] [PASSED] ttm_bo_unreserve_pinned
[03:10:23] [PASSED] ttm_bo_unreserve_bulk
[03:10:23] [PASSED] ttm_bo_fini_basic
[03:10:23] [PASSED] ttm_bo_fini_shared_resv
[03:10:23] [PASSED] ttm_bo_pin_basic
[03:10:23] [PASSED] ttm_bo_pin_unpin_resource
[03:10:23] [PASSED] ttm_bo_multiple_pin_one_unpin
[03:10:23] ===================== [PASSED] ttm_bo ======================
[03:10:23] ============== ttm_bo_validate (22 subtests) ===============
[03:10:23] ============== ttm_bo_init_reserved_sys_man  ===============
[03:10:23] [PASSED] Buffer object for userspace
[03:10:23] [PASSED] Kernel buffer object
[03:10:23] [PASSED] Shared buffer object
[03:10:23] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[03:10:23] ============== ttm_bo_init_reserved_mock_man  ==============
[03:10:23] [PASSED] Buffer object for userspace
[03:10:23] [PASSED] Kernel buffer object
[03:10:23] [PASSED] Shared buffer object
[03:10:23] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[03:10:23] [PASSED] ttm_bo_init_reserved_resv
[03:10:23] ================== ttm_bo_validate_basic  ==================
[03:10:23] [PASSED] Buffer object for userspace
[03:10:23] [PASSED] Kernel buffer object
[03:10:23] [PASSED] Shared buffer object
[03:10:23] ============== [PASSED] ttm_bo_validate_basic ==============
[03:10:23] [PASSED] ttm_bo_validate_invalid_placement
[03:10:23] ============= ttm_bo_validate_same_placement  ==============
[03:10:23] [PASSED] System manager
[03:10:23] [PASSED] VRAM manager
[03:10:23] ========= [PASSED] ttm_bo_validate_same_placement ==========
[03:10:23] [PASSED] ttm_bo_validate_failed_alloc
[03:10:23] [PASSED] ttm_bo_validate_pinned
[03:10:23] [PASSED] ttm_bo_validate_busy_placement
[03:10:23] ================ ttm_bo_validate_multihop  =================
[03:10:23] [PASSED] Buffer object for userspace
[03:10:23] [PASSED] Kernel buffer object
[03:10:23] [PASSED] Shared buffer object
[03:10:23] ============ [PASSED] ttm_bo_validate_multihop =============
[03:10:23] ========== ttm_bo_validate_no_placement_signaled  ==========
[03:10:23] [PASSED] Buffer object in system domain, no page vector
[03:10:23] [PASSED] Buffer object in system domain with an existing page vector
[03:10:23] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[03:10:23] ======== ttm_bo_validate_no_placement_not_signaled  ========
[03:10:23] [PASSED] Buffer object for userspace
[03:10:23] [PASSED] Kernel buffer object
[03:10:23] [PASSED] Shared buffer object
[03:10:23] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[03:10:23] [PASSED] ttm_bo_validate_move_fence_signaled
[03:10:23] ========= ttm_bo_validate_move_fence_not_signaled  =========
[03:10:23] [PASSED] Waits for GPU
[03:10:23] [PASSED] Tries to lock straight away
[03:10:23] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[03:10:23] [PASSED] ttm_bo_validate_swapout
[03:10:23] [PASSED] ttm_bo_validate_happy_evict
[03:10:23] [PASSED] ttm_bo_validate_all_pinned_evict
[03:10:23] [PASSED] ttm_bo_validate_allowed_only_evict
[03:10:23] [PASSED] ttm_bo_validate_deleted_evict
[03:10:23] [PASSED] ttm_bo_validate_busy_domain_evict
[03:10:23] [PASSED] ttm_bo_validate_evict_gutting
[03:10:23] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[03:10:23] ================= [PASSED] ttm_bo_validate =================
[03:10:23] ============================================================
[03:10:23] Testing complete. Ran 102 tests: passed: 102
[03:10:23] Elapsed time: 11.264s total, 1.687s configuring, 9.361s building, 0.179s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 15+ messages in thread

* ✓ Xe.CI.BAT: success for drm/xe/oa: Wa_14026633728
  2026-04-07  3:02 [PATCH 0/3] drm/xe/oa: Wa_14026633728 Ashutosh Dixit
                   ` (3 preceding siblings ...)
  2026-04-07  3:10 ` ✓ CI.KUnit: success for drm/xe/oa: Wa_14026633728 Patchwork
@ 2026-04-07  3:51 ` Patchwork
  2026-04-07  5:02 ` ✓ Xe.CI.FULL: " Patchwork
  5 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-04-07  3:51 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 848 bytes --]

== Series Details ==

Series: drm/xe/oa: Wa_14026633728
URL   : https://patchwork.freedesktop.org/series/164412/
State : success

== Summary ==

CI Bug Log - changes from xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688_BAT -> xe-pw-164412v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (13 -> 13)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


Build changes
-------------

  * Linux: xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688 -> xe-pw-164412v1

  IGT_8849: 8849
  xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688: 7b7217a9e27a82ef10be22ab3a55ad5bbc849688
  xe-pw-164412v1: 164412v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/index.html

[-- Attachment #2: Type: text/html, Size: 1396 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* ✓ Xe.CI.FULL: success for drm/xe/oa: Wa_14026633728
  2026-04-07  3:02 [PATCH 0/3] drm/xe/oa: Wa_14026633728 Ashutosh Dixit
                   ` (4 preceding siblings ...)
  2026-04-07  3:51 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-04-07  5:02 ` Patchwork
  5 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-04-07  5:02 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 16251 bytes --]

== Series Details ==

Series: drm/xe/oa: Wa_14026633728
URL   : https://patchwork.freedesktop.org/series/164412/
State : success

== Summary ==

CI Bug Log - changes from xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688_FULL -> xe-pw-164412v1_FULL
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (2 -> 2)
------------------------------

  No changes in participating hosts

Known issues
------------

  Here are the changes found in xe-pw-164412v1_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@core_hotunplug@unplug-rescan:
    - shard-bmg:          [PASS][1] -> [ABORT][2] ([Intel XE#7578])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-3/igt@core_hotunplug@unplug-rescan.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-10/igt@core_hotunplug@unplug-rescan.html

  * igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-bmg:          NOTRUN -> [SKIP][3] ([Intel XE#7059] / [Intel XE#7085])
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-bmg:          NOTRUN -> [SKIP][4] ([Intel XE#1124])
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_ccs@bad-aux-stride-y-tiled-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][5] ([Intel XE#2887])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_ccs@bad-aux-stride-y-tiled-ccs.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][6] ([Intel XE#3432])
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-bmg:          NOTRUN -> [SKIP][7] ([Intel XE#2390] / [Intel XE#6974])
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_cursor_crc@cursor-sliding-512x512:
    - shard-bmg:          NOTRUN -> [SKIP][8] ([Intel XE#2321] / [Intel XE#7355])
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@kms_cursor_crc@cursor-sliding-512x512.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic:
    - shard-bmg:          [PASS][9] -> [FAIL][10] ([Intel XE#7571])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-10/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html

  * igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
    - shard-bmg:          NOTRUN -> [SKIP][11] ([Intel XE#1508])
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html

  * igt@kms_dsc@dsc-with-output-formats:
    - shard-bmg:          NOTRUN -> [SKIP][12] ([Intel XE#2244])
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_dsc@dsc-with-output-formats.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-bmg:          [PASS][13] -> [INCOMPLETE][14] ([Intel XE#2049] / [Intel XE#2597]) +1 other test incomplete
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-5/igt@kms_flip@flip-vs-suspend.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-2/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling:
    - shard-bmg:          NOTRUN -> [SKIP][15] ([Intel XE#7178] / [Intel XE#7351])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x:
    - shard-bmg:          NOTRUN -> [SKIP][16] ([Intel XE#7179])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][17] ([Intel XE#2311]) +2 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff:
    - shard-bmg:          NOTRUN -> [SKIP][18] ([Intel XE#4141]) +2 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-onoff:
    - shard-bmg:          NOTRUN -> [SKIP][19] ([Intel XE#2313]) +1 other test skip
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-onoff.html

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][20] ([Intel XE#6911] / [Intel XE#7378])
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier:
    - shard-bmg:          NOTRUN -> [SKIP][21] ([Intel XE#7283])
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-bmg:          NOTRUN -> [SKIP][22] ([Intel XE#7376] / [Intel XE#870])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf:
    - shard-bmg:          NOTRUN -> [SKIP][23] ([Intel XE#1489])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf.html

  * igt@kms_psr@fbc-psr2-basic:
    - shard-bmg:          NOTRUN -> [SKIP][24] ([Intel XE#2234] / [Intel XE#2850]) +3 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@kms_psr@fbc-psr2-basic.html

  * igt@kms_sharpness_filter@invalid-filter-with-plane:
    - shard-bmg:          NOTRUN -> [SKIP][25] ([Intel XE#6503])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_sharpness_filter@invalid-filter-with-plane.html

  * igt@xe_eudebug@vma-ufence-faultable:
    - shard-bmg:          NOTRUN -> [SKIP][26] ([Intel XE#7636]) +1 other test skip
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@xe_eudebug@vma-ufence-faultable.html

  * igt@xe_eudebug_sriov@deny-sriov:
    - shard-bmg:          NOTRUN -> [SKIP][27] ([Intel XE#5793] / [Intel XE#7320] / [Intel XE#7464])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@xe_eudebug_sriov@deny-sriov.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - shard-bmg:          [PASS][28] -> [INCOMPLETE][29] ([Intel XE#6321])
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-5/igt@xe_evict@evict-mixed-many-threads-small.html
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-2/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate:
    - shard-bmg:          NOTRUN -> [SKIP][30] ([Intel XE#2322] / [Intel XE#7372])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate.html

  * igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate-race-prefetch:
    - shard-bmg:          NOTRUN -> [SKIP][31] ([Intel XE#7136]) +1 other test skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate-race-prefetch.html

  * igt@xe_exec_multi_queue@one-queue-preempt-mode-fault-userptr:
    - shard-bmg:          NOTRUN -> [SKIP][32] ([Intel XE#6874]) +2 other tests skip
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@xe_exec_multi_queue@one-queue-preempt-mode-fault-userptr.html

  * igt@xe_exec_system_allocator@many-execqueues-mmap-prefetch:
    - shard-bmg:          [PASS][33] -> [ABORT][34] ([Intel XE#6652])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-6/igt@xe_exec_system_allocator@many-execqueues-mmap-prefetch.html
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-2/igt@xe_exec_system_allocator@many-execqueues-mmap-prefetch.html

  * igt@xe_exec_threads@threads-multi-queue-mixed-fd-userptr:
    - shard-bmg:          NOTRUN -> [SKIP][35] ([Intel XE#7138]) +2 other tests skip
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@xe_exec_threads@threads-multi-queue-mixed-fd-userptr.html

  * igt@xe_module_load@force-load:
    - shard-bmg:          ([PASS][36], [PASS][37]) -> [ABORT][38] ([Intel XE#7578])
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-6/igt@xe_module_load@force-load.html
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-2/igt@xe_module_load@force-load.html
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-9/igt@xe_module_load@force-load.html

  
#### Possible fixes ####

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-bmg:          [INCOMPLETE][39] ([Intel XE#7084]) -> [PASS][40] +1 other test pass
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-10/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-5/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_flip@2x-dpms-vs-vblank-race:
    - shard-bmg:          [INCOMPLETE][41] -> [PASS][42] +1 other test pass
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-2/igt@kms_flip@2x-dpms-vs-vblank-race.html
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-1/igt@kms_flip@2x-dpms-vs-vblank-race.html

  * igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1:
    - shard-lnl:          [FAIL][43] ([Intel XE#2142]) -> [PASS][44] +1 other test pass
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-lnl-6/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-lnl-8/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html

  * igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma:
    - shard-lnl:          [FAIL][45] ([Intel XE#5625]) -> [PASS][46]
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-lnl-2/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma.html
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-lnl-6/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-single-vma.html

  
#### Warnings ####

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          [SKIP][47] ([Intel XE#2426] / [Intel XE#5848]) -> [FAIL][48] ([Intel XE#1729] / [Intel XE#7424])
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern.html
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/shard-bmg-6/igt@kms_tiled_display@basic-test-pattern.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1508]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1508
  [Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
  [Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
  [Intel XE#2142]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2142
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#5625]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5625
  [Intel XE#5793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5793
  [Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
  [Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
  [Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
  [Intel XE#6652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6652
  [Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
  [Intel XE#6911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6911
  [Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
  [Intel XE#7059]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7059
  [Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
  [Intel XE#7085]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7085
  [Intel XE#7136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7136
  [Intel XE#7138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7138
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [Intel XE#7179]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7179
  [Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
  [Intel XE#7320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7320
  [Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
  [Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
  [Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
  [Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
  [Intel XE#7378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7378
  [Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
  [Intel XE#7464]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7464
  [Intel XE#7571]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7571
  [Intel XE#7578]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7578
  [Intel XE#7636]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7636
  [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870


Build changes
-------------

  * Linux: xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688 -> xe-pw-164412v1

  IGT_8849: 8849
  xe-4853-7b7217a9e27a82ef10be22ab3a55ad5bbc849688: 7b7217a9e27a82ef10be22ab3a55ad5bbc849688
  xe-pw-164412v1: 164412v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-164412v1/index.html

[-- Attachment #2: Type: text/html, Size: 17587 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/3] drm/xe/oa: Use xe_map layer
  2026-04-07  3:02 ` [PATCH 1/3] drm/xe/oa: Use xe_map layer Ashutosh Dixit
@ 2026-04-07 22:49   ` Umesh Nerlige Ramappa
  2026-04-08 15:32     ` Dixit, Ashutosh
  0 siblings, 1 reply; 15+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-04-07 22:49 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

On Mon, Apr 06, 2026 at 08:02:17PM -0700, Ashutosh Dixit wrote:
>OA code should have used xe_map layer to begin with. In CRI, the OA buffer
>can be located both in system and device memory. For these reasons, move OA
>code to use the xe_map layer when accessing the OA buffer.
>
>Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
>---
> drivers/gpu/drm/xe/xe_oa.c       | 88 ++++++++++++++++++--------------
> drivers/gpu/drm/xe/xe_oa_types.h |  3 --
> 2 files changed, 49 insertions(+), 42 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>index 6337e671c97ae..dfd3b6a789cc3 100644
>--- a/drivers/gpu/drm/xe/xe_oa.c
>+++ b/drivers/gpu/drm/xe/xe_oa.c
>@@ -213,32 +213,40 @@ static u32 xe_oa_hw_tail_read(struct xe_oa_stream *stream)
> #define oa_report_header_64bit(__s) \
> 	((__s)->oa_buffer.format->header == HDR_64_BIT)
>
>-static u64 oa_report_id(struct xe_oa_stream *stream, void *report)
>+static u64 oa_report_id(struct xe_oa_stream *stream, u32 tail)
> {
>-	return oa_report_header_64bit(stream) ? *(u64 *)report : *(u32 *)report;
>+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
>+
>+	return oa_report_header_64bit(stream) ?
>+		xe_map_rd(stream->oa->xe, map, tail, u64) :
>+		xe_map_rd(stream->oa->xe, map, tail, u32);
> }
>
>-static void oa_report_id_clear(struct xe_oa_stream *stream, u32 *report)
>+static void oa_report_id_clear(struct xe_oa_stream *stream, u32 head)
> {
>-	if (oa_report_header_64bit(stream))
>-		*(u64 *)report = 0;
>-	else
>-		*report = 0;
>+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
>+
>+	oa_report_header_64bit(stream) ?
>+		xe_map_wr(stream->oa->xe, map, head, u64, 0) :
>+		xe_map_wr(stream->oa->xe, map, head, u32, 0);
> }
>
>-static u64 oa_timestamp(struct xe_oa_stream *stream, void *report)
>+static u64 oa_timestamp(struct xe_oa_stream *stream, u32 tail)
> {
>+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
>+
> 	return oa_report_header_64bit(stream) ?
>-		*((u64 *)report + 1) :
>-		*((u32 *)report + 1);
>+		xe_map_rd(stream->oa->xe, map, tail + 2, u64) :
>+		xe_map_rd(stream->oa->xe, map, tail + 1, u32);
> }
>
>-static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 *report)
>+static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 head)
> {
>-	if (oa_report_header_64bit(stream))
>-		*(u64 *)&report[2] = 0;
>-	else
>-		report[1] = 0;
>+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
>+
>+	oa_report_header_64bit(stream) ?
>+		xe_map_wr(stream->oa->xe, map, head + 2, u64, 0) :
>+		xe_map_wr(stream->oa->xe, map, head + 1, u32, 0);
> }
>
> static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
>@@ -275,9 +283,7 @@ static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
> 	 * they were written.  If not : (╯°□°)╯︵ ┻━┻
> 	 */
> 	while (xe_oa_circ_diff(stream, tail, stream->oa_buffer.tail) >= report_size) {
>-		void *report = stream->oa_buffer.vaddr + tail;
>-
>-		if (oa_report_id(stream, report) || oa_timestamp(stream, report))
>+		if (oa_report_id(stream, tail) || oa_timestamp(stream, tail))
> 			break;
>
> 		tail = xe_oa_circ_diff(stream, tail, report_size);
>@@ -311,30 +317,37 @@ static enum hrtimer_restart xe_oa_poll_check_timer_cb(struct hrtimer *hrtimer)
> 	return HRTIMER_RESTART;
> }
>
>+static inline unsigned long
>+xe_oa_copy_to_user(void __user *dst, const struct iosys_map *src, size_t src_offset, size_t len)
>+{
>+	if (src->is_iomem)
>+		return copy_to_user(dst, src->vaddr_iomem + src_offset, len);

I think this requires xe_map_memcpy_from for the iomem case.

Thanks,
Umesh

>+	else
>+		return copy_to_user(dst, src->vaddr + src_offset, len);
>+}
>+
> static int xe_oa_append_report(struct xe_oa_stream *stream, char __user *buf,
>-			       size_t count, size_t *offset, const u8 *report)
>+			       size_t count, size_t *offset, u32 head)
> {
>+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
> 	int report_size = stream->oa_buffer.format->size;
> 	int report_size_partial;
>-	u8 *oa_buf_end;
>
> 	if ((count - *offset) < report_size)
> 		return -ENOSPC;
>
> 	buf += *offset;
>
>-	oa_buf_end = stream->oa_buffer.vaddr + stream->oa_buffer.circ_size;
>-	report_size_partial = oa_buf_end - report;
>+	report_size_partial = stream->oa_buffer.circ_size - head;
>
> 	if (report_size_partial < report_size) {
>-		if (copy_to_user(buf, report, report_size_partial))
>+		if (xe_oa_copy_to_user(buf, map, head, report_size_partial))
> 			return -EFAULT;
> 		buf += report_size_partial;
>
>-		if (copy_to_user(buf, stream->oa_buffer.vaddr,
>-				 report_size - report_size_partial))
>+		if (xe_oa_copy_to_user(buf, map, 0, report_size - report_size_partial))
> 			return -EFAULT;
>-	} else if (copy_to_user(buf, report, report_size)) {
>+	} else if (xe_oa_copy_to_user(buf, map, head, report_size)) {
> 		return -EFAULT;
> 	}
>
>@@ -347,7 +360,6 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
> 				size_t count, size_t *offset)
> {
> 	int report_size = stream->oa_buffer.format->size;
>-	u8 *oa_buf_base = stream->oa_buffer.vaddr;
> 	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
> 	size_t start_offset = *offset;
> 	unsigned long flags;
>@@ -364,26 +376,24 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
>
> 	for (; xe_oa_circ_diff(stream, tail, head);
> 	     head = xe_oa_circ_incr(stream, head, report_size)) {
>-		u8 *report = oa_buf_base + head;
>-
>-		ret = xe_oa_append_report(stream, buf, count, offset, report);
>+		ret = xe_oa_append_report(stream, buf, count, offset, head);
> 		if (ret)
> 			break;
>
> 		if (!(stream->oa_buffer.circ_size % report_size)) {
> 			/* Clear out report id and timestamp to detect unlanded reports */
>-			oa_report_id_clear(stream, (void *)report);
>-			oa_timestamp_clear(stream, (void *)report);
>+			oa_report_id_clear(stream, head);
>+			oa_timestamp_clear(stream, head);
> 		} else {
>-			u8 *oa_buf_end = stream->oa_buffer.vaddr + stream->oa_buffer.circ_size;
>-			u32 part = oa_buf_end - report;
>+			struct iosys_map *map = &stream->oa_buffer.bo->vmap;
>+			u32 part = stream->oa_buffer.circ_size - head;
>
> 			/* Zero out the entire report */
> 			if (report_size <= part) {
>-				memset(report, 0, report_size);
>+				xe_map_memset(stream->oa->xe, map, head, 0, report_size);
> 			} else {
>-				memset(report, 0, part);
>-				memset(oa_buf_base, 0, report_size - part);
>+				xe_map_memset(stream->oa->xe, map, head, 0, part);
>+				xe_map_memset(stream->oa->xe, map, 0, 0, report_size - part);
> 			}
> 		}
> 	}
>@@ -436,7 +446,8 @@ static void xe_oa_init_oa_buffer(struct xe_oa_stream *stream)
> 	spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
>
> 	/* Zero out the OA buffer since we rely on zero report id and timestamp fields */
>-	memset(stream->oa_buffer.vaddr, 0, xe_bo_size(stream->oa_buffer.bo));
>+	xe_map_memset(stream->oa->xe, &stream->oa_buffer.bo->vmap, 0, 0,
>+		      xe_bo_size(stream->oa_buffer.bo));
> }
>
> static u32 __format_to_oactrl(const struct xe_oa_format *format, int counter_sel_mask)
>@@ -891,7 +902,6 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
> 	stream->oa_buffer.bo = bo;
> 	/* mmap implementation requires OA buffer to be in system memory */
> 	xe_assert(stream->oa->xe, bo->vmap.is_iomem == 0);
>-	stream->oa_buffer.vaddr = bo->vmap.vaddr;
> 	return 0;
> }
>
>diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
>index b03ffd5134834..2dd550c93b8ac 100644
>--- a/drivers/gpu/drm/xe/xe_oa_types.h
>+++ b/drivers/gpu/drm/xe/xe_oa_types.h
>@@ -162,9 +162,6 @@ struct xe_oa_buffer {
> 	/** @format: xe_bo backing the OA buffer */
> 	struct xe_bo *bo;
>
>-	/** @vaddr: mapped vaddr of the OA buffer */
>-	u8 *vaddr;
>-
> 	/** @ptr_lock: Lock protecting reads/writes to head/tail pointers */
> 	spinlock_t ptr_lock;
>
>-- 
>2.48.1
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/3] drm/xe/oa: Use drm_gem_mmap_obj for OA buffer mmap
  2026-04-07  3:02 ` [PATCH 2/3] drm/xe/oa: Use drm_gem_mmap_obj for OA buffer mmap Ashutosh Dixit
@ 2026-04-07 22:52   ` Umesh Nerlige Ramappa
  0 siblings, 0 replies; 15+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-04-07 22:52 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

On Mon, Apr 06, 2026 at 08:02:18PM -0700, Ashutosh Dixit wrote:
>OA buffer mmap can currently only mmap OA buffer in system memory. CRI
>MERTOA buffer can be located in device memory. Switch OA buffer mmap to
>using drm_gem_mmap_obj, which can handle mmap's of both system and device
>memory buffers.
>
>Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>

If it works for both types of memory, then this looks better than 
before,

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

Thanks,
Umesh
>---
> drivers/gpu/drm/xe/xe_oa.c | 19 +++----------------
> 1 file changed, 3 insertions(+), 16 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>index dfd3b6a789cc3..0e65141e57ee8 100644
>--- a/drivers/gpu/drm/xe/xe_oa.c
>+++ b/drivers/gpu/drm/xe/xe_oa.c
>@@ -9,6 +9,7 @@
> #include <linux/poll.h>
>
> #include <drm/drm_drv.h>
>+#include <drm/drm_gem.h>
> #include <drm/drm_managed.h>
> #include <drm/drm_syncobj.h>
> #include <uapi/drm/xe_drm.h>
>@@ -900,8 +901,6 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
> 		return PTR_ERR(bo);
>
> 	stream->oa_buffer.bo = bo;
>-	/* mmap implementation requires OA buffer to be in system memory */
>-	xe_assert(stream->oa->xe, bo->vmap.is_iomem == 0);
> 	return 0;
> }
>
>@@ -1683,8 +1682,6 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
> {
> 	struct xe_oa_stream *stream = file->private_data;
> 	struct xe_bo *bo = stream->oa_buffer.bo;
>-	unsigned long start = vma->vm_start;
>-	int i, ret;
>
> 	if (xe_observation_paranoid && !perfmon_capable()) {
> 		drm_dbg(&stream->oa->xe->drm, "Insufficient privilege to map OA buffer\n");
>@@ -1692,7 +1689,7 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
> 	}
>
> 	/* Can mmap the entire OA buffer or nothing (no partial OA buffer mmaps) */
>-	if (vma->vm_end - vma->vm_start != xe_bo_size(stream->oa_buffer.bo)) {
>+	if (vma->vm_end - vma->vm_start != xe_bo_size(bo)) {
> 		drm_dbg(&stream->oa->xe->drm, "Wrong mmap size, must be OA buffer size\n");
> 		return -EINVAL;
> 	}
>@@ -1708,17 +1705,7 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
> 	vm_flags_mod(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_DONTCOPY,
> 		     VM_MAYWRITE | VM_MAYEXEC);
>
>-	xe_assert(stream->oa->xe, bo->ttm.ttm->num_pages == vma_pages(vma));
>-	for (i = 0; i < bo->ttm.ttm->num_pages; i++) {
>-		ret = remap_pfn_range(vma, start, page_to_pfn(bo->ttm.ttm->pages[i]),
>-				      PAGE_SIZE, vma->vm_page_prot);
>-		if (ret)
>-			break;
>-
>-		start += PAGE_SIZE;
>-	}
>-
>-	return ret;
>+	return drm_gem_mmap_obj(&bo->ttm.base, xe_bo_size(bo), vma);
> }
>
> static const struct file_operations xe_oa_fops = {
>-- 
>2.48.1
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 3/3] drm/xe/oa: Implement Wa_14026633728
  2026-04-07  3:02 ` [PATCH 3/3] drm/xe/oa: Implement Wa_14026633728 Ashutosh Dixit
@ 2026-04-07 23:17   ` Umesh Nerlige Ramappa
  0 siblings, 0 replies; 15+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-04-07 23:17 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

On Mon, Apr 06, 2026 at 08:02:19PM -0700, Ashutosh Dixit wrote:
>CRI Wa_14026633728 requires MERTOA buffer to be allocated in device memory,
>not system memory (which is the default for OA buffers).
>
>Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>

LGTM,

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>

>---
> drivers/gpu/drm/xe/xe_oa.c         | 10 +++++++++-
> drivers/gpu/drm/xe/xe_wa_oob.rules |  1 +
> 2 files changed, 10 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>index 0e65141e57ee8..f65cec62a0d2d 100644
>--- a/drivers/gpu/drm/xe/xe_oa.c
>+++ b/drivers/gpu/drm/xe/xe_oa.c
>@@ -250,6 +250,11 @@ static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 head)
> 		xe_map_wr(stream->oa->xe, map, head + 1, u32, 0);
> }
>
>+static bool mert_wa_14026633728(struct xe_oa_stream *s)
>+{
>+	return s->oa_unit->type == DRM_XE_OA_UNIT_TYPE_MERT && XE_GT_WA(s->gt, 14026633728);
>+}
>+
> static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
> {
> 	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
>@@ -892,11 +897,14 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
>
> static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
> {
>+	u32 vram = mert_wa_14026633728(stream) ?
>+		XE_BO_FLAG_VRAM_IF_DGFX(xe_device_get_root_tile(stream->oa->xe)) :
>+		XE_BO_FLAG_SYSTEM;
> 	struct xe_bo *bo;
>
> 	bo = xe_bo_create_pin_map_novm(stream->oa->xe, stream->gt->tile,
> 				       size, ttm_bo_type_kernel,
>-				       XE_BO_FLAG_SYSTEM | XE_BO_FLAG_GGTT, false);
>+				       vram | XE_BO_FLAG_GGTT, false);
> 	if (IS_ERR(bo))
> 		return PTR_ERR(bo);
>
>diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
>index f8a185103b805..a7c1bd9bcb943 100644
>--- a/drivers/gpu/drm/xe/xe_wa_oob.rules
>+++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
>@@ -65,3 +65,4 @@
>
> 14025883347	MEDIA_VERSION_RANGE(1301, 3503)
> 		GRAPHICS_VERSION_RANGE(2004, 3005)
>+14026633728	PLATFORM(CRESCENTISLAND)
>-- 
>2.48.1
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/3] drm/xe/oa: Use xe_map layer
  2026-04-07 22:49   ` Umesh Nerlige Ramappa
@ 2026-04-08 15:32     ` Dixit, Ashutosh
  2026-04-08 18:21       ` Umesh Nerlige Ramappa
  0 siblings, 1 reply; 15+ messages in thread
From: Dixit, Ashutosh @ 2026-04-08 15:32 UTC (permalink / raw)
  To: Umesh Nerlige Ramappa; +Cc: intel-xe

On Tue, 07 Apr 2026 15:49:27 -0700, Umesh Nerlige Ramappa wrote:
>

Hi Umesh,

> On Mon, Apr 06, 2026 at 08:02:17PM -0700, Ashutosh Dixit wrote:
> > @@ -311,30 +317,37 @@ static enum hrtimer_restart xe_oa_poll_check_timer_cb(struct hrtimer *hrtimer)
> >	return HRTIMER_RESTART;
> > }
> >
> > +static inline unsigned long
> > +xe_oa_copy_to_user(void __user *dst, const struct iosys_map *src, size_t src_offset, size_t len)
> > +{
> > +	if (src->is_iomem)
> > +		return copy_to_user(dst, src->vaddr_iomem + src_offset, len);
>
> I think this requires xe_map_memcpy_from for the iomem case.
>
> > +	else
> > +		return copy_to_user(dst, src->vaddr + src_offset, len);
> > +}
> > +

Yes, you have certainly spotted the iffy part of this patch. However, this
situation is not that simple:

* xe_map_memcpy_from or iosys_map_memcpy_from copies from iomem to kernel
  memory (potentially using special accessors for iomem), not to user
  memory

* copy_to_user copies from kernel memory to user memory (using special
  checks), not from iomem

So in the kernel we don't have functions which copy directly from iomem to
user memory. That is, functions like iosys_map_copy_to_user() or
copy_to_user_from_iomem() do not exist, because they would need to combine
iomem access and copy_to_user (likely copy_to_user will need to be
rewritten with iomem accessors, if such a function were to be
implemented). There may be a reason why such functions don't exist in the
kernel.

Another way might be to copy from iomem to kernel memory and from kernel to
user memory (that is have both iosys_map_memcpy_from and copy_to_user
calls), but this would entail an extra copy into a bounce buffer in kernel
memory. Something like this:

static inline unsigned long
xe_oa_copy_to_user(void __user *dst, const struct iosys_map *src, size_t src_offset, size_t len)
{
	void *tmp = kmalloc(len, GFP_KERNEL); // kmalloc or statically allocated tmp buffer

	xe_map_memcpy_from(xe, tmp, src, src_offset, len); // extra copy

	return copy_to_user(dst, tmp, len);
}

In our case, xe_map_memcpy_from or iosys_map_memcpy_from are basically a
memcpy (because vram bar is ioremapped, special accessors for iomem are not
needed). Therefore, to avoid the extra copy, I decided to drop the iomem
access part (since the copy_to_user part cannot be dropped). Hence I end up
with the xe_oa_copy_to_user() above. The function was tested on BMG with OA
buffer in vram and works as expected.

I did think about renaming the above function xe_map_copy_to_user() and
moving it to xe_map.h, so that is possible. But since there are no other
users (and none are expected) at this point of xe_map_copy_to_user() apart
from OA because of this workaround (other observation stream buffers are in
system memory, not vram), I left the function as specific to OA.

Let me know what you think. Thanks.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/3] drm/xe/oa: Use xe_map layer
  2026-04-08 15:32     ` Dixit, Ashutosh
@ 2026-04-08 18:21       ` Umesh Nerlige Ramappa
  0 siblings, 0 replies; 15+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-04-08 18:21 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: intel-xe

On Wed, Apr 08, 2026 at 08:32:50AM -0700, Dixit, Ashutosh wrote:
>On Tue, 07 Apr 2026 15:49:27 -0700, Umesh Nerlige Ramappa wrote:
>>
>
>Hi Umesh,
>
>> On Mon, Apr 06, 2026 at 08:02:17PM -0700, Ashutosh Dixit wrote:
>> > @@ -311,30 +317,37 @@ static enum hrtimer_restart xe_oa_poll_check_timer_cb(struct hrtimer *hrtimer)
>> >	return HRTIMER_RESTART;
>> > }
>> >
>> > +static inline unsigned long
>> > +xe_oa_copy_to_user(void __user *dst, const struct iosys_map *src, size_t src_offset, size_t len)
>> > +{
>> > +	if (src->is_iomem)
>> > +		return copy_to_user(dst, src->vaddr_iomem + src_offset, len);
>>
>> I think this requires xe_map_memcpy_from for the iomem case.
>>
>> > +	else
>> > +		return copy_to_user(dst, src->vaddr + src_offset, len);
>> > +}
>> > +
>
>Yes, you have certainly spotted the iffy part of this patch. However, this
>situation is not that simple:
>
>* xe_map_memcpy_from or iosys_map_memcpy_from copies from iomem to kernel
>  memory (potentially using special accessors for iomem), not to user
>  memory
>
>* copy_to_user copies from kernel memory to user memory (using special
>  checks), not from iomem
>
>So in the kernel we don't have functions which copy directly from iomem to
>user memory. That is, functions like iosys_map_copy_to_user() or
>copy_to_user_from_iomem() do not exist, because they would need to combine
>iomem access and copy_to_user (likely copy_to_user will need to be
>rewritten with iomem accessors, if such a function were to be
>implemented). There may be a reason why such functions don't exist in the
>kernel.
>
>Another way might be to copy from iomem to kernel memory and from kernel to
>user memory (that is have both iosys_map_memcpy_from and copy_to_user
>calls), but this would entail an extra copy into a bounce buffer in kernel
>memory. Something like this:
>
>static inline unsigned long
>xe_oa_copy_to_user(void __user *dst, const struct iosys_map *src, size_t src_offset, size_t len)
>{
>	void *tmp = kmalloc(len, GFP_KERNEL); // kmalloc or statically allocated tmp buffer
>
>	xe_map_memcpy_from(xe, tmp, src, src_offset, len); // extra copy
>
>	return copy_to_user(dst, tmp, len);
>}

I did notice that there wasn't anything like copy_from_iomem_to_user. I 
was imagining you could copy over 32-bit iomem words into the user 
buffer using the iosys_map accessors. That should be possible and would 
avoid an intermediate buffer.

>
>In our case, xe_map_memcpy_from or iosys_map_memcpy_from are basically a
>memcpy (because vram bar is ioremapped, special accessors for iomem are not
>needed).

Hmm, then why even have this patch :). fwiu, you are accessing the OA 
buffer using iosys_map accessors in this patch. It should work without 
it because of the above statement.

If we go the iosys_map route, then let's do it consistently. If not, we 
should just drop this patch. I would lean into reading 32bit words into 
the user buffer.

Regards,
Umesh

>Therefore, to avoid the extra copy, I decided to drop the iomem
>access part (since the copy_to_user part cannot be dropped). Hence I end up
>with the xe_oa_copy_to_user() above. The function was tested on BMG with OA
>buffer in vram and works as expected.
>
>I did think about renaming the above function xe_map_copy_to_user() and
>moving it to xe_map.h, so that is possible. But since there are no other
>users (and none are expected) at this point of xe_map_copy_to_user() apart
>from OA because of this workaround (other observation stream buffers are in
>system memory, not vram), I left the function as specific to OA.
>
>Let me know what you think. Thanks.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 1/3] drm/xe/oa: Use xe_map layer
  2026-04-09 23:17 [PATCH v2 0/3] " Ashutosh Dixit
@ 2026-04-09 23:17 ` Ashutosh Dixit
  2026-04-11  0:49   ` Dixit, Ashutosh
  0 siblings, 1 reply; 15+ messages in thread
From: Ashutosh Dixit @ 2026-04-09 23:17 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

OA code should have used xe_map layer to begin with. In CRI, the OA buffer
can be located both in system and device memory. For these reasons, move OA
code to use the xe_map layer when accessing the OA buffer.

v2: Use xe_map layer also in xe_oa_copy_to_user (Umesh)

Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_oa.c       | 98 +++++++++++++++++++-------------
 drivers/gpu/drm/xe/xe_oa_types.h |  3 -
 2 files changed, 59 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 6337e671c97ae..ff2ddec8ffa65 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -213,32 +213,40 @@ static u32 xe_oa_hw_tail_read(struct xe_oa_stream *stream)
 #define oa_report_header_64bit(__s) \
 	((__s)->oa_buffer.format->header == HDR_64_BIT)
 
-static u64 oa_report_id(struct xe_oa_stream *stream, void *report)
+static u64 oa_report_id(struct xe_oa_stream *stream, u32 tail)
 {
-	return oa_report_header_64bit(stream) ? *(u64 *)report : *(u32 *)report;
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
+	return oa_report_header_64bit(stream) ?
+		xe_map_rd(stream->oa->xe, map, tail, u64) :
+		xe_map_rd(stream->oa->xe, map, tail, u32);
 }
 
-static void oa_report_id_clear(struct xe_oa_stream *stream, u32 *report)
+static void oa_report_id_clear(struct xe_oa_stream *stream, u32 head)
 {
-	if (oa_report_header_64bit(stream))
-		*(u64 *)report = 0;
-	else
-		*report = 0;
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
+	oa_report_header_64bit(stream) ?
+		xe_map_wr(stream->oa->xe, map, head, u64, 0) :
+		xe_map_wr(stream->oa->xe, map, head, u32, 0);
 }
 
-static u64 oa_timestamp(struct xe_oa_stream *stream, void *report)
+static u64 oa_timestamp(struct xe_oa_stream *stream, u32 tail)
 {
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
 	return oa_report_header_64bit(stream) ?
-		*((u64 *)report + 1) :
-		*((u32 *)report + 1);
+		xe_map_rd(stream->oa->xe, map, tail + 2, u64) :
+		xe_map_rd(stream->oa->xe, map, tail + 1, u32);
 }
 
-static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 *report)
+static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 head)
 {
-	if (oa_report_header_64bit(stream))
-		*(u64 *)&report[2] = 0;
-	else
-		report[1] = 0;
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
+	oa_report_header_64bit(stream) ?
+		xe_map_wr(stream->oa->xe, map, head + 2, u64, 0) :
+		xe_map_wr(stream->oa->xe, map, head + 1, u32, 0);
 }
 
 static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
@@ -275,9 +283,7 @@ static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
 	 * they were written.  If not : (╯°□°)╯︵ ┻━┻
 	 */
 	while (xe_oa_circ_diff(stream, tail, stream->oa_buffer.tail) >= report_size) {
-		void *report = stream->oa_buffer.vaddr + tail;
-
-		if (oa_report_id(stream, report) || oa_timestamp(stream, report))
+		if (oa_report_id(stream, tail) || oa_timestamp(stream, tail))
 			break;
 
 		tail = xe_oa_circ_diff(stream, tail, report_size);
@@ -311,30 +317,47 @@ static enum hrtimer_restart xe_oa_poll_check_timer_cb(struct hrtimer *hrtimer)
 	return HRTIMER_RESTART;
 }
 
+/* Because there is no iosys_map_copy_to_user() or copy_to_user_from_iomem() */
+static int xe_oa_copy_to_user(struct xe_oa_stream *stream, void __user *dst, u32 head, u32 len)
+{
+	u32 __user *dptr = dst;
+
+	xe_gt_assert(stream->gt, len % 4 == 0);
+
+	for (int i = 0; i < len / 4; i++) {
+		struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+		u32 val = xe_map_rd(stream->oa->xe, map, head, u32);
+		int ret = put_user(val, dptr++);
+
+		if (ret)
+			return ret;
+		head += 4;
+	}
+
+	return 0;
+}
+
 static int xe_oa_append_report(struct xe_oa_stream *stream, char __user *buf,
-			       size_t count, size_t *offset, const u8 *report)
+			       size_t count, size_t *offset, u32 head)
 {
 	int report_size = stream->oa_buffer.format->size;
 	int report_size_partial;
-	u8 *oa_buf_end;
 
 	if ((count - *offset) < report_size)
 		return -ENOSPC;
 
 	buf += *offset;
 
-	oa_buf_end = stream->oa_buffer.vaddr + stream->oa_buffer.circ_size;
-	report_size_partial = oa_buf_end - report;
+	report_size_partial = stream->oa_buffer.circ_size - head;
 
 	if (report_size_partial < report_size) {
-		if (copy_to_user(buf, report, report_size_partial))
+		if (xe_oa_copy_to_user(stream, buf, head, report_size_partial))
 			return -EFAULT;
 		buf += report_size_partial;
 
-		if (copy_to_user(buf, stream->oa_buffer.vaddr,
-				 report_size - report_size_partial))
+		if (xe_oa_copy_to_user(stream, buf, 0, report_size - report_size_partial))
 			return -EFAULT;
-	} else if (copy_to_user(buf, report, report_size)) {
+	} else if (xe_oa_copy_to_user(stream, buf, head, report_size)) {
 		return -EFAULT;
 	}
 
@@ -347,7 +370,6 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
 				size_t count, size_t *offset)
 {
 	int report_size = stream->oa_buffer.format->size;
-	u8 *oa_buf_base = stream->oa_buffer.vaddr;
 	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
 	size_t start_offset = *offset;
 	unsigned long flags;
@@ -364,26 +386,24 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
 
 	for (; xe_oa_circ_diff(stream, tail, head);
 	     head = xe_oa_circ_incr(stream, head, report_size)) {
-		u8 *report = oa_buf_base + head;
-
-		ret = xe_oa_append_report(stream, buf, count, offset, report);
+		ret = xe_oa_append_report(stream, buf, count, offset, head);
 		if (ret)
 			break;
 
 		if (!(stream->oa_buffer.circ_size % report_size)) {
 			/* Clear out report id and timestamp to detect unlanded reports */
-			oa_report_id_clear(stream, (void *)report);
-			oa_timestamp_clear(stream, (void *)report);
+			oa_report_id_clear(stream, head);
+			oa_timestamp_clear(stream, head);
 		} else {
-			u8 *oa_buf_end = stream->oa_buffer.vaddr + stream->oa_buffer.circ_size;
-			u32 part = oa_buf_end - report;
+			struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+			u32 part = stream->oa_buffer.circ_size - head;
 
 			/* Zero out the entire report */
 			if (report_size <= part) {
-				memset(report, 0, report_size);
+				xe_map_memset(stream->oa->xe, map, head, 0, report_size);
 			} else {
-				memset(report, 0, part);
-				memset(oa_buf_base, 0, report_size - part);
+				xe_map_memset(stream->oa->xe, map, head, 0, part);
+				xe_map_memset(stream->oa->xe, map, 0, 0, report_size - part);
 			}
 		}
 	}
@@ -436,7 +456,8 @@ static void xe_oa_init_oa_buffer(struct xe_oa_stream *stream)
 	spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
 
 	/* Zero out the OA buffer since we rely on zero report id and timestamp fields */
-	memset(stream->oa_buffer.vaddr, 0, xe_bo_size(stream->oa_buffer.bo));
+	xe_map_memset(stream->oa->xe, &stream->oa_buffer.bo->vmap, 0, 0,
+		      xe_bo_size(stream->oa_buffer.bo));
 }
 
 static u32 __format_to_oactrl(const struct xe_oa_format *format, int counter_sel_mask)
@@ -891,7 +912,6 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
 	stream->oa_buffer.bo = bo;
 	/* mmap implementation requires OA buffer to be in system memory */
 	xe_assert(stream->oa->xe, bo->vmap.is_iomem == 0);
-	stream->oa_buffer.vaddr = bo->vmap.vaddr;
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index b03ffd5134834..2dd550c93b8ac 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -162,9 +162,6 @@ struct xe_oa_buffer {
 	/** @format: xe_bo backing the OA buffer */
 	struct xe_bo *bo;
 
-	/** @vaddr: mapped vaddr of the OA buffer */
-	u8 *vaddr;
-
 	/** @ptr_lock: Lock protecting reads/writes to head/tail pointers */
 	spinlock_t ptr_lock;
 
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 1/3] drm/xe/oa: Use xe_map layer
  2026-04-11  0:48 [PATCH v3 0/3] drm/xe/oa: Wa_14026633728 Ashutosh Dixit
@ 2026-04-11  0:48 ` Ashutosh Dixit
  0 siblings, 0 replies; 15+ messages in thread
From: Ashutosh Dixit @ 2026-04-11  0:48 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

OA code should have used xe_map layer to begin with. In CRI, the OA buffer
can be located both in system and device memory. For these reasons, move OA
code to use the xe_map layer when accessing the OA buffer.

v2: Use xe_map layer also in xe_oa_copy_to_user (Umesh)
v3: To avoid performance impact in v2, revert to v1 but move
    xe_map_copy_to_user() to xe_map.h

Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_map.h      | 14 ++++++
 drivers/gpu/drm/xe/xe_oa.c       | 80 ++++++++++++++++----------------
 drivers/gpu/drm/xe/xe_oa_types.h |  3 --
 3 files changed, 55 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_map.h b/drivers/gpu/drm/xe/xe_map.h
index c447771256913..8007fcb342880 100644
--- a/drivers/gpu/drm/xe/xe_map.h
+++ b/drivers/gpu/drm/xe/xe_map.h
@@ -44,6 +44,20 @@ static inline void xe_map_memset(struct xe_device *xe,
 	iosys_map_memset(dst, offset, value, len);
 }
 
+static inline unsigned long
+xe_map_copy_to_user(struct xe_device *xe, void __user *dst,
+		    const struct iosys_map *src,
+		    size_t src_offset, size_t len)
+{
+	xe_device_assert_mem_access(xe);
+
+	/* Because there is no iosys_map_copy_to_user() or copy_to_user_from_iomem() */
+	if (src->is_iomem)
+		return copy_to_user(dst, src->vaddr_iomem + src_offset, len);
+	else
+		return copy_to_user(dst, src->vaddr + src_offset, len);
+}
+
 /* FIXME: We likely should kill these two functions sooner or later */
 static inline u32 xe_map_read32(struct xe_device *xe, struct iosys_map *map)
 {
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 6337e671c97ae..d25beb6ac6040 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -213,32 +213,40 @@ static u32 xe_oa_hw_tail_read(struct xe_oa_stream *stream)
 #define oa_report_header_64bit(__s) \
 	((__s)->oa_buffer.format->header == HDR_64_BIT)
 
-static u64 oa_report_id(struct xe_oa_stream *stream, void *report)
+static u64 oa_report_id(struct xe_oa_stream *stream, u32 tail)
 {
-	return oa_report_header_64bit(stream) ? *(u64 *)report : *(u32 *)report;
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
+	return oa_report_header_64bit(stream) ?
+		xe_map_rd(stream->oa->xe, map, tail, u64) :
+		xe_map_rd(stream->oa->xe, map, tail, u32);
 }
 
-static void oa_report_id_clear(struct xe_oa_stream *stream, u32 *report)
+static void oa_report_id_clear(struct xe_oa_stream *stream, u32 head)
 {
-	if (oa_report_header_64bit(stream))
-		*(u64 *)report = 0;
-	else
-		*report = 0;
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
+	oa_report_header_64bit(stream) ?
+		xe_map_wr(stream->oa->xe, map, head, u64, 0) :
+		xe_map_wr(stream->oa->xe, map, head, u32, 0);
 }
 
-static u64 oa_timestamp(struct xe_oa_stream *stream, void *report)
+static u64 oa_timestamp(struct xe_oa_stream *stream, u32 tail)
 {
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
 	return oa_report_header_64bit(stream) ?
-		*((u64 *)report + 1) :
-		*((u32 *)report + 1);
+		xe_map_rd(stream->oa->xe, map, tail + 2, u64) :
+		xe_map_rd(stream->oa->xe, map, tail + 1, u32);
 }
 
-static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 *report)
+static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 head)
 {
-	if (oa_report_header_64bit(stream))
-		*(u64 *)&report[2] = 0;
-	else
-		report[1] = 0;
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+
+	oa_report_header_64bit(stream) ?
+		xe_map_wr(stream->oa->xe, map, head + 2, u64, 0) :
+		xe_map_wr(stream->oa->xe, map, head + 1, u32, 0);
 }
 
 static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
@@ -275,9 +283,7 @@ static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
 	 * they were written.  If not : (╯°□°)╯︵ ┻━┻
 	 */
 	while (xe_oa_circ_diff(stream, tail, stream->oa_buffer.tail) >= report_size) {
-		void *report = stream->oa_buffer.vaddr + tail;
-
-		if (oa_report_id(stream, report) || oa_timestamp(stream, report))
+		if (oa_report_id(stream, tail) || oa_timestamp(stream, tail))
 			break;
 
 		tail = xe_oa_circ_diff(stream, tail, report_size);
@@ -312,29 +318,28 @@ static enum hrtimer_restart xe_oa_poll_check_timer_cb(struct hrtimer *hrtimer)
 }
 
 static int xe_oa_append_report(struct xe_oa_stream *stream, char __user *buf,
-			       size_t count, size_t *offset, const u8 *report)
+			       size_t count, size_t *offset, u32 head)
 {
+	struct iosys_map *map = &stream->oa_buffer.bo->vmap;
 	int report_size = stream->oa_buffer.format->size;
+	struct xe_device *xe = stream->oa->xe;
 	int report_size_partial;
-	u8 *oa_buf_end;
 
 	if ((count - *offset) < report_size)
 		return -ENOSPC;
 
 	buf += *offset;
 
-	oa_buf_end = stream->oa_buffer.vaddr + stream->oa_buffer.circ_size;
-	report_size_partial = oa_buf_end - report;
+	report_size_partial = stream->oa_buffer.circ_size - head;
 
 	if (report_size_partial < report_size) {
-		if (copy_to_user(buf, report, report_size_partial))
+		if (xe_map_copy_to_user(xe, buf, map, head, report_size_partial))
 			return -EFAULT;
 		buf += report_size_partial;
 
-		if (copy_to_user(buf, stream->oa_buffer.vaddr,
-				 report_size - report_size_partial))
+		if (xe_map_copy_to_user(xe, buf, map, 0, report_size - report_size_partial))
 			return -EFAULT;
-	} else if (copy_to_user(buf, report, report_size)) {
+	} else if (xe_map_copy_to_user(xe, buf, map, head, report_size)) {
 		return -EFAULT;
 	}
 
@@ -347,7 +352,6 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
 				size_t count, size_t *offset)
 {
 	int report_size = stream->oa_buffer.format->size;
-	u8 *oa_buf_base = stream->oa_buffer.vaddr;
 	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
 	size_t start_offset = *offset;
 	unsigned long flags;
@@ -364,26 +368,24 @@ static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
 
 	for (; xe_oa_circ_diff(stream, tail, head);
 	     head = xe_oa_circ_incr(stream, head, report_size)) {
-		u8 *report = oa_buf_base + head;
-
-		ret = xe_oa_append_report(stream, buf, count, offset, report);
+		ret = xe_oa_append_report(stream, buf, count, offset, head);
 		if (ret)
 			break;
 
 		if (!(stream->oa_buffer.circ_size % report_size)) {
 			/* Clear out report id and timestamp to detect unlanded reports */
-			oa_report_id_clear(stream, (void *)report);
-			oa_timestamp_clear(stream, (void *)report);
+			oa_report_id_clear(stream, head);
+			oa_timestamp_clear(stream, head);
 		} else {
-			u8 *oa_buf_end = stream->oa_buffer.vaddr + stream->oa_buffer.circ_size;
-			u32 part = oa_buf_end - report;
+			struct iosys_map *map = &stream->oa_buffer.bo->vmap;
+			u32 part = stream->oa_buffer.circ_size - head;
 
 			/* Zero out the entire report */
 			if (report_size <= part) {
-				memset(report, 0, report_size);
+				xe_map_memset(stream->oa->xe, map, head, 0, report_size);
 			} else {
-				memset(report, 0, part);
-				memset(oa_buf_base, 0, report_size - part);
+				xe_map_memset(stream->oa->xe, map, head, 0, part);
+				xe_map_memset(stream->oa->xe, map, 0, 0, report_size - part);
 			}
 		}
 	}
@@ -436,7 +438,8 @@ static void xe_oa_init_oa_buffer(struct xe_oa_stream *stream)
 	spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
 
 	/* Zero out the OA buffer since we rely on zero report id and timestamp fields */
-	memset(stream->oa_buffer.vaddr, 0, xe_bo_size(stream->oa_buffer.bo));
+	xe_map_memset(stream->oa->xe, &stream->oa_buffer.bo->vmap, 0, 0,
+		      xe_bo_size(stream->oa_buffer.bo));
 }
 
 static u32 __format_to_oactrl(const struct xe_oa_format *format, int counter_sel_mask)
@@ -891,7 +894,6 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
 	stream->oa_buffer.bo = bo;
 	/* mmap implementation requires OA buffer to be in system memory */
 	xe_assert(stream->oa->xe, bo->vmap.is_iomem == 0);
-	stream->oa_buffer.vaddr = bo->vmap.vaddr;
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index b03ffd5134834..2dd550c93b8ac 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -162,9 +162,6 @@ struct xe_oa_buffer {
 	/** @format: xe_bo backing the OA buffer */
 	struct xe_bo *bo;
 
-	/** @vaddr: mapped vaddr of the OA buffer */
-	u8 *vaddr;
-
 	/** @ptr_lock: Lock protecting reads/writes to head/tail pointers */
 	spinlock_t ptr_lock;
 
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/3] drm/xe/oa: Use xe_map layer
  2026-04-09 23:17 ` [PATCH 1/3] drm/xe/oa: Use xe_map layer Ashutosh Dixit
@ 2026-04-11  0:49   ` Dixit, Ashutosh
  0 siblings, 0 replies; 15+ messages in thread
From: Dixit, Ashutosh @ 2026-04-11  0:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

On Thu, 09 Apr 2026 16:17:52 -0700, Ashutosh Dixit wrote:
>

Hi Umesh,

> +/* Because there is no iosys_map_copy_to_user() or copy_to_user_from_iomem() */
> +static int xe_oa_copy_to_user(struct xe_oa_stream *stream, void __user *dst, u32 head, u32 len)
> +{
> +	u32 __user *dptr = dst;
> +
> +	xe_gt_assert(stream->gt, len % 4 == 0);
> +
> +	for (int i = 0; i < len / 4; i++) {
> +		struct iosys_map *map = &stream->oa_buffer.bo->vmap;
> +		u32 val = xe_map_rd(stream->oa->xe, map, head, u32);
> +		int ret = put_user(val, dptr++);
> +
> +		if (ret)
> +			return ret;
> +		head += 4;
> +	}
> +
> +	return 0;
> +}

Unfortunately, with this copy_to_user() implementation we are seeing buffer
overflow, implying there is significant performance impact, even when OA
buffer is in system memory:

  Starting subtest: non-zero-reason
  Starting dynamic subtest: oag-0
  (xe_oa:6798) CRITICAL: Test assertion failure function test_non_zero_reason, file ../tests/intel/xe_oa.c:2693:
  (xe_oa:6798) CRITICAL: Failed assertion: !(oa_status & DRM_XE_OASTATUS_BUFFER_OVERFLOW)

That is, we are unable to read data at the rate at which HW is writing
data, causing buffer overrun.

Therefore in v3 I have basically reverted to the copy_to_user()
implementation of v1, except that I have taken the copy_to_user() out of
xe_oa.c and moved it to xe_map.h, to make that implementation "official"
(and OA code to strictly use the xe_map layer). This seems to be the best
approach to me, it avoids unnecessary copies and works correctly on all of
our systems of interest.

Also, the previous code, without this patch, is of course doing this exact
same thing, except that the use of the xe_map layer make these assumptions
explicit.

If you still don't think we should be doing this, I can try to get a second
opinion about this patch. Thanks.

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2026-04-11  0:49 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-07  3:02 [PATCH 0/3] drm/xe/oa: Wa_14026633728 Ashutosh Dixit
2026-04-07  3:02 ` [PATCH 1/3] drm/xe/oa: Use xe_map layer Ashutosh Dixit
2026-04-07 22:49   ` Umesh Nerlige Ramappa
2026-04-08 15:32     ` Dixit, Ashutosh
2026-04-08 18:21       ` Umesh Nerlige Ramappa
2026-04-07  3:02 ` [PATCH 2/3] drm/xe/oa: Use drm_gem_mmap_obj for OA buffer mmap Ashutosh Dixit
2026-04-07 22:52   ` Umesh Nerlige Ramappa
2026-04-07  3:02 ` [PATCH 3/3] drm/xe/oa: Implement Wa_14026633728 Ashutosh Dixit
2026-04-07 23:17   ` Umesh Nerlige Ramappa
2026-04-07  3:10 ` ✓ CI.KUnit: success for drm/xe/oa: Wa_14026633728 Patchwork
2026-04-07  3:51 ` ✓ Xe.CI.BAT: " Patchwork
2026-04-07  5:02 ` ✓ Xe.CI.FULL: " Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2026-04-09 23:17 [PATCH v2 0/3] " Ashutosh Dixit
2026-04-09 23:17 ` [PATCH 1/3] drm/xe/oa: Use xe_map layer Ashutosh Dixit
2026-04-11  0:49   ` Dixit, Ashutosh
2026-04-11  0:48 [PATCH v3 0/3] drm/xe/oa: Wa_14026633728 Ashutosh Dixit
2026-04-11  0:48 ` [PATCH 1/3] drm/xe/oa: Use xe_map layer Ashutosh Dixit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox