* [PATCH i-g-t 1/7] drm-uapi/xe: Sync PXP uapi updates
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
@ 2024-12-12 0:18 ` Daniele Ceraolo Spurio
2025-01-15 2:25 ` Teres Alexis, Alan Previn
2024-12-12 0:18 ` [PATCH i-g-t 2/7] tests/intel/xe_vm: Update invalid flag subtest Daniele Ceraolo Spurio
` (8 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-12-12 0:18 UTC (permalink / raw)
To: igt-dev; +Cc: Daniele Ceraolo Spurio
Based on the kernel series still in review:
https://patchwork.freedesktop.org/series/136052/
DO NOT MERGE: will respin with the final version once the kernel side is
merged
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
---
include/drm-uapi/xe_drm.h | 94 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 93 insertions(+), 1 deletion(-)
diff --git a/include/drm-uapi/xe_drm.h b/include/drm-uapi/xe_drm.h
index 56163eb91..5b288af1f 100644
--- a/include/drm-uapi/xe_drm.h
+++ b/include/drm-uapi/xe_drm.h
@@ -629,6 +629,39 @@ struct drm_xe_query_uc_fw_version {
__u64 reserved;
};
+/**
+ * struct drm_xe_query_pxp_status - query if PXP is ready
+ *
+ * If PXP is enabled and no fatal error as occurred, the status will be set to
+ * one of the following values:
+ * 0: PXP init still in progress
+ * 1: PXP init complete
+ *
+ * If PXP is not enabled or something has gone wrong, the query will be failed
+ * with one of the following error codes:
+ * -ENODEV: PXP not supported or disabled;
+ * -EIO: fatal error occurred during init, so PXP will never be enabled;
+ * -EINVAL: incorrect value provided as part of the query;
+ * -EFAULT: error copying the memory between kernel and userspace.
+ *
+ * The status can only be 0 in the first few seconds after driver load. If
+ * everything works as expected, the status will transition to init complete in
+ * less than 1 second, while in case of errors the driver might take longer to
+ * start returning an error code, but it should still take less than 10 seconds.
+ *
+ * The supported session type bitmask is based on the values in
+ * enum drm_xe_pxp_session_type. TYPE_NONE is always supported and therefore
+ * is not reported in the bitmask.
+ *
+ */
+struct drm_xe_query_pxp_status {
+ /** @status: current PXP status */
+ __u32 status;
+
+ /** @supported_session_types: bitmask of supported PXP session types */
+ __u32 supported_session_types;
+};
+
/**
* struct drm_xe_device_query - Input of &DRM_IOCTL_XE_DEVICE_QUERY - main
* structure to query device information
@@ -648,6 +681,7 @@ struct drm_xe_query_uc_fw_version {
* attributes.
* - %DRM_XE_DEVICE_QUERY_GT_TOPOLOGY
* - %DRM_XE_DEVICE_QUERY_ENGINE_CYCLES
+ * - %DRM_XE_DEVICE_QUERY_PXP_STATUS
*
* If size is set to 0, the driver fills it with the required size for
* the requested type of data to query. If size is equal to the required
@@ -700,6 +734,7 @@ struct drm_xe_device_query {
#define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6
#define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7
#define DRM_XE_DEVICE_QUERY_OA_UNITS 8
+#define DRM_XE_DEVICE_QUERY_PXP_STATUS 9
/** @query: The type of data to query */
__u32 query;
@@ -743,8 +778,23 @@ struct drm_xe_device_query {
* - %DRM_XE_GEM_CPU_CACHING_WC - Allocate the pages as write-combined. This
* is uncached. Scanout surfaces should likely use this. All objects
* that can be placed in VRAM must use this.
+ *
+ * This ioctl supports setting the following properties via the
+ * %DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY extension, which uses the
+ * generic @drm_xe_ext_set_property struct:
+ *
+ * - %DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE - set the type of PXP session
+ * this object will be used with. Valid values are listed in enum
+ * drm_xe_pxp_session_type. %DRM_XE_PXP_TYPE_NONE is the default behavior, so
+ * there is no need to explicitly set that. Objects used with session of type
+ * %DRM_XE_PXP_TYPE_HWDRM will be marked as invalid if a PXP invalidation
+ * event occurs after their creation. Attempting to flip an invalid object
+ * will cause a black frame to be displayed instead. Submissions with invalid
+ * objects mapped in the VM will be rejected.
*/
struct drm_xe_gem_create {
+#define DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY 0
+#define DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE 0
/** @extensions: Pointer to the first extension struct, if any */
__u64 extensions;
@@ -906,6 +956,9 @@ struct drm_xe_vm_destroy {
* will only be valid for DRM_XE_VM_BIND_OP_MAP operations, the BO
* handle MBZ, and the BO offset MBZ. This flag is intended to
* implement VK sparse bindings.
+ * - %DRM_XE_VM_BIND_FLAG_CHECK_PXP - If the object is encrypted via PXP,
+ * reject the binding if the encryption key is no longer valid. This
+ * flag has no effect on BOs that are not marked as using PXP.
*/
struct drm_xe_vm_bind_op {
/** @extensions: Pointer to the first extension struct, if any */
@@ -996,6 +1049,7 @@ struct drm_xe_vm_bind_op {
#define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 1)
#define DRM_XE_VM_BIND_FLAG_NULL (1 << 2)
#define DRM_XE_VM_BIND_FLAG_DUMPABLE (1 << 3)
+#define DRM_XE_VM_BIND_FLAG_CHECK_PXP (1 << 4)
/** @flags: Bind flags */
__u32 flags;
@@ -1087,6 +1141,24 @@ struct drm_xe_vm_bind {
/**
* struct drm_xe_exec_queue_create - Input of &DRM_IOCTL_XE_EXEC_QUEUE_CREATE
*
+ * This ioctl supports setting the following properties via the
+ * %DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY extension, which uses the
+ * generic @drm_xe_ext_set_property struct:
+ *
+ * - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY - set the queue priority.
+ * CAP_SYS_NICE is required to set a value above normal.
+ * - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE - set the queue timeslice
+ * duration.
+ * - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE - set the type of PXP session
+ * this queue will be used with. Valid values are listed in enum
+ * drm_xe_pxp_session_type. %DRM_XE_PXP_TYPE_NONE is the default behavior, so
+ * there is no need to explicitly set that. When a queue of type
+ * %DRM_XE_PXP_TYPE_HWDRM is created, the PXP default HWDRM session
+ * (%XE_PXP_HWDRM_DEFAULT_SESSION) will be started, if isn't already running.
+ * Given that going into a power-saving state kills PXP HWDRM sessions,
+ * runtime PM will be blocked while queues of this type are alive.
+ * All PXP queues will be killed if a PXP invalidation event occurs.
+ *
* The example below shows how to use @drm_xe_exec_queue_create to create
* a simple exec_queue (no parallel submission) of class
* &DRM_XE_ENGINE_CLASS_RENDER.
@@ -1110,7 +1182,7 @@ struct drm_xe_exec_queue_create {
#define DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY 0
#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY 0
#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE 1
-
+#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE 2
/** @extensions: Pointer to the first extension struct, if any */
__u64 extensions;
@@ -1713,6 +1785,26 @@ struct drm_xe_oa_stream_info {
__u64 reserved[3];
};
+/**
+ * enum drm_xe_pxp_session_type - Supported PXP session types.
+ *
+ * We currently only support HWDRM sessions, which are used for protected
+ * content that ends up being displayed, but the HW supports multiple types, so
+ * we might extend support in the future.
+ */
+enum drm_xe_pxp_session_type {
+ /** @DRM_XE_PXP_TYPE_NONE: PXP not used */
+ DRM_XE_PXP_TYPE_NONE = 0,
+ /**
+ * @DRM_XE_PXP_TYPE_HWDRM: HWDRM sessions are used for content that ends
+ * up on the display.
+ */
+ DRM_XE_PXP_TYPE_HWDRM = 1,
+};
+
+/* ID of the protected content session managed by Xe when PXP is active */
+#define DRM_XE_PXP_HWDRM_DEFAULT_SESSION 0xf
+
#if defined(__cplusplus)
}
#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH i-g-t 1/7] drm-uapi/xe: Sync PXP uapi updates
2024-12-12 0:18 ` [PATCH i-g-t 1/7] drm-uapi/xe: Sync PXP uapi updates Daniele Ceraolo Spurio
@ 2025-01-15 2:25 ` Teres Alexis, Alan Previn
2025-01-15 23:26 ` Daniele Ceraolo Spurio
0 siblings, 1 reply; 17+ messages in thread
From: Teres Alexis, Alan Previn @ 2025-01-15 2:25 UTC (permalink / raw)
To: igt-dev@lists.freedesktop.org, Ceraolo Spurio, Daniele
Since this has already received RB on the kernel side, I provide my RB here on condition that if anything changes on
kernel side in coming days, we update this (ofc need to update anyway for reference kernel merge point).
Reviewed-by: Alan Previn <alan.previn.teres.alexis@intel.com>
As a side question (not blocking) i notice the UAPI documentation for DRM_XE_VM_BIND_FLAG_CHECK_PXP doesn't mention if
the bind will still stick after a successful prior bind if a pxp teardown (key update) were to occur in future. (which i
am guessing it would? - i.e. once bind, it is forever bound?).
On Wed, 2024-12-11 at 16:18 -0800, Daniele Ceraolo Spurio wrote:
> Based on the kernel series still in review:
> https://patchwork.freedesktop.org/series/136052/
>
> DO NOT MERGE: will respin with the final version once the kernel side is
> merged
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> ---
> include/drm-uapi/xe_drm.h | 94 ++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 93 insertions(+), 1 deletion(-)
>
> diff --git a/include/drm-uapi/xe_drm.h b/include/drm-uapi/xe_drm.h
> index 56163eb91..5b288af1f 100644
> --- a/include/drm-uapi/xe_drm.h
> +++ b/include/drm-uapi/xe_drm.h
> @@ -629,6 +629,39 @@ struct drm_xe_query_uc_fw_version {
> __u64 reserved;
> };
>
> +/**
> + * struct drm_xe_query_pxp_status - query if PXP is ready
> + *
> + * If PXP is enabled and no fatal error as occurred, the status will be set to
> + * one of the following values:
> + * 0: PXP init still in progress
> + * 1: PXP init complete
> + *
> + * If PXP is not enabled or something has gone wrong, the query will be failed
> + * with one of the following error codes:
> + * -ENODEV: PXP not supported or disabled;
> + * -EIO: fatal error occurred during init, so PXP will never be enabled;
> + * -EINVAL: incorrect value provided as part of the query;
> + * -EFAULT: error copying the memory between kernel and userspace.
> + *
> + * The status can only be 0 in the first few seconds after driver load. If
> + * everything works as expected, the status will transition to init complete in
> + * less than 1 second, while in case of errors the driver might take longer to
> + * start returning an error code, but it should still take less than 10 seconds.
> + *
> + * The supported session type bitmask is based on the values in
> + * enum drm_xe_pxp_session_type. TYPE_NONE is always supported and therefore
> + * is not reported in the bitmask.
> + *
> + */
> +struct drm_xe_query_pxp_status {
> + /** @status: current PXP status */
> + __u32 status;
> +
> + /** @supported_session_types: bitmask of supported PXP session types */
> + __u32 supported_session_types;
> +};
> +
> /**
> * struct drm_xe_device_query - Input of &DRM_IOCTL_XE_DEVICE_QUERY - main
> * structure to query device information
> @@ -648,6 +681,7 @@ struct drm_xe_query_uc_fw_version {
> * attributes.
> * - %DRM_XE_DEVICE_QUERY_GT_TOPOLOGY
> * - %DRM_XE_DEVICE_QUERY_ENGINE_CYCLES
> + * - %DRM_XE_DEVICE_QUERY_PXP_STATUS
> *
> * If size is set to 0, the driver fills it with the required size for
> * the requested type of data to query. If size is equal to the required
> @@ -700,6 +734,7 @@ struct drm_xe_device_query {
> #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6
> #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7
> #define DRM_XE_DEVICE_QUERY_OA_UNITS 8
> +#define DRM_XE_DEVICE_QUERY_PXP_STATUS 9
> /** @query: The type of data to query */
> __u32 query;
>
> @@ -743,8 +778,23 @@ struct drm_xe_device_query {
> * - %DRM_XE_GEM_CPU_CACHING_WC - Allocate the pages as write-combined. This
> * is uncached. Scanout surfaces should likely use this. All objects
> * that can be placed in VRAM must use this.
> + *
> + * This ioctl supports setting the following properties via the
> + * %DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY extension, which uses the
> + * generic @drm_xe_ext_set_property struct:
> + *
> + * - %DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE - set the type of PXP session
> + * this object will be used with. Valid values are listed in enum
> + * drm_xe_pxp_session_type. %DRM_XE_PXP_TYPE_NONE is the default behavior, so
> + * there is no need to explicitly set that. Objects used with session of type
> + * %DRM_XE_PXP_TYPE_HWDRM will be marked as invalid if a PXP invalidation
> + * event occurs after their creation. Attempting to flip an invalid object
> + * will cause a black frame to be displayed instead. Submissions with invalid
> + * objects mapped in the VM will be rejected.
> */
> struct drm_xe_gem_create {
> +#define DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY 0
> +#define DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE 0
> /** @extensions: Pointer to the first extension struct, if any */
> __u64 extensions;
>
> @@ -906,6 +956,9 @@ struct drm_xe_vm_destroy {
> * will only be valid for DRM_XE_VM_BIND_OP_MAP operations, the BO
> * handle MBZ, and the BO offset MBZ. This flag is intended to
> * implement VK sparse bindings.
> + * - %DRM_XE_VM_BIND_FLAG_CHECK_PXP - If the object is encrypted via PXP,
> + * reject the binding if the encryption key is no longer valid. This
> + * flag has no effect on BOs that are not marked as using PXP.
> */
> struct drm_xe_vm_bind_op {
> /** @extensions: Pointer to the first extension struct, if any */
> @@ -996,6 +1049,7 @@ struct drm_xe_vm_bind_op {
> #define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 1)
> #define DRM_XE_VM_BIND_FLAG_NULL (1 << 2)
> #define DRM_XE_VM_BIND_FLAG_DUMPABLE (1 << 3)
> +#define DRM_XE_VM_BIND_FLAG_CHECK_PXP (1 << 4)
> /** @flags: Bind flags */
> __u32 flags;
>
> @@ -1087,6 +1141,24 @@ struct drm_xe_vm_bind {
> /**
> * struct drm_xe_exec_queue_create - Input of &DRM_IOCTL_XE_EXEC_QUEUE_CREATE
> *
> + * This ioctl supports setting the following properties via the
> + * %DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY extension, which uses the
> + * generic @drm_xe_ext_set_property struct:
> + *
> + * - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY - set the queue priority.
> + * CAP_SYS_NICE is required to set a value above normal.
> + * - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE - set the queue timeslice
> + * duration.
> + * - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE - set the type of PXP session
> + * this queue will be used with. Valid values are listed in enum
> + * drm_xe_pxp_session_type. %DRM_XE_PXP_TYPE_NONE is the default behavior, so
> + * there is no need to explicitly set that. When a queue of type
> + * %DRM_XE_PXP_TYPE_HWDRM is created, the PXP default HWDRM session
> + * (%XE_PXP_HWDRM_DEFAULT_SESSION) will be started, if isn't already running.
> + * Given that going into a power-saving state kills PXP HWDRM sessions,
> + * runtime PM will be blocked while queues of this type are alive.
> + * All PXP queues will be killed if a PXP invalidation event occurs.
> + *
> * The example below shows how to use @drm_xe_exec_queue_create to create
> * a simple exec_queue (no parallel submission) of class
> * &DRM_XE_ENGINE_CLASS_RENDER.
> @@ -1110,7 +1182,7 @@ struct drm_xe_exec_queue_create {
> #define DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY 0
> #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY 0
> #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE 1
> -
> +#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE 2
> /** @extensions: Pointer to the first extension struct, if any */
> __u64 extensions;
>
> @@ -1713,6 +1785,26 @@ struct drm_xe_oa_stream_info {
> __u64 reserved[3];
> };
>
> +/**
> + * enum drm_xe_pxp_session_type - Supported PXP session types.
> + *
> + * We currently only support HWDRM sessions, which are used for protected
> + * content that ends up being displayed, but the HW supports multiple types, so
> + * we might extend support in the future.
> + */
> +enum drm_xe_pxp_session_type {
> + /** @DRM_XE_PXP_TYPE_NONE: PXP not used */
> + DRM_XE_PXP_TYPE_NONE = 0,
> + /**
> + * @DRM_XE_PXP_TYPE_HWDRM: HWDRM sessions are used for content that ends
> + * up on the display.
> + */
> + DRM_XE_PXP_TYPE_HWDRM = 1,
> +};
> +
> +/* ID of the protected content session managed by Xe when PXP is active */
> +#define DRM_XE_PXP_HWDRM_DEFAULT_SESSION 0xf
> +
> #if defined(__cplusplus)
> }
> #endif
^ permalink raw reply [flat|nested] 17+ messages in thread* Re: [PATCH i-g-t 1/7] drm-uapi/xe: Sync PXP uapi updates
2025-01-15 2:25 ` Teres Alexis, Alan Previn
@ 2025-01-15 23:26 ` Daniele Ceraolo Spurio
0 siblings, 0 replies; 17+ messages in thread
From: Daniele Ceraolo Spurio @ 2025-01-15 23:26 UTC (permalink / raw)
To: Teres Alexis, Alan Previn, igt-dev@lists.freedesktop.org
On 1/14/25 18:25, Teres Alexis, Alan Previn wrote:
> Since this has already received RB on the kernel side, I provide my RB here on condition that if anything changes on
> kernel side in coming days, we update this (ofc need to update anyway for reference kernel merge point).
>
> Reviewed-by: Alan Previn <alan.previn.teres.alexis@intel.com>
>
> As a side question (not blocking) i notice the UAPI documentation for DRM_XE_VM_BIND_FLAG_CHECK_PXP doesn't mention if
> the bind will still stick after a successful prior bind if a pxp teardown (key update) were to occur in future. (which i
> am guessing it would? - i.e. once bind, it is forever bound?).
Yes. The only impact is that any new binds will be rejected, no impact
on existing ones.
Daniele
>
>
> On Wed, 2024-12-11 at 16:18 -0800, Daniele Ceraolo Spurio wrote:
>> Based on the kernel series still in review:
>> https://patchwork.freedesktop.org/series/136052/
>>
>> DO NOT MERGE: will respin with the final version once the kernel side is
>> merged
>>
>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>> ---
>> include/drm-uapi/xe_drm.h | 94 ++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 93 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/drm-uapi/xe_drm.h b/include/drm-uapi/xe_drm.h
>> index 56163eb91..5b288af1f 100644
>> --- a/include/drm-uapi/xe_drm.h
>> +++ b/include/drm-uapi/xe_drm.h
>> @@ -629,6 +629,39 @@ struct drm_xe_query_uc_fw_version {
>> __u64 reserved;
>> };
>>
>> +/**
>> + * struct drm_xe_query_pxp_status - query if PXP is ready
>> + *
>> + * If PXP is enabled and no fatal error as occurred, the status will be set to
>> + * one of the following values:
>> + * 0: PXP init still in progress
>> + * 1: PXP init complete
>> + *
>> + * If PXP is not enabled or something has gone wrong, the query will be failed
>> + * with one of the following error codes:
>> + * -ENODEV: PXP not supported or disabled;
>> + * -EIO: fatal error occurred during init, so PXP will never be enabled;
>> + * -EINVAL: incorrect value provided as part of the query;
>> + * -EFAULT: error copying the memory between kernel and userspace.
>> + *
>> + * The status can only be 0 in the first few seconds after driver load. If
>> + * everything works as expected, the status will transition to init complete in
>> + * less than 1 second, while in case of errors the driver might take longer to
>> + * start returning an error code, but it should still take less than 10 seconds.
>> + *
>> + * The supported session type bitmask is based on the values in
>> + * enum drm_xe_pxp_session_type. TYPE_NONE is always supported and therefore
>> + * is not reported in the bitmask.
>> + *
>> + */
>> +struct drm_xe_query_pxp_status {
>> + /** @status: current PXP status */
>> + __u32 status;
>> +
>> + /** @supported_session_types: bitmask of supported PXP session types */
>> + __u32 supported_session_types;
>> +};
>> +
>> /**
>> * struct drm_xe_device_query - Input of &DRM_IOCTL_XE_DEVICE_QUERY - main
>> * structure to query device information
>> @@ -648,6 +681,7 @@ struct drm_xe_query_uc_fw_version {
>> * attributes.
>> * - %DRM_XE_DEVICE_QUERY_GT_TOPOLOGY
>> * - %DRM_XE_DEVICE_QUERY_ENGINE_CYCLES
>> + * - %DRM_XE_DEVICE_QUERY_PXP_STATUS
>> *
>> * If size is set to 0, the driver fills it with the required size for
>> * the requested type of data to query. If size is equal to the required
>> @@ -700,6 +734,7 @@ struct drm_xe_device_query {
>> #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6
>> #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7
>> #define DRM_XE_DEVICE_QUERY_OA_UNITS 8
>> +#define DRM_XE_DEVICE_QUERY_PXP_STATUS 9
>> /** @query: The type of data to query */
>> __u32 query;
>>
>> @@ -743,8 +778,23 @@ struct drm_xe_device_query {
>> * - %DRM_XE_GEM_CPU_CACHING_WC - Allocate the pages as write-combined. This
>> * is uncached. Scanout surfaces should likely use this. All objects
>> * that can be placed in VRAM must use this.
>> + *
>> + * This ioctl supports setting the following properties via the
>> + * %DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY extension, which uses the
>> + * generic @drm_xe_ext_set_property struct:
>> + *
>> + * - %DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE - set the type of PXP session
>> + * this object will be used with. Valid values are listed in enum
>> + * drm_xe_pxp_session_type. %DRM_XE_PXP_TYPE_NONE is the default behavior, so
>> + * there is no need to explicitly set that. Objects used with session of type
>> + * %DRM_XE_PXP_TYPE_HWDRM will be marked as invalid if a PXP invalidation
>> + * event occurs after their creation. Attempting to flip an invalid object
>> + * will cause a black frame to be displayed instead. Submissions with invalid
>> + * objects mapped in the VM will be rejected.
>> */
>> struct drm_xe_gem_create {
>> +#define DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY 0
>> +#define DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE 0
>> /** @extensions: Pointer to the first extension struct, if any */
>> __u64 extensions;
>>
>> @@ -906,6 +956,9 @@ struct drm_xe_vm_destroy {
>> * will only be valid for DRM_XE_VM_BIND_OP_MAP operations, the BO
>> * handle MBZ, and the BO offset MBZ. This flag is intended to
>> * implement VK sparse bindings.
>> + * - %DRM_XE_VM_BIND_FLAG_CHECK_PXP - If the object is encrypted via PXP,
>> + * reject the binding if the encryption key is no longer valid. This
>> + * flag has no effect on BOs that are not marked as using PXP.
>> */
>> struct drm_xe_vm_bind_op {
>> /** @extensions: Pointer to the first extension struct, if any */
>> @@ -996,6 +1049,7 @@ struct drm_xe_vm_bind_op {
>> #define DRM_XE_VM_BIND_FLAG_IMMEDIATE (1 << 1)
>> #define DRM_XE_VM_BIND_FLAG_NULL (1 << 2)
>> #define DRM_XE_VM_BIND_FLAG_DUMPABLE (1 << 3)
>> +#define DRM_XE_VM_BIND_FLAG_CHECK_PXP (1 << 4)
>> /** @flags: Bind flags */
>> __u32 flags;
>>
>> @@ -1087,6 +1141,24 @@ struct drm_xe_vm_bind {
>> /**
>> * struct drm_xe_exec_queue_create - Input of &DRM_IOCTL_XE_EXEC_QUEUE_CREATE
>> *
>> + * This ioctl supports setting the following properties via the
>> + * %DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY extension, which uses the
>> + * generic @drm_xe_ext_set_property struct:
>> + *
>> + * - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY - set the queue priority.
>> + * CAP_SYS_NICE is required to set a value above normal.
>> + * - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE - set the queue timeslice
>> + * duration.
>> + * - %DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE - set the type of PXP session
>> + * this queue will be used with. Valid values are listed in enum
>> + * drm_xe_pxp_session_type. %DRM_XE_PXP_TYPE_NONE is the default behavior, so
>> + * there is no need to explicitly set that. When a queue of type
>> + * %DRM_XE_PXP_TYPE_HWDRM is created, the PXP default HWDRM session
>> + * (%XE_PXP_HWDRM_DEFAULT_SESSION) will be started, if isn't already running.
>> + * Given that going into a power-saving state kills PXP HWDRM sessions,
>> + * runtime PM will be blocked while queues of this type are alive.
>> + * All PXP queues will be killed if a PXP invalidation event occurs.
>> + *
>> * The example below shows how to use @drm_xe_exec_queue_create to create
>> * a simple exec_queue (no parallel submission) of class
>> * &DRM_XE_ENGINE_CLASS_RENDER.
>> @@ -1110,7 +1182,7 @@ struct drm_xe_exec_queue_create {
>> #define DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY 0
>> #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY 0
>> #define DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE 1
>> -
>> +#define DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE 2
>> /** @extensions: Pointer to the first extension struct, if any */
>> __u64 extensions;
>>
>> @@ -1713,6 +1785,26 @@ struct drm_xe_oa_stream_info {
>> __u64 reserved[3];
>> };
>>
>> +/**
>> + * enum drm_xe_pxp_session_type - Supported PXP session types.
>> + *
>> + * We currently only support HWDRM sessions, which are used for protected
>> + * content that ends up being displayed, but the HW supports multiple types, so
>> + * we might extend support in the future.
>> + */
>> +enum drm_xe_pxp_session_type {
>> + /** @DRM_XE_PXP_TYPE_NONE: PXP not used */
>> + DRM_XE_PXP_TYPE_NONE = 0,
>> + /**
>> + * @DRM_XE_PXP_TYPE_HWDRM: HWDRM sessions are used for content that ends
>> + * up on the display.
>> + */
>> + DRM_XE_PXP_TYPE_HWDRM = 1,
>> +};
>> +
>> +/* ID of the protected content session managed by Xe when PXP is active */
>> +#define DRM_XE_PXP_HWDRM_DEFAULT_SESSION 0xf
>> +
>> #if defined(__cplusplus)
>> }
>> #endif
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH i-g-t 2/7] tests/intel/xe_vm: Update invalid flag subtest
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
2024-12-12 0:18 ` [PATCH i-g-t 1/7] drm-uapi/xe: Sync PXP uapi updates Daniele Ceraolo Spurio
@ 2024-12-12 0:18 ` Daniele Ceraolo Spurio
2024-12-12 0:24 ` Daniele Ceraolo Spurio
2024-12-12 0:18 ` [PATCH i-g-t 3/7] tests/intel/xe_query: Add test for PXP status query Daniele Ceraolo Spurio
` (7 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-12-12 0:18 UTC (permalink / raw)
To: igt-dev; +Cc: Daniele Ceraolo Spurio
PXP introduced a new valid flag, so we need to add it to the test and
shift the first invalid bit left by one.
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
---
tests/intel/xe_vm.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/tests/intel/xe_vm.c b/tests/intel/xe_vm.c
index e78ddd0e5..741dc0c7a 100644
--- a/tests/intel/xe_vm.c
+++ b/tests/intel/xe_vm.c
@@ -2216,6 +2216,11 @@ static void bind_flag_invalid(int fd)
igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
syncobj_reset(fd, &sync[0].handle, 1);
+ bind.bind.flags = DRM_XE_VM_BIND_FLAG_CHECK_PXP;
+ igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
+ igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
+ syncobj_reset(fd, &sync[0].handle, 1);
+
bind.bind.flags = DRM_XE_VM_BIND_FLAG_NULL;
bind.bind.obj = 0;
igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
@@ -2229,7 +2234,7 @@ static void bind_flag_invalid(int fd)
syncobj_reset(fd, &sync[0].handle, 1);
/* Using invalid flags should not work */
- bind.bind.flags = 1 << 4;
+ bind.bind.flags = 1 << 5;
igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
do_ioctl_err(fd, DRM_IOCTL_XE_VM_BIND, &bind, EINVAL);
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH i-g-t 2/7] tests/intel/xe_vm: Update invalid flag subtest
2024-12-12 0:18 ` [PATCH i-g-t 2/7] tests/intel/xe_vm: Update invalid flag subtest Daniele Ceraolo Spurio
@ 2024-12-12 0:24 ` Daniele Ceraolo Spurio
2025-01-15 5:09 ` Teres Alexis, Alan Previn
0 siblings, 1 reply; 17+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-12-12 0:24 UTC (permalink / raw)
To: igt-dev
On 12/11/2024 4:18 PM, Daniele Ceraolo Spurio wrote:
> PXP introduced a new valid flag, so we need to add it to the test and
> shift the first invalid bit left by one.
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> ---
> tests/intel/xe_vm.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/tests/intel/xe_vm.c b/tests/intel/xe_vm.c
> index e78ddd0e5..741dc0c7a 100644
> --- a/tests/intel/xe_vm.c
> +++ b/tests/intel/xe_vm.c
> @@ -2216,6 +2216,11 @@ static void bind_flag_invalid(int fd)
> igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> syncobj_reset(fd, &sync[0].handle, 1);
>
> + bind.bind.flags = DRM_XE_VM_BIND_FLAG_CHECK_PXP;
> + igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> + igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> + syncobj_reset(fd, &sync[0].handle, 1);
Right after sending the patches I realized I forgot to squash a fix to
only perform this ioctl if the PXP interface is supported. Will wait a
bit for comments on other patches before re-spinning this one.
Daniele
> +
> bind.bind.flags = DRM_XE_VM_BIND_FLAG_NULL;
> bind.bind.obj = 0;
> igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> @@ -2229,7 +2234,7 @@ static void bind_flag_invalid(int fd)
> syncobj_reset(fd, &sync[0].handle, 1);
>
> /* Using invalid flags should not work */
> - bind.bind.flags = 1 << 4;
> + bind.bind.flags = 1 << 5;
> igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> do_ioctl_err(fd, DRM_IOCTL_XE_VM_BIND, &bind, EINVAL);
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH i-g-t 2/7] tests/intel/xe_vm: Update invalid flag subtest
2024-12-12 0:24 ` Daniele Ceraolo Spurio
@ 2025-01-15 5:09 ` Teres Alexis, Alan Previn
0 siblings, 0 replies; 17+ messages in thread
From: Teres Alexis, Alan Previn @ 2025-01-15 5:09 UTC (permalink / raw)
To: igt-dev@lists.freedesktop.org, Ceraolo Spurio, Daniele
Acked. Will wait for next rev on this - but looks fine though.
On Wed, 2024-12-11 at 16:24 -0800, Daniele Ceraolo Spurio wrote:
>
>
> On 12/11/2024 4:18 PM, Daniele Ceraolo Spurio wrote:
> > PXP introduced a new valid flag, so we need to add it to the test and
> > shift the first invalid bit left by one.
> >
> > Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> > ---
> > tests/intel/xe_vm.c | 7 ++++++-
> > 1 file changed, 6 insertions(+), 1 deletion(-)
> >
> > diff --git a/tests/intel/xe_vm.c b/tests/intel/xe_vm.c
> > index e78ddd0e5..741dc0c7a 100644
> > --- a/tests/intel/xe_vm.c
> > +++ b/tests/intel/xe_vm.c
> > @@ -2216,6 +2216,11 @@ static void bind_flag_invalid(int fd)
> > igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> > syncobj_reset(fd, &sync[0].handle, 1);
> >
> > + bind.bind.flags = DRM_XE_VM_BIND_FLAG_CHECK_PXP;
> > + igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> > + igt_assert(syncobj_wait(fd, &sync[0].handle, 1, INT64_MAX, 0, NULL));
> > + syncobj_reset(fd, &sync[0].handle, 1);
>
> Right after sending the patches I realized I forgot to squash a fix to
> only perform this ioctl if the PXP interface is supported. Will wait a
> bit for comments on other patches before re-spinning this one.
>
> Daniele
>
> > +
> > bind.bind.flags = DRM_XE_VM_BIND_FLAG_NULL;
> > bind.bind.obj = 0;
> > igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> > @@ -2229,7 +2234,7 @@ static void bind_flag_invalid(int fd)
> > syncobj_reset(fd, &sync[0].handle, 1);
> >
> > /* Using invalid flags should not work */
> > - bind.bind.flags = 1 << 4;
> > + bind.bind.flags = 1 << 5;
> > igt_ioctl(fd, DRM_IOCTL_XE_VM_BIND, &bind);
> > do_ioctl_err(fd, DRM_IOCTL_XE_VM_BIND, &bind, EINVAL);
> >
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH i-g-t 3/7] tests/intel/xe_query: Add test for PXP status query
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
2024-12-12 0:18 ` [PATCH i-g-t 1/7] drm-uapi/xe: Sync PXP uapi updates Daniele Ceraolo Spurio
2024-12-12 0:18 ` [PATCH i-g-t 2/7] tests/intel/xe_vm: Update invalid flag subtest Daniele Ceraolo Spurio
@ 2024-12-12 0:18 ` Daniele Ceraolo Spurio
2025-01-15 5:38 ` Teres Alexis, Alan Previn
2024-12-12 0:18 ` [PATCH i-g-t 4/7] tests/intel/xe_pxp: Add PXP object and queue creation tests Daniele Ceraolo Spurio
` (6 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-12-12 0:18 UTC (permalink / raw)
To: igt-dev; +Cc: Daniele Ceraolo Spurio
Add a new test to exercise the PXP status query.
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
---
tests/intel/xe_query.c | 61 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/tests/intel/xe_query.c b/tests/intel/xe_query.c
index 1566680e7..0a2ff8d7f 100644
--- a/tests/intel/xe_query.c
+++ b/tests/intel/xe_query.c
@@ -1077,6 +1077,66 @@ static void test_query_oa_units(int fd)
}
}
+/**
+ * SUBTEST: query-pxp-status
+ * Description: Display PXP supported types and current status
+ *
+ * SUBTEST: multigpu-query-pxp-status
+ * Description: Display fields for PXP unit query for all Xe devices
+ * Sub-category: MultiGPU
+ */
+static void test_query_pxp_status(int fd)
+{
+ struct drm_xe_query_pxp_status *qpxp;
+ struct drm_xe_device_query query = {
+ .extensions = 0,
+ .query = DRM_XE_DEVICE_QUERY_PXP_STATUS,
+ .size = 0,
+ .data = 0,
+ };
+ int ret;
+
+ /*
+ * if we run this test on an older kernel that doesn't have the PXP
+ * query, the ioctl will return -EINVAL.
+ */
+ errno = 0;
+ ret = igt_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query);
+ igt_require(errno != EINVAL);
+ igt_assert_eq(ret, 0);
+
+ /* make sure the returned size is big enough */
+ igt_assert(query.size >= sizeof(*qpxp));
+
+ qpxp = malloc(query.size);
+ igt_assert(qpxp);
+
+ memset(qpxp, 0, query.size);
+
+ query.data = to_user_pointer(qpxp);
+ ret = igt_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query);
+ if (ret == -ENODEV) {
+ igt_info("PXP not supported\n");
+ return;
+ }
+
+ igt_assert_eq(ret, 0);
+ igt_assert_neq(qpxp->supported_session_types, 0);
+
+ switch (qpxp->status) {
+ case 0:
+ igt_info("PXP initialization still in progress\n");
+ break;
+ case 1:
+ igt_info("PXP initialization complete\n");
+ break;
+ default:
+ igt_assert_f(0, "unexpected PXP status %u\n", qpxp->status);
+ }
+
+ igt_info("PXP supported types mask 0x%x\n", qpxp->supported_session_types);
+}
+
igt_main
{
const struct {
@@ -1094,6 +1154,7 @@ igt_main
{ "query-uc-fw-version-guc", test_query_uc_fw_version_guc },
{ "query-uc-fw-version-huc", test_query_uc_fw_version_huc },
{ "query-oa-units", test_query_oa_units },
+ { "query-pxp-status", test_query_pxp_status },
{ "query-invalid-cs-cycles", test_engine_cycles_invalid },
{ "query-invalid-query", test_query_invalid_query },
{ "query-invalid-size", test_query_invalid_size },
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH i-g-t 3/7] tests/intel/xe_query: Add test for PXP status query
2024-12-12 0:18 ` [PATCH i-g-t 3/7] tests/intel/xe_query: Add test for PXP status query Daniele Ceraolo Spurio
@ 2025-01-15 5:38 ` Teres Alexis, Alan Previn
0 siblings, 0 replies; 17+ messages in thread
From: Teres Alexis, Alan Previn @ 2025-01-15 5:38 UTC (permalink / raw)
To: igt-dev@lists.freedesktop.org, Ceraolo Spurio, Daniele
looks good.
Reviewed-by: Alan Previn <alan.previn.teres.alexis@intel.com>
On Wed, 2024-12-11 at 16:18 -0800, Daniele Ceraolo Spurio wrote:
> Add a new test to exercise the PXP status query.
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> ---
> tests/intel/xe_query.c | 61 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 61 insertions(+)
>
> diff --git a/tests/intel/xe_query.c b/tests/intel/xe_query.c
> index 1566680e7..0a2ff8d7f 100644
> --- a/tests/intel/xe_query.c
> +++ b/tests/intel/xe_query.c
> @@ -1077,6 +1077,66 @@ static void test_query_oa_units(int fd)
> }
> }
>
> +/**
> + * SUBTEST: query-pxp-status
> + * Description: Display PXP supported types and current status
> + *
> + * SUBTEST: multigpu-query-pxp-status
> + * Description: Display fields for PXP unit query for all Xe devices
> + * Sub-category: MultiGPU
> + */
> +static void test_query_pxp_status(int fd)
> +{
> + struct drm_xe_query_pxp_status *qpxp;
> + struct drm_xe_device_query query = {
> + .extensions = 0,
> + .query = DRM_XE_DEVICE_QUERY_PXP_STATUS,
> + .size = 0,
> + .data = 0,
> + };
> + int ret;
> +
> + /*
> + * if we run this test on an older kernel that doesn't have the PXP
> + * query, the ioctl will return -EINVAL.
> + */
> + errno = 0;
> + ret = igt_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query);
> + igt_require(errno != EINVAL);
> + igt_assert_eq(ret, 0);
> +
> + /* make sure the returned size is big enough */
> + igt_assert(query.size >= sizeof(*qpxp));
> +
> + qpxp = malloc(query.size);
> + igt_assert(qpxp);
> +
> + memset(qpxp, 0, query.size);
> +
> + query.data = to_user_pointer(qpxp);
> + ret = igt_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query);
> + if (ret == -ENODEV) {
> + igt_info("PXP not supported\n");
> + return;
> + }
> +
> + igt_assert_eq(ret, 0);
> + igt_assert_neq(qpxp->supported_session_types, 0);
> +
> + switch (qpxp->status) {
> + case 0:
> + igt_info("PXP initialization still in progress\n");
> + break;
> + case 1:
> + igt_info("PXP initialization complete\n");
> + break;
> + default:
> + igt_assert_f(0, "unexpected PXP status %u\n", qpxp->status);
> + }
> +
> + igt_info("PXP supported types mask 0x%x\n", qpxp->supported_session_types);
> +}
> +
> igt_main
> {
> const struct {
> @@ -1094,6 +1154,7 @@ igt_main
> { "query-uc-fw-version-guc", test_query_uc_fw_version_guc },
> { "query-uc-fw-version-huc", test_query_uc_fw_version_huc },
> { "query-oa-units", test_query_oa_units },
> + { "query-pxp-status", test_query_pxp_status },
> { "query-invalid-cs-cycles", test_engine_cycles_invalid },
> { "query-invalid-query", test_query_invalid_query },
> { "query-invalid-size", test_query_invalid_size },
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH i-g-t 4/7] tests/intel/xe_pxp: Add PXP object and queue creation tests
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
` (2 preceding siblings ...)
2024-12-12 0:18 ` [PATCH i-g-t 3/7] tests/intel/xe_query: Add test for PXP status query Daniele Ceraolo Spurio
@ 2024-12-12 0:18 ` Daniele Ceraolo Spurio
2025-01-15 6:17 ` Teres Alexis, Alan Previn
2024-12-12 0:18 ` [PATCH i-g-t 5/7] tests/intel/xe_pxp: Test PXP submissions Daniele Ceraolo Spurio
` (5 subsequent siblings)
9 siblings, 1 reply; 17+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-12-12 0:18 UTC (permalink / raw)
To: igt-dev; +Cc: Daniele Ceraolo Spurio
PXP support introduces new SET_PROPERTY extensions to both BOs and
exec_queues to mark them as being used for PXP workloads, so we need to
test both correct and incorrect usage of those new interfaces.
Since this is the first usage of extensions for BO creation, the
common BO code has been update to support the extra parameter.
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
---
lib/xe/xe_ioctl.c | 14 +--
lib/xe/xe_ioctl.h | 2 +-
tests/intel/xe_mmap.c | 1 +
tests/intel/xe_pxp.c | 201 ++++++++++++++++++++++++++++++++++++++++++
tests/meson.build | 1 +
5 files changed, 213 insertions(+), 6 deletions(-)
create mode 100644 tests/intel/xe_pxp.c
diff --git a/lib/xe/xe_ioctl.c b/lib/xe/xe_ioctl.c
index 6d8388918..01ab7c758 100644
--- a/lib/xe/xe_ioctl.c
+++ b/lib/xe/xe_ioctl.c
@@ -264,7 +264,8 @@ static bool vram_selected(int fd, uint32_t selected_regions)
}
static uint32_t ___xe_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t placement,
- uint32_t flags, uint16_t cpu_caching, uint32_t *handle)
+ uint32_t flags, uint16_t cpu_caching, void *ext,
+ uint32_t *handle)
{
struct drm_xe_gem_create create = {
.vm_id = vm,
@@ -275,6 +276,9 @@ static uint32_t ___xe_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t pla
};
int err;
+ if (ext)
+ create.extensions = to_user_pointer(ext);
+
/*
* In case vram_if_possible returned system_memory,
* visible VRAM cannot be requested through flags
@@ -292,11 +296,11 @@ static uint32_t ___xe_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t pla
}
uint32_t __xe_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t placement,
- uint32_t flags, uint32_t *handle)
+ uint32_t flags, void *ext, uint32_t *handle)
{
uint16_t cpu_caching = __xe_default_cpu_caching(fd, placement, flags);
- return ___xe_bo_create(fd, vm, size, placement, flags, cpu_caching, handle);
+ return ___xe_bo_create(fd, vm, size, placement, flags, cpu_caching, ext, handle);
}
uint32_t xe_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t placement,
@@ -304,7 +308,7 @@ uint32_t xe_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t placement,
{
uint32_t handle;
- igt_assert_eq(__xe_bo_create(fd, vm, size, placement, flags, &handle), 0);
+ igt_assert_eq(__xe_bo_create(fd, vm, size, placement, flags, NULL, &handle), 0);
return handle;
}
@@ -312,7 +316,7 @@ uint32_t xe_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t placement,
uint32_t __xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t placement,
uint32_t flags, uint16_t cpu_caching, uint32_t *handle)
{
- return ___xe_bo_create(fd, vm, size, placement, flags, cpu_caching, handle);
+ return ___xe_bo_create(fd, vm, size, placement, flags, cpu_caching, NULL, handle);
}
uint32_t xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t placement,
diff --git a/lib/xe/xe_ioctl.h b/lib/xe/xe_ioctl.h
index 18cc2b72b..c8a2d81c5 100644
--- a/lib/xe/xe_ioctl.h
+++ b/lib/xe/xe_ioctl.h
@@ -67,7 +67,7 @@ void xe_vm_unbind_all_async(int fd, uint32_t vm, uint32_t exec_queue,
uint32_t num_syncs);
void xe_vm_destroy(int fd, uint32_t vm);
uint32_t __xe_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t placement,
- uint32_t flags, uint32_t *handle);
+ uint32_t flags, void *ext, uint32_t *handle);
uint32_t xe_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t placement,
uint32_t flags);
uint32_t __xe_bo_create_caching(int fd, uint32_t vm, uint64_t size, uint32_t placement,
diff --git a/tests/intel/xe_mmap.c b/tests/intel/xe_mmap.c
index d818cc2f8..9f72cf2da 100644
--- a/tests/intel/xe_mmap.c
+++ b/tests/intel/xe_mmap.c
@@ -168,6 +168,7 @@ static void test_small_bar(int fd)
igt_assert_neq(__xe_bo_create(fd, 0, visible_size + page_size,
vram_memory(fd, 0),
DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM,
+ NULL,
&bo),
0);
diff --git a/tests/intel/xe_pxp.c b/tests/intel/xe_pxp.c
new file mode 100644
index 000000000..cfe118a1a
--- /dev/null
+++ b/tests/intel/xe_pxp.c
@@ -0,0 +1,201 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include "igt.h"
+#include "xe_drm.h"
+#include "xe/xe_ioctl.h"
+#include "xe/xe_query.h"
+
+IGT_TEST_DESCRIPTION("Test PXP that manages protected content through arbitrated HW-PXP-session");
+/* Note: PXP = "Protected Xe Path" */
+
+/**
+ * TEST: Test PXP functionality
+ * Category: Content protection
+ * Mega feature: PXP
+ * Sub-category: PXP tests
+ * Functionality: Execution of protected content
+ * Test category: functionality test
+ */
+
+static int __pxp_bo_create(int fd, uint32_t vm, uint64_t size,
+ uint32_t session_type, uint32_t *handle)
+{
+ struct drm_xe_ext_set_property ext = {
+ .base.next_extension = 0,
+ .base.name = DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY,
+ .property = DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE,
+ .value = session_type,
+ };
+ int ret = 0;
+
+ if (__xe_bo_create(fd, vm, size, system_memory(fd), 0, &ext, handle)) {
+ ret = -errno;
+ errno = 0;
+ }
+
+ return ret;
+}
+
+static int __create_pxp_rcs_queue(int fd, uint32_t vm,
+ uint32_t session_type,
+ uint32_t *q)
+{
+ struct drm_xe_engine_class_instance inst = {
+ .engine_class = DRM_XE_ENGINE_CLASS_RENDER,
+ };
+ struct drm_xe_ext_set_property ext = { 0 };
+ uint64_t ext_ptr = to_user_pointer(&ext);
+
+ ext.base.next_extension = 0,
+ ext.base.name = DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY,
+ ext.property = DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE,
+ ext.value = session_type;
+
+ return __xe_exec_queue_create(fd, vm, 1, 1, &inst, ext_ptr, q);
+}
+
+static int query_pxp_status(int fd)
+{
+ struct drm_xe_query_pxp_status *pxp_query;
+ struct drm_xe_device_query query = {
+ .extensions = 0,
+ .query = DRM_XE_DEVICE_QUERY_PXP_STATUS,
+ .size = 0,
+ .data = 0,
+ };
+ int status;
+
+ if (igt_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query))
+ return -errno;
+
+ pxp_query = malloc(query.size);
+ igt_assert(pxp_query);
+ memset(pxp_query, 0, query.size);
+
+ query.data = to_user_pointer(pxp_query);
+
+ if (igt_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query))
+ return -errno;
+
+ status = pxp_query->status;
+ free(pxp_query);
+
+ return status;
+}
+
+static bool is_pxp_hw_supported(int fd)
+{
+ int pxp_status;
+ int i = 0;
+
+ /* PXP init completes after driver init, so we might have to wait for it */
+ while (i++ < 50) {
+ pxp_status = query_pxp_status(fd);
+
+ /* -EINVAL means the PXP interface is not available */
+ igt_require(pxp_status != -EINVAL);
+
+ /* -ENODEV means PXP not supported or disabled */
+ if (pxp_status == -ENODEV)
+ return false;
+
+ /* status 1 means pxp is ready */
+ if (pxp_status == 1)
+ return true;
+
+ /*
+ * 0 means init still in progress, any other remaining state
+ * is an error
+ */
+ igt_assert_eq(pxp_status, 0);
+
+ usleep(50*1000);
+ }
+
+ igt_assert_f(0, "PXP failed to initialize within the timeout\n");
+ return false;
+}
+
+/**
+ * SUBTEST: pxp-bo-alloc
+ * Description: Verify PXP bo allocation works as expected
+ */
+static void test_pxp_bo_alloc(int fd, bool pxp_supported)
+{
+ uint32_t bo;
+ int ret;
+
+ /* BO creation with DRM_XE_PXP_TYPE_NONE must always succeed */
+ ret = __pxp_bo_create(fd, 0, 4096, DRM_XE_PXP_TYPE_NONE, &bo);
+ igt_assert_eq(ret, 0);
+ gem_close(fd, bo);
+
+ /* BO creation with DRM_XE_PXP_TYPE_HWDRM must only succeed if PXP is supported */
+ ret = __pxp_bo_create(fd, 0, 4096, DRM_XE_PXP_TYPE_HWDRM, &bo);
+ igt_assert_eq(ret, pxp_supported ? 0 : -ENODEV);
+ if (!ret)
+ gem_close(fd, bo);
+
+ /* BO creation with an invalid type must always fail */
+ ret = __pxp_bo_create(fd, 0, 4096, 0xFF, &bo);
+ igt_assert_eq(ret, -EINVAL);
+}
+
+/**
+ * SUBTEST: pxp-queue-alloc
+ * Description: Verify PXP exec queue creation works as expected
+ */
+static void test_pxp_queue_creation(int fd, bool pxp_supported)
+{
+ uint32_t q;
+ uint32_t vm;
+ int ret;
+
+ vm = xe_vm_create(fd, 0, 0);
+
+ /* queue creation with DRM_XE_PXP_TYPE_NONE must always succeed */
+ ret = __create_pxp_rcs_queue(fd, vm, DRM_XE_PXP_TYPE_NONE, &q);
+ igt_assert_eq(ret, 0);
+ xe_exec_queue_destroy(fd, q);
+
+ /* queue creation with DRM_XE_PXP_TYPE_HWDRM must only succeed if PXP is supported */
+ ret = __create_pxp_rcs_queue(fd, vm, DRM_XE_PXP_TYPE_HWDRM, &q);
+ igt_assert_eq(ret, pxp_supported ? 0 : -ENODEV);
+ if (!ret)
+ xe_exec_queue_destroy(fd, q);
+
+ /* queue creation with an invalid type must always fail */
+ ret = __create_pxp_rcs_queue(fd, vm, 0xFF, &q);
+ igt_assert_eq(ret, -EINVAL);
+
+ xe_vm_destroy(fd, vm);
+}
+
+igt_main
+{
+ int xe_fd = -1;
+ bool pxp_supported = true;
+
+ igt_fixture {
+ xe_fd = drm_open_driver(DRIVER_XE);
+ igt_require(xe_fd);
+ igt_require(xe_has_engine_class(xe_fd, DRM_XE_ENGINE_CLASS_RENDER));
+ pxp_supported = is_pxp_hw_supported(xe_fd);
+ }
+
+ igt_subtest_group {
+ igt_describe("Verify PXP allocations work as expected");
+ igt_subtest("pxp-bo-alloc")
+ test_pxp_bo_alloc(xe_fd, pxp_supported);
+
+ igt_subtest("pxp-queue-alloc")
+ test_pxp_queue_creation(xe_fd, pxp_supported);
+ }
+
+ igt_fixture {
+ close(xe_fd);
+ }
+}
diff --git a/tests/meson.build b/tests/meson.build
index 2724c7a9a..5904d9523 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -310,6 +310,7 @@ intel_xe_progs = [
'xe_pm',
'xe_pm_residency',
'xe_prime_self_import',
+ 'xe_pxp',
'xe_query',
'xe_render_copy',
'xe_vm',
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* Re: [PATCH i-g-t 4/7] tests/intel/xe_pxp: Add PXP object and queue creation tests
2024-12-12 0:18 ` [PATCH i-g-t 4/7] tests/intel/xe_pxp: Add PXP object and queue creation tests Daniele Ceraolo Spurio
@ 2025-01-15 6:17 ` Teres Alexis, Alan Previn
0 siblings, 0 replies; 17+ messages in thread
From: Teres Alexis, Alan Previn @ 2025-01-15 6:17 UTC (permalink / raw)
To: igt-dev@lists.freedesktop.org, Ceraolo Spurio, Daniele
everything looks good.. except only one issue and one nit.
that said, to speed things up, here is a conditional RB pending that missing memory free in query_pxp_status.
(considering everything else appears correct and concise).
Reviewed-by: Alan Previn <alan.previn.teres.alexis@intel.com>
...alan
On Wed, 2024-12-11 at 16:18 -0800, Daniele Ceraolo Spurio wrote:
> PXP support introduces new SET_PROPERTY extensions to both BOs and
> exec_queues to mark them as being used for PXP workloads, so we need to
> test both correct and incorrect usage of those new interfaces.
>
> Since this is the first usage of extensions for BO creation, the
> common BO code has been update to support the extra parameter.
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> ---
> lib/xe/xe_ioctl.c | 14 +--
> lib/xe/xe_ioctl.h | 2 +-
> tests/intel/xe_mmap.c | 1 +
> tests/intel/xe_pxp.c | 201 ++++++++++++++++++++++++++++++++++++++++++
> tests/meson.build | 1 +
> 5 files changed, 213 insertions(+), 6 deletions(-)
> create mode 100644 tests/intel/xe_pxp.c
>
> diff --git a/lib/xe/xe_ioctl.c b/lib/xe/xe_ioctl.c
> index 6d8388918..01ab7c758 100644
> --- a/lib/xe/xe_ioctl.c
> +++ b/lib/xe/xe_ioctl.c
>
alan:snip
> diff --git a/tests/intel/xe_mmap.c b/tests/intel/xe_mmap.c
> index d818cc2f8..9f72cf2da 100644
> --- a/tests/intel/xe_mmap.c
> +++ b/tests/intel/xe_mmap.c
alan:snip
> diff --git a/tests/intel/xe_pxp.c b/tests/intel/xe_pxp.c
> new file mode 100644
> index 000000000..cfe118a1a
> --- /dev/null
> +++ b/tests/intel/xe_pxp.c
> @@ -0,0 +1,201 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#include "igt.h"
> +#include "xe_drm.h"
> +#include "xe/xe_ioctl.h"
> +#include "xe/xe_query.h"
> +
> +IGT_TEST_DESCRIPTION("Test PXP that manages protected content through arbitrated HW-PXP-session");
> +/* Note: PXP = "Protected Xe Path" */
> +
> +/**
> + * TEST: Test PXP functionality
> + * Category: Content protection
> + * Mega feature: PXP
> + * Sub-category: PXP tests
> + * Functionality: Execution of protected content
> + * Test category: functionality test
> + */
> +
> +static int __pxp_bo_create(int fd, uint32_t vm, uint64_t size,
> + uint32_t session_type, uint32_t *handle)
> +{
> + struct drm_xe_ext_set_property ext = {
> + .base.next_extension = 0,
> + .base.name = DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY,
> + .property = DRM_XE_GEM_CREATE_SET_PROPERTY_PXP_TYPE,
> + .value = session_type,
> + };
> + int ret = 0;
> +
> + if (__xe_bo_create(fd, vm, size, system_memory(fd), 0, &ext, handle)) {
> + ret = -errno;
> + errno = 0;
> + }
> +
> + return ret;
> +}
> +
> +static int __create_pxp_rcs_queue(int fd, uint32_t vm,
> + uint32_t session_type,
> + uint32_t *q)
> +{
> + struct drm_xe_engine_class_instance inst = {
> + .engine_class = DRM_XE_ENGINE_CLASS_RENDER,
> + };
> + struct drm_xe_ext_set_property ext = { 0 };
> + uint64_t ext_ptr = to_user_pointer(&ext);
> +
> + ext.base.next_extension = 0,
> + ext.base.name = DRM_XE_EXEC_QUEUE_EXTENSION_SET_PROPERTY,
> + ext.property = DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE,
> + ext.value = session_type;
> +
> + return __xe_exec_queue_create(fd, vm, 1, 1, &inst, ext_ptr, q);
> +}
> +
> +static int query_pxp_status(int fd)
> +{
> + struct drm_xe_query_pxp_status *pxp_query;
> + struct drm_xe_device_query query = {
> + .extensions = 0,
> + .query = DRM_XE_DEVICE_QUERY_PXP_STATUS,
> + .size = 0,
> + .data = 0,
> + };
> + int status;
> +
> + if (igt_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query))
> + return -errno;
> +
> + pxp_query = malloc(query.size);
> + igt_assert(pxp_query);
> + memset(pxp_query, 0, query.size);
> +
> + query.data = to_user_pointer(pxp_query);
> +
> + if (igt_ioctl(fd, DRM_IOCTL_XE_DEVICE_QUERY, &query))
alan: forgot to free pxp_query before return
> + return -errno;
> +
> + status = pxp_query->status;
> + free(pxp_query);
> +
> + return status;
> +}
> +
> +static bool is_pxp_hw_supported(int fd)
> +{
> + int pxp_status;
> + int i = 0;
> +
> + /* PXP init completes after driver init, so we might have to wait for it */
> + while (i++ < 50) {
> + pxp_status = query_pxp_status(fd);
> +
> + /* -EINVAL means the PXP interface is not available */
> + igt_require(pxp_status != -EINVAL);
> +
> + /* -ENODEV means PXP not supported or disabled */
> + if (pxp_status == -ENODEV)
> + return false;
> +
> + /* status 1 means pxp is ready */
> + if (pxp_status == 1)
> + return true;
> +
> + /*
> + * 0 means init still in progress, any other remaining state
> + * is an error
> + */
> + igt_assert_eq(pxp_status, 0);
> +
> + usleep(50*1000);
> + }
> +
> + igt_assert_f(0, "PXP failed to initialize within the timeout\n");
> + return false;
> +}
> +
> +/**
> + * SUBTEST: pxp-bo-alloc
> + * Description: Verify PXP bo allocation works as expected
> + */
> +static void test_pxp_bo_alloc(int fd, bool pxp_supported)
> +{
> + uint32_t bo;
> + int ret;
> +
> + /* BO creation with DRM_XE_PXP_TYPE_NONE must always succeed */
> + ret = __pxp_bo_create(fd, 0, 4096, DRM_XE_PXP_TYPE_NONE, &bo);
> + igt_assert_eq(ret, 0);
> + gem_close(fd, bo);
> +
> + /* BO creation with DRM_XE_PXP_TYPE_HWDRM must only succeed if PXP is supported */
> + ret = __pxp_bo_create(fd, 0, 4096, DRM_XE_PXP_TYPE_HWDRM, &bo);
> + igt_assert_eq(ret, pxp_supported ? 0 : -ENODEV);
> + if (!ret)
> + gem_close(fd, bo);
> +
> + /* BO creation with an invalid type must always fail */
> + ret = __pxp_bo_create(fd, 0, 4096, 0xFF, &bo);
> + igt_assert_eq(ret, -EINVAL);
> +}
> +
> +/**
> + * SUBTEST: pxp-queue-alloc
> + * Description: Verify PXP exec queue creation works as expected
> + */
> +static void test_pxp_queue_creation(int fd, bool pxp_supported)
> +{
> + uint32_t q;
> + uint32_t vm;
> + int ret;
> +
> + vm = xe_vm_create(fd, 0, 0);
> +
> + /* queue creation with DRM_XE_PXP_TYPE_NONE must always succeed */
> + ret = __create_pxp_rcs_queue(fd, vm, DRM_XE_PXP_TYPE_NONE, &q);
> + igt_assert_eq(ret, 0);
> + xe_exec_queue_destroy(fd, q);
> +
> + /* queue creation with DRM_XE_PXP_TYPE_HWDRM must only succeed if PXP is supported */
> + ret = __create_pxp_rcs_queue(fd, vm, DRM_XE_PXP_TYPE_HWDRM, &q);
> + igt_assert_eq(ret, pxp_supported ? 0 : -ENODEV);
> + if (!ret)
> + xe_exec_queue_destroy(fd, q);
> +
> + /* queue creation with an invalid type must always fail */
> + ret = __create_pxp_rcs_queue(fd, vm, 0xFF, &q);
> + igt_assert_eq(ret, -EINVAL);
> +
> + xe_vm_destroy(fd, vm);
> +}
> +
> +igt_main
> +{
> + int xe_fd = -1;
> + bool pxp_supported = true;
> +
> + igt_fixture {
> + xe_fd = drm_open_driver(DRIVER_XE);
> + igt_require(xe_fd);
alan: nit: i think u can skip this check? (looking at implementation of drm_open_driver, test will skip if there's no
fd?)
> + igt_require(xe_has_engine_class(xe_fd, DRM_XE_ENGINE_CLASS_RENDER));
> + pxp_supported = is_pxp_hw_supported(xe_fd);
> + }
> +
> + igt_subtest_group {
> + igt_describe("Verify PXP allocations work as expected");
> + igt_subtest("pxp-bo-alloc")
> + test_pxp_bo_alloc(xe_fd, pxp_supported);
> +
> + igt_subtest("pxp-queue-alloc")
> + test_pxp_queue_creation(xe_fd, pxp_supported);
> + }
> +
> + igt_fixture {
> + close(xe_fd);
> + }
> +}
> diff --git a/tests/meson.build b/tests/meson.build
> index 2724c7a9a..5904d9523 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -310,6 +310,7 @@ intel_xe_progs = [
> 'xe_pm',
> 'xe_pm_residency',
> 'xe_prime_self_import',
> + 'xe_pxp',
> 'xe_query',
> 'xe_render_copy',
> 'xe_vm',
> --
> 2.43.0
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH i-g-t 5/7] tests/intel/xe_pxp: Test PXP submissions
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
` (3 preceding siblings ...)
2024-12-12 0:18 ` [PATCH i-g-t 4/7] tests/intel/xe_pxp: Add PXP object and queue creation tests Daniele Ceraolo Spurio
@ 2024-12-12 0:18 ` Daniele Ceraolo Spurio
2024-12-12 0:18 ` [PATCH i-g-t 6/7] tests/intel/xe_pxp: Termination tests Daniele Ceraolo Spurio
` (4 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-12-12 0:18 UTC (permalink / raw)
To: igt-dev; +Cc: Daniele Ceraolo Spurio
The render supports PXP usage via rendercopy. We can use this to test
that a user is able to correctly encrypt their data. In particular, we
cover these 2 scenarios:
1) copy from clear to encrypted - we expect the dest buffer to not match
the src one due to the encryption.
2) copy from encrypted to encrypted = we expect the 2 BOs to match since
they hold the same data encrypted with the same key.
Note that the clear to clear copy is already covered by the
xe_render_copy test.
Since the render_copy uses the intel_batchbuffer helpers, those helpers
have been updated to support vm bind of protected objects.
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
---
lib/intel_batchbuffer.c | 17 ++-
tests/intel/xe_pxp.c | 270 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 283 insertions(+), 4 deletions(-)
diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
index 72bbbf8c6..489e78782 100644
--- a/lib/intel_batchbuffer.c
+++ b/lib/intel_batchbuffer.c
@@ -1333,7 +1333,9 @@ void intel_bb_destroy(struct intel_bb *ibb)
}
#define XE_OBJ_SIZE(rsvd1) ((rsvd1) & ~(SZ_4K-1))
-#define XE_OBJ_PAT_IDX(rsvd1) ((rsvd1) & (SZ_4K-1))
+#define XE_OBJ_PAT_IDX(rsvd1) ((rsvd1) & (0xFF))
+#define XE_OBJ_PXP_BIT (0x100)
+#define XE_OBJ_PXP(rsvd1) ((rsvd1) & (XE_OBJ_PXP_BIT))
static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(struct intel_bb *ibb,
uint32_t op, uint32_t flags,
@@ -1355,6 +1357,9 @@ static struct drm_xe_vm_bind_op *xe_alloc_bind_ops(struct intel_bb *ibb,
ops->op = op;
ops->flags = flags;
+
+ if (XE_OBJ_PXP(objects[i]->rsvd1))
+ ops->flags |= DRM_XE_VM_BIND_FLAG_CHECK_PXP;
ops->obj_offset = 0;
ops->addr = objects[i]->offset;
ops->range = XE_OBJ_SIZE(objects[i]->rsvd1);
@@ -1745,7 +1750,7 @@ 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, uint8_t pat_index,
- bool write)
+ bool protected, bool write)
{
struct drm_i915_gem_exec_object2 *object;
@@ -1822,6 +1827,7 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
object->alignment = alignment;
object->rsvd1 = size;
igt_assert(!XE_OBJ_PAT_IDX(object->rsvd1));
+ igt_assert(!XE_OBJ_PXP(object->rsvd1));
if (pat_index == DEFAULT_PAT_INDEX)
pat_index = intel_get_pat_idx_wb(ibb->fd);
@@ -1833,6 +1839,9 @@ __intel_bb_add_object(struct intel_bb *ibb, uint32_t handle, uint64_t size,
* information on xe...
*/
object->rsvd1 |= pat_index;
+
+ if (protected)
+ object->rsvd1 |= XE_OBJ_PXP_BIT;
}
return object;
@@ -1845,7 +1854,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, DEFAULT_PAT_INDEX, write);
+ alignment, DEFAULT_PAT_INDEX, false, write);
igt_assert(obj);
return obj;
@@ -1909,7 +1918,7 @@ __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, buf->pat_index,
- write);
+ buf->is_protected, write);
igt_assert(obj);
buf->addr.offset = obj->offset;
diff --git a/tests/intel/xe_pxp.c b/tests/intel/xe_pxp.c
index cfe118a1a..3d625af8f 100644
--- a/tests/intel/xe_pxp.c
+++ b/tests/intel/xe_pxp.c
@@ -4,6 +4,10 @@
*/
#include "igt.h"
+#include "intel_batchbuffer.h"
+#include "intel_bufops.h"
+#include "intel_mocs.h"
+#include "intel_pat.h"
#include "xe_drm.h"
#include "xe/xe_ioctl.h"
#include "xe/xe_query.h"
@@ -39,6 +43,15 @@ static int __pxp_bo_create(int fd, uint32_t vm, uint64_t size,
return ret;
}
+static uint32_t pxp_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t type)
+{
+ uint32_t handle;
+
+ igt_assert_eq(__pxp_bo_create(fd, vm, size, type, &handle), 0);
+
+ return handle;
+}
+
static int __create_pxp_rcs_queue(int fd, uint32_t vm,
uint32_t session_type,
uint32_t *q)
@@ -57,6 +70,17 @@ static int __create_pxp_rcs_queue(int fd, uint32_t vm,
return __xe_exec_queue_create(fd, vm, 1, 1, &inst, ext_ptr, q);
}
+static uint32_t create_pxp_rcs_queue(int fd, uint32_t vm)
+{
+ uint32_t q;
+ int err;
+
+ err = __create_pxp_rcs_queue(fd, vm, DRM_XE_PXP_TYPE_HWDRM, &q);
+ igt_assert_eq(err, 0);
+
+ return q;
+}
+
static int query_pxp_status(int fd)
{
struct drm_xe_query_pxp_status *pxp_query;
@@ -174,10 +198,241 @@ static void test_pxp_queue_creation(int fd, bool pxp_supported)
xe_vm_destroy(fd, vm);
}
+static void fill_bo_content(int fd, uint32_t bo, uint32_t size, uint8_t initcolor)
+{
+ uint32_t *ptr;
+
+ ptr = xe_bo_mmap_ext(fd, bo, size, PROT_READ|PROT_WRITE);
+
+ /* read and count all dword matches till size */
+ memset(ptr, initcolor, size);
+
+ igt_assert(munmap(ptr, size) == 0);
+}
+
+static void __check_bo_color(int fd, uint32_t bo, uint32_t size, uint32_t color, bool readible)
+{
+ uint64_t comp;
+ uint64_t *ptr;
+ int i, num_matches = 0;
+
+ comp = color;
+ comp = comp | (comp << 32);
+
+ ptr = xe_bo_mmap_ext(fd, bo, size, PROT_READ);
+
+ igt_assert_eq(size % sizeof(uint64_t), 0);
+
+ for (i = 0; i < (size / sizeof(uint64_t)); i++)
+ if (ptr[i] == comp)
+ ++num_matches;
+
+ if (readible)
+ igt_assert_eq(num_matches, (size / sizeof(uint64_t)));
+ else
+ igt_assert_eq(num_matches, 0);
+}
+
+static void check_bo_color(int fd, uint32_t bo, uint32_t size, uint8_t color, bool readible)
+{
+ uint32_t comp;
+
+ /*
+ * We memset the buffer using a u8 color value. However, this is too
+ * small to ensure the encrypted data does not accidentally match it,
+ * so we scale it up to a bigger size.
+ */
+ comp = color;
+ comp = comp | (comp << 8) | (comp << 16) | (comp << 24);
+
+ return __check_bo_color(fd, bo, size, comp, readible);
+}
+
+static uint32_t __bo_create_and_fill(int fd, uint32_t vm, bool protected,
+ uint32_t size, uint8_t init_color)
+{
+ uint32_t bo;
+
+ if (protected)
+ bo = pxp_bo_create(fd, vm, size, DRM_XE_PXP_TYPE_HWDRM);
+ else
+ bo = xe_bo_create(fd, vm, size, system_memory(fd), 0);
+
+ fill_bo_content(fd, bo, size, init_color);
+
+ return bo;
+}
+
+static uint32_t pxp_bo_create_and_fill(int fd, uint32_t vm, uint32_t size,
+ uint8_t init_color)
+{
+ return __bo_create_and_fill(fd, vm, true, size, init_color);
+}
+
+static uint32_t regular_bo_create_and_fill(int fd, uint32_t vm, uint32_t size,
+ uint8_t init_color)
+{
+ return __bo_create_and_fill(fd, vm, false, size, init_color);
+}
+
+static struct intel_buf *buf_create(int fd, struct buf_ops *bops, uint32_t handle,
+ int width, int height, int bpp, uint64_t size)
+{
+ igt_assert(handle);
+ igt_assert(size);
+ return intel_buf_create_full(bops, handle, width, height, bpp, 0,
+ I915_TILING_NONE, 0, size, 0,
+ system_memory(fd),
+ DEFAULT_PAT_INDEX, DEFAULT_MOCS_INDEX);
+}
+
+/* Rendering tests surface attributes */
+#define TSTSURF_WIDTH 64
+#define TSTSURF_HEIGHT 64
+#define TSTSURF_BYTESPP 4
+#define TSTSURF_STRIDE (TSTSURF_WIDTH * TSTSURF_BYTESPP)
+#define TSTSURF_SIZE (TSTSURF_STRIDE * TSTSURF_HEIGHT)
+#define TSTSURF_INITCOLOR1 0xAA
+#define TSTSURF_FILLCOLOR1 0x55
+#define TSTSURF_INITCOLOR2 0x33
+
+static void pxp_rendercopy(int fd, uint32_t q, uint32_t vm, uint32_t copy_size,
+ uint32_t srcbo, bool src_pxp, uint32_t dstbo, bool dst_pxp)
+{
+ igt_render_copyfunc_t render_copy;
+ struct intel_buf *srcbuf, *dstbuf;
+ struct buf_ops *bops;
+ struct intel_bb *ibb;
+
+ /*
+ * we use the defined width and height below, which only works if the BO
+ * size is TSTSURF_SIZE
+ */
+ igt_assert_eq(copy_size, TSTSURF_SIZE);
+
+ render_copy = igt_get_render_copyfunc(intel_get_drm_devid(fd));
+ igt_assert(render_copy);
+
+ bops = buf_ops_create(fd);
+ igt_assert(bops);
+
+ ibb = intel_bb_create_with_context(fd, q, vm, NULL, 4096);
+ igt_assert(ibb);
+ intel_bb_set_pxp(ibb, true, DISPLAY_APPTYPE, DRM_XE_PXP_HWDRM_DEFAULT_SESSION);
+
+ dstbuf = buf_create(fd, bops, dstbo, TSTSURF_WIDTH, TSTSURF_HEIGHT,
+ TSTSURF_BYTESPP * 8, TSTSURF_SIZE);
+ intel_buf_set_pxp(dstbuf, dst_pxp);
+
+ srcbuf = buf_create(fd, bops, srcbo, TSTSURF_WIDTH, TSTSURF_HEIGHT,
+ TSTSURF_BYTESPP * 8, TSTSURF_SIZE);
+ intel_buf_set_pxp(srcbuf, src_pxp);
+
+ render_copy(ibb, srcbuf, 0, 0, TSTSURF_WIDTH, TSTSURF_HEIGHT, dstbuf, 0, 0);
+ intel_bb_sync(ibb);
+
+ intel_buf_destroy(srcbuf);
+ intel_buf_destroy(dstbuf);
+ intel_bb_destroy(ibb);
+ buf_ops_destroy(bops);
+}
+
+/**
+ * SUBTEST: regular-src-to-pxp-dest-rendercopy
+ * Description: copy from a regular BO to a PXP one and verify the encryption
+ */
+static void test_render_regular_src_to_pxp_dest(int fd)
+{
+ uint32_t vm, srcbo, dstbo;
+ uint32_t q;
+
+ vm = xe_vm_create(fd, 0, 0);
+
+ /*
+ * Perform a protected render operation but only label the dest as
+ * protected. After rendering, the content should be encrypted.
+ */
+ q = create_pxp_rcs_queue(fd, vm);
+
+ srcbo = regular_bo_create_and_fill(fd, vm, TSTSURF_SIZE, TSTSURF_FILLCOLOR1);
+ dstbo = pxp_bo_create_and_fill(fd, vm, TSTSURF_SIZE, TSTSURF_INITCOLOR1);
+
+ pxp_rendercopy(fd, q, vm, TSTSURF_SIZE, srcbo, false, dstbo, true);
+
+ check_bo_color(fd, dstbo, TSTSURF_SIZE, TSTSURF_FILLCOLOR1, false);
+
+ gem_close(fd, srcbo);
+ gem_close(fd, dstbo);
+ xe_exec_queue_destroy(fd, q);
+ xe_vm_destroy(fd, vm);
+}
+
+static int bocmp(int fd, uint32_t bo1, uint32_t bo2, uint32_t size)
+{
+ uint32_t *ptr1, *ptr2;
+ int ret;
+
+ ptr1 = xe_bo_mmap_ext(fd, bo1, size, PROT_READ);
+ ptr2 = xe_bo_mmap_ext(fd, bo2, size, PROT_READ);
+
+ ret = memcmp(ptr1, ptr2, size);
+
+ igt_assert_eq(munmap(ptr1, size), 0);
+ igt_assert_eq(munmap(ptr2, size), 0);
+
+ return ret;
+}
+
+/**
+ * SUBTEST: pxp-src-to-pxp-dest-rendercopy
+ * Description: copy between 2 PXP BOs and verify the encryption
+ */
+
+static void test_render_pxp_protsrc_to_protdest(int fd)
+{
+ uint32_t vm, srcbo, dstbo, dstbo2;
+ uint32_t q;
+
+ vm = xe_vm_create(fd, 0, 0);
+
+ q = create_pxp_rcs_queue(fd, vm);
+
+ /*
+ * Copy from a regular src to a PXP dst to get a buffer with a
+ * valid encryption.
+ */
+ srcbo = regular_bo_create_and_fill(fd, vm, TSTSURF_SIZE, TSTSURF_FILLCOLOR1);
+ dstbo = pxp_bo_create_and_fill(fd, vm, TSTSURF_SIZE, TSTSURF_INITCOLOR1);
+
+ pxp_rendercopy(fd, q, vm, TSTSURF_SIZE, srcbo, false, dstbo, true);
+
+ check_bo_color(fd, dstbo, TSTSURF_SIZE, TSTSURF_FILLCOLOR1, false);
+
+ /*
+ * Reuse prior dst as the new-src and create dst2 as the new-dest.
+ * After the rendering, we should find no difference in content since
+ * both new-src and new-dest are labelled as encrypted. HW should read
+ * and decrypt new-src, perform the copy and re-encrypt with the same
+ * key when going into new-dest
+ */
+ dstbo2 = pxp_bo_create_and_fill(fd, vm, TSTSURF_SIZE, TSTSURF_INITCOLOR2);
+
+ pxp_rendercopy(fd, q, vm, TSTSURF_SIZE, dstbo, true, dstbo2, true);
+
+ igt_assert_eq(bocmp(fd, dstbo, dstbo2, TSTSURF_SIZE), 0);
+
+ gem_close(fd, srcbo);
+ gem_close(fd, dstbo);
+ gem_close(fd, dstbo2);
+ xe_exec_queue_destroy(fd, q);
+ xe_vm_destroy(fd, vm);
+}
+
igt_main
{
int xe_fd = -1;
bool pxp_supported = true;
+ uint32_t devid = 0;
igt_fixture {
xe_fd = drm_open_driver(DRIVER_XE);
@@ -195,6 +450,21 @@ igt_main
test_pxp_queue_creation(xe_fd, pxp_supported);
}
+ igt_subtest_group {
+ igt_fixture {
+ igt_require(pxp_supported);
+ devid = intel_get_drm_devid(xe_fd);
+ igt_assert(devid);
+ igt_require(igt_get_render_copyfunc(devid));
+ }
+
+ igt_describe("Verify protected render operations:");
+ igt_subtest("regular-src-to-pxp-dest-rendercopy")
+ test_render_regular_src_to_pxp_dest(xe_fd);
+ igt_subtest("pxp-src-to-pxp-dest-rendercopy")
+ test_render_pxp_protsrc_to_protdest(xe_fd);
+ }
+
igt_fixture {
close(xe_fd);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH i-g-t 6/7] tests/intel/xe_pxp: Termination tests
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
` (4 preceding siblings ...)
2024-12-12 0:18 ` [PATCH i-g-t 5/7] tests/intel/xe_pxp: Test PXP submissions Daniele Ceraolo Spurio
@ 2024-12-12 0:18 ` Daniele Ceraolo Spurio
2024-12-12 0:18 ` [PATCH i-g-t 7/7] tests/intel/xe_pxp: Test encrypted FBs Daniele Ceraolo Spurio
` (3 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-12-12 0:18 UTC (permalink / raw)
To: igt-dev; +Cc: Daniele Ceraolo Spurio
There are several events that can cause the PXP key to be invalidated
and trigger a PXP termination (suspend, PXP termination irq). After a
termination, we expect the key to be different and the raw encrypted
data to change for the same source data.
Additionally, all PXP objects are invalidated during a termination and
can no longer be used in submission or kept mapped to VMs; we therefore
need to test both the execution and bind ioctls to make sure they work
as expected after a termination.
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
---
lib/intel_batchbuffer.c | 8 +-
lib/intel_batchbuffer.h | 1 +
lib/xe/xe_ioctl.c | 12 +-
lib/xe/xe_ioctl.h | 2 +
tests/intel/xe_pxp.c | 431 +++++++++++++++++++++++++++++++++++++++-
5 files changed, 442 insertions(+), 12 deletions(-)
diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c
index 489e78782..a15859786 100644
--- a/lib/intel_batchbuffer.c
+++ b/lib/intel_batchbuffer.c
@@ -2416,9 +2416,9 @@ static void update_offsets(struct intel_bb *ibb,
#define LINELEN 76
-static int
-__xe_bb_exec(struct intel_bb *ibb, uint64_t flags, bool sync)
+int __xe_bb_exec(struct intel_bb *ibb, uint64_t flags, bool sync)
{
+ int ret = 0;
uint32_t engine = flags & (I915_EXEC_BSD_MASK | I915_EXEC_RING_MASK);
uint32_t engine_id;
struct drm_xe_sync syncs[2] = {
@@ -2495,12 +2495,12 @@ __xe_bb_exec(struct intel_bb *ibb, uint64_t flags, bool sync)
ibb->engine_syncobj = syncobj_create(ibb->fd, 0);
syncs[1].handle = ibb->engine_syncobj;
- xe_exec_sync(ibb->fd, engine_id, ibb->batch_offset, syncs, 2);
+ ret = xe_exec_sync_failable(ibb->fd, engine_id, ibb->batch_offset, syncs, 2);
if (sync)
intel_bb_sync(ibb);
- return 0;
+ return ret;
}
static int
diff --git a/lib/intel_batchbuffer.h b/lib/intel_batchbuffer.h
index 178aaa9d8..6a7e8df4a 100644
--- a/lib/intel_batchbuffer.h
+++ b/lib/intel_batchbuffer.h
@@ -508,6 +508,7 @@ void intel_bb_dump_cache(struct intel_bb *ibb);
void intel_bb_exec(struct intel_bb *ibb, uint32_t end_offset,
uint64_t flags, bool sync);
+int __xe_bb_exec(struct intel_bb *ibb, uint64_t flags, bool sync);
uint64_t intel_bb_get_object_offset(struct intel_bb *ibb, uint32_t handle);
bool intel_bb_object_offset_to_buf(struct intel_bb *ibb, struct intel_buf *buf);
diff --git a/lib/xe/xe_ioctl.c b/lib/xe/xe_ioctl.c
index 01ab7c758..cd7314eda 100644
--- a/lib/xe/xe_ioctl.c
+++ b/lib/xe/xe_ioctl.c
@@ -462,8 +462,8 @@ void xe_exec(int fd, struct drm_xe_exec *exec)
igt_assert_eq(__xe_exec(fd, exec), 0);
}
-void xe_exec_sync(int fd, uint32_t exec_queue, uint64_t addr,
- struct drm_xe_sync *sync, uint32_t num_syncs)
+int xe_exec_sync_failable(int fd, uint32_t exec_queue, uint64_t addr,
+ struct drm_xe_sync *sync, uint32_t num_syncs)
{
struct drm_xe_exec exec = {
.exec_queue_id = exec_queue,
@@ -473,7 +473,13 @@ void xe_exec_sync(int fd, uint32_t exec_queue, uint64_t addr,
.num_batch_buffer = 1,
};
- igt_assert_eq(__xe_exec(fd, &exec), 0);
+ return __xe_exec(fd, &exec);
+}
+
+void xe_exec_sync(int fd, uint32_t exec_queue, uint64_t addr,
+ struct drm_xe_sync *sync, uint32_t num_syncs)
+{
+ igt_assert_eq(xe_exec_sync_failable(fd, exec_queue, addr, sync, num_syncs), 0);
}
void xe_exec_wait(int fd, uint32_t exec_queue, uint64_t addr)
diff --git a/lib/xe/xe_ioctl.h b/lib/xe/xe_ioctl.h
index c8a2d81c5..9bdf73b2b 100644
--- a/lib/xe/xe_ioctl.h
+++ b/lib/xe/xe_ioctl.h
@@ -91,6 +91,8 @@ int __xe_exec(int fd, struct drm_xe_exec *exec);
void xe_exec(int fd, struct drm_xe_exec *exec);
void xe_exec_sync(int fd, uint32_t exec_queue, uint64_t addr,
struct drm_xe_sync *sync, uint32_t num_syncs);
+int xe_exec_sync_failable(int fd, uint32_t exec_queue, uint64_t addr,
+ struct drm_xe_sync *sync, uint32_t num_syncs);
void xe_exec_wait(int fd, uint32_t exec_queue, uint64_t addr);
int __xe_wait_ufence(int fd, uint64_t *addr, uint64_t value,
uint32_t exec_queue, int64_t *timeout);
diff --git a/tests/intel/xe_pxp.c b/tests/intel/xe_pxp.c
index 3d625af8f..7e5b45263 100644
--- a/tests/intel/xe_pxp.c
+++ b/tests/intel/xe_pxp.c
@@ -4,6 +4,7 @@
*/
#include "igt.h"
+#include "igt_syncobj.h"
#include "intel_batchbuffer.h"
#include "intel_bufops.h"
#include "intel_mocs.h"
@@ -81,6 +82,15 @@ static uint32_t create_pxp_rcs_queue(int fd, uint32_t vm)
return q;
}
+static uint32_t create_regular_rcs_queue(int fd, uint32_t vm)
+{
+ struct drm_xe_engine_class_instance inst = {
+ .engine_class = DRM_XE_ENGINE_CLASS_RENDER,
+ };
+
+ return xe_exec_queue_create(fd, vm, &inst, 0);
+}
+
static int query_pxp_status(int fd)
{
struct drm_xe_query_pxp_status *pxp_query;
@@ -337,15 +347,25 @@ static void pxp_rendercopy(int fd, uint32_t q, uint32_t vm, uint32_t copy_size,
buf_ops_destroy(bops);
}
-/**
- * SUBTEST: regular-src-to-pxp-dest-rendercopy
- * Description: copy from a regular BO to a PXP one and verify the encryption
- */
-static void test_render_regular_src_to_pxp_dest(int fd)
+static void copy_bo_cpu(int fd, uint32_t bo, uint32_t *dst, uint32_t size)
+{
+ uint32_t *src_ptr;
+
+ src_ptr = xe_bo_mmap_ext(fd, bo, size, PROT_READ);
+
+ memcpy(dst, src_ptr, size);
+
+ igt_assert_eq(munmap(src_ptr, size), 0);
+}
+
+static void __test_render_regular_src_to_pxp_dest(int fd, uint32_t *outpixels, int outsize)
{
uint32_t vm, srcbo, dstbo;
uint32_t q;
+ if (outpixels)
+ igt_assert_lte(TSTSURF_SIZE, outsize);
+
vm = xe_vm_create(fd, 0, 0);
/*
@@ -361,12 +381,24 @@ static void test_render_regular_src_to_pxp_dest(int fd)
check_bo_color(fd, dstbo, TSTSURF_SIZE, TSTSURF_FILLCOLOR1, false);
+ if (outpixels)
+ copy_bo_cpu(fd, dstbo, outpixels, TSTSURF_SIZE);
+
gem_close(fd, srcbo);
gem_close(fd, dstbo);
xe_exec_queue_destroy(fd, q);
xe_vm_destroy(fd, vm);
}
+/**
+ * SUBTEST: regular-src-to-pxp-dest-rendercopy
+ * Description: copy from a regular BO to a PXP one and verify the encryption
+ */
+static void test_render_regular_src_to_pxp_dest(int fd)
+{
+ __test_render_regular_src_to_pxp_dest(fd, NULL, 0);
+}
+
static int bocmp(int fd, uint32_t bo1, uint32_t bo2, uint32_t size)
{
uint32_t *ptr1, *ptr2;
@@ -428,6 +460,379 @@ static void test_render_pxp_protsrc_to_protdest(int fd)
xe_vm_destroy(fd, vm);
}
+#define PS_OP_TAG_LOW 0x1234fed0
+#define PS_OP_TAG_HI 0x5678cbaf
+static void emit_pipectrl(struct intel_bb *ibb, struct intel_buf *fenceb)
+{
+ uint32_t pipe_ctl_flags = 0;
+
+ intel_bb_out(ibb, GFX_OP_PIPE_CONTROL(2));
+ intel_bb_out(ibb, pipe_ctl_flags);
+
+ pipe_ctl_flags = (PIPE_CONTROL_FLUSH_ENABLE |
+ PIPE_CONTROL_CS_STALL |
+ PIPE_CONTROL_QW_WRITE);
+ intel_bb_out(ibb, GFX_OP_PIPE_CONTROL(6));
+ intel_bb_out(ibb, pipe_ctl_flags);
+
+ intel_bb_emit_reloc(ibb, fenceb->handle, 0, I915_GEM_DOMAIN_COMMAND, 0,
+ fenceb->addr.offset);
+ intel_bb_out(ibb, PS_OP_TAG_LOW);
+ intel_bb_out(ibb, PS_OP_TAG_HI);
+ intel_bb_out(ibb, MI_NOOP);
+ intel_bb_out(ibb, MI_NOOP);
+}
+
+static void assert_pipectl_storedw_done(int fd, uint32_t bo)
+{
+ uint32_t *ptr;
+
+ ptr = xe_bo_mmap_ext(fd, bo, 4096, PROT_READ|PROT_WRITE);
+ igt_assert_eq(ptr[0], PS_OP_TAG_LOW);
+ igt_assert_eq(ptr[1], PS_OP_TAG_HI);
+
+ igt_assert(munmap(ptr, 4096) == 0);
+}
+
+static int submit_flush_store_dw(int fd, uint32_t q, bool q_is_pxp, uint32_t vm,
+ uint32_t dst, bool dst_is_pxp)
+{
+ struct intel_buf *dstbuf;
+ struct buf_ops *bops;
+ struct intel_bb *ibb;
+ int ret = 0;
+
+ bops = buf_ops_create(fd);
+ igt_assert(bops);
+
+ ibb = intel_bb_create_with_context(fd, q, vm, NULL, 4096);
+ igt_assert(ibb);
+ intel_bb_set_pxp(ibb, q_is_pxp, DISPLAY_APPTYPE, DRM_XE_PXP_HWDRM_DEFAULT_SESSION);
+
+ dstbuf = buf_create(fd, bops, dst, 256, 4, 32, 4096);
+ intel_buf_set_pxp(dstbuf, dst_is_pxp);
+
+ intel_bb_ptr_set(ibb, 0);
+ intel_bb_add_intel_buf(ibb, dstbuf, true);
+ emit_pipectrl(ibb, dstbuf);
+ intel_bb_emit_bbe(ibb);
+ ret = __xe_bb_exec(ibb, 0, false);
+ if (ret == 0)
+ ret = intel_bb_sync(ibb);
+ if (ret == 0)
+ assert_pipectl_storedw_done(fd, dst);
+
+ intel_buf_destroy(dstbuf);
+ intel_bb_destroy(ibb);
+ buf_ops_destroy(bops);
+
+ return ret;
+}
+
+static void trigger_pxp_debugfs_forced_teardown(int xe_fd)
+{
+ char str[32];
+ int ret;
+ int fd;
+
+ fd = igt_debugfs_dir(xe_fd);
+ igt_assert(fd >= 0);
+ ret = igt_debugfs_simple_read(fd, "pxp/terminate", str, 32);
+ igt_assert_f(ret >= 0, "Can't open pxp termination debugfs\n");
+
+ /* give the kernel time to handle the termination */
+ sleep(1);
+}
+
+enum termination_type {
+ PXP_TERMINATION_IRQ,
+ PXP_TERMINATION_RPM,
+ PXP_TERMINATION_SUSPEND
+};
+
+static void trigger_termination(int fd, enum termination_type type)
+{
+ switch (type) {
+ case PXP_TERMINATION_IRQ:
+ trigger_pxp_debugfs_forced_teardown(fd);
+ break;
+ case PXP_TERMINATION_RPM:
+ igt_require(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSPENDED));
+ break;
+ case PXP_TERMINATION_SUSPEND:
+ igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_DEVICES);
+ break;
+ }
+}
+
+/**
+ * SUBTEST: pxp-termination-key-update-post-termination-irq
+ * Description: Verify key is changed after a termination irq
+ */
+
+/**
+ * SUBTEST: pxp-termination-key-update-post-suspend
+ * Description: Verify key is changed after a suspend/resume cycle
+ */
+
+/**
+ * SUBTEST: pxp-termination-key-update-post-rpm
+ * Description: Verify key is changed after a runtime suspend/resume cycle
+ */
+
+static void test_pxp_teardown_keychange(int fd, enum termination_type type)
+{
+ uint32_t* encrypted_data_before;
+ uint32_t* encrypted_data_after;
+ int matched_after_keychange = 0, loop = 0;
+
+ encrypted_data_before = malloc(TSTSURF_SIZE);
+ encrypted_data_after = malloc(TSTSURF_SIZE);
+ igt_assert(encrypted_data_before && encrypted_data_after);
+
+ __test_render_regular_src_to_pxp_dest(fd, encrypted_data_before, TSTSURF_SIZE);
+
+ trigger_termination(fd, type);
+
+ __test_render_regular_src_to_pxp_dest(fd, encrypted_data_after, TSTSURF_SIZE);
+
+ while (loop < (TSTSURF_SIZE/TSTSURF_BYTESPP)) {
+ if (encrypted_data_before[loop] == encrypted_data_after[loop])
+ ++matched_after_keychange;
+ ++loop;
+ }
+ igt_assert_eq(matched_after_keychange, 0);
+
+ free(encrypted_data_before);
+ free(encrypted_data_after);
+}
+
+/**
+ * SUBTEST: pxp-stale-bo-bind-post-termination-irq
+ * Description: verify that VM bind on a stale BO (due to a termination irq) is rejected.
+ */
+
+/**
+ * SUBTEST: pxp-stale-bo-bind-post-suspend
+ * Description: verify that VM bind on a stale BO (due to a suspend/resume cycle)
+ * is rejected.
+ */
+
+/**
+ * SUBTEST: pxp-stale-bo-bind-post-rpm
+ * Description: verify that VM bind on a stale BO (due to a runtime suspend/resume
+ * cycle) is rejected.
+ */
+
+static void __test_pxp_stale_bo_bind(int fd, enum termination_type type, bool pxp)
+{
+ uint32_t vm, q;
+ uint32_t dstbo;
+ uint32_t flags = pxp ? DRM_XE_VM_BIND_FLAG_CHECK_PXP : 0;
+ int ret;
+
+ vm = xe_vm_create(fd, 0, 0);
+ q = create_pxp_rcs_queue(fd, vm);
+
+ dstbo = pxp_bo_create(fd, vm, 4096, DRM_XE_PXP_TYPE_HWDRM);
+
+ igt_assert_eq(submit_flush_store_dw(fd, q, true, vm, dstbo, true), 0);
+
+ /*
+ * RPM cleanup is automatic as soon as we release the reference, so we
+ * neet to make sure not to release it before other types of termination
+ * have occurred.
+ */
+ if (type == PXP_TERMINATION_RPM) {
+ xe_exec_queue_destroy(fd, q);
+ trigger_termination(fd, type);
+ } else {
+ trigger_termination(fd, type);
+ xe_exec_queue_destroy(fd, q);
+ }
+
+ /* trying to map a stale BO is an illegal op */
+ ret = __xe_vm_bind(fd, vm, 0, dstbo, 0, 0, 4096, DRM_XE_VM_BIND_OP_MAP,
+ flags, NULL, 0, 0, DEFAULT_PAT_INDEX, 0);
+ igt_assert_eq(ret, pxp ? -ENOEXEC : 0);
+
+ gem_close(fd, dstbo);
+ xe_vm_destroy(fd, vm);
+}
+
+static void test_pxp_stale_bo_bind(int fd, enum termination_type type)
+{
+ __test_pxp_stale_bo_bind(fd, type, true);
+}
+
+static void pxp_vm_bind_sync(int fd, uint32_t vm, uint32_t bo, uint64_t addr,
+ uint64_t size, uint32_t op)
+{
+ struct drm_xe_sync sync = {
+ .type = DRM_XE_SYNC_TYPE_SYNCOBJ,
+ .flags = DRM_XE_SYNC_FLAG_SIGNAL,
+ .handle = syncobj_create(fd, 0),
+ };
+
+ __xe_vm_bind_assert(fd, vm, 0, bo, 0, addr, size, op,
+ DRM_XE_VM_BIND_FLAG_CHECK_PXP, &sync, 1, 0, 0);
+
+ igt_assert(syncobj_wait(fd, &sync.handle, 1, INT64_MAX, 0, NULL));
+ syncobj_destroy(fd, sync.handle);
+}
+
+static uint32_t create_and_bind_simple_pxp_batch(int fd, uint32_t vm,
+ uint32_t size, uint64_t addr)
+{
+ uint32_t bo;
+ uint32_t *map;
+ bo = pxp_bo_create(fd, vm, 4096, DRM_XE_PXP_TYPE_HWDRM);
+ pxp_vm_bind_sync(fd, vm, bo, addr, size, DRM_XE_VM_BIND_OP_MAP);
+
+ map = xe_bo_map(fd, bo, 4096);
+ *map = MI_BATCH_BUFFER_END;
+ munmap(map, 4096);
+
+ return bo;
+}
+
+/**
+ * SUBTEST: pxp-stale-bo-exec-post-termination-irq
+ * Description: verify that a submission using VM with a mapped stale BO (due to
+ * a termination irq) is rejected.
+ */
+
+/**
+ * SUBTEST: pxp-stale-bo-exec-post-suspend
+ * Description: verify that a submission using VM with a mapped stale BO (due to
+ * a suspend/resume cycle) is rejected.
+ */
+
+/**
+ * SUBTEST: pxp-stale-bo-exec-post-rpm
+ * Description: verify that a submission using VM with a mapped stale BO (due to
+ * a runtime suspend/resume cycle) is rejected.
+ */
+
+static void __test_pxp_stale_bo_exec(int fd, enum termination_type type, bool pxp)
+{
+ uint32_t vm, q;
+ uint32_t bo;
+ int expected;
+
+ vm = xe_vm_create(fd, 0, 0);
+
+ q = create_pxp_rcs_queue(fd, vm); /* start a PXP session */
+ bo = create_and_bind_simple_pxp_batch(fd, vm, 4096, 0);
+
+ /*
+ * RPM cleanup is automatic as soon as we release the reference, so we
+ * neet to make sure not to release it before other types of termination
+ * have occurred.
+ */
+ if (type == PXP_TERMINATION_RPM) {
+ xe_exec_queue_destroy(fd, q);
+ trigger_termination(fd, type);
+ } else {
+ trigger_termination(fd, type);
+ xe_exec_queue_destroy(fd, q);
+ }
+
+ /* create a clean queue using the VM with the invalid object mapped in */
+ if (pxp) {
+ q = create_pxp_rcs_queue(fd, vm);
+ expected = -ENOEXEC;
+ } else {
+ q = create_regular_rcs_queue(fd, vm);
+ expected = 0;
+ }
+
+ igt_assert_eq(xe_exec_sync_failable(fd, q, 0, NULL, 0), expected);
+
+ /* now make sure we can unmap the stale BO and have a clean exec after */
+ if (pxp) {
+ pxp_vm_bind_sync(fd, vm, 0, 0, 4096, DRM_XE_VM_BIND_OP_UNMAP);
+ gem_close(fd, bo);
+
+ bo = create_and_bind_simple_pxp_batch(fd, vm, 4096, 0);
+ igt_assert_eq(xe_exec_sync_failable(fd, q, 0, NULL, 0), 0);
+ }
+
+ xe_exec_queue_destroy(fd, q);
+ gem_close(fd, bo);
+ xe_vm_destroy(fd, vm);
+}
+
+static void test_pxp_stale_bo_exec(int fd, enum termination_type type)
+{
+ __test_pxp_stale_bo_exec(fd, type, true);
+}
+
+/**
+ * SUBTEST: pxp-stale-queue-post-termination-irq
+ * Description: verify that submissions on a stale queue (due to a termination
+ * irq) are cancelled
+ */
+
+/**
+ * SUBTEST: pxp-stale-queue-post-suspend
+ * Description: verify that submissions on a stale queue (due to a suspend/resume
+ * cycle) are cancelled
+ */
+
+static void test_pxp_stale_queue_execution(int fd, enum termination_type type)
+{
+ uint32_t vm, q;
+ uint32_t dstbo;
+
+ vm = xe_vm_create(fd, 0, 0);
+ q = create_pxp_rcs_queue(fd, vm);
+
+ dstbo = regular_bo_create_and_fill(fd, vm, 4096, 0);
+
+ igt_assert_eq(submit_flush_store_dw(fd, q, true, vm, dstbo, false), 0);
+
+ trigger_termination(fd, type);
+
+ /* when we execute an invalid queue we expect the job to be canceled */
+ igt_assert_eq(submit_flush_store_dw(fd, q, true, vm, dstbo, false), -ECANCELED);
+
+ gem_close(fd, dstbo);
+ xe_exec_queue_destroy(fd, q);
+ xe_vm_destroy(fd, vm);
+}
+
+/**
+ * SUBTEST: pxp-optout
+ * Description: verify that submssions with stale objects/queues are not blocked
+ * if the user does not opt-in to the PXP checks.
+ */
+static void test_pxp_optout(int fd)
+{
+ __test_pxp_stale_bo_exec(fd, PXP_TERMINATION_IRQ, false);
+ __test_pxp_stale_bo_bind(fd, PXP_TERMINATION_IRQ, false);
+}
+
+static void termination_tests(int fd, enum termination_type type, const char *tag)
+{
+ if (type == PXP_TERMINATION_RPM)
+ igt_setup_runtime_pm(fd);
+
+ igt_subtest_f("pxp-termination-key-update-post-%s", tag)
+ test_pxp_teardown_keychange(fd, type);
+ igt_subtest_f("pxp-stale-bo-bind-post-%s", tag)
+ test_pxp_stale_bo_bind(fd, type);
+ igt_subtest_f("pxp-stale-bo-exec-post-%s", tag)
+ test_pxp_stale_bo_exec(fd, type);
+
+ /* An active PXP queue holds an RPM ref, so we can't test RPM with it */
+ if (type != PXP_TERMINATION_RPM)
+ igt_subtest_f("pxp-stale-queue-post-%s", tag)
+ test_pxp_stale_queue_execution(fd, type);
+ else
+ igt_restore_runtime_pm();
+}
+
igt_main
{
int xe_fd = -1;
@@ -465,6 +870,22 @@ igt_main
test_render_pxp_protsrc_to_protdest(xe_fd);
}
+ igt_subtest_group {
+ igt_fixture {
+ igt_require(pxp_supported);
+ devid = intel_get_drm_devid(xe_fd);
+ igt_assert(devid);
+ }
+ igt_describe("Verify teardown management");
+
+ termination_tests(xe_fd, PXP_TERMINATION_IRQ, "termination-irq");
+ termination_tests(xe_fd, PXP_TERMINATION_SUSPEND, "suspend");
+ termination_tests(xe_fd, PXP_TERMINATION_RPM, "rpm");
+
+ igt_subtest("pxp-optout")
+ test_pxp_optout(xe_fd);
+ }
+
igt_fixture {
close(xe_fd);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* [PATCH i-g-t 7/7] tests/intel/xe_pxp: Test encrypted FBs
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
` (5 preceding siblings ...)
2024-12-12 0:18 ` [PATCH i-g-t 6/7] tests/intel/xe_pxp: Termination tests Daniele Ceraolo Spurio
@ 2024-12-12 0:18 ` Daniele Ceraolo Spurio
2024-12-12 1:11 ` ✗ i915.CI.BAT: failure for Xe: Add tests for PXP Patchwork
` (2 subsequent siblings)
9 siblings, 0 replies; 17+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-12-12 0:18 UTC (permalink / raw)
To: igt-dev; +Cc: Daniele Ceraolo Spurio
PXP allows a user to send an encrypted BO to the display HW without
having to decode it. The driver needs however to tell the HW that the
BO is encrypted, otherwise it won't be displayed correctly. Furthermore,
if PXP is terminated before the FB is displayed, we expect to see a black
screen instead of what's in the BO.
We can test both these flows by by displaying the expected image from a
non-encrypted FB and and making sure that the CRC match when we display
the encrypted FB.
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
---
tests/intel/xe_pxp.c | 266 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 259 insertions(+), 7 deletions(-)
diff --git a/tests/intel/xe_pxp.c b/tests/intel/xe_pxp.c
index 7e5b45263..926582ab1 100644
--- a/tests/intel/xe_pxp.c
+++ b/tests/intel/xe_pxp.c
@@ -25,8 +25,8 @@ IGT_TEST_DESCRIPTION("Test PXP that manages protected content through arbitrated
* Test category: functionality test
*/
-static int __pxp_bo_create(int fd, uint32_t vm, uint64_t size,
- uint32_t session_type, uint32_t *handle)
+static int __pxp_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t placement,
+ uint32_t session_type, uint32_t flags, uint32_t *handle)
{
struct drm_xe_ext_set_property ext = {
.base.next_extension = 0,
@@ -36,7 +36,7 @@ static int __pxp_bo_create(int fd, uint32_t vm, uint64_t size,
};
int ret = 0;
- if (__xe_bo_create(fd, vm, size, system_memory(fd), 0, &ext, handle)) {
+ if (__xe_bo_create(fd, vm, size, placement, flags, &ext, handle)) {
ret = -errno;
errno = 0;
}
@@ -48,7 +48,19 @@ static uint32_t pxp_bo_create(int fd, uint32_t vm, uint64_t size, uint32_t type)
{
uint32_t handle;
- igt_assert_eq(__pxp_bo_create(fd, vm, size, type, &handle), 0);
+ igt_assert_eq(__pxp_bo_create(fd, vm, size, system_memory(fd), type, 0, &handle), 0);
+
+ return handle;
+}
+
+static uint32_t pxp_bo_create_display(int fd, uint32_t vm, uint64_t size, uint32_t type)
+{
+ uint32_t handle;
+
+ igt_assert_eq(__pxp_bo_create(fd, vm, size, vram_if_possible(fd, 0), type,
+ DRM_XE_GEM_CREATE_FLAG_NEEDS_VISIBLE_VRAM |
+ DRM_XE_GEM_CREATE_FLAG_SCANOUT,
+ &handle), 0);
return handle;
}
@@ -163,18 +175,18 @@ static void test_pxp_bo_alloc(int fd, bool pxp_supported)
int ret;
/* BO creation with DRM_XE_PXP_TYPE_NONE must always succeed */
- ret = __pxp_bo_create(fd, 0, 4096, DRM_XE_PXP_TYPE_NONE, &bo);
+ ret = __pxp_bo_create(fd, 0, 4096, system_memory(fd), DRM_XE_PXP_TYPE_NONE, 0, &bo);
igt_assert_eq(ret, 0);
gem_close(fd, bo);
/* BO creation with DRM_XE_PXP_TYPE_HWDRM must only succeed if PXP is supported */
- ret = __pxp_bo_create(fd, 0, 4096, DRM_XE_PXP_TYPE_HWDRM, &bo);
+ ret = __pxp_bo_create(fd, 0, 4096, system_memory(fd), DRM_XE_PXP_TYPE_HWDRM, 0, &bo);
igt_assert_eq(ret, pxp_supported ? 0 : -ENODEV);
if (!ret)
gem_close(fd, bo);
/* BO creation with an invalid type must always fail */
- ret = __pxp_bo_create(fd, 0, 4096, 0xFF, &bo);
+ ret = __pxp_bo_create(fd, 0, 4096, system_memory(fd), 0xFF, 0, &bo);
igt_assert_eq(ret, -EINVAL);
}
@@ -833,6 +845,226 @@ static void termination_tests(int fd, enum termination_type type, const char *ta
igt_restore_runtime_pm();
}
+static void setup_fb(int fd, igt_fb_t *pxp_fb, int width, int height, uint32_t size)
+{
+ /* create an FB using a PXP BO */
+ igt_init_fb(pxp_fb, fd, width, height,
+ DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_NONE,
+ IGT_COLOR_YCBCR_BT709, IGT_COLOR_YCBCR_LIMITED_RANGE);
+
+ igt_calc_fb_size(pxp_fb);
+
+ pxp_fb->gem_handle = pxp_bo_create_display(fd, 0, size, DRM_XE_PXP_TYPE_HWDRM);
+
+ do_or_die(__kms_addfb(pxp_fb->fd, pxp_fb->gem_handle,
+ pxp_fb->width, pxp_fb->height,
+ pxp_fb->drm_format, pxp_fb->modifier,
+ pxp_fb->strides, pxp_fb->offsets, pxp_fb->num_planes, DRM_MODE_FB_MODIFIERS,
+ &pxp_fb->fb_id));
+}
+
+static void setup_protected_fb_from_ref(int fd, igt_fb_t *ref_fb, igt_fb_t *pxp_fb,
+ uint32_t q, uint32_t vm)
+{
+ struct intel_buf *srcbuf, *dstbuf;
+ struct buf_ops *bops;
+ struct intel_bb *ibb;
+ igt_render_copyfunc_t render_copy;
+
+ render_copy = igt_get_render_copyfunc(intel_get_drm_devid(fd));
+ igt_assert(render_copy);
+
+ bops = buf_ops_create(fd);
+ igt_assert(bops);
+
+ /* create an FB using a PXP BO */
+ setup_fb(fd, pxp_fb, ref_fb->width, ref_fb->height, ref_fb->size);
+
+ /* copy the contents of ref_fb into the pxp BO */
+ srcbuf = igt_fb_create_intel_buf(fd, bops, ref_fb, "ref_fb");
+ dstbuf = igt_fb_create_intel_buf(fd, bops, pxp_fb, "pxp_fb");
+ intel_buf_set_pxp(dstbuf, true);
+
+ ibb = intel_bb_create_with_context(fd, q, vm, NULL, 4096);
+ igt_assert(ibb);
+ intel_bb_set_pxp(ibb, true, DISPLAY_APPTYPE, DRM_XE_PXP_HWDRM_DEFAULT_SESSION);
+
+ render_copy(ibb, srcbuf, 0, 0, pxp_fb->width, pxp_fb->height, dstbuf, 0, 0);
+ intel_bb_sync(ibb);
+
+ /* make sure the contents of the BOs don't match */
+ igt_assert_neq(bocmp(fd, pxp_fb->gem_handle, ref_fb->gem_handle, pxp_fb->size), 0);
+
+ intel_bb_destroy(ibb);
+ intel_buf_destroy(srcbuf);
+ intel_buf_destroy(dstbuf);
+ buf_ops_destroy(bops);
+}
+
+static void compare_crcs(int fd, igt_display_t *display, igt_fb_t *ref_fb, igt_fb_t *pxp_fb)
+{
+ igt_output_t *output;
+ drmModeModeInfo *mode;
+ igt_plane_t *plane;
+ igt_pipe_t *pipe;
+ igt_pipe_crc_t *pipe_crc;
+ igt_crc_t ref_crc, new_crc;
+
+ for_each_connected_output(display, output) {
+ mode = igt_output_get_mode(output);
+ pipe = &display->pipes[output->pending_pipe];
+ pipe_crc = igt_pipe_crc_new(fd, pipe->pipe,
+ IGT_PIPE_CRC_SOURCE_AUTO);
+ plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+ igt_require(igt_pipe_connector_valid(pipe->pipe, output));
+ igt_output_set_pipe(output, pipe->pipe);
+
+ igt_plane_set_fb(plane, ref_fb);
+ igt_fb_set_size(ref_fb, plane, mode->hdisplay, mode->vdisplay);
+ igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+
+ igt_display_commit2(display, COMMIT_ATOMIC);
+ igt_pipe_crc_collect_crc(pipe_crc, &ref_crc);
+
+ igt_plane_set_fb(plane, pxp_fb);
+ igt_fb_set_size(pxp_fb, plane, mode->hdisplay, mode->vdisplay);
+ igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+
+ igt_display_commit2(display, COMMIT_ATOMIC);
+ igt_pipe_crc_collect_crc(pipe_crc, &new_crc);
+ igt_assert_crc_equal(&ref_crc, &new_crc);
+
+ /*
+ * Testing with one pipe-output combination is sufficient.
+ * So break the loop.
+ */
+ break;
+ }
+}
+
+/**
+ * SUBTEST: display-pxp-fb
+ * Description: Test that an encrypted fb is displayed correctly by comparing
+ * its CRCs with the ones generated by a non-encrypted FB
+ * containing the same image
+ */
+
+static void test_display_pxp_fb(int fd, igt_display_t *display)
+{
+ igt_output_t *output;
+ drmModeModeInfo *mode;
+ igt_fb_t ref_fb, pxp_fb;
+ igt_plane_t *plane;
+ igt_pipe_t *pipe;
+ int width = 0, height = 0, i = 0;
+ uint32_t q;
+ uint32_t vm;
+
+ vm = xe_vm_create(fd, 0, 0);
+ q = create_pxp_rcs_queue(fd, vm); /* start the PXP session */
+
+ for_each_connected_output(display, output) {
+ mode = igt_output_get_mode(output);
+
+ width = max_t(int, width, mode->hdisplay);
+ height = max_t(int, height, mode->vdisplay);
+ }
+
+ igt_create_color_fb(fd, width, height, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
+ 0, 1, 0, &ref_fb);
+
+ /* Do a modeset on all outputs */
+ for_each_connected_output(display, output) {
+ mode = igt_output_get_mode(output);
+ pipe = &display->pipes[i];
+ plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+ igt_require(igt_pipe_connector_valid(i, output));
+ igt_output_set_pipe(output, i);
+
+ igt_plane_set_fb(plane, &ref_fb);
+ igt_fb_set_size(&ref_fb, plane, mode->hdisplay, mode->vdisplay);
+ igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+
+ igt_display_commit2(display, COMMIT_ATOMIC);
+ i++;
+ }
+
+ /* Create an encrypted FB with the same contents as ref_fb */
+ setup_protected_fb_from_ref(fd, &ref_fb, &pxp_fb, q, vm);
+
+ /* Flip both FBs and make sure the CRCs match */
+ compare_crcs(fd, display, &ref_fb, &pxp_fb);
+
+ igt_remove_fb(fd, &ref_fb);
+ igt_remove_fb(fd, &pxp_fb);
+ xe_exec_queue_destroy(fd, q);
+ xe_vm_destroy(fd, vm);
+}
+
+/**
+ * SUBTEST: display-black-pxp-fb
+ * Description: Test that an invalid encrypted fb is correctly converted to a
+ * black screen by comparing its CRCs with the ones generated by a
+ * non-encrypted FB filled with black
+ */
+
+static void test_display_black_pxp_fb(int fd, igt_display_t *display)
+{
+ igt_output_t *output;
+ drmModeModeInfo *mode;
+ igt_fb_t ref_fb, pxp_fb;
+ igt_plane_t *plane;
+ igt_pipe_t *pipe;
+ int width = 0, height = 0, i = 0;
+ uint32_t q;
+ uint32_t vm;
+
+ vm = xe_vm_create(fd, 0, 0);
+ q = create_pxp_rcs_queue(fd, vm); /* start the PXP session */
+
+ for_each_connected_output(display, output) {
+ mode = igt_output_get_mode(output);
+
+ width = max_t(int, width, mode->hdisplay);
+ height = max_t(int, height, mode->vdisplay);
+ }
+
+ /* create a black fb */
+ igt_create_color_fb(fd, width, height, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
+ 0, 0, 0, &ref_fb);
+
+ /* Do a modeset on all outputs */
+ for_each_connected_output(display, output) {
+ mode = igt_output_get_mode(output);
+ pipe = &display->pipes[i];
+ plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+ igt_require(igt_pipe_connector_valid(i, output));
+ igt_output_set_pipe(output, i);
+
+ igt_plane_set_fb(plane, &ref_fb);
+ igt_fb_set_size(&ref_fb, plane, mode->hdisplay, mode->vdisplay);
+ igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+
+ igt_display_commit2(display, COMMIT_ATOMIC);
+ i++;
+ }
+
+ /* Create an fb filled with a non-black color */
+ setup_fb(fd, &pxp_fb, ref_fb.width, ref_fb.height, ref_fb.size);
+ fill_bo_content(fd, pxp_fb.gem_handle, pxp_fb.size, TSTSURF_INITCOLOR1);
+
+ /* invalidate the BO */
+ trigger_termination(fd, PXP_TERMINATION_IRQ);
+
+ /* Flip both FBs and make sure the CRCs match */
+ compare_crcs(fd, display, &ref_fb, &pxp_fb);
+
+ igt_remove_fb(fd, &ref_fb);
+ igt_remove_fb(fd, &pxp_fb);
+ xe_exec_queue_destroy(fd, q);
+ xe_vm_destroy(fd, vm);
+}
+
igt_main
{
int xe_fd = -1;
@@ -886,6 +1118,26 @@ igt_main
test_pxp_optout(xe_fd);
}
+ igt_subtest_group {
+ igt_display_t display;
+
+ igt_fixture {
+ igt_require(pxp_supported);
+ devid = intel_get_drm_devid(xe_fd);
+ igt_assert(devid);
+ igt_require(igt_get_render_copyfunc(devid));
+
+ igt_require_pipe_crc(xe_fd);
+ igt_display_require(&display, xe_fd);
+ }
+ igt_describe("Test the flip of PXP objects to display");
+ igt_subtest("display-pxp-fb")
+ test_display_pxp_fb(xe_fd, &display);
+
+ igt_subtest("display-black-pxp-fb")
+ test_display_black_pxp_fb(xe_fd, &display);
+ }
+
igt_fixture {
close(xe_fd);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 17+ messages in thread* ✗ i915.CI.BAT: failure for Xe: Add tests for PXP
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
` (6 preceding siblings ...)
2024-12-12 0:18 ` [PATCH i-g-t 7/7] tests/intel/xe_pxp: Test encrypted FBs Daniele Ceraolo Spurio
@ 2024-12-12 1:11 ` Patchwork
2024-12-12 2:30 ` ✓ Xe.CI.BAT: success " Patchwork
2024-12-12 8:04 ` ✗ Xe.CI.Full: failure " Patchwork
9 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2024-12-12 1:11 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: igt-dev
== Series Details ==
Series: Xe: Add tests for PXP
URL : https://patchwork.freedesktop.org/series/142450/
State : failure
== Summary ==
CI Bug Log - changes from IGT_8150 -> IGTPW_12301
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with IGTPW_12301 absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in IGTPW_12301, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/index.html
Participating hosts (45 -> 44)
------------------------------
Missing (1): fi-snb-2520m
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in IGTPW_12301:
### IGT changes ###
#### Possible regressions ####
* igt@kms_flip@basic-flip-vs-dpms@b-dp2:
- fi-cfl-8109u: [PASS][1] -> [DMESG-WARN][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8150/fi-cfl-8109u/igt@kms_flip@basic-flip-vs-dpms@b-dp2.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/fi-cfl-8109u/igt@kms_flip@basic-flip-vs-dpms@b-dp2.html
* igt@kms_pipe_crc_basic@compare-crc-sanitycheck-xr24:
- fi-kbl-7567u: [PASS][3] -> [DMESG-WARN][4] +2 other tests dmesg-warn
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8150/fi-kbl-7567u/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-xr24.html
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/fi-kbl-7567u/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-xr24.html
Known issues
------------
Here are the changes found in IGTPW_12301 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@i915_pm_rpm@module-reload:
- bat-rpls-4: [PASS][5] -> [FAIL][6] ([i915#12903])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8150/bat-rpls-4/igt@i915_pm_rpm@module-reload.html
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/bat-rpls-4/igt@i915_pm_rpm@module-reload.html
* igt@i915_selftest@live@gt_pm:
- bat-twl-2: NOTRUN -> [ABORT][7] ([i915#12919]) +1 other test abort
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/bat-twl-2/igt@i915_selftest@live@gt_pm.html
* igt@i915_selftest@live@workarounds:
- bat-arlh-3: [PASS][8] -> [ABORT][9] ([i915#12061]) +1 other test abort
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8150/bat-arlh-3/igt@i915_selftest@live@workarounds.html
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/bat-arlh-3/igt@i915_selftest@live@workarounds.html
* igt@kms_flip@basic-flip-vs-dpms@c-dp2:
- fi-cfl-8109u: [PASS][10] -> [DMESG-WARN][11] ([i915#12914]) +1 other test dmesg-warn
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8150/fi-cfl-8109u/igt@kms_flip@basic-flip-vs-dpms@c-dp2.html
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/fi-cfl-8109u/igt@kms_flip@basic-flip-vs-dpms@c-dp2.html
* igt@kms_flip@basic-plain-flip:
- fi-kbl-7567u: [PASS][12] -> [DMESG-WARN][13] ([i915#12920])
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8150/fi-kbl-7567u/igt@kms_flip@basic-plain-flip.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/fi-kbl-7567u/igt@kms_flip@basic-plain-flip.html
#### Possible fixes ####
* igt@i915_pm_rpm@module-reload:
- bat-dg1-7: [FAIL][14] ([i915#12903]) -> [PASS][15]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8150/bat-dg1-7/igt@i915_pm_rpm@module-reload.html
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/bat-dg1-7/igt@i915_pm_rpm@module-reload.html
* igt@i915_selftest@live:
- bat-twl-1: [ABORT][16] ([i915#12919] / [i915#9413]) -> [PASS][17] +1 other test pass
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8150/bat-twl-1/igt@i915_selftest@live.html
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/bat-twl-1/igt@i915_selftest@live.html
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12903]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12903
[i915#12914]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12914
[i915#12919]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12919
[i915#12920]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12920
[i915#9413]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9413
Build changes
-------------
* CI: CI-20190529 -> None
* IGT: IGT_8150 -> IGTPW_12301
CI-20190529: 20190529
CI_DRM_15827: 9b5dff950301bf05d2e76745cacb457a0a82b50f @ git://anongit.freedesktop.org/gfx-ci/linux
IGTPW_12301: 7f64f6fea842f848e5f7528733280f5853e2f49a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8150: 7812065f4aebab1629b570bd78ef71e09480b359 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_12301/index.html
^ permalink raw reply [flat|nested] 17+ messages in thread* ✓ Xe.CI.BAT: success for Xe: Add tests for PXP
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
` (7 preceding siblings ...)
2024-12-12 1:11 ` ✗ i915.CI.BAT: failure for Xe: Add tests for PXP Patchwork
@ 2024-12-12 2:30 ` Patchwork
2024-12-12 8:04 ` ✗ Xe.CI.Full: failure " Patchwork
9 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2024-12-12 2:30 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 1135 bytes --]
== Series Details ==
Series: Xe: Add tests for PXP
URL : https://patchwork.freedesktop.org/series/142450/
State : success
== Summary ==
CI Bug Log - changes from XEIGT_8150_BAT -> XEIGTPW_12301_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (8 -> 8)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* IGT: IGT_8150 -> IGTPW_12301
* Linux: xe-2356-b34d1ff04eaa0ed48ef25f1d758d2a55f7c3c292 -> xe-2357-f4246a72ae40a2ac6dfd680e3e4bb1b6895081c3
IGTPW_12301: 7f64f6fea842f848e5f7528733280f5853e2f49a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8150: 7812065f4aebab1629b570bd78ef71e09480b359 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-2356-b34d1ff04eaa0ed48ef25f1d758d2a55f7c3c292: b34d1ff04eaa0ed48ef25f1d758d2a55f7c3c292
xe-2357-f4246a72ae40a2ac6dfd680e3e4bb1b6895081c3: f4246a72ae40a2ac6dfd680e3e4bb1b6895081c3
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/index.html
[-- Attachment #2: Type: text/html, Size: 1694 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread* ✗ Xe.CI.Full: failure for Xe: Add tests for PXP
2024-12-12 0:18 [PATCH i-g-t 0/7] Xe: Add tests for PXP Daniele Ceraolo Spurio
` (8 preceding siblings ...)
2024-12-12 2:30 ` ✓ Xe.CI.BAT: success " Patchwork
@ 2024-12-12 8:04 ` Patchwork
9 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2024-12-12 8:04 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: igt-dev
[-- Attachment #1: Type: text/plain, Size: 58846 bytes --]
== Series Details ==
Series: Xe: Add tests for PXP
URL : https://patchwork.freedesktop.org/series/142450/
State : failure
== Summary ==
CI Bug Log - changes from XEIGT_8150_full -> XEIGTPW_12301_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with XEIGTPW_12301_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in XEIGTPW_12301_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (4 -> 4)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in XEIGTPW_12301_full:
### IGT changes ###
#### Possible regressions ####
* igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25@pipe-b:
- shard-bmg: [PASS][1] -> [DMESG-WARN][2] +4 other tests dmesg-warn
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-4/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25@pipe-b.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25@pipe-b.html
* igt@xe_ccs@suspend-resume@xmajor-compressed-compfmt0-system-vram01:
- shard-bmg: [PASS][3] -> [INCOMPLETE][4]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@xe_ccs@suspend-resume@xmajor-compressed-compfmt0-system-vram01.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@xe_ccs@suspend-resume@xmajor-compressed-compfmt0-system-vram01.html
* {igt@xe_pxp@pxp-termination-key-update-post-suspend} (NEW):
- shard-bmg: NOTRUN -> [SKIP][5] +16 other tests skip
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@xe_pxp@pxp-termination-key-update-post-suspend.html
* {igt@xe_query@multigpu-query-pxp-status} (NEW):
- shard-lnl: NOTRUN -> [SKIP][6] +19 other tests skip
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-8/igt@xe_query@multigpu-query-pxp-status.html
* igt@xe_vm@bind-flag-invalid:
- shard-bmg: [PASS][7] -> [FAIL][8]
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-8/igt@xe_vm@bind-flag-invalid.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@xe_vm@bind-flag-invalid.html
- shard-lnl: [PASS][9] -> [FAIL][10]
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-7/igt@xe_vm@bind-flag-invalid.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-1/igt@xe_vm@bind-flag-invalid.html
New tests
---------
New tests have been introduced between XEIGT_8150_full and XEIGTPW_12301_full:
### New IGT tests (20) ###
* igt@xe_pxp@display-black-pxp-fb:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@display-pxp-fb:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-bo-alloc:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-optout:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-queue-alloc:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-src-to-pxp-dest-rendercopy:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-stale-bo-bind-post-rpm:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-stale-bo-bind-post-suspend:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-stale-bo-bind-post-termination-irq:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-stale-bo-exec-post-rpm:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-stale-bo-exec-post-suspend:
- Statuses : 1 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-stale-bo-exec-post-termination-irq:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-stale-queue-post-suspend:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-stale-queue-post-termination-irq:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-termination-key-update-post-rpm:
- Statuses : 1 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-termination-key-update-post-suspend:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@pxp-termination-key-update-post-termination-irq:
- Statuses : 1 skip(s)
- Exec time: [0.0] s
* igt@xe_pxp@regular-src-to-pxp-dest-rendercopy:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_query@multigpu-query-pxp-status:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
* igt@xe_query@query-pxp-status:
- Statuses : 2 skip(s)
- Exec time: [0.0] s
Known issues
------------
Here are the changes found in XEIGTPW_12301_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-linear:
- shard-lnl: [PASS][11] -> [FAIL][12] ([Intel XE#911]) +3 other tests fail
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-1/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-linear.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-7/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-a-edp-1-linear.html
* igt@kms_async_flips@crc-atomic@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [INCOMPLETE][13] ([Intel XE#3781]) +2 other tests incomplete
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@kms_async_flips@crc-atomic@pipe-a-dp-2.html
* igt@kms_atomic@plane-invalid-params-fence@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [DMESG-WARN][14] ([Intel XE#3468]) +15 other tests dmesg-warn
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@kms_atomic@plane-invalid-params-fence@pipe-a-dp-2.html
* igt@kms_big_fb@linear-8bpp-rotate-270:
- shard-lnl: NOTRUN -> [SKIP][15] ([Intel XE#1407]) +1 other test skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-7/igt@kms_big_fb@linear-8bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- shard-bmg: NOTRUN -> [INCOMPLETE][16] ([Intel XE#1727])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-bmg: [PASS][17] -> [DMESG-WARN][18] ([Intel XE#2705] / [Intel XE#3468]) +2 other tests dmesg-warn
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_big_fb@y-tiled-32bpp-rotate-90:
- shard-lnl: NOTRUN -> [SKIP][19] ([Intel XE#1124]) +1 other test skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-6/igt@kms_big_fb@y-tiled-32bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-addfb-size-offset-overflow:
- shard-bmg: NOTRUN -> [SKIP][20] ([Intel XE#607])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-bmg: NOTRUN -> [SKIP][21] ([Intel XE#1124]) +2 other tests skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_big_fb@yf-tiled-addfb:
- shard-bmg: NOTRUN -> [SKIP][22] ([Intel XE#2328])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_big_fb@yf-tiled-addfb.html
* igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p:
- shard-lnl: NOTRUN -> [SKIP][23] ([Intel XE#2191])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-3/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html
* igt@kms_ccs@crc-primary-basic-4-tiled-dg2-mc-ccs:
- shard-lnl: NOTRUN -> [SKIP][24] ([Intel XE#2887]) +1 other test skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-6/igt@kms_ccs@crc-primary-basic-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs@pipe-c-dp-2:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#2652] / [Intel XE#787]) +3 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs@pipe-c-dp-2.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:
- shard-lnl: NOTRUN -> [SKIP][26] ([Intel XE#3432])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-4/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs:
- shard-bmg: NOTRUN -> [SKIP][27] ([Intel XE#2887]) +5 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-4/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs.html
* igt@kms_chamelium_color@ctm-limited-range:
- shard-lnl: NOTRUN -> [SKIP][28] ([Intel XE#306])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-4/igt@kms_chamelium_color@ctm-limited-range.html
* igt@kms_chamelium_color@gamma:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#2325])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@kms_chamelium_color@gamma.html
* igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#373]) +1 other test skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-1/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html
* igt@kms_chamelium_hpd@common-hpd-after-suspend:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#2252]) +3 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
* igt@kms_content_protection@dp-mst-lic-type-0:
- shard-bmg: NOTRUN -> [SKIP][32] ([Intel XE#2390])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_content_protection@dp-mst-lic-type-0.html
* igt@kms_content_protection@legacy@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][33] ([Intel XE#1178])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_content_protection@legacy@pipe-a-dp-2.html
* igt@kms_content_protection@lic-type-1:
- shard-lnl: NOTRUN -> [SKIP][34] ([Intel XE#3278])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-5/igt@kms_content_protection@lic-type-1.html
* igt@kms_content_protection@uevent:
- shard-bmg: NOTRUN -> [FAIL][35] ([Intel XE#1188]) +1 other test fail
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_content_protection@uevent.html
* igt@kms_cursor_crc@cursor-onscreen-128x128@pipe-a-dp-2:
- shard-bmg: [PASS][36] -> [DMESG-FAIL][37] ([Intel XE#2705] / [Intel XE#3468]) +1 other test dmesg-fail
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-5/igt@kms_cursor_crc@cursor-onscreen-128x128@pipe-a-dp-2.html
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_cursor_crc@cursor-onscreen-128x128@pipe-a-dp-2.html
* igt@kms_cursor_crc@cursor-random-512x512:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#2321])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@kms_cursor_crc@cursor-random-512x512.html
* igt@kms_cursor_crc@cursor-sliding-256x85:
- shard-bmg: NOTRUN -> [SKIP][39] ([Intel XE#2320]) +2 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-4/igt@kms_cursor_crc@cursor-sliding-256x85.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
- shard-bmg: NOTRUN -> [SKIP][40] ([Intel XE#2286])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
* igt@kms_cursor_legacy@cursora-vs-flipb-varying-size:
- shard-bmg: [PASS][41] -> [SKIP][42] ([Intel XE#2291]) +4 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
* igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-dp-2:
- shard-bmg: [PASS][43] -> [DMESG-WARN][44] ([Intel XE#1727]) +13 other tests dmesg-warn
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-dp-2.html
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-dp-2.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#776]) +1 other test skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_feature_discovery@psr2:
- shard-bmg: NOTRUN -> [SKIP][46] ([Intel XE#2374])
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_feature_discovery@psr2.html
* igt@kms_flip@2x-busy-flip:
- shard-bmg: [PASS][47] -> [SKIP][48] ([Intel XE#2316]) +3 other tests skip
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@kms_flip@2x-busy-flip.html
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_flip@2x-busy-flip.html
* igt@kms_flip@2x-dpms-vs-vblank-race:
- shard-lnl: NOTRUN -> [SKIP][49] ([Intel XE#1421]) +2 other tests skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-7/igt@kms_flip@2x-dpms-vs-vblank-race.html
* igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3:
- shard-bmg: [PASS][50] -> [FAIL][51] ([Intel XE#3321])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3.html
* igt@kms_flip@2x-plain-flip:
- shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#2316]) +1 other test skip
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_flip@2x-plain-flip.html
* igt@kms_flip@blocking-absolute-wf_vblank@a-dp2:
- shard-bmg: NOTRUN -> [DMESG-FAIL][53] ([Intel XE#1727] / [Intel XE#3468])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@kms_flip@blocking-absolute-wf_vblank@a-dp2.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@b-dp2:
- shard-bmg: [PASS][54] -> [DMESG-WARN][55] ([Intel XE#3468]) +136 other tests dmesg-warn
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-5/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-dp2.html
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-dp2.html
* igt@kms_flip@flip-vs-suspend@c-dp2:
- shard-bmg: [PASS][56] -> [DMESG-FAIL][57] ([Intel XE#1727] / [Intel XE#3468]) +11 other tests dmesg-fail
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-5/igt@kms_flip@flip-vs-suspend@c-dp2.html
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@kms_flip@flip-vs-suspend@c-dp2.html
* igt@kms_flip@modeset-vs-vblank-race:
- shard-bmg: [PASS][58] -> [DMESG-WARN][59] ([Intel XE#1727] / [Intel XE#2705])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@kms_flip@modeset-vs-vblank-race.html
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_flip@modeset-vs-vblank-race.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling:
- shard-bmg: NOTRUN -> [SKIP][60] ([Intel XE#2293] / [Intel XE#2380])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode:
- shard-bmg: NOTRUN -> [SKIP][61] ([Intel XE#2293])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
- shard-lnl: NOTRUN -> [SKIP][62] ([Intel XE#1401] / [Intel XE#1745])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-5/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][63] ([Intel XE#1401])
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-5/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-default-mode.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-a-dp-2-x-to-4:
- shard-bmg: NOTRUN -> [DMESG-FAIL][64] ([Intel XE#2705] / [Intel XE#3468])
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-4/igt@kms_flip_tiling@flip-change-tiling@pipe-a-dp-2-x-to-4.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-a-dp-2-x-to-x:
- shard-bmg: NOTRUN -> [DMESG-FAIL][65] ([Intel XE#1727] / [Intel XE#2705] / [Intel XE#3468])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-4/igt@kms_flip_tiling@flip-change-tiling@pipe-a-dp-2-x-to-x.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-pgflip-blt:
- shard-lnl: NOTRUN -> [SKIP][66] ([Intel XE#651])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-5/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw:
- shard-bmg: NOTRUN -> [SKIP][67] ([Intel XE#2312])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][68] ([Intel XE#2311]) +9 other tests skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc:
- shard-bmg: NOTRUN -> [FAIL][69] ([Intel XE#2333]) +2 other tests fail
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-pgflip-blt:
- shard-lnl: NOTRUN -> [SKIP][70] ([Intel XE#656]) +6 other tests skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt:
- shard-bmg: NOTRUN -> [DMESG-FAIL][71] ([Intel XE#3468])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-onoff:
- shard-bmg: NOTRUN -> [SKIP][72] ([Intel XE#2313]) +4 other tests skip
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-onoff.html
* igt@kms_joiner@basic-force-big-joiner:
- shard-bmg: [PASS][73] -> [SKIP][74] ([Intel XE#3012])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@kms_joiner@basic-force-big-joiner.html
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_joiner@basic-force-big-joiner.html
* igt@kms_joiner@invalid-modeset-force-ultra-joiner:
- shard-bmg: NOTRUN -> [SKIP][75] ([Intel XE#2934])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-4/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html
* igt@kms_plane@plane-panning-bottom-right-suspend:
- shard-bmg: [PASS][76] -> [INCOMPLETE][77] ([Intel XE#1035] / [Intel XE#1727] / [Intel XE#3468]) +1 other test incomplete
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_plane@plane-panning-bottom-right-suspend.html
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@kms_plane@plane-panning-bottom-right-suspend.html
* igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a:
- shard-bmg: [PASS][78] -> [DMESG-FAIL][79] ([Intel XE#3468]) +21 other tests dmesg-fail
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a.html
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@kms_plane@plane-panning-bottom-right-suspend@pipe-a.html
* igt@kms_plane_alpha_blend@constant-alpha-min:
- shard-bmg: [PASS][80] -> [INCOMPLETE][81] ([Intel XE#1727] / [Intel XE#3468]) +6 other tests incomplete
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@kms_plane_alpha_blend@constant-alpha-min.html
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_plane_alpha_blend@constant-alpha-min.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25:
- shard-lnl: NOTRUN -> [SKIP][82] ([Intel XE#2763]) +3 other tests skip
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-5/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-d:
- shard-bmg: NOTRUN -> [SKIP][83] ([Intel XE#2763]) +4 other tests skip
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-d.html
* igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25:
- shard-bmg: [PASS][84] -> [DMESG-WARN][85] ([Intel XE#2566])
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-4/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25.html
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25.html
* igt@kms_pm_dc@dc5-psr:
- shard-lnl: [PASS][86] -> [FAIL][87] ([Intel XE#718])
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-8/igt@kms_pm_dc@dc5-psr.html
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-1/igt@kms_pm_dc@dc5-psr.html
* igt@kms_pm_lpsp@kms-lpsp:
- shard-bmg: NOTRUN -> [SKIP][88] ([Intel XE#2499])
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_pm_lpsp@kms-lpsp.html
* igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area:
- shard-bmg: NOTRUN -> [SKIP][89] ([Intel XE#1489]) +1 other test skip
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html
* igt@kms_psr@fbc-psr2-cursor-render:
- shard-bmg: NOTRUN -> [SKIP][90] ([Intel XE#2234] / [Intel XE#2850]) +3 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_psr@fbc-psr2-cursor-render.html
* igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
- shard-bmg: NOTRUN -> [SKIP][91] ([Intel XE#2414])
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
* igt@kms_scaling_modes@scaling-mode-center:
- shard-bmg: NOTRUN -> [SKIP][92] ([Intel XE#2413])
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@kms_scaling_modes@scaling-mode-center.html
* igt@kms_vblank@ts-continuation-dpms-rpm@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [DMESG-WARN][93] ([Intel XE#1727] / [Intel XE#3468]) +2 other tests dmesg-warn
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_vblank@ts-continuation-dpms-rpm@pipe-a-dp-2.html
* igt@kms_vrr@flip-basic:
- shard-bmg: NOTRUN -> [SKIP][94] ([Intel XE#1499])
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_vrr@flip-basic.html
* igt@kms_writeback@writeback-check-output-xrgb2101010:
- shard-bmg: NOTRUN -> [SKIP][95] ([Intel XE#756])
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_writeback@writeback-check-output-xrgb2101010.html
* igt@xe_eudebug@discovery-empty-clients:
- shard-lnl: NOTRUN -> [SKIP][96] ([Intel XE#2905]) +2 other tests skip
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-5/igt@xe_eudebug@discovery-empty-clients.html
* igt@xe_eudebug@multigpu-basic-client:
- shard-bmg: NOTRUN -> [SKIP][97] ([Intel XE#2905]) +4 other tests skip
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@xe_eudebug@multigpu-basic-client.html
* igt@xe_evict_ccs@evict-overcommit-parallel-nofree-reopen:
- shard-lnl: NOTRUN -> [SKIP][98] ([Intel XE#688]) +1 other test skip
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-8/igt@xe_evict_ccs@evict-overcommit-parallel-nofree-reopen.html
* igt@xe_exec_basic@many-execqueues-userptr-invalidate-race:
- shard-bmg: [PASS][99] -> [DMESG-WARN][100] ([Intel XE#2705])
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@xe_exec_basic@many-execqueues-userptr-invalidate-race.html
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@xe_exec_basic@many-execqueues-userptr-invalidate-race.html
* igt@xe_exec_basic@multigpu-once-basic-defer-mmap:
- shard-lnl: NOTRUN -> [SKIP][101] ([Intel XE#1392]) +1 other test skip
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-3/igt@xe_exec_basic@multigpu-once-basic-defer-mmap.html
* igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind:
- shard-bmg: NOTRUN -> [SKIP][102] ([Intel XE#2322])
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind.html
* igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready:
- shard-bmg: [PASS][103] -> [DMESG-WARN][104] ([Intel XE#3467] / [Intel XE#3468]) +2 other tests dmesg-warn
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready.html
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_guc_ct_init:
- shard-bmg: [PASS][105] -> [DMESG-WARN][106] ([Intel XE#3343]) +1 other test dmesg-warn
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-8/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_ct_init.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_ct_init.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_sriov_init:
- shard-bmg: [PASS][107] -> [DMESG-WARN][108] ([Intel XE#3467]) +2 other tests dmesg-warn
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-5/igt@xe_fault_injection@inject-fault-probe-function-xe_sriov_init.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@xe_fault_injection@inject-fault-probe-function-xe_sriov_init.html
* igt@xe_fault_injection@vm-create-fail-xe_pt_create:
- shard-bmg: NOTRUN -> [DMESG-WARN][109] ([Intel XE#3467] / [Intel XE#3468])
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@xe_fault_injection@vm-create-fail-xe_pt_create.html
* igt@xe_peer2peer@write:
- shard-bmg: NOTRUN -> [SKIP][110] ([Intel XE#2427])
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@xe_peer2peer@write.html
* igt@xe_pm@d3cold-basic-exec:
- shard-lnl: NOTRUN -> [SKIP][111] ([Intel XE#2284] / [Intel XE#366])
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-5/igt@xe_pm@d3cold-basic-exec.html
* igt@xe_pm@d3hot-mocs:
- shard-bmg: [PASS][112] -> [DMESG-WARN][113] ([Intel XE#1727] / [Intel XE#3468]) +23 other tests dmesg-warn
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@xe_pm@d3hot-mocs.html
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@xe_pm@d3hot-mocs.html
* igt@xe_pm@s2idle-basic-exec:
- shard-bmg: [PASS][114] -> [DMESG-WARN][115] ([Intel XE#1616] / [Intel XE#1727] / [Intel XE#3468])
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-8/igt@xe_pm@s2idle-basic-exec.html
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@xe_pm@s2idle-basic-exec.html
* igt@xe_pm@s3-vm-bind-prefetch:
- shard-bmg: [PASS][116] -> [DMESG-WARN][117] ([Intel XE#1727] / [Intel XE#3468] / [Intel XE#569])
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-4/igt@xe_pm@s3-vm-bind-prefetch.html
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@xe_pm@s3-vm-bind-prefetch.html
* igt@xe_pm@s4-d3hot-basic-exec:
- shard-lnl: [PASS][118] -> [ABORT][119] ([Intel XE#1358] / [Intel XE#1607])
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-1/igt@xe_pm@s4-d3hot-basic-exec.html
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-2/igt@xe_pm@s4-d3hot-basic-exec.html
* igt@xe_pm@s4-mocs:
- shard-lnl: [PASS][120] -> [ABORT][121] ([Intel XE#1794])
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-7/igt@xe_pm@s4-mocs.html
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-2/igt@xe_pm@s4-mocs.html
* igt@xe_pm_residency@toggle-gt-c6:
- shard-lnl: [PASS][122] -> [FAIL][123] ([Intel XE#958])
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-6/igt@xe_pm_residency@toggle-gt-c6.html
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-4/igt@xe_pm_residency@toggle-gt-c6.html
* igt@xe_query@multigpu-query-invalid-query:
- shard-lnl: NOTRUN -> [SKIP][124] ([Intel XE#944])
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-5/igt@xe_query@multigpu-query-invalid-query.html
* igt@xe_query@multigpu-query-uc-fw-version-huc:
- shard-bmg: NOTRUN -> [SKIP][125] ([Intel XE#944])
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@xe_query@multigpu-query-uc-fw-version-huc.html
#### Possible fixes ####
* igt@kms_async_flips@async-flip-with-page-flip-events-atomic:
- shard-lnl: [FAIL][126] ([Intel XE#3719]) -> [PASS][127] +3 other tests pass
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-7/igt@kms_async_flips@async-flip-with-page-flip-events-atomic.html
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-4/igt@kms_async_flips@async-flip-with-page-flip-events-atomic.html
* igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p:
- shard-bmg: [SKIP][128] ([Intel XE#2314] / [Intel XE#2894]) -> [PASS][129]
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p.html
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p.html
* igt@kms_cursor_edge_walk@64x64-top-edge@pipe-a-dp-2:
- shard-bmg: [DMESG-FAIL][130] ([Intel XE#3468]) -> [PASS][131] +10 other tests pass
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@kms_cursor_edge_walk@64x64-top-edge@pipe-a-dp-2.html
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-4/igt@kms_cursor_edge_walk@64x64-top-edge@pipe-a-dp-2.html
* igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions:
- shard-bmg: [SKIP][132] ([Intel XE#2291]) -> [PASS][133] +3 other tests pass
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions.html
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size:
- shard-bmg: [DMESG-WARN][134] ([Intel XE#877]) -> [PASS][135] +1 other test pass
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-4/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html
* igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible:
- shard-bmg: [DMESG-WARN][136] ([Intel XE#1727] / [Intel XE#3468]) -> [PASS][137] +2 other tests pass
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible.html
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-4/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible.html
* igt@kms_flip@2x-flip-vs-expired-vblank@ab-dp2-hdmi-a3:
- shard-bmg: [FAIL][138] ([Intel XE#2882]) -> [PASS][139]
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank@ab-dp2-hdmi-a3.html
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@kms_flip@2x-flip-vs-expired-vblank@ab-dp2-hdmi-a3.html
* igt@kms_flip@2x-nonexisting-fb:
- shard-bmg: [SKIP][140] ([Intel XE#2316]) -> [PASS][141] +2 other tests pass
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_flip@2x-nonexisting-fb.html
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_flip@2x-nonexisting-fb.html
* igt@kms_flip@flip-vs-absolute-wf_vblank:
- shard-lnl: [FAIL][142] ([Intel XE#886]) -> [PASS][143] +1 other test pass
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-5/igt@kms_flip@flip-vs-absolute-wf_vblank.html
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-3/igt@kms_flip@flip-vs-absolute-wf_vblank.html
* igt@kms_flip@flip-vs-panning-interruptible:
- shard-bmg: [INCOMPLETE][144] ([Intel XE#2635]) -> [PASS][145]
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@kms_flip@flip-vs-panning-interruptible.html
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_flip@flip-vs-panning-interruptible.html
* igt@kms_flip@flip-vs-panning-interruptible@a-dp2:
- shard-bmg: [INCOMPLETE][146] -> [PASS][147]
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@kms_flip@flip-vs-panning-interruptible@a-dp2.html
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_flip@flip-vs-panning-interruptible@a-dp2.html
* igt@kms_pm_dc@dc5-dpms:
- shard-lnl: [FAIL][148] ([Intel XE#718]) -> [PASS][149]
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-8/igt@kms_pm_dc@dc5-dpms.html
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-8/igt@kms_pm_dc@dc5-dpms.html
* igt@kms_psr@psr2-sprite-blt@edp-1:
- shard-lnl: [FAIL][150] -> [PASS][151] +3 other tests pass
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-5/igt@kms_psr@psr2-sprite-blt@edp-1.html
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-2/igt@kms_psr@psr2-sprite-blt@edp-1.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1:
- shard-lnl: [FAIL][152] ([Intel XE#899]) -> [PASS][153] +2 other tests pass
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-3/igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1.html
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-1/igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1.html
* igt@xe_exec_compute_mode@many-execqueues-bindexecqueue:
- shard-bmg: [DMESG-WARN][154] -> [PASS][155] +1 other test pass
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@xe_exec_compute_mode@many-execqueues-bindexecqueue.html
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@xe_exec_compute_mode@many-execqueues-bindexecqueue.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early:
- shard-bmg: [DMESG-WARN][156] ([Intel XE#3467] / [Intel XE#3468]) -> [PASS][157]
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-8/igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early.html
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early.html
* igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_prepare:
- shard-bmg: [DMESG-WARN][158] ([Intel XE#3467]) -> [PASS][159] +2 other tests pass
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_prepare.html
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_prepare.html
* igt@xe_module_load@many-reload:
- shard-bmg: [FAIL][160] ([Intel XE#3625]) -> [PASS][161]
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-8/igt@xe_module_load@many-reload.html
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-4/igt@xe_module_load@many-reload.html
* igt@xe_pm@s4-basic-exec:
- shard-lnl: [ABORT][162] ([Intel XE#1358] / [Intel XE#1607] / [Intel XE#1794]) -> [PASS][163]
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-lnl-2/igt@xe_pm@s4-basic-exec.html
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-lnl-6/igt@xe_pm@s4-basic-exec.html
* igt@xe_query@query-invalid-uc-fw-version-mbz:
- shard-bmg: [DMESG-WARN][164] ([Intel XE#1727]) -> [PASS][165] +3 other tests pass
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@xe_query@query-invalid-uc-fw-version-mbz.html
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@xe_query@query-invalid-uc-fw-version-mbz.html
* igt@xe_sysfs_preempt_timeout@preempt_timeout_us-timeout:
- shard-bmg: [DMESG-WARN][166] ([Intel XE#3468]) -> [PASS][167] +70 other tests pass
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@xe_sysfs_preempt_timeout@preempt_timeout_us-timeout.html
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@xe_sysfs_preempt_timeout@preempt_timeout_us-timeout.html
* igt@xe_wedged@basic-wedged:
- shard-bmg: [DMESG-WARN][168] ([Intel XE#2919] / [Intel XE#3468]) -> [PASS][169]
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@xe_wedged@basic-wedged.html
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@xe_wedged@basic-wedged.html
#### Warnings ####
* igt@kms_content_protection@legacy:
- shard-bmg: [SKIP][170] ([Intel XE#2341]) -> [FAIL][171] ([Intel XE#1178])
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_content_protection@legacy.html
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_content_protection@legacy.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-atomic:
- shard-bmg: [DMESG-WARN][172] ([Intel XE#3468]) -> [INCOMPLETE][173] ([Intel XE#1727])
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic.html
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size:
- shard-bmg: [DMESG-WARN][174] ([Intel XE#877]) -> [DMESG-WARN][175] ([Intel XE#3468])
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-8/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
- shard-bmg: [SKIP][176] ([Intel XE#2291]) -> [INCOMPLETE][177] ([Intel XE#3226])
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
* igt@kms_fbcon_fbt@fbc:
- shard-bmg: [FAIL][178] ([Intel XE#1695]) -> [DMESG-FAIL][179] ([Intel XE#3468])
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@kms_fbcon_fbt@fbc.html
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@kms_fbcon_fbt@fbc.html
* igt@kms_flip@2x-flip-vs-rmfb-interruptible:
- shard-bmg: [DMESG-WARN][180] ([Intel XE#2955] / [Intel XE#3468]) -> [SKIP][181] ([Intel XE#2316])
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@kms_flip@2x-flip-vs-rmfb-interruptible.html
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_flip@2x-flip-vs-rmfb-interruptible.html
* igt@kms_flip@2x-plain-flip-ts-check:
- shard-bmg: [DMESG-WARN][182] ([Intel XE#3468]) -> [FAIL][183] ([Intel XE#2882]) +2 other tests fail
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-8/igt@kms_flip@2x-plain-flip-ts-check.html
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@kms_flip@2x-plain-flip-ts-check.html
* igt@kms_flip@wf_vblank-ts-check-interruptible:
- shard-bmg: [INCOMPLETE][184] ([Intel XE#2635]) -> [DMESG-FAIL][185] ([Intel XE#3468])
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-5/igt@kms_flip@wf_vblank-ts-check-interruptible.html
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_flip@wf_vblank-ts-check-interruptible.html
* igt@kms_flip@wf_vblank-ts-check-interruptible@c-dp2:
- shard-bmg: [INCOMPLETE][186] ([Intel XE#2635]) -> [DMESG-WARN][187] ([Intel XE#3468])
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-5/igt@kms_flip@wf_vblank-ts-check-interruptible@c-dp2.html
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_flip@wf_vblank-ts-check-interruptible@c-dp2.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render:
- shard-bmg: [SKIP][188] ([Intel XE#2311]) -> [SKIP][189] ([Intel XE#2312]) +11 other tests skip
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render.html
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-render:
- shard-bmg: [SKIP][190] ([Intel XE#2312]) -> [SKIP][191] ([Intel XE#2311]) +8 other tests skip
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-render.html
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-4/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-wc:
- shard-bmg: [FAIL][192] ([Intel XE#2333]) -> [DMESG-FAIL][193] ([Intel XE#3468]) +10 other tests dmesg-fail
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-wc.html
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-pri-indfb-multidraw:
- shard-bmg: [SKIP][194] ([Intel XE#2312]) -> [DMESG-FAIL][195] ([Intel XE#3468])
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-pri-indfb-multidraw.html
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt:
- shard-bmg: [SKIP][196] ([Intel XE#2312]) -> [FAIL][197] ([Intel XE#2333]) +3 other tests fail
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt.html
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen:
- shard-bmg: [FAIL][198] ([Intel XE#2333]) -> [SKIP][199] ([Intel XE#2312]) +6 other tests skip
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen.html
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff:
- shard-bmg: [DMESG-FAIL][200] ([Intel XE#3468]) -> [FAIL][201] ([Intel XE#2333]) +6 other tests fail
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-render:
- shard-bmg: [SKIP][202] ([Intel XE#2312]) -> [SKIP][203] ([Intel XE#2313]) +6 other tests skip
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-render.html
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][204] ([Intel XE#2313]) -> [SKIP][205] ([Intel XE#2312]) +10 other tests skip
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-wc.html
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-pri-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@pipe-fbc-rte:
- shard-bmg: [INCOMPLETE][206] ([Intel XE#1727] / [Intel XE#2050] / [Intel XE#3468]) -> [FAIL][207] ([Intel XE#2333])
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-6/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html
* igt@xe_evict@evict-mixed-many-threads-large:
- shard-bmg: [TIMEOUT][208] ([Intel XE#1473]) -> [INCOMPLETE][209] ([Intel XE#1473] / [Intel XE#3468])
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-3/igt@xe_evict@evict-mixed-many-threads-large.html
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@xe_evict@evict-mixed-many-threads-large.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_guc_log_init:
- shard-bmg: [DMESG-WARN][210] ([Intel XE#3343]) -> [DMESG-WARN][211] ([Intel XE#3343] / [Intel XE#3468])
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_log_init.html
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-5/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_log_init.html
* igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_execute:
- shard-bmg: [DMESG-WARN][212] ([Intel XE#3467]) -> [DMESG-WARN][213] ([Intel XE#3467] / [Intel XE#3468])
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-2/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_execute.html
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-8/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_execute.html
* igt@xe_module_load@reload:
- shard-bmg: [DMESG-WARN][214] ([Intel XE#3467] / [Intel XE#3468]) -> [DMESG-WARN][215] ([Intel XE#3467]) +1 other test dmesg-warn
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-6/igt@xe_module_load@reload.html
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-2/igt@xe_module_load@reload.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-bmg: [SKIP][216] ([Intel XE#1130]) -> [ABORT][217] ([Intel XE#3765])
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8150/shard-bmg-7/igt@xe_wedged@wedged-at-any-timeout.html
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/shard-bmg-3/igt@xe_wedged@wedged-at-any-timeout.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#1035]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1035
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1130
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1188]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1188
[Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1401]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1401
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#1607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1607
[Intel XE#1616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1616
[Intel XE#1695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1695
[Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
[Intel XE#2050]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2050
[Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
[Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
[Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
[Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2328]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2328
[Intel XE#2333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2333
[Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
[Intel XE#2374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2374
[Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
[Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
[Intel XE#2413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2413
[Intel XE#2414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2414
[Intel XE#2427]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2427
[Intel XE#2499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2499
[Intel XE#2566]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2566
[Intel XE#2635]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2635
[Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
[Intel XE#2705]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2705
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2882
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
[Intel XE#2905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2905
[Intel XE#2919]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2919
[Intel XE#2934]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2934
[Intel XE#2955]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2955
[Intel XE#3012]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3012
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#3226]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3226
[Intel XE#3278]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3278
[Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
[Intel XE#3343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3343
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#3467]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3467
[Intel XE#3468]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3468
[Intel XE#3625]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3625
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#3719]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3719
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3765]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3765
[Intel XE#3781]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3781
[Intel XE#569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/569
[Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
[Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#877]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/877
[Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
[Intel XE#899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/899
[Intel XE#911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/911
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#958]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/958
Build changes
-------------
* IGT: IGT_8150 -> IGTPW_12301
* Linux: xe-2356-b34d1ff04eaa0ed48ef25f1d758d2a55f7c3c292 -> xe-2357-f4246a72ae40a2ac6dfd680e3e4bb1b6895081c3
IGTPW_12301: 7f64f6fea842f848e5f7528733280f5853e2f49a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8150: 7812065f4aebab1629b570bd78ef71e09480b359 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-2356-b34d1ff04eaa0ed48ef25f1d758d2a55f7c3c292: b34d1ff04eaa0ed48ef25f1d758d2a55f7c3c292
xe-2357-f4246a72ae40a2ac6dfd680e3e4bb1b6895081c3: f4246a72ae40a2ac6dfd680e3e4bb1b6895081c3
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12301/index.html
[-- Attachment #2: Type: text/html, Size: 70463 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread