* [PATCH v3 00/12] Add PXP HWDRM support
@ 2024-11-20 23:43 Daniele Ceraolo Spurio
2024-11-20 23:43 ` [PATCH v3 01/12] drm/xe/pxp: Initialize PXP structure and KCR reg Daniele Ceraolo Spurio
` (18 more replies)
0 siblings, 19 replies; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe
Cc: Daniele Ceraolo Spurio, José Roberto de Souza, Alan Previn,
Matthew Brost, Thomas Hellström, John Harrison
PXP (Protected Xe Path) allows execution and flip to display of protected
(i.e. encrypted) objects. The HW supports multiple types of PXP, but
this series only introduces support for PXP HWDRM, which is mainly
targeted at encrypting data that is going to be displayed.
Even though we only plan to support 1 type of PXP for now, the interface
has been designed to allow support for other PXP types to be added at a
later point in time.
A user is expected to mark both BO and exec_queues as using PXP and the
driver will make sure that PXP is running, that the encryption is
valid and that no execution happens with an outdated encryption.
The mesa implementation of the new interfaces is in review here:
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30723
v2: code cleaned up and fixed while coming out of RFC, addressed review
feedback in regards to the interface.
v3: code and documentation improvements following review feedback
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Alan Previn <alan.previn.teres.alexis@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
Daniele Ceraolo Spurio (12):
drm/xe/pxp: Initialize PXP structure and KCR reg
drm/xe/pxp: Allocate PXP execution resources
drm/xe/pxp: Add VCS inline termination support
drm/xe/pxp: Add GSC session invalidation support
drm/xe/pxp: Handle the PXP termination interrupt
drm/xe/pxp: Add GSC session initialization support
drm/xe/pxp: Add support for PXP-using queues
drm/xe/pxp: add a query for PXP status
drm/xe/pxp: Add API to mark a BO as using PXP
drm/xe/pxp: add PXP PM support
drm/xe/pxp: Add PXP debugfs support
drm/xe/pxp: Enable PXP for MTL and LNL
drivers/gpu/drm/xe/Makefile | 3 +
drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h | 41 +
.../xe/compat-i915-headers/pxp/intel_pxp.h | 17 +-
drivers/gpu/drm/xe/display/intel_bo.c | 2 +-
.../gpu/drm/xe/instructions/xe_instr_defs.h | 1 +
.../gpu/drm/xe/instructions/xe_mfx_commands.h | 28 +
.../gpu/drm/xe/instructions/xe_mi_commands.h | 5 +
drivers/gpu/drm/xe/regs/xe_engine_regs.h | 1 +
drivers/gpu/drm/xe/regs/xe_irq_regs.h | 8 +
drivers/gpu/drm/xe/regs/xe_pxp_regs.h | 23 +
drivers/gpu/drm/xe/xe_bo.c | 100 ++-
drivers/gpu/drm/xe/xe_bo.h | 5 +
drivers/gpu/drm/xe/xe_bo_types.h | 3 +
drivers/gpu/drm/xe/xe_debugfs.c | 3 +
drivers/gpu/drm/xe/xe_device.c | 6 +
drivers/gpu/drm/xe/xe_device_types.h | 8 +-
drivers/gpu/drm/xe/xe_exec.c | 6 +
drivers/gpu/drm/xe/xe_exec_queue.c | 60 +-
drivers/gpu/drm/xe/xe_exec_queue.h | 5 +
drivers/gpu/drm/xe/xe_exec_queue_types.h | 8 +
drivers/gpu/drm/xe/xe_execlist.c | 2 +-
drivers/gpu/drm/xe/xe_irq.c | 20 +-
drivers/gpu/drm/xe/xe_lrc.c | 16 +-
drivers/gpu/drm/xe/xe_lrc.h | 7 +-
drivers/gpu/drm/xe/xe_pci.c | 4 +
drivers/gpu/drm/xe/xe_pm.c | 40 +-
drivers/gpu/drm/xe/xe_pxp.c | 786 ++++++++++++++++++
drivers/gpu/drm/xe/xe_pxp.h | 33 +
drivers/gpu/drm/xe/xe_pxp_debugfs.c | 120 +++
drivers/gpu/drm/xe/xe_pxp_debugfs.h | 13 +
drivers/gpu/drm/xe/xe_pxp_submit.c | 588 +++++++++++++
drivers/gpu/drm/xe/xe_pxp_submit.h | 22 +
drivers/gpu/drm/xe/xe_pxp_types.h | 131 +++
drivers/gpu/drm/xe/xe_query.c | 29 +
drivers/gpu/drm/xe/xe_ring_ops.c | 4 +-
drivers/gpu/drm/xe/xe_vm.c | 165 +++-
drivers/gpu/drm/xe/xe_vm.h | 8 +
drivers/gpu/drm/xe/xe_vm_types.h | 1 +
include/uapi/drm/xe_drm.h | 94 ++-
39 files changed, 2374 insertions(+), 42 deletions(-)
create mode 100644 drivers/gpu/drm/xe/instructions/xe_mfx_commands.h
create mode 100644 drivers/gpu/drm/xe/regs/xe_pxp_regs.h
create mode 100644 drivers/gpu/drm/xe/xe_pxp.c
create mode 100644 drivers/gpu/drm/xe/xe_pxp.h
create mode 100644 drivers/gpu/drm/xe/xe_pxp_debugfs.c
create mode 100644 drivers/gpu/drm/xe/xe_pxp_debugfs.h
create mode 100644 drivers/gpu/drm/xe/xe_pxp_submit.c
create mode 100644 drivers/gpu/drm/xe/xe_pxp_submit.h
create mode 100644 drivers/gpu/drm/xe/xe_pxp_types.h
--
2.43.0
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v3 01/12] drm/xe/pxp: Initialize PXP structure and KCR reg
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-06 1:59 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 02/12] drm/xe/pxp: Allocate PXP execution resources Daniele Ceraolo Spurio
` (17 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, John Harrison
As the first step towards adding PXP support, hook in the PXP init
function, allocate the PXP structure and initialize the KCR register to
allow PXP HWDRM sessions.
v2: remove unneeded includes, free PXP memory on error (John)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
| 4 +-
drivers/gpu/drm/xe/regs/xe_pxp_regs.h | 17 +++
drivers/gpu/drm/xe/xe_device.c | 6 +
drivers/gpu/drm/xe/xe_device_types.h | 8 +-
drivers/gpu/drm/xe/xe_pci.c | 2 +
drivers/gpu/drm/xe/xe_pxp.c | 107 ++++++++++++++++++
drivers/gpu/drm/xe/xe_pxp.h | 13 +++
drivers/gpu/drm/xe/xe_pxp_types.h | 26 +++++
9 files changed, 180 insertions(+), 4 deletions(-)
create mode 100644 drivers/gpu/drm/xe/regs/xe_pxp_regs.h
create mode 100644 drivers/gpu/drm/xe/xe_pxp.c
create mode 100644 drivers/gpu/drm/xe/xe_pxp.h
create mode 100644 drivers/gpu/drm/xe/xe_pxp_types.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index a93e6fcc0ad9..3c0bd3c814de 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -86,6 +86,7 @@ xe-y += xe_bb.o \
xe_preempt_fence.o \
xe_pt.o \
xe_pt_walk.o \
+ xe_pxp.o \
xe_query.o \
xe_range_fence.o \
xe_reg_sr.o \
--git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
index 5dfc587c8237..419e8e926f00 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
@@ -10,9 +10,9 @@
#include <linux/types.h>
struct drm_gem_object;
-struct intel_pxp;
+struct xe_pxp;
-static inline int intel_pxp_key_check(struct intel_pxp *pxp,
+static inline int intel_pxp_key_check(struct xe_pxp *pxp,
struct drm_gem_object *obj,
bool assign)
{
diff --git a/drivers/gpu/drm/xe/regs/xe_pxp_regs.h b/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
new file mode 100644
index 000000000000..d67cf210d23d
--- /dev/null
+++ b/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright(c) 2024, Intel Corporation. All rights reserved.
+ */
+
+#ifndef __XE_PXP_REGS_H__
+#define __XE_PXP_REGS_H__
+
+#include "regs/xe_regs.h"
+
+/* The following registers are only valid on platforms with a media GT */
+
+/* KCR enable/disable control */
+#define KCR_INIT XE_REG(0x3860f0)
+#define KCR_INIT_ALLOW_DISPLAY_ME_WRITES REG_BIT(14)
+
+#endif /* __XE_PXP_REGS_H__ */
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 930bb2750e2e..b79cf470c169 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -49,6 +49,7 @@
#include "xe_pat.h"
#include "xe_pcode.h"
#include "xe_pm.h"
+#include "xe_pxp.h"
#include "xe_query.h"
#include "xe_sriov.h"
#include "xe_tile.h"
@@ -746,6 +747,11 @@ int xe_device_probe(struct xe_device *xe)
if (err)
goto err_fini_oa;
+ /* A PXP init failure is not fatal */
+ err = xe_pxp_init(xe);
+ if (err && err != -EOPNOTSUPP)
+ drm_err(&xe->drm, "PXP initialization failed: %pe\n", ERR_PTR(err));
+
err = drm_dev_register(&xe->drm, 0);
if (err)
goto err_fini_display;
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 8592f1b02db1..7f420d2e3ccc 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -34,6 +34,7 @@
struct xe_ggtt;
struct xe_pat_ops;
+struct xe_pxp;
#define XE_BO_INVALID_OFFSET LONG_MAX
@@ -306,6 +307,8 @@ struct xe_device {
u8 has_llc:1;
/** @info.has_mmio_ext: Device has extra MMIO address range */
u8 has_mmio_ext:1;
+ /** @info.has_pxp: Device has PXP support */
+ u8 has_pxp:1;
/** @info.has_range_tlb_invalidation: Has range based TLB invalidations */
u8 has_range_tlb_invalidation:1;
/** @info.has_sriov: Supports SR-IOV */
@@ -496,6 +499,9 @@ struct xe_device {
/** @oa: oa observation subsystem */
struct xe_oa oa;
+ /** @pxp: Encapsulate Protected Xe Path support */
+ struct xe_pxp *pxp;
+
/** @needs_flr_on_fini: requests function-reset on fini */
bool needs_flr_on_fini;
@@ -568,8 +574,6 @@ struct xe_device {
unsigned int czclk_freq;
unsigned int fsb_freq, mem_freq, is_ddr3;
};
-
- void *pxp;
#endif
};
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 9b81e7d00a86..de5034979ec3 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -62,6 +62,7 @@ struct xe_device_desc {
u8 has_heci_cscfi:1;
u8 has_llc:1;
u8 has_mmio_ext:1;
+ u8 has_pxp:1;
u8 has_sriov:1;
u8 skip_guc_pc:1;
u8 skip_mtcfg:1;
@@ -623,6 +624,7 @@ static int xe_info_init_early(struct xe_device *xe,
xe->info.has_heci_cscfi = desc->has_heci_cscfi;
xe->info.has_llc = desc->has_llc;
xe->info.has_mmio_ext = desc->has_mmio_ext;
+ xe->info.has_pxp = desc->has_pxp;
xe->info.has_sriov = desc->has_sriov;
xe->info.skip_guc_pc = desc->skip_guc_pc;
xe->info.skip_mtcfg = desc->skip_mtcfg;
diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
new file mode 100644
index 000000000000..1a4d12d37d96
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_pxp.c
@@ -0,0 +1,107 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright(c) 2024 Intel Corporation.
+ */
+
+#include "xe_pxp.h"
+
+#include <drm/drm_managed.h>
+
+#include "xe_device_types.h"
+#include "xe_force_wake.h"
+#include "xe_gt.h"
+#include "xe_gt_types.h"
+#include "xe_mmio.h"
+#include "xe_pxp_types.h"
+#include "xe_uc_fw.h"
+#include "regs/xe_pxp_regs.h"
+
+/**
+ * DOC: PXP
+ *
+ * PXP (Protected Xe Path) allows execution and flip to display of protected
+ * (i.e. encrypted) objects. This feature is currently only supported in
+ * integrated parts.
+ */
+
+static bool pxp_is_supported(const struct xe_device *xe)
+{
+ return xe->info.has_pxp && IS_ENABLED(CONFIG_INTEL_MEI_GSC_PROXY);
+}
+
+static int kcr_pxp_set_status(const struct xe_pxp *pxp, bool enable)
+{
+ u32 val = enable ? _MASKED_BIT_ENABLE(KCR_INIT_ALLOW_DISPLAY_ME_WRITES) :
+ _MASKED_BIT_DISABLE(KCR_INIT_ALLOW_DISPLAY_ME_WRITES);
+ unsigned int fw_ref;
+
+ fw_ref = xe_force_wake_get(gt_to_fw(pxp->gt), XE_FW_GT);
+ if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_GT))
+ return -EIO;
+
+ xe_mmio_write32(&pxp->gt->mmio, KCR_INIT, val);
+ xe_force_wake_put(gt_to_fw(pxp->gt), fw_ref);
+
+ return 0;
+}
+
+static int kcr_pxp_enable(const struct xe_pxp *pxp)
+{
+ return kcr_pxp_set_status(pxp, true);
+}
+
+/**
+ * xe_pxp_init - initialize PXP support
+ * @xe: the xe_device structure
+ *
+ * Initialize the HW state and allocate the objects required for PXP support.
+ * Note that some of the requirement for PXP support (GSC proxy init, HuC auth)
+ * are performed asynchronously as part of the GSC init. PXP can only be used
+ * after both this function and the async worker have completed.
+ *
+ * Returns -EOPNOTSUPP if PXP is not supported, 0 if PXP initialization is
+ * successful, other errno value if there is an error during the init.
+ */
+int xe_pxp_init(struct xe_device *xe)
+{
+ struct xe_gt *gt = xe->tiles[0].media_gt;
+ struct xe_pxp *pxp;
+ int err;
+
+ if (!pxp_is_supported(xe))
+ return -EOPNOTSUPP;
+
+ /* we only support PXP on single tile devices with a media GT */
+ if (xe->info.tile_count > 1 || !gt)
+ return -EOPNOTSUPP;
+
+ /* The GSCCS is required for submissions to the GSC FW */
+ if (!(gt->info.engine_mask & BIT(XE_HW_ENGINE_GSCCS0)))
+ return -EOPNOTSUPP;
+
+ /* PXP requires both GSC and HuC firmwares to be available */
+ if (!xe_uc_fw_is_loadable(>->uc.gsc.fw) ||
+ !xe_uc_fw_is_loadable(>->uc.huc.fw)) {
+ drm_info(&xe->drm, "skipping PXP init due to missing FW dependencies");
+ return -EOPNOTSUPP;
+ }
+
+ pxp = drmm_kzalloc(&xe->drm, sizeof(struct xe_pxp), GFP_KERNEL);
+ if (!pxp)
+ return -ENOMEM;
+
+ pxp->xe = xe;
+ pxp->gt = gt;
+
+ err = kcr_pxp_enable(pxp);
+ if (err)
+ goto out_free;
+
+ xe->pxp = pxp;
+
+ return 0;
+
+out_free:
+ drmm_kfree(&xe->drm, pxp);
+ return err;
+}
diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
new file mode 100644
index 000000000000..00f5e688c0d9
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_pxp.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright(c) 2024, Intel Corporation. All rights reserved.
+ */
+
+#ifndef __XE_PXP_H__
+#define __XE_PXP_H__
+
+struct xe_device;
+
+int xe_pxp_init(struct xe_device *xe);
+
+#endif /* __XE_PXP_H__ */
diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
new file mode 100644
index 000000000000..4639cf49d267
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_pxp_types.h
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright(c) 2024, Intel Corporation. All rights reserved.
+ */
+
+#ifndef __XE_PXP_TYPES_H__
+#define __XE_PXP_TYPES_H__
+
+struct xe_device;
+struct xe_gt;
+
+/**
+ * struct xe_pxp - pxp state
+ */
+struct xe_pxp {
+ /** @xe: Backpoiner to the xe_device struct */
+ struct xe_device *xe;
+
+ /**
+ * @gt: pointer to the gt that owns the submission-side of PXP
+ * (VDBOX, KCR and GSC)
+ */
+ struct xe_gt *gt;
+};
+
+#endif /* __XE_PXP_TYPES_H__ */
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 02/12] drm/xe/pxp: Allocate PXP execution resources
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
2024-11-20 23:43 ` [PATCH v3 01/12] drm/xe/pxp: Initialize PXP structure and KCR reg Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-06 2:10 ` John Harrison
2024-12-06 23:49 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 03/12] drm/xe/pxp: Add VCS inline termination support Daniele Ceraolo Spurio
` (16 subsequent siblings)
18 siblings, 2 replies; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, Matthew Brost, Thomas Hellström
PXP requires submissions to the HW for the following operations
1) Key invalidation, done via the VCS engine
2) Communication with the GSC FW for session management, done via the
GSCCS.
Key invalidation submissions are serialized (only 1 termination can be
serviced at a given time) and done via GGTT, so we can allocate a simple
BO and a kernel queue for it.
Submissions for session management are tied to a PXP client (identified
by a unique host_session_id); from the GSC POV this is a user-accessible
construct, so all related submission must be done via PPGTT. The driver
does not currently support PPGTT submission from within the kernel, so
to add this support, the following changes have been included:
- a new type of kernel-owned VM (marked as GSC), required to ensure we
don't use fault mode on the engine and to mark the different lock
usage with lockdep.
- a new function to map a BO into a VM from within the kernel.
v2: improve comments and function name, remove unneeded include (John)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h | 7 +
drivers/gpu/drm/xe/xe_exec_queue.c | 3 +
drivers/gpu/drm/xe/xe_pxp.c | 23 +-
drivers/gpu/drm/xe/xe_pxp_submit.c | 200 ++++++++++++++++++
drivers/gpu/drm/xe/xe_pxp_submit.h | 14 ++
drivers/gpu/drm/xe/xe_pxp_types.h | 48 +++++
drivers/gpu/drm/xe/xe_vm.c | 119 ++++++++++-
drivers/gpu/drm/xe/xe_vm.h | 6 +
drivers/gpu/drm/xe/xe_vm_types.h | 1 +
10 files changed, 411 insertions(+), 11 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_pxp_submit.c
create mode 100644 drivers/gpu/drm/xe/xe_pxp_submit.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 3c0bd3c814de..126c8f1ab673 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -87,6 +87,7 @@ xe-y += xe_bb.o \
xe_pt.o \
xe_pt_walk.o \
xe_pxp.o \
+ xe_pxp_submit.o \
xe_query.o \
xe_range_fence.o \
xe_reg_sr.o \
diff --git a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
index 57520809e48d..f3c4cf10ba20 100644
--- a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
+++ b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
@@ -6,6 +6,7 @@
#ifndef _ABI_GSC_PXP_COMMANDS_ABI_H
#define _ABI_GSC_PXP_COMMANDS_ABI_H
+#include <linux/sizes.h>
#include <linux/types.h>
/* Heci client ID for PXP commands */
@@ -13,6 +14,12 @@
#define PXP_APIVER(x, y) (((x) & 0xFFFF) << 16 | ((y) & 0xFFFF))
+/*
+ * A PXP sub-section in an HECI packet can be up to 64K big in each direction.
+ * This does not include the top-level GSC header.
+ */
+#define PXP_MAX_PACKET_SIZE SZ_64K
+
/*
* there are a lot of status codes for PXP, but we only define the cross-API
* common ones that we actually can handle in the kernel driver. Other failure
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index aab9e561153d..60418debc1ec 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -150,6 +150,9 @@ struct xe_exec_queue *xe_exec_queue_create(struct xe_device *xe, struct xe_vm *v
struct xe_exec_queue *q;
int err;
+ /* VMs for GSCCS queues (and only those) must have the XE_VM_FLAG_GSC flag */
+ xe_assert(xe, !vm || (!!(vm->flags & XE_VM_FLAG_GSC) == !!(hwe->engine_id == XE_HW_ENGINE_GSCCS0)));
+
q = __xe_exec_queue_alloc(xe, vm, logical_mask, width, hwe, flags,
extensions);
if (IS_ERR(q))
diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
index 1a4d12d37d96..89d71a69cdff 100644
--- a/drivers/gpu/drm/xe/xe_pxp.c
+++ b/drivers/gpu/drm/xe/xe_pxp.c
@@ -12,6 +12,7 @@
#include "xe_gt.h"
#include "xe_gt_types.h"
#include "xe_mmio.h"
+#include "xe_pxp_submit.h"
#include "xe_pxp_types.h"
#include "xe_uc_fw.h"
#include "regs/xe_pxp_regs.h"
@@ -50,6 +51,20 @@ static int kcr_pxp_enable(const struct xe_pxp *pxp)
return kcr_pxp_set_status(pxp, true);
}
+static int kcr_pxp_disable(const struct xe_pxp *pxp)
+{
+ return kcr_pxp_set_status(pxp, false);
+}
+
+static void pxp_fini(void *arg)
+{
+ struct xe_pxp *pxp = arg;
+
+ xe_pxp_destroy_execution_resources(pxp);
+
+ /* no need to explicitly disable KCR since we're going to do an FLR */
+}
+
/**
* xe_pxp_init - initialize PXP support
* @xe: the xe_device structure
@@ -97,10 +112,16 @@ int xe_pxp_init(struct xe_device *xe)
if (err)
goto out_free;
+ err = xe_pxp_allocate_execution_resources(pxp);
+ if (err)
+ goto out_kcr_disable;
+
xe->pxp = pxp;
- return 0;
+ return devm_add_action_or_reset(xe->drm.dev, pxp_fini, pxp);
+out_kcr_disable:
+ kcr_pxp_disable(pxp);
out_free:
drmm_kfree(&xe->drm, pxp);
return err;
diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.c b/drivers/gpu/drm/xe/xe_pxp_submit.c
new file mode 100644
index 000000000000..196c0e5bbb17
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_pxp_submit.c
@@ -0,0 +1,200 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright(c) 2024 Intel Corporation.
+ */
+
+#include "xe_pxp_submit.h"
+
+#include <uapi/drm/xe_drm.h>
+
+#include "xe_device_types.h"
+#include "xe_bo.h"
+#include "xe_exec_queue.h"
+#include "xe_gsc_submit.h"
+#include "xe_gt.h"
+#include "xe_pxp_types.h"
+#include "xe_vm.h"
+
+/*
+ * The VCS is used for kernel-owned GGTT submissions to issue key termination.
+ * Terminations are serialized, so we only need a single queue and a single
+ * batch.
+ */
+static int allocate_vcs_execution_resources(struct xe_pxp *pxp)
+{
+ struct xe_gt *gt = pxp->gt;
+ struct xe_device *xe = pxp->xe;
+ struct xe_tile *tile = gt_to_tile(gt);
+ struct xe_hw_engine *hwe;
+ struct xe_exec_queue *q;
+ struct xe_bo *bo;
+ int err;
+
+ hwe = xe_gt_hw_engine(gt, XE_ENGINE_CLASS_VIDEO_DECODE, 0, true);
+ if (!hwe)
+ return -ENODEV;
+
+ q = xe_exec_queue_create(xe, NULL, BIT(hwe->logical_instance), 1, hwe,
+ EXEC_QUEUE_FLAG_KERNEL | EXEC_QUEUE_FLAG_PERMANENT, 0);
+ if (IS_ERR(q))
+ return PTR_ERR(q);
+
+ /*
+ * Each termination is 16 DWORDS, so 4K is enough to contain a
+ * termination for each sessions.
+ */
+ bo = xe_bo_create_pin_map(xe, tile, 0, SZ_4K, ttm_bo_type_kernel,
+ XE_BO_FLAG_SYSTEM | XE_BO_FLAG_PINNED | XE_BO_FLAG_GGTT);
+ if (IS_ERR(bo)) {
+ err = PTR_ERR(bo);
+ goto out_queue;
+ }
+
+ pxp->vcs_exec.q = q;
+ pxp->vcs_exec.bo = bo;
+
+ return 0;
+
+out_queue:
+ xe_exec_queue_put(q);
+ return err;
+}
+
+static void destroy_vcs_execution_resources(struct xe_pxp *pxp)
+{
+ if (pxp->vcs_exec.bo)
+ xe_bo_unpin_map_no_vm(pxp->vcs_exec.bo);
+
+ if (pxp->vcs_exec.q)
+ xe_exec_queue_put(pxp->vcs_exec.q);
+}
+
+#define PXP_BB_SIZE XE_PAGE_SIZE
+static int allocate_gsc_client_resources(struct xe_gt *gt,
+ struct xe_pxp_gsc_client_resources *gsc_res,
+ size_t inout_size)
+{
+ struct xe_tile *tile = gt_to_tile(gt);
+ struct xe_device *xe = tile_to_xe(tile);
+ struct xe_hw_engine *hwe;
+ struct xe_vm *vm;
+ struct xe_bo *bo;
+ struct xe_exec_queue *q;
+ struct dma_fence *fence;
+ long timeout;
+ int err = 0;
+
+ hwe = xe_gt_hw_engine(gt, XE_ENGINE_CLASS_OTHER, 0, true);
+
+ /* we shouldn't reach here if the GSC engine is not available */
+ xe_assert(xe, hwe);
+
+ /* PXP instructions must be issued from PPGTT */
+ vm = xe_vm_create(xe, XE_VM_FLAG_GSC);
+ if (IS_ERR(vm))
+ return PTR_ERR(vm);
+
+ /* We allocate a single object for the batch and the in/out memory */
+ xe_vm_lock(vm, false);
+ bo = xe_bo_create_pin_map(xe, tile, vm, PXP_BB_SIZE + inout_size * 2,
+ ttm_bo_type_kernel,
+ XE_BO_FLAG_SYSTEM | XE_BO_FLAG_PINNED | XE_BO_FLAG_NEEDS_UC);
+ xe_vm_unlock(vm);
+ if (IS_ERR(bo)) {
+ err = PTR_ERR(bo);
+ goto vm_out;
+ }
+
+ fence = xe_vm_bind_kernel_bo(vm, bo, NULL, 0, XE_CACHE_WB);
+ if (IS_ERR(fence)) {
+ err = PTR_ERR(fence);
+ goto bo_out;
+ }
+
+ timeout = dma_fence_wait_timeout(fence, false, HZ);
+ dma_fence_put(fence);
+ if (timeout <= 0) {
+ err = timeout ?: -ETIME;
+ goto bo_out;
+ }
+
+ q = xe_exec_queue_create(xe, vm, BIT(hwe->logical_instance), 1, hwe,
+ EXEC_QUEUE_FLAG_KERNEL |
+ EXEC_QUEUE_FLAG_PERMANENT, 0);
+ if (IS_ERR(q)) {
+ err = PTR_ERR(q);
+ goto bo_out;
+ }
+
+ gsc_res->vm = vm;
+ gsc_res->bo = bo;
+ gsc_res->inout_size = inout_size;
+ gsc_res->batch = IOSYS_MAP_INIT_OFFSET(&bo->vmap, 0);
+ gsc_res->msg_in = IOSYS_MAP_INIT_OFFSET(&bo->vmap, PXP_BB_SIZE);
+ gsc_res->msg_out = IOSYS_MAP_INIT_OFFSET(&bo->vmap, PXP_BB_SIZE + inout_size);
+ gsc_res->q = q;
+
+ /* initialize host-session-handle (for all Xe-to-gsc-firmware PXP cmds) */
+ gsc_res->host_session_handle = xe_gsc_create_host_session_id();
+
+ return 0;
+
+bo_out:
+ xe_bo_unpin_map_no_vm(bo);
+vm_out:
+ xe_vm_close_and_put(vm);
+
+ return err;
+}
+
+static void destroy_gsc_client_resources(struct xe_pxp_gsc_client_resources *gsc_res)
+{
+ if (!gsc_res->q)
+ return;
+
+ xe_exec_queue_put(gsc_res->q);
+ xe_bo_unpin_map_no_vm(gsc_res->bo);
+ xe_vm_close_and_put(gsc_res->vm);
+}
+
+/**
+ * xe_pxp_allocate_execution_resources - Allocate PXP submission objects
+ * @pxp: the xe_pxp structure
+ *
+ * Allocates exec_queues objects for VCS and GSCCS submission. The GSCCS
+ * submissions are done via PPGTT, so this function allocates a VM for it and
+ * maps the object into it.
+ *
+ * Returns 0 if the allocation and mapping is successful, an errno value
+ * otherwise.
+ */
+int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp)
+{
+ int err;
+
+ err = allocate_vcs_execution_resources(pxp);
+ if (err)
+ return err;
+
+ /*
+ * PXP commands can require a lot of BO space (see PXP_MAX_PACKET_SIZE),
+ * but we currently only support a subset of commands that are small
+ * (< 20 dwords), so a single page is enough for now.
+ */
+ err = allocate_gsc_client_resources(pxp->gt, &pxp->gsc_res, XE_PAGE_SIZE);
+ if (err)
+ goto destroy_vcs_context;
+
+ return 0;
+
+destroy_vcs_context:
+ destroy_vcs_execution_resources(pxp);
+ return err;
+}
+
+void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp)
+{
+ destroy_gsc_client_resources(&pxp->gsc_res);
+ destroy_vcs_execution_resources(pxp);
+}
+
diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.h b/drivers/gpu/drm/xe/xe_pxp_submit.h
new file mode 100644
index 000000000000..fd21ac935be1
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_pxp_submit.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright(c) 2024, Intel Corporation. All rights reserved.
+ */
+
+#ifndef __XE_PXP_SUBMIT_H__
+#define __XE_PXP_SUBMIT_H__
+
+struct xe_pxp;
+
+int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp);
+void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp);
+
+#endif /* __XE_PXP_SUBMIT_H__ */
diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
index 4639cf49d267..25db23180a30 100644
--- a/drivers/gpu/drm/xe/xe_pxp_types.h
+++ b/drivers/gpu/drm/xe/xe_pxp_types.h
@@ -6,8 +6,45 @@
#ifndef __XE_PXP_TYPES_H__
#define __XE_PXP_TYPES_H__
+#include <linux/iosys-map.h>
+#include <linux/types.h>
+
+struct xe_bo;
+struct xe_exec_queue;
struct xe_device;
struct xe_gt;
+struct xe_vm;
+
+/**
+ * struct xe_pxp_gsc_client_resources - resources for GSC submission by a PXP
+ * client. The GSC FW supports multiple GSC client active at the same time.
+ */
+struct xe_pxp_gsc_client_resources {
+ /**
+ * @host_session_handle: handle used to identify the client in messages
+ * sent to the GSC firmware.
+ */
+ u64 host_session_handle;
+ /** @vm: VM used for PXP submissions to the GSCCS */
+ struct xe_vm *vm;
+ /** @q: GSCCS exec queue for PXP submissions */
+ struct xe_exec_queue *q;
+
+ /**
+ * @bo: BO used for submissions to the GSCCS and GSC FW. It includes
+ * space for the GSCCS batch and the input/output buffers read/written
+ * by the FW
+ */
+ struct xe_bo *bo;
+ /** @inout_size: size of each of the msg_in/out sections individually */
+ u32 inout_size;
+ /** @batch: iosys_map to the batch memory within the BO */
+ struct iosys_map batch;
+ /** @msg_in: iosys_map to the input memory within the BO */
+ struct iosys_map msg_in;
+ /** @msg_out: iosys_map to the output memory within the BO */
+ struct iosys_map msg_out;
+};
/**
* struct xe_pxp - pxp state
@@ -21,6 +58,17 @@ struct xe_pxp {
* (VDBOX, KCR and GSC)
*/
struct xe_gt *gt;
+
+ /** @vcs_exec: kernel-owned objects for PXP submissions to the VCS */
+ struct {
+ /** @vcs_exec.q: kernel-owned VCS exec queue used for PXP terminations */
+ struct xe_exec_queue *q;
+ /** @vcs_exec.bo: BO used for submissions to the VCS */
+ struct xe_bo *bo;
+ } vcs_exec;
+
+ /** @gsc_exec: kernel-owned objects for PXP submissions to the GSCCS */
+ struct xe_pxp_gsc_client_resources gsc_res;
};
#endif /* __XE_PXP_TYPES_H__ */
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 1d7faeba157e..eb95f654a88f 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1382,6 +1382,12 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
struct xe_tile *tile;
u8 id;
+ /*
+ * Since the GSCCS is not user-accessible, we don't expect a GSC VM to
+ * ever be in faulting mode.
+ */
+ xe_assert(xe, !((flags & XE_VM_FLAG_GSC) && (flags & XE_VM_FLAG_FAULT_MODE)));
+
vm = kzalloc(sizeof(*vm), GFP_KERNEL);
if (!vm)
return ERR_PTR(-ENOMEM);
@@ -1392,7 +1398,21 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
vm->flags = flags;
- init_rwsem(&vm->lock);
+ /**
+ * GSC VMs are kernel-owned, only used for PXP ops and can sometimes be
+ * manipulated under the PXP mutex. However, the PXP mutex can be taken
+ * under a user-VM lock when the PXP session is started at exec_queue
+ * creation time. Those are different VMs and therefore there is no risk
+ * of deadlock, but we need to tell lockdep that this is the case or it
+ * will print a warning.
+ */
+ if (flags & XE_VM_FLAG_GSC) {
+ static struct lock_class_key gsc_vm_key;
+
+ __init_rwsem(&vm->lock, "gsc_vm", &gsc_vm_key);
+ } else {
+ init_rwsem(&vm->lock);
+ }
mutex_init(&vm->snap_mutex);
INIT_LIST_HEAD(&vm->rebind_list);
@@ -2666,11 +2686,10 @@ static void vm_bind_ioctl_ops_fini(struct xe_vm *vm, struct xe_vma_ops *vops,
for (i = 0; i < vops->num_syncs; i++)
xe_sync_entry_signal(vops->syncs + i, fence);
xe_exec_queue_last_fence_set(wait_exec_queue, vm, fence);
- dma_fence_put(fence);
}
-static int vm_bind_ioctl_ops_execute(struct xe_vm *vm,
- struct xe_vma_ops *vops)
+static struct dma_fence *vm_bind_ioctl_ops_execute(struct xe_vm *vm,
+ struct xe_vma_ops *vops)
{
struct drm_exec exec;
struct dma_fence *fence;
@@ -2683,21 +2702,21 @@ static int vm_bind_ioctl_ops_execute(struct xe_vm *vm,
drm_exec_until_all_locked(&exec) {
err = vm_bind_ioctl_ops_lock_and_prep(&exec, vm, vops);
drm_exec_retry_on_contention(&exec);
- if (err)
+ if (err) {
+ fence = ERR_PTR(err);
goto unlock;
+ }
fence = ops_execute(vm, vops);
- if (IS_ERR(fence)) {
- err = PTR_ERR(fence);
+ if (IS_ERR(fence))
goto unlock;
- }
vm_bind_ioctl_ops_fini(vm, vops, fence);
}
unlock:
drm_exec_fini(&exec);
- return err;
+ return fence;
}
ALLOW_ERROR_INJECTION(vm_bind_ioctl_ops_execute, ERRNO);
@@ -2929,6 +2948,7 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
struct xe_sync_entry *syncs = NULL;
struct drm_xe_vm_bind_op *bind_ops;
struct xe_vma_ops vops;
+ struct dma_fence *fence;
int err;
int i;
@@ -3093,7 +3113,11 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
if (err)
goto unwind_ops;
- err = vm_bind_ioctl_ops_execute(vm, &vops);
+ fence = vm_bind_ioctl_ops_execute(vm, &vops);
+ if (IS_ERR(fence))
+ err = PTR_ERR(fence);
+ else
+ dma_fence_put(fence);
unwind_ops:
if (err && err != -ENODATA)
@@ -3127,6 +3151,81 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
return err;
}
+/**
+ * xe_vm_bind_bo - bind a kernel BO to a VM
+ * @vm: VM to bind the BO to
+ * @bo: BO to bind
+ * @q: exec queue to use for the bind (optional)
+ * @addr: address at which to bind the BO
+ * @cache_lvl: PAT cache level to use
+ *
+ * Execute a VM bind map operation on a kernel-owned BO to bind it into a
+ * kernel-owned VM.
+ *
+ * Returns a dma_fence to track the binding completion if the job to do so was
+ * successfully submitted, an error pointer otherwise.
+ */
+struct dma_fence *xe_vm_bind_kernel_bo(struct xe_vm *vm, struct xe_bo *bo,
+ struct xe_exec_queue *q, u64 addr,
+ enum xe_cache_level cache_lvl)
+{
+ struct xe_vma_ops vops;
+ struct drm_gpuva_ops *ops = NULL;
+ struct dma_fence *fence;
+ int err;
+
+ xe_bo_get(bo);
+ xe_vm_get(vm);
+ if (q)
+ xe_exec_queue_get(q);
+
+ down_write(&vm->lock);
+
+ xe_vma_ops_init(&vops, vm, q, NULL, 0);
+
+ ops = vm_bind_ioctl_ops_create(vm, bo, 0, addr, bo->size,
+ DRM_XE_VM_BIND_OP_MAP, 0, 0,
+ vm->xe->pat.idx[cache_lvl]);
+ if (IS_ERR(ops)) {
+ err = PTR_ERR(ops);
+ goto release_vm_lock;
+ }
+
+ err = vm_bind_ioctl_ops_parse(vm, ops, &vops);
+ if (err)
+ goto release_vm_lock;
+
+ xe_assert(vm->xe, !list_empty(&vops.list));
+
+ err = xe_vma_ops_alloc(&vops, false);
+ if (err)
+ goto unwind_ops;
+
+ fence = vm_bind_ioctl_ops_execute(vm, &vops);
+ if (IS_ERR(fence))
+ err = PTR_ERR(fence);
+
+unwind_ops:
+ if (err && err != -ENODATA)
+ vm_bind_ioctl_ops_unwind(vm, &ops, 1);
+
+ xe_vma_ops_fini(&vops);
+ drm_gpuva_ops_free(&vm->gpuvm, ops);
+
+release_vm_lock:
+ up_write(&vm->lock);
+
+ if (q)
+ xe_exec_queue_put(q);
+ xe_vm_put(vm);
+ xe_bo_put(bo);
+
+ if (err)
+ fence = ERR_PTR(err);
+
+ return fence;
+}
+
/**
* xe_vm_lock() - Lock the vm's dma_resv object
* @vm: The struct xe_vm whose lock is to be locked
diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
index 23adb7442881..0a2fa6c0815b 100644
--- a/drivers/gpu/drm/xe/xe_vm.h
+++ b/drivers/gpu/drm/xe/xe_vm.h
@@ -18,6 +18,8 @@ struct drm_file;
struct ttm_buffer_object;
+struct dma_fence;
+
struct xe_exec_queue;
struct xe_file;
struct xe_sync_entry;
@@ -247,6 +249,10 @@ int xe_vm_lock_vma(struct drm_exec *exec, struct xe_vma *vma);
int xe_vm_validate_rebind(struct xe_vm *vm, struct drm_exec *exec,
unsigned int num_fences);
+struct dma_fence *xe_vm_bind_kernel_bo(struct xe_vm *vm, struct xe_bo *bo,
+ struct xe_exec_queue *q, u64 addr,
+ enum xe_cache_level cache_lvl);
+
/**
* xe_vm_resv() - Return's the vm's reservation object
* @vm: The vm
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index 7f9a303e51d8..52467b9b5348 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -164,6 +164,7 @@ struct xe_vm {
#define XE_VM_FLAG_BANNED BIT(5)
#define XE_VM_FLAG_TILE_ID(flags) FIELD_GET(GENMASK(7, 6), flags)
#define XE_VM_FLAG_SET_TILE_ID(tile) FIELD_PREP(GENMASK(7, 6), (tile)->id)
+#define XE_VM_FLAG_GSC BIT(8)
unsigned long flags;
/** @composite_fence_ctx: context composite fence */
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 03/12] drm/xe/pxp: Add VCS inline termination support
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
2024-11-20 23:43 ` [PATCH v3 01/12] drm/xe/pxp: Initialize PXP structure and KCR reg Daniele Ceraolo Spurio
2024-11-20 23:43 ` [PATCH v3 02/12] drm/xe/pxp: Allocate PXP execution resources Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-06 20:27 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 04/12] drm/xe/pxp: Add GSC session invalidation support Daniele Ceraolo Spurio
` (15 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, John Harrison
The key termination is done with a specific submission to the VCS
engine.
Note that this patch is meant to be squashed with the follow-up patches
that implement the other pieces of the termination flow. It is separate
for now for ease of review.
v2: clean up defines and command emission code. (John)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
.../gpu/drm/xe/instructions/xe_instr_defs.h | 1 +
.../gpu/drm/xe/instructions/xe_mfx_commands.h | 28 +++++
.../gpu/drm/xe/instructions/xe_mi_commands.h | 5 +
drivers/gpu/drm/xe/xe_lrc.h | 3 +-
drivers/gpu/drm/xe/xe_pxp_submit.c | 113 ++++++++++++++++++
drivers/gpu/drm/xe/xe_pxp_submit.h | 4 +
drivers/gpu/drm/xe/xe_ring_ops.c | 4 +-
7 files changed, 155 insertions(+), 3 deletions(-)
create mode 100644 drivers/gpu/drm/xe/instructions/xe_mfx_commands.h
diff --git a/drivers/gpu/drm/xe/instructions/xe_instr_defs.h b/drivers/gpu/drm/xe/instructions/xe_instr_defs.h
index fd2ce7ace510..e559969468c4 100644
--- a/drivers/gpu/drm/xe/instructions/xe_instr_defs.h
+++ b/drivers/gpu/drm/xe/instructions/xe_instr_defs.h
@@ -16,6 +16,7 @@
#define XE_INSTR_CMD_TYPE GENMASK(31, 29)
#define XE_INSTR_MI REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x0)
#define XE_INSTR_GSC REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x2)
+#define XE_INSTR_VIDEOPIPE REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x3)
#define XE_INSTR_GFXPIPE REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x3)
#define XE_INSTR_GFX_STATE REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x4)
diff --git a/drivers/gpu/drm/xe/instructions/xe_mfx_commands.h b/drivers/gpu/drm/xe/instructions/xe_mfx_commands.h
new file mode 100644
index 000000000000..3c0c97f78e90
--- /dev/null
+++ b/drivers/gpu/drm/xe/instructions/xe_mfx_commands.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef _XE_MFX_COMMANDS_H_
+#define _XE_MFX_COMMANDS_H_
+
+#include "instructions/xe_instr_defs.h"
+
+#define MFX_CMD_SUBTYPE REG_GENMASK(28, 27) /* A.K.A cmd pipe */
+#define MFX_CMD_OPCODE REG_GENMASK(26, 24)
+#define MFX_CMD_SUB_OPCODE REG_GENMASK(23, 16)
+#define MFX_FLAGS_AND_LEN REG_GENMASK(15, 0)
+
+#define XE_MFX_INSTR(subtype, op, sub_op) \
+ (XE_INSTR_VIDEOPIPE | \
+ REG_FIELD_PREP(MFX_CMD_SUBTYPE, subtype) | \
+ REG_FIELD_PREP(MFX_CMD_OPCODE, op) | \
+ REG_FIELD_PREP(MFX_CMD_SUB_OPCODE, sub_op))
+
+#define MFX_WAIT XE_MFX_INSTR(1, 0, 0)
+#define MFX_WAIT_DW0_PXP_SYNC_CONTROL_FLAG REG_BIT(9)
+#define MFX_WAIT_DW0_MFX_SYNC_CONTROL_FLAG REG_BIT(8)
+
+#define CRYPTO_KEY_EXCHANGE XE_MFX_INSTR(2, 6, 9)
+
+#endif
diff --git a/drivers/gpu/drm/xe/instructions/xe_mi_commands.h b/drivers/gpu/drm/xe/instructions/xe_mi_commands.h
index 10ec2920d31b..167fb0f742de 100644
--- a/drivers/gpu/drm/xe/instructions/xe_mi_commands.h
+++ b/drivers/gpu/drm/xe/instructions/xe_mi_commands.h
@@ -48,6 +48,7 @@
#define MI_LRI_LEN(x) (((x) & 0xff) + 1)
#define MI_FLUSH_DW __MI_INSTR(0x26)
+#define MI_FLUSH_DW_PROTECTED_MEM_EN REG_BIT(22)
#define MI_FLUSH_DW_STORE_INDEX REG_BIT(21)
#define MI_INVALIDATE_TLB REG_BIT(18)
#define MI_FLUSH_DW_CCS REG_BIT(16)
@@ -66,4 +67,8 @@
#define MI_BATCH_BUFFER_START __MI_INSTR(0x31)
+#define MI_SET_APPID __MI_INSTR(0x0e)
+#define MI_SET_APPID_SESSION_ID_MASK REG_GENMASK(6, 0)
+#define MI_SET_APPID_SESSION_ID(x) REG_FIELD_PREP(MI_SET_APPID_SESSION_ID_MASK, x)
+
#endif
diff --git a/drivers/gpu/drm/xe/xe_lrc.h b/drivers/gpu/drm/xe/xe_lrc.h
index b459dcab8787..9bc86c1fc16f 100644
--- a/drivers/gpu/drm/xe/xe_lrc.h
+++ b/drivers/gpu/drm/xe/xe_lrc.h
@@ -39,7 +39,8 @@ struct xe_lrc_snapshot {
u32 ctx_job_timestamp;
};
-#define LRC_PPHWSP_SCRATCH_ADDR (0x34 * 4)
+#define LRC_PPHWSP_FLUSH_INVAL_SCRATCH_ADDR (0x34 * 4)
+#define LRC_PPHWSP_PXP_INVAL_SCRATCH_ADDR (0x40 * 4)
struct xe_lrc *xe_lrc_create(struct xe_hw_engine *hwe, struct xe_vm *vm,
u32 ring_size);
diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.c b/drivers/gpu/drm/xe/xe_pxp_submit.c
index 196c0e5bbb17..326baea679a3 100644
--- a/drivers/gpu/drm/xe/xe_pxp_submit.c
+++ b/drivers/gpu/drm/xe/xe_pxp_submit.c
@@ -5,15 +5,21 @@
#include "xe_pxp_submit.h"
+#include <linux/delay.h>
#include <uapi/drm/xe_drm.h>
#include "xe_device_types.h"
+#include "xe_bb.h"
#include "xe_bo.h"
#include "xe_exec_queue.h"
#include "xe_gsc_submit.h"
#include "xe_gt.h"
+#include "xe_lrc.h"
#include "xe_pxp_types.h"
+#include "xe_sched_job.h"
#include "xe_vm.h"
+#include "instructions/xe_mfx_commands.h"
+#include "instructions/xe_mi_commands.h"
/*
* The VCS is used for kernel-owned GGTT submissions to issue key termination.
@@ -198,3 +204,110 @@ void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp)
destroy_vcs_execution_resources(pxp);
}
+#define emit_cmd(xe_, map_, offset_, val_) \
+ xe_map_wr(xe_, map_, (offset_) * sizeof(u32), u32, val_)
+
+/* stall until prior PXP and MFX/HCP/HUC objects are completed */
+#define MFX_WAIT_PXP (MFX_WAIT | \
+ MFX_WAIT_DW0_PXP_SYNC_CONTROL_FLAG | \
+ MFX_WAIT_DW0_MFX_SYNC_CONTROL_FLAG)
+static u32 pxp_emit_wait(struct xe_device *xe, struct iosys_map *batch, u32 offset)
+{
+ /* wait for cmds to go through */
+ emit_cmd(xe, batch, offset++, MFX_WAIT_PXP);
+ emit_cmd(xe, batch, offset++, 0);
+
+ return offset;
+}
+
+static u32 pxp_emit_session_selection(struct xe_device *xe, struct iosys_map *batch,
+ u32 offset, u32 idx)
+{
+ offset = pxp_emit_wait(xe, batch, offset);
+
+ /* pxp off */
+ emit_cmd(xe, batch, offset++, MI_FLUSH_DW | MI_FLUSH_IMM_DW);
+ emit_cmd(xe, batch, offset++, 0);
+ emit_cmd(xe, batch, offset++, 0);
+ emit_cmd(xe, batch, offset++, 0);
+
+ /* select session */
+ emit_cmd(xe, batch, offset++, MI_SET_APPID | MI_SET_APPID_SESSION_ID(idx));
+ emit_cmd(xe, batch, offset++, 0);
+
+ offset = pxp_emit_wait(xe, batch, offset);
+
+ /* pxp on */
+ emit_cmd(xe, batch, offset++, MI_FLUSH_DW |
+ MI_FLUSH_DW_PROTECTED_MEM_EN |
+ MI_FLUSH_DW_OP_STOREDW | MI_FLUSH_DW_STORE_INDEX |
+ MI_FLUSH_IMM_DW);
+ emit_cmd(xe, batch, offset++, LRC_PPHWSP_PXP_INVAL_SCRATCH_ADDR |
+ MI_FLUSH_DW_USE_GTT);
+ emit_cmd(xe, batch, offset++, 0);
+ emit_cmd(xe, batch, offset++, 0);
+
+ offset = pxp_emit_wait(xe, batch, offset);
+
+ return offset;
+}
+
+static u32 pxp_emit_inline_termination(struct xe_device *xe,
+ struct iosys_map *batch, u32 offset)
+{
+ /* session inline termination */
+ emit_cmd(xe, batch, offset++, CRYPTO_KEY_EXCHANGE);
+ emit_cmd(xe, batch, offset++, 0);
+
+ return offset;
+}
+
+static u32 pxp_emit_session_termination(struct xe_device *xe, struct iosys_map *batch,
+ u32 offset, u32 idx)
+{
+ offset = pxp_emit_session_selection(xe, batch, offset, idx);
+ offset = pxp_emit_inline_termination(xe, batch, offset);
+
+ return offset;
+}
+
+/**
+ * xe_pxp_submit_session_termination - submits a PXP inline termination
+ * @pxp: the xe_pxp structure
+ * @id: the session to terminate
+ *
+ * Emit an inline termination via the VCS engine to terminate a session.
+ *
+ * Returns 0 if the submission is successful, an errno value otherwise.
+ */
+int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id)
+{
+ struct xe_sched_job *job;
+ struct dma_fence *fence;
+ long timeout;
+ u32 offset = 0;
+ u64 addr = xe_bo_ggtt_addr(pxp->vcs_exec.bo);
+
+ offset = pxp_emit_session_termination(pxp->xe, &pxp->vcs_exec.bo->vmap, offset, id);
+ offset = pxp_emit_wait(pxp->xe, &pxp->vcs_exec.bo->vmap, offset);
+ emit_cmd(pxp->xe, &pxp->vcs_exec.bo->vmap, offset, MI_BATCH_BUFFER_END);
+
+ job = xe_sched_job_create(pxp->vcs_exec.q, &addr);
+ if (IS_ERR(job))
+ return PTR_ERR(job);
+
+ xe_sched_job_arm(job);
+ fence = dma_fence_get(&job->drm.s_fence->finished);
+ xe_sched_job_push(job);
+
+ timeout = dma_fence_wait_timeout(fence, false, HZ);
+
+ dma_fence_put(fence);
+
+ if (!timeout)
+ return -ETIMEDOUT;
+ else if (timeout < 0)
+ return timeout;
+
+ return 0;
+}
diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.h b/drivers/gpu/drm/xe/xe_pxp_submit.h
index fd21ac935be1..4ee8c0acfed9 100644
--- a/drivers/gpu/drm/xe/xe_pxp_submit.h
+++ b/drivers/gpu/drm/xe/xe_pxp_submit.h
@@ -6,9 +6,13 @@
#ifndef __XE_PXP_SUBMIT_H__
#define __XE_PXP_SUBMIT_H__
+#include <linux/types.h>
+
struct xe_pxp;
int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp);
void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp);
+int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id);
+
#endif /* __XE_PXP_SUBMIT_H__ */
diff --git a/drivers/gpu/drm/xe/xe_ring_ops.c b/drivers/gpu/drm/xe/xe_ring_ops.c
index 0be4f489d3e1..a4b5a0f68a32 100644
--- a/drivers/gpu/drm/xe/xe_ring_ops.c
+++ b/drivers/gpu/drm/xe/xe_ring_ops.c
@@ -118,7 +118,7 @@ static int emit_flush_invalidate(u32 flag, u32 *dw, int i)
dw[i++] |= MI_INVALIDATE_TLB | MI_FLUSH_DW_OP_STOREDW | MI_FLUSH_IMM_DW |
MI_FLUSH_DW_STORE_INDEX;
- dw[i++] = LRC_PPHWSP_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT;
+ dw[i++] = LRC_PPHWSP_FLUSH_INVAL_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT;
dw[i++] = 0;
dw[i++] = ~0U;
@@ -156,7 +156,7 @@ static int emit_pipe_invalidate(u32 mask_flags, bool invalidate_tlb, u32 *dw,
flags &= ~mask_flags;
- return emit_pipe_control(dw, i, 0, flags, LRC_PPHWSP_SCRATCH_ADDR, 0);
+ return emit_pipe_control(dw, i, 0, flags, LRC_PPHWSP_FLUSH_INVAL_SCRATCH_ADDR, 0);
}
static int emit_store_imm_ppgtt_posted(u64 addr, u64 value,
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 04/12] drm/xe/pxp: Add GSC session invalidation support
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (2 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 03/12] drm/xe/pxp: Add VCS inline termination support Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-06 20:38 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 05/12] drm/xe/pxp: Handle the PXP termination interrupt Daniele Ceraolo Spurio
` (14 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, John Harrison
After a session is terminated, we need to inform the GSC so that it can
clean up its side of the allocation. This is done by sending an
invalidation command with the session ID.
Note that this patch is meant to be squashed with the follow-up patches
that implement the other pieces of the termination flow. It is separate
for now for ease of review.
v2: Better comment and error messages (John)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h | 13 +
drivers/gpu/drm/xe/xe_pxp_submit.c | 228 ++++++++++++++++++
drivers/gpu/drm/xe/xe_pxp_submit.h | 3 +
3 files changed, 244 insertions(+)
diff --git a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
index f3c4cf10ba20..f0da65ccdda2 100644
--- a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
+++ b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
@@ -31,6 +31,7 @@ enum pxp_status {
PXP_STATUS_NOT_READY = 0x100e,
PXP_STATUS_PLATFCONFIG_KF1_NOVERIF = 0x101a,
PXP_STATUS_PLATFCONFIG_KF1_BAD = 0x101f,
+ PXP_STATUS_PLATFCONFIG_FIXED_KF1_NOT_SUPPORTED = 0x1037,
PXP_STATUS_OP_NOT_PERMITTED = 0x4013
};
@@ -49,6 +50,7 @@ struct pxp_cmd_header {
u32 buffer_len;
} __packed;
+#define PXP43_CMDID_INVALIDATE_STREAM_KEY 0x00000007
#define PXP43_CMDID_NEW_HUC_AUTH 0x0000003F /* MTL+ */
/* PXP-Input-Packet: HUC Auth-only */
@@ -63,4 +65,15 @@ struct pxp43_huc_auth_out {
struct pxp_cmd_header header;
} __packed;
+/* PXP-Input-Packet: Invalidate Stream Key */
+struct pxp43_inv_stream_key_in {
+ struct pxp_cmd_header header;
+ u32 rsvd[3];
+} __packed;
+
+/* PXP-Output-Packet: Invalidate Stream Key */
+struct pxp43_inv_stream_key_out {
+ struct pxp_cmd_header header;
+ u32 rsvd;
+} __packed;
#endif
diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.c b/drivers/gpu/drm/xe/xe_pxp_submit.c
index 326baea679a3..f5f6b18c1054 100644
--- a/drivers/gpu/drm/xe/xe_pxp_submit.c
+++ b/drivers/gpu/drm/xe/xe_pxp_submit.c
@@ -15,9 +15,13 @@
#include "xe_gsc_submit.h"
#include "xe_gt.h"
#include "xe_lrc.h"
+#include "xe_map.h"
#include "xe_pxp_types.h"
#include "xe_sched_job.h"
#include "xe_vm.h"
+#include "abi/gsc_command_header_abi.h"
+#include "abi/gsc_pxp_commands_abi.h"
+#include "instructions/xe_gsc_commands.h"
#include "instructions/xe_mfx_commands.h"
#include "instructions/xe_mi_commands.h"
@@ -311,3 +315,227 @@ int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id)
return 0;
}
+
+static bool
+is_fw_err_platform_config(u32 type)
+{
+ switch (type) {
+ case PXP_STATUS_ERROR_API_VERSION:
+ case PXP_STATUS_PLATFCONFIG_KF1_NOVERIF:
+ case PXP_STATUS_PLATFCONFIG_KF1_BAD:
+ case PXP_STATUS_PLATFCONFIG_FIXED_KF1_NOT_SUPPORTED:
+ return true;
+ default:
+ break;
+ }
+ return false;
+}
+
+static const char *
+fw_err_to_string(u32 type)
+{
+ switch (type) {
+ case PXP_STATUS_ERROR_API_VERSION:
+ return "ERR_API_VERSION";
+ case PXP_STATUS_NOT_READY:
+ return "ERR_NOT_READY";
+ case PXP_STATUS_PLATFCONFIG_KF1_NOVERIF:
+ case PXP_STATUS_PLATFCONFIG_KF1_BAD:
+ case PXP_STATUS_PLATFCONFIG_FIXED_KF1_NOT_SUPPORTED:
+ return "ERR_PLATFORM_CONFIG";
+ default:
+ break;
+ }
+ return NULL;
+}
+
+static int pxp_pkt_submit(struct xe_exec_queue *q, u64 batch_addr)
+{
+ struct xe_gt *gt = q->gt;
+ struct xe_device *xe = gt_to_xe(gt);
+ struct xe_sched_job *job;
+ struct dma_fence *fence;
+ long timeout;
+
+ xe_assert(xe, q->hwe->engine_id == XE_HW_ENGINE_GSCCS0);
+
+ job = xe_sched_job_create(q, &batch_addr);
+ if (IS_ERR(job))
+ return PTR_ERR(job);
+
+ xe_sched_job_arm(job);
+ fence = dma_fence_get(&job->drm.s_fence->finished);
+ xe_sched_job_push(job);
+
+ timeout = dma_fence_wait_timeout(fence, false, HZ);
+ dma_fence_put(fence);
+ if (timeout < 0)
+ return timeout;
+ else if (!timeout)
+ return -ETIME;
+
+ return 0;
+}
+
+static void emit_pxp_heci_cmd(struct xe_device *xe, struct iosys_map *batch,
+ u64 addr_in, u32 size_in, u64 addr_out, u32 size_out)
+{
+ u32 len = 0;
+
+ xe_map_wr(xe, batch, len++ * sizeof(u32), u32, GSC_HECI_CMD_PKT);
+ xe_map_wr(xe, batch, len++ * sizeof(u32), u32, lower_32_bits(addr_in));
+ xe_map_wr(xe, batch, len++ * sizeof(u32), u32, upper_32_bits(addr_in));
+ xe_map_wr(xe, batch, len++ * sizeof(u32), u32, size_in);
+ xe_map_wr(xe, batch, len++ * sizeof(u32), u32, lower_32_bits(addr_out));
+ xe_map_wr(xe, batch, len++ * sizeof(u32), u32, upper_32_bits(addr_out));
+ xe_map_wr(xe, batch, len++ * sizeof(u32), u32, size_out);
+ xe_map_wr(xe, batch, len++ * sizeof(u32), u32, 0);
+ xe_map_wr(xe, batch, len++ * sizeof(u32), u32, MI_BATCH_BUFFER_END);
+}
+
+#define GSC_PENDING_RETRY_MAXCOUNT 40
+#define GSC_PENDING_RETRY_PAUSE_MS 50
+static int gsccs_send_message(struct xe_pxp_gsc_client_resources *gsc_res,
+ void *msg_in, size_t msg_in_size,
+ void *msg_out, size_t msg_out_size_max)
+{
+ struct xe_device *xe = gsc_res->vm->xe;
+ const size_t max_msg_size = gsc_res->inout_size - sizeof(struct intel_gsc_mtl_header);
+ u32 wr_offset;
+ u32 rd_offset;
+ u32 reply_size;
+ u32 min_reply_size = 0;
+ int ret;
+ int retry = GSC_PENDING_RETRY_MAXCOUNT;
+
+ if (msg_in_size > max_msg_size || msg_out_size_max > max_msg_size)
+ return -ENOSPC;
+
+ wr_offset = xe_gsc_emit_header(xe, &gsc_res->msg_in, 0,
+ HECI_MEADDRESS_PXP,
+ gsc_res->host_session_handle,
+ msg_in_size);
+
+ /* NOTE: zero size packets are used for session-cleanups */
+ if (msg_in && msg_in_size) {
+ xe_map_memcpy_to(xe, &gsc_res->msg_in, wr_offset,
+ msg_in, msg_in_size);
+ min_reply_size = sizeof(struct pxp_cmd_header);
+ }
+
+ /* Make sure the reply header does not contain stale data */
+ xe_gsc_poison_header(xe, &gsc_res->msg_out, 0);
+
+ /*
+ * The BO is mapped at address 0 of the PPGTT, so no need to add its
+ * base offset when calculating the in/out addresses.
+ */
+ emit_pxp_heci_cmd(xe, &gsc_res->batch, PXP_BB_SIZE,
+ wr_offset + msg_in_size, PXP_BB_SIZE + gsc_res->inout_size,
+ wr_offset + msg_out_size_max);
+
+ xe_device_wmb(xe);
+
+ /*
+ * If the GSC needs to communicate with CSME to complete our request,
+ * it'll set the "pending" flag in the return header. In this scenario
+ * we're expected to wait 50ms to give some time to the proxy code to
+ * handle the GSC<->CSME communication and then try again. Note that,
+ * although in most case the 50ms window is enough, the proxy flow is
+ * not actually guaranteed to complete within that time period, so we
+ * might have to try multiple times, up to a worst case of 2 seconds,
+ * after which the request is considered aborted.
+ */
+ do {
+ ret = pxp_pkt_submit(gsc_res->q, 0);
+ if (ret)
+ break;
+
+ if (xe_gsc_check_and_update_pending(xe, &gsc_res->msg_in, 0,
+ &gsc_res->msg_out, 0)) {
+ ret = -EAGAIN;
+ msleep(GSC_PENDING_RETRY_PAUSE_MS);
+ }
+ } while (--retry && ret == -EAGAIN);
+
+ if (ret) {
+ drm_err(&xe->drm, "failed to submit GSC PXP message (%pe)\n", ERR_PTR(ret));
+ return ret;
+ }
+
+ ret = xe_gsc_read_out_header(xe, &gsc_res->msg_out, 0,
+ min_reply_size, &rd_offset);
+ if (ret) {
+ drm_err(&xe->drm, "invalid GSC reply for PXP (%pe)\n", ERR_PTR(ret));
+ return ret;
+ }
+
+ if (msg_out && min_reply_size) {
+ reply_size = xe_map_rd_field(xe, &gsc_res->msg_out, rd_offset,
+ struct pxp_cmd_header, buffer_len);
+ reply_size += sizeof(struct pxp_cmd_header);
+
+ if (reply_size > msg_out_size_max) {
+ drm_warn(&xe->drm, "PXP reply size overflow: %u (%zu)\n",
+ reply_size, msg_out_size_max);
+ reply_size = msg_out_size_max;
+ }
+
+ xe_map_memcpy_from(xe, msg_out, &gsc_res->msg_out,
+ rd_offset, reply_size);
+ }
+
+ xe_gsc_poison_header(xe, &gsc_res->msg_in, 0);
+
+ return ret;
+}
+
+/**
+ * xe_pxp_submit_session_invalidation - submits a PXP GSC invalidation
+ * @gsc_res: the pxp client resources
+ * @id: the session to invalidate
+ *
+ * Submit a message to the GSC FW to notify it that a session has been
+ * terminated and is therefore invalid.
+ *
+ * Returns 0 if the submission is successful, an errno value otherwise.
+ */
+int xe_pxp_submit_session_invalidation(struct xe_pxp_gsc_client_resources *gsc_res, u32 id)
+{
+ struct xe_device *xe = gsc_res->vm->xe;
+ struct pxp43_inv_stream_key_in msg_in = {0};
+ struct pxp43_inv_stream_key_out msg_out = {0};
+ int ret = 0;
+
+ /*
+ * Stream key invalidation reuses the same version 4.2 input/output
+ * command format but firmware requires 4.3 API interaction
+ */
+ msg_in.header.api_version = PXP_APIVER(4, 3);
+ msg_in.header.command_id = PXP43_CMDID_INVALIDATE_STREAM_KEY;
+ msg_in.header.buffer_len = sizeof(msg_in) - sizeof(msg_in.header);
+
+ msg_in.header.stream_id = FIELD_PREP(PXP_CMDHDR_EXTDATA_SESSION_VALID, 1);
+ msg_in.header.stream_id |= FIELD_PREP(PXP_CMDHDR_EXTDATA_APP_TYPE, 0);
+ msg_in.header.stream_id |= FIELD_PREP(PXP_CMDHDR_EXTDATA_SESSION_ID, id);
+
+ ret = gsccs_send_message(gsc_res, &msg_in, sizeof(msg_in),
+ &msg_out, sizeof(msg_out));
+ if (ret) {
+ drm_err(&xe->drm, "Failed to invalidate PXP stream-key %u (%pe)\n",
+ id, ERR_PTR(ret));
+ } else if (msg_out.header.status != 0) {
+ ret = -EIO;
+
+ if (is_fw_err_platform_config(msg_out.header.status))
+ drm_info_once(&xe->drm,
+ "Failed to invalidate PXP stream-key %u: BIOS/SOC 0x%08x(%s)\n",
+ id, msg_out.header.status,
+ fw_err_to_string(msg_out.header.status));
+ else
+ drm_dbg(&xe->drm, "Failed to invalidate stream-key %u, s=0x%08x\n",
+ id, msg_out.header.status);
+ }
+
+ return ret;
+}
diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.h b/drivers/gpu/drm/xe/xe_pxp_submit.h
index 4ee8c0acfed9..48fdc9b09116 100644
--- a/drivers/gpu/drm/xe/xe_pxp_submit.h
+++ b/drivers/gpu/drm/xe/xe_pxp_submit.h
@@ -9,10 +9,13 @@
#include <linux/types.h>
struct xe_pxp;
+struct xe_pxp_gsc_client_resources;
int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp);
void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp);
int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id);
+int xe_pxp_submit_session_invalidation(struct xe_pxp_gsc_client_resources *gsc_res,
+ u32 id);
#endif /* __XE_PXP_SUBMIT_H__ */
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 05/12] drm/xe/pxp: Handle the PXP termination interrupt
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (3 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 04/12] drm/xe/pxp: Add GSC session invalidation support Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-06 23:23 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 06/12] drm/xe/pxp: Add GSC session initialization support Daniele Ceraolo Spurio
` (13 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, John Harrison
When something happen to the session, the HW generates a termination
interrupt. In reply to this, the driver is required to submit an inline
session termination via the VCS, trigger the global termination and
notify the GSC FW that the session is now invalid.
v2: rename ARB define to make it cleaner to move it to uapi (John)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/xe/regs/xe_irq_regs.h | 8 ++
drivers/gpu/drm/xe/regs/xe_pxp_regs.h | 6 ++
drivers/gpu/drm/xe/xe_irq.c | 20 +++-
drivers/gpu/drm/xe/xe_pxp.c | 139 +++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_pxp.h | 7 ++
drivers/gpu/drm/xe/xe_pxp_types.h | 13 +++
6 files changed, 189 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/regs/xe_irq_regs.h b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
index 1776b3f78ccb..f0ecfcac4003 100644
--- a/drivers/gpu/drm/xe/regs/xe_irq_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
@@ -44,6 +44,7 @@
#define ENGINE1_MASK REG_GENMASK(31, 16)
#define ENGINE0_MASK REG_GENMASK(15, 0)
#define GPM_WGBOXPERF_INTR_ENABLE XE_REG(0x19003c, XE_REG_OPTION_VF)
+#define CRYPTO_RSVD_INTR_ENABLE XE_REG(0x190040)
#define GUNIT_GSC_INTR_ENABLE XE_REG(0x190044, XE_REG_OPTION_VF)
#define CCS_RSVD_INTR_ENABLE XE_REG(0x190048, XE_REG_OPTION_VF)
@@ -54,6 +55,7 @@
#define INTR_ENGINE_INTR(x) REG_FIELD_GET(GENMASK(15, 0), x)
#define OTHER_GUC_INSTANCE 0
#define OTHER_GSC_HECI2_INSTANCE 3
+#define OTHER_KCR_INSTANCE 4
#define OTHER_GSC_INSTANCE 6
#define IIR_REG_SELECTOR(x) XE_REG(0x190070 + ((x) * 4), XE_REG_OPTION_VF)
@@ -65,6 +67,7 @@
#define HECI2_RSVD_INTR_MASK XE_REG(0x1900e4)
#define GUC_SG_INTR_MASK XE_REG(0x1900e8, XE_REG_OPTION_VF)
#define GPM_WGBOXPERF_INTR_MASK XE_REG(0x1900ec, XE_REG_OPTION_VF)
+#define CRYPTO_RSVD_INTR_MASK XE_REG(0x1900f0)
#define GUNIT_GSC_INTR_MASK XE_REG(0x1900f4, XE_REG_OPTION_VF)
#define CCS0_CCS1_INTR_MASK XE_REG(0x190100)
#define CCS2_CCS3_INTR_MASK XE_REG(0x190104)
@@ -79,4 +82,9 @@
#define GT_CS_MASTER_ERROR_INTERRUPT REG_BIT(3)
#define GT_RENDER_USER_INTERRUPT REG_BIT(0)
+/* irqs for OTHER_KCR_INSTANCE */
+#define KCR_PXP_STATE_TERMINATED_INTERRUPT REG_BIT(1)
+#define KCR_APP_TERMINATED_PER_FW_REQ_INTERRUPT REG_BIT(2)
+#define KCR_PXP_STATE_RESET_COMPLETE_INTERRUPT REG_BIT(3)
+
#endif
diff --git a/drivers/gpu/drm/xe/regs/xe_pxp_regs.h b/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
index d67cf210d23d..aa158938b42e 100644
--- a/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
@@ -14,4 +14,10 @@
#define KCR_INIT XE_REG(0x3860f0)
#define KCR_INIT_ALLOW_DISPLAY_ME_WRITES REG_BIT(14)
+/* KCR hwdrm session in play status 0-31 */
+#define KCR_SIP XE_REG(0x386260)
+
+/* PXP global terminate register for session termination */
+#define KCR_GLOBAL_TERMINATE XE_REG(0x3860f8)
+
#endif /* __XE_PXP_REGS_H__ */
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 7bf7201529ac..6a7a65d5e5d1 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -19,6 +19,7 @@
#include "xe_hw_engine.h"
#include "xe_memirq.h"
#include "xe_mmio.h"
+#include "xe_pxp.h"
#include "xe_sriov.h"
/*
@@ -202,6 +203,15 @@ void xe_irq_enable_hwe(struct xe_gt *gt)
}
if (heci_mask)
xe_mmio_write32(mmio, HECI2_RSVD_INTR_MASK, ~(heci_mask << 16));
+
+ if (xe_pxp_is_supported(xe)) {
+ u32 kcr_mask = KCR_PXP_STATE_TERMINATED_INTERRUPT |
+ KCR_APP_TERMINATED_PER_FW_REQ_INTERRUPT |
+ KCR_PXP_STATE_RESET_COMPLETE_INTERRUPT;
+
+ xe_mmio_write32(mmio, CRYPTO_RSVD_INTR_ENABLE, kcr_mask << 16);
+ xe_mmio_write32(mmio, CRYPTO_RSVD_INTR_MASK, ~(kcr_mask << 16));
+ }
}
}
@@ -324,9 +334,15 @@ static void gt_irq_handler(struct xe_tile *tile,
}
if (class == XE_ENGINE_CLASS_OTHER) {
- /* HECI GSCFI interrupts come from outside of GT */
+ /*
+ * HECI GSCFI interrupts come from outside of GT.
+ * KCR irqs come from inside GT but are handled
+ * by the global PXP subsystem.
+ */
if (xe->info.has_heci_gscfi && instance == OTHER_GSC_INSTANCE)
xe_heci_gsc_irq_handler(xe, intr_vec);
+ else if (instance == OTHER_KCR_INSTANCE)
+ xe_pxp_irq_handler(xe, intr_vec);
else
gt_other_irq_handler(engine_gt, instance, intr_vec);
}
@@ -512,6 +528,8 @@ static void gt_irq_reset(struct xe_tile *tile)
xe_mmio_write32(mmio, GUNIT_GSC_INTR_ENABLE, 0);
xe_mmio_write32(mmio, GUNIT_GSC_INTR_MASK, ~0);
xe_mmio_write32(mmio, HECI2_RSVD_INTR_MASK, ~0);
+ xe_mmio_write32(mmio, CRYPTO_RSVD_INTR_ENABLE, 0);
+ xe_mmio_write32(mmio, CRYPTO_RSVD_INTR_MASK, ~0);
}
xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_ENABLE, 0);
diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
index 89d71a69cdff..bc816cfecdd6 100644
--- a/drivers/gpu/drm/xe/xe_pxp.c
+++ b/drivers/gpu/drm/xe/xe_pxp.c
@@ -12,9 +12,11 @@
#include "xe_gt.h"
#include "xe_gt_types.h"
#include "xe_mmio.h"
+#include "xe_pm.h"
#include "xe_pxp_submit.h"
#include "xe_pxp_types.h"
#include "xe_uc_fw.h"
+#include "regs/xe_irq_regs.h"
#include "regs/xe_pxp_regs.h"
/**
@@ -25,11 +27,132 @@
* integrated parts.
*/
-static bool pxp_is_supported(const struct xe_device *xe)
+#define ARB_SESSION DRM_XE_PXP_HWDRM_DEFAULT_SESSION /* shorter define */
+
+bool xe_pxp_is_supported(const struct xe_device *xe)
{
return xe->info.has_pxp && IS_ENABLED(CONFIG_INTEL_MEI_GSC_PROXY);
}
+static bool pxp_is_enabled(const struct xe_pxp *pxp)
+{
+ return pxp;
+}
+
+static int pxp_wait_for_session_state(struct xe_pxp *pxp, u32 id, bool in_play)
+{
+ struct xe_gt *gt = pxp->gt;
+ u32 mask = BIT(id);
+
+ return xe_mmio_wait32(>->mmio, KCR_SIP, mask, in_play ? mask : 0,
+ 250, NULL, false);
+}
+
+static void pxp_terminate(struct xe_pxp *pxp)
+{
+ int ret = 0;
+ struct xe_device *xe = pxp->xe;
+ struct xe_gt *gt = pxp->gt;
+ unsigned int fw_ref;
+
+ drm_dbg(&xe->drm, "Terminating PXP\n");
+
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_GT)) {
+ ret = -EIO;
+ goto out;
+ }
+
+ /* terminate the hw session */
+ ret = xe_pxp_submit_session_termination(pxp, ARB_SESSION);
+ if (ret)
+ goto out;
+
+ ret = pxp_wait_for_session_state(pxp, ARB_SESSION, false);
+ if (ret)
+ goto out;
+
+ /* Trigger full HW cleanup */
+ xe_mmio_write32(>->mmio, KCR_GLOBAL_TERMINATE, 1);
+
+ /* now we can tell the GSC to clean up its own state */
+ ret = xe_pxp_submit_session_invalidation(&pxp->gsc_res, ARB_SESSION);
+
+out:
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
+
+ if (ret)
+ drm_err(&xe->drm, "PXP termination failed: %pe\n", ERR_PTR(ret));
+}
+
+static void pxp_terminate_complete(struct xe_pxp *pxp)
+{
+ /* TODO mark the session as ready to start */
+}
+
+static void pxp_irq_work(struct work_struct *work)
+{
+ struct xe_pxp *pxp = container_of(work, typeof(*pxp), irq.work);
+ struct xe_device *xe = pxp->xe;
+ u32 events = 0;
+
+ spin_lock_irq(&xe->irq.lock);
+ events = pxp->irq.events;
+ pxp->irq.events = 0;
+ spin_unlock_irq(&xe->irq.lock);
+
+ if (!events)
+ return;
+
+ /*
+ * If we're processing a termination irq while suspending then don't
+ * bother, we're going to re-init everything on resume anyway.
+ */
+ if ((events & PXP_TERMINATION_REQUEST) && !xe_pm_runtime_get_if_active(xe))
+ return;
+
+ if (events & PXP_TERMINATION_REQUEST) {
+ events &= ~PXP_TERMINATION_COMPLETE;
+ pxp_terminate(pxp);
+ }
+
+ if (events & PXP_TERMINATION_COMPLETE)
+ pxp_terminate_complete(pxp);
+
+ if (events & PXP_TERMINATION_REQUEST)
+ xe_pm_runtime_put(xe);
+}
+
+/**
+ * xe_pxp_irq_handler - Handles PXP interrupts.
+ * @pxp: pointer to pxp struct
+ * @iir: interrupt vector
+ */
+void xe_pxp_irq_handler(struct xe_device *xe, u16 iir)
+{
+ struct xe_pxp *pxp = xe->pxp;
+
+ if (!pxp_is_enabled(pxp)) {
+ drm_err(&xe->drm, "PXP irq 0x%x received with PXP disabled!\n", iir);
+ return;
+ }
+
+ lockdep_assert_held(&xe->irq.lock);
+
+ if (unlikely(!iir))
+ return;
+
+ if (iir & (KCR_PXP_STATE_TERMINATED_INTERRUPT |
+ KCR_APP_TERMINATED_PER_FW_REQ_INTERRUPT))
+ pxp->irq.events |= PXP_TERMINATION_REQUEST;
+
+ if (iir & KCR_PXP_STATE_RESET_COMPLETE_INTERRUPT)
+ pxp->irq.events |= PXP_TERMINATION_COMPLETE;
+
+ if (pxp->irq.events)
+ queue_work(pxp->irq.wq, &pxp->irq.work);
+}
+
static int kcr_pxp_set_status(const struct xe_pxp *pxp, bool enable)
{
u32 val = enable ? _MASKED_BIT_ENABLE(KCR_INIT_ALLOW_DISPLAY_ME_WRITES) :
@@ -60,6 +183,7 @@ static void pxp_fini(void *arg)
{
struct xe_pxp *pxp = arg;
+ destroy_workqueue(pxp->irq.wq);
xe_pxp_destroy_execution_resources(pxp);
/* no need to explicitly disable KCR since we're going to do an FLR */
@@ -83,7 +207,7 @@ int xe_pxp_init(struct xe_device *xe)
struct xe_pxp *pxp;
int err;
- if (!pxp_is_supported(xe))
+ if (!xe_pxp_is_supported(xe))
return -EOPNOTSUPP;
/* we only support PXP on single tile devices with a media GT */
@@ -105,12 +229,19 @@ int xe_pxp_init(struct xe_device *xe)
if (!pxp)
return -ENOMEM;
+ INIT_WORK(&pxp->irq.work, pxp_irq_work);
pxp->xe = xe;
pxp->gt = gt;
+ pxp->irq.wq = alloc_ordered_workqueue("pxp-wq", 0);
+ if (!pxp->irq.wq) {
+ err = -ENOMEM;
+ goto out_free;
+ }
+
err = kcr_pxp_enable(pxp);
if (err)
- goto out_free;
+ goto out_wq;
err = xe_pxp_allocate_execution_resources(pxp);
if (err)
@@ -122,6 +253,8 @@ int xe_pxp_init(struct xe_device *xe)
out_kcr_disable:
kcr_pxp_disable(pxp);
+out_wq:
+ destroy_workqueue(pxp->irq.wq);
out_free:
drmm_kfree(&xe->drm, pxp);
return err;
diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
index 00f5e688c0d9..39435c644dcd 100644
--- a/drivers/gpu/drm/xe/xe_pxp.h
+++ b/drivers/gpu/drm/xe/xe_pxp.h
@@ -6,8 +6,15 @@
#ifndef __XE_PXP_H__
#define __XE_PXP_H__
+#include <linux/types.h>
+
struct xe_device;
+#define DRM_XE_PXP_HWDRM_DEFAULT_SESSION 0xF /* TODO: move to uapi */
+
+bool xe_pxp_is_supported(const struct xe_device *xe);
+
int xe_pxp_init(struct xe_device *xe);
+void xe_pxp_irq_handler(struct xe_device *xe, u16 iir);
#endif /* __XE_PXP_H__ */
diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
index 25db23180a30..40c28f32f51a 100644
--- a/drivers/gpu/drm/xe/xe_pxp_types.h
+++ b/drivers/gpu/drm/xe/xe_pxp_types.h
@@ -8,6 +8,7 @@
#include <linux/iosys-map.h>
#include <linux/types.h>
+#include <linux/workqueue.h>
struct xe_bo;
struct xe_exec_queue;
@@ -69,6 +70,18 @@ struct xe_pxp {
/** @gsc_exec: kernel-owned objects for PXP submissions to the GSCCS */
struct xe_pxp_gsc_client_resources gsc_res;
+
+ /** @irq: wrapper for the worker and queue used for PXP irq support */
+ struct {
+ /** @irq.work: worker that manages irq events. */
+ struct work_struct work;
+ /** @irq.wq: workqueue on which to queue the irq work. */
+ struct workqueue_struct *wq;
+ /** @irq.events: pending events, protected with xe->irq.lock. */
+ u32 events;
+#define PXP_TERMINATION_REQUEST BIT(0)
+#define PXP_TERMINATION_COMPLETE BIT(1)
+ } irq;
};
#endif /* __XE_PXP_TYPES_H__ */
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 06/12] drm/xe/pxp: Add GSC session initialization support
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (4 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 05/12] drm/xe/pxp: Handle the PXP termination interrupt Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-06 23:27 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 07/12] drm/xe/pxp: Add support for PXP-using queues Daniele Ceraolo Spurio
` (12 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, John Harrison
A session is initialized (i.e. started) by sending a message to the GSC.
Note that this patch is meant to be squashed with the follow-up patches
that implement the other pieces of the session initialization and queue
setup flow. It is separate for now for ease of review.
v2: clean up error messages, use new ARB define (John)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h | 21 +++++++++
drivers/gpu/drm/xe/xe_pxp_submit.c | 47 +++++++++++++++++++
drivers/gpu/drm/xe/xe_pxp_submit.h | 1 +
3 files changed, 69 insertions(+)
diff --git a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
index f0da65ccdda2..290e431cf10d 100644
--- a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
+++ b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
@@ -51,6 +51,7 @@ struct pxp_cmd_header {
} __packed;
#define PXP43_CMDID_INVALIDATE_STREAM_KEY 0x00000007
+#define PXP43_CMDID_INIT_SESSION 0x00000036
#define PXP43_CMDID_NEW_HUC_AUTH 0x0000003F /* MTL+ */
/* PXP-Input-Packet: HUC Auth-only */
@@ -65,6 +66,26 @@ struct pxp43_huc_auth_out {
struct pxp_cmd_header header;
} __packed;
+/* PXP-Input-Packet: Init PXP session */
+struct pxp43_create_arb_in {
+ struct pxp_cmd_header header;
+ /* header.stream_id fields for vesion 4.3 of Init PXP session: */
+ #define PXP43_INIT_SESSION_VALID BIT(0)
+ #define PXP43_INIT_SESSION_APPTYPE BIT(1)
+ #define PXP43_INIT_SESSION_APPID GENMASK(17, 2)
+ u32 protection_mode;
+ #define PXP43_INIT_SESSION_PROTECTION_ARB 0x2
+ u32 sub_session_id;
+ u32 init_flags;
+ u32 rsvd[12];
+} __packed;
+
+/* PXP-Input-Packet: Init PXP session */
+struct pxp43_create_arb_out {
+ struct pxp_cmd_header header;
+ u32 rsvd[8];
+} __packed;
+
/* PXP-Input-Packet: Invalidate Stream Key */
struct pxp43_inv_stream_key_in {
struct pxp_cmd_header header;
diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.c b/drivers/gpu/drm/xe/xe_pxp_submit.c
index f5f6b18c1054..b50fe037c74b 100644
--- a/drivers/gpu/drm/xe/xe_pxp_submit.c
+++ b/drivers/gpu/drm/xe/xe_pxp_submit.c
@@ -16,6 +16,7 @@
#include "xe_gt.h"
#include "xe_lrc.h"
#include "xe_map.h"
+#include "xe_pxp.h"
#include "xe_pxp_types.h"
#include "xe_sched_job.h"
#include "xe_vm.h"
@@ -490,6 +491,52 @@ static int gsccs_send_message(struct xe_pxp_gsc_client_resources *gsc_res,
return ret;
}
+/**
+ * xe_pxp_submit_session_init - submits a PXP GSC session initialization
+ * @gsc_res: the pxp client resources
+ * @id: the session to initialize
+ *
+ * Submit a message to the GSC FW to initialize (i.e. start) a PXP session.
+ *
+ * Returns 0 if the submission is successful, an errno value otherwise.
+ */
+int xe_pxp_submit_session_init(struct xe_pxp_gsc_client_resources *gsc_res, u32 id)
+{
+ struct xe_device *xe = gsc_res->vm->xe;
+ struct pxp43_create_arb_in msg_in = {0};
+ struct pxp43_create_arb_out msg_out = {0};
+ int ret;
+
+ msg_in.header.api_version = PXP_APIVER(4, 3);
+ msg_in.header.command_id = PXP43_CMDID_INIT_SESSION;
+ msg_in.header.stream_id = (FIELD_PREP(PXP43_INIT_SESSION_APPID, id) |
+ FIELD_PREP(PXP43_INIT_SESSION_VALID, 1) |
+ FIELD_PREP(PXP43_INIT_SESSION_APPTYPE, 0));
+ msg_in.header.buffer_len = sizeof(msg_in) - sizeof(msg_in.header);
+
+ if (id == DRM_XE_PXP_HWDRM_DEFAULT_SESSION)
+ msg_in.protection_mode = PXP43_INIT_SESSION_PROTECTION_ARB;
+
+ ret = gsccs_send_message(gsc_res, &msg_in, sizeof(msg_in),
+ &msg_out, sizeof(msg_out));
+ if (ret) {
+ drm_err(&xe->drm, "Failed to init PXP session %u (%pe)\n", id, ERR_PTR(ret));
+ } else if (msg_out.header.status != 0) {
+ ret = -EIO;
+
+ if (is_fw_err_platform_config(msg_out.header.status))
+ drm_info_once(&xe->drm,
+ "Failed to init PXP session %u due to BIOS/SOC, s=0x%x(%s)\n",
+ id, msg_out.header.status,
+ fw_err_to_string(msg_out.header.status));
+ else
+ drm_dbg(&xe->drm, "Failed to init PXP session %u, s=0x%x\n",
+ id, msg_out.header.status);
+ }
+
+ return ret;
+}
+
/**
* xe_pxp_submit_session_invalidation - submits a PXP GSC invalidation
* @gsc_res: the pxp client resources
diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.h b/drivers/gpu/drm/xe/xe_pxp_submit.h
index 48fdc9b09116..c9efda02f4b0 100644
--- a/drivers/gpu/drm/xe/xe_pxp_submit.h
+++ b/drivers/gpu/drm/xe/xe_pxp_submit.h
@@ -14,6 +14,7 @@ struct xe_pxp_gsc_client_resources;
int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp);
void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp);
+int xe_pxp_submit_session_init(struct xe_pxp_gsc_client_resources *gsc_res, u32 id);
int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id);
int xe_pxp_submit_session_invalidation(struct xe_pxp_gsc_client_resources *gsc_res,
u32 id);
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 07/12] drm/xe/pxp: Add support for PXP-using queues
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (5 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 06/12] drm/xe/pxp: Add GSC session initialization support Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-09 18:53 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 08/12] drm/xe/pxp: add a query for PXP status Daniele Ceraolo Spurio
` (11 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, John Harrison
Userspace is required to mark a queue as using PXP to guarantee that the
PXP instructions will work. When a PXP queue is created, the driver will
do the following:
- Start the default PXP session if it is not already running;
- set the relevant bits in the context control register;
- assign an rpm ref to the queue to keep for its lifetime (this is
required because PXP HWDRM sessions are killed by the HW suspend flow).
When a PXP invalidation occurs, all the PXP queues will be killed.
On submission of a valid PXP queue, the driver will validate all
encrypted objects mapped to the VM to ensured they were encrypted with
the current key.
v2: Remove pxp_types include outside of PXP code (Jani), better comments
and code cleanup (John)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/xe/regs/xe_engine_regs.h | 1 +
drivers/gpu/drm/xe/xe_exec_queue.c | 57 +++-
drivers/gpu/drm/xe/xe_exec_queue.h | 5 +
drivers/gpu/drm/xe/xe_exec_queue_types.h | 8 +
drivers/gpu/drm/xe/xe_execlist.c | 2 +-
drivers/gpu/drm/xe/xe_lrc.c | 16 +-
drivers/gpu/drm/xe/xe_lrc.h | 4 +-
drivers/gpu/drm/xe/xe_pxp.c | 317 ++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_pxp.h | 9 +-
drivers/gpu/drm/xe/xe_pxp_types.h | 26 ++
include/uapi/drm/xe_drm.h | 40 ++-
11 files changed, 471 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/xe/regs/xe_engine_regs.h b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
index 7c78496e6213..07365d4f288e 100644
--- a/drivers/gpu/drm/xe/regs/xe_engine_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
@@ -130,6 +130,7 @@
#define RING_EXECLIST_STATUS_HI(base) XE_REG((base) + 0x234 + 4)
#define RING_CONTEXT_CONTROL(base) XE_REG((base) + 0x244, XE_REG_OPTION_MASKED)
+#define CTX_CTRL_PXP_ENABLE REG_BIT(10)
#define CTX_CTRL_OAC_CONTEXT_ENABLE REG_BIT(8)
#define CTX_CTRL_RUN_ALONE REG_BIT(7)
#define CTX_CTRL_INDIRECT_RING_STATE_ENABLE REG_BIT(4)
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index 60418debc1ec..6851334be230 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -23,6 +23,7 @@
#include "xe_ring_ops_types.h"
#include "xe_trace.h"
#include "xe_vm.h"
+#include "xe_pxp.h"
enum xe_exec_queue_sched_prop {
XE_EXEC_QUEUE_JOB_TIMEOUT = 0,
@@ -36,6 +37,8 @@ static int exec_queue_user_extensions(struct xe_device *xe, struct xe_exec_queue
static void __xe_exec_queue_free(struct xe_exec_queue *q)
{
+ if (xe_exec_queue_uses_pxp(q))
+ xe_pxp_exec_queue_remove(gt_to_xe(q->gt)->pxp, q);
if (q->vm)
xe_vm_put(q->vm);
@@ -75,6 +78,7 @@ static struct xe_exec_queue *__xe_exec_queue_alloc(struct xe_device *xe,
INIT_LIST_HEAD(&q->lr.link);
INIT_LIST_HEAD(&q->multi_gt_link);
INIT_LIST_HEAD(&q->hw_engine_group_link);
+ INIT_LIST_HEAD(&q->pxp.link);
q->sched_props.timeslice_us = hwe->eclass->sched_props.timeslice_us;
q->sched_props.preempt_timeout_us =
@@ -109,6 +113,21 @@ static int __xe_exec_queue_init(struct xe_exec_queue *q)
{
struct xe_vm *vm = q->vm;
int i, err;
+ u32 flags = 0;
+
+ /*
+ * PXP workloads executing on RCS or CCS must run in isolation (i.e. no
+ * other workload can use the EUs at the same time). On MTL this is done
+ * by setting the RUNALONE bit in the LRC, while starting on Xe2 there
+ * is a dedicated bit for it.
+ */
+ if (xe_exec_queue_uses_pxp(q) &&
+ (q->class == XE_ENGINE_CLASS_RENDER || q->class == XE_ENGINE_CLASS_COMPUTE)) {
+ if (GRAPHICS_VER(gt_to_xe(q->gt)) >= 20)
+ flags |= XE_LRC_CREATE_PXP;
+ else
+ flags |= XE_LRC_CREATE_RUNALONE;
+ }
if (vm) {
err = xe_vm_lock(vm, true);
@@ -117,7 +136,7 @@ static int __xe_exec_queue_init(struct xe_exec_queue *q)
}
for (i = 0; i < q->width; ++i) {
- q->lrc[i] = xe_lrc_create(q->hwe, q->vm, SZ_16K);
+ q->lrc[i] = xe_lrc_create(q->hwe, q->vm, SZ_16K, flags);
if (IS_ERR(q->lrc[i])) {
err = PTR_ERR(q->lrc[i]);
goto err_unlock;
@@ -162,6 +181,19 @@ struct xe_exec_queue *xe_exec_queue_create(struct xe_device *xe, struct xe_vm *v
if (err)
goto err_post_alloc;
+ /*
+ * We can only add the queue to the PXP list after the init is complete,
+ * because the PXP termination can call exec_queue_kill and that will
+ * go bad if the queue is only half-initialized. This means that we
+ * can't do it when we handle the PXP extension in __xe_exec_queue_alloc
+ * and we need to do it here instead.
+ */
+ if (xe_exec_queue_uses_pxp(q)) {
+ err = xe_pxp_exec_queue_add(xe->pxp, q);
+ if (err)
+ goto err_post_alloc;
+ }
+
return q;
err_post_alloc:
@@ -250,6 +282,9 @@ void xe_exec_queue_destroy(struct kref *ref)
struct xe_exec_queue *q = container_of(ref, struct xe_exec_queue, refcount);
struct xe_exec_queue *eq, *next;
+ if (xe_exec_queue_uses_pxp(q))
+ xe_pxp_exec_queue_remove(gt_to_xe(q->gt)->pxp, q);
+
xe_exec_queue_last_fence_put_unlocked(q);
if (!(q->flags & EXEC_QUEUE_FLAG_BIND_ENGINE_CHILD)) {
list_for_each_entry_safe(eq, next, &q->multi_gt_list,
@@ -405,6 +440,22 @@ static int exec_queue_set_timeslice(struct xe_device *xe, struct xe_exec_queue *
return 0;
}
+static int
+exec_queue_set_pxp_type(struct xe_device *xe, struct xe_exec_queue *q, u64 value)
+{
+ if (value == DRM_XE_PXP_TYPE_NONE)
+ return 0;
+
+ if (!xe_pxp_is_enabled(xe->pxp))
+ return -ENODEV;
+
+ /* we only support HWDRM sessions right now */
+ if (XE_IOCTL_DBG(xe, value != DRM_XE_PXP_TYPE_HWDRM))
+ return -EINVAL;
+
+ return xe_pxp_exec_queue_set_type(xe->pxp, q, DRM_XE_PXP_TYPE_HWDRM);
+}
+
typedef int (*xe_exec_queue_set_property_fn)(struct xe_device *xe,
struct xe_exec_queue *q,
u64 value);
@@ -412,6 +463,7 @@ typedef int (*xe_exec_queue_set_property_fn)(struct xe_device *xe,
static const xe_exec_queue_set_property_fn exec_queue_set_property_funcs[] = {
[DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY] = exec_queue_set_priority,
[DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE] = exec_queue_set_timeslice,
+ [DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE] = exec_queue_set_pxp_type,
};
static int exec_queue_user_ext_set_property(struct xe_device *xe,
@@ -431,7 +483,8 @@ static int exec_queue_user_ext_set_property(struct xe_device *xe,
ARRAY_SIZE(exec_queue_set_property_funcs)) ||
XE_IOCTL_DBG(xe, ext.pad) ||
XE_IOCTL_DBG(xe, ext.property != DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY &&
- ext.property != DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE))
+ ext.property != DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE &&
+ ext.property != DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE))
return -EINVAL;
idx = array_index_nospec(ext.property, ARRAY_SIZE(exec_queue_set_property_funcs));
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.h b/drivers/gpu/drm/xe/xe_exec_queue.h
index 90c7f73eab88..17bc50a7f05a 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue.h
@@ -57,6 +57,11 @@ static inline bool xe_exec_queue_is_parallel(struct xe_exec_queue *q)
return q->width > 1;
}
+static inline bool xe_exec_queue_uses_pxp(struct xe_exec_queue *q)
+{
+ return q->pxp.type;
+}
+
bool xe_exec_queue_is_lr(struct xe_exec_queue *q);
bool xe_exec_queue_ring_full(struct xe_exec_queue *q);
diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
index 1158b6062a6c..9e4af4824b65 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
@@ -128,6 +128,14 @@ struct xe_exec_queue {
struct list_head link;
} lr;
+ /** @pxp: PXP info tracking */
+ struct {
+ /** @pxp.type: PXP session type used by this queue */
+ u8 type;
+ /** @pxp.link: link into the list of PXP exec queues */
+ struct list_head link;
+ } pxp;
+
/** @ops: submission backend exec queue operations */
const struct xe_exec_queue_ops *ops;
diff --git a/drivers/gpu/drm/xe/xe_execlist.c b/drivers/gpu/drm/xe/xe_execlist.c
index a8c416a48812..84b69a5dd361 100644
--- a/drivers/gpu/drm/xe/xe_execlist.c
+++ b/drivers/gpu/drm/xe/xe_execlist.c
@@ -265,7 +265,7 @@ struct xe_execlist_port *xe_execlist_port_create(struct xe_device *xe,
port->hwe = hwe;
- port->lrc = xe_lrc_create(hwe, NULL, SZ_16K);
+ port->lrc = xe_lrc_create(hwe, NULL, SZ_16K, 0);
if (IS_ERR(port->lrc)) {
err = PTR_ERR(port->lrc);
goto err;
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index 22e58c6e2a35..b05268cd8f36 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -876,7 +876,7 @@ static void xe_lrc_finish(struct xe_lrc *lrc)
#define PVC_CTX_ACC_CTR_THOLD (0x2a + 1)
static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
- struct xe_vm *vm, u32 ring_size)
+ struct xe_vm *vm, u32 ring_size, u32 init_flags)
{
struct xe_gt *gt = hwe->gt;
struct xe_tile *tile = gt_to_tile(gt);
@@ -964,6 +964,16 @@ static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
RING_CTL_SIZE(lrc->ring.size) | RING_VALID);
}
+ if (init_flags & XE_LRC_CREATE_RUNALONE)
+ xe_lrc_write_ctx_reg(lrc, CTX_CONTEXT_CONTROL,
+ xe_lrc_read_ctx_reg(lrc, CTX_CONTEXT_CONTROL) |
+ _MASKED_BIT_ENABLE(CTX_CTRL_RUN_ALONE));
+
+ if (init_flags & XE_LRC_CREATE_PXP)
+ xe_lrc_write_ctx_reg(lrc, CTX_CONTEXT_CONTROL,
+ xe_lrc_read_ctx_reg(lrc, CTX_CONTEXT_CONTROL) |
+ _MASKED_BIT_ENABLE(CTX_CTRL_PXP_ENABLE));
+
xe_lrc_write_ctx_reg(lrc, CTX_TIMESTAMP, 0);
if (xe->info.has_asid && vm)
@@ -1012,7 +1022,7 @@ static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
* upon failure.
*/
struct xe_lrc *xe_lrc_create(struct xe_hw_engine *hwe, struct xe_vm *vm,
- u32 ring_size)
+ u32 ring_size, u32 flags)
{
struct xe_lrc *lrc;
int err;
@@ -1021,7 +1031,7 @@ struct xe_lrc *xe_lrc_create(struct xe_hw_engine *hwe, struct xe_vm *vm,
if (!lrc)
return ERR_PTR(-ENOMEM);
- err = xe_lrc_init(lrc, hwe, vm, ring_size);
+ err = xe_lrc_init(lrc, hwe, vm, ring_size, flags);
if (err) {
kfree(lrc);
return ERR_PTR(err);
diff --git a/drivers/gpu/drm/xe/xe_lrc.h b/drivers/gpu/drm/xe/xe_lrc.h
index 9bc86c1fc16f..40605b868d88 100644
--- a/drivers/gpu/drm/xe/xe_lrc.h
+++ b/drivers/gpu/drm/xe/xe_lrc.h
@@ -42,8 +42,10 @@ struct xe_lrc_snapshot {
#define LRC_PPHWSP_FLUSH_INVAL_SCRATCH_ADDR (0x34 * 4)
#define LRC_PPHWSP_PXP_INVAL_SCRATCH_ADDR (0x40 * 4)
+#define XE_LRC_CREATE_RUNALONE 0x1
+#define XE_LRC_CREATE_PXP 0x2
struct xe_lrc *xe_lrc_create(struct xe_hw_engine *hwe, struct xe_vm *vm,
- u32 ring_size);
+ u32 ring_size, u32 flags);
void xe_lrc_destroy(struct kref *ref);
/**
diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
index bc816cfecdd6..ce1d7ab448dc 100644
--- a/drivers/gpu/drm/xe/xe_pxp.c
+++ b/drivers/gpu/drm/xe/xe_pxp.c
@@ -6,11 +6,16 @@
#include "xe_pxp.h"
#include <drm/drm_managed.h>
+#include <uapi/drm/xe_drm.h>
#include "xe_device_types.h"
+#include "xe_exec_queue.h"
#include "xe_force_wake.h"
+#include "xe_guc_submit.h"
+#include "xe_gsc_proxy.h"
#include "xe_gt.h"
#include "xe_gt_types.h"
+#include "xe_huc.h"
#include "xe_mmio.h"
#include "xe_pm.h"
#include "xe_pxp_submit.h"
@@ -34,11 +39,45 @@ bool xe_pxp_is_supported(const struct xe_device *xe)
return xe->info.has_pxp && IS_ENABLED(CONFIG_INTEL_MEI_GSC_PROXY);
}
-static bool pxp_is_enabled(const struct xe_pxp *pxp)
+bool xe_pxp_is_enabled(const struct xe_pxp *pxp)
{
return pxp;
}
+static bool pxp_prerequisites_done(const struct xe_pxp *pxp)
+{
+ struct xe_gt *gt = pxp->gt;
+ unsigned int fw_ref;
+ bool ready;
+
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+
+ /*
+ * If force_wake fails we could falsely report the prerequisites as not
+ * done even if they are; the consequence of this would be that the
+ * callers won't go ahead with using PXP, but if force_wake doesn't work
+ * the GT is very likely in a bad state so not really a problem to abort
+ * PXP. Therefore, we can just log the force_wake error and not escalate
+ * it.
+ */
+ XE_WARN_ON(!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL));
+
+ /* PXP requires both HuC authentication via GSC and GSC proxy initialized */
+ ready = xe_huc_is_authenticated(>->uc.huc, XE_HUC_AUTH_VIA_GSC) &&
+ xe_gsc_proxy_init_done(>->uc.gsc);
+
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
+
+ return ready;
+}
+
+static bool pxp_session_is_in_play(struct xe_pxp *pxp, u32 id)
+{
+ struct xe_gt *gt = pxp->gt;
+
+ return xe_mmio_read32(>->mmio, KCR_SIP) & BIT(id);
+}
+
static int pxp_wait_for_session_state(struct xe_pxp *pxp, u32 id, bool in_play)
{
struct xe_gt *gt = pxp->gt;
@@ -48,6 +87,8 @@ static int pxp_wait_for_session_state(struct xe_pxp *pxp, u32 id, bool in_play)
250, NULL, false);
}
+static void pxp_invalidate_queues(struct xe_pxp *pxp);
+
static void pxp_terminate(struct xe_pxp *pxp)
{
int ret = 0;
@@ -55,6 +96,24 @@ static void pxp_terminate(struct xe_pxp *pxp)
struct xe_gt *gt = pxp->gt;
unsigned int fw_ref;
+ lockdep_assert_held(&pxp->mutex);
+
+ pxp_invalidate_queues(pxp);
+
+ /*
+ * If we have a termination already in progress, we need to wait for
+ * it to complete before queueing another one. We update the state
+ * to signal that another termination is required and leave it to the
+ * pxp_start() call to take care of it.
+ */
+ if (!completion_done(&pxp->termination)) {
+ pxp->status = XE_PXP_NEEDS_TERMINATION;
+ return;
+ }
+
+ reinit_completion(&pxp->termination);
+ pxp->status = XE_PXP_TERMINATION_IN_PROGRESS;
+
drm_dbg(&xe->drm, "Terminating PXP\n");
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
@@ -81,13 +140,32 @@ static void pxp_terminate(struct xe_pxp *pxp)
out:
xe_force_wake_put(gt_to_fw(gt), fw_ref);
- if (ret)
+ if (ret) {
drm_err(&xe->drm, "PXP termination failed: %pe\n", ERR_PTR(ret));
+ pxp->status = XE_PXP_ERROR;
+ complete_all(&pxp->termination);
+ }
}
static void pxp_terminate_complete(struct xe_pxp *pxp)
{
- /* TODO mark the session as ready to start */
+ /*
+ * We expect PXP to be in one of 2 states when we get here:
+ * - XE_PXP_TERMINATION_IN_PROGRESS: a single termination event was
+ * requested and it is now completing, so we're ready to start.
+ * - XE_PXP_NEEDS_TERMINATION: a second termination was requested while
+ * the first one was still being processed; we don't update the state
+ * in this case so the pxp_start code will automatically issue that
+ * second termination.
+ */
+ if (pxp->status == XE_PXP_TERMINATION_IN_PROGRESS)
+ pxp->status = XE_PXP_READY_TO_START;
+ else if (pxp->status != XE_PXP_NEEDS_TERMINATION)
+ drm_err(&pxp->xe->drm,
+ "PXP termination complete while status was %u\n",
+ pxp->status);
+
+ complete_all(&pxp->termination);
}
static void pxp_irq_work(struct work_struct *work)
@@ -111,6 +189,8 @@ static void pxp_irq_work(struct work_struct *work)
if ((events & PXP_TERMINATION_REQUEST) && !xe_pm_runtime_get_if_active(xe))
return;
+ mutex_lock(&pxp->mutex);
+
if (events & PXP_TERMINATION_REQUEST) {
events &= ~PXP_TERMINATION_COMPLETE;
pxp_terminate(pxp);
@@ -119,6 +199,8 @@ static void pxp_irq_work(struct work_struct *work)
if (events & PXP_TERMINATION_COMPLETE)
pxp_terminate_complete(pxp);
+ mutex_unlock(&pxp->mutex);
+
if (events & PXP_TERMINATION_REQUEST)
xe_pm_runtime_put(xe);
}
@@ -132,7 +214,7 @@ void xe_pxp_irq_handler(struct xe_device *xe, u16 iir)
{
struct xe_pxp *pxp = xe->pxp;
- if (!pxp_is_enabled(pxp)) {
+ if (!xe_pxp_is_enabled(pxp)) {
drm_err(&xe->drm, "PXP irq 0x%x received with PXP disabled!\n", iir);
return;
}
@@ -229,10 +311,22 @@ int xe_pxp_init(struct xe_device *xe)
if (!pxp)
return -ENOMEM;
+ INIT_LIST_HEAD(&pxp->queues.list);
+ spin_lock_init(&pxp->queues.lock);
INIT_WORK(&pxp->irq.work, pxp_irq_work);
pxp->xe = xe;
pxp->gt = gt;
+ /*
+ * we'll use the completion to check if there is a termination pending,
+ * so we start it as completed and we reinit it when a termination
+ * is triggered.
+ */
+ init_completion(&pxp->termination);
+ complete_all(&pxp->termination);
+
+ mutex_init(&pxp->mutex);
+
pxp->irq.wq = alloc_ordered_workqueue("pxp-wq", 0);
if (!pxp->irq.wq) {
err = -ENOMEM;
@@ -259,3 +353,218 @@ int xe_pxp_init(struct xe_device *xe)
drmm_kfree(&xe->drm, pxp);
return err;
}
+
+static int __pxp_start_arb_session(struct xe_pxp *pxp)
+{
+ int ret;
+ unsigned int fw_ref;
+
+ fw_ref = xe_force_wake_get(gt_to_fw(pxp->gt), XE_FW_GT);
+ if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_GT))
+ return -EIO;
+
+ if (pxp_session_is_in_play(pxp, ARB_SESSION)) {
+ ret = -EEXIST;
+ goto out_force_wake;
+ }
+
+ ret = xe_pxp_submit_session_init(&pxp->gsc_res, ARB_SESSION);
+ if (ret) {
+ drm_err(&pxp->xe->drm, "Failed to init PXP arb session\n");
+ goto out_status;
+ }
+
+ ret = pxp_wait_for_session_state(pxp, ARB_SESSION, true);
+ if (ret) {
+ drm_err(&pxp->xe->drm, "PXP ARB session failed to go in play\n");
+ goto out_status;
+ }
+
+ drm_dbg(&pxp->xe->drm, "PXP ARB session is active\n");
+
+out_status:
+ if (!ret)
+ pxp->status = XE_PXP_ACTIVE;
+ else
+ pxp->status = XE_PXP_ERROR;
+
+out_force_wake:
+ xe_force_wake_put(gt_to_fw(pxp->gt), fw_ref);
+ return ret;
+}
+
+/**
+ * xe_pxp_exec_queue_set_type - Mark a queue as using PXP
+ * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
+ * @q: the queue to mark as using PXP
+ * @type: the type of PXP session this queue will use
+ *
+ * Returns 0 if the selected PXP type is supported, -ENODEV otherwise.
+ */
+int xe_pxp_exec_queue_set_type(struct xe_pxp *pxp, struct xe_exec_queue *q, u8 type)
+{
+ if (!xe_pxp_is_enabled(pxp))
+ return -ENODEV;
+
+ /* we only support HWDRM sessions right now */
+ xe_assert(pxp->xe, type == DRM_XE_PXP_TYPE_HWDRM);
+
+ q->pxp.type = type;
+
+ return 0;
+}
+
+/**
+ * xe_pxp_exec_queue_add - add a queue to the PXP list
+ * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
+ * @q: the queue to add to the list
+ *
+ * If PXP is enabled and the prerequisites are done, start the PXP ARB
+ * session (if not already running) and add the queue to the PXP list. Note
+ * that the queue must have previously been marked as using PXP with
+ * xe_pxp_exec_queue_set_type.
+ *
+ * Returns 0 if the PXP ARB session is running and the queue is in the list,
+ * -ENODEV if PXP is disabled, -EBUSY if the PXP prerequisites are not done,
+ * other errno value if something goes wrong during the session start.
+ */
+#define PXP_TERMINATION_TIMEOUT_MS 500
+int xe_pxp_exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q)
+{
+ int ret = 0;
+
+ if (!xe_pxp_is_enabled(pxp))
+ return -ENODEV;
+
+ /* we only support HWDRM sessions right now */
+ xe_assert(pxp->xe, q->pxp.type == DRM_XE_PXP_TYPE_HWDRM);
+
+ /*
+ * Runtime suspend kills PXP, so we need to turn it off while we have
+ * active queues that use PXP
+ */
+ xe_pm_runtime_get(pxp->xe);
+
+ if (!pxp_prerequisites_done(pxp)) {
+ ret = -EBUSY;
+ goto out;
+ }
+
+wait_for_termination:
+ /*
+ * if there is a termination in progress, wait for it.
+ * We need to wait outside the lock because the completion is done from
+ * within the lock
+ */
+ if (!wait_for_completion_timeout(&pxp->termination,
+ msecs_to_jiffies(PXP_TERMINATION_TIMEOUT_MS)))
+ return -ETIMEDOUT;
+
+ mutex_lock(&pxp->mutex);
+
+ /*
+ * check if a new termination was issued between the above check and
+ * grabbing the mutex
+ */
+ if (!completion_done(&pxp->termination)) {
+ mutex_unlock(&pxp->mutex);
+ goto wait_for_termination;
+ }
+
+ /* If PXP is not already active, turn it on */
+ switch (pxp->status) {
+ case XE_PXP_ERROR:
+ ret = -EIO;
+ break;
+ case XE_PXP_ACTIVE:
+ break;
+ case XE_PXP_READY_TO_START:
+ ret = __pxp_start_arb_session(pxp);
+ break;
+ case XE_PXP_NEEDS_TERMINATION:
+ pxp_terminate(pxp);
+ mutex_unlock(&pxp->mutex);
+ goto wait_for_termination;
+ default:
+ drm_err(&pxp->xe->drm, "unexpected state during PXP start: %u", pxp->status);
+ ret = -EIO;
+ break;
+ }
+
+ /* If everything went ok, add the queue to the list */
+ if (!ret) {
+ spin_lock_irq(&pxp->queues.lock);
+ list_add_tail(&q->pxp.link, &pxp->queues.list);
+ spin_unlock_irq(&pxp->queues.lock);
+ }
+
+ mutex_unlock(&pxp->mutex);
+
+out:
+ /*
+ * in the successful case the PM ref is released from
+ * xe_pxp_exec_queue_remove
+ */
+ if (ret)
+ xe_pm_runtime_put(pxp->xe);
+
+ return ret;
+}
+
+/**
+ * xe_pxp_exec_queue_remove - remove a queue from the PXP list
+ * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
+ * @q: the queue to remove from the list
+ *
+ * If PXP is enabled and the exec_queue is in the list, the queue will be
+ * removed from the list and its PM reference will be released. It is safe to
+ * call this function multiple times for the same queue.
+ */
+void xe_pxp_exec_queue_remove(struct xe_pxp *pxp, struct xe_exec_queue *q)
+{
+ bool need_pm_put = false;
+
+ if (!xe_pxp_is_enabled(pxp))
+ return;
+
+ spin_lock_irq(&pxp->queues.lock);
+
+ if (!list_empty(&q->pxp.link)) {
+ list_del_init(&q->pxp.link);
+ need_pm_put = true;
+ }
+
+ q->pxp.type = DRM_XE_PXP_TYPE_NONE;
+
+ spin_unlock_irq(&pxp->queues.lock);
+
+ if (need_pm_put)
+ xe_pm_runtime_put(pxp->xe);
+}
+
+static void pxp_invalidate_queues(struct xe_pxp *pxp)
+{
+ struct xe_exec_queue *tmp, *q;
+
+ spin_lock_irq(&pxp->queues.lock);
+
+ /*
+ * Removing a queue from the PXP list requires a put of the RPM ref that
+ * the queue holds to keep the PXP session alive, which can't be done
+ * under spinlock. Since it is safe to kill a queue multiple times, we
+ * can leave the invalid queue in the list for now and postpone the
+ * removal and associated RPM put to when the queue is destroyed.
+ */
+ list_for_each_entry(tmp, &pxp->queues.list, pxp.link) {
+ q = xe_exec_queue_get_unless_zero(tmp);
+
+ if (!q)
+ continue;
+
+ xe_exec_queue_kill(q);
+ xe_exec_queue_put(q);
+ }
+
+ spin_unlock_irq(&pxp->queues.lock);
+}
+
diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
index 39435c644dcd..2e0ab186072a 100644
--- a/drivers/gpu/drm/xe/xe_pxp.h
+++ b/drivers/gpu/drm/xe/xe_pxp.h
@@ -9,12 +9,17 @@
#include <linux/types.h>
struct xe_device;
-
-#define DRM_XE_PXP_HWDRM_DEFAULT_SESSION 0xF /* TODO: move to uapi */
+struct xe_exec_queue;
+struct xe_pxp;
bool xe_pxp_is_supported(const struct xe_device *xe);
+bool xe_pxp_is_enabled(const struct xe_pxp *pxp);
int xe_pxp_init(struct xe_device *xe);
void xe_pxp_irq_handler(struct xe_device *xe, u16 iir);
+int xe_pxp_exec_queue_set_type(struct xe_pxp *pxp, struct xe_exec_queue *q, u8 type);
+int xe_pxp_exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q);
+void xe_pxp_exec_queue_remove(struct xe_pxp *pxp, struct xe_exec_queue *q);
+
#endif /* __XE_PXP_H__ */
diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
index 40c28f32f51a..db9019dcd78c 100644
--- a/drivers/gpu/drm/xe/xe_pxp_types.h
+++ b/drivers/gpu/drm/xe/xe_pxp_types.h
@@ -6,7 +6,10 @@
#ifndef __XE_PXP_TYPES_H__
#define __XE_PXP_TYPES_H__
+#include <linux/completion.h>
#include <linux/iosys-map.h>
+#include <linux/mutex.h>
+#include <linux/spinlock.h>
#include <linux/types.h>
#include <linux/workqueue.h>
@@ -16,6 +19,14 @@ struct xe_device;
struct xe_gt;
struct xe_vm;
+enum xe_pxp_status {
+ XE_PXP_ERROR = -1,
+ XE_PXP_NEEDS_TERMINATION = 0, /* starting status */
+ XE_PXP_TERMINATION_IN_PROGRESS,
+ XE_PXP_READY_TO_START,
+ XE_PXP_ACTIVE,
+};
+
/**
* struct xe_pxp_gsc_client_resources - resources for GSC submission by a PXP
* client. The GSC FW supports multiple GSC client active at the same time.
@@ -82,6 +93,21 @@ struct xe_pxp {
#define PXP_TERMINATION_REQUEST BIT(0)
#define PXP_TERMINATION_COMPLETE BIT(1)
} irq;
+
+ /** @mutex: protects the pxp status and the queue list */
+ struct mutex mutex;
+ /** @status: the current pxp status */
+ enum xe_pxp_status status;
+ /** @termination: completion struct that tracks terminations */
+ struct completion termination;
+
+ /** @queues: management of exec_queues that use PXP */
+ struct {
+ /** @queues.lock: spinlock protecting the queue management */
+ spinlock_t lock;
+ /** @queues.list: list of exec_queues that use PXP */
+ struct list_head list;
+ } queues;
};
#endif /* __XE_PXP_TYPES_H__ */
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index 4a8a4a63e99c..ae6313b8438a 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1087,6 +1087,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 in microseconds.
+ * - %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 +1128,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 +1731,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] 38+ messages in thread
* [PATCH v3 08/12] drm/xe/pxp: add a query for PXP status
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (6 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 07/12] drm/xe/pxp: Add support for PXP-using queues Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-09 19:00 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP Daniele Ceraolo Spurio
` (10 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe
Cc: Daniele Ceraolo Spurio, José Roberto de Souza, John Harrison
PXP prerequisites (SW proxy and HuC auth via GSC) are completed
asynchronously from driver load, which means that userspace can start
submitting before we're ready to start a PXP session. Therefore, we need
a query that userspace can use to check not only if PXP is supported but
also to wait until the prerequisites are done.
v2: Improve doc, do not report TYPE_NONE as supported (José)
v3: Better comments, remove unneeded copy_from_user (John)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/xe/xe_pxp.c | 32 ++++++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_pxp.h | 1 +
drivers/gpu/drm/xe/xe_query.c | 29 +++++++++++++++++++++++++++++
include/uapi/drm/xe_drm.h | 35 +++++++++++++++++++++++++++++++++++
4 files changed, 97 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
index ce1d7ab448dc..fe56e3eec5a7 100644
--- a/drivers/gpu/drm/xe/xe_pxp.c
+++ b/drivers/gpu/drm/xe/xe_pxp.c
@@ -71,6 +71,38 @@ static bool pxp_prerequisites_done(const struct xe_pxp *pxp)
return ready;
}
+/**
+ * xe_pxp_get_readiness_status - check whether PXP is ready for userspace use
+ * @pxp: the xe_pxp pointer (can be NULL if PXP is disabled)
+ *
+ * Returns: 0 if PXP is not ready yet, 1 if it is ready, a negative errno value
+ * if PXP is not supported/enabled or if something went wrong in the
+ * initialization of the prerequisites. Note that the return values of this
+ * function follow the uapi (see drm_xe_query_pxp_status), so they can be used
+ * directly in the query ioctl.
+ */
+int xe_pxp_get_readiness_status(struct xe_pxp *pxp)
+{
+ int ret = 0;
+
+ if (!xe_pxp_is_enabled(pxp))
+ return -ENODEV;
+
+ /* if the GSC or HuC FW are in an error state, PXP will never work */
+ if (xe_uc_fw_status_to_error(pxp->gt->uc.huc.fw.status) ||
+ xe_uc_fw_status_to_error(pxp->gt->uc.gsc.fw.status))
+ return -EIO;
+
+ xe_pm_runtime_get(pxp->xe);
+
+ /* PXP requires both HuC loaded and GSC proxy initialized */
+ if (pxp_prerequisites_done(pxp))
+ ret = 1;
+
+ xe_pm_runtime_put(pxp->xe);
+ return ret;
+}
+
static bool pxp_session_is_in_play(struct xe_pxp *pxp, u32 id)
{
struct xe_gt *gt = pxp->gt;
diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
index 2e0ab186072a..868813cc84b9 100644
--- a/drivers/gpu/drm/xe/xe_pxp.h
+++ b/drivers/gpu/drm/xe/xe_pxp.h
@@ -14,6 +14,7 @@ struct xe_pxp;
bool xe_pxp_is_supported(const struct xe_device *xe);
bool xe_pxp_is_enabled(const struct xe_pxp *pxp);
+int xe_pxp_get_readiness_status(struct xe_pxp *pxp);
int xe_pxp_init(struct xe_device *xe);
void xe_pxp_irq_handler(struct xe_device *xe, u16 iir);
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index 3eda616f1502..28d3b98c0fd9 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -24,6 +24,7 @@
#include "xe_macros.h"
#include "xe_mmio.h"
#include "xe_oa.h"
+#include "xe_pxp.h"
#include "xe_ttm_vram_mgr.h"
#include "xe_wa.h"
@@ -696,6 +697,33 @@ static int query_oa_units(struct xe_device *xe,
return ret ? -EFAULT : 0;
}
+static int query_pxp_status(struct xe_device *xe, struct drm_xe_device_query *query)
+{
+ struct drm_xe_query_pxp_status __user *query_ptr = u64_to_user_ptr(query->data);
+ size_t size = sizeof(struct drm_xe_query_pxp_status);
+ struct drm_xe_query_pxp_status resp = { 0 };
+ int ret;
+
+ if (query->size == 0) {
+ query->size = size;
+ return 0;
+ } else if (XE_IOCTL_DBG(xe, query->size != size)) {
+ return -EINVAL;
+ }
+
+ ret = xe_pxp_get_readiness_status(xe->pxp);
+ if (ret < 0)
+ return ret;
+
+ resp.status = ret;
+ resp.supported_session_types = BIT(DRM_XE_PXP_TYPE_HWDRM);
+
+ if (copy_to_user(query_ptr, &resp, size))
+ return -EFAULT;
+
+ return 0;
+}
+
static int (* const xe_query_funcs[])(struct xe_device *xe,
struct drm_xe_device_query *query) = {
query_engines,
@@ -707,6 +735,7 @@ static int (* const xe_query_funcs[])(struct xe_device *xe,
query_engine_cycles,
query_uc_fw_version,
query_oa_units,
+ query_pxp_status,
};
int xe_query_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index ae6313b8438a..8249870a171a 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/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 has 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;
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (7 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 08/12] drm/xe/pxp: add a query for PXP status Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-11-21 9:57 ` Jani Nikula
2024-11-20 23:43 ` [PATCH v3 10/12] drm/xe/pxp: add PXP PM support Daniele Ceraolo Spurio
` (9 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe
Cc: Daniele Ceraolo Spurio, Matthew Brost, Thomas Hellström,
John Harrison
The driver needs to know if a BO is encrypted with PXP to enable the
display decryption at flip time.
Furthermore, we want to keep track of the status of the encryption and
reject any operation that involves a BO that is encrypted using an old
key. There are two points in time where such checks can kick in:
1 - at VM bind time, all operations except for unmapping will be
rejected if the key used to encrypt the BO is no longer valid. This
check is opt-in via a new VM_BIND flag, to avoid a scenario where a
malicious app purposely shares an invalid BO with a non-PXP aware
app (such as a compositor). If the VM_BIND was failed, the
compositor would be unable to display anything at all. Allowing the
bind to go through means that output still works, it just displays
garbage data within the bounds of the illegal BO.
2 - at job submission time, if the queue is marked as using PXP, all
objects bound to the VM will be checked and the submission will be
rejected if any of them was encrypted with a key that is no longer
valid.
Note that there is no risk of leaking the encrypted data if a user does
not opt-in to those checks; the only consequence is that the user will
not realize that the encryption key is changed and that the data is no
longer valid.
v2: Better commnnts and descriptions (John), rebase
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
| 13 ++-
drivers/gpu/drm/xe/display/intel_bo.c | 2 +-
drivers/gpu/drm/xe/xe_bo.c | 100 +++++++++++++++++-
drivers/gpu/drm/xe/xe_bo.h | 5 +
drivers/gpu/drm/xe/xe_bo_types.h | 3 +
drivers/gpu/drm/xe/xe_exec.c | 6 ++
drivers/gpu/drm/xe/xe_pxp.c | 74 +++++++++++++
drivers/gpu/drm/xe/xe_pxp.h | 4 +
drivers/gpu/drm/xe/xe_pxp_types.h | 11 ++
drivers/gpu/drm/xe/xe_vm.c | 46 +++++++-
drivers/gpu/drm/xe/xe_vm.h | 2 +
include/uapi/drm/xe_drm.h | 19 ++++
12 files changed, 278 insertions(+), 7 deletions(-)
--git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
index 419e8e926f00..533bc82255b6 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
@@ -9,6 +9,9 @@
#include <linux/errno.h>
#include <linux/types.h>
+#include "xe_bo.h"
+#include "xe_pxp.h"
+
struct drm_gem_object;
struct xe_pxp;
@@ -16,7 +19,15 @@ static inline int intel_pxp_key_check(struct xe_pxp *pxp,
struct drm_gem_object *obj,
bool assign)
{
- return -ENODEV;
+ /*
+ * The assign variable is used in i915 to assign the key to the BO at
+ * first submission time. In Xe the key is instead assigned at BO
+ * creation time, so the assign variable must always be false.
+ */
+ if (assign)
+ return -EINVAL;
+
+ return xe_pxp_key_check(pxp, gem_to_xe_bo(obj));
}
#endif
diff --git a/drivers/gpu/drm/xe/display/intel_bo.c b/drivers/gpu/drm/xe/display/intel_bo.c
index 9f54fad0f1c0..31a262b29723 100644
--- a/drivers/gpu/drm/xe/display/intel_bo.c
+++ b/drivers/gpu/drm/xe/display/intel_bo.c
@@ -25,7 +25,7 @@ bool intel_bo_is_shmem(struct drm_gem_object *obj)
bool intel_bo_is_protected(struct drm_gem_object *obj)
{
- return false;
+ return xe_bo_is_protected(gem_to_xe_bo(obj));
}
void intel_bo_flush_if_display(struct drm_gem_object *obj)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 549866da5cd1..6741e30ec451 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -6,6 +6,7 @@
#include "xe_bo.h"
#include <linux/dma-buf.h>
+#include <linux/nospec.h>
#include <drm/drm_drv.h>
#include <drm/drm_gem_ttm_helper.h>
@@ -24,6 +25,7 @@
#include "xe_migrate.h"
#include "xe_pm.h"
#include "xe_preempt_fence.h"
+#include "xe_pxp.h"
#include "xe_res_cursor.h"
#include "xe_trace_bo.h"
#include "xe_ttm_stolen_mgr.h"
@@ -2012,6 +2014,95 @@ void xe_bo_vunmap(struct xe_bo *bo)
__xe_bo_vunmap(bo);
}
+static int gem_create_set_pxp_type(struct xe_device *xe, struct xe_bo *bo, u64 value)
+{
+ if (value == DRM_XE_PXP_TYPE_NONE)
+ return 0;
+
+ /* we only support DRM_XE_PXP_TYPE_HWDRM for now */
+ if (XE_IOCTL_DBG(xe, value != DRM_XE_PXP_TYPE_HWDRM))
+ return -EINVAL;
+
+ xe_pxp_key_assign(xe->pxp, bo);
+
+ return 0;
+}
+
+typedef int (*xe_gem_create_set_property_fn)(struct xe_device *xe,
+ struct xe_bo *bo,
+ u64 value);
+
+static const xe_gem_create_set_property_fn gem_create_set_property_funcs[] = {
+ [DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY] = gem_create_set_pxp_type,
+};
+
+static int gem_create_user_ext_set_property(struct xe_device *xe,
+ struct xe_bo *bo,
+ u64 extension)
+{
+ u64 __user *address = u64_to_user_ptr(extension);
+ struct drm_xe_ext_set_property ext;
+ int err;
+ u32 idx;
+
+ err = __copy_from_user(&ext, address, sizeof(ext));
+ if (XE_IOCTL_DBG(xe, err))
+ return -EFAULT;
+
+ if (XE_IOCTL_DBG(xe, ext.property >=
+ ARRAY_SIZE(gem_create_set_property_funcs)) ||
+ XE_IOCTL_DBG(xe, ext.pad) ||
+ XE_IOCTL_DBG(xe, ext.property != DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY))
+ return -EINVAL;
+
+ idx = array_index_nospec(ext.property, ARRAY_SIZE(gem_create_set_property_funcs));
+ if (!gem_create_set_property_funcs[idx])
+ return -EINVAL;
+
+ return gem_create_set_property_funcs[idx](xe, bo, ext.value);
+}
+
+typedef int (*xe_gem_create_user_extension_fn)(struct xe_device *xe,
+ struct xe_bo *bo,
+ u64 extension);
+
+static const xe_gem_create_user_extension_fn gem_create_user_extension_funcs[] = {
+ [DRM_XE_GEM_CREATE_EXTENSION_SET_PROPERTY] = gem_create_user_ext_set_property,
+};
+
+#define MAX_USER_EXTENSIONS 16
+static int gem_create_user_extensions(struct xe_device *xe, struct xe_bo *bo,
+ u64 extensions, int ext_number)
+{
+ u64 __user *address = u64_to_user_ptr(extensions);
+ struct drm_xe_user_extension ext;
+ int err;
+ u32 idx;
+
+ if (XE_IOCTL_DBG(xe, ext_number >= MAX_USER_EXTENSIONS))
+ return -E2BIG;
+
+ err = __copy_from_user(&ext, address, sizeof(ext));
+ if (XE_IOCTL_DBG(xe, err))
+ return -EFAULT;
+
+ if (XE_IOCTL_DBG(xe, ext.pad) ||
+ XE_IOCTL_DBG(xe, ext.name >= ARRAY_SIZE(gem_create_user_extension_funcs)))
+ return -EINVAL;
+
+ idx = array_index_nospec(ext.name,
+ ARRAY_SIZE(gem_create_user_extension_funcs));
+ err = gem_create_user_extension_funcs[idx](xe, bo, extensions);
+ if (XE_IOCTL_DBG(xe, err))
+ return err;
+
+ if (ext.next_extension)
+ return gem_create_user_extensions(xe, bo, ext.next_extension,
+ ++ext_number);
+
+ return 0;
+}
+
int xe_gem_create_ioctl(struct drm_device *dev, void *data,
struct drm_file *file)
{
@@ -2024,8 +2115,7 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
u32 handle;
int err;
- if (XE_IOCTL_DBG(xe, args->extensions) ||
- XE_IOCTL_DBG(xe, args->pad[0] || args->pad[1] || args->pad[2]) ||
+ if (XE_IOCTL_DBG(xe, args->pad[0] || args->pad[1] || args->pad[2]) ||
XE_IOCTL_DBG(xe, args->reserved[0] || args->reserved[1]))
return -EINVAL;
@@ -2107,6 +2197,12 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
goto out_vm;
}
+ if (args->extensions) {
+ err = gem_create_user_extensions(xe, bo, args->extensions, 0);
+ if (err)
+ goto out_bulk;
+ }
+
err = drm_gem_handle_create(file, &bo->ttm.base, &handle);
if (err)
goto out_bulk;
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 7fa44a0138b0..0877458d99e4 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -172,6 +172,11 @@ static inline bool xe_bo_is_pinned(struct xe_bo *bo)
return bo->ttm.pin_count;
}
+static inline bool xe_bo_is_protected(const struct xe_bo *bo)
+{
+ return bo->pxp_key_instance;
+}
+
static inline void xe_bo_unpin_map_no_vm(struct xe_bo *bo)
{
if (likely(bo)) {
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 99196228dcc8..97cae46478ad 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -56,6 +56,9 @@ struct xe_bo {
*/
struct list_head client_link;
#endif
+ /** @pxp_key_instance: key instance this bo was created against (if any) */
+ u32 pxp_key_instance;
+
/** @freed: List node for delayed put. */
struct llist_node freed;
/** @update_index: Update index if PT BO */
diff --git a/drivers/gpu/drm/xe/xe_exec.c b/drivers/gpu/drm/xe/xe_exec.c
index 31cca938956f..1acc6e55efd5 100644
--- a/drivers/gpu/drm/xe/xe_exec.c
+++ b/drivers/gpu/drm/xe/xe_exec.c
@@ -262,6 +262,12 @@ int xe_exec_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
goto err_exec;
}
+ if (xe_exec_queue_uses_pxp(q)) {
+ err = xe_vm_validate_protected(q->vm);
+ if (err)
+ goto err_exec;
+ }
+
job = xe_sched_job_create(q, xe_exec_queue_is_parallel(q) ?
addresses : &args->address);
if (IS_ERR(job)) {
diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
index fe56e3eec5a7..f39625ae0259 100644
--- a/drivers/gpu/drm/xe/xe_pxp.c
+++ b/drivers/gpu/drm/xe/xe_pxp.c
@@ -8,6 +8,8 @@
#include <drm/drm_managed.h>
#include <uapi/drm/xe_drm.h>
+#include "xe_bo.h"
+#include "xe_bo_types.h"
#include "xe_device_types.h"
#include "xe_exec_queue.h"
#include "xe_force_wake.h"
@@ -132,6 +134,9 @@ static void pxp_terminate(struct xe_pxp *pxp)
pxp_invalidate_queues(pxp);
+ if (pxp->status == XE_PXP_ACTIVE)
+ pxp->key_instance++;
+
/*
* If we have a termination already in progress, we need to wait for
* it to complete before queueing another one. We update the state
@@ -349,6 +354,8 @@ int xe_pxp_init(struct xe_device *xe)
pxp->xe = xe;
pxp->gt = gt;
+ pxp->key_instance = 1;
+
/*
* we'll use the completion to check if there is a termination pending,
* so we start it as completed and we reinit it when a termination
@@ -600,3 +607,70 @@ static void pxp_invalidate_queues(struct xe_pxp *pxp)
spin_unlock_irq(&pxp->queues.lock);
}
+/**
+ * xe_pxp_key_assign - mark a BO as using the current PXP key iteration
+ * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
+ * @bo: the BO to mark
+ *
+ * Returns: -ENODEV if PXP is disabled, 0 otherwise.
+ */
+int xe_pxp_key_assign(struct xe_pxp *pxp, struct xe_bo *bo)
+{
+ if (!xe_pxp_is_enabled(pxp))
+ return -ENODEV;
+
+ xe_assert(pxp->xe, !bo->pxp_key_instance);
+
+ /*
+ * Note that the PXP key handling is inherently racey, because the key
+ * can theoretically change at any time (although it's unlikely to do
+ * so without triggers), even right after we copy it. Taking a lock
+ * wouldn't help because the value might still change as soon as we
+ * release the lock.
+ * Userspace needs to handle the fact that their BOs can go invalid at
+ * any point.
+ */
+ bo->pxp_key_instance = pxp->key_instance;
+
+ return 0;
+}
+
+/**
+ * xe_pxp_key_check - check if the key used by a BO is valid
+ * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
+ * @bo: the BO we want to check
+ *
+ * Checks whether a BO was encrypted with the current key or an obsolete one.
+ *
+ * Returns: 0 if the key is valid, -ENODEV if PXP is disabled, -EINVAL if the
+ * BO is not using PXP, -ENOEXEC if the key is not valid.
+ */
+int xe_pxp_key_check(struct xe_pxp *pxp, struct xe_bo *bo)
+{
+ if (!xe_pxp_is_enabled(pxp))
+ return -ENODEV;
+
+ if (!xe_bo_is_protected(bo))
+ return -EINVAL;
+
+ xe_assert(pxp->xe, bo->pxp_key_instance);
+
+ /*
+ * Note that the PXP key handling is inherently racey, because the key
+ * can theoretically change at any time (although it's unlikely to do
+ * so without triggers), even right after we check it. Taking a lock
+ * wouldn't help because the value might still change as soon as we
+ * release the lock.
+ * We mitigate the risk by checking the key at multiple points (on each
+ * submission involving the BO and right before flipping it on the
+ * display), but there is still a very small chance that we could
+ * operate on an invalid BO for a single submission or a single frame
+ * flip. This is a compromise made to protect the encrypted data (which
+ * is what the key termination is for).
+ */
+ if (bo->pxp_key_instance != pxp->key_instance)
+ return -ENOEXEC;
+
+ return 0;
+}
+
diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
index 868813cc84b9..2d22a6e6ab27 100644
--- a/drivers/gpu/drm/xe/xe_pxp.h
+++ b/drivers/gpu/drm/xe/xe_pxp.h
@@ -8,6 +8,7 @@
#include <linux/types.h>
+struct xe_bo;
struct xe_device;
struct xe_exec_queue;
struct xe_pxp;
@@ -23,4 +24,7 @@ int xe_pxp_exec_queue_set_type(struct xe_pxp *pxp, struct xe_exec_queue *q, u8 t
int xe_pxp_exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q);
void xe_pxp_exec_queue_remove(struct xe_pxp *pxp, struct xe_exec_queue *q);
+int xe_pxp_key_assign(struct xe_pxp *pxp, struct xe_bo *bo);
+int xe_pxp_key_check(struct xe_pxp *pxp, struct xe_bo *bo);
+
#endif /* __XE_PXP_H__ */
diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
index db9019dcd78c..9c2d2b9a850d 100644
--- a/drivers/gpu/drm/xe/xe_pxp_types.h
+++ b/drivers/gpu/drm/xe/xe_pxp_types.h
@@ -108,6 +108,17 @@ struct xe_pxp {
/** @queues.list: list of exec_queues that use PXP */
struct list_head list;
} queues;
+
+ /**
+ * @key_instance: keep track of the current iteration of the PXP key.
+ * Note that, due to the time needed for PXP termination and re-start
+ * to complete, the minimum time between 2 subsequent increases of this
+ * variable is 50ms, and even that only if there is a continuous attack;
+ * normal behavior is for this to increase much much slower than that.
+ * This means that we don't expect this to ever wrap and don't implement
+ * that case in the code.
+ */
+ u32 key_instance;
};
#endif /* __XE_PXP_TYPES_H__ */
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index eb95f654a88f..9ef7a01c36ba 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -33,6 +33,7 @@
#include "xe_pm.h"
#include "xe_preempt_fence.h"
#include "xe_pt.h"
+#include "xe_pxp.h"
#include "xe_res_cursor.h"
#include "xe_sync.h"
#include "xe_trace_bo.h"
@@ -2724,7 +2725,8 @@ ALLOW_ERROR_INJECTION(vm_bind_ioctl_ops_execute, ERRNO);
(DRM_XE_VM_BIND_FLAG_READONLY | \
DRM_XE_VM_BIND_FLAG_IMMEDIATE | \
DRM_XE_VM_BIND_FLAG_NULL | \
- DRM_XE_VM_BIND_FLAG_DUMPABLE)
+ DRM_XE_VM_BIND_FLAG_DUMPABLE | \
+ DRM_XE_VM_BIND_FLAG_CHECK_PXP)
#ifdef TEST_VM_OPS_ERROR
#define SUPPORTED_FLAGS (SUPPORTED_FLAGS_STUB | FORCE_OP_ERROR)
@@ -2887,7 +2889,7 @@ static void xe_vma_ops_init(struct xe_vma_ops *vops, struct xe_vm *vm,
static int xe_vm_bind_ioctl_validate_bo(struct xe_device *xe, struct xe_bo *bo,
u64 addr, u64 range, u64 obj_offset,
- u16 pat_index)
+ u16 pat_index, u32 op, u32 bind_flags)
{
u16 coh_mode;
@@ -2931,6 +2933,12 @@ static int xe_vm_bind_ioctl_validate_bo(struct xe_device *xe, struct xe_bo *bo,
return -EINVAL;
}
+ /* If a BO is protected it can only be mapped if the key is still valid */
+ if ((bind_flags & DRM_XE_VM_BIND_FLAG_CHECK_PXP) && xe_bo_is_protected(bo) &&
+ op != DRM_XE_VM_BIND_OP_UNMAP && op != DRM_XE_VM_BIND_OP_UNMAP_ALL)
+ if (XE_IOCTL_DBG(xe, xe_pxp_key_check(xe->pxp, bo) != 0))
+ return -ENOEXEC;
+
return 0;
}
@@ -3020,6 +3028,8 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
u32 obj = bind_ops[i].obj;
u64 obj_offset = bind_ops[i].obj_offset;
u16 pat_index = bind_ops[i].pat_index;
+ u32 op = bind_ops[i].op;
+ u32 bind_flags = bind_ops[i].flags;
if (!obj)
continue;
@@ -3032,7 +3042,8 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
bos[i] = gem_to_xe_bo(gem_obj);
err = xe_vm_bind_ioctl_validate_bo(xe, bos[i], addr, range,
- obj_offset, pat_index);
+ obj_offset, pat_index, op,
+ bind_flags);
if (err)
goto put_obj;
}
@@ -3332,6 +3343,35 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
return ret;
}
+int xe_vm_validate_protected(struct xe_vm *vm)
+{
+ struct drm_gpuva *gpuva;
+ int err = 0;
+
+ if (!vm)
+ return -ENODEV;
+
+ mutex_lock(&vm->snap_mutex);
+
+ drm_gpuvm_for_each_va(gpuva, &vm->gpuvm) {
+ struct xe_vma *vma = gpuva_to_vma(gpuva);
+ struct xe_bo *bo = vma->gpuva.gem.obj ?
+ gem_to_xe_bo(vma->gpuva.gem.obj) : NULL;
+
+ if (!bo)
+ continue;
+
+ if (xe_bo_is_protected(bo)) {
+ err = xe_pxp_key_check(vm->xe->pxp, bo);
+ if (err)
+ break;
+ }
+ }
+
+ mutex_unlock(&vm->snap_mutex);
+ return err;
+}
+
struct xe_vm_snapshot {
unsigned long num_snaps;
struct {
diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
index 0a2fa6c0815b..f66075f8a6fe 100644
--- a/drivers/gpu/drm/xe/xe_vm.h
+++ b/drivers/gpu/drm/xe/xe_vm.h
@@ -215,6 +215,8 @@ struct dma_fence *xe_vma_rebind(struct xe_vm *vm, struct xe_vma *vma,
int xe_vm_invalidate_vma(struct xe_vma *vma);
+int xe_vm_validate_protected(struct xe_vm *vm);
+
static inline void xe_vm_queue_rebind_worker(struct xe_vm *vm)
{
xe_assert(vm->xe, xe_vm_in_preempt_fence_mode(vm));
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index 8249870a171a..05041d0e3a41 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -778,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;
@@ -941,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 */
@@ -1031,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;
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 10/12] drm/xe/pxp: add PXP PM support
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (8 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-09 19:42 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 11/12] drm/xe/pxp: Add PXP debugfs support Daniele Ceraolo Spurio
` (8 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, John Harrison
The HW suspend flow kills all PXP HWDRM sessions, so if there was any
PXP activity before the suspend we need to trigger a full termination on
suspend.
v2: rebase
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/xe/xe_pm.c | 40 +++++++---
drivers/gpu/drm/xe/xe_pxp.c | 120 ++++++++++++++++++++++++++++--
drivers/gpu/drm/xe/xe_pxp.h | 3 +
drivers/gpu/drm/xe/xe_pxp_types.h | 7 ++
4 files changed, 156 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c
index 80699dbeb2e9..2fe011a6c6e9 100644
--- a/drivers/gpu/drm/xe/xe_pm.c
+++ b/drivers/gpu/drm/xe/xe_pm.c
@@ -21,6 +21,7 @@
#include "xe_guc.h"
#include "xe_irq.h"
#include "xe_pcode.h"
+#include "xe_pxp.h"
#include "xe_trace.h"
#include "xe_wa.h"
@@ -121,6 +122,10 @@ int xe_pm_suspend(struct xe_device *xe)
drm_dbg(&xe->drm, "Suspending device\n");
trace_xe_pm_suspend(xe, __builtin_return_address(0));
+ err = xe_pxp_pm_suspend(xe->pxp, false);
+ if (err)
+ goto err;
+
for_each_gt(gt, xe, id)
xe_gt_suspend_prepare(gt);
@@ -129,14 +134,12 @@ int xe_pm_suspend(struct xe_device *xe)
/* FIXME: Super racey... */
err = xe_bo_evict_all(xe);
if (err)
- goto err;
+ goto err_pxp;
for_each_gt(gt, xe, id) {
err = xe_gt_suspend(gt);
- if (err) {
- xe_display_pm_resume(xe);
- goto err;
- }
+ if (err)
+ goto err_display;
}
xe_irq_suspend(xe);
@@ -145,6 +148,11 @@ int xe_pm_suspend(struct xe_device *xe)
drm_dbg(&xe->drm, "Device suspended\n");
return 0;
+
+err_display:
+ xe_display_pm_resume(xe);
+err_pxp:
+ xe_pxp_pm_resume(xe->pxp);
err:
drm_dbg(&xe->drm, "Device suspend failed %d\n", err);
return err;
@@ -194,6 +202,8 @@ int xe_pm_resume(struct xe_device *xe)
if (err)
goto err;
+ xe_pxp_pm_resume(xe->pxp);
+
drm_dbg(&xe->drm, "Device resumed\n");
return 0;
err:
@@ -388,6 +398,10 @@ int xe_pm_runtime_suspend(struct xe_device *xe)
*/
xe_rpm_lockmap_acquire(xe);
+ err = xe_pxp_pm_suspend(xe->pxp, true);
+ if (err)
+ goto out;
+
/*
* Applying lock for entire list op as xe_ttm_bo_destroy and xe_bo_move_notify
* also checks and delets bo entry from user fault list.
@@ -403,22 +417,28 @@ int xe_pm_runtime_suspend(struct xe_device *xe)
if (xe->d3cold.allowed) {
err = xe_bo_evict_all(xe);
if (err)
- goto out;
+ goto out_resume;
}
for_each_gt(gt, xe, id) {
err = xe_gt_suspend(gt);
if (err)
- goto out;
+ goto out_resume;
}
xe_irq_suspend(xe);
if (xe->d3cold.allowed)
xe_display_pm_suspend_late(xe);
+
+ xe_rpm_lockmap_release(xe);
+ xe_pm_write_callback_task(xe, NULL);
+ return 0;
+
+out_resume:
+ xe_display_pm_runtime_resume(xe);
+ xe_pxp_pm_resume(xe->pxp);
out:
- if (err)
- xe_display_pm_runtime_resume(xe);
xe_rpm_lockmap_release(xe);
xe_pm_write_callback_task(xe, NULL);
return err;
@@ -471,6 +491,8 @@ int xe_pm_runtime_resume(struct xe_device *xe)
goto out;
}
+ xe_pxp_pm_resume(xe->pxp);
+
out:
xe_rpm_lockmap_release(xe);
xe_pm_write_callback_task(xe, NULL);
diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
index f39625ae0259..06f025bce5f8 100644
--- a/drivers/gpu/drm/xe/xe_pxp.c
+++ b/drivers/gpu/drm/xe/xe_pxp.c
@@ -123,6 +123,14 @@ static int pxp_wait_for_session_state(struct xe_pxp *pxp, u32 id, bool in_play)
static void pxp_invalidate_queues(struct xe_pxp *pxp);
+static void pxp_invalidate_state(struct xe_pxp *pxp)
+{
+ pxp_invalidate_queues(pxp);
+
+ if (pxp->status == XE_PXP_ACTIVE)
+ pxp->key_instance++;
+}
+
static void pxp_terminate(struct xe_pxp *pxp)
{
int ret = 0;
@@ -132,10 +140,14 @@ static void pxp_terminate(struct xe_pxp *pxp)
lockdep_assert_held(&pxp->mutex);
- pxp_invalidate_queues(pxp);
+ pxp_invalidate_state(pxp);
- if (pxp->status == XE_PXP_ACTIVE)
- pxp->key_instance++;
+ /*
+ * we'll mark the status as needing termination on resume, so no need to
+ * emit a termination now.
+ */
+ if (pxp->status == XE_PXP_SUSPENDED)
+ return;
/*
* If we have a termination already in progress, we need to wait for
@@ -187,17 +199,19 @@ static void pxp_terminate(struct xe_pxp *pxp)
static void pxp_terminate_complete(struct xe_pxp *pxp)
{
/*
- * We expect PXP to be in one of 2 states when we get here:
+ * We expect PXP to be in one of 3 states when we get here:
* - XE_PXP_TERMINATION_IN_PROGRESS: a single termination event was
* requested and it is now completing, so we're ready to start.
* - XE_PXP_NEEDS_TERMINATION: a second termination was requested while
* the first one was still being processed; we don't update the state
* in this case so the pxp_start code will automatically issue that
* second termination.
+ * - XE_PXP_SUSPENDED: PXP is now suspended, so we defer everything to
+ * when we come back on resume.
*/
if (pxp->status == XE_PXP_TERMINATION_IN_PROGRESS)
pxp->status = XE_PXP_READY_TO_START;
- else if (pxp->status != XE_PXP_NEEDS_TERMINATION)
+ else if (pxp->status != XE_PXP_NEEDS_TERMINATION && pxp->status != XE_PXP_SUSPENDED)
drm_err(&pxp->xe->drm,
"PXP termination complete while status was %u\n",
pxp->status);
@@ -355,6 +369,7 @@ int xe_pxp_init(struct xe_device *xe)
pxp->gt = gt;
pxp->key_instance = 1;
+ pxp->last_suspend_key_instance = 1;
/*
* we'll use the completion to check if there is a termination pending,
@@ -524,6 +539,7 @@ int xe_pxp_exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q)
pxp_terminate(pxp);
mutex_unlock(&pxp->mutex);
goto wait_for_termination;
+ case XE_PXP_SUSPENDED:
default:
drm_err(&pxp->xe->drm, "unexpected state during PXP start: %u", pxp->status);
ret = -EIO;
@@ -674,3 +690,97 @@ int xe_pxp_key_check(struct xe_pxp *pxp, struct xe_bo *bo)
return 0;
}
+/**
+ * xe_pxp_pm_suspend - prepare PXP for HW suspend
+ * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
+ * @runtime: indicates whether this is a runtime suspend or not
+ *
+ * Checks whether a BO was encrypted with the current key or an obsolete one.
+ *
+ * Returns: 0 if successful, a negative errno value otherwise.
+ */
+int xe_pxp_pm_suspend(struct xe_pxp *pxp, bool runtime)
+{
+ int ret = 0;
+
+ if (!xe_pxp_is_enabled(pxp))
+ return 0;
+
+ mutex_lock(&pxp->mutex);
+
+ /* if a termination is already in progress, no need to do additional cleanup */
+ if (!completion_done(&pxp->termination))
+ goto mark_suspended;
+
+ switch (pxp->status) {
+ case XE_PXP_ERROR:
+ case XE_PXP_READY_TO_START:
+ case XE_PXP_SUSPENDED:
+ /* nothing to cleanup */
+ break;
+ case XE_PXP_NEEDS_TERMINATION:
+ /* If PXP was never used we can skip the cleanup */
+ if (pxp->key_instance == pxp->last_suspend_key_instance)
+ break;
+ fallthrough;
+ case XE_PXP_ACTIVE:
+ if (runtime)
+ pxp_invalidate_state(pxp);
+ else
+ pxp_terminate(pxp);
+ break;
+ default:
+ drm_err(&pxp->xe->drm, "unexpected state during PXP suspend: %u",
+ pxp->status);
+ ret = -EIO;
+ goto out;
+ }
+
+mark_suspended:
+ /*
+ * We set this even if we were in error state, hoping the suspend clears
+ * the error. Worse case we fail again and go in error state again.
+ */
+ pxp->status = XE_PXP_SUSPENDED;
+
+ mutex_unlock(&pxp->mutex);
+
+ /*
+ * if there is a termination in progress, wait for it.
+ * We need to wait outside the lock because the completion is done from
+ * within the lock
+ */
+ if (!wait_for_completion_timeout(&pxp->termination,
+ msecs_to_jiffies(PXP_TERMINATION_TIMEOUT_MS)))
+ ret = -ETIMEDOUT;
+
+ pxp->last_suspend_key_instance = pxp->key_instance;
+
+out:
+ return ret;
+}
+
+/**
+ * xe_pxp_pm_resume - re-init PXP after HW suspend
+ * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
+ */
+void xe_pxp_pm_resume(struct xe_pxp *pxp)
+{
+ int err;
+
+ if (!xe_pxp_is_enabled(pxp))
+ return;
+
+ err = kcr_pxp_enable(pxp);
+
+ mutex_lock(&pxp->mutex);
+
+ xe_assert(pxp->xe, pxp->status == XE_PXP_SUSPENDED);
+
+ if (err)
+ pxp->status = XE_PXP_ERROR;
+ else
+ pxp->status = XE_PXP_NEEDS_TERMINATION;
+
+ mutex_unlock(&pxp->mutex);
+}
diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
index 2d22a6e6ab27..0477bb46d49f 100644
--- a/drivers/gpu/drm/xe/xe_pxp.h
+++ b/drivers/gpu/drm/xe/xe_pxp.h
@@ -20,6 +20,9 @@ int xe_pxp_get_readiness_status(struct xe_pxp *pxp);
int xe_pxp_init(struct xe_device *xe);
void xe_pxp_irq_handler(struct xe_device *xe, u16 iir);
+int xe_pxp_pm_suspend(struct xe_pxp *pxp, bool runtime);
+void xe_pxp_pm_resume(struct xe_pxp *pxp);
+
int xe_pxp_exec_queue_set_type(struct xe_pxp *pxp, struct xe_exec_queue *q, u8 type);
int xe_pxp_exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q);
void xe_pxp_exec_queue_remove(struct xe_pxp *pxp, struct xe_exec_queue *q);
diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
index 9c2d2b9a850d..fa40b039e26f 100644
--- a/drivers/gpu/drm/xe/xe_pxp_types.h
+++ b/drivers/gpu/drm/xe/xe_pxp_types.h
@@ -25,6 +25,7 @@ enum xe_pxp_status {
XE_PXP_TERMINATION_IN_PROGRESS,
XE_PXP_READY_TO_START,
XE_PXP_ACTIVE,
+ XE_PXP_SUSPENDED,
};
/**
@@ -119,6 +120,12 @@ struct xe_pxp {
* that case in the code.
*/
u32 key_instance;
+ /**
+ * @last_suspend_key_instance: value of key_instance at the last
+ * suspend. Used to check if any PXP session has been created between
+ * suspend cycles.
+ */
+ u32 last_suspend_key_instance;
};
#endif /* __XE_PXP_TYPES_H__ */
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 11/12] drm/xe/pxp: Add PXP debugfs support
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (9 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 10/12] drm/xe/pxp: add PXP PM support Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-12-09 19:44 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 12/12] drm/xe/pxp: Enable PXP for MTL and LNL Daniele Ceraolo Spurio
` (7 subsequent siblings)
18 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, John Harrison
This patch introduces 2 PXP debugfs entries:
- info: prints the current PXP status and key instance
- terminate: simulate a termination interrupt
The first one is useful for debug, while the second one can be used for
testing the termination flow.
v2: move the info prints inside the lock (John)
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_debugfs.c | 3 +
drivers/gpu/drm/xe/xe_pxp_debugfs.c | 120 ++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_pxp_debugfs.h | 13 +++
4 files changed, 137 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_pxp_debugfs.c
create mode 100644 drivers/gpu/drm/xe/xe_pxp_debugfs.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 126c8f1ab673..28b5c9e6379c 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -87,6 +87,7 @@ xe-y += xe_bb.o \
xe_pt.o \
xe_pt_walk.o \
xe_pxp.o \
+ xe_pxp_debugfs.o \
xe_pxp_submit.o \
xe_query.o \
xe_range_fence.o \
diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index 492b4877433f..56cb3788e752 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -18,6 +18,7 @@
#include "xe_gt_printk.h"
#include "xe_guc_ads.h"
#include "xe_pm.h"
+#include "xe_pxp_debugfs.h"
#include "xe_sriov.h"
#include "xe_step.h"
@@ -230,5 +231,7 @@ void xe_debugfs_register(struct xe_device *xe)
for_each_gt(gt, xe, id)
xe_gt_debugfs_register(gt);
+ xe_pxp_debugfs_register(xe->pxp);
+
fault_create_debugfs_attr("fail_gt_reset", root, >_reset_failure);
}
diff --git a/drivers/gpu/drm/xe/xe_pxp_debugfs.c b/drivers/gpu/drm/xe/xe_pxp_debugfs.c
new file mode 100644
index 000000000000..ccfbacf08efc
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_pxp_debugfs.c
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include "xe_pxp_debugfs.h"
+
+#include <linux/debugfs.h>
+
+#include <drm/drm_debugfs.h>
+#include <drm/drm_managed.h>
+#include <drm/drm_print.h>
+
+#include "xe_device.h"
+#include "xe_pxp.h"
+#include "xe_pxp_types.h"
+#include "regs/xe_irq_regs.h"
+
+static struct xe_pxp *node_to_pxp(struct drm_info_node *node)
+{
+ return node->info_ent->data;
+}
+
+static const char *pxp_status_to_str(struct xe_pxp *pxp)
+{
+ lockdep_assert_held(&pxp->mutex);
+
+ switch (pxp->status) {
+ case XE_PXP_ERROR:
+ return "error";
+ case XE_PXP_NEEDS_TERMINATION:
+ return "needs termination";
+ case XE_PXP_TERMINATION_IN_PROGRESS:
+ return "termination in progress";
+ case XE_PXP_READY_TO_START:
+ return "ready to start";
+ case XE_PXP_ACTIVE:
+ return "active";
+ case XE_PXP_SUSPENDED:
+ return "suspended";
+ default:
+ return "unknown";
+ }
+};
+
+static int pxp_info(struct seq_file *m, void *data)
+{
+ struct xe_pxp *pxp = node_to_pxp(m->private);
+ struct drm_printer p = drm_seq_file_printer(m);
+ const char *status;
+
+ if (!xe_pxp_is_enabled(pxp))
+ return -ENODEV;
+
+ mutex_lock(&pxp->mutex);
+ status = pxp_status_to_str(pxp);
+
+ drm_printf(&p, "status: %s\n", status);
+ drm_printf(&p, "instance counter: %u\n", pxp->key_instance);
+ mutex_unlock(&pxp->mutex);
+
+ return 0;
+}
+
+static int pxp_terminate(struct seq_file *m, void *data)
+{
+ struct xe_pxp *pxp = node_to_pxp(m->private);
+ struct drm_printer p = drm_seq_file_printer(m);
+
+ if (!xe_pxp_is_enabled(pxp))
+ return -ENODEV;
+
+ /* simulate a termination interrupt */
+ spin_lock_irq(&pxp->xe->irq.lock);
+ xe_pxp_irq_handler(pxp->xe, KCR_PXP_STATE_TERMINATED_INTERRUPT);
+ spin_unlock_irq(&pxp->xe->irq.lock);
+
+ drm_printf(&p, "PXP termination queued\n");
+
+ return 0;
+}
+
+static const struct drm_info_list debugfs_list[] = {
+ {"info", pxp_info, 0},
+ {"terminate", pxp_terminate, 0},
+};
+
+void xe_pxp_debugfs_register(struct xe_pxp *pxp)
+{
+ struct drm_minor *minor;
+ struct drm_info_list *local;
+ struct dentry *root;
+ int i;
+
+ if (!xe_pxp_is_enabled(pxp))
+ return;
+
+ minor = pxp->xe->drm.primary;
+ if (!minor->debugfs_root)
+ return;
+
+#define DEBUGFS_SIZE (ARRAY_SIZE(debugfs_list) * sizeof(struct drm_info_list))
+ local = drmm_kmalloc(&pxp->xe->drm, DEBUGFS_SIZE, GFP_KERNEL);
+ if (!local)
+ return;
+
+ memcpy(local, debugfs_list, DEBUGFS_SIZE);
+#undef DEBUGFS_SIZE
+
+ for (i = 0; i < ARRAY_SIZE(debugfs_list); ++i)
+ local[i].data = pxp;
+
+ root = debugfs_create_dir("pxp", minor->debugfs_root);
+ if (IS_ERR(root))
+ return;
+
+ drm_debugfs_create_files(local,
+ ARRAY_SIZE(debugfs_list),
+ root, minor);
+}
diff --git a/drivers/gpu/drm/xe/xe_pxp_debugfs.h b/drivers/gpu/drm/xe/xe_pxp_debugfs.h
new file mode 100644
index 000000000000..988466aad50b
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_pxp_debugfs.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef __XE_PXP_DEBUGFS_H__
+#define __XE_PXP_DEBUGFS_H__
+
+struct xe_pxp;
+
+void xe_pxp_debugfs_register(struct xe_pxp *pxp);
+
+#endif /* __XE_PXP_DEBUGFS_H__ */
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v3 12/12] drm/xe/pxp: Enable PXP for MTL and LNL
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (10 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 11/12] drm/xe/pxp: Add PXP debugfs support Daniele Ceraolo Spurio
@ 2024-11-20 23:43 ` Daniele Ceraolo Spurio
2024-11-21 0:15 ` ✓ CI.Patch_applied: success for Add PXP HWDRM support (rev3) Patchwork
` (6 subsequent siblings)
18 siblings, 0 replies; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-20 23:43 UTC (permalink / raw)
To: intel-xe; +Cc: Daniele Ceraolo Spurio, John Harrison
Now that are the pieces are there, we can turn the feature on.
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/xe/xe_pci.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index de5034979ec3..206be1a1a705 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -337,11 +337,13 @@ static const struct xe_device_desc mtl_desc = {
.require_force_probe = true,
PLATFORM(METEORLAKE),
.has_display = true,
+ .has_pxp = true,
};
static const struct xe_device_desc lnl_desc = {
PLATFORM(LUNARLAKE),
.has_display = true,
+ .has_pxp = true,
};
static const struct xe_device_desc bmg_desc = {
--
2.43.0
^ permalink raw reply related [flat|nested] 38+ messages in thread
* ✓ CI.Patch_applied: success for Add PXP HWDRM support (rev3)
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (11 preceding siblings ...)
2024-11-20 23:43 ` [PATCH v3 12/12] drm/xe/pxp: Enable PXP for MTL and LNL Daniele Ceraolo Spurio
@ 2024-11-21 0:15 ` Patchwork
2024-11-21 0:16 ` ✗ CI.checkpatch: warning " Patchwork
` (5 subsequent siblings)
18 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2024-11-21 0:15 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: intel-xe
== Series Details ==
Series: Add PXP HWDRM support (rev3)
URL : https://patchwork.freedesktop.org/series/136052/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: e46649e7764a drm-tip: 2024y-11m-20d-23h-16m-04s UTC integration manifest
=== git am output follows ===
.git/rebase-apply/patch:323: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
.git/rebase-apply/patch:675: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
.git/rebase-apply/patch:348: new blank line at EOF.
+
warning: 1 line adds whitespace errors.
Applying: drm/xe/pxp: Initialize PXP structure and KCR reg
Applying: drm/xe/pxp: Allocate PXP execution resources
Applying: drm/xe/pxp: Add VCS inline termination support
Applying: drm/xe/pxp: Add GSC session invalidation support
Applying: drm/xe/pxp: Handle the PXP termination interrupt
Applying: drm/xe/pxp: Add GSC session initialization support
Applying: drm/xe/pxp: Add support for PXP-using queues
Applying: drm/xe/pxp: add a query for PXP status
Applying: drm/xe/pxp: Add API to mark a BO as using PXP
Applying: drm/xe/pxp: add PXP PM support
Applying: drm/xe/pxp: Add PXP debugfs support
Applying: drm/xe/pxp: Enable PXP for MTL and LNL
^ permalink raw reply [flat|nested] 38+ messages in thread
* ✗ CI.checkpatch: warning for Add PXP HWDRM support (rev3)
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (12 preceding siblings ...)
2024-11-21 0:15 ` ✓ CI.Patch_applied: success for Add PXP HWDRM support (rev3) Patchwork
@ 2024-11-21 0:16 ` Patchwork
2024-11-21 0:17 ` ✓ CI.KUnit: success " Patchwork
` (4 subsequent siblings)
18 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2024-11-21 0:16 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: intel-xe
== Series Details ==
Series: Add PXP HWDRM support (rev3)
URL : https://patchwork.freedesktop.org/series/136052/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
30ab6715fc09baee6cc14cb3c89ad8858688d474
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 85bba26b99a6bed0fb7e6dccbf8b3ebe17693ddf
Author: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Date: Wed Nov 20 15:43:52 2024 -0800
drm/xe/pxp: Enable PXP for MTL and LNL
Now that are the pieces are there, we can turn the feature on.
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
+ /mt/dim checkpatch e46649e7764a9f6868ccbcba7b8b23b413303380 drm-intel
320e4e94ee14 drm/xe/pxp: Initialize PXP structure and KCR reg
-:44: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#44:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 245 lines checked
585a8f50e156 drm/xe/pxp: Allocate PXP execution resources
-:82: WARNING:LONG_LINE: line length of 108 exceeds 100 columns
#82: FILE: drivers/gpu/drm/xe/xe_exec_queue.c:154:
+ xe_assert(xe, !vm || (!!(vm->flags & XE_VM_FLAG_GSC) == !!(hwe->engine_id == XE_HW_ENGINE_GSCCS0)));
-:139: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#139:
new file mode 100644
total: 0 errors, 2 warnings, 0 checks, 553 lines checked
79db4a8ef2d2 drm/xe/pxp: Add VCS inline termination support
-:31: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#31:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 219 lines checked
c12a1998521e drm/xe/pxp: Add GSC session invalidation support
5037645c2899 drm/xe/pxp: Handle the PXP termination interrupt
b36e9fe3c139 drm/xe/pxp: Add GSC session initialization support
a93a47d938a9 drm/xe/pxp: Add support for PXP-using queues
5404181812dc drm/xe/pxp: add a query for PXP status
5bbdc0e8e3fe drm/xe/pxp: Add API to mark a BO as using PXP
-:408: WARNING:REPEATED_WORD: Possible repeated word: 'much'
#408: FILE: drivers/gpu/drm/xe/xe_pxp_types.h:117:
+ * normal behavior is for this to increase much much slower than that.
total: 0 errors, 1 warnings, 0 checks, 456 lines checked
32fe4d84a3c8 drm/xe/pxp: add PXP PM support
3dece59c67f4 drm/xe/pxp: Add PXP debugfs support
-:52: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#52:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 154 lines checked
85bba26b99a6 drm/xe/pxp: Enable PXP for MTL and LNL
^ permalink raw reply [flat|nested] 38+ messages in thread
* ✓ CI.KUnit: success for Add PXP HWDRM support (rev3)
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (13 preceding siblings ...)
2024-11-21 0:16 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-11-21 0:17 ` Patchwork
2024-11-21 0:35 ` ✓ CI.Build: " Patchwork
` (3 subsequent siblings)
18 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2024-11-21 0:17 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: intel-xe
== Series Details ==
Series: Add PXP HWDRM support (rev3)
URL : https://patchwork.freedesktop.org/series/136052/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[00:16:26] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[00:16:31] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
156 | u64 ioread64_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
163 | u64 ioread64_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
170 | u64 ioread64be_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
178 | u64 ioread64be_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
[00:16:59] Starting KUnit Kernel (1/1)...
[00:16:59] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[00:16:59] =================== guc_dbm (7 subtests) ===================
[00:16:59] [PASSED] test_empty
[00:16:59] [PASSED] test_default
[00:16:59] ======================== test_size ========================
[00:16:59] [PASSED] 4
[00:16:59] [PASSED] 8
[00:16:59] [PASSED] 32
[00:16:59] [PASSED] 256
[00:16:59] ==================== [PASSED] test_size ====================
[00:16:59] ======================= test_reuse ========================
[00:16:59] [PASSED] 4
[00:16:59] [PASSED] 8
[00:16:59] [PASSED] 32
[00:16:59] [PASSED] 256
[00:16:59] =================== [PASSED] test_reuse ====================
[00:16:59] =================== test_range_overlap ====================
[00:16:59] [PASSED] 4
[00:16:59] [PASSED] 8
[00:16:59] [PASSED] 32
[00:16:59] [PASSED] 256
[00:16:59] =============== [PASSED] test_range_overlap ================
[00:16:59] =================== test_range_compact ====================
[00:16:59] [PASSED] 4
[00:16:59] [PASSED] 8
[00:16:59] [PASSED] 32
[00:16:59] [PASSED] 256
[00:16:59] =============== [PASSED] test_range_compact ================
[00:16:59] ==================== test_range_spare =====================
[00:16:59] [PASSED] 4
[00:16:59] [PASSED] 8
[00:16:59] [PASSED] 32
[00:16:59] [PASSED] 256
[00:16:59] ================ [PASSED] test_range_spare =================
[00:16:59] ===================== [PASSED] guc_dbm =====================
[00:16:59] =================== guc_idm (6 subtests) ===================
[00:16:59] [PASSED] bad_init
[00:16:59] [PASSED] no_init
[00:16:59] [PASSED] init_fini
[00:16:59] [PASSED] check_used
[00:16:59] [PASSED] check_quota
[00:16:59] [PASSED] check_all
[00:16:59] ===================== [PASSED] guc_idm =====================
[00:16:59] ================== no_relay (3 subtests) ===================
[00:16:59] [PASSED] xe_drops_guc2pf_if_not_ready
[00:16:59] [PASSED] xe_drops_guc2vf_if_not_ready
[00:16:59] [PASSED] xe_rejects_send_if_not_ready
[00:16:59] ==================== [PASSED] no_relay =====================
[00:16:59] ================== pf_relay (14 subtests) ==================
[00:16:59] [PASSED] pf_rejects_guc2pf_too_short
[00:16:59] [PASSED] pf_rejects_guc2pf_too_long
[00:16:59] [PASSED] pf_rejects_guc2pf_no_payload
[00:16:59] [PASSED] pf_fails_no_payload
[00:16:59] [PASSED] pf_fails_bad_origin
[00:16:59] [PASSED] pf_fails_bad_type
[00:16:59] [PASSED] pf_txn_reports_error
[00:16:59] [PASSED] pf_txn_sends_pf2guc
[00:16:59] [PASSED] pf_sends_pf2guc
[00:16:59] [SKIPPED] pf_loopback_nop
[00:16:59] [SKIPPED] pf_loopback_echo
[00:16:59] [SKIPPED] pf_loopback_fail
[00:16:59] [SKIPPED] pf_loopback_busy
[00:16:59] [SKIPPED] pf_loopback_retry
[00:16:59] ==================== [PASSED] pf_relay =====================
[00:16:59] ================== vf_relay (3 subtests) ===================
[00:16:59] [PASSED] vf_rejects_guc2vf_too_short
[00:16:59] [PASSED] vf_rejects_guc2vf_too_long
[00:16:59] [PASSED] vf_rejects_guc2vf_no_payload
[00:16:59] ==================== [PASSED] vf_relay =====================
[00:16:59] ================= pf_service (11 subtests) =================
[00:16:59] [PASSED] pf_negotiate_any
[00:16:59] [PASSED] pf_negotiate_base_match
[00:16:59] [PASSED] pf_negotiate_base_newer
[00:16:59] [PASSED] pf_negotiate_base_next
[00:16:59] [SKIPPED] pf_negotiate_base_older
[00:16:59] [PASSED] pf_negotiate_base_prev
[00:16:59] [PASSED] pf_negotiate_latest_match
[00:16:59] [PASSED] pf_negotiate_latest_newer
[00:16:59] [PASSED] pf_negotiate_latest_next
[00:16:59] [SKIPPED] pf_negotiate_latest_older
[00:16:59] [SKIPPED] pf_negotiate_latest_prev
[00:16:59] =================== [PASSED] pf_service ====================
[00:16:59] ===================== lmtt (1 subtest) =====================
[00:16:59] ======================== test_ops =========================
[00:16:59] [PASSED] 2-level
[00:16:59] [PASSED] multi-level
[00:16:59] ==================== [PASSED] test_ops =====================
[00:16:59] ====================== [PASSED] lmtt =======================
[00:16:59] =================== xe_mocs (2 subtests) ===================
[00:16:59] ================ xe_live_mocs_kernel_kunit ================
[00:16:59] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[00:16:59] ================ xe_live_mocs_reset_kunit =================
[00:16:59] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[00:16:59] ==================== [SKIPPED] xe_mocs =====================
[00:16:59] ================= xe_migrate (2 subtests) ==================
[00:16:59] ================= xe_migrate_sanity_kunit =================
[00:16:59] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[00:16:59] ================== xe_validate_ccs_kunit ==================
[00:16:59] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[00:16:59] =================== [SKIPPED] xe_migrate ===================
[00:16:59] ================== xe_dma_buf (1 subtest) ==================
[00:16:59] ==================== xe_dma_buf_kunit =====================
[00:16:59] ================ [SKIPPED] xe_dma_buf_kunit ================
[00:16:59] =================== [SKIPPED] xe_dma_buf ===================
[00:16:59] ==================== xe_bo (3 subtests) ====================
[00:16:59] ================== xe_ccs_migrate_kunit ===================
[00:16:59] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[00:16:59] ==================== xe_bo_evict_kunit ====================
[00:16:59] =============== [SKIPPED] xe_bo_evict_kunit ================
[00:16:59] =================== xe_bo_shrink_kunit ====================
[00:16:59] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[00:16:59] ===================== [SKIPPED] xe_bo ======================
[00:16:59] ==================== args (11 subtests) ====================
[00:16:59] [PASSED] count_args_test
[00:16:59] [PASSED] call_args_example
[00:16:59] [PASSED] call_args_test
[00:16:59] [PASSED] drop_first_arg_example
[00:16:59] [PASSED] drop_first_arg_test
[00:16:59] [PASSED] first_arg_example
[00:16:59] [PASSED] first_arg_test
[00:16:59] [PASSED] last_arg_example
[00:16:59] [PASSED] last_arg_test
[00:16:59] [PASSED] pick_arg_example
[00:16:59] [PASSED] sep_comma_examplestty: 'standard input': Inappropriate ioctl for device
[00:16:59] ====================== [PASSED] args =======================
[00:16:59] =================== xe_pci (2 subtests) ====================
[00:16:59] [PASSED] xe_gmdid_graphics_ip
[00:16:59] [PASSED] xe_gmdid_media_ip
[00:16:59] ===================== [PASSED] xe_pci ======================
[00:16:59] =================== xe_rtp (2 subtests) ====================
[00:16:59] =============== xe_rtp_process_to_sr_tests ================
[00:16:59] [PASSED] coalesce-same-reg
[00:16:59] [PASSED] no-match-no-add
[00:16:59] [PASSED] match-or
[00:16:59] [PASSED] match-or-xfail
[00:16:59] [PASSED] no-match-no-add-multiple-rules
[00:16:59] [PASSED] two-regs-two-entries
[00:16:59] [PASSED] clr-one-set-other
[00:16:59] [PASSED] set-field
[00:16:59] [PASSED] conflict-duplicate
[00:17:00] [PASSED] conflict-not-disjoint
[00:17:00] [PASSED] conflict-reg-type
[00:17:00] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[00:17:00] ================== xe_rtp_process_tests ===================
[00:17:00] [PASSED] active1
[00:17:00] [PASSED] active2
[00:17:00] [PASSED] active-inactive
[00:17:00] [PASSED] inactive-active
[00:17:00] [PASSED] inactive-1st_or_active-inactive
[00:17:00] [PASSED] inactive-2nd_or_active-inactive
[00:17:00] [PASSED] inactive-last_or_active-inactive
[00:17:00] [PASSED] inactive-no_or_active-inactive
[00:17:00] ============== [PASSED] xe_rtp_process_tests ===============
[00:17:00] ===================== [PASSED] xe_rtp ======================
[00:17:00] ==================== xe_wa (1 subtest) =====================
[00:17:00] ======================== xe_wa_gt =========================
[00:17:00] [PASSED] TIGERLAKE (B0)
[00:17:00] [PASSED] DG1 (A0)
[00:17:00] [PASSED] DG1 (B0)
[00:17:00] [PASSED] ALDERLAKE_S (A0)
[00:17:00] [PASSED] ALDERLAKE_S (B0)
[00:17:00] [PASSED] ALDERLAKE_S (C0)
[00:17:00] [PASSED] ALDERLAKE_S (D0)
[00:17:00] [PASSED] ALDERLAKE_P (A0)
[00:17:00] [PASSED] ALDERLAKE_P (B0)
[00:17:00] [PASSED] ALDERLAKE_P (C0)
[00:17:00] [PASSED] ALDERLAKE_S_RPLS (D0)
[00:17:00] [PASSED] ALDERLAKE_P_RPLU (E0)
[00:17:00] [PASSED] DG2_G10 (C0)
[00:17:00] [PASSED] DG2_G11 (B1)
[00:17:00] [PASSED] DG2_G12 (A1)
[00:17:00] [PASSED] METEORLAKE (g:A0, m:A0)
[00:17:00] [PASSED] METEORLAKE (g:A0, m:A0)
[00:17:00] [PASSED] METEORLAKE (g:A0, m:A0)
[00:17:00] [PASSED] LUNARLAKE (g:A0, m:A0)
[00:17:00] [PASSED] LUNARLAKE (g:B0, m:A0)
[00:17:00] [PASSED] BATTLEMAGE (g:A0, m:A1)
[00:17:00] ==================== [PASSED] xe_wa_gt =====================
[00:17:00] ====================== [PASSED] xe_wa ======================
[00:17:00] ============================================================
[00:17:00] Testing complete. Ran 122 tests: passed: 106, skipped: 16
[00:17:00] Elapsed time: 33.087s total, 4.471s configuring, 28.350s building, 0.213s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[00:17:00] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[00:17:01] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
156 | u64 ioread64_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
163 | u64 ioread64_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
170 | u64 ioread64be_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
178 | u64 ioread64be_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
[00:17:24] Starting KUnit Kernel (1/1)...
[00:17:24] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[00:17:25] ================== drm_buddy (7 subtests) ==================
[00:17:25] [PASSED] drm_test_buddy_alloc_limit
[00:17:25] [PASSED] drm_test_buddy_alloc_optimistic
[00:17:25] [PASSED] drm_test_buddy_alloc_pessimistic
[00:17:25] [PASSED] drm_test_buddy_alloc_pathological
[00:17:25] [PASSED] drm_test_buddy_alloc_contiguous
[00:17:25] [PASSED] drm_test_buddy_alloc_clear
[00:17:25] [PASSED] drm_test_buddy_alloc_range_bias
[00:17:25] ==================== [PASSED] drm_buddy ====================
[00:17:25] ============= drm_cmdline_parser (40 subtests) =============
[00:17:25] [PASSED] drm_test_cmdline_force_d_only
[00:17:25] [PASSED] drm_test_cmdline_force_D_only_dvi
[00:17:25] [PASSED] drm_test_cmdline_force_D_only_hdmi
[00:17:25] [PASSED] drm_test_cmdline_force_D_only_not_digital
[00:17:25] [PASSED] drm_test_cmdline_force_e_only
[00:17:25] [PASSED] drm_test_cmdline_res
[00:17:25] [PASSED] drm_test_cmdline_res_vesa
[00:17:25] [PASSED] drm_test_cmdline_res_vesa_rblank
[00:17:25] [PASSED] drm_test_cmdline_res_rblank
[00:17:25] [PASSED] drm_test_cmdline_res_bpp
[00:17:25] [PASSED] drm_test_cmdline_res_refresh
[00:17:25] [PASSED] drm_test_cmdline_res_bpp_refresh
[00:17:25] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[00:17:25] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[00:17:25] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[00:17:25] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[00:17:25] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[00:17:25] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[00:17:25] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[00:17:25] [PASSED] drm_test_cmdline_res_margins_force_on
[00:17:25] [PASSED] drm_test_cmdline_res_vesa_margins
[00:17:25] [PASSED] drm_test_cmdline_name
[00:17:25] [PASSED] drm_test_cmdline_name_bpp
[00:17:25] [PASSED] drm_test_cmdline_name_option
[00:17:25] [PASSED] drm_test_cmdline_name_bpp_option
[00:17:25] [PASSED] drm_test_cmdline_rotate_0
[00:17:25] [PASSED] drm_test_cmdline_rotate_90
[00:17:25] [PASSED] drm_test_cmdline_rotate_180
[00:17:25] [PASSED] drm_test_cmdline_rotate_270
[00:17:25] [PASSED] drm_test_cmdline_hmirror
[00:17:25] [PASSED] drm_test_cmdline_vmirror
[00:17:25] [PASSED] drm_test_cmdline_margin_options
[00:17:25] [PASSED] drm_test_cmdline_multiple_options
[00:17:25] [PASSED] drm_test_cmdline_bpp_extra_and_option
[00:17:25] [PASSED] drm_test_cmdline_extra_and_option
[00:17:25] [PASSED] drm_test_cmdline_freestanding_options
[00:17:25] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[00:17:25] [PASSED] drm_test_cmdline_panel_orientation
[00:17:25] ================ drm_test_cmdline_invalid =================
[00:17:25] [PASSED] margin_only
[00:17:25] [PASSED] interlace_only
[00:17:25] [PASSED] res_missing_x
[00:17:25] [PASSED] res_missing_y
[00:17:25] [PASSED] res_bad_y
[00:17:25] [PASSED] res_missing_y_bpp
[00:17:25] [PASSED] res_bad_bpp
[00:17:25] [PASSED] res_bad_refresh
[00:17:25] [PASSED] res_bpp_refresh_force_on_off
[00:17:25] [PASSED] res_invalid_mode
[00:17:25] [PASSED] res_bpp_wrong_place_mode
[00:17:25] [PASSED] name_bpp_refresh
[00:17:25] [PASSED] name_refresh
[00:17:25] [PASSED] name_refresh_wrong_mode
[00:17:25] [PASSED] name_refresh_invalid_mode
[00:17:25] [PASSED] rotate_multiple
[00:17:25] [PASSED] rotate_invalid_val
[00:17:25] [PASSED] rotate_truncated
[00:17:25] [PASSED] invalid_option
[00:17:25] [PASSED] invalid_tv_option
[00:17:25] [PASSED] truncated_tv_option
[00:17:25] ============ [PASSED] drm_test_cmdline_invalid =============
[00:17:25] =============== drm_test_cmdline_tv_options ===============
[00:17:25] [PASSED] NTSC
[00:17:25] [PASSED] NTSC_443
[00:17:25] [PASSED] NTSC_J
[00:17:25] [PASSED] PAL
[00:17:25] [PASSED] PAL_M
[00:17:25] [PASSED] PAL_N
[00:17:25] [PASSED] SECAM
[00:17:25] [PASSED] MONO_525
[00:17:25] [PASSED] MONO_625
[00:17:25] =========== [PASSED] drm_test_cmdline_tv_options ===========
[00:17:25] =============== [PASSED] drm_cmdline_parser ================
[00:17:25] ========== drmm_connector_hdmi_init (19 subtests) ==========
[00:17:25] [PASSED] drm_test_connector_hdmi_init_valid
[00:17:25] [PASSED] drm_test_connector_hdmi_init_bpc_8
[00:17:25] [PASSED] drm_test_connector_hdmi_init_bpc_10
[00:17:25] [PASSED] drm_test_connector_hdmi_init_bpc_12
[00:17:25] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[00:17:25] [PASSED] drm_test_connector_hdmi_init_bpc_null
[00:17:25] [PASSED] drm_test_connector_hdmi_init_formats_empty
[00:17:25] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[00:17:25] [PASSED] drm_test_connector_hdmi_init_null_ddc
[00:17:25] [PASSED] drm_test_connector_hdmi_init_null_product
[00:17:25] [PASSED] drm_test_connector_hdmi_init_null_vendor
[00:17:25] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[00:17:25] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[00:17:25] [PASSED] drm_test_connector_hdmi_init_product_valid
[00:17:25] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[00:17:25] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[00:17:25] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[00:17:25] ========= drm_test_connector_hdmi_init_type_valid =========
[00:17:25] [PASSED] HDMI-A
[00:17:25] [PASSED] HDMI-B
[00:17:25] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[00:17:25] ======== drm_test_connector_hdmi_init_type_invalid ========
[00:17:25] [PASSED] Unknown
[00:17:25] [PASSED] VGA
[00:17:25] [PASSED] DVI-I
[00:17:25] [PASSED] DVI-D
[00:17:25] [PASSED] DVI-A
[00:17:25] [PASSED] Composite
[00:17:25] [PASSED] SVIDEO
[00:17:25] [PASSED] LVDS
[00:17:25] [PASSED] Component
[00:17:25] [PASSED] DIN
[00:17:25] [PASSED] DP
[00:17:25] [PASSED] TV
[00:17:25] [PASSED] eDP
[00:17:25] [PASSED] Virtual
[00:17:25] [PASSED] DSI
[00:17:25] [PASSED] DPI
[00:17:25] [PASSED] Writeback
[00:17:25] [PASSED] SPI
[00:17:25] [PASSED] USB
[00:17:25] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[00:17:25] ============ [PASSED] drmm_connector_hdmi_init =============
[00:17:25] ============= drmm_connector_init (3 subtests) =============
[00:17:25] [PASSED] drm_test_drmm_connector_init
[00:17:25] [PASSED] drm_test_drmm_connector_init_null_ddc
[00:17:25] ========= drm_test_drmm_connector_init_type_valid =========
[00:17:25] [PASSED] Unknown
[00:17:25] [PASSED] VGA
[00:17:25] [PASSED] DVI-I
[00:17:25] [PASSED] DVI-D
[00:17:25] [PASSED] DVI-A
[00:17:25] [PASSED] Composite
[00:17:25] [PASSED] SVIDEO
[00:17:25] [PASSED] LVDS
[00:17:25] [PASSED] Component
[00:17:25] [PASSED] DIN
[00:17:25] [PASSED] DP
[00:17:25] [PASSED] HDMI-A
[00:17:25] [PASSED] HDMI-B
[00:17:25] [PASSED] TV
[00:17:25] [PASSED] eDP
[00:17:25] [PASSED] Virtual
[00:17:25] [PASSED] DSI
[00:17:25] [PASSED] DPI
[00:17:25] [PASSED] Writeback
[00:17:25] [PASSED] SPI
[00:17:25] [PASSED] USB
[00:17:25] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[00:17:25] =============== [PASSED] drmm_connector_init ===============
[00:17:25] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[00:17:25] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[00:17:25] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[00:17:25] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[00:17:25] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[00:17:25] ========== drm_test_get_tv_mode_from_name_valid ===========
[00:17:25] [PASSED] NTSC
[00:17:25] [PASSED] NTSC-443
[00:17:25] [PASSED] NTSC-J
[00:17:25] [PASSED] PAL
[00:17:25] [PASSED] PAL-M
[00:17:25] [PASSED] PAL-N
[00:17:25] [PASSED] SECAM
[00:17:25] [PASSED] Mono
[00:17:25] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[00:17:25] [PASSED] drm_test_get_tv_mode_from_name_truncated
[00:17:25] ============ [PASSED] drm_get_tv_mode_from_name ============
[00:17:25] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[00:17:25] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[00:17:25] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[00:17:25] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[00:17:25] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[00:17:25] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[00:17:25] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[00:17:25] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[00:17:25] [PASSED] VIC 96
[00:17:25] [PASSED] VIC 97
[00:17:25] [PASSED] VIC 101
[00:17:25] [PASSED] VIC 102
[00:17:25] [PASSED] VIC 106
[00:17:25] [PASSED] VIC 107
[00:17:25] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[00:17:25] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[00:17:25] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[00:17:25] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[00:17:25] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[00:17:25] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[00:17:25] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[00:17:25] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[00:17:25] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[00:17:25] [PASSED] Automatic
[00:17:25] [PASSED] Full
[00:17:25] [PASSED] Limited 16:235
[00:17:25] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[00:17:25] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[00:17:25] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[00:17:25] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[00:17:25] === drm_test_drm_hdmi_connector_get_output_format_name ====
[00:17:25] [PASSED] RGB
[00:17:25] [PASSED] YUV 4:2:0
[00:17:25] [PASSED] YUV 4:2:2
[00:17:25] [PASSED] YUV 4:4:4
[00:17:25] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[00:17:25] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[00:17:25] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[00:17:25] ============= drm_damage_helper (21 subtests) ==============
[00:17:25] [PASSED] drm_test_damage_iter_no_damage
[00:17:25] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[00:17:25] [PASSED] drm_test_damage_iter_no_damage_src_moved
[00:17:25] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[00:17:25] [PASSED] drm_test_damage_iter_no_damage_not_visible
[00:17:25] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[00:17:25] [PASSED] drm_test_damage_iter_no_damage_no_fb
[00:17:25] [PASSED] drm_test_damage_iter_simple_damage
[00:17:25] [PASSED] drm_test_damage_iter_single_damage
[00:17:25] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[00:17:25] [PASSED] drm_test_damage_iter_single_damage_outside_src
[00:17:25] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[00:17:25] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[00:17:25] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[00:17:25] [PASSED] drm_test_damage_iter_single_damage_src_moved
[00:17:25] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[00:17:25] [PASSED] drm_test_damage_iter_damage
[00:17:25] [PASSED] drm_test_damage_iter_damage_one_intersect
[00:17:25] [PASSED] drm_test_damage_iter_damage_one_outside
[00:17:25] [PASSED] drm_test_damage_iter_damage_src_moved
[00:17:25] [PASSED] drm_test_damage_iter_damage_not_visible
[00:17:25] ================ [PASSED] drm_damage_helper ================
[00:17:25] ============== drm_dp_mst_helper (3 subtests) ==============
[00:17:25] ============== drm_test_dp_mst_calc_pbn_mode ==============
[00:17:25] [PASSED] Clock 154000 BPP 30 DSC disabled
[00:17:25] [PASSED] Clock 234000 BPP 30 DSC disabled
[00:17:25] [PASSED] Clock 297000 BPP 24 DSC disabled
[00:17:25] [PASSED] Clock 332880 BPP 24 DSC enabled
[00:17:25] [PASSED] Clock 324540 BPP 24 DSC enabled
[00:17:25] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[00:17:25] ============== drm_test_dp_mst_calc_pbn_div ===============
[00:17:25] [PASSED] Link rate 2000000 lane count 4
[00:17:25] [PASSED] Link rate 2000000 lane count 2
[00:17:25] [PASSED] Link rate 2000000 lane count 1
[00:17:25] [PASSED] Link rate 1350000 lane count 4
[00:17:25] [PASSED] Link rate 1350000 lane count 2
[00:17:25] [PASSED] Link rate 1350000 lane count 1
[00:17:25] [PASSED] Link rate 1000000 lane count 4
[00:17:25] [PASSED] Link rate 1000000 lane count 2
[00:17:25] [PASSED] Link rate 1000000 lane count 1
[00:17:25] [PASSED] Link rate 810000 lane count 4
[00:17:25] [PASSED] Link rate 810000 lane count 2
[00:17:25] [PASSED] Link rate 810000 lane count 1
[00:17:25] [PASSED] Link rate 540000 lane count 4
[00:17:25] [PASSED] Link rate 540000 lane count 2
[00:17:25] [PASSED] Link rate 540000 lane count 1
[00:17:25] [PASSED] Link rate 270000 lane count 4
[00:17:25] [PASSED] Link rate 270000 lane count 2
[00:17:25] [PASSED] Link rate 270000 lane count 1
[00:17:25] [PASSED] Link rate 162000 lane count 4
[00:17:25] [PASSED] Link rate 162000 lane count 2
[00:17:25] [PASSED] Link rate 162000 lane count 1
[00:17:25] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[00:17:25] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[00:17:25] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[00:17:25] [PASSED] DP_POWER_UP_PHY with port number
[00:17:25] [PASSED] DP_POWER_DOWN_PHY with port number
[00:17:25] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[00:17:25] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[00:17:25] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[00:17:25] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[00:17:25] [PASSED] DP_QUERY_PAYLOAD with port number
[00:17:25] [PASSED] DP_QUERY_PAYLOAD with VCPI
[00:17:25] [PASSED] DP_REMOTE_DPCD_READ with port number
[00:17:25] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[00:17:25] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[00:17:25] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[00:17:25] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[00:17:25] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[00:17:25] [PASSED] DP_REMOTE_I2C_READ with port number
[00:17:25] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[00:17:25] [PASSED] DP_REMOTE_I2C_READ with transactions array
[00:17:25] [PASSED] DP_REMOTE_I2C_WRITE with port number
[00:17:25] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[00:17:25] [PASSED] DP_REMOTE_I2C_WRITE with data array
[00:17:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[00:17:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[00:17:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[00:17:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[00:17:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[00:17:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[00:17:25] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[00:17:25] ================ [PASSED] drm_dp_mst_helper ================
[00:17:25] ================== drm_exec (7 subtests) ===================
[00:17:25] [PASSED] sanitycheck
[00:17:25] [PASSED] test_lock
[00:17:25] [PASSED] test_lock_unlock
[00:17:25] [PASSED] test_duplicates
[00:17:25] [PASSED] test_prepare
[00:17:25] [PASSED] test_prepare_array
[00:17:25] [PASSED] test_multiple_loops
[00:17:25] ==================== [PASSED] drm_exec =====================
[00:17:25] =========== drm_format_helper_test (17 subtests) ===========
[00:17:25] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[00:17:25] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[00:17:25] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[00:17:25] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[00:17:25] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[00:17:25] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[00:17:25] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[00:17:25] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[00:17:25] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[00:17:25] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[00:17:25] ============== drm_test_fb_xrgb8888_to_mono ===============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[00:17:25] ==================== drm_test_fb_swab =====================
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ================ [PASSED] drm_test_fb_swab =================
[00:17:25] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[00:17:25] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[00:17:25] [PASSED] single_pixel_source_buffer
[00:17:25] [PASSED] single_pixel_clip_rectangle
[00:17:25] [PASSED] well_known_colors
[00:17:25] [PASSED] destination_pitch
[00:17:25] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[00:17:25] ================= drm_test_fb_clip_offset =================
[00:17:25] [PASSED] pass through
[00:17:25] [PASSED] horizontal offset
[00:17:25] [PASSED] vertical offset
[00:17:25] [PASSED] horizontal and vertical offset
[00:17:25] [PASSED] horizontal offset (custom pitch)
[00:17:25] [PASSED] vertical offset (custom pitch)
[00:17:25] [PASSED] horizontal and vertical offset (custom pitch)
[00:17:25] ============= [PASSED] drm_test_fb_clip_offset =============
[00:17:25] ============== drm_test_fb_build_fourcc_list ==============
[00:17:25] [PASSED] no native formats
[00:17:25] [PASSED] XRGB8888 as native format
[00:17:25] [PASSED] remove duplicates
[00:17:25] [PASSED] convert alpha formats
[00:17:25] [PASSED] random formats
[00:17:25] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[00:17:25] =================== drm_test_fb_memcpy ====================
[00:17:25] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[00:17:25] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[00:17:25] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[00:17:25] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[00:17:25] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[00:17:25] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[00:17:25] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[00:17:25] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[00:17:25] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[00:17:25] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[00:17:25] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[00:17:25] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[00:17:25] =============== [PASSED] drm_test_fb_memcpy ================
[00:17:25] ============= [PASSED] drm_format_helper_test ==============
[00:17:25] ================= drm_format (18 subtests) =================
[00:17:25] [PASSED] drm_test_format_block_width_invalid
[00:17:25] [PASSED] drm_test_format_block_width_one_plane
[00:17:25] [PASSED] drm_test_format_block_width_two_plane
[00:17:25] [PASSED] drm_test_format_block_width_three_plane
[00:17:25] [PASSED] drm_test_format_block_width_tiled
[00:17:25] [PASSED] drm_test_format_block_height_invalid
[00:17:25] [PASSED] drm_test_format_block_height_one_plane
[00:17:25] [PASSED] drm_test_format_block_height_two_plane
[00:17:25] [PASSED] drm_test_format_block_height_three_plane
[00:17:25] [PASSED] drm_test_format_block_height_tiled
[00:17:25] [PASSED] drm_test_format_min_pitch_invalid
[00:17:25] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[00:17:25] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[00:17:25] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[00:17:25] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[00:17:25] [PASSED] drm_test_format_min_pitch_two_plane
[00:17:25] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[00:17:25] [PASSED] drm_test_format_min_pitch_tiled
[00:17:25] =================== [PASSED] drm_format ====================
[00:17:25] ============== drm_framebuffer (10 subtests) ===============
[00:17:25] ========== drm_test_framebuffer_check_src_coords ==========
[00:17:25] [PASSED] Success: source fits into fb
[00:17:25] [PASSED] Fail: overflowing fb with x-axis coordinate
[00:17:25] [PASSED] Fail: overflowing fb with y-axis coordinate
[00:17:25] [PASSED] Fail: overflowing fb with source width
[00:17:25] [PASSED] Fail: overflowing fb with source height
[00:17:25] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[00:17:25] [PASSED] drm_test_framebuffer_cleanup
[00:17:25] =============== drm_test_framebuffer_create ===============
[00:17:25] [PASSED] ABGR8888 normal sizes
[00:17:25] [PASSED] ABGR8888 max sizes
[00:17:25] [PASSED] ABGR8888 pitch greater than min required
[00:17:25] [PASSED] ABGR8888 pitch less than min required
[00:17:25] [PASSED] ABGR8888 Invalid width
[00:17:25] [PASSED] ABGR8888 Invalid buffer handle
[00:17:25] [PASSED] No pixel format
[00:17:25] [PASSED] ABGR8888 Width 0
[00:17:25] [PASSED] ABGR8888 Height 0
[00:17:25] [PASSED] ABGR8888 Out of bound height * pitch combination
[00:17:25] [PASSED] ABGR8888 Large buffer offset
[00:17:25] [PASSED] ABGR8888 Buffer offset for inexistent plane
[00:17:25] [PASSED] ABGR8888 Invalid flag
[00:17:25] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[00:17:25] [PASSED] ABGR8888 Valid buffer modifier
[00:17:25] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[00:17:25] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[00:17:25] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[00:17:25] [PASSED] NV12 Normal sizes
[00:17:25] [PASSED] NV12 Max sizes
[00:17:25] [PASSED] NV12 Invalid pitch
[00:17:25] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[00:17:25] [PASSED] NV12 different modifier per-plane
[00:17:25] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[00:17:25] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[00:17:25] [PASSED] NV12 Modifier for inexistent plane
[00:17:25] [PASSED] NV12 Handle for inexistent plane
[00:17:25] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[00:17:25] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[00:17:25] [PASSED] YVU420 Normal sizes
[00:17:25] [PASSED] YVU420 Max sizes
[00:17:25] [PASSED] YVU420 Invalid pitch
[00:17:25] [PASSED] YVU420 Different pitches
[00:17:25] [PASSED] YVU420 Different buffer offsets/pitches
[00:17:25] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[00:17:25] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[00:17:25] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[00:17:25] [PASSED] YVU420 Valid modifier
[00:17:25] [PASSED] YVU420 Different modifiers per plane
[00:17:25] [PASSED] YVU420 Modifier for inexistent plane
[00:17:25] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[00:17:25] [PASSED] X0L2 Normal sizes
[00:17:25] [PASSED] X0L2 Max sizes
[00:17:25] [PASSED] X0L2 Invalid pitch
[00:17:25] [PASSED] X0L2 Pitch greater than minimum required
[00:17:25] [PASSED] X0L2 Handle for inexistent plane
[00:17:25] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[00:17:25] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[00:17:25] [PASSED] X0L2 Valid modifier
[00:17:25] [PASSED] X0L2 Modifier for inexistent plane
[00:17:25] =========== [PASSED] drm_test_framebuffer_create ===========
[00:17:25] [PASSED] drm_test_framebuffer_free
[00:17:25] [PASSED] drm_test_framebuffer_init
[00:17:25] [PASSED] drm_test_framebuffer_init_bad_format
[00:17:25] [PASSED] drm_test_framebuffer_init_dev_mismatch
[00:17:25] [PASSED] drm_test_framebuffer_lookup
[00:17:25] [PASSED] drm_test_framebuffer_lookup_inexistent
[00:17:25] [PASSED] drm_test_framebuffer_modifiers_not_supported
[00:17:25] ================= [PASSED] drm_framebuffer =================
[00:17:25] ================ drm_gem_shmem (8 subtests) ================
[00:17:25] [PASSED] drm_gem_shmem_test_obj_create
[00:17:25] [PASSED] drm_gem_shmem_test_obj_create_private
[00:17:25] [PASSED] drm_gem_shmem_test_pin_pages
[00:17:25] [PASSED] drm_gem_shmem_test_vmap
[00:17:25] [PASSED] drm_gem_shmem_test_get_pages_sgt
[00:17:25] [PASSED] drm_gem_shmem_test_get_sg_table
[00:17:25] [PASSED] drm_gem_shmem_test_madvise
[00:17:25] [PASSED] drm_gem_shmem_test_purge
[00:17:25] ================== [PASSED] drm_gem_shmem ==================
[00:17:25] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[00:17:25] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[00:17:25] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[00:17:25] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[00:17:25] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[00:17:25] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[00:17:25] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[00:17:25] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[00:17:25] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[00:17:25] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[00:17:25] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[00:17:25] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[00:17:25] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[00:17:25] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[00:17:25] [PASSED] drm_test_check_output_bpc_dvi
[00:17:25] [PASSED] drm_test_check_output_bpc_format_vic_1
[00:17:25] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[00:17:25] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[00:17:25] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[00:17:25] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[00:17:25] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[00:17:25] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[00:17:25] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[00:17:25] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[00:17:25] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[00:17:25] [PASSED] drm_test_check_broadcast_rgb_value
[00:17:25] [PASSED] drm_test_check_bpc_8_value
[00:17:25] [PASSED] drm_test_check_bpc_10_value
[00:17:25] [PASSED] drm_test_check_bpc_12_value
[00:17:25] [PASSED] drm_test_check_format_value
[00:17:25] [PASSED] drm_test_check_tmds_char_value
[00:17:25] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[00:17:25] ================= drm_managed (2 subtests) =================
[00:17:25] [PASSED] drm_test_managed_release_action
[00:17:25] [PASSED] drm_test_managed_run_action
[00:17:25] =================== [PASSED] drm_managed ===================
[00:17:25] =================== drm_mm (6 subtests) ====================
[00:17:25] [PASSED] drm_test_mm_init
[00:17:25] [PASSED] drm_test_mm_debug
[00:17:25] [PASSED] drm_test_mm_align32
[00:17:25] [PASSED] drm_test_mm_align64
[00:17:25] [PASSED] drm_test_mm_lowest
[00:17:25] [PASSED] drm_test_mm_highest
[00:17:25] ===================== [PASSED] drm_mm ======================
[00:17:25] ============= drm_modes_analog_tv (5 subtests) =============
[00:17:25] [PASSED] drm_test_modes_analog_tv_mono_576i
[00:17:25] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[00:17:25] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[00:17:25] [PASSED] drm_test_modes_analog_tv_pal_576i
[00:17:25] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[00:17:25] =============== [PASSED] drm_modes_analog_tv ===============
stty: 'standard input': Inappropriate ioctl for device
[00:17:25] ============== drm_plane_helper (2 subtests) ===============
[00:17:25] =============== drm_test_check_plane_state ================
[00:17:25] [PASSED] clipping_simple
[00:17:25] [PASSED] clipping_rotate_reflect
[00:17:25] [PASSED] positioning_simple
[00:17:25] [PASSED] upscaling
[00:17:25] [PASSED] downscaling
[00:17:25] [PASSED] rounding1
[00:17:25] [PASSED] rounding2
[00:17:25] [PASSED] rounding3
[00:17:25] [PASSED] rounding4
[00:17:25] =========== [PASSED] drm_test_check_plane_state ============
[00:17:25] =========== drm_test_check_invalid_plane_state ============
[00:17:25] [PASSED] positioning_invalid
[00:17:25] [PASSED] upscaling_invalid
[00:17:25] [PASSED] downscaling_invalid
[00:17:25] ======= [PASSED] drm_test_check_invalid_plane_state ========
[00:17:25] ================ [PASSED] drm_plane_helper =================
[00:17:25] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[00:17:25] ====== drm_test_connector_helper_tv_get_modes_check =======
[00:17:25] [PASSED] None
[00:17:25] [PASSED] PAL
[00:17:25] [PASSED] NTSC
[00:17:25] [PASSED] Both, NTSC Default
[00:17:25] [PASSED] Both, PAL Default
[00:17:25] [PASSED] Both, NTSC Default, with PAL on command-line
[00:17:25] [PASSED] Both, PAL Default, with NTSC on command-line
[00:17:25] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[00:17:25] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[00:17:25] ================== drm_rect (9 subtests) ===================
[00:17:25] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[00:17:25] [PASSED] drm_test_rect_clip_scaled_not_clipped
[00:17:25] [PASSED] drm_test_rect_clip_scaled_clipped
[00:17:25] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[00:17:25] ================= drm_test_rect_intersect =================
[00:17:25] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[00:17:25] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[00:17:25] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[00:17:25] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[00:17:25] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[00:17:25] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[00:17:25] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[00:17:25] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[00:17:25] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[00:17:25] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[00:17:25] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[00:17:25] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[00:17:25] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[00:17:25] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[00:17:25] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[00:17:25] ============= [PASSED] drm_test_rect_intersect =============
[00:17:25] ================ drm_test_rect_calc_hscale ================
[00:17:25] [PASSED] normal use
[00:17:25] [PASSED] out of max range
[00:17:25] [PASSED] out of min range
[00:17:25] [PASSED] zero dst
[00:17:25] [PASSED] negative src
[00:17:25] [PASSED] negative dst
[00:17:25] ============ [PASSED] drm_test_rect_calc_hscale ============
[00:17:25] ================ drm_test_rect_calc_vscale ================
[00:17:25] [PASSED] normal use
[00:17:25] [PASSED] out of max range
[00:17:25] [PASSED] out of min range
[00:17:25] [PASSED] zero dst
[00:17:25] [PASSED] negative src
[00:17:25] [PASSED] negative dst
[00:17:25] ============ [PASSED] drm_test_rect_calc_vscale ============
[00:17:25] ================== drm_test_rect_rotate ===================
[00:17:25] [PASSED] reflect-x
[00:17:25] [PASSED] reflect-y
[00:17:25] [PASSED] rotate-0
[00:17:25] [PASSED] rotate-90
[00:17:25] [PASSED] rotate-180
[00:17:25] [PASSED] rotate-270
[00:17:25] ============== [PASSED] drm_test_rect_rotate ===============
[00:17:25] ================ drm_test_rect_rotate_inv =================
[00:17:25] [PASSED] reflect-x
[00:17:25] [PASSED] reflect-y
[00:17:25] [PASSED] rotate-0
[00:17:25] [PASSED] rotate-90
[00:17:25] [PASSED] rotate-180
[00:17:25] [PASSED] rotate-270
[00:17:25] ============ [PASSED] drm_test_rect_rotate_inv =============
[00:17:25] ==================== [PASSED] drm_rect =====================
[00:17:25] ============================================================
[00:17:25] Testing complete. Ran 526 tests: passed: 526
[00:17:25] Elapsed time: 25.019s total, 1.623s configuring, 23.177s building, 0.178s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[00:17:25] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[00:17:26] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json ARCH=um O=.kunit --jobs=48
[00:17:34] Starting KUnit Kernel (1/1)...
[00:17:34] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[00:17:34] ================= ttm_device (5 subtests) ==================
[00:17:34] [PASSED] ttm_device_init_basic
[00:17:34] [PASSED] ttm_device_init_multiple
[00:17:34] [PASSED] ttm_device_fini_basic
[00:17:34] [PASSED] ttm_device_init_no_vma_man
[00:17:34] ================== ttm_device_init_pools ==================
[00:17:34] [PASSED] No DMA allocations, no DMA32 required
[00:17:34] [PASSED] DMA allocations, DMA32 required
[00:17:34] [PASSED] No DMA allocations, DMA32 required
[00:17:34] [PASSED] DMA allocations, no DMA32 required
[00:17:34] ============== [PASSED] ttm_device_init_pools ==============
[00:17:34] =================== [PASSED] ttm_device ====================
[00:17:34] ================== ttm_pool (8 subtests) ===================
[00:17:34] ================== ttm_pool_alloc_basic ===================
[00:17:34] [PASSED] One page
[00:17:34] [PASSED] More than one page
[00:17:34] [PASSED] Above the allocation limit
[00:17:34] [PASSED] One page, with coherent DMA mappings enabled
[00:17:34] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[00:17:34] ============== [PASSED] ttm_pool_alloc_basic ===============
[00:17:34] ============== ttm_pool_alloc_basic_dma_addr ==============
[00:17:34] [PASSED] One page
[00:17:34] [PASSED] More than one page
[00:17:34] [PASSED] Above the allocation limit
[00:17:34] [PASSED] One page, with coherent DMA mappings enabled
[00:17:34] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[00:17:34] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[00:17:34] [PASSED] ttm_pool_alloc_order_caching_match
[00:17:34] [PASSED] ttm_pool_alloc_caching_mismatch
[00:17:34] [PASSED] ttm_pool_alloc_order_mismatch
[00:17:34] [PASSED] ttm_pool_free_dma_alloc
[00:17:34] [PASSED] ttm_pool_free_no_dma_alloc
[00:17:34] [PASSED] ttm_pool_fini_basic
[00:17:34] ==================== [PASSED] ttm_pool =====================
[00:17:34] ================ ttm_resource (8 subtests) =================
[00:17:34] ================= ttm_resource_init_basic =================
[00:17:34] [PASSED] Init resource in TTM_PL_SYSTEM
[00:17:34] [PASSED] Init resource in TTM_PL_VRAM
[00:17:34] [PASSED] Init resource in a private placement
[00:17:34] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[00:17:34] ============= [PASSED] ttm_resource_init_basic =============
[00:17:34] [PASSED] ttm_resource_init_pinned
[00:17:34] [PASSED] ttm_resource_fini_basic
[00:17:34] [PASSED] ttm_resource_manager_init_basic
[00:17:34] [PASSED] ttm_resource_manager_usage_basic
[00:17:34] [PASSED] ttm_resource_manager_set_used_basic
[00:17:34] [PASSED] ttm_sys_man_alloc_basic
[00:17:34] [PASSED] ttm_sys_man_free_basic
[00:17:34] ================== [PASSED] ttm_resource ===================
[00:17:34] =================== ttm_tt (15 subtests) ===================
[00:17:34] ==================== ttm_tt_init_basic ====================
[00:17:34] [PASSED] Page-aligned size
[00:17:34] [PASSED] Extra pages requested
[00:17:34] ================ [PASSED] ttm_tt_init_basic ================
[00:17:34] [PASSED] ttm_tt_init_misaligned
[00:17:34] [PASSED] ttm_tt_fini_basic
[00:17:34] [PASSED] ttm_tt_fini_sg
[00:17:34] [PASSED] ttm_tt_fini_shmem
[00:17:34] [PASSED] ttm_tt_create_basic
[00:17:34] [PASSED] ttm_tt_create_invalid_bo_type
[00:17:34] [PASSED] ttm_tt_create_ttm_exists
[00:17:34] [PASSED] ttm_tt_create_failed
[00:17:34] [PASSED] ttm_tt_destroy_basic
[00:17:34] [PASSED] ttm_tt_populate_null_ttm
[00:17:34] [PASSED] ttm_tt_populate_populated_ttm
[00:17:34] [PASSED] ttm_tt_unpopulate_basic
[00:17:34] [PASSED] ttm_tt_unpopulate_empty_ttm
[00:17:34] [PASSED] ttm_tt_swapin_basic
[00:17:34] ===================== [PASSED] ttm_tt ======================
[00:17:34] =================== ttm_bo (14 subtests) ===================
[00:17:34] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[00:17:34] [PASSED] Cannot be interrupted and sleeps
[00:17:34] [PASSED] Cannot be interrupted, locks straight away
[00:17:34] [PASSED] Can be interrupted, sleeps
[00:17:34] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[00:17:34] [PASSED] ttm_bo_reserve_locked_no_sleep
[00:17:34] [PASSED] ttm_bo_reserve_no_wait_ticket
[00:17:34] [PASSED] ttm_bo_reserve_double_resv
[00:17:34] [PASSED] ttm_bo_reserve_interrupted
[00:17:34] [PASSED] ttm_bo_reserve_deadlock
[00:17:34] [PASSED] ttm_bo_unreserve_basic
[00:17:34] [PASSED] ttm_bo_unreserve_pinned
[00:17:34] [PASSED] ttm_bo_unreserve_bulk
[00:17:34] [PASSED] ttm_bo_put_basic
[00:17:34] [PASSED] ttm_bo_put_shared_resv
[00:17:34] [PASSED] ttm_bo_pin_basic
[00:17:34] [PASSED] ttm_bo_pin_unpin_resource
[00:17:34] [PASSED] ttm_bo_multiple_pin_one_unpin
[00:17:34] ===================== [PASSED] ttm_bo ======================
[00:17:34] ============== ttm_bo_validate (22 subtests) ===============
[00:17:34] ============== ttm_bo_init_reserved_sys_man ===============
[00:17:34] [PASSED] Buffer object for userspace
[00:17:34] [PASSED] Kernel buffer object
[00:17:34] [PASSED] Shared buffer object
[00:17:34] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[00:17:34] ============== ttm_bo_init_reserved_mock_man ==============
[00:17:34] [PASSED] Buffer object for userspace
[00:17:34] [PASSED] Kernel buffer object
[00:17:34] [PASSED] Shared buffer object
[00:17:34] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[00:17:34] [PASSED] ttm_bo_init_reserved_resv
[00:17:34] ================== ttm_bo_validate_basic ==================
[00:17:34] [PASSED] Buffer object for userspace
[00:17:34] [PASSED] Kernel buffer object
[00:17:34] [PASSED] Shared buffer object
[00:17:34] ============== [PASSED] ttm_bo_validate_basic ==============
[00:17:34] [PASSED] ttm_bo_validate_invalid_placement
[00:17:34] ============= ttm_bo_validate_same_placement ==============
[00:17:34] [PASSED] System manager
[00:17:34] [PASSED] VRAM manager
[00:17:34] ========= [PASSED] ttm_bo_validate_same_placement ==========
[00:17:34] [PASSED] ttm_bo_validate_failed_alloc
[00:17:34] [PASSED] ttm_bo_validate_pinned
[00:17:34] [PASSED] ttm_bo_validate_busy_placement
[00:17:34] ================ ttm_bo_validate_multihop =================
[00:17:34] [PASSED] Buffer object for userspace
[00:17:34] [PASSED] Kernel buffer object
[00:17:34] [PASSED] Shared buffer object
[00:17:34] ============ [PASSED] ttm_bo_validate_multihop =============
[00:17:34] ========== ttm_bo_validate_no_placement_signaled ==========
[00:17:34] [PASSED] Buffer object in system domain, no page vector
[00:17:34] [PASSED] Buffer object in system domain with an existing page vector
[00:17:34] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[00:17:34] ======== ttm_bo_validate_no_placement_not_signaled ========
[00:17:34] [PASSED] Buffer object for userspace
[00:17:34] [PASSED] Kernel buffer object
[00:17:34] [PASSED] Shared buffer object
[00:17:34] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[00:17:34] [PASSED] ttm_bo_validate_move_fence_signaled
[00:17:34] ========= ttm_bo_validate_move_fence_not_signaled =========
[00:17:34] [PASSED] Waits for GPU
[00:17:34] [PASSED] Tries to lock straight away
[00:17:35] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[00:17:35] [PASSED] ttm_bo_validate_swapout
[00:17:35] [PASSED] ttm_bo_validate_happy_evict
[00:17:35] [PASSED] ttm_bo_validate_all_pinned_evict
[00:17:35] [PASSED] ttm_bo_validate_allowed_only_evict
[00:17:35] [PASSED] ttm_bo_validate_deleted_evict
[00:17:35] [PASSED] ttm_bo_validate_busy_domain_evict
[00:17:35] [PASSED] ttm_bo_validate_evict_gutting
[00:17:35] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[00:17:35] ================= [PASSED] ttm_bo_validate =================
[00:17:35] ============================================================
[00:17:35] Testing complete. Ran 102 tests: passed: 102
[00:17:35] Elapsed time: 10.005s total, 1.659s configuring, 7.678s building, 0.557s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 38+ messages in thread
* ✓ CI.Build: success for Add PXP HWDRM support (rev3)
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (14 preceding siblings ...)
2024-11-21 0:17 ` ✓ CI.KUnit: success " Patchwork
@ 2024-11-21 0:35 ` Patchwork
2024-11-21 0:37 ` ✗ CI.Hooks: failure " Patchwork
` (2 subsequent siblings)
18 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2024-11-21 0:35 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: intel-xe
== Series Details ==
Series: Add PXP HWDRM support (rev3)
URL : https://patchwork.freedesktop.org/series/136052/
State : success
== Summary ==
lib/modules/6.12.0-xe/kernel/arch/x86/events/rapl.ko
lib/modules/6.12.0-xe/kernel/arch/x86/kvm/
lib/modules/6.12.0-xe/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.12.0-xe/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.12.0-xe/kernel/arch/x86/kvm/kvm-amd.ko
lib/modules/6.12.0-xe/kernel/kernel/
lib/modules/6.12.0-xe/kernel/kernel/kheaders.ko
lib/modules/6.12.0-xe/kernel/crypto/
lib/modules/6.12.0-xe/kernel/crypto/ecrdsa_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/xcbc.ko
lib/modules/6.12.0-xe/kernel/crypto/serpent_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/aria_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/crypto_simd.ko
lib/modules/6.12.0-xe/kernel/crypto/adiantum.ko
lib/modules/6.12.0-xe/kernel/crypto/tcrypt.ko
lib/modules/6.12.0-xe/kernel/crypto/crypto_engine.ko
lib/modules/6.12.0-xe/kernel/crypto/zstd.ko
lib/modules/6.12.0-xe/kernel/crypto/asymmetric_keys/
lib/modules/6.12.0-xe/kernel/crypto/asymmetric_keys/pkcs7_test_key.ko
lib/modules/6.12.0-xe/kernel/crypto/asymmetric_keys/pkcs8_key_parser.ko
lib/modules/6.12.0-xe/kernel/crypto/des_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/xctr.ko
lib/modules/6.12.0-xe/kernel/crypto/authenc.ko
lib/modules/6.12.0-xe/kernel/crypto/sm4_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/keywrap.ko
lib/modules/6.12.0-xe/kernel/crypto/camellia_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/sm3.ko
lib/modules/6.12.0-xe/kernel/crypto/pcrypt.ko
lib/modules/6.12.0-xe/kernel/crypto/aegis128.ko
lib/modules/6.12.0-xe/kernel/crypto/af_alg.ko
lib/modules/6.12.0-xe/kernel/crypto/algif_aead.ko
lib/modules/6.12.0-xe/kernel/crypto/cmac.ko
lib/modules/6.12.0-xe/kernel/crypto/sm3_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/aes_ti.ko
lib/modules/6.12.0-xe/kernel/crypto/chacha_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/poly1305_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/nhpoly1305.ko
lib/modules/6.12.0-xe/kernel/crypto/crc32_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/essiv.ko
lib/modules/6.12.0-xe/kernel/crypto/ccm.ko
lib/modules/6.12.0-xe/kernel/crypto/wp512.ko
lib/modules/6.12.0-xe/kernel/crypto/streebog_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/authencesn.ko
lib/modules/6.12.0-xe/kernel/crypto/echainiv.ko
lib/modules/6.12.0-xe/kernel/crypto/lrw.ko
lib/modules/6.12.0-xe/kernel/crypto/cryptd.ko
lib/modules/6.12.0-xe/kernel/crypto/crypto_user.ko
lib/modules/6.12.0-xe/kernel/crypto/algif_hash.ko
lib/modules/6.12.0-xe/kernel/crypto/vmac.ko
lib/modules/6.12.0-xe/kernel/crypto/polyval-generic.ko
lib/modules/6.12.0-xe/kernel/crypto/hctr2.ko
lib/modules/6.12.0-xe/kernel/crypto/842.ko
lib/modules/6.12.0-xe/kernel/crypto/pcbc.ko
lib/modules/6.12.0-xe/kernel/crypto/ansi_cprng.ko
lib/modules/6.12.0-xe/kernel/crypto/cast6_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/twofish_common.ko
lib/modules/6.12.0-xe/kernel/crypto/twofish_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/lz4hc.ko
lib/modules/6.12.0-xe/kernel/crypto/blowfish_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/md4.ko
lib/modules/6.12.0-xe/kernel/crypto/chacha20poly1305.ko
lib/modules/6.12.0-xe/kernel/crypto/curve25519-generic.ko
lib/modules/6.12.0-xe/kernel/crypto/lz4.ko
lib/modules/6.12.0-xe/kernel/crypto/rmd160.ko
lib/modules/6.12.0-xe/kernel/crypto/algif_skcipher.ko
lib/modules/6.12.0-xe/kernel/crypto/cast5_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/fcrypt.ko
lib/modules/6.12.0-xe/kernel/crypto/ecdsa_generic.ko
lib/modules/6.12.0-xe/kernel/crypto/sm4.ko
lib/modules/6.12.0-xe/kernel/crypto/cast_common.ko
lib/modules/6.12.0-xe/kernel/crypto/blowfish_common.ko
lib/modules/6.12.0-xe/kernel/crypto/michael_mic.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.12.0-xe/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.12.0-xe/kernel/crypto/algif_rng.ko
lib/modules/6.12.0-xe/kernel/block/
lib/modules/6.12.0-xe/kernel/block/bfq.ko
lib/modules/6.12.0-xe/kernel/block/kyber-iosched.ko
lib/modules/6.12.0-xe/build
lib/modules/6.12.0-xe/modules.alias.bin
lib/modules/6.12.0-xe/modules.builtin
lib/modules/6.12.0-xe/modules.softdep
lib/modules/6.12.0-xe/modules.alias
lib/modules/6.12.0-xe/modules.order
lib/modules/6.12.0-xe/modules.symbols
lib/modules/6.12.0-xe/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
+ echo -e '\e[0Ksection_end:1732149326:package_x86_64_nodebug\r\e[0K'
^[[0Ksection_end:1732149326:package_x86_64_nodebug
^[[0K
+ sync
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 38+ messages in thread
* ✗ CI.Hooks: failure for Add PXP HWDRM support (rev3)
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (15 preceding siblings ...)
2024-11-21 0:35 ` ✓ CI.Build: " Patchwork
@ 2024-11-21 0:37 ` Patchwork
2024-11-21 0:39 ` ✓ CI.checksparse: success " Patchwork
2024-11-21 10:42 ` ✗ Xe.CI.Full: failure " Patchwork
18 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2024-11-21 0:37 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: intel-xe
== Series Details ==
Series: Add PXP HWDRM support (rev3)
URL : https://patchwork.freedesktop.org/series/136052/
State : failure
== Summary ==
run-parts: executing /workspace/ci/hooks/00-showenv
+ export
+ grep -Ei '(^|\W)CI_'
declare -x CI_KERNEL_BUILD_DIR="/workspace/kernel/build64-default"
declare -x CI_KERNEL_SRC_DIR="/workspace/kernel"
declare -x CI_TOOLS_SRC_DIR="/workspace/ci"
declare -x CI_WORKSPACE_DIR="/workspace"
run-parts: executing /workspace/ci/hooks/10-build-W1
+ SRC_DIR=/workspace/kernel
+ RESTORE_DISPLAY_CONFIG=0
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ cd /workspace/kernel
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
GEN Makefile
UPD include/config/kernel.release
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool
UPD include/generated/utsrelease.h
CALL ../scripts/checksyscalls.sh
INSTALL libsubcmd_headers
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/help.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/pager.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/run-command.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
LD /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
AR /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
CC /workspace/kernel/build64-default/tools/objtool/weak.o
CC /workspace/kernel/build64-default/tools/objtool/check.o
CC /workspace/kernel/build64-default/tools/objtool/special.o
CC /workspace/kernel/build64-default/tools/objtool/builtin-check.o
CC /workspace/kernel/build64-default/tools/objtool/elf.o
CC /workspace/kernel/build64-default/tools/objtool/objtool.o
CC /workspace/kernel/build64-default/tools/objtool/orc_gen.o
CC /workspace/kernel/build64-default/tools/objtool/orc_dump.o
CC /workspace/kernel/build64-default/tools/objtool/libstring.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
CC /workspace/kernel/build64-default/tools/objtool/libctype.o
CC /workspace/kernel/build64-default/tools/objtool/str_error_r.o
CC /workspace/kernel/build64-default/tools/objtool/librbtree.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/orc.o
LD /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
LD /workspace/kernel/build64-default/tools/objtool/objtool-in.o
LINK /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
GEN Makefile
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
HOSTCC scripts/kconfig/menu.o
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/util.o
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTLD scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/workspace/kernel/build64-default/build32'
+ cd /workspace/kernel/build64-default/build32
+ /workspace/kernel/scripts/kconfig/merge_config.sh .config /workspace/ci/kernel/fragments/10-xe.fragment
Using .config as base
Merging /workspace/ci/kernel/fragments/10-xe.fragment
Value of CONFIG_DRM_XE is redefined by fragment /workspace/ci/kernel/fragments/10-xe.fragment:
Previous value: # CONFIG_DRM_XE is not set
New value: CONFIG_DRM_XE=m
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
Value requested for CONFIG_HAVE_UID16 not in final .config
Requested value: CONFIG_HAVE_UID16=y
Actual value:
Value requested for CONFIG_UID16 not in final .config
Requested value: CONFIG_UID16=y
Actual value:
Value requested for CONFIG_X86_32 not in final .config
Requested value: CONFIG_X86_32=y
Actual value:
Value requested for CONFIG_OUTPUT_FORMAT not in final .config
Requested value: CONFIG_OUTPUT_FORMAT="elf32-i386"
Actual value: CONFIG_OUTPUT_FORMAT="elf64-x86-64"
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MIN not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MIN=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MIN=28
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MAX not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MAX=16
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MAX=32
Value requested for CONFIG_PGTABLE_LEVELS not in final .config
Requested value: CONFIG_PGTABLE_LEVELS=2
Actual value: CONFIG_PGTABLE_LEVELS=5
Value requested for CONFIG_X86_BIGSMP not in final .config
Requested value: # CONFIG_X86_BIGSMP is not set
Actual value:
Value requested for CONFIG_X86_INTEL_QUARK not in final .config
Requested value: # CONFIG_X86_INTEL_QUARK is not set
Actual value:
Value requested for CONFIG_X86_RDC321X not in final .config
Requested value: # CONFIG_X86_RDC321X is not set
Actual value:
Value requested for CONFIG_X86_32_NON_STANDARD not in final .config
Requested value: # CONFIG_X86_32_NON_STANDARD is not set
Actual value:
Value requested for CONFIG_X86_32_IRIS not in final .config
Requested value: # CONFIG_X86_32_IRIS is not set
Actual value:
Value requested for CONFIG_M486SX not in final .config
Requested value: # CONFIG_M486SX is not set
Actual value:
Value requested for CONFIG_M486 not in final .config
Requested value: # CONFIG_M486 is not set
Actual value:
Value requested for CONFIG_M586 not in final .config
Requested value: # CONFIG_M586 is not set
Actual value:
Value requested for CONFIG_M586TSC not in final .config
Requested value: # CONFIG_M586TSC is not set
Actual value:
Value requested for CONFIG_M586MMX not in final .config
Requested value: # CONFIG_M586MMX is not set
Actual value:
Value requested for CONFIG_M686 not in final .config
Requested value: CONFIG_M686=y
Actual value:
Value requested for CONFIG_MPENTIUMII not in final .config
Requested value: # CONFIG_MPENTIUMII is not set
Actual value:
Value requested for CONFIG_MPENTIUMIII not in final .config
Requested value: # CONFIG_MPENTIUMIII is not set
Actual value:
Value requested for CONFIG_MPENTIUMM not in final .config
Requested value: # CONFIG_MPENTIUMM is not set
Actual value:
Value requested for CONFIG_MPENTIUM4 not in final .config
Requested value: # CONFIG_MPENTIUM4 is not set
Actual value:
Value requested for CONFIG_MK6 not in final .config
Requested value: # CONFIG_MK6 is not set
Actual value:
Value requested for CONFIG_MK7 not in final .config
Requested value: # CONFIG_MK7 is not set
Actual value:
Value requested for CONFIG_MCRUSOE not in final .config
Requested value: # CONFIG_MCRUSOE is not set
Actual value:
Value requested for CONFIG_MEFFICEON not in final .config
Requested value: # CONFIG_MEFFICEON is not set
Actual value:
Value requested for CONFIG_MWINCHIPC6 not in final .config
Requested value: # CONFIG_MWINCHIPC6 is not set
Actual value:
Value requested for CONFIG_MWINCHIP3D not in final .config
Requested value: # CONFIG_MWINCHIP3D is not set
Actual value:
Value requested for CONFIG_MELAN not in final .config
Requested value: # CONFIG_MELAN is not set
Actual value:
Value requested for CONFIG_MGEODEGX1 not in final .config
Requested value: # CONFIG_MGEODEGX1 is not set
Actual value:
Value requested for CONFIG_MGEODE_LX not in final .config
Requested value: # CONFIG_MGEODE_LX is not set
Actual value:
Value requested for CONFIG_MCYRIXIII not in final .config
Requested value: # CONFIG_MCYRIXIII is not set
Actual value:
Value requested for CONFIG_MVIAC3_2 not in final .config
Requested value: # CONFIG_MVIAC3_2 is not set
Actual value:
Value requested for CONFIG_MVIAC7 not in final .config
Requested value: # CONFIG_MVIAC7 is not set
Actual value:
Value requested for CONFIG_X86_GENERIC not in final .config
Requested value: # CONFIG_X86_GENERIC is not set
Actual value:
Value requested for CONFIG_X86_INTERNODE_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_INTERNODE_CACHE_SHIFT=5
Actual value: CONFIG_X86_INTERNODE_CACHE_SHIFT=6
Value requested for CONFIG_X86_L1_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_L1_CACHE_SHIFT=5
Actual value: CONFIG_X86_L1_CACHE_SHIFT=6
Value requested for CONFIG_X86_USE_PPRO_CHECKSUM not in final .config
Requested value: CONFIG_X86_USE_PPRO_CHECKSUM=y
Actual value:
Value requested for CONFIG_X86_MINIMUM_CPU_FAMILY not in final .config
Requested value: CONFIG_X86_MINIMUM_CPU_FAMILY=6
Actual value: CONFIG_X86_MINIMUM_CPU_FAMILY=64
Value requested for CONFIG_CPU_SUP_TRANSMETA_32 not in final .config
Requested value: CONFIG_CPU_SUP_TRANSMETA_32=y
Actual value:
Value requested for CONFIG_CPU_SUP_VORTEX_32 not in final .config
Requested value: CONFIG_CPU_SUP_VORTEX_32=y
Actual value:
Value requested for CONFIG_HPET_TIMER not in final .config
Requested value: # CONFIG_HPET_TIMER is not set
Actual value: CONFIG_HPET_TIMER=y
Value requested for CONFIG_NR_CPUS_RANGE_END not in final .config
Requested value: CONFIG_NR_CPUS_RANGE_END=8
Actual value: CONFIG_NR_CPUS_RANGE_END=512
Value requested for CONFIG_NR_CPUS_DEFAULT not in final .config
Requested value: CONFIG_NR_CPUS_DEFAULT=8
Actual value: CONFIG_NR_CPUS_DEFAULT=64
Value requested for CONFIG_X86_ANCIENT_MCE not in final .config
Requested value: # CONFIG_X86_ANCIENT_MCE is not set
Actual value:
Value requested for CONFIG_X86_LEGACY_VM86 not in final .config
Requested value: # CONFIG_X86_LEGACY_VM86 is not set
Actual value:
Value requested for CONFIG_X86_ESPFIX32 not in final .config
Requested value: CONFIG_X86_ESPFIX32=y
Actual value:
Value requested for CONFIG_TOSHIBA not in final .config
Requested value: # CONFIG_TOSHIBA is not set
Actual value:
Value requested for CONFIG_X86_REBOOTFIXUPS not in final .config
Requested value: # CONFIG_X86_REBOOTFIXUPS is not set
Actual value:
Value requested for CONFIG_MICROCODE_INITRD32 not in final .config
Requested value: CONFIG_MICROCODE_INITRD32=y
Actual value:
Value requested for CONFIG_NOHIGHMEM not in final .config
Requested value: # CONFIG_NOHIGHMEM is not set
Actual value:
Value requested for CONFIG_HIGHMEM4G not in final .config
Requested value: CONFIG_HIGHMEM4G=y
Actual value:
Value requested for CONFIG_HIGHMEM64G not in final .config
Requested value: # CONFIG_HIGHMEM64G is not set
Actual value:
Value requested for CONFIG_VMSPLIT_3G not in final .config
Requested value: CONFIG_VMSPLIT_3G=y
Actual value:
Value requested for CONFIG_VMSPLIT_3G_OPT not in final .config
Requested value: # CONFIG_VMSPLIT_3G_OPT is not set
Actual value:
Value requested for CONFIG_VMSPLIT_2G not in final .config
Requested value: # CONFIG_VMSPLIT_2G is not set
Actual value:
Value requested for CONFIG_VMSPLIT_2G_OPT not in final .config
Requested value: # CONFIG_VMSPLIT_2G_OPT is not set
Actual value:
Value requested for CONFIG_VMSPLIT_1G not in final .config
Requested value: # CONFIG_VMSPLIT_1G is not set
Actual value:
Value requested for CONFIG_PAGE_OFFSET not in final .config
Requested value: CONFIG_PAGE_OFFSET=0xC0000000
Actual value:
Value requested for CONFIG_HIGHMEM not in final .config
Requested value: CONFIG_HIGHMEM=y
Actual value:
Value requested for CONFIG_X86_PAE not in final .config
Requested value: # CONFIG_X86_PAE is not set
Actual value:
Value requested for CONFIG_ARCH_FLATMEM_ENABLE not in final .config
Requested value: CONFIG_ARCH_FLATMEM_ENABLE=y
Actual value:
Value requested for CONFIG_ARCH_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_ARCH_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_ILLEGAL_POINTER_VALUE not in final .config
Requested value: CONFIG_ILLEGAL_POINTER_VALUE=0
Actual value: CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
Value requested for CONFIG_HIGHPTE not in final .config
Requested value: # CONFIG_HIGHPTE is not set
Actual value:
Value requested for CONFIG_COMPAT_VDSO not in final .config
Requested value: # CONFIG_COMPAT_VDSO is not set
Actual value:
Value requested for CONFIG_FUNCTION_PADDING_CFI not in final .config
Requested value: CONFIG_FUNCTION_PADDING_CFI=0
Actual value: CONFIG_FUNCTION_PADDING_CFI=11
Value requested for CONFIG_FUNCTION_PADDING_BYTES not in final .config
Requested value: CONFIG_FUNCTION_PADDING_BYTES=4
Actual value: CONFIG_FUNCTION_PADDING_BYTES=16
Value requested for CONFIG_APM not in final .config
Requested value: # CONFIG_APM is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K6 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K6 is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K7 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K7 is not set
Actual value:
Value requested for CONFIG_X86_GX_SUSPMOD not in final .config
Requested value: # CONFIG_X86_GX_SUSPMOD is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_ICH not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_ICH is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_SMI not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_SMI is not set
Actual value:
Value requested for CONFIG_X86_CPUFREQ_NFORCE2 not in final .config
Requested value: # CONFIG_X86_CPUFREQ_NFORCE2 is not set
Actual value:
Value requested for CONFIG_X86_LONGRUN not in final .config
Requested value: # CONFIG_X86_LONGRUN is not set
Actual value:
Value requested for CONFIG_X86_LONGHAUL not in final .config
Requested value: # CONFIG_X86_LONGHAUL is not set
Actual value:
Value requested for CONFIG_X86_E_POWERSAVER not in final .config
Requested value: # CONFIG_X86_E_POWERSAVER is not set
Actual value:
Value requested for CONFIG_PCI_GOBIOS not in final .config
Requested value: # CONFIG_PCI_GOBIOS is not set
Actual value:
Value requested for CONFIG_PCI_GOMMCONFIG not in final .config
Requested value: # CONFIG_PCI_GOMMCONFIG is not set
Actual value:
Value requested for CONFIG_PCI_GODIRECT not in final .config
Requested value: # CONFIG_PCI_GODIRECT is not set
Actual value:
Value requested for CONFIG_PCI_GOANY not in final .config
Requested value: CONFIG_PCI_GOANY=y
Actual value:
Value requested for CONFIG_PCI_BIOS not in final .config
Requested value: CONFIG_PCI_BIOS=y
Actual value:
Value requested for CONFIG_ISA not in final .config
Requested value: # CONFIG_ISA is not set
Actual value:
Value requested for CONFIG_SCx200 not in final .config
Requested value: # CONFIG_SCx200 is not set
Actual value:
Value requested for CONFIG_OLPC not in final .config
Requested value: # CONFIG_OLPC is not set
Actual value:
Value requested for CONFIG_ALIX not in final .config
Requested value: # CONFIG_ALIX is not set
Actual value:
Value requested for CONFIG_NET5501 not in final .config
Requested value: # CONFIG_NET5501 is not set
Actual value:
Value requested for CONFIG_GEOS not in final .config
Requested value: # CONFIG_GEOS is not set
Actual value:
Value requested for CONFIG_COMPAT_32 not in final .config
Requested value: CONFIG_COMPAT_32=y
Actual value:
Value requested for CONFIG_HAVE_ATOMIC_IOMAP not in final .config
Requested value: CONFIG_HAVE_ATOMIC_IOMAP=y
Actual value:
Value requested for CONFIG_ARCH_32BIT_OFF_T not in final .config
Requested value: CONFIG_ARCH_32BIT_OFF_T=y
Actual value:
Value requested for CONFIG_ARCH_WANT_IPC_PARSE_VERSION not in final .config
Requested value: CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
Actual value:
Value requested for CONFIG_MODULES_USE_ELF_REL not in final .config
Requested value: CONFIG_MODULES_USE_ELF_REL=y
Actual value:
Value requested for CONFIG_ARCH_MMAP_RND_BITS not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS=28
Value requested for CONFIG_CLONE_BACKWARDS not in final .config
Requested value: CONFIG_CLONE_BACKWARDS=y
Actual value:
Value requested for CONFIG_OLD_SIGSUSPEND3 not in final .config
Requested value: CONFIG_OLD_SIGSUSPEND3=y
Actual value:
Value requested for CONFIG_OLD_SIGACTION not in final .config
Requested value: CONFIG_OLD_SIGACTION=y
Actual value:
Value requested for CONFIG_ARCH_SPLIT_ARG64 not in final .config
Requested value: CONFIG_ARCH_SPLIT_ARG64=y
Actual value:
Value requested for CONFIG_FUNCTION_ALIGNMENT not in final .config
Requested value: CONFIG_FUNCTION_ALIGNMENT=4
Actual value: CONFIG_FUNCTION_ALIGNMENT=16
Value requested for CONFIG_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_FLATMEM_MANUAL not in final .config
Requested value: CONFIG_FLATMEM_MANUAL=y
Actual value:
Value requested for CONFIG_SPARSEMEM_MANUAL not in final .config
Requested value: # CONFIG_SPARSEMEM_MANUAL is not set
Actual value:
Value requested for CONFIG_FLATMEM not in final .config
Requested value: CONFIG_FLATMEM=y
Actual value:
Value requested for CONFIG_SPARSEMEM_STATIC not in final .config
Requested value: CONFIG_SPARSEMEM_STATIC=y
Actual value:
Value requested for CONFIG_BOUNCE not in final .config
Requested value: CONFIG_BOUNCE=y
Actual value:
Value requested for CONFIG_KMAP_LOCAL not in final .config
Requested value: CONFIG_KMAP_LOCAL=y
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_COMPAQ not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_COMPAQ is not set
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_IBM not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_IBM is not set
Actual value:
Value requested for CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH not in final .config
Requested value: CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y
Actual value:
Value requested for CONFIG_PCH_PHUB not in final .config
Requested value: # CONFIG_PCH_PHUB is not set
Actual value:
Value requested for CONFIG_SCSI_NSP32 not in final .config
Requested value: # CONFIG_SCSI_NSP32 is not set
Actual value:
Value requested for CONFIG_PATA_CS5520 not in final .config
Requested value: # CONFIG_PATA_CS5520 is not set
Actual value:
Value requested for CONFIG_PATA_CS5530 not in final .config
Requested value: # CONFIG_PATA_CS5530 is not set
Actual value:
Value requested for CONFIG_PATA_CS5535 not in final .config
Requested value: # CONFIG_PATA_CS5535 is not set
Actual value:
Value requested for CONFIG_PATA_CS5536 not in final .config
Requested value: # CONFIG_PATA_CS5536 is not set
Actual value:
Value requested for CONFIG_PATA_SC1200 not in final .config
Requested value: # CONFIG_PATA_SC1200 is not set
Actual value:
Value requested for CONFIG_PCH_GBE not in final .config
Requested value: # CONFIG_PCH_GBE is not set
Actual value:
Value requested for CONFIG_INPUT_WISTRON_BTNS not in final .config
Requested value: # CONFIG_INPUT_WISTRON_BTNS is not set
Actual value:
Value requested for CONFIG_SERIAL_TIMBERDALE not in final .config
Requested value: # CONFIG_SERIAL_TIMBERDALE is not set
Actual value:
Value requested for CONFIG_SERIAL_PCH_UART not in final .config
Requested value: # CONFIG_SERIAL_PCH_UART is not set
Actual value:
Value requested for CONFIG_HW_RANDOM_GEODE not in final .config
Requested value: CONFIG_HW_RANDOM_GEODE=y
Actual value:
Value requested for CONFIG_SONYPI not in final .config
Requested value: # CONFIG_SONYPI is not set
Actual value:
Value requested for CONFIG_PC8736x_GPIO not in final .config
Requested value: # CONFIG_PC8736x_GPIO is not set
Actual value:
Value requested for CONFIG_NSC_GPIO not in final .config
Requested value: # CONFIG_NSC_GPIO is not set
Actual value:
Value requested for CONFIG_I2C_EG20T not in final .config
Requested value: # CONFIG_I2C_EG20T is not set
Actual value:
Value requested for CONFIG_SCx200_ACB not in final .config
Requested value: # CONFIG_SCx200_ACB is not set
Actual value:
Value requested for CONFIG_PTP_1588_CLOCK_PCH not in final .config
Requested value: # CONFIG_PTP_1588_CLOCK_PCH is not set
Actual value:
Value requested for CONFIG_SBC8360_WDT not in final .config
Requested value: # CONFIG_SBC8360_WDT is not set
Actual value:
Value requested for CONFIG_SBC7240_WDT not in final .config
Requested value: # CONFIG_SBC7240_WDT is not set
Actual value:
Value requested for CONFIG_MFD_CS5535 not in final .config
Requested value: # CONFIG_MFD_CS5535 is not set
Actual value:
Value requested for CONFIG_AGP_ALI not in final .config
Requested value: # CONFIG_AGP_ALI is not set
Actual value:
Value requested for CONFIG_AGP_ATI not in final .config
Requested value: # CONFIG_AGP_ATI is not set
Actual value:
Value requested for CONFIG_AGP_AMD not in final .config
Requested value: # CONFIG_AGP_AMD is not set
Actual value:
Value requested for CONFIG_AGP_NVIDIA not in final .config
Requested value: # CONFIG_AGP_NVIDIA is not set
Actual value:
Value requested for CONFIG_AGP_SWORKS not in final .config
Requested value: # CONFIG_AGP_SWORKS is not set
Actual value:
Value requested for CONFIG_AGP_EFFICEON not in final .config
Requested value: # CONFIG_AGP_EFFICEON is not set
Actual value:
Value requested for CONFIG_SND_CS5530 not in final .config
Requested value: # CONFIG_SND_CS5530 is not set
Actual value:
Value requested for CONFIG_SND_CS5535AUDIO not in final .config
Requested value: # CONFIG_SND_CS5535AUDIO is not set
Actual value:
Value requested for CONFIG_SND_SIS7019 not in final .config
Requested value: # CONFIG_SND_SIS7019 is not set
Actual value:
Value requested for CONFIG_LEDS_OT200 not in final .config
Requested value: # CONFIG_LEDS_OT200 is not set
Actual value:
Value requested for CONFIG_PCH_DMA not in final .config
Requested value: # CONFIG_PCH_DMA is not set
Actual value:
Value requested for CONFIG_CLKSRC_I8253 not in final .config
Requested value: CONFIG_CLKSRC_I8253=y
Actual value:
Value requested for CONFIG_MAILBOX not in final .config
Requested value: # CONFIG_MAILBOX is not set
Actual value: CONFIG_MAILBOX=y
Value requested for CONFIG_CRYPTO_SERPENT_SSE2_586 not in final .config
Requested value: # CONFIG_CRYPTO_SERPENT_SSE2_586 is not set
Actual value:
Value requested for CONFIG_CRYPTO_TWOFISH_586 not in final .config
Requested value: # CONFIG_CRYPTO_TWOFISH_586 is not set
Actual value:
Value requested for CONFIG_CRYPTO_DEV_GEODE not in final .config
Requested value: # CONFIG_CRYPTO_DEV_GEODE is not set
Actual value:
Value requested for CONFIG_CRYPTO_DEV_HIFN_795X not in final .config
Requested value: # CONFIG_CRYPTO_DEV_HIFN_795X is not set
Actual value:
Value requested for CONFIG_CRYPTO_LIB_POLY1305_RSIZE not in final .config
Requested value: CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
Actual value: CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
Value requested for CONFIG_AUDIT_GENERIC not in final .config
Requested value: CONFIG_AUDIT_GENERIC=y
Actual value:
Value requested for CONFIG_GENERIC_VDSO_32 not in final .config
Requested value: CONFIG_GENERIC_VDSO_32=y
Actual value:
Value requested for CONFIG_DEBUG_KMAP_LOCAL not in final .config
Requested value: # CONFIG_DEBUG_KMAP_LOCAL is not set
Actual value:
Value requested for CONFIG_DEBUG_HIGHMEM not in final .config
Requested value: # CONFIG_DEBUG_HIGHMEM is not set
Actual value:
Value requested for CONFIG_HAVE_DEBUG_STACKOVERFLOW not in final .config
Requested value: CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
Actual value:
Value requested for CONFIG_DEBUG_STACKOVERFLOW not in final .config
Requested value: # CONFIG_DEBUG_STACKOVERFLOW is not set
Actual value:
Value requested for CONFIG_HAVE_FUNCTION_GRAPH_TRACER not in final .config
Requested value: CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
Actual value:
Value requested for CONFIG_HAVE_FUNCTION_GRAPH_RETVAL not in final .config
Requested value: CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y
Actual value:
Value requested for CONFIG_DRM_KUNIT_TEST not in final .config
Requested value: CONFIG_DRM_KUNIT_TEST=m
Actual value:
Value requested for CONFIG_DRM_XE_WERROR not in final .config
Requested value: CONFIG_DRM_XE_WERROR=y
Actual value:
Value requested for CONFIG_DRM_XE_DEBUG not in final .config
Requested value: CONFIG_DRM_XE_DEBUG=y
Actual value:
Value requested for CONFIG_DRM_XE_DEBUG_MEM not in final .config
Requested value: CONFIG_DRM_XE_DEBUG_MEM=y
Actual value:
Value requested for CONFIG_DRM_XE_KUNIT_TEST not in final .config
Requested value: CONFIG_DRM_XE_KUNIT_TEST=m
Actual value:
++ nproc
+ make -j48 ARCH=i386 olddefconfig
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
++ nproc
+ make -j48 ARCH=i386
SYNC include/config/auto.conf.cmd
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
GEN Makefile
WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h
WRAP arch/x86/include/generated/uapi/asm/errno.h
WRAP arch/x86/include/generated/uapi/asm/fcntl.h
WRAP arch/x86/include/generated/uapi/asm/ioctl.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
UPD include/generated/uapi/linux/version.h
WRAP arch/x86/include/generated/uapi/asm/ioctls.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
WRAP arch/x86/include/generated/uapi/asm/ipcbuf.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
WRAP arch/x86/include/generated/uapi/asm/param.h
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
WRAP arch/x86/include/generated/uapi/asm/poll.h
WRAP arch/x86/include/generated/uapi/asm/resource.h
WRAP arch/x86/include/generated/uapi/asm/socket.h
WRAP arch/x86/include/generated/uapi/asm/sockios.h
WRAP arch/x86/include/generated/uapi/asm/termbits.h
WRAP arch/x86/include/generated/uapi/asm/termios.h
WRAP arch/x86/include/generated/uapi/asm/types.h
UPD include/generated/compile.h
HOSTCC arch/x86/tools/relocs_32.o
HOSTCC arch/x86/tools/relocs_64.o
HOSTCC arch/x86/tools/relocs_common.o
WRAP arch/x86/include/generated/asm/early_ioremap.h
WRAP arch/x86/include/generated/asm/mcs_spinlock.h
WRAP arch/x86/include/generated/asm/mmzone.h
HOSTCC scripts/kallsyms
WRAP arch/x86/include/generated/asm/irq_regs.h
HOSTCC scripts/sorttable
WRAP arch/x86/include/generated/asm/kmap_size.h
HOSTCC scripts/asn1_compiler
WRAP arch/x86/include/generated/asm/local64.h
WRAP arch/x86/include/generated/asm/mmiowb.h
WRAP arch/x86/include/generated/asm/module.lds.h
WRAP arch/x86/include/generated/asm/rwonce.h
HOSTCC scripts/selinux/mdp/mdp
HOSTCC scripts/selinux/genheaders/genheaders
HOSTLD arch/x86/tools/relocs
UPD include/config/kernel.release
UPD include/generated/utsrelease.h
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
CC scripts/mod/devicetable-offsets.s
UPD scripts/mod/devicetable-offsets.h
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTCC scripts/mod/symsearch.o
HOSTLD scripts/mod/modpost
CC kernel/bounds.s
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-arch-fallback.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-instrumented.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-long.h
UPD include/generated/timeconst.h
UPD include/generated/bounds.h
CC arch/x86/kernel/asm-offsets.s
UPD include/generated/asm-offsets.h
CALL /workspace/kernel/scripts/checksyscalls.sh
LDS scripts/module.lds
HOSTCC usr/gen_init_cpio
CC init/main.o
CC certs/system_keyring.o
CC init/do_mounts.o
CC ipc/util.o
CC init/do_mounts_initrd.o
UPD init/utsversion-tmp.h
CC ipc/msgutil.o
CC init/initramfs.o
CC security/commoncap.o
CC ipc/msg.o
CC mm/filemap.o
AS arch/x86/lib/atomic64_cx8_32.o
CC security/lsm_syscalls.o
CC init/calibrate.o
CC ipc/sem.o
AS arch/x86/lib/checksum_32.o
CC io_uring/io_uring.o
CC arch/x86/realmode/init.o
CC security/min_addr.o
CC init/init_task.o
CC mm/mempool.o
AS arch/x86/entry/entry.o
CC arch/x86/pci/i386.o
AR arch/x86/crypto/built-in.a
CC arch/x86/video/video-common.o
AR arch/x86/net/built-in.a
CC security/keys/gc.o
CC arch/x86/power/cpu.o
CC security/integrity/iint.o
GEN security/selinux/flask.h security/selinux/av_permissions.h
AR arch/x86/entry/vsyscall/built-in.a
CC arch/x86/events/amd/core.o
CC block/partitions/core.o
AR virt/lib/built-in.a
CC block/partitions/msdos.o
CC arch/x86/events/intel/core.o
CC fs/nfs_common/nfsacl.o
AR arch/x86/platform/atom/built-in.a
AR arch/x86/virt/svm/built-in.a
CC arch/x86/mm/pat/set_memory.o
CC fs/notify/dnotify/dnotify.o
AR virt/built-in.a
CC arch/x86/mm/init.o
CC lib/math/div64.o
CC net/core/sock.o
CC security/selinux/avc.o
CC arch/x86/kernel/fpu/init.o
AR drivers/cache/built-in.a
CC sound/core/seq/seq.o
CC fs/notify/inotify/inotify_fsnotify.o
CC arch/x86/power/hibernate_32.o
AR arch/x86/platform/ce4100/built-in.a
AR arch/x86/virt/vmx/built-in.a
CC arch/x86/entry/vdso/vma.o
CC arch/x86/lib/cmdline.o
AR drivers/irqchip/built-in.a
CC arch/x86/platform/efi/memmap.o
AR arch/x86/virt/built-in.a
CC io_uring/opdef.o
AR fs/notify/fanotify/built-in.a
CC io_uring/kbuf.o
CC block/bdev.o
AR drivers/bus/mhi/built-in.a
CC kernel/sched/core.o
AR drivers/bus/built-in.a
CC crypto/asymmetric_keys/asymmetric_type.o
AR drivers/pwm/built-in.a
AR drivers/leds/trigger/built-in.a
AR drivers/leds/blink/built-in.a
AR drivers/leds/simple/built-in.a
CC drivers/leds/led-core.o
AS arch/x86/lib/cmpxchg8b_emu.o
CC arch/x86/lib/cpu.o
CC lib/math/gcd.o
CC lib/math/lcm.o
CC lib/math/int_log.o
CC block/fops.o
GEN usr/initramfs_data.cpio
COPY usr/initramfs_inc_data
AS usr/initramfs_data.o
AR usr/built-in.a
HOSTCC certs/extract-cert
CC lib/math/int_pow.o
CC arch/x86/kernel/fpu/bugs.o
CC lib/crypto/mpi/generic_mpih-lshift.o
CC lib/math/int_sqrt.o
CC arch/x86/kernel/fpu/core.o
CC lib/math/reciprocal_div.o
CC arch/x86/lib/delay.o
CC fs/notify/inotify/inotify_user.o
CC sound/core/seq/seq_lock.o
AS arch/x86/realmode/rm/header.o
CC lib/math/rational.o
AS arch/x86/realmode/rm/trampoline_32.o
AS arch/x86/realmode/rm/stack.o
AS arch/x86/realmode/rm/reboot.o
AS arch/x86/realmode/rm/wakeup_asm.o
CERT certs/x509_certificate_list
CERT certs/signing_key.x509
AS certs/system_certificates.o
AR arch/x86/video/built-in.a
CC crypto/asymmetric_keys/restrict.o
CC arch/x86/realmode/rm/wakemain.o
CC kernel/locking/mutex.o
CC security/integrity/integrity_audit.o
CC arch/x86/mm/pat/memtype.o
CC fs/nfs_common/grace.o
AR certs/built-in.a
CC fs/nfs_common/common.o
CC drivers/leds/led-class.o
CC arch/x86/kernel/fpu/regset.o
CC crypto/asymmetric_keys/signature.o
CC block/bio.o
CC arch/x86/pci/init.o
CC arch/x86/realmode/rm/video-mode.o
AR sound/i2c/other/built-in.a
AS arch/x86/entry/entry_32.o
CC arch/x86/entry/syscall_32.o
CC arch/x86/entry/vdso/extable.o
AR sound/i2c/built-in.a
CC arch/x86/mm/pat/memtype_interval.o
AR fs/notify/dnotify/built-in.a
CC security/keys/key.o
CC security/keys/keyring.o
CC arch/x86/platform/efi/quirks.o
LDS arch/x86/entry/vdso/vdso32/vdso32.lds
CC crypto/asymmetric_keys/public_key.o
ASN.1 crypto/asymmetric_keys/x509.asn1.[ch]
AS arch/x86/lib/getuser.o
CC sound/core/seq/seq_clientmgr.o
AS arch/x86/power/hibernate_asm_32.o
GEN arch/x86/lib/inat-tables.c
CC arch/x86/lib/insn-eval.o
CC block/partitions/efi.o
CC arch/x86/power/hibernate.o
AS arch/x86/realmode/rm/copy.o
AS arch/x86/realmode/rm/bioscall.o
CC arch/x86/realmode/rm/regs.o
CC drivers/pci/msi/pcidev_msi.o
CC lib/crypto/mpi/generic_mpih-mul1.o
CC drivers/pci/pcie/portdrv.o
CC arch/x86/entry/common.o
CC arch/x86/realmode/rm/video-vga.o
CC arch/x86/mm/init_32.o
AR lib/math/built-in.a
CC net/ethernet/eth.o
CC drivers/pci/pcie/rcec.o
CC arch/x86/realmode/rm/video-vesa.o
CC mm/oom_kill.o
CC arch/x86/kernel/fpu/signal.o
CC fs/notify/fsnotify.o
CC arch/x86/realmode/rm/video-bios.o
CC arch/x86/events/amd/lbr.o
PASYMS arch/x86/realmode/rm/pasyms.h
CC fs/notify/notification.o
CC net/core/request_sock.o
LDS arch/x86/realmode/rm/realmode.lds
CC drivers/leds/led-triggers.o
LD arch/x86/realmode/rm/realmode.elf
CC arch/x86/events/zhaoxin/core.o
RELOCS arch/x86/realmode/rm/realmode.relocs
OBJCOPY arch/x86/realmode/rm/realmode.bin
AS arch/x86/realmode/rmpiggy.o
AS arch/x86/entry/vdso/vdso32/note.o
AR arch/x86/realmode/built-in.a
CC arch/x86/platform/efi/efi.o
CC io_uring/rsrc.o
CC kernel/power/qos.o
CC arch/x86/pci/pcbios.o
AR net/802/built-in.a
CC arch/x86/events/amd/ibs.o
CC drivers/video/backlight/backlight.o
CC drivers/video/console/dummycon.o
AR fs/nfs_common/built-in.a
CC drivers/video/console/vgacon.o
AR fs/notify/inotify/built-in.a
CC arch/x86/events/core.o
CC init/version.o
ASN.1 crypto/asymmetric_keys/x509_akid.asn1.[ch]
CC crypto/asymmetric_keys/x509_loader.o
AR security/integrity/built-in.a
CC crypto/asymmetric_keys/x509_public_key.o
CC lib/crypto/mpi/generic_mpih-mul2.o
AS arch/x86/entry/vdso/vdso32/system_call.o
AR arch/x86/power/built-in.a
AS arch/x86/entry/vdso/vdso32/sigreturn.o
CC lib/crypto/memneq.o
CC drivers/pci/msi/api.o
CC arch/x86/entry/vdso/vdso32/vclock_gettime.o
CC drivers/pci/msi/msi.o
AR arch/x86/mm/pat/built-in.a
CC lib/crypto/utils.o
CC security/selinux/hooks.o
AR init/built-in.a
CC arch/x86/events/probe.o
CC arch/x86/lib/insn.o
CC crypto/api.o
CC drivers/pci/msi/irqdomain.o
CC kernel/printk/printk.o
CC ipc/shm.o
CC arch/x86/kernel/cpu/mce/core.o
CC drivers/pci/pcie/aspm.o
AR block/partitions/built-in.a
CC io_uring/notif.o
CC lib/zlib_inflate/inffast.o
CC lib/zlib_deflate/deflate.o
CC mm/fadvise.o
CC lib/lzo/lzo1x_compress.o
CC arch/x86/mm/fault.o
CC kernel/locking/semaphore.o
CC lib/zlib_inflate/inflate.o
CC fs/notify/group.o
CC ipc/syscall.o
CC arch/x86/kernel/acpi/boot.o
AR drivers/leds/built-in.a
CC arch/x86/kernel/apic/apic.o
CC arch/x86/lib/kaslr.o
CC arch/x86/platform/efi/efi_32.o
CC security/selinux/selinuxfs.o
CC security/keys/keyctl.o
CC arch/x86/kernel/fpu/xstate.o
CC arch/x86/pci/mmconfig_32.o
CC security/keys/permission.o
ASN.1 crypto/asymmetric_keys/pkcs7.asn1.[ch]
CC crypto/asymmetric_keys/pkcs7_trust.o
CC lib/crypto/mpi/generic_mpih-mul3.o
CC sound/core/seq/seq_memory.o
AR arch/x86/events/zhaoxin/built-in.a
AS arch/x86/entry/thunk.o
CC arch/x86/kernel/acpi/sleep.o
CC kernel/printk/printk_safe.o
CC arch/x86/entry/vdso/vdso32/vgetcpu.o
CC block/elevator.o
CC arch/x86/lib/memcpy_32.o
AR drivers/video/backlight/built-in.a
CC lib/zlib_inflate/infutil.o
HOSTCC arch/x86/entry/vdso/vdso2c
AS arch/x86/lib/memmove_32.o
AR net/ethernet/built-in.a
CC crypto/cipher.o
CC arch/x86/lib/misc.o
CC drivers/pci/pcie/pme.o
CC arch/x86/lib/pc-conf-reg.o
CC lib/lzo/lzo1x_decompress_safe.o
AR drivers/video/console/built-in.a
CC crypto/asymmetric_keys/pkcs7_verify.o
AR drivers/video/fbdev/core/built-in.a
AR drivers/video/fbdev/omap/built-in.a
CC lib/zlib_deflate/deftree.o
AR drivers/video/fbdev/omap2/omapfb/dss/built-in.a
AR drivers/video/fbdev/omap2/omapfb/displays/built-in.a
CC kernel/power/main.o
AR drivers/video/fbdev/omap2/omapfb/built-in.a
AR drivers/video/fbdev/omap2/built-in.a
AR drivers/video/fbdev/built-in.a
AR arch/x86/platform/geode/built-in.a
CC lib/crypto/chacha.o
CC drivers/video/aperture.o
AS arch/x86/lib/putuser.o
CC arch/x86/kernel/kprobes/core.o
AR drivers/pci/msi/built-in.a
CC drivers/video/cmdline.o
LDS arch/x86/kernel/vmlinux.lds
AS arch/x86/lib/retpoline.o
CC io_uring/tctx.o
CC arch/x86/lib/string_32.o
CC lib/zlib_inflate/inftrees.o
CC kernel/locking/rwsem.o
CC arch/x86/events/amd/uncore.o
CC fs/notify/mark.o
CC block/blk-core.o
CC arch/x86/events/intel/bts.o
CC arch/x86/lib/strstr_32.o
CC arch/x86/mm/ioremap.o
CC arch/x86/entry/vdso/vdso32-setup.o
CC arch/x86/lib/usercopy.o
CC lib/crypto/mpi/generic_mpih-rshift.o
CC arch/x86/pci/direct.o
CC net/core/skbuff.o
CC arch/x86/kernel/apic/apic_common.o
CC lib/zlib_inflate/inflate_syms.o
CC kernel/irq/irqdesc.o
AS arch/x86/platform/efi/efi_stub_32.o
CC arch/x86/platform/efi/runtime-map.o
CC kernel/rcu/update.o
AR kernel/livepatch/built-in.a
CC crypto/asymmetric_keys/x509.asn1.o
CC kernel/dma/mapping.o
AR lib/lzo/built-in.a
CC kernel/entry/common.o
CC crypto/asymmetric_keys/x509_akid.asn1.o
CC kernel/module/main.o
CC crypto/asymmetric_keys/x509_cert_parser.o
CC io_uring/filetable.o
CC sound/core/seq/seq_queue.o
CC mm/maccess.o
CC ipc/ipc_sysctl.o
CC ipc/mqueue.o
VDSO arch/x86/entry/vdso/vdso32.so.dbg
CC arch/x86/lib/usercopy_32.o
CC arch/x86/lib/msr-smp.o
CC kernel/dma/direct.o
OBJCOPY arch/x86/entry/vdso/vdso32.so
VDSO2C arch/x86/entry/vdso/vdso-image-32.c
CC arch/x86/entry/vdso/vdso-image-32.o
CC lib/zlib_deflate/deflate_syms.o
AR drivers/pci/pcie/built-in.a
AR drivers/pci/pwrctl/built-in.a
AS arch/x86/kernel/acpi/wakeup_32.o
CC lib/lz4/lz4_decompress.o
AR lib/zlib_inflate/built-in.a
CC drivers/pci/hotplug/pci_hotplug_core.o
CC arch/x86/kernel/acpi/cstate.o
AR drivers/pci/controller/dwc/built-in.a
AR drivers/pci/controller/mobiveil/built-in.a
AR drivers/pci/controller/plda/built-in.a
AR drivers/pci/controller/built-in.a
CC arch/x86/kernel/cpu/mce/severity.o
AR arch/x86/platform/iris/built-in.a
CC kernel/irq/handle.o
CC kernel/power/console.o
CC security/keys/process_keys.o
AR arch/x86/kernel/fpu/built-in.a
CC security/selinux/netlink.o
AR arch/x86/entry/vdso/built-in.a
CC crypto/asymmetric_keys/pkcs7.asn1.o
AR arch/x86/entry/built-in.a
CC arch/x86/lib/cache-smp.o
CC arch/x86/platform/intel/iosf_mbi.o
CC lib/crypto/mpi/generic_mpih-sub1.o
AR arch/x86/platform/intel-mid/built-in.a
CC lib/crypto/mpi/generic_mpih-add1.o
AR sound/drivers/opl3/built-in.a
AR sound/drivers/opl4/built-in.a
CC drivers/video/nomodeset.o
AR sound/drivers/mpu401/built-in.a
AR sound/drivers/vx/built-in.a
AR sound/drivers/pcsp/built-in.a
AR sound/drivers/built-in.a
AR drivers/idle/built-in.a
CC kernel/locking/percpu-rwsem.o
AR lib/zlib_deflate/built-in.a
CC kernel/locking/spinlock.o
CC sound/core/sound.o
CC arch/x86/kernel/cpu/mce/genpool.o
CC kernel/module/strict_rwx.o
CC crypto/asymmetric_keys/pkcs7_parser.o
CC arch/x86/lib/msr.o
AR arch/x86/platform/intel-quark/built-in.a
CC arch/x86/kernel/kprobes/opt.o
CC arch/x86/pci/mmconfig-shared.o
CC arch/x86/mm/extable.o
CC drivers/pci/hotplug/acpi_pcihp.o
CC lib/crypto/mpi/mpicoder.o
CC drivers/video/hdmi.o
CC arch/x86/events/intel/ds.o
AR arch/x86/platform/efi/built-in.a
CC lib/crypto/aes.o
CC sound/core/init.o
CC fs/notify/fdinfo.o
CC kernel/locking/osq_lock.o
CC mm/page-writeback.o
AR arch/x86/kernel/acpi/built-in.a
CC kernel/locking/qspinlock.o
AS arch/x86/lib/msr-reg.o
CC sound/core/seq/seq_fifo.o
AR drivers/pci/switch/built-in.a
AR arch/x86/platform/olpc/built-in.a
CC lib/crypto/arc4.o
AR arch/x86/events/amd/built-in.a
AR sound/isa/ad1816a/built-in.a
AR sound/isa/ad1848/built-in.a
CC kernel/irq/manage.o
CC arch/x86/kernel/cpu/mce/intel.o
AR sound/isa/cs423x/built-in.a
AR sound/isa/es1688/built-in.a
CC kernel/irq/spurious.o
AR sound/isa/galaxy/built-in.a
CC arch/x86/kernel/apic/apic_noop.o
CC kernel/irq/resend.o
AR sound/isa/gus/built-in.a
AR sound/isa/msnd/built-in.a
AR sound/isa/opti9xx/built-in.a
CC arch/x86/pci/fixup.o
AR sound/isa/sb/built-in.a
CC io_uring/rw.o
AR sound/isa/wavefront/built-in.a
CC kernel/module/kmod.o
AR sound/isa/wss/built-in.a
CC security/selinux/nlmsgtab.o
AR sound/isa/built-in.a
CC kernel/power/process.o
CC kernel/irq/chip.o
CC kernel/entry/syscall_user_dispatch.o
CC sound/core/seq/seq_prioq.o
CC kernel/printk/nbcon.o
CC security/keys/request_key.o
AR crypto/asymmetric_keys/built-in.a
CC crypto/compress.o
CC ipc/namespace.o
AR arch/x86/platform/intel/built-in.a
AR drivers/char/ipmi/built-in.a
CC io_uring/net.o
AR arch/x86/platform/scx200/built-in.a
AR arch/x86/platform/ts5500/built-in.a
CC io_uring/poll.o
CC net/core/datagram.o
AR arch/x86/platform/uv/built-in.a
AR arch/x86/platform/built-in.a
CC kernel/time/time.o
CC kernel/futex/core.o
CC kernel/futex/syscalls.o
CC kernel/cgroup/cgroup.o
CC kernel/locking/rtmutex_api.o
CC kernel/trace/trace_clock.o
AR fs/notify/built-in.a
CC fs/iomap/trace.o
CC lib/crypto/mpi/mpi-add.o
CC arch/x86/kernel/apic/ipi.o
CC security/selinux/netif.o
CC kernel/locking/qrwlock.o
AR drivers/pci/hotplug/built-in.a
CC drivers/pci/access.o
CC arch/x86/lib/msr-reg-export.o
CC security/keys/request_key_auth.o
AR arch/x86/kernel/kprobes/built-in.a
AR drivers/video/built-in.a
CC net/sched/sch_generic.o
CC net/netlink/af_netlink.o
CC arch/x86/mm/mmap.o
CC arch/x86/kernel/cpu/mce/amd.o
CC kernel/dma/ops_helpers.o
AR lib/lz4/built-in.a
CC kernel/dma/remap.o
CC net/netlink/genetlink.o
AR kernel/entry/built-in.a
CC arch/x86/kernel/apic/vector.o
CC kernel/futex/pi.o
AS arch/x86/lib/hweight.o
CC lib/crypto/gf128mul.o
CC arch/x86/lib/iomem.o
CC sound/core/seq/seq_timer.o
CC kernel/trace/ring_buffer.o
CC ipc/mq_sysctl.o
CC crypto/algapi.o
CC arch/x86/kernel/cpu/mce/threshold.o
CC block/blk-sysfs.o
CC security/security.o
CC arch/x86/mm/pgtable.o
CC kernel/printk/printk_ringbuffer.o
CC arch/x86/pci/acpi.o
CC arch/x86/events/intel/knc.o
CC net/core/stream.o
CC lib/zstd/zstd_decompress_module.o
CC lib/crypto/mpi/mpi-bit.o
CC crypto/scatterwalk.o
CC kernel/sched/fair.o
CC arch/x86/lib/atomic64_32.o
CC kernel/module/tree_lookup.o
AR ipc/built-in.a
CC kernel/module/kallsyms.o
CC kernel/power/suspend.o
CC arch/x86/lib/inat.o
CC kernel/power/hibernate.o
CC security/keys/user_defined.o
CC kernel/cgroup/rstat.o
AR kernel/dma/built-in.a
CC net/netlink/policy.o
CC arch/x86/events/utils.o
CC block/blk-flush.o
CC kernel/time/timer.o
AR arch/x86/lib/built-in.a
AR arch/x86/lib/lib.a
CC kernel/rcu/sync.o
AR kernel/locking/built-in.a
CC kernel/time/hrtimer.o
CC kernel/irq/dummychip.o
CC block/blk-settings.o
CC lib/zstd/decompress/huf_decompress.o
CC lib/zstd/decompress/zstd_ddict.o
CC kernel/futex/requeue.o
CC drivers/pci/bus.o
CC sound/core/seq/seq_system.o
CC mm/folio-compat.o
CC kernel/printk/sysctl.o
CC sound/core/memory.o
CC security/selinux/netnode.o
CC kernel/rcu/srcutree.o
CC kernel/trace/trace.o
CC fs/iomap/iter.o
CC arch/x86/mm/physaddr.o
CC lib/crypto/mpi/mpi-cmp.o
CC net/core/scm.o
CC kernel/time/timekeeping.o
CC arch/x86/pci/legacy.o
CC kernel/cgroup/namespace.o
CC fs/quota/dquot.o
CC security/keys/proc.o
CC arch/x86/events/intel/lbr.o
CC kernel/irq/devres.o
AR kernel/printk/built-in.a
AR sound/pci/ac97/built-in.a
AR sound/pci/ali5451/built-in.a
AR sound/pci/asihpi/built-in.a
CC net/core/gen_stats.o
CC fs/quota/quota_v2.o
AR sound/pci/au88x0/built-in.a
CC kernel/module/procfs.o
AR net/bpf/built-in.a
AR sound/pci/aw2/built-in.a
CC sound/core/control.o
AR sound/pci/ctxfi/built-in.a
AR sound/pci/ca0106/built-in.a
AR sound/pci/cs46xx/built-in.a
AR sound/pci/cs5535audio/built-in.a
CC crypto/proc.o
AR sound/pci/lola/built-in.a
AR sound/pci/lx6464es/built-in.a
AR sound/pci/echoaudio/built-in.a
CC kernel/rcu/tree.o
AR sound/pci/emu10k1/built-in.a
CC sound/pci/hda/hda_bind.o
AR sound/pci/ice1712/built-in.a
CC sound/pci/hda/hda_codec.o
CC sound/core/seq/seq_ports.o
CC security/lsm_audit.o
CC fs/proc/task_mmu.o
CC kernel/futex/waitwake.o
CC io_uring/eventfd.o
CC drivers/acpi/acpica/dsargs.o
AR arch/x86/kernel/cpu/mce/built-in.a
CC drivers/pnp/pnpacpi/core.o
CC arch/x86/kernel/cpu/mtrr/mtrr.o
CC mm/readahead.o
CC block/blk-ioc.o
CC arch/x86/mm/tlb.o
CC drivers/pci/probe.o
CC lib/crypto/mpi/mpi-sub-ui.o
CC arch/x86/kernel/apic/init.o
CC arch/x86/kernel/apic/hw_nmi.o
CC kernel/irq/autoprobe.o
CC drivers/pnp/pnpacpi/rsparser.o
CC arch/x86/pci/irq.o
CC arch/x86/pci/common.o
CC fs/iomap/buffered-io.o
CC arch/x86/pci/early.o
CC security/keys/sysctl.o
CC kernel/module/sysfs.o
CC kernel/power/snapshot.o
CC drivers/acpi/acpica/dscontrol.o
CC crypto/aead.o
CC net/sched/sch_mq.o
CC io_uring/uring_cmd.o
CC arch/x86/events/intel/p4.o
CC lib/zstd/decompress/zstd_decompress.o
CC sound/core/seq/seq_info.o
CC kernel/time/ntp.o
CC kernel/irq/irqdomain.o
CC kernel/irq/proc.o
CC lib/crypto/mpi/mpi-div.o
CC security/selinux/netport.o
CC arch/x86/kernel/cpu/microcode/core.o
CC arch/x86/pci/bus_numa.o
CC kernel/bpf/core.o
AR kernel/futex/built-in.a
CC kernel/cgroup/cgroup-v1.o
CC fs/quota/quota_tree.o
CC drivers/acpi/acpica/dsdebug.o
AR net/netlink/built-in.a
CC arch/x86/pci/amd_bus.o
CC arch/x86/kernel/apic/io_apic.o
AR drivers/amba/built-in.a
CC arch/x86/events/intel/p6.o
CC security/keys/keyctl_pkey.o
CC block/blk-map.o
CC arch/x86/kernel/cpu/mtrr/if.o
CC lib/xz/xz_dec_syms.o
CC sound/core/misc.o
CC arch/x86/kernel/apic/msi.o
CC drivers/pnp/core.o
CC mm/swap.o
AR sound/ppc/built-in.a
CC lib/crypto/mpi/mpi-mod.o
AR kernel/module/built-in.a
CC kernel/cgroup/freezer.o
AR drivers/pnp/pnpacpi/built-in.a
CC arch/x86/mm/cpu_entry_area.o
CC arch/x86/events/intel/pt.o
CC drivers/acpi/acpica/dsfield.o
CC sound/core/seq/seq_dummy.o
CC kernel/rcu/rcu_segcblist.o
CC io_uring/openclose.o
CC kernel/power/swap.o
CC crypto/geniv.o
CC lib/xz/xz_dec_stream.o
CC fs/iomap/direct-io.o
AR drivers/acpi/pmic/built-in.a
CC drivers/pnp/card.o
CC arch/x86/events/rapl.o
CC arch/x86/kernel/cpu/microcode/intel.o
CC kernel/time/clocksource.o
CC lib/zstd/decompress/zstd_decompress_block.o
CC net/sched/sch_frag.o
CC arch/x86/kernel/cpu/mtrr/generic.o
CC kernel/events/core.o
CC net/core/gen_estimator.o
AR security/keys/built-in.a
CC fs/proc/inode.o
CC sound/pci/hda/hda_jack.o
AR arch/x86/pci/built-in.a
CC drivers/acpi/acpica/dsinit.o
CC kernel/irq/migration.o
CC lib/crypto/mpi/mpi-mul.o
CC fs/iomap/fiemap.o
CC arch/x86/events/intel/uncore.o
CC fs/iomap/seek.o
CC fs/quota/quota.o
CC kernel/sched/build_policy.o
CC drivers/pci/host-bridge.o
CC fs/iomap/swapfile.o
CC lib/dim/dim.o
CC arch/x86/kernel/cpu/mtrr/cleanup.o
CC kernel/fork.o
AR sound/core/seq/built-in.a
CC sound/core/device.o
CC arch/x86/mm/maccess.o
CC arch/x86/events/intel/uncore_nhmex.o
CC crypto/lskcipher.o
CC lib/xz/xz_dec_lzma2.o
CC block/blk-merge.o
CC security/selinux/status.o
CC drivers/acpi/acpica/dsmethod.o
CC block/blk-timeout.o
CC arch/x86/mm/pgprot.o
CC arch/x86/mm/pgtable_32.o
CC kernel/irq/cpuhotplug.o
CC lib/dim/net_dim.o
CC drivers/pnp/driver.o
CC arch/x86/mm/iomap_32.o
CC arch/x86/mm/hugetlbpage.o
CC arch/x86/kernel/cpu/microcode/amd.o
CC net/core/net_namespace.o
CC sound/core/info.o
CC io_uring/sqpoll.o
CC lib/zstd/zstd_common_module.o
CC lib/crypto/mpi/mpih-cmp.o
CC fs/proc/root.o
CC drivers/pci/remove.o
CC arch/x86/kernel/cpu/cacheinfo.o
CC kernel/time/jiffies.o
CC lib/crypto/mpi/mpih-div.o
CC kernel/cgroup/legacy_freezer.o
CC lib/crypto/mpi/mpih-mul.o
CC io_uring/xattr.o
AS arch/x86/kernel/head_32.o
AR fs/iomap/built-in.a
CC mm/truncate.o
CC kernel/exec_domain.o
CC fs/proc/base.o
CC crypto/skcipher.o
CC drivers/acpi/acpica/dsmthdat.o
CC kernel/panic.o
CC arch/x86/kernel/cpu/mtrr/amd.o
CC arch/x86/kernel/apic/probe_32.o
CC lib/xz/xz_dec_bcj.o
CC sound/pci/hda/hda_auto_parser.o
CC kernel/power/user.o
CC kernel/power/poweroff.o
CC kernel/cpu.o
CC net/sched/sch_api.o
CC drivers/pnp/resource.o
CC security/selinux/ss/ebitmap.o
CC security/device_cgroup.o
CC arch/x86/kernel/cpu/mtrr/cyrix.o
CC kernel/time/timer_list.o
CC fs/proc/generic.o
CC fs/kernfs/mount.o
CC kernel/irq/pm.o
CC kernel/irq/msi.o
CC arch/x86/mm/dump_pagetables.o
CC fs/quota/kqid.o
CC drivers/acpi/acpica/dsobject.o
CC fs/kernfs/inode.o
AR arch/x86/kernel/apic/built-in.a
CC arch/x86/kernel/cpu/scattered.o
AR sound/pci/korg1212/built-in.a
CC io_uring/nop.o
AR arch/x86/kernel/cpu/microcode/built-in.a
CC drivers/pci/pci.o
CC sound/core/isadma.o
CC lib/dim/rdma_dim.o
CC kernel/cgroup/pids.o
AR lib/xz/built-in.a
CC kernel/cgroup/rdma.o
CC kernel/cgroup/cpuset.o
CC fs/kernfs/dir.o
CC kernel/events/ring_buffer.o
CC lib/crypto/blake2s.o
CC mm/vmscan.o
CC lib/crypto/mpi/mpi-pow.o
CC arch/x86/events/intel/uncore_snb.o
CC kernel/trace/trace_output.o
CC net/sched/sch_blackhole.o
CC drivers/acpi/acpica/dsopcode.o
CC arch/x86/kernel/cpu/mtrr/centaur.o
AR kernel/bpf/built-in.a
AR kernel/power/built-in.a
CC kernel/sched/build_utility.o
CC drivers/acpi/acpica/dspkginit.o
AR drivers/clk/actions/built-in.a
CC block/blk-lib.o
AR drivers/clk/analogbits/built-in.a
CC drivers/acpi/acpica/dsutils.o
AR drivers/clk/bcm/built-in.a
AR drivers/clk/imgtec/built-in.a
AR lib/dim/built-in.a
AR drivers/clk/imx/built-in.a
CC lib/zstd/common/debug.o
CC fs/kernfs/file.o
CC fs/quota/netlink.o
CC sound/core/vmaster.o
AR drivers/clk/ingenic/built-in.a
CC kernel/events/callchain.o
AR drivers/clk/mediatek/built-in.a
CC kernel/time/timeconv.o
CC drivers/acpi/dptf/int340x_thermal.o
AR drivers/clk/microchip/built-in.a
AR drivers/clk/mstar/built-in.a
AR drivers/clk/mvebu/built-in.a
AR drivers/clk/ralink/built-in.a
AR drivers/clk/renesas/built-in.a
AR drivers/clk/socfpga/built-in.a
AR drivers/clk/sophgo/built-in.a
AR drivers/clk/sprd/built-in.a
CC drivers/pnp/manager.o
AR drivers/clk/starfive/built-in.a
CC security/selinux/ss/hashtab.o
AR drivers/clk/sunxi-ng/built-in.a
AR drivers/clk/ti/built-in.a
CC crypto/seqiv.o
CC net/core/secure_seq.o
AR drivers/clk/versatile/built-in.a
AR drivers/clk/xilinx/built-in.a
CC lib/zstd/common/entropy_common.o
CC lib/zstd/common/error_private.o
AR drivers/clk/built-in.a
CC arch/x86/mm/highmem_32.o
CC sound/pci/hda/hda_sysfs.o
CC lib/crypto/blake2s-generic.o
CC kernel/trace/trace_seq.o
AR sound/pci/mixart/built-in.a
CC kernel/events/hw_breakpoint.o
AR sound/pci/nm256/built-in.a
CC net/core/flow_dissector.o
CC kernel/cgroup/misc.o
CC arch/x86/kernel/cpu/topology_common.o
CC arch/x86/events/msr.o
CC io_uring/fs.o
CC fs/sysfs/file.o
CC lib/zstd/common/fse_decompress.o
CC lib/crypto/mpi/mpiutil.o
CC net/sched/cls_api.o
CC drivers/acpi/acpica/dswexec.o
CC kernel/time/timecounter.o
CC fs/sysfs/dir.o
CC kernel/time/alarmtimer.o
CC kernel/time/posix-timers.o
AR kernel/rcu/built-in.a
CC kernel/time/posix-cpu-timers.o
AR drivers/acpi/dptf/built-in.a
CC lib/zstd/common/zstd_common.o
CC arch/x86/kernel/cpu/mtrr/legacy.o
CC lib/fonts/fonts.o
CC kernel/events/uprobes.o
CC security/selinux/ss/symtab.o
CC kernel/irq/affinity.o
AR sound/arm/built-in.a
CC arch/x86/events/intel/uncore_snbep.o
CC sound/core/ctljack.o
CC drivers/dma/dw/core.o
CC drivers/dma/hsu/hsu.o
CC block/blk-mq.o
CC drivers/pnp/support.o
AR drivers/dma/idxd/built-in.a
CC security/selinux/ss/sidtab.o
AR drivers/dma/amd/built-in.a
CC sound/pci/hda/hda_controller.o
CC block/blk-mq-tag.o
CC sound/pci/hda/hda_proc.o
CC crypto/echainiv.o
CC drivers/pnp/interface.o
AR fs/quota/built-in.a
CC drivers/dma/dw/dw.o
CC lib/crypto/sha1.o
AR arch/x86/kernel/cpu/mtrr/built-in.a
CC drivers/acpi/acpica/dswload.o
CC security/selinux/ss/avtab.o
AR arch/x86/mm/built-in.a
CC arch/x86/kernel/cpu/topology_ext.o
AR drivers/dma/mediatek/built-in.a
CC fs/sysfs/symlink.o
AR lib/zstd/built-in.a
CC drivers/acpi/x86/apple.o
CC drivers/acpi/tables.o
CC lib/fonts/font_8x16.o
CC block/blk-stat.o
CC drivers/acpi/osi.o
CC sound/core/jack.o
CC fs/proc/array.o
AR lib/crypto/mpi/built-in.a
CC kernel/trace/trace_stat.o
CC fs/kernfs/symlink.o
CC kernel/irq/matrix.o
CC kernel/time/posix-clock.o
CC drivers/dma/dw/idma32.o
AR sound/sh/built-in.a
AR sound/pci/oxygen/built-in.a
CC block/blk-mq-sysfs.o
CC drivers/pnp/quirks.o
CC sound/pci/hda/hda_hwdep.o
CC lib/crypto/sha256.o
CC drivers/acpi/acpica/dswload2.o
AR lib/fonts/built-in.a
CC arch/x86/kernel/cpu/topology_amd.o
CC arch/x86/kernel/cpu/common.o
CC kernel/trace/trace_printk.o
CC kernel/trace/pid_list.o
CC io_uring/splice.o
CC fs/sysfs/mount.o
CC kernel/exit.o
CC crypto/ahash.o
CC drivers/acpi/x86/cmos_rtc.o
CC sound/core/hwdep.o
CC block/blk-mq-cpumap.o
CC arch/x86/events/intel/uncore_discovery.o
AR drivers/dma/hsu/built-in.a
CC fs/proc/fd.o
CC mm/shrinker.o
AR sound/synth/emux/built-in.a
AR sound/synth/built-in.a
CC net/sched/act_api.o
CC arch/x86/kernel/head32.o
CC kernel/trace/trace_sched_switch.o
CC kernel/cgroup/debug.o
AR fs/kernfs/built-in.a
CC drivers/acpi/acpica/dswscope.o
CC kernel/softirq.o
CC kernel/trace/trace_nop.o
AR sound/usb/misc/built-in.a
AR sound/firewire/built-in.a
CC drivers/pnp/system.o
AR sound/usb/usx2y/built-in.a
AR sound/usb/caiaq/built-in.a
CC drivers/pci/pci-driver.o
CC drivers/acpi/x86/lpss.o
CC net/sched/sch_fifo.o
AR sound/usb/6fire/built-in.a
CC arch/x86/kernel/ebda.o
AR sound/usb/hiface/built-in.a
AR lib/crypto/built-in.a
AR sound/usb/bcd2000/built-in.a
CC kernel/time/itimer.o
AR sound/usb/built-in.a
CC lib/argv_split.o
CC drivers/dma/dw/acpi.o
CC drivers/acpi/x86/s2idle.o
CC lib/bug.o
CC kernel/time/clockevents.o
CC net/core/sysctl_net_core.o
CC fs/sysfs/group.o
CC sound/core/timer.o
CC mm/shmem.o
CC security/selinux/ss/policydb.o
CC fs/devpts/inode.o
CC drivers/acpi/acpica/dswstate.o
CC kernel/time/tick-common.o
CC drivers/pci/search.o
AR drivers/soc/apple/built-in.a
CC fs/proc/proc_tty.o
AR sound/pci/pcxhr/built-in.a
AR drivers/soc/aspeed/built-in.a
CC io_uring/sync.o
CC security/selinux/ss/services.o
CC sound/pci/hda/hda_intel.o
AR drivers/soc/bcm/built-in.a
AR drivers/soc/fsl/built-in.a
CC fs/proc/cmdline.o
AR drivers/soc/fujitsu/built-in.a
CC arch/x86/kernel/cpu/rdrand.o
AR drivers/soc/hisilicon/built-in.a
AR drivers/soc/imx/built-in.a
AR drivers/soc/ixp4xx/built-in.a
AR drivers/soc/loongson/built-in.a
AR drivers/pnp/built-in.a
AR drivers/soc/mediatek/built-in.a
CC arch/x86/kernel/cpu/match.o
AR drivers/soc/microchip/built-in.a
CC arch/x86/kernel/cpu/bugs.o
AR drivers/soc/nuvoton/built-in.a
AR kernel/irq/built-in.a
AR drivers/soc/pxa/built-in.a
AR drivers/soc/amlogic/built-in.a
AR drivers/soc/qcom/built-in.a
CC drivers/acpi/osl.o
CC net/core/dev.o
AR drivers/soc/renesas/built-in.a
CC drivers/acpi/utils.o
AR drivers/soc/rockchip/built-in.a
AR drivers/soc/sunxi/built-in.a
AR drivers/soc/ti/built-in.a
CC net/ethtool/ioctl.o
AR drivers/soc/versatile/built-in.a
AR drivers/soc/xilinx/built-in.a
AR drivers/soc/built-in.a
CC crypto/shash.o
CC net/netfilter/core.o
CC net/ipv4/netfilter/nf_defrag_ipv4.o
CC block/blk-mq-sched.o
CC net/ipv4/netfilter/nf_reject_ipv4.o
AR kernel/cgroup/built-in.a
CC drivers/acpi/x86/utils.o
CC fs/netfs/buffered_read.o
CC net/core/dev_addr_lists.o
AR drivers/dma/dw/built-in.a
AR drivers/dma/qcom/built-in.a
CC fs/ext4/balloc.o
AR drivers/dma/stm32/built-in.a
CC drivers/acpi/acpica/evevent.o
AR drivers/dma/ti/built-in.a
CC lib/buildid.o
AR drivers/dma/xilinx/built-in.a
CC drivers/dma/dmaengine.o
CC net/ipv4/route.o
AR fs/sysfs/built-in.a
CC mm/util.o
CC security/selinux/ss/conditional.o
CC drivers/acpi/reboot.o
CC block/ioctl.o
AR sound/sparc/built-in.a
CC net/ipv4/netfilter/ip_tables.o
CC drivers/acpi/acpica/evgpe.o
CC arch/x86/events/intel/cstate.o
CC arch/x86/kernel/platform-quirks.o
CC fs/proc/consoles.o
CC fs/netfs/buffered_write.o
AR fs/devpts/built-in.a
AR sound/spi/built-in.a
CC kernel/resource.o
CC net/netfilter/nf_log.o
CC arch/x86/kernel/cpu/aperfmperf.o
CC net/ipv4/netfilter/iptable_filter.o
CC block/genhd.o
CC drivers/acpi/x86/blacklist.o
CC net/core/dst.o
CC drivers/pci/rom.o
CC kernel/trace/blktrace.o
CC io_uring/msg_ring.o
CC fs/jbd2/transaction.o
CC net/ethtool/common.o
CC kernel/time/tick-broadcast.o
CC drivers/acpi/acpica/evgpeblk.o
CC drivers/dma/virt-dma.o
CC net/sched/cls_cgroup.o
CC lib/clz_tab.o
CC lib/cmdline.o
CC fs/proc/cpuinfo.o
CC crypto/akcipher.o
CC drivers/virtio/virtio.o
AR drivers/acpi/x86/built-in.a
AR sound/pci/riptide/built-in.a
CC arch/x86/kernel/cpu/cpuid-deps.o
CC net/ipv4/inetpeer.o
CC sound/core/hrtimer.o
CC lib/cpumask.o
CC drivers/tty/vt/vt_ioctl.o
CC drivers/tty/hvc/hvc_console.o
CC security/selinux/ss/mls.o
AR arch/x86/events/intel/built-in.a
AR arch/x86/events/built-in.a
CC drivers/tty/serial/8250/8250_core.o
CC drivers/tty/vt/vc_screen.o
CC drivers/pci/setup-res.o
CC net/sched/ematch.o
AR kernel/sched/built-in.a
CC drivers/acpi/nvs.o
CC io_uring/advise.o
AR sound/pci/hda/built-in.a
CC drivers/acpi/acpica/evgpeinit.o
AR sound/pci/rme9652/built-in.a
CC drivers/tty/vt/selection.o
AR sound/pci/trident/built-in.a
AR sound/pci/ymfpci/built-in.a
AR sound/pci/vx222/built-in.a
AR sound/pci/built-in.a
CC drivers/tty/serial/serial_core.o
CC arch/x86/kernel/cpu/umwait.o
AR drivers/iommu/amd/built-in.a
CC drivers/char/hw_random/core.o
AR drivers/iommu/intel/built-in.a
CC net/xfrm/xfrm_policy.o
AR drivers/iommu/arm/arm-smmu/built-in.a
AR drivers/iommu/arm/arm-smmu-v3/built-in.a
AR drivers/iommu/arm/built-in.a
CC security/selinux/ss/context.o
AR drivers/iommu/iommufd/built-in.a
CC drivers/iommu/iommu.o
CC drivers/virtio/virtio_ring.o
CC fs/netfs/direct_read.o
CC fs/proc/devices.o
CC kernel/time/tick-broadcast-hrtimer.o
CC fs/proc/interrupts.o
CC drivers/dma/acpi-dma.o
CC sound/core/pcm.o
AR sound/parisc/built-in.a
CC net/xfrm/xfrm_state.o
CC net/netfilter/nf_queue.o
CC net/ipv4/protocol.o
CC lib/ctype.o
CC lib/dec_and_lock.o
CC drivers/tty/vt/keyboard.o
CC drivers/acpi/acpica/evgpeutil.o
CC kernel/trace/trace_events.o
CC block/ioprio.o
CC fs/proc/loadavg.o
CC arch/x86/kernel/process_32.o
CC crypto/sig.o
CC lib/decompress.o
CC net/ipv4/netfilter/iptable_mangle.o
CC lib/decompress_bunzip2.o
CC kernel/time/tick-oneshot.o
CC lib/decompress_inflate.o
CC mm/mmzone.o
CC drivers/tty/serial/8250/8250_platform.o
CC drivers/iommu/iommu-traces.o
AR drivers/tty/hvc/built-in.a
CC security/selinux/netlabel.o
MKCAP arch/x86/kernel/cpu/capflags.c
CC drivers/pci/irq.o
CC arch/x86/kernel/cpu/powerflags.o
CC arch/x86/kernel/cpu/topology.o
CC io_uring/epoll.o
CC drivers/iommu/iommu-sysfs.o
CC drivers/acpi/acpica/evglock.o
CC fs/jbd2/commit.o
AR sound/pcmcia/vx/built-in.a
CC crypto/kpp.o
AR sound/pcmcia/pdaudiocf/built-in.a
CC drivers/char/hw_random/intel-rng.o
AR sound/pcmcia/built-in.a
CC drivers/char/hw_random/amd-rng.o
AR sound/mips/built-in.a
CC net/xfrm/xfrm_hash.o
CC net/xfrm/xfrm_input.o
CC drivers/tty/vt/vt.o
CC net/ipv4/ip_input.o
AR drivers/gpu/host1x/built-in.a
AR kernel/events/built-in.a
CC arch/x86/kernel/cpu/proc.o
AR net/sched/built-in.a
AR drivers/dma/built-in.a
CC kernel/trace/trace_export.o
AR drivers/tty/ipwireless/built-in.a
CC fs/ext4/bitmap.o
CC drivers/tty/tty_io.o
CC drivers/acpi/wakeup.o
CC fs/proc/meminfo.o
CC net/ethtool/netlink.o
CC net/core/netevent.o
CC kernel/time/tick-sched.o
AR drivers/gpu/drm/tests/built-in.a
AR drivers/gpu/drm/arm/built-in.a
AR drivers/gpu/drm/clients/built-in.a
CC drivers/gpu/drm/display/drm_display_helper_mod.o
CC sound/core/pcm_native.o
CC drivers/virtio/virtio_anchor.o
CC fs/netfs/direct_write.o
CC drivers/gpu/drm/ttm/ttm_tt.o
CC drivers/acpi/acpica/evhandler.o
CC mm/vmstat.o
CC lib/decompress_unlz4.o
CC block/badblocks.o
CC drivers/gpu/drm/i915/i915_config.o
CC drivers/gpu/drm/ttm/ttm_bo.o
CC io_uring/statx.o
CC fs/ext4/block_validity.o
CC drivers/pci/vpd.o
CC drivers/pci/setup-bus.o
CC drivers/tty/serial/8250/8250_pnp.o
CC block/blk-rq-qos.o
CC drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
CC drivers/char/agp/backend.o
CC net/netfilter/nf_sockopt.o
CC net/netfilter/utils.o
CC drivers/char/hw_random/geode-rng.o
CC drivers/gpu/drm/i915/i915_driver.o
CC drivers/char/agp/generic.o
CC net/ipv4/ip_fragment.o
CC drivers/tty/n_tty.o
CC drivers/acpi/acpica/evmisc.o
CC fs/ext4/dir.o
CC net/ipv4/netfilter/ipt_REJECT.o
ASN.1 crypto/rsapubkey.asn1.[ch]
CC drivers/tty/serial/serial_base_bus.o
ASN.1 crypto/rsaprivkey.asn1.[ch]
CC crypto/rsa.o
AR sound/soc/built-in.a
CC fs/proc/stat.o
CC drivers/char/mem.o
AR sound/atmel/built-in.a
CC drivers/gpu/drm/display/drm_dp_helper.o
CC drivers/tty/tty_ioctl.o
CC lib/decompress_unlzma.o
CC drivers/virtio/virtio_pci_modern_dev.o
CC drivers/acpi/sleep.o
CC drivers/iommu/dma-iommu.o
CC drivers/acpi/acpica/evregion.o
CC sound/core/pcm_lib.o
AR security/selinux/built-in.a
CC fs/netfs/iterator.o
AR security/built-in.a
CC fs/jbd2/recovery.o
CC mm/backing-dev.o
CC kernel/time/timer_migration.o
CC drivers/char/hw_random/via-rng.o
CC drivers/gpu/drm/display/drm_dp_mst_topology.o
CC io_uring/timeout.o
CC drivers/tty/serial/8250/8250_rsa.o
CC fs/jbd2/checkpoint.o
CC drivers/gpu/drm/ttm/ttm_bo_util.o
CC fs/proc/uptime.o
CC drivers/acpi/device_sysfs.o
CC block/disk-events.o
CC net/ethtool/bitset.o
CC drivers/acpi/device_pm.o
CC sound/hda/hda_bus_type.o
AR drivers/gpu/drm/renesas/rcar-du/built-in.a
AR drivers/gpu/drm/renesas/rz-du/built-in.a
CC arch/x86/kernel/signal.o
AR drivers/gpu/drm/renesas/built-in.a
CC crypto/rsa_helper.o
CC arch/x86/kernel/cpu/feat_ctl.o
CC fs/proc/util.o
CC [M] net/ipv4/netfilter/iptable_nat.o
CC drivers/virtio/virtio_pci_legacy_dev.o
CC crypto/rsa-pkcs1pad.o
CC drivers/acpi/acpica/evrgnini.o
AR drivers/char/hw_random/built-in.a
CC lib/decompress_unlzo.o
CC drivers/gpu/drm/ttm/ttm_bo_vm.o
CC drivers/acpi/acpica/evsci.o
CC drivers/char/agp/isoch.o
CC drivers/gpu/drm/ttm/ttm_module.o
AR drivers/gpu/vga/built-in.a
CC fs/ext4/ext4_jbd2.o
CC drivers/gpu/drm/ttm/ttm_execbuf_util.o
CC lib/decompress_unxz.o
CC drivers/gpu/drm/ttm/ttm_range_manager.o
CC io_uring/fdinfo.o
CC kernel/trace/trace_event_perf.o
CC net/netfilter/nfnetlink.o
CC crypto/acompress.o
CC drivers/tty/serial/8250/8250_port.o
CC crypto/scompress.o
CC drivers/gpu/drm/i915/i915_drm_client.o
CC drivers/acpi/acpica/evxface.o
CC fs/proc/version.o
CC fs/ramfs/inode.o
CC sound/hda/hdac_bus.o
CC net/netfilter/nfnetlink_log.o
CC block/blk-ia-ranges.o
CC sound/core/pcm_misc.o
CC drivers/gpu/drm/ttm/ttm_resource.o
CC drivers/pci/vc.o
CC drivers/virtio/virtio_pci_modern.o
CC drivers/pci/mmap.o
CC fs/netfs/locking.o
CC net/core/neighbour.o
AR drivers/gpu/drm/omapdrm/built-in.a
CC lib/decompress_unzstd.o
CC net/unix/af_unix.o
CC net/packet/af_packet.o
CC net/ipv6/netfilter/ip6_tables.o
CC net/ipv6/netfilter/ip6table_filter.o
CC net/ipv6/af_inet6.o
CC drivers/tty/serial/8250/8250_dma.o
CC fs/jbd2/revoke.o
AR drivers/gpu/drm/tilcdc/built-in.a
CC net/core/rtnetlink.o
COPY drivers/tty/vt/defkeymap.c
CC net/xfrm/xfrm_output.o
CC drivers/tty/vt/consolemap.o
CC mm/mm_init.o
CC net/ipv6/anycast.o
CC kernel/sysctl.o
CC net/ipv4/ip_forward.o
CC drivers/char/agp/amd64-agp.o
CC net/ipv4/ip_options.o
CC net/ipv4/ip_output.o
CC drivers/acpi/acpica/evxfevnt.o
CC net/ethtool/strset.o
CC drivers/iommu/iova.o
CC fs/proc/softirqs.o
AR net/ipv4/netfilter/built-in.a
CC net/unix/garbage.o
AR net/dsa/built-in.a
CC fs/hugetlbfs/inode.o
CC kernel/trace/trace_events_filter.o
CC io_uring/cancel.o
CC io_uring/waitid.o
CC lib/dump_stack.o
CC block/early-lookup.o
CC net/ethtool/linkinfo.o
CC sound/core/pcm_memory.o
CC fs/ramfs/file-mmu.o
CC sound/hda/hdac_device.o
CC crypto/algboss.o
CC sound/core/memalloc.o
CC kernel/time/vsyscall.o
CC drivers/pci/devres.o
CC drivers/acpi/acpica/evxfgpe.o
CC drivers/virtio/virtio_pci_common.o
CC drivers/tty/serial/serial_ctrl.o
CC drivers/gpu/drm/ttm/ttm_pool.o
CC fs/netfs/main.o
AR sound/x86/built-in.a
CC fs/jbd2/journal.o
CC fs/proc/namespaces.o
CC drivers/tty/tty_ldisc.o
CC drivers/gpu/drm/i915/i915_getparam.o
CC drivers/char/agp/intel-agp.o
CC kernel/time/timekeeping_debug.o
HOSTCC drivers/tty/vt/conmakehash
CC drivers/acpi/acpica/evxfregn.o
CC lib/earlycpio.o
CC drivers/char/agp/intel-gtt.o
CC net/netfilter/nf_conntrack_core.o
AR drivers/iommu/built-in.a
CC arch/x86/kernel/cpu/intel.o
CC lib/extable.o
CC drivers/tty/vt/defkeymap.o
AR fs/ramfs/built-in.a
CC drivers/acpi/acpica/exconcat.o
CC block/bounce.o
CC drivers/acpi/acpica/exconfig.o
CC block/bsg.o
CC fs/ext4/extents.o
CC kernel/time/namespace.o
CC mm/percpu.o
CONMK drivers/tty/vt/consolemap_deftbl.c
CC drivers/tty/vt/consolemap_deftbl.o
CC io_uring/register.o
AR drivers/tty/vt/built-in.a
CC net/ethtool/linkmodes.o
CC fs/fat/cache.o
CC fs/proc/self.o
CC net/core/utils.o
CC drivers/pci/proc.o
CC sound/core/pcm_timer.o
CC crypto/testmgr.o
CC fs/fat/dir.o
CC drivers/gpu/drm/virtio/virtgpu_drv.o
CC drivers/gpu/drm/ttm/ttm_device.o
CC drivers/acpi/proc.o
CC drivers/tty/serial/8250/8250_dwlib.o
CC sound/hda/hdac_sysfs.o
CC net/xfrm/xfrm_sysctl.o
CC drivers/virtio/virtio_pci_legacy.o
CC drivers/virtio/virtio_pci_admin_legacy_io.o
CC drivers/acpi/bus.o
CC mm/slab_common.o
CC lib/flex_proportions.o
CC fs/proc/thread_self.o
AR fs/hugetlbfs/built-in.a
CC mm/compaction.o
CC net/ipv6/netfilter/ip6table_mangle.o
CC drivers/acpi/acpica/exconvrt.o
CC sound/hda/hdac_regmap.o
CC drivers/connector/cn_queue.o
CC lib/idr.o
CC net/sunrpc/auth_gss/auth_gss.o
CC drivers/gpu/drm/i915/i915_ioctl.o
AR net/wireless/tests/built-in.a
CC net/wireless/core.o
CC kernel/trace/trace_events_trigger.o
CC drivers/gpu/drm/display/drm_dsc_helper.o
CC net/wireless/sysfs.o
CC net/unix/sysctl_net_unix.o
CC drivers/tty/serial/serial_port.o
CC crypto/cmac.o
CC sound/core/seq_device.o
AR kernel/time/built-in.a
CC drivers/acpi/acpica/excreate.o
CC net/netfilter/nf_conntrack_standalone.o
AR drivers/char/agp/built-in.a
CC drivers/char/random.o
CC drivers/gpu/drm/virtio/virtgpu_kms.o
CC drivers/gpu/drm/ttm/ttm_sys_manager.o
CC fs/proc/proc_sysctl.o
CC net/sunrpc/clnt.o
CC net/ipv6/ip6_output.o
AR net/mac80211/tests/built-in.a
CC net/mac80211/main.o
CC drivers/tty/serial/8250/8250_pcilib.o
CC drivers/virtio/virtio_input.o
CC arch/x86/kernel/cpu/tsx.o
CC kernel/trace/trace_eprobe.o
CC lib/irq_regs.o
CC drivers/pci/pci-sysfs.o
CC net/ipv4/ip_sockglue.o
CC drivers/pci/slot.o
CC net/ethtool/rss.o
CC drivers/pci/pci-acpi.o
CC block/blk-cgroup.o
CC fs/netfs/misc.o
CC lib/is_single_threaded.o
CC sound/hda/hdac_controller.o
CC crypto/hmac.o
CC drivers/acpi/acpica/exdebug.o
CC net/xfrm/xfrm_replay.o
CC drivers/pci/iomap.o
CC drivers/pci/quirks.o
CC drivers/gpu/drm/ttm/ttm_agp_backend.o
AR sound/core/built-in.a
CC net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
CC drivers/connector/connector.o
CC arch/x86/kernel/cpu/intel_epb.o
CC net/ipv6/netfilter/nf_conntrack_reasm.o
CC drivers/gpu/drm/i915/i915_irq.o
CC drivers/gpu/drm/display/drm_hdcp_helper.o
CC drivers/tty/tty_buffer.o
CC drivers/connector/cn_proc.o
CC fs/fat/fatent.o
CC lib/klist.o
AR net/unix/built-in.a
CC drivers/virtio/virtio_dma_buf.o
CC io_uring/truncate.o
CC drivers/acpi/acpica/exdump.o
CC drivers/tty/serial/8250/8250_early.o
CC drivers/gpu/drm/virtio/virtgpu_gem.o
AR net/packet/built-in.a
CC net/ipv6/ip6_input.o
CC crypto/crypto_null.o
CC arch/x86/kernel/signal_32.o
CC drivers/acpi/glue.o
CC arch/x86/kernel/cpu/amd.o
CC fs/proc/proc_net.o
AR sound/xen/built-in.a
CC lib/kobject.o
CC lib/kobject_uevent.o
CC lib/logic_pio.o
CC drivers/acpi/acpica/exfield.o
CC net/core/link_watch.o
AR drivers/gpu/drm/ttm/built-in.a
CC fs/netfs/objects.o
CC net/netfilter/nf_conntrack_expect.o
AR fs/jbd2/built-in.a
CC drivers/tty/tty_port.o
CC sound/hda/hdac_stream.o
CC net/xfrm/xfrm_device.o
AR drivers/virtio/built-in.a
CC net/ethtool/linkstate.o
AR sound/virtio/built-in.a
CC drivers/tty/serial/earlycon.o
CC net/netfilter/nf_conntrack_helper.o
CC kernel/capability.o
CC drivers/char/misc.o
CC drivers/gpu/drm/display/drm_hdmi_helper.o
CC drivers/tty/serial/8250/8250_exar.o
CC kernel/trace/trace_kprobe.o
CC drivers/char/virtio_console.o
CC net/netfilter/nf_conntrack_proto.o
CC drivers/acpi/acpica/exfldio.o
CC crypto/md5.o
CC net/xfrm/xfrm_nat_keepalive.o
CC block/blk-ioprio.o
CC net/ipv4/inet_hashtables.o
CC drivers/gpu/drm/virtio/virtgpu_vram.o
CC io_uring/memmap.o
CC net/ipv6/addrconf.o
CC fs/ext4/extents_status.o
CC net/netlabel/netlabel_user.o
CC net/sunrpc/auth_gss/gss_generic_token.o
CC net/netfilter/nf_conntrack_proto_generic.o
AR drivers/connector/built-in.a
CC drivers/gpu/drm/i915/i915_mitigations.o
CC net/wireless/radiotap.o
CC net/ipv6/addrlabel.o
CC fs/fat/file.o
CC fs/proc/kcore.o
CC fs/ext4/file.o
CC drivers/pci/pci-label.o
CC net/ipv6/netfilter/nf_reject_ipv6.o
CC mm/show_mem.o
CC arch/x86/kernel/cpu/hygon.o
CC drivers/acpi/acpica/exmisc.o
CC crypto/sha256_generic.o
CC drivers/tty/serial/8250/8250_lpss.o
CC net/mac80211/status.o
CC drivers/gpu/drm/display/drm_scdc_helper.o
CC drivers/base/power/sysfs.o
CC drivers/base/firmware_loader/builtin/main.o
CC sound/hda/array.o
CC net/core/filter.o
CC lib/maple_tree.o
CC drivers/base/firmware_loader/main.o
CC block/blk-iolatency.o
CC fs/netfs/read_collect.o
CC fs/netfs/read_pgpriv2.o
CC net/ethtool/debug.o
CC drivers/gpu/drm/virtio/virtgpu_display.o
CC io_uring/io-wq.o
CC drivers/acpi/acpica/exmutex.o
CC sound/hda/hdmi_chmap.o
AR drivers/base/firmware_loader/builtin/built-in.a
CC net/sunrpc/auth_gss/gss_mech_switch.o
CC arch/x86/kernel/cpu/centaur.o
CC drivers/acpi/scan.o
CC drivers/block/loop.o
AR drivers/misc/eeprom/built-in.a
CC drivers/tty/tty_mutex.o
AR drivers/misc/cb710/built-in.a
AR drivers/misc/ti-st/built-in.a
AR drivers/misc/lis3lv02d/built-in.a
AR drivers/misc/cardreader/built-in.a
AR drivers/mfd/built-in.a
AR drivers/misc/keba/built-in.a
CC lib/memcat_p.o
AR drivers/misc/built-in.a
CC crypto/sha512_generic.o
CC arch/x86/kernel/cpu/transmeta.o
CC net/mac80211/driver-ops.o
CC crypto/sha3_generic.o
CC net/netlabel/netlabel_kapi.o
CC drivers/base/power/generic_ops.o
CC net/xfrm/xfrm_algo.o
CC drivers/gpu/drm/i915/i915_module.o
CC drivers/pci/vgaarb.o
CC fs/proc/vmcore.o
CC io_uring/futex.o
CC drivers/base/regmap/regmap.o
CC drivers/char/hpet.o
CC drivers/tty/serial/8250/8250_mid.o
CC drivers/acpi/acpica/exnames.o
CC sound/hda/trace.o
CC fs/fat/inode.o
CC net/netfilter/nf_conntrack_proto_tcp.o
CC mm/interval_tree.o
AR drivers/gpu/drm/display/built-in.a
AR drivers/base/test/built-in.a
AR drivers/gpu/drm/imx/built-in.a
CC net/ethtool/wol.o
CC arch/x86/kernel/traps.o
CC lib/nmi_backtrace.o
CC net/core/sock_diag.o
CC crypto/ecb.o
CC drivers/base/power/common.o
CC net/wireless/util.o
CC drivers/gpu/drm/virtio/virtgpu_vq.o
CC net/xfrm/xfrm_user.o
CC net/netlabel/netlabel_domainhash.o
CC drivers/acpi/acpica/exoparg1.o
CC net/ipv6/netfilter/ip6t_ipv6header.o
CC arch/x86/kernel/cpu/zhaoxin.o
AR drivers/base/firmware_loader/built-in.a
CC arch/x86/kernel/cpu/vortex.o
CC net/ipv6/route.o
CC kernel/trace/error_report-traces.o
CC arch/x86/kernel/idt.o
CC net/sunrpc/xprt.o
CC lib/objpool.o
CC fs/isofs/namei.o
CC drivers/acpi/mipi-disco-img.o
CC net/ipv4/inet_timewait_sock.o
CC arch/x86/kernel/cpu/perfctr-watchdog.o
CC crypto/cbc.o
CC fs/netfs/read_retry.o
CC drivers/tty/serial/8250/8250_pci.o
CC arch/x86/kernel/cpu/vmware.o
CC block/blk-iocost.o
CC drivers/base/power/qos.o
CC block/mq-deadline.o
CC lib/plist.o
CC mm/list_lru.o
CC drivers/acpi/acpica/exoparg2.o
CC drivers/char/nvram.o
CC net/ipv6/netfilter/ip6t_REJECT.o
CC mm/workingset.o
CC fs/proc/kmsg.o
CC drivers/gpu/drm/i915/i915_params.o
CC io_uring/napi.o
CC mm/debug.o
CC sound/hda/hdac_component.o
CC kernel/trace/power-traces.o
CC net/ethtool/features.o
AR drivers/pci/built-in.a
CC net/sunrpc/auth_gss/svcauth_gss.o
CC fs/nfs/client.o
CC fs/exportfs/expfs.o
CC fs/ext4/fsmap.o
CC drivers/block/virtio_blk.o
CC crypto/ctr.o
CC fs/netfs/write_collect.o
CC net/mac80211/sta_info.o
CC fs/isofs/inode.o
CC net/ipv6/ip6_fib.o
CC net/netfilter/nf_conntrack_proto_udp.o
CC drivers/acpi/acpica/exoparg3.o
AR drivers/gpu/drm/i2c/built-in.a
CC net/ipv4/inet_connection_sock.o
AR drivers/gpu/drm/panel/built-in.a
CC block/kyber-iosched.o
CC net/ipv4/tcp.o
CC arch/x86/kernel/cpu/hypervisor.o
CC fs/fat/misc.o
CC fs/proc/page.o
CC drivers/gpu/drm/virtio/virtgpu_fence.o
CC block/blk-mq-pci.o
CC net/netlabel/netlabel_addrlist.o
CC crypto/gcm.o
CC arch/x86/kernel/cpu/mshyperv.o
CC drivers/base/regmap/regcache.o
CC fs/isofs/dir.o
AR drivers/char/built-in.a
CC net/core/dev_ioctl.o
CC drivers/acpi/acpica/exoparg6.o
AR fs/exportfs/built-in.a
CC sound/hda/hdac_i915.o
CC fs/nfs/dir.o
CC drivers/gpu/drm/i915/i915_pci.o
CC lib/radix-tree.o
CC mm/gup.o
CC drivers/base/component.o
CC sound/sound_core.o
CC net/ethtool/privflags.o
CC drivers/base/power/runtime.o
CC net/wireless/reg.o
CC drivers/acpi/acpica/exprep.o
AR net/ipv6/netfilter/built-in.a
CC arch/x86/kernel/irq.o
CC drivers/tty/serial/8250/8250_pericom.o
CC net/sunrpc/auth_gss/gss_rpc_upcall.o
CC fs/fat/nfs.o
AR fs/proc/built-in.a
CC arch/x86/kernel/cpu/debugfs.o
CC drivers/acpi/resource.o
AR drivers/block/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_object.o
CC crypto/ccm.o
CC kernel/trace/rpm-traces.o
CC kernel/trace/trace_dynevent.o
CC sound/hda/intel-dsp-config.o
CC fs/isofs/util.o
AR io_uring/built-in.a
CC net/mac80211/wep.o
CC net/netfilter/nf_conntrack_proto_icmp.o
CC net/core/tso.o
CC fs/netfs/write_issue.o
CC drivers/acpi/acpica/exregion.o
CC drivers/gpu/drm/virtio/virtgpu_debugfs.o
CC drivers/base/regmap/regcache-rbtree.o
CC fs/ext4/fsync.o
CC drivers/base/power/wakeirq.o
CC lib/ratelimit.o
CC fs/lockd/clntlock.o
CC drivers/gpu/drm/i915/i915_scatterlist.o
CC drivers/tty/tty_ldsem.o
CC block/blk-mq-virtio.o
AR net/xfrm/built-in.a
CC net/netlabel/netlabel_mgmt.o
CC fs/isofs/rock.o
CC net/core/sock_reuseport.o
AR drivers/tty/serial/8250/built-in.a
AR drivers/tty/serial/built-in.a
CC fs/fat/namei_vfat.o
CC arch/x86/kernel/cpu/capflags.o
CC sound/last.o
AR arch/x86/kernel/cpu/built-in.a
CC lib/rbtree.o
CC mm/mmap_lock.o
CC drivers/acpi/acpica/exresnte.o
CC net/ethtool/rings.o
CC fs/nfs/file.o
CC net/rfkill/core.o
AR drivers/gpu/drm/bridge/analogix/built-in.a
CC fs/ext4/hash.o
AR drivers/gpu/drm/bridge/cadence/built-in.a
CC net/netfilter/nf_conntrack_extend.o
AR drivers/gpu/drm/bridge/imx/built-in.a
CC net/netfilter/nf_conntrack_acct.o
AR drivers/gpu/drm/bridge/synopsys/built-in.a
AR drivers/gpu/drm/bridge/built-in.a
CC fs/nfs/getroot.o
CC mm/highmem.o
CC sound/hda/intel-nhlt.o
CC drivers/base/power/main.o
CC lib/seq_buf.o
CC block/blk-mq-debugfs.o
CC net/sunrpc/auth_gss/gss_rpc_xdr.o
CC fs/fat/namei_msdos.o
CC crypto/aes_generic.o
CC drivers/gpu/drm/virtio/virtgpu_plane.o
CC drivers/acpi/acpi_processor.o
CC fs/isofs/export.o
CC drivers/acpi/acpica/exresolv.o
CC kernel/trace/trace_probe.o
CC fs/nls/nls_base.o
CC drivers/base/regmap/regcache-flat.o
CC net/sunrpc/socklib.o
CC fs/nls/nls_cp437.o
CC drivers/tty/tty_baudrate.o
CC arch/x86/kernel/irq_32.o
CC drivers/gpu/drm/i915/i915_switcheroo.o
CC net/rfkill/input.o
CC net/netfilter/nf_conntrack_seqadj.o
CC fs/lockd/clntproc.o
CC sound/hda/intel-sdw-acpi.o
CC drivers/acpi/acpica/exresop.o
AR fs/netfs/built-in.a
CC crypto/crc32c_generic.o
CC drivers/base/power/wakeup.o
CC drivers/base/core.o
CC drivers/base/power/wakeup_stats.o
CC drivers/acpi/acpica/exserial.o
CC fs/nls/nls_ascii.o
CC fs/lockd/clntxdr.o
CC drivers/base/regmap/regcache-maple.o
CC crypto/authenc.o
CC net/sunrpc/auth_gss/trace.o
CC net/netfilter/nf_conntrack_proto_icmpv6.o
CC fs/isofs/joliet.o
CC net/netlabel/netlabel_unlabeled.o
CC net/ipv4/tcp_input.o
CC net/ethtool/channels.o
CC drivers/base/bus.o
CC drivers/gpu/drm/virtio/virtgpu_ioctl.o
CC fs/nfs/inode.o
CC drivers/tty/tty_jobctrl.o
CC net/ipv6/ipv6_sockglue.o
CC mm/memory.o
CC arch/x86/kernel/dumpstack_32.o
CC block/blk-pm.o
CC kernel/trace/trace_uprobe.o
CC net/9p/mod.o
CC drivers/acpi/acpica/exstore.o
CC drivers/base/dd.o
AR fs/fat/built-in.a
CC net/netlabel/netlabel_cipso_v4.o
CC net/netlabel/netlabel_calipso.o
CC net/core/fib_notifier.o
CC fs/nls/nls_iso8859-1.o
AR sound/hda/built-in.a
CC lib/siphash.o
AR sound/built-in.a
AR net/rfkill/built-in.a
CC drivers/acpi/processor_core.o
CC fs/nfs/super.o
CC drivers/gpu/drm/virtio/virtgpu_prime.o
CC net/ipv4/tcp_output.o
CC fs/ext4/ialloc.o
CC net/9p/client.o
CC drivers/gpu/drm/i915/i915_sysfs.o
CC net/dns_resolver/dns_key.o
CC fs/nfs/io.o
CC drivers/acpi/acpica/exstoren.o
CC fs/nls/nls_utf8.o
CC drivers/base/regmap/regmap-debugfs.o
CC fs/isofs/compress.o
CC fs/lockd/host.o
CC crypto/authencesn.o
CC arch/x86/kernel/time.o
CC mm/mincore.o
CC block/holder.o
CC drivers/acpi/processor_pdc.o
CC drivers/base/power/trace.o
AR fs/unicode/built-in.a
CC net/wireless/scan.o
CC drivers/tty/n_null.o
CC lib/string.o
CC lib/timerqueue.o
CC drivers/acpi/acpica/exstorob.o
AR fs/nls/built-in.a
CC drivers/gpu/drm/i915/i915_utils.o
CC fs/ext4/indirect.o
CC net/ethtool/coalesce.o
CC net/mac80211/aead_api.o
CC net/sunrpc/xprtsock.o
CC drivers/gpu/drm/virtio/virtgpu_trace_points.o
CC crypto/lzo.o
CC net/core/xdp.o
CC drivers/base/syscore.o
CC net/dns_resolver/dns_query.o
CC net/ipv6/ndisc.o
CC fs/ext4/inline.o
CC drivers/acpi/ec.o
CC lib/union_find.o
CC net/9p/error.o
CC lib/vsprintf.o
CC drivers/gpu/drm/virtio/virtgpu_submit.o
CC arch/x86/kernel/ioport.o
CC net/netfilter/nf_conntrack_netlink.o
CC drivers/tty/pty.o
CC kernel/ptrace.o
CC drivers/acpi/acpica/exsystem.o
CC drivers/gpu/drm/i915/intel_clock_gating.o
AR drivers/base/regmap/built-in.a
CC fs/autofs/init.o
CC arch/x86/kernel/dumpstack.o
AR net/netlabel/built-in.a
CC net/sunrpc/auth_gss/gss_krb5_mech.o
AR fs/isofs/built-in.a
AR block/built-in.a
CC net/wireless/nl80211.o
CC net/ethtool/pause.o
CC arch/x86/kernel/nmi.o
AR drivers/gpu/drm/hisilicon/built-in.a
CC fs/ext4/inode.o
CC net/ethtool/eee.o
AR drivers/gpu/drm/mxsfb/built-in.a
AR drivers/base/power/built-in.a
CC fs/nfs/direct.o
CC net/mac80211/wpa.o
CC drivers/acpi/acpica/extrace.o
CC fs/9p/vfs_super.o
CC net/handshake/alert.o
CC crypto/lzo-rle.o
CC fs/9p/vfs_inode.o
CC fs/9p/vfs_inode_dotl.o
AR net/dns_resolver/built-in.a
AR fs/hostfs/built-in.a
CC net/handshake/genl.o
CC net/handshake/netlink.o
CC fs/lockd/svc.o
CC kernel/trace/rethook.o
CC lib/win_minmax.o
CC lib/xarray.o
CC net/handshake/request.o
AR drivers/gpu/drm/virtio/built-in.a
CC fs/lockd/svclock.o
CC fs/autofs/inode.o
CC drivers/acpi/acpica/exutils.o
CC drivers/tty/tty_audit.o
CC mm/mlock.o
CC net/wireless/mlme.o
CC net/9p/protocol.o
CC crypto/rng.o
AR drivers/nfc/built-in.a
CC fs/nfs/pagelist.o
CC net/ethtool/tsinfo.o
CC drivers/base/driver.o
CC fs/debugfs/inode.o
CC drivers/base/class.o
CC fs/debugfs/file.o
CC net/ethtool/cabletest.o
CC mm/mmap.o
CC arch/x86/kernel/ldt.o
CC net/netfilter/nf_conntrack_ftp.o
CC drivers/acpi/acpica/hwacpi.o
CC fs/tracefs/inode.o
CC net/sunrpc/auth_gss/gss_krb5_seal.o
CC drivers/gpu/drm/i915/intel_device_info.o
CC net/core/flow_offload.o
CC drivers/base/platform.o
CC fs/ext4/ioctl.o
AR kernel/trace/built-in.a
CC kernel/user.o
CC net/ipv6/udp.o
AR drivers/gpu/drm/tiny/built-in.a
CC drivers/tty/sysrq.o
CC net/ipv4/tcp_timer.o
CC arch/x86/kernel/setup.o
CC drivers/acpi/acpica/hwesleep.o
CC fs/autofs/root.o
CC fs/9p/vfs_addr.o
CC net/mac80211/scan.o
CC net/9p/trans_common.o
CC crypto/drbg.o
CC kernel/signal.o
CC kernel/sys.o
CC fs/lockd/svcshare.o
CC net/devres.o
CC lib/lockref.o
CC drivers/gpu/drm/i915/intel_memory_region.o
CC mm/mmu_gather.o
CC drivers/acpi/acpica/hwgpe.o
CC net/core/gro.o
CC net/9p/trans_fd.o
CC drivers/base/cpu.o
CC fs/9p/vfs_file.o
CC net/netfilter/nf_conntrack_irc.o
CC fs/9p/vfs_dir.o
CC lib/bcd.o
CC fs/lockd/svcproc.o
CC net/socket.o
CC net/handshake/tlshd.o
CC net/9p/trans_virtio.o
CC net/wireless/ibss.o
CC fs/tracefs/event_inode.o
CC net/ethtool/tunnels.o
AR fs/debugfs/built-in.a
CC net/core/netdev-genl.o
AR drivers/gpu/drm/xlnx/built-in.a
CC net/sunrpc/auth_gss/gss_krb5_unseal.o
CC net/sunrpc/auth_gss/gss_krb5_wrap.o
CC fs/ext4/mballoc.o
CC fs/nfs/read.o
CC drivers/acpi/dock.o
CC arch/x86/kernel/x86_init.o
CC drivers/acpi/acpica/hwregs.o
AR drivers/tty/built-in.a
CC crypto/jitterentropy.o
CC fs/autofs/symlink.o
CC net/mac80211/offchannel.o
CC net/handshake/trace.o
CC net/netfilter/nf_conntrack_sip.o
CC fs/lockd/svcsubs.o
CC lib/sort.o
CC kernel/umh.o
CC crypto/jitterentropy-kcapi.o
CC drivers/acpi/pci_root.o
CC lib/parser.o
CC net/sunrpc/sched.o
CC drivers/base/firmware.o
CC [M] fs/efivarfs/inode.o
CC fs/9p/vfs_dentry.o
CC net/ipv6/udplite.o
CC drivers/acpi/acpica/hwsleep.o
CC mm/mprotect.o
CC drivers/gpu/drm/i915/intel_pcode.o
CC crypto/ghash-generic.o
CC net/sunrpc/auth_gss/gss_krb5_crypto.o
CC fs/ext4/migrate.o
CC arch/x86/kernel/i8259.o
CC drivers/base/init.o
CC net/core/netdev-genl-gen.o
AR fs/tracefs/built-in.a
CC fs/autofs/waitq.o
CC mm/mremap.o
CC lib/debug_locks.o
CC net/ipv4/tcp_ipv4.o
CC [M] fs/efivarfs/file.o
CC fs/9p/v9fs.o
CC mm/msync.o
CC fs/ext4/mmp.o
CC drivers/acpi/acpica/hwvalid.o
CC net/sunrpc/auth_gss/gss_krb5_keys.o
CC net/sysctl_net.o
CC [M] fs/efivarfs/super.o
CC lib/random32.o
CC net/mac80211/ht.o
CC net/ethtool/fec.o
CC fs/9p/fid.o
CC crypto/hash_info.o
CC mm/page_vma_mapped.o
CC crypto/rsapubkey.asn1.o
CC crypto/rsaprivkey.asn1.o
AR net/9p/built-in.a
CC net/wireless/sme.o
AR crypto/built-in.a
CC [M] fs/efivarfs/vars.o
CC drivers/acpi/pci_link.o
CC net/mac80211/agg-tx.o
CC net/ipv4/tcp_minisocks.o
CC drivers/acpi/acpica/hwxface.o
CC lib/bust_spinlocks.o
CC fs/open.o
CC net/ipv6/raw.o
CC arch/x86/kernel/irqinit.o
CC drivers/base/map.o
CC net/sunrpc/auth.o
CC fs/lockd/mon.o
CC kernel/workqueue.o
CC net/ethtool/eeprom.o
CC fs/lockd/trace.o
CC net/core/gso.o
CC drivers/gpu/drm/i915/intel_region_ttm.o
CC net/ipv4/tcp_cong.o
CC fs/autofs/expire.o
AR net/handshake/built-in.a
CC drivers/acpi/pci_irq.o
CC fs/lockd/xdr.o
CC arch/x86/kernel/jump_label.o
CC arch/x86/kernel/irq_work.o
CC drivers/acpi/acpica/hwxfsleep.o
CC net/ethtool/stats.o
CC fs/9p/xattr.o
CC drivers/acpi/acpica/hwpci.o
CC lib/kasprintf.o
CC drivers/base/devres.o
AR drivers/gpu/drm/gud/built-in.a
CC net/ipv6/icmp.o
CC drivers/acpi/acpi_apd.o
CC mm/pagewalk.o
LD [M] fs/efivarfs/efivarfs.o
CC fs/ext4/move_extent.o
CC net/wireless/chan.o
CC net/ipv4/tcp_metrics.o
CC arch/x86/kernel/probe_roms.o
CC net/core/net-sysfs.o
AR drivers/dax/hmem/built-in.a
AR drivers/dax/built-in.a
CC fs/nfs/symlink.o
AR net/sunrpc/auth_gss/built-in.a
CC mm/pgtable-generic.o
CC drivers/gpu/drm/i915/intel_runtime_pm.o
CC drivers/base/attribute_container.o
CC net/ipv6/mcast.o
CC lib/bitmap.o
CC net/netfilter/nf_nat_core.o
CC drivers/acpi/acpica/nsaccess.o
CC net/netfilter/nf_nat_proto.o
CC net/ipv4/tcp_fastopen.o
CC drivers/gpu/drm/i915/intel_sbi.o
AR drivers/gpu/drm/solomon/built-in.a
CC net/ethtool/phc_vclocks.o
CC [M] drivers/gpu/drm/scheduler/sched_main.o
CC net/mac80211/agg-rx.o
CC fs/autofs/dev-ioctl.o
CC net/netfilter/nf_nat_helper.o
AR fs/9p/built-in.a
CC arch/x86/kernel/sys_ia32.o
CC drivers/base/transport_class.o
CC [M] drivers/gpu/drm/scheduler/sched_fence.o
HOSTCC drivers/gpu/drm/xe/xe_gen_wa_oob
CC drivers/acpi/acpica/nsalloc.o
CC net/mac80211/vht.o
CC drivers/acpi/acpi_platform.o
CC net/sunrpc/auth_null.o
CC fs/lockd/clnt4xdr.o
CC net/core/hotdata.o
GEN xe_wa_oob.c xe_wa_oob.h
CC [M] drivers/gpu/drm/xe/xe_bb.o
CC mm/rmap.o
CC net/sunrpc/auth_tls.o
CC drivers/gpu/drm/i915/intel_step.o
CC fs/read_write.o
CC [M] drivers/gpu/drm/scheduler/sched_entity.o
CC lib/scatterlist.o
CC drivers/base/topology.o
CC [M] drivers/gpu/drm/xe/xe_bo.o
CC drivers/acpi/acpi_pnp.o
CC net/ipv6/reassembly.o
CC kernel/pid.o
CC drivers/dma-buf/dma-buf.o
CC drivers/gpu/drm/drm_atomic.o
CC drivers/acpi/acpica/nsarguments.o
CC fs/nfs/unlink.o
CC drivers/gpu/drm/i915/intel_uncore.o
CC net/core/netdev_rx_queue.o
CC net/ethtool/mm.o
CC arch/x86/kernel/ksysfs.o
CC fs/lockd/xdr4.o
CC lib/list_sort.o
AR fs/autofs/built-in.a
CC net/sunrpc/auth_unix.o
CC drivers/base/container.o
CC drivers/acpi/acpica/nsconvert.o
CC drivers/dma-buf/dma-fence.o
CC kernel/task_work.o
AR drivers/cxl/core/built-in.a
AR drivers/cxl/built-in.a
CC drivers/gpu/drm/drm_atomic_uapi.o
CC fs/nfs/write.o
CC net/netfilter/nf_nat_masquerade.o
CC drivers/base/property.o
CC lib/uuid.o
CC arch/x86/kernel/bootflag.o
CC drivers/macintosh/mac_hid.o
CC fs/lockd/svc4proc.o
AR drivers/scsi/pcmcia/built-in.a
CC drivers/scsi/scsi.o
LD [M] drivers/gpu/drm/scheduler/gpu-sched.o
CC mm/vmalloc.o
CC fs/lockd/procfs.o
CC net/ipv4/tcp_rate.o
CC drivers/gpu/drm/i915/intel_wakeref.o
CC drivers/dma-buf/dma-fence-array.o
CC drivers/acpi/power.o
CC drivers/acpi/acpica/nsdump.o
CC fs/file_table.o
CC kernel/extable.o
CC fs/ext4/namei.o
CC fs/nfs/namespace.o
CC drivers/scsi/hosts.o
CC drivers/gpu/drm/drm_auth.o
CC drivers/gpu/drm/drm_blend.o
CC net/ipv6/tcp_ipv6.o
CC lib/iov_iter.o
CC fs/super.o
CC drivers/acpi/acpica/nseval.o
CC net/core/net-procfs.o
CC net/netfilter/nf_nat_ftp.o
CC arch/x86/kernel/e820.o
AR drivers/macintosh/built-in.a
CC net/wireless/ethtool.o
AR drivers/nvme/common/built-in.a
AR drivers/nvme/host/built-in.a
AR drivers/nvme/target/built-in.a
AR drivers/nvme/built-in.a
CC drivers/gpu/drm/i915/vlv_sideband.o
CC mm/vma.o
CC fs/ext4/page-io.o
CC drivers/acpi/event.o
CC net/ethtool/module.o
CC net/core/netpoll.o
CC net/ipv4/tcp_recovery.o
CC lib/clz_ctz.o
CC drivers/acpi/acpica/nsinit.o
CC fs/ext4/readpage.o
CC drivers/base/cacheinfo.o
CC net/mac80211/he.o
CC mm/process_vm_access.o
CC drivers/dma-buf/dma-fence-chain.o
CC drivers/ata/libata-core.o
CC fs/nfs/mount_clnt.o
CC drivers/gpu/drm/i915/vlv_suspend.o
CC drivers/acpi/evged.o
CC lib/bsearch.o
AR drivers/net/phy/qcom/built-in.a
CC drivers/net/phy/mdio-boardinfo.o
CC drivers/gpu/drm/i915/soc/intel_dram.o
CC [M] drivers/gpu/drm/xe/xe_bo_evict.o
CC net/mac80211/s1g.o
CC drivers/gpu/drm/drm_bridge.o
CC drivers/base/swnode.o
AR fs/lockd/built-in.a
CC drivers/net/phy/stubs.o
CC lib/find_bit.o
CC kernel/params.o
CC drivers/net/phy/mdio_devres.o
CC drivers/acpi/acpica/nsload.o
CC net/wireless/mesh.o
CC net/ipv4/tcp_ulp.o
CC drivers/scsi/scsi_ioctl.o
AR drivers/net/pse-pd/built-in.a
CC drivers/acpi/sysfs.o
CC drivers/dma-buf/dma-fence-unwrap.o
CC fs/ext4/resize.o
CC kernel/kthread.o
CC drivers/firewire/init_ohci1394_dma.o
CC arch/x86/kernel/pci-dma.o
CC drivers/acpi/property.o
CC drivers/gpu/drm/drm_cache.o
CC drivers/scsi/scsicam.o
CC net/mac80211/ibss.o
CC drivers/acpi/acpica/nsnames.o
CC fs/char_dev.o
CC drivers/dma-buf/dma-resv.o
CC drivers/net/phy/phy.o
CC net/netfilter/nf_nat_irc.o
CC drivers/ata/libata-scsi.o
CC drivers/gpu/drm/drm_color_mgmt.o
CC mm/page_alloc.o
CC drivers/net/mdio/acpi_mdio.o
CC fs/nfs/nfstrace.o
CC [M] drivers/gpu/drm/xe/xe_devcoredump.o
CC net/ethtool/cmis_fw_update.o
CC fs/ext4/super.o
CC drivers/cdrom/cdrom.o
CC fs/ext4/symlink.o
CC drivers/scsi/scsi_error.o
AR drivers/net/pcs/built-in.a
CC net/ipv6/ping.o
CC drivers/base/auxiliary.o
CC drivers/net/mdio/fwnode_mdio.o
CC drivers/scsi/scsi_lib.o
AR drivers/net/ethernet/3com/built-in.a
CC drivers/net/ethernet/8390/ne2k-pci.o
CC drivers/acpi/acpica/nsobject.o
CC net/ipv4/tcp_offload.o
CC net/mac80211/iface.o
CC net/core/fib_rules.o
AR drivers/firewire/built-in.a
CC drivers/net/phy/phy-c45.o
CC drivers/dma-buf/sync_file.o
CC drivers/net/phy/phy-core.o
AR drivers/net/ethernet/adaptec/built-in.a
CC drivers/acpi/debugfs.o
AR drivers/net/wireless/admtek/built-in.a
CC net/netfilter/nf_nat_sip.o
AR drivers/net/wireless/ath/built-in.a
CC drivers/gpu/drm/i915/soc/intel_gmch.o
AR drivers/net/wireless/atmel/built-in.a
AR drivers/net/wireless/broadcom/built-in.a
CC arch/x86/kernel/quirks.o
AR drivers/net/wireless/intel/built-in.a
AR drivers/net/wireless/intersil/built-in.a
AR drivers/net/wireless/marvell/built-in.a
AR drivers/net/wireless/mediatek/built-in.a
AR drivers/net/wireless/microchip/built-in.a
AR drivers/net/wireless/purelifi/built-in.a
AR drivers/net/wireless/quantenna/built-in.a
AR drivers/net/wireless/ralink/built-in.a
CC net/mac80211/link.o
AR drivers/net/wireless/realtek/built-in.a
AR drivers/net/wireless/rsi/built-in.a
AR drivers/net/wireless/silabs/built-in.a
AR drivers/net/wireless/st/built-in.a
CC drivers/acpi/acpica/nsparse.o
AR drivers/net/wireless/ti/built-in.a
AR drivers/net/wireless/zydas/built-in.a
CC drivers/base/devtmpfs.o
AR drivers/net/wireless/virtual/built-in.a
AR drivers/net/ethernet/agere/built-in.a
AR drivers/net/usb/built-in.a
AR drivers/net/wireless/built-in.a
CC net/core/net-traces.o
CC fs/ext4/sysfs.o
CC fs/nfs/export.o
CC drivers/acpi/acpica/nspredef.o
CC lib/llist.o
CC fs/ext4/xattr.o
CC lib/lwq.o
CC mm/init-mm.o
CC drivers/net/phy/phy_device.o
CC [M] drivers/gpu/drm/xe/xe_device.o
AR drivers/auxdisplay/built-in.a
CC kernel/sys_ni.o
CC drivers/gpu/drm/drm_connector.o
CC net/mac80211/rate.o
AR drivers/dma-buf/built-in.a
CC fs/stat.o
CC net/ethtool/cmis_cdb.o
CC lib/memweight.o
CC drivers/net/mii.o
AR drivers/net/mdio/built-in.a
CC mm/memblock.o
CC drivers/net/phy/linkmode.o
CC drivers/acpi/acpica/nsprepkg.o
CC lib/kfifo.o
CC drivers/scsi/constants.o
CC net/wireless/ap.o
CC kernel/nsproxy.o
CC kernel/notifier.o
CC drivers/net/ethernet/8390/8390.o
CC arch/x86/kernel/kdebugfs.o
CC net/ipv6/exthdrs.o
CC drivers/gpu/drm/i915/soc/intel_pch.o
CC net/core/selftests.o
CC drivers/base/module.o
CC drivers/ata/libata-eh.o
CC fs/nfs/sysfs.o
CC drivers/base/auxiliary_sysfs.o
CC net/mac80211/michael.o
CC drivers/acpi/acpica/nsrepair.o
CC net/sunrpc/svc.o
CC drivers/scsi/scsi_lib_dma.o
CC arch/x86/kernel/alternative.o
CC mm/slub.o
CC net/ipv4/tcp_plb.o
CC mm/madvise.o
CC net/netfilter/x_tables.o
CC fs/exec.o
CC [M] drivers/gpu/drm/xe/xe_device_sysfs.o
AR drivers/cdrom/built-in.a
CC drivers/net/loopback.o
CC [M] drivers/gpu/drm/xe/xe_dma_buf.o
CC fs/pipe.o
CC drivers/net/phy/phy_link_topology.o
CC drivers/net/phy/mdio_bus.o
CC fs/namei.o
CC drivers/acpi/acpica/nsrepair2.o
CC drivers/base/devcoredump.o
CC lib/percpu-refcount.o
AR drivers/net/ethernet/alacritech/built-in.a
CC drivers/gpu/drm/i915/soc/intel_rom.o
CC net/ipv6/datagram.o
CC drivers/ata/libata-transport.o
CC net/ipv4/datagram.o
CC net/ethtool/pse-pd.o
CC kernel/ksysfs.o
CC mm/page_io.o
CC drivers/scsi/scsi_scan.o
CC net/netfilter/xt_tcpudp.o
AR drivers/net/ethernet/8390/built-in.a
AR drivers/net/ethernet/alteon/built-in.a
AR drivers/net/ethernet/amazon/built-in.a
AR drivers/net/ethernet/amd/built-in.a
CC drivers/acpi/acpica/nssearch.o
AR drivers/net/ethernet/aquantia/built-in.a
AR drivers/net/ethernet/arc/built-in.a
CC drivers/base/platform-msi.o
AR drivers/net/ethernet/asix/built-in.a
AR drivers/net/ethernet/atheros/built-in.a
CC drivers/acpi/acpi_lpat.o
AR drivers/net/ethernet/cadence/built-in.a
CC lib/rhashtable.o
CC drivers/net/ethernet/broadcom/bnx2.o
CC net/ipv6/ip6_flowlabel.o
CC net/sunrpc/svcsock.o
CC net/netfilter/xt_CONNSECMARK.o
CC mm/swap_state.o
CC net/ipv4/raw.o
CC net/wireless/trace.o
CC [M] drivers/gpu/drm/xe/xe_drm_client.o
CC drivers/ata/libata-trace.o
CC drivers/net/netconsole.o
CC drivers/acpi/acpica/nsutils.o
CC drivers/acpi/acpica/nswalk.o
CC drivers/pcmcia/cs.o
CC drivers/base/physical_location.o
CC fs/fcntl.o
CC kernel/cred.o
CC arch/x86/kernel/i8253.o
CC fs/ext4/xattr_hurd.o
CC drivers/net/ethernet/broadcom/tg3.o
CC net/wireless/ocb.o
CC net/sunrpc/svcauth.o
CC drivers/gpu/drm/i915/i915_memcpy.o
CC drivers/gpu/drm/i915/i915_mm.o
CC drivers/gpu/drm/i915/i915_sw_fence.o
CC drivers/net/phy/mdio_device.o
CC net/mac80211/tkip.o
CC net/ethtool/plca.o
CC fs/ioctl.o
CC drivers/base/trace.o
CC lib/base64.o
GEN drivers/scsi/scsi_devinfo_tbl.c
CC drivers/ata/libata-sata.o
CC drivers/acpi/acpica/nsxfeval.o
CC drivers/net/virtio_net.o
CC fs/nfs/fs_context.o
AR drivers/net/ethernet/brocade/built-in.a
CC fs/nfs/nfsroot.o
CC drivers/gpu/drm/drm_crtc.o
CC arch/x86/kernel/hw_breakpoint.o
CC drivers/net/phy/swphy.o
CC lib/once.o
CC drivers/scsi/scsi_devinfo.o
CC net/ipv6/inet6_connection_sock.o
CC net/wireless/pmsr.o
CC fs/readdir.o
CC drivers/acpi/acpi_pcc.o
CC kernel/reboot.o
CC net/netfilter/xt_NFLOG.o
CC net/ethtool/phy.o
CC drivers/pcmcia/socket_sysfs.o
CC drivers/acpi/acpica/nsxfname.o
CC drivers/net/net_failover.o
CC drivers/ata/libata-sff.o
CC net/core/ptp_classifier.o
CC drivers/scsi/scsi_sysctl.o
CC drivers/gpu/drm/drm_displayid.o
GEN net/wireless/shipped-certs.c
CC [M] drivers/gpu/drm/xe/xe_exec.o
CC fs/nfs/sysctl.o
CC lib/refcount.o
CC mm/swapfile.o
CC drivers/usb/common/common.o
CC drivers/gpu/drm/i915/i915_sw_fence_work.o
AR drivers/base/built-in.a
CC drivers/gpu/drm/i915/i915_syncmap.o
CC drivers/usb/core/usb.o
CC net/sunrpc/svcauth_unix.o
CC lib/rcuref.o
CC net/mac80211/aes_cmac.o
CC arch/x86/kernel/tsc.o
CC drivers/scsi/scsi_proc.o
CC drivers/acpi/acpica/nsxfobj.o
AR drivers/net/ethernet/cavium/common/built-in.a
AR drivers/net/ethernet/cavium/thunder/built-in.a
CC fs/ext4/xattr_trusted.o
CC drivers/usb/core/hub.o
AR drivers/net/ethernet/cavium/liquidio/built-in.a
CC drivers/pcmcia/cardbus.o
AR drivers/net/ethernet/cavium/octeon/built-in.a
AR drivers/net/ethernet/cavium/built-in.a
CC net/core/netprio_cgroup.o
CC drivers/net/phy/fixed_phy.o
CC lib/usercopy.o
AR drivers/usb/phy/built-in.a
CC drivers/net/phy/realtek.o
CC net/ipv4/udp.o
CC drivers/ata/libata-pmp.o
CC drivers/gpu/drm/i915/i915_user_extensions.o
CC drivers/gpu/drm/drm_drv.o
CC net/ipv6/udp_offload.o
CC drivers/usb/common/debug.o
CC fs/select.o
CC net/netfilter/xt_SECMARK.o
CC kernel/async.o
CC drivers/acpi/acpica/psargs.o
CC net/mac80211/aes_gmac.o
CC drivers/ata/libata-acpi.o
CC lib/errseq.o
AR drivers/usb/common/built-in.a
CC net/ipv4/udplite.o
CC drivers/usb/core/hcd.o
CC net/core/netclassid_cgroup.o
CC lib/bucket_locks.o
AR net/ethtool/built-in.a
CC drivers/pcmcia/ds.o
CC drivers/gpu/drm/i915/i915_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_execlist.o
CC net/core/dst_cache.o
CC kernel/range.o
CC drivers/acpi/acpica/psloop.o
CC net/core/gro_cells.o
CC fs/ext4/xattr_user.o
CC lib/generic-radix-tree.o
CC net/netfilter/xt_TCPMSS.o
CC drivers/gpu/drm/i915/i915_debugfs_params.o
CC net/wireless/shipped-certs.o
CC kernel/smpboot.o
CC drivers/scsi/scsi_debugfs.o
CC drivers/usb/core/urb.o
CC drivers/usb/mon/mon_main.o
AR drivers/net/ethernet/chelsio/built-in.a
CC net/ipv6/seg6.o
CC arch/x86/kernel/tsc_msr.o
CC drivers/ata/libata-pata-timings.o
CC drivers/acpi/acpica/psobject.o
CC net/ipv4/udp_offload.o
CC drivers/scsi/scsi_trace.o
CC drivers/gpu/drm/i915/i915_pmu.o
CC drivers/usb/core/message.o
AR drivers/net/ethernet/cisco/built-in.a
CC drivers/usb/mon/mon_stat.o
CC net/ipv6/fib6_notifier.o
CC lib/bitmap-str.o
AR drivers/net/phy/built-in.a
CC fs/dcache.o
CC net/ipv4/arp.o
CC arch/x86/kernel/io_delay.o
AR drivers/net/ethernet/cortina/built-in.a
CC kernel/ucount.o
CC drivers/pcmcia/pcmcia_resource.o
CC drivers/scsi/scsi_logging.o
CC drivers/gpu/drm/i915/gt/gen2_engine_cs.o
CC drivers/gpu/drm/drm_dumb_buffers.o
CC fs/ext4/fast_commit.o
CC fs/nfs/nfs3super.o
CC kernel/regset.o
CC drivers/acpi/acpica/psopcode.o
CC [M] drivers/gpu/drm/xe/xe_exec_queue.o
CC net/mac80211/fils_aead.o
CC net/sunrpc/addr.o
CC net/mac80211/cfg.o
CC net/mac80211/ethtool.o
CC arch/x86/kernel/rtc.o
CC drivers/gpu/drm/drm_edid.o
CC drivers/scsi/scsi_pm.o
CC drivers/usb/host/pci-quirks.o
CC net/sunrpc/rpcb_clnt.o
CC drivers/usb/class/usblp.o
CC [M] drivers/gpu/drm/xe/xe_force_wake.o
CC drivers/usb/mon/mon_text.o
CC net/core/failover.o
CC drivers/ata/ahci.o
CC net/netfilter/xt_conntrack.o
CC drivers/acpi/acpica/psopinfo.o
CC fs/nfs/nfs3client.o
CC fs/inode.o
CC kernel/ksyms_common.o
CC fs/attr.o
CC fs/ext4/orphan.o
CC lib/string_helpers.o
CC mm/swap_slots.o
CC drivers/input/serio/serio.o
CC net/sunrpc/timer.o
CC drivers/acpi/ac.o
CC arch/x86/kernel/resource.o
CC net/ipv6/rpl.o
CC drivers/usb/mon/mon_bin.o
CC drivers/acpi/acpica/psparse.o
CC drivers/usb/storage/scsiglue.o
CC drivers/scsi/scsi_bsg.o
AS arch/x86/kernel/irqflags.o
CC arch/x86/kernel/static_call.o
AR drivers/usb/misc/built-in.a
CC net/ipv4/icmp.o
CC net/mac80211/rx.o
CC drivers/pcmcia/cistpl.o
CC drivers/ata/libahci.o
CC drivers/usb/host/ehci-hcd.o
CC drivers/gpu/drm/i915/gt/gen6_engine_cs.o
CC mm/dmapool.o
CC kernel/groups.o
CC drivers/usb/core/driver.o
CC mm/hugetlb.o
CC kernel/kcmp.o
CC drivers/acpi/button.o
CC net/netfilter/xt_policy.o
AR drivers/usb/class/built-in.a
CC fs/ext4/acl.o
CC drivers/ata/ata_piix.o
CC drivers/acpi/acpica/psscope.o
CC arch/x86/kernel/process.o
CC drivers/input/serio/i8042.o
CC drivers/gpu/drm/drm_eld.o
AR net/core/built-in.a
CC lib/hexdump.o
CC drivers/usb/core/config.o
CC net/mac80211/spectmgmt.o
CC drivers/gpu/drm/i915/gt/gen6_ppgtt.o
CC drivers/pcmcia/pcmcia_cis.o
CC net/sunrpc/xdr.o
CC kernel/freezer.o
CC lib/kstrtox.o
CC drivers/usb/host/ehci-pci.o
CC fs/nfs/nfs3proc.o
CC drivers/scsi/scsi_common.o
CC [M] drivers/gpu/drm/xe/xe_ggtt.o
CC drivers/ata/pata_amd.o
CC drivers/acpi/acpica/pstree.o
CC drivers/gpu/drm/i915/gt/gen7_renderclear.o
CC net/ipv6/ioam6.o
CC drivers/usb/host/ohci-hcd.o
CC arch/x86/kernel/ptrace.o
CC arch/x86/kernel/tls.o
CC drivers/usb/core/file.o
CC drivers/usb/storage/protocol.o
CC drivers/usb/early/ehci-dbgp.o
CC fs/nfs/nfs3xdr.o
AR drivers/usb/mon/built-in.a
CC drivers/pcmcia/rsrc_mgr.o
CC drivers/input/keyboard/atkbd.o
CC lib/iomap.o
CC drivers/input/mouse/psmouse-base.o
AR drivers/input/joystick/built-in.a
CC net/netfilter/xt_state.o
CC drivers/acpi/acpica/psutils.o
CC drivers/scsi/scsi_transport_spi.o
CC drivers/input/serio/serport.o
CC drivers/acpi/fan_core.o
CC [M] drivers/gpu/drm/xe/xe_gpu_scheduler.o
CC kernel/profile.o
CC drivers/usb/core/buffer.o
CC drivers/usb/storage/transport.o
CC net/ipv6/sysctl_net_ipv6.o
CC drivers/acpi/acpica/pswalk.o
AR drivers/net/ethernet/dec/tulip/built-in.a
CC net/ipv4/devinet.o
AR drivers/net/ethernet/dec/built-in.a
AR drivers/net/ethernet/dlink/built-in.a
CC fs/bad_inode.o
AR drivers/net/ethernet/emulex/built-in.a
CC fs/nfs/nfs3acl.o
CC drivers/gpu/drm/drm_encoder.o
CC mm/mmu_notifier.o
CC drivers/input/serio/libps2.o
CC drivers/gpu/drm/i915/gt/gen8_engine_cs.o
CC drivers/usb/core/sysfs.o
CC [M] drivers/gpu/drm/xe/xe_gsc.o
CC net/ipv6/xfrm6_policy.o
CC fs/file.o
CC net/sunrpc/sunrpc_syms.o
CC drivers/pcmcia/rsrc_nonstatic.o
CC mm/migrate.o
CC drivers/usb/host/ohci-pci.o
CC drivers/usb/host/uhci-hcd.o
CC fs/ext4/xattr_security.o
CC lib/iomap_copy.o
AR drivers/usb/early/built-in.a
CC drivers/usb/storage/usb.o
CC drivers/acpi/acpica/psxface.o
CC fs/filesystems.o
CC mm/page_counter.o
CC drivers/ata/pata_oldpiix.o
CC drivers/usb/core/endpoint.o
CC arch/x86/kernel/step.o
CC lib/devres.o
CC kernel/stacktrace.o
CC drivers/gpu/drm/drm_file.o
CC fs/nfs/nfs4proc.o
CC kernel/dma.o
CC net/sunrpc/cache.o
CC arch/x86/kernel/i8237.o
CC drivers/scsi/virtio_scsi.o
AR drivers/input/keyboard/built-in.a
AR drivers/input/tablet/built-in.a
CC net/ipv4/af_inet.o
CC net/ipv6/xfrm6_state.o
CC [M] net/netfilter/nf_log_syslog.o
CC drivers/input/mouse/synaptics.o
CC drivers/gpu/drm/drm_fourcc.o
CC drivers/acpi/acpica/rsaddr.o
CC net/mac80211/tx.o
AR drivers/input/serio/built-in.a
CC drivers/pcmcia/yenta_socket.o
CC drivers/gpu/drm/i915/gt/gen8_ppgtt.o
CC drivers/acpi/fan_attr.o
CC [M] drivers/gpu/drm/xe/xe_gsc_debugfs.o
CC drivers/usb/core/devio.o
CC lib/check_signature.o
CC fs/namespace.o
AR drivers/net/ethernet/engleder/built-in.a
CC net/mac80211/key.o
CC drivers/usb/storage/initializers.o
CC fs/seq_file.o
CC fs/xattr.o
CC arch/x86/kernel/stacktrace.o
CC drivers/acpi/acpica/rscalc.o
CC lib/interval_tree.o
AR fs/ext4/built-in.a
CC kernel/smp.o
CC net/sunrpc/rpc_pipe.o
CC net/ipv4/igmp.o
AR drivers/input/touchscreen/built-in.a
CC drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
CC [M] drivers/gpu/drm/xe/xe_gsc_proxy.o
AR drivers/net/ethernet/ezchip/built-in.a
CC fs/nfs/nfs4xdr.o
CC drivers/gpu/drm/drm_framebuffer.o
CC arch/x86/kernel/reboot.o
CC drivers/ata/pata_sch.o
CC drivers/usb/core/notify.o
CC drivers/ata/pata_mpiix.o
CC drivers/rtc/lib.o
CC drivers/gpu/drm/i915/gt/intel_context.o
CC lib/assoc_array.o
CC drivers/usb/core/generic.o
CC net/mac80211/util.o
CC drivers/acpi/acpica/rscreate.o
CC drivers/scsi/sd.o
CC drivers/input/mouse/focaltech.o
AR drivers/input/misc/built-in.a
CC mm/hugetlb_cgroup.o
CC drivers/ata/ata_generic.o
CC drivers/usb/storage/sierra_ms.o
CC net/ipv6/xfrm6_input.o
CC drivers/usb/host/xhci.o
AR drivers/net/ethernet/fujitsu/built-in.a
CC net/sunrpc/sysfs.o
CC fs/nfs/nfs4state.o
CC drivers/rtc/class.o
CC drivers/gpu/drm/drm_gem.o
CC drivers/scsi/sr.o
CC drivers/input/mouse/alps.o
CC drivers/acpi/acpica/rsdumpinfo.o
AR drivers/i3c/built-in.a
CC net/ipv4/fib_frontend.o
CC drivers/i2c/algos/i2c-algo-bit.o
CC drivers/i2c/busses/i2c-i801.o
CC arch/x86/kernel/msr.o
CC [M] drivers/gpu/drm/xe/xe_gsc_submit.o
CC net/mac80211/parse.o
CC net/sunrpc/svc_xprt.o
CC drivers/gpu/drm/drm_ioctl.o
CC drivers/scsi/sr_ioctl.o
AR drivers/pcmcia/built-in.a
CC drivers/acpi/acpica/rsinfo.o
CC [M] net/netfilter/xt_mark.o
CC fs/nfs/nfs4renewd.o
CC lib/bitrev.o
CC [M] net/netfilter/xt_nat.o
CC net/ipv4/fib_semantics.o
CC lib/crc-ccitt.o
CC drivers/usb/host/xhci-mem.o
CC kernel/uid16.o
CC drivers/usb/core/quirks.o
CC drivers/usb/storage/option_ms.o
CC drivers/acpi/acpica/rsio.o
AR drivers/ata/built-in.a
CC drivers/acpi/fan_hwmon.o
CC drivers/rtc/interface.o
CC drivers/rtc/nvmem.o
CC drivers/usb/host/xhci-ext-caps.o
CC drivers/input/input.o
CC lib/crc16.o
CC mm/early_ioremap.o
CC net/ipv6/xfrm6_output.o
CC fs/libfs.o
CC drivers/acpi/acpica/rsirq.o
CC arch/x86/kernel/cpuid.o
CC drivers/acpi/acpica/rslist.o
CC [M] drivers/gpu/drm/xe/xe_gt.o
AR drivers/i2c/algos/built-in.a
CC fs/nfs/nfs4super.o
CC drivers/acpi/acpi_video.o
CC drivers/usb/storage/usual-tables.o
CC drivers/gpu/drm/i915/gt/intel_context_sseu.o
CC net/sunrpc/xprtmultipath.o
CC kernel/kallsyms.o
AR drivers/net/ethernet/fungible/built-in.a
HOSTCC lib/gen_crc32table
CC net/mac80211/wme.o
AR drivers/net/ethernet/google/built-in.a
CC drivers/usb/host/xhci-ring.o
CC drivers/usb/core/devices.o
CC drivers/gpu/drm/i915/gt/intel_engine_cs.o
CC mm/secretmem.o
AR drivers/i2c/muxes/built-in.a
CC drivers/input/mouse/byd.o
CC lib/xxhash.o
CC [M] net/netfilter/xt_LOG.o
CC kernel/acct.o
CC [M] drivers/gpu/drm/xe/xe_gt_ccs_mode.o
CC drivers/usb/host/xhci-hub.o
CC kernel/vmcore_info.o
AR drivers/i2c/busses/built-in.a
CC drivers/acpi/acpica/rsmemory.o
CC drivers/i2c/i2c-boardinfo.o
CC [M] net/netfilter/xt_MASQUERADE.o
CC arch/x86/kernel/early-quirks.o
CC net/mac80211/chan.o
CC drivers/scsi/sr_vendor.o
CC net/sunrpc/stats.o
AR drivers/usb/storage/built-in.a
CC net/ipv6/xfrm6_protocol.o
CC drivers/usb/core/phy.o
CC net/sunrpc/sysctl.o
AR drivers/net/ethernet/broadcom/built-in.a
CC drivers/acpi/acpica/rsmisc.o
AR drivers/net/ethernet/huawei/built-in.a
CC drivers/net/ethernet/intel/e1000/e1000_main.o
CC lib/genalloc.o
CC drivers/input/mouse/logips2pp.o
CC drivers/net/ethernet/intel/e1000e/82571.o
AR drivers/net/ethernet/i825xx/built-in.a
CC net/mac80211/trace.o
CC mm/hmm.o
CC drivers/i2c/i2c-core-base.o
CC drivers/scsi/sg.o
CC drivers/net/ethernet/intel/e1000e/ich8lan.o
CC drivers/gpu/drm/drm_lease.o
CC [M] net/netfilter/xt_addrtype.o
CC drivers/rtc/dev.o
CC lib/percpu_counter.o
CC drivers/input/input-compat.o
CC mm/memfd.o
CC [M] drivers/gpu/drm/xe/xe_gt_clock.o
CC drivers/rtc/proc.o
CC drivers/rtc/sysfs.o
CC drivers/acpi/acpica/rsserial.o
CC net/mac80211/mlme.o
CC kernel/elfcorehdr.o
CC drivers/net/ethernet/intel/e100.o
CC drivers/gpu/drm/drm_managed.o
CC drivers/scsi/scsi_sysfs.o
CC drivers/input/mouse/lifebook.o
CC arch/x86/kernel/smp.o
CC mm/ptdump.o
CC fs/nfs/nfs4file.o
CC drivers/usb/core/port.o
CC [M] drivers/gpu/drm/xe/xe_gt_freq.o
CC drivers/usb/host/xhci-dbg.o
CC net/ipv4/fib_trie.o
CC drivers/input/mouse/trackpoint.o
CC fs/fs-writeback.o
CC arch/x86/kernel/smpboot.o
CC drivers/acpi/acpica/rsutils.o
CC drivers/rtc/rtc-mc146818-lib.o
CC lib/audit.o
AR drivers/net/ethernet/microsoft/built-in.a
CC drivers/rtc/rtc-cmos.o
CC mm/execmem.o
CC fs/pnode.o
CC net/ipv6/netfilter.o
CC [M] drivers/gpu/drm/xe/xe_gt_idle.o
CC lib/syscall.o
CC kernel/crash_reserve.o
CC drivers/net/ethernet/intel/e1000/e1000_hw.o
CC drivers/i2c/i2c-core-smbus.o
CC drivers/gpu/drm/drm_mm.o
CC drivers/input/mouse/cypress_ps2.o
CC drivers/input/input-mt.o
CC fs/splice.o
CC drivers/acpi/acpica/rsxface.o
CC fs/nfs/delegation.o
AR drivers/net/ethernet/litex/built-in.a
CC drivers/input/input-poller.o
CC lib/errname.o
CC net/mac80211/tdls.o
CC drivers/usb/core/hcd-pci.o
CC drivers/input/mouse/psmouse-smbus.o
CC net/ipv4/fib_notifier.o
AR drivers/net/ethernet/marvell/octeon_ep/built-in.a
AR drivers/net/ethernet/marvell/octeon_ep_vf/built-in.a
AR drivers/net/ethernet/marvell/octeontx2/built-in.a
AR drivers/net/ethernet/marvell/prestera/built-in.a
CC drivers/net/ethernet/marvell/sky2.o
CC fs/nfs/nfs4idmap.o
CC drivers/usb/core/usb-acpi.o
AR net/wireless/built-in.a
CC drivers/gpu/drm/drm_mode_config.o
CC kernel/kexec_core.o
AR mm/built-in.a
CC drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
CC net/ipv4/inet_fragment.o
AR drivers/net/ethernet/mellanox/built-in.a
CC drivers/acpi/video_detect.o
AR net/netfilter/built-in.a
CC drivers/gpu/drm/drm_mode_object.o
CC fs/nfs/callback.o
CC lib/nlattr.o
CC drivers/acpi/acpica/tbdata.o
AR drivers/media/i2c/built-in.a
AR drivers/media/tuners/built-in.a
CC drivers/input/ff-core.o
AR drivers/media/rc/keymaps/built-in.a
AR drivers/media/rc/built-in.a
AR drivers/media/common/b2c2/built-in.a
AR drivers/media/common/saa7146/built-in.a
AR drivers/media/common/siano/built-in.a
AR drivers/media/common/v4l2-tpg/built-in.a
AR drivers/media/common/videobuf2/built-in.a
AR drivers/media/common/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_mcr.o
AR drivers/scsi/built-in.a
AR drivers/media/platform/allegro-dvt/built-in.a
AR drivers/media/pci/ttpci/built-in.a
CC fs/sync.o
AR drivers/media/platform/amlogic/meson-ge2d/built-in.a
AR drivers/media/platform/amlogic/built-in.a
AR drivers/net/ethernet/meta/built-in.a
AR drivers/media/pci/b2c2/built-in.a
CC fs/utimes.o
AR drivers/media/platform/amphion/built-in.a
AR drivers/media/pci/pluto2/built-in.a
AR drivers/media/platform/aspeed/built-in.a
AR drivers/media/pci/dm1105/built-in.a
CC fs/d_path.o
AR drivers/media/platform/atmel/built-in.a
AR drivers/media/pci/pt1/built-in.a
CC lib/cpu_rmap.o
AR drivers/media/platform/broadcom/built-in.a
AR drivers/media/pci/pt3/built-in.a
AR drivers/media/platform/cadence/built-in.a
AR drivers/media/pci/mantis/built-in.a
AR drivers/media/pci/ngene/built-in.a
AR drivers/rtc/built-in.a
AR drivers/media/platform/chips-media/coda/built-in.a
AR drivers/media/pci/ddbridge/built-in.a
AR drivers/net/ethernet/micrel/built-in.a
AR drivers/media/platform/chips-media/wave5/built-in.a
AR drivers/media/platform/chips-media/built-in.a
AR drivers/media/pci/saa7146/built-in.a
AR drivers/media/platform/imagination/built-in.a
CC drivers/net/ethernet/intel/e1000e/80003es2lan.o
AR drivers/media/pci/smipcie/built-in.a
AR drivers/media/pci/netup_unidvb/built-in.a
AR drivers/media/platform/intel/built-in.a
CC drivers/gpu/drm/i915/gt/intel_engine_pm.o
AR drivers/media/platform/marvell/built-in.a
AR drivers/media/pci/intel/ipu3/built-in.a
AR drivers/media/platform/mediatek/jpeg/built-in.a
AR drivers/media/pci/intel/ivsc/built-in.a
AR drivers/media/pci/intel/built-in.a
AR drivers/media/platform/mediatek/mdp/built-in.a
AR drivers/media/pci/built-in.a
CC arch/x86/kernel/tsc_sync.o
AR drivers/media/platform/mediatek/vcodec/common/built-in.a
AR drivers/media/platform/mediatek/vcodec/encoder/built-in.a
CC fs/stack.o
CC lib/dynamic_queue_limits.o
AR drivers/media/platform/mediatek/vcodec/decoder/built-in.a
AR drivers/media/platform/mediatek/vcodec/built-in.a
AR drivers/media/platform/mediatek/vpu/built-in.a
AR drivers/media/platform/mediatek/mdp3/built-in.a
AR drivers/media/platform/mediatek/built-in.a
AR drivers/media/platform/microchip/built-in.a
CC drivers/usb/host/xhci-trace.o
AR drivers/media/platform/nuvoton/built-in.a
AR drivers/media/platform/nvidia/tegra-vde/built-in.a
AR drivers/media/platform/nvidia/built-in.a
CC lib/glob.o
AR drivers/media/platform/nxp/dw100/built-in.a
CC drivers/net/ethernet/intel/e1000e/mac.o
AR drivers/media/platform/nxp/imx-jpeg/built-in.a
AR drivers/media/platform/nxp/imx8-isi/built-in.a
AR drivers/input/mouse/built-in.a
AR drivers/media/platform/nxp/built-in.a
CC drivers/i2c/i2c-core-acpi.o
AR net/sunrpc/built-in.a
AR drivers/media/platform/qcom/camss/built-in.a
AR drivers/media/platform/raspberrypi/pisp_be/built-in.a
AR drivers/media/platform/qcom/venus/built-in.a
AR drivers/media/platform/raspberrypi/built-in.a
AR drivers/media/platform/qcom/built-in.a
CC drivers/usb/host/xhci-debugfs.o
CC [M] drivers/gpu/drm/xe/xe_gt_pagefault.o
AR drivers/media/platform/renesas/rcar-vin/built-in.a
AR drivers/usb/core/built-in.a
AR drivers/media/platform/renesas/rzg2l-cru/built-in.a
CC drivers/acpi/acpica/tbfadt.o
CC net/mac80211/ocb.o
AR drivers/media/platform/renesas/vsp1/built-in.a
AR drivers/media/platform/renesas/built-in.a
AR drivers/media/platform/rockchip/rga/built-in.a
AR drivers/media/platform/rockchip/rkisp1/built-in.a
AR drivers/pps/clients/built-in.a
AR drivers/media/platform/rockchip/built-in.a
AR drivers/pps/generators/built-in.a
CC drivers/pps/pps.o
AR drivers/media/platform/samsung/exynos-gsc/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_sysfs.o
CC drivers/input/touchscreen.o
AR drivers/media/platform/samsung/exynos4-is/built-in.a
CC drivers/input/ff-memless.o
CC net/mac80211/airtime.o
AR drivers/media/platform/samsung/s3c-camif/built-in.a
CC net/ipv6/proc.o
CC fs/nfs/callback_xdr.o
AR drivers/media/platform/samsung/s5p-g2d/built-in.a
AR drivers/media/platform/samsung/s5p-jpeg/built-in.a
AR drivers/media/platform/samsung/s5p-mfc/built-in.a
CC drivers/acpi/acpica/tbfind.o
AR drivers/media/platform/samsung/built-in.a
AR drivers/media/platform/st/sti/bdisp/built-in.a
AR drivers/media/platform/st/sti/c8sectpfe/built-in.a
AR drivers/media/platform/st/sti/delta/built-in.a
CC drivers/pps/kapi.o
AR drivers/media/platform/st/sti/hva/built-in.a
AR drivers/media/platform/st/stm32/built-in.a
CC drivers/ptp/ptp_clock.o
AR drivers/media/platform/st/built-in.a
AR drivers/media/platform/sunxi/sun4i-csi/built-in.a
AR drivers/media/platform/sunxi/sun6i-csi/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_throttle.o
AR drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
AR drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
AR drivers/media/platform/sunxi/sun8i-di/built-in.a
AR drivers/media/platform/ti/am437x/built-in.a
CC arch/x86/kernel/setup_percpu.o
AR drivers/media/platform/ti/cal/built-in.a
AR drivers/media/platform/sunxi/sun8i-rotate/built-in.a
AR drivers/media/platform/sunxi/built-in.a
AR drivers/media/platform/ti/vpe/built-in.a
CC drivers/acpi/processor_driver.o
AR drivers/media/platform/ti/davinci/built-in.a
CC kernel/crash_core.o
AR drivers/media/platform/ti/j721e-csi2rx/built-in.a
AR drivers/media/platform/ti/omap/built-in.a
CC drivers/acpi/processor_thermal.o
AR drivers/media/platform/ti/omap3isp/built-in.a
AR drivers/media/platform/ti/built-in.a
CC drivers/acpi/processor_idle.o
AR drivers/media/platform/verisilicon/built-in.a
CC drivers/gpu/drm/i915/gt/intel_engine_user.o
AR drivers/media/platform/via/built-in.a
AR drivers/media/platform/xilinx/built-in.a
CC drivers/input/sparse-keymap.o
AR drivers/media/platform/built-in.a
CC drivers/ptp/ptp_chardev.o
CC net/ipv6/syncookies.o
AR drivers/media/usb/b2c2/built-in.a
AR drivers/media/mmc/siano/built-in.a
AR drivers/media/firewire/built-in.a
AR drivers/net/ethernet/microchip/built-in.a
AR drivers/media/mmc/built-in.a
CC drivers/i2c/i2c-smbus.o
AR drivers/media/usb/dvb-usb/built-in.a
CC drivers/input/vivaldi-fmap.o
CC drivers/gpu/drm/i915/gt/intel_execlists_submission.o
AR drivers/media/usb/dvb-usb-v2/built-in.a
CC drivers/acpi/acpica/tbinstal.o
AR drivers/media/usb/s2255/built-in.a
AR drivers/media/usb/siano/built-in.a
AR drivers/media/usb/ttusb-budget/built-in.a
AR drivers/media/usb/ttusb-dec/built-in.a
CC drivers/ptp/ptp_sysfs.o
AR drivers/media/usb/built-in.a
AR drivers/media/spi/built-in.a
AR drivers/media/test-drivers/built-in.a
AR drivers/media/built-in.a
CC drivers/net/ethernet/intel/e1000e/manage.o
CC drivers/gpu/drm/drm_modes.o
CC drivers/usb/host/xhci-pci.o
CC lib/strncpy_from_user.o
CC [M] drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
CC fs/nfs/callback_proc.o
CC [M] drivers/gpu/drm/xe/xe_gt_topology.o
CC net/ipv4/ping.o
CC drivers/pps/sysfs.o
CC arch/x86/kernel/mpparse.o
CC net/ipv4/ip_tunnel_core.o
AR drivers/net/ethernet/mscc/built-in.a
CC net/ipv6/calipso.o
CC drivers/gpu/drm/i915/gt/intel_ggtt.o
CC kernel/kexec.o
CC drivers/net/ethernet/intel/e1000/e1000_ethtool.o
CC net/ipv6/ah6.o
CC drivers/acpi/acpica/tbprint.o
AR drivers/net/ethernet/myricom/built-in.a
AR drivers/net/ethernet/natsemi/built-in.a
CC net/mac80211/eht.o
AR drivers/net/ethernet/neterion/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc.o
CC fs/nfs/nfs4namespace.o
CC drivers/ptp/ptp_vclock.o
CC drivers/acpi/acpica/tbutils.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
CC arch/x86/kernel/trace_clock.o
CC drivers/input/input-leds.o
CC lib/strnlen_user.o
CC drivers/power/supply/power_supply_core.o
CC kernel/utsname.o
CC drivers/acpi/acpica/tbxface.o
AR drivers/pps/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt.o
CC net/ipv4/gre_offload.o
AR drivers/net/ethernet/netronome/built-in.a
CC fs/fs_struct.o
CC drivers/acpi/processor_throttling.o
CC [M] drivers/gpu/drm/xe/xe_guc_ads.o
CC net/ipv4/metrics.o
AR drivers/i2c/built-in.a
CC kernel/pid_namespace.o
CC drivers/net/ethernet/intel/e1000/e1000_param.o
CC net/mac80211/led.o
CC drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
CC drivers/power/supply/power_supply_sysfs.o
CC drivers/net/ethernet/intel/e1000e/nvm.o
CC fs/nfs/nfs4getroot.o
CC fs/statfs.o
AR drivers/net/ethernet/ni/built-in.a
CC drivers/acpi/processor_perflib.o
CC drivers/acpi/acpica/tbxfload.o
CC lib/net_utils.o
CC drivers/gpu/drm/drm_modeset_lock.o
CC drivers/input/evdev.o
CC kernel/stop_machine.o
CC drivers/power/supply/power_supply_leds.o
CC drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.o
CC drivers/ptp/ptp_kvm_x86.o
CC arch/x86/kernel/trace.o
CC net/mac80211/pm.o
CC drivers/hwmon/hwmon.o
CC net/ipv4/netlink.o
CC lib/sg_pool.o
CC drivers/acpi/container.o
CC drivers/acpi/acpica/tbxfroot.o
CC kernel/audit.o
CC net/ipv6/esp6.o
AR drivers/net/ethernet/marvell/built-in.a
CC fs/nfs/nfs4client.o
CC arch/x86/kernel/rethook.o
CC drivers/power/supply/power_supply_hwmon.o
CC drivers/ptp/ptp_kvm_common.o
CC [M] drivers/gpu/drm/xe/xe_guc_capture.o
CC drivers/acpi/thermal_lib.o
AR drivers/thermal/broadcom/built-in.a
AR drivers/thermal/renesas/built-in.a
AR drivers/watchdog/built-in.a
CC net/ipv4/nexthop.o
AR drivers/thermal/samsung/built-in.a
CC drivers/gpu/drm/drm_plane.o
CC drivers/acpi/acpica/utaddress.o
CC drivers/thermal/intel/intel_tcc.o
CC net/mac80211/rc80211_minstrel_ht.o
CC drivers/gpu/drm/drm_prime.o
AR drivers/thermal/st/built-in.a
CC net/ipv6/sit.o
CC drivers/thermal/intel/therm_throt.o
AR drivers/usb/host/built-in.a
AR drivers/usb/built-in.a
CC arch/x86/kernel/vmcore_info_32.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.o
CC net/mac80211/wbrf.o
CC drivers/gpu/drm/drm_print.o
CC arch/x86/kernel/machine_kexec_32.o
CC drivers/net/ethernet/nvidia/forcedeth.o
CC kernel/auditfilter.o
CC drivers/md/md.o
AR drivers/thermal/qcom/built-in.a
CC drivers/gpu/drm/drm_property.o
CC [M] drivers/gpu/drm/xe/xe_guc_ct.o
CC drivers/acpi/thermal.o
CC drivers/md/md-bitmap.o
AR drivers/thermal/tegra/built-in.a
CC drivers/acpi/nhlt.o
AR drivers/net/ethernet/oki-semi/built-in.a
CC fs/nfs/nfs4session.o
CC fs/fs_pin.o
AS arch/x86/kernel/relocate_kernel_32.o
CC lib/stackdepot.o
CC drivers/md/md-autodetect.o
CC drivers/acpi/acpica/utalloc.o
CC drivers/acpi/acpica/utascii.o
CC drivers/net/ethernet/intel/e1000e/phy.o
AR drivers/net/ethernet/intel/e1000/built-in.a
AR drivers/net/ethernet/packetengines/built-in.a
AR drivers/power/supply/built-in.a
CC net/ipv4/udp_tunnel_stub.o
AR drivers/power/built-in.a
CC fs/nsfs.o
CC fs/nfs/dns_resolve.o
CC drivers/acpi/acpica/utbuffer.o
CC drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
AR drivers/input/built-in.a
AR drivers/net/ethernet/qlogic/built-in.a
CC drivers/net/ethernet/intel/e1000e/param.o
CC net/ipv4/ip_tunnel.o
CC arch/x86/kernel/crash_dump_32.o
CC [M] drivers/gpu/drm/xe/xe_guc_db_mgr.o
CC kernel/auditsc.o
AR drivers/ptp/built-in.a
CC lib/asn1_decoder.o
CC net/ipv6/addrconf_core.o
CC fs/nfs/nfs4trace.o
CC drivers/gpu/drm/drm_rect.o
CC [M] drivers/gpu/drm/xe/xe_guc_hwconfig.o
AR drivers/net/ethernet/qualcomm/emac/built-in.a
AR drivers/net/ethernet/qualcomm/built-in.a
CC drivers/acpi/acpi_memhotplug.o
CC drivers/md/dm.o
CC drivers/acpi/acpica/utcksum.o
CC drivers/md/dm-table.o
CC drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
GEN lib/oid_registry_data.c
CC net/ipv4/sysctl_net_ipv4.o
CC fs/nfs/nfs4sysctl.o
CC drivers/net/ethernet/intel/e1000e/ethtool.o
AR drivers/hwmon/built-in.a
CC drivers/md/dm-target.o
CC kernel/audit_watch.o
CC kernel/audit_fsnotify.o
AR drivers/thermal/intel/built-in.a
CC arch/x86/kernel/crash.o
AR drivers/thermal/mediatek/built-in.a
CC drivers/thermal/thermal_core.o
CC drivers/thermal/thermal_sysfs.o
CC lib/ucs2_string.o
CC arch/x86/kernel/module.o
CC drivers/acpi/acpica/utcopy.o
CC drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
CC drivers/net/ethernet/intel/e1000e/netdev.o
CC drivers/net/ethernet/realtek/8139too.o
CC drivers/gpu/drm/drm_syncobj.o
AR drivers/net/ethernet/renesas/built-in.a
CC net/ipv4/proc.o
CC net/ipv6/exthdrs_core.o
CC drivers/thermal/thermal_trip.o
AR drivers/net/ethernet/rdc/built-in.a
CC fs/fs_types.o
CC lib/sbitmap.o
CC [M] drivers/gpu/drm/xe/xe_guc_id_mgr.o
CC drivers/thermal/thermal_helpers.o
AR drivers/net/ethernet/rocker/built-in.a
CC fs/fs_context.o
CC net/ipv4/fib_rules.o
CC drivers/md/dm-linear.o
CC drivers/acpi/ioapic.o
CC net/ipv6/ip6_checksum.o
CC drivers/thermal/thermal_hwmon.o
CC drivers/cpufreq/cpufreq.o
AR drivers/net/ethernet/samsung/built-in.a
CC drivers/acpi/acpica/utexcep.o
CC arch/x86/kernel/doublefault_32.o
CC arch/x86/kernel/early_printk.o
CC drivers/gpu/drm/drm_sysfs.o
CC fs/fs_parser.o
CC drivers/cpufreq/freq_table.o
CC lib/group_cpus.o
CC drivers/net/ethernet/intel/e1000e/ptp.o
CC drivers/gpu/drm/drm_trace_points.o
CC drivers/acpi/acpica/utdebug.o
CC drivers/md/dm-stripe.o
CC drivers/acpi/battery.o
CC kernel/audit_tree.o
CC fs/fsopen.o
CC net/ipv6/ip6_icmp.o
CC [M] drivers/gpu/drm/xe/xe_guc_klv_helpers.o
CC lib/fw_table.o
CC drivers/gpu/drm/drm_vblank.o
CC net/ipv4/ipmr.o
CC drivers/gpu/drm/i915/gt/intel_gt_irq.o
CC fs/init.o
CC drivers/md/dm-ioctl.o
CC drivers/acpi/bgrt.o
CC net/ipv6/output_core.o
CC drivers/acpi/acpica/utdecode.o
CC kernel/kprobes.o
CC drivers/cpufreq/cpufreq_performance.o
CC drivers/cpufreq/cpufreq_userspace.o
CC net/ipv4/ipmr_base.o
CC drivers/cpufreq/cpufreq_ondemand.o
CC drivers/cpuidle/governors/menu.o
CC drivers/md/dm-io.o
CC kernel/seccomp.o
CC fs/kernel_read_file.o
CC [M] drivers/gpu/drm/xe/xe_guc_log.o
AR lib/lib.a
CC drivers/cpuidle/governors/haltpoll.o
CC drivers/gpu/drm/drm_vblank_work.o
CC arch/x86/kernel/hpet.o
GEN lib/crc32table.h
CC lib/oid_registry.o
CC drivers/thermal/gov_step_wise.o
CC drivers/acpi/spcr.o
CC drivers/acpi/acpica/utdelete.o
CC drivers/cpuidle/cpuidle.o
CC kernel/relay.o
CC drivers/net/ethernet/realtek/r8169_main.o
CC drivers/cpufreq/cpufreq_governor.o
CC drivers/cpufreq/cpufreq_governor_attr_set.o
CC net/ipv6/protocol.o
CC drivers/gpu/drm/i915/gt/intel_gt_mcr.o
CC drivers/cpufreq/acpi-cpufreq.o
CC drivers/cpufreq/amd-pstate.o
CC drivers/cpufreq/amd-pstate-trace.o
CC net/ipv6/ip6_offload.o
CC drivers/cpuidle/driver.o
CC drivers/acpi/acpica/uterror.o
CC drivers/net/ethernet/realtek/r8169_firmware.o
CC drivers/acpi/acpica/uteval.o
CC drivers/acpi/acpica/utglobal.o
AR drivers/mmc/built-in.a
AR drivers/ufs/built-in.a
CC drivers/md/dm-kcopyd.o
CC drivers/thermal/gov_user_space.o
CC net/ipv6/tcpv6_offload.o
CC lib/crc32.o
AR drivers/net/ethernet/seeq/built-in.a
CC drivers/net/ethernet/realtek/r8169_phy_config.o
CC drivers/acpi/acpica/uthex.o
CC [M] drivers/gpu/drm/xe/xe_guc_pc.o
CC net/ipv4/syncookies.o
CC fs/mnt_idmapping.o
CC drivers/cpuidle/governor.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm.o
CC drivers/acpi/acpica/utids.o
CC kernel/utsname_sysctl.o
CC drivers/md/dm-sysfs.o
AR drivers/net/ethernet/nvidia/built-in.a
AR drivers/firmware/arm_ffa/built-in.a
AR drivers/firmware/arm_scmi/built-in.a
CC kernel/delayacct.o
CC fs/remap_range.o
AR drivers/firmware/broadcom/built-in.a
AR drivers/firmware/cirrus/built-in.a
CC drivers/md/dm-stats.o
CC drivers/acpi/acpica/utinit.o
AR drivers/firmware/meson/built-in.a
AR drivers/firmware/microchip/built-in.a
CC drivers/gpu/drm/drm_vma_manager.o
CC [M] drivers/gpu/drm/xe/xe_guc_submit.o
CC drivers/firmware/efi/efi-bgrt.o
CC drivers/gpu/drm/drm_writeback.o
AR drivers/thermal/built-in.a
CC drivers/firmware/efi/efi.o
CC drivers/firmware/efi/libstub/efi-stub-helper.o
CC arch/x86/kernel/amd_nb.o
AR drivers/net/ethernet/silan/built-in.a
AR drivers/firmware/imx/built-in.a
CC drivers/cpufreq/intel_pstate.o
CC [M] drivers/gpu/drm/xe/xe_heci_gsc.o
CC drivers/cpuidle/sysfs.o
CC drivers/firmware/efi/libstub/gop.o
CC net/ipv4/tunnel4.o
AR lib/built-in.a
AR drivers/crypto/stm32/built-in.a
AR drivers/crypto/xilinx/built-in.a
AR drivers/crypto/hisilicon/built-in.a
AR drivers/cpuidle/governors/built-in.a
AR drivers/crypto/intel/keembay/built-in.a
AR drivers/firmware/psci/built-in.a
CC drivers/gpu/drm/drm_panel.o
AR drivers/firmware/qcom/built-in.a
AR drivers/crypto/intel/ixp4xx/built-in.a
AR drivers/crypto/intel/built-in.a
AR drivers/net/ethernet/sis/built-in.a
CC kernel/taskstats.o
CC net/ipv6/exthdrs_offload.o
CC drivers/firmware/efi/vars.o
AR drivers/crypto/starfive/built-in.a
AR drivers/crypto/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
CC drivers/clocksource/acpi_pm.o
AR drivers/firmware/smccc/built-in.a
CC arch/x86/kernel/kvm.o
CC drivers/cpuidle/poll_state.o
CC drivers/acpi/acpica/utlock.o
CC net/ipv4/ipconfig.o
CC drivers/firmware/efi/reboot.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
CC drivers/clocksource/i8253.o
CC drivers/cpuidle/cpuidle-haltpoll.o
CC arch/x86/kernel/kvmclock.o
CC drivers/hid/usbhid/hid-core.o
CC drivers/hid/hid-core.o
CC drivers/acpi/acpica/utmath.o
AR net/mac80211/built-in.a
CC fs/pidfs.o
AR drivers/net/ethernet/sfc/built-in.a
CC drivers/hid/usbhid/hiddev.o
CC drivers/acpi/acpica/utmisc.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
AR drivers/firmware/tegra/built-in.a
AR fs/nfs/built-in.a
CC drivers/hid/hid-input.o
CC net/ipv6/inet6_hashtables.o
CC drivers/firmware/efi/memattr.o
CC drivers/firmware/efi/tpm.o
AR drivers/net/ethernet/smsc/built-in.a
CC kernel/tsacct.o
CC kernel/tracepoint.o
CC drivers/hid/hid-quirks.o
AR drivers/firmware/xilinx/built-in.a
CC fs/buffer.o
CC arch/x86/kernel/paravirt.o
CC drivers/firmware/efi/libstub/secureboot.o
CC drivers/md/dm-rq.o
AR drivers/platform/x86/amd/built-in.a
AR drivers/net/ethernet/socionext/built-in.a
CC drivers/firmware/efi/memmap.o
AR drivers/platform/x86/intel/built-in.a
AR drivers/platform/surface/built-in.a
CC drivers/hid/usbhid/hid-pidff.o
CC drivers/platform/x86/wmi.o
CC drivers/hid/hid-debug.o
CC drivers/acpi/acpica/utmutex.o
CC fs/mpage.o
AR drivers/net/ethernet/stmicro/built-in.a
AR drivers/cpuidle/built-in.a
CC drivers/firmware/efi/libstub/tpm.o
CC drivers/firmware/efi/capsule.o
CC fs/proc_namespace.o
AR drivers/clocksource/built-in.a
CC net/ipv6/mcast_snoop.o
CC arch/x86/kernel/pvclock.o
CC drivers/firmware/efi/libstub/file.o
CC drivers/firmware/dmi_scan.o
CC drivers/hid/hidraw.o
AR drivers/net/ethernet/sun/built-in.a
CC drivers/firmware/efi/esrt.o
CC fs/direct-io.o
CC drivers/platform/x86/wmi-bmof.o
CC drivers/md/dm-io-rewind.o
CC kernel/irq_work.o
AR drivers/net/ethernet/tehuti/built-in.a
CC drivers/firmware/efi/libstub/mem.o
CC drivers/mailbox/mailbox.o
CC drivers/acpi/acpica/utnonansi.o
AR drivers/perf/built-in.a
CC kernel/static_call.o
CC drivers/firmware/efi/runtime-wrappers.o
CC drivers/firmware/efi/libstub/random.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_group.o
CC drivers/gpu/drm/i915/gt/intel_gt_requests.o
CC [M] drivers/gpu/drm/xe/xe_hw_fence.o
CC [M] drivers/gpu/drm/xe/xe_huc.o
CC drivers/firmware/efi/libstub/randomalloc.o
CC drivers/acpi/acpica/utobject.o
AR drivers/hwtracing/intel_th/built-in.a
CC drivers/firmware/efi/libstub/pci.o
AR drivers/net/ethernet/ti/built-in.a
AR drivers/android/built-in.a
CC drivers/mailbox/pcc.o
CC drivers/gpu/drm/drm_pci.o
CC fs/eventpoll.o
CC drivers/firmware/efi/libstub/skip_spaces.o
CC arch/x86/kernel/pcspeaker.o
CC drivers/md/dm-builtin.o
CC drivers/hid/hid-generic.o
CC net/ipv4/netfilter.o
CC drivers/acpi/acpica/utosi.o
AR drivers/net/ethernet/vertexcom/built-in.a
CC drivers/acpi/acpica/utownerid.o
AR drivers/net/ethernet/via/built-in.a
CC fs/anon_inodes.o
CC drivers/firmware/dmi-id.o
CC [M] drivers/gpu/drm/xe/xe_irq.o
CC drivers/platform/x86/eeepc-laptop.o
CC drivers/gpu/drm/drm_debugfs.o
CC drivers/platform/x86/p2sb.o
CC drivers/md/dm-raid1.o
AR drivers/nvmem/layouts/built-in.a
CC drivers/nvmem/core.o
CC arch/x86/kernel/check.o
CC kernel/padata.o
CC drivers/firmware/efi/libstub/lib-cmdline.o
CC drivers/firmware/efi/capsule-loader.o
CC net/ipv4/tcp_cubic.o
CC drivers/firmware/memmap.o
AR drivers/net/ethernet/wangxun/built-in.a
AR drivers/net/ethernet/wiznet/built-in.a
CC drivers/md/dm-log.o
CC drivers/firmware/efi/libstub/lib-ctype.o
CC drivers/firmware/efi/earlycon.o
CC kernel/jump_label.o
CC fs/signalfd.o
CC [M] drivers/gpu/drm/xe/xe_lrc.o
CC net/ipv4/tcp_sigpool.o
CC drivers/hid/hid-a4tech.o
AR drivers/net/ethernet/xilinx/built-in.a
AR drivers/net/ethernet/xircom/built-in.a
CC [M] drivers/gpu/drm/xe/xe_migrate.o
CC kernel/context_tracking.o
AR drivers/net/ethernet/synopsys/built-in.a
CC fs/timerfd.o
CC arch/x86/kernel/uprobes.o
CC drivers/acpi/acpica/utpredef.o
AR drivers/hid/usbhid/built-in.a
AR net/ipv6/built-in.a
CC net/ipv4/cipso_ipv4.o
CC drivers/firmware/efi/libstub/alignedmem.o
CC drivers/md/dm-region-hash.o
AR drivers/cpufreq/built-in.a
CC fs/eventfd.o
CC net/ipv4/xfrm4_policy.o
AR drivers/mailbox/built-in.a
CC drivers/gpu/drm/drm_debugfs_crc.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
CC arch/x86/kernel/perf_regs.o
CC drivers/hid/hid-apple.o
CC drivers/firmware/efi/libstub/relocate.o
CC drivers/acpi/acpica/utresdecode.o
CC drivers/md/dm-zero.o
CC drivers/gpu/drm/drm_panel_orientation_quirks.o
AR drivers/net/ethernet/realtek/built-in.a
CC drivers/gpu/drm/drm_buddy.o
CC arch/x86/kernel/tracepoint.o
AR drivers/net/ethernet/intel/e1000e/built-in.a
CC arch/x86/kernel/itmt.o
AR drivers/net/ethernet/intel/built-in.a
AR drivers/net/ethernet/pensando/built-in.a
AR drivers/net/ethernet/built-in.a
CC net/ipv4/xfrm4_state.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
CC kernel/iomem.o
CC [M] drivers/gpu/drm/xe/xe_mmio.o
CC drivers/firmware/efi/libstub/printk.o
AR drivers/net/built-in.a
CC drivers/gpu/drm/drm_gem_shmem_helper.o
CC net/ipv4/xfrm4_input.o
CC drivers/firmware/efi/libstub/vsprintf.o
CC drivers/gpu/drm/i915/gt/intel_gtt.o
CC drivers/hid/hid-belkin.o
CC drivers/acpi/acpica/utresrc.o
CC kernel/rseq.o
CC fs/aio.o
CC arch/x86/kernel/umip.o
CC arch/x86/kernel/unwind_frame.o
CC drivers/firmware/efi/libstub/x86-stub.o
CC drivers/acpi/acpica/utstate.o
CC drivers/gpu/drm/drm_atomic_helper.o
CC fs/locks.o
CC [M] drivers/gpu/drm/xe/xe_mocs.o
CC drivers/firmware/efi/libstub/smbios.o
CC drivers/gpu/drm/i915/gt/intel_llc.o
AR drivers/platform/x86/built-in.a
CC drivers/acpi/acpica/utstring.o
CC net/ipv4/xfrm4_output.o
AR drivers/platform/built-in.a
CC drivers/hid/hid-cherry.o
CC drivers/gpu/drm/drm_atomic_state_helper.o
CC [M] drivers/gpu/drm/xe/xe_module.o
AR drivers/firmware/efi/built-in.a
CC net/ipv4/xfrm4_protocol.o
CC [M] drivers/gpu/drm/xe/xe_oa.o
CC drivers/gpu/drm/drm_crtc_helper.o
CC fs/binfmt_misc.o
CC drivers/hid/hid-chicony.o
CC drivers/acpi/acpica/utstrsuppt.o
STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
AR drivers/nvmem/built-in.a
CC drivers/acpi/acpica/utstrtoul64.o
CC drivers/gpu/drm/i915/gt/intel_lrc.o
STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
CC drivers/hid/hid-cypress.o
CC [M] drivers/gpu/drm/xe/xe_observation.o
CC fs/binfmt_script.o
AR drivers/md/built-in.a
CC drivers/gpu/drm/drm_damage_helper.o
CC drivers/gpu/drm/i915/gt/intel_migrate.o
STUBCPY drivers/firmware/efi/libstub/file.stub.o
CC drivers/acpi/acpica/utxface.o
STUBCPY drivers/firmware/efi/libstub/gop.stub.o
CC drivers/hid/hid-ezkey.o
CC [M] drivers/gpu/drm/xe/xe_pat.o
STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
CC fs/binfmt_elf.o
CC drivers/gpu/drm/i915/gt/intel_mocs.o
CC drivers/acpi/acpica/utxfinit.o
CC drivers/acpi/acpica/utxferror.o
CC drivers/gpu/drm/drm_encoder_slave.o
CC fs/mbcache.o
CC [M] drivers/gpu/drm/xe/xe_pci.o
CC drivers/gpu/drm/drm_flip_work.o
STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
CC drivers/gpu/drm/i915/gt/intel_ppgtt.o
STUBCPY drivers/firmware/efi/libstub/mem.stub.o
CC fs/posix_acl.o
CC drivers/gpu/drm/i915/gt/intel_rc6.o
CC drivers/hid/hid-gyration.o
CC drivers/gpu/drm/drm_format_helper.o
CC [M] drivers/gpu/drm/xe/xe_pcode.o
CC drivers/gpu/drm/i915/gt/intel_region_lmem.o
CC drivers/gpu/drm/drm_gem_atomic_helper.o
AR arch/x86/kernel/built-in.a
CC [M] drivers/gpu/drm/xe/xe_pm.o
AR arch/x86/built-in.a
CC drivers/gpu/drm/i915/gt/intel_renderstate.o
CC fs/coredump.o
AR kernel/built-in.a
CC drivers/gpu/drm/drm_gem_framebuffer_helper.o
CC [M] drivers/gpu/drm/xe/xe_preempt_fence.o
CC drivers/acpi/acpica/utxfmutex.o
CC drivers/gpu/drm/i915/gt/intel_reset.o
STUBCPY drivers/firmware/efi/libstub/pci.stub.o
STUBCPY drivers/firmware/efi/libstub/printk.stub.o
STUBCPY drivers/firmware/efi/libstub/random.stub.o
CC drivers/hid/hid-ite.o
STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
CC [M] drivers/gpu/drm/xe/xe_pt.o
STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
CC drivers/gpu/drm/drm_kms_helper_common.o
STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
STUBCPY drivers/firmware/efi/libstub/smbios.stub.o
STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
CC drivers/hid/hid-kensington.o
AR drivers/firmware/efi/libstub/lib.a
CC drivers/gpu/drm/i915/gt/intel_ring.o
CC drivers/gpu/drm/drm_modeset_helper.o
AR drivers/firmware/built-in.a
CC fs/drop_caches.o
CC drivers/gpu/drm/i915/gt/intel_ring_submission.o
CC drivers/hid/hid-lg.o
CC drivers/hid/hid-lgff.o
CC drivers/hid/hid-lg4ff.o
CC [M] drivers/gpu/drm/xe/xe_pt_walk.o
CC drivers/gpu/drm/i915/gt/intel_rps.o
CC [M] drivers/gpu/drm/xe/xe_pxp.o
CC drivers/hid/hid-lg-g15.o
AR drivers/acpi/acpica/built-in.a
CC fs/sysctls.o
AR drivers/acpi/built-in.a
CC drivers/hid/hid-microsoft.o
CC drivers/gpu/drm/i915/gt/intel_sa_media.o
CC drivers/hid/hid-monterey.o
CC fs/fhandle.o
AR net/ipv4/built-in.a
AR net/built-in.a
CC drivers/hid/hid-ntrig.o
CC [M] drivers/gpu/drm/xe/xe_pxp_debugfs.o
CC drivers/gpu/drm/drm_plane_helper.o
CC drivers/gpu/drm/i915/gt/intel_sseu.o
CC [M] drivers/gpu/drm/xe/xe_pxp_submit.o
CC drivers/gpu/drm/drm_probe_helper.o
CC drivers/gpu/drm/drm_self_refresh_helper.o
CC [M] drivers/gpu/drm/xe/xe_query.o
CC drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
CC drivers/hid/hid-pl.o
CC drivers/gpu/drm/i915/gt/intel_timeline.o
CC drivers/gpu/drm/drm_simple_kms_helper.o
CC drivers/hid/hid-petalynx.o
CC [M] drivers/gpu/drm/xe/xe_range_fence.o
CC drivers/gpu/drm/i915/gt/intel_tlb.o
CC drivers/gpu/drm/bridge/panel.o
CC drivers/hid/hid-redragon.o
CC drivers/gpu/drm/i915/gt/intel_wopcm.o
CC drivers/hid/hid-samsung.o
CC drivers/gpu/drm/drm_mipi_dsi.o
CC [M] drivers/gpu/drm/xe/xe_reg_sr.o
CC [M] drivers/gpu/drm/xe/xe_reg_whitelist.o
CC drivers/hid/hid-sony.o
CC drivers/gpu/drm/i915/gt/intel_workarounds.o
CC [M] drivers/gpu/drm/drm_exec.o
CC drivers/gpu/drm/i915/gt/shmem_utils.o
CC [M] drivers/gpu/drm/xe/xe_rtp.o
CC drivers/gpu/drm/i915/gt/sysfs_engines.o
CC [M] drivers/gpu/drm/drm_gpuvm.o
CC [M] drivers/gpu/drm/xe/xe_ring_ops.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
CC drivers/hid/hid-sunplus.o
CC drivers/gpu/drm/i915/gt/gen6_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_sa.o
CC drivers/hid/hid-topseed.o
CC [M] drivers/gpu/drm/drm_suballoc.o
CC drivers/gpu/drm/i915/gt/gen7_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_sched_job.o
CC drivers/gpu/drm/i915/gt/gen8_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_step.o
CC drivers/gpu/drm/i915/gt/gen9_renderstate.o
CC [M] drivers/gpu/drm/drm_gem_ttm_helper.o
CC [M] drivers/gpu/drm/xe/xe_sync.o
CC drivers/gpu/drm/i915/gem/i915_gem_busy.o
CC drivers/gpu/drm/i915/gem/i915_gem_clflush.o
CC [M] drivers/gpu/drm/xe/xe_tile.o
CC drivers/gpu/drm/i915/gem/i915_gem_context.o
CC [M] drivers/gpu/drm/xe/xe_tile_sysfs.o
CC drivers/gpu/drm/i915/gem/i915_gem_create.o
CC [M] drivers/gpu/drm/xe/xe_trace.o
CC [M] drivers/gpu/drm/xe/xe_trace_bo.o
CC drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
CC [M] drivers/gpu/drm/xe/xe_trace_guc.o
CC drivers/gpu/drm/i915/gem/i915_gem_domain.o
CC [M] drivers/gpu/drm/xe/xe_trace_lrc.o
CC drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
AR fs/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_internal.o
CC drivers/gpu/drm/i915/gem/i915_gem_lmem.o
CC [M] drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
CC drivers/gpu/drm/i915/gem/i915_gem_mman.o
CC [M] drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
CC drivers/gpu/drm/i915/gem/i915_gem_object.o
CC [M] drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
CC drivers/gpu/drm/i915/gem/i915_gem_pages.o
CC [M] drivers/gpu/drm/xe/xe_tuning.o
CC drivers/gpu/drm/i915/gem/i915_gem_phys.o
CC [M] drivers/gpu/drm/xe/xe_uc.o
CC drivers/gpu/drm/i915/gem/i915_gem_pm.o
CC drivers/gpu/drm/i915/gem/i915_gem_region.o
CC [M] drivers/gpu/drm/xe/xe_uc_fw.o
CC drivers/gpu/drm/i915/gem/i915_gem_shmem.o
LD [M] drivers/gpu/drm/drm_suballoc_helper.o
CC [M] drivers/gpu/drm/xe/xe_vm.o
CC drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
CC [M] drivers/gpu/drm/xe/xe_vram.o
CC drivers/gpu/drm/i915/gem/i915_gem_stolen.o
LD [M] drivers/gpu/drm/drm_ttm_helper.o
CC [M] drivers/gpu/drm/xe/xe_vram_freq.o
CC [M] drivers/gpu/drm/xe/xe_wait_user_fence.o
CC [M] drivers/gpu/drm/xe/xe_wa.o
CC [M] drivers/gpu/drm/xe/xe_wopcm.o
CC [M] drivers/gpu/drm/xe/xe_hmm.o
CC drivers/gpu/drm/i915/gem/i915_gem_throttle.o
CC drivers/gpu/drm/i915/gem/i915_gem_tiling.o
CC [M] drivers/gpu/drm/xe/xe_hwmon.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
AR drivers/hid/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_relay.o
CC [M] drivers/gpu/drm/xe/xe_memirq.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
CC drivers/gpu/drm/i915/gem/i915_gem_userptr.o
CC drivers/gpu/drm/i915/gem/i915_gem_wait.o
CC [M] drivers/gpu/drm/xe/xe_sriov.o
CC [M] drivers/gpu/drm/xe/xe_sriov_vf.o
CC drivers/gpu/drm/i915/gem/i915_gemfs.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_irq.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_utils.o
CC [M] drivers/gpu/drm/xe/display/intel_bo.o
CC [M] drivers/gpu/drm/xe/display/intel_fb_bo.o
CC [M] drivers/gpu/drm/xe/display/intel_fbdev_fb.o
CC drivers/gpu/drm/i915/i915_active.o
CC [M] drivers/gpu/drm/xe/display/xe_display.o
CC drivers/gpu/drm/i915/i915_cmd_parser.o
CC [M] drivers/gpu/drm/xe/display/xe_display_misc.o
CC drivers/gpu/drm/i915/i915_deps.o
CC drivers/gpu/drm/i915/i915_gem.o
CC [M] drivers/gpu/drm/xe/display/xe_display_rps.o
CC [M] drivers/gpu/drm/xe/display/xe_display_wa.o
CC [M] drivers/gpu/drm/xe/display/xe_dsb_buffer.o
CC drivers/gpu/drm/i915/i915_gem_evict.o
CC [M] drivers/gpu/drm/xe/display/xe_fb_pin.o
CC drivers/gpu/drm/i915/i915_gem_gtt.o
CC [M] drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
CC drivers/gpu/drm/i915/i915_gem_ww.o
CC drivers/gpu/drm/i915/i915_query.o
CC [M] drivers/gpu/drm/xe/display/xe_plane_initial.o
CC [M] drivers/gpu/drm/xe/display/xe_tdf.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_dram.o
CC drivers/gpu/drm/i915/i915_request.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_pch.o
CC drivers/gpu/drm/i915/i915_scheduler.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_rom.o
CC [M] drivers/gpu/drm/xe/i915-display/icl_dsi.o
CC drivers/gpu/drm/i915/i915_trace_points.o
CC drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_alpm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic.o
CC drivers/gpu/drm/i915/i915_vma.o
CC drivers/gpu/drm/i915/i915_vma_resource.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_audio.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bios.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bw.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cdclk.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_color.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_connector.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cursor.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_device.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_driver.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_params.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
CC drivers/gpu/drm/i915/gt/intel_gsc.o
CC drivers/gpu/drm/i915/i915_hwmon.o
CC drivers/gpu/drm/i915/display/hsw_ips.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_trace.o
CC drivers/gpu/drm/i915/display/i9xx_plane.o
CC drivers/gpu/drm/i915/display/i9xx_display_sr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_wa.o
CC drivers/gpu/drm/i915/display/i9xx_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc.o
CC drivers/gpu/drm/i915/display/intel_alpm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
CC drivers/gpu/drm/i915/display/intel_atomic.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
CC drivers/gpu/drm/i915/display/intel_atomic_plane.o
CC drivers/gpu/drm/i915/display/intel_audio.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
CC drivers/gpu/drm/i915/display/intel_bios.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_test.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll.o
CC drivers/gpu/drm/i915/display/intel_bo.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
CC drivers/gpu/drm/i915/display/intel_bw.o
CC drivers/gpu/drm/i915/display/intel_cdclk.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
CC drivers/gpu/drm/i915/display/intel_color.o
CC drivers/gpu/drm/i915/display/intel_combo_phy.o
CC drivers/gpu/drm/i915/display/intel_connector.o
CC drivers/gpu/drm/i915/display/intel_crtc.o
CC drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
CC drivers/gpu/drm/i915/display/intel_cursor.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_drrs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsb.o
CC drivers/gpu/drm/i915/display/intel_display.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi.o
CC drivers/gpu/drm/i915/display/intel_display_driver.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_encoder.o
CC drivers/gpu/drm/i915/display/intel_display_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fb.o
CC drivers/gpu/drm/i915/display/intel_display_params.o
CC drivers/gpu/drm/i915/display/intel_display_power.o
CC drivers/gpu/drm/i915/display/intel_display_power_map.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fbc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fdi.o
CC drivers/gpu/drm/i915/display/intel_display_power_well.o
CC drivers/gpu/drm/i915/display/intel_display_reset.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_global_state.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_gmbus.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp.o
CC drivers/gpu/drm/i915/display/intel_display_rps.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp_gsc_message.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdmi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug.o
CC drivers/gpu/drm/i915/display/intel_display_snapshot.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hti.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_link_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_lspcon.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
CC drivers/gpu/drm/i915/display/intel_display_wa.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_panel.o
CC drivers/gpu/drm/i915/display/intel_dmc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pfit.o
CC drivers/gpu/drm/i915/display/intel_dmc_wl.o
CC drivers/gpu/drm/i915/display/intel_dpio_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
CC drivers/gpu/drm/i915/display/intel_dpll.o
CC drivers/gpu/drm/i915/display/intel_dpll_mgr.o
CC drivers/gpu/drm/i915/display/intel_dpt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pps.o
CC drivers/gpu/drm/i915/display/intel_dpt_common.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_psr.o
CC drivers/gpu/drm/i915/display/intel_drrs.o
CC drivers/gpu/drm/i915/display/intel_dsb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_quirks.o
CC drivers/gpu/drm/i915/display/intel_dsb_buffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_tc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vblank.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vdsc.o
CC drivers/gpu/drm/i915/display/intel_fb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vga.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vrr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc_wl.o
CC drivers/gpu/drm/i915/display/intel_fb_bo.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_scaler.o
CC drivers/gpu/drm/i915/display/intel_fb_pin.o
CC drivers/gpu/drm/i915/display/intel_fbc.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_watermark.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_acpi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_opregion.o
CC [M] drivers/gpu/drm/xe/xe_debugfs.o
CC drivers/gpu/drm/i915/display/intel_fdi.o
CC [M] drivers/gpu/drm/xe/xe_gt_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_gt_stats.o
CC drivers/gpu/drm/i915/display/intel_fifo_underrun.o
CC [M] drivers/gpu/drm/xe/xe_guc_debugfs.o
CC drivers/gpu/drm/i915/display/intel_frontbuffer.o
CC drivers/gpu/drm/i915/display/intel_global_state.o
CC drivers/gpu/drm/i915/display/intel_hdcp.o
CC [M] drivers/gpu/drm/xe/xe_huc_debugfs.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
CC [M] drivers/gpu/drm/xe/xe_uc_debugfs.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_hotplug.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/intel_hotplug_irq.o
CC drivers/gpu/drm/i915/display/intel_hti.o
CC drivers/gpu/drm/i915/display/intel_link_bw.o
CC drivers/gpu/drm/i915/display/intel_load_detect.o
CC drivers/gpu/drm/i915/display/intel_lpe_audio.o
CC drivers/gpu/drm/i915/display/intel_modeset_lock.o
CC drivers/gpu/drm/i915/display/intel_modeset_setup.o
CC drivers/gpu/drm/i915/display/intel_modeset_verify.o
CC drivers/gpu/drm/i915/display/intel_overlay.o
CC drivers/gpu/drm/i915/display/intel_pch_display.o
CC drivers/gpu/drm/i915/display/intel_pch_refclk.o
CC drivers/gpu/drm/i915/display/intel_plane_initial.o
CC drivers/gpu/drm/i915/display/intel_pmdemand.o
CC drivers/gpu/drm/i915/display/intel_psr.o
CC drivers/gpu/drm/i915/display/intel_quirks.o
CC drivers/gpu/drm/i915/display/intel_sprite.o
CC drivers/gpu/drm/i915/display/intel_sprite_uapi.o
CC drivers/gpu/drm/i915/display/intel_tc.o
CC drivers/gpu/drm/i915/display/intel_vblank.o
CC drivers/gpu/drm/i915/display/intel_vga.o
CC drivers/gpu/drm/i915/display/intel_wm.o
CC drivers/gpu/drm/i915/display/skl_scaler.o
CC drivers/gpu/drm/i915/display/skl_universal_plane.o
CC drivers/gpu/drm/i915/display/skl_watermark.o
CC drivers/gpu/drm/i915/display/intel_acpi.o
CC drivers/gpu/drm/i915/display/intel_opregion.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs_params.o
CC drivers/gpu/drm/i915/display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/dvo_ch7017.o
CC drivers/gpu/drm/i915/display/dvo_ch7xxx.o
CC drivers/gpu/drm/i915/display/dvo_ivch.o
CC drivers/gpu/drm/i915/display/dvo_ns2501.o
CC drivers/gpu/drm/i915/display/dvo_sil164.o
CC drivers/gpu/drm/i915/display/dvo_tfp410.o
CC drivers/gpu/drm/i915/display/g4x_dp.o
CC drivers/gpu/drm/i915/display/g4x_hdmi.o
CC drivers/gpu/drm/i915/display/icl_dsi.o
CC drivers/gpu/drm/i915/display/intel_backlight.o
CC drivers/gpu/drm/i915/display/intel_crt.o
CC drivers/gpu/drm/i915/display/intel_cx0_phy.o
CC drivers/gpu/drm/i915/display/intel_ddi.o
CC drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
CC drivers/gpu/drm/i915/display/intel_display_device.o
CC drivers/gpu/drm/i915/display/intel_display_trace.o
CC drivers/gpu/drm/i915/display/intel_dkl_phy.o
CC drivers/gpu/drm/i915/display/intel_dp.o
CC drivers/gpu/drm/i915/display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
CC drivers/gpu/drm/i915/display/intel_dp_hdcp.o
CC drivers/gpu/drm/i915/display/intel_dp_link_training.o
CC drivers/gpu/drm/i915/display/intel_dp_mst.o
CC drivers/gpu/drm/i915/display/intel_dp_test.o
CC drivers/gpu/drm/i915/display/intel_dsi.o
CC drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
CC drivers/gpu/drm/i915/display/intel_dsi_vbt.o
CC drivers/gpu/drm/i915/display/intel_dvo.o
CC drivers/gpu/drm/i915/display/intel_encoder.o
CC drivers/gpu/drm/i915/display/intel_gmbus.o
CC drivers/gpu/drm/i915/display/intel_hdmi.o
CC drivers/gpu/drm/i915/display/intel_lspcon.o
CC drivers/gpu/drm/i915/display/intel_lvds.o
CC drivers/gpu/drm/i915/display/intel_panel.o
CC drivers/gpu/drm/i915/display/intel_pfit.o
CC drivers/gpu/drm/i915/display/intel_pps.o
CC drivers/gpu/drm/i915/display/intel_qp_tables.o
CC drivers/gpu/drm/i915/display/intel_sdvo.o
CC drivers/gpu/drm/i915/display/intel_snps_phy.o
CC drivers/gpu/drm/i915/display/intel_tv.o
CC drivers/gpu/drm/i915/display/intel_vdsc.o
CC drivers/gpu/drm/i915/display/intel_vrr.o
CC drivers/gpu/drm/i915/display/vlv_dsi.o
CC drivers/gpu/drm/i915/display/vlv_dsi_pll.o
CC drivers/gpu/drm/i915/i915_perf.o
LD [M] drivers/gpu/drm/xe/xe.o
CC drivers/gpu/drm/i915/pxp/intel_pxp.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
CC drivers/gpu/drm/i915/i915_gpu_error.o
CC drivers/gpu/drm/i915/i915_vgpu.o
AR drivers/gpu/drm/i915/built-in.a
AR drivers/gpu/drm/built-in.a
AR drivers/gpu/built-in.a
AR drivers/built-in.a
AR built-in.a
AR vmlinux.a
LD vmlinux.o
OBJCOPY modules.builtin.modinfo
GEN modules.builtin
MODPOST Module.symvers
CC .vmlinux.export.o
CC [M] fs/efivarfs/efivarfs.mod.o
CC [M] .module-common.o
CC [M] drivers/gpu/drm/drm_exec.mod.o
CC [M] drivers/gpu/drm/drm_gpuvm.mod.o
CC [M] drivers/gpu/drm/drm_suballoc_helper.mod.o
CC [M] drivers/gpu/drm/drm_ttm_helper.mod.o
CC [M] drivers/gpu/drm/scheduler/gpu-sched.mod.o
CC [M] drivers/gpu/drm/xe/xe.mod.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.mod.o
CC [M] net/netfilter/nf_log_syslog.mod.o
CC [M] net/netfilter/xt_mark.mod.o
CC [M] net/netfilter/xt_nat.mod.o
CC [M] net/netfilter/xt_LOG.mod.o
CC [M] net/netfilter/xt_MASQUERADE.mod.o
CC [M] net/netfilter/xt_addrtype.mod.o
CC [M] net/ipv4/netfilter/iptable_nat.mod.o
LD [M] drivers/gpu/drm/drm_ttm_helper.ko
LD [M] fs/efivarfs/efivarfs.ko
LD [M] net/netfilter/xt_mark.ko
LD [M] net/netfilter/nf_log_syslog.ko
LD [M] drivers/gpu/drm/drm_gpuvm.ko
LD [M] drivers/gpu/drm/drm_exec.ko
LD [M] net/netfilter/xt_nat.ko
LD [M] net/netfilter/xt_addrtype.ko
LD [M] drivers/gpu/drm/scheduler/gpu-sched.ko
LD [M] drivers/gpu/drm/xe/xe.ko
LD [M] net/netfilter/xt_MASQUERADE.ko
LD [M] drivers/thermal/intel/x86_pkg_temp_thermal.ko
LD [M] net/ipv4/netfilter/iptable_nat.ko
LD [M] drivers/gpu/drm/drm_suballoc_helper.ko
LD [M] net/netfilter/xt_LOG.ko
UPD include/generated/utsversion.h
CC init/version-timestamp.o
KSYMS .tmp_vmlinux0.kallsyms.S
AS .tmp_vmlinux0.kallsyms.o
LD .tmp_vmlinux1
NM .tmp_vmlinux1.syms
KSYMS .tmp_vmlinux1.kallsyms.S
AS .tmp_vmlinux1.kallsyms.o
LD .tmp_vmlinux2
NM .tmp_vmlinux2.syms
KSYMS .tmp_vmlinux2.kallsyms.S
AS .tmp_vmlinux2.kallsyms.o
LD vmlinux
NM System.map
SORTTAB vmlinux
RELOCS arch/x86/boot/compressed/vmlinux.relocs
RSTRIP vmlinux
CC arch/x86/boot/a20.o
AS arch/x86/boot/bioscall.o
CC arch/x86/boot/cmdline.o
AS arch/x86/boot/copy.o
HOSTCC arch/x86/boot/mkcpustr
CC arch/x86/boot/cpuflags.o
CC arch/x86/boot/cpucheck.o
CC arch/x86/boot/early_serial_console.o
CC arch/x86/boot/edd.o
CC arch/x86/boot/main.o
CC arch/x86/boot/memory.o
CC arch/x86/boot/pm.o
AS arch/x86/boot/pmjump.o
CC arch/x86/boot/printf.o
CC arch/x86/boot/regs.o
CC arch/x86/boot/string.o
CC arch/x86/boot/tty.o
CC arch/x86/boot/video.o
CC arch/x86/boot/video-mode.o
CC arch/x86/boot/version.o
CC arch/x86/boot/video-vga.o
CC arch/x86/boot/video-vesa.o
CC arch/x86/boot/video-bios.o
HOSTCC arch/x86/boot/tools/build
LDS arch/x86/boot/compressed/vmlinux.lds
CPUSTR arch/x86/boot/cpustr.h
AS arch/x86/boot/compressed/kernel_info.o
AS arch/x86/boot/compressed/head_32.o
VOFFSET arch/x86/boot/compressed/../voffset.h
CC arch/x86/boot/cpu.o
CC arch/x86/boot/compressed/string.o
CC arch/x86/boot/compressed/cmdline.o
CC arch/x86/boot/compressed/error.o
OBJCOPY arch/x86/boot/compressed/vmlinux.bin
HOSTCC arch/x86/boot/compressed/mkpiggy
CC arch/x86/boot/compressed/cpuflags.o
CC arch/x86/boot/compressed/early_serial_console.o
CC arch/x86/boot/compressed/kaslr.o
CC arch/x86/boot/compressed/acpi.o
CC arch/x86/boot/compressed/efi.o
GZIP arch/x86/boot/compressed/vmlinux.bin.gz
CC arch/x86/boot/compressed/misc.o
MKPIGGY arch/x86/boot/compressed/piggy.S
AS arch/x86/boot/compressed/piggy.o
LD arch/x86/boot/compressed/vmlinux
ZOFFSET arch/x86/boot/zoffset.h
OBJCOPY arch/x86/boot/vmlinux.bin
AS arch/x86/boot/header.o
LD arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
BUILD arch/x86/boot/bzImage
Kernel: arch/x86/boot/bzImage is ready (#1)
run-parts: executing /workspace/ci/hooks/20-kernel-doc
+ SRC_DIR=/workspace/kernel
+ cd /workspace/kernel
+ find drivers/gpu/drm/xe/ -name '*.[ch]' -not -path 'drivers/gpu/drm/xe/display/*'
+ xargs ./scripts/kernel-doc -Werror -none include/uapi/drm/xe_drm.h
date: invalid date ‘+%s’
drivers/gpu/drm/xe/xe_vm.c:3183: warning: expecting prototype for xe_vm_bind_bo(). Prototype was for xe_vm_bind_kernel_bo() instead
drivers/gpu/drm/xe/xe_lrc.c:1027: warning: Function parameter or struct member 'flags' not described in 'xe_lrc_create'
drivers/gpu/drm/xe/xe_pxp_types.h:130: warning: Function parameter or struct member 'gsc_res' not described in 'xe_pxp'
drivers/gpu/drm/xe/xe_pxp_types.h:130: warning: Excess struct member 'gsc_exec' description in 'xe_pxp'
drivers/gpu/drm/xe/xe_pxp.c:266: warning: Function parameter or struct member 'xe' not described in 'xe_pxp_irq_handler'
drivers/gpu/drm/xe/xe_pxp.c:266: warning: Excess function parameter 'pxp' description in 'xe_pxp_irq_handler'
drivers/gpu/drm/xe/xe_pxp.c:486: warning: expecting prototype for xe_pxp_exec_queue_add(). Prototype was for PXP_TERMINATION_TIMEOUT_MS() instead
7 warnings as Errors
run-parts: /workspace/ci/hooks/20-kernel-doc exited with return code 123
^ permalink raw reply [flat|nested] 38+ messages in thread
* ✓ CI.checksparse: success for Add PXP HWDRM support (rev3)
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (16 preceding siblings ...)
2024-11-21 0:37 ` ✗ CI.Hooks: failure " Patchwork
@ 2024-11-21 0:39 ` Patchwork
2024-11-21 10:42 ` ✗ Xe.CI.Full: failure " Patchwork
18 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2024-11-21 0:39 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: intel-xe
== Series Details ==
Series: Add PXP HWDRM support (rev3)
URL : https://patchwork.freedesktop.org/series/136052/
State : success
== Summary ==
+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast e46649e7764a9f6868ccbcba7b8b23b413303380
/root/linux/maintainer-tools/dim: line 2068: sparse: command not found
Sparse version:
Fast mode used, each commit won't be checked separately.
Okay!
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP
2024-11-20 23:43 ` [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP Daniele Ceraolo Spurio
@ 2024-11-21 9:57 ` Jani Nikula
2024-11-21 17:21 ` Daniele Ceraolo Spurio
0 siblings, 1 reply; 38+ messages in thread
From: Jani Nikula @ 2024-11-21 9:57 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
Cc: Daniele Ceraolo Spurio, Matthew Brost, Thomas Hellström,
John Harrison
On Wed, 20 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
> index 419e8e926f00..533bc82255b6 100644
> --- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
> +++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
> @@ -9,6 +9,9 @@
> #include <linux/errno.h>
> #include <linux/types.h>
>
> +#include "xe_bo.h"
> +#include "xe_pxp.h"
> +
Can't have this. This will include xe_bo.h and xe_pxp.h from i915
display.
Basically you can't use gem_to_xe_bo() in static inlines in headers that
get included to i915 display. It all needs to stay opaque.
BR,
Jani.
> struct drm_gem_object;
> struct xe_pxp;
>
> @@ -16,7 +19,15 @@ static inline int intel_pxp_key_check(struct xe_pxp *pxp,
> struct drm_gem_object *obj,
> bool assign)
> {
> - return -ENODEV;
> + /*
> + * The assign variable is used in i915 to assign the key to the BO at
> + * first submission time. In Xe the key is instead assigned at BO
> + * creation time, so the assign variable must always be false.
> + */
> + if (assign)
> + return -EINVAL;
> +
> + return xe_pxp_key_check(pxp, gem_to_xe_bo(obj));
> }
>
> #endif
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 38+ messages in thread
* ✗ Xe.CI.Full: failure for Add PXP HWDRM support (rev3)
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
` (17 preceding siblings ...)
2024-11-21 0:39 ` ✓ CI.checksparse: success " Patchwork
@ 2024-11-21 10:42 ` Patchwork
18 siblings, 0 replies; 38+ messages in thread
From: Patchwork @ 2024-11-21 10:42 UTC (permalink / raw)
To: Daniele Ceraolo Spurio; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 119840 bytes --]
== Series Details ==
Series: Add PXP HWDRM support (rev3)
URL : https://patchwork.freedesktop.org/series/136052/
State : failure
== Summary ==
CI Bug Log - changes from xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380_full -> xe-pw-136052v3_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-136052v3_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-136052v3_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 xe-pw-136052v3_full:
### IGT changes ###
#### Possible regressions ####
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-dp-4:
- shard-dg2-set2: NOTRUN -> [INCOMPLETE][1]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-dp-4.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-wc:
- shard-dg2-set2: [PASS][2] -> [DMESG-WARN][3]
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-wc.html
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-433/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-mmap-wc.html
* igt@xe_exec_basic@once-basic-defer-bind:
- shard-bmg: [PASS][4] -> [DMESG-WARN][5] +3 other tests dmesg-warn
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-1/igt@xe_exec_basic@once-basic-defer-bind.html
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@xe_exec_basic@once-basic-defer-bind.html
* igt@xe_exec_queue_property@invalid-property:
- shard-lnl: [PASS][6] -> [ABORT][7]
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-7/igt@xe_exec_queue_property@invalid-property.html
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-7/igt@xe_exec_queue_property@invalid-property.html
* igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_prepare:
- shard-lnl: NOTRUN -> [FAIL][8]
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_prepare.html
* igt@xe_vm@bind-flag-invalid:
- shard-bmg: [PASS][9] -> [FAIL][10] +2 other tests fail
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@xe_vm@bind-flag-invalid.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@xe_vm@bind-flag-invalid.html
- shard-adlp: [PASS][11] -> [FAIL][12] +2 other tests fail
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-9/igt@xe_vm@bind-flag-invalid.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_vm@bind-flag-invalid.html
- shard-lnl: [PASS][13] -> [FAIL][14] +1 other test fail
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-1/igt@xe_vm@bind-flag-invalid.html
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-5/igt@xe_vm@bind-flag-invalid.html
#### Warnings ####
* igt@kms_flip@flip-vs-rmfb-interruptible@d-hdmi-a3:
- shard-bmg: [DMESG-WARN][15] ([Intel XE#3468]) -> [DMESG-WARN][16] +1 other test dmesg-warn
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_flip@flip-vs-rmfb-interruptible@d-hdmi-a3.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-1/igt@kms_flip@flip-vs-rmfb-interruptible@d-hdmi-a3.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-render:
- shard-dg2-set2: [SKIP][17] ([Intel XE#2136] / [Intel XE#2351]) -> [INCOMPLETE][18]
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-render.html
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-render.html
* igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_execute:
- shard-lnl: [FAIL][19] ([Intel XE#3499] / [Intel XE#3539]) -> [FAIL][20] +3 other tests fail
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-5/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_execute.html
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_execute.html
- shard-bmg: [FAIL][21] ([Intel XE#3499] / [Intel XE#3539]) -> [FAIL][22] +1 other test fail
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-8/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_execute.html
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-8/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_execute.html
New tests
---------
New tests have been introduced between xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380_full and xe-pw-136052v3_full:
### New IGT tests (12) ###
* igt@kms_color@deep-color@pipe-a-hdmi-a-3-ctm:
- Statuses : 1 pass(s)
- Exec time: [22.63] s
* igt@kms_color@deep-color@pipe-a-hdmi-a-3-degamma:
- Statuses : 1 pass(s)
- Exec time: [22.62] s
* igt@kms_color@deep-color@pipe-a-hdmi-a-3-gamma:
- Statuses : 1 pass(s)
- Exec time: [22.66] s
* igt@kms_color@deep-color@pipe-b-hdmi-a-3-ctm:
- Statuses : 1 pass(s)
- Exec time: [22.60] s
* igt@kms_color@deep-color@pipe-b-hdmi-a-3-degamma:
- Statuses : 1 pass(s)
- Exec time: [22.59] s
* igt@kms_color@deep-color@pipe-b-hdmi-a-3-gamma:
- Statuses : 1 pass(s)
- Exec time: [22.66] s
* igt@kms_color@deep-color@pipe-c-hdmi-a-3-ctm:
- Statuses : 1 pass(s)
- Exec time: [22.64] s
* igt@kms_color@deep-color@pipe-c-hdmi-a-3-degamma:
- Statuses : 1 pass(s)
- Exec time: [22.64] s
* igt@kms_color@deep-color@pipe-c-hdmi-a-3-gamma:
- Statuses : 1 pass(s)
- Exec time: [22.71] s
* igt@kms_color@deep-color@pipe-d-hdmi-a-3-ctm:
- Statuses : 1 pass(s)
- Exec time: [22.61] s
* igt@kms_color@deep-color@pipe-d-hdmi-a-3-degamma:
- Statuses : 1 pass(s)
- Exec time: [22.61] s
* igt@kms_color@deep-color@pipe-d-hdmi-a-3-gamma:
- Statuses : 1 pass(s)
- Exec time: [22.70] s
Known issues
------------
Here are the changes found in xe-pw-136052v3_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_addfb_basic@addfb25-modifier-no-flag:
- shard-dg2-set2: NOTRUN -> [SKIP][23] ([Intel XE#2423] / [i915#2575]) +14 other tests skip
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_addfb_basic@addfb25-modifier-no-flag.html
* igt@kms_async_flips@alternate-sync-async-flip:
- shard-adlp: [PASS][24] -> [DMESG-FAIL][25] ([Intel XE#1033] / [Intel XE#1727]) +1 other test dmesg-fail
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-8/igt@kms_async_flips@alternate-sync-async-flip.html
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-4/igt@kms_async_flips@alternate-sync-async-flip.html
* igt@kms_atomic_interruptible@atomic-setmode@pipe-a-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [DMESG-WARN][26] ([Intel XE#3468])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_atomic_interruptible@atomic-setmode@pipe-a-hdmi-a-6.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180:
- shard-adlp: NOTRUN -> [SKIP][27] ([Intel XE#1124])
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html
* igt@kms_big_fb@linear-32bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][28] ([Intel XE#2327])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_big_fb@linear-32bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0:
- shard-adlp: NOTRUN -> [FAIL][29] ([Intel XE#1874])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0.html
* igt@kms_big_fb@y-tiled-32bpp-rotate-90:
- shard-adlp: NOTRUN -> [SKIP][30] ([Intel XE#316]) +2 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_big_fb@y-tiled-32bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-64bpp-rotate-180:
- shard-lnl: NOTRUN -> [SKIP][31] ([Intel XE#1124]) +2 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_big_fb@y-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-bmg: NOTRUN -> [SKIP][32] ([Intel XE#1124]) +2 other tests skip
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p:
- shard-adlp: NOTRUN -> [SKIP][33] ([Intel XE#367]) +1 other test skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p.html
* igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p:
- shard-adlp: NOTRUN -> [SKIP][34] ([Intel XE#2191])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p.html
* igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p:
- shard-bmg: [PASS][35] -> [SKIP][36] ([Intel XE#2314] / [Intel XE#2894])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-2/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html
* igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#2191])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p.html
* igt@kms_bw@linear-tiling-4-displays-1920x1080p:
- shard-lnl: NOTRUN -> [SKIP][38] ([Intel XE#1512])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_bw@linear-tiling-4-displays-1920x1080p.html
* igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][39] ([Intel XE#2887]) +2 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [SKIP][40] ([Intel XE#787]) +76 other tests skip
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-6.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc:
- shard-dg2-set2: [PASS][41] -> [SKIP][42] ([Intel XE#2136]) +7 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc.html
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs:
- shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#2652] / [Intel XE#787]) +4 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html
* igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs:
- shard-adlp: NOTRUN -> [SKIP][44] ([Intel XE#455] / [Intel XE#787]) +9 other tests skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#3432])
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][46] ([Intel XE#787]) +14 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-1.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [DMESG-WARN][47] ([Intel XE#3113])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-b-hdmi-a-6.html
* igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs:
- shard-adlp: NOTRUN -> [SKIP][48] ([Intel XE#2907])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc:
- shard-lnl: NOTRUN -> [SKIP][49] ([Intel XE#2887]) +1 other test skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-d-dp-4:
- shard-dg2-set2: NOTRUN -> [SKIP][50] ([Intel XE#455] / [Intel XE#787]) +10 other tests skip
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-d-dp-4.html
* igt@kms_cdclk@plane-scaling:
- shard-adlp: NOTRUN -> [SKIP][51] ([Intel XE#1152] / [Intel XE#455])
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_cdclk@plane-scaling.html
* igt@kms_cdclk@plane-scaling@pipe-a-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][52] ([Intel XE#1152]) +2 other tests skip
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_cdclk@plane-scaling@pipe-a-hdmi-a-1.html
* igt@kms_chamelium_color@ctm-green-to-red:
- shard-bmg: NOTRUN -> [SKIP][53] ([Intel XE#2325])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_chamelium_color@ctm-green-to-red.html
* igt@kms_chamelium_frames@hdmi-cmp-planes-random:
- shard-lnl: NOTRUN -> [SKIP][54] ([Intel XE#373])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_chamelium_frames@hdmi-cmp-planes-random.html
* igt@kms_chamelium_frames@hdmi-crc-fast:
- shard-bmg: NOTRUN -> [SKIP][55] ([Intel XE#2252]) +1 other test skip
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_chamelium_frames@hdmi-crc-fast.html
* igt@kms_chamelium_hpd@dp-hpd:
- shard-adlp: NOTRUN -> [SKIP][56] ([Intel XE#373]) +2 other tests skip
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_chamelium_hpd@dp-hpd.html
* igt@kms_content_protection@atomic-dpms@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][57] ([Intel XE#1178])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@kms_content_protection@atomic-dpms@pipe-a-dp-2.html
* igt@kms_content_protection@content-type-change:
- shard-adlp: NOTRUN -> [SKIP][58] ([Intel XE#455]) +8 other tests skip
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_content_protection@content-type-change.html
* igt@kms_content_protection@lic-type-1:
- shard-lnl: NOTRUN -> [SKIP][59] ([Intel XE#3278])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_content_protection@lic-type-1.html
* igt@kms_content_protection@uevent:
- shard-bmg: NOTRUN -> [SKIP][60] ([Intel XE#2341])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_content_protection@uevent.html
* igt@kms_cursor_crc@cursor-offscreen-512x170:
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#2321])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_cursor_crc@cursor-offscreen-512x170.html
* igt@kms_cursor_crc@cursor-sliding-512x512:
- shard-adlp: NOTRUN -> [SKIP][62] ([Intel XE#308])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_cursor_crc@cursor-sliding-512x512.html
* igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy:
- shard-bmg: [PASS][63] -> [SKIP][64] ([Intel XE#2291]) +3 other tests skip
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size:
- shard-bmg: NOTRUN -> [SKIP][65] ([Intel XE#2291])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
- shard-bmg: NOTRUN -> [SKIP][66] ([Intel XE#2286])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html
* igt@kms_dsc@dsc-fractional-bpp:
- shard-lnl: NOTRUN -> [SKIP][67] ([Intel XE#2244])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_dsc@dsc-fractional-bpp.html
* igt@kms_feature_discovery@psr1:
- shard-adlp: NOTRUN -> [SKIP][68] ([Intel XE#1135])
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_feature_discovery@psr1.html
* igt@kms_flip@2x-absolute-wf_vblank-interruptible:
- shard-bmg: NOTRUN -> [SKIP][69] ([Intel XE#2316]) +1 other test skip
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html
* igt@kms_flip@2x-modeset-vs-vblank-race-interruptible:
- shard-bmg: [PASS][70] -> [SKIP][71] ([Intel XE#2316]) +1 other test skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_flip@2x-modeset-vs-vblank-race-interruptible.html
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_flip@2x-modeset-vs-vblank-race-interruptible.html
- shard-adlp: NOTRUN -> [SKIP][72] ([Intel XE#310])
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_flip@2x-modeset-vs-vblank-race-interruptible.html
* igt@kms_flip@2x-plain-flip-interruptible:
- shard-lnl: NOTRUN -> [SKIP][73] ([Intel XE#1421])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_flip@2x-plain-flip-interruptible.html
* igt@kms_flip@flip-vs-absolute-wf_vblank:
- shard-lnl: [PASS][74] -> [FAIL][75] ([Intel XE#886]) +3 other tests fail
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-5/igt@kms_flip@flip-vs-absolute-wf_vblank.html
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-2/igt@kms_flip@flip-vs-absolute-wf_vblank.html
* igt@kms_flip@flip-vs-panning-interruptible@d-dp2:
- shard-bmg: NOTRUN -> [DMESG-WARN][76] ([Intel XE#3468]) +13 other tests dmesg-warn
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-1/igt@kms_flip@flip-vs-panning-interruptible@d-dp2.html
* igt@kms_flip@plain-flip-ts-check@c-edp1:
- shard-lnl: NOTRUN -> [FAIL][77] ([Intel XE#886])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_flip@plain-flip-ts-check@c-edp1.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-valid-mode:
- shard-dg2-set2: NOTRUN -> [SKIP][78] ([Intel XE#455])
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling:
- shard-bmg: NOTRUN -> [SKIP][79] ([Intel XE#2293] / [Intel XE#2380])
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling@pipe-a-valid-mode:
- shard-bmg: NOTRUN -> [SKIP][80] ([Intel XE#2293])
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt:
- shard-bmg: NOTRUN -> [SKIP][81] ([Intel XE#2312]) +9 other tests skip
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-wc:
- shard-dg2-set2: [PASS][82] -> [SKIP][83] ([Intel XE#2136] / [Intel XE#2351]) +9 other tests skip
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-wc.html
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][84] ([Intel XE#656]) +6 other tests skip
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render:
- shard-adlp: NOTRUN -> [SKIP][85] ([Intel XE#656]) +15 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw:
- shard-lnl: NOTRUN -> [SKIP][86] ([Intel XE#651]) +1 other test skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-render:
- shard-bmg: NOTRUN -> [SKIP][87] ([Intel XE#2311]) +3 other tests skip
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-tiling-linear:
- shard-adlp: NOTRUN -> [SKIP][88] ([Intel XE#651]) +2 other tests skip
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-linear.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][89] ([Intel XE#2313]) +3 other tests skip
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@pipe-fbc-rte@pipe-b-dp-2:
- shard-bmg: NOTRUN -> [FAIL][90] ([Intel XE#2333])
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@kms_frontbuffer_tracking@pipe-fbc-rte@pipe-b-dp-2.html
* igt@kms_frontbuffer_tracking@plane-fbc-rte:
- shard-bmg: NOTRUN -> [SKIP][91] ([Intel XE#2350])
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_frontbuffer_tracking@plane-fbc-rte.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-blt:
- shard-adlp: NOTRUN -> [SKIP][92] ([Intel XE#653]) +4 other tests skip
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-blt.html
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [PASS][93] -> [SKIP][94] ([Intel XE#1503])
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_hdr@invalid-hdr.html
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_hdr@invalid-hdr.html
* igt@kms_hdr@invalid-metadata-sizes:
- shard-lnl: NOTRUN -> [SKIP][95] ([Intel XE#1503])
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_hdr@invalid-metadata-sizes.html
* igt@kms_joiner@basic-ultra-joiner:
- shard-bmg: NOTRUN -> [SKIP][96] ([Intel XE#2927])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_joiner@basic-ultra-joiner.html
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-adlp: NOTRUN -> [SKIP][97] ([Intel XE#346])
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_joiner@invalid-modeset-big-joiner.html
* igt@kms_plane_scaling@2x-scaler-multi-pipe:
- shard-bmg: [PASS][98] -> [SKIP][99] ([Intel XE#2571])
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_plane_scaling@2x-scaler-multi-pipe.html
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_plane_scaling@2x-scaler-multi-pipe.html
- shard-adlp: NOTRUN -> [SKIP][100] ([Intel XE#309]) +1 other test skip
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_plane_scaling@2x-scaler-multi-pipe.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-a:
- shard-adlp: NOTRUN -> [SKIP][101] ([Intel XE#2763]) +2 other tests skip
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-a.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-d:
- shard-adlp: NOTRUN -> [SKIP][102] ([Intel XE#2763] / [Intel XE#455]) +1 other test skip
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-d.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-d:
- shard-dg2-set2: NOTRUN -> [SKIP][103] ([Intel XE#2763] / [Intel XE#455]) +2 other tests skip
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25@pipe-d.html
* igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-b:
- shard-lnl: NOTRUN -> [SKIP][104] ([Intel XE#2763]) +3 other tests skip
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_plane_scaling@planes-downscale-factor-0-5-unity-scaling@pipe-b.html
* igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-b:
- shard-dg2-set2: NOTRUN -> [SKIP][105] ([Intel XE#2763]) +8 other tests skip
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-b.html
* igt@kms_pm_dc@dc5-psr:
- shard-bmg: NOTRUN -> [SKIP][106] ([Intel XE#2392])
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_pm_dc@dc5-psr.html
- shard-lnl: [PASS][107] -> [FAIL][108] ([Intel XE#718])
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-6/igt@kms_pm_dc@dc5-psr.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-6/igt@kms_pm_dc@dc5-psr.html
* igt@kms_pm_dc@dc6-psr:
- shard-lnl: [PASS][109] -> [FAIL][110] ([Intel XE#1430])
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-3/igt@kms_pm_dc@dc6-psr.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-7/igt@kms_pm_dc@dc6-psr.html
* igt@kms_pm_rpm@cursor:
- shard-dg2-set2: [PASS][111] -> [SKIP][112] ([Intel XE#2446])
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_pm_rpm@cursor.html
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_pm_rpm@cursor.html
* igt@kms_pm_rpm@dpms-mode-unset-lpsp:
- shard-bmg: NOTRUN -> [SKIP][113] ([Intel XE#1439])
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
* igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf:
- shard-lnl: NOTRUN -> [SKIP][114] ([Intel XE#2893])
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-sf:
- shard-bmg: NOTRUN -> [SKIP][115] ([Intel XE#1489]) +2 other tests skip
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-sf.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf:
- shard-adlp: NOTRUN -> [SKIP][116] ([Intel XE#1489]) +1 other test skip
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr@fbc-psr-sprite-plane-onoff:
- shard-dg2-set2: NOTRUN -> [SKIP][117] ([Intel XE#2136] / [Intel XE#2351]) +15 other tests skip
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_psr@fbc-psr-sprite-plane-onoff.html
* igt@kms_psr@fbc-psr2-cursor-blt:
- shard-adlp: NOTRUN -> [SKIP][118] ([Intel XE#2850] / [Intel XE#929]) +5 other tests skip
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_psr@fbc-psr2-cursor-blt.html
* igt@kms_psr@pr-sprite-render:
- shard-lnl: NOTRUN -> [SKIP][119] ([Intel XE#1406])
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_psr@pr-sprite-render.html
* igt@kms_psr@pr-suspend:
- shard-bmg: NOTRUN -> [SKIP][120] ([Intel XE#2234] / [Intel XE#2850]) +2 other tests skip
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_psr@pr-suspend.html
* igt@kms_psr@psr2-dpms:
- shard-dg2-set2: NOTRUN -> [SKIP][121] ([Intel XE#2136]) +12 other tests skip
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_psr@psr2-dpms.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
- shard-adlp: NOTRUN -> [SKIP][122] ([Intel XE#1127])
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
- shard-bmg: NOTRUN -> [SKIP][123] ([Intel XE#3414])
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
* igt@kms_rotation_crc@sprite-rotation-180:
- shard-dg2-set2: [PASS][124] -> [SKIP][125] ([Intel XE#2423] / [i915#2575]) +53 other tests skip
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_rotation_crc@sprite-rotation-180.html
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_rotation_crc@sprite-rotation-180.html
* igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
- shard-adlp: NOTRUN -> [SKIP][126] ([Intel XE#3414])
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html
* igt@kms_setmode@invalid-clone-single-crtc:
- shard-bmg: NOTRUN -> [SKIP][127] ([Intel XE#1435])
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_setmode@invalid-clone-single-crtc.html
* igt@kms_tv_load_detect@load-detect:
- shard-adlp: NOTRUN -> [SKIP][128] ([Intel XE#330])
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@kms_tv_load_detect@load-detect.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1:
- shard-lnl: [PASS][129] -> [FAIL][130] ([Intel XE#899])
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-7/igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1.html
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-2/igt@kms_universal_plane@cursor-fb-leak@pipe-c-edp-1.html
* igt@kms_vblank@query-forked-busy@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [DMESG-FAIL][131] ([Intel XE#3468])
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-1/igt@kms_vblank@query-forked-busy@pipe-a-dp-2.html
* igt@kms_vblank@ts-continuation-dpms-rpm:
- shard-lnl: [PASS][132] -> [DMESG-WARN][133] ([Intel XE#2932]) +5 other tests dmesg-warn
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-7/igt@kms_vblank@ts-continuation-dpms-rpm.html
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-7/igt@kms_vblank@ts-continuation-dpms-rpm.html
* igt@kms_vrr@cmrr@pipe-a-edp-1:
- shard-lnl: [PASS][134] -> [FAIL][135] ([Intel XE#2159]) +1 other test fail
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-4/igt@kms_vrr@cmrr@pipe-a-edp-1.html
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-4/igt@kms_vrr@cmrr@pipe-a-edp-1.html
* igt@kms_vrr@lobf:
- shard-lnl: NOTRUN -> [SKIP][136] ([Intel XE#1499])
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_vrr@lobf.html
* igt@kms_vrr@negative-basic:
- shard-bmg: NOTRUN -> [SKIP][137] ([Intel XE#1499])
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_vrr@negative-basic.html
* igt@xe_compute@ccs-mode-compute-kernel:
- shard-adlp: NOTRUN -> [SKIP][138] ([Intel XE#1447])
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_compute@ccs-mode-compute-kernel.html
* igt@xe_compute_preempt@compute-preempt-many@engine-drm_xe_engine_class_compute:
- shard-dg2-set2: NOTRUN -> [SKIP][139] ([Intel XE#1280] / [Intel XE#455])
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@xe_compute_preempt@compute-preempt-many@engine-drm_xe_engine_class_compute.html
* igt@xe_eudebug@basic-vm-access:
- shard-lnl: NOTRUN -> [SKIP][140] ([Intel XE#2905])
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@xe_eudebug@basic-vm-access.html
* igt@xe_eudebug_online@single-step:
- shard-bmg: NOTRUN -> [SKIP][141] ([Intel XE#2905]) +1 other test skip
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@xe_eudebug_online@single-step.html
* igt@xe_eudebug_online@single-step-one:
- shard-adlp: NOTRUN -> [SKIP][142] ([Intel XE#2905]) +5 other tests skip
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_eudebug_online@single-step-one.html
* igt@xe_evict@evict-large-cm:
- shard-lnl: NOTRUN -> [SKIP][143] ([Intel XE#688])
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@xe_evict@evict-large-cm.html
* igt@xe_evict@evict-small-multi-vm:
- shard-adlp: NOTRUN -> [SKIP][144] ([Intel XE#261] / [Intel XE#688]) +2 other tests skip
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_evict@evict-small-multi-vm.html
* igt@xe_exec_balancer@twice-virtual-basic:
- shard-dg2-set2: [PASS][145] -> [SKIP][146] ([Intel XE#1130]) +77 other tests skip
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_exec_balancer@twice-virtual-basic.html
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_exec_balancer@twice-virtual-basic.html
* igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-rebind:
- shard-lnl: NOTRUN -> [SKIP][147] ([Intel XE#1392])
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-rebind.html
* igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind:
- shard-adlp: NOTRUN -> [SKIP][148] ([Intel XE#1392]) +2 other tests skip
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind.html
* igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate:
- shard-bmg: NOTRUN -> [SKIP][149] ([Intel XE#2322]) +1 other test skip
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate.html
* igt@xe_exec_fault_mode@once-bindexecqueue-userptr-invalidate-imm:
- shard-adlp: NOTRUN -> [SKIP][150] ([Intel XE#288]) +10 other tests skip
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_exec_fault_mode@once-bindexecqueue-userptr-invalidate-imm.html
* igt@xe_exec_reset@cat-error:
- shard-adlp: NOTRUN -> [DMESG-WARN][151] ([Intel XE#358])
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_exec_reset@cat-error.html
* igt@xe_exec_threads@threads-shared-vm-userptr-invalidate-race:
- shard-dg2-set2: NOTRUN -> [SKIP][152] ([Intel XE#1130]) +35 other tests skip
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_exec_threads@threads-shared-vm-userptr-invalidate-race.html
* igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready:
- shard-adlp: [PASS][153] -> [DMESG-WARN][154] ([Intel XE#3086]) +2 other tests dmesg-warn
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-3/igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready.html
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-8/igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early:
- shard-adlp: NOTRUN -> [DMESG-WARN][155] ([Intel XE#3086])
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_guc_relay_init:
- shard-bmg: NOTRUN -> [DMESG-WARN][156] ([Intel XE#3343])
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_relay_init.html
* igt@xe_mmap@small-bar:
- shard-bmg: NOTRUN -> [SKIP][157] ([Intel XE#586])
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@xe_mmap@small-bar.html
* igt@xe_module_load@force-load:
- shard-dg2-set2: NOTRUN -> [SKIP][158] ([Intel XE#378])
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_module_load@force-load.html
* igt@xe_oa@invalid-map-oa-buffer:
- shard-adlp: NOTRUN -> [SKIP][159] ([Intel XE#2541]) +2 other tests skip
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_oa@invalid-map-oa-buffer.html
* igt@xe_pat@pat-index-xehpc:
- shard-lnl: NOTRUN -> [SKIP][160] ([Intel XE#1420] / [Intel XE#2838])
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@xe_pat@pat-index-xehpc.html
* igt@xe_pm@s3-basic:
- shard-lnl: NOTRUN -> [SKIP][161] ([Intel XE#584])
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@xe_pm@s3-basic.html
* igt@xe_pm@s4-vm-bind-prefetch:
- shard-lnl: [PASS][162] -> [ABORT][163] ([Intel XE#1607] / [Intel XE#1794])
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-7/igt@xe_pm@s4-vm-bind-prefetch.html
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-2/igt@xe_pm@s4-vm-bind-prefetch.html
* igt@xe_pm@s4-vm-bind-userptr:
- shard-adlp: [PASS][164] -> [ABORT][165] ([Intel XE#1794])
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-6/igt@xe_pm@s4-vm-bind-userptr.html
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-9/igt@xe_pm@s4-vm-bind-userptr.html
* igt@xe_query@multigpu-query-gt-list:
- shard-lnl: NOTRUN -> [SKIP][166] ([Intel XE#944])
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@xe_query@multigpu-query-gt-list.html
* igt@xe_query@multigpu-query-hwconfig:
- shard-adlp: NOTRUN -> [SKIP][167] ([Intel XE#944]) +1 other test skip
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_query@multigpu-query-hwconfig.html
* igt@xe_query@multigpu-query-invalid-cs-cycles:
- shard-bmg: NOTRUN -> [SKIP][168] ([Intel XE#944])
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@xe_query@multigpu-query-invalid-cs-cycles.html
* igt@xe_vm@large-userptr-split-misaligned-binds-134217728:
- shard-bmg: [PASS][169] -> [DMESG-WARN][170] ([Intel XE#3468]) +9 other tests dmesg-warn
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-2/igt@xe_vm@large-userptr-split-misaligned-binds-134217728.html
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@xe_vm@large-userptr-split-misaligned-binds-134217728.html
* igt@xe_vm@munmap-style-unbind-either-side-partial-split-page-hammer:
- shard-bmg: [PASS][171] -> [DMESG-WARN][172] ([Intel XE#1727]) +2 other tests dmesg-warn
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@xe_vm@munmap-style-unbind-either-side-partial-split-page-hammer.html
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-1/igt@xe_vm@munmap-style-unbind-either-side-partial-split-page-hammer.html
* igt@xe_wedged@basic-wedged:
- shard-adlp: NOTRUN -> [DMESG-WARN][173] ([Intel XE#2919])
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_wedged@basic-wedged.html
#### Possible fixes ####
* igt@fbdev@info:
- shard-dg2-set2: [SKIP][174] ([Intel XE#2134]) -> [PASS][175]
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@fbdev@info.html
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@fbdev@info.html
* igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-3:
- shard-bmg: [FAIL][176] ([Intel XE#1426]) -> [PASS][177] +1 other test pass
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-3.html
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-3.html
* igt@kms_atomic_transition@plane-toggle-modeset-transition:
- shard-adlp: [FAIL][178] ([Intel XE#1426]) -> [PASS][179] +1 other test pass
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-3/igt@kms_atomic_transition@plane-toggle-modeset-transition.html
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-1/igt@kms_atomic_transition@plane-toggle-modeset-transition.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-bmg: [DMESG-WARN][180] ([Intel XE#2705] / [Intel XE#3468]) -> [PASS][181]
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p:
- shard-bmg: [SKIP][182] ([Intel XE#2314] / [Intel XE#2894]) -> [PASS][183]
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p.html
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p.html
* igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic:
- shard-bmg: [SKIP][184] ([Intel XE#2291]) -> [PASS][185] +1 other test pass
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-4/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html
* igt@kms_dp_linktrain_fallback@dp-fallback:
- shard-bmg: [SKIP][186] -> [PASS][187]
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_dp_linktrain_fallback@dp-fallback.html
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@kms_dp_linktrain_fallback@dp-fallback.html
* igt@kms_flip@2x-dpms-vs-vblank-race:
- shard-dg2-set2: [SKIP][188] ([Intel XE#2423] / [i915#2575]) -> [PASS][189] +52 other tests pass
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_flip@2x-dpms-vs-vblank-race.html
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_flip@2x-dpms-vs-vblank-race.html
* igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3:
- shard-bmg: [FAIL][190] ([Intel XE#3321] / [Intel XE#3487]) -> [PASS][191] +2 other tests pass
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-8/igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3.html
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-8/igt@kms_flip@2x-flip-vs-expired-vblank@ac-dp2-hdmi-a3.html
* igt@kms_flip@2x-flip-vs-panning-interruptible:
- shard-bmg: [SKIP][192] ([Intel XE#2316]) -> [PASS][193] +2 other tests pass
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_flip@2x-flip-vs-panning-interruptible.html
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@kms_flip@2x-flip-vs-panning-interruptible.html
* igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1:
- shard-adlp: [DMESG-WARN][194] ([Intel XE#2953] / [Intel XE#3086]) -> [PASS][195] +3 other tests pass
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-2/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-6/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html
* igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-upscaling:
- shard-dg2-set2: [SKIP][196] ([Intel XE#2136] / [Intel XE#2351]) -> [PASS][197] +4 other tests pass
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-upscaling.html
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-upscaling.html
* igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-wc:
- shard-dg2-set2: [SKIP][198] ([Intel XE#2136]) -> [PASS][199] +12 other tests pass
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-wc.html
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-mmap-wc.html
* igt@kms_plane_alpha_blend@alpha-transparent-fb:
- shard-bmg: [DMESG-WARN][200] ([Intel XE#3468]) -> [PASS][201] +6 other tests pass
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_plane_alpha_blend@alpha-transparent-fb.html
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-1/igt@kms_plane_alpha_blend@alpha-transparent-fb.html
* igt@kms_pm_rpm@modeset-non-lpsp:
- shard-dg2-set2: [SKIP][202] ([Intel XE#2446]) -> [PASS][203] +1 other test pass
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_pm_rpm@modeset-non-lpsp.html
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_pm_rpm@modeset-non-lpsp.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1:
- shard-lnl: [FAIL][204] ([Intel XE#899]) -> [PASS][205] +1 other test pass
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-7/igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1.html
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-2/igt@kms_universal_plane@cursor-fb-leak@pipe-a-edp-1.html
* igt@kms_vblank@wait-busy:
- shard-adlp: [DMESG-WARN][206] ([Intel XE#1033] / [Intel XE#1727]) -> [PASS][207] +1 other test pass
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-4/igt@kms_vblank@wait-busy.html
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-9/igt@kms_vblank@wait-busy.html
* igt@kms_vblank@wait-forked-busy@pipe-a-hdmi-a-1:
- shard-adlp: [DMESG-WARN][208] ([Intel XE#3086]) -> [PASS][209] +1 other test pass
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-2/igt@kms_vblank@wait-forked-busy@pipe-a-hdmi-a-1.html
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-6/igt@kms_vblank@wait-forked-busy@pipe-a-hdmi-a-1.html
* igt@testdisplay:
- shard-dg2-set2: [SKIP][210] ([Intel XE#2423]) -> [PASS][211] +2 other tests pass
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@testdisplay.html
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@testdisplay.html
* igt@xe_exec_threads@threads-cm-shared-vm-userptr:
- shard-bmg: [FAIL][212] ([Intel XE#3535]) -> [PASS][213]
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-1/igt@xe_exec_threads@threads-cm-shared-vm-userptr.html
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@xe_exec_threads@threads-cm-shared-vm-userptr.html
* igt@xe_exec_threads@threads-mixed-shared-vm-userptr-invalidate:
- shard-bmg: [DMESG-FAIL][214] ([Intel XE#3371]) -> [PASS][215]
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-1/igt@xe_exec_threads@threads-mixed-shared-vm-userptr-invalidate.html
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@xe_exec_threads@threads-mixed-shared-vm-userptr-invalidate.html
* igt@xe_module_load@many-reload:
- shard-lnl: [DMESG-WARN][216] -> [PASS][217]
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-6/igt@xe_module_load@many-reload.html
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-1/igt@xe_module_load@many-reload.html
* igt@xe_pm@s4-basic:
- shard-adlp: [ABORT][218] ([Intel XE#1358] / [Intel XE#1607]) -> [PASS][219] +1 other test pass
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-9/igt@xe_pm@s4-basic.html
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-3/igt@xe_pm@s4-basic.html
* igt@xe_sriov_flr@flr-vf1-clear:
- shard-adlp: [FAIL][220] ([Intel XE#3507]) -> [PASS][221]
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-8/igt@xe_sriov_flr@flr-vf1-clear.html
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-4/igt@xe_sriov_flr@flr-vf1-clear.html
* igt@xe_vm@large-split-binds-536870912:
- shard-dg2-set2: [SKIP][222] ([Intel XE#1130]) -> [PASS][223] +93 other tests pass
[222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@xe_vm@large-split-binds-536870912.html
[223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@xe_vm@large-split-binds-536870912.html
#### Warnings ####
* igt@core_hotunplug@hotreplug:
- shard-dg2-set2: [DMESG-WARN][224] ([Intel XE#3468] / [Intel XE#3521]) -> [SKIP][225] ([Intel XE#1885])
[224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@core_hotunplug@hotreplug.html
[225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@core_hotunplug@hotreplug.html
* igt@core_hotunplug@unbind-rebind:
- shard-dg2-set2: [DMESG-WARN][226] ([Intel XE#3468]) -> [SKIP][227] ([Intel XE#1885])
[226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@core_hotunplug@unbind-rebind.html
[227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@core_hotunplug@unbind-rebind.html
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- shard-dg2-set2: [SKIP][228] ([Intel XE#623]) -> [SKIP][229] ([Intel XE#2423] / [i915#2575])
[228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
[229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_atomic_interruptible@atomic-setmode:
- shard-bmg: [DMESG-WARN][230] ([Intel XE#3468]) -> [INCOMPLETE][231] ([Intel XE#3468]) +1 other test incomplete
[230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-1/igt@kms_atomic_interruptible@atomic-setmode.html
[231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@kms_atomic_interruptible@atomic-setmode.html
- shard-dg2-set2: [SKIP][232] ([Intel XE#2423] / [i915#2575]) -> [DMESG-WARN][233] ([Intel XE#3468])
[232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_atomic_interruptible@atomic-setmode.html
[233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_atomic_interruptible@atomic-setmode.html
* igt@kms_big_fb@4-tiled-64bpp-rotate-270:
- shard-dg2-set2: [SKIP][234] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][235] ([Intel XE#316])
[234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html
[235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-90:
- shard-dg2-set2: [SKIP][236] ([Intel XE#316]) -> [SKIP][237] ([Intel XE#2136] / [Intel XE#2351])
[236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_big_fb@4-tiled-8bpp-rotate-90.html
[237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_big_fb@4-tiled-8bpp-rotate-90.html
* igt@kms_big_fb@linear-16bpp-rotate-180:
- shard-bmg: [DMESG-WARN][238] ([Intel XE#3468]) -> [DMESG-FAIL][239] ([Intel XE#3468]) +3 other tests dmesg-fail
[238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-1/igt@kms_big_fb@linear-16bpp-rotate-180.html
[239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-4/igt@kms_big_fb@linear-16bpp-rotate-180.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip:
- shard-adlp: [FAIL][240] ([Intel XE#1231] / [Intel XE#1242]) -> [FAIL][241] ([Intel XE#1231]) +2 other tests fail
[240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
[241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-8/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
* igt@kms_big_fb@y-tiled-16bpp-rotate-0:
- shard-dg2-set2: [SKIP][242] ([Intel XE#1124]) -> [SKIP][243] ([Intel XE#2136]) +1 other test skip
[242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_big_fb@y-tiled-16bpp-rotate-0.html
[243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_big_fb@y-tiled-16bpp-rotate-0.html
* igt@kms_big_fb@y-tiled-addfb-size-offset-overflow:
- shard-dg2-set2: [SKIP][244] ([Intel XE#607]) -> [SKIP][245] ([Intel XE#2136] / [Intel XE#2351])
[244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html
[245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html
* igt@kms_big_fb@yf-tiled-32bpp-rotate-0:
- shard-dg2-set2: [SKIP][246] ([Intel XE#1124]) -> [SKIP][247] ([Intel XE#2136] / [Intel XE#2351]) +1 other test skip
[246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html
[247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
- shard-dg2-set2: [SKIP][248] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][249] ([Intel XE#1124]) +2 other tests skip
[248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
[249]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-8bpp-rotate-270:
- shard-dg2-set2: [SKIP][250] ([Intel XE#2136]) -> [SKIP][251] ([Intel XE#1124]) +1 other test skip
[250]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html
[251]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html
* igt@kms_big_fb@yf-tiled-addfb:
- shard-dg2-set2: [SKIP][252] ([Intel XE#619]) -> [SKIP][253] ([Intel XE#2136] / [Intel XE#2351])
[252]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_big_fb@yf-tiled-addfb.html
[253]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_big_fb@yf-tiled-addfb.html
* igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
- shard-dg2-set2: [SKIP][254] ([Intel XE#2136]) -> [SKIP][255] ([Intel XE#607])
[254]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html
[255]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html
* igt@kms_big_fb@yf-tiled-addfb-size-overflow:
- shard-dg2-set2: [SKIP][256] ([Intel XE#610]) -> [SKIP][257] ([Intel XE#2136])
[256]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
[257]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
* igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p:
- shard-dg2-set2: [SKIP][258] ([Intel XE#2423] / [i915#2575]) -> [SKIP][259] ([Intel XE#367]) +1 other test skip
[258]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html
[259]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html
* igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p:
- shard-dg2-set2: [SKIP][260] ([Intel XE#2191]) -> [SKIP][261] ([Intel XE#2423] / [i915#2575])
[260]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p.html
[261]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p.html
* igt@kms_bw@linear-tiling-4-displays-2560x1440p:
- shard-dg2-set2: [SKIP][262] ([Intel XE#367]) -> [SKIP][263] ([Intel XE#2423] / [i915#2575]) +1 other test skip
[262]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_bw@linear-tiling-4-displays-2560x1440p.html
[263]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_bw@linear-tiling-4-displays-2560x1440p.html
* igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-mc-ccs:
- shard-dg2-set2: [SKIP][264] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][265] ([Intel XE#455] / [Intel XE#787]) +2 other tests skip
[264]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-mc-ccs.html
[265]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-mc-ccs.html
* igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs:
- shard-dg2-set2: [SKIP][266] ([Intel XE#2907]) -> [SKIP][267] ([Intel XE#2136])
[266]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs.html
[267]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs:
- shard-dg2-set2: [SKIP][268] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][269] ([Intel XE#2136]) +5 other tests skip
[268]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs.html
[269]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs.html
* igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-mc-ccs:
- shard-dg2-set2: [SKIP][270] ([Intel XE#2136]) -> [SKIP][271] ([Intel XE#455] / [Intel XE#787]) +7 other tests skip
[270]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-mc-ccs.html
[271]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-mc-ccs.html
* igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs:
- shard-dg2-set2: [SKIP][272] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][273] ([Intel XE#2136] / [Intel XE#2351])
[272]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs.html
[273]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc:
- shard-dg2-set2: [SKIP][274] ([Intel XE#2136]) -> [INCOMPLETE][275] ([Intel XE#1727])
[274]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
[275]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_chamelium_color@degamma:
- shard-dg2-set2: [SKIP][276] ([Intel XE#306]) -> [SKIP][277] ([Intel XE#2423] / [i915#2575]) +1 other test skip
[276]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_chamelium_color@degamma.html
[277]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_chamelium_color@degamma.html
* igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats:
- shard-dg2-set2: [SKIP][278] ([Intel XE#2423] / [i915#2575]) -> [SKIP][279] ([Intel XE#373]) +4 other tests skip
[278]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html
[279]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html
* igt@kms_chamelium_hpd@vga-hpd:
- shard-dg2-set2: [SKIP][280] ([Intel XE#373]) -> [SKIP][281] ([Intel XE#2423] / [i915#2575]) +5 other tests skip
[280]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_chamelium_hpd@vga-hpd.html
[281]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_chamelium_hpd@vga-hpd.html
* igt@kms_content_protection@atomic-dpms:
- shard-bmg: [SKIP][282] ([Intel XE#2341]) -> [FAIL][283] ([Intel XE#1178])
[282]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_content_protection@atomic-dpms.html
[283]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@kms_content_protection@atomic-dpms.html
* igt@kms_content_protection@srm:
- shard-bmg: [FAIL][284] ([Intel XE#1178]) -> [SKIP][285] ([Intel XE#2341])
[284]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_content_protection@srm.html
[285]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_content_protection@srm.html
* igt@kms_cursor_crc@cursor-random-512x170:
- shard-dg2-set2: [SKIP][286] ([Intel XE#308]) -> [SKIP][287] ([Intel XE#2423] / [i915#2575])
[286]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_cursor_crc@cursor-random-512x170.html
[287]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_cursor_crc@cursor-random-512x170.html
* igt@kms_cursor_crc@cursor-rapid-movement-512x170:
- shard-dg2-set2: [SKIP][288] ([Intel XE#2423] / [i915#2575]) -> [SKIP][289] ([Intel XE#308])
[288]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
[289]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
* igt@kms_cursor_edge_walk@64x64-left-edge:
- shard-bmg: [DMESG-FAIL][290] ([Intel XE#3468]) -> [DMESG-WARN][291] ([Intel XE#3468]) +2 other tests dmesg-warn
[290]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_cursor_edge_walk@64x64-left-edge.html
[291]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_cursor_edge_walk@64x64-left-edge.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
- shard-dg2-set2: [SKIP][292] ([Intel XE#323]) -> [SKIP][293] ([Intel XE#2423] / [i915#2575])
[292]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
[293]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
* igt@kms_dsc@dsc-with-formats:
- shard-dg2-set2: [SKIP][294] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][295] ([Intel XE#455])
[294]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_dsc@dsc-with-formats.html
[295]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_dsc@dsc-with-formats.html
* igt@kms_flip@2x-flip-vs-suspend:
- shard-bmg: [INCOMPLETE][296] ([Intel XE#2597] / [Intel XE#3468]) -> [SKIP][297] ([Intel XE#2316])
[296]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_flip@2x-flip-vs-suspend.html
[297]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_flip@2x-flip-vs-suspend.html
* igt@kms_flip@flip-vs-expired-vblank:
- shard-bmg: [DMESG-WARN][298] ([Intel XE#3468]) -> [DMESG-WARN][299] ([Intel XE#1727] / [Intel XE#3468])
[298]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-2/igt@kms_flip@flip-vs-expired-vblank.html
[299]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_flip@flip-vs-expired-vblank.html
* igt@kms_flip@flip-vs-panning-interruptible:
- shard-bmg: [DMESG-WARN][300] ([Intel XE#3468]) -> [DMESG-WARN][301] ([Intel XE#2705] / [Intel XE#3468])
[300]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_flip@flip-vs-panning-interruptible.html
[301]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-1/igt@kms_flip@flip-vs-panning-interruptible.html
* igt@kms_flip@plain-flip-ts-check:
- shard-lnl: [INCOMPLETE][302] ([Intel XE#2049]) -> [FAIL][303] ([Intel XE#3149] / [Intel XE#886])
[302]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-5/igt@kms_flip@plain-flip-ts-check.html
[303]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_flip@plain-flip-ts-check.html
* igt@kms_flip@plain-flip-ts-check@b-edp1:
- shard-lnl: [INCOMPLETE][304] -> [FAIL][305] ([Intel XE#886])
[304]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-lnl-5/igt@kms_flip@plain-flip-ts-check@b-edp1.html
[305]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-lnl-3/igt@kms_flip@plain-flip-ts-check@b-edp1.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling:
- shard-dg2-set2: [SKIP][306] ([Intel XE#2136]) -> [SKIP][307] ([Intel XE#455])
[306]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling.html
[307]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling:
- shard-dg2-set2: [SKIP][308] ([Intel XE#455]) -> [SKIP][309] ([Intel XE#2136] / [Intel XE#2351]) +1 other test skip
[308]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html
[309]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html
* igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-wc:
- shard-dg2-set2: [SKIP][310] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][311] ([Intel XE#651]) +7 other tests skip
[310]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-wc.html
[311]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt:
- shard-dg2-set2: [SKIP][312] ([Intel XE#651]) -> [SKIP][313] ([Intel XE#2136] / [Intel XE#2351]) +1 other test skip
[312]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt.html
[313]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-blt:
- shard-bmg: [DMESG-FAIL][314] ([Intel XE#3468]) -> [FAIL][315] ([Intel XE#2333])
[314]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-blt.html
[315]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-blt:
- shard-adlp: [TIMEOUT][316] ([Intel XE#1033] / [Intel XE#1727]) -> [FAIL][317] ([Intel XE#1861])
[316]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-blt.html
[317]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-9/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-rte:
- shard-bmg: [SKIP][318] ([Intel XE#2312]) -> [DMESG-FAIL][319] ([Intel XE#3468]) +1 other test dmesg-fail
[318]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-rte.html
[319]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-2p-rte.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc:
- shard-bmg: [FAIL][320] ([Intel XE#2333]) -> [SKIP][321] ([Intel XE#2312]) +3 other tests skip
[320]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html
[321]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff:
- shard-bmg: [SKIP][322] ([Intel XE#2312]) -> [FAIL][323] ([Intel XE#2333]) +4 other tests fail
[322]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html
[323]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-render:
- shard-bmg: [INCOMPLETE][324] -> [INCOMPLETE][325] ([Intel XE#3468])
[324]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-render.html
[325]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-rgb101010-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-tiling-linear:
- shard-bmg: [FAIL][326] ([Intel XE#2333]) -> [DMESG-FAIL][327] ([Intel XE#3468])
[326]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-tiling-linear.html
[327]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-tiling-linear.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte:
- shard-dg2-set2: [SKIP][328] ([Intel XE#2136]) -> [SKIP][329] ([Intel XE#651]) +12 other tests skip
[328]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte.html
[329]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt:
- shard-bmg: [SKIP][330] ([Intel XE#2311]) -> [SKIP][331] ([Intel XE#2312]) +12 other tests skip
[330]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt.html
[331]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-render:
- shard-bmg: [SKIP][332] ([Intel XE#2312]) -> [SKIP][333] ([Intel XE#2311]) +8 other tests skip
[332]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-render.html
[333]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary:
- shard-dg2-set2: [SKIP][334] ([Intel XE#651]) -> [SKIP][335] ([Intel XE#2136]) +13 other tests skip
[334]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary.html
[335]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-blt:
- shard-bmg: [SKIP][336] ([Intel XE#2312]) -> [SKIP][337] ([Intel XE#2313]) +10 other tests skip
[336]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-blt.html
[337]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt:
- shard-bmg: [SKIP][338] ([Intel XE#2313]) -> [SKIP][339] ([Intel XE#2312]) +11 other tests skip
[338]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt.html
[339]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
- shard-dg2-set2: [SKIP][340] ([Intel XE#653]) -> [SKIP][341] ([Intel XE#2136] / [Intel XE#2351]) +3 other tests skip
[340]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
[341]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-wc:
- shard-dg2-set2: [SKIP][342] ([Intel XE#653]) -> [SKIP][343] ([Intel XE#2136]) +15 other tests skip
[342]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-433/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-wc.html
[343]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-plflip-blt:
- shard-dg2-set2: [SKIP][344] ([Intel XE#2136]) -> [SKIP][345] ([Intel XE#653]) +16 other tests skip
[344]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-plflip-blt.html
[345]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt:
- shard-dg2-set2: [SKIP][346] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][347] ([Intel XE#653]) +3 other tests skip
[346]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt.html
[347]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-indfb-msflip-blt.html
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][348] ([Intel XE#3544]) -> [SKIP][349] ([Intel XE#3374] / [Intel XE#3544])
[348]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@kms_hdr@brightness-with-hdr.html
[349]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-4/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_joiner@invalid-modeset-ultra-joiner:
- shard-dg2-set2: [SKIP][350] ([Intel XE#2136]) -> [SKIP][351] ([Intel XE#2927])
[350]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_joiner@invalid-modeset-ultra-joiner.html
[351]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_joiner@invalid-modeset-ultra-joiner.html
* igt@kms_plane_lowres@tiling-y:
- shard-dg2-set2: [SKIP][352] ([Intel XE#455]) -> [SKIP][353] ([Intel XE#2423] / [i915#2575]) +4 other tests skip
[352]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_plane_lowres@tiling-y.html
[353]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_plane_lowres@tiling-y.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25:
- shard-dg2-set2: [SKIP][354] ([Intel XE#2423] / [i915#2575]) -> [SKIP][355] ([Intel XE#2763] / [Intel XE#455]) +2 other tests skip
[354]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25.html
[355]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25.html
* igt@kms_pm_rpm@basic-rte:
- shard-dg2-set2: [SKIP][356] ([Intel XE#2446]) -> [ABORT][357] ([Intel XE#3468])
[356]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_pm_rpm@basic-rte.html
[357]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_pm_rpm@basic-rte.html
* igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
- shard-dg2-set2: [DMESG-WARN][358] ([Intel XE#3468]) -> [SKIP][359] ([Intel XE#2446])
[358]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
[359]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
* igt@kms_pm_rpm@modeset-stress-extra-wait:
- shard-dg2-set2: [INCOMPLETE][360] ([Intel XE#2864] / [Intel XE#3468]) -> [ABORT][361] ([Intel XE#3468])
[360]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-436/igt@kms_pm_rpm@modeset-stress-extra-wait.html
[361]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_pm_rpm@modeset-stress-extra-wait.html
* igt@kms_pm_rpm@universal-planes-dpms:
- shard-dg2-set2: [DMESG-WARN][362] ([Intel XE#2042] / [Intel XE#3468]) -> [SKIP][363] ([Intel XE#2446])
[362]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-433/igt@kms_pm_rpm@universal-planes-dpms.html
[363]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_pm_rpm@universal-planes-dpms.html
* igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area:
- shard-dg2-set2: [SKIP][364] ([Intel XE#2136]) -> [SKIP][365] ([Intel XE#1489]) +6 other tests skip
[364]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area.html
[365]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area.html
* igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-fully-sf:
- shard-dg2-set2: [SKIP][366] ([Intel XE#1489]) -> [SKIP][367] ([Intel XE#2136]) +6 other tests skip
[366]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-fully-sf.html
[367]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr@fbc-pr-sprite-render:
- shard-dg2-set2: [SKIP][368] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][369] ([Intel XE#2850] / [Intel XE#929]) +3 other tests skip
[368]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_psr@fbc-pr-sprite-render.html
[369]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_psr@fbc-pr-sprite-render.html
* igt@kms_psr@fbc-psr-no-drrs:
- shard-dg2-set2: [SKIP][370] ([Intel XE#2850] / [Intel XE#929]) -> [SKIP][371] ([Intel XE#2136] / [Intel XE#2351]) +2 other tests skip
[370]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-433/igt@kms_psr@fbc-psr-no-drrs.html
[371]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_psr@fbc-psr-no-drrs.html
* igt@kms_psr@fbc-psr2-cursor-plane-onoff:
- shard-dg2-set2: [SKIP][372] ([Intel XE#2136]) -> [SKIP][373] ([Intel XE#2850] / [Intel XE#929]) +3 other tests skip
[372]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@kms_psr@fbc-psr2-cursor-plane-onoff.html
[373]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_psr@fbc-psr2-cursor-plane-onoff.html
* igt@kms_psr@fbc-psr2-no-drrs:
- shard-dg2-set2: [SKIP][374] ([Intel XE#2850] / [Intel XE#929]) -> [SKIP][375] ([Intel XE#2136]) +4 other tests skip
[374]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_psr@fbc-psr2-no-drrs.html
[375]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_psr@fbc-psr2-no-drrs.html
* igt@kms_psr@psr-primary-page-flip:
- shard-dg2-set2: [SKIP][376] ([Intel XE#2351]) -> [SKIP][377] ([Intel XE#2850] / [Intel XE#929]) +1 other test skip
[376]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_psr@psr-primary-page-flip.html
[377]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_psr@psr-primary-page-flip.html
* igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
- shard-dg2-set2: [SKIP][378] ([Intel XE#2939]) -> [SKIP][379] ([Intel XE#2136] / [Intel XE#2351])
[378]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
[379]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
* igt@kms_scaling_modes@scaling-mode-full:
- shard-dg2-set2: [SKIP][380] ([Intel XE#2423] / [i915#2575]) -> [SKIP][381] ([Intel XE#455]) +3 other tests skip
[380]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_scaling_modes@scaling-mode-full.html
[381]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_scaling_modes@scaling-mode-full.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-dg2-set2: [SKIP][382] ([Intel XE#362]) -> [FAIL][383] ([Intel XE#1729])
[382]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_tiled_display@basic-test-pattern.html
[383]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][384] ([Intel XE#2509]) -> [SKIP][385] ([Intel XE#2426])
[384]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[385]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
- shard-dg2-set2: [SKIP][386] ([Intel XE#1500]) -> [SKIP][387] ([Intel XE#2423] / [i915#2575])
[386]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[387]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@kms_writeback@writeback-fb-id-xrgb2101010:
- shard-dg2-set2: [SKIP][388] ([Intel XE#2423] / [i915#2575]) -> [SKIP][389] ([Intel XE#756])
[388]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@kms_writeback@writeback-fb-id-xrgb2101010.html
[389]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@kms_writeback@writeback-fb-id-xrgb2101010.html
* igt@kms_writeback@writeback-invalid-parameters:
- shard-dg2-set2: [SKIP][390] ([Intel XE#756]) -> [SKIP][391] ([Intel XE#2423] / [i915#2575])
[390]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@kms_writeback@writeback-invalid-parameters.html
[391]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@kms_writeback@writeback-invalid-parameters.html
* igt@xe_compute_preempt@compute-preempt-many:
- shard-dg2-set2: [SKIP][392] ([Intel XE#1130]) -> [SKIP][393] ([Intel XE#1280] / [Intel XE#455])
[392]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@xe_compute_preempt@compute-preempt-many.html
[393]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@xe_compute_preempt@compute-preempt-many.html
* igt@xe_copy_basic@mem-set-linear-0x3fff:
- shard-dg2-set2: [SKIP][394] ([Intel XE#1126]) -> [SKIP][395] ([Intel XE#1130])
[394]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_copy_basic@mem-set-linear-0x3fff.html
[395]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_copy_basic@mem-set-linear-0x3fff.html
* igt@xe_eudebug@basic-vm-access-parameters:
- shard-dg2-set2: [SKIP][396] ([Intel XE#1130]) -> [SKIP][397] ([Intel XE#2905]) +6 other tests skip
[396]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@xe_eudebug@basic-vm-access-parameters.html
[397]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@xe_eudebug@basic-vm-access-parameters.html
* igt@xe_eudebug_online@writes-caching-sram-bb-sram-target-sram:
- shard-dg2-set2: [SKIP][398] ([Intel XE#2905]) -> [SKIP][399] ([Intel XE#1130]) +5 other tests skip
[398]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_eudebug_online@writes-caching-sram-bb-sram-target-sram.html
[399]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_eudebug_online@writes-caching-sram-bb-sram-target-sram.html
* igt@xe_evict@evict-mixed-many-threads-small:
- shard-dg2-set2: [INCOMPLETE][400] ([Intel XE#1473]) -> [SKIP][401] ([Intel XE#1130])
[400]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_evict@evict-mixed-many-threads-small.html
[401]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_evict@evict-mixed-many-threads-small.html
* igt@xe_exec_balancer@many-execqueues-virtual-userptr:
- shard-dg2-set2: [DMESG-WARN][402] -> [SKIP][403] ([Intel XE#1130])
[402]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_exec_balancer@many-execqueues-virtual-userptr.html
[403]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_exec_balancer@many-execqueues-virtual-userptr.html
* igt@xe_exec_fault_mode@many-execqueues-basic-imm:
- shard-dg2-set2: [SKIP][404] ([Intel XE#1130]) -> [SKIP][405] ([Intel XE#288]) +14 other tests skip
[404]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@xe_exec_fault_mode@many-execqueues-basic-imm.html
[405]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@xe_exec_fault_mode@many-execqueues-basic-imm.html
* igt@xe_exec_fault_mode@twice-userptr-invalidate-race:
- shard-dg2-set2: [SKIP][406] ([Intel XE#288]) -> [SKIP][407] ([Intel XE#1130]) +13 other tests skip
[406]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_exec_fault_mode@twice-userptr-invalidate-race.html
[407]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_exec_fault_mode@twice-userptr-invalidate-race.html
* igt@xe_exec_mix_modes@exec-spinner-interrupted-dma-fence:
- shard-dg2-set2: [SKIP][408] ([Intel XE#1130]) -> [SKIP][409] ([Intel XE#2360])
[408]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@xe_exec_mix_modes@exec-spinner-interrupted-dma-fence.html
[409]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@xe_exec_mix_modes@exec-spinner-interrupted-dma-fence.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_device_create:
- shard-bmg: [DMESG-WARN][410] ([Intel XE#3467] / [Intel XE#3468]) -> [DMESG-WARN][411] ([Intel XE#3467])
[410]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-2/igt@xe_fault_injection@inject-fault-probe-function-xe_device_create.html
[411]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@xe_fault_injection@inject-fault-probe-function-xe_device_create.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_guc_ads_init:
- shard-dg2-set2: [SKIP][412] ([Intel XE#1130]) -> [DMESG-WARN][413] ([Intel XE#3343])
[412]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_ads_init.html
[413]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_ads_init.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_wopcm_init:
- shard-adlp: [DMESG-WARN][414] ([Intel XE#3343]) -> [DMESG-WARN][415] ([Intel XE#3086] / [Intel XE#3343])
[414]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-3/igt@xe_fault_injection@inject-fault-probe-function-xe_wopcm_init.html
[415]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-8/igt@xe_fault_injection@inject-fault-probe-function-xe_wopcm_init.html
* igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_run:
- shard-dg2-set2: [DMESG-WARN][416] ([Intel XE#3467]) -> [SKIP][417] ([Intel XE#1130]) +2 other tests skip
[416]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_run.html
[417]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_run.html
* igt@xe_fault_injection@vm-create-fail-xe_pt_create:
- shard-bmg: [DMESG-WARN][418] ([Intel XE#3467]) -> [DMESG-WARN][419] ([Intel XE#3467] / [Intel XE#3468]) +2 other tests dmesg-warn
[418]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-4/igt@xe_fault_injection@vm-create-fail-xe_pt_create.html
[419]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-6/igt@xe_fault_injection@vm-create-fail-xe_pt_create.html
* igt@xe_fault_injection@vm-create-fail-xe_vm_create_scratch:
- shard-dg2-set2: [SKIP][420] ([Intel XE#1130]) -> [DMESG-WARN][421] ([Intel XE#3467])
[420]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@xe_fault_injection@vm-create-fail-xe_vm_create_scratch.html
[421]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@xe_fault_injection@vm-create-fail-xe_vm_create_scratch.html
* igt@xe_module_load@reload-no-display:
- shard-dg2-set2: [FAIL][422] ([Intel XE#3546]) -> [DMESG-WARN][423] ([Intel XE#3467])
[422]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@xe_module_load@reload-no-display.html
[423]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@xe_module_load@reload-no-display.html
* igt@xe_oa@non-privileged-access-vaddr:
- shard-dg2-set2: [SKIP][424] ([Intel XE#1130]) -> [SKIP][425] ([Intel XE#2541]) +3 other tests skip
[424]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@xe_oa@non-privileged-access-vaddr.html
[425]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@xe_oa@non-privileged-access-vaddr.html
* igt@xe_oa@syncs-userptr-wait-cfg:
- shard-dg2-set2: [SKIP][426] ([Intel XE#2541]) -> [SKIP][427] ([Intel XE#1130]) +3 other tests skip
[426]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@xe_oa@syncs-userptr-wait-cfg.html
[427]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@xe_oa@syncs-userptr-wait-cfg.html
* igt@xe_pat@pat-index-xe2:
- shard-adlp: [SKIP][428] ([Intel XE#2839] / [Intel XE#977]) -> [SKIP][429] ([Intel XE#977])
[428]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-adlp-1/igt@xe_pat@pat-index-xe2.html
[429]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-adlp-4/igt@xe_pat@pat-index-xe2.html
* igt@xe_pat@pat-index-xelp:
- shard-bmg: [SKIP][430] ([Intel XE#2237] / [Intel XE#2245]) -> [SKIP][431] ([Intel XE#2245])
[430]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-8/igt@xe_pat@pat-index-xelp.html
[431]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-8/igt@xe_pat@pat-index-xelp.html
* igt@xe_pat@pat-index-xelpg:
- shard-dg2-set2: [SKIP][432] ([Intel XE#979]) -> [SKIP][433] ([Intel XE#1130])
[432]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_pat@pat-index-xelpg.html
[433]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_pat@pat-index-xelpg.html
* igt@xe_pm@d3cold-multiple-execs:
- shard-dg2-set2: [SKIP][434] ([Intel XE#2284] / [Intel XE#366]) -> [SKIP][435] ([Intel XE#1130])
[434]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_pm@d3cold-multiple-execs.html
[435]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_pm@d3cold-multiple-execs.html
* igt@xe_pm@d3hot-mmap-system:
- shard-dg2-set2: [DMESG-WARN][436] ([Intel XE#3468]) -> [SKIP][437] ([Intel XE#1130])
[436]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@xe_pm@d3hot-mmap-system.html
[437]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@xe_pm@d3hot-mmap-system.html
* igt@xe_pm@d3hot-multiple-execs:
- shard-dg2-set2: [SKIP][438] ([Intel XE#1130]) -> [DMESG-WARN][439] ([Intel XE#3468])
[438]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@xe_pm@d3hot-multiple-execs.html
[439]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@xe_pm@d3hot-multiple-execs.html
* igt@xe_pm@s2idle-vm-bind-prefetch:
- shard-bmg: [DMESG-WARN][440] ([Intel XE#1616] / [Intel XE#3468]) -> [DMESG-FAIL][441] ([Intel XE#3468])
[440]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-bmg-6/igt@xe_pm@s2idle-vm-bind-prefetch.html
[441]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-bmg-1/igt@xe_pm@s2idle-vm-bind-prefetch.html
* igt@xe_pm@s3-basic-exec:
- shard-dg2-set2: [SKIP][442] ([Intel XE#1130]) -> [DMESG-WARN][443] ([Intel XE#3468] / [Intel XE#569]) +1 other test dmesg-warn
[442]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-434/igt@xe_pm@s3-basic-exec.html
[443]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-463/igt@xe_pm@s3-basic-exec.html
* igt@xe_pm@s4-d3hot-basic-exec:
- shard-dg2-set2: [DMESG-WARN][444] ([Intel XE#1727] / [Intel XE#3468]) -> [SKIP][445] ([Intel XE#1130])
[444]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-435/igt@xe_pm@s4-d3hot-basic-exec.html
[445]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_pm@s4-d3hot-basic-exec.html
* igt@xe_query@multigpu-query-engines:
- shard-dg2-set2: [SKIP][446] ([Intel XE#1130]) -> [SKIP][447] ([Intel XE#944])
[446]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-466/igt@xe_query@multigpu-query-engines.html
[447]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-436/igt@xe_query@multigpu-query-engines.html
* igt@xe_query@multigpu-query-mem-usage:
- shard-dg2-set2: [SKIP][448] ([Intel XE#944]) -> [SKIP][449] ([Intel XE#1130]) +1 other test skip
[448]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-463/igt@xe_query@multigpu-query-mem-usage.html
[449]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-466/igt@xe_query@multigpu-query-mem-usage.html
* igt@xe_sriov_flr@flr-vf1-clear:
- shard-dg2-set2: [SKIP][450] ([Intel XE#3342]) -> [SKIP][451] ([Intel XE#1130])
[450]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380/shard-dg2-433/igt@xe_sriov_flr@flr-vf1-clear.html
[451]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/shard-dg2-434/igt@xe_sriov_flr@flr-vf1-clear.html
[Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1130
[Intel XE#1135]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1135
[Intel XE#1152]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1152
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1231]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1231
[Intel XE#1242]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1242
[Intel XE#1280]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1280
[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#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1420]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1420
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1426
[Intel XE#1430]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1430
[Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1447]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1447
[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#1500]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1500
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1512]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1512
[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#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
[Intel XE#1861]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1861
[Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
[Intel XE#1885]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1885
[Intel XE#2042]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2042
[Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
[Intel XE#2134]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2134
[Intel XE#2136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2136
[Intel XE#2159]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2159
[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#2237]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2237
[Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
[Intel XE#2245]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2245
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#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#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#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[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#2350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2350
[Intel XE#2351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2351
[Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
[Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
[Intel XE#2392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2392
[Intel XE#2423]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2423
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2446]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2446
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541
[Intel XE#2571]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2571
[Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
[Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
[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#2838]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2838
[Intel XE#2839]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2839
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2864]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2864
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
[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#2907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2907
[Intel XE#2919]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2919
[Intel XE#2927]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2927
[Intel XE#2932]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2932
[Intel XE#2939]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2939
[Intel XE#2953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2953
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
[Intel XE#3086]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3086
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310
[Intel XE#3113]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3113
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
[Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
[Intel XE#3278]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3278
[Intel XE#330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/330
[Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
[Intel XE#3342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3342
[Intel XE#3343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3343
[Intel XE#3371]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3371
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/346
[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#3487]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3487
[Intel XE#3499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3499
[Intel XE#3507]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3507
[Intel XE#3521]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3521
[Intel XE#3535]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3535
[Intel XE#3539]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3539
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#3546]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3546
[Intel XE#358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/358
[Intel XE#362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/362
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
[Intel XE#569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/569
[Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
[Intel XE#586]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/586
[Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
[Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
[Intel XE#619]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/619
[Intel XE#623]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/623
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
[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#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[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#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977
[Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979
[i915#2575]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2575
Build changes
-------------
* Linux: xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380 -> xe-pw-136052v3
IGT_8118: 17707095f1e5d3c30f463b43022f01c0160579b6 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-2257-e46649e7764a9f6868ccbcba7b8b23b413303380: e46649e7764a9f6868ccbcba7b8b23b413303380
xe-pw-136052v3: 136052v3
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-136052v3/index.html
[-- Attachment #2: Type: text/html, Size: 149369 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP
2024-11-21 9:57 ` Jani Nikula
@ 2024-11-21 17:21 ` Daniele Ceraolo Spurio
2024-11-21 20:03 ` Jani Nikula
0 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-21 17:21 UTC (permalink / raw)
To: Jani Nikula, intel-xe; +Cc: Matthew Brost, Thomas Hellström, John Harrison
On 11/21/2024 1:57 AM, Jani Nikula wrote:
> On Wed, 20 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>> index 419e8e926f00..533bc82255b6 100644
>> --- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>> +++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>> @@ -9,6 +9,9 @@
>> #include <linux/errno.h>
>> #include <linux/types.h>
>>
>> +#include "xe_bo.h"
>> +#include "xe_pxp.h"
>> +
> Can't have this. This will include xe_bo.h and xe_pxp.h from i915
> display.
>
> Basically you can't use gem_to_xe_bo() in static inlines in headers that
> get included to i915 display. It all needs to stay opaque.
Why would this be included to i915 display? This is the copy of the
header used for building the display code with Xe, i915 should use it's
own copy (i915/pxp/intel_pxp.h). Several other headers in the
compat-i915-headers subfolder include Xe headers. Or is the problem
specifically with the BO part of it? Because I can move the code to
xe_pxp.c, but I'd still have to include at least xe_pxp.h.
Daniele
>
> BR,
> Jani.
>
>> struct drm_gem_object;
>> struct xe_pxp;
>>
>> @@ -16,7 +19,15 @@ static inline int intel_pxp_key_check(struct xe_pxp *pxp,
>> struct drm_gem_object *obj,
>> bool assign)
>> {
>> - return -ENODEV;
>> + /*
>> + * The assign variable is used in i915 to assign the key to the BO at
>> + * first submission time. In Xe the key is instead assigned at BO
>> + * creation time, so the assign variable must always be false.
>> + */
>> + if (assign)
>> + return -EINVAL;
>> +
>> + return xe_pxp_key_check(pxp, gem_to_xe_bo(obj));
>> }
>>
>> #endif
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP
2024-11-21 17:21 ` Daniele Ceraolo Spurio
@ 2024-11-21 20:03 ` Jani Nikula
2024-11-21 21:37 ` Daniele Ceraolo Spurio
0 siblings, 1 reply; 38+ messages in thread
From: Jani Nikula @ 2024-11-21 20:03 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
Cc: Matthew Brost, Thomas Hellström, John Harrison
On Thu, 21 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
> On 11/21/2024 1:57 AM, Jani Nikula wrote:
>> On Wed, 20 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>>> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>> index 419e8e926f00..533bc82255b6 100644
>>> --- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>> +++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>> @@ -9,6 +9,9 @@
>>> #include <linux/errno.h>
>>> #include <linux/types.h>
>>>
>>> +#include "xe_bo.h"
>>> +#include "xe_pxp.h"
>>> +
>> Can't have this. This will include xe_bo.h and xe_pxp.h from i915
>> display.
>>
>> Basically you can't use gem_to_xe_bo() in static inlines in headers that
>> get included to i915 display. It all needs to stay opaque.
>
> Why would this be included to i915 display? This is the copy of the
> header used for building the display code with Xe, i915 should use it's
> own copy (i915/pxp/intel_pxp.h). Several other headers in the
> compat-i915-headers subfolder include Xe headers. Or is the problem
> specifically with the BO part of it? Because I can move the code to
> xe_pxp.c, but I'd still have to include at least xe_pxp.h.
With "i915 display", I refer to the display code that gets built for
both i915 and xe. And regardless of which module the code is being built
for, it should not include details like this. The goal is to make it
more and more independent from the two, eventually spawning into a
dedicated module. So we want to axe includes that lead from i915 display
to either i915 or xe core headers.
BR,
Jani.
>
> Daniele
>
>>
>> BR,
>> Jani.
>>
>>> struct drm_gem_object;
>>> struct xe_pxp;
>>>
>>> @@ -16,7 +19,15 @@ static inline int intel_pxp_key_check(struct xe_pxp *pxp,
>>> struct drm_gem_object *obj,
>>> bool assign)
>>> {
>>> - return -ENODEV;
>>> + /*
>>> + * The assign variable is used in i915 to assign the key to the BO at
>>> + * first submission time. In Xe the key is instead assigned at BO
>>> + * creation time, so the assign variable must always be false.
>>> + */
>>> + if (assign)
>>> + return -EINVAL;
>>> +
>>> + return xe_pxp_key_check(pxp, gem_to_xe_bo(obj));
>>> }
>>>
>>> #endif
>
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP
2024-11-21 20:03 ` Jani Nikula
@ 2024-11-21 21:37 ` Daniele Ceraolo Spurio
2024-11-22 15:06 ` Jani Nikula
0 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-21 21:37 UTC (permalink / raw)
To: Jani Nikula, intel-xe; +Cc: Matthew Brost, Thomas Hellström, John Harrison
On 11/21/2024 12:03 PM, Jani Nikula wrote:
> On Thu, 21 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>> On 11/21/2024 1:57 AM, Jani Nikula wrote:
>>> On Wed, 20 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>>>> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>> index 419e8e926f00..533bc82255b6 100644
>>>> --- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>> +++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>> @@ -9,6 +9,9 @@
>>>> #include <linux/errno.h>
>>>> #include <linux/types.h>
>>>>
>>>> +#include "xe_bo.h"
>>>> +#include "xe_pxp.h"
>>>> +
>>> Can't have this. This will include xe_bo.h and xe_pxp.h from i915
>>> display.
>>>
>>> Basically you can't use gem_to_xe_bo() in static inlines in headers that
>>> get included to i915 display. It all needs to stay opaque.
>> Why would this be included to i915 display? This is the copy of the
>> header used for building the display code with Xe, i915 should use it's
>> own copy (i915/pxp/intel_pxp.h). Several other headers in the
>> compat-i915-headers subfolder include Xe headers. Or is the problem
>> specifically with the BO part of it? Because I can move the code to
>> xe_pxp.c, but I'd still have to include at least xe_pxp.h.
> With "i915 display", I refer to the display code that gets built for
> both i915 and xe. And regardless of which module the code is being built
> for, it should not include details like this. The goal is to make it
> more and more independent from the two, eventually spawning into a
> dedicated module. So we want to axe includes that lead from i915 display
> to either i915 or xe core headers.
Ok that makes sense, but I'm not sure if it can be easily avoided here.
The PXP key is managed outside of the display code, so we do need a
callback into Xe or i915 to get that info. The only way I can see that
being doable without the different headers is if we pass a function
pointer at display init time and keep that stored inside the
intel_display structure. That to me sounds like something that should be
introduced more structurally for multiple callbacks into i915/xe instead
of just for PXP, but I can do it if that's the preference.
thanks,
Daniele
>
> BR,
> Jani.
>
>
>
>> Daniele
>>
>>> BR,
>>> Jani.
>>>
>>>> struct drm_gem_object;
>>>> struct xe_pxp;
>>>>
>>>> @@ -16,7 +19,15 @@ static inline int intel_pxp_key_check(struct xe_pxp *pxp,
>>>> struct drm_gem_object *obj,
>>>> bool assign)
>>>> {
>>>> - return -ENODEV;
>>>> + /*
>>>> + * The assign variable is used in i915 to assign the key to the BO at
>>>> + * first submission time. In Xe the key is instead assigned at BO
>>>> + * creation time, so the assign variable must always be false.
>>>> + */
>>>> + if (assign)
>>>> + return -EINVAL;
>>>> +
>>>> + return xe_pxp_key_check(pxp, gem_to_xe_bo(obj));
>>>> }
>>>>
>>>> #endif
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP
2024-11-21 21:37 ` Daniele Ceraolo Spurio
@ 2024-11-22 15:06 ` Jani Nikula
2024-11-22 17:00 ` Daniele Ceraolo Spurio
0 siblings, 1 reply; 38+ messages in thread
From: Jani Nikula @ 2024-11-22 15:06 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
Cc: Matthew Brost, Thomas Hellström, John Harrison
On Thu, 21 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
> On 11/21/2024 12:03 PM, Jani Nikula wrote:
>> On Thu, 21 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>>> On 11/21/2024 1:57 AM, Jani Nikula wrote:
>>>> On Wed, 20 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>>>>> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>>> index 419e8e926f00..533bc82255b6 100644
>>>>> --- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>>> +++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>>> @@ -9,6 +9,9 @@
>>>>> #include <linux/errno.h>
>>>>> #include <linux/types.h>
>>>>>
>>>>> +#include "xe_bo.h"
>>>>> +#include "xe_pxp.h"
>>>>> +
>>>> Can't have this. This will include xe_bo.h and xe_pxp.h from i915
>>>> display.
>>>>
>>>> Basically you can't use gem_to_xe_bo() in static inlines in headers that
>>>> get included to i915 display. It all needs to stay opaque.
>>> Why would this be included to i915 display? This is the copy of the
>>> header used for building the display code with Xe, i915 should use it's
>>> own copy (i915/pxp/intel_pxp.h). Several other headers in the
>>> compat-i915-headers subfolder include Xe headers. Or is the problem
>>> specifically with the BO part of it? Because I can move the code to
>>> xe_pxp.c, but I'd still have to include at least xe_pxp.h.
>> With "i915 display", I refer to the display code that gets built for
>> both i915 and xe. And regardless of which module the code is being built
>> for, it should not include details like this. The goal is to make it
>> more and more independent from the two, eventually spawning into a
>> dedicated module. So we want to axe includes that lead from i915 display
>> to either i915 or xe core headers.
>
> Ok that makes sense, but I'm not sure if it can be easily avoided here.
> The PXP key is managed outside of the display code, so we do need a
> callback into Xe or i915 to get that info. The only way I can see that
> being doable without the different headers is if we pass a function
> pointer at display init time and keep that stored inside the
> intel_display structure. That to me sounds like something that should be
> introduced more structurally for multiple callbacks into i915/xe instead
> of just for PXP, but I can do it if that's the preference.
Why not make xe_pxp_key_check() accept struct drm_gem_object * instead
of struct xe_bo *? Basically all the interfaces to/from display will
need to use i915/xe independent types anyway.
See ad36a322619c ("drm/i915/display: convert skl_universal_plane.c to
struct drm_gem_object") which converts i915 pxp. And i915 display gets
to use either opaque types or generic drm types.
BR,
Jani.
>
> thanks,
> Daniele
>
>>
>> BR,
>> Jani.
>>
>>
>>
>>> Daniele
>>>
>>>> BR,
>>>> Jani.
>>>>
>>>>> struct drm_gem_object;
>>>>> struct xe_pxp;
>>>>>
>>>>> @@ -16,7 +19,15 @@ static inline int intel_pxp_key_check(struct xe_pxp *pxp,
>>>>> struct drm_gem_object *obj,
>>>>> bool assign)
>>>>> {
>>>>> - return -ENODEV;
>>>>> + /*
>>>>> + * The assign variable is used in i915 to assign the key to the BO at
>>>>> + * first submission time. In Xe the key is instead assigned at BO
>>>>> + * creation time, so the assign variable must always be false.
>>>>> + */
>>>>> + if (assign)
>>>>> + return -EINVAL;
>>>>> +
>>>>> + return xe_pxp_key_check(pxp, gem_to_xe_bo(obj));
>>>>> }
>>>>>
>>>>> #endif
>
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP
2024-11-22 15:06 ` Jani Nikula
@ 2024-11-22 17:00 ` Daniele Ceraolo Spurio
2024-11-25 15:30 ` Jani Nikula
0 siblings, 1 reply; 38+ messages in thread
From: Daniele Ceraolo Spurio @ 2024-11-22 17:00 UTC (permalink / raw)
To: Jani Nikula, intel-xe; +Cc: Matthew Brost, Thomas Hellström, John Harrison
On 11/22/2024 7:06 AM, Jani Nikula wrote:
> On Thu, 21 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>> On 11/21/2024 12:03 PM, Jani Nikula wrote:
>>> On Thu, 21 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>>>> On 11/21/2024 1:57 AM, Jani Nikula wrote:
>>>>> On Wed, 20 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>>>>>> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>>>> index 419e8e926f00..533bc82255b6 100644
>>>>>> --- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>>>> +++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>>>> @@ -9,6 +9,9 @@
>>>>>> #include <linux/errno.h>
>>>>>> #include <linux/types.h>
>>>>>>
>>>>>> +#include "xe_bo.h"
>>>>>> +#include "xe_pxp.h"
>>>>>> +
>>>>> Can't have this. This will include xe_bo.h and xe_pxp.h from i915
>>>>> display.
>>>>>
>>>>> Basically you can't use gem_to_xe_bo() in static inlines in headers that
>>>>> get included to i915 display. It all needs to stay opaque.
>>>> Why would this be included to i915 display? This is the copy of the
>>>> header used for building the display code with Xe, i915 should use it's
>>>> own copy (i915/pxp/intel_pxp.h). Several other headers in the
>>>> compat-i915-headers subfolder include Xe headers. Or is the problem
>>>> specifically with the BO part of it? Because I can move the code to
>>>> xe_pxp.c, but I'd still have to include at least xe_pxp.h.
>>> With "i915 display", I refer to the display code that gets built for
>>> both i915 and xe. And regardless of which module the code is being built
>>> for, it should not include details like this. The goal is to make it
>>> more and more independent from the two, eventually spawning into a
>>> dedicated module. So we want to axe includes that lead from i915 display
>>> to either i915 or xe core headers.
>> Ok that makes sense, but I'm not sure if it can be easily avoided here.
>> The PXP key is managed outside of the display code, so we do need a
>> callback into Xe or i915 to get that info. The only way I can see that
>> being doable without the different headers is if we pass a function
>> pointer at display init time and keep that stored inside the
>> intel_display structure. That to me sounds like something that should be
>> introduced more structurally for multiple callbacks into i915/xe instead
>> of just for PXP, but I can do it if that's the preference.
> Why not make xe_pxp_key_check() accept struct drm_gem_object * instead
> of struct xe_bo *? Basically all the interfaces to/from display will
> need to use i915/xe independent types anyway.
I can do that, but I'd still need to include xe_pxp.h to bring in
xe_pxp_key_check(), so there is still going to be an include that goes
from display into Xe. If that's ok for now, I'll go that way.
Daniele
>
> See ad36a322619c ("drm/i915/display: convert skl_universal_plane.c to
> struct drm_gem_object") which converts i915 pxp. And i915 display gets
> to use either opaque types or generic drm types.
>
> BR,
> Jani.
>
>
>
>> thanks,
>> Daniele
>>
>>> BR,
>>> Jani.
>>>
>>>
>>>
>>>> Daniele
>>>>
>>>>> BR,
>>>>> Jani.
>>>>>
>>>>>> struct drm_gem_object;
>>>>>> struct xe_pxp;
>>>>>>
>>>>>> @@ -16,7 +19,15 @@ static inline int intel_pxp_key_check(struct xe_pxp *pxp,
>>>>>> struct drm_gem_object *obj,
>>>>>> bool assign)
>>>>>> {
>>>>>> - return -ENODEV;
>>>>>> + /*
>>>>>> + * The assign variable is used in i915 to assign the key to the BO at
>>>>>> + * first submission time. In Xe the key is instead assigned at BO
>>>>>> + * creation time, so the assign variable must always be false.
>>>>>> + */
>>>>>> + if (assign)
>>>>>> + return -EINVAL;
>>>>>> +
>>>>>> + return xe_pxp_key_check(pxp, gem_to_xe_bo(obj));
>>>>>> }
>>>>>>
>>>>>> #endif
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP
2024-11-22 17:00 ` Daniele Ceraolo Spurio
@ 2024-11-25 15:30 ` Jani Nikula
0 siblings, 0 replies; 38+ messages in thread
From: Jani Nikula @ 2024-11-25 15:30 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
Cc: Matthew Brost, Thomas Hellström, John Harrison
On Fri, 22 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
> On 11/22/2024 7:06 AM, Jani Nikula wrote:
>> On Thu, 21 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>>> On 11/21/2024 12:03 PM, Jani Nikula wrote:
>>>> On Thu, 21 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>>>>> On 11/21/2024 1:57 AM, Jani Nikula wrote:
>>>>>> On Wed, 20 Nov 2024, Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> wrote:
>>>>>>> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>>>>> index 419e8e926f00..533bc82255b6 100644
>>>>>>> --- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>>>>> +++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
>>>>>>> @@ -9,6 +9,9 @@
>>>>>>> #include <linux/errno.h>
>>>>>>> #include <linux/types.h>
>>>>>>>
>>>>>>> +#include "xe_bo.h"
>>>>>>> +#include "xe_pxp.h"
>>>>>>> +
>>>>>> Can't have this. This will include xe_bo.h and xe_pxp.h from i915
>>>>>> display.
>>>>>>
>>>>>> Basically you can't use gem_to_xe_bo() in static inlines in headers that
>>>>>> get included to i915 display. It all needs to stay opaque.
>>>>> Why would this be included to i915 display? This is the copy of the
>>>>> header used for building the display code with Xe, i915 should use it's
>>>>> own copy (i915/pxp/intel_pxp.h). Several other headers in the
>>>>> compat-i915-headers subfolder include Xe headers. Or is the problem
>>>>> specifically with the BO part of it? Because I can move the code to
>>>>> xe_pxp.c, but I'd still have to include at least xe_pxp.h.
>>>> With "i915 display", I refer to the display code that gets built for
>>>> both i915 and xe. And regardless of which module the code is being built
>>>> for, it should not include details like this. The goal is to make it
>>>> more and more independent from the two, eventually spawning into a
>>>> dedicated module. So we want to axe includes that lead from i915 display
>>>> to either i915 or xe core headers.
>>> Ok that makes sense, but I'm not sure if it can be easily avoided here.
>>> The PXP key is managed outside of the display code, so we do need a
>>> callback into Xe or i915 to get that info. The only way I can see that
>>> being doable without the different headers is if we pass a function
>>> pointer at display init time and keep that stored inside the
>>> intel_display structure. That to me sounds like something that should be
>>> introduced more structurally for multiple callbacks into i915/xe instead
>>> of just for PXP, but I can do it if that's the preference.
>> Why not make xe_pxp_key_check() accept struct drm_gem_object * instead
>> of struct xe_bo *? Basically all the interfaces to/from display will
>> need to use i915/xe independent types anyway.
>
> I can do that, but I'd still need to include xe_pxp.h to bring in
> xe_pxp_key_check(), so there is still going to be an include that goes
> from display into Xe. If that's ok for now, I'll go that way.
It's better. As long as it doesn't bring in a ton of dependencies.
BR,
Jani.
>
> Daniele
>
>>
>> See ad36a322619c ("drm/i915/display: convert skl_universal_plane.c to
>> struct drm_gem_object") which converts i915 pxp. And i915 display gets
>> to use either opaque types or generic drm types.
>>
>> BR,
>> Jani.
>>
>>
>>
>>> thanks,
>>> Daniele
>>>
>>>> BR,
>>>> Jani.
>>>>
>>>>
>>>>
>>>>> Daniele
>>>>>
>>>>>> BR,
>>>>>> Jani.
>>>>>>
>>>>>>> struct drm_gem_object;
>>>>>>> struct xe_pxp;
>>>>>>>
>>>>>>> @@ -16,7 +19,15 @@ static inline int intel_pxp_key_check(struct xe_pxp *pxp,
>>>>>>> struct drm_gem_object *obj,
>>>>>>> bool assign)
>>>>>>> {
>>>>>>> - return -ENODEV;
>>>>>>> + /*
>>>>>>> + * The assign variable is used in i915 to assign the key to the BO at
>>>>>>> + * first submission time. In Xe the key is instead assigned at BO
>>>>>>> + * creation time, so the assign variable must always be false.
>>>>>>> + */
>>>>>>> + if (assign)
>>>>>>> + return -EINVAL;
>>>>>>> +
>>>>>>> + return xe_pxp_key_check(pxp, gem_to_xe_bo(obj));
>>>>>>> }
>>>>>>>
>>>>>>> #endif
>
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 01/12] drm/xe/pxp: Initialize PXP structure and KCR reg
2024-11-20 23:43 ` [PATCH v3 01/12] drm/xe/pxp: Initialize PXP structure and KCR reg Daniele Ceraolo Spurio
@ 2024-12-06 1:59 ` John Harrison
0 siblings, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-06 1:59 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> As the first step towards adding PXP support, hook in the PXP init
> function, allocate the PXP structure and initialize the KCR register to
> allow PXP HWDRM sessions.
>
> v2: remove unneeded includes, free PXP memory on error (John)
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
> ---
> drivers/gpu/drm/xe/Makefile | 1 +
> .../xe/compat-i915-headers/pxp/intel_pxp.h | 4 +-
> drivers/gpu/drm/xe/regs/xe_pxp_regs.h | 17 +++
> drivers/gpu/drm/xe/xe_device.c | 6 +
> drivers/gpu/drm/xe/xe_device_types.h | 8 +-
> drivers/gpu/drm/xe/xe_pci.c | 2 +
> drivers/gpu/drm/xe/xe_pxp.c | 107 ++++++++++++++++++
> drivers/gpu/drm/xe/xe_pxp.h | 13 +++
> drivers/gpu/drm/xe/xe_pxp_types.h | 26 +++++
> 9 files changed, 180 insertions(+), 4 deletions(-)
> create mode 100644 drivers/gpu/drm/xe/regs/xe_pxp_regs.h
> create mode 100644 drivers/gpu/drm/xe/xe_pxp.c
> create mode 100644 drivers/gpu/drm/xe/xe_pxp.h
> create mode 100644 drivers/gpu/drm/xe/xe_pxp_types.h
>
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index a93e6fcc0ad9..3c0bd3c814de 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -86,6 +86,7 @@ xe-y += xe_bb.o \
> xe_preempt_fence.o \
> xe_pt.o \
> xe_pt_walk.o \
> + xe_pxp.o \
> xe_query.o \
> xe_range_fence.o \
> xe_reg_sr.o \
> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
> index 5dfc587c8237..419e8e926f00 100644
> --- a/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
> +++ b/drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
> @@ -10,9 +10,9 @@
> #include <linux/types.h>
>
> struct drm_gem_object;
> -struct intel_pxp;
> +struct xe_pxp;
>
> -static inline int intel_pxp_key_check(struct intel_pxp *pxp,
> +static inline int intel_pxp_key_check(struct xe_pxp *pxp,
> struct drm_gem_object *obj,
> bool assign)
> {
> diff --git a/drivers/gpu/drm/xe/regs/xe_pxp_regs.h b/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
> new file mode 100644
> index 000000000000..d67cf210d23d
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
> @@ -0,0 +1,17 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright(c) 2024, Intel Corporation. All rights reserved.
> + */
> +
> +#ifndef __XE_PXP_REGS_H__
> +#define __XE_PXP_REGS_H__
> +
> +#include "regs/xe_regs.h"
> +
> +/* The following registers are only valid on platforms with a media GT */
> +
> +/* KCR enable/disable control */
> +#define KCR_INIT XE_REG(0x3860f0)
> +#define KCR_INIT_ALLOW_DISPLAY_ME_WRITES REG_BIT(14)
> +
> +#endif /* __XE_PXP_REGS_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 930bb2750e2e..b79cf470c169 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -49,6 +49,7 @@
> #include "xe_pat.h"
> #include "xe_pcode.h"
> #include "xe_pm.h"
> +#include "xe_pxp.h"
> #include "xe_query.h"
> #include "xe_sriov.h"
> #include "xe_tile.h"
> @@ -746,6 +747,11 @@ int xe_device_probe(struct xe_device *xe)
> if (err)
> goto err_fini_oa;
>
> + /* A PXP init failure is not fatal */
> + err = xe_pxp_init(xe);
> + if (err && err != -EOPNOTSUPP)
> + drm_err(&xe->drm, "PXP initialization failed: %pe\n", ERR_PTR(err));
> +
> err = drm_dev_register(&xe->drm, 0);
> if (err)
> goto err_fini_display;
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index 8592f1b02db1..7f420d2e3ccc 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -34,6 +34,7 @@
>
> struct xe_ggtt;
> struct xe_pat_ops;
> +struct xe_pxp;
>
> #define XE_BO_INVALID_OFFSET LONG_MAX
>
> @@ -306,6 +307,8 @@ struct xe_device {
> u8 has_llc:1;
> /** @info.has_mmio_ext: Device has extra MMIO address range */
> u8 has_mmio_ext:1;
> + /** @info.has_pxp: Device has PXP support */
> + u8 has_pxp:1;
> /** @info.has_range_tlb_invalidation: Has range based TLB invalidations */
> u8 has_range_tlb_invalidation:1;
> /** @info.has_sriov: Supports SR-IOV */
> @@ -496,6 +499,9 @@ struct xe_device {
> /** @oa: oa observation subsystem */
> struct xe_oa oa;
>
> + /** @pxp: Encapsulate Protected Xe Path support */
> + struct xe_pxp *pxp;
> +
> /** @needs_flr_on_fini: requests function-reset on fini */
> bool needs_flr_on_fini;
>
> @@ -568,8 +574,6 @@ struct xe_device {
> unsigned int czclk_freq;
> unsigned int fsb_freq, mem_freq, is_ddr3;
> };
> -
> - void *pxp;
> #endif
> };
>
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index 9b81e7d00a86..de5034979ec3 100644
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -62,6 +62,7 @@ struct xe_device_desc {
> u8 has_heci_cscfi:1;
> u8 has_llc:1;
> u8 has_mmio_ext:1;
> + u8 has_pxp:1;
> u8 has_sriov:1;
> u8 skip_guc_pc:1;
> u8 skip_mtcfg:1;
> @@ -623,6 +624,7 @@ static int xe_info_init_early(struct xe_device *xe,
> xe->info.has_heci_cscfi = desc->has_heci_cscfi;
> xe->info.has_llc = desc->has_llc;
> xe->info.has_mmio_ext = desc->has_mmio_ext;
> + xe->info.has_pxp = desc->has_pxp;
> xe->info.has_sriov = desc->has_sriov;
> xe->info.skip_guc_pc = desc->skip_guc_pc;
> xe->info.skip_mtcfg = desc->skip_mtcfg;
> diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
> new file mode 100644
> index 000000000000..1a4d12d37d96
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_pxp.c
> @@ -0,0 +1,107 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright(c) 2024 Intel Corporation.
> + */
> +
> +#include "xe_pxp.h"
> +
> +#include <drm/drm_managed.h>
> +
> +#include "xe_device_types.h"
> +#include "xe_force_wake.h"
> +#include "xe_gt.h"
> +#include "xe_gt_types.h"
> +#include "xe_mmio.h"
> +#include "xe_pxp_types.h"
> +#include "xe_uc_fw.h"
> +#include "regs/xe_pxp_regs.h"
> +
> +/**
> + * DOC: PXP
> + *
> + * PXP (Protected Xe Path) allows execution and flip to display of protected
> + * (i.e. encrypted) objects. This feature is currently only supported in
> + * integrated parts.
> + */
> +
> +static bool pxp_is_supported(const struct xe_device *xe)
> +{
> + return xe->info.has_pxp && IS_ENABLED(CONFIG_INTEL_MEI_GSC_PROXY);
> +}
> +
> +static int kcr_pxp_set_status(const struct xe_pxp *pxp, bool enable)
> +{
> + u32 val = enable ? _MASKED_BIT_ENABLE(KCR_INIT_ALLOW_DISPLAY_ME_WRITES) :
> + _MASKED_BIT_DISABLE(KCR_INIT_ALLOW_DISPLAY_ME_WRITES);
> + unsigned int fw_ref;
> +
> + fw_ref = xe_force_wake_get(gt_to_fw(pxp->gt), XE_FW_GT);
> + if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_GT))
> + return -EIO;
> +
> + xe_mmio_write32(&pxp->gt->mmio, KCR_INIT, val);
> + xe_force_wake_put(gt_to_fw(pxp->gt), fw_ref);
> +
> + return 0;
> +}
> +
> +static int kcr_pxp_enable(const struct xe_pxp *pxp)
> +{
> + return kcr_pxp_set_status(pxp, true);
> +}
> +
> +/**
> + * xe_pxp_init - initialize PXP support
> + * @xe: the xe_device structure
> + *
> + * Initialize the HW state and allocate the objects required for PXP support.
> + * Note that some of the requirement for PXP support (GSC proxy init, HuC auth)
> + * are performed asynchronously as part of the GSC init. PXP can only be used
> + * after both this function and the async worker have completed.
> + *
> + * Returns -EOPNOTSUPP if PXP is not supported, 0 if PXP initialization is
> + * successful, other errno value if there is an error during the init.
> + */
> +int xe_pxp_init(struct xe_device *xe)
> +{
> + struct xe_gt *gt = xe->tiles[0].media_gt;
> + struct xe_pxp *pxp;
> + int err;
> +
> + if (!pxp_is_supported(xe))
> + return -EOPNOTSUPP;
> +
> + /* we only support PXP on single tile devices with a media GT */
> + if (xe->info.tile_count > 1 || !gt)
> + return -EOPNOTSUPP;
> +
> + /* The GSCCS is required for submissions to the GSC FW */
> + if (!(gt->info.engine_mask & BIT(XE_HW_ENGINE_GSCCS0)))
> + return -EOPNOTSUPP;
> +
> + /* PXP requires both GSC and HuC firmwares to be available */
> + if (!xe_uc_fw_is_loadable(>->uc.gsc.fw) ||
> + !xe_uc_fw_is_loadable(>->uc.huc.fw)) {
> + drm_info(&xe->drm, "skipping PXP init due to missing FW dependencies");
> + return -EOPNOTSUPP;
> + }
> +
> + pxp = drmm_kzalloc(&xe->drm, sizeof(struct xe_pxp), GFP_KERNEL);
> + if (!pxp)
> + return -ENOMEM;
> +
> + pxp->xe = xe;
> + pxp->gt = gt;
> +
> + err = kcr_pxp_enable(pxp);
> + if (err)
> + goto out_free;
> +
> + xe->pxp = pxp;
> +
> + return 0;
> +
> +out_free:
> + drmm_kfree(&xe->drm, pxp);
> + return err;
> +}
> diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
> new file mode 100644
> index 000000000000..00f5e688c0d9
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_pxp.h
> @@ -0,0 +1,13 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright(c) 2024, Intel Corporation. All rights reserved.
> + */
> +
> +#ifndef __XE_PXP_H__
> +#define __XE_PXP_H__
> +
> +struct xe_device;
> +
> +int xe_pxp_init(struct xe_device *xe);
> +
> +#endif /* __XE_PXP_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
> new file mode 100644
> index 000000000000..4639cf49d267
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_pxp_types.h
> @@ -0,0 +1,26 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright(c) 2024, Intel Corporation. All rights reserved.
> + */
> +
> +#ifndef __XE_PXP_TYPES_H__
> +#define __XE_PXP_TYPES_H__
> +
> +struct xe_device;
> +struct xe_gt;
> +
> +/**
> + * struct xe_pxp - pxp state
> + */
> +struct xe_pxp {
> + /** @xe: Backpoiner to the xe_device struct */
> + struct xe_device *xe;
> +
> + /**
> + * @gt: pointer to the gt that owns the submission-side of PXP
> + * (VDBOX, KCR and GSC)
> + */
> + struct xe_gt *gt;
> +};
> +
> +#endif /* __XE_PXP_TYPES_H__ */
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 02/12] drm/xe/pxp: Allocate PXP execution resources
2024-11-20 23:43 ` [PATCH v3 02/12] drm/xe/pxp: Allocate PXP execution resources Daniele Ceraolo Spurio
@ 2024-12-06 2:10 ` John Harrison
2024-12-06 23:49 ` John Harrison
1 sibling, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-06 2:10 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe; +Cc: Matthew Brost, Thomas Hellström
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> PXP requires submissions to the HW for the following operations
>
> 1) Key invalidation, done via the VCS engine
> 2) Communication with the GSC FW for session management, done via the
> GSCCS.
>
> Key invalidation submissions are serialized (only 1 termination can be
> serviced at a given time) and done via GGTT, so we can allocate a simple
> BO and a kernel queue for it.
>
> Submissions for session management are tied to a PXP client (identified
> by a unique host_session_id); from the GSC POV this is a user-accessible
> construct, so all related submission must be done via PPGTT. The driver
> does not currently support PPGTT submission from within the kernel, so
> to add this support, the following changes have been included:
>
> - a new type of kernel-owned VM (marked as GSC), required to ensure we
> don't use fault mode on the engine and to mark the different lock
> usage with lockdep.
> - a new function to map a BO into a VM from within the kernel.
>
> v2: improve comments and function name, remove unneeded include (John)
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h | 7 +
> drivers/gpu/drm/xe/xe_exec_queue.c | 3 +
> drivers/gpu/drm/xe/xe_pxp.c | 23 +-
> drivers/gpu/drm/xe/xe_pxp_submit.c | 200 ++++++++++++++++++
> drivers/gpu/drm/xe/xe_pxp_submit.h | 14 ++
> drivers/gpu/drm/xe/xe_pxp_types.h | 48 +++++
> drivers/gpu/drm/xe/xe_vm.c | 119 ++++++++++-
> drivers/gpu/drm/xe/xe_vm.h | 6 +
> drivers/gpu/drm/xe/xe_vm_types.h | 1 +
> 10 files changed, 411 insertions(+), 11 deletions(-)
> create mode 100644 drivers/gpu/drm/xe/xe_pxp_submit.c
> create mode 100644 drivers/gpu/drm/xe/xe_pxp_submit.h
>
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index 3c0bd3c814de..126c8f1ab673 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -87,6 +87,7 @@ xe-y += xe_bb.o \
> xe_pt.o \
> xe_pt_walk.o \
> xe_pxp.o \
> + xe_pxp_submit.o \
> xe_query.o \
> xe_range_fence.o \
> xe_reg_sr.o \
> diff --git a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> index 57520809e48d..f3c4cf10ba20 100644
> --- a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> +++ b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> @@ -6,6 +6,7 @@
> #ifndef _ABI_GSC_PXP_COMMANDS_ABI_H
> #define _ABI_GSC_PXP_COMMANDS_ABI_H
>
> +#include <linux/sizes.h>
> #include <linux/types.h>
>
> /* Heci client ID for PXP commands */
> @@ -13,6 +14,12 @@
>
> #define PXP_APIVER(x, y) (((x) & 0xFFFF) << 16 | ((y) & 0xFFFF))
>
> +/*
> + * A PXP sub-section in an HECI packet can be up to 64K big in each direction.
> + * This does not include the top-level GSC header.
> + */
> +#define PXP_MAX_PACKET_SIZE SZ_64K
> +
> /*
> * there are a lot of status codes for PXP, but we only define the cross-API
> * common ones that we actually can handle in the kernel driver. Other failure
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
> index aab9e561153d..60418debc1ec 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -150,6 +150,9 @@ struct xe_exec_queue *xe_exec_queue_create(struct xe_device *xe, struct xe_vm *v
> struct xe_exec_queue *q;
> int err;
>
> + /* VMs for GSCCS queues (and only those) must have the XE_VM_FLAG_GSC flag */
> + xe_assert(xe, !vm || (!!(vm->flags & XE_VM_FLAG_GSC) == !!(hwe->engine_id == XE_HW_ENGINE_GSCCS0)));
> +
> q = __xe_exec_queue_alloc(xe, vm, logical_mask, width, hwe, flags,
> extensions);
> if (IS_ERR(q))
> diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
> index 1a4d12d37d96..89d71a69cdff 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.c
> +++ b/drivers/gpu/drm/xe/xe_pxp.c
> @@ -12,6 +12,7 @@
> #include "xe_gt.h"
> #include "xe_gt_types.h"
> #include "xe_mmio.h"
> +#include "xe_pxp_submit.h"
> #include "xe_pxp_types.h"
> #include "xe_uc_fw.h"
> #include "regs/xe_pxp_regs.h"
> @@ -50,6 +51,20 @@ static int kcr_pxp_enable(const struct xe_pxp *pxp)
> return kcr_pxp_set_status(pxp, true);
> }
>
> +static int kcr_pxp_disable(const struct xe_pxp *pxp)
> +{
> + return kcr_pxp_set_status(pxp, false);
> +}
> +
> +static void pxp_fini(void *arg)
> +{
> + struct xe_pxp *pxp = arg;
> +
> + xe_pxp_destroy_execution_resources(pxp);
> +
> + /* no need to explicitly disable KCR since we're going to do an FLR */
> +}
> +
> /**
> * xe_pxp_init - initialize PXP support
> * @xe: the xe_device structure
> @@ -97,10 +112,16 @@ int xe_pxp_init(struct xe_device *xe)
> if (err)
> goto out_free;
>
> + err = xe_pxp_allocate_execution_resources(pxp);
> + if (err)
> + goto out_kcr_disable;
> +
> xe->pxp = pxp;
>
> - return 0;
> + return devm_add_action_or_reset(xe->drm.dev, pxp_fini, pxp);
>
> +out_kcr_disable:
> + kcr_pxp_disable(pxp);
> out_free:
> drmm_kfree(&xe->drm, pxp);
> return err;
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.c b/drivers/gpu/drm/xe/xe_pxp_submit.c
> new file mode 100644
> index 000000000000..196c0e5bbb17
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.c
> @@ -0,0 +1,200 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright(c) 2024 Intel Corporation.
> + */
> +
> +#include "xe_pxp_submit.h"
> +
> +#include <uapi/drm/xe_drm.h>
> +
> +#include "xe_device_types.h"
> +#include "xe_bo.h"
> +#include "xe_exec_queue.h"
> +#include "xe_gsc_submit.h"
> +#include "xe_gt.h"
> +#include "xe_pxp_types.h"
> +#include "xe_vm.h"
> +
> +/*
> + * The VCS is used for kernel-owned GGTT submissions to issue key termination.
> + * Terminations are serialized, so we only need a single queue and a single
> + * batch.
> + */
> +static int allocate_vcs_execution_resources(struct xe_pxp *pxp)
> +{
> + struct xe_gt *gt = pxp->gt;
> + struct xe_device *xe = pxp->xe;
> + struct xe_tile *tile = gt_to_tile(gt);
> + struct xe_hw_engine *hwe;
> + struct xe_exec_queue *q;
> + struct xe_bo *bo;
> + int err;
> +
> + hwe = xe_gt_hw_engine(gt, XE_ENGINE_CLASS_VIDEO_DECODE, 0, true);
> + if (!hwe)
> + return -ENODEV;
> +
> + q = xe_exec_queue_create(xe, NULL, BIT(hwe->logical_instance), 1, hwe,
> + EXEC_QUEUE_FLAG_KERNEL | EXEC_QUEUE_FLAG_PERMANENT, 0);
> + if (IS_ERR(q))
> + return PTR_ERR(q);
> +
> + /*
> + * Each termination is 16 DWORDS, so 4K is enough to contain a
> + * termination for each sessions.
> + */
> + bo = xe_bo_create_pin_map(xe, tile, 0, SZ_4K, ttm_bo_type_kernel,
> + XE_BO_FLAG_SYSTEM | XE_BO_FLAG_PINNED | XE_BO_FLAG_GGTT);
> + if (IS_ERR(bo)) {
> + err = PTR_ERR(bo);
> + goto out_queue;
> + }
> +
> + pxp->vcs_exec.q = q;
> + pxp->vcs_exec.bo = bo;
> +
> + return 0;
> +
> +out_queue:
> + xe_exec_queue_put(q);
> + return err;
> +}
> +
> +static void destroy_vcs_execution_resources(struct xe_pxp *pxp)
> +{
> + if (pxp->vcs_exec.bo)
> + xe_bo_unpin_map_no_vm(pxp->vcs_exec.bo);
> +
> + if (pxp->vcs_exec.q)
> + xe_exec_queue_put(pxp->vcs_exec.q);
> +}
> +
> +#define PXP_BB_SIZE XE_PAGE_SIZE
> +static int allocate_gsc_client_resources(struct xe_gt *gt,
> + struct xe_pxp_gsc_client_resources *gsc_res,
> + size_t inout_size)
> +{
> + struct xe_tile *tile = gt_to_tile(gt);
> + struct xe_device *xe = tile_to_xe(tile);
> + struct xe_hw_engine *hwe;
> + struct xe_vm *vm;
> + struct xe_bo *bo;
> + struct xe_exec_queue *q;
> + struct dma_fence *fence;
> + long timeout;
> + int err = 0;
> +
> + hwe = xe_gt_hw_engine(gt, XE_ENGINE_CLASS_OTHER, 0, true);
> +
> + /* we shouldn't reach here if the GSC engine is not available */
> + xe_assert(xe, hwe);
> +
> + /* PXP instructions must be issued from PPGTT */
> + vm = xe_vm_create(xe, XE_VM_FLAG_GSC);
> + if (IS_ERR(vm))
> + return PTR_ERR(vm);
> +
> + /* We allocate a single object for the batch and the in/out memory */
> + xe_vm_lock(vm, false);
> + bo = xe_bo_create_pin_map(xe, tile, vm, PXP_BB_SIZE + inout_size * 2,
> + ttm_bo_type_kernel,
> + XE_BO_FLAG_SYSTEM | XE_BO_FLAG_PINNED | XE_BO_FLAG_NEEDS_UC);
> + xe_vm_unlock(vm);
> + if (IS_ERR(bo)) {
> + err = PTR_ERR(bo);
> + goto vm_out;
> + }
> +
> + fence = xe_vm_bind_kernel_bo(vm, bo, NULL, 0, XE_CACHE_WB);
> + if (IS_ERR(fence)) {
> + err = PTR_ERR(fence);
> + goto bo_out;
> + }
> +
> + timeout = dma_fence_wait_timeout(fence, false, HZ);
> + dma_fence_put(fence);
> + if (timeout <= 0) {
> + err = timeout ?: -ETIME;
> + goto bo_out;
> + }
> +
> + q = xe_exec_queue_create(xe, vm, BIT(hwe->logical_instance), 1, hwe,
> + EXEC_QUEUE_FLAG_KERNEL |
> + EXEC_QUEUE_FLAG_PERMANENT, 0);
> + if (IS_ERR(q)) {
> + err = PTR_ERR(q);
> + goto bo_out;
> + }
> +
> + gsc_res->vm = vm;
> + gsc_res->bo = bo;
> + gsc_res->inout_size = inout_size;
> + gsc_res->batch = IOSYS_MAP_INIT_OFFSET(&bo->vmap, 0);
> + gsc_res->msg_in = IOSYS_MAP_INIT_OFFSET(&bo->vmap, PXP_BB_SIZE);
> + gsc_res->msg_out = IOSYS_MAP_INIT_OFFSET(&bo->vmap, PXP_BB_SIZE + inout_size);
> + gsc_res->q = q;
> +
> + /* initialize host-session-handle (for all Xe-to-gsc-firmware PXP cmds) */
> + gsc_res->host_session_handle = xe_gsc_create_host_session_id();
> +
> + return 0;
> +
> +bo_out:
> + xe_bo_unpin_map_no_vm(bo);
> +vm_out:
> + xe_vm_close_and_put(vm);
> +
> + return err;
> +}
> +
> +static void destroy_gsc_client_resources(struct xe_pxp_gsc_client_resources *gsc_res)
> +{
> + if (!gsc_res->q)
> + return;
> +
> + xe_exec_queue_put(gsc_res->q);
> + xe_bo_unpin_map_no_vm(gsc_res->bo);
> + xe_vm_close_and_put(gsc_res->vm);
> +}
> +
> +/**
> + * xe_pxp_allocate_execution_resources - Allocate PXP submission objects
> + * @pxp: the xe_pxp structure
> + *
> + * Allocates exec_queues objects for VCS and GSCCS submission. The GSCCS
> + * submissions are done via PPGTT, so this function allocates a VM for it and
> + * maps the object into it.
> + *
> + * Returns 0 if the allocation and mapping is successful, an errno value
> + * otherwise.
> + */
> +int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp)
> +{
> + int err;
> +
> + err = allocate_vcs_execution_resources(pxp);
> + if (err)
> + return err;
> +
> + /*
> + * PXP commands can require a lot of BO space (see PXP_MAX_PACKET_SIZE),
> + * but we currently only support a subset of commands that are small
> + * (< 20 dwords), so a single page is enough for now.
> + */
> + err = allocate_gsc_client_resources(pxp->gt, &pxp->gsc_res, XE_PAGE_SIZE);
> + if (err)
> + goto destroy_vcs_context;
> +
> + return 0;
> +
> +destroy_vcs_context:
> + destroy_vcs_execution_resources(pxp);
> + return err;
> +}
> +
> +void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp)
> +{
> + destroy_gsc_client_resources(&pxp->gsc_res);
> + destroy_vcs_execution_resources(pxp);
> +}
> +
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.h b/drivers/gpu/drm/xe/xe_pxp_submit.h
> new file mode 100644
> index 000000000000..fd21ac935be1
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.h
> @@ -0,0 +1,14 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright(c) 2024, Intel Corporation. All rights reserved.
> + */
> +
> +#ifndef __XE_PXP_SUBMIT_H__
> +#define __XE_PXP_SUBMIT_H__
> +
> +struct xe_pxp;
> +
> +int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp);
> +void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp);
> +
> +#endif /* __XE_PXP_SUBMIT_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
> index 4639cf49d267..25db23180a30 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_types.h
> +++ b/drivers/gpu/drm/xe/xe_pxp_types.h
> @@ -6,8 +6,45 @@
> #ifndef __XE_PXP_TYPES_H__
> #define __XE_PXP_TYPES_H__
>
> +#include <linux/iosys-map.h>
> +#include <linux/types.h>
> +
> +struct xe_bo;
> +struct xe_exec_queue;
> struct xe_device;
> struct xe_gt;
> +struct xe_vm;
> +
> +/**
> + * struct xe_pxp_gsc_client_resources - resources for GSC submission by a PXP
> + * client. The GSC FW supports multiple GSC client active at the same time.
> + */
> +struct xe_pxp_gsc_client_resources {
> + /**
> + * @host_session_handle: handle used to identify the client in messages
> + * sent to the GSC firmware.
> + */
> + u64 host_session_handle;
> + /** @vm: VM used for PXP submissions to the GSCCS */
> + struct xe_vm *vm;
> + /** @q: GSCCS exec queue for PXP submissions */
> + struct xe_exec_queue *q;
> +
> + /**
> + * @bo: BO used for submissions to the GSCCS and GSC FW. It includes
> + * space for the GSCCS batch and the input/output buffers read/written
> + * by the FW
> + */
> + struct xe_bo *bo;
> + /** @inout_size: size of each of the msg_in/out sections individually */
> + u32 inout_size;
> + /** @batch: iosys_map to the batch memory within the BO */
> + struct iosys_map batch;
> + /** @msg_in: iosys_map to the input memory within the BO */
> + struct iosys_map msg_in;
> + /** @msg_out: iosys_map to the output memory within the BO */
> + struct iosys_map msg_out;
> +};
>
> /**
> * struct xe_pxp - pxp state
> @@ -21,6 +58,17 @@ struct xe_pxp {
> * (VDBOX, KCR and GSC)
> */
> struct xe_gt *gt;
> +
> + /** @vcs_exec: kernel-owned objects for PXP submissions to the VCS */
> + struct {
> + /** @vcs_exec.q: kernel-owned VCS exec queue used for PXP terminations */
> + struct xe_exec_queue *q;
> + /** @vcs_exec.bo: BO used for submissions to the VCS */
> + struct xe_bo *bo;
> + } vcs_exec;
> +
> + /** @gsc_exec: kernel-owned objects for PXP submissions to the GSCCS */
> + struct xe_pxp_gsc_client_resources gsc_res;
> };
>
> #endif /* __XE_PXP_TYPES_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index 1d7faeba157e..eb95f654a88f 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -1382,6 +1382,12 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
> struct xe_tile *tile;
> u8 id;
>
> + /*
> + * Since the GSCCS is not user-accessible, we don't expect a GSC VM to
> + * ever be in faulting mode.
> + */
> + xe_assert(xe, !((flags & XE_VM_FLAG_GSC) && (flags & XE_VM_FLAG_FAULT_MODE)));
> +
> vm = kzalloc(sizeof(*vm), GFP_KERNEL);
> if (!vm)
> return ERR_PTR(-ENOMEM);
> @@ -1392,7 +1398,21 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
>
> vm->flags = flags;
>
> - init_rwsem(&vm->lock);
> + /**
> + * GSC VMs are kernel-owned, only used for PXP ops and can sometimes be
> + * manipulated under the PXP mutex. However, the PXP mutex can be taken
> + * under a user-VM lock when the PXP session is started at exec_queue
> + * creation time. Those are different VMs and therefore there is no risk
> + * of deadlock, but we need to tell lockdep that this is the case or it
> + * will print a warning.
> + */
> + if (flags & XE_VM_FLAG_GSC) {
> + static struct lock_class_key gsc_vm_key;
> +
> + __init_rwsem(&vm->lock, "gsc_vm", &gsc_vm_key);
> + } else {
> + init_rwsem(&vm->lock);
> + }
> mutex_init(&vm->snap_mutex);
>
> INIT_LIST_HEAD(&vm->rebind_list);
> @@ -2666,11 +2686,10 @@ static void vm_bind_ioctl_ops_fini(struct xe_vm *vm, struct xe_vma_ops *vops,
> for (i = 0; i < vops->num_syncs; i++)
> xe_sync_entry_signal(vops->syncs + i, fence);
> xe_exec_queue_last_fence_set(wait_exec_queue, vm, fence);
> - dma_fence_put(fence);
> }
>
> -static int vm_bind_ioctl_ops_execute(struct xe_vm *vm,
> - struct xe_vma_ops *vops)
> +static struct dma_fence *vm_bind_ioctl_ops_execute(struct xe_vm *vm,
> + struct xe_vma_ops *vops)
> {
> struct drm_exec exec;
> struct dma_fence *fence;
> @@ -2683,21 +2702,21 @@ static int vm_bind_ioctl_ops_execute(struct xe_vm *vm,
> drm_exec_until_all_locked(&exec) {
> err = vm_bind_ioctl_ops_lock_and_prep(&exec, vm, vops);
> drm_exec_retry_on_contention(&exec);
> - if (err)
> + if (err) {
> + fence = ERR_PTR(err);
> goto unlock;
> + }
>
> fence = ops_execute(vm, vops);
> - if (IS_ERR(fence)) {
> - err = PTR_ERR(fence);
> + if (IS_ERR(fence))
> goto unlock;
> - }
>
> vm_bind_ioctl_ops_fini(vm, vops, fence);
> }
>
> unlock:
> drm_exec_fini(&exec);
> - return err;
> + return fence;
> }
> ALLOW_ERROR_INJECTION(vm_bind_ioctl_ops_execute, ERRNO);
>
> @@ -2929,6 +2948,7 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> struct xe_sync_entry *syncs = NULL;
> struct drm_xe_vm_bind_op *bind_ops;
> struct xe_vma_ops vops;
> + struct dma_fence *fence;
> int err;
> int i;
>
> @@ -3093,7 +3113,11 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> if (err)
> goto unwind_ops;
>
> - err = vm_bind_ioctl_ops_execute(vm, &vops);
> + fence = vm_bind_ioctl_ops_execute(vm, &vops);
> + if (IS_ERR(fence))
> + err = PTR_ERR(fence);
> + else
> + dma_fence_put(fence);
>
> unwind_ops:
> if (err && err != -ENODATA)
> @@ -3127,6 +3151,81 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> return err;
> }
>
> +/**
> + * xe_vm_bind_bo - bind a kernel BO to a VM
xe_vm_bind_bo -> xe_vm_bind_kernel_bo
With that fixed:
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
> + * @vm: VM to bind the BO to
> + * @bo: BO to bind
> + * @q: exec queue to use for the bind (optional)
> + * @addr: address at which to bind the BO
> + * @cache_lvl: PAT cache level to use
> + *
> + * Execute a VM bind map operation on a kernel-owned BO to bind it into a
> + * kernel-owned VM.
> + *
> + * Returns a dma_fence to track the binding completion if the job to do so was
> + * successfully submitted, an error pointer otherwise.
> + */
> +struct dma_fence *xe_vm_bind_kernel_bo(struct xe_vm *vm, struct xe_bo *bo,
> + struct xe_exec_queue *q, u64 addr,
> + enum xe_cache_level cache_lvl)
> +{
> + struct xe_vma_ops vops;
> + struct drm_gpuva_ops *ops = NULL;
> + struct dma_fence *fence;
> + int err;
> +
> + xe_bo_get(bo);
> + xe_vm_get(vm);
> + if (q)
> + xe_exec_queue_get(q);
> +
> + down_write(&vm->lock);
> +
> + xe_vma_ops_init(&vops, vm, q, NULL, 0);
> +
> + ops = vm_bind_ioctl_ops_create(vm, bo, 0, addr, bo->size,
> + DRM_XE_VM_BIND_OP_MAP, 0, 0,
> + vm->xe->pat.idx[cache_lvl]);
> + if (IS_ERR(ops)) {
> + err = PTR_ERR(ops);
> + goto release_vm_lock;
> + }
> +
> + err = vm_bind_ioctl_ops_parse(vm, ops, &vops);
> + if (err)
> + goto release_vm_lock;
> +
> + xe_assert(vm->xe, !list_empty(&vops.list));
> +
> + err = xe_vma_ops_alloc(&vops, false);
> + if (err)
> + goto unwind_ops;
> +
> + fence = vm_bind_ioctl_ops_execute(vm, &vops);
> + if (IS_ERR(fence))
> + err = PTR_ERR(fence);
> +
> +unwind_ops:
> + if (err && err != -ENODATA)
> + vm_bind_ioctl_ops_unwind(vm, &ops, 1);
> +
> + xe_vma_ops_fini(&vops);
> + drm_gpuva_ops_free(&vm->gpuvm, ops);
> +
> +release_vm_lock:
> + up_write(&vm->lock);
> +
> + if (q)
> + xe_exec_queue_put(q);
> + xe_vm_put(vm);
> + xe_bo_put(bo);
> +
> + if (err)
> + fence = ERR_PTR(err);
> +
> + return fence;
> +}
> +
> /**
> * xe_vm_lock() - Lock the vm's dma_resv object
> * @vm: The struct xe_vm whose lock is to be locked
> diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
> index 23adb7442881..0a2fa6c0815b 100644
> --- a/drivers/gpu/drm/xe/xe_vm.h
> +++ b/drivers/gpu/drm/xe/xe_vm.h
> @@ -18,6 +18,8 @@ struct drm_file;
>
> struct ttm_buffer_object;
>
> +struct dma_fence;
> +
> struct xe_exec_queue;
> struct xe_file;
> struct xe_sync_entry;
> @@ -247,6 +249,10 @@ int xe_vm_lock_vma(struct drm_exec *exec, struct xe_vma *vma);
> int xe_vm_validate_rebind(struct xe_vm *vm, struct drm_exec *exec,
> unsigned int num_fences);
>
> +struct dma_fence *xe_vm_bind_kernel_bo(struct xe_vm *vm, struct xe_bo *bo,
> + struct xe_exec_queue *q, u64 addr,
> + enum xe_cache_level cache_lvl);
> +
> /**
> * xe_vm_resv() - Return's the vm's reservation object
> * @vm: The vm
> diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
> index 7f9a303e51d8..52467b9b5348 100644
> --- a/drivers/gpu/drm/xe/xe_vm_types.h
> +++ b/drivers/gpu/drm/xe/xe_vm_types.h
> @@ -164,6 +164,7 @@ struct xe_vm {
> #define XE_VM_FLAG_BANNED BIT(5)
> #define XE_VM_FLAG_TILE_ID(flags) FIELD_GET(GENMASK(7, 6), flags)
> #define XE_VM_FLAG_SET_TILE_ID(tile) FIELD_PREP(GENMASK(7, 6), (tile)->id)
> +#define XE_VM_FLAG_GSC BIT(8)
> unsigned long flags;
>
> /** @composite_fence_ctx: context composite fence */
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 03/12] drm/xe/pxp: Add VCS inline termination support
2024-11-20 23:43 ` [PATCH v3 03/12] drm/xe/pxp: Add VCS inline termination support Daniele Ceraolo Spurio
@ 2024-12-06 20:27 ` John Harrison
0 siblings, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-06 20:27 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> The key termination is done with a specific submission to the VCS
> engine.
>
> Note that this patch is meant to be squashed with the follow-up patches
> that implement the other pieces of the termination flow. It is separate
> for now for ease of review.
>
> v2: clean up defines and command emission code. (John)
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
> ---
> .../gpu/drm/xe/instructions/xe_instr_defs.h | 1 +
> .../gpu/drm/xe/instructions/xe_mfx_commands.h | 28 +++++
> .../gpu/drm/xe/instructions/xe_mi_commands.h | 5 +
> drivers/gpu/drm/xe/xe_lrc.h | 3 +-
> drivers/gpu/drm/xe/xe_pxp_submit.c | 113 ++++++++++++++++++
> drivers/gpu/drm/xe/xe_pxp_submit.h | 4 +
> drivers/gpu/drm/xe/xe_ring_ops.c | 4 +-
> 7 files changed, 155 insertions(+), 3 deletions(-)
> create mode 100644 drivers/gpu/drm/xe/instructions/xe_mfx_commands.h
>
> diff --git a/drivers/gpu/drm/xe/instructions/xe_instr_defs.h b/drivers/gpu/drm/xe/instructions/xe_instr_defs.h
> index fd2ce7ace510..e559969468c4 100644
> --- a/drivers/gpu/drm/xe/instructions/xe_instr_defs.h
> +++ b/drivers/gpu/drm/xe/instructions/xe_instr_defs.h
> @@ -16,6 +16,7 @@
> #define XE_INSTR_CMD_TYPE GENMASK(31, 29)
> #define XE_INSTR_MI REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x0)
> #define XE_INSTR_GSC REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x2)
> +#define XE_INSTR_VIDEOPIPE REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x3)
> #define XE_INSTR_GFXPIPE REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x3)
> #define XE_INSTR_GFX_STATE REG_FIELD_PREP(XE_INSTR_CMD_TYPE, 0x4)
>
> diff --git a/drivers/gpu/drm/xe/instructions/xe_mfx_commands.h b/drivers/gpu/drm/xe/instructions/xe_mfx_commands.h
> new file mode 100644
> index 000000000000..3c0c97f78e90
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/instructions/xe_mfx_commands.h
> @@ -0,0 +1,28 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef _XE_MFX_COMMANDS_H_
> +#define _XE_MFX_COMMANDS_H_
> +
> +#include "instructions/xe_instr_defs.h"
> +
> +#define MFX_CMD_SUBTYPE REG_GENMASK(28, 27) /* A.K.A cmd pipe */
> +#define MFX_CMD_OPCODE REG_GENMASK(26, 24)
> +#define MFX_CMD_SUB_OPCODE REG_GENMASK(23, 16)
> +#define MFX_FLAGS_AND_LEN REG_GENMASK(15, 0)
> +
> +#define XE_MFX_INSTR(subtype, op, sub_op) \
> + (XE_INSTR_VIDEOPIPE | \
> + REG_FIELD_PREP(MFX_CMD_SUBTYPE, subtype) | \
> + REG_FIELD_PREP(MFX_CMD_OPCODE, op) | \
> + REG_FIELD_PREP(MFX_CMD_SUB_OPCODE, sub_op))
> +
> +#define MFX_WAIT XE_MFX_INSTR(1, 0, 0)
> +#define MFX_WAIT_DW0_PXP_SYNC_CONTROL_FLAG REG_BIT(9)
> +#define MFX_WAIT_DW0_MFX_SYNC_CONTROL_FLAG REG_BIT(8)
> +
> +#define CRYPTO_KEY_EXCHANGE XE_MFX_INSTR(2, 6, 9)
> +
> +#endif
> diff --git a/drivers/gpu/drm/xe/instructions/xe_mi_commands.h b/drivers/gpu/drm/xe/instructions/xe_mi_commands.h
> index 10ec2920d31b..167fb0f742de 100644
> --- a/drivers/gpu/drm/xe/instructions/xe_mi_commands.h
> +++ b/drivers/gpu/drm/xe/instructions/xe_mi_commands.h
> @@ -48,6 +48,7 @@
> #define MI_LRI_LEN(x) (((x) & 0xff) + 1)
>
> #define MI_FLUSH_DW __MI_INSTR(0x26)
> +#define MI_FLUSH_DW_PROTECTED_MEM_EN REG_BIT(22)
> #define MI_FLUSH_DW_STORE_INDEX REG_BIT(21)
> #define MI_INVALIDATE_TLB REG_BIT(18)
> #define MI_FLUSH_DW_CCS REG_BIT(16)
> @@ -66,4 +67,8 @@
>
> #define MI_BATCH_BUFFER_START __MI_INSTR(0x31)
>
> +#define MI_SET_APPID __MI_INSTR(0x0e)
> +#define MI_SET_APPID_SESSION_ID_MASK REG_GENMASK(6, 0)
> +#define MI_SET_APPID_SESSION_ID(x) REG_FIELD_PREP(MI_SET_APPID_SESSION_ID_MASK, x)
> +
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_lrc.h b/drivers/gpu/drm/xe/xe_lrc.h
> index b459dcab8787..9bc86c1fc16f 100644
> --- a/drivers/gpu/drm/xe/xe_lrc.h
> +++ b/drivers/gpu/drm/xe/xe_lrc.h
> @@ -39,7 +39,8 @@ struct xe_lrc_snapshot {
> u32 ctx_job_timestamp;
> };
>
> -#define LRC_PPHWSP_SCRATCH_ADDR (0x34 * 4)
> +#define LRC_PPHWSP_FLUSH_INVAL_SCRATCH_ADDR (0x34 * 4)
> +#define LRC_PPHWSP_PXP_INVAL_SCRATCH_ADDR (0x40 * 4)
>
> struct xe_lrc *xe_lrc_create(struct xe_hw_engine *hwe, struct xe_vm *vm,
> u32 ring_size);
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.c b/drivers/gpu/drm/xe/xe_pxp_submit.c
> index 196c0e5bbb17..326baea679a3 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_submit.c
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.c
> @@ -5,15 +5,21 @@
>
> #include "xe_pxp_submit.h"
>
> +#include <linux/delay.h>
> #include <uapi/drm/xe_drm.h>
>
> #include "xe_device_types.h"
> +#include "xe_bb.h"
> #include "xe_bo.h"
> #include "xe_exec_queue.h"
> #include "xe_gsc_submit.h"
> #include "xe_gt.h"
> +#include "xe_lrc.h"
> #include "xe_pxp_types.h"
> +#include "xe_sched_job.h"
> #include "xe_vm.h"
> +#include "instructions/xe_mfx_commands.h"
> +#include "instructions/xe_mi_commands.h"
>
> /*
> * The VCS is used for kernel-owned GGTT submissions to issue key termination.
> @@ -198,3 +204,110 @@ void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp)
> destroy_vcs_execution_resources(pxp);
> }
>
> +#define emit_cmd(xe_, map_, offset_, val_) \
> + xe_map_wr(xe_, map_, (offset_) * sizeof(u32), u32, val_)
> +
> +/* stall until prior PXP and MFX/HCP/HUC objects are completed */
> +#define MFX_WAIT_PXP (MFX_WAIT | \
> + MFX_WAIT_DW0_PXP_SYNC_CONTROL_FLAG | \
> + MFX_WAIT_DW0_MFX_SYNC_CONTROL_FLAG)
> +static u32 pxp_emit_wait(struct xe_device *xe, struct iosys_map *batch, u32 offset)
> +{
> + /* wait for cmds to go through */
> + emit_cmd(xe, batch, offset++, MFX_WAIT_PXP);
> + emit_cmd(xe, batch, offset++, 0);
> +
> + return offset;
> +}
> +
> +static u32 pxp_emit_session_selection(struct xe_device *xe, struct iosys_map *batch,
> + u32 offset, u32 idx)
> +{
> + offset = pxp_emit_wait(xe, batch, offset);
> +
> + /* pxp off */
> + emit_cmd(xe, batch, offset++, MI_FLUSH_DW | MI_FLUSH_IMM_DW);
> + emit_cmd(xe, batch, offset++, 0);
> + emit_cmd(xe, batch, offset++, 0);
> + emit_cmd(xe, batch, offset++, 0);
> +
> + /* select session */
> + emit_cmd(xe, batch, offset++, MI_SET_APPID | MI_SET_APPID_SESSION_ID(idx));
> + emit_cmd(xe, batch, offset++, 0);
> +
> + offset = pxp_emit_wait(xe, batch, offset);
> +
> + /* pxp on */
> + emit_cmd(xe, batch, offset++, MI_FLUSH_DW |
> + MI_FLUSH_DW_PROTECTED_MEM_EN |
> + MI_FLUSH_DW_OP_STOREDW | MI_FLUSH_DW_STORE_INDEX |
> + MI_FLUSH_IMM_DW);
> + emit_cmd(xe, batch, offset++, LRC_PPHWSP_PXP_INVAL_SCRATCH_ADDR |
> + MI_FLUSH_DW_USE_GTT);
> + emit_cmd(xe, batch, offset++, 0);
> + emit_cmd(xe, batch, offset++, 0);
> +
> + offset = pxp_emit_wait(xe, batch, offset);
> +
> + return offset;
> +}
> +
> +static u32 pxp_emit_inline_termination(struct xe_device *xe,
> + struct iosys_map *batch, u32 offset)
> +{
> + /* session inline termination */
> + emit_cmd(xe, batch, offset++, CRYPTO_KEY_EXCHANGE);
> + emit_cmd(xe, batch, offset++, 0);
> +
> + return offset;
> +}
> +
> +static u32 pxp_emit_session_termination(struct xe_device *xe, struct iosys_map *batch,
> + u32 offset, u32 idx)
> +{
> + offset = pxp_emit_session_selection(xe, batch, offset, idx);
> + offset = pxp_emit_inline_termination(xe, batch, offset);
> +
> + return offset;
> +}
> +
> +/**
> + * xe_pxp_submit_session_termination - submits a PXP inline termination
> + * @pxp: the xe_pxp structure
> + * @id: the session to terminate
> + *
> + * Emit an inline termination via the VCS engine to terminate a session.
> + *
> + * Returns 0 if the submission is successful, an errno value otherwise.
> + */
> +int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id)
> +{
> + struct xe_sched_job *job;
> + struct dma_fence *fence;
> + long timeout;
> + u32 offset = 0;
> + u64 addr = xe_bo_ggtt_addr(pxp->vcs_exec.bo);
> +
> + offset = pxp_emit_session_termination(pxp->xe, &pxp->vcs_exec.bo->vmap, offset, id);
> + offset = pxp_emit_wait(pxp->xe, &pxp->vcs_exec.bo->vmap, offset);
> + emit_cmd(pxp->xe, &pxp->vcs_exec.bo->vmap, offset, MI_BATCH_BUFFER_END);
> +
> + job = xe_sched_job_create(pxp->vcs_exec.q, &addr);
> + if (IS_ERR(job))
> + return PTR_ERR(job);
> +
> + xe_sched_job_arm(job);
> + fence = dma_fence_get(&job->drm.s_fence->finished);
> + xe_sched_job_push(job);
> +
> + timeout = dma_fence_wait_timeout(fence, false, HZ);
> +
> + dma_fence_put(fence);
> +
> + if (!timeout)
> + return -ETIMEDOUT;
> + else if (timeout < 0)
> + return timeout;
> +
> + return 0;
> +}
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.h b/drivers/gpu/drm/xe/xe_pxp_submit.h
> index fd21ac935be1..4ee8c0acfed9 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_submit.h
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.h
> @@ -6,9 +6,13 @@
> #ifndef __XE_PXP_SUBMIT_H__
> #define __XE_PXP_SUBMIT_H__
>
> +#include <linux/types.h>
> +
> struct xe_pxp;
>
> int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp);
> void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp);
>
> +int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id);
> +
> #endif /* __XE_PXP_SUBMIT_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_ring_ops.c b/drivers/gpu/drm/xe/xe_ring_ops.c
> index 0be4f489d3e1..a4b5a0f68a32 100644
> --- a/drivers/gpu/drm/xe/xe_ring_ops.c
> +++ b/drivers/gpu/drm/xe/xe_ring_ops.c
> @@ -118,7 +118,7 @@ static int emit_flush_invalidate(u32 flag, u32 *dw, int i)
> dw[i++] |= MI_INVALIDATE_TLB | MI_FLUSH_DW_OP_STOREDW | MI_FLUSH_IMM_DW |
> MI_FLUSH_DW_STORE_INDEX;
>
> - dw[i++] = LRC_PPHWSP_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT;
> + dw[i++] = LRC_PPHWSP_FLUSH_INVAL_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT;
> dw[i++] = 0;
> dw[i++] = ~0U;
>
> @@ -156,7 +156,7 @@ static int emit_pipe_invalidate(u32 mask_flags, bool invalidate_tlb, u32 *dw,
>
> flags &= ~mask_flags;
>
> - return emit_pipe_control(dw, i, 0, flags, LRC_PPHWSP_SCRATCH_ADDR, 0);
> + return emit_pipe_control(dw, i, 0, flags, LRC_PPHWSP_FLUSH_INVAL_SCRATCH_ADDR, 0);
> }
>
> static int emit_store_imm_ppgtt_posted(u64 addr, u64 value,
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 04/12] drm/xe/pxp: Add GSC session invalidation support
2024-11-20 23:43 ` [PATCH v3 04/12] drm/xe/pxp: Add GSC session invalidation support Daniele Ceraolo Spurio
@ 2024-12-06 20:38 ` John Harrison
0 siblings, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-06 20:38 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> After a session is terminated, we need to inform the GSC so that it can
> clean up its side of the allocation. This is done by sending an
> invalidation command with the session ID.
>
> Note that this patch is meant to be squashed with the follow-up patches
> that implement the other pieces of the termination flow. It is separate
> for now for ease of review.
>
> v2: Better comment and error messages (John)
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
> ---
> drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h | 13 +
> drivers/gpu/drm/xe/xe_pxp_submit.c | 228 ++++++++++++++++++
> drivers/gpu/drm/xe/xe_pxp_submit.h | 3 +
> 3 files changed, 244 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> index f3c4cf10ba20..f0da65ccdda2 100644
> --- a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> +++ b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> @@ -31,6 +31,7 @@ enum pxp_status {
> PXP_STATUS_NOT_READY = 0x100e,
> PXP_STATUS_PLATFCONFIG_KF1_NOVERIF = 0x101a,
> PXP_STATUS_PLATFCONFIG_KF1_BAD = 0x101f,
> + PXP_STATUS_PLATFCONFIG_FIXED_KF1_NOT_SUPPORTED = 0x1037,
> PXP_STATUS_OP_NOT_PERMITTED = 0x4013
> };
>
> @@ -49,6 +50,7 @@ struct pxp_cmd_header {
> u32 buffer_len;
> } __packed;
>
> +#define PXP43_CMDID_INVALIDATE_STREAM_KEY 0x00000007
> #define PXP43_CMDID_NEW_HUC_AUTH 0x0000003F /* MTL+ */
>
> /* PXP-Input-Packet: HUC Auth-only */
> @@ -63,4 +65,15 @@ struct pxp43_huc_auth_out {
> struct pxp_cmd_header header;
> } __packed;
>
> +/* PXP-Input-Packet: Invalidate Stream Key */
> +struct pxp43_inv_stream_key_in {
> + struct pxp_cmd_header header;
> + u32 rsvd[3];
> +} __packed;
> +
> +/* PXP-Output-Packet: Invalidate Stream Key */
> +struct pxp43_inv_stream_key_out {
> + struct pxp_cmd_header header;
> + u32 rsvd;
> +} __packed;
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.c b/drivers/gpu/drm/xe/xe_pxp_submit.c
> index 326baea679a3..f5f6b18c1054 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_submit.c
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.c
> @@ -15,9 +15,13 @@
> #include "xe_gsc_submit.h"
> #include "xe_gt.h"
> #include "xe_lrc.h"
> +#include "xe_map.h"
> #include "xe_pxp_types.h"
> #include "xe_sched_job.h"
> #include "xe_vm.h"
> +#include "abi/gsc_command_header_abi.h"
> +#include "abi/gsc_pxp_commands_abi.h"
> +#include "instructions/xe_gsc_commands.h"
> #include "instructions/xe_mfx_commands.h"
> #include "instructions/xe_mi_commands.h"
>
> @@ -311,3 +315,227 @@ int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id)
>
> return 0;
> }
> +
> +static bool
> +is_fw_err_platform_config(u32 type)
> +{
> + switch (type) {
> + case PXP_STATUS_ERROR_API_VERSION:
> + case PXP_STATUS_PLATFCONFIG_KF1_NOVERIF:
> + case PXP_STATUS_PLATFCONFIG_KF1_BAD:
> + case PXP_STATUS_PLATFCONFIG_FIXED_KF1_NOT_SUPPORTED:
> + return true;
> + default:
> + break;
> + }
> + return false;
> +}
> +
> +static const char *
> +fw_err_to_string(u32 type)
> +{
> + switch (type) {
> + case PXP_STATUS_ERROR_API_VERSION:
> + return "ERR_API_VERSION";
> + case PXP_STATUS_NOT_READY:
> + return "ERR_NOT_READY";
> + case PXP_STATUS_PLATFCONFIG_KF1_NOVERIF:
> + case PXP_STATUS_PLATFCONFIG_KF1_BAD:
> + case PXP_STATUS_PLATFCONFIG_FIXED_KF1_NOT_SUPPORTED:
> + return "ERR_PLATFORM_CONFIG";
> + default:
> + break;
> + }
> + return NULL;
> +}
> +
> +static int pxp_pkt_submit(struct xe_exec_queue *q, u64 batch_addr)
> +{
> + struct xe_gt *gt = q->gt;
> + struct xe_device *xe = gt_to_xe(gt);
> + struct xe_sched_job *job;
> + struct dma_fence *fence;
> + long timeout;
> +
> + xe_assert(xe, q->hwe->engine_id == XE_HW_ENGINE_GSCCS0);
> +
> + job = xe_sched_job_create(q, &batch_addr);
> + if (IS_ERR(job))
> + return PTR_ERR(job);
> +
> + xe_sched_job_arm(job);
> + fence = dma_fence_get(&job->drm.s_fence->finished);
> + xe_sched_job_push(job);
> +
> + timeout = dma_fence_wait_timeout(fence, false, HZ);
> + dma_fence_put(fence);
> + if (timeout < 0)
> + return timeout;
> + else if (!timeout)
> + return -ETIME;
> +
> + return 0;
> +}
> +
> +static void emit_pxp_heci_cmd(struct xe_device *xe, struct iosys_map *batch,
> + u64 addr_in, u32 size_in, u64 addr_out, u32 size_out)
> +{
> + u32 len = 0;
> +
> + xe_map_wr(xe, batch, len++ * sizeof(u32), u32, GSC_HECI_CMD_PKT);
> + xe_map_wr(xe, batch, len++ * sizeof(u32), u32, lower_32_bits(addr_in));
> + xe_map_wr(xe, batch, len++ * sizeof(u32), u32, upper_32_bits(addr_in));
> + xe_map_wr(xe, batch, len++ * sizeof(u32), u32, size_in);
> + xe_map_wr(xe, batch, len++ * sizeof(u32), u32, lower_32_bits(addr_out));
> + xe_map_wr(xe, batch, len++ * sizeof(u32), u32, upper_32_bits(addr_out));
> + xe_map_wr(xe, batch, len++ * sizeof(u32), u32, size_out);
> + xe_map_wr(xe, batch, len++ * sizeof(u32), u32, 0);
> + xe_map_wr(xe, batch, len++ * sizeof(u32), u32, MI_BATCH_BUFFER_END);
> +}
> +
> +#define GSC_PENDING_RETRY_MAXCOUNT 40
> +#define GSC_PENDING_RETRY_PAUSE_MS 50
> +static int gsccs_send_message(struct xe_pxp_gsc_client_resources *gsc_res,
> + void *msg_in, size_t msg_in_size,
> + void *msg_out, size_t msg_out_size_max)
> +{
> + struct xe_device *xe = gsc_res->vm->xe;
> + const size_t max_msg_size = gsc_res->inout_size - sizeof(struct intel_gsc_mtl_header);
> + u32 wr_offset;
> + u32 rd_offset;
> + u32 reply_size;
> + u32 min_reply_size = 0;
> + int ret;
> + int retry = GSC_PENDING_RETRY_MAXCOUNT;
> +
> + if (msg_in_size > max_msg_size || msg_out_size_max > max_msg_size)
> + return -ENOSPC;
> +
> + wr_offset = xe_gsc_emit_header(xe, &gsc_res->msg_in, 0,
> + HECI_MEADDRESS_PXP,
> + gsc_res->host_session_handle,
> + msg_in_size);
> +
> + /* NOTE: zero size packets are used for session-cleanups */
> + if (msg_in && msg_in_size) {
> + xe_map_memcpy_to(xe, &gsc_res->msg_in, wr_offset,
> + msg_in, msg_in_size);
> + min_reply_size = sizeof(struct pxp_cmd_header);
> + }
> +
> + /* Make sure the reply header does not contain stale data */
> + xe_gsc_poison_header(xe, &gsc_res->msg_out, 0);
> +
> + /*
> + * The BO is mapped at address 0 of the PPGTT, so no need to add its
> + * base offset when calculating the in/out addresses.
> + */
> + emit_pxp_heci_cmd(xe, &gsc_res->batch, PXP_BB_SIZE,
> + wr_offset + msg_in_size, PXP_BB_SIZE + gsc_res->inout_size,
> + wr_offset + msg_out_size_max);
> +
> + xe_device_wmb(xe);
> +
> + /*
> + * If the GSC needs to communicate with CSME to complete our request,
> + * it'll set the "pending" flag in the return header. In this scenario
> + * we're expected to wait 50ms to give some time to the proxy code to
> + * handle the GSC<->CSME communication and then try again. Note that,
> + * although in most case the 50ms window is enough, the proxy flow is
> + * not actually guaranteed to complete within that time period, so we
> + * might have to try multiple times, up to a worst case of 2 seconds,
> + * after which the request is considered aborted.
> + */
> + do {
> + ret = pxp_pkt_submit(gsc_res->q, 0);
> + if (ret)
> + break;
> +
> + if (xe_gsc_check_and_update_pending(xe, &gsc_res->msg_in, 0,
> + &gsc_res->msg_out, 0)) {
> + ret = -EAGAIN;
> + msleep(GSC_PENDING_RETRY_PAUSE_MS);
> + }
> + } while (--retry && ret == -EAGAIN);
> +
> + if (ret) {
> + drm_err(&xe->drm, "failed to submit GSC PXP message (%pe)\n", ERR_PTR(ret));
> + return ret;
> + }
> +
> + ret = xe_gsc_read_out_header(xe, &gsc_res->msg_out, 0,
> + min_reply_size, &rd_offset);
> + if (ret) {
> + drm_err(&xe->drm, "invalid GSC reply for PXP (%pe)\n", ERR_PTR(ret));
> + return ret;
> + }
> +
> + if (msg_out && min_reply_size) {
> + reply_size = xe_map_rd_field(xe, &gsc_res->msg_out, rd_offset,
> + struct pxp_cmd_header, buffer_len);
> + reply_size += sizeof(struct pxp_cmd_header);
> +
> + if (reply_size > msg_out_size_max) {
> + drm_warn(&xe->drm, "PXP reply size overflow: %u (%zu)\n",
> + reply_size, msg_out_size_max);
> + reply_size = msg_out_size_max;
> + }
> +
> + xe_map_memcpy_from(xe, msg_out, &gsc_res->msg_out,
> + rd_offset, reply_size);
> + }
> +
> + xe_gsc_poison_header(xe, &gsc_res->msg_in, 0);
> +
> + return ret;
> +}
> +
> +/**
> + * xe_pxp_submit_session_invalidation - submits a PXP GSC invalidation
> + * @gsc_res: the pxp client resources
> + * @id: the session to invalidate
> + *
> + * Submit a message to the GSC FW to notify it that a session has been
> + * terminated and is therefore invalid.
> + *
> + * Returns 0 if the submission is successful, an errno value otherwise.
> + */
> +int xe_pxp_submit_session_invalidation(struct xe_pxp_gsc_client_resources *gsc_res, u32 id)
> +{
> + struct xe_device *xe = gsc_res->vm->xe;
> + struct pxp43_inv_stream_key_in msg_in = {0};
> + struct pxp43_inv_stream_key_out msg_out = {0};
> + int ret = 0;
> +
> + /*
> + * Stream key invalidation reuses the same version 4.2 input/output
> + * command format but firmware requires 4.3 API interaction
> + */
> + msg_in.header.api_version = PXP_APIVER(4, 3);
> + msg_in.header.command_id = PXP43_CMDID_INVALIDATE_STREAM_KEY;
> + msg_in.header.buffer_len = sizeof(msg_in) - sizeof(msg_in.header);
> +
> + msg_in.header.stream_id = FIELD_PREP(PXP_CMDHDR_EXTDATA_SESSION_VALID, 1);
> + msg_in.header.stream_id |= FIELD_PREP(PXP_CMDHDR_EXTDATA_APP_TYPE, 0);
> + msg_in.header.stream_id |= FIELD_PREP(PXP_CMDHDR_EXTDATA_SESSION_ID, id);
> +
> + ret = gsccs_send_message(gsc_res, &msg_in, sizeof(msg_in),
> + &msg_out, sizeof(msg_out));
> + if (ret) {
> + drm_err(&xe->drm, "Failed to invalidate PXP stream-key %u (%pe)\n",
> + id, ERR_PTR(ret));
> + } else if (msg_out.header.status != 0) {
> + ret = -EIO;
> +
> + if (is_fw_err_platform_config(msg_out.header.status))
> + drm_info_once(&xe->drm,
> + "Failed to invalidate PXP stream-key %u: BIOS/SOC 0x%08x(%s)\n",
> + id, msg_out.header.status,
> + fw_err_to_string(msg_out.header.status));
> + else
> + drm_dbg(&xe->drm, "Failed to invalidate stream-key %u, s=0x%08x\n",
> + id, msg_out.header.status);
> + }
> +
> + return ret;
> +}
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.h b/drivers/gpu/drm/xe/xe_pxp_submit.h
> index 4ee8c0acfed9..48fdc9b09116 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_submit.h
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.h
> @@ -9,10 +9,13 @@
> #include <linux/types.h>
>
> struct xe_pxp;
> +struct xe_pxp_gsc_client_resources;
>
> int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp);
> void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp);
>
> int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id);
> +int xe_pxp_submit_session_invalidation(struct xe_pxp_gsc_client_resources *gsc_res,
> + u32 id);
>
> #endif /* __XE_PXP_SUBMIT_H__ */
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 05/12] drm/xe/pxp: Handle the PXP termination interrupt
2024-11-20 23:43 ` [PATCH v3 05/12] drm/xe/pxp: Handle the PXP termination interrupt Daniele Ceraolo Spurio
@ 2024-12-06 23:23 ` John Harrison
0 siblings, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-06 23:23 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> When something happen to the session, the HW generates a termination
> interrupt. In reply to this, the driver is required to submit an inline
> session termination via the VCS, trigger the global termination and
> notify the GSC FW that the session is now invalid.
>
> v2: rename ARB define to make it cleaner to move it to uapi (John)
There was also changes about forcewakes. But doesn't really matter.
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
> drivers/gpu/drm/xe/regs/xe_irq_regs.h | 8 ++
> drivers/gpu/drm/xe/regs/xe_pxp_regs.h | 6 ++
> drivers/gpu/drm/xe/xe_irq.c | 20 +++-
> drivers/gpu/drm/xe/xe_pxp.c | 139 +++++++++++++++++++++++++-
> drivers/gpu/drm/xe/xe_pxp.h | 7 ++
> drivers/gpu/drm/xe/xe_pxp_types.h | 13 +++
> 6 files changed, 189 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/regs/xe_irq_regs.h b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
> index 1776b3f78ccb..f0ecfcac4003 100644
> --- a/drivers/gpu/drm/xe/regs/xe_irq_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_irq_regs.h
> @@ -44,6 +44,7 @@
> #define ENGINE1_MASK REG_GENMASK(31, 16)
> #define ENGINE0_MASK REG_GENMASK(15, 0)
> #define GPM_WGBOXPERF_INTR_ENABLE XE_REG(0x19003c, XE_REG_OPTION_VF)
> +#define CRYPTO_RSVD_INTR_ENABLE XE_REG(0x190040)
> #define GUNIT_GSC_INTR_ENABLE XE_REG(0x190044, XE_REG_OPTION_VF)
> #define CCS_RSVD_INTR_ENABLE XE_REG(0x190048, XE_REG_OPTION_VF)
>
> @@ -54,6 +55,7 @@
> #define INTR_ENGINE_INTR(x) REG_FIELD_GET(GENMASK(15, 0), x)
> #define OTHER_GUC_INSTANCE 0
> #define OTHER_GSC_HECI2_INSTANCE 3
> +#define OTHER_KCR_INSTANCE 4
> #define OTHER_GSC_INSTANCE 6
>
> #define IIR_REG_SELECTOR(x) XE_REG(0x190070 + ((x) * 4), XE_REG_OPTION_VF)
> @@ -65,6 +67,7 @@
> #define HECI2_RSVD_INTR_MASK XE_REG(0x1900e4)
> #define GUC_SG_INTR_MASK XE_REG(0x1900e8, XE_REG_OPTION_VF)
> #define GPM_WGBOXPERF_INTR_MASK XE_REG(0x1900ec, XE_REG_OPTION_VF)
> +#define CRYPTO_RSVD_INTR_MASK XE_REG(0x1900f0)
> #define GUNIT_GSC_INTR_MASK XE_REG(0x1900f4, XE_REG_OPTION_VF)
> #define CCS0_CCS1_INTR_MASK XE_REG(0x190100)
> #define CCS2_CCS3_INTR_MASK XE_REG(0x190104)
> @@ -79,4 +82,9 @@
> #define GT_CS_MASTER_ERROR_INTERRUPT REG_BIT(3)
> #define GT_RENDER_USER_INTERRUPT REG_BIT(0)
>
> +/* irqs for OTHER_KCR_INSTANCE */
> +#define KCR_PXP_STATE_TERMINATED_INTERRUPT REG_BIT(1)
> +#define KCR_APP_TERMINATED_PER_FW_REQ_INTERRUPT REG_BIT(2)
> +#define KCR_PXP_STATE_RESET_COMPLETE_INTERRUPT REG_BIT(3)
> +
> #endif
> diff --git a/drivers/gpu/drm/xe/regs/xe_pxp_regs.h b/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
> index d67cf210d23d..aa158938b42e 100644
> --- a/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_pxp_regs.h
> @@ -14,4 +14,10 @@
> #define KCR_INIT XE_REG(0x3860f0)
> #define KCR_INIT_ALLOW_DISPLAY_ME_WRITES REG_BIT(14)
>
> +/* KCR hwdrm session in play status 0-31 */
> +#define KCR_SIP XE_REG(0x386260)
> +
> +/* PXP global terminate register for session termination */
> +#define KCR_GLOBAL_TERMINATE XE_REG(0x3860f8)
> +
> #endif /* __XE_PXP_REGS_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
> index 7bf7201529ac..6a7a65d5e5d1 100644
> --- a/drivers/gpu/drm/xe/xe_irq.c
> +++ b/drivers/gpu/drm/xe/xe_irq.c
> @@ -19,6 +19,7 @@
> #include "xe_hw_engine.h"
> #include "xe_memirq.h"
> #include "xe_mmio.h"
> +#include "xe_pxp.h"
> #include "xe_sriov.h"
>
> /*
> @@ -202,6 +203,15 @@ void xe_irq_enable_hwe(struct xe_gt *gt)
> }
> if (heci_mask)
> xe_mmio_write32(mmio, HECI2_RSVD_INTR_MASK, ~(heci_mask << 16));
> +
> + if (xe_pxp_is_supported(xe)) {
> + u32 kcr_mask = KCR_PXP_STATE_TERMINATED_INTERRUPT |
> + KCR_APP_TERMINATED_PER_FW_REQ_INTERRUPT |
> + KCR_PXP_STATE_RESET_COMPLETE_INTERRUPT;
> +
> + xe_mmio_write32(mmio, CRYPTO_RSVD_INTR_ENABLE, kcr_mask << 16);
> + xe_mmio_write32(mmio, CRYPTO_RSVD_INTR_MASK, ~(kcr_mask << 16));
> + }
> }
> }
>
> @@ -324,9 +334,15 @@ static void gt_irq_handler(struct xe_tile *tile,
> }
>
> if (class == XE_ENGINE_CLASS_OTHER) {
> - /* HECI GSCFI interrupts come from outside of GT */
> + /*
> + * HECI GSCFI interrupts come from outside of GT.
> + * KCR irqs come from inside GT but are handled
> + * by the global PXP subsystem.
> + */
> if (xe->info.has_heci_gscfi && instance == OTHER_GSC_INSTANCE)
> xe_heci_gsc_irq_handler(xe, intr_vec);
> + else if (instance == OTHER_KCR_INSTANCE)
> + xe_pxp_irq_handler(xe, intr_vec);
> else
> gt_other_irq_handler(engine_gt, instance, intr_vec);
> }
> @@ -512,6 +528,8 @@ static void gt_irq_reset(struct xe_tile *tile)
> xe_mmio_write32(mmio, GUNIT_GSC_INTR_ENABLE, 0);
> xe_mmio_write32(mmio, GUNIT_GSC_INTR_MASK, ~0);
> xe_mmio_write32(mmio, HECI2_RSVD_INTR_MASK, ~0);
> + xe_mmio_write32(mmio, CRYPTO_RSVD_INTR_ENABLE, 0);
> + xe_mmio_write32(mmio, CRYPTO_RSVD_INTR_MASK, ~0);
> }
>
> xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_ENABLE, 0);
> diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
> index 89d71a69cdff..bc816cfecdd6 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.c
> +++ b/drivers/gpu/drm/xe/xe_pxp.c
> @@ -12,9 +12,11 @@
> #include "xe_gt.h"
> #include "xe_gt_types.h"
> #include "xe_mmio.h"
> +#include "xe_pm.h"
> #include "xe_pxp_submit.h"
> #include "xe_pxp_types.h"
> #include "xe_uc_fw.h"
> +#include "regs/xe_irq_regs.h"
> #include "regs/xe_pxp_regs.h"
>
> /**
> @@ -25,11 +27,132 @@
> * integrated parts.
> */
>
> -static bool pxp_is_supported(const struct xe_device *xe)
> +#define ARB_SESSION DRM_XE_PXP_HWDRM_DEFAULT_SESSION /* shorter define */
> +
> +bool xe_pxp_is_supported(const struct xe_device *xe)
> {
> return xe->info.has_pxp && IS_ENABLED(CONFIG_INTEL_MEI_GSC_PROXY);
> }
>
> +static bool pxp_is_enabled(const struct xe_pxp *pxp)
> +{
> + return pxp;
> +}
> +
> +static int pxp_wait_for_session_state(struct xe_pxp *pxp, u32 id, bool in_play)
> +{
> + struct xe_gt *gt = pxp->gt;
> + u32 mask = BIT(id);
> +
> + return xe_mmio_wait32(>->mmio, KCR_SIP, mask, in_play ? mask : 0,
> + 250, NULL, false);
> +}
> +
> +static void pxp_terminate(struct xe_pxp *pxp)
> +{
> + int ret = 0;
> + struct xe_device *xe = pxp->xe;
> + struct xe_gt *gt = pxp->gt;
> + unsigned int fw_ref;
> +
> + drm_dbg(&xe->drm, "Terminating PXP\n");
> +
> + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> + if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_GT)) {
> + ret = -EIO;
> + goto out;
> + }
> +
> + /* terminate the hw session */
> + ret = xe_pxp_submit_session_termination(pxp, ARB_SESSION);
> + if (ret)
> + goto out;
> +
> + ret = pxp_wait_for_session_state(pxp, ARB_SESSION, false);
> + if (ret)
> + goto out;
> +
> + /* Trigger full HW cleanup */
> + xe_mmio_write32(>->mmio, KCR_GLOBAL_TERMINATE, 1);
> +
> + /* now we can tell the GSC to clean up its own state */
> + ret = xe_pxp_submit_session_invalidation(&pxp->gsc_res, ARB_SESSION);
> +
> +out:
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> +
> + if (ret)
> + drm_err(&xe->drm, "PXP termination failed: %pe\n", ERR_PTR(ret));
> +}
> +
> +static void pxp_terminate_complete(struct xe_pxp *pxp)
> +{
> + /* TODO mark the session as ready to start */
> +}
> +
> +static void pxp_irq_work(struct work_struct *work)
> +{
> + struct xe_pxp *pxp = container_of(work, typeof(*pxp), irq.work);
> + struct xe_device *xe = pxp->xe;
> + u32 events = 0;
> +
> + spin_lock_irq(&xe->irq.lock);
> + events = pxp->irq.events;
> + pxp->irq.events = 0;
> + spin_unlock_irq(&xe->irq.lock);
> +
> + if (!events)
> + return;
> +
> + /*
> + * If we're processing a termination irq while suspending then don't
> + * bother, we're going to re-init everything on resume anyway.
> + */
> + if ((events & PXP_TERMINATION_REQUEST) && !xe_pm_runtime_get_if_active(xe))
> + return;
> +
> + if (events & PXP_TERMINATION_REQUEST) {
> + events &= ~PXP_TERMINATION_COMPLETE;
> + pxp_terminate(pxp);
> + }
> +
> + if (events & PXP_TERMINATION_COMPLETE)
> + pxp_terminate_complete(pxp);
> +
> + if (events & PXP_TERMINATION_REQUEST)
> + xe_pm_runtime_put(xe);
> +}
> +
> +/**
> + * xe_pxp_irq_handler - Handles PXP interrupts.
> + * @pxp: pointer to pxp struct
> + * @iir: interrupt vector
> + */
> +void xe_pxp_irq_handler(struct xe_device *xe, u16 iir)
> +{
> + struct xe_pxp *pxp = xe->pxp;
> +
> + if (!pxp_is_enabled(pxp)) {
> + drm_err(&xe->drm, "PXP irq 0x%x received with PXP disabled!\n", iir);
> + return;
> + }
> +
> + lockdep_assert_held(&xe->irq.lock);
> +
> + if (unlikely(!iir))
> + return;
> +
> + if (iir & (KCR_PXP_STATE_TERMINATED_INTERRUPT |
> + KCR_APP_TERMINATED_PER_FW_REQ_INTERRUPT))
> + pxp->irq.events |= PXP_TERMINATION_REQUEST;
> +
> + if (iir & KCR_PXP_STATE_RESET_COMPLETE_INTERRUPT)
> + pxp->irq.events |= PXP_TERMINATION_COMPLETE;
> +
> + if (pxp->irq.events)
> + queue_work(pxp->irq.wq, &pxp->irq.work);
> +}
> +
> static int kcr_pxp_set_status(const struct xe_pxp *pxp, bool enable)
> {
> u32 val = enable ? _MASKED_BIT_ENABLE(KCR_INIT_ALLOW_DISPLAY_ME_WRITES) :
> @@ -60,6 +183,7 @@ static void pxp_fini(void *arg)
> {
> struct xe_pxp *pxp = arg;
>
> + destroy_workqueue(pxp->irq.wq);
> xe_pxp_destroy_execution_resources(pxp);
>
> /* no need to explicitly disable KCR since we're going to do an FLR */
> @@ -83,7 +207,7 @@ int xe_pxp_init(struct xe_device *xe)
> struct xe_pxp *pxp;
> int err;
>
> - if (!pxp_is_supported(xe))
> + if (!xe_pxp_is_supported(xe))
> return -EOPNOTSUPP;
>
> /* we only support PXP on single tile devices with a media GT */
> @@ -105,12 +229,19 @@ int xe_pxp_init(struct xe_device *xe)
> if (!pxp)
> return -ENOMEM;
>
> + INIT_WORK(&pxp->irq.work, pxp_irq_work);
> pxp->xe = xe;
> pxp->gt = gt;
>
> + pxp->irq.wq = alloc_ordered_workqueue("pxp-wq", 0);
> + if (!pxp->irq.wq) {
> + err = -ENOMEM;
> + goto out_free;
> + }
> +
> err = kcr_pxp_enable(pxp);
> if (err)
> - goto out_free;
> + goto out_wq;
>
> err = xe_pxp_allocate_execution_resources(pxp);
> if (err)
> @@ -122,6 +253,8 @@ int xe_pxp_init(struct xe_device *xe)
>
> out_kcr_disable:
> kcr_pxp_disable(pxp);
> +out_wq:
> + destroy_workqueue(pxp->irq.wq);
> out_free:
> drmm_kfree(&xe->drm, pxp);
> return err;
> diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
> index 00f5e688c0d9..39435c644dcd 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.h
> +++ b/drivers/gpu/drm/xe/xe_pxp.h
> @@ -6,8 +6,15 @@
> #ifndef __XE_PXP_H__
> #define __XE_PXP_H__
>
> +#include <linux/types.h>
> +
> struct xe_device;
>
> +#define DRM_XE_PXP_HWDRM_DEFAULT_SESSION 0xF /* TODO: move to uapi */
> +
> +bool xe_pxp_is_supported(const struct xe_device *xe);
> +
> int xe_pxp_init(struct xe_device *xe);
> +void xe_pxp_irq_handler(struct xe_device *xe, u16 iir);
>
> #endif /* __XE_PXP_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
> index 25db23180a30..40c28f32f51a 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_types.h
> +++ b/drivers/gpu/drm/xe/xe_pxp_types.h
> @@ -8,6 +8,7 @@
>
> #include <linux/iosys-map.h>
> #include <linux/types.h>
> +#include <linux/workqueue.h>
>
> struct xe_bo;
> struct xe_exec_queue;
> @@ -69,6 +70,18 @@ struct xe_pxp {
>
> /** @gsc_exec: kernel-owned objects for PXP submissions to the GSCCS */
> struct xe_pxp_gsc_client_resources gsc_res;
> +
> + /** @irq: wrapper for the worker and queue used for PXP irq support */
> + struct {
> + /** @irq.work: worker that manages irq events. */
> + struct work_struct work;
> + /** @irq.wq: workqueue on which to queue the irq work. */
> + struct workqueue_struct *wq;
> + /** @irq.events: pending events, protected with xe->irq.lock. */
> + u32 events;
> +#define PXP_TERMINATION_REQUEST BIT(0)
> +#define PXP_TERMINATION_COMPLETE BIT(1)
> + } irq;
> };
>
> #endif /* __XE_PXP_TYPES_H__ */
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 06/12] drm/xe/pxp: Add GSC session initialization support
2024-11-20 23:43 ` [PATCH v3 06/12] drm/xe/pxp: Add GSC session initialization support Daniele Ceraolo Spurio
@ 2024-12-06 23:27 ` John Harrison
0 siblings, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-06 23:27 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> A session is initialized (i.e. started) by sending a message to the GSC.
>
> Note that this patch is meant to be squashed with the follow-up patches
> that implement the other pieces of the session initialization and queue
> setup flow. It is separate for now for ease of review.
>
> v2: clean up error messages, use new ARB define (John)
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
> ---
> drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h | 21 +++++++++
> drivers/gpu/drm/xe/xe_pxp_submit.c | 47 +++++++++++++++++++
> drivers/gpu/drm/xe/xe_pxp_submit.h | 1 +
> 3 files changed, 69 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> index f0da65ccdda2..290e431cf10d 100644
> --- a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> +++ b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> @@ -51,6 +51,7 @@ struct pxp_cmd_header {
> } __packed;
>
> #define PXP43_CMDID_INVALIDATE_STREAM_KEY 0x00000007
> +#define PXP43_CMDID_INIT_SESSION 0x00000036
> #define PXP43_CMDID_NEW_HUC_AUTH 0x0000003F /* MTL+ */
>
> /* PXP-Input-Packet: HUC Auth-only */
> @@ -65,6 +66,26 @@ struct pxp43_huc_auth_out {
> struct pxp_cmd_header header;
> } __packed;
>
> +/* PXP-Input-Packet: Init PXP session */
> +struct pxp43_create_arb_in {
> + struct pxp_cmd_header header;
> + /* header.stream_id fields for vesion 4.3 of Init PXP session: */
> + #define PXP43_INIT_SESSION_VALID BIT(0)
> + #define PXP43_INIT_SESSION_APPTYPE BIT(1)
> + #define PXP43_INIT_SESSION_APPID GENMASK(17, 2)
> + u32 protection_mode;
> + #define PXP43_INIT_SESSION_PROTECTION_ARB 0x2
> + u32 sub_session_id;
> + u32 init_flags;
> + u32 rsvd[12];
> +} __packed;
> +
> +/* PXP-Input-Packet: Init PXP session */
> +struct pxp43_create_arb_out {
> + struct pxp_cmd_header header;
> + u32 rsvd[8];
> +} __packed;
> +
> /* PXP-Input-Packet: Invalidate Stream Key */
> struct pxp43_inv_stream_key_in {
> struct pxp_cmd_header header;
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.c b/drivers/gpu/drm/xe/xe_pxp_submit.c
> index f5f6b18c1054..b50fe037c74b 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_submit.c
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.c
> @@ -16,6 +16,7 @@
> #include "xe_gt.h"
> #include "xe_lrc.h"
> #include "xe_map.h"
> +#include "xe_pxp.h"
> #include "xe_pxp_types.h"
> #include "xe_sched_job.h"
> #include "xe_vm.h"
> @@ -490,6 +491,52 @@ static int gsccs_send_message(struct xe_pxp_gsc_client_resources *gsc_res,
> return ret;
> }
>
> +/**
> + * xe_pxp_submit_session_init - submits a PXP GSC session initialization
> + * @gsc_res: the pxp client resources
> + * @id: the session to initialize
> + *
> + * Submit a message to the GSC FW to initialize (i.e. start) a PXP session.
> + *
> + * Returns 0 if the submission is successful, an errno value otherwise.
> + */
> +int xe_pxp_submit_session_init(struct xe_pxp_gsc_client_resources *gsc_res, u32 id)
> +{
> + struct xe_device *xe = gsc_res->vm->xe;
> + struct pxp43_create_arb_in msg_in = {0};
> + struct pxp43_create_arb_out msg_out = {0};
> + int ret;
> +
> + msg_in.header.api_version = PXP_APIVER(4, 3);
> + msg_in.header.command_id = PXP43_CMDID_INIT_SESSION;
> + msg_in.header.stream_id = (FIELD_PREP(PXP43_INIT_SESSION_APPID, id) |
> + FIELD_PREP(PXP43_INIT_SESSION_VALID, 1) |
> + FIELD_PREP(PXP43_INIT_SESSION_APPTYPE, 0));
> + msg_in.header.buffer_len = sizeof(msg_in) - sizeof(msg_in.header);
> +
> + if (id == DRM_XE_PXP_HWDRM_DEFAULT_SESSION)
> + msg_in.protection_mode = PXP43_INIT_SESSION_PROTECTION_ARB;
> +
> + ret = gsccs_send_message(gsc_res, &msg_in, sizeof(msg_in),
> + &msg_out, sizeof(msg_out));
> + if (ret) {
> + drm_err(&xe->drm, "Failed to init PXP session %u (%pe)\n", id, ERR_PTR(ret));
> + } else if (msg_out.header.status != 0) {
> + ret = -EIO;
> +
> + if (is_fw_err_platform_config(msg_out.header.status))
> + drm_info_once(&xe->drm,
> + "Failed to init PXP session %u due to BIOS/SOC, s=0x%x(%s)\n",
> + id, msg_out.header.status,
> + fw_err_to_string(msg_out.header.status));
> + else
> + drm_dbg(&xe->drm, "Failed to init PXP session %u, s=0x%x\n",
> + id, msg_out.header.status);
> + }
> +
> + return ret;
> +}
> +
> /**
> * xe_pxp_submit_session_invalidation - submits a PXP GSC invalidation
> * @gsc_res: the pxp client resources
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.h b/drivers/gpu/drm/xe/xe_pxp_submit.h
> index 48fdc9b09116..c9efda02f4b0 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_submit.h
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.h
> @@ -14,6 +14,7 @@ struct xe_pxp_gsc_client_resources;
> int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp);
> void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp);
>
> +int xe_pxp_submit_session_init(struct xe_pxp_gsc_client_resources *gsc_res, u32 id);
> int xe_pxp_submit_session_termination(struct xe_pxp *pxp, u32 id);
> int xe_pxp_submit_session_invalidation(struct xe_pxp_gsc_client_resources *gsc_res,
> u32 id);
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 02/12] drm/xe/pxp: Allocate PXP execution resources
2024-11-20 23:43 ` [PATCH v3 02/12] drm/xe/pxp: Allocate PXP execution resources Daniele Ceraolo Spurio
2024-12-06 2:10 ` John Harrison
@ 2024-12-06 23:49 ` John Harrison
1 sibling, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-06 23:49 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe; +Cc: Matthew Brost, Thomas Hellström
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> PXP requires submissions to the HW for the following operations
>
> 1) Key invalidation, done via the VCS engine
> 2) Communication with the GSC FW for session management, done via the
> GSCCS.
>
> Key invalidation submissions are serialized (only 1 termination can be
> serviced at a given time) and done via GGTT, so we can allocate a simple
> BO and a kernel queue for it.
>
> Submissions for session management are tied to a PXP client (identified
> by a unique host_session_id); from the GSC POV this is a user-accessible
> construct, so all related submission must be done via PPGTT. The driver
> does not currently support PPGTT submission from within the kernel, so
> to add this support, the following changes have been included:
>
> - a new type of kernel-owned VM (marked as GSC), required to ensure we
> don't use fault mode on the engine and to mark the different lock
> usage with lockdep.
> - a new function to map a BO into a VM from within the kernel.
>
> v2: improve comments and function name, remove unneeded include (John)
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> ---
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h | 7 +
> drivers/gpu/drm/xe/xe_exec_queue.c | 3 +
> drivers/gpu/drm/xe/xe_pxp.c | 23 +-
> drivers/gpu/drm/xe/xe_pxp_submit.c | 200 ++++++++++++++++++
> drivers/gpu/drm/xe/xe_pxp_submit.h | 14 ++
> drivers/gpu/drm/xe/xe_pxp_types.h | 48 +++++
> drivers/gpu/drm/xe/xe_vm.c | 119 ++++++++++-
> drivers/gpu/drm/xe/xe_vm.h | 6 +
> drivers/gpu/drm/xe/xe_vm_types.h | 1 +
> 10 files changed, 411 insertions(+), 11 deletions(-)
> create mode 100644 drivers/gpu/drm/xe/xe_pxp_submit.c
> create mode 100644 drivers/gpu/drm/xe/xe_pxp_submit.h
>
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index 3c0bd3c814de..126c8f1ab673 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -87,6 +87,7 @@ xe-y += xe_bb.o \
> xe_pt.o \
> xe_pt_walk.o \
> xe_pxp.o \
> + xe_pxp_submit.o \
> xe_query.o \
> xe_range_fence.o \
> xe_reg_sr.o \
> diff --git a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> index 57520809e48d..f3c4cf10ba20 100644
> --- a/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> +++ b/drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
> @@ -6,6 +6,7 @@
> #ifndef _ABI_GSC_PXP_COMMANDS_ABI_H
> #define _ABI_GSC_PXP_COMMANDS_ABI_H
>
> +#include <linux/sizes.h>
> #include <linux/types.h>
>
> /* Heci client ID for PXP commands */
> @@ -13,6 +14,12 @@
>
> #define PXP_APIVER(x, y) (((x) & 0xFFFF) << 16 | ((y) & 0xFFFF))
>
> +/*
> + * A PXP sub-section in an HECI packet can be up to 64K big in each direction.
> + * This does not include the top-level GSC header.
> + */
> +#define PXP_MAX_PACKET_SIZE SZ_64K
> +
> /*
> * there are a lot of status codes for PXP, but we only define the cross-API
> * common ones that we actually can handle in the kernel driver. Other failure
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
> index aab9e561153d..60418debc1ec 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -150,6 +150,9 @@ struct xe_exec_queue *xe_exec_queue_create(struct xe_device *xe, struct xe_vm *v
> struct xe_exec_queue *q;
> int err;
>
> + /* VMs for GSCCS queues (and only those) must have the XE_VM_FLAG_GSC flag */
> + xe_assert(xe, !vm || (!!(vm->flags & XE_VM_FLAG_GSC) == !!(hwe->engine_id == XE_HW_ENGINE_GSCCS0)));
> +
> q = __xe_exec_queue_alloc(xe, vm, logical_mask, width, hwe, flags,
> extensions);
> if (IS_ERR(q))
> diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
> index 1a4d12d37d96..89d71a69cdff 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.c
> +++ b/drivers/gpu/drm/xe/xe_pxp.c
> @@ -12,6 +12,7 @@
> #include "xe_gt.h"
> #include "xe_gt_types.h"
> #include "xe_mmio.h"
> +#include "xe_pxp_submit.h"
> #include "xe_pxp_types.h"
> #include "xe_uc_fw.h"
> #include "regs/xe_pxp_regs.h"
> @@ -50,6 +51,20 @@ static int kcr_pxp_enable(const struct xe_pxp *pxp)
> return kcr_pxp_set_status(pxp, true);
> }
>
> +static int kcr_pxp_disable(const struct xe_pxp *pxp)
> +{
> + return kcr_pxp_set_status(pxp, false);
> +}
> +
> +static void pxp_fini(void *arg)
> +{
> + struct xe_pxp *pxp = arg;
> +
> + xe_pxp_destroy_execution_resources(pxp);
> +
> + /* no need to explicitly disable KCR since we're going to do an FLR */
> +}
> +
> /**
> * xe_pxp_init - initialize PXP support
> * @xe: the xe_device structure
> @@ -97,10 +112,16 @@ int xe_pxp_init(struct xe_device *xe)
> if (err)
> goto out_free;
>
> + err = xe_pxp_allocate_execution_resources(pxp);
> + if (err)
> + goto out_kcr_disable;
> +
> xe->pxp = pxp;
>
> - return 0;
> + return devm_add_action_or_reset(xe->drm.dev, pxp_fini, pxp);
>
> +out_kcr_disable:
> + kcr_pxp_disable(pxp);
> out_free:
> drmm_kfree(&xe->drm, pxp);
> return err;
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.c b/drivers/gpu/drm/xe/xe_pxp_submit.c
> new file mode 100644
> index 000000000000..196c0e5bbb17
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.c
> @@ -0,0 +1,200 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright(c) 2024 Intel Corporation.
> + */
> +
> +#include "xe_pxp_submit.h"
> +
> +#include <uapi/drm/xe_drm.h>
> +
> +#include "xe_device_types.h"
> +#include "xe_bo.h"
> +#include "xe_exec_queue.h"
> +#include "xe_gsc_submit.h"
> +#include "xe_gt.h"
> +#include "xe_pxp_types.h"
> +#include "xe_vm.h"
> +
> +/*
> + * The VCS is used for kernel-owned GGTT submissions to issue key termination.
> + * Terminations are serialized, so we only need a single queue and a single
> + * batch.
> + */
> +static int allocate_vcs_execution_resources(struct xe_pxp *pxp)
> +{
> + struct xe_gt *gt = pxp->gt;
> + struct xe_device *xe = pxp->xe;
> + struct xe_tile *tile = gt_to_tile(gt);
> + struct xe_hw_engine *hwe;
> + struct xe_exec_queue *q;
> + struct xe_bo *bo;
> + int err;
> +
> + hwe = xe_gt_hw_engine(gt, XE_ENGINE_CLASS_VIDEO_DECODE, 0, true);
> + if (!hwe)
> + return -ENODEV;
> +
> + q = xe_exec_queue_create(xe, NULL, BIT(hwe->logical_instance), 1, hwe,
> + EXEC_QUEUE_FLAG_KERNEL | EXEC_QUEUE_FLAG_PERMANENT, 0);
> + if (IS_ERR(q))
> + return PTR_ERR(q);
> +
> + /*
> + * Each termination is 16 DWORDS, so 4K is enough to contain a
> + * termination for each sessions.
> + */
> + bo = xe_bo_create_pin_map(xe, tile, 0, SZ_4K, ttm_bo_type_kernel,
> + XE_BO_FLAG_SYSTEM | XE_BO_FLAG_PINNED | XE_BO_FLAG_GGTT);
> + if (IS_ERR(bo)) {
> + err = PTR_ERR(bo);
> + goto out_queue;
> + }
> +
> + pxp->vcs_exec.q = q;
> + pxp->vcs_exec.bo = bo;
> +
> + return 0;
> +
> +out_queue:
> + xe_exec_queue_put(q);
> + return err;
> +}
> +
> +static void destroy_vcs_execution_resources(struct xe_pxp *pxp)
> +{
> + if (pxp->vcs_exec.bo)
> + xe_bo_unpin_map_no_vm(pxp->vcs_exec.bo);
> +
> + if (pxp->vcs_exec.q)
> + xe_exec_queue_put(pxp->vcs_exec.q);
> +}
> +
> +#define PXP_BB_SIZE XE_PAGE_SIZE
> +static int allocate_gsc_client_resources(struct xe_gt *gt,
> + struct xe_pxp_gsc_client_resources *gsc_res,
> + size_t inout_size)
> +{
> + struct xe_tile *tile = gt_to_tile(gt);
> + struct xe_device *xe = tile_to_xe(tile);
> + struct xe_hw_engine *hwe;
> + struct xe_vm *vm;
> + struct xe_bo *bo;
> + struct xe_exec_queue *q;
> + struct dma_fence *fence;
> + long timeout;
> + int err = 0;
> +
> + hwe = xe_gt_hw_engine(gt, XE_ENGINE_CLASS_OTHER, 0, true);
> +
> + /* we shouldn't reach here if the GSC engine is not available */
> + xe_assert(xe, hwe);
> +
> + /* PXP instructions must be issued from PPGTT */
> + vm = xe_vm_create(xe, XE_VM_FLAG_GSC);
> + if (IS_ERR(vm))
> + return PTR_ERR(vm);
> +
> + /* We allocate a single object for the batch and the in/out memory */
> + xe_vm_lock(vm, false);
> + bo = xe_bo_create_pin_map(xe, tile, vm, PXP_BB_SIZE + inout_size * 2,
> + ttm_bo_type_kernel,
> + XE_BO_FLAG_SYSTEM | XE_BO_FLAG_PINNED | XE_BO_FLAG_NEEDS_UC);
> + xe_vm_unlock(vm);
> + if (IS_ERR(bo)) {
> + err = PTR_ERR(bo);
> + goto vm_out;
> + }
> +
> + fence = xe_vm_bind_kernel_bo(vm, bo, NULL, 0, XE_CACHE_WB);
> + if (IS_ERR(fence)) {
> + err = PTR_ERR(fence);
> + goto bo_out;
> + }
> +
> + timeout = dma_fence_wait_timeout(fence, false, HZ);
> + dma_fence_put(fence);
> + if (timeout <= 0) {
> + err = timeout ?: -ETIME;
> + goto bo_out;
> + }
> +
> + q = xe_exec_queue_create(xe, vm, BIT(hwe->logical_instance), 1, hwe,
> + EXEC_QUEUE_FLAG_KERNEL |
> + EXEC_QUEUE_FLAG_PERMANENT, 0);
> + if (IS_ERR(q)) {
> + err = PTR_ERR(q);
> + goto bo_out;
> + }
> +
> + gsc_res->vm = vm;
> + gsc_res->bo = bo;
> + gsc_res->inout_size = inout_size;
> + gsc_res->batch = IOSYS_MAP_INIT_OFFSET(&bo->vmap, 0);
> + gsc_res->msg_in = IOSYS_MAP_INIT_OFFSET(&bo->vmap, PXP_BB_SIZE);
> + gsc_res->msg_out = IOSYS_MAP_INIT_OFFSET(&bo->vmap, PXP_BB_SIZE + inout_size);
> + gsc_res->q = q;
> +
> + /* initialize host-session-handle (for all Xe-to-gsc-firmware PXP cmds) */
> + gsc_res->host_session_handle = xe_gsc_create_host_session_id();
> +
> + return 0;
> +
> +bo_out:
> + xe_bo_unpin_map_no_vm(bo);
> +vm_out:
> + xe_vm_close_and_put(vm);
> +
> + return err;
> +}
> +
> +static void destroy_gsc_client_resources(struct xe_pxp_gsc_client_resources *gsc_res)
> +{
> + if (!gsc_res->q)
> + return;
> +
> + xe_exec_queue_put(gsc_res->q);
> + xe_bo_unpin_map_no_vm(gsc_res->bo);
> + xe_vm_close_and_put(gsc_res->vm);
> +}
> +
> +/**
> + * xe_pxp_allocate_execution_resources - Allocate PXP submission objects
> + * @pxp: the xe_pxp structure
> + *
> + * Allocates exec_queues objects for VCS and GSCCS submission. The GSCCS
> + * submissions are done via PPGTT, so this function allocates a VM for it and
> + * maps the object into it.
> + *
> + * Returns 0 if the allocation and mapping is successful, an errno value
> + * otherwise.
> + */
> +int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp)
> +{
> + int err;
> +
> + err = allocate_vcs_execution_resources(pxp);
> + if (err)
> + return err;
> +
> + /*
> + * PXP commands can require a lot of BO space (see PXP_MAX_PACKET_SIZE),
> + * but we currently only support a subset of commands that are small
> + * (< 20 dwords), so a single page is enough for now.
> + */
> + err = allocate_gsc_client_resources(pxp->gt, &pxp->gsc_res, XE_PAGE_SIZE);
> + if (err)
> + goto destroy_vcs_context;
> +
> + return 0;
> +
> +destroy_vcs_context:
> + destroy_vcs_execution_resources(pxp);
> + return err;
> +}
> +
> +void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp)
> +{
> + destroy_gsc_client_resources(&pxp->gsc_res);
> + destroy_vcs_execution_resources(pxp);
> +}
> +
I think this is the blank line that 'git am' is complaining about.
John.
> diff --git a/drivers/gpu/drm/xe/xe_pxp_submit.h b/drivers/gpu/drm/xe/xe_pxp_submit.h
> new file mode 100644
> index 000000000000..fd21ac935be1
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_pxp_submit.h
> @@ -0,0 +1,14 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright(c) 2024, Intel Corporation. All rights reserved.
> + */
> +
> +#ifndef __XE_PXP_SUBMIT_H__
> +#define __XE_PXP_SUBMIT_H__
> +
> +struct xe_pxp;
> +
> +int xe_pxp_allocate_execution_resources(struct xe_pxp *pxp);
> +void xe_pxp_destroy_execution_resources(struct xe_pxp *pxp);
> +
> +#endif /* __XE_PXP_SUBMIT_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
> index 4639cf49d267..25db23180a30 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_types.h
> +++ b/drivers/gpu/drm/xe/xe_pxp_types.h
> @@ -6,8 +6,45 @@
> #ifndef __XE_PXP_TYPES_H__
> #define __XE_PXP_TYPES_H__
>
> +#include <linux/iosys-map.h>
> +#include <linux/types.h>
> +
> +struct xe_bo;
> +struct xe_exec_queue;
> struct xe_device;
> struct xe_gt;
> +struct xe_vm;
> +
> +/**
> + * struct xe_pxp_gsc_client_resources - resources for GSC submission by a PXP
> + * client. The GSC FW supports multiple GSC client active at the same time.
> + */
> +struct xe_pxp_gsc_client_resources {
> + /**
> + * @host_session_handle: handle used to identify the client in messages
> + * sent to the GSC firmware.
> + */
> + u64 host_session_handle;
> + /** @vm: VM used for PXP submissions to the GSCCS */
> + struct xe_vm *vm;
> + /** @q: GSCCS exec queue for PXP submissions */
> + struct xe_exec_queue *q;
> +
> + /**
> + * @bo: BO used for submissions to the GSCCS and GSC FW. It includes
> + * space for the GSCCS batch and the input/output buffers read/written
> + * by the FW
> + */
> + struct xe_bo *bo;
> + /** @inout_size: size of each of the msg_in/out sections individually */
> + u32 inout_size;
> + /** @batch: iosys_map to the batch memory within the BO */
> + struct iosys_map batch;
> + /** @msg_in: iosys_map to the input memory within the BO */
> + struct iosys_map msg_in;
> + /** @msg_out: iosys_map to the output memory within the BO */
> + struct iosys_map msg_out;
> +};
>
> /**
> * struct xe_pxp - pxp state
> @@ -21,6 +58,17 @@ struct xe_pxp {
> * (VDBOX, KCR and GSC)
> */
> struct xe_gt *gt;
> +
> + /** @vcs_exec: kernel-owned objects for PXP submissions to the VCS */
> + struct {
> + /** @vcs_exec.q: kernel-owned VCS exec queue used for PXP terminations */
> + struct xe_exec_queue *q;
> + /** @vcs_exec.bo: BO used for submissions to the VCS */
> + struct xe_bo *bo;
> + } vcs_exec;
> +
> + /** @gsc_exec: kernel-owned objects for PXP submissions to the GSCCS */
> + struct xe_pxp_gsc_client_resources gsc_res;
> };
>
> #endif /* __XE_PXP_TYPES_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index 1d7faeba157e..eb95f654a88f 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -1382,6 +1382,12 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
> struct xe_tile *tile;
> u8 id;
>
> + /*
> + * Since the GSCCS is not user-accessible, we don't expect a GSC VM to
> + * ever be in faulting mode.
> + */
> + xe_assert(xe, !((flags & XE_VM_FLAG_GSC) && (flags & XE_VM_FLAG_FAULT_MODE)));
> +
> vm = kzalloc(sizeof(*vm), GFP_KERNEL);
> if (!vm)
> return ERR_PTR(-ENOMEM);
> @@ -1392,7 +1398,21 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
>
> vm->flags = flags;
>
> - init_rwsem(&vm->lock);
> + /**
> + * GSC VMs are kernel-owned, only used for PXP ops and can sometimes be
> + * manipulated under the PXP mutex. However, the PXP mutex can be taken
> + * under a user-VM lock when the PXP session is started at exec_queue
> + * creation time. Those are different VMs and therefore there is no risk
> + * of deadlock, but we need to tell lockdep that this is the case or it
> + * will print a warning.
> + */
> + if (flags & XE_VM_FLAG_GSC) {
> + static struct lock_class_key gsc_vm_key;
> +
> + __init_rwsem(&vm->lock, "gsc_vm", &gsc_vm_key);
> + } else {
> + init_rwsem(&vm->lock);
> + }
> mutex_init(&vm->snap_mutex);
>
> INIT_LIST_HEAD(&vm->rebind_list);
> @@ -2666,11 +2686,10 @@ static void vm_bind_ioctl_ops_fini(struct xe_vm *vm, struct xe_vma_ops *vops,
> for (i = 0; i < vops->num_syncs; i++)
> xe_sync_entry_signal(vops->syncs + i, fence);
> xe_exec_queue_last_fence_set(wait_exec_queue, vm, fence);
> - dma_fence_put(fence);
> }
>
> -static int vm_bind_ioctl_ops_execute(struct xe_vm *vm,
> - struct xe_vma_ops *vops)
> +static struct dma_fence *vm_bind_ioctl_ops_execute(struct xe_vm *vm,
> + struct xe_vma_ops *vops)
> {
> struct drm_exec exec;
> struct dma_fence *fence;
> @@ -2683,21 +2702,21 @@ static int vm_bind_ioctl_ops_execute(struct xe_vm *vm,
> drm_exec_until_all_locked(&exec) {
> err = vm_bind_ioctl_ops_lock_and_prep(&exec, vm, vops);
> drm_exec_retry_on_contention(&exec);
> - if (err)
> + if (err) {
> + fence = ERR_PTR(err);
> goto unlock;
> + }
>
> fence = ops_execute(vm, vops);
> - if (IS_ERR(fence)) {
> - err = PTR_ERR(fence);
> + if (IS_ERR(fence))
> goto unlock;
> - }
>
> vm_bind_ioctl_ops_fini(vm, vops, fence);
> }
>
> unlock:
> drm_exec_fini(&exec);
> - return err;
> + return fence;
> }
> ALLOW_ERROR_INJECTION(vm_bind_ioctl_ops_execute, ERRNO);
>
> @@ -2929,6 +2948,7 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> struct xe_sync_entry *syncs = NULL;
> struct drm_xe_vm_bind_op *bind_ops;
> struct xe_vma_ops vops;
> + struct dma_fence *fence;
> int err;
> int i;
>
> @@ -3093,7 +3113,11 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> if (err)
> goto unwind_ops;
>
> - err = vm_bind_ioctl_ops_execute(vm, &vops);
> + fence = vm_bind_ioctl_ops_execute(vm, &vops);
> + if (IS_ERR(fence))
> + err = PTR_ERR(fence);
> + else
> + dma_fence_put(fence);
>
> unwind_ops:
> if (err && err != -ENODATA)
> @@ -3127,6 +3151,81 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> return err;
> }
>
> +/**
> + * xe_vm_bind_bo - bind a kernel BO to a VM
> + * @vm: VM to bind the BO to
> + * @bo: BO to bind
> + * @q: exec queue to use for the bind (optional)
> + * @addr: address at which to bind the BO
> + * @cache_lvl: PAT cache level to use
> + *
> + * Execute a VM bind map operation on a kernel-owned BO to bind it into a
> + * kernel-owned VM.
> + *
> + * Returns a dma_fence to track the binding completion if the job to do so was
> + * successfully submitted, an error pointer otherwise.
> + */
> +struct dma_fence *xe_vm_bind_kernel_bo(struct xe_vm *vm, struct xe_bo *bo,
> + struct xe_exec_queue *q, u64 addr,
> + enum xe_cache_level cache_lvl)
> +{
> + struct xe_vma_ops vops;
> + struct drm_gpuva_ops *ops = NULL;
> + struct dma_fence *fence;
> + int err;
> +
> + xe_bo_get(bo);
> + xe_vm_get(vm);
> + if (q)
> + xe_exec_queue_get(q);
> +
> + down_write(&vm->lock);
> +
> + xe_vma_ops_init(&vops, vm, q, NULL, 0);
> +
> + ops = vm_bind_ioctl_ops_create(vm, bo, 0, addr, bo->size,
> + DRM_XE_VM_BIND_OP_MAP, 0, 0,
> + vm->xe->pat.idx[cache_lvl]);
> + if (IS_ERR(ops)) {
> + err = PTR_ERR(ops);
> + goto release_vm_lock;
> + }
> +
> + err = vm_bind_ioctl_ops_parse(vm, ops, &vops);
> + if (err)
> + goto release_vm_lock;
> +
> + xe_assert(vm->xe, !list_empty(&vops.list));
> +
> + err = xe_vma_ops_alloc(&vops, false);
> + if (err)
> + goto unwind_ops;
> +
> + fence = vm_bind_ioctl_ops_execute(vm, &vops);
> + if (IS_ERR(fence))
> + err = PTR_ERR(fence);
> +
> +unwind_ops:
> + if (err && err != -ENODATA)
> + vm_bind_ioctl_ops_unwind(vm, &ops, 1);
> +
> + xe_vma_ops_fini(&vops);
> + drm_gpuva_ops_free(&vm->gpuvm, ops);
> +
> +release_vm_lock:
> + up_write(&vm->lock);
> +
> + if (q)
> + xe_exec_queue_put(q);
> + xe_vm_put(vm);
> + xe_bo_put(bo);
> +
> + if (err)
> + fence = ERR_PTR(err);
> +
> + return fence;
> +}
> +
> /**
> * xe_vm_lock() - Lock the vm's dma_resv object
> * @vm: The struct xe_vm whose lock is to be locked
> diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
> index 23adb7442881..0a2fa6c0815b 100644
> --- a/drivers/gpu/drm/xe/xe_vm.h
> +++ b/drivers/gpu/drm/xe/xe_vm.h
> @@ -18,6 +18,8 @@ struct drm_file;
>
> struct ttm_buffer_object;
>
> +struct dma_fence;
> +
> struct xe_exec_queue;
> struct xe_file;
> struct xe_sync_entry;
> @@ -247,6 +249,10 @@ int xe_vm_lock_vma(struct drm_exec *exec, struct xe_vma *vma);
> int xe_vm_validate_rebind(struct xe_vm *vm, struct drm_exec *exec,
> unsigned int num_fences);
>
> +struct dma_fence *xe_vm_bind_kernel_bo(struct xe_vm *vm, struct xe_bo *bo,
> + struct xe_exec_queue *q, u64 addr,
> + enum xe_cache_level cache_lvl);
> +
> /**
> * xe_vm_resv() - Return's the vm's reservation object
> * @vm: The vm
> diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
> index 7f9a303e51d8..52467b9b5348 100644
> --- a/drivers/gpu/drm/xe/xe_vm_types.h
> +++ b/drivers/gpu/drm/xe/xe_vm_types.h
> @@ -164,6 +164,7 @@ struct xe_vm {
> #define XE_VM_FLAG_BANNED BIT(5)
> #define XE_VM_FLAG_TILE_ID(flags) FIELD_GET(GENMASK(7, 6), flags)
> #define XE_VM_FLAG_SET_TILE_ID(tile) FIELD_PREP(GENMASK(7, 6), (tile)->id)
> +#define XE_VM_FLAG_GSC BIT(8)
> unsigned long flags;
>
> /** @composite_fence_ctx: context composite fence */
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 07/12] drm/xe/pxp: Add support for PXP-using queues
2024-11-20 23:43 ` [PATCH v3 07/12] drm/xe/pxp: Add support for PXP-using queues Daniele Ceraolo Spurio
@ 2024-12-09 18:53 ` John Harrison
0 siblings, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-09 18:53 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> Userspace is required to mark a queue as using PXP to guarantee that the
> PXP instructions will work. When a PXP queue is created, the driver will
> do the following:
> - Start the default PXP session if it is not already running;
> - set the relevant bits in the context control register;
> - assign an rpm ref to the queue to keep for its lifetime (this is
> required because PXP HWDRM sessions are killed by the HW suspend flow).
>
> When a PXP invalidation occurs, all the PXP queues will be killed.
> On submission of a valid PXP queue, the driver will validate all
> encrypted objects mapped to the VM to ensured they were encrypted with
> the current key.
>
> v2: Remove pxp_types include outside of PXP code (Jani), better comments
> and code cleanup (John)
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
> drivers/gpu/drm/xe/regs/xe_engine_regs.h | 1 +
> drivers/gpu/drm/xe/xe_exec_queue.c | 57 +++-
> drivers/gpu/drm/xe/xe_exec_queue.h | 5 +
> drivers/gpu/drm/xe/xe_exec_queue_types.h | 8 +
> drivers/gpu/drm/xe/xe_execlist.c | 2 +-
> drivers/gpu/drm/xe/xe_lrc.c | 16 +-
> drivers/gpu/drm/xe/xe_lrc.h | 4 +-
> drivers/gpu/drm/xe/xe_pxp.c | 317 ++++++++++++++++++++++-
> drivers/gpu/drm/xe/xe_pxp.h | 9 +-
> drivers/gpu/drm/xe/xe_pxp_types.h | 26 ++
> include/uapi/drm/xe_drm.h | 40 ++-
> 11 files changed, 471 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/regs/xe_engine_regs.h b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
> index 7c78496e6213..07365d4f288e 100644
> --- a/drivers/gpu/drm/xe/regs/xe_engine_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
> @@ -130,6 +130,7 @@
> #define RING_EXECLIST_STATUS_HI(base) XE_REG((base) + 0x234 + 4)
>
> #define RING_CONTEXT_CONTROL(base) XE_REG((base) + 0x244, XE_REG_OPTION_MASKED)
> +#define CTX_CTRL_PXP_ENABLE REG_BIT(10)
> #define CTX_CTRL_OAC_CONTEXT_ENABLE REG_BIT(8)
> #define CTX_CTRL_RUN_ALONE REG_BIT(7)
> #define CTX_CTRL_INDIRECT_RING_STATE_ENABLE REG_BIT(4)
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
> index 60418debc1ec..6851334be230 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -23,6 +23,7 @@
> #include "xe_ring_ops_types.h"
> #include "xe_trace.h"
> #include "xe_vm.h"
> +#include "xe_pxp.h"
>
> enum xe_exec_queue_sched_prop {
> XE_EXEC_QUEUE_JOB_TIMEOUT = 0,
> @@ -36,6 +37,8 @@ static int exec_queue_user_extensions(struct xe_device *xe, struct xe_exec_queue
>
> static void __xe_exec_queue_free(struct xe_exec_queue *q)
> {
> + if (xe_exec_queue_uses_pxp(q))
> + xe_pxp_exec_queue_remove(gt_to_xe(q->gt)->pxp, q);
> if (q->vm)
> xe_vm_put(q->vm);
>
> @@ -75,6 +78,7 @@ static struct xe_exec_queue *__xe_exec_queue_alloc(struct xe_device *xe,
> INIT_LIST_HEAD(&q->lr.link);
> INIT_LIST_HEAD(&q->multi_gt_link);
> INIT_LIST_HEAD(&q->hw_engine_group_link);
> + INIT_LIST_HEAD(&q->pxp.link);
>
> q->sched_props.timeslice_us = hwe->eclass->sched_props.timeslice_us;
> q->sched_props.preempt_timeout_us =
> @@ -109,6 +113,21 @@ static int __xe_exec_queue_init(struct xe_exec_queue *q)
> {
> struct xe_vm *vm = q->vm;
> int i, err;
> + u32 flags = 0;
> +
> + /*
> + * PXP workloads executing on RCS or CCS must run in isolation (i.e. no
> + * other workload can use the EUs at the same time). On MTL this is done
> + * by setting the RUNALONE bit in the LRC, while starting on Xe2 there
> + * is a dedicated bit for it.
> + */
> + if (xe_exec_queue_uses_pxp(q) &&
> + (q->class == XE_ENGINE_CLASS_RENDER || q->class == XE_ENGINE_CLASS_COMPUTE)) {
> + if (GRAPHICS_VER(gt_to_xe(q->gt)) >= 20)
> + flags |= XE_LRC_CREATE_PXP;
> + else
> + flags |= XE_LRC_CREATE_RUNALONE;
> + }
>
> if (vm) {
> err = xe_vm_lock(vm, true);
> @@ -117,7 +136,7 @@ static int __xe_exec_queue_init(struct xe_exec_queue *q)
> }
>
> for (i = 0; i < q->width; ++i) {
> - q->lrc[i] = xe_lrc_create(q->hwe, q->vm, SZ_16K);
> + q->lrc[i] = xe_lrc_create(q->hwe, q->vm, SZ_16K, flags);
> if (IS_ERR(q->lrc[i])) {
> err = PTR_ERR(q->lrc[i]);
> goto err_unlock;
> @@ -162,6 +181,19 @@ struct xe_exec_queue *xe_exec_queue_create(struct xe_device *xe, struct xe_vm *v
> if (err)
> goto err_post_alloc;
>
> + /*
> + * We can only add the queue to the PXP list after the init is complete,
> + * because the PXP termination can call exec_queue_kill and that will
> + * go bad if the queue is only half-initialized. This means that we
> + * can't do it when we handle the PXP extension in __xe_exec_queue_alloc
> + * and we need to do it here instead.
> + */
> + if (xe_exec_queue_uses_pxp(q)) {
> + err = xe_pxp_exec_queue_add(xe->pxp, q);
> + if (err)
> + goto err_post_alloc;
> + }
> +
> return q;
>
> err_post_alloc:
> @@ -250,6 +282,9 @@ void xe_exec_queue_destroy(struct kref *ref)
> struct xe_exec_queue *q = container_of(ref, struct xe_exec_queue, refcount);
> struct xe_exec_queue *eq, *next;
>
> + if (xe_exec_queue_uses_pxp(q))
> + xe_pxp_exec_queue_remove(gt_to_xe(q->gt)->pxp, q);
> +
> xe_exec_queue_last_fence_put_unlocked(q);
> if (!(q->flags & EXEC_QUEUE_FLAG_BIND_ENGINE_CHILD)) {
> list_for_each_entry_safe(eq, next, &q->multi_gt_list,
> @@ -405,6 +440,22 @@ static int exec_queue_set_timeslice(struct xe_device *xe, struct xe_exec_queue *
> return 0;
> }
>
> +static int
> +exec_queue_set_pxp_type(struct xe_device *xe, struct xe_exec_queue *q, u64 value)
> +{
> + if (value == DRM_XE_PXP_TYPE_NONE)
> + return 0;
> +
> + if (!xe_pxp_is_enabled(xe->pxp))
> + return -ENODEV;
> +
> + /* we only support HWDRM sessions right now */
> + if (XE_IOCTL_DBG(xe, value != DRM_XE_PXP_TYPE_HWDRM))
> + return -EINVAL;
> +
> + return xe_pxp_exec_queue_set_type(xe->pxp, q, DRM_XE_PXP_TYPE_HWDRM);
> +}
> +
> typedef int (*xe_exec_queue_set_property_fn)(struct xe_device *xe,
> struct xe_exec_queue *q,
> u64 value);
> @@ -412,6 +463,7 @@ typedef int (*xe_exec_queue_set_property_fn)(struct xe_device *xe,
> static const xe_exec_queue_set_property_fn exec_queue_set_property_funcs[] = {
> [DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY] = exec_queue_set_priority,
> [DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE] = exec_queue_set_timeslice,
> + [DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE] = exec_queue_set_pxp_type,
> };
>
> static int exec_queue_user_ext_set_property(struct xe_device *xe,
> @@ -431,7 +483,8 @@ static int exec_queue_user_ext_set_property(struct xe_device *xe,
> ARRAY_SIZE(exec_queue_set_property_funcs)) ||
> XE_IOCTL_DBG(xe, ext.pad) ||
> XE_IOCTL_DBG(xe, ext.property != DRM_XE_EXEC_QUEUE_SET_PROPERTY_PRIORITY &&
> - ext.property != DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE))
> + ext.property != DRM_XE_EXEC_QUEUE_SET_PROPERTY_TIMESLICE &&
> + ext.property != DRM_XE_EXEC_QUEUE_SET_PROPERTY_PXP_TYPE))
> return -EINVAL;
>
> idx = array_index_nospec(ext.property, ARRAY_SIZE(exec_queue_set_property_funcs));
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.h b/drivers/gpu/drm/xe/xe_exec_queue.h
> index 90c7f73eab88..17bc50a7f05a 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.h
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.h
> @@ -57,6 +57,11 @@ static inline bool xe_exec_queue_is_parallel(struct xe_exec_queue *q)
> return q->width > 1;
> }
>
> +static inline bool xe_exec_queue_uses_pxp(struct xe_exec_queue *q)
> +{
> + return q->pxp.type;
> +}
> +
> bool xe_exec_queue_is_lr(struct xe_exec_queue *q);
>
> bool xe_exec_queue_ring_full(struct xe_exec_queue *q);
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> index 1158b6062a6c..9e4af4824b65 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
> +++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
> @@ -128,6 +128,14 @@ struct xe_exec_queue {
> struct list_head link;
> } lr;
>
> + /** @pxp: PXP info tracking */
> + struct {
> + /** @pxp.type: PXP session type used by this queue */
> + u8 type;
> + /** @pxp.link: link into the list of PXP exec queues */
> + struct list_head link;
> + } pxp;
> +
> /** @ops: submission backend exec queue operations */
> const struct xe_exec_queue_ops *ops;
>
> diff --git a/drivers/gpu/drm/xe/xe_execlist.c b/drivers/gpu/drm/xe/xe_execlist.c
> index a8c416a48812..84b69a5dd361 100644
> --- a/drivers/gpu/drm/xe/xe_execlist.c
> +++ b/drivers/gpu/drm/xe/xe_execlist.c
> @@ -265,7 +265,7 @@ struct xe_execlist_port *xe_execlist_port_create(struct xe_device *xe,
>
> port->hwe = hwe;
>
> - port->lrc = xe_lrc_create(hwe, NULL, SZ_16K);
> + port->lrc = xe_lrc_create(hwe, NULL, SZ_16K, 0);
> if (IS_ERR(port->lrc)) {
> err = PTR_ERR(port->lrc);
> goto err;
> diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
> index 22e58c6e2a35..b05268cd8f36 100644
> --- a/drivers/gpu/drm/xe/xe_lrc.c
> +++ b/drivers/gpu/drm/xe/xe_lrc.c
> @@ -876,7 +876,7 @@ static void xe_lrc_finish(struct xe_lrc *lrc)
> #define PVC_CTX_ACC_CTR_THOLD (0x2a + 1)
>
> static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
> - struct xe_vm *vm, u32 ring_size)
> + struct xe_vm *vm, u32 ring_size, u32 init_flags)
> {
> struct xe_gt *gt = hwe->gt;
> struct xe_tile *tile = gt_to_tile(gt);
> @@ -964,6 +964,16 @@ static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
> RING_CTL_SIZE(lrc->ring.size) | RING_VALID);
> }
>
> + if (init_flags & XE_LRC_CREATE_RUNALONE)
> + xe_lrc_write_ctx_reg(lrc, CTX_CONTEXT_CONTROL,
> + xe_lrc_read_ctx_reg(lrc, CTX_CONTEXT_CONTROL) |
> + _MASKED_BIT_ENABLE(CTX_CTRL_RUN_ALONE));
> +
> + if (init_flags & XE_LRC_CREATE_PXP)
> + xe_lrc_write_ctx_reg(lrc, CTX_CONTEXT_CONTROL,
> + xe_lrc_read_ctx_reg(lrc, CTX_CONTEXT_CONTROL) |
> + _MASKED_BIT_ENABLE(CTX_CTRL_PXP_ENABLE));
> +
> xe_lrc_write_ctx_reg(lrc, CTX_TIMESTAMP, 0);
>
> if (xe->info.has_asid && vm)
> @@ -1012,7 +1022,7 @@ static int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
> * upon failure.
> */
> struct xe_lrc *xe_lrc_create(struct xe_hw_engine *hwe, struct xe_vm *vm,
> - u32 ring_size)
> + u32 ring_size, u32 flags)
> {
> struct xe_lrc *lrc;
> int err;
> @@ -1021,7 +1031,7 @@ struct xe_lrc *xe_lrc_create(struct xe_hw_engine *hwe, struct xe_vm *vm,
> if (!lrc)
> return ERR_PTR(-ENOMEM);
>
> - err = xe_lrc_init(lrc, hwe, vm, ring_size);
> + err = xe_lrc_init(lrc, hwe, vm, ring_size, flags);
> if (err) {
> kfree(lrc);
> return ERR_PTR(err);
> diff --git a/drivers/gpu/drm/xe/xe_lrc.h b/drivers/gpu/drm/xe/xe_lrc.h
> index 9bc86c1fc16f..40605b868d88 100644
> --- a/drivers/gpu/drm/xe/xe_lrc.h
> +++ b/drivers/gpu/drm/xe/xe_lrc.h
> @@ -42,8 +42,10 @@ struct xe_lrc_snapshot {
> #define LRC_PPHWSP_FLUSH_INVAL_SCRATCH_ADDR (0x34 * 4)
> #define LRC_PPHWSP_PXP_INVAL_SCRATCH_ADDR (0x40 * 4)
>
> +#define XE_LRC_CREATE_RUNALONE 0x1
> +#define XE_LRC_CREATE_PXP 0x2
> struct xe_lrc *xe_lrc_create(struct xe_hw_engine *hwe, struct xe_vm *vm,
> - u32 ring_size);
> + u32 ring_size, u32 flags);
> void xe_lrc_destroy(struct kref *ref);
>
> /**
> diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
> index bc816cfecdd6..ce1d7ab448dc 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.c
> +++ b/drivers/gpu/drm/xe/xe_pxp.c
> @@ -6,11 +6,16 @@
> #include "xe_pxp.h"
>
> #include <drm/drm_managed.h>
> +#include <uapi/drm/xe_drm.h>
>
> #include "xe_device_types.h"
> +#include "xe_exec_queue.h"
> #include "xe_force_wake.h"
> +#include "xe_guc_submit.h"
> +#include "xe_gsc_proxy.h"
> #include "xe_gt.h"
> #include "xe_gt_types.h"
> +#include "xe_huc.h"
> #include "xe_mmio.h"
> #include "xe_pm.h"
> #include "xe_pxp_submit.h"
> @@ -34,11 +39,45 @@ bool xe_pxp_is_supported(const struct xe_device *xe)
> return xe->info.has_pxp && IS_ENABLED(CONFIG_INTEL_MEI_GSC_PROXY);
> }
>
> -static bool pxp_is_enabled(const struct xe_pxp *pxp)
> +bool xe_pxp_is_enabled(const struct xe_pxp *pxp)
> {
> return pxp;
> }
>
> +static bool pxp_prerequisites_done(const struct xe_pxp *pxp)
> +{
> + struct xe_gt *gt = pxp->gt;
> + unsigned int fw_ref;
> + bool ready;
> +
> + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> +
> + /*
> + * If force_wake fails we could falsely report the prerequisites as not
> + * done even if they are; the consequence of this would be that the
> + * callers won't go ahead with using PXP, but if force_wake doesn't work
> + * the GT is very likely in a bad state so not really a problem to abort
> + * PXP. Therefore, we can just log the force_wake error and not escalate
> + * it.
> + */
> + XE_WARN_ON(!xe_force_wake_ref_has_domain(fw_ref, XE_FORCEWAKE_ALL));
> +
> + /* PXP requires both HuC authentication via GSC and GSC proxy initialized */
> + ready = xe_huc_is_authenticated(>->uc.huc, XE_HUC_AUTH_VIA_GSC) &&
> + xe_gsc_proxy_init_done(>->uc.gsc);
> +
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> +
> + return ready;
> +}
> +
> +static bool pxp_session_is_in_play(struct xe_pxp *pxp, u32 id)
> +{
> + struct xe_gt *gt = pxp->gt;
> +
> + return xe_mmio_read32(>->mmio, KCR_SIP) & BIT(id);
> +}
> +
> static int pxp_wait_for_session_state(struct xe_pxp *pxp, u32 id, bool in_play)
> {
> struct xe_gt *gt = pxp->gt;
> @@ -48,6 +87,8 @@ static int pxp_wait_for_session_state(struct xe_pxp *pxp, u32 id, bool in_play)
> 250, NULL, false);
> }
>
> +static void pxp_invalidate_queues(struct xe_pxp *pxp);
> +
> static void pxp_terminate(struct xe_pxp *pxp)
> {
> int ret = 0;
> @@ -55,6 +96,24 @@ static void pxp_terminate(struct xe_pxp *pxp)
> struct xe_gt *gt = pxp->gt;
> unsigned int fw_ref;
>
> + lockdep_assert_held(&pxp->mutex);
> +
> + pxp_invalidate_queues(pxp);
> +
> + /*
> + * If we have a termination already in progress, we need to wait for
> + * it to complete before queueing another one. We update the state
> + * to signal that another termination is required and leave it to the
> + * pxp_start() call to take care of it.
> + */
> + if (!completion_done(&pxp->termination)) {
> + pxp->status = XE_PXP_NEEDS_TERMINATION;
> + return;
> + }
> +
> + reinit_completion(&pxp->termination);
> + pxp->status = XE_PXP_TERMINATION_IN_PROGRESS;
> +
> drm_dbg(&xe->drm, "Terminating PXP\n");
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> @@ -81,13 +140,32 @@ static void pxp_terminate(struct xe_pxp *pxp)
> out:
> xe_force_wake_put(gt_to_fw(gt), fw_ref);
>
> - if (ret)
> + if (ret) {
> drm_err(&xe->drm, "PXP termination failed: %pe\n", ERR_PTR(ret));
> + pxp->status = XE_PXP_ERROR;
> + complete_all(&pxp->termination);
> + }
> }
>
> static void pxp_terminate_complete(struct xe_pxp *pxp)
> {
> - /* TODO mark the session as ready to start */
> + /*
> + * We expect PXP to be in one of 2 states when we get here:
> + * - XE_PXP_TERMINATION_IN_PROGRESS: a single termination event was
> + * requested and it is now completing, so we're ready to start.
> + * - XE_PXP_NEEDS_TERMINATION: a second termination was requested while
> + * the first one was still being processed; we don't update the state
> + * in this case so the pxp_start code will automatically issue that
> + * second termination.
> + */
> + if (pxp->status == XE_PXP_TERMINATION_IN_PROGRESS)
> + pxp->status = XE_PXP_READY_TO_START;
> + else if (pxp->status != XE_PXP_NEEDS_TERMINATION)
> + drm_err(&pxp->xe->drm,
> + "PXP termination complete while status was %u\n",
> + pxp->status);
> +
> + complete_all(&pxp->termination);
> }
>
> static void pxp_irq_work(struct work_struct *work)
> @@ -111,6 +189,8 @@ static void pxp_irq_work(struct work_struct *work)
> if ((events & PXP_TERMINATION_REQUEST) && !xe_pm_runtime_get_if_active(xe))
> return;
>
> + mutex_lock(&pxp->mutex);
> +
> if (events & PXP_TERMINATION_REQUEST) {
> events &= ~PXP_TERMINATION_COMPLETE;
> pxp_terminate(pxp);
> @@ -119,6 +199,8 @@ static void pxp_irq_work(struct work_struct *work)
> if (events & PXP_TERMINATION_COMPLETE)
> pxp_terminate_complete(pxp);
>
> + mutex_unlock(&pxp->mutex);
> +
> if (events & PXP_TERMINATION_REQUEST)
> xe_pm_runtime_put(xe);
> }
> @@ -132,7 +214,7 @@ void xe_pxp_irq_handler(struct xe_device *xe, u16 iir)
> {
> struct xe_pxp *pxp = xe->pxp;
>
> - if (!pxp_is_enabled(pxp)) {
> + if (!xe_pxp_is_enabled(pxp)) {
> drm_err(&xe->drm, "PXP irq 0x%x received with PXP disabled!\n", iir);
> return;
> }
> @@ -229,10 +311,22 @@ int xe_pxp_init(struct xe_device *xe)
> if (!pxp)
> return -ENOMEM;
>
> + INIT_LIST_HEAD(&pxp->queues.list);
> + spin_lock_init(&pxp->queues.lock);
> INIT_WORK(&pxp->irq.work, pxp_irq_work);
> pxp->xe = xe;
> pxp->gt = gt;
>
> + /*
> + * we'll use the completion to check if there is a termination pending,
> + * so we start it as completed and we reinit it when a termination
> + * is triggered.
> + */
> + init_completion(&pxp->termination);
> + complete_all(&pxp->termination);
> +
> + mutex_init(&pxp->mutex);
> +
> pxp->irq.wq = alloc_ordered_workqueue("pxp-wq", 0);
> if (!pxp->irq.wq) {
> err = -ENOMEM;
> @@ -259,3 +353,218 @@ int xe_pxp_init(struct xe_device *xe)
> drmm_kfree(&xe->drm, pxp);
> return err;
> }
> +
> +static int __pxp_start_arb_session(struct xe_pxp *pxp)
> +{
> + int ret;
> + unsigned int fw_ref;
> +
> + fw_ref = xe_force_wake_get(gt_to_fw(pxp->gt), XE_FW_GT);
> + if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_GT))
> + return -EIO;
> +
> + if (pxp_session_is_in_play(pxp, ARB_SESSION)) {
> + ret = -EEXIST;
> + goto out_force_wake;
> + }
> +
> + ret = xe_pxp_submit_session_init(&pxp->gsc_res, ARB_SESSION);
> + if (ret) {
> + drm_err(&pxp->xe->drm, "Failed to init PXP arb session\n");
Is it not worth printing the value of ret? Same question on the print
below, too.
John.
> + goto out_status;
> + }
> +
> + ret = pxp_wait_for_session_state(pxp, ARB_SESSION, true);
> + if (ret) {
> + drm_err(&pxp->xe->drm, "PXP ARB session failed to go in play\n");
> + goto out_status;
> + }
> +
> + drm_dbg(&pxp->xe->drm, "PXP ARB session is active\n");
> +
> +out_status:
> + if (!ret)
> + pxp->status = XE_PXP_ACTIVE;
> + else
> + pxp->status = XE_PXP_ERROR;
> +
> +out_force_wake:
> + xe_force_wake_put(gt_to_fw(pxp->gt), fw_ref);
> + return ret;
> +}
> +
> +/**
> + * xe_pxp_exec_queue_set_type - Mark a queue as using PXP
> + * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
> + * @q: the queue to mark as using PXP
> + * @type: the type of PXP session this queue will use
> + *
> + * Returns 0 if the selected PXP type is supported, -ENODEV otherwise.
> + */
> +int xe_pxp_exec_queue_set_type(struct xe_pxp *pxp, struct xe_exec_queue *q, u8 type)
> +{
> + if (!xe_pxp_is_enabled(pxp))
> + return -ENODEV;
> +
> + /* we only support HWDRM sessions right now */
> + xe_assert(pxp->xe, type == DRM_XE_PXP_TYPE_HWDRM);
> +
> + q->pxp.type = type;
> +
> + return 0;
> +}
> +
> +/**
> + * xe_pxp_exec_queue_add - add a queue to the PXP list
> + * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
> + * @q: the queue to add to the list
> + *
> + * If PXP is enabled and the prerequisites are done, start the PXP ARB
> + * session (if not already running) and add the queue to the PXP list. Note
> + * that the queue must have previously been marked as using PXP with
> + * xe_pxp_exec_queue_set_type.
> + *
> + * Returns 0 if the PXP ARB session is running and the queue is in the list,
> + * -ENODEV if PXP is disabled, -EBUSY if the PXP prerequisites are not done,
> + * other errno value if something goes wrong during the session start.
> + */
> +#define PXP_TERMINATION_TIMEOUT_MS 500
> +int xe_pxp_exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q)
> +{
> + int ret = 0;
> +
> + if (!xe_pxp_is_enabled(pxp))
> + return -ENODEV;
> +
> + /* we only support HWDRM sessions right now */
> + xe_assert(pxp->xe, q->pxp.type == DRM_XE_PXP_TYPE_HWDRM);
> +
> + /*
> + * Runtime suspend kills PXP, so we need to turn it off while we have
> + * active queues that use PXP
> + */
> + xe_pm_runtime_get(pxp->xe);
> +
> + if (!pxp_prerequisites_done(pxp)) {
> + ret = -EBUSY;
> + goto out;
> + }
> +
> +wait_for_termination:
> + /*
> + * if there is a termination in progress, wait for it.
> + * We need to wait outside the lock because the completion is done from
> + * within the lock
> + */
> + if (!wait_for_completion_timeout(&pxp->termination,
> + msecs_to_jiffies(PXP_TERMINATION_TIMEOUT_MS)))
> + return -ETIMEDOUT;
> +
> + mutex_lock(&pxp->mutex);
> +
> + /*
> + * check if a new termination was issued between the above check and
> + * grabbing the mutex
> + */
> + if (!completion_done(&pxp->termination)) {
> + mutex_unlock(&pxp->mutex);
> + goto wait_for_termination;
> + }
> +
> + /* If PXP is not already active, turn it on */
> + switch (pxp->status) {
> + case XE_PXP_ERROR:
> + ret = -EIO;
> + break;
> + case XE_PXP_ACTIVE:
> + break;
> + case XE_PXP_READY_TO_START:
> + ret = __pxp_start_arb_session(pxp);
> + break;
> + case XE_PXP_NEEDS_TERMINATION:
> + pxp_terminate(pxp);
> + mutex_unlock(&pxp->mutex);
> + goto wait_for_termination;
> + default:
> + drm_err(&pxp->xe->drm, "unexpected state during PXP start: %u", pxp->status);
> + ret = -EIO;
> + break;
> + }
> +
> + /* If everything went ok, add the queue to the list */
> + if (!ret) {
> + spin_lock_irq(&pxp->queues.lock);
> + list_add_tail(&q->pxp.link, &pxp->queues.list);
> + spin_unlock_irq(&pxp->queues.lock);
> + }
> +
> + mutex_unlock(&pxp->mutex);
> +
> +out:
> + /*
> + * in the successful case the PM ref is released from
> + * xe_pxp_exec_queue_remove
> + */
> + if (ret)
> + xe_pm_runtime_put(pxp->xe);
> +
> + return ret;
> +}
> +
> +/**
> + * xe_pxp_exec_queue_remove - remove a queue from the PXP list
> + * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
> + * @q: the queue to remove from the list
> + *
> + * If PXP is enabled and the exec_queue is in the list, the queue will be
> + * removed from the list and its PM reference will be released. It is safe to
> + * call this function multiple times for the same queue.
> + */
> +void xe_pxp_exec_queue_remove(struct xe_pxp *pxp, struct xe_exec_queue *q)
> +{
> + bool need_pm_put = false;
> +
> + if (!xe_pxp_is_enabled(pxp))
> + return;
> +
> + spin_lock_irq(&pxp->queues.lock);
> +
> + if (!list_empty(&q->pxp.link)) {
> + list_del_init(&q->pxp.link);
> + need_pm_put = true;
> + }
> +
> + q->pxp.type = DRM_XE_PXP_TYPE_NONE;
> +
> + spin_unlock_irq(&pxp->queues.lock);
> +
> + if (need_pm_put)
> + xe_pm_runtime_put(pxp->xe);
> +}
> +
> +static void pxp_invalidate_queues(struct xe_pxp *pxp)
> +{
> + struct xe_exec_queue *tmp, *q;
> +
> + spin_lock_irq(&pxp->queues.lock);
> +
> + /*
> + * Removing a queue from the PXP list requires a put of the RPM ref that
> + * the queue holds to keep the PXP session alive, which can't be done
> + * under spinlock. Since it is safe to kill a queue multiple times, we
> + * can leave the invalid queue in the list for now and postpone the
> + * removal and associated RPM put to when the queue is destroyed.
> + */
> + list_for_each_entry(tmp, &pxp->queues.list, pxp.link) {
> + q = xe_exec_queue_get_unless_zero(tmp);
> +
> + if (!q)
> + continue;
> +
> + xe_exec_queue_kill(q);
> + xe_exec_queue_put(q);
> + }
> +
> + spin_unlock_irq(&pxp->queues.lock);
> +}
> +
Blank line at end of file that is causing the 'git am' complaint.
> diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
> index 39435c644dcd..2e0ab186072a 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.h
> +++ b/drivers/gpu/drm/xe/xe_pxp.h
> @@ -9,12 +9,17 @@
> #include <linux/types.h>
>
> struct xe_device;
> -
> -#define DRM_XE_PXP_HWDRM_DEFAULT_SESSION 0xF /* TODO: move to uapi */
> +struct xe_exec_queue;
> +struct xe_pxp;
>
> bool xe_pxp_is_supported(const struct xe_device *xe);
> +bool xe_pxp_is_enabled(const struct xe_pxp *pxp);
>
> int xe_pxp_init(struct xe_device *xe);
> void xe_pxp_irq_handler(struct xe_device *xe, u16 iir);
>
> +int xe_pxp_exec_queue_set_type(struct xe_pxp *pxp, struct xe_exec_queue *q, u8 type);
> +int xe_pxp_exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q);
> +void xe_pxp_exec_queue_remove(struct xe_pxp *pxp, struct xe_exec_queue *q);
> +
> #endif /* __XE_PXP_H__ */
> diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
> index 40c28f32f51a..db9019dcd78c 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_types.h
> +++ b/drivers/gpu/drm/xe/xe_pxp_types.h
> @@ -6,7 +6,10 @@
> #ifndef __XE_PXP_TYPES_H__
> #define __XE_PXP_TYPES_H__
>
> +#include <linux/completion.h>
> #include <linux/iosys-map.h>
> +#include <linux/mutex.h>
> +#include <linux/spinlock.h>
> #include <linux/types.h>
> #include <linux/workqueue.h>
>
> @@ -16,6 +19,14 @@ struct xe_device;
> struct xe_gt;
> struct xe_vm;
>
> +enum xe_pxp_status {
> + XE_PXP_ERROR = -1,
> + XE_PXP_NEEDS_TERMINATION = 0, /* starting status */
> + XE_PXP_TERMINATION_IN_PROGRESS,
> + XE_PXP_READY_TO_START,
> + XE_PXP_ACTIVE,
> +};
> +
> /**
> * struct xe_pxp_gsc_client_resources - resources for GSC submission by a PXP
> * client. The GSC FW supports multiple GSC client active at the same time.
> @@ -82,6 +93,21 @@ struct xe_pxp {
> #define PXP_TERMINATION_REQUEST BIT(0)
> #define PXP_TERMINATION_COMPLETE BIT(1)
> } irq;
> +
> + /** @mutex: protects the pxp status and the queue list */
> + struct mutex mutex;
> + /** @status: the current pxp status */
> + enum xe_pxp_status status;
> + /** @termination: completion struct that tracks terminations */
> + struct completion termination;
> +
> + /** @queues: management of exec_queues that use PXP */
> + struct {
> + /** @queues.lock: spinlock protecting the queue management */
> + spinlock_t lock;
> + /** @queues.list: list of exec_queues that use PXP */
> + struct list_head list;
> + } queues;
> };
>
> #endif /* __XE_PXP_TYPES_H__ */
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 4a8a4a63e99c..ae6313b8438a 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1087,6 +1087,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 in microseconds.
> + * - %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 +1128,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 +1731,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] 38+ messages in thread
* Re: [PATCH v3 08/12] drm/xe/pxp: add a query for PXP status
2024-11-20 23:43 ` [PATCH v3 08/12] drm/xe/pxp: add a query for PXP status Daniele Ceraolo Spurio
@ 2024-12-09 19:00 ` John Harrison
0 siblings, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-09 19:00 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe; +Cc: José Roberto de Souza
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> PXP prerequisites (SW proxy and HuC auth via GSC) are completed
> asynchronously from driver load, which means that userspace can start
> submitting before we're ready to start a PXP session. Therefore, we need
> a query that userspace can use to check not only if PXP is supported but
> also to wait until the prerequisites are done.
>
> v2: Improve doc, do not report TYPE_NONE as supported (José)
> v3: Better comments, remove unneeded copy_from_user (John)
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: José Roberto de Souza <jose.souza@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
> ---
> drivers/gpu/drm/xe/xe_pxp.c | 32 ++++++++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_pxp.h | 1 +
> drivers/gpu/drm/xe/xe_query.c | 29 +++++++++++++++++++++++++++++
> include/uapi/drm/xe_drm.h | 35 +++++++++++++++++++++++++++++++++++
> 4 files changed, 97 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
> index ce1d7ab448dc..fe56e3eec5a7 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.c
> +++ b/drivers/gpu/drm/xe/xe_pxp.c
> @@ -71,6 +71,38 @@ static bool pxp_prerequisites_done(const struct xe_pxp *pxp)
> return ready;
> }
>
> +/**
> + * xe_pxp_get_readiness_status - check whether PXP is ready for userspace use
> + * @pxp: the xe_pxp pointer (can be NULL if PXP is disabled)
> + *
> + * Returns: 0 if PXP is not ready yet, 1 if it is ready, a negative errno value
> + * if PXP is not supported/enabled or if something went wrong in the
> + * initialization of the prerequisites. Note that the return values of this
> + * function follow the uapi (see drm_xe_query_pxp_status), so they can be used
> + * directly in the query ioctl.
> + */
> +int xe_pxp_get_readiness_status(struct xe_pxp *pxp)
> +{
> + int ret = 0;
> +
> + if (!xe_pxp_is_enabled(pxp))
> + return -ENODEV;
> +
> + /* if the GSC or HuC FW are in an error state, PXP will never work */
> + if (xe_uc_fw_status_to_error(pxp->gt->uc.huc.fw.status) ||
> + xe_uc_fw_status_to_error(pxp->gt->uc.gsc.fw.status))
> + return -EIO;
> +
> + xe_pm_runtime_get(pxp->xe);
> +
> + /* PXP requires both HuC loaded and GSC proxy initialized */
> + if (pxp_prerequisites_done(pxp))
> + ret = 1;
> +
> + xe_pm_runtime_put(pxp->xe);
> + return ret;
> +}
> +
> static bool pxp_session_is_in_play(struct xe_pxp *pxp, u32 id)
> {
> struct xe_gt *gt = pxp->gt;
> diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
> index 2e0ab186072a..868813cc84b9 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.h
> +++ b/drivers/gpu/drm/xe/xe_pxp.h
> @@ -14,6 +14,7 @@ struct xe_pxp;
>
> bool xe_pxp_is_supported(const struct xe_device *xe);
> bool xe_pxp_is_enabled(const struct xe_pxp *pxp);
> +int xe_pxp_get_readiness_status(struct xe_pxp *pxp);
>
> int xe_pxp_init(struct xe_device *xe);
> void xe_pxp_irq_handler(struct xe_device *xe, u16 iir);
> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> index 3eda616f1502..28d3b98c0fd9 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -24,6 +24,7 @@
> #include "xe_macros.h"
> #include "xe_mmio.h"
> #include "xe_oa.h"
> +#include "xe_pxp.h"
> #include "xe_ttm_vram_mgr.h"
> #include "xe_wa.h"
>
> @@ -696,6 +697,33 @@ static int query_oa_units(struct xe_device *xe,
> return ret ? -EFAULT : 0;
> }
>
> +static int query_pxp_status(struct xe_device *xe, struct drm_xe_device_query *query)
> +{
> + struct drm_xe_query_pxp_status __user *query_ptr = u64_to_user_ptr(query->data);
> + size_t size = sizeof(struct drm_xe_query_pxp_status);
> + struct drm_xe_query_pxp_status resp = { 0 };
> + int ret;
> +
> + if (query->size == 0) {
> + query->size = size;
> + return 0;
> + } else if (XE_IOCTL_DBG(xe, query->size != size)) {
> + return -EINVAL;
> + }
> +
> + ret = xe_pxp_get_readiness_status(xe->pxp);
> + if (ret < 0)
> + return ret;
> +
> + resp.status = ret;
> + resp.supported_session_types = BIT(DRM_XE_PXP_TYPE_HWDRM);
> +
> + if (copy_to_user(query_ptr, &resp, size))
> + return -EFAULT;
> +
> + return 0;
> +}
> +
> static int (* const xe_query_funcs[])(struct xe_device *xe,
> struct drm_xe_device_query *query) = {
> query_engines,
> @@ -707,6 +735,7 @@ static int (* const xe_query_funcs[])(struct xe_device *xe,
> query_engine_cycles,
> query_uc_fw_version,
> query_oa_units,
> + query_pxp_status,
> };
>
> int xe_query_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index ae6313b8438a..8249870a171a 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/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 has 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;
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 10/12] drm/xe/pxp: add PXP PM support
2024-11-20 23:43 ` [PATCH v3 10/12] drm/xe/pxp: add PXP PM support Daniele Ceraolo Spurio
@ 2024-12-09 19:42 ` John Harrison
0 siblings, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-09 19:42 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> The HW suspend flow kills all PXP HWDRM sessions, so if there was any
> PXP activity before the suspend we need to trigger a full termination on
> suspend.
>
> v2: rebase
+changes about runtime suspend
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
> ---
> drivers/gpu/drm/xe/xe_pm.c | 40 +++++++---
> drivers/gpu/drm/xe/xe_pxp.c | 120 ++++++++++++++++++++++++++++--
> drivers/gpu/drm/xe/xe_pxp.h | 3 +
> drivers/gpu/drm/xe/xe_pxp_types.h | 7 ++
> 4 files changed, 156 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c
> index 80699dbeb2e9..2fe011a6c6e9 100644
> --- a/drivers/gpu/drm/xe/xe_pm.c
> +++ b/drivers/gpu/drm/xe/xe_pm.c
> @@ -21,6 +21,7 @@
> #include "xe_guc.h"
> #include "xe_irq.h"
> #include "xe_pcode.h"
> +#include "xe_pxp.h"
> #include "xe_trace.h"
> #include "xe_wa.h"
>
> @@ -121,6 +122,10 @@ int xe_pm_suspend(struct xe_device *xe)
> drm_dbg(&xe->drm, "Suspending device\n");
> trace_xe_pm_suspend(xe, __builtin_return_address(0));
>
> + err = xe_pxp_pm_suspend(xe->pxp, false);
> + if (err)
> + goto err;
> +
> for_each_gt(gt, xe, id)
> xe_gt_suspend_prepare(gt);
>
> @@ -129,14 +134,12 @@ int xe_pm_suspend(struct xe_device *xe)
> /* FIXME: Super racey... */
> err = xe_bo_evict_all(xe);
> if (err)
> - goto err;
> + goto err_pxp;
>
> for_each_gt(gt, xe, id) {
> err = xe_gt_suspend(gt);
> - if (err) {
> - xe_display_pm_resume(xe);
> - goto err;
> - }
> + if (err)
> + goto err_display;
> }
>
> xe_irq_suspend(xe);
> @@ -145,6 +148,11 @@ int xe_pm_suspend(struct xe_device *xe)
>
> drm_dbg(&xe->drm, "Device suspended\n");
> return 0;
> +
> +err_display:
> + xe_display_pm_resume(xe);
> +err_pxp:
> + xe_pxp_pm_resume(xe->pxp);
> err:
> drm_dbg(&xe->drm, "Device suspend failed %d\n", err);
> return err;
> @@ -194,6 +202,8 @@ int xe_pm_resume(struct xe_device *xe)
> if (err)
> goto err;
>
> + xe_pxp_pm_resume(xe->pxp);
> +
> drm_dbg(&xe->drm, "Device resumed\n");
> return 0;
> err:
> @@ -388,6 +398,10 @@ int xe_pm_runtime_suspend(struct xe_device *xe)
> */
> xe_rpm_lockmap_acquire(xe);
>
> + err = xe_pxp_pm_suspend(xe->pxp, true);
> + if (err)
> + goto out;
> +
> /*
> * Applying lock for entire list op as xe_ttm_bo_destroy and xe_bo_move_notify
> * also checks and delets bo entry from user fault list.
> @@ -403,22 +417,28 @@ int xe_pm_runtime_suspend(struct xe_device *xe)
> if (xe->d3cold.allowed) {
> err = xe_bo_evict_all(xe);
> if (err)
> - goto out;
> + goto out_resume;
> }
>
> for_each_gt(gt, xe, id) {
> err = xe_gt_suspend(gt);
> if (err)
> - goto out;
> + goto out_resume;
> }
>
> xe_irq_suspend(xe);
>
> if (xe->d3cold.allowed)
> xe_display_pm_suspend_late(xe);
> +
> + xe_rpm_lockmap_release(xe);
> + xe_pm_write_callback_task(xe, NULL);
> + return 0;
> +
> +out_resume:
> + xe_display_pm_runtime_resume(xe);
> + xe_pxp_pm_resume(xe->pxp);
> out:
> - if (err)
> - xe_display_pm_runtime_resume(xe);
> xe_rpm_lockmap_release(xe);
> xe_pm_write_callback_task(xe, NULL);
> return err;
> @@ -471,6 +491,8 @@ int xe_pm_runtime_resume(struct xe_device *xe)
> goto out;
> }
>
> + xe_pxp_pm_resume(xe->pxp);
> +
> out:
> xe_rpm_lockmap_release(xe);
> xe_pm_write_callback_task(xe, NULL);
> diff --git a/drivers/gpu/drm/xe/xe_pxp.c b/drivers/gpu/drm/xe/xe_pxp.c
> index f39625ae0259..06f025bce5f8 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.c
> +++ b/drivers/gpu/drm/xe/xe_pxp.c
> @@ -123,6 +123,14 @@ static int pxp_wait_for_session_state(struct xe_pxp *pxp, u32 id, bool in_play)
>
> static void pxp_invalidate_queues(struct xe_pxp *pxp);
>
> +static void pxp_invalidate_state(struct xe_pxp *pxp)
> +{
> + pxp_invalidate_queues(pxp);
> +
> + if (pxp->status == XE_PXP_ACTIVE)
> + pxp->key_instance++;
> +}
> +
> static void pxp_terminate(struct xe_pxp *pxp)
> {
> int ret = 0;
> @@ -132,10 +140,14 @@ static void pxp_terminate(struct xe_pxp *pxp)
>
> lockdep_assert_held(&pxp->mutex);
>
> - pxp_invalidate_queues(pxp);
> + pxp_invalidate_state(pxp);
>
> - if (pxp->status == XE_PXP_ACTIVE)
> - pxp->key_instance++;
> + /*
> + * we'll mark the status as needing termination on resume, so no need to
> + * emit a termination now.
> + */
> + if (pxp->status == XE_PXP_SUSPENDED)
> + return;
>
> /*
> * If we have a termination already in progress, we need to wait for
> @@ -187,17 +199,19 @@ static void pxp_terminate(struct xe_pxp *pxp)
> static void pxp_terminate_complete(struct xe_pxp *pxp)
> {
> /*
> - * We expect PXP to be in one of 2 states when we get here:
> + * We expect PXP to be in one of 3 states when we get here:
> * - XE_PXP_TERMINATION_IN_PROGRESS: a single termination event was
> * requested and it is now completing, so we're ready to start.
> * - XE_PXP_NEEDS_TERMINATION: a second termination was requested while
> * the first one was still being processed; we don't update the state
> * in this case so the pxp_start code will automatically issue that
> * second termination.
> + * - XE_PXP_SUSPENDED: PXP is now suspended, so we defer everything to
> + * when we come back on resume.
> */
> if (pxp->status == XE_PXP_TERMINATION_IN_PROGRESS)
> pxp->status = XE_PXP_READY_TO_START;
> - else if (pxp->status != XE_PXP_NEEDS_TERMINATION)
> + else if (pxp->status != XE_PXP_NEEDS_TERMINATION && pxp->status != XE_PXP_SUSPENDED)
> drm_err(&pxp->xe->drm,
> "PXP termination complete while status was %u\n",
> pxp->status);
> @@ -355,6 +369,7 @@ int xe_pxp_init(struct xe_device *xe)
> pxp->gt = gt;
>
> pxp->key_instance = 1;
> + pxp->last_suspend_key_instance = 1;
>
> /*
> * we'll use the completion to check if there is a termination pending,
> @@ -524,6 +539,7 @@ int xe_pxp_exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q)
> pxp_terminate(pxp);
> mutex_unlock(&pxp->mutex);
> goto wait_for_termination;
> + case XE_PXP_SUSPENDED:
> default:
> drm_err(&pxp->xe->drm, "unexpected state during PXP start: %u", pxp->status);
> ret = -EIO;
> @@ -674,3 +690,97 @@ int xe_pxp_key_check(struct xe_pxp *pxp, struct xe_bo *bo)
> return 0;
> }
>
> +/**
> + * xe_pxp_pm_suspend - prepare PXP for HW suspend
> + * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
> + * @runtime: indicates whether this is a runtime suspend or not
> + *
> + * Checks whether a BO was encrypted with the current key or an obsolete one.
> + *
> + * Returns: 0 if successful, a negative errno value otherwise.
> + */
> +int xe_pxp_pm_suspend(struct xe_pxp *pxp, bool runtime)
> +{
> + int ret = 0;
> +
> + if (!xe_pxp_is_enabled(pxp))
> + return 0;
> +
> + mutex_lock(&pxp->mutex);
> +
> + /* if a termination is already in progress, no need to do additional cleanup */
> + if (!completion_done(&pxp->termination))
> + goto mark_suspended;
> +
> + switch (pxp->status) {
> + case XE_PXP_ERROR:
> + case XE_PXP_READY_TO_START:
> + case XE_PXP_SUSPENDED:
> + /* nothing to cleanup */
> + break;
> + case XE_PXP_NEEDS_TERMINATION:
> + /* If PXP was never used we can skip the cleanup */
> + if (pxp->key_instance == pxp->last_suspend_key_instance)
> + break;
> + fallthrough;
> + case XE_PXP_ACTIVE:
> + if (runtime)
> + pxp_invalidate_state(pxp);
> + else
> + pxp_terminate(pxp);
> + break;
> + default:
> + drm_err(&pxp->xe->drm, "unexpected state during PXP suspend: %u",
> + pxp->status);
> + ret = -EIO;
> + goto out;
> + }
> +
> +mark_suspended:
> + /*
> + * We set this even if we were in error state, hoping the suspend clears
> + * the error. Worse case we fail again and go in error state again.
> + */
> + pxp->status = XE_PXP_SUSPENDED;
> +
> + mutex_unlock(&pxp->mutex);
> +
> + /*
> + * if there is a termination in progress, wait for it.
> + * We need to wait outside the lock because the completion is done from
> + * within the lock
> + */
> + if (!wait_for_completion_timeout(&pxp->termination,
> + msecs_to_jiffies(PXP_TERMINATION_TIMEOUT_MS)))
> + ret = -ETIMEDOUT;
> +
> + pxp->last_suspend_key_instance = pxp->key_instance;
> +
> +out:
> + return ret;
> +}
> +
> +/**
> + * xe_pxp_pm_resume - re-init PXP after HW suspend
> + * @pxp: the xe->pxp pointer (it will be NULL if PXP is disabled)
> + */
> +void xe_pxp_pm_resume(struct xe_pxp *pxp)
> +{
> + int err;
> +
> + if (!xe_pxp_is_enabled(pxp))
> + return;
> +
> + err = kcr_pxp_enable(pxp);
> +
> + mutex_lock(&pxp->mutex);
> +
> + xe_assert(pxp->xe, pxp->status == XE_PXP_SUSPENDED);
> +
> + if (err)
> + pxp->status = XE_PXP_ERROR;
> + else
> + pxp->status = XE_PXP_NEEDS_TERMINATION;
> +
> + mutex_unlock(&pxp->mutex);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_pxp.h b/drivers/gpu/drm/xe/xe_pxp.h
> index 2d22a6e6ab27..0477bb46d49f 100644
> --- a/drivers/gpu/drm/xe/xe_pxp.h
> +++ b/drivers/gpu/drm/xe/xe_pxp.h
> @@ -20,6 +20,9 @@ int xe_pxp_get_readiness_status(struct xe_pxp *pxp);
> int xe_pxp_init(struct xe_device *xe);
> void xe_pxp_irq_handler(struct xe_device *xe, u16 iir);
>
> +int xe_pxp_pm_suspend(struct xe_pxp *pxp, bool runtime);
> +void xe_pxp_pm_resume(struct xe_pxp *pxp);
> +
> int xe_pxp_exec_queue_set_type(struct xe_pxp *pxp, struct xe_exec_queue *q, u8 type);
> int xe_pxp_exec_queue_add(struct xe_pxp *pxp, struct xe_exec_queue *q);
> void xe_pxp_exec_queue_remove(struct xe_pxp *pxp, struct xe_exec_queue *q);
> diff --git a/drivers/gpu/drm/xe/xe_pxp_types.h b/drivers/gpu/drm/xe/xe_pxp_types.h
> index 9c2d2b9a850d..fa40b039e26f 100644
> --- a/drivers/gpu/drm/xe/xe_pxp_types.h
> +++ b/drivers/gpu/drm/xe/xe_pxp_types.h
> @@ -25,6 +25,7 @@ enum xe_pxp_status {
> XE_PXP_TERMINATION_IN_PROGRESS,
> XE_PXP_READY_TO_START,
> XE_PXP_ACTIVE,
> + XE_PXP_SUSPENDED,
> };
>
> /**
> @@ -119,6 +120,12 @@ struct xe_pxp {
> * that case in the code.
> */
> u32 key_instance;
> + /**
> + * @last_suspend_key_instance: value of key_instance at the last
> + * suspend. Used to check if any PXP session has been created between
> + * suspend cycles.
> + */
> + u32 last_suspend_key_instance;
> };
>
> #endif /* __XE_PXP_TYPES_H__ */
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v3 11/12] drm/xe/pxp: Add PXP debugfs support
2024-11-20 23:43 ` [PATCH v3 11/12] drm/xe/pxp: Add PXP debugfs support Daniele Ceraolo Spurio
@ 2024-12-09 19:44 ` John Harrison
0 siblings, 0 replies; 38+ messages in thread
From: John Harrison @ 2024-12-09 19:44 UTC (permalink / raw)
To: Daniele Ceraolo Spurio, intel-xe
On 11/20/2024 15:43, Daniele Ceraolo Spurio wrote:
> This patch introduces 2 PXP debugfs entries:
>
> - info: prints the current PXP status and key instance
> - terminate: simulate a termination interrupt
>
> The first one is useful for debug, while the second one can be used for
> testing the termination flow.
>
> v2: move the info prints inside the lock (John)
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
> ---
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/xe_debugfs.c | 3 +
> drivers/gpu/drm/xe/xe_pxp_debugfs.c | 120 ++++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_pxp_debugfs.h | 13 +++
> 4 files changed, 137 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/xe_pxp_debugfs.c
> create mode 100644 drivers/gpu/drm/xe/xe_pxp_debugfs.h
>
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index 126c8f1ab673..28b5c9e6379c 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -87,6 +87,7 @@ xe-y += xe_bb.o \
> xe_pt.o \
> xe_pt_walk.o \
> xe_pxp.o \
> + xe_pxp_debugfs.o \
> xe_pxp_submit.o \
> xe_query.o \
> xe_range_fence.o \
> diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
> index 492b4877433f..56cb3788e752 100644
> --- a/drivers/gpu/drm/xe/xe_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_debugfs.c
> @@ -18,6 +18,7 @@
> #include "xe_gt_printk.h"
> #include "xe_guc_ads.h"
> #include "xe_pm.h"
> +#include "xe_pxp_debugfs.h"
> #include "xe_sriov.h"
> #include "xe_step.h"
>
> @@ -230,5 +231,7 @@ void xe_debugfs_register(struct xe_device *xe)
> for_each_gt(gt, xe, id)
> xe_gt_debugfs_register(gt);
>
> + xe_pxp_debugfs_register(xe->pxp);
> +
> fault_create_debugfs_attr("fail_gt_reset", root, >_reset_failure);
> }
> diff --git a/drivers/gpu/drm/xe/xe_pxp_debugfs.c b/drivers/gpu/drm/xe/xe_pxp_debugfs.c
> new file mode 100644
> index 000000000000..ccfbacf08efc
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_pxp_debugfs.c
> @@ -0,0 +1,120 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#include "xe_pxp_debugfs.h"
> +
> +#include <linux/debugfs.h>
> +
> +#include <drm/drm_debugfs.h>
> +#include <drm/drm_managed.h>
> +#include <drm/drm_print.h>
> +
> +#include "xe_device.h"
> +#include "xe_pxp.h"
> +#include "xe_pxp_types.h"
> +#include "regs/xe_irq_regs.h"
> +
> +static struct xe_pxp *node_to_pxp(struct drm_info_node *node)
> +{
> + return node->info_ent->data;
> +}
> +
> +static const char *pxp_status_to_str(struct xe_pxp *pxp)
> +{
> + lockdep_assert_held(&pxp->mutex);
> +
> + switch (pxp->status) {
> + case XE_PXP_ERROR:
> + return "error";
> + case XE_PXP_NEEDS_TERMINATION:
> + return "needs termination";
> + case XE_PXP_TERMINATION_IN_PROGRESS:
> + return "termination in progress";
> + case XE_PXP_READY_TO_START:
> + return "ready to start";
> + case XE_PXP_ACTIVE:
> + return "active";
> + case XE_PXP_SUSPENDED:
> + return "suspended";
> + default:
> + return "unknown";
> + }
> +};
> +
> +static int pxp_info(struct seq_file *m, void *data)
> +{
> + struct xe_pxp *pxp = node_to_pxp(m->private);
> + struct drm_printer p = drm_seq_file_printer(m);
> + const char *status;
> +
> + if (!xe_pxp_is_enabled(pxp))
> + return -ENODEV;
> +
> + mutex_lock(&pxp->mutex);
> + status = pxp_status_to_str(pxp);
> +
> + drm_printf(&p, "status: %s\n", status);
> + drm_printf(&p, "instance counter: %u\n", pxp->key_instance);
> + mutex_unlock(&pxp->mutex);
> +
> + return 0;
> +}
> +
> +static int pxp_terminate(struct seq_file *m, void *data)
> +{
> + struct xe_pxp *pxp = node_to_pxp(m->private);
> + struct drm_printer p = drm_seq_file_printer(m);
> +
> + if (!xe_pxp_is_enabled(pxp))
> + return -ENODEV;
> +
> + /* simulate a termination interrupt */
> + spin_lock_irq(&pxp->xe->irq.lock);
> + xe_pxp_irq_handler(pxp->xe, KCR_PXP_STATE_TERMINATED_INTERRUPT);
> + spin_unlock_irq(&pxp->xe->irq.lock);
> +
> + drm_printf(&p, "PXP termination queued\n");
> +
> + return 0;
> +}
> +
> +static const struct drm_info_list debugfs_list[] = {
> + {"info", pxp_info, 0},
> + {"terminate", pxp_terminate, 0},
> +};
> +
> +void xe_pxp_debugfs_register(struct xe_pxp *pxp)
> +{
> + struct drm_minor *minor;
> + struct drm_info_list *local;
> + struct dentry *root;
> + int i;
> +
> + if (!xe_pxp_is_enabled(pxp))
> + return;
> +
> + minor = pxp->xe->drm.primary;
> + if (!minor->debugfs_root)
> + return;
> +
> +#define DEBUGFS_SIZE (ARRAY_SIZE(debugfs_list) * sizeof(struct drm_info_list))
> + local = drmm_kmalloc(&pxp->xe->drm, DEBUGFS_SIZE, GFP_KERNEL);
> + if (!local)
> + return;
> +
> + memcpy(local, debugfs_list, DEBUGFS_SIZE);
> +#undef DEBUGFS_SIZE
> +
> + for (i = 0; i < ARRAY_SIZE(debugfs_list); ++i)
> + local[i].data = pxp;
> +
> + root = debugfs_create_dir("pxp", minor->debugfs_root);
> + if (IS_ERR(root))
> + return;
> +
> + drm_debugfs_create_files(local,
> + ARRAY_SIZE(debugfs_list),
> + root, minor);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_pxp_debugfs.h b/drivers/gpu/drm/xe/xe_pxp_debugfs.h
> new file mode 100644
> index 000000000000..988466aad50b
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_pxp_debugfs.h
> @@ -0,0 +1,13 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef __XE_PXP_DEBUGFS_H__
> +#define __XE_PXP_DEBUGFS_H__
> +
> +struct xe_pxp;
> +
> +void xe_pxp_debugfs_register(struct xe_pxp *pxp);
> +
> +#endif /* __XE_PXP_DEBUGFS_H__ */
^ permalink raw reply [flat|nested] 38+ messages in thread
end of thread, other threads:[~2024-12-09 19:44 UTC | newest]
Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-20 23:43 [PATCH v3 00/12] Add PXP HWDRM support Daniele Ceraolo Spurio
2024-11-20 23:43 ` [PATCH v3 01/12] drm/xe/pxp: Initialize PXP structure and KCR reg Daniele Ceraolo Spurio
2024-12-06 1:59 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 02/12] drm/xe/pxp: Allocate PXP execution resources Daniele Ceraolo Spurio
2024-12-06 2:10 ` John Harrison
2024-12-06 23:49 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 03/12] drm/xe/pxp: Add VCS inline termination support Daniele Ceraolo Spurio
2024-12-06 20:27 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 04/12] drm/xe/pxp: Add GSC session invalidation support Daniele Ceraolo Spurio
2024-12-06 20:38 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 05/12] drm/xe/pxp: Handle the PXP termination interrupt Daniele Ceraolo Spurio
2024-12-06 23:23 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 06/12] drm/xe/pxp: Add GSC session initialization support Daniele Ceraolo Spurio
2024-12-06 23:27 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 07/12] drm/xe/pxp: Add support for PXP-using queues Daniele Ceraolo Spurio
2024-12-09 18:53 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 08/12] drm/xe/pxp: add a query for PXP status Daniele Ceraolo Spurio
2024-12-09 19:00 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 09/12] drm/xe/pxp: Add API to mark a BO as using PXP Daniele Ceraolo Spurio
2024-11-21 9:57 ` Jani Nikula
2024-11-21 17:21 ` Daniele Ceraolo Spurio
2024-11-21 20:03 ` Jani Nikula
2024-11-21 21:37 ` Daniele Ceraolo Spurio
2024-11-22 15:06 ` Jani Nikula
2024-11-22 17:00 ` Daniele Ceraolo Spurio
2024-11-25 15:30 ` Jani Nikula
2024-11-20 23:43 ` [PATCH v3 10/12] drm/xe/pxp: add PXP PM support Daniele Ceraolo Spurio
2024-12-09 19:42 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 11/12] drm/xe/pxp: Add PXP debugfs support Daniele Ceraolo Spurio
2024-12-09 19:44 ` John Harrison
2024-11-20 23:43 ` [PATCH v3 12/12] drm/xe/pxp: Enable PXP for MTL and LNL Daniele Ceraolo Spurio
2024-11-21 0:15 ` ✓ CI.Patch_applied: success for Add PXP HWDRM support (rev3) Patchwork
2024-11-21 0:16 ` ✗ CI.checkpatch: warning " Patchwork
2024-11-21 0:17 ` ✓ CI.KUnit: success " Patchwork
2024-11-21 0:35 ` ✓ CI.Build: " Patchwork
2024-11-21 0:37 ` ✗ CI.Hooks: failure " Patchwork
2024-11-21 0:39 ` ✓ CI.checksparse: success " Patchwork
2024-11-21 10:42 ` ✗ Xe.CI.Full: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).