* [igt-dev] [PATCH i-g-t 01/12] drm-uapi/xe_drm: sync to get pat and coherency bits
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-09 22:03 ` Mishra, Pallavi
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 02/12] lib/igt_fb: mark buffers as SCANOUT Matthew Auld
` (13 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
Grab the PAT & coherency uapi additions.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
include/drm-uapi/xe_drm.h | 93 +++++++++++++++++++++++++++++++++++++--
1 file changed, 90 insertions(+), 3 deletions(-)
diff --git a/include/drm-uapi/xe_drm.h b/include/drm-uapi/xe_drm.h
index 804c02270..0a665f67f 100644
--- a/include/drm-uapi/xe_drm.h
+++ b/include/drm-uapi/xe_drm.h
@@ -456,8 +456,54 @@ struct drm_xe_gem_create {
*/
__u32 handle;
- /** @pad: MBZ */
- __u32 pad;
+ /**
+ * @coh_mode: The coherency mode for this object. This will limit the
+ * possible @cpu_caching values.
+ *
+ * Supported values:
+ *
+ * DRM_XE_GEM_COH_NONE: GPU access is assumed to be not coherent with
+ * CPU. CPU caches are not snooped.
+ *
+ * DRM_XE_GEM_COH_AT_LEAST_1WAY:
+ *
+ * CPU-GPU coherency must be at least 1WAY.
+ *
+ * If 1WAY then GPU access is coherent with CPU (CPU caches are snooped)
+ * until GPU acquires. The acquire by the GPU is not tracked by CPU
+ * caches.
+ *
+ * If 2WAY then should be fully coherent between GPU and CPU. Fully
+ * tracked by CPU caches. Both CPU and GPU caches are snooped.
+ *
+ * Note: On dgpu the GPU device never caches system memory. The device
+ * should be thought of as always 1WAY coherent, with the addition that
+ * the GPU never caches system memory. At least on current dgpu HW there
+ * is no way to turn off snooping so likely the different coherency
+ * modes of the pat_index make no difference for system memory.
+ */
+#define DRM_XE_GEM_COH_NONE 1
+#define DRM_XE_GEM_COH_AT_LEAST_1WAY 2
+ __u16 coh_mode;
+
+ /**
+ * @cpu_caching: The CPU caching mode to select for this object. If
+ * mmaping the object the mode selected here will also be used.
+ *
+ * Supported values:
+ *
+ * DRM_XE_GEM_CPU_CACHING_WB: Allocate the pages with write-back caching.
+ * On iGPU this can't be used for scanout surfaces. The @coh_mode must
+ * be DRM_XE_GEM_COH_AT_LEAST_1WAY. Currently not allowed for objects placed
+ * in VRAM.
+ *
+ * DRM_XE_GEM_CPU_CACHING_WC: Allocate the pages as write-combined. This is
+ * uncached. Any @coh_mode is permitted. Scanout surfaces should likely
+ * use this. All objects that can be placed in VRAM must use this.
+ */
+#define DRM_XE_GEM_CPU_CACHING_WB 1
+#define DRM_XE_GEM_CPU_CACHING_WC 2
+ __u16 cpu_caching;
/** @reserved: Reserved */
__u64 reserved[2];
@@ -552,8 +598,49 @@ struct drm_xe_vm_bind_op {
*/
__u32 obj;
+ /**
+ * @pat_index: The platform defined @pat_index to use for this mapping.
+ * The index basically maps to some predefined memory attributes,
+ * including things like caching, coherency, compression etc. The exact
+ * meaning of the pat_index is platform specific and defined in the
+ * Bspec and PRMs. When the KMD sets up the binding the index here is
+ * encoded into the ppGTT PTE.
+ *
+ * For coherency the @pat_index needs to be least as coherent as
+ * drm_xe_gem_create.coh_mode. i.e coh_mode(pat_index) >=
+ * drm_xe_gem_create.coh_mode. The KMD will extract the coherency mode
+ * from the @pat_index and reject if there is a mismatch (see note below
+ * for pre-MTL platforms).
+ *
+ * Note: On pre-MTL platforms there is only a caching mode and no
+ * explicit coherency mode, but on such hardware there is always a
+ * shared-LLC (or is dgpu) so all GT memory accesses are coherent with
+ * CPU caches even with the caching mode set as uncached. It's only the
+ * display engine that is incoherent (on dgpu it must be in VRAM which
+ * is always mapped as WC on the CPU). However to keep the uapi somewhat
+ * consistent with newer platforms the KMD groups the different cache
+ * levels into the following coherency buckets on all pre-MTL platforms:
+ *
+ * ppGTT UC -> DRM_XE_GEM_COH_NONE
+ * ppGTT WC -> DRM_XE_GEM_COH_NONE
+ * ppGTT WT -> DRM_XE_GEM_COH_NONE
+ * ppGTT WB -> DRM_XE_GEM_COH_AT_LEAST_1WAY
+ *
+ * In practice UC/WC/WT should only ever used for scanout surfaces on
+ * such platforms (or perhaps in general for dma-buf if shared with
+ * another device) since it is only the display engine that is actually
+ * incoherent. Everything else should typically use WB given that we
+ * have a shared-LLC. On MTL+ this completely changes and the HW
+ * defines the coherency mode as part of the @pat_index, where
+ * incoherent GT access is possible.
+ *
+ * Note: For userptr and externally imported dma-buf the kernel expects
+ * either 1WAY or 2WAY for the @pat_index.
+ */
+ __u16 pat_index;
+
/** @pad: MBZ */
- __u32 pad;
+ __u16 pad;
union {
/**
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [igt-dev] [PATCH i-g-t 01/12] drm-uapi/xe_drm: sync to get pat and coherency bits
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 01/12] drm-uapi/xe_drm: sync to get pat and coherency bits Matthew Auld
@ 2023-10-09 22:03 ` Mishra, Pallavi
0 siblings, 0 replies; 25+ messages in thread
From: Mishra, Pallavi @ 2023-10-09 22:03 UTC (permalink / raw)
To: Auld, Matthew, igt-dev@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: Auld, Matthew <matthew.auld@intel.com>
> Sent: Thursday, October 5, 2023 8:31 AM
> To: igt-dev@lists.freedesktop.org
> Cc: intel-xe@lists.freedesktop.org; Souza, Jose <jose.souza@intel.com>;
> Mishra, Pallavi <pallavi.mishra@intel.com>
> Subject: [PATCH i-g-t 01/12] drm-uapi/xe_drm: sync to get pat and coherency
> bits
>
> Grab the PAT & coherency uapi additions.
>
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Pallavi Mishra <pallavi.mishra@intel.com>
Reviewed-by: Pallavi Mishra <pallavi.mishra@intel.com>
> ---
> include/drm-uapi/xe_drm.h | 93
> +++++++++++++++++++++++++++++++++++++--
> 1 file changed, 90 insertions(+), 3 deletions(-)
>
> diff --git a/include/drm-uapi/xe_drm.h b/include/drm-uapi/xe_drm.h index
> 804c02270..0a665f67f 100644
> --- a/include/drm-uapi/xe_drm.h
> +++ b/include/drm-uapi/xe_drm.h
> @@ -456,8 +456,54 @@ struct drm_xe_gem_create {
> */
> __u32 handle;
>
> - /** @pad: MBZ */
> - __u32 pad;
> + /**
> + * @coh_mode: The coherency mode for this object. This will limit the
> + * possible @cpu_caching values.
> + *
> + * Supported values:
> + *
> + * DRM_XE_GEM_COH_NONE: GPU access is assumed to be not
> coherent with
> + * CPU. CPU caches are not snooped.
> + *
> + * DRM_XE_GEM_COH_AT_LEAST_1WAY:
> + *
> + * CPU-GPU coherency must be at least 1WAY.
> + *
> + * If 1WAY then GPU access is coherent with CPU (CPU caches are
> snooped)
> + * until GPU acquires. The acquire by the GPU is not tracked by CPU
> + * caches.
> + *
> + * If 2WAY then should be fully coherent between GPU and CPU. Fully
> + * tracked by CPU caches. Both CPU and GPU caches are snooped.
> + *
> + * Note: On dgpu the GPU device never caches system memory. The
> device
> + * should be thought of as always 1WAY coherent, with the addition
> that
> + * the GPU never caches system memory. At least on current dgpu HW
> there
> + * is no way to turn off snooping so likely the different coherency
> + * modes of the pat_index make no difference for system memory.
> + */
> +#define DRM_XE_GEM_COH_NONE 1
> +#define DRM_XE_GEM_COH_AT_LEAST_1WAY 2
> + __u16 coh_mode;
> +
> + /**
> + * @cpu_caching: The CPU caching mode to select for this object. If
> + * mmaping the object the mode selected here will also be used.
> + *
> + * Supported values:
> + *
> + * DRM_XE_GEM_CPU_CACHING_WB: Allocate the pages with write-
> back caching.
> + * On iGPU this can't be used for scanout surfaces. The @coh_mode
> must
> + * be DRM_XE_GEM_COH_AT_LEAST_1WAY. Currently not allowed for
> objects placed
> + * in VRAM.
> + *
> + * DRM_XE_GEM_CPU_CACHING_WC: Allocate the pages as write-
> combined. This is
> + * uncached. Any @coh_mode is permitted. Scanout surfaces should
> likely
> + * use this. All objects that can be placed in VRAM must use this.
> + */
> +#define DRM_XE_GEM_CPU_CACHING_WB 1
> +#define DRM_XE_GEM_CPU_CACHING_WC 2
> + __u16 cpu_caching;
>
> /** @reserved: Reserved */
> __u64 reserved[2];
> @@ -552,8 +598,49 @@ struct drm_xe_vm_bind_op {
> */
> __u32 obj;
>
> + /**
> + * @pat_index: The platform defined @pat_index to use for this
> mapping.
> + * The index basically maps to some predefined memory attributes,
> + * including things like caching, coherency, compression etc. The exact
> + * meaning of the pat_index is platform specific and defined in the
> + * Bspec and PRMs. When the KMD sets up the binding the index here
> is
> + * encoded into the ppGTT PTE.
> + *
> + * For coherency the @pat_index needs to be least as coherent as
> + * drm_xe_gem_create.coh_mode. i.e coh_mode(pat_index) >=
> + * drm_xe_gem_create.coh_mode. The KMD will extract the coherency
> mode
> + * from the @pat_index and reject if there is a mismatch (see note
> below
> + * for pre-MTL platforms).
> + *
> + * Note: On pre-MTL platforms there is only a caching mode and no
> + * explicit coherency mode, but on such hardware there is always a
> + * shared-LLC (or is dgpu) so all GT memory accesses are coherent with
> + * CPU caches even with the caching mode set as uncached. It's only
> the
> + * display engine that is incoherent (on dgpu it must be in VRAM which
> + * is always mapped as WC on the CPU). However to keep the uapi
> somewhat
> + * consistent with newer platforms the KMD groups the different cache
> + * levels into the following coherency buckets on all pre-MTL platforms:
> + *
> + * ppGTT UC -> DRM_XE_GEM_COH_NONE
> + * ppGTT WC -> DRM_XE_GEM_COH_NONE
> + * ppGTT WT -> DRM_XE_GEM_COH_NONE
> + * ppGTT WB -> DRM_XE_GEM_COH_AT_LEAST_1WAY
> + *
> + * In practice UC/WC/WT should only ever used for scanout surfaces
> on
> + * such platforms (or perhaps in general for dma-buf if shared with
> + * another device) since it is only the display engine that is actually
> + * incoherent. Everything else should typically use WB given that we
> + * have a shared-LLC. On MTL+ this completely changes and the HW
> + * defines the coherency mode as part of the @pat_index, where
> + * incoherent GT access is possible.
> + *
> + * Note: For userptr and externally imported dma-buf the kernel
> expects
> + * either 1WAY or 2WAY for the @pat_index.
> + */
> + __u16 pat_index;
> +
> /** @pad: MBZ */
> - __u32 pad;
> + __u16 pad;
>
> union {
> /**
> --
> 2.41.0
^ permalink raw reply [flat|nested] 25+ messages in thread
* [igt-dev] [PATCH i-g-t 02/12] lib/igt_fb: mark buffers as SCANOUT
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 01/12] drm-uapi/xe_drm: sync to get pat and coherency bits Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-09 22:03 ` Mishra, Pallavi
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 03/12] lib/igt_draw: " Matthew Auld
` (12 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
Display buffers likely will want WC, instead of the default WB on the
CPU side, given that display engine is incoherent with CPU caches.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
lib/igt_fb.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index 54a66eb6a..f8a0db22c 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -1206,7 +1206,8 @@ static int create_bo_for_fb(struct igt_fb *fb, bool prefer_sysmem)
igt_assert(err == 0 || err == -EOPNOTSUPP);
} else if (is_xe_device(fd)) {
fb->gem_handle = xe_bo_create_flags(fd, 0, fb->size,
- visible_vram_if_possible(fd, 0));
+ visible_vram_if_possible(fd, 0) |
+ XE_GEM_CREATE_FLAG_SCANOUT);
} else if (is_vc4_device(fd)) {
fb->gem_handle = igt_vc4_create_bo(fd, fb->size);
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [igt-dev] [PATCH i-g-t 02/12] lib/igt_fb: mark buffers as SCANOUT
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 02/12] lib/igt_fb: mark buffers as SCANOUT Matthew Auld
@ 2023-10-09 22:03 ` Mishra, Pallavi
0 siblings, 0 replies; 25+ messages in thread
From: Mishra, Pallavi @ 2023-10-09 22:03 UTC (permalink / raw)
To: Auld, Matthew, igt-dev@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: Auld, Matthew <matthew.auld@intel.com>
> Sent: Thursday, October 5, 2023 8:31 AM
> To: igt-dev@lists.freedesktop.org
> Cc: intel-xe@lists.freedesktop.org; Souza, Jose <jose.souza@intel.com>;
> Mishra, Pallavi <pallavi.mishra@intel.com>
> Subject: [PATCH i-g-t 02/12] lib/igt_fb: mark buffers as SCANOUT
>
> Display buffers likely will want WC, instead of the default WB on the CPU side,
> given that display engine is incoherent with CPU caches.
>
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Pallavi Mishra <pallavi.mishra@intel.com>
Reviewed-by: Pallavi Mishra <pallavi.mishra@intel.com>
> ---
> lib/igt_fb.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 54a66eb6a..f8a0db22c 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -1206,7 +1206,8 @@ static int create_bo_for_fb(struct igt_fb *fb, bool
> prefer_sysmem)
> igt_assert(err == 0 || err == -EOPNOTSUPP);
> } else if (is_xe_device(fd)) {
> fb->gem_handle = xe_bo_create_flags(fd, 0, fb->size,
> -
> visible_vram_if_possible(fd, 0));
> +
> visible_vram_if_possible(fd, 0) |
> +
> XE_GEM_CREATE_FLAG_SCANOUT);
> } else if (is_vc4_device(fd)) {
> fb->gem_handle = igt_vc4_create_bo(fd, fb->size);
>
> --
> 2.41.0
^ permalink raw reply [flat|nested] 25+ messages in thread
* [igt-dev] [PATCH i-g-t 03/12] lib/igt_draw: mark buffers as SCANOUT
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 01/12] drm-uapi/xe_drm: sync to get pat and coherency bits Matthew Auld
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 02/12] lib/igt_fb: mark buffers as SCANOUT Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-09 22:03 ` Mishra, Pallavi
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 04/12] lib/xe: support cpu_caching and coh_mod for gem_create Matthew Auld
` (11 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
Display buffers likely will want WC, instead of the default WB on the
CPU side, given that display engine is incoherent with CPU caches.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
lib/igt_draw.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/igt_draw.c b/lib/igt_draw.c
index 476778a13..2332bf94a 100644
--- a/lib/igt_draw.c
+++ b/lib/igt_draw.c
@@ -791,7 +791,8 @@ static void draw_rect_render(int fd, struct cmd_data *cmd_data,
else
tmp.handle = xe_bo_create_flags(fd, 0,
ALIGN(tmp.size, xe_get_default_alignment(fd)),
- visible_vram_if_possible(fd, 0));
+ visible_vram_if_possible(fd, 0) |
+ XE_GEM_CREATE_FLAG_SCANOUT);
tmp.stride = rect->w * pixel_size;
tmp.bpp = buf->bpp;
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [igt-dev] [PATCH i-g-t 03/12] lib/igt_draw: mark buffers as SCANOUT
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 03/12] lib/igt_draw: " Matthew Auld
@ 2023-10-09 22:03 ` Mishra, Pallavi
0 siblings, 0 replies; 25+ messages in thread
From: Mishra, Pallavi @ 2023-10-09 22:03 UTC (permalink / raw)
To: Auld, Matthew, igt-dev@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: Auld, Matthew <matthew.auld@intel.com>
> Sent: Thursday, October 5, 2023 8:31 AM
> To: igt-dev@lists.freedesktop.org
> Cc: intel-xe@lists.freedesktop.org; Souza, Jose <jose.souza@intel.com>;
> Mishra, Pallavi <pallavi.mishra@intel.com>
> Subject: [PATCH i-g-t 03/12] lib/igt_draw: mark buffers as SCANOUT
>
> Display buffers likely will want WC, instead of the default WB on the CPU side,
> given that display engine is incoherent with CPU caches.
>
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Pallavi Mishra <pallavi.mishra@intel.com>
Reviewed-by: Pallavi Mishra <pallavi.mishra@intel.com>
> ---
> lib/igt_draw.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/lib/igt_draw.c b/lib/igt_draw.c index 476778a13..2332bf94a
> 100644
> --- a/lib/igt_draw.c
> +++ b/lib/igt_draw.c
> @@ -791,7 +791,8 @@ static void draw_rect_render(int fd, struct cmd_data
> *cmd_data,
> else
> tmp.handle = xe_bo_create_flags(fd, 0,
> ALIGN(tmp.size,
> xe_get_default_alignment(fd)),
> - visible_vram_if_possible(fd,
> 0));
> + visible_vram_if_possible(fd,
> 0) |
> +
> XE_GEM_CREATE_FLAG_SCANOUT);
>
> tmp.stride = rect->w * pixel_size;
> tmp.bpp = buf->bpp;
> --
> 2.41.0
^ permalink raw reply [flat|nested] 25+ messages in thread
* [igt-dev] [PATCH i-g-t 04/12] lib/xe: support cpu_caching and coh_mod for gem_create
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (2 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 03/12] lib/igt_draw: " Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-09 22:04 ` Mishra, Pallavi
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 05/12] tests/xe/mmap: add some tests for cpu_caching and coh_mode Matthew Auld
` (10 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
Most tests shouldn't about such things, so likely it's just a case of
picking the most sane default. However we also add some helpers for the
tests that do care.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
lib/xe/xe_ioctl.c | 65 ++++++++++++++++++++++++++++++++++-------
lib/xe/xe_ioctl.h | 8 +++++
tests/intel/xe_create.c | 3 ++
3 files changed, 65 insertions(+), 11 deletions(-)
diff --git a/lib/xe/xe_ioctl.c b/lib/xe/xe_ioctl.c
index 730dcfd16..80696aa59 100644
--- a/lib/xe/xe_ioctl.c
+++ b/lib/xe/xe_ioctl.c
@@ -233,13 +233,30 @@ void xe_vm_destroy(int fd, uint32_t vm)
igt_assert_eq(igt_ioctl(fd, DRM_IOCTL_XE_VM_DESTROY, &destroy), 0);
}
-uint32_t __xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags,
- uint32_t *handle)
+void __xe_default_coh_caching_from_flags(int fd, uint32_t flags,
+ uint16_t *cpu_caching,
+ uint16_t *coh_mode)
+{
+ if ((flags & all_memory_regions(fd)) != system_memory(fd) ||
+ flags & XE_GEM_CREATE_FLAG_SCANOUT) {
+ /* VRAM placements or scanout should always use WC */
+ *cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
+ *coh_mode = DRM_XE_GEM_COH_NONE;
+ } else {
+ *cpu_caching = DRM_XE_GEM_CPU_CACHING_WB;
+ *coh_mode = DRM_XE_GEM_COH_AT_LEAST_1WAY;
+ }
+}
+
+static uint32_t ___xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags,
+ uint16_t cpu_caching, uint16_t coh_mode, uint32_t *handle)
{
struct drm_xe_gem_create create = {
.vm_id = vm,
.size = size,
.flags = flags,
+ .cpu_caching = cpu_caching,
+ .coh_mode = coh_mode,
};
int err;
@@ -249,6 +266,18 @@ uint32_t __xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags
*handle = create.handle;
return 0;
+
+}
+
+uint32_t __xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags,
+ uint32_t *handle)
+{
+ uint16_t cpu_caching, coh_mode;
+
+ __xe_default_coh_caching_from_flags(fd, flags, &cpu_caching, &coh_mode);
+
+ return ___xe_bo_create_flags(fd, vm, size, flags, cpu_caching, coh_mode,
+ handle);
}
uint32_t xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags)
@@ -260,19 +289,33 @@ uint32_t xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags)
return handle;
}
+uint32_t __xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t flags,
+ uint16_t cpu_caching, uint16_t coh_mode,
+ uint32_t *handle)
+{
+ return ___xe_bo_create_flags(fd, vm, size, flags, cpu_caching, coh_mode,
+ handle);
+}
+
+uint32_t xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t flags,
+ uint16_t cpu_caching, uint16_t coh_mode)
+{
+ uint32_t handle;
+
+ igt_assert_eq(__xe_bo_create_caching(fd, vm, size, flags,
+ cpu_caching, coh_mode, &handle), 0);
+
+ return handle;
+}
+
uint32_t xe_bo_create(int fd, int gt, uint32_t vm, uint64_t size)
{
- struct drm_xe_gem_create create = {
- .vm_id = vm,
- .size = size,
- .flags = vram_if_possible(fd, gt),
- };
- int err;
+ uint32_t handle;
- err = igt_ioctl(fd, DRM_IOCTL_XE_GEM_CREATE, &create);
- igt_assert_eq(err, 0);
+ igt_assert_eq(__xe_bo_create_flags(fd, vm, size, vram_if_possible(fd, gt),
+ &handle), 0);
- return create.handle;
+ return handle;
}
uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext)
diff --git a/lib/xe/xe_ioctl.h b/lib/xe/xe_ioctl.h
index 6c281b3bf..c18fc878c 100644
--- a/lib/xe/xe_ioctl.h
+++ b/lib/xe/xe_ioctl.h
@@ -67,6 +67,14 @@ void xe_vm_destroy(int fd, uint32_t vm);
uint32_t __xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags,
uint32_t *handle);
uint32_t xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags);
+uint32_t __xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t flags,
+ uint16_t cpu_caching, uint16_t coh_mode,
+ uint32_t *handle);
+uint32_t xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t flags,
+ uint16_t cpu_caching, uint16_t coh_mode);
+void __xe_default_coh_caching_from_flags(int fd, uint32_t flags,
+ uint16_t *cpu_caching,
+ uint16_t *coh_mode);
uint32_t xe_bo_create(int fd, int gt, uint32_t vm, uint64_t size);
uint32_t xe_exec_queue_create(int fd, uint32_t vm,
struct drm_xe_engine_class_instance *instance,
diff --git a/tests/intel/xe_create.c b/tests/intel/xe_create.c
index 8d845e5c8..f5d2cc1b2 100644
--- a/tests/intel/xe_create.c
+++ b/tests/intel/xe_create.c
@@ -30,6 +30,9 @@ static int __create_bo(int fd, uint32_t vm, uint64_t size, uint32_t flags,
igt_assert(handlep);
+ __xe_default_coh_caching_from_flags(fd, flags, &create.cpu_caching,
+ &create.coh_mode);
+
if (igt_ioctl(fd, DRM_IOCTL_XE_GEM_CREATE, &create)) {
ret = -errno;
errno = 0;
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [igt-dev] [PATCH i-g-t 04/12] lib/xe: support cpu_caching and coh_mod for gem_create
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 04/12] lib/xe: support cpu_caching and coh_mod for gem_create Matthew Auld
@ 2023-10-09 22:04 ` Mishra, Pallavi
0 siblings, 0 replies; 25+ messages in thread
From: Mishra, Pallavi @ 2023-10-09 22:04 UTC (permalink / raw)
To: Auld, Matthew, igt-dev@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: Auld, Matthew <matthew.auld@intel.com>
> Sent: Thursday, October 5, 2023 8:31 AM
> To: igt-dev@lists.freedesktop.org
> Cc: intel-xe@lists.freedesktop.org; Souza, Jose <jose.souza@intel.com>;
> Mishra, Pallavi <pallavi.mishra@intel.com>
> Subject: [PATCH i-g-t 04/12] lib/xe: support cpu_caching and coh_mod for
> gem_create
>
> Most tests shouldn't about such things, so likely it's just a case of picking the
> most sane default. However we also add some helpers for the tests that do
> care.
>
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Pallavi Mishra <pallavi.mishra@intel.com>
Reviewed-by: Pallavi Mishra <pallavi.mishra@intel.com>
> ---
> lib/xe/xe_ioctl.c | 65 ++++++++++++++++++++++++++++++++++-------
> lib/xe/xe_ioctl.h | 8 +++++
> tests/intel/xe_create.c | 3 ++
> 3 files changed, 65 insertions(+), 11 deletions(-)
>
> diff --git a/lib/xe/xe_ioctl.c b/lib/xe/xe_ioctl.c index 730dcfd16..80696aa59
> 100644
> --- a/lib/xe/xe_ioctl.c
> +++ b/lib/xe/xe_ioctl.c
> @@ -233,13 +233,30 @@ void xe_vm_destroy(int fd, uint32_t vm)
> igt_assert_eq(igt_ioctl(fd, DRM_IOCTL_XE_VM_DESTROY, &destroy),
> 0); }
>
> -uint32_t __xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t
> flags,
> - uint32_t *handle)
> +void __xe_default_coh_caching_from_flags(int fd, uint32_t flags,
> + uint16_t *cpu_caching,
> + uint16_t *coh_mode)
> +{
> + if ((flags & all_memory_regions(fd)) != system_memory(fd) ||
> + flags & XE_GEM_CREATE_FLAG_SCANOUT) {
> + /* VRAM placements or scanout should always use WC */
> + *cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
> + *coh_mode = DRM_XE_GEM_COH_NONE;
> + } else {
> + *cpu_caching = DRM_XE_GEM_CPU_CACHING_WB;
> + *coh_mode = DRM_XE_GEM_COH_AT_LEAST_1WAY;
> + }
> +}
> +
> +static uint32_t ___xe_bo_create_flags(int fd, uint32_t vm, uint64_t size,
> uint32_t flags,
> + uint16_t cpu_caching, uint16_t coh_mode,
> uint32_t *handle)
> {
> struct drm_xe_gem_create create = {
> .vm_id = vm,
> .size = size,
> .flags = flags,
> + .cpu_caching = cpu_caching,
> + .coh_mode = coh_mode,
> };
> int err;
>
> @@ -249,6 +266,18 @@ uint32_t __xe_bo_create_flags(int fd, uint32_t vm,
> uint64_t size, uint32_t flags
>
> *handle = create.handle;
> return 0;
> +
> +}
> +
> +uint32_t __xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t
> flags,
> + uint32_t *handle)
> +{
> + uint16_t cpu_caching, coh_mode;
> +
> + __xe_default_coh_caching_from_flags(fd, flags, &cpu_caching,
> +&coh_mode);
> +
> + return ___xe_bo_create_flags(fd, vm, size, flags, cpu_caching,
> coh_mode,
> + handle);
> }
>
> uint32_t xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags)
> @@ -260,19 +289,33 @@ uint32_t xe_bo_create_flags(int fd, uint32_t vm,
> uint64_t size, uint32_t flags)
> return handle;
> }
>
> +uint32_t __xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t
> flags,
> + uint16_t cpu_caching, uint16_t coh_mode,
> + uint32_t *handle)
> +{
> + return ___xe_bo_create_flags(fd, vm, size, flags, cpu_caching,
> coh_mode,
> + handle);
> +}
> +
> +uint32_t xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t
> flags,
> + uint16_t cpu_caching, uint16_t coh_mode) {
> + uint32_t handle;
> +
> + igt_assert_eq(__xe_bo_create_caching(fd, vm, size, flags,
> + cpu_caching, coh_mode, &handle),
> 0);
> +
> + return handle;
> +}
> +
> uint32_t xe_bo_create(int fd, int gt, uint32_t vm, uint64_t size) {
> - struct drm_xe_gem_create create = {
> - .vm_id = vm,
> - .size = size,
> - .flags = vram_if_possible(fd, gt),
> - };
> - int err;
> + uint32_t handle;
>
> - err = igt_ioctl(fd, DRM_IOCTL_XE_GEM_CREATE, &create);
> - igt_assert_eq(err, 0);
> + igt_assert_eq(__xe_bo_create_flags(fd, vm, size, vram_if_possible(fd,
> gt),
> + &handle), 0);
>
> - return create.handle;
> + return handle;
> }
>
> uint32_t xe_bind_exec_queue_create(int fd, uint32_t vm, uint64_t ext) diff --
> git a/lib/xe/xe_ioctl.h b/lib/xe/xe_ioctl.h index 6c281b3bf..c18fc878c 100644
> --- a/lib/xe/xe_ioctl.h
> +++ b/lib/xe/xe_ioctl.h
> @@ -67,6 +67,14 @@ void xe_vm_destroy(int fd, uint32_t vm); uint32_t
> __xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t flags,
> uint32_t *handle);
> uint32_t xe_bo_create_flags(int fd, uint32_t vm, uint64_t size, uint32_t
> flags);
> +uint32_t __xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t
> flags,
> + uint16_t cpu_caching, uint16_t coh_mode,
> + uint32_t *handle);
> +uint32_t xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t
> flags,
> + uint16_t cpu_caching, uint16_t coh_mode); void
> +__xe_default_coh_caching_from_flags(int fd, uint32_t flags,
> + uint16_t *cpu_caching,
> + uint16_t *coh_mode);
> uint32_t xe_bo_create(int fd, int gt, uint32_t vm, uint64_t size); uint32_t
> xe_exec_queue_create(int fd, uint32_t vm,
> struct drm_xe_engine_class_instance *instance, diff -
> -git a/tests/intel/xe_create.c b/tests/intel/xe_create.c index
> 8d845e5c8..f5d2cc1b2 100644
> --- a/tests/intel/xe_create.c
> +++ b/tests/intel/xe_create.c
> @@ -30,6 +30,9 @@ static int __create_bo(int fd, uint32_t vm, uint64_t size,
> uint32_t flags,
>
> igt_assert(handlep);
>
> + __xe_default_coh_caching_from_flags(fd, flags, &create.cpu_caching,
> + &create.coh_mode);
> +
> if (igt_ioctl(fd, DRM_IOCTL_XE_GEM_CREATE, &create)) {
> ret = -errno;
> errno = 0;
> --
> 2.41.0
^ permalink raw reply [flat|nested] 25+ messages in thread
* [igt-dev] [PATCH i-g-t 05/12] tests/xe/mmap: add some tests for cpu_caching and coh_mode
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (3 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 04/12] lib/xe: support cpu_caching and coh_mod for gem_create Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 06/12] lib/intel_pat: add helpers for common pat_index modes Matthew Auld
` (9 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
Ensure the various invalid combinations are rejected. Also ensure we can
mmap and fault anything that is valid.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
tests/intel/xe_mmap.c | 77 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/tests/intel/xe_mmap.c b/tests/intel/xe_mmap.c
index 7e7e43c00..09e9c8aae 100644
--- a/tests/intel/xe_mmap.c
+++ b/tests/intel/xe_mmap.c
@@ -199,6 +199,80 @@ static void test_small_bar(int fd)
gem_close(fd, bo);
}
+static void assert_caching(int fd, uint64_t flags, uint16_t cpu_caching,
+ uint16_t coh_mode, bool fail)
+{
+ uint64_t size = xe_get_default_alignment(fd);
+ uint64_t mmo;
+ uint32_t handle;
+ uint32_t *map;
+ bool ret;
+
+ ret = __xe_bo_create_caching(fd, 0, size, flags, cpu_caching,
+ coh_mode, &handle);
+ igt_assert(ret == fail);
+
+ if (fail)
+ return;
+
+ mmo = xe_bo_mmap_offset(fd, handle);
+ map = mmap(NULL, size, PROT_WRITE, MAP_SHARED, fd, mmo);
+ igt_assert(map != MAP_FAILED);
+ map[0] = 0xdeadbeaf;
+ gem_close(fd, handle);
+}
+
+/**
+ * SUBTEST: cpu-caching-coh
+ * Description: Test cpu_caching and coh, including mmap behaviour.
+ * Test category: functionality test
+ */
+static void test_cpu_caching(int fd)
+{
+ if (vram_memory(fd, 0)) {
+ assert_caching(fd, vram_memory(fd, 0),
+ DRM_XE_GEM_CPU_CACHING_WC, DRM_XE_GEM_COH_NONE,
+ false);
+ assert_caching(fd, vram_memory(fd, 0),
+ DRM_XE_GEM_CPU_CACHING_WC, DRM_XE_GEM_COH_AT_LEAST_1WAY,
+ false);
+ assert_caching(fd, vram_memory(fd, 0) | system_memory(fd),
+ DRM_XE_GEM_CPU_CACHING_WC, DRM_XE_GEM_COH_NONE,
+ false);
+
+ assert_caching(fd, vram_memory(fd, 0),
+ DRM_XE_GEM_CPU_CACHING_WB, DRM_XE_GEM_COH_NONE,
+ true);
+ assert_caching(fd, vram_memory(fd, 0),
+ DRM_XE_GEM_CPU_CACHING_WB, DRM_XE_GEM_COH_AT_LEAST_1WAY,
+ true);
+ assert_caching(fd, vram_memory(fd, 0) | system_memory(fd),
+ DRM_XE_GEM_CPU_CACHING_WB, DRM_XE_GEM_COH_NONE,
+ true);
+ assert_caching(fd, vram_memory(fd, 0) | system_memory(fd),
+ DRM_XE_GEM_CPU_CACHING_WB, DRM_XE_GEM_COH_AT_LEAST_1WAY,
+ true);
+ }
+
+ assert_caching(fd, system_memory(fd), DRM_XE_GEM_CPU_CACHING_WB,
+ DRM_XE_GEM_COH_AT_LEAST_1WAY, false);
+ assert_caching(fd, system_memory(fd), DRM_XE_GEM_CPU_CACHING_WC,
+ DRM_XE_GEM_COH_NONE, false);
+ assert_caching(fd, system_memory(fd), DRM_XE_GEM_CPU_CACHING_WC,
+ DRM_XE_GEM_COH_AT_LEAST_1WAY, false);
+
+ assert_caching(fd, system_memory(fd), DRM_XE_GEM_CPU_CACHING_WB,
+ DRM_XE_GEM_COH_NONE, true);
+ assert_caching(fd, system_memory(fd), -1, -1, true);
+ assert_caching(fd, system_memory(fd), 0, 0, true);
+ assert_caching(fd, system_memory(fd), 0, DRM_XE_GEM_COH_AT_LEAST_1WAY, true);
+ assert_caching(fd, system_memory(fd), DRM_XE_GEM_CPU_CACHING_WC, 0, true);
+ assert_caching(fd, system_memory(fd), DRM_XE_GEM_CPU_CACHING_WC + 1,
+ DRM_XE_GEM_COH_AT_LEAST_1WAY, true);
+ assert_caching(fd, system_memory(fd), DRM_XE_GEM_CPU_CACHING_WC,
+ DRM_XE_GEM_COH_AT_LEAST_1WAY + 1, true);
+}
+
igt_main
{
int fd;
@@ -230,6 +304,9 @@ igt_main
test_small_bar(fd);
}
+ igt_subtest("cpu-caching-coh")
+ test_cpu_caching(fd);
+
igt_fixture
drm_close_driver(fd);
}
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* [igt-dev] [PATCH i-g-t 06/12] lib/intel_pat: add helpers for common pat_index modes
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (4 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 05/12] tests/xe/mmap: add some tests for cpu_caching and coh_mode Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 07/12] lib/allocator: add get_offset_pat_index() helper Matthew Auld
` (8 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
For now just add uc, wt and wb for every platform. The wb mode should
always be at least 1way coherent, if messing around with system memory.
Also make non-matching platforms throw an error rather than trying to
inherit the modes from previous platforms since they will likely be
different.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
lib/intel_pat.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++
lib/intel_pat.h | 19 ++++++++++++
lib/meson.build | 1 +
3 files changed, 97 insertions(+)
create mode 100644 lib/intel_pat.c
create mode 100644 lib/intel_pat.h
diff --git a/lib/intel_pat.c b/lib/intel_pat.c
new file mode 100644
index 000000000..4d19d57ea
--- /dev/null
+++ b/lib/intel_pat.c
@@ -0,0 +1,77 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include "intel_pat.h"
+
+#include "igt.h"
+
+struct intel_pat_cache {
+ uint8_t uc; /* UC + COH_NONE */
+ uint8_t wt; /* WT + COH_NONE */
+ uint8_t wb; /* WB + COH_AT_LEAST_1WAY */
+
+ uint8_t max_index;
+};
+
+static void intel_get_pat_idx(int fd, struct intel_pat_cache *pat)
+{
+ uint16_t dev_id = intel_get_drm_devid(fd);
+
+ if (intel_graphics_ver(dev_id) == IP_VER(20, 0)) {
+ pat->uc = 3;
+ pat->wt = 15;
+ pat->wb = 2;
+ pat->max_index = 31;
+ } else if (IS_METEORLAKE(dev_id)) {
+ pat->uc = 2;
+ pat->wt = 1;
+ pat->wb = 3;
+ pat->max_index = 3;
+ } else if (IS_PONTEVECCHIO(dev_id)) {
+ pat->uc = 0;
+ pat->wt = 2;
+ pat->wb = 3;
+ pat->max_index = 7;
+ } else if (intel_graphics_ver(dev_id) <= IP_VER(12, 60)) {
+ pat->uc = 3;
+ pat->wt = 2;
+ pat->wb = 0;
+ pat->max_index = 3;
+ } else {
+ igt_critical("Platform is missing PAT settings for uc/wt/wb\n");
+ }
+}
+
+uint8_t intel_get_max_pat_index(int fd)
+{
+ struct intel_pat_cache pat = {};
+
+ intel_get_pat_idx(fd, &pat);
+ return pat.max_index;
+}
+
+uint8_t intel_get_pat_idx_uc(int fd)
+{
+ struct intel_pat_cache pat = {};
+
+ intel_get_pat_idx(fd, &pat);
+ return pat.uc;
+}
+
+uint8_t intel_get_pat_idx_wt(int fd)
+{
+ struct intel_pat_cache pat = {};
+
+ intel_get_pat_idx(fd, &pat);
+ return pat.wt;
+}
+
+uint8_t intel_get_pat_idx_wb(int fd)
+{
+ struct intel_pat_cache pat = {};
+
+ intel_get_pat_idx(fd, &pat);
+ return pat.wb;
+}
diff --git a/lib/intel_pat.h b/lib/intel_pat.h
new file mode 100644
index 000000000..c24dbc275
--- /dev/null
+++ b/lib/intel_pat.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef INTEL_PAT_H
+#define INTEL_PAT_H
+
+#include <stdint.h>
+
+#define DEFAULT_PAT_INDEX ((uint8_t)-1) /* igt-core can pick 1way or better */
+
+uint8_t intel_get_max_pat_index(int fd);
+
+uint8_t intel_get_pat_idx_uc(int fd);
+uint8_t intel_get_pat_idx_wt(int fd);
+uint8_t intel_get_pat_idx_wb(int fd);
+
+#endif /* INTEL_PAT_H */
diff --git a/lib/meson.build b/lib/meson.build
index a7bccafc3..48466a2e9 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -64,6 +64,7 @@ lib_sources = [
'intel_device_info.c',
'intel_mmio.c',
'intel_mocs.c',
+ 'intel_pat.c',
'ioctl_wrappers.c',
'media_spin.c',
'media_fill.c',
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* [igt-dev] [PATCH i-g-t 07/12] lib/allocator: add get_offset_pat_index() helper
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (5 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 06/12] lib/intel_pat: add helpers for common pat_index modes Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-06 11:38 ` [igt-dev] [Intel-xe] " Zbigniew Kempczyński
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 08/12] lib/intel_blt: support pat_index Matthew Auld
` (7 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
For some cases we are going to need to pass the pat_index for the
vm_bind op. Add a helper for this, such that we can allocate an address
and give the mapping some pat_index.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
lib/intel_allocator.c | 43 +++++++++++++++++++++++--------
lib/intel_allocator.h | 5 +++-
lib/xe/xe_util.c | 1 +
lib/xe/xe_util.h | 1 +
tests/intel/api_intel_allocator.c | 4 ++-
5 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/lib/intel_allocator.c b/lib/intel_allocator.c
index f0a9b7fb5..da357b833 100644
--- a/lib/intel_allocator.c
+++ b/lib/intel_allocator.c
@@ -16,6 +16,7 @@
#include "igt_map.h"
#include "intel_allocator.h"
#include "intel_allocator_msgchannel.h"
+#include "intel_pat.h"
#include "xe/xe_query.h"
#include "xe/xe_util.h"
@@ -92,6 +93,7 @@ struct allocator_object {
uint32_t handle;
uint64_t offset;
uint64_t size;
+ uint8_t pat_index;
enum allocator_bind_op bind_op;
};
@@ -1122,14 +1124,14 @@ void intel_allocator_get_address_range(uint64_t allocator_handle,
static bool is_same(struct allocator_object *obj,
uint32_t handle, uint64_t offset, uint64_t size,
- enum allocator_bind_op bind_op)
+ uint8_t pat_index, enum allocator_bind_op bind_op)
{
return obj->handle == handle && obj->offset == offset && obj->size == size &&
- (obj->bind_op == bind_op || obj->bind_op == BOUND);
+ obj->pat_index == pat_index && (obj->bind_op == bind_op || obj->bind_op == BOUND);
}
static void track_object(uint64_t allocator_handle, uint32_t handle,
- uint64_t offset, uint64_t size,
+ uint64_t offset, uint64_t size, uint8_t pat_index,
enum allocator_bind_op bind_op)
{
struct ahnd_info *ainfo;
@@ -1156,6 +1158,9 @@ static void track_object(uint64_t allocator_handle, uint32_t handle,
if (ainfo->driver == INTEL_DRIVER_I915)
return; /* no-op for i915, at least for now */
+ if (pat_index == DEFAULT_PAT_INDEX)
+ pat_index = intel_get_pat_idx_wb(ainfo->fd);
+
pthread_mutex_lock(&ainfo->bind_map_mutex);
obj = igt_map_search(ainfo->bind_map, &handle);
if (obj) {
@@ -1165,7 +1170,7 @@ static void track_object(uint64_t allocator_handle, uint32_t handle,
* bind_map.
*/
if (bind_op == TO_BIND) {
- igt_assert_eq(is_same(obj, handle, offset, size, bind_op), true);
+ igt_assert_eq(is_same(obj, handle, offset, size, pat_index, bind_op), true);
} else if (bind_op == TO_UNBIND) {
if (obj->bind_op == TO_BIND)
igt_map_remove(ainfo->bind_map, &obj->handle, map_entry_free_func);
@@ -1181,6 +1186,7 @@ static void track_object(uint64_t allocator_handle, uint32_t handle,
obj->handle = handle;
obj->offset = offset;
obj->size = size;
+ obj->pat_index = pat_index;
obj->bind_op = bind_op;
igt_map_insert(ainfo->bind_map, &obj->handle, obj);
}
@@ -1204,7 +1210,7 @@ out:
*/
uint64_t __intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
uint64_t size, uint64_t alignment,
- enum allocator_strategy strategy)
+ uint8_t pat_index, enum allocator_strategy strategy)
{
struct alloc_req req = { .request_type = REQ_ALLOC,
.allocator_handle = allocator_handle,
@@ -1219,7 +1225,8 @@ uint64_t __intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
igt_assert(handle_request(&req, &resp) == 0);
igt_assert(resp.response_type == RESP_ALLOC);
- track_object(allocator_handle, handle, resp.alloc.offset, size, TO_BIND);
+ track_object(allocator_handle, handle, resp.alloc.offset, size, pat_index,
+ TO_BIND);
return resp.alloc.offset;
}
@@ -1241,7 +1248,7 @@ uint64_t intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
uint64_t offset;
offset = __intel_allocator_alloc(allocator_handle, handle,
- size, alignment,
+ size, alignment, DEFAULT_PAT_INDEX,
ALLOC_STRATEGY_NONE);
igt_assert(offset != ALLOC_INVALID_ADDRESS);
@@ -1268,7 +1275,8 @@ uint64_t intel_allocator_alloc_with_strategy(uint64_t allocator_handle,
uint64_t offset;
offset = __intel_allocator_alloc(allocator_handle, handle,
- size, alignment, strategy);
+ size, alignment, DEFAULT_PAT_INDEX,
+ strategy);
igt_assert(offset != ALLOC_INVALID_ADDRESS);
return offset;
@@ -1298,7 +1306,7 @@ bool intel_allocator_free(uint64_t allocator_handle, uint32_t handle)
igt_assert(handle_request(&req, &resp) == 0);
igt_assert(resp.response_type == RESP_FREE);
- track_object(allocator_handle, handle, 0, 0, TO_UNBIND);
+ track_object(allocator_handle, handle, 0, 0, 0, TO_UNBIND);
return resp.free.freed;
}
@@ -1500,16 +1508,17 @@ static void __xe_op_bind(struct ahnd_info *ainfo, uint32_t sync_in, uint32_t syn
if (obj->bind_op == BOUND)
continue;
- bind_info("= [vm: %u] %s => %u %lx %lx\n",
+ bind_info("= [vm: %u] %s => %u %lx %lx %u\n",
ainfo->vm,
obj->bind_op == TO_BIND ? "TO BIND" : "TO UNBIND",
obj->handle, obj->offset,
- obj->size);
+ obj->size, obj->pat_index);
entry = malloc(sizeof(*entry));
entry->handle = obj->handle;
entry->offset = obj->offset;
entry->size = obj->size;
+ entry->pat_index = obj->pat_index;
entry->bind_op = obj->bind_op == TO_BIND ? XE_OBJECT_BIND :
XE_OBJECT_UNBIND;
igt_list_add(&entry->link, &obj_list);
@@ -1534,6 +1543,18 @@ static void __xe_op_bind(struct ahnd_info *ainfo, uint32_t sync_in, uint32_t syn
}
}
+uint64_t get_offset_pat_index(uint64_t ahnd, uint32_t handle, uint64_t size,
+ uint64_t alignment, uint8_t pat_index)
+{
+ uint64_t offset;
+
+ offset = __intel_allocator_alloc(ahnd, handle, size, alignment,
+ pat_index, ALLOC_STRATEGY_NONE);
+ igt_assert(offset != ALLOC_INVALID_ADDRESS);
+
+ return offset;
+}
+
/**
* intel_allocator_bind:
* @allocator_handle: handle to an allocator
diff --git a/lib/intel_allocator.h b/lib/intel_allocator.h
index f9ff7f1cc..5da8af7f9 100644
--- a/lib/intel_allocator.h
+++ b/lib/intel_allocator.h
@@ -186,7 +186,7 @@ bool intel_allocator_close(uint64_t allocator_handle);
void intel_allocator_get_address_range(uint64_t allocator_handle,
uint64_t *startp, uint64_t *endp);
uint64_t __intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
- uint64_t size, uint64_t alignment,
+ uint64_t size, uint64_t alignment, uint8_t pat_index,
enum allocator_strategy strategy);
uint64_t intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
uint64_t size, uint64_t alignment);
@@ -266,6 +266,9 @@ static inline bool put_ahnd(uint64_t ahnd)
return !ahnd || intel_allocator_close(ahnd);
}
+uint64_t get_offset_pat_index(uint64_t ahnd, uint32_t handle, uint64_t size,
+ uint64_t alignment, uint8_t pat_index);
+
static inline uint64_t get_offset(uint64_t ahnd, uint32_t handle,
uint64_t size, uint64_t alignment)
{
diff --git a/lib/xe/xe_util.c b/lib/xe/xe_util.c
index 2f9ffe2f1..8583326a9 100644
--- a/lib/xe/xe_util.c
+++ b/lib/xe/xe_util.c
@@ -145,6 +145,7 @@ static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(struct igt_list_head *obj_lis
ops->addr = obj->offset;
ops->range = obj->size;
ops->region = 0;
+ ops->pat_index = obj->pat_index;
bind_info(" [%d]: [%6s] handle: %u, offset: %llx, size: %llx\n",
i, obj->bind_op == XE_OBJECT_BIND ? "BIND" : "UNBIND",
diff --git a/lib/xe/xe_util.h b/lib/xe/xe_util.h
index e97d236b8..e3bdf3d11 100644
--- a/lib/xe/xe_util.h
+++ b/lib/xe/xe_util.h
@@ -36,6 +36,7 @@ struct xe_object {
uint32_t handle;
uint64_t offset;
uint64_t size;
+ uint8_t pat_index;
enum xe_bind_op bind_op;
struct igt_list_head link;
};
diff --git a/tests/intel/api_intel_allocator.c b/tests/intel/api_intel_allocator.c
index f3fcf8a34..d19be3ce9 100644
--- a/tests/intel/api_intel_allocator.c
+++ b/tests/intel/api_intel_allocator.c
@@ -9,6 +9,7 @@
#include "igt.h"
#include "igt_aux.h"
#include "intel_allocator.h"
+#include "intel_pat.h"
#include "xe/xe_ioctl.h"
#include "xe/xe_query.h"
@@ -131,7 +132,8 @@ static void alloc_simple(int fd)
intel_allocator_get_address_range(ahnd, &start, &end);
offset0 = intel_allocator_alloc(ahnd, 1, end - start, 0);
- offset1 = __intel_allocator_alloc(ahnd, 2, 4096, 0, ALLOC_STRATEGY_NONE);
+ offset1 = __intel_allocator_alloc(ahnd, 2, 4096, 0, DEFAULT_PAT_INDEX,
+ ALLOC_STRATEGY_NONE);
igt_assert(offset1 == ALLOC_INVALID_ADDRESS);
intel_allocator_free(ahnd, 1);
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [igt-dev] [Intel-xe] [PATCH i-g-t 07/12] lib/allocator: add get_offset_pat_index() helper
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 07/12] lib/allocator: add get_offset_pat_index() helper Matthew Auld
@ 2023-10-06 11:38 ` Zbigniew Kempczyński
0 siblings, 0 replies; 25+ messages in thread
From: Zbigniew Kempczyński @ 2023-10-06 11:38 UTC (permalink / raw)
To: Matthew Auld; +Cc: igt-dev, intel-xe
On Thu, Oct 05, 2023 at 04:31:11PM +0100, Matthew Auld wrote:
> For some cases we are going to need to pass the pat_index for the
> vm_bind op. Add a helper for this, such that we can allocate an address
> and give the mapping some pat_index.
>
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Pallavi Mishra <pallavi.mishra@intel.com>
> ---
> lib/intel_allocator.c | 43 +++++++++++++++++++++++--------
> lib/intel_allocator.h | 5 +++-
> lib/xe/xe_util.c | 1 +
> lib/xe/xe_util.h | 1 +
> tests/intel/api_intel_allocator.c | 4 ++-
> 5 files changed, 41 insertions(+), 13 deletions(-)
>
> diff --git a/lib/intel_allocator.c b/lib/intel_allocator.c
> index f0a9b7fb5..da357b833 100644
> --- a/lib/intel_allocator.c
> +++ b/lib/intel_allocator.c
> @@ -16,6 +16,7 @@
> #include "igt_map.h"
> #include "intel_allocator.h"
> #include "intel_allocator_msgchannel.h"
> +#include "intel_pat.h"
> #include "xe/xe_query.h"
> #include "xe/xe_util.h"
>
> @@ -92,6 +93,7 @@ struct allocator_object {
> uint32_t handle;
> uint64_t offset;
> uint64_t size;
> + uint8_t pat_index;
>
> enum allocator_bind_op bind_op;
> };
> @@ -1122,14 +1124,14 @@ void intel_allocator_get_address_range(uint64_t allocator_handle,
>
> static bool is_same(struct allocator_object *obj,
> uint32_t handle, uint64_t offset, uint64_t size,
> - enum allocator_bind_op bind_op)
> + uint8_t pat_index, enum allocator_bind_op bind_op)
> {
> return obj->handle == handle && obj->offset == offset && obj->size == size &&
> - (obj->bind_op == bind_op || obj->bind_op == BOUND);
> + obj->pat_index == pat_index && (obj->bind_op == bind_op || obj->bind_op == BOUND);
> }
>
> static void track_object(uint64_t allocator_handle, uint32_t handle,
> - uint64_t offset, uint64_t size,
> + uint64_t offset, uint64_t size, uint8_t pat_index,
> enum allocator_bind_op bind_op)
> {
> struct ahnd_info *ainfo;
Code looks good to me, only minor nitpick is to add pat index to
bind_debug() here. Be aware that pat_index don't go underneath
to the allocator itself, only to cache which tracks alloc()/free()
data returned from allocator necessary to bind/unbind. But I don't
think it will be a problem.
With above added:
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
--
Zbigniew
> @@ -1156,6 +1158,9 @@ static void track_object(uint64_t allocator_handle, uint32_t handle,
> if (ainfo->driver == INTEL_DRIVER_I915)
> return; /* no-op for i915, at least for now */
>
> + if (pat_index == DEFAULT_PAT_INDEX)
> + pat_index = intel_get_pat_idx_wb(ainfo->fd);
> +
> pthread_mutex_lock(&ainfo->bind_map_mutex);
> obj = igt_map_search(ainfo->bind_map, &handle);
> if (obj) {
> @@ -1165,7 +1170,7 @@ static void track_object(uint64_t allocator_handle, uint32_t handle,
> * bind_map.
> */
> if (bind_op == TO_BIND) {
> - igt_assert_eq(is_same(obj, handle, offset, size, bind_op), true);
> + igt_assert_eq(is_same(obj, handle, offset, size, pat_index, bind_op), true);
> } else if (bind_op == TO_UNBIND) {
> if (obj->bind_op == TO_BIND)
> igt_map_remove(ainfo->bind_map, &obj->handle, map_entry_free_func);
> @@ -1181,6 +1186,7 @@ static void track_object(uint64_t allocator_handle, uint32_t handle,
> obj->handle = handle;
> obj->offset = offset;
> obj->size = size;
> + obj->pat_index = pat_index;
> obj->bind_op = bind_op;
> igt_map_insert(ainfo->bind_map, &obj->handle, obj);
> }
> @@ -1204,7 +1210,7 @@ out:
> */
> uint64_t __intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
> uint64_t size, uint64_t alignment,
> - enum allocator_strategy strategy)
> + uint8_t pat_index, enum allocator_strategy strategy)
> {
> struct alloc_req req = { .request_type = REQ_ALLOC,
> .allocator_handle = allocator_handle,
> @@ -1219,7 +1225,8 @@ uint64_t __intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
> igt_assert(handle_request(&req, &resp) == 0);
> igt_assert(resp.response_type == RESP_ALLOC);
>
> - track_object(allocator_handle, handle, resp.alloc.offset, size, TO_BIND);
> + track_object(allocator_handle, handle, resp.alloc.offset, size, pat_index,
> + TO_BIND);
>
> return resp.alloc.offset;
> }
> @@ -1241,7 +1248,7 @@ uint64_t intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
> uint64_t offset;
>
> offset = __intel_allocator_alloc(allocator_handle, handle,
> - size, alignment,
> + size, alignment, DEFAULT_PAT_INDEX,
> ALLOC_STRATEGY_NONE);
> igt_assert(offset != ALLOC_INVALID_ADDRESS);
>
> @@ -1268,7 +1275,8 @@ uint64_t intel_allocator_alloc_with_strategy(uint64_t allocator_handle,
> uint64_t offset;
>
> offset = __intel_allocator_alloc(allocator_handle, handle,
> - size, alignment, strategy);
> + size, alignment, DEFAULT_PAT_INDEX,
> + strategy);
> igt_assert(offset != ALLOC_INVALID_ADDRESS);
>
> return offset;
> @@ -1298,7 +1306,7 @@ bool intel_allocator_free(uint64_t allocator_handle, uint32_t handle)
> igt_assert(handle_request(&req, &resp) == 0);
> igt_assert(resp.response_type == RESP_FREE);
>
> - track_object(allocator_handle, handle, 0, 0, TO_UNBIND);
> + track_object(allocator_handle, handle, 0, 0, 0, TO_UNBIND);
>
> return resp.free.freed;
> }
> @@ -1500,16 +1508,17 @@ static void __xe_op_bind(struct ahnd_info *ainfo, uint32_t sync_in, uint32_t syn
> if (obj->bind_op == BOUND)
> continue;
>
> - bind_info("= [vm: %u] %s => %u %lx %lx\n",
> + bind_info("= [vm: %u] %s => %u %lx %lx %u\n",
> ainfo->vm,
> obj->bind_op == TO_BIND ? "TO BIND" : "TO UNBIND",
> obj->handle, obj->offset,
> - obj->size);
> + obj->size, obj->pat_index);
>
> entry = malloc(sizeof(*entry));
> entry->handle = obj->handle;
> entry->offset = obj->offset;
> entry->size = obj->size;
> + entry->pat_index = obj->pat_index;
> entry->bind_op = obj->bind_op == TO_BIND ? XE_OBJECT_BIND :
> XE_OBJECT_UNBIND;
> igt_list_add(&entry->link, &obj_list);
> @@ -1534,6 +1543,18 @@ static void __xe_op_bind(struct ahnd_info *ainfo, uint32_t sync_in, uint32_t syn
> }
> }
>
> +uint64_t get_offset_pat_index(uint64_t ahnd, uint32_t handle, uint64_t size,
> + uint64_t alignment, uint8_t pat_index)
> +{
> + uint64_t offset;
> +
> + offset = __intel_allocator_alloc(ahnd, handle, size, alignment,
> + pat_index, ALLOC_STRATEGY_NONE);
> + igt_assert(offset != ALLOC_INVALID_ADDRESS);
> +
> + return offset;
> +}
> +
> /**
> * intel_allocator_bind:
> * @allocator_handle: handle to an allocator
> diff --git a/lib/intel_allocator.h b/lib/intel_allocator.h
> index f9ff7f1cc..5da8af7f9 100644
> --- a/lib/intel_allocator.h
> +++ b/lib/intel_allocator.h
> @@ -186,7 +186,7 @@ bool intel_allocator_close(uint64_t allocator_handle);
> void intel_allocator_get_address_range(uint64_t allocator_handle,
> uint64_t *startp, uint64_t *endp);
> uint64_t __intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
> - uint64_t size, uint64_t alignment,
> + uint64_t size, uint64_t alignment, uint8_t pat_index,
> enum allocator_strategy strategy);
> uint64_t intel_allocator_alloc(uint64_t allocator_handle, uint32_t handle,
> uint64_t size, uint64_t alignment);
> @@ -266,6 +266,9 @@ static inline bool put_ahnd(uint64_t ahnd)
> return !ahnd || intel_allocator_close(ahnd);
> }
>
> +uint64_t get_offset_pat_index(uint64_t ahnd, uint32_t handle, uint64_t size,
> + uint64_t alignment, uint8_t pat_index);
> +
> static inline uint64_t get_offset(uint64_t ahnd, uint32_t handle,
> uint64_t size, uint64_t alignment)
> {
> diff --git a/lib/xe/xe_util.c b/lib/xe/xe_util.c
> index 2f9ffe2f1..8583326a9 100644
> --- a/lib/xe/xe_util.c
> +++ b/lib/xe/xe_util.c
> @@ -145,6 +145,7 @@ static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(struct igt_list_head *obj_lis
> ops->addr = obj->offset;
> ops->range = obj->size;
> ops->region = 0;
> + ops->pat_index = obj->pat_index;
>
> bind_info(" [%d]: [%6s] handle: %u, offset: %llx, size: %llx\n",
> i, obj->bind_op == XE_OBJECT_BIND ? "BIND" : "UNBIND",
> diff --git a/lib/xe/xe_util.h b/lib/xe/xe_util.h
> index e97d236b8..e3bdf3d11 100644
> --- a/lib/xe/xe_util.h
> +++ b/lib/xe/xe_util.h
> @@ -36,6 +36,7 @@ struct xe_object {
> uint32_t handle;
> uint64_t offset;
> uint64_t size;
> + uint8_t pat_index;
> enum xe_bind_op bind_op;
> struct igt_list_head link;
> };
> diff --git a/tests/intel/api_intel_allocator.c b/tests/intel/api_intel_allocator.c
> index f3fcf8a34..d19be3ce9 100644
> --- a/tests/intel/api_intel_allocator.c
> +++ b/tests/intel/api_intel_allocator.c
> @@ -9,6 +9,7 @@
> #include "igt.h"
> #include "igt_aux.h"
> #include "intel_allocator.h"
> +#include "intel_pat.h"
> #include "xe/xe_ioctl.h"
> #include "xe/xe_query.h"
>
> @@ -131,7 +132,8 @@ static void alloc_simple(int fd)
>
> intel_allocator_get_address_range(ahnd, &start, &end);
> offset0 = intel_allocator_alloc(ahnd, 1, end - start, 0);
> - offset1 = __intel_allocator_alloc(ahnd, 2, 4096, 0, ALLOC_STRATEGY_NONE);
> + offset1 = __intel_allocator_alloc(ahnd, 2, 4096, 0, DEFAULT_PAT_INDEX,
> + ALLOC_STRATEGY_NONE);
> igt_assert(offset1 == ALLOC_INVALID_ADDRESS);
> intel_allocator_free(ahnd, 1);
>
> --
> 2.41.0
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [igt-dev] [PATCH i-g-t 08/12] lib/intel_blt: support pat_index
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (6 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 07/12] lib/allocator: add get_offset_pat_index() helper Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-06 11:51 ` Zbigniew Kempczyński
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 09/12] lib/intel_buf: " Matthew Auld
` (6 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
For the most part we can just use the default wb, however some users
including display might want to use something else.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
lib/igt_fb.c | 2 ++
lib/intel_blt.c | 54 +++++++++++++++++++++------------
lib/intel_blt.h | 7 +++--
tests/intel/gem_ccs.c | 16 +++++-----
tests/intel/gem_lmem_swapping.c | 4 +--
tests/intel/xe_ccs.c | 19 +++++++-----
6 files changed, 64 insertions(+), 38 deletions(-)
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index f8a0db22c..d290fd775 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -37,6 +37,7 @@
#include "i915/gem_mman.h"
#include "intel_blt.h"
#include "intel_mocs.h"
+#include "intel_pat.h"
#include "igt_aux.h"
#include "igt_color_encoding.h"
#include "igt_fb.h"
@@ -2768,6 +2769,7 @@ static struct blt_copy_object *blt_fb_init(const struct igt_fb *fb,
blt_set_object(blt, handle, fb->size, memregion,
intel_get_uc_mocs(fb->fd),
+ intel_get_pat_idx_wt(fb->fd),
blt_tile,
is_ccs_modifier(fb->modifier) ? COMPRESSION_ENABLED : COMPRESSION_DISABLED,
is_gen12_mc_ccs_modifier(fb->modifier) ? COMPRESSION_TYPE_MEDIA : COMPRESSION_TYPE_3D);
diff --git a/lib/intel_blt.c b/lib/intel_blt.c
index b55fa9b52..b7ac2902b 100644
--- a/lib/intel_blt.c
+++ b/lib/intel_blt.c
@@ -13,6 +13,7 @@
#include "igt.h"
#include "igt_syncobj.h"
#include "intel_blt.h"
+#include "intel_pat.h"
#include "xe/xe_ioctl.h"
#include "xe/xe_query.h"
#include "xe/xe_util.h"
@@ -810,10 +811,12 @@ uint64_t emit_blt_block_copy(int fd,
igt_assert_f(blt, "block-copy requires data to do blit\n");
alignment = get_default_alignment(fd, blt->driver);
- src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment)
- + blt->src.plane_offset;
- dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment)
- + blt->dst.plane_offset;
+ src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
+ alignment, blt->src.pat_index) +
+ blt->src.plane_offset;
+ dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
+ alignment, blt->dst.pat_index) +
+ blt->dst.plane_offset;
bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
fill_data(&data, blt, src_offset, dst_offset, ext);
@@ -884,8 +887,10 @@ int blt_block_copy(int fd,
igt_assert_neq(blt->driver, 0);
alignment = get_default_alignment(fd, blt->driver);
- src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment);
- dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment);
+ src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
+ alignment, blt->src.pat_index);
+ dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
+ alignment, blt->dst.pat_index);
bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
emit_blt_block_copy(fd, ahnd, blt, ext, 0, true);
@@ -1036,8 +1041,10 @@ uint64_t emit_blt_ctrl_surf_copy(int fd,
data.dw00.size_of_ctrl_copy = __ccs_size(surf) / CCS_RATIO - 1;
data.dw00.length = 0x3;
- src_offset = get_offset(ahnd, surf->src.handle, surf->src.size, alignment);
- dst_offset = get_offset(ahnd, surf->dst.handle, surf->dst.size, alignment);
+ src_offset = get_offset_pat_index(ahnd, surf->src.handle, surf->src.size,
+ alignment, surf->src.pat_index);
+ dst_offset = get_offset_pat_index(ahnd, surf->dst.handle, surf->dst.size,
+ alignment, surf->dst.pat_index);
bb_offset = get_offset(ahnd, surf->bb.handle, surf->bb.size, alignment);
data.dw01.src_address_lo = src_offset;
@@ -1103,8 +1110,10 @@ int blt_ctrl_surf_copy(int fd,
igt_assert_neq(surf->driver, 0);
alignment = max_t(uint64_t, get_default_alignment(fd, surf->driver), 1ull << 16);
- src_offset = get_offset(ahnd, surf->src.handle, surf->src.size, alignment);
- dst_offset = get_offset(ahnd, surf->dst.handle, surf->dst.size, alignment);
+ src_offset = get_offset_pat_index(ahnd, surf->src.handle, surf->src.size,
+ alignment, surf->src.pat_index);
+ dst_offset = get_offset_pat_index(ahnd, surf->dst.handle, surf->dst.size,
+ alignment, surf->dst.pat_index);
bb_offset = get_offset(ahnd, surf->bb.handle, surf->bb.size, alignment);
emit_blt_ctrl_surf_copy(fd, ahnd, surf, 0, true);
@@ -1308,10 +1317,12 @@ uint64_t emit_blt_fast_copy(int fd,
data.dw03.dst_x2 = blt->dst.x2;
data.dw03.dst_y2 = blt->dst.y2;
- src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment)
- + blt->src.plane_offset;
- dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment)
- + blt->dst.plane_offset;
+ src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
+ alignment, blt->src.pat_index) +
+ blt->src.plane_offset;
+ dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size, alignment,
+ blt->dst.pat_index) +
+ blt->dst.plane_offset;
bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
data.dw04.dst_address_lo = dst_offset;
@@ -1380,8 +1391,10 @@ int blt_fast_copy(int fd,
igt_assert_neq(blt->driver, 0);
alignment = get_default_alignment(fd, blt->driver);
- src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment);
- dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment);
+ src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
+ alignment, blt->src.pat_index);
+ dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
+ alignment, blt->dst.pat_index);
bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
emit_blt_fast_copy(fd, ahnd, blt, 0, true);
@@ -1460,7 +1473,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
&size, region) == 0);
}
- blt_set_object(obj, handle, size, region, mocs, tiling,
+ blt_set_object(obj, handle, size, region, mocs, DEFAULT_PAT_INDEX, tiling,
compression, compression_type);
blt_set_geom(obj, stride, 0, 0, width, height, 0, 0);
@@ -1481,7 +1494,7 @@ void blt_destroy_object(int fd, struct blt_copy_object *obj)
void blt_set_object(struct blt_copy_object *obj,
uint32_t handle, uint64_t size, uint32_t region,
- uint8_t mocs, enum blt_tiling_type tiling,
+ uint8_t mocs, uint8_t pat_index, enum blt_tiling_type tiling,
enum blt_compression compression,
enum blt_compression_type compression_type)
{
@@ -1489,6 +1502,7 @@ void blt_set_object(struct blt_copy_object *obj,
obj->size = size;
obj->region = region;
obj->mocs = mocs;
+ obj->pat_index = pat_index;
obj->tiling = tiling;
obj->compression = compression;
obj->compression_type = compression_type;
@@ -1516,12 +1530,14 @@ void blt_set_copy_object(struct blt_copy_object *obj,
void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
uint32_t handle, uint32_t region, uint64_t size,
- uint8_t mocs, enum blt_access_type access_type)
+ uint8_t mocs, uint8_t pat_index,
+ enum blt_access_type access_type)
{
obj->handle = handle;
obj->region = region;
obj->size = size;
obj->mocs = mocs;
+ obj->pat_index = pat_index;
obj->access_type = access_type;
}
diff --git a/lib/intel_blt.h b/lib/intel_blt.h
index d9c8883c7..f8423a986 100644
--- a/lib/intel_blt.h
+++ b/lib/intel_blt.h
@@ -79,6 +79,7 @@ struct blt_copy_object {
uint32_t region;
uint64_t size;
uint8_t mocs;
+ uint8_t pat_index;
enum blt_tiling_type tiling;
enum blt_compression compression; /* BC only */
enum blt_compression_type compression_type; /* BC only */
@@ -151,6 +152,7 @@ struct blt_ctrl_surf_copy_object {
uint32_t region;
uint64_t size;
uint8_t mocs;
+ uint8_t pat_index;
enum blt_access_type access_type;
};
@@ -247,7 +249,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
void blt_destroy_object(int fd, struct blt_copy_object *obj);
void blt_set_object(struct blt_copy_object *obj,
uint32_t handle, uint64_t size, uint32_t region,
- uint8_t mocs, enum blt_tiling_type tiling,
+ uint8_t mocs, uint8_t pat_index, enum blt_tiling_type tiling,
enum blt_compression compression,
enum blt_compression_type compression_type);
void blt_set_object_ext(struct blt_block_copy_object_ext *obj,
@@ -258,7 +260,8 @@ void blt_set_copy_object(struct blt_copy_object *obj,
const struct blt_copy_object *orig);
void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
uint32_t handle, uint32_t region, uint64_t size,
- uint8_t mocs, enum blt_access_type access_type);
+ uint8_t mocs, uint8_t pat_index,
+ enum blt_access_type access_type);
void blt_surface_info(const char *info,
const struct blt_copy_object *obj);
diff --git a/tests/intel/gem_ccs.c b/tests/intel/gem_ccs.c
index f5d4ab359..a98557b72 100644
--- a/tests/intel/gem_ccs.c
+++ b/tests/intel/gem_ccs.c
@@ -15,6 +15,7 @@
#include "lib/intel_chipset.h"
#include "intel_blt.h"
#include "intel_mocs.h"
+#include "intel_pat.h"
/**
* TEST: gem ccs
* Description: Exercise gen12 blitter with and without flatccs compression
@@ -111,9 +112,9 @@ static void surf_copy(int i915,
blt_ctrl_surf_copy_init(i915, &surf);
surf.print_bb = param.print_bb;
blt_set_ctrl_surf_object(&surf.src, mid->handle, mid->region, mid->size,
- uc_mocs, BLT_INDIRECT_ACCESS);
+ uc_mocs, DEFAULT_PAT_INDEX, BLT_INDIRECT_ACCESS);
blt_set_ctrl_surf_object(&surf.dst, ccs, REGION_SMEM, ccssize,
- uc_mocs, DIRECT_ACCESS);
+ uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
bb_size = 4096;
igt_assert_eq(__gem_create(i915, &bb_size, &bb1), 0);
blt_set_batch(&surf.bb, bb1, bb_size, REGION_SMEM);
@@ -133,7 +134,7 @@ static void surf_copy(int i915,
igt_system_suspend_autoresume(SUSPEND_STATE_FREEZE, SUSPEND_TEST_NONE);
blt_set_ctrl_surf_object(&surf.dst, ccs2, REGION_SMEM, ccssize,
- 0, DIRECT_ACCESS);
+ 0, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
blt_ctrl_surf_copy(i915, ctx, e, ahnd, &surf);
gem_sync(i915, surf.dst.handle);
@@ -155,9 +156,9 @@ static void surf_copy(int i915,
for (int i = 0; i < surf.dst.size / sizeof(uint32_t); i++)
ccsmap[i] = i;
blt_set_ctrl_surf_object(&surf.src, ccs, REGION_SMEM, ccssize,
- uc_mocs, DIRECT_ACCESS);
+ uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
blt_set_ctrl_surf_object(&surf.dst, mid->handle, mid->region, mid->size,
- uc_mocs, INDIRECT_ACCESS);
+ uc_mocs, DEFAULT_PAT_INDEX, INDIRECT_ACCESS);
blt_ctrl_surf_copy(i915, ctx, e, ahnd, &surf);
blt_copy_init(i915, &blt);
@@ -399,7 +400,8 @@ static void block_copy(int i915,
blt_set_object_ext(&ext.dst, 0, width, height, SURFACE_TYPE_2D);
if (config->inplace) {
blt_set_object(&blt.dst, mid->handle, dst->size, mid->region, 0,
- T_LINEAR, COMPRESSION_DISABLED, comp_type);
+ DEFAULT_PAT_INDEX, T_LINEAR, COMPRESSION_DISABLED,
+ comp_type);
blt.dst.ptr = mid->ptr;
}
@@ -475,7 +477,7 @@ static void block_multicopy(int i915,
if (config->inplace) {
blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
- mid->mocs, mid_tiling, COMPRESSION_DISABLED,
+ mid->mocs, DEFAULT_PAT_INDEX, mid_tiling, COMPRESSION_DISABLED,
comp_type);
blt3.dst.ptr = mid->ptr;
}
diff --git a/tests/intel/gem_lmem_swapping.c b/tests/intel/gem_lmem_swapping.c
index ede545c92..7f2ab8bb6 100644
--- a/tests/intel/gem_lmem_swapping.c
+++ b/tests/intel/gem_lmem_swapping.c
@@ -486,7 +486,7 @@ static void __do_evict(int i915,
INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0));
blt_set_object(tmp, tmp->handle, params->size.max,
INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0),
- intel_get_uc_mocs(i915), T_LINEAR,
+ intel_get_uc_mocs(i915), 0, T_LINEAR,
COMPRESSION_DISABLED, COMPRESSION_TYPE_3D);
blt_set_geom(tmp, stride, 0, 0, width, height, 0, 0);
}
@@ -516,7 +516,7 @@ static void __do_evict(int i915,
obj->blt_obj = calloc(1, sizeof(*obj->blt_obj));
igt_assert(obj->blt_obj);
blt_set_object(obj->blt_obj, obj->handle, obj->size, region_id,
- intel_get_uc_mocs(i915), T_LINEAR,
+ intel_get_uc_mocs(i915), 0, T_LINEAR,
COMPRESSION_ENABLED, COMPRESSION_TYPE_3D);
blt_set_geom(obj->blt_obj, stride, 0, 0, width, height, 0, 0);
init_object_ccs(i915, obj, tmp, rand(), blt_ctx,
diff --git a/tests/intel/xe_ccs.c b/tests/intel/xe_ccs.c
index 20bbc4448..27859d5ce 100644
--- a/tests/intel/xe_ccs.c
+++ b/tests/intel/xe_ccs.c
@@ -13,6 +13,7 @@
#include "igt_syncobj.h"
#include "intel_blt.h"
#include "intel_mocs.h"
+#include "intel_pat.h"
#include "xe/xe_ioctl.h"
#include "xe/xe_query.h"
#include "xe/xe_util.h"
@@ -108,8 +109,9 @@ static void surf_copy(int xe,
blt_ctrl_surf_copy_init(xe, &surf);
surf.print_bb = param.print_bb;
blt_set_ctrl_surf_object(&surf.src, mid->handle, mid->region, mid->size,
- uc_mocs, BLT_INDIRECT_ACCESS);
- blt_set_ctrl_surf_object(&surf.dst, ccs, sysmem, ccssize, uc_mocs, DIRECT_ACCESS);
+ uc_mocs, DEFAULT_PAT_INDEX, BLT_INDIRECT_ACCESS);
+ blt_set_ctrl_surf_object(&surf.dst, ccs, sysmem, ccssize, uc_mocs,
+ DEFAULT_PAT_INDEX, DIRECT_ACCESS);
bb_size = xe_get_default_alignment(xe);
bb1 = xe_bo_create_flags(xe, 0, bb_size, sysmem);
blt_set_batch(&surf.bb, bb1, bb_size, sysmem);
@@ -130,7 +132,7 @@ static void surf_copy(int xe,
igt_system_suspend_autoresume(SUSPEND_STATE_FREEZE, SUSPEND_TEST_NONE);
blt_set_ctrl_surf_object(&surf.dst, ccs2, system_memory(xe), ccssize,
- 0, DIRECT_ACCESS);
+ 0, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
blt_ctrl_surf_copy(xe, ctx, NULL, ahnd, &surf);
intel_ctx_xe_sync(ctx, true);
@@ -153,9 +155,9 @@ static void surf_copy(int xe,
for (int i = 0; i < surf.dst.size / sizeof(uint32_t); i++)
ccsmap[i] = i;
blt_set_ctrl_surf_object(&surf.src, ccs, sysmem, ccssize,
- uc_mocs, DIRECT_ACCESS);
+ uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
blt_set_ctrl_surf_object(&surf.dst, mid->handle, mid->region, mid->size,
- uc_mocs, INDIRECT_ACCESS);
+ uc_mocs, DEFAULT_PAT_INDEX, INDIRECT_ACCESS);
blt_ctrl_surf_copy(xe, ctx, NULL, ahnd, &surf);
intel_ctx_xe_sync(ctx, true);
@@ -369,7 +371,8 @@ static void block_copy(int xe,
blt_set_object_ext(&ext.dst, 0, width, height, SURFACE_TYPE_2D);
if (config->inplace) {
blt_set_object(&blt.dst, mid->handle, dst->size, mid->region, 0,
- T_LINEAR, COMPRESSION_DISABLED, comp_type);
+ DEFAULT_PAT_INDEX, T_LINEAR, COMPRESSION_DISABLED,
+ comp_type);
blt.dst.ptr = mid->ptr;
}
@@ -450,8 +453,8 @@ static void block_multicopy(int xe,
if (config->inplace) {
blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
- mid->mocs, mid_tiling, COMPRESSION_DISABLED,
- comp_type);
+ mid->mocs, DEFAULT_PAT_INDEX, mid_tiling,
+ COMPRESSION_DISABLED, comp_type);
blt3.dst.ptr = mid->ptr;
}
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [igt-dev] [PATCH i-g-t 08/12] lib/intel_blt: support pat_index
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 08/12] lib/intel_blt: support pat_index Matthew Auld
@ 2023-10-06 11:51 ` Zbigniew Kempczyński
2023-10-06 12:08 ` Matthew Auld
0 siblings, 1 reply; 25+ messages in thread
From: Zbigniew Kempczyński @ 2023-10-06 11:51 UTC (permalink / raw)
To: Matthew Auld; +Cc: igt-dev, intel-xe
On Thu, Oct 05, 2023 at 04:31:12PM +0100, Matthew Auld wrote:
> For the most part we can just use the default wb, however some users
> including display might want to use something else.
>
> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Pallavi Mishra <pallavi.mishra@intel.com>
> ---
> lib/igt_fb.c | 2 ++
> lib/intel_blt.c | 54 +++++++++++++++++++++------------
> lib/intel_blt.h | 7 +++--
> tests/intel/gem_ccs.c | 16 +++++-----
> tests/intel/gem_lmem_swapping.c | 4 +--
> tests/intel/xe_ccs.c | 19 +++++++-----
> 6 files changed, 64 insertions(+), 38 deletions(-)
>
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index f8a0db22c..d290fd775 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -37,6 +37,7 @@
> #include "i915/gem_mman.h"
> #include "intel_blt.h"
> #include "intel_mocs.h"
> +#include "intel_pat.h"
> #include "igt_aux.h"
> #include "igt_color_encoding.h"
> #include "igt_fb.h"
> @@ -2768,6 +2769,7 @@ static struct blt_copy_object *blt_fb_init(const struct igt_fb *fb,
>
> blt_set_object(blt, handle, fb->size, memregion,
> intel_get_uc_mocs(fb->fd),
> + intel_get_pat_idx_wt(fb->fd),
> blt_tile,
> is_ccs_modifier(fb->modifier) ? COMPRESSION_ENABLED : COMPRESSION_DISABLED,
> is_gen12_mc_ccs_modifier(fb->modifier) ? COMPRESSION_TYPE_MEDIA : COMPRESSION_TYPE_3D);
> diff --git a/lib/intel_blt.c b/lib/intel_blt.c
> index b55fa9b52..b7ac2902b 100644
> --- a/lib/intel_blt.c
> +++ b/lib/intel_blt.c
> @@ -13,6 +13,7 @@
> #include "igt.h"
> #include "igt_syncobj.h"
> #include "intel_blt.h"
> +#include "intel_pat.h"
> #include "xe/xe_ioctl.h"
> #include "xe/xe_query.h"
> #include "xe/xe_util.h"
> @@ -810,10 +811,12 @@ uint64_t emit_blt_block_copy(int fd,
> igt_assert_f(blt, "block-copy requires data to do blit\n");
>
> alignment = get_default_alignment(fd, blt->driver);
> - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment)
> - + blt->src.plane_offset;
> - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment)
> - + blt->dst.plane_offset;
> + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
> + alignment, blt->src.pat_index) +
> + blt->src.plane_offset;
> + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
> + alignment, blt->dst.pat_index) +
> + blt->dst.plane_offset;
To less tabs in formatting for src and dst plane_offset.
> bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
>
> fill_data(&data, blt, src_offset, dst_offset, ext);
> @@ -884,8 +887,10 @@ int blt_block_copy(int fd,
> igt_assert_neq(blt->driver, 0);
>
> alignment = get_default_alignment(fd, blt->driver);
> - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment);
> - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment);
> + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
> + alignment, blt->src.pat_index);
> + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
> + alignment, blt->dst.pat_index);
> bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
>
> emit_blt_block_copy(fd, ahnd, blt, ext, 0, true);
> @@ -1036,8 +1041,10 @@ uint64_t emit_blt_ctrl_surf_copy(int fd,
> data.dw00.size_of_ctrl_copy = __ccs_size(surf) / CCS_RATIO - 1;
> data.dw00.length = 0x3;
>
> - src_offset = get_offset(ahnd, surf->src.handle, surf->src.size, alignment);
> - dst_offset = get_offset(ahnd, surf->dst.handle, surf->dst.size, alignment);
> + src_offset = get_offset_pat_index(ahnd, surf->src.handle, surf->src.size,
> + alignment, surf->src.pat_index);
> + dst_offset = get_offset_pat_index(ahnd, surf->dst.handle, surf->dst.size,
> + alignment, surf->dst.pat_index);
> bb_offset = get_offset(ahnd, surf->bb.handle, surf->bb.size, alignment);
>
> data.dw01.src_address_lo = src_offset;
> @@ -1103,8 +1110,10 @@ int blt_ctrl_surf_copy(int fd,
> igt_assert_neq(surf->driver, 0);
>
> alignment = max_t(uint64_t, get_default_alignment(fd, surf->driver), 1ull << 16);
> - src_offset = get_offset(ahnd, surf->src.handle, surf->src.size, alignment);
> - dst_offset = get_offset(ahnd, surf->dst.handle, surf->dst.size, alignment);
> + src_offset = get_offset_pat_index(ahnd, surf->src.handle, surf->src.size,
> + alignment, surf->src.pat_index);
> + dst_offset = get_offset_pat_index(ahnd, surf->dst.handle, surf->dst.size,
> + alignment, surf->dst.pat_index);
> bb_offset = get_offset(ahnd, surf->bb.handle, surf->bb.size, alignment);
>
> emit_blt_ctrl_surf_copy(fd, ahnd, surf, 0, true);
> @@ -1308,10 +1317,12 @@ uint64_t emit_blt_fast_copy(int fd,
> data.dw03.dst_x2 = blt->dst.x2;
> data.dw03.dst_y2 = blt->dst.y2;
>
> - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment)
> - + blt->src.plane_offset;
> - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment)
> - + blt->dst.plane_offset;
> + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
> + alignment, blt->src.pat_index) +
> + blt->src.plane_offset;
> + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size, alignment,
> + blt->dst.pat_index) +
> + blt->dst.plane_offset;
Ditto.
> bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
>
> data.dw04.dst_address_lo = dst_offset;
> @@ -1380,8 +1391,10 @@ int blt_fast_copy(int fd,
> igt_assert_neq(blt->driver, 0);
>
> alignment = get_default_alignment(fd, blt->driver);
> - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment);
> - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment);
> + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
> + alignment, blt->src.pat_index);
> + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
> + alignment, blt->dst.pat_index);
> bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
>
> emit_blt_fast_copy(fd, ahnd, blt, 0, true);
> @@ -1460,7 +1473,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
> &size, region) == 0);
> }
I think blt_create_object() should have also pat_index passed as an
argument.
Rest looks ok.
--
Zbigniew
>
> - blt_set_object(obj, handle, size, region, mocs, tiling,
> + blt_set_object(obj, handle, size, region, mocs, DEFAULT_PAT_INDEX, tiling,
> compression, compression_type);
> blt_set_geom(obj, stride, 0, 0, width, height, 0, 0);
>
> @@ -1481,7 +1494,7 @@ void blt_destroy_object(int fd, struct blt_copy_object *obj)
>
> void blt_set_object(struct blt_copy_object *obj,
> uint32_t handle, uint64_t size, uint32_t region,
> - uint8_t mocs, enum blt_tiling_type tiling,
> + uint8_t mocs, uint8_t pat_index, enum blt_tiling_type tiling,
> enum blt_compression compression,
> enum blt_compression_type compression_type)
> {
> @@ -1489,6 +1502,7 @@ void blt_set_object(struct blt_copy_object *obj,
> obj->size = size;
> obj->region = region;
> obj->mocs = mocs;
> + obj->pat_index = pat_index;
> obj->tiling = tiling;
> obj->compression = compression;
> obj->compression_type = compression_type;
> @@ -1516,12 +1530,14 @@ void blt_set_copy_object(struct blt_copy_object *obj,
>
> void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
> uint32_t handle, uint32_t region, uint64_t size,
> - uint8_t mocs, enum blt_access_type access_type)
> + uint8_t mocs, uint8_t pat_index,
> + enum blt_access_type access_type)
> {
> obj->handle = handle;
> obj->region = region;
> obj->size = size;
> obj->mocs = mocs;
> + obj->pat_index = pat_index;
> obj->access_type = access_type;
> }
>
> diff --git a/lib/intel_blt.h b/lib/intel_blt.h
> index d9c8883c7..f8423a986 100644
> --- a/lib/intel_blt.h
> +++ b/lib/intel_blt.h
> @@ -79,6 +79,7 @@ struct blt_copy_object {
> uint32_t region;
> uint64_t size;
> uint8_t mocs;
> + uint8_t pat_index;
> enum blt_tiling_type tiling;
> enum blt_compression compression; /* BC only */
> enum blt_compression_type compression_type; /* BC only */
> @@ -151,6 +152,7 @@ struct blt_ctrl_surf_copy_object {
> uint32_t region;
> uint64_t size;
> uint8_t mocs;
> + uint8_t pat_index;
> enum blt_access_type access_type;
> };
>
> @@ -247,7 +249,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
> void blt_destroy_object(int fd, struct blt_copy_object *obj);
> void blt_set_object(struct blt_copy_object *obj,
> uint32_t handle, uint64_t size, uint32_t region,
> - uint8_t mocs, enum blt_tiling_type tiling,
> + uint8_t mocs, uint8_t pat_index, enum blt_tiling_type tiling,
> enum blt_compression compression,
> enum blt_compression_type compression_type);
> void blt_set_object_ext(struct blt_block_copy_object_ext *obj,
> @@ -258,7 +260,8 @@ void blt_set_copy_object(struct blt_copy_object *obj,
> const struct blt_copy_object *orig);
> void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
> uint32_t handle, uint32_t region, uint64_t size,
> - uint8_t mocs, enum blt_access_type access_type);
> + uint8_t mocs, uint8_t pat_index,
> + enum blt_access_type access_type);
>
> void blt_surface_info(const char *info,
> const struct blt_copy_object *obj);
> diff --git a/tests/intel/gem_ccs.c b/tests/intel/gem_ccs.c
> index f5d4ab359..a98557b72 100644
> --- a/tests/intel/gem_ccs.c
> +++ b/tests/intel/gem_ccs.c
> @@ -15,6 +15,7 @@
> #include "lib/intel_chipset.h"
> #include "intel_blt.h"
> #include "intel_mocs.h"
> +#include "intel_pat.h"
> /**
> * TEST: gem ccs
> * Description: Exercise gen12 blitter with and without flatccs compression
> @@ -111,9 +112,9 @@ static void surf_copy(int i915,
> blt_ctrl_surf_copy_init(i915, &surf);
> surf.print_bb = param.print_bb;
> blt_set_ctrl_surf_object(&surf.src, mid->handle, mid->region, mid->size,
> - uc_mocs, BLT_INDIRECT_ACCESS);
> + uc_mocs, DEFAULT_PAT_INDEX, BLT_INDIRECT_ACCESS);
> blt_set_ctrl_surf_object(&surf.dst, ccs, REGION_SMEM, ccssize,
> - uc_mocs, DIRECT_ACCESS);
> + uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> bb_size = 4096;
> igt_assert_eq(__gem_create(i915, &bb_size, &bb1), 0);
> blt_set_batch(&surf.bb, bb1, bb_size, REGION_SMEM);
> @@ -133,7 +134,7 @@ static void surf_copy(int i915,
> igt_system_suspend_autoresume(SUSPEND_STATE_FREEZE, SUSPEND_TEST_NONE);
>
> blt_set_ctrl_surf_object(&surf.dst, ccs2, REGION_SMEM, ccssize,
> - 0, DIRECT_ACCESS);
> + 0, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> blt_ctrl_surf_copy(i915, ctx, e, ahnd, &surf);
> gem_sync(i915, surf.dst.handle);
>
> @@ -155,9 +156,9 @@ static void surf_copy(int i915,
> for (int i = 0; i < surf.dst.size / sizeof(uint32_t); i++)
> ccsmap[i] = i;
> blt_set_ctrl_surf_object(&surf.src, ccs, REGION_SMEM, ccssize,
> - uc_mocs, DIRECT_ACCESS);
> + uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> blt_set_ctrl_surf_object(&surf.dst, mid->handle, mid->region, mid->size,
> - uc_mocs, INDIRECT_ACCESS);
> + uc_mocs, DEFAULT_PAT_INDEX, INDIRECT_ACCESS);
> blt_ctrl_surf_copy(i915, ctx, e, ahnd, &surf);
>
> blt_copy_init(i915, &blt);
> @@ -399,7 +400,8 @@ static void block_copy(int i915,
> blt_set_object_ext(&ext.dst, 0, width, height, SURFACE_TYPE_2D);
> if (config->inplace) {
> blt_set_object(&blt.dst, mid->handle, dst->size, mid->region, 0,
> - T_LINEAR, COMPRESSION_DISABLED, comp_type);
> + DEFAULT_PAT_INDEX, T_LINEAR, COMPRESSION_DISABLED,
> + comp_type);
> blt.dst.ptr = mid->ptr;
> }
>
> @@ -475,7 +477,7 @@ static void block_multicopy(int i915,
>
> if (config->inplace) {
> blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
> - mid->mocs, mid_tiling, COMPRESSION_DISABLED,
> + mid->mocs, DEFAULT_PAT_INDEX, mid_tiling, COMPRESSION_DISABLED,
> comp_type);
> blt3.dst.ptr = mid->ptr;
> }
> diff --git a/tests/intel/gem_lmem_swapping.c b/tests/intel/gem_lmem_swapping.c
> index ede545c92..7f2ab8bb6 100644
> --- a/tests/intel/gem_lmem_swapping.c
> +++ b/tests/intel/gem_lmem_swapping.c
> @@ -486,7 +486,7 @@ static void __do_evict(int i915,
> INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0));
> blt_set_object(tmp, tmp->handle, params->size.max,
> INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0),
> - intel_get_uc_mocs(i915), T_LINEAR,
> + intel_get_uc_mocs(i915), 0, T_LINEAR,
> COMPRESSION_DISABLED, COMPRESSION_TYPE_3D);
> blt_set_geom(tmp, stride, 0, 0, width, height, 0, 0);
> }
> @@ -516,7 +516,7 @@ static void __do_evict(int i915,
> obj->blt_obj = calloc(1, sizeof(*obj->blt_obj));
> igt_assert(obj->blt_obj);
> blt_set_object(obj->blt_obj, obj->handle, obj->size, region_id,
> - intel_get_uc_mocs(i915), T_LINEAR,
> + intel_get_uc_mocs(i915), 0, T_LINEAR,
> COMPRESSION_ENABLED, COMPRESSION_TYPE_3D);
> blt_set_geom(obj->blt_obj, stride, 0, 0, width, height, 0, 0);
> init_object_ccs(i915, obj, tmp, rand(), blt_ctx,
> diff --git a/tests/intel/xe_ccs.c b/tests/intel/xe_ccs.c
> index 20bbc4448..27859d5ce 100644
> --- a/tests/intel/xe_ccs.c
> +++ b/tests/intel/xe_ccs.c
> @@ -13,6 +13,7 @@
> #include "igt_syncobj.h"
> #include "intel_blt.h"
> #include "intel_mocs.h"
> +#include "intel_pat.h"
> #include "xe/xe_ioctl.h"
> #include "xe/xe_query.h"
> #include "xe/xe_util.h"
> @@ -108,8 +109,9 @@ static void surf_copy(int xe,
> blt_ctrl_surf_copy_init(xe, &surf);
> surf.print_bb = param.print_bb;
> blt_set_ctrl_surf_object(&surf.src, mid->handle, mid->region, mid->size,
> - uc_mocs, BLT_INDIRECT_ACCESS);
> - blt_set_ctrl_surf_object(&surf.dst, ccs, sysmem, ccssize, uc_mocs, DIRECT_ACCESS);
> + uc_mocs, DEFAULT_PAT_INDEX, BLT_INDIRECT_ACCESS);
> + blt_set_ctrl_surf_object(&surf.dst, ccs, sysmem, ccssize, uc_mocs,
> + DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> bb_size = xe_get_default_alignment(xe);
> bb1 = xe_bo_create_flags(xe, 0, bb_size, sysmem);
> blt_set_batch(&surf.bb, bb1, bb_size, sysmem);
> @@ -130,7 +132,7 @@ static void surf_copy(int xe,
> igt_system_suspend_autoresume(SUSPEND_STATE_FREEZE, SUSPEND_TEST_NONE);
>
> blt_set_ctrl_surf_object(&surf.dst, ccs2, system_memory(xe), ccssize,
> - 0, DIRECT_ACCESS);
> + 0, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> blt_ctrl_surf_copy(xe, ctx, NULL, ahnd, &surf);
> intel_ctx_xe_sync(ctx, true);
>
> @@ -153,9 +155,9 @@ static void surf_copy(int xe,
> for (int i = 0; i < surf.dst.size / sizeof(uint32_t); i++)
> ccsmap[i] = i;
> blt_set_ctrl_surf_object(&surf.src, ccs, sysmem, ccssize,
> - uc_mocs, DIRECT_ACCESS);
> + uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> blt_set_ctrl_surf_object(&surf.dst, mid->handle, mid->region, mid->size,
> - uc_mocs, INDIRECT_ACCESS);
> + uc_mocs, DEFAULT_PAT_INDEX, INDIRECT_ACCESS);
> blt_ctrl_surf_copy(xe, ctx, NULL, ahnd, &surf);
> intel_ctx_xe_sync(ctx, true);
>
> @@ -369,7 +371,8 @@ static void block_copy(int xe,
> blt_set_object_ext(&ext.dst, 0, width, height, SURFACE_TYPE_2D);
> if (config->inplace) {
> blt_set_object(&blt.dst, mid->handle, dst->size, mid->region, 0,
> - T_LINEAR, COMPRESSION_DISABLED, comp_type);
> + DEFAULT_PAT_INDEX, T_LINEAR, COMPRESSION_DISABLED,
> + comp_type);
> blt.dst.ptr = mid->ptr;
> }
>
> @@ -450,8 +453,8 @@ static void block_multicopy(int xe,
>
> if (config->inplace) {
> blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
> - mid->mocs, mid_tiling, COMPRESSION_DISABLED,
> - comp_type);
> + mid->mocs, DEFAULT_PAT_INDEX, mid_tiling,
> + COMPRESSION_DISABLED, comp_type);
> blt3.dst.ptr = mid->ptr;
> }
>
> --
> 2.41.0
>
^ permalink raw reply [flat|nested] 25+ messages in thread* Re: [igt-dev] [PATCH i-g-t 08/12] lib/intel_blt: support pat_index
2023-10-06 11:51 ` Zbigniew Kempczyński
@ 2023-10-06 12:08 ` Matthew Auld
2023-10-09 9:21 ` Zbigniew Kempczyński
0 siblings, 1 reply; 25+ messages in thread
From: Matthew Auld @ 2023-10-06 12:08 UTC (permalink / raw)
To: Zbigniew Kempczyński; +Cc: igt-dev, intel-xe
On 06/10/2023 12:51, Zbigniew Kempczyński wrote:
> On Thu, Oct 05, 2023 at 04:31:12PM +0100, Matthew Auld wrote:
>> For the most part we can just use the default wb, however some users
>> including display might want to use something else.
>>
>> Signed-off-by: Matthew Auld <matthew.auld@intel.com>
>> Cc: José Roberto de Souza <jose.souza@intel.com>
>> Cc: Pallavi Mishra <pallavi.mishra@intel.com>
>> ---
>> lib/igt_fb.c | 2 ++
>> lib/intel_blt.c | 54 +++++++++++++++++++++------------
>> lib/intel_blt.h | 7 +++--
>> tests/intel/gem_ccs.c | 16 +++++-----
>> tests/intel/gem_lmem_swapping.c | 4 +--
>> tests/intel/xe_ccs.c | 19 +++++++-----
>> 6 files changed, 64 insertions(+), 38 deletions(-)
>>
>> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
>> index f8a0db22c..d290fd775 100644
>> --- a/lib/igt_fb.c
>> +++ b/lib/igt_fb.c
>> @@ -37,6 +37,7 @@
>> #include "i915/gem_mman.h"
>> #include "intel_blt.h"
>> #include "intel_mocs.h"
>> +#include "intel_pat.h"
>> #include "igt_aux.h"
>> #include "igt_color_encoding.h"
>> #include "igt_fb.h"
>> @@ -2768,6 +2769,7 @@ static struct blt_copy_object *blt_fb_init(const struct igt_fb *fb,
>>
>> blt_set_object(blt, handle, fb->size, memregion,
>> intel_get_uc_mocs(fb->fd),
>> + intel_get_pat_idx_wt(fb->fd),
>> blt_tile,
>> is_ccs_modifier(fb->modifier) ? COMPRESSION_ENABLED : COMPRESSION_DISABLED,
>> is_gen12_mc_ccs_modifier(fb->modifier) ? COMPRESSION_TYPE_MEDIA : COMPRESSION_TYPE_3D);
>> diff --git a/lib/intel_blt.c b/lib/intel_blt.c
>> index b55fa9b52..b7ac2902b 100644
>> --- a/lib/intel_blt.c
>> +++ b/lib/intel_blt.c
>> @@ -13,6 +13,7 @@
>> #include "igt.h"
>> #include "igt_syncobj.h"
>> #include "intel_blt.h"
>> +#include "intel_pat.h"
>> #include "xe/xe_ioctl.h"
>> #include "xe/xe_query.h"
>> #include "xe/xe_util.h"
>> @@ -810,10 +811,12 @@ uint64_t emit_blt_block_copy(int fd,
>> igt_assert_f(blt, "block-copy requires data to do blit\n");
>>
>> alignment = get_default_alignment(fd, blt->driver);
>> - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment)
>> - + blt->src.plane_offset;
>> - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment)
>> - + blt->dst.plane_offset;
>> + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
>> + alignment, blt->src.pat_index) +
>> + blt->src.plane_offset;
>> + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
>> + alignment, blt->dst.pat_index) +
>> + blt->dst.plane_offset;
>
> To less tabs in formatting for src and dst plane_offset.
>
>> bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
>>
>> fill_data(&data, blt, src_offset, dst_offset, ext);
>> @@ -884,8 +887,10 @@ int blt_block_copy(int fd,
>> igt_assert_neq(blt->driver, 0);
>>
>> alignment = get_default_alignment(fd, blt->driver);
>> - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment);
>> - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment);
>> + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
>> + alignment, blt->src.pat_index);
>> + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
>> + alignment, blt->dst.pat_index);
>> bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
>>
>> emit_blt_block_copy(fd, ahnd, blt, ext, 0, true);
>> @@ -1036,8 +1041,10 @@ uint64_t emit_blt_ctrl_surf_copy(int fd,
>> data.dw00.size_of_ctrl_copy = __ccs_size(surf) / CCS_RATIO - 1;
>> data.dw00.length = 0x3;
>>
>> - src_offset = get_offset(ahnd, surf->src.handle, surf->src.size, alignment);
>> - dst_offset = get_offset(ahnd, surf->dst.handle, surf->dst.size, alignment);
>> + src_offset = get_offset_pat_index(ahnd, surf->src.handle, surf->src.size,
>> + alignment, surf->src.pat_index);
>> + dst_offset = get_offset_pat_index(ahnd, surf->dst.handle, surf->dst.size,
>> + alignment, surf->dst.pat_index);
>> bb_offset = get_offset(ahnd, surf->bb.handle, surf->bb.size, alignment);
>>
>> data.dw01.src_address_lo = src_offset;
>> @@ -1103,8 +1110,10 @@ int blt_ctrl_surf_copy(int fd,
>> igt_assert_neq(surf->driver, 0);
>>
>> alignment = max_t(uint64_t, get_default_alignment(fd, surf->driver), 1ull << 16);
>> - src_offset = get_offset(ahnd, surf->src.handle, surf->src.size, alignment);
>> - dst_offset = get_offset(ahnd, surf->dst.handle, surf->dst.size, alignment);
>> + src_offset = get_offset_pat_index(ahnd, surf->src.handle, surf->src.size,
>> + alignment, surf->src.pat_index);
>> + dst_offset = get_offset_pat_index(ahnd, surf->dst.handle, surf->dst.size,
>> + alignment, surf->dst.pat_index);
>> bb_offset = get_offset(ahnd, surf->bb.handle, surf->bb.size, alignment);
>>
>> emit_blt_ctrl_surf_copy(fd, ahnd, surf, 0, true);
>> @@ -1308,10 +1317,12 @@ uint64_t emit_blt_fast_copy(int fd,
>> data.dw03.dst_x2 = blt->dst.x2;
>> data.dw03.dst_y2 = blt->dst.y2;
>>
>> - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment)
>> - + blt->src.plane_offset;
>> - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment)
>> - + blt->dst.plane_offset;
>> + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
>> + alignment, blt->src.pat_index) +
>> + blt->src.plane_offset;
>> + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size, alignment,
>> + blt->dst.pat_index) +
>> + blt->dst.plane_offset;
>
> Ditto.
>
>> bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
>>
>> data.dw04.dst_address_lo = dst_offset;
>> @@ -1380,8 +1391,10 @@ int blt_fast_copy(int fd,
>> igt_assert_neq(blt->driver, 0);
>>
>> alignment = get_default_alignment(fd, blt->driver);
>> - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment);
>> - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment);
>> + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
>> + alignment, blt->src.pat_index);
>> + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
>> + alignment, blt->dst.pat_index);
>> bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
>>
>> emit_blt_fast_copy(fd, ahnd, blt, 0, true);
>> @@ -1460,7 +1473,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
>> &size, region) == 0);
>> }
>
> I think blt_create_object() should have also pat_index passed as an
> argument.
I think you would also have to pass in the cpu_caching mode, and maybe
even the coh_mode, if we wanted that. Currently blt_create_object()
gives you a combination of cpu_caching, coh_mode and pat_index that is
the default and should "just work" for most cases. Idea is if you need
something more exotic you would instead create your own object (using
say gem_create_caching) and then also select whatever pat_index you needed.
I can change it to expose everything but figured blt_create_object()
should be more "I don't care, just give me the defaults".
>
> Rest looks ok.
>
> --
> Zbigniew
>
>>
>> - blt_set_object(obj, handle, size, region, mocs, tiling,
>> + blt_set_object(obj, handle, size, region, mocs, DEFAULT_PAT_INDEX, tiling,
>> compression, compression_type);
>> blt_set_geom(obj, stride, 0, 0, width, height, 0, 0);
>>
>> @@ -1481,7 +1494,7 @@ void blt_destroy_object(int fd, struct blt_copy_object *obj)
>>
>> void blt_set_object(struct blt_copy_object *obj,
>> uint32_t handle, uint64_t size, uint32_t region,
>> - uint8_t mocs, enum blt_tiling_type tiling,
>> + uint8_t mocs, uint8_t pat_index, enum blt_tiling_type tiling,
>> enum blt_compression compression,
>> enum blt_compression_type compression_type)
>> {
>> @@ -1489,6 +1502,7 @@ void blt_set_object(struct blt_copy_object *obj,
>> obj->size = size;
>> obj->region = region;
>> obj->mocs = mocs;
>> + obj->pat_index = pat_index;
>> obj->tiling = tiling;
>> obj->compression = compression;
>> obj->compression_type = compression_type;
>> @@ -1516,12 +1530,14 @@ void blt_set_copy_object(struct blt_copy_object *obj,
>>
>> void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
>> uint32_t handle, uint32_t region, uint64_t size,
>> - uint8_t mocs, enum blt_access_type access_type)
>> + uint8_t mocs, uint8_t pat_index,
>> + enum blt_access_type access_type)
>> {
>> obj->handle = handle;
>> obj->region = region;
>> obj->size = size;
>> obj->mocs = mocs;
>> + obj->pat_index = pat_index;
>> obj->access_type = access_type;
>> }
>>
>> diff --git a/lib/intel_blt.h b/lib/intel_blt.h
>> index d9c8883c7..f8423a986 100644
>> --- a/lib/intel_blt.h
>> +++ b/lib/intel_blt.h
>> @@ -79,6 +79,7 @@ struct blt_copy_object {
>> uint32_t region;
>> uint64_t size;
>> uint8_t mocs;
>> + uint8_t pat_index;
>> enum blt_tiling_type tiling;
>> enum blt_compression compression; /* BC only */
>> enum blt_compression_type compression_type; /* BC only */
>> @@ -151,6 +152,7 @@ struct blt_ctrl_surf_copy_object {
>> uint32_t region;
>> uint64_t size;
>> uint8_t mocs;
>> + uint8_t pat_index;
>> enum blt_access_type access_type;
>> };
>>
>> @@ -247,7 +249,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
>> void blt_destroy_object(int fd, struct blt_copy_object *obj);
>> void blt_set_object(struct blt_copy_object *obj,
>> uint32_t handle, uint64_t size, uint32_t region,
>> - uint8_t mocs, enum blt_tiling_type tiling,
>> + uint8_t mocs, uint8_t pat_index, enum blt_tiling_type tiling,
>> enum blt_compression compression,
>> enum blt_compression_type compression_type);
>> void blt_set_object_ext(struct blt_block_copy_object_ext *obj,
>> @@ -258,7 +260,8 @@ void blt_set_copy_object(struct blt_copy_object *obj,
>> const struct blt_copy_object *orig);
>> void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
>> uint32_t handle, uint32_t region, uint64_t size,
>> - uint8_t mocs, enum blt_access_type access_type);
>> + uint8_t mocs, uint8_t pat_index,
>> + enum blt_access_type access_type);
>>
>> void blt_surface_info(const char *info,
>> const struct blt_copy_object *obj);
>> diff --git a/tests/intel/gem_ccs.c b/tests/intel/gem_ccs.c
>> index f5d4ab359..a98557b72 100644
>> --- a/tests/intel/gem_ccs.c
>> +++ b/tests/intel/gem_ccs.c
>> @@ -15,6 +15,7 @@
>> #include "lib/intel_chipset.h"
>> #include "intel_blt.h"
>> #include "intel_mocs.h"
>> +#include "intel_pat.h"
>> /**
>> * TEST: gem ccs
>> * Description: Exercise gen12 blitter with and without flatccs compression
>> @@ -111,9 +112,9 @@ static void surf_copy(int i915,
>> blt_ctrl_surf_copy_init(i915, &surf);
>> surf.print_bb = param.print_bb;
>> blt_set_ctrl_surf_object(&surf.src, mid->handle, mid->region, mid->size,
>> - uc_mocs, BLT_INDIRECT_ACCESS);
>> + uc_mocs, DEFAULT_PAT_INDEX, BLT_INDIRECT_ACCESS);
>> blt_set_ctrl_surf_object(&surf.dst, ccs, REGION_SMEM, ccssize,
>> - uc_mocs, DIRECT_ACCESS);
>> + uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
>> bb_size = 4096;
>> igt_assert_eq(__gem_create(i915, &bb_size, &bb1), 0);
>> blt_set_batch(&surf.bb, bb1, bb_size, REGION_SMEM);
>> @@ -133,7 +134,7 @@ static void surf_copy(int i915,
>> igt_system_suspend_autoresume(SUSPEND_STATE_FREEZE, SUSPEND_TEST_NONE);
>>
>> blt_set_ctrl_surf_object(&surf.dst, ccs2, REGION_SMEM, ccssize,
>> - 0, DIRECT_ACCESS);
>> + 0, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
>> blt_ctrl_surf_copy(i915, ctx, e, ahnd, &surf);
>> gem_sync(i915, surf.dst.handle);
>>
>> @@ -155,9 +156,9 @@ static void surf_copy(int i915,
>> for (int i = 0; i < surf.dst.size / sizeof(uint32_t); i++)
>> ccsmap[i] = i;
>> blt_set_ctrl_surf_object(&surf.src, ccs, REGION_SMEM, ccssize,
>> - uc_mocs, DIRECT_ACCESS);
>> + uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
>> blt_set_ctrl_surf_object(&surf.dst, mid->handle, mid->region, mid->size,
>> - uc_mocs, INDIRECT_ACCESS);
>> + uc_mocs, DEFAULT_PAT_INDEX, INDIRECT_ACCESS);
>> blt_ctrl_surf_copy(i915, ctx, e, ahnd, &surf);
>>
>> blt_copy_init(i915, &blt);
>> @@ -399,7 +400,8 @@ static void block_copy(int i915,
>> blt_set_object_ext(&ext.dst, 0, width, height, SURFACE_TYPE_2D);
>> if (config->inplace) {
>> blt_set_object(&blt.dst, mid->handle, dst->size, mid->region, 0,
>> - T_LINEAR, COMPRESSION_DISABLED, comp_type);
>> + DEFAULT_PAT_INDEX, T_LINEAR, COMPRESSION_DISABLED,
>> + comp_type);
>> blt.dst.ptr = mid->ptr;
>> }
>>
>> @@ -475,7 +477,7 @@ static void block_multicopy(int i915,
>>
>> if (config->inplace) {
>> blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
>> - mid->mocs, mid_tiling, COMPRESSION_DISABLED,
>> + mid->mocs, DEFAULT_PAT_INDEX, mid_tiling, COMPRESSION_DISABLED,
>> comp_type);
>> blt3.dst.ptr = mid->ptr;
>> }
>> diff --git a/tests/intel/gem_lmem_swapping.c b/tests/intel/gem_lmem_swapping.c
>> index ede545c92..7f2ab8bb6 100644
>> --- a/tests/intel/gem_lmem_swapping.c
>> +++ b/tests/intel/gem_lmem_swapping.c
>> @@ -486,7 +486,7 @@ static void __do_evict(int i915,
>> INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0));
>> blt_set_object(tmp, tmp->handle, params->size.max,
>> INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0),
>> - intel_get_uc_mocs(i915), T_LINEAR,
>> + intel_get_uc_mocs(i915), 0, T_LINEAR,
>> COMPRESSION_DISABLED, COMPRESSION_TYPE_3D);
>> blt_set_geom(tmp, stride, 0, 0, width, height, 0, 0);
>> }
>> @@ -516,7 +516,7 @@ static void __do_evict(int i915,
>> obj->blt_obj = calloc(1, sizeof(*obj->blt_obj));
>> igt_assert(obj->blt_obj);
>> blt_set_object(obj->blt_obj, obj->handle, obj->size, region_id,
>> - intel_get_uc_mocs(i915), T_LINEAR,
>> + intel_get_uc_mocs(i915), 0, T_LINEAR,
>> COMPRESSION_ENABLED, COMPRESSION_TYPE_3D);
>> blt_set_geom(obj->blt_obj, stride, 0, 0, width, height, 0, 0);
>> init_object_ccs(i915, obj, tmp, rand(), blt_ctx,
>> diff --git a/tests/intel/xe_ccs.c b/tests/intel/xe_ccs.c
>> index 20bbc4448..27859d5ce 100644
>> --- a/tests/intel/xe_ccs.c
>> +++ b/tests/intel/xe_ccs.c
>> @@ -13,6 +13,7 @@
>> #include "igt_syncobj.h"
>> #include "intel_blt.h"
>> #include "intel_mocs.h"
>> +#include "intel_pat.h"
>> #include "xe/xe_ioctl.h"
>> #include "xe/xe_query.h"
>> #include "xe/xe_util.h"
>> @@ -108,8 +109,9 @@ static void surf_copy(int xe,
>> blt_ctrl_surf_copy_init(xe, &surf);
>> surf.print_bb = param.print_bb;
>> blt_set_ctrl_surf_object(&surf.src, mid->handle, mid->region, mid->size,
>> - uc_mocs, BLT_INDIRECT_ACCESS);
>> - blt_set_ctrl_surf_object(&surf.dst, ccs, sysmem, ccssize, uc_mocs, DIRECT_ACCESS);
>> + uc_mocs, DEFAULT_PAT_INDEX, BLT_INDIRECT_ACCESS);
>> + blt_set_ctrl_surf_object(&surf.dst, ccs, sysmem, ccssize, uc_mocs,
>> + DEFAULT_PAT_INDEX, DIRECT_ACCESS);
>> bb_size = xe_get_default_alignment(xe);
>> bb1 = xe_bo_create_flags(xe, 0, bb_size, sysmem);
>> blt_set_batch(&surf.bb, bb1, bb_size, sysmem);
>> @@ -130,7 +132,7 @@ static void surf_copy(int xe,
>> igt_system_suspend_autoresume(SUSPEND_STATE_FREEZE, SUSPEND_TEST_NONE);
>>
>> blt_set_ctrl_surf_object(&surf.dst, ccs2, system_memory(xe), ccssize,
>> - 0, DIRECT_ACCESS);
>> + 0, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
>> blt_ctrl_surf_copy(xe, ctx, NULL, ahnd, &surf);
>> intel_ctx_xe_sync(ctx, true);
>>
>> @@ -153,9 +155,9 @@ static void surf_copy(int xe,
>> for (int i = 0; i < surf.dst.size / sizeof(uint32_t); i++)
>> ccsmap[i] = i;
>> blt_set_ctrl_surf_object(&surf.src, ccs, sysmem, ccssize,
>> - uc_mocs, DIRECT_ACCESS);
>> + uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
>> blt_set_ctrl_surf_object(&surf.dst, mid->handle, mid->region, mid->size,
>> - uc_mocs, INDIRECT_ACCESS);
>> + uc_mocs, DEFAULT_PAT_INDEX, INDIRECT_ACCESS);
>> blt_ctrl_surf_copy(xe, ctx, NULL, ahnd, &surf);
>> intel_ctx_xe_sync(ctx, true);
>>
>> @@ -369,7 +371,8 @@ static void block_copy(int xe,
>> blt_set_object_ext(&ext.dst, 0, width, height, SURFACE_TYPE_2D);
>> if (config->inplace) {
>> blt_set_object(&blt.dst, mid->handle, dst->size, mid->region, 0,
>> - T_LINEAR, COMPRESSION_DISABLED, comp_type);
>> + DEFAULT_PAT_INDEX, T_LINEAR, COMPRESSION_DISABLED,
>> + comp_type);
>> blt.dst.ptr = mid->ptr;
>> }
>>
>> @@ -450,8 +453,8 @@ static void block_multicopy(int xe,
>>
>> if (config->inplace) {
>> blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
>> - mid->mocs, mid_tiling, COMPRESSION_DISABLED,
>> - comp_type);
>> + mid->mocs, DEFAULT_PAT_INDEX, mid_tiling,
>> + COMPRESSION_DISABLED, comp_type);
>> blt3.dst.ptr = mid->ptr;
>> }
>>
>> --
>> 2.41.0
>>
^ permalink raw reply [flat|nested] 25+ messages in thread* Re: [igt-dev] [PATCH i-g-t 08/12] lib/intel_blt: support pat_index
2023-10-06 12:08 ` Matthew Auld
@ 2023-10-09 9:21 ` Zbigniew Kempczyński
0 siblings, 0 replies; 25+ messages in thread
From: Zbigniew Kempczyński @ 2023-10-09 9:21 UTC (permalink / raw)
To: Matthew Auld; +Cc: igt-dev, intel-xe
On Fri, Oct 06, 2023 at 01:08:50PM +0100, Matthew Auld wrote:
> On 06/10/2023 12:51, Zbigniew Kempczyński wrote:
> > On Thu, Oct 05, 2023 at 04:31:12PM +0100, Matthew Auld wrote:
> > > For the most part we can just use the default wb, however some users
> > > including display might want to use something else.
> > >
> > > Signed-off-by: Matthew Auld <matthew.auld@intel.com>
> > > Cc: José Roberto de Souza <jose.souza@intel.com>
> > > Cc: Pallavi Mishra <pallavi.mishra@intel.com>
> > > ---
> > > lib/igt_fb.c | 2 ++
> > > lib/intel_blt.c | 54 +++++++++++++++++++++------------
> > > lib/intel_blt.h | 7 +++--
> > > tests/intel/gem_ccs.c | 16 +++++-----
> > > tests/intel/gem_lmem_swapping.c | 4 +--
> > > tests/intel/xe_ccs.c | 19 +++++++-----
> > > 6 files changed, 64 insertions(+), 38 deletions(-)
> > >
> > > diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> > > index f8a0db22c..d290fd775 100644
> > > --- a/lib/igt_fb.c
> > > +++ b/lib/igt_fb.c
> > > @@ -37,6 +37,7 @@
> > > #include "i915/gem_mman.h"
> > > #include "intel_blt.h"
> > > #include "intel_mocs.h"
> > > +#include "intel_pat.h"
> > > #include "igt_aux.h"
> > > #include "igt_color_encoding.h"
> > > #include "igt_fb.h"
> > > @@ -2768,6 +2769,7 @@ static struct blt_copy_object *blt_fb_init(const struct igt_fb *fb,
> > > blt_set_object(blt, handle, fb->size, memregion,
> > > intel_get_uc_mocs(fb->fd),
> > > + intel_get_pat_idx_wt(fb->fd),
> > > blt_tile,
> > > is_ccs_modifier(fb->modifier) ? COMPRESSION_ENABLED : COMPRESSION_DISABLED,
> > > is_gen12_mc_ccs_modifier(fb->modifier) ? COMPRESSION_TYPE_MEDIA : COMPRESSION_TYPE_3D);
> > > diff --git a/lib/intel_blt.c b/lib/intel_blt.c
> > > index b55fa9b52..b7ac2902b 100644
> > > --- a/lib/intel_blt.c
> > > +++ b/lib/intel_blt.c
> > > @@ -13,6 +13,7 @@
> > > #include "igt.h"
> > > #include "igt_syncobj.h"
> > > #include "intel_blt.h"
> > > +#include "intel_pat.h"
> > > #include "xe/xe_ioctl.h"
> > > #include "xe/xe_query.h"
> > > #include "xe/xe_util.h"
> > > @@ -810,10 +811,12 @@ uint64_t emit_blt_block_copy(int fd,
> > > igt_assert_f(blt, "block-copy requires data to do blit\n");
> > > alignment = get_default_alignment(fd, blt->driver);
> > > - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment)
> > > - + blt->src.plane_offset;
> > > - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment)
> > > - + blt->dst.plane_offset;
> > > + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
> > > + alignment, blt->src.pat_index) +
> > > + blt->src.plane_offset;
> > > + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
> > > + alignment, blt->dst.pat_index) +
> > > + blt->dst.plane_offset;
> >
> > To less tabs in formatting for src and dst plane_offset.
> >
> > > bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
> > > fill_data(&data, blt, src_offset, dst_offset, ext);
> > > @@ -884,8 +887,10 @@ int blt_block_copy(int fd,
> > > igt_assert_neq(blt->driver, 0);
> > > alignment = get_default_alignment(fd, blt->driver);
> > > - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment);
> > > - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment);
> > > + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
> > > + alignment, blt->src.pat_index);
> > > + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
> > > + alignment, blt->dst.pat_index);
> > > bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
> > > emit_blt_block_copy(fd, ahnd, blt, ext, 0, true);
> > > @@ -1036,8 +1041,10 @@ uint64_t emit_blt_ctrl_surf_copy(int fd,
> > > data.dw00.size_of_ctrl_copy = __ccs_size(surf) / CCS_RATIO - 1;
> > > data.dw00.length = 0x3;
> > > - src_offset = get_offset(ahnd, surf->src.handle, surf->src.size, alignment);
> > > - dst_offset = get_offset(ahnd, surf->dst.handle, surf->dst.size, alignment);
> > > + src_offset = get_offset_pat_index(ahnd, surf->src.handle, surf->src.size,
> > > + alignment, surf->src.pat_index);
> > > + dst_offset = get_offset_pat_index(ahnd, surf->dst.handle, surf->dst.size,
> > > + alignment, surf->dst.pat_index);
> > > bb_offset = get_offset(ahnd, surf->bb.handle, surf->bb.size, alignment);
> > > data.dw01.src_address_lo = src_offset;
> > > @@ -1103,8 +1110,10 @@ int blt_ctrl_surf_copy(int fd,
> > > igt_assert_neq(surf->driver, 0);
> > > alignment = max_t(uint64_t, get_default_alignment(fd, surf->driver), 1ull << 16);
> > > - src_offset = get_offset(ahnd, surf->src.handle, surf->src.size, alignment);
> > > - dst_offset = get_offset(ahnd, surf->dst.handle, surf->dst.size, alignment);
> > > + src_offset = get_offset_pat_index(ahnd, surf->src.handle, surf->src.size,
> > > + alignment, surf->src.pat_index);
> > > + dst_offset = get_offset_pat_index(ahnd, surf->dst.handle, surf->dst.size,
> > > + alignment, surf->dst.pat_index);
> > > bb_offset = get_offset(ahnd, surf->bb.handle, surf->bb.size, alignment);
> > > emit_blt_ctrl_surf_copy(fd, ahnd, surf, 0, true);
> > > @@ -1308,10 +1317,12 @@ uint64_t emit_blt_fast_copy(int fd,
> > > data.dw03.dst_x2 = blt->dst.x2;
> > > data.dw03.dst_y2 = blt->dst.y2;
> > > - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment)
> > > - + blt->src.plane_offset;
> > > - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment)
> > > - + blt->dst.plane_offset;
> > > + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
> > > + alignment, blt->src.pat_index) +
> > > + blt->src.plane_offset;
> > > + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size, alignment,
> > > + blt->dst.pat_index) +
> > > + blt->dst.plane_offset;
> >
> > Ditto.
> >
> > > bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
> > > data.dw04.dst_address_lo = dst_offset;
> > > @@ -1380,8 +1391,10 @@ int blt_fast_copy(int fd,
> > > igt_assert_neq(blt->driver, 0);
> > > alignment = get_default_alignment(fd, blt->driver);
> > > - src_offset = get_offset(ahnd, blt->src.handle, blt->src.size, alignment);
> > > - dst_offset = get_offset(ahnd, blt->dst.handle, blt->dst.size, alignment);
> > > + src_offset = get_offset_pat_index(ahnd, blt->src.handle, blt->src.size,
> > > + alignment, blt->src.pat_index);
> > > + dst_offset = get_offset_pat_index(ahnd, blt->dst.handle, blt->dst.size,
> > > + alignment, blt->dst.pat_index);
> > > bb_offset = get_offset(ahnd, blt->bb.handle, blt->bb.size, alignment);
> > > emit_blt_fast_copy(fd, ahnd, blt, 0, true);
> > > @@ -1460,7 +1473,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
> > > &size, region) == 0);
> > > }
> >
> > I think blt_create_object() should have also pat_index passed as an
> > argument.
>
> I think you would also have to pass in the cpu_caching mode, and maybe even
> the coh_mode, if we wanted that. Currently blt_create_object() gives you a
> combination of cpu_caching, coh_mode and pat_index that is the default and
> should "just work" for most cases. Idea is if you need something more exotic
> you would instead create your own object (using say gem_create_caching) and
> then also select whatever pat_index you needed.
>
> I can change it to expose everything but figured blt_create_object() should
> be more "I don't care, just give me the defaults".
Ok. You've conviced me. Any non-default settings might be changed before
the exec.
--
Zbigniew
>
> >
> > Rest looks ok.
> >
> > --
> > Zbigniew
> >
> > > - blt_set_object(obj, handle, size, region, mocs, tiling,
> > > + blt_set_object(obj, handle, size, region, mocs, DEFAULT_PAT_INDEX, tiling,
> > > compression, compression_type);
> > > blt_set_geom(obj, stride, 0, 0, width, height, 0, 0);
> > > @@ -1481,7 +1494,7 @@ void blt_destroy_object(int fd, struct blt_copy_object *obj)
> > > void blt_set_object(struct blt_copy_object *obj,
> > > uint32_t handle, uint64_t size, uint32_t region,
> > > - uint8_t mocs, enum blt_tiling_type tiling,
> > > + uint8_t mocs, uint8_t pat_index, enum blt_tiling_type tiling,
> > > enum blt_compression compression,
> > > enum blt_compression_type compression_type)
> > > {
> > > @@ -1489,6 +1502,7 @@ void blt_set_object(struct blt_copy_object *obj,
> > > obj->size = size;
> > > obj->region = region;
> > > obj->mocs = mocs;
> > > + obj->pat_index = pat_index;
> > > obj->tiling = tiling;
> > > obj->compression = compression;
> > > obj->compression_type = compression_type;
> > > @@ -1516,12 +1530,14 @@ void blt_set_copy_object(struct blt_copy_object *obj,
> > > void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
> > > uint32_t handle, uint32_t region, uint64_t size,
> > > - uint8_t mocs, enum blt_access_type access_type)
> > > + uint8_t mocs, uint8_t pat_index,
> > > + enum blt_access_type access_type)
> > > {
> > > obj->handle = handle;
> > > obj->region = region;
> > > obj->size = size;
> > > obj->mocs = mocs;
> > > + obj->pat_index = pat_index;
> > > obj->access_type = access_type;
> > > }
> > > diff --git a/lib/intel_blt.h b/lib/intel_blt.h
> > > index d9c8883c7..f8423a986 100644
> > > --- a/lib/intel_blt.h
> > > +++ b/lib/intel_blt.h
> > > @@ -79,6 +79,7 @@ struct blt_copy_object {
> > > uint32_t region;
> > > uint64_t size;
> > > uint8_t mocs;
> > > + uint8_t pat_index;
> > > enum blt_tiling_type tiling;
> > > enum blt_compression compression; /* BC only */
> > > enum blt_compression_type compression_type; /* BC only */
> > > @@ -151,6 +152,7 @@ struct blt_ctrl_surf_copy_object {
> > > uint32_t region;
> > > uint64_t size;
> > > uint8_t mocs;
> > > + uint8_t pat_index;
> > > enum blt_access_type access_type;
> > > };
> > > @@ -247,7 +249,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
> > > void blt_destroy_object(int fd, struct blt_copy_object *obj);
> > > void blt_set_object(struct blt_copy_object *obj,
> > > uint32_t handle, uint64_t size, uint32_t region,
> > > - uint8_t mocs, enum blt_tiling_type tiling,
> > > + uint8_t mocs, uint8_t pat_index, enum blt_tiling_type tiling,
> > > enum blt_compression compression,
> > > enum blt_compression_type compression_type);
> > > void blt_set_object_ext(struct blt_block_copy_object_ext *obj,
> > > @@ -258,7 +260,8 @@ void blt_set_copy_object(struct blt_copy_object *obj,
> > > const struct blt_copy_object *orig);
> > > void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
> > > uint32_t handle, uint32_t region, uint64_t size,
> > > - uint8_t mocs, enum blt_access_type access_type);
> > > + uint8_t mocs, uint8_t pat_index,
> > > + enum blt_access_type access_type);
> > > void blt_surface_info(const char *info,
> > > const struct blt_copy_object *obj);
> > > diff --git a/tests/intel/gem_ccs.c b/tests/intel/gem_ccs.c
> > > index f5d4ab359..a98557b72 100644
> > > --- a/tests/intel/gem_ccs.c
> > > +++ b/tests/intel/gem_ccs.c
> > > @@ -15,6 +15,7 @@
> > > #include "lib/intel_chipset.h"
> > > #include "intel_blt.h"
> > > #include "intel_mocs.h"
> > > +#include "intel_pat.h"
> > > /**
> > > * TEST: gem ccs
> > > * Description: Exercise gen12 blitter with and without flatccs compression
> > > @@ -111,9 +112,9 @@ static void surf_copy(int i915,
> > > blt_ctrl_surf_copy_init(i915, &surf);
> > > surf.print_bb = param.print_bb;
> > > blt_set_ctrl_surf_object(&surf.src, mid->handle, mid->region, mid->size,
> > > - uc_mocs, BLT_INDIRECT_ACCESS);
> > > + uc_mocs, DEFAULT_PAT_INDEX, BLT_INDIRECT_ACCESS);
> > > blt_set_ctrl_surf_object(&surf.dst, ccs, REGION_SMEM, ccssize,
> > > - uc_mocs, DIRECT_ACCESS);
> > > + uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> > > bb_size = 4096;
> > > igt_assert_eq(__gem_create(i915, &bb_size, &bb1), 0);
> > > blt_set_batch(&surf.bb, bb1, bb_size, REGION_SMEM);
> > > @@ -133,7 +134,7 @@ static void surf_copy(int i915,
> > > igt_system_suspend_autoresume(SUSPEND_STATE_FREEZE, SUSPEND_TEST_NONE);
> > > blt_set_ctrl_surf_object(&surf.dst, ccs2, REGION_SMEM, ccssize,
> > > - 0, DIRECT_ACCESS);
> > > + 0, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> > > blt_ctrl_surf_copy(i915, ctx, e, ahnd, &surf);
> > > gem_sync(i915, surf.dst.handle);
> > > @@ -155,9 +156,9 @@ static void surf_copy(int i915,
> > > for (int i = 0; i < surf.dst.size / sizeof(uint32_t); i++)
> > > ccsmap[i] = i;
> > > blt_set_ctrl_surf_object(&surf.src, ccs, REGION_SMEM, ccssize,
> > > - uc_mocs, DIRECT_ACCESS);
> > > + uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> > > blt_set_ctrl_surf_object(&surf.dst, mid->handle, mid->region, mid->size,
> > > - uc_mocs, INDIRECT_ACCESS);
> > > + uc_mocs, DEFAULT_PAT_INDEX, INDIRECT_ACCESS);
> > > blt_ctrl_surf_copy(i915, ctx, e, ahnd, &surf);
> > > blt_copy_init(i915, &blt);
> > > @@ -399,7 +400,8 @@ static void block_copy(int i915,
> > > blt_set_object_ext(&ext.dst, 0, width, height, SURFACE_TYPE_2D);
> > > if (config->inplace) {
> > > blt_set_object(&blt.dst, mid->handle, dst->size, mid->region, 0,
> > > - T_LINEAR, COMPRESSION_DISABLED, comp_type);
> > > + DEFAULT_PAT_INDEX, T_LINEAR, COMPRESSION_DISABLED,
> > > + comp_type);
> > > blt.dst.ptr = mid->ptr;
> > > }
> > > @@ -475,7 +477,7 @@ static void block_multicopy(int i915,
> > > if (config->inplace) {
> > > blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
> > > - mid->mocs, mid_tiling, COMPRESSION_DISABLED,
> > > + mid->mocs, DEFAULT_PAT_INDEX, mid_tiling, COMPRESSION_DISABLED,
> > > comp_type);
> > > blt3.dst.ptr = mid->ptr;
> > > }
> > > diff --git a/tests/intel/gem_lmem_swapping.c b/tests/intel/gem_lmem_swapping.c
> > > index ede545c92..7f2ab8bb6 100644
> > > --- a/tests/intel/gem_lmem_swapping.c
> > > +++ b/tests/intel/gem_lmem_swapping.c
> > > @@ -486,7 +486,7 @@ static void __do_evict(int i915,
> > > INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0));
> > > blt_set_object(tmp, tmp->handle, params->size.max,
> > > INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0),
> > > - intel_get_uc_mocs(i915), T_LINEAR,
> > > + intel_get_uc_mocs(i915), 0, T_LINEAR,
> > > COMPRESSION_DISABLED, COMPRESSION_TYPE_3D);
> > > blt_set_geom(tmp, stride, 0, 0, width, height, 0, 0);
> > > }
> > > @@ -516,7 +516,7 @@ static void __do_evict(int i915,
> > > obj->blt_obj = calloc(1, sizeof(*obj->blt_obj));
> > > igt_assert(obj->blt_obj);
> > > blt_set_object(obj->blt_obj, obj->handle, obj->size, region_id,
> > > - intel_get_uc_mocs(i915), T_LINEAR,
> > > + intel_get_uc_mocs(i915), 0, T_LINEAR,
> > > COMPRESSION_ENABLED, COMPRESSION_TYPE_3D);
> > > blt_set_geom(obj->blt_obj, stride, 0, 0, width, height, 0, 0);
> > > init_object_ccs(i915, obj, tmp, rand(), blt_ctx,
> > > diff --git a/tests/intel/xe_ccs.c b/tests/intel/xe_ccs.c
> > > index 20bbc4448..27859d5ce 100644
> > > --- a/tests/intel/xe_ccs.c
> > > +++ b/tests/intel/xe_ccs.c
> > > @@ -13,6 +13,7 @@
> > > #include "igt_syncobj.h"
> > > #include "intel_blt.h"
> > > #include "intel_mocs.h"
> > > +#include "intel_pat.h"
> > > #include "xe/xe_ioctl.h"
> > > #include "xe/xe_query.h"
> > > #include "xe/xe_util.h"
> > > @@ -108,8 +109,9 @@ static void surf_copy(int xe,
> > > blt_ctrl_surf_copy_init(xe, &surf);
> > > surf.print_bb = param.print_bb;
> > > blt_set_ctrl_surf_object(&surf.src, mid->handle, mid->region, mid->size,
> > > - uc_mocs, BLT_INDIRECT_ACCESS);
> > > - blt_set_ctrl_surf_object(&surf.dst, ccs, sysmem, ccssize, uc_mocs, DIRECT_ACCESS);
> > > + uc_mocs, DEFAULT_PAT_INDEX, BLT_INDIRECT_ACCESS);
> > > + blt_set_ctrl_surf_object(&surf.dst, ccs, sysmem, ccssize, uc_mocs,
> > > + DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> > > bb_size = xe_get_default_alignment(xe);
> > > bb1 = xe_bo_create_flags(xe, 0, bb_size, sysmem);
> > > blt_set_batch(&surf.bb, bb1, bb_size, sysmem);
> > > @@ -130,7 +132,7 @@ static void surf_copy(int xe,
> > > igt_system_suspend_autoresume(SUSPEND_STATE_FREEZE, SUSPEND_TEST_NONE);
> > > blt_set_ctrl_surf_object(&surf.dst, ccs2, system_memory(xe), ccssize,
> > > - 0, DIRECT_ACCESS);
> > > + 0, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> > > blt_ctrl_surf_copy(xe, ctx, NULL, ahnd, &surf);
> > > intel_ctx_xe_sync(ctx, true);
> > > @@ -153,9 +155,9 @@ static void surf_copy(int xe,
> > > for (int i = 0; i < surf.dst.size / sizeof(uint32_t); i++)
> > > ccsmap[i] = i;
> > > blt_set_ctrl_surf_object(&surf.src, ccs, sysmem, ccssize,
> > > - uc_mocs, DIRECT_ACCESS);
> > > + uc_mocs, DEFAULT_PAT_INDEX, DIRECT_ACCESS);
> > > blt_set_ctrl_surf_object(&surf.dst, mid->handle, mid->region, mid->size,
> > > - uc_mocs, INDIRECT_ACCESS);
> > > + uc_mocs, DEFAULT_PAT_INDEX, INDIRECT_ACCESS);
> > > blt_ctrl_surf_copy(xe, ctx, NULL, ahnd, &surf);
> > > intel_ctx_xe_sync(ctx, true);
> > > @@ -369,7 +371,8 @@ static void block_copy(int xe,
> > > blt_set_object_ext(&ext.dst, 0, width, height, SURFACE_TYPE_2D);
> > > if (config->inplace) {
> > > blt_set_object(&blt.dst, mid->handle, dst->size, mid->region, 0,
> > > - T_LINEAR, COMPRESSION_DISABLED, comp_type);
> > > + DEFAULT_PAT_INDEX, T_LINEAR, COMPRESSION_DISABLED,
> > > + comp_type);
> > > blt.dst.ptr = mid->ptr;
> > > }
> > > @@ -450,8 +453,8 @@ static void block_multicopy(int xe,
> > > if (config->inplace) {
> > > blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
> > > - mid->mocs, mid_tiling, COMPRESSION_DISABLED,
> > > - comp_type);
> > > + mid->mocs, DEFAULT_PAT_INDEX, mid_tiling,
> > > + COMPRESSION_DISABLED, comp_type);
> > > blt3.dst.ptr = mid->ptr;
> > > }
> > > --
> > > 2.41.0
> > >
^ permalink raw reply [flat|nested] 25+ messages in thread
* [igt-dev] [PATCH i-g-t 09/12] lib/intel_buf: support pat_index
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (7 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 08/12] lib/intel_blt: support pat_index Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-06 12:13 ` [igt-dev] [Intel-xe] " Zbigniew Kempczyński
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 10/12] lib/xe_ioctl: update vm_bind to account for pat_index Matthew Auld
` (5 subsequent siblings)
14 siblings, 1 reply; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
Some users need to able select their own pat_index. Some display tests
use igt_draw which in turn uses intel_batchbuffer and intel_buf. We
also have a couple more display tests directly using these interfaces
directly. Idea is to select wt/uc for anything display related, but also
allow any test to select a pat_index for a given intel_buf.
Signted-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
lib/igt_draw.c | 7 +++++-
lib/igt_fb.c | 3 ++-
lib/intel_allocator.c | 1 +
lib/intel_allocator.h | 1 +
lib/intel_batchbuffer.c | 51 ++++++++++++++++++++++++++++++---------
lib/intel_bufops.c | 29 +++++++++++++++-------
lib/intel_bufops.h | 9 +++++--
tests/intel/kms_big_fb.c | 4 ++-
tests/intel/kms_dirtyfb.c | 7 ++++--
tests/intel/kms_psr.c | 4 ++-
tests/intel/xe_intel_bb.c | 3 ++-
11 files changed, 89 insertions(+), 30 deletions(-)
diff --git a/lib/igt_draw.c b/lib/igt_draw.c
index 2332bf94a..8db71ce5e 100644
--- a/lib/igt_draw.c
+++ b/lib/igt_draw.c
@@ -31,6 +31,7 @@
#include "intel_batchbuffer.h"
#include "intel_chipset.h"
#include "intel_mocs.h"
+#include "intel_pat.h"
#include "igt_core.h"
#include "igt_fb.h"
#include "ioctl_wrappers.h"
@@ -75,6 +76,7 @@ struct buf_data {
uint32_t size;
uint32_t stride;
int bpp;
+ uint8_t pat_index;
};
struct rect {
@@ -658,7 +660,8 @@ static struct intel_buf *create_buf(int fd, struct buf_ops *bops,
width, height, from->bpp, 0,
tiling, 0,
size, 0,
- region);
+ region,
+ from->pat_index);
/* Make sure we close handle on destroy path */
intel_buf_set_ownership(buf, true);
@@ -785,6 +788,7 @@ static void draw_rect_render(int fd, struct cmd_data *cmd_data,
igt_skip_on(!rendercopy);
/* We create a temporary buffer and copy from it using rendercopy. */
+ tmp.pat_index = buf->pat_index;
tmp.size = rect->w * rect->h * pixel_size;
if (is_i915_device(fd))
tmp.handle = gem_create(fd, tmp.size);
@@ -852,6 +856,7 @@ void igt_draw_rect(int fd, struct buf_ops *bops, uint32_t ctx,
.size = buf_size,
.stride = buf_stride,
.bpp = bpp,
+ .pat_index = intel_get_pat_idx_wt(fd),
};
struct rect rect = {
.x = rect_x,
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index d290fd775..61384c553 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -2637,7 +2637,8 @@ igt_fb_create_intel_buf(int fd, struct buf_ops *bops,
igt_fb_mod_to_tiling(fb->modifier),
compression, fb->size,
fb->strides[0],
- region);
+ region,
+ intel_get_pat_idx_wt(fd));
intel_buf_set_name(buf, name);
/* Make sure we close handle on destroy path */
diff --git a/lib/intel_allocator.c b/lib/intel_allocator.c
index da357b833..b3e5c0226 100644
--- a/lib/intel_allocator.c
+++ b/lib/intel_allocator.c
@@ -1449,6 +1449,7 @@ bool intel_allocator_is_reserved(uint64_t allocator_handle,
bool intel_allocator_reserve_if_not_allocated(uint64_t allocator_handle,
uint32_t handle,
uint64_t size, uint64_t offset,
+ uint8_t pat_index,
bool *is_allocatedp)
{
struct alloc_req req = { .request_type = REQ_RESERVE_IF_NOT_ALLOCATED,
diff --git a/lib/intel_allocator.h b/lib/intel_allocator.h
index 5da8af7f9..d93c5828d 100644
--- a/lib/intel_allocator.h
+++ b/lib/intel_allocator.h
@@ -206,6 +206,7 @@ bool intel_allocator_is_reserved(uint64_t allocator_handle,
bool intel_allocator_reserve_if_not_allocated(uint64_t allocator_handle,
uint32_t handle,
uint64_t size, uint64_t offset,
+ uint8_t pat_index,
bool *is_allocatedp);
void intel_allocator_print(uint64_t allocator_handle);
diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
index e7b1b755f..eaaf667ea 100644
--- a/lib/intel_batchbuffer.c
+++ b/lib/intel_batchbuffer.c
@@ -38,6 +38,7 @@
#include "intel_batchbuffer.h"
#include "intel_bufops.h"
#include "intel_chipset.h"
+#include "intel_pat.h"
#include "media_fill.h"
#include "media_spin.h"
#include "sw_sync.h"
@@ -825,15 +826,18 @@ static void __reallocate_objects(struct intel_bb *ibb)
static inline uint64_t __intel_bb_get_offset(struct intel_bb *ibb,
uint32_t handle,
uint64_t size,
- uint32_t alignment)
+ uint32_t alignment,
+ uint8_t pat_index)
{
uint64_t offset;
if (ibb->enforce_relocs)
return 0;
- offset = intel_allocator_alloc(ibb->allocator_handle,
- handle, size, alignment);
+ offset = __intel_allocator_alloc(ibb->allocator_handle, handle,
+ size, alignment, pat_index,
+ ALLOC_STRATEGY_NONE);
+ igt_assert(offset != ALLOC_INVALID_ADDRESS);
return offset;
}
@@ -1300,11 +1304,14 @@ static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(struct intel_bb *ibb,
ops->op = op;
ops->obj_offset = 0;
ops->addr = objects[i]->offset;
- ops->range = objects[i]->rsvd1;
+ ops->range = objects[i]->rsvd1 & ~(4096-1);
ops->region = region;
+ if (set_obj)
+ ops->pat_index = objects[i]->rsvd1 & (4096-1);
- igt_debug(" [%d]: handle: %u, offset: %llx, size: %llx\n",
- i, ops->obj, (long long)ops->addr, (long long)ops->range);
+ igt_debug(" [%d]: handle: %u, offset: %llx, size: %llx pat_index: %u\n",
+ i, ops->obj, (long long)ops->addr, (long long)ops->range,
+ ops->pat_index);
}
return bind_ops;
@@ -1409,7 +1416,8 @@ void intel_bb_reset(struct intel_bb *ibb, bool purge_objects_cache)
ibb->batch_offset = __intel_bb_get_offset(ibb,
ibb->handle,
ibb->size,
- ibb->alignment);
+ ibb->alignment,
+ DEFAULT_PAT_INDEX);
intel_bb_add_object(ibb, ibb->handle, ibb->size,
ibb->batch_offset,
@@ -1645,7 +1653,8 @@ static void __remove_from_objects(struct intel_bb *ibb,
*/
static struct drm_i915_gem_exec_object2 *
__intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
- uint64_t offset, uint64_t alignment, bool write)
+ uint64_t offset, uint64_t alignment, uint8_t pat_index,
+ bool write)
{
struct drm_i915_gem_exec_object2 *object;
@@ -1661,6 +1670,9 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
object = __add_to_cache(ibb, handle);
__add_to_objects(ibb, object);
+ if (pat_index == DEFAULT_PAT_INDEX)
+ pat_index = intel_get_pat_idx_wb(ibb->fd);
+
/*
* If object->offset == INVALID_ADDRESS we added freshly object to the
* cache. In that case we have two choices:
@@ -1670,7 +1682,7 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
if (INVALID_ADDR(object->offset)) {
if (INVALID_ADDR(offset)) {
offset = __intel_bb_get_offset(ibb, handle, size,
- alignment);
+ alignment, pat_index);
} else {
offset = offset & (ibb->gtt_size - 1);
@@ -1683,6 +1695,7 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
reserved = intel_allocator_reserve_if_not_allocated(ibb->allocator_handle,
handle, size, offset,
+ pat_index,
&allocated);
igt_assert_f(allocated || reserved,
"Can't get offset, allocated: %d, reserved: %d\n",
@@ -1721,6 +1734,18 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
if (ibb->driver == INTEL_DRIVER_XE) {
object->alignment = alignment;
object->rsvd1 = size;
+ igt_assert(!(size & (4096-1)));
+
+ if (pat_index == DEFAULT_PAT_INDEX)
+ pat_index = intel_get_pat_idx_wb(ibb->fd);
+
+ /*
+ * XXX: For now encode the pat_index in the first few bits of
+ * rsvd1. intel_batchbuffer should really stop using the i915
+ * drm_i915_gem_exec_object2 to encode VMA placement
+ * information on xe...
+ */
+ object->rsvd1 |= pat_index;
}
return object;
@@ -1733,7 +1758,7 @@ intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
struct drm_i915_gem_exec_object2 *obj = NULL;
obj = __intel_bb_add_object(ibb, handle, size, offset,
- alignment, write);
+ alignment, DEFAULT_PAT_INDEX, write);
igt_assert(obj);
return obj;
@@ -1795,8 +1820,10 @@ __intel_bb_add_intel_buf(struct intel_bb *ibb, struct intel_buf *buf,
}
}
- obj = intel_bb_add_object(ibb, buf->handle, intel_buf_bo_size(buf),
- buf->addr.offset, alignment, write);
+ obj = __intel_bb_add_object(ibb, buf->handle, intel_buf_bo_size(buf),
+ buf->addr.offset, alignment, buf->pat_index,
+ write);
+ igt_assert(obj);
buf->addr.offset = obj->offset;
if (igt_list_empty(&buf->link)) {
diff --git a/lib/intel_bufops.c b/lib/intel_bufops.c
index 2c91adb88..fbee4748e 100644
--- a/lib/intel_bufops.c
+++ b/lib/intel_bufops.c
@@ -29,6 +29,7 @@
#include "igt.h"
#include "igt_x86.h"
#include "intel_bufops.h"
+#include "intel_pat.h"
#include "xe/xe_ioctl.h"
#include "xe/xe_query.h"
@@ -818,7 +819,7 @@ static void __intel_buf_init(struct buf_ops *bops,
int width, int height, int bpp, int alignment,
uint32_t req_tiling, uint32_t compression,
uint64_t bo_size, int bo_stride,
- uint64_t region)
+ uint64_t region, uint8_t pat_index)
{
uint32_t tiling = req_tiling;
uint64_t size;
@@ -839,6 +840,10 @@ static void __intel_buf_init(struct buf_ops *bops,
IGT_INIT_LIST_HEAD(&buf->link);
buf->mocs = INTEL_BUF_MOCS_DEFAULT;
+ if (pat_index == DEFAULT_PAT_INDEX)
+ pat_index = intel_get_pat_idx_wb(bops->fd);
+ buf->pat_index = pat_index;
+
if (compression) {
igt_require(bops->intel_gen >= 9);
igt_assert(req_tiling == I915_TILING_Y ||
@@ -957,7 +962,7 @@ void intel_buf_init(struct buf_ops *bops,
region = bops->driver == INTEL_DRIVER_I915 ? I915_SYSTEM_MEMORY :
system_memory(bops->fd);
__intel_buf_init(bops, 0, buf, width, height, bpp, alignment,
- tiling, compression, 0, 0, region);
+ tiling, compression, 0, 0, region, DEFAULT_PAT_INDEX);
intel_buf_set_ownership(buf, true);
}
@@ -974,7 +979,7 @@ void intel_buf_init_in_region(struct buf_ops *bops,
uint64_t region)
{
__intel_buf_init(bops, 0, buf, width, height, bpp, alignment,
- tiling, compression, 0, 0, region);
+ tiling, compression, 0, 0, region, DEFAULT_PAT_INDEX);
intel_buf_set_ownership(buf, true);
}
@@ -1033,7 +1038,7 @@ void intel_buf_init_using_handle(struct buf_ops *bops,
uint32_t req_tiling, uint32_t compression)
{
__intel_buf_init(bops, handle, buf, width, height, bpp, alignment,
- req_tiling, compression, 0, 0, -1);
+ req_tiling, compression, 0, 0, -1, DEFAULT_PAT_INDEX);
}
/**
@@ -1050,6 +1055,7 @@ void intel_buf_init_using_handle(struct buf_ops *bops,
* @size: real bo size
* @stride: bo stride
* @region: region
+ * @pat_index: pat_index to use for the binding (only used on xe)
*
* Function configures BO handle within intel_buf structure passed by the caller
* (with all its metadata - width, height, ...). Useful if BO was created
@@ -1067,10 +1073,12 @@ void intel_buf_init_full(struct buf_ops *bops,
uint32_t compression,
uint64_t size,
int stride,
- uint64_t region)
+ uint64_t region,
+ uint8_t pat_index)
{
__intel_buf_init(bops, handle, buf, width, height, bpp, alignment,
- req_tiling, compression, size, stride, region);
+ req_tiling, compression, size, stride, region,
+ pat_index);
}
/**
@@ -1149,7 +1157,8 @@ struct intel_buf *intel_buf_create_using_handle_and_size(struct buf_ops *bops,
int stride)
{
return intel_buf_create_full(bops, handle, width, height, bpp, alignment,
- req_tiling, compression, size, stride, -1);
+ req_tiling, compression, size, stride, -1,
+ DEFAULT_PAT_INDEX);
}
struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
@@ -1160,7 +1169,8 @@ struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
uint32_t compression,
uint64_t size,
int stride,
- uint64_t region)
+ uint64_t region,
+ uint8_t pat_index)
{
struct intel_buf *buf;
@@ -1170,7 +1180,8 @@ struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
igt_assert(buf);
__intel_buf_init(bops, handle, buf, width, height, bpp, alignment,
- req_tiling, compression, size, stride, region);
+ req_tiling, compression, size, stride, region,
+ pat_index);
return buf;
}
diff --git a/lib/intel_bufops.h b/lib/intel_bufops.h
index 4dfe4681c..b6048402b 100644
--- a/lib/intel_bufops.h
+++ b/lib/intel_bufops.h
@@ -63,6 +63,9 @@ struct intel_buf {
/* Content Protection*/
bool is_protected;
+ /* pat_index to use for mapping this buf. Only used in Xe. */
+ uint8_t pat_index;
+
/* For debugging purposes */
char name[INTEL_BUF_NAME_MAXSIZE + 1];
};
@@ -161,7 +164,8 @@ void intel_buf_init_full(struct buf_ops *bops,
uint32_t compression,
uint64_t size,
int stride,
- uint64_t region);
+ uint64_t region,
+ uint8_t pat_index);
struct intel_buf *intel_buf_create(struct buf_ops *bops,
int width, int height,
@@ -192,7 +196,8 @@ struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
uint32_t compression,
uint64_t size,
int stride,
- uint64_t region);
+ uint64_t region,
+ uint8_t pat_index);
void intel_buf_destroy(struct intel_buf *buf);
static inline void intel_buf_set_pxp(struct intel_buf *buf, bool new_pxp_state)
diff --git a/tests/intel/kms_big_fb.c b/tests/intel/kms_big_fb.c
index 611e60896..854a77992 100644
--- a/tests/intel/kms_big_fb.c
+++ b/tests/intel/kms_big_fb.c
@@ -34,6 +34,7 @@
#include <string.h>
#include "i915/gem_create.h"
+#include "intel_pat.h"
#include "xe/xe_ioctl.h"
#include "xe/xe_query.h"
@@ -88,7 +89,8 @@ static struct intel_buf *init_buf(data_t *data,
handle = gem_open(data->drm_fd, name);
buf = intel_buf_create_full(data->bops, handle, width, height,
bpp, 0, tiling, 0, size, 0,
- region);
+ region,
+ intel_get_pat_idx_wt(data->drm_fd));
intel_buf_set_name(buf, buf_name);
intel_buf_set_ownership(buf, true);
diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
index cc9529178..ec9b2a137 100644
--- a/tests/intel/kms_dirtyfb.c
+++ b/tests/intel/kms_dirtyfb.c
@@ -10,6 +10,7 @@
#include "i915/intel_drrs.h"
#include "i915/intel_fbc.h"
+#include "intel_pat.h"
#include "xe/xe_query.h"
@@ -246,14 +247,16 @@ static void run_test(data_t *data)
0,
igt_fb_mod_to_tiling(data->fbs[1].modifier),
0, 0, 0, is_xe_device(data->drm_fd) ?
- system_memory(data->drm_fd) : 0);
+ system_memory(data->drm_fd) : 0,
+ intel_get_pat_idx_wt(data->drm_fd));
dst = intel_buf_create_full(data->bops, data->fbs[2].gem_handle,
data->fbs[2].width,
data->fbs[2].height,
igt_drm_format_to_bpp(data->fbs[2].drm_format),
0, igt_fb_mod_to_tiling(data->fbs[2].modifier),
0, 0, 0, is_xe_device(data->drm_fd) ?
- system_memory(data->drm_fd) : 0);
+ system_memory(data->drm_fd) : 0,
+ intel_get_pat_idx_wt(data->drm_fd));
ibb = intel_bb_create(data->drm_fd, PAGE_SIZE);
spin = igt_spin_new(data->drm_fd, .ahnd = ibb->allocator_handle);
diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
index ffecc5222..9c6ecd829 100644
--- a/tests/intel/kms_psr.c
+++ b/tests/intel/kms_psr.c
@@ -31,6 +31,7 @@
#include "igt.h"
#include "igt_sysfs.h"
#include "igt_psr.h"
+#include "intel_pat.h"
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
@@ -356,7 +357,8 @@ static struct intel_buf *create_buf_from_fb(data_t *data,
name = gem_flink(data->drm_fd, fb->gem_handle);
handle = gem_open(data->drm_fd, name);
buf = intel_buf_create_full(data->bops, handle, width, height,
- bpp, 0, tiling, 0, size, stride, region);
+ bpp, 0, tiling, 0, size, stride, region,
+ intel_get_pat_idx_wt(data->drm_fd));
intel_buf_set_ownership(buf, true);
return buf;
diff --git a/tests/intel/xe_intel_bb.c b/tests/intel/xe_intel_bb.c
index 0159a3164..e2480acf8 100644
--- a/tests/intel/xe_intel_bb.c
+++ b/tests/intel/xe_intel_bb.c
@@ -19,6 +19,7 @@
#include "igt.h"
#include "igt_crc.h"
#include "intel_bufops.h"
+#include "intel_pat.h"
#include "xe/xe_ioctl.h"
#include "xe/xe_query.h"
@@ -400,7 +401,7 @@ static void create_in_region(struct buf_ops *bops, uint64_t region)
intel_buf_init_full(bops, handle, &buf,
width/4, height, 32, 0,
I915_TILING_NONE, 0,
- size, 0, region);
+ size, 0, region, DEFAULT_PAT_INDEX);
intel_buf_set_ownership(&buf, true);
intel_bb_add_intel_buf(ibb, &buf, false);
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* Re: [igt-dev] [Intel-xe] [PATCH i-g-t 09/12] lib/intel_buf: support pat_index
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 09/12] lib/intel_buf: " Matthew Auld
@ 2023-10-06 12:13 ` Zbigniew Kempczyński
0 siblings, 0 replies; 25+ messages in thread
From: Zbigniew Kempczyński @ 2023-10-06 12:13 UTC (permalink / raw)
To: Matthew Auld; +Cc: igt-dev, intel-xe
On Thu, Oct 05, 2023 at 04:31:13PM +0100, Matthew Auld wrote:
> Some users need to able select their own pat_index. Some display tests
> use igt_draw which in turn uses intel_batchbuffer and intel_buf. We
> also have a couple more display tests directly using these interfaces
> directly. Idea is to select wt/uc for anything display related, but also
> allow any test to select a pat_index for a given intel_buf.
>
> Signted-off-by: Matthew Auld <matthew.auld@intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: Pallavi Mishra <pallavi.mishra@intel.com>
> ---
> lib/igt_draw.c | 7 +++++-
> lib/igt_fb.c | 3 ++-
> lib/intel_allocator.c | 1 +
> lib/intel_allocator.h | 1 +
> lib/intel_batchbuffer.c | 51 ++++++++++++++++++++++++++++++---------
> lib/intel_bufops.c | 29 +++++++++++++++-------
> lib/intel_bufops.h | 9 +++++--
> tests/intel/kms_big_fb.c | 4 ++-
> tests/intel/kms_dirtyfb.c | 7 ++++--
> tests/intel/kms_psr.c | 4 ++-
> tests/intel/xe_intel_bb.c | 3 ++-
> 11 files changed, 89 insertions(+), 30 deletions(-)
>
> diff --git a/lib/igt_draw.c b/lib/igt_draw.c
> index 2332bf94a..8db71ce5e 100644
> --- a/lib/igt_draw.c
> +++ b/lib/igt_draw.c
> @@ -31,6 +31,7 @@
> #include "intel_batchbuffer.h"
> #include "intel_chipset.h"
> #include "intel_mocs.h"
> +#include "intel_pat.h"
> #include "igt_core.h"
> #include "igt_fb.h"
> #include "ioctl_wrappers.h"
> @@ -75,6 +76,7 @@ struct buf_data {
> uint32_t size;
> uint32_t stride;
> int bpp;
> + uint8_t pat_index;
> };
>
> struct rect {
> @@ -658,7 +660,8 @@ static struct intel_buf *create_buf(int fd, struct buf_ops *bops,
> width, height, from->bpp, 0,
> tiling, 0,
> size, 0,
> - region);
> + region,
> + from->pat_index);
>
> /* Make sure we close handle on destroy path */
> intel_buf_set_ownership(buf, true);
> @@ -785,6 +788,7 @@ static void draw_rect_render(int fd, struct cmd_data *cmd_data,
> igt_skip_on(!rendercopy);
>
> /* We create a temporary buffer and copy from it using rendercopy. */
> + tmp.pat_index = buf->pat_index;
> tmp.size = rect->w * rect->h * pixel_size;
> if (is_i915_device(fd))
> tmp.handle = gem_create(fd, tmp.size);
> @@ -852,6 +856,7 @@ void igt_draw_rect(int fd, struct buf_ops *bops, uint32_t ctx,
> .size = buf_size,
> .stride = buf_stride,
> .bpp = bpp,
> + .pat_index = intel_get_pat_idx_wt(fd),
> };
> struct rect rect = {
> .x = rect_x,
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index d290fd775..61384c553 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -2637,7 +2637,8 @@ igt_fb_create_intel_buf(int fd, struct buf_ops *bops,
> igt_fb_mod_to_tiling(fb->modifier),
> compression, fb->size,
> fb->strides[0],
> - region);
> + region,
> + intel_get_pat_idx_wt(fd));
> intel_buf_set_name(buf, name);
>
> /* Make sure we close handle on destroy path */
> diff --git a/lib/intel_allocator.c b/lib/intel_allocator.c
> index da357b833..b3e5c0226 100644
> --- a/lib/intel_allocator.c
> +++ b/lib/intel_allocator.c
> @@ -1449,6 +1449,7 @@ bool intel_allocator_is_reserved(uint64_t allocator_handle,
> bool intel_allocator_reserve_if_not_allocated(uint64_t allocator_handle,
> uint32_t handle,
> uint64_t size, uint64_t offset,
> + uint8_t pat_index,
> bool *is_allocatedp)
> {
> struct alloc_req req = { .request_type = REQ_RESERVE_IF_NOT_ALLOCATED,
> diff --git a/lib/intel_allocator.h b/lib/intel_allocator.h
> index 5da8af7f9..d93c5828d 100644
> --- a/lib/intel_allocator.h
> +++ b/lib/intel_allocator.h
> @@ -206,6 +206,7 @@ bool intel_allocator_is_reserved(uint64_t allocator_handle,
> bool intel_allocator_reserve_if_not_allocated(uint64_t allocator_handle,
> uint32_t handle,
> uint64_t size, uint64_t offset,
> + uint8_t pat_index,
> bool *is_allocatedp);
>
> void intel_allocator_print(uint64_t allocator_handle);
> diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
> index e7b1b755f..eaaf667ea 100644
> --- a/lib/intel_batchbuffer.c
> +++ b/lib/intel_batchbuffer.c
> @@ -38,6 +38,7 @@
> #include "intel_batchbuffer.h"
> #include "intel_bufops.h"
> #include "intel_chipset.h"
> +#include "intel_pat.h"
> #include "media_fill.h"
> #include "media_spin.h"
> #include "sw_sync.h"
> @@ -825,15 +826,18 @@ static void __reallocate_objects(struct intel_bb *ibb)
> static inline uint64_t __intel_bb_get_offset(struct intel_bb *ibb,
> uint32_t handle,
> uint64_t size,
> - uint32_t alignment)
> + uint32_t alignment,
> + uint8_t pat_index)
> {
> uint64_t offset;
>
> if (ibb->enforce_relocs)
> return 0;
>
> - offset = intel_allocator_alloc(ibb->allocator_handle,
> - handle, size, alignment);
> + offset = __intel_allocator_alloc(ibb->allocator_handle, handle,
> + size, alignment, pat_index,
> + ALLOC_STRATEGY_NONE);
> + igt_assert(offset != ALLOC_INVALID_ADDRESS);
>
> return offset;
> }
> @@ -1300,11 +1304,14 @@ static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(struct intel_bb *ibb,
> ops->op = op;
> ops->obj_offset = 0;
> ops->addr = objects[i]->offset;
> - ops->range = objects[i]->rsvd1;
> + ops->range = objects[i]->rsvd1 & ~(4096-1);
I would introduce some macro for better readability, like
#define OBJ_SIZE(rsvd1) ((rsvd1) & ~(SZ_4K-1))
#define OBJ_PATIDX(rsvd1) ((rsvd1) & (SZ_4K-1))
or sth. Imo
ops->range = OBJ_SIZE(objects[i]->rsvd1);
ops->pat_index = OBJ_PATIDX(objects[i]->rsvd1);
suggests more data were packed into rsvd1 on first reading.
> ops->region = region;
> + if (set_obj)
> + ops->pat_index = objects[i]->rsvd1 & (4096-1);
>
> - igt_debug(" [%d]: handle: %u, offset: %llx, size: %llx\n",
> - i, ops->obj, (long long)ops->addr, (long long)ops->range);
> + igt_debug(" [%d]: handle: %u, offset: %llx, size: %llx pat_index: %u\n",
> + i, ops->obj, (long long)ops->addr, (long long)ops->range,
> + ops->pat_index);
> }
>
> return bind_ops;
> @@ -1409,7 +1416,8 @@ void intel_bb_reset(struct intel_bb *ibb, bool purge_objects_cache)
> ibb->batch_offset = __intel_bb_get_offset(ibb,
> ibb->handle,
> ibb->size,
> - ibb->alignment);
> + ibb->alignment,
> + DEFAULT_PAT_INDEX);
>
> intel_bb_add_object(ibb, ibb->handle, ibb->size,
> ibb->batch_offset,
> @@ -1645,7 +1653,8 @@ static void __remove_from_objects(struct intel_bb *ibb,
> */
> static struct drm_i915_gem_exec_object2 *
> __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
> - uint64_t offset, uint64_t alignment, bool write)
> + uint64_t offset, uint64_t alignment, uint8_t pat_index,
> + bool write)
> {
> struct drm_i915_gem_exec_object2 *object;
>
> @@ -1661,6 +1670,9 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
> object = __add_to_cache(ibb, handle);
> __add_to_objects(ibb, object);
>
> + if (pat_index == DEFAULT_PAT_INDEX)
> + pat_index = intel_get_pat_idx_wb(ibb->fd);
> +
> /*
> * If object->offset == INVALID_ADDRESS we added freshly object to the
> * cache. In that case we have two choices:
> @@ -1670,7 +1682,7 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
> if (INVALID_ADDR(object->offset)) {
> if (INVALID_ADDR(offset)) {
> offset = __intel_bb_get_offset(ibb, handle, size,
> - alignment);
> + alignment, pat_index);
> } else {
> offset = offset & (ibb->gtt_size - 1);
>
> @@ -1683,6 +1695,7 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
>
> reserved = intel_allocator_reserve_if_not_allocated(ibb->allocator_handle,
> handle, size, offset,
> + pat_index,
> &allocated);
> igt_assert_f(allocated || reserved,
> "Can't get offset, allocated: %d, reserved: %d\n",
> @@ -1721,6 +1734,18 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
> if (ibb->driver == INTEL_DRIVER_XE) {
> object->alignment = alignment;
> object->rsvd1 = size;
> + igt_assert(!(size & (4096-1)));
igt_assert(!OBJ_PATIDX(object->rsvd1));
?
But that's suggestion. Anyway for this one:
Acked-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com>
--
Zbigniew
> +
> + if (pat_index == DEFAULT_PAT_INDEX)
> + pat_index = intel_get_pat_idx_wb(ibb->fd);
> +
> + /*
> + * XXX: For now encode the pat_index in the first few bits of
> + * rsvd1. intel_batchbuffer should really stop using the i915
> + * drm_i915_gem_exec_object2 to encode VMA placement
> + * information on xe...
> + */
> + object->rsvd1 |= pat_index;
> }
>
> return object;
> @@ -1733,7 +1758,7 @@ intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
> struct drm_i915_gem_exec_object2 *obj = NULL;
>
> obj = __intel_bb_add_object(ibb, handle, size, offset,
> - alignment, write);
> + alignment, DEFAULT_PAT_INDEX, write);
> igt_assert(obj);
>
> return obj;
> @@ -1795,8 +1820,10 @@ __intel_bb_add_intel_buf(struct intel_bb *ibb, struct intel_buf *buf,
> }
> }
>
> - obj = intel_bb_add_object(ibb, buf->handle, intel_buf_bo_size(buf),
> - buf->addr.offset, alignment, write);
> + obj = __intel_bb_add_object(ibb, buf->handle, intel_buf_bo_size(buf),
> + buf->addr.offset, alignment, buf->pat_index,
> + write);
> + igt_assert(obj);
> buf->addr.offset = obj->offset;
>
> if (igt_list_empty(&buf->link)) {
> diff --git a/lib/intel_bufops.c b/lib/intel_bufops.c
> index 2c91adb88..fbee4748e 100644
> --- a/lib/intel_bufops.c
> +++ b/lib/intel_bufops.c
> @@ -29,6 +29,7 @@
> #include "igt.h"
> #include "igt_x86.h"
> #include "intel_bufops.h"
> +#include "intel_pat.h"
> #include "xe/xe_ioctl.h"
> #include "xe/xe_query.h"
>
> @@ -818,7 +819,7 @@ static void __intel_buf_init(struct buf_ops *bops,
> int width, int height, int bpp, int alignment,
> uint32_t req_tiling, uint32_t compression,
> uint64_t bo_size, int bo_stride,
> - uint64_t region)
> + uint64_t region, uint8_t pat_index)
> {
> uint32_t tiling = req_tiling;
> uint64_t size;
> @@ -839,6 +840,10 @@ static void __intel_buf_init(struct buf_ops *bops,
> IGT_INIT_LIST_HEAD(&buf->link);
> buf->mocs = INTEL_BUF_MOCS_DEFAULT;
>
> + if (pat_index == DEFAULT_PAT_INDEX)
> + pat_index = intel_get_pat_idx_wb(bops->fd);
> + buf->pat_index = pat_index;
> +
> if (compression) {
> igt_require(bops->intel_gen >= 9);
> igt_assert(req_tiling == I915_TILING_Y ||
> @@ -957,7 +962,7 @@ void intel_buf_init(struct buf_ops *bops,
> region = bops->driver == INTEL_DRIVER_I915 ? I915_SYSTEM_MEMORY :
> system_memory(bops->fd);
> __intel_buf_init(bops, 0, buf, width, height, bpp, alignment,
> - tiling, compression, 0, 0, region);
> + tiling, compression, 0, 0, region, DEFAULT_PAT_INDEX);
>
> intel_buf_set_ownership(buf, true);
> }
> @@ -974,7 +979,7 @@ void intel_buf_init_in_region(struct buf_ops *bops,
> uint64_t region)
> {
> __intel_buf_init(bops, 0, buf, width, height, bpp, alignment,
> - tiling, compression, 0, 0, region);
> + tiling, compression, 0, 0, region, DEFAULT_PAT_INDEX);
>
> intel_buf_set_ownership(buf, true);
> }
> @@ -1033,7 +1038,7 @@ void intel_buf_init_using_handle(struct buf_ops *bops,
> uint32_t req_tiling, uint32_t compression)
> {
> __intel_buf_init(bops, handle, buf, width, height, bpp, alignment,
> - req_tiling, compression, 0, 0, -1);
> + req_tiling, compression, 0, 0, -1, DEFAULT_PAT_INDEX);
> }
>
> /**
> @@ -1050,6 +1055,7 @@ void intel_buf_init_using_handle(struct buf_ops *bops,
> * @size: real bo size
> * @stride: bo stride
> * @region: region
> + * @pat_index: pat_index to use for the binding (only used on xe)
> *
> * Function configures BO handle within intel_buf structure passed by the caller
> * (with all its metadata - width, height, ...). Useful if BO was created
> @@ -1067,10 +1073,12 @@ void intel_buf_init_full(struct buf_ops *bops,
> uint32_t compression,
> uint64_t size,
> int stride,
> - uint64_t region)
> + uint64_t region,
> + uint8_t pat_index)
> {
> __intel_buf_init(bops, handle, buf, width, height, bpp, alignment,
> - req_tiling, compression, size, stride, region);
> + req_tiling, compression, size, stride, region,
> + pat_index);
> }
>
> /**
> @@ -1149,7 +1157,8 @@ struct intel_buf *intel_buf_create_using_handle_and_size(struct buf_ops *bops,
> int stride)
> {
> return intel_buf_create_full(bops, handle, width, height, bpp, alignment,
> - req_tiling, compression, size, stride, -1);
> + req_tiling, compression, size, stride, -1,
> + DEFAULT_PAT_INDEX);
> }
>
> struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
> @@ -1160,7 +1169,8 @@ struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
> uint32_t compression,
> uint64_t size,
> int stride,
> - uint64_t region)
> + uint64_t region,
> + uint8_t pat_index)
> {
> struct intel_buf *buf;
>
> @@ -1170,7 +1180,8 @@ struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
> igt_assert(buf);
>
> __intel_buf_init(bops, handle, buf, width, height, bpp, alignment,
> - req_tiling, compression, size, stride, region);
> + req_tiling, compression, size, stride, region,
> + pat_index);
>
> return buf;
> }
> diff --git a/lib/intel_bufops.h b/lib/intel_bufops.h
> index 4dfe4681c..b6048402b 100644
> --- a/lib/intel_bufops.h
> +++ b/lib/intel_bufops.h
> @@ -63,6 +63,9 @@ struct intel_buf {
> /* Content Protection*/
> bool is_protected;
>
> + /* pat_index to use for mapping this buf. Only used in Xe. */
> + uint8_t pat_index;
> +
> /* For debugging purposes */
> char name[INTEL_BUF_NAME_MAXSIZE + 1];
> };
> @@ -161,7 +164,8 @@ void intel_buf_init_full(struct buf_ops *bops,
> uint32_t compression,
> uint64_t size,
> int stride,
> - uint64_t region);
> + uint64_t region,
> + uint8_t pat_index);
>
> struct intel_buf *intel_buf_create(struct buf_ops *bops,
> int width, int height,
> @@ -192,7 +196,8 @@ struct intel_buf *intel_buf_create_full(struct buf_ops *bops,
> uint32_t compression,
> uint64_t size,
> int stride,
> - uint64_t region);
> + uint64_t region,
> + uint8_t pat_index);
> void intel_buf_destroy(struct intel_buf *buf);
>
> static inline void intel_buf_set_pxp(struct intel_buf *buf, bool new_pxp_state)
> diff --git a/tests/intel/kms_big_fb.c b/tests/intel/kms_big_fb.c
> index 611e60896..854a77992 100644
> --- a/tests/intel/kms_big_fb.c
> +++ b/tests/intel/kms_big_fb.c
> @@ -34,6 +34,7 @@
> #include <string.h>
>
> #include "i915/gem_create.h"
> +#include "intel_pat.h"
> #include "xe/xe_ioctl.h"
> #include "xe/xe_query.h"
>
> @@ -88,7 +89,8 @@ static struct intel_buf *init_buf(data_t *data,
> handle = gem_open(data->drm_fd, name);
> buf = intel_buf_create_full(data->bops, handle, width, height,
> bpp, 0, tiling, 0, size, 0,
> - region);
> + region,
> + intel_get_pat_idx_wt(data->drm_fd));
>
> intel_buf_set_name(buf, buf_name);
> intel_buf_set_ownership(buf, true);
> diff --git a/tests/intel/kms_dirtyfb.c b/tests/intel/kms_dirtyfb.c
> index cc9529178..ec9b2a137 100644
> --- a/tests/intel/kms_dirtyfb.c
> +++ b/tests/intel/kms_dirtyfb.c
> @@ -10,6 +10,7 @@
>
> #include "i915/intel_drrs.h"
> #include "i915/intel_fbc.h"
> +#include "intel_pat.h"
>
> #include "xe/xe_query.h"
>
> @@ -246,14 +247,16 @@ static void run_test(data_t *data)
> 0,
> igt_fb_mod_to_tiling(data->fbs[1].modifier),
> 0, 0, 0, is_xe_device(data->drm_fd) ?
> - system_memory(data->drm_fd) : 0);
> + system_memory(data->drm_fd) : 0,
> + intel_get_pat_idx_wt(data->drm_fd));
> dst = intel_buf_create_full(data->bops, data->fbs[2].gem_handle,
> data->fbs[2].width,
> data->fbs[2].height,
> igt_drm_format_to_bpp(data->fbs[2].drm_format),
> 0, igt_fb_mod_to_tiling(data->fbs[2].modifier),
> 0, 0, 0, is_xe_device(data->drm_fd) ?
> - system_memory(data->drm_fd) : 0);
> + system_memory(data->drm_fd) : 0,
> + intel_get_pat_idx_wt(data->drm_fd));
> ibb = intel_bb_create(data->drm_fd, PAGE_SIZE);
>
> spin = igt_spin_new(data->drm_fd, .ahnd = ibb->allocator_handle);
> diff --git a/tests/intel/kms_psr.c b/tests/intel/kms_psr.c
> index ffecc5222..9c6ecd829 100644
> --- a/tests/intel/kms_psr.c
> +++ b/tests/intel/kms_psr.c
> @@ -31,6 +31,7 @@
> #include "igt.h"
> #include "igt_sysfs.h"
> #include "igt_psr.h"
> +#include "intel_pat.h"
> #include <errno.h>
> #include <stdbool.h>
> #include <stdio.h>
> @@ -356,7 +357,8 @@ static struct intel_buf *create_buf_from_fb(data_t *data,
> name = gem_flink(data->drm_fd, fb->gem_handle);
> handle = gem_open(data->drm_fd, name);
> buf = intel_buf_create_full(data->bops, handle, width, height,
> - bpp, 0, tiling, 0, size, stride, region);
> + bpp, 0, tiling, 0, size, stride, region,
> + intel_get_pat_idx_wt(data->drm_fd));
> intel_buf_set_ownership(buf, true);
>
> return buf;
> diff --git a/tests/intel/xe_intel_bb.c b/tests/intel/xe_intel_bb.c
> index 0159a3164..e2480acf8 100644
> --- a/tests/intel/xe_intel_bb.c
> +++ b/tests/intel/xe_intel_bb.c
> @@ -19,6 +19,7 @@
> #include "igt.h"
> #include "igt_crc.h"
> #include "intel_bufops.h"
> +#include "intel_pat.h"
> #include "xe/xe_ioctl.h"
> #include "xe/xe_query.h"
>
> @@ -400,7 +401,7 @@ static void create_in_region(struct buf_ops *bops, uint64_t region)
> intel_buf_init_full(bops, handle, &buf,
> width/4, height, 32, 0,
> I915_TILING_NONE, 0,
> - size, 0, region);
> + size, 0, region, DEFAULT_PAT_INDEX);
> intel_buf_set_ownership(&buf, true);
>
> intel_bb_add_intel_buf(ibb, &buf, false);
> --
> 2.41.0
>
^ permalink raw reply [flat|nested] 25+ messages in thread
* [igt-dev] [PATCH i-g-t 10/12] lib/xe_ioctl: update vm_bind to account for pat_index
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (8 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 09/12] lib/intel_buf: " Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 11/12] tests/xe: add some vm_bind pat_index tests Matthew Auld
` (4 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
Keep things minimal and select the 1way+ by default on all platforms.
Other users can use intel_buf, get_offset_pat_index etc or use
__xe_vm_bind() directly. Display tests don't directly use this
interface.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
lib/xe/xe_ioctl.c | 8 ++++++--
lib/xe/xe_ioctl.h | 2 +-
tests/intel/xe_vm.c | 4 +++-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/lib/xe/xe_ioctl.c b/lib/xe/xe_ioctl.c
index 80696aa59..ebaed1e96 100644
--- a/lib/xe/xe_ioctl.c
+++ b/lib/xe/xe_ioctl.c
@@ -41,6 +41,7 @@
#include "config.h"
#include "drmtest.h"
#include "igt_syncobj.h"
+#include "intel_pat.h"
#include "ioctl_wrappers.h"
#include "xe_ioctl.h"
#include "xe_query.h"
@@ -92,7 +93,7 @@ void xe_vm_bind_array(int fd, uint32_t vm, uint32_t exec_queue,
int __xe_vm_bind(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo,
uint64_t offset, uint64_t addr, uint64_t size, uint32_t op,
struct drm_xe_sync *sync, uint32_t num_syncs, uint32_t region,
- uint64_t ext)
+ uint8_t pat_index, uint64_t ext)
{
struct drm_xe_vm_bind bind = {
.extensions = ext,
@@ -107,6 +108,8 @@ int __xe_vm_bind(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo,
.num_syncs = num_syncs,
.syncs = (uintptr_t)sync,
.exec_queue_id = exec_queue,
+ .bind.pat_index = (pat_index == DEFAULT_PAT_INDEX) ?
+ intel_get_pat_idx_wb(fd) : pat_index,
};
if (igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind))
@@ -121,7 +124,8 @@ void __xe_vm_bind_assert(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo,
uint32_t num_syncs, uint32_t region, uint64_t ext)
{
igt_assert_eq(__xe_vm_bind(fd, vm, exec_queue, bo, offset, addr, size,
- op, sync, num_syncs, region, ext), 0);
+ op, sync, num_syncs, region, DEFAULT_PAT_INDEX,
+ ext), 0);
}
void xe_vm_bind(int fd, uint32_t vm, uint32_t bo, uint64_t offset,
diff --git a/lib/xe/xe_ioctl.h b/lib/xe/xe_ioctl.h
index c18fc878c..cafbb011a 100644
--- a/lib/xe/xe_ioctl.h
+++ b/lib/xe/xe_ioctl.h
@@ -20,7 +20,7 @@ uint32_t xe_vm_create(int fd, uint32_t flags, uint64_t ext);
int __xe_vm_bind(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo,
uint64_t offset, uint64_t addr, uint64_t size, uint32_t op,
struct drm_xe_sync *sync, uint32_t num_syncs, uint32_t region,
- uint64_t ext);
+ uint8_t pat_index, uint64_t ext);
void __xe_vm_bind_assert(int fd, uint32_t vm, uint32_t exec_queue, uint32_t bo,
uint64_t offset, uint64_t addr, uint64_t size,
uint32_t op, struct drm_xe_sync *sync,
diff --git a/tests/intel/xe_vm.c b/tests/intel/xe_vm.c
index 4952ea786..ffb70973b 100644
--- a/tests/intel/xe_vm.c
+++ b/tests/intel/xe_vm.c
@@ -10,6 +10,7 @@
*/
#include "igt.h"
+#include "intel_pat.h"
#include "lib/igt_syncobj.h"
#include "lib/intel_reg.h"
#include "xe_drm.h"
@@ -316,7 +317,8 @@ static void userptr_invalid(int fd)
vm = xe_vm_create(fd, 0, 0);
munmap(data, size);
ret = __xe_vm_bind(fd, vm, 0, 0, to_user_pointer(data), 0x40000,
- size, XE_VM_BIND_OP_MAP_USERPTR, NULL, 0, 0, 0);
+ size, XE_VM_BIND_OP_MAP_USERPTR, NULL, 0, 0,
+ DEFAULT_PAT_INDEX, 0);
igt_assert(ret == -EFAULT);
xe_vm_destroy(fd, vm);
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* [igt-dev] [PATCH i-g-t 11/12] tests/xe: add some vm_bind pat_index tests
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (9 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 10/12] lib/xe_ioctl: update vm_bind to account for pat_index Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 12/12] tests/intel-ci/xe: add pat and caching related tests Matthew Auld
` (3 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: Nitish Kumar, intel-xe
Add some basic tests for pat_index and vm_bind.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
Cc: Nitish Kumar <nitish.kumar@intel.com>
---
tests/intel/xe_pat.c | 483 +++++++++++++++++++++++++++++++++++++++++++
tests/meson.build | 1 +
2 files changed, 484 insertions(+)
create mode 100644 tests/intel/xe_pat.c
diff --git a/tests/intel/xe_pat.c b/tests/intel/xe_pat.c
new file mode 100644
index 000000000..9c5261b4a
--- /dev/null
+++ b/tests/intel/xe_pat.c
@@ -0,0 +1,483 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+/**
+ * TEST: Test for selecting per-VMA pat_index
+ * Category: Software building block
+ * Sub-category: VMA
+ * Functionality: pat_index
+ */
+
+#include "igt.h"
+#include "intel_blt.h"
+#include "intel_mocs.h"
+#include "intel_pat.h"
+
+#include "xe/xe_ioctl.h"
+#include "xe/xe_query.h"
+#include "xe/xe_util.h"
+
+#define PAGE_SIZE 4096
+
+static bool do_slow_check;
+
+/**
+ * SUBTEST: userptr-coh-none
+ * Test category: functionality test
+ * Description: Test non-coherent pat_index on userptr
+ */
+static void userptr_coh_none(int fd)
+{
+ size_t size = xe_get_default_alignment(fd);
+ uint32_t vm;
+ void *data;
+
+ data = mmap(0, size, PROT_READ |
+ PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+ igt_assert(data != MAP_FAILED);
+
+ vm = xe_vm_create(fd, 0, 0);
+
+ /*
+ * Try some valid combinations first just to make sure we're not being
+ * swindled.
+ */
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, 0, to_user_pointer(data), 0x40000,
+ size, XE_VM_BIND_OP_MAP_USERPTR, NULL, 0, 0,
+ DEFAULT_PAT_INDEX, 0),
+ 0);
+ xe_vm_unbind_sync(fd, vm, 0, 0x40000, size);
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, 0, to_user_pointer(data), 0x40000,
+ size, XE_VM_BIND_OP_MAP_USERPTR, NULL, 0, 0,
+ intel_get_pat_idx_wb(fd), 0),
+ 0);
+ xe_vm_unbind_sync(fd, vm, 0, 0x40000, size);
+
+ /* And then some known COH_NONE pat_index combos which should fail. */
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, 0, to_user_pointer(data), 0x40000,
+ size, XE_VM_BIND_OP_MAP_USERPTR, NULL, 0, 0,
+ intel_get_pat_idx_uc(fd), 0),
+ -EINVAL);
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, 0, to_user_pointer(data), 0x40000,
+ size, XE_VM_BIND_OP_MAP_USERPTR, NULL, 0, 0,
+ intel_get_pat_idx_wt(fd), 0),
+ -EINVAL);
+
+ munmap(data, size);
+ xe_vm_destroy(fd, vm);
+}
+
+/**
+ * SUBTEST: pat-index-all
+ * Test category: functionality test
+ * Description: Test every pat_index
+ */
+static void pat_index_all(int fd)
+{
+ size_t size = xe_get_default_alignment(fd);
+ uint32_t vm, bo;
+ uint8_t pat_index;
+
+ vm = xe_vm_create(fd, 0, 0);
+
+ bo = xe_bo_create_caching(fd, 0, size, all_memory_regions(fd),
+ DRM_XE_GEM_CPU_CACHING_WC,
+ DRM_XE_GEM_COH_NONE);
+
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, bo, 0, 0x40000,
+ size, XE_VM_BIND_OP_MAP, NULL, 0, 0,
+ intel_get_pat_idx_uc(fd), 0),
+ 0);
+ xe_vm_unbind_sync(fd, vm, 0, 0x40000, size);
+
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, bo, 0, 0x40000,
+ size, XE_VM_BIND_OP_MAP, NULL, 0, 0,
+ intel_get_pat_idx_wt(fd), 0),
+ 0);
+ xe_vm_unbind_sync(fd, vm, 0, 0x40000, size);
+
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, bo, 0, 0x40000,
+ size, XE_VM_BIND_OP_MAP, NULL, 0, 0,
+ intel_get_pat_idx_wb(fd), 0),
+ 0);
+ xe_vm_unbind_sync(fd, vm, 0, 0x40000, size);
+
+ igt_assert(intel_get_max_pat_index(fd));
+
+ for (pat_index = 0; pat_index <= intel_get_max_pat_index(fd);
+ pat_index++) {
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, bo, 0, 0x40000,
+ size, XE_VM_BIND_OP_MAP, NULL, 0, 0,
+ pat_index, 0),
+ 0);
+ xe_vm_unbind_sync(fd, vm, 0, 0x40000, size);
+ }
+
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, bo, 0, 0x40000,
+ size, XE_VM_BIND_OP_MAP, NULL, 0, 0,
+ pat_index, 0),
+ -EINVAL);
+
+ gem_close(fd, bo);
+
+ /* Must be at least as coherent as the gem_create coh_mode. */
+ bo = xe_bo_create_caching(fd, 0, size, system_memory(fd),
+ DRM_XE_GEM_CPU_CACHING_WB,
+ DRM_XE_GEM_COH_AT_LEAST_1WAY);
+
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, bo, 0, 0x40000,
+ size, XE_VM_BIND_OP_MAP, NULL, 0, 0,
+ intel_get_pat_idx_uc(fd), 0),
+ -EINVAL);
+
+ igt_assert_eq(__xe_vm_bind(fd, vm, 0, bo, 0, 0x40000,
+ size, XE_VM_BIND_OP_MAP, NULL, 0, 0,
+ intel_get_pat_idx_wt(fd), 0),
+ -EINVAL);
+
+ gem_close(fd, bo);
+
+ xe_vm_destroy(fd, vm);
+}
+
+/**
+ * SUBTEST: pat-index-common-blt
+ * Test category: functionality test
+ * Description: Check the common pat_index modes with blitter copy.
+ */
+
+static void pat_index_blt(int fd,
+ uint32_t r1, uint8_t r1_pat_index, uint16_t r1_coh_mode,
+ uint32_t r2, uint8_t r2_pat_index, uint16_t r2_coh_mode)
+{
+ struct drm_xe_engine_class_instance inst = {
+ .engine_class = DRM_XE_ENGINE_CLASS_COPY,
+ };
+ struct blt_copy_data blt = {};
+ struct blt_copy_object src = {};
+ struct blt_copy_object dst = {};
+ uint32_t vm, exec_queue, src_bo, dst_bo, bb;
+ uint32_t *src_map, *dst_map;
+ uint16_t r1_cpu_caching, r2_cpu_caching;
+ intel_ctx_t *ctx;
+ uint64_t ahnd;
+ int width = 512, height = 512;
+ int size, stride, bb_size;
+ int bpp = 32;
+ int i;
+
+ vm = xe_vm_create(fd, DRM_XE_VM_CREATE_ASYNC_BIND_OPS, 0);
+ exec_queue = xe_exec_queue_create(fd, vm, &inst, 0);
+ ctx = intel_ctx_xe(fd, vm, exec_queue, 0, 0, 0);
+ ahnd = intel_allocator_open_full(fd, ctx->vm, 0, 0,
+ INTEL_ALLOCATOR_SIMPLE,
+ ALLOC_STRATEGY_LOW_TO_HIGH, 0);
+
+ bb_size = xe_get_default_alignment(fd);
+ bb = xe_bo_create_flags(fd, 0, bb_size, r1);
+
+ size = width * height * bpp / 8;
+ stride = width * 4;
+
+ if (r1_coh_mode == DRM_XE_GEM_COH_AT_LEAST_1WAY
+ && r1 == system_memory(fd))
+ r1_cpu_caching = DRM_XE_GEM_CPU_CACHING_WB;
+ else
+ r1_cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
+
+ if (r2_coh_mode == DRM_XE_GEM_COH_AT_LEAST_1WAY &&
+ r2 == system_memory(fd))
+ r2_cpu_caching = DRM_XE_GEM_CPU_CACHING_WB;
+ else
+ r2_cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
+
+ src_bo = xe_bo_create_caching(fd, 0, size, r1, r1_cpu_caching,
+ r1_coh_mode);
+ dst_bo = xe_bo_create_caching(fd, 0, size, r2, r2_cpu_caching,
+ r2_coh_mode);
+
+ blt_copy_init(fd, &blt);
+ blt.color_depth = CD_32bit;
+
+ blt_set_object(&src, src_bo, size, r1, intel_get_uc_mocs(fd),
+ r1_pat_index, T_LINEAR,
+ COMPRESSION_DISABLED, COMPRESSION_TYPE_3D);
+ blt_set_geom(&src, stride, 0, 0, width, height, 0, 0);
+
+ blt_set_object(&dst, dst_bo, size, r2, intel_get_uc_mocs(fd),
+ r2_pat_index, T_LINEAR,
+ COMPRESSION_DISABLED, COMPRESSION_TYPE_3D);
+ blt_set_geom(&dst, stride, 0, 0, width, height, 0, 0);
+
+ blt_set_copy_object(&blt.src, &src);
+ blt_set_copy_object(&blt.dst, &dst);
+ blt_set_batch(&blt.bb, bb, bb_size, r1);
+
+ src_map = xe_bo_map(fd, src_bo, size);
+ dst_map = xe_bo_map(fd, dst_bo, size);
+
+ /* Ensure we always see zeroes for the initial KMD zeroing */
+ blt_fast_copy(fd, ctx, NULL, ahnd, &blt);
+
+ /*
+ * Only sample random dword in every page if we are doing slow uncached
+ * reads from VRAM.
+ */
+ if (!do_slow_check && r2 != system_memory(fd)) {
+ int dwords_page = PAGE_SIZE / sizeof(uint32_t);
+ int dword = rand() % dwords_page;
+
+ igt_debug("random dword: %d\n", dword);
+
+ for (i = dword; i < size / sizeof(uint32_t); i += dwords_page)
+ igt_assert_eq(dst_map[i], 0);
+
+ } else {
+ for (i = 0; i < size / sizeof(uint32_t); i++)
+ igt_assert_eq(dst_map[i], 0);
+ }
+
+ /* Write some values from the CPU, potentially dirtying the CPU cache */
+ for (i = 0; i < size / sizeof(uint32_t); i++)
+ src_map[i] = i;
+
+ /* And finally ensure we always see the CPU written values */
+ blt_fast_copy(fd, ctx, NULL, ahnd, &blt);
+
+ if (!do_slow_check && r2 != system_memory(fd)) {
+ int dwords_page = PAGE_SIZE / sizeof(uint32_t);
+ int dword = rand() % dwords_page;
+
+ igt_debug("random dword: %d\n", dword);
+
+ for (i = dword; i < size / sizeof(uint32_t); i += dwords_page)
+ igt_assert_eq(dst_map[i], i);
+ } else {
+ for (i = 0; i < size / sizeof(uint32_t); i++)
+ igt_assert_eq(dst_map[i], i);
+ }
+
+ munmap(src_map, size);
+ munmap(dst_map, size);
+
+ gem_close(fd, src_bo);
+ gem_close(fd, dst_bo);
+ gem_close(fd, bb);
+
+ xe_exec_queue_destroy(fd, exec_queue);
+ xe_vm_destroy(fd, vm);
+
+ put_ahnd(ahnd);
+ intel_ctx_destroy(fd, ctx);
+}
+
+/**
+ * SUBTEST: pat-index-common-render
+ * Test category: functionality test
+ * Description: Check the common pat_index modes with render.
+ */
+
+static void pat_index_render(int fd,
+ uint32_t r1, uint8_t r1_pat_index, uint16_t r1_coh_mode,
+ uint32_t r2, uint8_t r2_pat_index, uint16_t r2_coh_mode)
+{
+ uint32_t devid = intel_get_drm_devid(fd);
+ igt_render_copyfunc_t render_copy = NULL;
+ int size, stride, width = 512, height = 512;
+ struct intel_buf src, dst;
+ struct intel_bb *ibb;
+ struct buf_ops *bops;
+ uint16_t r1_cpu_caching, r2_cpu_caching;
+ uint32_t src_bo, dst_bo;
+ uint32_t *src_map, *dst_map;
+ int bpp = 32;
+ int i;
+
+ bops = buf_ops_create(fd);
+
+ render_copy = igt_get_render_copyfunc(devid);
+ igt_assert(render_copy);
+
+ ibb = intel_bb_create(fd, xe_get_default_alignment(fd));
+
+ if (r1_coh_mode == DRM_XE_GEM_COH_AT_LEAST_1WAY
+ && r1 == system_memory(fd))
+ r1_cpu_caching = DRM_XE_GEM_CPU_CACHING_WB;
+ else
+ r1_cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
+
+ if (r2_coh_mode == DRM_XE_GEM_COH_AT_LEAST_1WAY &&
+ r2 == system_memory(fd))
+ r2_cpu_caching = DRM_XE_GEM_CPU_CACHING_WB;
+ else
+ r2_cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
+
+ size = width * height * bpp / 8;
+ stride = width * 4;
+
+ src_bo = xe_bo_create_caching(fd, 0, size, r1, r1_cpu_caching,
+ r1_coh_mode);
+ intel_buf_init_full(bops, src_bo, &src, width, height, bpp, 0,
+ I915_TILING_NONE, I915_COMPRESSION_NONE, size,
+ stride, r1, r1_pat_index);
+
+ dst_bo = xe_bo_create_caching(fd, 0, size, r2, r2_cpu_caching,
+ r2_coh_mode);
+ intel_buf_init_full(bops, dst_bo, &dst, width, height, bpp, 0,
+ I915_TILING_NONE, I915_COMPRESSION_NONE, size,
+ stride, r2, r2_pat_index);
+
+ src_map = xe_bo_map(fd, src_bo, size);
+ dst_map = xe_bo_map(fd, dst_bo, size);
+
+ /* Ensure we always see zeroes for the initial KMD zeroing */
+ render_copy(ibb,
+ &src,
+ 0, 0, width, height,
+ &dst,
+ 0, 0);
+ intel_bb_sync(ibb);
+
+ if (!do_slow_check && r2 != system_memory(fd)) {
+ int dwords_page = PAGE_SIZE / sizeof(uint32_t);
+ int dword = rand() % dwords_page;
+
+ igt_debug("random dword: %d\n", dword);
+
+ for (i = dword; i < size / sizeof(uint32_t); i += dwords_page)
+ igt_assert_eq(dst_map[i], 0);
+ } else {
+ for (i = 0; i < size / sizeof(uint32_t); i++)
+ igt_assert_eq(dst_map[i], 0);
+ }
+
+ /* Write some values from the CPU, potentially dirtying the CPU cache */
+ for (i = 0; i < size / sizeof(uint32_t); i++)
+ src_map[i] = i;
+
+ /* And finally ensure we always see the CPU written values */
+ render_copy(ibb,
+ &src,
+ 0, 0, width, height,
+ &dst,
+ 0, 0);
+ intel_bb_sync(ibb);
+
+ if (!do_slow_check && r2 != system_memory(fd)) {
+ int dwords_page = PAGE_SIZE / sizeof(uint32_t);
+ int dword = rand() % dwords_page;
+
+ igt_debug("random dword: %d\n", dword);
+
+ for (i = dword; i < size / sizeof(uint32_t); i += dwords_page)
+ igt_assert_eq(dst_map[i], i);
+ } else {
+ for (i = 0; i < size / sizeof(uint32_t); i++)
+ igt_assert_eq(dst_map[i], i);
+ }
+
+ munmap(src_map, size);
+ munmap(dst_map, size);
+
+ intel_bb_destroy(ibb);
+
+ gem_close(fd, src_bo);
+ gem_close(fd, dst_bo);
+}
+
+const struct pat_index_entry {
+ uint8_t (*get_pat_index)(int fd);
+ const char *name;
+ uint16_t coh_mode;
+} common_pat_index_modes[] = {
+ { intel_get_pat_idx_uc, "uc", DRM_XE_GEM_COH_NONE },
+ { intel_get_pat_idx_wt, "wt", DRM_XE_GEM_COH_NONE },
+ { intel_get_pat_idx_wb, "wb", DRM_XE_GEM_COH_AT_LEAST_1WAY },
+};
+
+typedef void (*pat_index_fn)(int fd,
+ uint32_t r1, uint8_t r1_pat_index, uint16_t r1_coh_mode,
+ uint32_t r2, uint8_t r2_pat_index, uint16_t r2_coh_mode);
+
+static void subtest_pat_index_common_with_regions(int fd, pat_index_fn fn)
+{
+ struct igt_collection *common_pat_index_set;
+ struct igt_collection *regions_set;
+ struct igt_collection *regions;
+
+ common_pat_index_set =
+ igt_collection_create(ARRAY_SIZE(common_pat_index_modes));
+
+ regions_set = xe_get_memory_region_set(fd,
+ XE_MEM_REGION_CLASS_SYSMEM,
+ XE_MEM_REGION_CLASS_VRAM);
+
+ for_each_variation_r(regions, 2, regions_set) {
+ struct igt_collection *modes;
+ uint32_t r1, r2;
+ char *reg_str;
+
+ r1 = igt_collection_get_value(regions, 0);
+ r2 = igt_collection_get_value(regions, 1);
+
+ reg_str = xe_memregion_dynamic_subtest_name(fd, regions);
+
+ for_each_variation_r(modes, 2, common_pat_index_set) {
+ struct pat_index_entry r1_entry, r2_entry;
+ uint8_t r1_pat_index, r2_pat_index;
+ int r1_idx, r2_idx;
+
+ r1_idx = igt_collection_get_value(modes, 0);
+ r2_idx = igt_collection_get_value(modes, 1);
+
+ r1_entry = common_pat_index_modes[r1_idx];
+ r2_entry = common_pat_index_modes[r2_idx];
+
+ r1_pat_index = r1_entry.get_pat_index(fd);
+ r2_pat_index = r2_entry.get_pat_index(fd);
+
+ igt_dynamic_f("%s-%s-%s", reg_str, r1_entry.name, r2_entry.name)
+ fn(fd,
+ r1, r1_pat_index, r1_entry.coh_mode,
+ r2, r2_pat_index, r2_entry.coh_mode);
+ }
+
+ free(reg_str);
+ }
+}
+
+igt_main
+{
+ int fd;
+ uint32_t seed;
+
+ igt_fixture {
+ fd = drm_open_driver(DRIVER_XE);
+
+ seed = time(NULL);
+ igt_debug("seed: %d\n", seed);
+
+ xe_device_get(fd);
+ }
+
+ igt_subtest("pat-index-all")
+ pat_index_all(fd);
+
+ igt_subtest("userptr-coh-none")
+ userptr_coh_none(fd);
+
+ igt_subtest_with_dynamic("pat-index-common-blt") {
+ igt_require(blt_has_fast_copy(fd));
+ subtest_pat_index_common_with_regions(fd, pat_index_blt);
+ }
+
+ igt_subtest_with_dynamic("pat-index-common-render") {
+ igt_require(xe_has_engine_class(fd, DRM_XE_ENGINE_CLASS_RENDER));
+ subtest_pat_index_common_with_regions(fd, pat_index_render);
+ }
+
+ igt_fixture
+ drm_close_driver(fd);
+}
diff --git a/tests/meson.build b/tests/meson.build
index 2404b2d4a..61351be04 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -296,6 +296,7 @@ intel_xe_progs = [
'xe_mmio',
'xe_module_load',
'xe_noexec_ping_pong',
+ 'xe_pat',
'xe_pm',
'xe_pm_residency',
'xe_prime_self_import',
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* [igt-dev] [PATCH i-g-t 12/12] tests/intel-ci/xe: add pat and caching related tests
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (10 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 11/12] tests/xe: add some vm_bind pat_index tests Matthew Auld
@ 2023-10-05 15:31 ` Matthew Auld
2023-10-05 20:12 ` [igt-dev] ✓ Fi.CI.BAT: success for PAT and cache coherency support Patchwork
` (2 subsequent siblings)
14 siblings, 0 replies; 25+ messages in thread
From: Matthew Auld @ 2023-10-05 15:31 UTC (permalink / raw)
To: igt-dev; +Cc: intel-xe
Add the various pat_index, coh_mode and cpu_caching related tests to
BAT.
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Pallavi Mishra <pallavi.mishra@intel.com>
---
tests/intel-ci/xe-fast-feedback.testlist | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/tests/intel-ci/xe-fast-feedback.testlist b/tests/intel-ci/xe-fast-feedback.testlist
index 610cc958c..c41be52a6 100644
--- a/tests/intel-ci/xe-fast-feedback.testlist
+++ b/tests/intel-ci/xe-fast-feedback.testlist
@@ -138,6 +138,7 @@ igt@xe_intel_bb@simple-bb-ctx
igt@xe_mmap@bad-extensions
igt@xe_mmap@bad-flags
igt@xe_mmap@bad-object
+igt@xe_mmap@cpu-caching-coh
igt@xe_mmap@system
igt@xe_mmap@vram
igt@xe_mmap@vram-system
@@ -180,6 +181,10 @@ igt@xe_vm@munmap-style-unbind-userptr-end
igt@xe_vm@munmap-style-unbind-userptr-front
igt@xe_vm@munmap-style-unbind-userptr-inval-end
igt@xe_vm@munmap-style-unbind-userptr-inval-front
+igt@xe_pat@pat-index-all
+igt@xe_pat@pat-index-common-blt
+igt@xe_pat@pat-index-common-render
+igt@xe_pat@userptr-coh-none
igt@xe_waitfence@abstime
igt@xe_waitfence@reltime
igt@kms_addfb_basic@addfb25-4-tiled
--
2.41.0
^ permalink raw reply related [flat|nested] 25+ messages in thread* [igt-dev] ✓ Fi.CI.BAT: success for PAT and cache coherency support
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (11 preceding siblings ...)
2023-10-05 15:31 ` [igt-dev] [PATCH i-g-t 12/12] tests/intel-ci/xe: add pat and caching related tests Matthew Auld
@ 2023-10-05 20:12 ` Patchwork
2023-10-05 21:29 ` [igt-dev] ✗ CI.xeBAT: failure " Patchwork
2023-10-06 10:38 ` [igt-dev] ✓ Fi.CI.IGT: success " Patchwork
14 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2023-10-05 20:12 UTC (permalink / raw)
To: Matthew Auld; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 5222 bytes --]
== Series Details ==
Series: PAT and cache coherency support
URL : https://patchwork.freedesktop.org/series/124667/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_13719 -> IGTPW_9930
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/index.html
Participating hosts (41 -> 40)
------------------------------
Missing (1): fi-snb-2520m
Known issues
------------
Here are the changes found in IGTPW_9930 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-c-dp-5:
- bat-adlp-11: [PASS][1] -> [ABORT][2] ([i915#8668] / [i915#9451])
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/bat-adlp-11/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-c-dp-5.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/bat-adlp-11/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-c-dp-5.html
#### Possible fixes ####
* igt@i915_module_load@load:
- fi-kbl-soraka: [DMESG-WARN][3] ([i915#1982]) -> [PASS][4]
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/fi-kbl-soraka/igt@i915_module_load@load.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/fi-kbl-soraka/igt@i915_module_load@load.html
* igt@i915_selftest@live@gt_lrc:
- bat-adlp-9: [INCOMPLETE][5] -> [PASS][6]
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/bat-adlp-9/igt@i915_selftest@live@gt_lrc.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/bat-adlp-9/igt@i915_selftest@live@gt_lrc.html
* igt@kms_chamelium_frames@dp-crc-fast:
- {bat-dg2-13}: [DMESG-WARN][7] ([Intel XE#485]) -> [PASS][8]
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/bat-dg2-13/igt@kms_chamelium_frames@dp-crc-fast.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/bat-dg2-13/igt@kms_chamelium_frames@dp-crc-fast.html
* igt@kms_cursor_legacy@basic-flip-before-cursor-atomic:
- bat-adlp-11: [DMESG-WARN][9] ([i915#6868]) -> [PASS][10]
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/bat-adlp-11/igt@kms_cursor_legacy@basic-flip-before-cursor-atomic.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/bat-adlp-11/igt@kms_cursor_legacy@basic-flip-before-cursor-atomic.html
* igt@kms_flip@basic-flip-vs-modeset@a-dp5:
- bat-adlp-11: [DMESG-FAIL][11] ([i915#6868]) -> [PASS][12]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/bat-adlp-11/igt@kms_flip@basic-flip-vs-modeset@a-dp5.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/bat-adlp-11/igt@kms_flip@basic-flip-vs-modeset@a-dp5.html
* igt@kms_flip@basic-flip-vs-modeset@b-dp5:
- bat-adlp-11: [FAIL][13] ([i915#6121]) -> [PASS][14] +6 other tests pass
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/bat-adlp-11/igt@kms_flip@basic-flip-vs-modeset@b-dp5.html
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/bat-adlp-11/igt@kms_flip@basic-flip-vs-modeset@b-dp5.html
* igt@kms_hdmi_inject@inject-audio:
- fi-kbl-guc: [FAIL][15] ([IGT#3]) -> [PASS][16]
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/fi-kbl-guc/igt@kms_hdmi_inject@inject-audio.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/fi-kbl-guc/igt@kms_hdmi_inject@inject-audio.html
* igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-dp-5:
- bat-adlp-11: [ABORT][17] ([i915#8668]) -> [PASS][18]
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/bat-adlp-11/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-dp-5.html
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/bat-adlp-11/igt@kms_pipe_crc_basic@read-crc-frame-sequence@pipe-d-dp-5.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[IGT#3]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/3
[Intel XE#485]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/485
[i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
[i915#6121]: https://gitlab.freedesktop.org/drm/intel/issues/6121
[i915#6868]: https://gitlab.freedesktop.org/drm/intel/issues/6868
[i915#8668]: https://gitlab.freedesktop.org/drm/intel/issues/8668
[i915#9451]: https://gitlab.freedesktop.org/drm/intel/issues/9451
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_7517 -> IGTPW_9930
CI-20190529: 20190529
CI_DRM_13719: 68e5c10def179bde3bf44bd95d19eea796cbf7a3 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_9930: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/index.html
IGT_7517: 8368e3ad3f9459a8f5cdd24f813ae802c1211029 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
Testlist changes
----------------
+igt@xe_mmap@cpu-caching-coh
+igt@xe_pat@pat-index-all
+igt@xe_pat@pat-index-common-blt
+igt@xe_pat@pat-index-common-render
+igt@xe_pat@userptr-coh-none
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/index.html
[-- Attachment #2: Type: text/html, Size: 6195 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread* [igt-dev] ✗ CI.xeBAT: failure for PAT and cache coherency support
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (12 preceding siblings ...)
2023-10-05 20:12 ` [igt-dev] ✓ Fi.CI.BAT: success for PAT and cache coherency support Patchwork
@ 2023-10-05 21:29 ` Patchwork
2023-10-06 10:38 ` [igt-dev] ✓ Fi.CI.IGT: success " Patchwork
14 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2023-10-05 21:29 UTC (permalink / raw)
To: Matthew Auld; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 7525 bytes --]
== Series Details ==
Series: PAT and cache coherency support
URL : https://patchwork.freedesktop.org/series/124667/
State : failure
== Summary ==
CI Bug Log - changes from XEIGT_7517_BAT -> XEIGTPW_9930_BAT
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with XEIGTPW_9930_BAT absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in XEIGTPW_9930_BAT, please notify your bug team (lgci.bug.filing@intel.com) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (4 -> 3)
------------------------------
Missing (1): bat-dg2-oem2
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in XEIGTPW_9930_BAT:
### IGT changes ###
#### Possible regressions ####
* igt@kms_addfb_basic@addfb25-yf-tiled-legacy:
- bat-adlp-7: [PASS][1] -> [WARN][2] +8 other tests warn
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7517/bat-adlp-7/igt@kms_addfb_basic@addfb25-yf-tiled-legacy.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9930/bat-adlp-7/igt@kms_addfb_basic@addfb25-yf-tiled-legacy.html
* igt@kms_pipe_crc_basic@compare-crc-sanitycheck-nv12@pipe-c-edp-1:
- bat-adlp-7: NOTRUN -> [FAIL][3] +60 other tests fail
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9930/bat-adlp-7/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-nv12@pipe-c-edp-1.html
* igt@xe_intel_bb@create-in-region:
- bat-adlp-7: [PASS][4] -> [FAIL][5] +86 other tests fail
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7517/bat-adlp-7/igt@xe_intel_bb@create-in-region.html
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9930/bat-adlp-7/igt@xe_intel_bb@create-in-region.html
#### Warnings ####
* igt@kms_addfb_basic@basic-y-tiled-legacy:
- bat-adlp-7: [FAIL][6] ([Intel XE#609]) -> [FAIL][7] +1 other test fail
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7517/bat-adlp-7/igt@kms_addfb_basic@basic-y-tiled-legacy.html
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9930/bat-adlp-7/igt@kms_addfb_basic@basic-y-tiled-legacy.html
* igt@kms_frontbuffer_tracking@basic:
- bat-adlp-7: [INCOMPLETE][8] ([Intel XE#632]) -> [FAIL][9]
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7517/bat-adlp-7/igt@kms_frontbuffer_tracking@basic.html
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9930/bat-adlp-7/igt@kms_frontbuffer_tracking@basic.html
* igt@xe_exec_store@basic-store:
- bat-adlp-7: [FAIL][10] ([Intel XE#761]) -> [FAIL][11]
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7517/bat-adlp-7/igt@xe_exec_store@basic-store.html
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9930/bat-adlp-7/igt@xe_exec_store@basic-store.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* {igt@xe_vm@bind-execqueues-independent}:
- bat-adlp-7: [PASS][12] -> [FAIL][13] +5 other tests fail
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7517/bat-adlp-7/igt@xe_vm@bind-execqueues-independent.html
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9930/bat-adlp-7/igt@xe_vm@bind-execqueues-independent.html
New tests
---------
New tests have been introduced between XEIGT_7517_BAT and XEIGTPW_9930_BAT:
### New IGT tests (23) ###
* igt@xe_mmap@cpu-caching-coh:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-all:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt@system-system-uc-uc:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt@system-system-uc-wb:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt@system-system-uc-wt:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt@system-system-wb-uc:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt@system-system-wb-wb:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt@system-system-wb-wt:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt@system-system-wt-uc:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt@system-system-wt-wb:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-blt@system-system-wt-wt:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render@system-system-uc-uc:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render@system-system-uc-wb:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render@system-system-uc-wt:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render@system-system-wb-uc:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render@system-system-wb-wb:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render@system-system-wb-wt:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render@system-system-wt-uc:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render@system-system-wt-wb:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@pat-index-common-render@system-system-wt-wt:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
* igt@xe_pat@userptr-coh-none:
- Statuses : 1 fail(s)
- Exec time: [0.0] s
Known issues
------------
Here are the changes found in XEIGTPW_9930_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@xe_live_ktest@migrate:
- bat-adlp-7: NOTRUN -> [INCOMPLETE][14] ([Intel XE#753])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9930/bat-adlp-7/igt@xe_live_ktest@migrate.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#524]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/524
[Intel XE#609]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/609
[Intel XE#632]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/632
[Intel XE#753]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/753
[Intel XE#761]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/761
Build changes
-------------
* IGT: IGT_7517 -> IGTPW_9930
* Linux: xe-415-3d2b298aaf52e74d4e90470cd65de047362e4875 -> xe-416-be79dc2504eef9a437df54ca9aac316755e475cf
IGTPW_9930: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/index.html
IGT_7517: 8368e3ad3f9459a8f5cdd24f813ae802c1211029 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-415-3d2b298aaf52e74d4e90470cd65de047362e4875: 3d2b298aaf52e74d4e90470cd65de047362e4875
xe-416-be79dc2504eef9a437df54ca9aac316755e475cf: be79dc2504eef9a437df54ca9aac316755e475cf
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_9930/index.html
[-- Attachment #2: Type: text/html, Size: 8961 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread* [igt-dev] ✓ Fi.CI.IGT: success for PAT and cache coherency support
2023-10-05 15:31 [igt-dev] [PATCH i-g-t 00/12] PAT and cache coherency support Matthew Auld
` (13 preceding siblings ...)
2023-10-05 21:29 ` [igt-dev] ✗ CI.xeBAT: failure " Patchwork
@ 2023-10-06 10:38 ` Patchwork
14 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2023-10-06 10:38 UTC (permalink / raw)
To: Matthew Auld; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 76988 bytes --]
== Series Details ==
Series: PAT and cache coherency support
URL : https://patchwork.freedesktop.org/series/124667/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_13719_full -> IGTPW_9930_full
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/index.html
Participating hosts (9 -> 9)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_9930_full:
### IGT changes ###
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* {igt@kms_content_protection@mei-interface}:
- shard-rkl: [SKIP][1] ([i915#9424]) -> [SKIP][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-6/igt@kms_content_protection@mei-interface.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@kms_content_protection@mei-interface.html
Known issues
------------
Here are the changes found in IGTPW_9930_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@api_intel_bb@blit-reloc-keep-cache:
- shard-rkl: NOTRUN -> [SKIP][3] ([i915#8411])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@api_intel_bb@blit-reloc-keep-cache.html
* igt@api_intel_bb@blit-reloc-purge-cache:
- shard-dg2: NOTRUN -> [SKIP][4] ([i915#8411]) +1 other test skip
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@api_intel_bb@blit-reloc-purge-cache.html
* igt@api_intel_bb@crc32:
- shard-dg1: NOTRUN -> [SKIP][5] ([i915#6230])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@api_intel_bb@crc32.html
* igt@drm_fdinfo@busy-idle-check-all@vcs1:
- shard-dg1: NOTRUN -> [SKIP][6] ([i915#8414]) +9 other tests skip
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-18/igt@drm_fdinfo@busy-idle-check-all@vcs1.html
* igt@drm_fdinfo@most-busy-check-all@bcs0:
- shard-dg2: NOTRUN -> [SKIP][7] ([i915#8414]) +11 other tests skip
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@drm_fdinfo@most-busy-check-all@bcs0.html
* igt@drm_fdinfo@virtual-idle:
- shard-rkl: NOTRUN -> [FAIL][8] ([i915#7742])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@drm_fdinfo@virtual-idle.html
* igt@gem_basic@multigpu-create-close:
- shard-rkl: NOTRUN -> [SKIP][9] ([i915#7697])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@gem_basic@multigpu-create-close.html
- shard-dg2: NOTRUN -> [SKIP][10] ([i915#7697])
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-10/igt@gem_basic@multigpu-create-close.html
* igt@gem_busy@busy@all-engines:
- shard-mtlp: [PASS][11] -> [DMESG-FAIL][12] ([i915#8962]) +3 other tests dmesg-fail
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-8/igt@gem_busy@busy@all-engines.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-4/igt@gem_busy@busy@all-engines.html
* igt@gem_busy@semaphore:
- shard-dg2: NOTRUN -> [SKIP][13] ([i915#3936])
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@gem_busy@semaphore.html
* igt@gem_ccs@ctrl-surf-copy:
- shard-mtlp: NOTRUN -> [SKIP][14] ([i915#3555])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-6/igt@gem_ccs@ctrl-surf-copy.html
* igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0:
- shard-dg2: [PASS][15] -> [INCOMPLETE][16] ([i915#7297])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-11/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0.html
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-7/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0.html
* igt@gem_create@create-ext-cpu-access-big:
- shard-dg2: NOTRUN -> [INCOMPLETE][17] ([i915#9364])
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@gem_create@create-ext-cpu-access-big.html
* igt@gem_ctx_exec@basic-nohangcheck:
- shard-rkl: [PASS][18] -> [FAIL][19] ([i915#6268])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-2/igt@gem_ctx_exec@basic-nohangcheck.html
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@gem_ctx_exec@basic-nohangcheck.html
- shard-tglu: [PASS][20] -> [FAIL][21] ([i915#6268])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-tglu-2/igt@gem_ctx_exec@basic-nohangcheck.html
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-tglu-9/igt@gem_ctx_exec@basic-nohangcheck.html
- shard-mtlp: [PASS][22] -> [FAIL][23] ([i915#6268])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-6/igt@gem_ctx_exec@basic-nohangcheck.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-4/igt@gem_ctx_exec@basic-nohangcheck.html
* igt@gem_ctx_persistence@saturated-hostile-nopreempt@ccs0:
- shard-dg2: NOTRUN -> [SKIP][24] ([i915#5882]) +9 other tests skip
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@gem_ctx_persistence@saturated-hostile-nopreempt@ccs0.html
* igt@gem_ctx_sseu@invalid-sseu:
- shard-dg2: NOTRUN -> [SKIP][25] ([i915#280])
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@gem_ctx_sseu@invalid-sseu.html
* igt@gem_eio@in-flight-contexts-10ms:
- shard-mtlp: [PASS][26] -> [FAIL][27] ([i915#8898])
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-2/igt@gem_eio@in-flight-contexts-10ms.html
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-5/igt@gem_eio@in-flight-contexts-10ms.html
* igt@gem_exec_balancer@bonded-sync:
- shard-dg2: NOTRUN -> [SKIP][28] ([i915#4771])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-3/igt@gem_exec_balancer@bonded-sync.html
* igt@gem_exec_balancer@hang:
- shard-mtlp: [PASS][29] -> [ABORT][30] ([i915#8104] / [i915#9414])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-4/igt@gem_exec_balancer@hang.html
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-3/igt@gem_exec_balancer@hang.html
* igt@gem_exec_balancer@noheartbeat:
- shard-dg2: NOTRUN -> [SKIP][31] ([i915#8555]) +2 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@gem_exec_balancer@noheartbeat.html
* igt@gem_exec_fair@basic-pace:
- shard-dg2: NOTRUN -> [SKIP][32] ([i915#3539]) +1 other test skip
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@gem_exec_fair@basic-pace.html
* igt@gem_exec_fair@basic-pace-share:
- shard-dg1: NOTRUN -> [SKIP][33] ([i915#3539] / [i915#4852])
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-15/igt@gem_exec_fair@basic-pace-share.html
* igt@gem_exec_fence@parallel@vecs0:
- shard-mtlp: [PASS][34] -> [FAIL][35] ([i915#8957]) +2 other tests fail
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-1/igt@gem_exec_fence@parallel@vecs0.html
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-4/igt@gem_exec_fence@parallel@vecs0.html
* igt@gem_exec_fence@submit67:
- shard-dg2: NOTRUN -> [SKIP][36] ([i915#4812])
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-7/igt@gem_exec_fence@submit67.html
* igt@gem_exec_flush@basic-uc-pro-default:
- shard-dg2: NOTRUN -> [SKIP][37] ([i915#3539] / [i915#4852]) +3 other tests skip
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@gem_exec_flush@basic-uc-pro-default.html
* igt@gem_exec_params@secure-non-master:
- shard-dg2: NOTRUN -> [SKIP][38] ([fdo#112283])
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@gem_exec_params@secure-non-master.html
* igt@gem_exec_reloc@basic-gtt-cpu-active:
- shard-dg2: NOTRUN -> [SKIP][39] ([i915#3281]) +8 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-7/igt@gem_exec_reloc@basic-gtt-cpu-active.html
* igt@gem_exec_reloc@basic-gtt-wc-noreloc:
- shard-dg1: NOTRUN -> [SKIP][40] ([i915#3281]) +2 other tests skip
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@gem_exec_reloc@basic-gtt-wc-noreloc.html
* igt@gem_exec_reloc@basic-write-read:
- shard-rkl: NOTRUN -> [SKIP][41] ([i915#3281]) +3 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@gem_exec_reloc@basic-write-read.html
* igt@gem_exec_schedule@preempt-queue:
- shard-dg2: NOTRUN -> [SKIP][42] ([i915#4537] / [i915#4812])
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@gem_exec_schedule@preempt-queue.html
* igt@gem_exec_schedule@preempt-queue-contexts:
- shard-dg1: NOTRUN -> [SKIP][43] ([i915#4812])
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@gem_exec_schedule@preempt-queue-contexts.html
* igt@gem_exec_schedule@preemptive-hang@vcs1:
- shard-mtlp: [PASS][44] -> [ABORT][45] ([i915#9414])
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-1/igt@gem_exec_schedule@preemptive-hang@vcs1.html
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-6/igt@gem_exec_schedule@preemptive-hang@vcs1.html
* igt@gem_fenced_exec_thrash@no-spare-fences-busy:
- shard-dg2: NOTRUN -> [SKIP][46] ([i915#4860]) +1 other test skip
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@gem_fenced_exec_thrash@no-spare-fences-busy.html
* igt@gem_lmem_swapping@heavy-random:
- shard-rkl: NOTRUN -> [SKIP][47] ([i915#4613])
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@gem_lmem_swapping@heavy-random.html
* igt@gem_lmem_swapping@smem-oom@lmem0:
- shard-dg2: [PASS][48] -> [TIMEOUT][49] ([i915#5493])
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-6/igt@gem_lmem_swapping@smem-oom@lmem0.html
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@gem_lmem_swapping@smem-oom@lmem0.html
* igt@gem_mmap@big-bo:
- shard-mtlp: NOTRUN -> [SKIP][50] ([i915#4083]) +1 other test skip
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-1/igt@gem_mmap@big-bo.html
* igt@gem_mmap@short-mmap:
- shard-dg2: NOTRUN -> [SKIP][51] ([i915#4083]) +2 other tests skip
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-10/igt@gem_mmap@short-mmap.html
* igt@gem_mmap_gtt@cpuset-big-copy:
- shard-dg2: NOTRUN -> [SKIP][52] ([i915#4077]) +10 other tests skip
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@gem_mmap_gtt@cpuset-big-copy.html
* igt@gem_mmap_gtt@fault-concurrent-x:
- shard-dg1: NOTRUN -> [SKIP][53] ([i915#4077]) +1 other test skip
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@gem_mmap_gtt@fault-concurrent-x.html
- shard-mtlp: NOTRUN -> [SKIP][54] ([i915#4077])
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-1/igt@gem_mmap_gtt@fault-concurrent-x.html
* igt@gem_mmap_wc@read:
- shard-dg1: NOTRUN -> [SKIP][55] ([i915#4083]) +5 other tests skip
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@gem_mmap_wc@read.html
* igt@gem_partial_pwrite_pread@write-display:
- shard-dg1: NOTRUN -> [SKIP][56] ([i915#3282]) +2 other tests skip
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@gem_partial_pwrite_pread@write-display.html
* igt@gem_pwrite@basic-random:
- shard-dg2: NOTRUN -> [SKIP][57] ([i915#3282]) +3 other tests skip
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-3/igt@gem_pwrite@basic-random.html
- shard-rkl: NOTRUN -> [SKIP][58] ([i915#3282])
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-2/igt@gem_pwrite@basic-random.html
* igt@gem_pxp@create-regular-context-2:
- shard-rkl: NOTRUN -> [SKIP][59] ([i915#4270])
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@gem_pxp@create-regular-context-2.html
* igt@gem_pxp@protected-raw-src-copy-not-readible:
- shard-dg1: NOTRUN -> [SKIP][60] ([i915#4270]) +1 other test skip
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@gem_pxp@protected-raw-src-copy-not-readible.html
- shard-tglu: NOTRUN -> [SKIP][61] ([i915#4270])
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-tglu-8/igt@gem_pxp@protected-raw-src-copy-not-readible.html
* igt@gem_pxp@regular-baseline-src-copy-readible:
- shard-dg2: NOTRUN -> [SKIP][62] ([i915#4270]) +4 other tests skip
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@gem_pxp@regular-baseline-src-copy-readible.html
* igt@gem_render_copy@y-tiled-ccs-to-yf-tiled-mc-ccs:
- shard-mtlp: NOTRUN -> [SKIP][63] ([i915#8428])
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-4/igt@gem_render_copy@y-tiled-ccs-to-yf-tiled-mc-ccs.html
* igt@gem_set_tiling_vs_blt@untiled-to-tiled:
- shard-dg1: NOTRUN -> [SKIP][64] ([i915#4079])
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-18/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html
* igt@gem_tiled_pread_basic:
- shard-dg2: NOTRUN -> [SKIP][65] ([i915#4079])
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-3/igt@gem_tiled_pread_basic.html
* igt@gem_userptr_blits@coherency-sync:
- shard-dg2: NOTRUN -> [SKIP][66] ([i915#3297]) +2 other tests skip
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-3/igt@gem_userptr_blits@coherency-sync.html
* igt@gem_userptr_blits@create-destroy-unsync:
- shard-rkl: NOTRUN -> [SKIP][67] ([i915#3297])
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@gem_userptr_blits@create-destroy-unsync.html
* igt@gem_userptr_blits@dmabuf-unsync:
- shard-dg1: NOTRUN -> [SKIP][68] ([i915#3297]) +1 other test skip
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@gem_userptr_blits@dmabuf-unsync.html
* igt@gem_userptr_blits@map-fixed-invalidate-overlap:
- shard-dg2: NOTRUN -> [SKIP][69] ([i915#3297] / [i915#4880])
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@gem_userptr_blits@map-fixed-invalidate-overlap.html
* igt@gem_userptr_blits@vma-merge:
- shard-dg2: NOTRUN -> [FAIL][70] ([i915#3318])
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@gem_userptr_blits@vma-merge.html
- shard-rkl: NOTRUN -> [FAIL][71] ([i915#3318])
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@gem_userptr_blits@vma-merge.html
* igt@gen3_render_linear_blits:
- shard-dg2: NOTRUN -> [SKIP][72] ([fdo#109289]) +4 other tests skip
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@gen3_render_linear_blits.html
* igt@gen7_exec_parse@cmd-crossing-page:
- shard-rkl: NOTRUN -> [SKIP][73] ([fdo#109289])
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@gen7_exec_parse@cmd-crossing-page.html
* igt@gen9_exec_parse@bb-start-cmd:
- shard-dg1: NOTRUN -> [SKIP][74] ([i915#2527]) +3 other tests skip
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@gen9_exec_parse@bb-start-cmd.html
* igt@gen9_exec_parse@secure-batches:
- shard-tglu: NOTRUN -> [SKIP][75] ([i915#2527] / [i915#2856])
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-tglu-4/igt@gen9_exec_parse@secure-batches.html
* igt@gen9_exec_parse@unaligned-jump:
- shard-dg2: NOTRUN -> [SKIP][76] ([i915#2856]) +1 other test skip
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@gen9_exec_parse@unaligned-jump.html
* igt@i915_pm_rc6_residency@rc6-idle@vecs0:
- shard-dg1: [PASS][77] -> [FAIL][78] ([i915#3591])
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg1-19/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-18/igt@i915_pm_rc6_residency@rc6-idle@vecs0.html
* igt@i915_pm_rpm@dpms-lpsp:
- shard-dg1: [PASS][79] -> [SKIP][80] ([i915#1397]) +1 other test skip
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg1-19/igt@i915_pm_rpm@dpms-lpsp.html
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@i915_pm_rpm@dpms-lpsp.html
- shard-dg2: NOTRUN -> [SKIP][81] ([i915#1397])
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@i915_pm_rpm@dpms-lpsp.html
* igt@i915_pm_rpm@dpms-mode-unset-lpsp:
- shard-dg2: [PASS][82] -> [SKIP][83] ([i915#1397])
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-10/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@i915_pm_rpm@dpms-mode-unset-lpsp.html
* igt@i915_pm_rpm@modeset-non-lpsp:
- shard-rkl: [PASS][84] -> [SKIP][85] ([i915#1397]) +1 other test skip
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-4/igt@i915_pm_rpm@modeset-non-lpsp.html
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@i915_pm_rpm@modeset-non-lpsp.html
* igt@i915_pm_rpm@modeset-pc8-residency-stress:
- shard-dg1: NOTRUN -> [SKIP][86] ([fdo#109506])
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-19/igt@i915_pm_rpm@modeset-pc8-residency-stress.html
* igt@i915_pm_rpm@pc8-residency:
- shard-dg2: NOTRUN -> [SKIP][87] ([fdo#109506])
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@i915_pm_rpm@pc8-residency.html
* igt@i915_pm_rps@basic-api:
- shard-dg2: NOTRUN -> [SKIP][88] ([i915#6621])
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@i915_pm_rps@basic-api.html
* igt@i915_pm_rps@min-max-config-loaded:
- shard-dg1: NOTRUN -> [SKIP][89] ([i915#6621])
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@i915_pm_rps@min-max-config-loaded.html
* igt@i915_pm_rps@thresholds-park@gt0:
- shard-dg2: NOTRUN -> [SKIP][90] ([i915#8925]) +1 other test skip
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@i915_pm_rps@thresholds-park@gt0.html
* igt@i915_query@query-topology-coherent-slice-mask:
- shard-dg2: NOTRUN -> [SKIP][91] ([i915#6188])
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@i915_query@query-topology-coherent-slice-mask.html
* igt@i915_selftest@live@gt_heartbeat:
- shard-apl: [PASS][92] -> [DMESG-FAIL][93] ([i915#5334])
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-apl2/igt@i915_selftest@live@gt_heartbeat.html
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-apl3/igt@i915_selftest@live@gt_heartbeat.html
* igt@kms_addfb_basic@basic-x-tiled-legacy:
- shard-dg2: NOTRUN -> [SKIP][94] ([i915#4212])
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_addfb_basic@basic-x-tiled-legacy.html
* igt@kms_addfb_basic@basic-y-tiled-legacy:
- shard-dg2: NOTRUN -> [SKIP][95] ([i915#4215] / [i915#5190])
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@kms_addfb_basic@basic-y-tiled-legacy.html
* igt@kms_addfb_basic@tile-pitch-mismatch:
- shard-dg2: NOTRUN -> [SKIP][96] ([i915#4212] / [i915#5608])
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@kms_addfb_basic@tile-pitch-mismatch.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-2-y-rc_ccs:
- shard-rkl: NOTRUN -> [SKIP][97] ([i915#8502]) +3 other tests skip
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-hdmi-a-2-y-rc_ccs.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-4-y-rc_ccs:
- shard-dg1: NOTRUN -> [SKIP][98] ([i915#8502]) +7 other tests skip
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-4-y-rc_ccs.html
* igt@kms_async_flips@crc@pipe-a-hdmi-a-2:
- shard-dg2: NOTRUN -> [FAIL][99] ([i915#8247]) +3 other tests fail
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@kms_async_flips@crc@pipe-a-hdmi-a-2.html
* igt@kms_big_fb@4-tiled-64bpp-rotate-180:
- shard-dg1: NOTRUN -> [SKIP][100] ([i915#4538] / [i915#5286]) +1 other test skip
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
- shard-mtlp: [PASS][101] -> [FAIL][102] ([i915#5138])
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-2/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-7/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- shard-rkl: NOTRUN -> [SKIP][103] ([i915#5286]) +2 other tests skip
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
* igt@kms_big_fb@x-tiled-16bpp-rotate-90:
- shard-dg2: NOTRUN -> [SKIP][104] ([fdo#111614]) +6 other tests skip
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-270:
- shard-rkl: NOTRUN -> [SKIP][105] ([fdo#111614] / [i915#3638])
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@kms_big_fb@x-tiled-8bpp-rotate-270.html
* igt@kms_big_fb@y-tiled-32bpp-rotate-180:
- shard-dg2: NOTRUN -> [SKIP][106] ([i915#5190]) +9 other tests skip
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@kms_big_fb@y-tiled-32bpp-rotate-180.html
* igt@kms_big_fb@y-tiled-64bpp-rotate-90:
- shard-dg1: NOTRUN -> [SKIP][107] ([i915#3638]) +1 other test skip
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-18/igt@kms_big_fb@y-tiled-64bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-tglu: [PASS][108] -> [FAIL][109] ([i915#3743]) +1 other test fail
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-tglu-4/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-tglu-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_big_fb@yf-tiled-16bpp-rotate-270:
- shard-dg1: NOTRUN -> [SKIP][110] ([i915#4538]) +1 other test skip
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html
* igt@kms_big_fb@yf-tiled-16bpp-rotate-90:
- shard-dg2: NOTRUN -> [SKIP][111] ([i915#4538] / [i915#5190]) +4 other tests skip
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@kms_big_fb@yf-tiled-16bpp-rotate-90.html
- shard-rkl: NOTRUN -> [SKIP][112] ([fdo#110723]) +1 other test skip
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@kms_big_fb@yf-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-addfb:
- shard-dg1: NOTRUN -> [SKIP][113] ([fdo#111615])
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@kms_big_fb@yf-tiled-addfb.html
- shard-mtlp: NOTRUN -> [SKIP][114] ([i915#6187])
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-3/igt@kms_big_fb@yf-tiled-addfb.html
* igt@kms_ccs@pipe-a-bad-aux-stride-y_tiled_gen12_rc_ccs_cc:
- shard-mtlp: NOTRUN -> [SKIP][115] ([i915#3886] / [i915#5354] / [i915#6095]) +1 other test skip
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-4/igt@kms_ccs@pipe-a-bad-aux-stride-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-a-bad-pixel-format-y_tiled_gen12_mc_ccs:
- shard-rkl: NOTRUN -> [SKIP][116] ([i915#3886] / [i915#5354] / [i915#6095])
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@kms_ccs@pipe-a-bad-pixel-format-y_tiled_gen12_mc_ccs.html
* igt@kms_ccs@pipe-a-missing-ccs-buffer-yf_tiled_ccs:
- shard-dg1: NOTRUN -> [SKIP][117] ([i915#3689] / [i915#5354] / [i915#6095]) +7 other tests skip
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-12/igt@kms_ccs@pipe-a-missing-ccs-buffer-yf_tiled_ccs.html
* igt@kms_ccs@pipe-a-random-ccs-data-y_tiled_ccs:
- shard-rkl: NOTRUN -> [SKIP][118] ([i915#3734] / [i915#5354] / [i915#6095]) +2 other tests skip
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@kms_ccs@pipe-a-random-ccs-data-y_tiled_ccs.html
* igt@kms_ccs@pipe-b-crc-primary-rotation-180-4_tiled_dg2_rc_ccs_cc:
- shard-rkl: NOTRUN -> [SKIP][119] ([i915#5354] / [i915#6095]) +3 other tests skip
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@kms_ccs@pipe-b-crc-primary-rotation-180-4_tiled_dg2_rc_ccs_cc.html
* igt@kms_ccs@pipe-c-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
- shard-dg1: NOTRUN -> [SKIP][120] ([i915#3689] / [i915#3886] / [i915#5354] / [i915#6095])
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-19/igt@kms_ccs@pipe-c-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html
* igt@kms_ccs@pipe-c-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc:
- shard-dg2: NOTRUN -> [SKIP][121] ([i915#3689] / [i915#3886] / [i915#5354]) +7 other tests skip
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-10/igt@kms_ccs@pipe-c-ccs-on-another-bo-y_tiled_gen12_rc_ccs_cc.html
* igt@kms_ccs@pipe-d-crc-primary-basic-yf_tiled_ccs:
- shard-dg2: NOTRUN -> [SKIP][122] ([i915#3689] / [i915#5354]) +27 other tests skip
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_ccs@pipe-d-crc-primary-basic-yf_tiled_ccs.html
* igt@kms_ccs@pipe-d-crc-primary-rotation-180-4_tiled_mtl_mc_ccs:
- shard-rkl: NOTRUN -> [SKIP][123] ([i915#5354]) +7 other tests skip
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@kms_ccs@pipe-d-crc-primary-rotation-180-4_tiled_mtl_mc_ccs.html
* igt@kms_ccs@pipe-d-missing-ccs-buffer-4_tiled_mtl_rc_ccs_cc:
- shard-dg1: NOTRUN -> [SKIP][124] ([i915#5354] / [i915#6095]) +9 other tests skip
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-18/igt@kms_ccs@pipe-d-missing-ccs-buffer-4_tiled_mtl_rc_ccs_cc.html
* igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3:
- shard-dg2: NOTRUN -> [SKIP][125] ([i915#4087] / [i915#7213]) +3 other tests skip
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-7/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3.html
* igt@kms_chamelium_color@ctm-negative:
- shard-dg1: NOTRUN -> [SKIP][126] ([fdo#111827]) +1 other test skip
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-19/igt@kms_chamelium_color@ctm-negative.html
- shard-mtlp: NOTRUN -> [SKIP][127] ([fdo#111827])
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-8/igt@kms_chamelium_color@ctm-negative.html
* igt@kms_chamelium_edid@dp-mode-timings:
- shard-dg1: NOTRUN -> [SKIP][128] ([i915#7828]) +3 other tests skip
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-18/igt@kms_chamelium_edid@dp-mode-timings.html
- shard-mtlp: NOTRUN -> [SKIP][129] ([i915#7828])
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-1/igt@kms_chamelium_edid@dp-mode-timings.html
* igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k:
- shard-dg2: NOTRUN -> [SKIP][130] ([i915#7828]) +11 other tests skip
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html
* igt@kms_chamelium_frames@hdmi-frame-dump:
- shard-rkl: NOTRUN -> [SKIP][131] ([i915#7828]) +1 other test skip
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-2/igt@kms_chamelium_frames@hdmi-frame-dump.html
* igt@kms_color@deep-color:
- shard-dg2: NOTRUN -> [SKIP][132] ([i915#3555]) +7 other tests skip
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@kms_color@deep-color.html
- shard-rkl: NOTRUN -> [SKIP][133] ([i915#3555]) +2 other tests skip
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@kms_color@deep-color.html
* igt@kms_content_protection@atomic-dpms:
- shard-dg2: NOTRUN -> [SKIP][134] ([i915#7118]) +1 other test skip
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_content_protection@atomic-dpms.html
* igt@kms_content_protection@dp-mst-lic-type-1:
- shard-dg2: NOTRUN -> [SKIP][135] ([i915#3299])
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-7/igt@kms_content_protection@dp-mst-lic-type-1.html
* igt@kms_cursor_crc@cursor-random-512x170:
- shard-dg2: NOTRUN -> [SKIP][136] ([i915#3359]) +1 other test skip
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_cursor_crc@cursor-random-512x170.html
- shard-rkl: NOTRUN -> [SKIP][137] ([i915#3359]) +1 other test skip
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-2/igt@kms_cursor_crc@cursor-random-512x170.html
* igt@kms_cursor_crc@cursor-sliding-512x512:
- shard-dg1: NOTRUN -> [SKIP][138] ([i915#3359])
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-16/igt@kms_cursor_crc@cursor-sliding-512x512.html
* igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic:
- shard-mtlp: NOTRUN -> [SKIP][139] ([i915#3546])
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-7/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-atomic:
- shard-dg2: NOTRUN -> [SKIP][140] ([fdo#109274] / [i915#5354]) +3 other tests skip
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
- shard-dg1: NOTRUN -> [SKIP][141] ([i915#4103] / [i915#4213])
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-15/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
- shard-dg2: NOTRUN -> [SKIP][142] ([i915#4103] / [i915#4213])
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][143] ([i915#3804])
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2.html
* igt@kms_draw_crc@draw-method-mmap-gtt:
- shard-dg2: NOTRUN -> [SKIP][144] ([i915#8812])
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@kms_draw_crc@draw-method-mmap-gtt.html
* igt@kms_dsc@dsc-basic:
- shard-dg2: NOTRUN -> [SKIP][145] ([i915#3555] / [i915#3840]) +1 other test skip
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@kms_dsc@dsc-basic.html
* igt@kms_dsc@dsc-with-output-formats:
- shard-rkl: NOTRUN -> [SKIP][146] ([i915#3555] / [i915#3840])
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@kms_dsc@dsc-with-output-formats.html
* igt@kms_fbcon_fbt@psr:
- shard-dg2: NOTRUN -> [SKIP][147] ([i915#3469]) +1 other test skip
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_fbcon_fbt@psr.html
- shard-rkl: NOTRUN -> [SKIP][148] ([fdo#110189] / [i915#3955])
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-2/igt@kms_fbcon_fbt@psr.html
* igt@kms_flip@2x-blocking-absolute-wf_vblank-interruptible:
- shard-tglu: NOTRUN -> [SKIP][149] ([fdo#109274] / [i915#3637])
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-tglu-3/igt@kms_flip@2x-blocking-absolute-wf_vblank-interruptible.html
* igt@kms_flip@2x-dpms-vs-vblank-race:
- shard-rkl: NOTRUN -> [SKIP][150] ([fdo#111825]) +3 other tests skip
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@kms_flip@2x-dpms-vs-vblank-race.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
- shard-snb: NOTRUN -> [SKIP][151] ([fdo#109271] / [fdo#111767])
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-snb6/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
* igt@kms_flip@2x-flip-vs-fences:
- shard-dg2: NOTRUN -> [SKIP][152] ([i915#8381]) +1 other test skip
[152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-7/igt@kms_flip@2x-flip-vs-fences.html
* igt@kms_flip@2x-modeset-vs-vblank-race:
- shard-dg2: NOTRUN -> [SKIP][153] ([fdo#109274]) +10 other tests skip
[153]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_flip@2x-modeset-vs-vblank-race.html
* igt@kms_flip@flip-vs-suspend-interruptible@b-hdmi-a1:
- shard-snb: NOTRUN -> [DMESG-WARN][154] ([i915#8841]) +5 other tests dmesg-warn
[154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-snb1/igt@kms_flip@flip-vs-suspend-interruptible@b-hdmi-a1.html
* igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode:
- shard-mtlp: NOTRUN -> [SKIP][155] ([i915#3555] / [i915#8810])
[155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-2/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode:
- shard-rkl: NOTRUN -> [SKIP][156] ([i915#2672]) +1 other test skip
[156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-default-mode:
- shard-mtlp: NOTRUN -> [SKIP][157] ([i915#2672] / [i915#3555])
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-4/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode:
- shard-dg2: NOTRUN -> [SKIP][158] ([i915#2672]) +2 other tests skip
[158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode:
- shard-dg1: NOTRUN -> [SKIP][159] ([i915#2587] / [i915#2672]) +2 other tests skip
[159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-19/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode.html
* igt@kms_force_connector_basic@force-load-detect:
- shard-dg2: NOTRUN -> [SKIP][160] ([fdo#109285])
[160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@kms_force_connector_basic@force-load-detect.html
- shard-rkl: NOTRUN -> [SKIP][161] ([fdo#109285] / [i915#4098])
[161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@kms_force_connector_basic@force-load-detect.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-blt:
- shard-dg2: [PASS][162] -> [FAIL][163] ([i915#6880])
[162]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-blt.html
[163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt:
- shard-dg2: NOTRUN -> [SKIP][164] ([i915#5354]) +50 other tests skip
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-gtt:
- shard-mtlp: NOTRUN -> [SKIP][165] ([i915#8708])
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbc-suspend:
- shard-dg2: [PASS][166] -> [FAIL][167] ([fdo#103375]) +2 other tests fail
[166]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-suspend.html
[167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-suspend.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
- shard-dg1: NOTRUN -> [SKIP][168] ([i915#8708]) +5 other tests skip
[168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-19/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-pri-indfb-multidraw:
- shard-dg1: NOTRUN -> [SKIP][169] ([fdo#111825]) +20 other tests skip
[169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-12/igt@kms_frontbuffer_tracking@fbcpsr-2p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-gtt:
- shard-rkl: NOTRUN -> [SKIP][170] ([i915#3023]) +4 other tests skip
[170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
- shard-dg1: NOTRUN -> [SKIP][171] ([i915#5439])
[171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-y:
- shard-dg2: NOTRUN -> [SKIP][172] ([i915#5460])
[172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-move:
- shard-mtlp: NOTRUN -> [SKIP][173] ([i915#1825])
[173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-6/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-move.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-onoff:
- shard-rkl: NOTRUN -> [SKIP][174] ([fdo#111825] / [i915#1825]) +6 other tests skip
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary:
- shard-dg2: NOTRUN -> [SKIP][175] ([i915#3458]) +15 other tests skip
[175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt:
- shard-dg2: NOTRUN -> [SKIP][176] ([i915#8708]) +18 other tests skip
[176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@psr-suspend:
- shard-dg1: NOTRUN -> [SKIP][177] ([i915#3458]) +7 other tests skip
[177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-19/igt@kms_frontbuffer_tracking@psr-suspend.html
- shard-tglu: NOTRUN -> [SKIP][178] ([fdo#110189])
[178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-tglu-7/igt@kms_frontbuffer_tracking@psr-suspend.html
* igt@kms_hdr@bpc-switch-dpms:
- shard-rkl: NOTRUN -> [SKIP][179] ([i915#3555] / [i915#8228])
[179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@kms_hdr@bpc-switch-dpms.html
* igt@kms_hdr@bpc-switch-suspend:
- shard-dg1: NOTRUN -> [SKIP][180] ([i915#3555] / [i915#8228])
[180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-15/igt@kms_hdr@bpc-switch-suspend.html
* igt@kms_hdr@static-toggle:
- shard-dg2: NOTRUN -> [SKIP][181] ([i915#3555] / [i915#8228]) +3 other tests skip
[181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-10/igt@kms_hdr@static-toggle.html
* igt@kms_panel_fitting@atomic-fastset:
- shard-dg2: NOTRUN -> [SKIP][182] ([i915#6301])
[182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@kms_panel_fitting@atomic-fastset.html
* igt@kms_plane_lowres@tiling-yf:
- shard-dg2: NOTRUN -> [SKIP][183] ([i915#3555] / [i915#8821])
[183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-3/igt@kms_plane_lowres@tiling-yf.html
* igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-1:
- shard-rkl: NOTRUN -> [FAIL][184] ([i915#8292])
[184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-1.html
* igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-4:
- shard-dg1: NOTRUN -> [FAIL][185] ([i915#8292])
[185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-4.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][186] ([i915#5235]) +9 other tests skip
[186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-2/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-b-hdmi-a-2.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-d-hdmi-a-2:
- shard-dg2: NOTRUN -> [SKIP][187] ([i915#5235]) +15 other tests skip
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-d-hdmi-a-2.html
* igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-b-vga-1:
- shard-snb: NOTRUN -> [SKIP][188] ([fdo#109271]) +175 other tests skip
[188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-snb7/igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-b-vga-1.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-a-hdmi-a-3:
- shard-dg1: NOTRUN -> [SKIP][189] ([i915#5235]) +23 other tests skip
[189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-12/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-a-hdmi-a-3.html
* igt@kms_prime@basic-crc-hybrid:
- shard-dg2: NOTRUN -> [SKIP][190] ([i915#6524] / [i915#6805])
[190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@kms_prime@basic-crc-hybrid.html
* igt@kms_prime@basic-crc-vgem:
- shard-dg1: NOTRUN -> [SKIP][191] ([i915#6524])
[191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-17/igt@kms_prime@basic-crc-vgem.html
* igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-fully-sf:
- shard-dg1: NOTRUN -> [SKIP][192] ([i915#658])
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-12/igt@kms_psr2_sf@cursor-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr2_sf@overlay-plane-update-continuous-sf:
- shard-dg1: NOTRUN -> [SKIP][193] ([fdo#111068] / [i915#658])
[193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-12/igt@kms_psr2_sf@overlay-plane-update-continuous-sf.html
* igt@kms_psr2_su@frontbuffer-xrgb8888:
- shard-dg2: NOTRUN -> [SKIP][194] ([i915#658]) +2 other tests skip
[194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@kms_psr2_su@frontbuffer-xrgb8888.html
* igt@kms_psr@cursor_mmap_cpu:
- shard-dg1: NOTRUN -> [SKIP][195] ([i915#1072] / [i915#4078]) +2 other tests skip
[195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@kms_psr@cursor_mmap_cpu.html
* igt@kms_psr@no_drrs:
- shard-dg2: NOTRUN -> [SKIP][196] ([i915#1072]) +6 other tests skip
[196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@kms_psr@no_drrs.html
* igt@kms_rotation_crc@primary-rotation-270:
- shard-dg2: NOTRUN -> [SKIP][197] ([i915#4235]) +1 other test skip
[197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@kms_rotation_crc@primary-rotation-270.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
- shard-dg2: NOTRUN -> [SKIP][198] ([i915#4235] / [i915#5190]) +1 other test skip
[198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
- shard-rkl: NOTRUN -> [SKIP][199] ([fdo#111615] / [i915#5289]) +1 other test skip
[199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
* igt@kms_rotation_crc@sprite-rotation-270:
- shard-rkl: [PASS][200] -> [INCOMPLETE][201] ([i915#8875])
[200]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-4/igt@kms_rotation_crc@sprite-rotation-270.html
[201]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@kms_rotation_crc@sprite-rotation-270.html
* igt@kms_scaling_modes@scaling-mode-none:
- shard-dg1: NOTRUN -> [SKIP][202] ([i915#3555]) +3 other tests skip
[202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-18/igt@kms_scaling_modes@scaling-mode-none.html
* igt@kms_setmode@basic@pipe-a-vga-1:
- shard-snb: NOTRUN -> [FAIL][203] ([i915#5465]) +1 other test fail
[203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-snb4/igt@kms_setmode@basic@pipe-a-vga-1.html
* igt@kms_setmode@clone-exclusive-crtc:
- shard-rkl: NOTRUN -> [SKIP][204] ([i915#3555] / [i915#4098])
[204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@kms_setmode@clone-exclusive-crtc.html
* igt@kms_universal_plane@cursor-fb-leak-pipe-d:
- shard-mtlp: [PASS][205] -> [FAIL][206] ([i915#9196])
[205]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-6/igt@kms_universal_plane@cursor-fb-leak-pipe-d.html
[206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-7/igt@kms_universal_plane@cursor-fb-leak-pipe-d.html
* igt@kms_vblank@pipe-a-ts-continuation-dpms-suspend:
- shard-apl: [PASS][207] -> [INCOMPLETE][208] ([i915#180] / [i915#9392])
[207]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-apl6/igt@kms_vblank@pipe-a-ts-continuation-dpms-suspend.html
[208]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-apl2/igt@kms_vblank@pipe-a-ts-continuation-dpms-suspend.html
* igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend:
- shard-rkl: NOTRUN -> [SKIP][209] ([i915#4070] / [i915#6768]) +2 other tests skip
[209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@kms_vblank@pipe-c-ts-continuation-dpms-suspend.html
* igt@kms_writeback@writeback-fb-id:
- shard-dg2: NOTRUN -> [SKIP][210] ([i915#2437])
[210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-1/igt@kms_writeback@writeback-fb-id.html
* igt@perf@enable-disable@0-rcs0:
- shard-dg2: [PASS][211] -> [FAIL][212] ([i915#8724])
[211]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-6/igt@perf@enable-disable@0-rcs0.html
[212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@perf@enable-disable@0-rcs0.html
* igt@perf@global-sseu-config-invalid:
- shard-dg2: NOTRUN -> [SKIP][213] ([i915#7387])
[213]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@perf@global-sseu-config-invalid.html
* igt@perf@mi-rpc:
- shard-dg2: NOTRUN -> [SKIP][214] ([i915#2434])
[214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@perf@mi-rpc.html
* igt@perf_pmu@all-busy-idle-check-all:
- shard-dg2: [PASS][215] -> [FAIL][216] ([i915#5234])
[215]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-2/igt@perf_pmu@all-busy-idle-check-all.html
[216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-3/igt@perf_pmu@all-busy-idle-check-all.html
- shard-dg1: [PASS][217] -> [FAIL][218] ([i915#5234])
[217]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg1-16/igt@perf_pmu@all-busy-idle-check-all.html
[218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-19/igt@perf_pmu@all-busy-idle-check-all.html
- shard-mtlp: [PASS][219] -> [FAIL][220] ([i915#5234])
[219]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-4/igt@perf_pmu@all-busy-idle-check-all.html
[220]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-8/igt@perf_pmu@all-busy-idle-check-all.html
* igt@perf_pmu@module-unload:
- shard-dg2: NOTRUN -> [FAIL][221] ([i915#5793])
[221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-5/igt@perf_pmu@module-unload.html
* igt@perf_pmu@rc6@other-idle-gt0:
- shard-dg1: NOTRUN -> [SKIP][222] ([i915#8516])
[222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-17/igt@perf_pmu@rc6@other-idle-gt0.html
* igt@perf_pmu@semaphore-busy@ccs0:
- shard-mtlp: [PASS][223] -> [FAIL][224] ([i915#4349])
[223]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-6/igt@perf_pmu@semaphore-busy@ccs0.html
[224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-7/igt@perf_pmu@semaphore-busy@ccs0.html
* igt@prime_vgem@basic-write:
- shard-dg2: NOTRUN -> [SKIP][225] ([i915#3291] / [i915#3708])
[225]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@prime_vgem@basic-write.html
* igt@prime_vgem@fence-flip-hang:
- shard-dg2: NOTRUN -> [SKIP][226] ([i915#3708])
[226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@prime_vgem@fence-flip-hang.html
* igt@tools_test@sysfs_l3_parity:
- shard-dg2: NOTRUN -> [SKIP][227] ([i915#4818])
[227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-2/igt@tools_test@sysfs_l3_parity.html
- shard-rkl: NOTRUN -> [SKIP][228] ([fdo#109307])
[228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@tools_test@sysfs_l3_parity.html
* igt@v3d/v3d_submit_cl@bad-bo:
- shard-dg2: NOTRUN -> [SKIP][229] ([i915#2575]) +11 other tests skip
[229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@v3d/v3d_submit_cl@bad-bo.html
* igt@v3d/v3d_submit_cl@bad-multisync-in-sync:
- shard-rkl: NOTRUN -> [SKIP][230] ([fdo#109315]) +2 other tests skip
[230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-1/igt@v3d/v3d_submit_cl@bad-multisync-in-sync.html
* igt@v3d/v3d_submit_cl@simple-flush-cache:
- shard-dg1: NOTRUN -> [SKIP][231] ([i915#2575]) +5 other tests skip
[231]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-15/igt@v3d/v3d_submit_cl@simple-flush-cache.html
* igt@vc4/vc4_label_bo@set-kernel-name:
- shard-dg1: NOTRUN -> [SKIP][232] ([i915#7711]) +3 other tests skip
[232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-12/igt@vc4/vc4_label_bo@set-kernel-name.html
* igt@vc4/vc4_mmap@mmap-bad-handle:
- shard-mtlp: NOTRUN -> [SKIP][233] ([i915#7711])
[233]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-5/igt@vc4/vc4_mmap@mmap-bad-handle.html
* igt@vc4/vc4_tiling@get-bad-flags:
- shard-rkl: NOTRUN -> [SKIP][234] ([i915#7711]) +1 other test skip
[234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-2/igt@vc4/vc4_tiling@get-bad-flags.html
* igt@vc4/vc4_tiling@get-bad-handle:
- shard-dg2: NOTRUN -> [SKIP][235] ([i915#7711]) +7 other tests skip
[235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@vc4/vc4_tiling@get-bad-handle.html
#### Possible fixes ####
* igt@drm_fdinfo@most-busy-check-all@rcs0:
- shard-rkl: [FAIL][236] ([i915#7742]) -> [PASS][237]
[236]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-4/igt@drm_fdinfo@most-busy-check-all@rcs0.html
[237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@drm_fdinfo@most-busy-check-all@rcs0.html
* igt@gem_ctx_persistence@legacy-engines-hostile@blt:
- shard-mtlp: [ABORT][238] ([i915#9414]) -> [PASS][239]
[238]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-2/igt@gem_ctx_persistence@legacy-engines-hostile@blt.html
[239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-6/igt@gem_ctx_persistence@legacy-engines-hostile@blt.html
* igt@gem_eio@unwedge-stress:
- shard-dg1: [FAIL][240] ([i915#5784]) -> [PASS][241] +2 other tests pass
[240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg1-18/igt@gem_eio@unwedge-stress.html
[241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-15/igt@gem_eio@unwedge-stress.html
* igt@gem_exec_fair@basic-deadline:
- shard-rkl: [FAIL][242] ([i915#2846]) -> [PASS][243]
[242]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-1/igt@gem_exec_fair@basic-deadline.html
[243]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-6/igt@gem_exec_fair@basic-deadline.html
* igt@gem_exec_fair@basic-none@bcs0:
- shard-rkl: [FAIL][244] ([i915#2842]) -> [PASS][245] +1 other test pass
[244]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-2/igt@gem_exec_fair@basic-none@bcs0.html
[245]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@gem_exec_fair@basic-none@bcs0.html
* igt@gem_exec_suspend@basic-s0@lmem0:
- shard-dg2: [INCOMPLETE][246] -> [PASS][247]
[246]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-5/igt@gem_exec_suspend@basic-s0@lmem0.html
[247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-7/igt@gem_exec_suspend@basic-s0@lmem0.html
* igt@gem_lmem_swapping@smem-oom@lmem0:
- shard-dg1: [DMESG-WARN][248] ([i915#4936] / [i915#5493]) -> [PASS][249]
[248]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg1-17/igt@gem_lmem_swapping@smem-oom@lmem0.html
[249]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-14/igt@gem_lmem_swapping@smem-oom@lmem0.html
* igt@i915_hangman@engine-engine-error@vcs0:
- shard-mtlp: [FAIL][250] ([i915#7069]) -> [PASS][251] +1 other test pass
[250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-4/igt@i915_hangman@engine-engine-error@vcs0.html
[251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-3/igt@i915_hangman@engine-engine-error@vcs0.html
* igt@i915_module_load@reload-with-fault-injection:
- shard-dg2: [WARN][252] ([i915#7356]) -> [PASS][253]
[252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-2/igt@i915_module_load@reload-with-fault-injection.html
[253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@i915_module_load@reload-with-fault-injection.html
* igt@i915_pm_rc6_residency@rc6-idle@bcs0:
- shard-dg1: [FAIL][254] ([i915#3591]) -> [PASS][255]
[254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg1-19/igt@i915_pm_rc6_residency@rc6-idle@bcs0.html
[255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-18/igt@i915_pm_rc6_residency@rc6-idle@bcs0.html
* igt@i915_pm_rpm@modeset-lpsp-stress-no-wait:
- shard-rkl: [SKIP][256] ([i915#1397]) -> [PASS][257]
[256]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-6/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
[257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
* igt@i915_suspend@basic-s3-without-i915:
- shard-rkl: [FAIL][258] ([fdo#103375]) -> [PASS][259]
[258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-6/igt@i915_suspend@basic-s3-without-i915.html
[259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-4/igt@i915_suspend@basic-s3-without-i915.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
- shard-mtlp: [FAIL][260] ([i915#5138]) -> [PASS][261]
[260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-4/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
[261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-2/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
- shard-tglu: [FAIL][262] ([i915#3743]) -> [PASS][263]
[262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-tglu-8/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html
[263]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-tglu-4/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
- shard-apl: [FAIL][264] ([i915#2346]) -> [PASS][265] +1 other test pass
[264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-apl6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
[265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-apl6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
- shard-glk: [FAIL][266] ([i915#2346]) -> [PASS][267]
[266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-glk2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
[267]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-glk3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
* igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a2:
- shard-glk: [FAIL][268] ([i915#79]) -> [PASS][269]
[268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-glk2/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a2.html
[269]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-glk4/igt@kms_flip@flip-vs-expired-vblank@a-hdmi-a2.html
* igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary:
- shard-dg2: [FAIL][270] ([i915#6880]) -> [PASS][271]
[270]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary.html
[271]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary.html
* {igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a}:
- shard-dg1: [SKIP][272] ([i915#1937]) -> [PASS][273]
[272]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg1-17/igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html
[273]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-19/igt@kms_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html
* igt@kms_universal_plane@cursor-fb-leak-pipe-a:
- shard-mtlp: [FAIL][274] ([i915#9196]) -> [PASS][275]
[274]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-6/igt@kms_universal_plane@cursor-fb-leak-pipe-a.html
[275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-7/igt@kms_universal_plane@cursor-fb-leak-pipe-a.html
* igt@kms_universal_plane@cursor-fb-leak-pipe-b:
- shard-snb: [FAIL][276] ([i915#9196]) -> [PASS][277]
[276]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-snb1/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html
[277]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-snb2/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html
- shard-tglu: [FAIL][278] ([i915#9196]) -> [PASS][279]
[278]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-tglu-2/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html
[279]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-tglu-10/igt@kms_universal_plane@cursor-fb-leak-pipe-b.html
* igt@perf_pmu@busy-double-start@rcs0:
- shard-mtlp: [FAIL][280] ([i915#4349]) -> [PASS][281]
[280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-mtlp-4/igt@perf_pmu@busy-double-start@rcs0.html
[281]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-mtlp-2/igt@perf_pmu@busy-double-start@rcs0.html
* igt@perf_pmu@busy-double-start@vecs1:
- shard-dg2: [FAIL][282] ([i915#4349]) -> [PASS][283] +3 other tests pass
[282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-2/igt@perf_pmu@busy-double-start@vecs1.html
[283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-6/igt@perf_pmu@busy-double-start@vecs1.html
* igt@syncobj_timeline@wait-all-for-submit-delayed-submit:
- shard-dg1: [DMESG-WARN][284] ([i915#1982]) -> [PASS][285]
[284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg1-14/igt@syncobj_timeline@wait-all-for-submit-delayed-submit.html
[285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg1-18/igt@syncobj_timeline@wait-all-for-submit-delayed-submit.html
#### Warnings ####
* igt@i915_pm_rc6_residency@rc6-idle@vcs0:
- shard-tglu: [FAIL][286] ([i915#2681] / [i915#3591]) -> [WARN][287] ([i915#2681])
[286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-tglu-9/igt@i915_pm_rc6_residency@rc6-idle@vcs0.html
[287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-tglu-8/igt@i915_pm_rc6_residency@rc6-idle@vcs0.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-rkl: [SKIP][288] ([fdo#110189] / [i915#3955]) -> [SKIP][289] ([i915#3955])
[288]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-2/igt@kms_fbcon_fbt@psr-suspend.html
[289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
- shard-rkl: [SKIP][290] ([i915#4070] / [i915#4816]) -> [SKIP][291] ([i915#4816])
[290]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-rkl-6/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
[291]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-rkl-7/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
* igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem:
- shard-dg2: [CRASH][292] ([i915#9351]) -> [INCOMPLETE][293] ([i915#5493])
[292]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13719/shard-dg2-10/igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem.html
[293]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/shard-dg2-11/igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[fdo#103375]: https://bugs.freedesktop.org/show_bug.cgi?id=103375
[fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
[fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
[fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
[fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
[fdo#109307]: https://bugs.freedesktop.org/show_bug.cgi?id=109307
[fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
[fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506
[fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
[fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
[fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
[fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
[fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
[fdo#111767]: https://bugs.freedesktop.org/show_bug.cgi?id=111767
[fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
[fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
[fdo#112283]: https://bugs.freedesktop.org/show_bug.cgi?id=112283
[i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
[i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
[i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180
[i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
[i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
[i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
[i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982
[i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
[i915#2434]: https://gitlab.freedesktop.org/drm/intel/issues/2434
[i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
[i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
[i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
[i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
[i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
[i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
[i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
[i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
[i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
[i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
[i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
[i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
[i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
[i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
[i915#3318]: https://gitlab.freedesktop.org/drm/intel/issues/3318
[i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
[i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
[i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469
[i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
[i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
[i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
[i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
[i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
[i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
[i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
[i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
[i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
[i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
[i915#3804]: https://gitlab.freedesktop.org/drm/intel/issues/3804
[i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
[i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
[i915#3936]: https://gitlab.freedesktop.org/drm/intel/issues/3936
[i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
[i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
[i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
[i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
[i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
[i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
[i915#4087]: https://gitlab.freedesktop.org/drm/intel/issues/4087
[i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
[i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
[i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
[i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
[i915#4215]: https://gitlab.freedesktop.org/drm/intel/issues/4215
[i915#4235]: https://gitlab.freedesktop.org/drm/intel/issues/4235
[i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
[i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
[i915#4537]: https://gitlab.freedesktop.org/drm/intel/issues/4537
[i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
[i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
[i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
[i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
[i915#4816]: https://gitlab.freedesktop.org/drm/intel/issues/4816
[i915#4818]: https://gitlab.freedesktop.org/drm/intel/issues/4818
[i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
[i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
[i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
[i915#4936]: https://gitlab.freedesktop.org/drm/intel/issues/4936
[i915#5138]: https://gitlab.freedesktop.org/drm/intel/issues/5138
[i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
[i915#5234]: https://gitlab.freedesktop.org/drm/intel/issues/5234
[i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
[i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
[i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
[i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334
[i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
[i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
[i915#5460]: https://gitlab.freedesktop.org/drm/intel/issues/5460
[i915#5465]: https://gitlab.freedesktop.org/drm/intel/issues/5465
[i915#5493]: https://gitlab.freedesktop.org/drm/intel/issues/5493
[i915#5608]: https://gitlab.freedesktop.org/drm/intel/issues/5608
[i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
[i915#5793]: https://gitlab.freedesktop.org/drm/intel/issues/5793
[i915#5882]: https://gitlab.freedesktop.org/drm/intel/issues/5882
[i915#5978]: https://gitlab.freedesktop.org/drm/intel/issues/5978
[i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
[i915#6187]: https://gitlab.freedesktop.org/drm/intel/issues/6187
[i915#6188]: https://gitlab.freedesktop.org/drm/intel/issues/6188
[i915#6230]: https://gitlab.freedesktop.org/drm/intel/issues/6230
[i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
[i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
[i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
[i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
[i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
[i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
[i915#6805]: https://gitlab.freedesktop.org/drm/intel/issues/6805
[i915#6880]: https://gitlab.freedesktop.org/drm/intel/issues/6880
[i915#7069]: https://gitlab.freedesktop.org/drm/intel/issues/7069
[i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
[i915#7213]: https://gitlab.freedesktop.org/drm/intel/issues/7213
[i915#7297]: https://gitlab.freedesktop.org/drm/intel/issues/7297
[i915#7356]: https://gitlab.freedesktop.org/drm/intel/issues/7356
[i915#7387]: https://gitlab.freedesktop.org/drm/intel/issues/7387
[i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
[i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
[i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
[i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
[i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
[i915#8104]: https://gitlab.freedesktop.org/drm/intel/issues/8104
[i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
[i915#8247]: https://gitlab.freedesktop.org/drm/intel/issues/8247
[i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292
[i915#8381]: https://gitlab.freedesktop.org/drm/intel/issues/8381
[i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411
[i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414
[i915#8428]: https://gitlab.freedesktop.org/drm/intel/issues/8428
[i915#8502]: https://gitlab.freedesktop.org/drm/intel/issues/8502
[i915#8516]: https://gitlab.freedesktop.org/drm/intel/issues/8516
[i915#8555]: https://gitlab.freedesktop.org/drm/intel/issues/8555
[i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708
[i915#8724]: https://gitlab.freedesktop.org/drm/intel/issues/8724
[i915#8810]: https://gitlab.freedesktop.org/drm/intel/issues/8810
[i915#8812]: https://gitlab.freedesktop.org/drm/intel/issues/8812
[i915#8821]: https://gitlab.freedesktop.org/drm/intel/issues/8821
[i915#8841]: https://gitlab.freedesktop.org/drm/intel/issues/8841
[i915#8875]: https://gitlab.freedesktop.org/drm/intel/issues/8875
[i915#8898]: https://gitlab.freedesktop.org/drm/intel/issues/8898
[i915#8925]: https://gitlab.freedesktop.org/drm/intel/issues/8925
[i915#8957]: https://gitlab.freedesktop.org/drm/intel/issues/8957
[i915#8962]: https://gitlab.freedesktop.org/drm/intel/issues/8962
[i915#9067]: https://gitlab.freedesktop.org/drm/intel/issues/9067
[i915#9196]: https://gitlab.freedesktop.org/drm/intel/issues/9196
[i915#9226]: https://gitlab.freedesktop.org/drm/intel/issues/9226
[i915#9227]: https://gitlab.freedesktop.org/drm/intel/issues/9227
[i915#9261]: https://gitlab.freedesktop.org/drm/intel/issues/9261
[i915#9351]: https://gitlab.freedesktop.org/drm/intel/issues/9351
[i915#9364]: https://gitlab.freedesktop.org/drm/intel/issues/9364
[i915#9392]: https://gitlab.freedesktop.org/drm/intel/issues/9392
[i915#9412]: https://gitlab.freedesktop.org/drm/intel/issues/9412
[i915#9414]: https://gitlab.freedesktop.org/drm/intel/issues/9414
[i915#9423]: https://gitlab.freedesktop.org/drm/intel/issues/9423
[i915#9424]: https://gitlab.freedesktop.org/drm/intel/issues/9424
[i915#9433]: https://gitlab.freedesktop.org/drm/intel/issues/9433
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_7517 -> IGTPW_9930
* Piglit: piglit_4509 -> None
CI-20190529: 20190529
CI_DRM_13719: 68e5c10def179bde3bf44bd95d19eea796cbf7a3 @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_9930: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/index.html
IGT_7517: 8368e3ad3f9459a8f5cdd24f813ae802c1211029 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_9930/index.html
[-- Attachment #2: Type: text/html, Size: 92173 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread