All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/16] Add OA functionality to Xe
@ 2024-02-08  5:49 Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 01/16] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
                   ` (23 more replies)
  0 siblings, 24 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Please see cover letter for v7 here:
https://patchwork.freedesktop.org/series/121084/#rev7

For changes in v8 and v9, see:
https://patchwork.freedesktop.org/series/128993/

This series is also available at:
        https://gitlab.freedesktop.org/adixit/kernel/-/tree/xe-oa

The series has been tested against this IGT series:
        https://gitlab.freedesktop.org/adixit/igt-gpu-tools/-/tree/xe-oa

v2: Fix build
v3: Rebase, due to s/xe_engine/xe_exec_queue/
v4: Re-run for testing
v5: Address review comments, new patches 11 through 17
v6: New patches 18 through 21
v7: Patches are completely redone and don't start with i915 version of the uapi
v8: See https://patchwork.freedesktop.org/patch/575214/?series=128993&rev=1
v9: See https://patchwork.freedesktop.org/patch/577441/?series=128993&rev=2

Ashutosh Dixit (16):
  drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream
    types
  drm/xe/perf/uapi: Add perf_stream_paranoid sysctl
  drm/xe/oa/uapi: Add OA data formats
  drm/xe/oa/uapi: Initialize OA units
  drm/xe/oa/uapi: Add/remove OA config perf ops
  drm/xe/oa/uapi: Define and parse OA stream properties
  drm/xe/oa: OA stream initialization (OAG)
  drm/xe/oa/uapi: Expose OA stream fd
  drm/xe/oa/uapi: Read file_operation
  drm/xe/oa: Disable overrun mode for Xe2+ OAG
  drm/xe/oa: Add OAR support
  drm/xe/oa: Add OAC support
  drm/xe/oa/uapi: Query OA unit properties
  drm/xe/oa/uapi: OA buffer mmap
  drm/xe/oa: Add MMIO trigger support
  drm/xe/oa: Override GuC RC with OA on PVC

 drivers/gpu/drm/xe/Makefile                   |    2 +
 .../gpu/drm/xe/instructions/xe_mi_commands.h  |    3 +
 drivers/gpu/drm/xe/regs/xe_engine_regs.h      |    4 +-
 drivers/gpu/drm/xe/regs/xe_gt_regs.h          |    3 +
 drivers/gpu/drm/xe/regs/xe_oa_regs.h          |  100 +
 drivers/gpu/drm/xe/xe_device.c                |   18 +-
 drivers/gpu/drm/xe/xe_device_types.h          |    4 +
 drivers/gpu/drm/xe/xe_gt_types.h              |    4 +
 drivers/gpu/drm/xe/xe_guc_pc.c                |   60 +
 drivers/gpu/drm/xe/xe_guc_pc.h                |    3 +
 drivers/gpu/drm/xe/xe_hw_engine_types.h       |    2 +
 drivers/gpu/drm/xe/xe_lrc.c                   |   11 +-
 drivers/gpu/drm/xe/xe_lrc.h                   |    1 +
 drivers/gpu/drm/xe/xe_module.c                |    6 +
 drivers/gpu/drm/xe/xe_oa.c                    | 2319 +++++++++++++++++
 drivers/gpu/drm/xe/xe_oa.h                    |   30 +
 drivers/gpu/drm/xe/xe_oa_types.h              |  230 ++
 drivers/gpu/drm/xe/xe_perf.c                  |   67 +
 drivers/gpu/drm/xe/xe_perf.h                  |   20 +
 drivers/gpu/drm/xe/xe_query.c                 |   79 +
 drivers/gpu/drm/xe/xe_reg_whitelist.c         |   24 +-
 include/uapi/drm/xe_drm.h                     |  263 ++
 22 files changed, 3245 insertions(+), 8 deletions(-)
 create mode 100644 drivers/gpu/drm/xe/regs/xe_oa_regs.h
 create mode 100644 drivers/gpu/drm/xe/xe_oa.c
 create mode 100644 drivers/gpu/drm/xe/xe_oa.h
 create mode 100644 drivers/gpu/drm/xe/xe_oa_types.h
 create mode 100644 drivers/gpu/drm/xe/xe_perf.c
 create mode 100644 drivers/gpu/drm/xe/xe_perf.h

-- 
2.41.0


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

* [PATCH 01/16] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 02/16] drm/xe/perf/uapi: Add perf_stream_paranoid sysctl Ashutosh Dixit
                   ` (22 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

In Xe, the plan is to support multiple types of perf counter streams (OA is
only one type of these streams). Rather than introduce NxM ioctls for
these (N perf streams with M ioctl's per perf stream), we decide to
multiplex these (N different stream types and the M ops for each of these
stream types) through a single PERF ioctl. This multiplexing is the purpose
of the PERF layer.

In addition to PERF DRM ioctl's, another set of ioctl's on the PERF fd are
defined. These are expected to be common to different PERF stream types and
therefore defined at the PERF layer itself.

v2: Add param_size to 'struct drm_xe_perf_param' (Umesh)
v3: Rename 'enum drm_xe_perf_ops' to
    'enum drm_xe_perf_ioctls' (Guy Zadicario)
    Add DRM_ prefix to ioctl names to indicate uapi names
v4: Add 'enum drm_xe_perf_op' previously missed out (Guy Zadicario)
v5: Squash the ops and PERF layer patches into a single patch (Umesh)
    Remove param_size from struct 'drm_xe_perf_param' (Umesh)
v6: Add DRM_XE_PERF_IOCTL_STATUS
v7: Add DRM_XE_PERF_IOCTL_INFO

Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Acked-by: Guy Zadicario <gzadicario@habana.ai>
---
 drivers/gpu/drm/xe/Makefile    |  1 +
 drivers/gpu/drm/xe/xe_device.c |  2 ++
 drivers/gpu/drm/xe/xe_perf.c   | 21 +++++++++++
 drivers/gpu/drm/xe/xe_perf.h   | 16 +++++++++
 include/uapi/drm/xe_drm.h      | 65 ++++++++++++++++++++++++++++++++++
 5 files changed, 105 insertions(+)
 create mode 100644 drivers/gpu/drm/xe/xe_perf.c
 create mode 100644 drivers/gpu/drm/xe/xe_perf.h

diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index c531210695db0..4d2a45635b9c5 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -114,6 +114,7 @@ xe-y += xe_bb.o \
 	xe_pat.o \
 	xe_pci.o \
 	xe_pcode.o \
+	xe_perf.o \
 	xe_pm.o \
 	xe_preempt_fence.o \
 	xe_pt.o \
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 5b84d73055202..fa3fb48e0eb98 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -36,6 +36,7 @@
 #include "xe_module.h"
 #include "xe_pat.h"
 #include "xe_pcode.h"
+#include "xe_perf.h"
 #include "xe_pm.h"
 #include "xe_query.h"
 #include "xe_sriov.h"
@@ -139,6 +140,7 @@ static const struct drm_ioctl_desc xe_ioctls[] = {
 			  DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF_DRV(XE_WAIT_USER_FENCE, xe_wait_user_fence_ioctl,
 			  DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF_DRV(XE_PERF, xe_perf_ioctl, DRM_RENDER_ALLOW),
 };
 
 static const struct file_operations xe_driver_fops = {
diff --git a/drivers/gpu/drm/xe/xe_perf.c b/drivers/gpu/drm/xe/xe_perf.c
new file mode 100644
index 0000000000000..a130076b59aa2
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_perf.c
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include <linux/errno.h>
+
+#include "xe_perf.h"
+
+int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
+{
+	struct drm_xe_perf_param *arg = data;
+
+	if (arg->extensions)
+		return -EINVAL;
+
+	switch (arg->perf_type) {
+	default:
+		return -EINVAL;
+	}
+}
diff --git a/drivers/gpu/drm/xe/xe_perf.h b/drivers/gpu/drm/xe/xe_perf.h
new file mode 100644
index 0000000000000..254cc7cf49fef
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_perf.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_PERF_H_
+#define _XE_PERF_H_
+
+#include <drm/xe_drm.h>
+
+struct drm_device;
+struct drm_file;
+
+int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file);
+
+#endif
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index 50bbea0992d9c..63d6831b2ecbd 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -100,6 +100,8 @@ extern "C" {
 #define DRM_XE_EXEC_QUEUE_GET_PROPERTY	0x08
 #define DRM_XE_EXEC			0x09
 #define DRM_XE_WAIT_USER_FENCE		0x0a
+#define DRM_XE_PERF			0x0e
+
 /* Must be kept compact -- no holes */
 
 #define DRM_IOCTL_XE_DEVICE_QUERY		DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_DEVICE_QUERY, struct drm_xe_device_query)
@@ -113,6 +115,7 @@ extern "C" {
 #define DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY	DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_GET_PROPERTY, struct drm_xe_exec_queue_get_property)
 #define DRM_IOCTL_XE_EXEC			DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC, struct drm_xe_exec)
 #define DRM_IOCTL_XE_WAIT_USER_FENCE		DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_WAIT_USER_FENCE, struct drm_xe_wait_user_fence)
+#define DRM_IOCTL_XE_PERF			DRM_IOW(DRM_COMMAND_BASE + DRM_XE_PERF, struct drm_xe_perf_param)
 
 /**
  * DOC: Xe IOCTL Extensions
@@ -1339,6 +1342,68 @@ struct drm_xe_wait_user_fence {
 	__u64 reserved[2];
 };
 
+/**
+ * enum drm_xe_perf_type - Perf stream types
+ */
+enum drm_xe_perf_type {
+	DRM_XE_PERF_TYPE_MAX,
+};
+
+/**
+ * enum drm_xe_perf_op - Perf stream ops
+ */
+enum drm_xe_perf_op {
+	/** @DRM_XE_PERF_OP_STREAM_OPEN: Open a perf counter stream */
+	DRM_XE_PERF_OP_STREAM_OPEN,
+
+	/** @DRM_XE_PERF_OP_ADD_CONFIG: Add perf stream config */
+	DRM_XE_PERF_OP_ADD_CONFIG,
+
+	/** @DRM_XE_PERF_OP_REMOVE_CONFIG: Remove perf stream config */
+	DRM_XE_PERF_OP_REMOVE_CONFIG,
+};
+
+/**
+ * struct drm_xe_perf_param - Perf layer param
+ *
+ * The perf layer enables multiplexing perf counter streams of multiple
+ * types. The actual params for a particular stream operation are supplied
+ * via the @param pointer (use __copy_from_user to get these params).
+ */
+struct drm_xe_perf_param {
+	/** @extensions: Pointer to the first extension struct, if any */
+	__u64 extensions;
+	/** @perf_type: Perf stream type, of enum @drm_xe_perf_type */
+	__u64 perf_type;
+	/** @perf_op: Perf op, of enum @drm_xe_perf_op */
+	__u64 perf_op;
+	/** @param: Pointer to actual stream params */
+	__u64 param;
+};
+
+/**
+ * enum drm_xe_perf_ioctls - Perf fd ioctl's
+ *
+ * Information exchanged between userspace and kernel for perf fd ioctl's
+ * is stream type specific
+ */
+enum drm_xe_perf_ioctls {
+	/** @DRM_XE_PERF_IOCTL_ENABLE: Enable data capture for a stream */
+	DRM_XE_PERF_IOCTL_ENABLE = _IO('i', 0x0),
+
+	/** @DRM_XE_PERF_IOCTL_DISABLE: Disable data capture for a stream */
+	DRM_XE_PERF_IOCTL_DISABLE = _IO('i', 0x1),
+
+	/** @DRM_XE_PERF_IOCTL_CONFIG: Change stream configuration */
+	DRM_XE_PERF_IOCTL_CONFIG = _IO('i', 0x2),
+
+	/** @DRM_XE_PERF_IOCTL_STATUS: Return stream status */
+	DRM_XE_PERF_IOCTL_STATUS = _IO('i', 0x3),
+
+	/** @DRM_XE_PERF_IOCTL_INFO: Return stream info */
+	DRM_XE_PERF_IOCTL_INFO = _IO('i', 0x4),
+};
+
 #if defined(__cplusplus)
 }
 #endif
-- 
2.41.0


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

* [PATCH 02/16] drm/xe/perf/uapi: Add perf_stream_paranoid sysctl
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 01/16] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 03/16] drm/xe/oa/uapi: Add OA data formats Ashutosh Dixit
                   ` (21 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Normally only superuser/root can access perf counter data. However,
superuser can set perf_stream_paranoid sysctl to 0 to allow non-privileged
users to also access perf data. perf_stream_paranoid is introduced at the
perf layer to allow different perf stream types to share this access
mechanism.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_module.c |  5 +++++
 drivers/gpu/drm/xe/xe_perf.c   | 28 ++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_perf.h   |  4 ++++
 3 files changed, 37 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
index 110b698646565..42085a4b56be2 100644
--- a/drivers/gpu/drm/xe/xe_module.c
+++ b/drivers/gpu/drm/xe/xe_module.c
@@ -11,6 +11,7 @@
 #include "xe_drv.h"
 #include "xe_hw_fence.h"
 #include "xe_pci.h"
+#include "xe_perf.h"
 #include "xe_sched_job.h"
 
 struct xe_modparam xe_modparam = {
@@ -66,6 +67,10 @@ static const struct init_funcs init_funcs[] = {
 		.init = xe_register_pci_driver,
 		.exit = xe_unregister_pci_driver,
 	},
+	{
+		.init = xe_perf_sysctl_register,
+		.exit = xe_perf_sysctl_unregister,
+	},
 };
 
 static int __init xe_init(void)
diff --git a/drivers/gpu/drm/xe/xe_perf.c b/drivers/gpu/drm/xe/xe_perf.c
index a130076b59aa2..37538e98dcc04 100644
--- a/drivers/gpu/drm/xe/xe_perf.c
+++ b/drivers/gpu/drm/xe/xe_perf.c
@@ -4,9 +4,13 @@
  */
 
 #include <linux/errno.h>
+#include <linux/sysctl.h>
 
 #include "xe_perf.h"
 
+u32 xe_perf_stream_paranoid = true;
+static struct ctl_table_header *sysctl_header;
+
 int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 {
 	struct drm_xe_perf_param *arg = data;
@@ -19,3 +23,27 @@ int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 		return -EINVAL;
 	}
 }
+
+static struct ctl_table perf_ctl_table[] = {
+	{
+	 .procname = "perf_stream_paranoid",
+	 .data = &xe_perf_stream_paranoid,
+	 .maxlen = sizeof(xe_perf_stream_paranoid),
+	 .mode = 0644,
+	 .proc_handler = proc_dointvec_minmax,
+	 .extra1 = SYSCTL_ZERO,
+	 .extra2 = SYSCTL_ONE,
+	 },
+	{}
+};
+
+int xe_perf_sysctl_register(void)
+{
+	sysctl_header = register_sysctl("dev/xe", perf_ctl_table);
+	return 0;
+}
+
+void xe_perf_sysctl_unregister(void)
+{
+	unregister_sysctl_table(sysctl_header);
+}
diff --git a/drivers/gpu/drm/xe/xe_perf.h b/drivers/gpu/drm/xe/xe_perf.h
index 254cc7cf49fef..1ff0a07ebab30 100644
--- a/drivers/gpu/drm/xe/xe_perf.h
+++ b/drivers/gpu/drm/xe/xe_perf.h
@@ -11,6 +11,10 @@
 struct drm_device;
 struct drm_file;
 
+extern u32 xe_perf_stream_paranoid;
+
 int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file);
+int xe_perf_sysctl_register(void);
+void xe_perf_sysctl_unregister(void);
 
 #endif
-- 
2.41.0


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

* [PATCH 03/16] drm/xe/oa/uapi: Add OA data formats
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 01/16] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 02/16] drm/xe/perf/uapi: Add perf_stream_paranoid sysctl Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 04/16] drm/xe/oa/uapi: Initialize OA units Ashutosh Dixit
                   ` (20 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Add and initialize supported OA data formats for various platforms
(including Xe2). User can request OA data in any supported format.

Bspec: 52198, 60942, 61101

v2: Start 'xe_oa_format_name' enum from 0 (Umesh)
    Fix error rewind with OA (Umesh)
v3: Use graphics versions rather than absolute platform names

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/Makefile          |  1 +
 drivers/gpu/drm/xe/xe_device.c       | 12 +++-
 drivers/gpu/drm/xe/xe_device_types.h |  4 ++
 drivers/gpu/drm/xe/xe_module.c       |  1 +
 drivers/gpu/drm/xe/xe_oa.c           | 99 ++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_oa.h           | 16 +++++
 drivers/gpu/drm/xe/xe_oa_types.h     | 78 ++++++++++++++++++++++
 include/uapi/drm/xe_drm.h            | 10 +++
 8 files changed, 220 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/xe/xe_oa.c
 create mode 100644 drivers/gpu/drm/xe/xe_oa.h
 create mode 100644 drivers/gpu/drm/xe/xe_oa_types.h

diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 4d2a45635b9c5..5fe1b889a2cdb 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -111,6 +111,7 @@ xe-y += xe_bb.o \
 	xe_mmio.o \
 	xe_mocs.o \
 	xe_module.o \
+	xe_oa.o \
 	xe_pat.o \
 	xe_pci.o \
 	xe_pcode.o \
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index fa3fb48e0eb98..e5529d584eeb3 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -34,6 +34,7 @@
 #include "xe_memirq.h"
 #include "xe_mmio.h"
 #include "xe_module.h"
+#include "xe_oa.h"
 #include "xe_pat.h"
 #include "xe_pcode.h"
 #include "xe_perf.h"
@@ -534,10 +535,14 @@ int xe_device_probe(struct xe_device *xe)
 
 	xe_heci_gsc_init(xe);
 
-	err = xe_display_init(xe);
+	err = xe_oa_init(xe);
 	if (err)
 		goto err_fini_gt;
 
+	err = xe_display_init(xe);
+	if (err)
+		goto err_oa_fini;
+
 	err = drm_dev_register(&xe->drm, 0);
 	if (err)
 		goto err_fini_display;
@@ -557,6 +562,9 @@ int xe_device_probe(struct xe_device *xe)
 err_fini_display:
 	xe_display_driver_remove(xe);
 
+err_oa_fini:
+	xe_oa_fini(xe);
+
 err_fini_gt:
 	for_each_gt(gt, xe, id) {
 		if (id < last_gt)
@@ -589,6 +597,8 @@ void xe_device_remove(struct xe_device *xe)
 
 	xe_display_fini(xe);
 
+	xe_oa_fini(xe);
+
 	xe_heci_gsc_fini(xe);
 
 	for_each_gt(gt, xe, id)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index eb2b806a1d233..ac3faa8ec0c28 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -17,6 +17,7 @@
 #include "xe_gt_types.h"
 #include "xe_lmtt_types.h"
 #include "xe_memirq_types.h"
+#include "xe_oa.h"
 #include "xe_platform_types.h"
 #include "xe_pt_types.h"
 #include "xe_sriov_types.h"
@@ -460,6 +461,9 @@ struct xe_device {
 	/** @heci_gsc: graphics security controller */
 	struct xe_heci_gsc heci_gsc;
 
+	/** @oa: oa perf counter subsystem */
+	struct xe_oa oa;
+
 	/** @needs_flr_on_fini: requests function-reset on fini */
 	bool needs_flr_on_fini;
 
diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
index 42085a4b56be2..b5108e66dd1ee 100644
--- a/drivers/gpu/drm/xe/xe_module.c
+++ b/drivers/gpu/drm/xe/xe_module.c
@@ -10,6 +10,7 @@
 
 #include "xe_drv.h"
 #include "xe_hw_fence.h"
+#include "xe_oa.h"
 #include "xe_pci.h"
 #include "xe_perf.h"
 #include "xe_sched_job.h"
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
new file mode 100644
index 0000000000000..ae6b2005be113
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -0,0 +1,99 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include <drm/xe_drm.h>
+
+#include "xe_device.h"
+#include "xe_oa.h"
+
+#define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
+
+static const struct xe_oa_format oa_formats[] = {
+	[XE_OA_FORMAT_C4_B8]			= { 7, 64,  DRM_FMT(OAG) },
+	[XE_OA_FORMAT_A12]			= { 0, 64,  DRM_FMT(OAG) },
+	[XE_OA_FORMAT_A12_B8_C8]		= { 2, 128, DRM_FMT(OAG) },
+	[XE_OA_FORMAT_A32u40_A4u32_B8_C8]	= { 5, 256, DRM_FMT(OAG) },
+	[XE_OAR_FORMAT_A32u40_A4u32_B8_C8]	= { 5, 256, DRM_FMT(OAR) },
+	[XE_OA_FORMAT_A24u40_A14u32_B8_C8]	= { 5, 256, DRM_FMT(OAG) },
+	[XE_OAC_FORMAT_A24u64_B8_C8]		= { 1, 320, DRM_FMT(OAC), HDR_64_BIT },
+	[XE_OAC_FORMAT_A22u32_R2u32_B8_C8]	= { 2, 192, DRM_FMT(OAC), HDR_64_BIT },
+	[XE_OAM_FORMAT_MPEC8u64_B8_C8]		= { 1, 192, DRM_FMT(OAM_MPEC), HDR_64_BIT },
+	[XE_OAM_FORMAT_MPEC8u32_B8_C8]		= { 2, 128, DRM_FMT(OAM_MPEC), HDR_64_BIT },
+	[XE_OA_FORMAT_PEC64u64]			= { 1, 576, DRM_FMT(PEC), HDR_64_BIT, 1, 0 },
+	[XE_OA_FORMAT_PEC64u64_B8_C8]		= { 1, 640, DRM_FMT(PEC), HDR_64_BIT, 1, 1 },
+	[XE_OA_FORMAT_PEC64u32]			= { 1, 320, DRM_FMT(PEC), HDR_64_BIT },
+	[XE_OA_FORMAT_PEC32u64_G1]		= { 5, 320, DRM_FMT(PEC), HDR_64_BIT, 1, 0 },
+	[XE_OA_FORMAT_PEC32u32_G1]		= { 5, 192, DRM_FMT(PEC), HDR_64_BIT },
+	[XE_OA_FORMAT_PEC32u64_G2]		= { 6, 320, DRM_FMT(PEC), HDR_64_BIT, 1, 0 },
+	[XE_OA_FORMAT_PEC32u32_G2]		= { 6, 192, DRM_FMT(PEC), HDR_64_BIT },
+	[XE_OA_FORMAT_PEC36u64_G1_32_G2_4]	= { 3, 320, DRM_FMT(PEC), HDR_64_BIT, 1, 0 },
+	[XE_OA_FORMAT_PEC36u64_G1_4_G2_32]	= { 4, 320, DRM_FMT(PEC), HDR_64_BIT, 1, 0 },
+};
+
+static void oa_format_add(struct xe_oa *oa, enum xe_oa_format_name format)
+{
+	__set_bit(format, oa->format_mask);
+}
+
+static void xe_oa_init_supported_formats(struct xe_oa *oa)
+{
+	if (GRAPHICS_VER(oa->xe) >= 20) {
+		/* Xe2+ */
+		oa_format_add(oa, XE_OAM_FORMAT_MPEC8u64_B8_C8);
+		oa_format_add(oa, XE_OAM_FORMAT_MPEC8u32_B8_C8);
+		oa_format_add(oa, XE_OA_FORMAT_PEC64u64);
+		oa_format_add(oa, XE_OA_FORMAT_PEC64u64_B8_C8);
+		oa_format_add(oa, XE_OA_FORMAT_PEC64u32);
+		oa_format_add(oa, XE_OA_FORMAT_PEC32u64_G1);
+		oa_format_add(oa, XE_OA_FORMAT_PEC32u32_G1);
+		oa_format_add(oa, XE_OA_FORMAT_PEC32u64_G2);
+		oa_format_add(oa, XE_OA_FORMAT_PEC32u32_G2);
+		oa_format_add(oa, XE_OA_FORMAT_PEC36u64_G1_32_G2_4);
+		oa_format_add(oa, XE_OA_FORMAT_PEC36u64_G1_4_G2_32);
+	} else if (GRAPHICS_VERx100(oa->xe) >= 1270) {
+		/* XE_METEORLAKE */
+		oa_format_add(oa, XE_OAR_FORMAT_A32u40_A4u32_B8_C8);
+		oa_format_add(oa, XE_OA_FORMAT_A24u40_A14u32_B8_C8);
+		oa_format_add(oa, XE_OAC_FORMAT_A24u64_B8_C8);
+		oa_format_add(oa, XE_OAC_FORMAT_A22u32_R2u32_B8_C8);
+		oa_format_add(oa, XE_OAM_FORMAT_MPEC8u64_B8_C8);
+		oa_format_add(oa, XE_OAM_FORMAT_MPEC8u32_B8_C8);
+	} else if (GRAPHICS_VERx100(oa->xe) >= 1255) {
+		/* XE_DG2, XE_PVC */
+		oa_format_add(oa, XE_OAR_FORMAT_A32u40_A4u32_B8_C8);
+		oa_format_add(oa, XE_OA_FORMAT_A24u40_A14u32_B8_C8);
+		oa_format_add(oa, XE_OAC_FORMAT_A24u64_B8_C8);
+		oa_format_add(oa, XE_OAC_FORMAT_A22u32_R2u32_B8_C8);
+	} else {
+		/* Gen12+ */
+		xe_assert(oa->xe, GRAPHICS_VER(oa->xe) >= 12);
+		oa_format_add(oa, XE_OA_FORMAT_A12);
+		oa_format_add(oa, XE_OA_FORMAT_A12_B8_C8);
+		oa_format_add(oa, XE_OA_FORMAT_A32u40_A4u32_B8_C8);
+		oa_format_add(oa, XE_OA_FORMAT_C4_B8);
+	}
+}
+
+int xe_oa_init(struct xe_device *xe)
+{
+	struct xe_oa *oa = &xe->oa;
+
+	/* Support OA only with GuC submission and Gen12+ */
+	if (XE_WARN_ON(!xe_device_uc_enabled(xe)) || XE_WARN_ON(GRAPHICS_VER(xe) < 12))
+		return 0;
+
+	oa->xe = xe;
+	oa->oa_formats = oa_formats;
+
+	xe_oa_init_supported_formats(oa);
+	return 0;
+}
+
+void xe_oa_fini(struct xe_device *xe)
+{
+	struct xe_oa *oa = &xe->oa;
+
+	oa->xe = NULL;
+}
diff --git a/drivers/gpu/drm/xe/xe_oa.h b/drivers/gpu/drm/xe/xe_oa.h
new file mode 100644
index 0000000000000..a2f301e2be57b
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_oa.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_OA_H_
+#define _XE_OA_H_
+
+#include "xe_oa_types.h"
+
+struct xe_device;
+
+int xe_oa_init(struct xe_device *xe);
+void xe_oa_fini(struct xe_device *xe);
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
new file mode 100644
index 0000000000000..c5d33a47d8fa7
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -0,0 +1,78 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_OA_TYPES_H_
+#define _XE_OA_TYPES_H__
+
+#include <linux/math.h>
+#include <linux/types.h>
+
+enum xe_oa_report_header {
+	HDR_32_BIT = 0,
+	HDR_64_BIT,
+};
+
+enum xe_oa_format_name {
+	XE_OA_FORMAT_C4_B8,
+
+	/* Gen8+ */
+	XE_OA_FORMAT_A12,
+	XE_OA_FORMAT_A12_B8_C8,
+	XE_OA_FORMAT_A32u40_A4u32_B8_C8,
+
+	/* DG2 */
+	XE_OAR_FORMAT_A32u40_A4u32_B8_C8,
+	XE_OA_FORMAT_A24u40_A14u32_B8_C8,
+
+	/* DG2/MTL OAC */
+	XE_OAC_FORMAT_A24u64_B8_C8,
+	XE_OAC_FORMAT_A22u32_R2u32_B8_C8,
+
+	/* MTL OAM */
+	XE_OAM_FORMAT_MPEC8u64_B8_C8,
+	XE_OAM_FORMAT_MPEC8u32_B8_C8,
+
+	/* Xe2+ */
+	XE_OA_FORMAT_PEC64u64,
+	XE_OA_FORMAT_PEC64u64_B8_C8,
+	XE_OA_FORMAT_PEC64u32,
+	XE_OA_FORMAT_PEC32u64_G1,
+	XE_OA_FORMAT_PEC32u32_G1,
+	XE_OA_FORMAT_PEC32u64_G2,
+	XE_OA_FORMAT_PEC32u32_G2,
+	XE_OA_FORMAT_PEC36u64_G1_32_G2_4,
+	XE_OA_FORMAT_PEC36u64_G1_4_G2_32,
+
+	XE_OA_FORMAT_MAX,
+};
+
+/**
+ * struct xe_oa_format - Format fields for supported OA formats
+ */
+struct xe_oa_format {
+	u32 counter_select;
+	int size;
+	int type;
+	enum xe_oa_report_header header;
+	u16 counter_size;
+	u16 bc_report;
+};
+
+/**
+ * struct xe_oa - OA device level information
+ */
+struct xe_oa {
+	/** @xe: back pointer to xe device */
+	struct xe_device *xe;
+
+	/** @oa_formats: tracks all OA formats across platforms */
+	const struct xe_oa_format *oa_formats;
+
+#define FORMAT_MASK_SIZE DIV_ROUND_UP(XE_OA_FORMAT_MAX - 1, BITS_PER_LONG)
+
+	/** @format_mask: tracks valid OA formats for a platform */
+	unsigned long format_mask[FORMAT_MASK_SIZE];
+};
+#endif
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index 63d6831b2ecbd..a38f0b59e436e 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1404,6 +1404,16 @@ enum drm_xe_perf_ioctls {
 	DRM_XE_PERF_IOCTL_INFO = _IO('i', 0x4),
 };
 
+/** enum drm_xe_oa_format_type - OA format types */
+enum drm_xe_oa_format_type {
+	DRM_XE_OA_FMT_TYPE_OAG,
+	DRM_XE_OA_FMT_TYPE_OAR,
+	DRM_XE_OA_FMT_TYPE_OAM,
+	DRM_XE_OA_FMT_TYPE_OAC,
+	DRM_XE_OA_FMT_TYPE_OAM_MPEC,
+	DRM_XE_OA_FMT_TYPE_PEC,
+};
+
 #if defined(__cplusplus)
 }
 #endif
-- 
2.41.0


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

* [PATCH 04/16] drm/xe/oa/uapi: Initialize OA units
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (2 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 03/16] drm/xe/oa/uapi: Add OA data formats Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 05/16] drm/xe/oa/uapi: Add/remove OA config perf ops Ashutosh Dixit
                   ` (19 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Initialize OA unit data struct's for each gt during device probe. Also
assign OA units for hardware engines.

v2: Remove XE_OA_UNIT_OAG/XE_OA_UNIT_OAM_SAMEDIA_0 enum (Umesh)
    Change mtl_oa_base to 0x13000 (Umesh)
    Remove OAG_OASTATUS bits

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_oa_regs.h    |  91 +++++++++++++
 drivers/gpu/drm/xe/xe_gt_types.h        |   4 +
 drivers/gpu/drm/xe/xe_hw_engine_types.h |   2 +
 drivers/gpu/drm/xe/xe_oa.c              | 162 ++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_oa_types.h        |  56 ++++++++
 include/uapi/drm/xe_drm.h               |   6 +
 6 files changed, 321 insertions(+)
 create mode 100644 drivers/gpu/drm/xe/regs/xe_oa_regs.h

diff --git a/drivers/gpu/drm/xe/regs/xe_oa_regs.h b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
new file mode 100644
index 0000000000000..00d0c9763e8da
--- /dev/null
+++ b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
@@ -0,0 +1,91 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef __XE_OA_REGS__
+#define __XE_OA_REGS__
+
+#define REG_EQUAL(reg, xe_reg) ((reg) == (xe_reg.addr))
+#define REG_EQUAL_MCR(reg, xe_reg) ((reg) == (xe_reg.__reg.addr))
+
+#define RPM_CONFIG1			XE_REG(0xd04)
+#define   GT_NOA_ENABLE			REG_BIT(9)
+
+#define EU_PERF_CNTL0			XE_REG(0xe458)
+#define EU_PERF_CNTL4			XE_REG(0xe45c)
+#define EU_PERF_CNTL1			XE_REG(0xe558)
+#define EU_PERF_CNTL5			XE_REG(0xe55c)
+#define EU_PERF_CNTL2			XE_REG(0xe658)
+#define EU_PERF_CNTL6			XE_REG(0xe65c)
+#define EU_PERF_CNTL3			XE_REG(0xe758)
+
+#define OA_TLB_INV_CR			XE_REG(0xceec)
+
+/* OAR unit */
+#define OAR_OACONTROL			XE_REG(0x2960)
+#define  OAR_OACONTROL_COUNTER_SEL_MASK	REG_GENMASK(3, 1)
+#define  OAR_OACONTROL_COUNTER_ENABLE	REG_BIT(0)
+
+#define OACTXCONTROL(base) XE_REG((base) + 0x360)
+#define OAR_OASTATUS			XE_REG(0x2968)
+#define  OA_COUNTER_RESUME		REG_BIT(0)
+
+/* OAG unit */
+#define OAG_OAGLBCTXCTRL		XE_REG(0x2b28)
+#define  OAG_OAGLBCTXCTRL_TIMER_PERIOD_MASK	REG_GENMASK(7, 2)
+#define  OAG_OAGLBCTXCTRL_TIMER_ENABLE		REG_BIT(1)
+#define  OAG_OAGLBCTXCTRL_COUNTER_RESUME	REG_BIT(0)
+
+#define OAG_OAHEADPTR				XE_REG(0xdb00)
+#define  OAG_OAHEADPTR_MASK			REG_GENMASK(31, 6)
+#define OAG_OATAILPTR				XE_REG(0xdb04)
+#define  OAG_OATAILPTR_MASK			REG_GENMASK(31, 6)
+
+#define OAG_OABUFFER		XE_REG(0xdb08)
+#define  OABUFFER_SIZE_MASK	REG_GENMASK(5, 3)
+#define  OABUFFER_SIZE_128K	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 0)
+#define  OABUFFER_SIZE_256K	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 1)
+#define  OABUFFER_SIZE_512K	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 2)
+#define  OABUFFER_SIZE_1M	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 3)
+#define  OABUFFER_SIZE_2M	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 4)
+#define  OABUFFER_SIZE_4M	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 5)
+#define  OABUFFER_SIZE_8M	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 6)
+#define  OABUFFER_SIZE_16M	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 7)
+#define  OAG_OABUFFER_MEMORY_SELECT		REG_BIT(0) /* 0: PPGTT, 1: GGTT */
+
+#define OAG_OACONTROL				XE_REG(0xdaf4)
+#define  OAG_OACONTROL_OA_CCS_SELECT_MASK	REG_GENMASK(18, 16)
+#define  OAG_OACONTROL_OA_COUNTER_SEL_MASK	REG_GENMASK(4, 2)
+#define  OAG_OACONTROL_OA_COUNTER_ENABLE	REG_BIT(0)
+/* Common to all OA units */
+#define  OA_OACONTROL_REPORT_BC_MASK		REG_GENMASK(9, 9)
+#define  OA_OACONTROL_COUNTER_SIZE_MASK		REG_GENMASK(8, 8)
+
+#define OAG_OA_DEBUG XE_REG(0xdaf8, XE_REG_OPTION_MASKED)
+#define  OAG_OA_DEBUG_INCLUDE_CLK_RATIO			REG_BIT(6)
+#define  OAG_OA_DEBUG_DISABLE_CLK_RATIO_REPORTS		REG_BIT(5)
+#define  OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS	REG_BIT(1)
+
+#define OAG_OASTATUS			XE_REG(0xdafc)
+/* OAM unit */
+#define OAM_HEAD_POINTER_OFFSET			(0x1a0)
+#define OAM_TAIL_POINTER_OFFSET			(0x1a4)
+#define OAM_BUFFER_OFFSET			(0x1a8)
+#define OAM_CONTEXT_CONTROL_OFFSET		(0x1bc)
+#define OAM_CONTROL_OFFSET			(0x194)
+#define  OAM_CONTROL_COUNTER_SEL_MASK		REG_GENMASK(3, 1)
+#define OAM_DEBUG_OFFSET			(0x198)
+#define OAM_STATUS_OFFSET			(0x19c)
+#define OAM_MMIO_TRG_OFFSET			(0x1d0)
+
+#define OAM_HEAD_POINTER(base)			XE_REG((base) + OAM_HEAD_POINTER_OFFSET)
+#define OAM_TAIL_POINTER(base)			XE_REG((base) + OAM_TAIL_POINTER_OFFSET)
+#define OAM_BUFFER(base)			XE_REG((base) + OAM_BUFFER_OFFSET)
+#define OAM_CONTEXT_CONTROL(base)		XE_REG((base) + OAM_CONTEXT_CONTROL_OFFSET)
+#define OAM_CONTROL(base)			XE_REG((base) + OAM_CONTROL_OFFSET)
+#define OAM_DEBUG(base)				XE_REG((base) + OAM_DEBUG_OFFSET)
+#define OAM_STATUS(base)			XE_REG((base) + OAM_STATUS_OFFSET)
+#define OAM_MMIO_TRG(base)			XE_REG((base) + OAM_MMIO_TRG_OFFSET)
+
+#endif /* __XE_OA_REGS__ */
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 70c615dd14986..33cc5b8d64a5e 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -10,6 +10,7 @@
 #include "xe_gt_idle_types.h"
 #include "xe_hw_engine_types.h"
 #include "xe_hw_fence_types.h"
+#include "xe_oa.h"
 #include "xe_reg_sr_types.h"
 #include "xe_sa_types.h"
 #include "xe_uc_types.h"
@@ -362,6 +363,9 @@ struct xe_gt {
 		/** @wa_active.oob: bitmap with active OOB workaroudns */
 		unsigned long *oob;
 	} wa_active;
+
+	/** @oa: oa perf counter subsystem per gt info */
+	struct xe_oa_gt oa;
 };
 
 #endif
diff --git a/drivers/gpu/drm/xe/xe_hw_engine_types.h b/drivers/gpu/drm/xe/xe_hw_engine_types.h
index d7f828c76cc5f..88d676fce332a 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine_types.h
+++ b/drivers/gpu/drm/xe/xe_hw_engine_types.h
@@ -148,6 +148,8 @@ struct xe_hw_engine {
 	enum xe_hw_engine_id engine_id;
 	/** @eclass: pointer to per hw engine class interface */
 	struct xe_hw_engine_class_intf *eclass;
+	/** @oa_unit: oa unit for this hw engine */
+	struct xe_oa_unit *oa_unit;
 };
 
 /**
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index ae6b2005be113..c6cb3bd9ff68b 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -5,9 +5,14 @@
 
 #include <drm/xe_drm.h>
 
+#include "regs/xe_oa_regs.h"
 #include "xe_device.h"
+#include "xe_gt.h"
+#include "xe_mmio.h"
 #include "xe_oa.h"
 
+#define XE_OA_UNIT_INVALID U32_MAX
+
 #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
 
 static const struct xe_oa_format oa_formats[] = {
@@ -32,6 +37,141 @@ static const struct xe_oa_format oa_formats[] = {
 	[XE_OA_FORMAT_PEC36u64_G1_4_G2_32]	= { 4, 320, DRM_FMT(PEC), HDR_64_BIT, 1, 0 },
 };
 
+static u32 num_oa_units_per_gt(struct xe_gt *gt)
+{
+	return 1;
+}
+
+static u32 __hwe_oam_unit(struct xe_hw_engine *hwe)
+{
+	if (GRAPHICS_VERx100(gt_to_xe(hwe->gt)) >= 1270) {
+		/*
+		 * There's 1 SAMEDIA gt and 1 OAM per SAMEDIA gt. All media slices
+		 * within the gt use the same OAM. All MTL/LNL SKUs list 1 SA MEDIA
+		 */
+		drm_WARN_ON(&gt_to_xe(hwe->gt)->drm,
+			    hwe->gt->info.type != XE_GT_TYPE_MEDIA);
+
+		return 0;
+	}
+
+	return XE_OA_UNIT_INVALID;
+}
+
+static u32 __hwe_oa_unit(struct xe_hw_engine *hwe)
+{
+	switch (hwe->class) {
+	case XE_ENGINE_CLASS_RENDER:
+	case XE_ENGINE_CLASS_COMPUTE:
+		return 0;
+
+	case XE_ENGINE_CLASS_VIDEO_DECODE:
+	case XE_ENGINE_CLASS_VIDEO_ENHANCE:
+		return __hwe_oam_unit(hwe);
+
+	default:
+		return XE_OA_UNIT_INVALID;
+	}
+}
+
+static struct xe_oa_regs __oam_regs(u32 base)
+{
+	return (struct xe_oa_regs) {
+		base,
+		OAM_HEAD_POINTER(base),
+		OAM_TAIL_POINTER(base),
+		OAM_BUFFER(base),
+		OAM_CONTEXT_CONTROL(base),
+		OAM_CONTROL(base),
+		OAM_DEBUG(base),
+		OAM_STATUS(base),
+		OAM_CONTROL_COUNTER_SEL_MASK,
+	};
+}
+
+static struct xe_oa_regs __oag_regs(void)
+{
+	return (struct xe_oa_regs) {
+		0,
+		OAG_OAHEADPTR,
+		OAG_OATAILPTR,
+		OAG_OABUFFER,
+		OAG_OAGLBCTXCTRL,
+		OAG_OACONTROL,
+		OAG_OA_DEBUG,
+		OAG_OASTATUS,
+		OAG_OACONTROL_OA_COUNTER_SEL_MASK,
+	};
+}
+
+static void __xe_oa_init_oa_units(struct xe_gt *gt)
+{
+	const u32 mtl_oa_base[] = { 0x13000 };
+	int i, num_units = gt->oa.num_oa_units;
+
+	for (i = 0; i < num_units; i++) {
+		struct xe_oa_unit *u = &gt->oa.oa_unit[i];
+
+		if (gt->info.type != XE_GT_TYPE_MEDIA) {
+			u->regs = __oag_regs();
+			u->type = DRM_XE_OA_UNIT_TYPE_OAG;
+		} else if (GRAPHICS_VERx100(gt_to_xe(gt)) >= 1270) {
+			u->regs = __oam_regs(mtl_oa_base[i]);
+			u->type = DRM_XE_OA_UNIT_TYPE_OAM;
+		}
+
+		/* Set oa_unit_ids now to ensure ids remain contiguous */
+		u->oa_unit_id = gt_to_xe(gt)->oa.oa_unit_ids++;
+	}
+}
+
+static int xe_oa_init_gt(struct xe_gt *gt)
+{
+	u32 num_oa_units = num_oa_units_per_gt(gt);
+	struct xe_hw_engine *hwe;
+	enum xe_hw_engine_id id;
+	struct xe_oa_unit *u;
+
+	u = kcalloc(num_oa_units, sizeof(*u), GFP_KERNEL);
+	if (!u)
+		return -ENOMEM;
+
+	for_each_hw_engine(hwe, gt, id) {
+		u32 index = __hwe_oa_unit(hwe);
+
+		hwe->oa_unit = NULL;
+		if (index < num_oa_units) {
+			u[index].num_engines++;
+			hwe->oa_unit = &u[index];
+		}
+	}
+
+	/*
+	 * Fused off engines can result in oa_unit's with num_engines == 0. These units
+	 * will appear in OA unit query, but no perf streams can be opened on them.
+	 */
+	gt->oa.num_oa_units = num_oa_units;
+	gt->oa.oa_unit = u;
+
+	__xe_oa_init_oa_units(gt);
+
+	return 0;
+}
+
+static int xe_oa_init_oa_units(struct xe_oa *oa)
+{
+	struct xe_gt *gt;
+	int i, ret;
+
+	for_each_gt(gt, oa->xe, i) {
+		ret = xe_oa_init_gt(gt);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
 static void oa_format_add(struct xe_oa *oa, enum xe_oa_format_name format)
 {
 	__set_bit(format, oa->format_mask);
@@ -79,6 +219,8 @@ static void xe_oa_init_supported_formats(struct xe_oa *oa)
 int xe_oa_init(struct xe_device *xe)
 {
 	struct xe_oa *oa = &xe->oa;
+	struct xe_gt *gt;
+	int i, ret;
 
 	/* Support OA only with GuC submission and Gen12+ */
 	if (XE_WARN_ON(!xe_device_uc_enabled(xe)) || XE_WARN_ON(GRAPHICS_VER(xe) < 12))
@@ -87,13 +229,33 @@ int xe_oa_init(struct xe_device *xe)
 	oa->xe = xe;
 	oa->oa_formats = oa_formats;
 
+	for_each_gt(gt, xe, i)
+		mutex_init(&gt->oa.gt_lock);
+
+	ret = xe_oa_init_oa_units(oa);
+	if (ret) {
+		drm_err(&xe->drm, "OA initialization failed %d\n", ret);
+		goto exit;
+	}
+
 	xe_oa_init_supported_formats(oa);
 	return 0;
+exit:
+	oa->xe = NULL;
+	return ret;
 }
 
 void xe_oa_fini(struct xe_device *xe)
 {
 	struct xe_oa *oa = &xe->oa;
+	struct xe_gt *gt;
+	int i;
+
+	if (!oa->xe)
+		return;
+
+	for_each_gt(gt, xe, i)
+		kfree(gt->oa.oa_unit);
 
 	oa->xe = NULL;
 }
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index c5d33a47d8fa7..bb9a579d4529a 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -8,6 +8,10 @@
 
 #include <linux/math.h>
 #include <linux/types.h>
+#include <linux/mutex.h>
+
+#include <drm/xe_drm.h>
+#include "regs/xe_reg_defs.h"
 
 enum xe_oa_report_header {
 	HDR_32_BIT = 0,
@@ -60,6 +64,55 @@ struct xe_oa_format {
 	u16 bc_report;
 };
 
+/**
+ * struct xe_oa_regs - Registers for each OA unit
+ */
+struct xe_oa_regs {
+	u32 base;
+	struct xe_reg oa_head_ptr;
+	struct xe_reg oa_tail_ptr;
+	struct xe_reg oa_buffer;
+	struct xe_reg oa_ctx_ctrl;
+	struct xe_reg oa_ctrl;
+	struct xe_reg oa_debug;
+	struct xe_reg oa_status;
+	u32 oa_ctrl_counter_select_mask;
+};
+
+/**
+ * struct xe_oa_unit - Hardware OA unit
+ */
+struct xe_oa_unit {
+	/** @oa_unit_id: identifier for the OA unit */
+	u16 oa_unit_id;
+
+	/** @type: Type of OA unit - OAM, OAG etc. */
+	enum drm_xe_oa_unit_type type;
+
+	/** @regs: OA registers for programming the OA unit */
+	struct xe_oa_regs regs;
+
+	/** @num_engines: number of engines attached to this OA unit */
+	u32 num_engines;
+
+	/** @exclusive_stream: The stream currently using the OA unit */
+	struct xe_oa_stream *exclusive_stream;
+};
+
+/**
+ * struct xe_oa_gt - OA per-gt information
+ */
+struct xe_oa_gt {
+	/** @lock: lock protecting create/destroy OA streams */
+	struct mutex gt_lock;
+
+	/** @num_oa_units: number of oa units for each gt */
+	u32 num_oa_units;
+
+	/** @oa_unit: array of oa_units */
+	struct xe_oa_unit *oa_unit;
+};
+
 /**
  * struct xe_oa - OA device level information
  */
@@ -74,5 +127,8 @@ struct xe_oa {
 
 	/** @format_mask: tracks valid OA formats for a platform */
 	unsigned long format_mask[FORMAT_MASK_SIZE];
+
+	/** @oa_unit_ids: tracks oa unit ids assigned across gt's */
+	u16 oa_unit_ids;
 };
 #endif
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index a38f0b59e436e..c9d88f2c81ddc 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1404,6 +1404,12 @@ enum drm_xe_perf_ioctls {
 	DRM_XE_PERF_IOCTL_INFO = _IO('i', 0x4),
 };
 
+/** enum drm_xe_oa_unit_type - OA unit types */
+enum drm_xe_oa_unit_type {
+	DRM_XE_OA_UNIT_TYPE_OAG,
+	DRM_XE_OA_UNIT_TYPE_OAM,
+};
+
 /** enum drm_xe_oa_format_type - OA format types */
 enum drm_xe_oa_format_type {
 	DRM_XE_OA_FMT_TYPE_OAG,
-- 
2.41.0


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

* [PATCH 05/16] drm/xe/oa/uapi: Add/remove OA config perf ops
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (3 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 04/16] drm/xe/oa/uapi: Initialize OA units Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties Ashutosh Dixit
                   ` (18 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Introduce add/remove config perf ops for OA. OA configurations consist of a
set of event/counter select register address/value pairs. The add_config
perf op validates and stores such configurations and also exposes them in
the metrics sysfs. These configurations will be programmed to OA unit HW
when an OA stream using a configuration is opened. The OA stream can also
switch to other stored configurations.

v2: Start config id's from 1 and other minor review comments (Umesh)

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_device.c   |   4 +
 drivers/gpu/drm/xe/xe_oa.c       | 405 +++++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_oa.h       |   8 +
 drivers/gpu/drm/xe/xe_oa_types.h |  10 +
 drivers/gpu/drm/xe/xe_perf.c     |  16 ++
 include/uapi/drm/xe_drm.h        |  25 ++
 6 files changed, 468 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index e5529d584eeb3..8bbcf9b1ab89b 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -549,6 +549,8 @@ int xe_device_probe(struct xe_device *xe)
 
 	xe_display_register(xe);
 
+	xe_oa_register(xe);
+
 	xe_debugfs_register(xe);
 
 	xe_hwmon_register(xe);
@@ -593,6 +595,8 @@ void xe_device_remove(struct xe_device *xe)
 	struct xe_gt *gt;
 	u8 id;
 
+	xe_oa_unregister(xe);
+
 	xe_device_remove_display(xe);
 
 	xe_display_fini(xe);
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index c6cb3bd9ff68b..a62f71244ec15 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -10,9 +10,32 @@
 #include "xe_gt.h"
 #include "xe_mmio.h"
 #include "xe_oa.h"
+#include "xe_perf.h"
 
 #define XE_OA_UNIT_INVALID U32_MAX
 
+struct xe_oa_reg {
+	struct xe_reg addr;
+	u32 value;
+};
+
+struct xe_oa_config {
+	struct xe_oa *oa;
+
+	char uuid[UUID_STRING_LEN + 1];
+	int id;
+
+	const struct xe_oa_reg *regs;
+	u32 regs_len;
+
+	struct attribute_group sysfs_metric;
+	struct attribute *attrs[2];
+	struct kobj_attribute sysfs_metric_id;
+
+	struct kref ref;
+	struct rcu_head rcu;
+};
+
 #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
 
 static const struct xe_oa_format oa_formats[] = {
@@ -37,6 +60,376 @@ static const struct xe_oa_format oa_formats[] = {
 	[XE_OA_FORMAT_PEC36u64_G1_4_G2_32]	= { 4, 320, DRM_FMT(PEC), HDR_64_BIT, 1, 0 },
 };
 
+static void xe_oa_config_release(struct kref *ref)
+{
+	struct xe_oa_config *oa_config =
+		container_of(ref, typeof(*oa_config), ref);
+
+	kfree(oa_config->regs);
+
+	kfree_rcu(oa_config, rcu);
+}
+
+static void xe_oa_config_put(struct xe_oa_config *oa_config)
+{
+	if (!oa_config)
+		return;
+
+	kref_put(&oa_config->ref, xe_oa_config_release);
+}
+
+static bool xe_oa_is_valid_flex_addr(struct xe_oa *oa, u32 addr)
+{
+	static const struct xe_reg flex_eu_regs[] = {
+		EU_PERF_CNTL0,
+		EU_PERF_CNTL1,
+		EU_PERF_CNTL2,
+		EU_PERF_CNTL3,
+		EU_PERF_CNTL4,
+		EU_PERF_CNTL5,
+		EU_PERF_CNTL6,
+	};
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(flex_eu_regs); i++) {
+		if (flex_eu_regs[i].addr == addr)
+			return true;
+	}
+	return false;
+}
+
+static bool xe_oa_reg_in_range_table(u32 addr, const struct xe_mmio_range *table)
+{
+	while (table->start && table->end) {
+		if (addr >= table->start && addr <= table->end)
+			return true;
+
+		table++;
+	}
+
+	return false;
+}
+
+static const struct xe_mmio_range xehp_oa_b_counters[] = {
+	{ .start = 0xdc48, .end = 0xdc48 },	/* OAA_ENABLE_REG */
+	{ .start = 0xdd00, .end = 0xdd48 },	/* OAG_LCE0_0 - OAA_LENABLE_REG */
+	{}
+};
+
+static const struct xe_mmio_range gen12_oa_b_counters[] = {
+	{ .start = 0x2b2c, .end = 0x2b2c },	/* OAG_OA_PESS */
+	{ .start = 0xd900, .end = 0xd91c },	/* OAG_OASTARTTRIG[1-8] */
+	{ .start = 0xd920, .end = 0xd93c },	/* OAG_OAREPORTTRIG1[1-8] */
+	{ .start = 0xd940, .end = 0xd97c },	/* OAG_CEC[0-7][0-1] */
+	{ .start = 0xdc00, .end = 0xdc3c },	/* OAG_SCEC[0-7][0-1] */
+	{ .start = 0xdc40, .end = 0xdc40 },	/* OAG_SPCTR_CNF */
+	{ .start = 0xdc44, .end = 0xdc44 },	/* OAA_DBG_REG */
+	{}
+};
+
+static const struct xe_mmio_range mtl_oam_b_counters[] = {
+	{ .start = 0x393000, .end = 0x39301c },	/* OAM_STARTTRIG1[1-8] */
+	{ .start = 0x393020, .end = 0x39303c },	/* OAM_REPORTTRIG1[1-8] */
+	{ .start = 0x393040, .end = 0x39307c },	/* OAM_CEC[0-7][0-1] */
+	{ .start = 0x393200, .end = 0x39323C },	/* MPES[0-7] */
+	{}
+};
+
+static const struct xe_mmio_range xe2_oa_b_counters[] = {
+	{ .start = 0x393200, .end = 0x39323C },	/* MPES_0_MPES_SAG - MPES_7_UPPER_MPES_SAG */
+	{ .start = 0x394200, .end = 0x39423C },	/* MPES_0_MPES_SCMI0 - MPES_7_UPPER_MPES_SCMI0 */
+	{ .start = 0x394A00, .end = 0x394A3C },	/* MPES_0_MPES_SCMI1 - MPES_7_UPPER_MPES_SCMI1 */
+	{},
+};
+
+static bool xe_oa_is_valid_b_counter_addr(struct xe_oa *oa, u32 addr)
+{
+	return xe_oa_reg_in_range_table(addr, xehp_oa_b_counters) ||
+		xe_oa_reg_in_range_table(addr, gen12_oa_b_counters) ||
+		xe_oa_reg_in_range_table(addr, mtl_oam_b_counters) ||
+		(GRAPHICS_VER(oa->xe) >= 20 &&
+		 xe_oa_reg_in_range_table(addr, xe2_oa_b_counters));
+}
+
+static const struct xe_mmio_range mtl_oa_mux_regs[] = {
+	{ .start = 0x0d00, .end = 0x0d04 },	/* RPM_CONFIG[0-1] */
+	{ .start = 0x0d0c, .end = 0x0d2c },	/* NOA_CONFIG[0-8] */
+	{ .start = 0x9840, .end = 0x9840 },	/* GDT_CHICKEN_BITS */
+	{ .start = 0x9884, .end = 0x9888 },	/* NOA_WRITE */
+	{ .start = 0x38d100, .end = 0x38d114},	/* VISACTL */
+	{}
+};
+
+static const struct xe_mmio_range gen12_oa_mux_regs[] = {
+	{ .start = 0x0d00, .end = 0x0d04 },     /* RPM_CONFIG[0-1] */
+	{ .start = 0x0d0c, .end = 0x0d2c },     /* NOA_CONFIG[0-8] */
+	{ .start = 0x9840, .end = 0x9840 },	/* GDT_CHICKEN_BITS */
+	{ .start = 0x9884, .end = 0x9888 },	/* NOA_WRITE */
+	{ .start = 0x20cc, .end = 0x20cc },	/* WAIT_FOR_RC6_EXIT */
+	{}
+};
+
+static const struct xe_mmio_range xe2_oa_mux_regs[] = {
+	{ .start = 0x13000,  .end = 0x137FC },	/* PES_0_PESL0 - PES_63_UPPER_PESL3 */
+	{},
+};
+
+static bool xe_oa_is_valid_mux_addr(struct xe_oa *oa, u32 addr)
+{
+	if (GRAPHICS_VER(oa->xe) >= 20)
+		return xe_oa_reg_in_range_table(addr, xe2_oa_mux_regs);
+	else if (GRAPHICS_VERx100(oa->xe) >= 1270)
+		return xe_oa_reg_in_range_table(addr, mtl_oa_mux_regs);
+	else
+		return xe_oa_reg_in_range_table(addr, gen12_oa_mux_regs);
+}
+
+static bool xe_oa_is_valid_config_reg_addr(struct xe_oa *oa, u32 addr)
+{
+	return xe_oa_is_valid_flex_addr(oa, addr) ||
+		xe_oa_is_valid_b_counter_addr(oa, addr) ||
+		xe_oa_is_valid_mux_addr(oa, addr);
+}
+
+static struct xe_oa_reg *
+xe_oa_alloc_regs(struct xe_oa *oa, bool (*is_valid)(struct xe_oa *oa, u32 addr),
+		 u32 __user *regs, u32 n_regs)
+{
+	struct xe_oa_reg *oa_regs;
+	int err;
+	u32 i;
+
+	oa_regs = kmalloc_array(n_regs, sizeof(*oa_regs), GFP_KERNEL);
+	if (!oa_regs)
+		return ERR_PTR(-ENOMEM);
+
+	for (i = 0; i < n_regs; i++) {
+		u32 addr, value;
+
+		err = get_user(addr, regs);
+		if (err)
+			goto addr_err;
+
+		if (!is_valid(oa, addr)) {
+			drm_dbg(&oa->xe->drm, "Invalid oa_reg address: %X\n", addr);
+			err = -EINVAL;
+			goto addr_err;
+		}
+
+		err = get_user(value, regs + 1);
+		if (err)
+			goto addr_err;
+
+		oa_regs[i].addr = XE_REG(addr);
+		oa_regs[i].value = value;
+
+		regs += 2;
+	}
+
+	return oa_regs;
+
+addr_err:
+	kfree(oa_regs);
+	return ERR_PTR(err);
+}
+
+static ssize_t show_dynamic_id(struct kobject *kobj,
+			       struct kobj_attribute *attr,
+			       char *buf)
+{
+	struct xe_oa_config *oa_config =
+		container_of(attr, typeof(*oa_config), sysfs_metric_id);
+
+	return sprintf(buf, "%d\n", oa_config->id);
+}
+
+static int create_dynamic_oa_sysfs_entry(struct xe_oa *oa,
+					 struct xe_oa_config *oa_config)
+{
+	sysfs_attr_init(&oa_config->sysfs_metric_id.attr);
+	oa_config->sysfs_metric_id.attr.name = "id";
+	oa_config->sysfs_metric_id.attr.mode = 0444;
+	oa_config->sysfs_metric_id.show = show_dynamic_id;
+	oa_config->sysfs_metric_id.store = NULL;
+
+	oa_config->attrs[0] = &oa_config->sysfs_metric_id.attr;
+	oa_config->attrs[1] = NULL;
+
+	oa_config->sysfs_metric.name = oa_config->uuid;
+	oa_config->sysfs_metric.attrs = oa_config->attrs;
+
+	return sysfs_create_group(oa->metrics_kobj, &oa_config->sysfs_metric);
+}
+
+int xe_oa_add_config_ioctl(struct drm_device *dev, void *data,
+			   struct drm_file *file)
+{
+	struct xe_oa *oa = &to_xe_device(dev)->oa;
+	struct drm_xe_oa_config param;
+	struct drm_xe_oa_config *arg = &param;
+	struct xe_oa_config *oa_config, *tmp;
+	struct xe_oa_reg *regs;
+	int err, id;
+
+	if (!oa->xe) {
+		drm_dbg(&oa->xe->drm, "xe oa interface not available for this system\n");
+		return -ENODEV;
+	}
+
+	if (xe_perf_stream_paranoid && !perfmon_capable()) {
+		drm_dbg(&oa->xe->drm, "Insufficient privileges to add xe OA config\n");
+		return -EACCES;
+	}
+
+	err = __copy_from_user(&param, data, sizeof(param));
+	if (XE_IOCTL_DBG(oa->xe, err))
+		return -EFAULT;
+
+	if (XE_IOCTL_DBG(oa->xe, arg->extensions) ||
+	    XE_IOCTL_DBG(oa->xe, !arg->regs_ptr) ||
+	    XE_IOCTL_DBG(oa->xe, !arg->n_regs))
+		return -EINVAL;
+
+	oa_config = kzalloc(sizeof(*oa_config), GFP_KERNEL);
+	if (!oa_config)
+		return -ENOMEM;
+
+	oa_config->oa = oa;
+	kref_init(&oa_config->ref);
+
+	if (!uuid_is_valid(arg->uuid)) {
+		drm_dbg(&oa->xe->drm, "Invalid uuid format for OA config\n");
+		err = -EINVAL;
+		goto reg_err;
+	}
+
+	/* Last character in oa_config->uuid will be 0 because oa_config is kzalloc */
+	memcpy(oa_config->uuid, arg->uuid, sizeof(arg->uuid));
+
+	oa_config->regs_len = arg->n_regs;
+	regs = xe_oa_alloc_regs(oa, xe_oa_is_valid_config_reg_addr,
+				u64_to_user_ptr(arg->regs_ptr),
+				arg->n_regs);
+	if (IS_ERR(regs)) {
+		drm_dbg(&oa->xe->drm, "Failed to create OA config for mux_regs\n");
+		err = PTR_ERR(regs);
+		goto reg_err;
+	}
+	oa_config->regs = regs;
+
+	err = mutex_lock_interruptible(&oa->metrics_lock);
+	if (err)
+		goto reg_err;
+
+	/* We shouldn't have too many configs, so this iteration shouldn't be too costly */
+	idr_for_each_entry(&oa->metrics_idr, tmp, id) {
+		if (!strcmp(tmp->uuid, oa_config->uuid)) {
+			drm_dbg(&oa->xe->drm, "OA config already exists with this uuid\n");
+			err = -EADDRINUSE;
+			goto sysfs_err;
+		}
+	}
+
+	err = create_dynamic_oa_sysfs_entry(oa, oa_config);
+	if (err) {
+		drm_dbg(&oa->xe->drm, "Failed to create sysfs entry for OA config\n");
+		goto sysfs_err;
+	}
+
+	oa_config->id = idr_alloc(&oa->metrics_idr, oa_config, 1, 0, GFP_KERNEL);
+	if (oa_config->id < 0) {
+		drm_dbg(&oa->xe->drm, "Failed to create sysfs entry for OA config\n");
+		err = oa_config->id;
+		goto sysfs_err;
+	}
+
+	mutex_unlock(&oa->metrics_lock);
+
+	drm_dbg(&oa->xe->drm, "Added config %s id=%i\n", oa_config->uuid, oa_config->id);
+
+	return oa_config->id;
+
+sysfs_err:
+	mutex_unlock(&oa->metrics_lock);
+reg_err:
+	xe_oa_config_put(oa_config);
+	drm_dbg(&oa->xe->drm, "Failed to add new OA config\n");
+	return err;
+}
+
+int xe_oa_remove_config_ioctl(struct drm_device *dev, void *data,
+			      struct drm_file *file)
+{
+	struct xe_oa *oa = &to_xe_device(dev)->oa;
+	struct xe_oa_config *oa_config;
+	u64 arg, *ptr = data;
+	int ret;
+
+	if (!oa->xe) {
+		drm_dbg(&oa->xe->drm, "xe oa interface not available for this system\n");
+		return -ENODEV;
+	}
+
+	if (xe_perf_stream_paranoid && !perfmon_capable()) {
+		drm_dbg(&oa->xe->drm, "Insufficient privileges to remove xe OA config\n");
+		return -EACCES;
+	}
+
+	ret = get_user(arg, ptr);
+	if (XE_IOCTL_DBG(oa->xe, ret))
+		return ret;
+
+	ret = mutex_lock_interruptible(&oa->metrics_lock);
+	if (ret)
+		return ret;
+
+	oa_config = idr_find(&oa->metrics_idr, arg);
+	if (!oa_config) {
+		drm_dbg(&oa->xe->drm, "Failed to remove unknown OA config\n");
+		ret = -ENOENT;
+		goto err_unlock;
+	}
+
+	WARN_ON(arg != oa_config->id);
+
+	sysfs_remove_group(oa->metrics_kobj, &oa_config->sysfs_metric);
+	idr_remove(&oa->metrics_idr, arg);
+
+	mutex_unlock(&oa->metrics_lock);
+
+	drm_dbg(&oa->xe->drm, "Removed config %s id=%i\n", oa_config->uuid, oa_config->id);
+
+	xe_oa_config_put(oa_config);
+
+	return 0;
+
+err_unlock:
+	mutex_unlock(&oa->metrics_lock);
+	return ret;
+}
+
+void xe_oa_register(struct xe_device *xe)
+{
+	struct xe_oa *oa = &xe->oa;
+
+	if (!oa->xe)
+		return;
+
+	oa->metrics_kobj = kobject_create_and_add("metrics",
+						  &xe->drm.primary->kdev->kobj);
+}
+
+void xe_oa_unregister(struct xe_device *xe)
+{
+	struct xe_oa *oa = &xe->oa;
+
+	if (!oa->metrics_kobj)
+		return;
+
+	kobject_put(oa->metrics_kobj);
+	oa->metrics_kobj = NULL;
+}
+
 static u32 num_oa_units_per_gt(struct xe_gt *gt)
 {
 	return 1;
@@ -232,6 +625,9 @@ int xe_oa_init(struct xe_device *xe)
 	for_each_gt(gt, xe, i)
 		mutex_init(&gt->oa.gt_lock);
 
+	mutex_init(&oa->metrics_lock);
+	idr_init_base(&oa->metrics_idr, 1);
+
 	ret = xe_oa_init_oa_units(oa);
 	if (ret) {
 		drm_err(&xe->drm, "OA initialization failed %d\n", ret);
@@ -245,6 +641,12 @@ int xe_oa_init(struct xe_device *xe)
 	return ret;
 }
 
+static int destroy_config(int id, void *p, void *data)
+{
+	xe_oa_config_put(p);
+	return 0;
+}
+
 void xe_oa_fini(struct xe_device *xe)
 {
 	struct xe_oa *oa = &xe->oa;
@@ -257,5 +659,8 @@ void xe_oa_fini(struct xe_device *xe)
 	for_each_gt(gt, xe, i)
 		kfree(gt->oa.oa_unit);
 
+	idr_for_each(&oa->metrics_idr, destroy_config, oa);
+	idr_destroy(&oa->metrics_idr);
+
 	oa->xe = NULL;
 }
diff --git a/drivers/gpu/drm/xe/xe_oa.h b/drivers/gpu/drm/xe/xe_oa.h
index a2f301e2be57b..4a4e3b2b70fcd 100644
--- a/drivers/gpu/drm/xe/xe_oa.h
+++ b/drivers/gpu/drm/xe/xe_oa.h
@@ -8,9 +8,17 @@
 
 #include "xe_oa_types.h"
 
+struct drm_device;
+struct drm_file;
 struct xe_device;
 
 int xe_oa_init(struct xe_device *xe);
 void xe_oa_fini(struct xe_device *xe);
+void xe_oa_register(struct xe_device *xe);
+void xe_oa_unregister(struct xe_device *xe);
+int xe_oa_add_config_ioctl(struct drm_device *dev, void *data,
+			   struct drm_file *file);
+int xe_oa_remove_config_ioctl(struct drm_device *dev, void *data,
+			      struct drm_file *file);
 
 #endif
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index bb9a579d4529a..594e38c6328d2 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -6,6 +6,7 @@
 #ifndef _XE_OA_TYPES_H_
 #define _XE_OA_TYPES_H__
 
+#include <linux/idr.h>
 #include <linux/math.h>
 #include <linux/types.h>
 #include <linux/mutex.h>
@@ -120,6 +121,15 @@ struct xe_oa {
 	/** @xe: back pointer to xe device */
 	struct xe_device *xe;
 
+	/** @metrics_kobj: kobj for metrics sysfs */
+	struct kobject *metrics_kobj;
+
+	/** @metrics_lock: lock protecting add/remove configs */
+	struct mutex metrics_lock;
+
+	/** @metrics_idr: List of dynamic configurations (struct xe_oa_config) */
+	struct idr metrics_idr;
+
 	/** @oa_formats: tracks all OA formats across platforms */
 	const struct xe_oa_format *oa_formats;
 
diff --git a/drivers/gpu/drm/xe/xe_perf.c b/drivers/gpu/drm/xe/xe_perf.c
index 37538e98dcc04..2aee4c7989486 100644
--- a/drivers/gpu/drm/xe/xe_perf.c
+++ b/drivers/gpu/drm/xe/xe_perf.c
@@ -6,11 +6,25 @@
 #include <linux/errno.h>
 #include <linux/sysctl.h>
 
+#include "xe_oa.h"
 #include "xe_perf.h"
 
 u32 xe_perf_stream_paranoid = true;
 static struct ctl_table_header *sysctl_header;
 
+static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_perf_param *arg,
+		       struct drm_file *file)
+{
+	switch (arg->perf_op) {
+	case DRM_XE_PERF_OP_ADD_CONFIG:
+		return xe_oa_add_config_ioctl(dev, (void *)arg->param, file);
+	case DRM_XE_PERF_OP_REMOVE_CONFIG:
+		return xe_oa_remove_config_ioctl(dev, (void *)arg->param, file);
+	default:
+		return -EINVAL;
+	}
+}
+
 int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 {
 	struct drm_xe_perf_param *arg = data;
@@ -19,6 +33,8 @@ int xe_perf_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 		return -EINVAL;
 
 	switch (arg->perf_type) {
+	case DRM_XE_PERF_TYPE_OA:
+		return xe_oa_ioctl(dev, arg, file);
 	default:
 		return -EINVAL;
 	}
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index c9d88f2c81ddc..0632ebf209c35 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1346,6 +1346,7 @@ struct drm_xe_wait_user_fence {
  * enum drm_xe_perf_type - Perf stream types
  */
 enum drm_xe_perf_type {
+	DRM_XE_PERF_TYPE_OA,
 	DRM_XE_PERF_TYPE_MAX,
 };
 
@@ -1420,6 +1421,30 @@ enum drm_xe_oa_format_type {
 	DRM_XE_OA_FMT_TYPE_PEC,
 };
 
+/**
+ * struct drm_xe_oa_config - OA metric configuration
+ *
+ * Multiple OA configs can be added using @DRM_XE_PERF_OP_ADD_CONFIG. A
+ * particular config can be specified when opening an OA stream using
+ * @DRM_XE_OA_PROPERTY_OA_METRIC_SET property.
+ */
+struct drm_xe_oa_config {
+	/** @extensions: Pointer to the first extension struct, if any */
+	__u64 extensions;
+
+	/** * @uuid: String formatted like "%\08x-%\04x-%\04x-%\04x-%\012x" */
+	char uuid[36];
+
+	/** @n_regs: Number of regs in @regs_ptr */
+	__u32 n_regs;
+
+	/**
+	 * @regs_ptr: Pointer to (register address, value) pairs for OA config
+	 * registers. Expected length of buffer is: (2 * sizeof(u32) * @n_regs).
+	 */
+	__u64 regs_ptr;
+};
+
 #if defined(__cplusplus)
 }
 #endif
-- 
2.41.0


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

* [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (4 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 05/16] drm/xe/oa/uapi: Add/remove OA config perf ops Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08 21:40   ` Lionel Landwerlin
  2024-02-08  5:49 ` [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG) Ashutosh Dixit
                   ` (17 subsequent siblings)
  23 siblings, 1 reply; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Properties for OA streams are specified by user space, when the stream is
opened, as a chain of drm_xe_ext_set_property struct's. Parse and validate
these stream properties.

v2: Remove struct drm_xe_oa_open_param (Harish Chegondi)
    Drop DRM_XE_OA_PROPERTY_POLL_OA_PERIOD_US (Umesh)
    Eliminate comparison with xe_oa_max_sample_rate (Umesh)
    Drop 'struct drm_xe_oa_record_header' (Umesh)

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_oa.c   | 344 +++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_oa.h   |   6 +
 drivers/gpu/drm/xe/xe_perf.c |   2 +
 include/uapi/drm/xe_drm.h    |  70 +++++++
 4 files changed, 422 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index a62f71244ec15..915dd71454c7c 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -3,10 +3,14 @@
  * Copyright © 2023 Intel Corporation
  */
 
+#include <linux/nospec.h>
+
 #include <drm/xe_drm.h>
 
+#include "regs/xe_gt_regs.h"
 #include "regs/xe_oa_regs.h"
 #include "xe_device.h"
+#include "xe_exec_queue.h"
 #include "xe_gt.h"
 #include "xe_mmio.h"
 #include "xe_oa.h"
@@ -36,6 +40,19 @@ struct xe_oa_config {
 	struct rcu_head rcu;
 };
 
+struct xe_oa_open_param {
+	u32 oa_unit_id;
+	bool sample;
+	u32 metric_set;
+	enum xe_oa_format_name oa_format;
+	int period_exponent;
+	bool disabled;
+	int exec_queue_id;
+	int engine_instance;
+	struct xe_exec_queue *exec_q;
+	struct xe_hw_engine *hwe;
+};
+
 #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
 
 static const struct xe_oa_format oa_formats[] = {
@@ -78,6 +95,333 @@ static void xe_oa_config_put(struct xe_oa_config *oa_config)
 	kref_put(&oa_config->ref, xe_oa_config_release);
 }
 
+/*
+ * OA timestamp frequency = CS timestamp frequency in most platforms. On some
+ * platforms OA unit ignores the CTC_SHIFT and the 2 timestamps differ. In such
+ * cases, return the adjusted CS timestamp frequency to the user.
+ */
+u32 xe_oa_timestamp_frequency(struct xe_gt *gt)
+{
+	u32 reg, shift;
+
+	/*
+	 * Wa_18013179988:dg2
+	 * Wa_14015568240:pvc
+	 * Wa_14015846243:mtl
+	 */
+	switch (gt_to_xe(gt)->info.platform) {
+	case XE_DG2:
+	case XE_PVC:
+	case XE_METEORLAKE:
+		xe_device_mem_access_get(gt_to_xe(gt));
+		reg = xe_mmio_read32(gt, RPM_CONFIG0);
+		xe_device_mem_access_put(gt_to_xe(gt));
+
+		shift = REG_FIELD_GET(RPM_CONFIG0_CTC_SHIFT_PARAMETER_MASK, reg);
+		return gt->info.reference_clock << (3 - shift);
+
+	default:
+		return gt->info.reference_clock;
+	}
+}
+
+static u64 oa_exponent_to_ns(struct xe_gt *gt, int exponent)
+{
+	u64 nom = (2ULL << exponent) * NSEC_PER_SEC;
+	u32 den = xe_oa_timestamp_frequency(gt);
+
+	return div_u64(nom + den - 1, den);
+}
+
+static bool engine_supports_oa_format(const struct xe_hw_engine *hwe, int type)
+{
+	switch (hwe->oa_unit->type) {
+	case DRM_XE_OA_UNIT_TYPE_OAG:
+		return type == DRM_XE_OA_FMT_TYPE_OAG || type == DRM_XE_OA_FMT_TYPE_OAR ||
+			type == DRM_XE_OA_FMT_TYPE_OAC || type == DRM_XE_OA_FMT_TYPE_PEC;
+	case DRM_XE_OA_UNIT_TYPE_OAM:
+		return type == DRM_XE_OA_FMT_TYPE_OAM || type == DRM_XE_OA_FMT_TYPE_OAM_MPEC;
+	default:
+		return false;
+	}
+}
+
+static int decode_oa_format(struct xe_oa *oa, u64 fmt, enum xe_oa_format_name *name)
+{
+	u32 counter_size = FIELD_GET(DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE, fmt);
+	u32 counter_sel = FIELD_GET(DRM_XE_OA_FORMAT_MASK_COUNTER_SEL, fmt);
+	u32 bc_report = FIELD_GET(DRM_XE_OA_FORMAT_MASK_BC_REPORT, fmt);
+	u32 type = FIELD_GET(DRM_XE_OA_FORMAT_MASK_FMT_TYPE, fmt);
+	int idx;
+
+	for_each_set_bit(idx, oa->format_mask, XE_OA_FORMAT_MAX) {
+		const struct xe_oa_format *f = &oa->oa_formats[idx];
+
+		if (counter_size == f->counter_size && bc_report == f->bc_report &&
+		    type == f->type && counter_sel == f->counter_select) {
+			*name = idx;
+			return 0;
+		}
+	}
+
+	return -EINVAL;
+}
+
+u16 xe_oa_unit_id(struct xe_hw_engine *hwe)
+{
+	return hwe->oa_unit && hwe->oa_unit->num_engines ?
+		hwe->oa_unit->oa_unit_id : U16_MAX;
+}
+
+static int xe_oa_assign_hwe(struct xe_oa *oa, struct xe_oa_open_param *param)
+{
+	struct xe_gt *gt;
+	int i, ret = 0;
+
+	if (param->exec_q) {
+		/* When we have an exec_q, get hwe from the exec_q */
+		param->hwe = xe_gt_hw_engine(param->exec_q->gt, param->exec_q->class,
+					     param->engine_instance, true);
+	} else {
+		struct xe_hw_engine *hwe;
+		enum xe_hw_engine_id id;
+
+		/* Else just get the first hwe attached to the oa unit */
+		for_each_gt(gt, oa->xe, i) {
+			for_each_hw_engine(hwe, gt, id) {
+				if (xe_oa_unit_id(hwe) == param->oa_unit_id) {
+					param->hwe = hwe;
+					goto out;
+				}
+			}
+		}
+	}
+out:
+	if (!param->hwe || xe_oa_unit_id(param->hwe) != param->oa_unit_id) {
+		drm_dbg(&oa->xe->drm, "Unable to find hwe (%d, %d) for OA unit ID %d\n",
+			param->exec_q ? param->exec_q->class : -1,
+			param->engine_instance, param->oa_unit_id);
+		ret = -EINVAL;
+	}
+
+	return ret;
+}
+
+static int xe_oa_set_prop_oa_unit_id(struct xe_oa *oa, u64 value,
+				     struct xe_oa_open_param *param)
+{
+	if (value >= oa->oa_unit_ids) {
+		drm_dbg(&oa->xe->drm, "OA unit ID out of range %lld\n", value);
+		return -EINVAL;
+	}
+	param->oa_unit_id = value;
+	return 0;
+}
+
+static int xe_oa_set_prop_sample_oa(struct xe_oa *oa, u64 value,
+				    struct xe_oa_open_param *param)
+{
+	param->sample = value;
+	return 0;
+}
+
+static int xe_oa_set_prop_metric_set(struct xe_oa *oa, u64 value,
+				     struct xe_oa_open_param *param)
+{
+	param->metric_set = value;
+	return 0;
+}
+
+static int xe_oa_set_prop_oa_format(struct xe_oa *oa, u64 value,
+				    struct xe_oa_open_param *param)
+{
+	int ret = decode_oa_format(oa, value, &param->oa_format);
+
+	if (ret) {
+		drm_dbg(&oa->xe->drm, "Unsupported OA report format %#llx\n", value);
+		return ret;
+	}
+	return 0;
+}
+
+static int xe_oa_set_prop_oa_exponent(struct xe_oa *oa, u64 value,
+				      struct xe_oa_open_param *param)
+{
+#define OA_EXPONENT_MAX 31
+
+	if (value > OA_EXPONENT_MAX) {
+		drm_dbg(&oa->xe->drm, "OA timer exponent too high (> %u)\n", OA_EXPONENT_MAX);
+		return -EINVAL;
+	}
+	param->period_exponent = value;
+	return 0;
+}
+
+static int xe_oa_set_prop_disabled(struct xe_oa *oa, u64 value,
+				   struct xe_oa_open_param *param)
+{
+	param->disabled = value;
+	return 0;
+}
+
+static int xe_oa_set_prop_exec_queue_id(struct xe_oa *oa, u64 value,
+					struct xe_oa_open_param *param)
+{
+	param->exec_queue_id = value;
+	return 0;
+}
+
+static int xe_oa_set_prop_engine_instance(struct xe_oa *oa, u64 value,
+					  struct xe_oa_open_param *param)
+{
+	param->engine_instance = value;
+	return 0;
+}
+
+typedef int (*xe_oa_set_property_fn)(struct xe_oa *oa, u64 value,
+				     struct xe_oa_open_param *param);
+static const xe_oa_set_property_fn xe_oa_set_property_funcs[] = {
+	[DRM_XE_OA_PROPERTY_OA_UNIT_ID] = xe_oa_set_prop_oa_unit_id,
+	[DRM_XE_OA_PROPERTY_SAMPLE_OA] = xe_oa_set_prop_sample_oa,
+	[DRM_XE_OA_PROPERTY_OA_METRIC_SET] = xe_oa_set_prop_metric_set,
+	[DRM_XE_OA_PROPERTY_OA_FORMAT] = xe_oa_set_prop_oa_format,
+	[DRM_XE_OA_PROPERTY_OA_EXPONENT] = xe_oa_set_prop_oa_exponent,
+	[DRM_XE_OA_PROPERTY_OA_DISABLED] = xe_oa_set_prop_disabled,
+	[DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID] = xe_oa_set_prop_exec_queue_id,
+	[DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE] = xe_oa_set_prop_engine_instance,
+};
+
+static int xe_oa_user_ext_set_property(struct xe_oa *oa, u64 extension,
+				       struct xe_oa_open_param *param)
+{
+	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(oa->xe, err))
+		return -EFAULT;
+
+	if (XE_IOCTL_DBG(oa->xe, ext.property >= ARRAY_SIZE(xe_oa_set_property_funcs)) ||
+	    XE_IOCTL_DBG(oa->xe, ext.pad))
+		return -EINVAL;
+
+	idx = array_index_nospec(ext.property, ARRAY_SIZE(xe_oa_set_property_funcs));
+	return xe_oa_set_property_funcs[idx](oa, ext.value, param);
+}
+
+typedef int (*xe_oa_user_extension_fn)(struct xe_oa *oa, u64 extension,
+				       struct xe_oa_open_param *param);
+static const xe_oa_user_extension_fn xe_oa_user_extension_funcs[] = {
+	[DRM_XE_OA_EXTENSION_SET_PROPERTY] = xe_oa_user_ext_set_property,
+};
+
+static int xe_oa_user_extensions(struct xe_oa *oa, u64 extension, int ext_number,
+				 struct xe_oa_open_param *param)
+{
+	u64 __user *address = u64_to_user_ptr(extension);
+	struct drm_xe_user_extension ext;
+	int err;
+	u32 idx;
+
+	if (XE_IOCTL_DBG(oa->xe, ext_number >= DRM_XE_OA_PROPERTY_MAX))
+		return -E2BIG;
+
+	err = __copy_from_user(&ext, address, sizeof(ext));
+	if (XE_IOCTL_DBG(oa->xe, err))
+		return -EFAULT;
+
+	if (XE_IOCTL_DBG(oa->xe, ext.pad) ||
+	    XE_IOCTL_DBG(oa->xe, ext.name >= ARRAY_SIZE(xe_oa_user_extension_funcs)))
+		return -EINVAL;
+
+	idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_oa_user_extension_funcs));
+	err = xe_oa_user_extension_funcs[idx](oa, extension, param);
+	if (XE_IOCTL_DBG(oa->xe, err))
+		return err;
+
+	if (ext.next_extension)
+		return xe_oa_user_extensions(oa, ext.next_extension, ++ext_number, param);
+
+	return 0;
+}
+
+int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
+{
+	struct xe_oa *oa = &to_xe_device(dev)->oa;
+	struct xe_file *xef = to_xe_file(file);
+	struct xe_oa_open_param param = {};
+	const struct xe_oa_format *f;
+	bool privileged_op = true;
+	int ret;
+
+	if (!oa->xe) {
+		drm_dbg(&oa->xe->drm, "xe oa interface not available for this system\n");
+		return -ENODEV;
+	}
+
+	ret = xe_oa_user_extensions(oa, (u64)data, 0, &param);
+	if (ret)
+		return ret;
+
+	if (param.exec_queue_id > 0) {
+		param.exec_q = xe_exec_queue_lookup(xef, param.exec_queue_id);
+		if (XE_IOCTL_DBG(oa->xe, !param.exec_q))
+			return -ENOENT;
+	}
+
+	/*
+	 * Query based sampling (using MI_REPORT_PERF_COUNT) with OAR/OAC,
+	 * without global stream access, can be an unprivileged operation
+	 */
+	if (param.exec_q && !param.sample)
+		privileged_op = false;
+
+	if (privileged_op && xe_perf_stream_paranoid && !perfmon_capable()) {
+		drm_dbg(&oa->xe->drm, "Insufficient privileges to open xe perf stream\n");
+		ret = -EACCES;
+		goto err_exec_q;
+	}
+
+	if (!param.exec_q && !param.sample) {
+		drm_dbg(&oa->xe->drm, "Only OA report sampling supported\n");
+		ret = -EINVAL;
+		goto err_exec_q;
+	}
+
+	ret = xe_oa_assign_hwe(oa, &param);
+	if (ret)
+		goto err_exec_q;
+
+	f = &oa->oa_formats[param.oa_format];
+	if (!param.oa_format || !f->size ||
+	    !engine_supports_oa_format(param.hwe, f->type)) {
+		drm_dbg(&oa->xe->drm, "Invalid OA format %d type %d size %d for class %d\n",
+			param.oa_format, f->type, f->size, param.hwe->class);
+		ret = -EINVAL;
+		goto err_exec_q;
+	}
+
+	if (param.period_exponent > 0) {
+		u64 oa_period, oa_freq_hz;
+
+		/* Requesting samples from OAG buffer is a privileged operation */
+		if (!param.sample) {
+			drm_dbg(&oa->xe->drm, "OA_EXPONENT specified without SAMPLE_OA\n");
+			ret = -EINVAL;
+			goto err_exec_q;
+		}
+		oa_period = oa_exponent_to_ns(param.hwe->gt, param.period_exponent);
+		oa_freq_hz = div64_u64(NSEC_PER_SEC, oa_period);
+		drm_dbg(&oa->xe->drm, "Using periodic sampling freq %lld Hz\n", oa_freq_hz);
+	}
+err_exec_q:
+	if (ret < 0 && param.exec_q)
+		xe_exec_queue_put(param.exec_q);
+	return ret;
+}
+
 static bool xe_oa_is_valid_flex_addr(struct xe_oa *oa, u32 addr)
 {
 	static const struct xe_reg flex_eu_regs[] = {
diff --git a/drivers/gpu/drm/xe/xe_oa.h b/drivers/gpu/drm/xe/xe_oa.h
index 4a4e3b2b70fcd..6308aa1829bd7 100644
--- a/drivers/gpu/drm/xe/xe_oa.h
+++ b/drivers/gpu/drm/xe/xe_oa.h
@@ -11,14 +11,20 @@
 struct drm_device;
 struct drm_file;
 struct xe_device;
+struct xe_gt;
+struct xe_hw_engine;
 
 int xe_oa_init(struct xe_device *xe);
 void xe_oa_fini(struct xe_device *xe);
 void xe_oa_register(struct xe_device *xe);
 void xe_oa_unregister(struct xe_device *xe);
+int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data,
+			    struct drm_file *file);
 int xe_oa_add_config_ioctl(struct drm_device *dev, void *data,
 			   struct drm_file *file);
 int xe_oa_remove_config_ioctl(struct drm_device *dev, void *data,
 			      struct drm_file *file);
+u32 xe_oa_timestamp_frequency(struct xe_gt *gt);
+u16 xe_oa_unit_id(struct xe_hw_engine *hwe);
 
 #endif
diff --git a/drivers/gpu/drm/xe/xe_perf.c b/drivers/gpu/drm/xe/xe_perf.c
index 2aee4c7989486..2c0615481b7df 100644
--- a/drivers/gpu/drm/xe/xe_perf.c
+++ b/drivers/gpu/drm/xe/xe_perf.c
@@ -16,6 +16,8 @@ static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_perf_param *arg,
 		       struct drm_file *file)
 {
 	switch (arg->perf_op) {
+	case DRM_XE_PERF_OP_STREAM_OPEN:
+		return xe_oa_stream_open_ioctl(dev, (void *)arg->param, file);
 	case DRM_XE_PERF_OP_ADD_CONFIG:
 		return xe_oa_add_config_ioctl(dev, (void *)arg->param, file);
 	case DRM_XE_PERF_OP_REMOVE_CONFIG:
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index 0632ebf209c35..502302f3c2c73 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1421,6 +1421,76 @@ enum drm_xe_oa_format_type {
 	DRM_XE_OA_FMT_TYPE_PEC,
 };
 
+/**
+ * enum drm_xe_oa_property_id - OA stream property id's
+ *
+ * Stream params are specified as a chain of @drm_xe_ext_set_property
+ * struct's, with @property values from enum @drm_xe_oa_property_id and
+ * @drm_xe_user_extension base.name set to @DRM_XE_OA_EXTENSION_SET_PROPERTY.
+ * @param field in struct @drm_xe_perf_param points to the first
+ * @drm_xe_ext_set_property struct.
+ */
+enum drm_xe_oa_property_id {
+#define DRM_XE_OA_EXTENSION_SET_PROPERTY	0
+	/**
+	 * @DRM_XE_OA_PROPERTY_OA_UNIT_ID: ID of the OA unit on which to open
+	 * the OA stream, see @oa_unit_id in 'struct
+	 * drm_xe_query_oa_units'. Defaults to 0 if not provided.
+	 */
+	DRM_XE_OA_PROPERTY_OA_UNIT_ID = 1,
+
+	/**
+	 * @DRM_XE_OA_PROPERTY_SAMPLE_OA: A value of 1 requests inclusion of raw
+	 * OA unit reports or stream samples in a global buffer attached to an
+	 * OA unit.
+	 */
+	DRM_XE_OA_PROPERTY_SAMPLE_OA,
+
+	/**
+	 * @DRM_XE_OA_PROPERTY_OA_METRIC_SET: OA metrics defining contents of OA
+	 * reports, previously added via @DRM_XE_PERF_OP_ADD_CONFIG.
+	 */
+	DRM_XE_OA_PROPERTY_OA_METRIC_SET,
+
+	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: Perf counter report format */
+	DRM_XE_OA_PROPERTY_OA_FORMAT,
+	/**
+	 * OA_FORMAT's are specified the same way as in Bspec, in terms of
+	 * the following quantities: a. enum @drm_xe_oa_format_type
+	 * b. Counter select c. Counter size and d. BC report
+	 */
+#define DRM_XE_OA_FORMAT_MASK_FMT_TYPE		(0xff << 0)
+#define DRM_XE_OA_FORMAT_MASK_COUNTER_SEL	(0xff << 8)
+#define DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE	(0xff << 16)
+#define DRM_XE_OA_FORMAT_MASK_BC_REPORT		(0xff << 24)
+
+	/**
+	 * @DRM_XE_OA_PROPERTY_OA_EXPONENT: Requests periodic OA unit sampling
+	 * with sampling frequency proportional to 2^(period_exponent + 1)
+	 */
+	DRM_XE_OA_PROPERTY_OA_EXPONENT,
+
+	/**
+	 * @DRM_XE_OA_PROPERTY_OA_DISABLED: A value of 1 will open the OA
+	 * stream in a DISABLED state (see @DRM_XE_PERF_IOCTL_ENABLE).
+	 */
+	DRM_XE_OA_PROPERTY_OA_DISABLED,
+
+	/**
+	 * @DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID: Open the stream for a specific
+	 * @exec_queue_id. Perf queries can be executed on this exec queue.
+	 */
+	DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID,
+
+	/**
+	 * @DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE: Optional engine instance to
+	 * pass along with @DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID or will default to 0.
+	 */
+	DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE,
+
+	DRM_XE_OA_PROPERTY_MAX /* non-ABI */
+};
+
 /**
  * struct drm_xe_oa_config - OA metric configuration
  *
-- 
2.41.0


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

* [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG)
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (5 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-09  6:23   ` Lionel Landwerlin
  2024-02-08  5:49 ` [PATCH 08/16] drm/xe/oa/uapi: Expose OA stream fd Ashutosh Dixit
                   ` (16 subsequent siblings)
  23 siblings, 1 reply; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Implement majority of OA stream initialization (as part of OA stream open)
ioctl). OAG buffer is allocated for receiving perf counter samples from
HW. OAG unit is initialized and the selected OA metric configuration is
programmed into OAG unit HW using a command/batch buffer.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h |   3 +
 drivers/gpu/drm/xe/xe_oa.c           | 391 +++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_oa_types.h     |  79 ++++++
 3 files changed, 473 insertions(+)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index 15ac2d284d48f..853d6f9db8a99 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -134,6 +134,8 @@
 
 #define SQCNT1					XE_REG_MCR(0x8718)
 #define XELPMP_SQCNT1				XE_REG(0x8718)
+#define   SQCNT1_PMON_ENABLE			REG_BIT(30)
+#define   SQCNT1_OABPC				REG_BIT(29)
 #define   ENFORCE_RAR				REG_BIT(23)
 
 #define XEHP_SQCM				XE_REG_MCR(0x8724)
@@ -357,6 +359,7 @@
 #define ROW_CHICKEN				XE_REG_MCR(0xe4f0, XE_REG_OPTION_MASKED)
 #define   UGM_BACKUP_MODE			REG_BIT(13)
 #define   MDQ_ARBITRATION_MODE			REG_BIT(12)
+#define   STALL_DOP_GATING_DISABLE		REG_BIT(5)
 #define   EARLY_EOT_DIS				REG_BIT(1)
 
 #define ROW_CHICKEN2				XE_REG_MCR(0xe4f4, XE_REG_OPTION_MASKED)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 915dd71454c7c..f3270fc30065f 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -5,17 +5,25 @@
 
 #include <linux/nospec.h>
 
+#include <drm/drm_drv.h>
 #include <drm/xe_drm.h>
 
+#include "instructions/xe_mi_commands.h"
 #include "regs/xe_gt_regs.h"
 #include "regs/xe_oa_regs.h"
 #include "xe_device.h"
 #include "xe_exec_queue.h"
+#include "xe_bb.h"
+#include "xe_bo.h"
 #include "xe_gt.h"
+#include "xe_gt_mcr.h"
 #include "xe_mmio.h"
 #include "xe_oa.h"
+#include "xe_sched_job.h"
 #include "xe_perf.h"
 
+#define DEFAULT_POLL_FREQUENCY_HZ 200
+#define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
 #define XE_OA_UNIT_INVALID U32_MAX
 
 struct xe_oa_reg {
@@ -53,6 +61,13 @@ struct xe_oa_open_param {
 	struct xe_hw_engine *hwe;
 };
 
+struct xe_oa_config_bo {
+	struct llist_node node;
+
+	struct xe_oa_config *oa_config;
+	struct xe_bb *bb;
+};
+
 #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
 
 static const struct xe_oa_format oa_formats[] = {
@@ -95,6 +110,378 @@ static void xe_oa_config_put(struct xe_oa_config *oa_config)
 	kref_put(&oa_config->ref, xe_oa_config_release);
 }
 
+static struct xe_oa_config *xe_oa_config_get(struct xe_oa_config *oa_config)
+{
+	return kref_get_unless_zero(&oa_config->ref) ? oa_config : NULL;
+}
+
+static struct xe_oa_config *xe_oa_get_oa_config(struct xe_oa *oa, int metrics_set)
+{
+	struct xe_oa_config *oa_config;
+
+	rcu_read_lock();
+	oa_config = idr_find(&oa->metrics_idr, metrics_set);
+	if (oa_config)
+		oa_config = xe_oa_config_get(oa_config);
+	rcu_read_unlock();
+
+	return oa_config;
+}
+
+static void free_oa_config_bo(struct xe_oa_config_bo *oa_bo)
+{
+	xe_oa_config_put(oa_bo->oa_config);
+	xe_bb_free(oa_bo->bb, NULL);
+	kfree(oa_bo);
+}
+
+static const struct xe_oa_regs *__oa_regs(struct xe_oa_stream *stream)
+{
+	return &stream->hwe->oa_unit->regs;
+}
+
+static int xe_oa_submit_bb(struct xe_oa_stream *stream, struct xe_bb *bb)
+{
+	struct xe_sched_job *job;
+	struct dma_fence *fence;
+	long timeout;
+	int err = 0;
+
+	/* Kernel configuration is issued on stream->k_exec_q, not stream->exec_q */
+	job = xe_bb_create_job(stream->k_exec_q, bb);
+	if (IS_ERR(job)) {
+		err = PTR_ERR(job);
+		goto exit;
+	}
+
+	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)
+		err = timeout;
+	else if (!timeout)
+		err = -ETIME;
+exit:
+	return err;
+}
+
+static void write_cs_mi_lri(struct xe_bb *bb, const struct xe_oa_reg *reg_data, u32 n_regs)
+{
+	u32 i;
+
+#define MI_LOAD_REGISTER_IMM_MAX_REGS (126)
+
+	for (i = 0; i < n_regs; i++) {
+		if ((i % MI_LOAD_REGISTER_IMM_MAX_REGS) == 0) {
+			u32 n_lri = min_t(u32, n_regs - i,
+					  MI_LOAD_REGISTER_IMM_MAX_REGS);
+
+			bb->cs[bb->len++] = MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(n_lri);
+		}
+		bb->cs[bb->len++] = reg_data[i].addr.addr;
+		bb->cs[bb->len++] = reg_data[i].value;
+	}
+}
+
+static int num_lri_dwords(int num_regs)
+{
+	int count = 0;
+
+	if (num_regs > 0) {
+		count += DIV_ROUND_UP(num_regs, MI_LOAD_REGISTER_IMM_MAX_REGS);
+		count += num_regs * 2;
+	}
+
+	return count;
+}
+
+static void xe_oa_free_oa_buffer(struct xe_oa_stream *stream)
+{
+	xe_bo_unpin_map_no_vm(stream->oa_buffer.bo);
+}
+
+static void xe_oa_free_configs(struct xe_oa_stream *stream)
+{
+	struct xe_oa_config_bo *oa_bo, *tmp;
+
+	xe_oa_config_put(stream->oa_config);
+	llist_for_each_entry_safe(oa_bo, tmp, stream->oa_config_bos.first, node)
+		free_oa_config_bo(oa_bo);
+}
+
+#define HAS_OA_BPC_REPORTING(xe) (GRAPHICS_VERx100(xe) >= 1255)
+
+static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
+{
+	u32 sqcnt1;
+
+	/*
+	 * Wa_1508761755:xehpsdv, dg2
+	 * Enable thread stall DOP gating and EU DOP gating.
+	 */
+	if (stream->oa->xe->info.platform == XE_DG2) {
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
+					  _MASKED_BIT_DISABLE(STALL_DOP_GATING_DISABLE));
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
+					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
+	}
+
+	/* Make sure we disable noa to save power. */
+	xe_mmio_rmw32(stream->gt, RPM_CONFIG1, GT_NOA_ENABLE, 0);
+
+	sqcnt1 = SQCNT1_PMON_ENABLE |
+		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
+
+	/* Reset PMON Enable to save power. */
+	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, sqcnt1, 0);
+}
+
+static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream)
+{
+	struct xe_bo *bo;
+
+	BUILD_BUG_ON_NOT_POWER_OF_2(XE_OA_BUFFER_SIZE);
+	BUILD_BUG_ON(XE_OA_BUFFER_SIZE < SZ_128K || XE_OA_BUFFER_SIZE > SZ_16M);
+
+	bo = xe_bo_create_pin_map(stream->oa->xe, stream->gt->tile, NULL,
+				  XE_OA_BUFFER_SIZE, ttm_bo_type_kernel,
+				  XE_BO_CREATE_SYSTEM_BIT | XE_BO_CREATE_GGTT_BIT);
+	if (IS_ERR(bo))
+		return PTR_ERR(bo);
+
+	stream->oa_buffer.bo = bo;
+	stream->oa_buffer.vaddr = bo->vmap.vaddr;
+	return 0;
+}
+
+static struct xe_oa_config_bo *
+__xe_oa_alloc_config_buffer(struct xe_oa_stream *stream, struct xe_oa_config *oa_config)
+{
+	struct xe_oa_config_bo *oa_bo;
+	size_t config_length;
+	struct xe_bb *bb;
+
+	oa_bo = kzalloc(sizeof(*oa_bo), GFP_KERNEL);
+	if (!oa_bo)
+		return ERR_PTR(-ENOMEM);
+
+	config_length = num_lri_dwords(oa_config->regs_len);
+	config_length = ALIGN(sizeof(u32) * config_length, XE_PAGE_SIZE) / sizeof(u32);
+
+	bb = xe_bb_new(stream->gt, config_length, false);
+	if (IS_ERR(bb))
+		goto err_free;
+
+	write_cs_mi_lri(bb, oa_config->regs, oa_config->regs_len);
+
+	oa_bo->bb = bb;
+	oa_bo->oa_config = xe_oa_config_get(oa_config);
+	llist_add(&oa_bo->node, &stream->oa_config_bos);
+
+	return oa_bo;
+err_free:
+	kfree(oa_bo);
+	return ERR_CAST(bb);
+}
+
+static struct xe_oa_config_bo *xe_oa_alloc_config_buffer(struct xe_oa_stream *stream)
+{
+	struct xe_oa_config *oa_config = stream->oa_config;
+	struct xe_oa_config_bo *oa_bo;
+
+	/* Look for the buffer in the already allocated BOs attached to the stream */
+	llist_for_each_entry(oa_bo, stream->oa_config_bos.first, node) {
+		if (oa_bo->oa_config == oa_config &&
+		    memcmp(oa_bo->oa_config->uuid, oa_config->uuid,
+			   sizeof(oa_config->uuid)) == 0)
+			goto out;
+	}
+
+	oa_bo = __xe_oa_alloc_config_buffer(stream, oa_config);
+out:
+	return oa_bo;
+}
+
+static int xe_oa_emit_oa_config(struct xe_oa_stream *stream)
+{
+#define NOA_PROGRAM_ADDITIONAL_DELAY_US 500
+	struct xe_oa_config_bo *oa_bo;
+	int err, us = NOA_PROGRAM_ADDITIONAL_DELAY_US;
+
+	oa_bo = xe_oa_alloc_config_buffer(stream);
+	if (IS_ERR(oa_bo)) {
+		err = PTR_ERR(oa_bo);
+		goto exit;
+	}
+
+	err = xe_oa_submit_bb(stream, oa_bo->bb);
+
+	/* Additional empirical delay needed for NOA programming after registers are written */
+	usleep_range(us, 2 * us);
+exit:
+	return err;
+}
+
+static u32 oag_report_ctx_switches(const struct xe_oa_stream *stream)
+{
+	/* If user didn't require OA reports, ask HW not to emit ctx switch reports */
+	return _MASKED_FIELD(OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS,
+			     stream->sample ?
+			     0 : OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS);
+}
+
+static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
+{
+	u32 oa_debug, sqcnt1;
+
+	/*
+	 * Wa_1508761755:xehpsdv, dg2
+	 * EU NOA signals behave incorrectly if EU clock gating is enabled.
+	 * Disable thread stall DOP gating and EU DOP gating.
+	 */
+	if (stream->oa->xe->info.platform == XE_DG2) {
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
+					  _MASKED_BIT_ENABLE(STALL_DOP_GATING_DISABLE));
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
+					  _MASKED_BIT_ENABLE(DISABLE_DOP_GATING));
+	}
+
+	/* Disable clk ratio reports */
+	oa_debug = OAG_OA_DEBUG_DISABLE_CLK_RATIO_REPORTS |
+		OAG_OA_DEBUG_INCLUDE_CLK_RATIO;
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_debug,
+			_MASKED_BIT_ENABLE(oa_debug) |
+			oag_report_ctx_switches(stream));
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctx_ctrl, stream->periodic ?
+			(OAG_OAGLBCTXCTRL_COUNTER_RESUME |
+			 OAG_OAGLBCTXCTRL_TIMER_ENABLE |
+			 REG_FIELD_PREP(OAG_OAGLBCTXCTRL_TIMER_PERIOD_MASK,
+					stream->period_exponent)) : 0);
+
+	/*
+	 * Initialize Super Queue Internal Cnt Register
+	 * Set PMON Enable in order to collect valid metrics
+	 * Enable bytes per clock reporting
+	 */
+	sqcnt1 = SQCNT1_PMON_ENABLE |
+		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
+
+	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, 0, sqcnt1);
+
+	return xe_oa_emit_oa_config(stream);
+}
+
+static int xe_oa_stream_init(struct xe_oa_stream *stream,
+			     struct xe_oa_open_param *param)
+{
+	struct xe_oa_unit *u = param->hwe->oa_unit;
+	struct xe_gt *gt = param->hwe->gt;
+	int ret;
+
+	stream->exec_q = param->exec_q;
+	stream->poll_period_ns = DEFAULT_POLL_PERIOD_NS;
+	stream->hwe = param->hwe;
+	stream->gt = stream->hwe->gt;
+	stream->oa_buffer.format = &stream->oa->oa_formats[param->oa_format];
+
+	stream->sample = param->sample;
+	stream->periodic = param->period_exponent > 0;
+	stream->period_exponent = param->period_exponent;
+
+	stream->oa_config = xe_oa_get_oa_config(stream->oa, param->metric_set);
+	if (!stream->oa_config) {
+		drm_dbg(&stream->oa->xe->drm, "Invalid OA config id=%i\n", param->metric_set);
+		ret = -EINVAL;
+		goto exit;
+	}
+
+	ret = xe_oa_alloc_oa_buffer(stream);
+	if (ret)
+		goto err_free_configs;
+
+	/* Take runtime pm ref and forcewake to disable RC6 */
+	xe_device_mem_access_get(stream->oa->xe);
+	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+
+	stream->k_exec_q = xe_exec_queue_create(stream->oa->xe, NULL,
+						BIT(stream->hwe->logical_instance), 1,
+						stream->hwe, EXEC_QUEUE_FLAG_KERNEL, 0);
+	if (IS_ERR(stream->k_exec_q)) {
+		ret = PTR_ERR(stream->k_exec_q);
+		drm_err(&stream->oa->xe->drm, "gt%d, hwe %s, xe_exec_queue_create failed=%d",
+			stream->gt->info.id, stream->hwe->name, ret);
+		goto err_fw_put;
+	}
+
+	ret = xe_oa_enable_metric_set(stream);
+	if (ret) {
+		drm_dbg(&stream->oa->xe->drm, "Unable to enable metric set\n");
+		goto err_put_k_exec_q;
+	}
+
+	drm_dbg(&stream->oa->xe->drm, "opening stream oa config uuid=%s\n",
+		stream->oa_config->uuid);
+
+	WRITE_ONCE(u->exclusive_stream, stream);
+
+	spin_lock_init(&stream->oa_buffer.ptr_lock);
+	mutex_init(&stream->stream_lock);
+
+	return 0;
+
+err_put_k_exec_q:
+	xe_oa_disable_metric_set(stream);
+	xe_exec_queue_put(stream->k_exec_q);
+err_fw_put:
+	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+	xe_device_mem_access_put(stream->oa->xe);
+	xe_oa_free_oa_buffer(stream);
+err_free_configs:
+	xe_oa_free_configs(stream);
+exit:
+	return ret;
+}
+
+static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
+					  struct xe_oa_open_param *param)
+{
+	struct xe_oa_stream *stream;
+	int stream_fd;
+	int ret;
+
+	/* We currently only allow exclusive access */
+	if (param->hwe->oa_unit->exclusive_stream) {
+		drm_dbg(&oa->xe->drm, "OA unit already in use\n");
+		ret = -EBUSY;
+		goto exit;
+	}
+
+	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	if (!stream) {
+		ret = -ENOMEM;
+		goto exit;
+	}
+
+	stream->oa = oa;
+	ret = xe_oa_stream_init(stream, param);
+	if (ret)
+		goto err_free;
+
+	/* Hold a reference on the drm device till stream_fd is released */
+	drm_dev_get(&stream->oa->xe->drm);
+
+	return stream_fd;
+err_free:
+	kfree(stream);
+exit:
+	return ret;
+}
+
 /*
  * OA timestamp frequency = CS timestamp frequency in most platforms. On some
  * platforms OA unit ignores the CTC_SHIFT and the 2 timestamps differ. In such
@@ -416,6 +803,10 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data, struct drm_file
 		oa_freq_hz = div64_u64(NSEC_PER_SEC, oa_period);
 		drm_dbg(&oa->xe->drm, "Using periodic sampling freq %lld Hz\n", oa_freq_hz);
 	}
+
+	mutex_lock(&param.hwe->gt->oa.gt_lock);
+	ret = xe_oa_stream_open_ioctl_locked(oa, &param);
+	mutex_unlock(&param.hwe->gt->oa.gt_lock);
 err_exec_q:
 	if (ret < 0 && param.exec_q)
 		xe_exec_queue_put(param.exec_q);
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index 594e38c6328d2..539830f5f0b24 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -14,6 +14,8 @@
 #include <drm/xe_drm.h>
 #include "regs/xe_reg_defs.h"
 
+#define XE_OA_BUFFER_SIZE SZ_16M
+
 enum xe_oa_report_header {
 	HDR_32_BIT = 0,
 	HDR_64_BIT,
@@ -141,4 +143,81 @@ struct xe_oa {
 	/** @oa_unit_ids: tracks oa unit ids assigned across gt's */
 	u16 oa_unit_ids;
 };
+
+/** @oa_buffer: State of the stream OA buffer */
+struct oa_buffer {
+	/** @format: data format */
+	const struct xe_oa_format *format;
+
+	/** @format: xe_bo backing the OA buffer */
+	struct xe_bo *bo;
+
+	/** @vaddr: mapped vaddr of the OA buffer */
+	u8 *vaddr;
+
+	/** @ptr_lock: Lock protecting reads/writes to head/tail pointers */
+	spinlock_t ptr_lock;
+
+	/** @head: Cached head to read from */
+	u32 head;
+
+	/** @tail: The last verified cached tail where HW has completed writing */
+	u32 tail;
+};
+
+/**
+ * struct xe_oa_stream - state for a single open stream FD
+ */
+struct xe_oa_stream {
+	/** @oa: xe_oa backpointer */
+	struct xe_oa *oa;
+
+	/** @gt: gt associated with the oa stream */
+	struct xe_gt *gt;
+
+	/** @hwe: hardware engine associated with this oa stream */
+	struct xe_hw_engine *hwe;
+
+	/** @lock: Lock serializing stream operations */
+	struct mutex stream_lock;
+
+	/** @sample: true if DRM_XE_OA_PROP_SAMPLE_OA is provided */
+	bool sample;
+
+	/** @exec_q: Exec queue corresponding to DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID */
+	struct xe_exec_queue *exec_q;
+
+	/** @k_exec_q: kernel exec_q used for OA programming batch submissions */
+	struct xe_exec_queue *k_exec_q;
+
+	/** @enabled: Whether the stream is currently enabled */
+	bool enabled;
+
+	/** @oa_config: OA configuration used by the stream */
+	struct xe_oa_config *oa_config;
+
+	/** @oa_config_bos: List of struct @xe_oa_config_bo's */
+	struct llist_head oa_config_bos;
+
+	/** @poll_check_timer: Timer to periodically check for data in the OA buffer */
+	struct hrtimer poll_check_timer;
+
+	/** @poll_wq: Wait queue for waiting for OA data to be available */
+	wait_queue_head_t poll_wq;
+
+	/** @pollin: Whether there is data available to read */
+	bool pollin;
+
+	/** @periodic: Whether periodic sampling is currently enabled */
+	bool periodic;
+
+	/** @period_exponent: OA unit sampling frequency is derived from this */
+	int period_exponent;
+
+	/** @oa_buffer: OA buffer for the stream */
+	struct oa_buffer oa_buffer;
+
+	/** @poll_period_ns: hrtimer period for checking OA buffer for available data */
+	u64 poll_period_ns;
+};
 #endif
-- 
2.41.0


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

* [PATCH 08/16] drm/xe/oa/uapi: Expose OA stream fd
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (6 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG) Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 09/16] drm/xe/oa/uapi: Read file_operation Ashutosh Dixit
                   ` (15 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

The OA stream open perf op returns an fd with its own file_operations for
the newly initialized OA stream. These file_operations allow userspace to
enable or disable the stream, as well as apply a different metric
configuration for the OA stream. Userspace can also poll for data
availability. OA stream initialization is completed in this commit by
enabling the OA stream. When sampling is enabled this starts a hrtimer
which periodically checks for data availablility.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_oa.c | 367 +++++++++++++++++++++++++++++++++++++
 1 file changed, 367 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index f3270fc30065f..abcdf22819158 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -3,7 +3,9 @@
  * Copyright © 2023 Intel Corporation
  */
 
+#include <linux/anon_inodes.h>
 #include <linux/nospec.h>
+#include <linux/poll.h>
 
 #include <drm/drm_drv.h>
 #include <drm/xe_drm.h>
@@ -22,6 +24,7 @@
 #include "xe_sched_job.h"
 #include "xe_perf.h"
 
+#define OA_TAKEN(tail, head)	(((tail) - (head)) & (XE_OA_BUFFER_SIZE - 1))
 #define DEFAULT_POLL_FREQUENCY_HZ 200
 #define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
 #define XE_OA_UNIT_INVALID U32_MAX
@@ -140,6 +143,202 @@ static const struct xe_oa_regs *__oa_regs(struct xe_oa_stream *stream)
 	return &stream->hwe->oa_unit->regs;
 }
 
+static u32 xe_oa_hw_tail_read(struct xe_oa_stream *stream)
+{
+	return xe_mmio_read32(stream->gt, __oa_regs(stream)->oa_tail_ptr) &
+		OAG_OATAILPTR_MASK;
+}
+
+#define oa_report_header_64bit(__s) \
+	((__s)->oa_buffer.format->header == HDR_64_BIT)
+
+static u64 oa_report_id(struct xe_oa_stream *stream, void *report)
+{
+	return oa_report_header_64bit(stream) ? *(u64 *)report : *(u32 *)report;
+}
+
+static u64 oa_timestamp(struct xe_oa_stream *stream, void *report)
+{
+	return oa_report_header_64bit(stream) ?
+		*((u64 *)report + 1) :
+		*((u32 *)report + 1);
+}
+
+static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
+{
+	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
+	int report_size = stream->oa_buffer.format->size;
+	u32 tail, hw_tail;
+	unsigned long flags;
+	bool pollin;
+	u32 partial_report_size;
+
+	spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
+
+	hw_tail = xe_oa_hw_tail_read(stream);
+	hw_tail -= gtt_offset;
+
+	/*
+	 * The tail pointer increases in 64 byte (cacheline size), not in report_size
+	 * increments. Also report size may not be a power of 2. Compute potential
+	 * partially landed report in OA buffer.
+	 */
+	partial_report_size = OA_TAKEN(hw_tail, stream->oa_buffer.tail);
+	partial_report_size %= report_size;
+
+	/* Subtract partial amount off the tail */
+	hw_tail = OA_TAKEN(hw_tail, partial_report_size);
+
+	tail = hw_tail;
+
+	/*
+	 * Walk the stream backward until we find a report with report id and timestamp
+	 * not 0. We can't tell whether a report has fully landed in memory before the
+	 * report id and timestamp of the following report have landed.
+	 *
+	 * This is assuming that the writes of the OA unit land in memory in the order
+	 * they were written.  If not : (╯°□°)╯︵ ┻━┻
+	 */
+	while (OA_TAKEN(tail, stream->oa_buffer.tail) >= report_size) {
+		void *report = stream->oa_buffer.vaddr + tail;
+
+		if (oa_report_id(stream, report) || oa_timestamp(stream, report))
+			break;
+
+		tail = OA_TAKEN(tail, report_size);
+	}
+
+	if (OA_TAKEN(hw_tail, tail) > report_size)
+		drm_dbg(&stream->oa->xe->drm,
+			"unlanded report(s) head=0x%x tail=0x%x hw_tail=0x%x\n",
+			stream->oa_buffer.head, tail, hw_tail);
+
+	stream->oa_buffer.tail = tail;
+
+	pollin = OA_TAKEN(stream->oa_buffer.tail,
+			  stream->oa_buffer.head) >= report_size;
+
+	spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
+
+	return pollin;
+}
+
+static enum hrtimer_restart xe_oa_poll_check_timer_cb(struct hrtimer *hrtimer)
+{
+	struct xe_oa_stream *stream =
+		container_of(hrtimer, typeof(*stream), poll_check_timer);
+
+	if (xe_oa_buffer_check_unlocked(stream)) {
+		stream->pollin = true;
+		wake_up(&stream->poll_wq);
+	}
+
+	hrtimer_forward_now(hrtimer, ns_to_ktime(stream->poll_period_ns));
+
+	return HRTIMER_RESTART;
+}
+
+static void xe_oa_init_oa_buffer(struct xe_oa_stream *stream)
+{
+	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
+	u32 oa_buf = gtt_offset | OABUFFER_SIZE_16M | OAG_OABUFFER_MEMORY_SELECT;
+	unsigned long flags;
+
+	spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_status, 0);
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_head_ptr,
+			gtt_offset & OAG_OAHEADPTR_MASK);
+	stream->oa_buffer.head = 0;
+
+	/*
+	 * PRM says: "This MMIO must be set before the OATAILPTR register and after the
+	 * OAHEADPTR register. This is to enable proper functionality of the overflow bit".
+	 */
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_buffer, oa_buf);
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_tail_ptr,
+			gtt_offset & OAG_OATAILPTR_MASK);
+
+	/* Mark that we need updated tail pointer to read from */
+	stream->oa_buffer.tail = 0;
+
+	spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
+
+	/* Zero out the OA buffer since we rely on zero report id and timestamp fields */
+	memset(stream->oa_buffer.vaddr, 0, stream->oa_buffer.bo->size);
+}
+
+static u32 __format_to_oactrl(const struct xe_oa_format *format, int counter_sel_mask)
+{
+	return ((format->counter_select << __bf_shf(counter_sel_mask)) & counter_sel_mask) |
+		REG_FIELD_PREP(OA_OACONTROL_REPORT_BC_MASK, format->bc_report) |
+		REG_FIELD_PREP(OA_OACONTROL_COUNTER_SIZE_MASK, format->counter_size);
+}
+
+static void xe_oa_enable(struct xe_oa_stream *stream)
+{
+	const struct xe_oa_format *format = stream->oa_buffer.format;
+	const struct xe_oa_regs *regs;
+	u32 val;
+
+	/*
+	 * BSpec: 46822: Bit 0. Even if stream->sample is 0, for OAR to function, the OA
+	 * buffer must be correctly initialized
+	 */
+	xe_oa_init_oa_buffer(stream);
+
+	regs = __oa_regs(stream);
+	val = __format_to_oactrl(format, regs->oa_ctrl_counter_select_mask) |
+		OAG_OACONTROL_OA_COUNTER_ENABLE;
+
+	xe_mmio_write32(stream->gt, regs->oa_ctrl, val);
+}
+
+static void xe_oa_disable(struct xe_oa_stream *stream)
+{
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctrl, 0);
+	if (xe_mmio_wait32(stream->gt, __oa_regs(stream)->oa_ctrl,
+			   OAG_OACONTROL_OA_COUNTER_ENABLE, 0, 50000, NULL, false))
+		drm_err(&stream->oa->xe->drm,
+			"wait for OA to be disabled timed out\n");
+
+	xe_mmio_write32(stream->gt, OA_TLB_INV_CR, 1);
+	if (xe_mmio_wait32(stream->gt, OA_TLB_INV_CR, 1, 0, 50000, NULL, false))
+		drm_err(&stream->oa->xe->drm,
+			"wait for OA tlb invalidate timed out\n");
+}
+
+static __poll_t xe_oa_poll_locked(struct xe_oa_stream *stream,
+				  struct file *file, poll_table *wait)
+{
+	__poll_t events = 0;
+
+	poll_wait(file, &stream->poll_wq, wait);
+
+	/*
+	 * We don't explicitly check whether there's something to read here since this
+	 * path may be hot depending on what else userspace is polling, or on the timeout
+	 * in use. We rely on hrtimer xe_oa_poll_check_timer_cb to notify us when there
+	 * are samples to read
+	 */
+	if (stream->pollin)
+		events |= EPOLLIN;
+
+	return events;
+}
+
+static __poll_t xe_oa_poll(struct file *file, poll_table *wait)
+{
+	struct xe_oa_stream *stream = file->private_data;
+	__poll_t ret;
+
+	mutex_lock(&stream->stream_lock);
+	ret = xe_oa_poll_locked(stream, file, wait);
+	mutex_unlock(&stream->stream_lock);
+
+	return ret;
+}
+
 static int xe_oa_submit_bb(struct xe_oa_stream *stream, struct xe_bb *bb)
 {
 	struct xe_sched_job *job;
@@ -239,6 +438,26 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
 	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, sqcnt1, 0);
 }
 
+static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
+{
+	struct xe_oa_unit *u = stream->hwe->oa_unit;
+	struct xe_gt *gt = stream->hwe->gt;
+
+	if (WARN_ON(stream != u->exclusive_stream))
+		return;
+
+	WRITE_ONCE(u->exclusive_stream, NULL);
+
+	xe_oa_disable_metric_set(stream);
+	xe_exec_queue_put(stream->k_exec_q);
+
+	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+	xe_device_mem_access_put(stream->oa->xe);
+
+	xe_oa_free_oa_buffer(stream);
+	xe_oa_free_configs(stream);
+}
+
 static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream)
 {
 	struct xe_bo *bo;
@@ -376,6 +595,139 @@ static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
 	return xe_oa_emit_oa_config(stream);
 }
 
+static void xe_oa_stream_enable(struct xe_oa_stream *stream)
+{
+	stream->pollin = false;
+
+	xe_oa_enable(stream);
+
+	if (stream->sample)
+		hrtimer_start(&stream->poll_check_timer,
+			      ns_to_ktime(stream->poll_period_ns),
+			      HRTIMER_MODE_REL_PINNED);
+}
+
+static void xe_oa_stream_disable(struct xe_oa_stream *stream)
+{
+	xe_oa_disable(stream);
+
+	if (stream->sample)
+		hrtimer_cancel(&stream->poll_check_timer);
+}
+
+static void xe_oa_enable_locked(struct xe_oa_stream *stream)
+{
+	if (stream->enabled)
+		return;
+
+	stream->enabled = true;
+
+	xe_oa_stream_enable(stream);
+}
+
+static void xe_oa_disable_locked(struct xe_oa_stream *stream)
+{
+	if (!stream->enabled)
+		return;
+
+	stream->enabled = false;
+
+	xe_oa_stream_disable(stream);
+}
+
+static long xe_oa_config_locked(struct xe_oa_stream *stream,
+				unsigned long metrics_set)
+{
+	struct xe_oa_config *config;
+	long ret = stream->oa_config->id;
+
+	config = xe_oa_get_oa_config(stream->oa, metrics_set);
+	if (!config)
+		return -ENODEV;
+
+	if (config != stream->oa_config) {
+		int err;
+
+		err = xe_oa_emit_oa_config(stream);
+		if (!err)
+			config = xchg(&stream->oa_config, config);
+		else
+			ret = err;
+	}
+
+	xe_oa_config_put(config);
+
+	return ret;
+}
+
+static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
+			       unsigned int cmd,
+			       unsigned long arg)
+{
+	switch (cmd) {
+	case DRM_XE_PERF_IOCTL_ENABLE:
+		xe_oa_enable_locked(stream);
+		return 0;
+	case DRM_XE_PERF_IOCTL_DISABLE:
+		xe_oa_disable_locked(stream);
+		return 0;
+	case DRM_XE_PERF_IOCTL_CONFIG:
+		return xe_oa_config_locked(stream, arg);
+	}
+
+	return -EINVAL;
+}
+
+static long xe_oa_ioctl(struct file *file,
+			unsigned int cmd,
+			unsigned long arg)
+{
+	struct xe_oa_stream *stream = file->private_data;
+	long ret;
+
+	mutex_lock(&stream->stream_lock);
+	ret = xe_oa_ioctl_locked(stream, cmd, arg);
+	mutex_unlock(&stream->stream_lock);
+
+	return ret;
+}
+
+static void xe_oa_destroy_locked(struct xe_oa_stream *stream)
+{
+	if (stream->enabled)
+		xe_oa_disable_locked(stream);
+
+	xe_oa_stream_destroy(stream);
+
+	if (stream->exec_q)
+		xe_exec_queue_put(stream->exec_q);
+
+	kfree(stream);
+}
+
+static int xe_oa_release(struct inode *inode, struct file *file)
+{
+	struct xe_oa_stream *stream = file->private_data;
+	struct xe_gt *gt = stream->gt;
+
+	mutex_lock(&gt->oa.gt_lock);
+	xe_oa_destroy_locked(stream);
+	mutex_unlock(&gt->oa.gt_lock);
+
+	/* Release the reference the perf stream kept on the driver */
+	drm_dev_put(&gt_to_xe(gt)->drm);
+
+	return 0;
+}
+
+static const struct file_operations xe_oa_fops = {
+	.owner		= THIS_MODULE,
+	.llseek		= no_llseek,
+	.release	= xe_oa_release,
+	.poll		= xe_oa_poll,
+	.unlocked_ioctl	= xe_oa_ioctl,
+};
+
 static int xe_oa_stream_init(struct xe_oa_stream *stream,
 			     struct xe_oa_open_param *param)
 {
@@ -429,6 +781,10 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
 
 	WRITE_ONCE(u->exclusive_stream, stream);
 
+	hrtimer_init(&stream->poll_check_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+	stream->poll_check_timer.function = xe_oa_poll_check_timer_cb;
+	init_waitqueue_head(&stream->poll_wq);
+
 	spin_lock_init(&stream->oa_buffer.ptr_lock);
 	mutex_init(&stream->stream_lock);
 
@@ -472,10 +828,21 @@ static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
 	if (ret)
 		goto err_free;
 
+	stream_fd = anon_inode_getfd("[xe_oa]", &xe_oa_fops, stream, 0);
+	if (stream_fd < 0) {
+		ret = stream_fd;
+		goto err_destroy;
+	}
+
+	if (!param->disabled)
+		xe_oa_enable_locked(stream);
+
 	/* Hold a reference on the drm device till stream_fd is released */
 	drm_dev_get(&stream->oa->xe->drm);
 
 	return stream_fd;
+err_destroy:
+	xe_oa_stream_destroy(stream);
 err_free:
 	kfree(stream);
 exit:
-- 
2.41.0


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

* [PATCH 09/16] drm/xe/oa/uapi: Read file_operation
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (7 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 08/16] drm/xe/oa/uapi: Expose OA stream fd Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 10/16] drm/xe/oa: Disable overrun mode for Xe2+ OAG Ashutosh Dixit
                   ` (14 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Implement the OA stream read file_operation. Both blocking and non-blocking
reads are supported. As part of read system call, the read copies OA perf
data from the OA buffer to the user buffer, after appending packet headers
for status and data packets.

v2: Drop OA report headers, implement DRM_XE_PERF_IOCTL_STATUS (Umesh)
v3: Introduce 'struct drm_xe_oa_stream_status'

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_oa.c | 181 +++++++++++++++++++++++++++++++++++++
 include/uapi/drm/xe_drm.h  |  12 +++
 2 files changed, 193 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index abcdf22819158..3349b9d6cde92 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -157,6 +157,14 @@ static u64 oa_report_id(struct xe_oa_stream *stream, void *report)
 	return oa_report_header_64bit(stream) ? *(u64 *)report : *(u32 *)report;
 }
 
+static void oa_report_id_clear(struct xe_oa_stream *stream, u32 *report)
+{
+	if (oa_report_header_64bit(stream))
+		*(u64 *)report = 0;
+	else
+		*report = 0;
+}
+
 static u64 oa_timestamp(struct xe_oa_stream *stream, void *report)
 {
 	return oa_report_header_64bit(stream) ?
@@ -164,6 +172,14 @@ static u64 oa_timestamp(struct xe_oa_stream *stream, void *report)
 		*((u32 *)report + 1);
 }
 
+static void oa_timestamp_clear(struct xe_oa_stream *stream, u32 *report)
+{
+	if (oa_report_header_64bit(stream))
+		*(u64 *)&report[2] = 0;
+	else
+		report[1] = 0;
+}
+
 static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
 {
 	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
@@ -238,6 +254,104 @@ static enum hrtimer_restart xe_oa_poll_check_timer_cb(struct hrtimer *hrtimer)
 	return HRTIMER_RESTART;
 }
 
+static int xe_oa_append_report(struct xe_oa_stream *stream, char __user *buf,
+			       size_t count, size_t *offset, const u8 *report)
+{
+	int report_size = stream->oa_buffer.format->size;
+	int report_size_partial;
+	u8 *oa_buf_end;
+
+	if ((count - *offset) < report_size)
+		return -ENOSPC;
+
+	buf += *offset;
+
+	oa_buf_end = stream->oa_buffer.vaddr + XE_OA_BUFFER_SIZE;
+	report_size_partial = oa_buf_end - report;
+
+	if (report_size_partial < report_size) {
+		if (copy_to_user(buf, report, report_size_partial))
+			return -EFAULT;
+		buf += report_size_partial;
+
+		if (copy_to_user(buf, stream->oa_buffer.vaddr,
+				 report_size - report_size_partial))
+			return -EFAULT;
+	} else if (copy_to_user(buf, report, report_size)) {
+		return -EFAULT;
+	}
+
+	*offset += report_size;
+
+	return 0;
+}
+
+static int xe_oa_append_reports(struct xe_oa_stream *stream, char __user *buf,
+				size_t count, size_t *offset)
+{
+	int report_size = stream->oa_buffer.format->size;
+	u8 *oa_buf_base = stream->oa_buffer.vaddr;
+	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
+	u32 mask = (XE_OA_BUFFER_SIZE - 1);
+	size_t start_offset = *offset;
+	unsigned long flags;
+	u32 head, tail;
+	int ret = 0;
+
+	if (drm_WARN_ON(&stream->oa->xe->drm, !stream->enabled))
+		return -EIO;
+
+	spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
+
+	head = stream->oa_buffer.head;
+	tail = stream->oa_buffer.tail;
+
+	spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
+
+	xe_assert(stream->oa->xe, head < XE_OA_BUFFER_SIZE && tail < XE_OA_BUFFER_SIZE);
+
+	for (; OA_TAKEN(tail, head); head = (head + report_size) & mask) {
+		u8 *report = oa_buf_base + head;
+		u32 *report32 = (void *)report;
+
+		ret = xe_oa_append_report(stream, buf, count, offset, report);
+		if (ret)
+			break;
+
+		if (is_power_of_2(report_size)) {
+			/* Clear out report id and timestamp to detect unlanded reports */
+			oa_report_id_clear(stream, report32);
+			oa_timestamp_clear(stream, report32);
+		} else {
+			u8 *oa_buf_end = stream->oa_buffer.vaddr +
+					 XE_OA_BUFFER_SIZE;
+			u32 part = oa_buf_end - (u8 *)report32;
+
+			/* Zero out the entire report */
+			if (report_size <= part) {
+				memset(report32, 0, report_size);
+			} else {
+				memset(report32, 0, part);
+				memset(oa_buf_base, 0, report_size - part);
+			}
+		}
+	}
+
+	if (start_offset != *offset) {
+		struct xe_reg oaheadptr = __oa_regs(stream)->oa_head_ptr;
+
+		spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
+
+		xe_mmio_write32(stream->gt, oaheadptr,
+				(head + gtt_offset) & OAG_OAHEADPTR_MASK);
+		stream->oa_buffer.head = head;
+
+		spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
+	}
+
+	return ret;
+}
+
 static void xe_oa_init_oa_buffer(struct xe_oa_stream *stream)
 {
 	u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
@@ -308,6 +422,56 @@ static void xe_oa_disable(struct xe_oa_stream *stream)
 			"wait for OA tlb invalidate timed out\n");
 }
 
+static int xe_oa_wait_unlocked(struct xe_oa_stream *stream)
+{
+	/* We might wait indefinitely if periodic sampling is not enabled */
+	if (!stream->periodic)
+		return -EIO;
+
+	return wait_event_interruptible(stream->poll_wq,
+					xe_oa_buffer_check_unlocked(stream));
+}
+
+static ssize_t xe_oa_read(struct file *file, char __user *buf,
+			  size_t count, loff_t *ppos)
+{
+	struct xe_oa_stream *stream = file->private_data;
+	size_t offset = 0;
+	int ret;
+
+	/* Can't read from disabled streams */
+	if (!stream->enabled || !stream->sample)
+		return -EIO;
+
+	if (!(file->f_flags & O_NONBLOCK)) {
+		do {
+			ret = xe_oa_wait_unlocked(stream);
+			if (ret)
+				return ret;
+
+			mutex_lock(&stream->stream_lock);
+			ret = xe_oa_append_reports(stream, buf, count, &offset);
+			mutex_unlock(&stream->stream_lock);
+		} while (!offset && !ret);
+	} else {
+		mutex_lock(&stream->stream_lock);
+		ret = xe_oa_append_reports(stream, buf, count, &offset);
+		mutex_unlock(&stream->stream_lock);
+	}
+
+	/*
+	 * Typically we clear pollin here in order to wait for the new hrtimer callback
+	 * before unblocking. The exception to this is if __xe_oa_read returns -ENOSPC,
+	 * which means that more OA data is available than could fit in the user provided
+	 * buffer. In this case we want the next poll() call to not block.
+	 */
+	if (ret != -ENOSPC)
+		stream->pollin = false;
+
+	/* Possible values for ret are 0, -EFAULT, -ENOSPC, -EIO, ... */
+	return offset ?: (ret ?: -EAGAIN);
+}
+
 static __poll_t xe_oa_poll_locked(struct xe_oa_stream *stream,
 				  struct file *file, poll_table *wait)
 {
@@ -660,6 +824,20 @@ static long xe_oa_config_locked(struct xe_oa_stream *stream,
 	return ret;
 }
 
+static long xe_oa_status_locked(struct xe_oa_stream *stream, unsigned long arg)
+{
+	struct drm_xe_oa_stream_status status = {};
+	void __user *uaddr = (void __user *)arg;
+
+	status.oa_status = xe_mmio_read32(stream->gt, __oa_regs(stream)->oa_status);
+
+	if (copy_to_user(uaddr, &status, sizeof(status)))
+		return -EFAULT;
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_status, 0);
+	return 0;
+}
+
 static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
 			       unsigned int cmd,
 			       unsigned long arg)
@@ -673,6 +851,8 @@ static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
 		return 0;
 	case DRM_XE_PERF_IOCTL_CONFIG:
 		return xe_oa_config_locked(stream, arg);
+	case DRM_XE_PERF_IOCTL_STATUS:
+		return xe_oa_status_locked(stream, arg);
 	}
 
 	return -EINVAL;
@@ -725,6 +905,7 @@ static const struct file_operations xe_oa_fops = {
 	.llseek		= no_llseek,
 	.release	= xe_oa_release,
 	.poll		= xe_oa_poll,
+	.read		= xe_oa_read,
 	.unlocked_ioctl	= xe_oa_ioctl,
 };
 
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index 502302f3c2c73..df0dfd60b52fa 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1515,6 +1515,18 @@ struct drm_xe_oa_config {
 	__u64 regs_ptr;
 };
 
+/**
+ * struct drm_xe_oa_stream_status - OA stream status returned from
+ * @DRM_XE_PERF_IOCTL_STATUS perf fd ioctl
+ */
+struct drm_xe_oa_stream_status {
+	/** @oa_status: OA status register as specified in Bspec */
+	__u64 oa_status;
+
+	/** @reserved */
+	__u64 reserved[3];
+};
+
 #if defined(__cplusplus)
 }
 #endif
-- 
2.41.0


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

* [PATCH 10/16] drm/xe/oa: Disable overrun mode for Xe2+ OAG
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (8 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 09/16] drm/xe/oa/uapi: Read file_operation Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 11/16] drm/xe/oa: Add OAR support Ashutosh Dixit
                   ` (13 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Xe2+ OAG requires special handling because non-power-of-2 report sizes are
not a sub-multiple of the OA buffer size and there are no partial reports
at the end of the buffer. This issue is present only when overrun mode is
enabled. Avoid adding this special handling by disabling overrun mode for
Xe2+ OAG.

v2: Disable overrun mode when time based sampling is enabled

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_oa_regs.h | 1 +
 drivers/gpu/drm/xe/xe_oa.c           | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/xe/regs/xe_oa_regs.h b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
index 00d0c9763e8da..09d6d4f169f52 100644
--- a/drivers/gpu/drm/xe/regs/xe_oa_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
@@ -52,6 +52,7 @@
 #define  OABUFFER_SIZE_4M	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 5)
 #define  OABUFFER_SIZE_8M	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 6)
 #define  OABUFFER_SIZE_16M	REG_FIELD_PREP(OABUFFER_SIZE_MASK, 7)
+#define  OAG_OABUFFER_DISABLE_OVERRUN_MODE	REG_BIT(1)
 #define  OAG_OABUFFER_MEMORY_SELECT		REG_BIT(0) /* 0: PPGTT, 1: GGTT */
 
 #define OAG_OACONTROL				XE_REG(0xdaf4)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 3349b9d6cde92..c7b86771d0c28 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -365,6 +365,14 @@ static void xe_oa_init_oa_buffer(struct xe_oa_stream *stream)
 			gtt_offset & OAG_OAHEADPTR_MASK);
 	stream->oa_buffer.head = 0;
 
+	/*
+	 * For Xe2+, OAG buffer is not a multiple of report size and there are no partial
+	 * reports at the end of the buffer when overrun mode is enabled. Disable overrun
+	 * mode to avoid this issue.
+	 */
+	if (GRAPHICS_VER(stream->oa->xe) >= 20 &&
+	    stream->hwe->oa_unit->type == DRM_XE_OA_UNIT_TYPE_OAG && stream->sample)
+		oa_buf |= OAG_OABUFFER_DISABLE_OVERRUN_MODE;
 	/*
 	 * PRM says: "This MMIO must be set before the OATAILPTR register and after the
 	 * OAHEADPTR register. This is to enable proper functionality of the overflow bit".
-- 
2.41.0


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

* [PATCH 11/16] drm/xe/oa: Add OAR support
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (9 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 10/16] drm/xe/oa: Disable overrun mode for Xe2+ OAG Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 12/16] drm/xe/oa: Add OAC support Ashutosh Dixit
                   ` (12 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Add OAR support to allow userspace to execute MI_REPORT_PERF_COUNT on
render engines. Configuration batches are used to program the OAR unit, as
well as modifying the render engine context image of a specified exec queue
(to have correct register values when that context switches in).

v2: Rename/refactor xe_oa_modify_self (Umesh)

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 .../gpu/drm/xe/instructions/xe_mi_commands.h  |   3 +
 drivers/gpu/drm/xe/regs/xe_engine_regs.h      |   3 +-
 drivers/gpu/drm/xe/xe_lrc.c                   |  11 +-
 drivers/gpu/drm/xe/xe_lrc.h                   |   1 +
 drivers/gpu/drm/xe/xe_oa.c                    | 190 ++++++++++++++++++
 drivers/gpu/drm/xe/xe_oa_types.h              |   4 +
 6 files changed, 206 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/xe/instructions/xe_mi_commands.h b/drivers/gpu/drm/xe/instructions/xe_mi_commands.h
index c74ceb550dce7..48d4c759c6885 100644
--- a/drivers/gpu/drm/xe/instructions/xe_mi_commands.h
+++ b/drivers/gpu/drm/xe/instructions/xe_mi_commands.h
@@ -45,6 +45,9 @@
 #define   MI_LRI_MMIO_REMAP_EN		REG_BIT(17)
 #define   MI_LRI_NUM_REGS(x)		XE_INSTR_NUM_DW(2 * (x) + 1)
 #define   MI_LRI_FORCE_POSTED		REG_BIT(12)
+#define   IS_MI_LRI_CMD(x)		(REG_FIELD_GET(MI_OPCODE, (x)) == \
+					 REG_FIELD_GET(MI_OPCODE, MI_LOAD_REGISTER_IMM))
+#define   MI_LRI_LEN(x)			(((x) & 0xff) + 1)
 
 #define MI_FLUSH_DW			__MI_INSTR(0x26)
 #define   MI_FLUSH_DW_STORE_INDEX	REG_BIT(21)
diff --git a/drivers/gpu/drm/xe/regs/xe_engine_regs.h b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
index 0b1266c88a6af..b6ef2df0e5ac0 100644
--- a/drivers/gpu/drm/xe/regs/xe_engine_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
@@ -125,7 +125,8 @@
 #define RING_EXECLIST_STATUS_LO(base)		XE_REG((base) + 0x234)
 #define RING_EXECLIST_STATUS_HI(base)		XE_REG((base) + 0x234 + 4)
 
-#define RING_CONTEXT_CONTROL(base)		XE_REG((base) + 0x244)
+#define RING_CONTEXT_CONTROL(base)		XE_REG((base) + 0x244, XE_REG_OPTION_MASKED)
+#define	  CTX_CTRL_OAC_CONTEXT_ENABLE		REG_BIT(8)
 #define	  CTX_CTRL_INHIBIT_SYN_CTX_SWITCH	REG_BIT(3)
 #define	  CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT	REG_BIT(0)
 
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index 8c85e90220de5..0c4b2802b372c 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -586,12 +586,18 @@ u32 xe_lrc_pphwsp_offset(struct xe_lrc *lrc)
 
 /* Make the magic macros work */
 #define __xe_lrc_pphwsp_offset xe_lrc_pphwsp_offset
+#define __xe_lrc_regs_offset xe_lrc_regs_offset
 
 #define LRC_SEQNO_PPHWSP_OFFSET 512
 #define LRC_START_SEQNO_PPHWSP_OFFSET (LRC_SEQNO_PPHWSP_OFFSET + 8)
 #define LRC_PARALLEL_PPHWSP_OFFSET 2048
 #define LRC_PPHWSP_SIZE SZ_4K
 
+u32 xe_lrc_regs_offset(struct xe_lrc *lrc)
+{
+	return xe_lrc_pphwsp_offset(lrc) + LRC_PPHWSP_SIZE;
+}
+
 static size_t lrc_reg_size(struct xe_device *xe)
 {
 	if (GRAPHICS_VERx100(xe) >= 1250)
@@ -623,11 +629,6 @@ static inline u32 __xe_lrc_parallel_offset(struct xe_lrc *lrc)
 	return xe_lrc_pphwsp_offset(lrc) + LRC_PARALLEL_PPHWSP_OFFSET;
 }
 
-static inline u32 __xe_lrc_regs_offset(struct xe_lrc *lrc)
-{
-	return xe_lrc_pphwsp_offset(lrc) + LRC_PPHWSP_SIZE;
-}
-
 #define DECL_MAP_ADDR_HELPERS(elem) \
 static inline struct iosys_map __xe_lrc_##elem##_map(struct xe_lrc *lrc) \
 { \
diff --git a/drivers/gpu/drm/xe/xe_lrc.h b/drivers/gpu/drm/xe/xe_lrc.h
index 28b1d3f404d4f..d6d8aa8fb51eb 100644
--- a/drivers/gpu/drm/xe/xe_lrc.h
+++ b/drivers/gpu/drm/xe/xe_lrc.h
@@ -23,6 +23,7 @@ void xe_lrc_finish(struct xe_lrc *lrc);
 
 size_t xe_lrc_size(struct xe_device *xe, enum xe_engine_class class);
 u32 xe_lrc_pphwsp_offset(struct xe_lrc *lrc);
+u32 xe_lrc_regs_offset(struct xe_lrc *lrc);
 
 void xe_lrc_set_ring_head(struct xe_lrc *lrc, u32 head);
 u32 xe_lrc_ring_head(struct xe_lrc *lrc);
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index c7b86771d0c28..413fa42e8df71 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -11,7 +11,9 @@
 #include <drm/xe_drm.h>
 
 #include "instructions/xe_mi_commands.h"
+#include "regs/xe_engine_regs.h"
 #include "regs/xe_gt_regs.h"
+#include "regs/xe_lrc_layout.h"
 #include "regs/xe_oa_regs.h"
 #include "xe_device.h"
 #include "xe_exec_queue.h"
@@ -19,6 +21,7 @@
 #include "xe_bo.h"
 #include "xe_gt.h"
 #include "xe_gt_mcr.h"
+#include "xe_lrc.h"
 #include "xe_mmio.h"
 #include "xe_oa.h"
 #include "xe_sched_job.h"
@@ -51,6 +54,12 @@ struct xe_oa_config {
 	struct rcu_head rcu;
 };
 
+struct flex {
+	struct xe_reg reg;
+	u32 offset;
+	u32 value;
+};
+
 struct xe_oa_open_param {
 	u32 oa_unit_id;
 	bool sample;
@@ -583,6 +592,93 @@ static void xe_oa_free_configs(struct xe_oa_stream *stream)
 		free_oa_config_bo(oa_bo);
 }
 
+static void xe_oa_store_flex(struct xe_oa_stream *stream, struct xe_lrc *lrc,
+			     struct xe_bb *bb, const struct flex *flex, u32 count)
+{
+	u32 offset = xe_bo_ggtt_addr(lrc->bo);
+
+	do {
+		bb->cs[bb->len++] = MI_STORE_DATA_IMM | BIT(22) /* GGTT */ | 2;
+		bb->cs[bb->len++] = offset + flex->offset * sizeof(u32);
+		bb->cs[bb->len++] = 0;
+		bb->cs[bb->len++] = flex->value;
+
+	} while (flex++, --count);
+}
+
+static int xe_oa_modify_ctx_image(struct xe_oa_stream *stream, struct xe_lrc *lrc,
+				  const struct flex *flex, u32 count)
+{
+	struct xe_bb *bb;
+	int err;
+
+	bb = xe_bb_new(stream->gt, 4 * count, false);
+	if (IS_ERR(bb)) {
+		err = PTR_ERR(bb);
+		goto exit;
+	}
+
+	xe_oa_store_flex(stream, lrc, bb, flex, count);
+
+	err = xe_oa_submit_bb(stream, bb);
+	xe_bb_free(bb, NULL);
+exit:
+	return err;
+}
+
+static int xe_oa_load_with_lri(struct xe_oa_stream *stream, struct xe_oa_reg *reg_lri)
+{
+	struct xe_bb *bb;
+	int err;
+
+	bb = xe_bb_new(stream->gt, 3, false);
+	if (IS_ERR(bb)) {
+		err = PTR_ERR(bb);
+		goto exit;
+	}
+
+	write_cs_mi_lri(bb, reg_lri, 1);
+
+	err = xe_oa_submit_bb(stream, bb);
+	xe_bb_free(bb, NULL);
+exit:
+	return err;
+}
+
+static int xe_oa_configure_oar_context(struct xe_oa_stream *stream, bool enable)
+{
+	const struct xe_oa_format *format = stream->oa_buffer.format;
+	struct xe_lrc *lrc = &stream->exec_q->lrc[0];
+	u32 regs_offset = xe_lrc_regs_offset(lrc) / sizeof(u32);
+	u32 oacontrol = __format_to_oactrl(format, OAR_OACONTROL_COUNTER_SEL_MASK) |
+		(enable ? OAR_OACONTROL_COUNTER_ENABLE : 0);
+
+	struct flex regs_context[] = {
+		{
+			OACTXCONTROL(stream->hwe->mmio_base),
+			stream->oa->ctx_oactxctrl_offset[stream->hwe->class] + 1,
+			enable ? OA_COUNTER_RESUME : 0,
+		},
+		{
+			RING_CONTEXT_CONTROL(stream->hwe->mmio_base),
+			regs_offset + CTX_CONTEXT_CONTROL,
+			_MASKED_FIELD(CTX_CTRL_OAC_CONTEXT_ENABLE,
+				      enable ? CTX_CTRL_OAC_CONTEXT_ENABLE : 0)
+		},
+	};
+	struct xe_oa_reg reg_lri = { OAR_OACONTROL, oacontrol };
+	int err;
+
+	/* Modify stream hwe context image with regs_context */
+	err = xe_oa_modify_ctx_image(stream, &stream->exec_q->lrc[0],
+				     regs_context, ARRAY_SIZE(regs_context));
+	if (err)
+		return err;
+
+	/* Apply reg_lri using LRI */
+	return xe_oa_load_with_lri(stream, &reg_lri);
+}
+
 #define HAS_OA_BPC_REPORTING(xe) (GRAPHICS_VERx100(xe) >= 1255)
 
 static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
@@ -600,6 +696,10 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
 					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
 	}
 
+	/* disable the context save/restore or OAR counters */
+	if (stream->exec_q)
+		xe_oa_configure_oar_context(stream, false);
+
 	/* Make sure we disable noa to save power. */
 	xe_mmio_rmw32(stream->gt, RPM_CONFIG1, GT_NOA_ENABLE, 0);
 
@@ -727,6 +827,7 @@ static u32 oag_report_ctx_switches(const struct xe_oa_stream *stream)
 static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
 {
 	u32 oa_debug, sqcnt1;
+	int ret;
 
 	/*
 	 * Wa_1508761755:xehpsdv, dg2
@@ -764,6 +865,12 @@ static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
 
 	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, 0, sqcnt1);
 
+	if (stream->exec_q) {
+		ret = xe_oa_configure_oar_context(stream, true);
+		if (ret)
+			return ret;
+	}
+
 	return xe_oa_emit_oa_config(stream);
 }
 
@@ -917,6 +1024,78 @@ static const struct file_operations xe_oa_fops = {
 	.unlocked_ioctl	= xe_oa_ioctl,
 };
 
+static bool engine_supports_mi_query(struct xe_hw_engine *hwe)
+{
+	return hwe->class == XE_ENGINE_CLASS_RENDER ||
+		hwe->class == XE_ENGINE_CLASS_COMPUTE;
+}
+
+static bool xe_oa_find_reg_in_lri(u32 *state, u32 reg, u32 *offset, u32 end)
+{
+	u32 idx = *offset;
+	u32 len = min(MI_LRI_LEN(state[idx]) + idx, end);
+	bool found = false;
+
+	idx++;
+	for (; idx < len; idx += 2) {
+		if (state[idx] == reg) {
+			found = true;
+			break;
+		}
+	}
+
+	*offset = idx;
+	return found;
+}
+
+static u32 xe_oa_context_image_offset(struct xe_oa_stream *stream, u32 reg)
+{
+	struct xe_lrc *lrc = &stream->exec_q->lrc[0];
+	u32 len = (xe_lrc_size(stream->oa->xe, stream->hwe->class) +
+		   lrc->ring.size) / sizeof(u32);
+	u32 offset = xe_lrc_regs_offset(lrc) / sizeof(u32);
+	u32 *state = (u32 *)lrc->bo->vmap.vaddr;
+
+	if (drm_WARN_ON(&stream->oa->xe->drm, !state))
+		return U32_MAX;
+
+	for (; offset < len; ) {
+		if (IS_MI_LRI_CMD(state[offset])) {
+			/*
+			 * We expect reg-value pairs in MI_LRI command, so
+			 * MI_LRI_LEN() should be even
+			 */
+			drm_WARN_ON(&stream->oa->xe->drm,
+				    MI_LRI_LEN(state[offset]) & 0x1);
+
+			if (xe_oa_find_reg_in_lri(state, reg, &offset, len))
+				break;
+		} else {
+			offset++;
+		}
+	}
+
+	return offset < len ? offset : U32_MAX;
+}
+
+static int xe_oa_set_ctx_ctrl_offset(struct xe_oa_stream *stream)
+{
+	struct xe_reg reg = OACTXCONTROL(stream->hwe->mmio_base);
+	u32 offset = stream->oa->ctx_oactxctrl_offset[stream->hwe->class];
+
+	/* Do this only once. Failure is stored as offset of U32_MAX */
+	if (offset)
+		goto exit;
+
+	offset = xe_oa_context_image_offset(stream, reg.addr);
+	stream->oa->ctx_oactxctrl_offset[stream->hwe->class] = offset;
+
+	drm_dbg(&stream->oa->xe->drm, "%s oa ctx control at 0x%08x dword offset\n",
+		stream->hwe->name, offset);
+exit:
+	return offset && offset != U32_MAX ? 0 : -ENODEV;
+}
+
 static int xe_oa_stream_init(struct xe_oa_stream *stream,
 			     struct xe_oa_open_param *param)
 {
@@ -934,6 +1113,17 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
 	stream->periodic = param->period_exponent > 0;
 	stream->period_exponent = param->period_exponent;
 
+	if (stream->exec_q && engine_supports_mi_query(stream->hwe)) {
+		/* If we don't find the context offset, just return error */
+		ret = xe_oa_set_ctx_ctrl_offset(stream);
+		if (ret) {
+			drm_err(&stream->oa->xe->drm,
+				"xe_oa_set_ctx_ctrl_offset failed for %s\n",
+				stream->hwe->name);
+			goto exit;
+		}
+	}
+
 	stream->oa_config = xe_oa_get_oa_config(stream->oa, param->metric_set);
 	if (!stream->oa_config) {
 		drm_dbg(&stream->oa->xe->drm, "Invalid OA config id=%i\n", param->metric_set);
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index 539830f5f0b24..d93b7b490563b 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -13,6 +13,7 @@
 
 #include <drm/xe_drm.h>
 #include "regs/xe_reg_defs.h"
+#include "xe_hw_engine_types.h"
 
 #define XE_OA_BUFFER_SIZE SZ_16M
 
@@ -132,6 +133,9 @@ struct xe_oa {
 	/** @metrics_idr: List of dynamic configurations (struct xe_oa_config) */
 	struct idr metrics_idr;
 
+	/** @ctx_oactxctrl_offset: offset of OACTXCONTROL register in context image */
+	u32 ctx_oactxctrl_offset[XE_ENGINE_CLASS_MAX];
+
 	/** @oa_formats: tracks all OA formats across platforms */
 	const struct xe_oa_format *oa_formats;
 
-- 
2.41.0


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

* [PATCH 12/16] drm/xe/oa: Add OAC support
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (10 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 11/16] drm/xe/oa: Add OAR support Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 13/16] drm/xe/oa/uapi: Query OA unit properties Ashutosh Dixit
                   ` (11 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Similar to OAR, allow userspace to execute MI_REPORT_PERF_COUNT on compute
engines of a specified exec queue.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_engine_regs.h |  1 +
 drivers/gpu/drm/xe/regs/xe_oa_regs.h     |  3 +
 drivers/gpu/drm/xe/xe_oa.c               | 74 +++++++++++++++++++++++-
 3 files changed, 75 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/xe/regs/xe_engine_regs.h b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
index b6ef2df0e5ac0..9e430f56b3b83 100644
--- a/drivers/gpu/drm/xe/regs/xe_engine_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_engine_regs.h
@@ -127,6 +127,7 @@
 
 #define RING_CONTEXT_CONTROL(base)		XE_REG((base) + 0x244, XE_REG_OPTION_MASKED)
 #define	  CTX_CTRL_OAC_CONTEXT_ENABLE		REG_BIT(8)
+#define	  CTX_CTRL_RUN_ALONE			REG_BIT(7)
 #define	  CTX_CTRL_INHIBIT_SYN_CTX_SWITCH	REG_BIT(3)
 #define	  CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT	REG_BIT(0)
 
diff --git a/drivers/gpu/drm/xe/regs/xe_oa_regs.h b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
index 09d6d4f169f52..6f7d300f56c86 100644
--- a/drivers/gpu/drm/xe/regs/xe_oa_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
@@ -69,6 +69,9 @@
 #define  OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS	REG_BIT(1)
 
 #define OAG_OASTATUS			XE_REG(0xdafc)
+/* OAC unit */
+#define OAC_OACONTROL			XE_REG(0x15114)
+
 /* OAM unit */
 #define OAM_HEAD_POINTER_OFFSET			(0x1a0)
 #define OAM_TAIL_POINTER_OFFSET			(0x1a4)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 413fa42e8df71..dc138e5a10087 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -406,6 +406,19 @@ static u32 __format_to_oactrl(const struct xe_oa_format *format, int counter_sel
 		REG_FIELD_PREP(OA_OACONTROL_COUNTER_SIZE_MASK, format->counter_size);
 }
 
+static u32 __oa_ccs_select(struct xe_oa_stream *stream)
+{
+	u32 val;
+
+	if (stream->hwe->class != XE_ENGINE_CLASS_COMPUTE)
+		return 0;
+
+	val = REG_FIELD_PREP(OAG_OACONTROL_OA_CCS_SELECT_MASK, stream->hwe->instance);
+	xe_assert(stream->oa->xe,
+		  REG_FIELD_GET(OAG_OACONTROL_OA_CCS_SELECT_MASK, val) == stream->hwe->instance);
+	return val;
+}
+
 static void xe_oa_enable(struct xe_oa_stream *stream)
 {
 	const struct xe_oa_format *format = stream->oa_buffer.format;
@@ -420,7 +433,7 @@ static void xe_oa_enable(struct xe_oa_stream *stream)
 
 	regs = __oa_regs(stream);
 	val = __format_to_oactrl(format, regs->oa_ctrl_counter_select_mask) |
-		OAG_OACONTROL_OA_COUNTER_ENABLE;
+		__oa_ccs_select(stream) | OAG_OACONTROL_OA_COUNTER_ENABLE;
 
 	xe_mmio_write32(stream->gt, regs->oa_ctrl, val);
 }
@@ -679,6 +692,57 @@ static int xe_oa_configure_oar_context(struct xe_oa_stream *stream, bool enable)
 	return xe_oa_load_with_lri(stream, &reg_lri);
 }
 
+static int xe_oa_configure_oac_context(struct xe_oa_stream *stream, bool enable)
+{
+	const struct xe_oa_format *format = stream->oa_buffer.format;
+	struct xe_lrc *lrc = &stream->exec_q->lrc[0];
+	u32 regs_offset = xe_lrc_regs_offset(lrc) / sizeof(u32);
+	u32 oacontrol = __format_to_oactrl(format, OAR_OACONTROL_COUNTER_SEL_MASK) |
+		(enable ? OAR_OACONTROL_COUNTER_ENABLE : 0);
+	struct flex regs_context[] = {
+		{
+			OACTXCONTROL(stream->hwe->mmio_base),
+			stream->oa->ctx_oactxctrl_offset[stream->hwe->class] + 1,
+			enable ? OA_COUNTER_RESUME : 0,
+		},
+		{
+			RING_CONTEXT_CONTROL(stream->hwe->mmio_base),
+			regs_offset + CTX_CONTEXT_CONTROL,
+			_MASKED_FIELD(CTX_CTRL_OAC_CONTEXT_ENABLE,
+				      enable ? CTX_CTRL_OAC_CONTEXT_ENABLE : 0) |
+			_MASKED_FIELD(CTX_CTRL_RUN_ALONE,
+				      enable ? CTX_CTRL_RUN_ALONE : 0),
+		},
+	};
+	struct xe_oa_reg reg_lri = { OAC_OACONTROL, oacontrol };
+	int err;
+
+	/* Set ccs select to enable programming of OAC_OACONTROL */
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctrl, __oa_ccs_select(stream));
+
+	/* Modify stream hwe context image with regs_context */
+	err = xe_oa_modify_ctx_image(stream, &stream->exec_q->lrc[0],
+				     regs_context, ARRAY_SIZE(regs_context));
+	if (err)
+		return err;
+
+	/* Apply reg_lri using LRI */
+	return xe_oa_load_with_lri(stream, &reg_lri);
+}
+
+static int xe_oa_configure_oa_context(struct xe_oa_stream *stream, bool enable)
+{
+	switch (stream->hwe->class) {
+	case XE_ENGINE_CLASS_RENDER:
+		return xe_oa_configure_oar_context(stream, enable);
+	case XE_ENGINE_CLASS_COMPUTE:
+		return xe_oa_configure_oac_context(stream, enable);
+	default:
+		/* Video engines do not support MI_REPORT_PERF_COUNT */
+		return 0;
+	}
+}
+
 #define HAS_OA_BPC_REPORTING(xe) (GRAPHICS_VERx100(xe) >= 1255)
 
 static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
@@ -698,7 +762,7 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
 
 	/* disable the context save/restore or OAR counters */
 	if (stream->exec_q)
-		xe_oa_configure_oar_context(stream, false);
+		xe_oa_configure_oa_context(stream, false);
 
 	/* Make sure we disable noa to save power. */
 	xe_mmio_rmw32(stream->gt, RPM_CONFIG1, GT_NOA_ENABLE, 0);
@@ -865,8 +929,9 @@ static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
 
 	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, 0, sqcnt1);
 
+	/* Configure OAR/OAC */
 	if (stream->exec_q) {
-		ret = xe_oa_configure_oar_context(stream, true);
+		ret = xe_oa_configure_oa_context(stream, true);
 		if (ret)
 			return ret;
 	}
@@ -1502,6 +1567,9 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data, struct drm_file
 		param.exec_q = xe_exec_queue_lookup(xef, param.exec_queue_id);
 		if (XE_IOCTL_DBG(oa->xe, !param.exec_q))
 			return -ENOENT;
+
+		if (param.exec_q->width > 1)
+			drm_dbg(&oa->xe->drm, "exec_q->width > 1, programming only exec_q->lrc[0]\n");
 	}
 
 	/*
-- 
2.41.0


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

* [PATCH 13/16] drm/xe/oa/uapi: Query OA unit properties
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (11 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 12/16] drm/xe/oa: Add OAC support Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-12 19:59   ` Umesh Nerlige Ramappa
  2024-02-08  5:49 ` [PATCH 14/16] drm/xe/oa/uapi: OA buffer mmap Ashutosh Dixit
                   ` (10 subsequent siblings)
  23 siblings, 1 reply; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Implement query for properties of OA units present on a device.

v2: Clean up reserved/pad fields (Umesh)
    Follow the same scheme as other query structs
v3: Skip reporting reserved engines attached to OA units
v4: Expose oa_buf_size via DRM_XE_PERF_IOCTL_INFO (Umesh)

Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_oa.c    | 13 ++++++
 drivers/gpu/drm/xe/xe_query.c | 79 +++++++++++++++++++++++++++++++++++
 include/uapi/drm/xe_drm.h     | 75 +++++++++++++++++++++++++++++++++
 3 files changed, 167 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index dc138e5a10087..1178620cd4e76 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -1018,6 +1018,17 @@ static long xe_oa_status_locked(struct xe_oa_stream *stream, unsigned long arg)
 	return 0;
 }
 
+static long xe_oa_info_locked(struct xe_oa_stream *stream, unsigned long arg)
+{
+	struct drm_xe_oa_stream_info info = { .oa_buf_size = XE_OA_BUFFER_SIZE, };
+	void __user *uaddr = (void __user *)arg;
+
+	if (copy_to_user(uaddr, &info, sizeof(info)))
+		return -EFAULT;
+
+	return 0;
+}
+
 static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
 			       unsigned int cmd,
 			       unsigned long arg)
@@ -1033,6 +1044,8 @@ static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
 		return xe_oa_config_locked(stream, arg);
 	case DRM_XE_PERF_IOCTL_STATUS:
 		return xe_oa_status_locked(stream, arg);
+	case DRM_XE_PERF_IOCTL_INFO:
+		return xe_oa_info_locked(stream, arg);
 	}
 
 	return -EINVAL;
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index 4f1ab91dbec58..828be65a076d6 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -516,6 +516,84 @@ static int query_gt_topology(struct xe_device *xe,
 	return 0;
 }
 
+static size_t calc_oa_unit_query_size(struct xe_device *xe)
+{
+	size_t size = sizeof(struct drm_xe_query_oa_units);
+	struct xe_gt *gt;
+	int i, id;
+
+	for_each_gt(gt, xe, id) {
+		for (i = 0; i < gt->oa.num_oa_units; i++) {
+			size += sizeof(struct drm_xe_oa_unit);
+			size += gt->oa.oa_unit[i].num_engines *
+				sizeof(struct drm_xe_engine_class_instance);
+		}
+	}
+
+	return size;
+}
+
+static int query_oa_units(struct xe_device *xe,
+			  struct drm_xe_device_query *query)
+{
+	void __user *query_ptr = u64_to_user_ptr(query->data);
+	size_t size = calc_oa_unit_query_size(xe);
+	struct drm_xe_query_oa_units *qoa;
+	enum xe_hw_engine_id hwe_id;
+	struct drm_xe_oa_unit *du;
+	struct xe_hw_engine *hwe;
+	struct xe_oa_unit *u;
+	int gt_id, i, j, ret;
+	struct xe_gt *gt;
+	u8 *pdu;
+
+	if (query->size == 0) {
+		query->size = size;
+		return 0;
+	} else if (XE_IOCTL_DBG(xe, query->size != size)) {
+		return -EINVAL;
+	}
+
+	qoa = kzalloc(size, GFP_KERNEL);
+	if (!qoa)
+		return -ENOMEM;
+
+	pdu = (u8 *)&qoa->oa_units[0];
+	for_each_gt(gt, xe, gt_id) {
+		for (i = 0; i < gt->oa.num_oa_units; i++) {
+			u = &gt->oa.oa_unit[i];
+			du = (struct drm_xe_oa_unit *)pdu;
+
+			du->oa_unit_id = u->oa_unit_id;
+			du->oa_unit_type = u->type;
+			du->oa_timestamp_freq = xe_oa_timestamp_frequency(gt);
+
+			for (j = 1; j < DRM_XE_OA_PROPERTY_MAX; j++)
+				du->capabilities |= BIT(j);
+
+			j = 0;
+			for_each_hw_engine(hwe, gt, hwe_id) {
+				if (!xe_hw_engine_is_reserved(hwe) &&
+				    xe_oa_unit_id(hwe) == u->oa_unit_id) {
+					du->eci[j].engine_class =
+						xe_to_user_engine_class[hwe->class];
+					du->eci[j].engine_instance = hwe->logical_instance;
+					du->eci[j].gt_id = gt->info.id;
+					j++;
+				}
+			}
+			du->num_engines = j;
+			pdu += sizeof(*du) + j * sizeof(du->eci[0]);
+			qoa->num_oa_units++;
+		}
+	}
+
+	ret = copy_to_user(query_ptr, qoa, size);
+	kfree(qoa);
+
+	return ret ? -EFAULT : 0;
+}
+
 static int (* const xe_query_funcs[])(struct xe_device *xe,
 				      struct drm_xe_device_query *query) = {
 	query_engines,
@@ -525,6 +603,7 @@ static int (* const xe_query_funcs[])(struct xe_device *xe,
 	query_hwconfig,
 	query_gt_topology,
 	query_engine_cycles,
+	query_oa_units,
 };
 
 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 df0dfd60b52fa..bd535343a406c 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -646,6 +646,7 @@ struct drm_xe_device_query {
 #define DRM_XE_DEVICE_QUERY_HWCONFIG		4
 #define DRM_XE_DEVICE_QUERY_GT_TOPOLOGY		5
 #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES	6
+#define DRM_XE_DEVICE_QUERY_OA_UNITS		7
 	/** @query: The type of data to query */
 	__u32 query;
 
@@ -1411,6 +1412,68 @@ enum drm_xe_oa_unit_type {
 	DRM_XE_OA_UNIT_TYPE_OAM,
 };
 
+/**
+ * struct drm_xe_oa_unit - describe OA unit
+ */
+struct drm_xe_oa_unit {
+	/** @oa_unit_id: OA unit ID */
+	__u32 oa_unit_id;
+
+	/** @oa_unit_type: OA unit type of @drm_xe_oa_unit_type */
+	__u32 oa_unit_type;
+
+	/**
+	 * @capabilities: OA capabilities bit-mask: this is a bit-mask of
+	 * property id's in enum @drm_xe_oa_property_id
+	 */
+	__u64 capabilities;
+
+	/** @oa_timestamp_freq: OA timestamp freq */
+	__u64 oa_timestamp_freq;
+
+	/** @reserved: MBZ */
+	__u64 reserved[4];
+
+	/** @num_engines: number of engines in @eci array */
+	__u64 num_engines;
+
+	/** @eci: engines attached to this OA unit */
+	struct drm_xe_engine_class_instance eci[];
+};
+
+/**
+ * struct drm_xe_query_oa_units - describe OA units
+ *
+ * If a query is made with a struct drm_xe_device_query where .query
+ * is equal to DRM_XE_DEVICE_QUERY_OA_UNITS, then the reply uses struct
+ * drm_xe_query_oa_units in .data.
+ *
+ * OA unit properties for all OA units can be accessed using a code block
+ * such as the one below:
+ *
+ * .. code-block:: C
+ *
+ *	struct drm_xe_query_oa_units *qoa;
+ *	struct drm_xe_oa_unit *oau;
+ *	u8 *poau;
+ *
+ *	// malloc qoa and issue DRM_XE_DEVICE_QUERY_OA_UNITS. Then:
+ *	poau = (u8 *)&qoa->oa_units[0];
+ *	for (int i = 0; i < qoa->num_oa_units; i++) {
+ *		oau = (struct drm_xe_oa_unit *)poau;
+ *		// Access 'struct drm_xe_oa_unit' fields here
+ *		poau += sizeof(*oau) + oau->num_engines * sizeof(oau->eci[0]);
+ *	}
+ */
+struct drm_xe_query_oa_units {
+	/** @num_oa_units: number of OA units returned in oau[] */
+	__u32 num_oa_units;
+	/** @pad: MBZ */
+	__u32 pad;
+	/** @oa_units: OA units returned for this device */
+	struct drm_xe_oa_unit oa_units[];
+};
+
 /** enum drm_xe_oa_format_type - OA format types */
 enum drm_xe_oa_format_type {
 	DRM_XE_OA_FMT_TYPE_OAG,
@@ -1527,6 +1590,18 @@ struct drm_xe_oa_stream_status {
 	__u64 reserved[3];
 };
 
+/**
+ * struct drm_xe_oa_stream_info - OA stream info returned from
+ * @DRM_XE_PERF_IOCTL_INFO perf fd ioctl
+ */
+struct drm_xe_oa_stream_info {
+	/** @oa_buf_size: OA buffer size */
+	__u64 oa_buf_size;
+
+	/** @reserved */
+	__u64 reserved[3];
+};
+
 #if defined(__cplusplus)
 }
 #endif
-- 
2.41.0


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

* [PATCH 14/16] drm/xe/oa/uapi: OA buffer mmap
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (12 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 13/16] drm/xe/oa/uapi: Query OA unit properties Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 15/16] drm/xe/oa: Add MMIO trigger support Ashutosh Dixit
                   ` (9 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Allow the OA buffer to be mmap'd to userspace. This is needed for the MMIO
trigger use case. Even otherwise, with whitelisted OA head/tail ptr
registers, userspace can receive/interpret OA data from the mmap'd buffer
without issuing read()'s on the OA stream fd.

v2: Remove unmap_mapping_range from xe_oa_release (Thomas H)
    Use vm_flags_mod (Umesh)

Suggested-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_oa.c | 46 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 1178620cd4e76..f34c3cc90dcbc 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -808,6 +808,8 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream)
 		return PTR_ERR(bo);
 
 	stream->oa_buffer.bo = bo;
+	/* mmap implementation requires OA buffer to be in system memory */
+	xe_assert(stream->oa->xe, bo->vmap.is_iomem == 0);
 	stream->oa_buffer.vaddr = bo->vmap.vaddr;
 	return 0;
 }
@@ -1093,6 +1095,49 @@ static int xe_oa_release(struct inode *inode, struct file *file)
 	return 0;
 }
 
+static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
+{
+	struct xe_oa_stream *stream = file->private_data;
+	struct xe_bo *bo = stream->oa_buffer.bo;
+	unsigned long start = vma->vm_start;
+	int i, ret;
+
+	if (xe_perf_stream_paranoid && !perfmon_capable()) {
+		drm_dbg(&stream->oa->xe->drm, "Insufficient privilege to map OA buffer\n");
+		return -EACCES;
+	}
+
+	/* Can mmap the entire OA buffer or nothing (no partial OA buffer mmaps) */
+	if (vma->vm_end - vma->vm_start != XE_OA_BUFFER_SIZE) {
+		drm_dbg(&stream->oa->xe->drm, "Wrong mmap size, must be OA buffer size\n");
+		return -EINVAL;
+	}
+
+	/*
+	 * Only support VM_READ, enforce MAP_PRIVATE by checking for
+	 * VM_MAYSHARE, don't copy the vma on fork
+	 */
+	if (vma->vm_flags & (VM_WRITE | VM_EXEC | VM_SHARED | VM_MAYSHARE)) {
+		drm_dbg(&stream->oa->xe->drm, "mmap must be read only\n");
+		return -EINVAL;
+	}
+	vm_flags_mod(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_DONTCOPY,
+		     VM_MAYWRITE | VM_MAYEXEC);
+
+	xe_assert(stream->oa->xe, bo->ttm.ttm->num_pages ==
+		  (vma->vm_end - vma->vm_start) >> PAGE_SHIFT);
+	for (i = 0; i < bo->ttm.ttm->num_pages; i++) {
+		ret = remap_pfn_range(vma, start, page_to_pfn(bo->ttm.ttm->pages[i]),
+				      PAGE_SIZE, vma->vm_page_prot);
+		if (ret)
+			break;
+
+		start += PAGE_SIZE;
+	}
+
+	return ret;
+}
+
 static const struct file_operations xe_oa_fops = {
 	.owner		= THIS_MODULE,
 	.llseek		= no_llseek,
@@ -1100,6 +1145,7 @@ static const struct file_operations xe_oa_fops = {
 	.poll		= xe_oa_poll,
 	.read		= xe_oa_read,
 	.unlocked_ioctl	= xe_oa_ioctl,
+	.mmap		= xe_oa_mmap,
 };
 
 static bool engine_supports_mi_query(struct xe_hw_engine *hwe)
-- 
2.41.0


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

* [PATCH 15/16] drm/xe/oa: Add MMIO trigger support
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (13 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 14/16] drm/xe/oa/uapi: OA buffer mmap Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:49 ` [PATCH 16/16] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
                   ` (8 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Add MMIO trigger support and allow-list required registers for MMIO trigger
use case. Registers are whitelisted for the lifetime of the driver but MMIO
trigger is enabled only for the duration of the stream.

Bspec: 45925, 60340, 61228

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_oa_regs.h  |  5 +++++
 drivers/gpu/drm/xe/xe_oa.c            | 24 +++++++++++++++++++++++-
 drivers/gpu/drm/xe/xe_reg_whitelist.c | 24 +++++++++++++++++++++++-
 3 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/regs/xe_oa_regs.h b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
index 6f7d300f56c86..4c9eee27b5c48 100644
--- a/drivers/gpu/drm/xe/regs/xe_oa_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_oa_regs.h
@@ -64,11 +64,16 @@
 #define  OA_OACONTROL_COUNTER_SIZE_MASK		REG_GENMASK(8, 8)
 
 #define OAG_OA_DEBUG XE_REG(0xdaf8, XE_REG_OPTION_MASKED)
+#define  OAG_OA_DEBUG_DISABLE_MMIO_TRG			REG_BIT(14)
+#define  OAG_OA_DEBUG_START_TRIGGER_SCOPE_CONTROL	REG_BIT(13)
+#define  OAG_OA_DEBUG_DISABLE_START_TRG_2_COUNT_QUAL	REG_BIT(8)
+#define  OAG_OA_DEBUG_DISABLE_START_TRG_1_COUNT_QUAL	REG_BIT(7)
 #define  OAG_OA_DEBUG_INCLUDE_CLK_RATIO			REG_BIT(6)
 #define  OAG_OA_DEBUG_DISABLE_CLK_RATIO_REPORTS		REG_BIT(5)
 #define  OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS	REG_BIT(1)
 
 #define OAG_OASTATUS			XE_REG(0xdafc)
+#define OAG_MMIOTRIGGER			XE_REG(0xdb1c)
 /* OAC unit */
 #define OAC_OACONTROL			XE_REG(0x15114)
 
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index f34c3cc90dcbc..630aeddc4a533 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -745,6 +745,13 @@ static int xe_oa_configure_oa_context(struct xe_oa_stream *stream, bool enable)
 
 #define HAS_OA_BPC_REPORTING(xe) (GRAPHICS_VERx100(xe) >= 1255)
 
+static u32 oag_configure_mmio_trigger(const struct xe_oa_stream *stream, bool enable)
+{
+	return _MASKED_FIELD(OAG_OA_DEBUG_DISABLE_MMIO_TRG,
+			     enable && stream && stream->sample ?
+			     0 : OAG_OA_DEBUG_DISABLE_MMIO_TRG);
+}
+
 static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
 {
 	u32 sqcnt1;
@@ -760,6 +767,9 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
 					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
 	}
 
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_debug,
+			oag_configure_mmio_trigger(stream, false));
+
 	/* disable the context save/restore or OAR counters */
 	if (stream->exec_q)
 		xe_oa_configure_oa_context(stream, false);
@@ -911,9 +921,17 @@ static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
 	oa_debug = OAG_OA_DEBUG_DISABLE_CLK_RATIO_REPORTS |
 		OAG_OA_DEBUG_INCLUDE_CLK_RATIO;
 
+	if (GRAPHICS_VER(stream->oa->xe) >= 20)
+		oa_debug |=
+			/* The three bits below are needed to get PEC counters running */
+			OAG_OA_DEBUG_START_TRIGGER_SCOPE_CONTROL |
+			OAG_OA_DEBUG_DISABLE_START_TRG_2_COUNT_QUAL |
+			OAG_OA_DEBUG_DISABLE_START_TRG_1_COUNT_QUAL;
+
 	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_debug,
 			_MASKED_BIT_ENABLE(oa_debug) |
-			oag_report_ctx_switches(stream));
+			oag_report_ctx_switches(stream) |
+			oag_configure_mmio_trigger(stream, true));
 
 	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctx_ctrl, stream->periodic ?
 			(OAG_OAGLBCTXCTRL_COUNTER_RESUME |
@@ -2121,6 +2139,10 @@ static void __xe_oa_init_oa_units(struct xe_gt *gt)
 			u->type = DRM_XE_OA_UNIT_TYPE_OAM;
 		}
 
+		/* Ensure MMIO trigger remains disabled till there is a stream */
+		xe_mmio_write32(gt, u->regs.oa_debug,
+				oag_configure_mmio_trigger(NULL, false));
+
 		/* Set oa_unit_ids now to ensure ids remain contiguous */
 		u->oa_unit_id = gt_to_xe(gt)->oa.oa_unit_ids++;
 	}
diff --git a/drivers/gpu/drm/xe/xe_reg_whitelist.c b/drivers/gpu/drm/xe/xe_reg_whitelist.c
index 3fa2ece7d2289..3996934974fa0 100644
--- a/drivers/gpu/drm/xe/xe_reg_whitelist.c
+++ b/drivers/gpu/drm/xe/xe_reg_whitelist.c
@@ -7,6 +7,7 @@
 
 #include "regs/xe_engine_regs.h"
 #include "regs/xe_gt_regs.h"
+#include "regs/xe_oa_regs.h"
 #include "regs/xe_regs.h"
 #include "xe_gt_types.h"
 #include "xe_platform_types.h"
@@ -63,7 +64,28 @@ static const struct xe_rtp_entry_sr register_whitelist[] = {
 		       ENGINE_CLASS(RENDER)),
 	  XE_RTP_ACTIONS(WHITELIST(CSBE_DEBUG_STATUS(RENDER_RING_BASE), 0))
 	},
-
+	{ XE_RTP_NAME("oa_reg_render"),
+	  XE_RTP_RULES(GRAPHICS_VERSION_RANGE(1200, XE_RTP_END_VERSION_UNDEFINED),
+		       ENGINE_CLASS(RENDER)),
+	  XE_RTP_ACTIONS(WHITELIST(OAG_MMIOTRIGGER,
+				   RING_FORCE_TO_NONPRIV_ACCESS_RW),
+			 WHITELIST(OAG_OASTATUS,
+				   RING_FORCE_TO_NONPRIV_ACCESS_RD),
+			 WHITELIST(OAG_OAHEADPTR,
+				   RING_FORCE_TO_NONPRIV_ACCESS_RD |
+				   RING_FORCE_TO_NONPRIV_RANGE_4))
+	},
+	{ XE_RTP_NAME("oa_reg_compute"),
+	  XE_RTP_RULES(GRAPHICS_VERSION_RANGE(1200, XE_RTP_END_VERSION_UNDEFINED),
+		       ENGINE_CLASS(COMPUTE)),
+	  XE_RTP_ACTIONS(WHITELIST(OAG_MMIOTRIGGER,
+				   RING_FORCE_TO_NONPRIV_ACCESS_RW),
+			 WHITELIST(OAG_OASTATUS,
+				   RING_FORCE_TO_NONPRIV_ACCESS_RD),
+			 WHITELIST(OAG_OAHEADPTR,
+				   RING_FORCE_TO_NONPRIV_ACCESS_RD |
+				   RING_FORCE_TO_NONPRIV_RANGE_4))
+	},
 	{}
 };
 
-- 
2.41.0


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

* [PATCH 16/16] drm/xe/oa: Override GuC RC with OA on PVC
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (14 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 15/16] drm/xe/oa: Add MMIO trigger support Ashutosh Dixit
@ 2024-02-08  5:49 ` Ashutosh Dixit
  2024-02-08  5:52 ` ✓ CI.Patch_applied: success for Add OA functionality to Xe (rev9) Patchwork
                   ` (7 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-08  5:49 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

On PVC, a w/a resets RCS/CCS before it goes into RC6. This breaks OA since
OA does not expect engine resets during its use. Fix it by disabling RC6.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_guc_pc.c   | 60 ++++++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_guc_pc.h   |  3 ++
 drivers/gpu/drm/xe/xe_oa.c       | 25 ++++++++++++-
 drivers/gpu/drm/xe/xe_oa_types.h |  3 ++
 4 files changed, 90 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
index d91702592520a..c94f15f34c659 100644
--- a/drivers/gpu/drm/xe/xe_guc_pc.c
+++ b/drivers/gpu/drm/xe/xe_guc_pc.c
@@ -209,6 +209,27 @@ static int pc_action_set_param(struct xe_guc_pc *pc, u8 id, u32 value)
 	return ret;
 }
 
+static int pc_action_unset_param(struct xe_guc_pc *pc, u8 id)
+{
+	struct xe_guc_ct *ct = &pc_to_guc(pc)->ct;
+	int ret;
+	u32 action[] = {
+		GUC_ACTION_HOST2GUC_PC_SLPC_REQUEST,
+		SLPC_EVENT(SLPC_EVENT_PARAMETER_UNSET, 1),
+		id,
+	};
+
+	if (wait_for_pc_state(pc, SLPC_GLOBAL_STATE_RUNNING))
+		return -EAGAIN;
+
+	ret = xe_guc_ct_send(ct, action, ARRAY_SIZE(action), 0, 0);
+	if (ret)
+		drm_err(&pc_to_xe(pc)->drm, "GuC PC unset param failed: %pe",
+			ERR_PTR(ret));
+
+	return ret;
+}
+
 static int pc_action_setup_gucrc(struct xe_guc_pc *pc, u32 mode)
 {
 	struct xe_guc_ct *ct = &pc_to_guc(pc)->ct;
@@ -820,6 +841,45 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
 	return ret;
 }
 
+/**
+ * xe_guc_pc_override_gucrc_mode() - override GUCRC mode
+ * @pc: Xe_GuC_PC instance
+ * @mode: new value of the mode.
+ *
+ * Override the GUCRC mode.
+ *
+ * Return: 0 on success, negative error code on error.
+ */
+int xe_guc_pc_override_gucrc_mode(struct xe_guc_pc *pc, enum slpc_gucrc_mode mode)
+{
+	int ret;
+
+	xe_device_mem_access_get(pc_to_xe(pc));
+	ret = pc_action_set_param(pc, SLPC_PARAM_PWRGATE_RC_MODE, mode);
+	xe_device_mem_access_put(pc_to_xe(pc));
+
+	return ret;
+}
+
+/**
+ * xe_guc_pc_override_gucrc_mode() - override GUCRC mode
+ * @pc: Xe_GuC_PC instance
+ *
+ * Unset the GUCRC mode override
+ *
+ * Return: 0 on success, negative error code on error.
+ */
+int xe_guc_pc_unset_gucrc_mode(struct xe_guc_pc *pc)
+{
+	int ret;
+
+	xe_device_mem_access_get(pc_to_xe(pc));
+	ret = pc_action_unset_param(pc, SLPC_PARAM_PWRGATE_RC_MODE);
+	xe_device_mem_access_put(pc_to_xe(pc));
+
+	return ret;
+}
+
 static void pc_init_pcode_freq(struct xe_guc_pc *pc)
 {
 	u32 min = DIV_ROUND_CLOSEST(pc->rpn_freq, GT_FREQUENCY_MULTIPLIER);
diff --git a/drivers/gpu/drm/xe/xe_guc_pc.h b/drivers/gpu/drm/xe/xe_guc_pc.h
index cecad8e9300b4..60ce33fdeb153 100644
--- a/drivers/gpu/drm/xe/xe_guc_pc.h
+++ b/drivers/gpu/drm/xe/xe_guc_pc.h
@@ -7,12 +7,15 @@
 #define _XE_GUC_PC_H_
 
 #include "xe_guc_pc_types.h"
+#include "abi/guc_actions_slpc_abi.h"
 
 int xe_guc_pc_init(struct xe_guc_pc *pc);
 void xe_guc_pc_fini(struct xe_guc_pc *pc);
 int xe_guc_pc_start(struct xe_guc_pc *pc);
 int xe_guc_pc_stop(struct xe_guc_pc *pc);
 int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc);
+int xe_guc_pc_override_gucrc_mode(struct xe_guc_pc *pc, enum slpc_gucrc_mode mode);
+int xe_guc_pc_unset_gucrc_mode(struct xe_guc_pc *pc);
 
 u32 xe_guc_pc_get_act_freq(struct xe_guc_pc *pc);
 int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq);
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 630aeddc4a533..c26bbed1940ec 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -21,6 +21,7 @@
 #include "xe_bo.h"
 #include "xe_gt.h"
 #include "xe_gt_mcr.h"
+#include "xe_guc_pc.h"
 #include "xe_lrc.h"
 #include "xe_mmio.h"
 #include "xe_oa.h"
@@ -801,6 +802,10 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
 	xe_device_mem_access_put(stream->oa->xe);
 
 	xe_oa_free_oa_buffer(stream);
+	/* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable rc6 */
+	if (stream->override_gucrc)
+		XE_WARN_ON(xe_guc_pc_unset_gucrc_mode(&gt->uc.guc.pc));
+
 	xe_oa_free_configs(stream);
 }
 
@@ -1273,9 +1278,24 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
 		goto exit;
 	}
 
+	/*
+	 * Wa_1509372804:pvc
+	 *
+	 * GuC reset of engines causes OA to lose configuration
+	 * state. Prevent this by overriding GUCRC mode.
+	 */
+	if (stream->oa->xe->info.platform == XE_PVC) {
+		ret = xe_guc_pc_override_gucrc_mode(&gt->uc.guc.pc,
+						    SLPC_GUCRC_MODE_GUCRC_NO_RC6);
+		if (ret)
+			goto err_free_configs;
+
+		stream->override_gucrc = true;
+	}
+
 	ret = xe_oa_alloc_oa_buffer(stream);
 	if (ret)
-		goto err_free_configs;
+		goto err_unset_gucrc;
 
 	/* Take runtime pm ref and forcewake to disable RC6 */
 	xe_device_mem_access_get(stream->oa->xe);
@@ -1318,6 +1338,9 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
 	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
 	xe_device_mem_access_put(stream->oa->xe);
 	xe_oa_free_oa_buffer(stream);
+err_unset_gucrc:
+	if (stream->override_gucrc)
+		XE_WARN_ON(xe_guc_pc_unset_gucrc_mode(&gt->uc.guc.pc));
 err_free_configs:
 	xe_oa_free_configs(stream);
 exit:
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index d93b7b490563b..bee49977ee3d4 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -223,5 +223,8 @@ struct xe_oa_stream {
 
 	/** @poll_period_ns: hrtimer period for checking OA buffer for available data */
 	u64 poll_period_ns;
+
+	/** @override_gucrc: GuC RC has been overridden for the OA stream */
+	bool override_gucrc;
 };
 #endif
-- 
2.41.0


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

* ✓ CI.Patch_applied: success for Add OA functionality to Xe (rev9)
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (15 preceding siblings ...)
  2024-02-08  5:49 ` [PATCH 16/16] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
@ 2024-02-08  5:52 ` Patchwork
  2024-02-08  5:53 ` ✗ CI.checkpatch: warning " Patchwork
                   ` (6 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2024-02-08  5:52 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

== Series Details ==

Series: Add OA functionality to Xe (rev9)
URL   : https://patchwork.freedesktop.org/series/121084/
State : success

== Summary ==

=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: a942be9b4 drm-tip: 2024y-02m-08d-00h-15m-57s UTC integration manifest
=== git am output follows ===
Applying: drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types
Applying: drm/xe/perf/uapi: Add perf_stream_paranoid sysctl
Applying: drm/xe/oa/uapi: Add OA data formats
Applying: drm/xe/oa/uapi: Initialize OA units
Applying: drm/xe/oa/uapi: Add/remove OA config perf ops
Applying: drm/xe/oa/uapi: Define and parse OA stream properties
Applying: drm/xe/oa: OA stream initialization (OAG)
Applying: drm/xe/oa/uapi: Expose OA stream fd
Applying: drm/xe/oa/uapi: Read file_operation
Applying: drm/xe/oa: Disable overrun mode for Xe2+ OAG
Applying: drm/xe/oa: Add OAR support
Applying: drm/xe/oa: Add OAC support
Applying: drm/xe/oa/uapi: Query OA unit properties
Applying: drm/xe/oa/uapi: OA buffer mmap
Applying: drm/xe/oa: Add MMIO trigger support
Applying: drm/xe/oa: Override GuC RC with OA on PVC



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

* ✗ CI.checkpatch: warning for Add OA functionality to Xe (rev9)
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (16 preceding siblings ...)
  2024-02-08  5:52 ` ✓ CI.Patch_applied: success for Add OA functionality to Xe (rev9) Patchwork
@ 2024-02-08  5:53 ` Patchwork
  2024-02-08  5:54 ` ✓ CI.KUnit: success " Patchwork
                   ` (5 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2024-02-08  5:53 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

== Series Details ==

Series: Add OA functionality to Xe (rev9)
URL   : https://patchwork.freedesktop.org/series/121084/
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
35591fb8b4d5305b37ce31483f85ac0956eaa536
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 66f587ab17f71a24046e4433533e76909d4148c3
Author: Ashutosh Dixit <ashutosh.dixit@intel.com>
Date:   Wed Feb 7 21:49:16 2024 -0800

    drm/xe/oa: Override GuC RC with OA on PVC
    
    On PVC, a w/a resets RCS/CCS before it goes into RC6. This breaks OA since
    OA does not expect engine resets during its use. Fix it by disabling RC6.
    
    Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
    Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
+ /mt/dim checkpatch a942be9b4f39a05326a5fc3fd774fb143b4d9507 drm-intel
f2ce5d3c2 drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:65: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#65: 
new file mode 100644

-:130: WARNING:LONG_LINE: line length of 113 exceeds 100 columns
#130: FILE: include/uapi/drm/xe_drm.h:118:
+#define DRM_IOCTL_XE_PERF			DRM_IOW(DRM_COMMAND_BASE + DRM_XE_PERF, struct drm_xe_perf_param)

total: 0 errors, 2 warnings, 0 checks, 141 lines checked
719be21bf drm/xe/perf/uapi: Add perf_stream_paranoid sysctl
df01eaab3 drm/xe/oa/uapi: Add OA data formats
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:112: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#112: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 278 lines checked
44a32d47f drm/xe/oa/uapi: Initialize OA units
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:17: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#17: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 396 lines checked
d5ebf601b drm/xe/oa/uapi: Add/remove OA config perf ops
9e4695063 drm/xe/oa/uapi: Define and parse OA stream properties
ffe009333 drm/xe/oa: OA stream initialization (OAG)
27d462ab8 drm/xe/oa/uapi: Expose OA stream fd
7316cfc71 drm/xe/oa/uapi: Read file_operation
682beac55 drm/xe/oa: Disable overrun mode for Xe2+ OAG
c857f5dde drm/xe/oa: Add OAR support
5c2b738e0 drm/xe/oa: Add OAC support
2331a8adb drm/xe/oa/uapi: Query OA unit properties
e6d6e48f9 drm/xe/oa/uapi: OA buffer mmap
0721016a2 drm/xe/oa: Add MMIO trigger support
66f587ab1 drm/xe/oa: Override GuC RC with OA on PVC



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

* ✓ CI.KUnit: success for Add OA functionality to Xe (rev9)
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (17 preceding siblings ...)
  2024-02-08  5:53 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-02-08  5:54 ` Patchwork
  2024-02-08  6:01 ` ✓ CI.Build: " Patchwork
                   ` (4 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2024-02-08  5:54 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

== Series Details ==

Series: Add OA functionality to Xe (rev9)
URL   : https://patchwork.freedesktop.org/series/121084/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[05:53:30] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[05:53:34] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../arch/x86/um/user-offsets.c:17:6: warning: no previous prototype for ‘foo’ [-Wmissing-prototypes]
   17 | void foo(void)
      |      ^~~
In file included from ../arch/um/kernel/asm-offsets.c:1:
../arch/x86/um/shared/sysdep/kernel-offsets.h:9:6: warning: no previous prototype for ‘foo’ [-Wmissing-prototypes]
    9 | void foo(void)
      |      ^~~
../arch/x86/um/bugs_64.c:9:6: warning: no previous prototype for ‘arch_check_bugs’ [-Wmissing-prototypes]
    9 | void arch_check_bugs(void)
      |      ^~~~~~~~~~~~~~~
../arch/x86/um/bugs_64.c:13:6: warning: no previous prototype for ‘arch_examine_signal’ [-Wmissing-prototypes]
   13 | void arch_examine_signal(int sig, struct uml_pt_regs *regs)
      |      ^~~~~~~~~~~~~~~~~~~
../arch/x86/um/fault.c:18:5: warning: no previous prototype for ‘arch_fixup’ [-Wmissing-prototypes]
   18 | int arch_fixup(unsigned long address, struct uml_pt_regs *regs)
      |     ^~~~~~~~~~
../arch/x86/um/os-Linux/registers.c:146:15: warning: no previous prototype for ‘get_thread_reg’ [-Wmissing-prototypes]
  146 | unsigned long get_thread_reg(int reg, jmp_buf *buf)
      |               ^~~~~~~~~~~~~~
../arch/x86/um/vdso/um_vdso.c:16:5: warning: no previous prototype for ‘__vdso_clock_gettime’ [-Wmissing-prototypes]
   16 | int __vdso_clock_gettime(clockid_t clock, struct __kernel_old_timespec *ts)
      |     ^~~~~~~~~~~~~~~~~~~~
../arch/x86/um/vdso/um_vdso.c:30:5: warning: no previous prototype for ‘__vdso_gettimeofday’ [-Wmissing-prototypes]
   30 | int __vdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
      |     ^~~~~~~~~~~~~~~~~~~
../arch/x86/um/vdso/um_vdso.c:44:21: warning: no previous prototype for ‘__vdso_time’ [-Wmissing-prototypes]
   44 | __kernel_old_time_t __vdso_time(__kernel_old_time_t *t)
      |                     ^~~~~~~~~~~
../arch/x86/um/vdso/um_vdso.c:57:1: warning: no previous prototype for ‘__vdso_getcpu’ [-Wmissing-prototypes]
   57 | __vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused)
      | ^~~~~~~~~~~~~
../arch/x86/um/os-Linux/mcontext.c:7:6: warning: no previous prototype for ‘get_regs_from_mc’ [-Wmissing-prototypes]
    7 | void get_regs_from_mc(struct uml_pt_regs *regs, mcontext_t *mc)
      |      ^~~~~~~~~~~~~~~~
../arch/um/os-Linux/skas/process.c:107:6: warning: no previous prototype for ‘wait_stub_done’ [-Wmissing-prototypes]
  107 | void wait_stub_done(int pid)
      |      ^~~~~~~~~~~~~~
../arch/um/os-Linux/skas/process.c:683:6: warning: no previous prototype for ‘__switch_mm’ [-Wmissing-prototypes]
  683 | void __switch_mm(struct mm_id *mm_idp)
      |      ^~~~~~~~~~~
../arch/um/kernel/skas/mmu.c:17:5: warning: no previous prototype for ‘init_new_context’ [-Wmissing-prototypes]
   17 | int init_new_context(struct task_struct *task, struct mm_struct *mm)
      |     ^~~~~~~~~~~~~~~~
../arch/um/kernel/skas/mmu.c:60:6: warning: no previous prototype for ‘destroy_context’ [-Wmissing-prototypes]
   60 | void destroy_context(struct mm_struct *mm)
      |      ^~~~~~~~~~~~~~~
../arch/x86/um/ptrace_64.c:111:5: warning: no previous prototype for ‘poke_user’ [-Wmissing-prototypes]
  111 | int poke_user(struct task_struct *child, long addr, long data)
      |     ^~~~~~~~~
../arch/x86/um/ptrace_64.c:171:5: warning: no previous prototype for ‘peek_user’ [-Wmissing-prototypes]
  171 | int peek_user(struct task_struct *child, long addr, long data)
      |     ^~~~~~~~~
../arch/um/kernel/skas/process.c:36:12: warning: no previous prototype for ‘start_uml’ [-Wmissing-prototypes]
   36 | int __init start_uml(void)
      |            ^~~~~~~~~
../arch/um/os-Linux/main.c:187:7: warning: no previous prototype for ‘__wrap_malloc’ [-Wmissing-prototypes]
  187 | void *__wrap_malloc(int size)
      |       ^~~~~~~~~~~~~
../arch/um/os-Linux/main.c:208:7: warning: no previous prototype for ‘__wrap_calloc’ [-Wmissing-prototypes]
  208 | void *__wrap_calloc(int n, int size)
      |       ^~~~~~~~~~~~~
../arch/um/os-Linux/main.c:222:6: warning: no previous prototype for ‘__wrap_free’ [-Wmissing-prototypes]
  222 | void __wrap_free(void *ptr)
      |      ^~~~~~~~~~~
../arch/um/os-Linux/mem.c:28:6: warning: no previous prototype for ‘kasan_map_memory’ [-Wmissing-prototypes]
   28 | void kasan_map_memory(void *start, size_t len)
      |      ^~~~~~~~~~~~~~~~
../arch/um/os-Linux/mem.c:212:13: warning: no previous prototype for ‘check_tmpexec’ [-Wmissing-prototypes]
  212 | void __init check_tmpexec(void)
      |             ^~~~~~~~~~~~~
../arch/x86/um/signal.c:560:6: warning: no previous prototype for ‘sys_rt_sigreturn’ [-Wmissing-prototypes]
  560 | long sys_rt_sigreturn(void)
      |      ^~~~~~~~~~~~~~~~
../arch/um/os-Linux/signal.c:75:6: warning: no previous prototype for ‘sig_handler’ [-Wmissing-prototypes]
   75 | void sig_handler(int sig, struct siginfo *si, mcontext_t *mc)
      |      ^~~~~~~~~~~
../arch/um/os-Linux/signal.c:111:6: warning: no previous prototype for ‘timer_alarm_handler’ [-Wmissing-prototypes]
  111 | void timer_alarm_handler(int sig, struct siginfo *unused_si, mcontext_t *mc)
      |      ^~~~~~~~~~~~~~~~~~~
../arch/um/os-Linux/start_up.c:301:12: warning: no previous prototype for ‘parse_iomem’ [-Wmissing-prototypes]
  301 | int __init parse_iomem(char *str, int *add)
      |            ^~~~~~~~~~~
../arch/um/kernel/mem.c:202:8: warning: no previous prototype for ‘pgd_alloc’ [-Wmissing-prototypes]
  202 | pgd_t *pgd_alloc(struct mm_struct *mm)
      |        ^~~~~~~~~
../arch/um/kernel/mem.c:215:7: warning: no previous prototype for ‘uml_kmalloc’ [-Wmissing-prototypes]
  215 | void *uml_kmalloc(int size, int flags)
      |       ^~~~~~~~~~~
../arch/um/kernel/reboot.c:45:6: warning: no previous prototype for ‘machine_restart’ [-Wmissing-prototypes]
   45 | void machine_restart(char * __unused)
      |      ^~~~~~~~~~~~~~~
../arch/um/kernel/reboot.c:51:6: warning: no previous prototype for ‘machine_power_off’ [-Wmissing-prototypes]
   51 | void machine_power_off(void)
      |      ^~~~~~~~~~~~~~~~~
../arch/um/kernel/reboot.c:57:6: warning: no previous prototype for ‘machine_halt’ [-Wmissing-prototypes]
   57 | void machine_halt(void)
      |      ^~~~~~~~~~~~
../arch/um/kernel/process.c:51:5: warning: no previous prototype for ‘pid_to_processor_id’ [-Wmissing-prototypes]
   51 | int pid_to_processor_id(int pid)
      |     ^~~~~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:87:7: warning: no previous prototype for ‘__switch_to’ [-Wmissing-prototypes]
   87 | void *__switch_to(struct task_struct *from, struct task_struct *to)
      |       ^~~~~~~~~~~
../arch/um/kernel/process.c:140:6: warning: no previous prototype for ‘fork_handler’ [-Wmissing-prototypes]
  140 | void fork_handler(void)
      |      ^~~~~~~~~~~~
../arch/um/kernel/process.c:217:6: warning: no previous prototype for ‘arch_cpu_idle’ [-Wmissing-prototypes]
  217 | void arch_cpu_idle(void)
      |      ^~~~~~~~~~~~~
../arch/um/kernel/process.c:253:5: warning: no previous prototype for ‘copy_to_user_proc’ [-Wmissing-prototypes]
  253 | int copy_to_user_proc(void __user *to, void *from, int size)
      |     ^~~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:263:5: warning: no previous prototype for ‘clear_user_proc’ [-Wmissing-prototypes]
  263 | int clear_user_proc(void __user *buf, int size)
      |     ^~~~~~~~~~~~~~~
../arch/um/kernel/process.c:271:6: warning: no previous prototype for ‘set_using_sysemu’ [-Wmissing-prototypes]
  271 | void set_using_sysemu(int value)
      |      ^~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:278:5: warning: no previous prototype for ‘get_using_sysemu’ [-Wmissing-prototypes]
  278 | int get_using_sysemu(void)
      |     ^~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:316:12: warning: no previous prototype for ‘make_proc_sysemu’ [-Wmissing-prototypes]
  316 | int __init make_proc_sysemu(void)
      |            ^~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:348:15: warning: no previous prototype for ‘arch_align_stack’ [-Wmissing-prototypes]
  348 | unsigned long arch_align_stack(unsigned long sp)
      |               ^~~~~~~~~~~~~~~~
../arch/x86/um/syscalls_64.c:48:6: warning: no previous prototype for ‘arch_switch_to’ [-Wmissing-prototypes]
   48 | void arch_switch_to(struct task_struct *to)
      |      ^~~~~~~~~~~~~~
../arch/um/kernel/tlb.c:579:6: warning: no previous prototype for ‘flush_tlb_mm_range’ [-Wmissing-prototypes]
  579 | void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
      |      ^~~~~~~~~~~~~~~~~~
../arch/um/kernel/tlb.c:594:6: warning: no previous prototype for ‘force_flush_all’ [-Wmissing-prototypes]
  594 | void force_flush_all(void)
      |      ^~~~~~~~~~~~~~~
../arch/um/kernel/um_arch.c:408:19: warning: no previous prototype for ‘read_initrd’ [-Wmissing-prototypes]
  408 | int __init __weak read_initrd(void)
      |                   ^~~~~~~~~~~
../arch/um/kernel/um_arch.c:461:7: warning: no previous prototype for ‘text_poke’ [-Wmissing-prototypes]
  461 | void *text_poke(void *addr, const void *opcode, size_t len)
      |       ^~~~~~~~~
../arch/um/kernel/um_arch.c:473:6: warning: no previous prototype for ‘text_poke_sync’ [-Wmissing-prototypes]
  473 | void text_poke_sync(void)
      |      ^~~~~~~~~~~~~~
../arch/um/kernel/kmsg_dump.c:60:12: warning: no previous prototype for ‘kmsg_dumper_stdout_init’ [-Wmissing-prototypes]
   60 | int __init kmsg_dumper_stdout_init(void)
      |            ^~~~~~~~~~~~~~~~~~~~~~~
../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)
      |      ^~~~~~~~~~~~~~~~~
stty: 'standard input': Inappropriate ioctl for device

[05:53:58] Starting KUnit Kernel (1/1)...
[05:53:58] ============================================================
[05:53:58] =================== guc_dbm (7 subtests) ===================
[05:53:58] [PASSED] test_empty
[05:53:58] [PASSED] test_default
[05:53:58] ======================== test_size  ========================
[05:53:58] [PASSED] 4
[05:53:58] [PASSED] 8
[05:53:58] [PASSED] 32
[05:53:58] [PASSED] 256
[05:53:58] ==================== [PASSED] test_size ====================
[05:53:58] ======================= test_reuse  ========================
[05:53:58] [PASSED] 4
[05:53:58] [PASSED] 8
[05:53:58] [PASSED] 32
[05:53:58] [PASSED] 256
[05:53:58] =================== [PASSED] test_reuse ====================
[05:53:58] =================== test_range_overlap  ====================
[05:53:58] [PASSED] 4
[05:53:58] [PASSED] 8
[05:53:58] [PASSED] 32
[05:53:58] [PASSED] 256
[05:53:58] =============== [PASSED] test_range_overlap ================
[05:53:58] =================== test_range_compact  ====================
[05:53:58] [PASSED] 4
[05:53:58] [PASSED] 8
[05:53:58] [PASSED] 32
[05:53:58] [PASSED] 256
[05:53:58] =============== [PASSED] test_range_compact ================
[05:53:58] ==================== test_range_spare  =====================
[05:53:58] [PASSED] 4
[05:53:58] [PASSED] 8
[05:53:58] [PASSED] 32
[05:53:58] [PASSED] 256
[05:53:58] ================ [PASSED] test_range_spare =================
[05:53:58] ===================== [PASSED] guc_dbm =====================
[05:53:58] ================== no_relay (3 subtests) ===================
[05:53:58] [PASSED] xe_drops_guc2pf_if_not_ready
[05:53:58] [PASSED] xe_drops_guc2vf_if_not_ready
[05:53:58] [PASSED] xe_rejects_send_if_not_ready
[05:53:58] ==================== [PASSED] no_relay =====================
[05:53:58] ================== pf_relay (14 subtests) ==================
[05:53:58] [PASSED] pf_rejects_guc2pf_too_short
[05:53:58] [PASSED] pf_rejects_guc2pf_too_long
[05:53:58] [PASSED] pf_rejects_guc2pf_no_payload
[05:53:58] [PASSED] pf_fails_no_payload
[05:53:58] [PASSED] pf_fails_bad_origin
[05:53:58] [PASSED] pf_fails_bad_type
[05:53:58] [PASSED] pf_txn_reports_error
[05:53:58] [PASSED] pf_txn_sends_pf2guc
[05:53:58] [PASSED] pf_sends_pf2guc
[05:53:58] [SKIPPED] pf_loopback_nop
[05:53:58] [SKIPPED] pf_loopback_echo
[05:53:58] [SKIPPED] pf_loopback_fail
[05:53:58] [SKIPPED] pf_loopback_busy
[05:53:58] [SKIPPED] pf_loopback_retry
[05:53:58] ==================== [PASSED] pf_relay =====================
[05:53:58] ================== vf_relay (3 subtests) ===================
[05:53:58] [PASSED] vf_rejects_guc2vf_too_short
[05:53:58] [PASSED] vf_rejects_guc2vf_too_long
[05:53:58] [PASSED] vf_rejects_guc2vf_no_payload
[05:53:58] ==================== [PASSED] vf_relay =====================
[05:53:58] ===================== lmtt (1 subtest) =====================
[05:53:58] ======================== test_ops  =========================
[05:53:58] [PASSED] 2-level
[05:53:58] [PASSED] multi-level
[05:53:58] ==================== [PASSED] test_ops =====================
[05:53:58] ====================== [PASSED] lmtt =======================
[05:53:58] ==================== xe_bo (2 subtests) ====================
[05:53:58] [SKIPPED] xe_ccs_migrate_kunit
[05:53:58] [SKIPPED] xe_bo_evict_kunit
[05:53:58] ===================== [SKIPPED] xe_bo ======================
[05:53:58] ================== xe_dma_buf (1 subtest) ==================
[05:53:58] [SKIPPED] xe_dma_buf_kunit
[05:53:58] =================== [SKIPPED] xe_dma_buf ===================
[05:53:58] ================== xe_migrate (1 subtest) ==================
[05:53:58] [SKIPPED] xe_migrate_sanity_kunit
[05:53:58] =================== [SKIPPED] xe_migrate ===================
[05:53:58] =================== xe_mocs (2 subtests) ===================
[05:53:58] [SKIPPED] xe_live_mocs_kernel_kunit
[05:53:58] [SKIPPED] xe_live_mocs_reset_kunit
[05:53:58] ==================== [SKIPPED] xe_mocs =====================
[05:53:58] =================== xe_pci (2 subtests) ====================
[05:53:58] [PASSED] xe_gmdid_graphics_ip
[05:53:58] [PASSED] xe_gmdid_media_ip
[05:53:58] ===================== [PASSED] xe_pci ======================
[05:53:58] ==================== xe_rtp (1 subtest) ====================
[05:53:58] ================== xe_rtp_process_tests  ===================
[05:53:58] [PASSED] coalesce-same-reg
[05:53:58] [PASSED] no-match-no-add
[05:53:58] [PASSED] no-match-no-add-multiple-rules
[05:53:58] [PASSED] two-regs-two-entries
[05:53:58] [PASSED] clr-one-set-other
[05:53:58] [PASSED] set-field
[05:53:58] [PASSED] conflict-duplicate
[05:53:58] [PASSED] conflict-not-disjoint
[05:53:58] [PASSED] conflict-reg-type
[05:53:58] ============== [PASSED] xe_rtp_process_tests ===============
[05:53:58] ===================== [PASSED] xe_rtp ======================
[05:53:58] ==================== xe_wa (1 subtest) =====================
[05:53:58] ======================== xe_wa_gt  =========================
[05:53:58] [PASSED] TIGERLAKE (B0)
[05:53:58] [PASSED] DG1 (A0)
[05:53:58] [PASSED] DG1 (B0)
[05:53:58] [PASSED] ALDERLAKE_S (A0)
[05:53:58] [PASSED] ALDERLAKE_S (B0)
[05:53:58] [PASSED] ALDERLAKE_S (C0)
[05:53:58] [PASSED] ALDERLAKE_S (D0)
[05:53:58] [PASSED] ALDERLAKE_P (A0)
[05:53:58] [PASSED] ALDERLAKE_P (B0)
[05:53:58] [PASSED] ALDERLAKE_P (C0)
[05:53:58] [PASSED] ALDERLAKE_S_RPLS (D0)
[05:53:58] [PASSED] ALDERLAKE_P_RPLU (E0)
[05:53:58] [PASSED] DG2_G10 (C0)
[05:53:58] [PASSED] DG2_G11 (B1)
[05:53:58] [PASSED] DG2_G12 (A1)
[05:53:58] [PASSED] METEORLAKE (g:A0, m:A0)
[05:53:58] [PASSED] METEORLAKE (g:A0, m:A0)
[05:53:58] [PASSED] LUNARLAKE (g:A0, m:A0)
[05:53:58] [PASSED] LUNARLAKE (g:B0, m:A0)
[05:53:58] ==================== [PASSED] xe_wa_gt =====================
[05:53:58] ====================== [PASSED] xe_wa ======================
[05:53:58] ============================================================
[05:53:58] Testing complete. Ran 80 tests: passed: 69, skipped: 11
[05:53:58] Elapsed time: 28.053s total, 4.336s configuring, 23.497s building, 0.180s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[05:53:58] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[05:54:00] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
In file included from ../arch/um/kernel/asm-offsets.c:1:
../arch/x86/um/shared/sysdep/kernel-offsets.h:9:6: warning: no previous prototype for ‘foo’ [-Wmissing-prototypes]
    9 | void foo(void)
      |      ^~~
../arch/x86/um/ptrace_64.c:111:5: warning: no previous prototype for ‘poke_user’ [-Wmissing-prototypes]
  111 | int poke_user(struct task_struct *child, long addr, long data)
      |     ^~~~~~~~~
../arch/x86/um/ptrace_64.c:171:5: warning: no previous prototype for ‘peek_user’ [-Wmissing-prototypes]
  171 | int peek_user(struct task_struct *child, long addr, long data)
      |     ^~~~~~~~~
../arch/um/kernel/mem.c:202:8: warning: no previous prototype for ‘pgd_alloc’ [-Wmissing-prototypes]
  202 | pgd_t *pgd_alloc(struct mm_struct *mm)
      |        ^~~~~~~~~
../arch/um/kernel/mem.c:215:7: warning: no previous prototype for ‘uml_kmalloc’ [-Wmissing-prototypes]
  215 | void *uml_kmalloc(int size, int flags)
      |       ^~~~~~~~~~~
../arch/um/kernel/process.c:51:5: warning: no previous prototype for ‘pid_to_processor_id’ [-Wmissing-prototypes]
   51 | int pid_to_processor_id(int pid)
      |     ^~~~~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:87:7: warning: no previous prototype for ‘__switch_to’ [-Wmissing-prototypes]
   87 | void *__switch_to(struct task_struct *from, struct task_struct *to)
      |       ^~~~~~~~~~~
../arch/um/kernel/process.c:140:6: warning: no previous prototype for ‘fork_handler’ [-Wmissing-prototypes]
  140 | void fork_handler(void)
      |      ^~~~~~~~~~~~
../arch/um/kernel/process.c:217:6: warning: no previous prototype for ‘arch_cpu_idle’ [-Wmissing-prototypes]
  217 | void arch_cpu_idle(void)
      |      ^~~~~~~~~~~~~
../arch/um/kernel/process.c:253:5: warning: no previous prototype for ‘copy_to_user_proc’ [-Wmissing-prototypes]
  253 | int copy_to_user_proc(void __user *to, void *from, int size)
      |     ^~~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:263:5: warning: no previous prototype for ‘clear_user_proc’ [-Wmissing-prototypes]
  263 | int clear_user_proc(void __user *buf, int size)
      |     ^~~~~~~~~~~~~~~
../arch/um/kernel/process.c:271:6: warning: no previous prototype for ‘set_using_sysemu’ [-Wmissing-prototypes]
  271 | void set_using_sysemu(int value)
      |      ^~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:278:5: warning: no previous prototype for ‘get_using_sysemu’ [-Wmissing-prototypes]
  278 | int get_using_sysemu(void)
      |     ^~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:316:12: warning: no previous prototype for ‘make_proc_sysemu’ [-Wmissing-prototypes]
  316 | int __init make_proc_sysemu(void)
      |            ^~~~~~~~~~~~~~~~
../arch/um/kernel/process.c:348:15: warning: no previous prototype for ‘arch_align_stack’ [-Wmissing-prototypes]
  348 | unsigned long arch_align_stack(unsigned long sp)
      |               ^~~~~~~~~~~~~~~~
../arch/x86/um/signal.c:560:6: warning: no previous prototype for ‘sys_rt_sigreturn’ [-Wmissing-prototypes]
  560 | long sys_rt_sigreturn(void)
      |      ^~~~~~~~~~~~~~~~
../arch/um/kernel/reboot.c:45:6: warning: no previous prototype for ‘machine_restart’ [-Wmissing-prototypes]
   45 | void machine_restart(char * __unused)
      |      ^~~~~~~~~~~~~~~
../arch/um/kernel/reboot.c:51:6: warning: no previous prototype for ‘machine_power_off’ [-Wmissing-prototypes]
   51 | void machine_power_off(void)
      |      ^~~~~~~~~~~~~~~~~
../arch/um/kernel/reboot.c:57:6: warning: no previous prototype for ‘machine_halt’ [-Wmissing-prototypes]
   57 | void machine_halt(void)
      |      ^~~~~~~~~~~~
../arch/um/kernel/tlb.c:579:6: warning: no previous prototype for ‘flush_tlb_mm_range’ [-Wmissing-prototypes]
  579 | void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
      |      ^~~~~~~~~~~~~~~~~~
../arch/um/kernel/tlb.c:594:6: warning: no previous prototype for ‘force_flush_all’ [-Wmissing-prototypes]
  594 | void force_flush_all(void)
      |      ^~~~~~~~~~~~~~~
../arch/x86/um/syscalls_64.c:48:6: warning: no previous prototype for ‘arch_switch_to’ [-Wmissing-prototypes]
   48 | void arch_switch_to(struct task_struct *to)
      |      ^~~~~~~~~~~~~~
../arch/um/kernel/um_arch.c:408:19: warning: no previous prototype for ‘read_initrd’ [-Wmissing-prototypes]
  408 | int __init __weak read_initrd(void)
      |                   ^~~~~~~~~~~
../arch/um/kernel/um_arch.c:461:7: warning: no previous prototype for ‘text_poke’ [-Wmissing-prototypes]
  461 | void *text_poke(void *addr, const void *opcode, size_t len)
      |       ^~~~~~~~~
../arch/um/kernel/um_arch.c:473:6: warning: no previous prototype for ‘text_poke_sync’ [-Wmissing-prototypes]
  473 | void text_poke_sync(void)
      |      ^~~~~~~~~~~~~~
../arch/um/kernel/kmsg_dump.c:60:12: warning: no previous prototype for ‘kmsg_dumper_stdout_init’ [-Wmissing-prototypes]
   60 | int __init kmsg_dumper_stdout_init(void)
      |            ^~~~~~~~~~~~~~~~~~~~~~~
../arch/um/kernel/skas/mmu.c:17:5: warning: no previous prototype for ‘init_new_context’ [-Wmissing-prototypes]
   17 | int init_new_context(struct task_struct *task, struct mm_struct *mm)
      |     ^~~~~~~~~~~~~~~~
../arch/um/kernel/skas/mmu.c:60:6: warning: no previous prototype for ‘destroy_context’ [-Wmissing-prototypes]
   60 | void destroy_context(struct mm_struct *mm)
      |      ^~~~~~~~~~~~~~~
../arch/um/kernel/skas/process.c:36:12: warning: no previous prototype for ‘start_uml’ [-Wmissing-prototypes]
   36 | int __init start_uml(void)
      |            ^~~~~~~~~
../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)
      |      ^~~~~~~~~~~~~~~~~

[05:54:20] Starting KUnit Kernel (1/1)...
[05:54:20] ============================================================
[05:54:20] ============ drm_test_pick_cmdline (2 subtests) ============
[05:54:20] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[05:54:20] =============== drm_test_pick_cmdline_named  ===============
[05:54:20] [PASSED] NTSC
[05:54:20] [PASSED] NTSC-J
[05:54:20] [PASSED] PAL
[05:54:20] [PASSED] PAL-M
[05:54:20] =========== [PASSED] drm_test_pick_cmdline_named ===========
[05:54:20] ============== [PASSED] drm_test_pick_cmdline ==============
[05:54:20] ================== drm_buddy (4 subtests) ==================
[05:54:20] [PASSED] drm_test_buddy_alloc_limit
[05:54:20] [PASSED] drm_test_buddy_alloc_optimistic
[05:54:20] [PASSED] drm_test_buddy_alloc_pessimistic
[05:54:20] [PASSED] drm_test_buddy_alloc_pathological
[05:54:20] ==================== [PASSED] drm_buddy ====================
[05:54:20] ============= drm_cmdline_parser (40 subtests) =============
[05:54:20] [PASSED] drm_test_cmdline_force_d_only
[05:54:20] [PASSED] drm_test_cmdline_force_D_only_dvi
[05:54:20] [PASSED] drm_test_cmdline_force_D_only_hdmi
[05:54:20] [PASSED] drm_test_cmdline_force_D_only_not_digital
[05:54:20] [PASSED] drm_test_cmdline_force_e_only
[05:54:20] [PASSED] drm_test_cmdline_res
[05:54:20] [PASSED] drm_test_cmdline_res_vesa
[05:54:20] [PASSED] drm_test_cmdline_res_vesa_rblank
[05:54:20] [PASSED] drm_test_cmdline_res_rblank
[05:54:20] [PASSED] drm_test_cmdline_res_bpp
[05:54:20] [PASSED] drm_test_cmdline_res_refresh
[05:54:20] [PASSED] drm_test_cmdline_res_bpp_refresh
[05:54:20] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[05:54:20] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[05:54:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[05:54:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[05:54:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[05:54:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[05:54:20] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[05:54:20] [PASSED] drm_test_cmdline_res_margins_force_on
[05:54:20] [PASSED] drm_test_cmdline_res_vesa_margins
[05:54:20] [PASSED] drm_test_cmdline_name
[05:54:20] [PASSED] drm_test_cmdline_name_bpp
[05:54:20] [PASSED] drm_test_cmdline_name_option
[05:54:20] [PASSED] drm_test_cmdline_name_bpp_option
[05:54:20] [PASSED] drm_test_cmdline_rotate_0
[05:54:20] [PASSED] drm_test_cmdline_rotate_90
[05:54:20] [PASSED] drm_test_cmdline_rotate_180
[05:54:20] [PASSED] drm_test_cmdline_rotate_270
[05:54:20] [PASSED] drm_test_cmdline_hmirror
[05:54:20] [PASSED] drm_test_cmdline_vmirror
[05:54:20] [PASSED] drm_test_cmdline_margin_options
[05:54:20] [PASSED] drm_test_cmdline_multiple_options
[05:54:20] [PASSED] drm_test_cmdline_bpp_extra_and_option
[05:54:20] [PASSED] drm_test_cmdline_extra_and_option
[05:54:20] [PASSED] drm_test_cmdline_freestanding_options
[05:54:20] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[05:54:20] [PASSED] drm_test_cmdline_panel_orientation
[05:54:20] ================ drm_test_cmdline_invalid  =================
[05:54:20] [PASSED] margin_only
[05:54:20] [PASSED] interlace_only
[05:54:20] [PASSED] res_missing_x
[05:54:20] [PASSED] res_missing_y
[05:54:20] [PASSED] res_bad_y
[05:54:20] [PASSED] res_missing_y_bpp
[05:54:20] [PASSED] res_bad_bpp
[05:54:20] [PASSED] res_bad_refresh
[05:54:20] [PASSED] res_bpp_refresh_force_on_off
[05:54:20] [PASSED] res_invalid_mode
[05:54:20] [PASSED] res_bpp_wrong_place_mode
[05:54:20] [PASSED] name_bpp_refresh
[05:54:20] [PASSED] name_refresh
[05:54:20] [PASSED] name_refresh_wrong_mode
[05:54:20] [PASSED] name_refresh_invalid_mode
[05:54:20] [PASSED] rotate_multiple
[05:54:20] [PASSED] rotate_invalid_val
[05:54:20] [PASSED] rotate_truncated
[05:54:20] [PASSED] invalid_option
[05:54:20] [PASSED] invalid_tv_option
[05:54:20] [PASSED] truncated_tv_option
[05:54:20] ============ [PASSED] drm_test_cmdline_invalid =============
[05:54:20] =============== drm_test_cmdline_tv_options  ===============
[05:54:20] [PASSED] NTSC
[05:54:20] [PASSED] NTSC_443
[05:54:20] [PASSED] NTSC_J
[05:54:20] [PASSED] PAL
[05:54:20] [PASSED] PAL_M
[05:54:20] [PASSED] PAL_N
[05:54:20] [PASSED] SECAM
[05:54:20] =========== [PASSED] drm_test_cmdline_tv_options ===========
[05:54:20] =============== [PASSED] drm_cmdline_parser ================
[05:54:20] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[05:54:20] ========== drm_test_get_tv_mode_from_name_valid  ===========
[05:54:20] [PASSED] NTSC
[05:54:20] [PASSED] NTSC-443
[05:54:20] [PASSED] NTSC-J
[05:54:20] [PASSED] PAL
[05:54:20] [PASSED] PAL-M
[05:54:20] [PASSED] PAL-N
[05:54:20] [PASSED] SECAM
[05:54:20] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[05:54:20] [PASSED] drm_test_get_tv_mode_from_name_truncated
[05:54:20] ============ [PASSED] drm_get_tv_mode_from_name ============
[05:54:20] ============= drm_damage_helper (21 subtests) ==============
[05:54:20] [PASSED] drm_test_damage_iter_no_damage
[05:54:20] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[05:54:20] [PASSED] drm_test_damage_iter_no_damage_src_moved
[05:54:20] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[05:54:20] [PASSED] drm_test_damage_iter_no_damage_not_visible
[05:54:20] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[05:54:20] [PASSED] drm_test_damage_iter_no_damage_no_fb
[05:54:20] [PASSED] drm_test_damage_iter_simple_damage
[05:54:20] [PASSED] drm_test_damage_iter_single_damage
[05:54:20] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[05:54:20] [PASSED] drm_test_damage_iter_single_damage_outside_src
[05:54:20] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[05:54:20] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[05:54:20] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[05:54:20] [PASSED] drm_test_damage_iter_single_damage_src_moved
[05:54:20] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[05:54:20] [PASSED] drm_test_damage_iter_damage
[05:54:20] [PASSED] drm_test_damage_iter_damage_one_intersect
[05:54:20] [PASSED] drm_test_damage_iter_damage_one_outside
[05:54:20] [PASSED] drm_test_damage_iter_damage_src_moved
[05:54:20] [PASSED] drm_test_damage_iter_damage_not_visible
[05:54:20] ================ [PASSED] drm_damage_helper ================
[05:54:20] ============== drm_dp_mst_helper (3 subtests) ==============
[05:54:20] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[05:54:20] [PASSED] Clock 154000 BPP 30 DSC disabled
[05:54:20] [PASSED] Clock 234000 BPP 30 DSC disabled
[05:54:20] [PASSED] Clock 297000 BPP 24 DSC disabled
[05:54:20] [PASSED] Clock 332880 BPP 24 DSC enabled
[05:54:20] [PASSED] Clock 324540 BPP 24 DSC enabled
[05:54:20] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[05:54:20] ============== drm_test_dp_mst_calc_pbn_div  ===============
[05:54:20] [PASSED] Link rate 2000000 lane count 4
[05:54:20] [PASSED] Link rate 2000000 lane count 2
[05:54:20] [PASSED] Link rate 2000000 lane count 1
[05:54:20] [PASSED] Link rate 1350000 lane count 4
[05:54:20] [PASSED] Link rate 1350000 lane count 2
[05:54:20] [PASSED] Link rate 1350000 lane count 1
[05:54:20] [PASSED] Link rate 1000000 lane count 4
[05:54:20] [PASSED] Link rate 1000000 lane count 2
[05:54:20] [PASSED] Link rate 1000000 lane count 1
[05:54:20] [PASSED] Link rate 810000 lane count 4
[05:54:20] [PASSED] Link rate 810000 lane count 2
[05:54:20] [PASSED] Link rate 810000 lane count 1
[05:54:20] [PASSED] Link rate 540000 lane count 4
[05:54:20] [PASSED] Link rate 540000 lane count 2
[05:54:20] [PASSED] Link rate 540000 lane count 1
[05:54:20] [PASSED] Link rate 270000 lane count 4
[05:54:20] [PASSED] Link rate 270000 lane count 2
[05:54:20] [PASSED] Link rate 270000 lane count 1
[05:54:20] [PASSED] Link rate 162000 lane count 4
[05:54:20] [PASSED] Link rate 162000 lane count 2
[05:54:20] [PASSED] Link rate 162000 lane count 1
[05:54:20] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[05:54:20] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[05:54:20] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[05:54:20] [PASSED] DP_POWER_UP_PHY with port number
[05:54:20] [PASSED] DP_POWER_DOWN_PHY with port number
[05:54:20] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[05:54:20] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[05:54:20] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[05:54:20] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[05:54:20] [PASSED] DP_QUERY_PAYLOAD with port number
[05:54:20] [PASSED] DP_QUERY_PAYLOAD with VCPI
[05:54:20] [PASSED] DP_REMOTE_DPCD_READ with port number
[05:54:20] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[05:54:20] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[05:54:20] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[05:54:20] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[05:54:20] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[05:54:20] [PASSED] DP_REMOTE_I2C_READ with port number
[05:54:20] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[05:54:20] [PASSED] DP_REMOTE_I2C_READ with transactions array
[05:54:20] [PASSED] DP_REMOTE_I2C_WRITE with port number
[05:54:20] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[05:54:20] [PASSED] DP_REMOTE_I2C_WRITE with data array
[05:54:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[05:54:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[05:54:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[05:54:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[05:54:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[05:54:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[05:54:20] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[05:54:20] ================ [PASSED] drm_dp_mst_helper ================
[05:54:20] ================== drm_exec (7 subtests) ===================
[05:54:20] [PASSED] sanitycheck
[05:54:20] [PASSED] test_lock
[05:54:20] [PASSED] test_lock_unlock
[05:54:20] [PASSED] test_duplicates
[05:54:20] [PASSED] test_prepare
[05:54:20] [PASSED] test_prepare_array
[05:54:20] [PASSED] test_multiple_loops
[05:54:20] ==================== [PASSED] drm_exec =====================
[05:54:20] =========== drm_format_helper_test (17 subtests) ===========
[05:54:20] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[05:54:20] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[05:54:20] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[05:54:20] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[05:54:20] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[05:54:20] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[05:54:20] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[05:54:20] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[05:54:20] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[05:54:20] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[05:54:20] ============== drm_test_fb_xrgb8888_to_mono  ===============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[05:54:20] ==================== drm_test_fb_swab  =====================
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ================ [PASSED] drm_test_fb_swab =================
[05:54:20] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[05:54:20] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[05:54:20] [PASSED] single_pixel_source_buffer
[05:54:20] [PASSED] single_pixel_clip_rectangle
[05:54:20] [PASSED] well_known_colors
[05:54:20] [PASSED] destination_pitch
[05:54:20] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[05:54:20] ================= drm_test_fb_clip_offset  =================
[05:54:20] [PASSED] pass through
[05:54:20] [PASSED] horizontal offset
[05:54:20] [PASSED] vertical offset
[05:54:20] [PASSED] horizontal and vertical offset
[05:54:20] [PASSED] horizontal offset (custom pitch)
[05:54:20] [PASSED] vertical offset (custom pitch)
[05:54:20] [PASSED] horizontal and vertical offset (custom pitch)
[05:54:20] ============= [PASSED] drm_test_fb_clip_offset =============
[05:54:20] ============== drm_test_fb_build_fourcc_list  ==============
[05:54:20] [PASSED] no native formats
[05:54:20] [PASSED] XRGB8888 as native format
[05:54:20] [PASSED] remove duplicates
[05:54:20] [PASSED] convert alpha formats
[05:54:20] [PASSED] random formats
[05:54:20] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[05:54:20] =================== drm_test_fb_memcpy  ====================
[05:54:20] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[05:54:20] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[05:54:20] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[05:54:20] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[05:54:20] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[05:54:20] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[05:54:20] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[05:54:20] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[05:54:20] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[05:54:20] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[05:54:20] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[05:54:20] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[05:54:20] =============== [PASSED] drm_test_fb_memcpy ================
[05:54:20] ============= [PASSED] drm_format_helper_test ==============
[05:54:20] ================= drm_format (18 subtests) =================
[05:54:20] [PASSED] drm_test_format_block_width_invalid
[05:54:20] [PASSED] drm_test_format_block_width_one_plane
[05:54:20] [PASSED] drm_test_format_block_width_two_plane
[05:54:20] [PASSED] drm_test_format_block_width_three_plane
[05:54:20] [PASSED] drm_test_format_block_width_tiled
[05:54:20] [PASSED] drm_test_format_block_height_invalid
[05:54:20] [PASSED] drm_test_format_block_height_one_plane
[05:54:20] [PASSED] drm_test_format_block_height_two_plane
[05:54:20] [PASSED] drm_test_format_block_height_three_plane
[05:54:20] [PASSED] drm_test_format_block_height_tiled
[05:54:20] [PASSED] drm_test_format_min_pitch_invalid
[05:54:20] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[05:54:20] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[05:54:20] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[05:54:20] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[05:54:20] [PASSED] drm_test_format_min_pitch_two_plane
[05:54:20] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[05:54:20] [PASSED] drm_test_format_min_pitch_tiled
[05:54:20] =================== [PASSED] drm_format ====================
[05:54:20] =============== drm_framebuffer (1 subtest) ================
[05:54:20] =============== drm_test_framebuffer_create  ===============
[05:54:20] [PASSED] ABGR8888 normal sizes
[05:54:20] [PASSED] ABGR8888 max sizes
[05:54:20] [PASSED] ABGR8888 pitch greater than min required
[05:54:20] [PASSED] ABGR8888 pitch less than min required
[05:54:20] [PASSED] ABGR8888 Invalid width
[05:54:20] [PASSED] ABGR8888 Invalid buffer handle
[05:54:20] [PASSED] No pixel format
[05:54:20] [PASSED] ABGR8888 Width 0
[05:54:20] [PASSED] ABGR8888 Height 0
[05:54:20] [PASSED] ABGR8888 Out of bound height * pitch combination
[05:54:20] [PASSED] ABGR8888 Large buffer offset
[05:54:20] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[05:54:20] [PASSED] ABGR8888 Valid buffer modifier
[05:54:20] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[05:54:20] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[05:54:20] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[05:54:20] [PASSED] NV12 Normal sizes
[05:54:20] [PASSED] NV12 Max sizes
[05:54:20] [PASSED] NV12 Invalid pitch
[05:54:20] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[05:54:20] [PASSED] NV12 different  modifier per-plane
[05:54:20] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[05:54:20] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[05:54:20] [PASSED] NV12 Modifier for inexistent plane
[05:54:20] [PASSED] NV12 Handle for inexistent plane
[05:54:20] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[05:54:20] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[05:54:20] [PASSED] YVU420 Normal sizes
[05:54:20] [PASSED] YVU420 Max sizes
[05:54:20] [PASSED] YVU420 Invalid pitch
[05:54:20] [PASSED] YVU420 Different pitches
[05:54:20] [PASSED] YVU420 Different buffer offsets/pitches
[05:54:20] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[05:54:20] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[05:54:20] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[05:54:20] [PASSED] YVU420 Valid modifier
[05:54:20] [PASSED] YVU420 Different modifiers per plane
[05:54:20] [PASSED] YVU420 Modifier for inexistent plane
[05:54:20] [PASSED] X0L2 Normal sizes
[05:54:20] [PASSED] X0L2 Max sizes
[05:54:20] [PASSED] X0L2 Invalid pitch
[05:54:20] [PASSED] X0L2 Pitch greater than minimum required
[05:54:20] [PASSED] X0L2 Handle for inexistent plane
[05:54:20] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[05:54:20] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[05:54:20] [PASSED] X0L2 Valid modifier
[05:54:20] [PASSED] X0L2 Modifier for inexistent plane
[05:54:20] =========== [PASSED] drm_test_framebuffer_create ===========
[05:54:20] ================= [PASSED] drm_framebuffer =================
[05:54:20] ================ drm_gem_shmem (8 subtests) ================
[05:54:20] [PASSED] drm_gem_shmem_test_obj_create
[05:54:20] [PASSED] drm_gem_shmem_test_obj_create_private
[05:54:20] [PASSED] drm_gem_shmem_test_pin_pages
[05:54:20] [PASSED] drm_gem_shmem_test_vmap
[05:54:20] [PASSED] drm_gem_shmem_test_get_pages_sgt
[05:54:20] [PASSED] drm_gem_shmem_test_get_sg_table
[05:54:20] [PASSED] drm_gem_shmem_test_madvise
[05:54:20] [PASSED] drm_gem_shmem_test_purge
[05:54:20] ================== [PASSED] drm_gem_shmem ==================
[05:54:20] ================= drm_managed (2 subtests) =================
[05:54:20] [PASSED] drm_test_managed_release_action
[05:54:20] [PASSED] drm_test_managed_run_action
[05:54:20] =================== [PASSED] drm_managed ===================
[05:54:20] =================== drm_mm (6 subtests) ====================
[05:54:20] [PASSED] drm_test_mm_init
[05:54:20] [PASSED] drm_test_mm_debug
[05:54:20] [PASSED] drm_test_mm_align32
[05:54:20] [PASSED] drm_test_mm_align64
[05:54:20] [PASSED] drm_test_mm_lowest
[05:54:20] [PASSED] drm_test_mm_highest
[05:54:20] ===================== [PASSED] drm_mm ======================
[05:54:20] ============= drm_modes_analog_tv (4 subtests) =============
[05:54:20] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[05:54:20] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[05:54:20] [PASSED] drm_test_modes_analog_tv_pal_576i
[05:54:20] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[05:54:20] =============== [PASSED] drm_modes_analog_tv ===============
[05:54:20] ============== drm_plane_helper (2 subtests) ===============
[05:54:20] =============== drm_test_check_plane_state  ================
[05:54:20] [PASSED] clipping_simple
[05:54:20] [PASSED] clipping_rotate_reflect
[05:54:20] [PASSED] positioning_simple
[05:54:20] [PASSED] upscaling
[05:54:20] [PASSED] downscaling
[05:54:20] [PASSED] rounding1
[05:54:20] [PASSED] rounding2
[05:54:20] [PASSED] rounding3
[05:54:20] [PASSED] rounding4
[05:54:20] =========== [PASSED] drm_test_check_plane_state ============
[05:54:20] =========== drm_test_check_invalid_plane_state  ============
[05:54:20] [PASSED] positioning_invalid
[05:54:20] [PASSED] upscaling_invalid
[05:54:20] [PASSED] downscaling_invalid
[05:54:20] ======= [PASSED] drm_test_check_invalid_plane_state ========
[05:54:20] ================ [PASSED] drm_plane_helper =================
[05:54:20] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[05:54:20] ====== drm_test_connector_helper_tv_get_modes_check  =======
[05:54:20] [PASSED] None
[05:54:20] [PASSED] PAL
[05:54:20] [PASSED] NTSC
[05:54:20] [PASSED] Both, NTSC Default
[05:54:20] [PASSED] Both, PAL Default
[05:54:20] [PASSED] Both, NTSC Default, with PAL on command-line
[05:54:20] [PASSED] Both, PAL Default, with NTSC on command-line
[05:54:20] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[05:54:20] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[05:54:20] ================== drm_rect (9 subtests) ===================
[05:54:20] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[05:54:20] [PASSED] drm_test_rect_clip_scaled_not_clipped
[05:54:20] [PASSED] drm_test_rect_clip_scaled_clipped
[05:54:20] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[05:54:20] ================= drm_test_rect_intersect  =================
[05:54:20] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[05:54:20] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[05:54:20] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[05:54:20] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[05:54:20] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[05:54:20] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[05:54:20] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[05:54:20] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[05:54:20] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[05:54:20] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[05:54:20] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[05:54:20] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[05:54:20] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[05:54:20] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[05:54:20] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[05:54:20] ============= [PASSED] drm_test_rect_intersect =============
[05:54:20] ================ drm_test_rect_calc_hscale  ================
[05:54:20] [PASSED] normal use
[05:54:20] [PASSED] out of max range
[05:54:20] [PASSED] out of min range
[05:54:20] [PASSED] zero dst
[05:54:20] [PASSED] negative src
[05:54:20] [PASSED] negative dst
stty: 'standard input': Inappropriate ioctl for device
[05:54:20] ============ [PASSED] drm_test_rect_calc_hscale ============
[05:54:20] ================ drm_test_rect_calc_vscale  ================
[05:54:20] [PASSED] normal use
[05:54:20] [PASSED] out of max range
[05:54:20] [PASSED] out of min range
[05:54:20] [PASSED] zero dst
[05:54:20] [PASSED] negative src
[05:54:20] [PASSED] negative dst
[05:54:20] ============ [PASSED] drm_test_rect_calc_vscale ============
[05:54:20] ================== drm_test_rect_rotate  ===================
[05:54:20] [PASSED] reflect-x
[05:54:20] [PASSED] reflect-y
[05:54:20] [PASSED] rotate-0
[05:54:20] [PASSED] rotate-90
[05:54:20] [PASSED] rotate-180
[05:54:20] [PASSED] rotate-270
[05:54:20] ============== [PASSED] drm_test_rect_rotate ===============
[05:54:20] ================ drm_test_rect_rotate_inv  =================
[05:54:20] [PASSED] reflect-x
[05:54:20] [PASSED] reflect-y
[05:54:20] [PASSED] rotate-0
[05:54:20] [PASSED] rotate-90
[05:54:20] [PASSED] rotate-180
[05:54:20] [PASSED] rotate-270
[05:54:20] ============ [PASSED] drm_test_rect_rotate_inv =============
[05:54:20] ==================== [PASSED] drm_rect =====================
[05:54:20] ============================================================
[05:54:20] Testing complete. Ran 391 tests: passed: 391
[05:54:20] Elapsed time: 21.720s total, 1.644s configuring, 19.904s building, 0.169s running

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



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

* ✓ CI.Build: success for Add OA functionality to Xe (rev9)
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (18 preceding siblings ...)
  2024-02-08  5:54 ` ✓ CI.KUnit: success " Patchwork
@ 2024-02-08  6:01 ` Patchwork
  2024-02-08  6:02 ` ✗ CI.Hooks: failure " Patchwork
                   ` (3 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2024-02-08  6:01 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

== Series Details ==

Series: Add OA functionality to Xe (rev9)
URL   : https://patchwork.freedesktop.org/series/121084/
State : success

== Summary ==

+ trap cleanup EXIT
+ cd /kernel
+ git clone https://gitlab.freedesktop.org/drm/xe/ci.git .ci
Cloning into '.ci'...
+ '[' -n '' ']'
++ date +%s
+ echo -e '\e[0Ksection_start:1707371670:build_x86_64[collapsed=true]\r\e[0KBuild x86-64'
+ mkdir -p build64-default
^[[0Ksection_start:1707371670:build_x86_64[collapsed=true]
^[[0KBuild x86-64
+ cp .ci/kernel/kconfig build64-default/.config
+ make O=build64-default olddefconfig
make[1]: Entering directory '/kernel/build64-default'
  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
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
.config:446:warning: symbol value 'm' invalid for FSCACHE
#
# configuration written to .config
#
make[1]: Leaving directory '/kernel/build64-default'
++ nproc
+ make O=build64-default -j48
make[1]: Entering directory '/kernel/build64-default'
  GEN     arch/x86/include/generated/asm/orc_hash.h
  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
  UPD     include/generated/uapi/linux/version.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctl.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctls.h
  WRAP    arch/x86/include/generated/uapi/asm/ipcbuf.h
  WRAP    arch/x86/include/generated/uapi/asm/param.h
  WRAP    arch/x86/include/generated/uapi/asm/resource.h
  WRAP    arch/x86/include/generated/uapi/asm/poll.h
  WRAP    arch/x86/include/generated/uapi/asm/socket.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  WRAP    arch/x86/include/generated/uapi/asm/sockios.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.h
  WRAP    arch/x86/include/generated/uapi/asm/termios.h
  WRAP    arch/x86/include/generated/uapi/asm/termbits.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  WRAP    arch/x86/include/generated/uapi/asm/types.h
  SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_64_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_64.h
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.h
  WRAP    arch/x86/include/generated/asm/irq_regs.h
  UPD     include/config/kernel.release
  UPD     include/generated/compile.h
  HOSTCC  arch/x86/tools/relocs_32.o
  WRAP    arch/x86/include/generated/asm/kmap_size.h
  WRAP    arch/x86/include/generated/asm/local64.h
  HOSTCC  arch/x86/tools/relocs_64.o
  WRAP    arch/x86/include/generated/asm/mmiowb.h
  HOSTCC  arch/x86/tools/relocs_common.o
  WRAP    arch/x86/include/generated/asm/module.lds.h
  WRAP    arch/x86/include/generated/asm/rwonce.h
  WRAP    arch/x86/include/generated/asm/unaligned.h
  HOSTCC  scripts/unifdef
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/sorttable
  HOSTCC  scripts/asn1_compiler
mkdir -p /kernel/build64-default/tools/objtool && make O=/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool 
  UPD     include/generated/utsrelease.h
  HOSTCC  /kernel/build64-default/tools/objtool/fixdep.o
  HOSTLD  /kernel/build64-default/tools/objtool/fixdep-in.o
  LINK    /kernel/build64-default/tools/objtool/fixdep
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/exec-cmd.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/help.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/pager.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/parse-options.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/run-command.h
  CC      /kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/help.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/pager.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
  INSTALL libsubcmd_headers
  CC      /kernel/build64-default/tools/objtool/libsubcmd/run-command.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
  HOSTLD  arch/x86/tools/relocs
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  CC      scripts/mod/devicetable-offsets.s
  HDRINST usr/include/video/edid.h
  HDRINST usr/include/video/sisfb.h
  HDRINST usr/include/video/uvesafb.h
  HDRINST usr/include/drm/amdgpu_drm.h
  HDRINST usr/include/drm/qaic_accel.h
  HDRINST usr/include/drm/pvr_drm.h
  HDRINST usr/include/drm/i915_drm.h
  HDRINST usr/include/drm/vgem_drm.h
  HDRINST usr/include/drm/virtgpu_drm.h
  HDRINST usr/include/drm/xe_drm.h
  HDRINST usr/include/drm/omap_drm.h
  HDRINST usr/include/drm/radeon_drm.h
  HDRINST usr/include/drm/drm_mode.h
  HDRINST usr/include/drm/tegra_drm.h
  HDRINST usr/include/drm/ivpu_accel.h
  HDRINST usr/include/drm/exynos_drm.h
  HDRINST usr/include/drm/v3d_drm.h
  HDRINST usr/include/drm/drm_sarea.h
  HDRINST usr/include/drm/qxl_drm.h
  HDRINST usr/include/drm/drm_fourcc.h
  HDRINST usr/include/drm/nouveau_drm.h
  HDRINST usr/include/drm/habanalabs_accel.h
  HDRINST usr/include/drm/vmwgfx_drm.h
  HDRINST usr/include/drm/msm_drm.h
  HDRINST usr/include/drm/etnaviv_drm.h
  HDRINST usr/include/drm/vc4_drm.h
  HDRINST usr/include/drm/panfrost_drm.h
  HDRINST usr/include/drm/lima_drm.h
  HDRINST usr/include/drm/drm.h
  HDRINST usr/include/drm/armada_drm.h
  HDRINST usr/include/mtd/inftl-user.h
  HDRINST usr/include/mtd/nftl-user.h
  HDRINST usr/include/mtd/mtd-user.h
  HDRINST usr/include/mtd/ubi-user.h
  HDRINST usr/include/mtd/mtd-abi.h
  HDRINST usr/include/xen/gntdev.h
  HDRINST usr/include/xen/gntalloc.h
  HDRINST usr/include/xen/evtchn.h
  HDRINST usr/include/xen/privcmd.h
  HDRINST usr/include/asm-generic/auxvec.h
  HDRINST usr/include/asm-generic/bitsperlong.h
  HDRINST usr/include/asm-generic/posix_types.h
  HDRINST usr/include/asm-generic/ioctls.h
  HDRINST usr/include/asm-generic/mman.h
  HDRINST usr/include/asm-generic/shmbuf.h
  HDRINST usr/include/asm-generic/bpf_perf_event.h
  HDRINST usr/include/asm-generic/types.h
  HDRINST usr/include/asm-generic/poll.h
  HDRINST usr/include/asm-generic/msgbuf.h
  HDRINST usr/include/asm-generic/swab.h
  HDRINST usr/include/asm-generic/statfs.h
  HDRINST usr/include/asm-generic/unistd.h
  HDRINST usr/include/asm-generic/hugetlb_encode.h
  HDRINST usr/include/asm-generic/param.h
  HDRINST usr/include/asm-generic/resource.h
  HDRINST usr/include/asm-generic/termbits-common.h
  HDRINST usr/include/asm-generic/sockios.h
  HDRINST usr/include/asm-generic/kvm_para.h
  HDRINST usr/include/asm-generic/errno.h
  UPD     scripts/mod/devicetable-offsets.h
  HDRINST usr/include/asm-generic/termios.h
  HDRINST usr/include/asm-generic/mman-common.h
  HDRINST usr/include/asm-generic/ioctl.h
  HDRINST usr/include/asm-generic/socket.h
  HDRINST usr/include/asm-generic/signal-defs.h
  HDRINST usr/include/asm-generic/termbits.h
  HDRINST usr/include/asm-generic/int-ll64.h
  HDRINST usr/include/asm-generic/signal.h
  HDRINST usr/include/asm-generic/siginfo.h
  HDRINST usr/include/asm-generic/stat.h
  HDRINST usr/include/asm-generic/int-l64.h
  HDRINST usr/include/asm-generic/errno-base.h
  HDRINST usr/include/asm-generic/fcntl.h
  HDRINST usr/include/asm-generic/setup.h
  HDRINST usr/include/asm-generic/ipcbuf.h
  HDRINST usr/include/asm-generic/sembuf.h
  HDRINST usr/include/asm-generic/ucontext.h
  HDRINST usr/include/rdma/mlx5_user_ioctl_cmds.h
  HDRINST usr/include/rdma/irdma-abi.h
  HDRINST usr/include/rdma/mana-abi.h
  HDRINST usr/include/rdma/hfi/hfi1_user.h
  HDRINST usr/include/rdma/hfi/hfi1_ioctl.h
  HDRINST usr/include/rdma/rdma_user_rxe.h
  HDRINST usr/include/rdma/rdma_user_ioctl.h
  HDRINST usr/include/rdma/mlx5_user_ioctl_verbs.h
  HDRINST usr/include/rdma/bnxt_re-abi.h
  HDRINST usr/include/rdma/hns-abi.h
  HDRINST usr/include/rdma/qedr-abi.h
  HDRINST usr/include/rdma/ib_user_ioctl_cmds.h
  HDRINST usr/include/rdma/vmw_pvrdma-abi.h
  HDRINST usr/include/rdma/ib_user_sa.h
  HDRINST usr/include/rdma/ib_user_ioctl_verbs.h
  HDRINST usr/include/rdma/rvt-abi.h
  HDRINST usr/include/rdma/mlx5-abi.h
  HDRINST usr/include/rdma/rdma_netlink.h
  HDRINST usr/include/rdma/erdma-abi.h
  HDRINST usr/include/rdma/rdma_user_ioctl_cmds.h
  HDRINST usr/include/rdma/rdma_user_cm.h
  HDRINST usr/include/rdma/ib_user_verbs.h
  HDRINST usr/include/rdma/efa-abi.h
  HDRINST usr/include/rdma/siw-abi.h
  MKELF   scripts/mod/elfconfig.h
  HDRINST usr/include/rdma/mlx4-abi.h
  HOSTCC  scripts/mod/modpost.o
  HDRINST usr/include/rdma/mthca-abi.h
  HOSTCC  scripts/mod/file2alias.o
  HDRINST usr/include/rdma/ib_user_mad.h
  HDRINST usr/include/rdma/ocrdma-abi.h
  HDRINST usr/include/rdma/cxgb4-abi.h
  HDRINST usr/include/misc/xilinx_sdfec.h
  HDRINST usr/include/misc/uacce/hisi_qm.h
  HOSTCC  scripts/mod/sumversion.o
  HOSTCC  scripts/mod/symsearch.o
  HDRINST usr/include/misc/uacce/uacce.h
  HDRINST usr/include/misc/cxl.h
  HDRINST usr/include/misc/ocxl.h
  HDRINST usr/include/misc/fastrpc.h
  HDRINST usr/include/misc/pvpanic.h
  HDRINST usr/include/linux/i8k.h
  HDRINST usr/include/linux/acct.h
  HDRINST usr/include/linux/atmmpc.h
  HDRINST usr/include/linux/fs.h
  HDRINST usr/include/linux/cifs/cifs_mount.h
  HDRINST usr/include/linux/cifs/cifs_netlink.h
  HDRINST usr/include/linux/if_packet.h
  HDRINST usr/include/linux/route.h
  HDRINST usr/include/linux/patchkey.h
  HDRINST usr/include/linux/tc_ematch/tc_em_cmp.h
  HDRINST usr/include/linux/tc_ematch/tc_em_ipt.h
  HDRINST usr/include/linux/tc_ematch/tc_em_meta.h
  HDRINST usr/include/linux/tc_ematch/tc_em_nbyte.h
  HDRINST usr/include/linux/tc_ematch/tc_em_text.h
  HDRINST usr/include/linux/virtio_pmem.h
  HDRINST usr/include/linux/rkisp1-config.h
  HDRINST usr/include/linux/vhost.h
  HDRINST usr/include/linux/cec-funcs.h
  HDRINST usr/include/linux/ppdev.h
  HDRINST usr/include/linux/isdn/capicmd.h
  HDRINST usr/include/linux/virtio_fs.h
  HDRINST usr/include/linux/netfilter_ipv6.h
  HDRINST usr/include/linux/lirc.h
  HDRINST usr/include/linux/mroute6.h
  HDRINST usr/include/linux/nl80211-vnd-intel.h
  HDRINST usr/include/linux/ivtvfb.h
  HDRINST usr/include/linux/auxvec.h
  HDRINST usr/include/linux/dm-log-userspace.h
  HDRINST usr/include/linux/dccp.h
  HDRINST usr/include/linux/virtio_scmi.h
  HDRINST usr/include/linux/atmarp.h
  HDRINST usr/include/linux/arcfb.h
  HDRINST usr/include/linux/nbd-netlink.h
  HDRINST usr/include/linux/sched/types.h
  HDRINST usr/include/linux/tcp.h
  HDRINST usr/include/linux/dlm_device.h
  HDRINST usr/include/linux/neighbour.h
  HDRINST usr/include/linux/wmi.h
  HDRINST usr/include/linux/btrfs_tree.h
  HDRINST usr/include/linux/virtio_crypto.h
  HDRINST usr/include/linux/vbox_err.h
  HDRINST usr/include/linux/edd.h
  HDRINST usr/include/linux/loop.h
  HDRINST usr/include/linux/nvme_ioctl.h
  HDRINST usr/include/linux/mmtimer.h
  HDRINST usr/include/linux/if_pppol2tp.h
  HDRINST usr/include/linux/mtio.h
  HDRINST usr/include/linux/if_arcnet.h
  HDRINST usr/include/linux/romfs_fs.h
  HDRINST usr/include/linux/posix_types.h
  HDRINST usr/include/linux/rtc.h
  HDRINST usr/include/linux/landlock.h
  HDRINST usr/include/linux/gpio.h
  HDRINST usr/include/linux/selinux_netlink.h
  HDRINST usr/include/linux/pps.h
  HDRINST usr/include/linux/ndctl.h
  HDRINST usr/include/linux/virtio_gpu.h
  HDRINST usr/include/linux/android/binderfs.h
  HDRINST usr/include/linux/android/binder.h
  HDRINST usr/include/linux/virtio_vsock.h
  HDRINST usr/include/linux/sound.h
  HDRINST usr/include/linux/vtpm_proxy.h
  HDRINST usr/include/linux/nfs_fs.h
  HDRINST usr/include/linux/elf-fdpic.h
  HDRINST usr/include/linux/adfs_fs.h
  HDRINST usr/include/linux/target_core_user.h
  HDRINST usr/include/linux/netlink_diag.h
  HDRINST usr/include/linux/const.h
  HDRINST usr/include/linux/firewire-cdev.h
  HDRINST usr/include/linux/vdpa.h
  HDRINST usr/include/linux/if_infiniband.h
  HDRINST usr/include/linux/serial.h
  HDRINST usr/include/linux/iio/types.h
  HDRINST usr/include/linux/iio/buffer.h
  HDRINST usr/include/linux/iio/events.h
  HDRINST usr/include/linux/baycom.h
  HDRINST usr/include/linux/major.h
  HDRINST usr/include/linux/atmppp.h
  HDRINST usr/include/linux/lsm.h
  HDRINST usr/include/linux/ipv6_route.h
  HDRINST usr/include/linux/spi/spidev.h
  HDRINST usr/include/linux/spi/spi.h
  HDRINST usr/include/linux/virtio_ring.h
  HDRINST usr/include/linux/hdlc/ioctl.h
  HDRINST usr/include/linux/remoteproc_cdev.h
  HDRINST usr/include/linux/hyperv.h
  HDRINST usr/include/linux/rpl_iptunnel.h
  HDRINST usr/include/linux/sync_file.h
  HDRINST usr/include/linux/igmp.h
  HDRINST usr/include/linux/v4l2-dv-timings.h
  HDRINST usr/include/linux/virtio_i2c.h
  HDRINST usr/include/linux/xfrm.h
  HDRINST usr/include/linux/capability.h
  HDRINST usr/include/linux/gtp.h
  HDRINST usr/include/linux/xdp_diag.h
  HDRINST usr/include/linux/pkt_cls.h
  HDRINST usr/include/linux/suspend_ioctls.h
  HDRINST usr/include/linux/vt.h
  HDRINST usr/include/linux/loadpin.h
  HDRINST usr/include/linux/dlm_plock.h
  HDRINST usr/include/linux/fb.h
  HDRINST usr/include/linux/max2175.h
  HDRINST usr/include/linux/sunrpc/debug.h
  HDRINST usr/include/linux/gsmmux.h
  HDRINST usr/include/linux/watchdog.h
  HDRINST usr/include/linux/vhost_types.h
  HDRINST usr/include/linux/vduse.h
  HDRINST usr/include/linux/ila.h
  HDRINST usr/include/linux/tdx-guest.h
  HDRINST usr/include/linux/close_range.h
  HDRINST usr/include/linux/ivtv.h
  HDRINST usr/include/linux/cryptouser.h
  HDRINST usr/include/linux/netfilter/xt_string.h
  HDRINST usr/include/linux/netfilter/nfnetlink_compat.h
  HDRINST usr/include/linux/netfilter/nf_nat.h
  HDRINST usr/include/linux/netfilter/xt_recent.h
  HDRINST usr/include/linux/netfilter/xt_addrtype.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_tcp.h
  HDRINST usr/include/linux/netfilter/xt_MARK.h
  HDRINST usr/include/linux/netfilter/xt_SYNPROXY.h
  HDRINST usr/include/linux/netfilter/xt_multiport.h
  HDRINST usr/include/linux/netfilter/nfnetlink.h
  HDRINST usr/include/linux/netfilter/xt_cgroup.h
  HDRINST usr/include/linux/netfilter/nf_synproxy.h
  HDRINST usr/include/linux/netfilter/xt_TCPOPTSTRIP.h
  HDRINST usr/include/linux/netfilter/nfnetlink_log.h
  HDRINST usr/include/linux/netfilter/xt_TPROXY.h
  HDRINST usr/include/linux/netfilter/xt_u32.h
  HDRINST usr/include/linux/netfilter/nfnetlink_osf.h
  HDRINST usr/include/linux/netfilter/xt_ecn.h
  HDRINST usr/include/linux/netfilter/xt_esp.h
  HDRINST usr/include/linux/netfilter/nfnetlink_hook.h
  HDRINST usr/include/linux/netfilter/xt_mac.h
  HDRINST usr/include/linux/netfilter/xt_comment.h
  HDRINST usr/include/linux/netfilter/xt_NFQUEUE.h
  HDRINST usr/include/linux/netfilter/xt_osf.h
  HDRINST usr/include/linux/netfilter/xt_hashlimit.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_sctp.h
  HDRINST usr/include/linux/netfilter/xt_socket.h
  HDRINST usr/include/linux/netfilter/xt_connmark.h
  HDRINST usr/include/linux/netfilter/xt_sctp.h
  HDRINST usr/include/linux/netfilter/xt_tcpudp.h
  HDRINST usr/include/linux/netfilter/xt_DSCP.h
  HDRINST usr/include/linux/netfilter/xt_time.h
  HDRINST usr/include/linux/netfilter/xt_IDLETIMER.h
  HDRINST usr/include/linux/netfilter/xt_policy.h
  HDRINST usr/include/linux/netfilter/xt_rpfilter.h
  HDRINST usr/include/linux/netfilter/xt_nfacct.h
  HDRINST usr/include/linux/netfilter/xt_SECMARK.h
  HDRINST usr/include/linux/netfilter/xt_length.h
  HDRINST usr/include/linux/netfilter/nfnetlink_cthelper.h
  HDRINST usr/include/linux/netfilter/xt_quota.h
  HDRINST usr/include/linux/netfilter/xt_CLASSIFY.h
  HDRINST usr/include/linux/netfilter/xt_ipcomp.h
  HDRINST usr/include/linux/netfilter/xt_iprange.h
  HDRINST usr/include/linux/netfilter/xt_bpf.h
  HDRINST usr/include/linux/netfilter/xt_LOG.h
  HDRINST usr/include/linux/netfilter/xt_rateest.h
  HDRINST usr/include/linux/netfilter/xt_CONNSECMARK.h
  HDRINST usr/include/linux/netfilter/xt_HMARK.h
  HDRINST usr/include/linux/netfilter/xt_CONNMARK.h
  HDRINST usr/include/linux/netfilter/xt_pkttype.h
  HDRINST usr/include/linux/netfilter/xt_ipvs.h
  HDRINST usr/include/linux/netfilter/xt_devgroup.h
  HDRINST usr/include/linux/netfilter/xt_AUDIT.h
  HDRINST usr/include/linux/netfilter/xt_realm.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_common.h
  HDRINST usr/include/linux/netfilter/xt_set.h
  HDRINST usr/include/linux/netfilter/xt_LED.h
  HDRINST usr/include/linux/netfilter/xt_connlabel.h
  HDRINST usr/include/linux/netfilter/xt_owner.h
  HDRINST usr/include/linux/netfilter/xt_dccp.h
  HDRINST usr/include/linux/netfilter/xt_limit.h
  HDRINST usr/include/linux/netfilter/xt_conntrack.h
  HDRINST usr/include/linux/netfilter/xt_TEE.h
  HDRINST usr/include/linux/netfilter/xt_RATEEST.h
  HDRINST usr/include/linux/netfilter/xt_connlimit.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set_list.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set_hash.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set_bitmap.h
  HDRINST usr/include/linux/netfilter/x_tables.h
  HDRINST usr/include/linux/netfilter/xt_dscp.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_ftp.h
  HDRINST usr/include/linux/netfilter/xt_cluster.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_tuple_common.h
  HDRINST usr/include/linux/netfilter/nf_log.h
  HDRINST usr/include/linux/netfilter/xt_tcpmss.h
  HDRINST usr/include/linux/netfilter/xt_NFLOG.h
  HDRINST usr/include/linux/netfilter/xt_l2tp.h
  HDRINST usr/include/linux/netfilter/xt_helper.h
  HDRINST usr/include/linux/netfilter/xt_statistic.h
  HDRINST usr/include/linux/netfilter/nfnetlink_queue.h
  HDRINST usr/include/linux/netfilter/nfnetlink_cttimeout.h
  HDRINST usr/include/linux/netfilter/xt_CT.h
  HDRINST usr/include/linux/netfilter/xt_CHECKSUM.h
  HDRINST usr/include/linux/netfilter/xt_connbytes.h
  HDRINST usr/include/linux/netfilter/xt_state.h
  HDRINST usr/include/linux/netfilter/nf_tables.h
  HDRINST usr/include/linux/netfilter/xt_mark.h
  HDRINST usr/include/linux/netfilter/xt_cpu.h
  HDRINST usr/include/linux/netfilter/nf_tables_compat.h
  HDRINST usr/include/linux/netfilter/xt_physdev.h
  HDRINST usr/include/linux/netfilter/nfnetlink_conntrack.h
  HDRINST usr/include/linux/netfilter/nfnetlink_acct.h
  HDRINST usr/include/linux/netfilter/xt_TCPMSS.h
  HDRINST usr/include/linux/tty_flags.h
  HDRINST usr/include/linux/if_phonet.h
  HDRINST usr/include/linux/elf-em.h
  HDRINST usr/include/linux/vm_sockets.h
  HDRINST usr/include/linux/dlmconstants.h
  HDRINST usr/include/linux/bsg.h
  HDRINST usr/include/linux/matroxfb.h
  HDRINST usr/include/linux/sysctl.h
  HDRINST usr/include/linux/unix_diag.h
  HDRINST usr/include/linux/pcitest.h
  HDRINST usr/include/linux/mman.h
  HDRINST usr/include/linux/if_plip.h
  HDRINST usr/include/linux/virtio_balloon.h
  HDRINST usr/include/linux/pidfd.h
  HDRINST usr/include/linux/f2fs.h
  HDRINST usr/include/linux/x25.h
  HDRINST usr/include/linux/if_cablemodem.h
  HDRINST usr/include/linux/utsname.h
  HDRINST usr/include/linux/counter.h
  HDRINST usr/include/linux/atm_tcp.h
  HDRINST usr/include/linux/atalk.h
  HDRINST usr/include/linux/virtio_rng.h
  HDRINST usr/include/linux/vboxguest.h
  HDRINST usr/include/linux/bpf_perf_event.h
  HDRINST usr/include/linux/ipmi_ssif_bmc.h
  HDRINST usr/include/linux/nfs_mount.h
  HDRINST usr/include/linux/sonet.h
  HDRINST usr/include/linux/netfilter.h
  HDRINST usr/include/linux/keyctl.h
  HDRINST usr/include/linux/nl80211.h
  HDRINST usr/include/linux/misc/bcm_vk.h
  HDRINST usr/include/linux/audit.h
  HDRINST usr/include/linux/tipc_config.h
  HDRINST usr/include/linux/tipc_sockets_diag.h
  HDRINST usr/include/linux/futex.h
  HDRINST usr/include/linux/sev-guest.h
  HDRINST usr/include/linux/ublk_cmd.h
  HDRINST usr/include/linux/types.h
  HDRINST usr/include/linux/virtio_input.h
  HDRINST usr/include/linux/if_slip.h
  HDRINST usr/include/linux/personality.h
  HDRINST usr/include/linux/openat2.h
  HDRINST usr/include/linux/poll.h
  HDRINST usr/include/linux/posix_acl.h
  HDRINST usr/include/linux/smc_diag.h
  HDRINST usr/include/linux/snmp.h
  HDRINST usr/include/linux/errqueue.h
  HDRINST usr/include/linux/if_tunnel.h
  HDRINST usr/include/linux/fanotify.h
  HDRINST usr/include/linux/kernel.h
  HDRINST usr/include/linux/rtnetlink.h
  HDRINST usr/include/linux/rpl.h
  HDRINST usr/include/linux/memfd.h
  HDRINST usr/include/linux/serial_core.h
  HDRINST usr/include/linux/dns_resolver.h
  HDRINST usr/include/linux/pr.h
  HDRINST usr/include/linux/atm_eni.h
  HDRINST usr/include/linux/lp.h
  HDRINST usr/include/linux/virtio_mem.h
  HDRINST usr/include/linux/ultrasound.h
  HDRINST usr/include/linux/sctp.h
  HDRINST usr/include/linux/uio.h
  HDRINST usr/include/linux/tcp_metrics.h
  HDRINST usr/include/linux/wwan.h
  HDRINST usr/include/linux/atmbr2684.h
  HDRINST usr/include/linux/in_route.h
  HDRINST usr/include/linux/qemu_fw_cfg.h
  HDRINST usr/include/linux/if_macsec.h
  HDRINST usr/include/linux/usb/charger.h
  HDRINST usr/include/linux/usb/g_uvc.h
  HDRINST usr/include/linux/usb/gadgetfs.h
  LD      /kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
  HDRINST usr/include/linux/usb/raw_gadget.h
  HDRINST usr/include/linux/usb/cdc-wdm.h
  HDRINST usr/include/linux/usb/g_printer.h
  HDRINST usr/include/linux/usb/midi.h
  HDRINST usr/include/linux/usb/tmc.h
  HDRINST usr/include/linux/usb/video.h
  HDRINST usr/include/linux/usb/functionfs.h
  HDRINST usr/include/linux/usb/audio.h
  HDRINST usr/include/linux/usb/ch11.h
  HDRINST usr/include/linux/usb/cdc.h
  HDRINST usr/include/linux/usb/ch9.h
  HDRINST usr/include/linux/jffs2.h
  HDRINST usr/include/linux/ax25.h
  HDRINST usr/include/linux/auto_fs.h
  HDRINST usr/include/linux/tiocl.h
  HDRINST usr/include/linux/scc.h
  HDRINST usr/include/linux/psci.h
  HDRINST usr/include/linux/swab.h
  HDRINST usr/include/linux/cec.h
  HDRINST usr/include/linux/kfd_ioctl.h
  HDRINST usr/include/linux/smc.h
  HDRINST usr/include/linux/qrtr.h
  HDRINST usr/include/linux/screen_info.h
  HDRINST usr/include/linux/nfsacl.h
  HDRINST usr/include/linux/seg6_hmac.h
  HDRINST usr/include/linux/gameport.h
  HDRINST usr/include/linux/fdreg.h
  HDRINST usr/include/linux/wireless.h
  HDRINST usr/include/linux/cciss_defs.h
  AR      /kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
  HDRINST usr/include/linux/serial_reg.h
  HDRINST usr/include/linux/perf_event.h
  HDRINST usr/include/linux/in6.h
  HDRINST usr/include/linux/hid.h
  HDRINST usr/include/linux/thp7312.h
  HDRINST usr/include/linux/netlink.h
  HDRINST usr/include/linux/fuse.h
  HDRINST usr/include/linux/magic.h
  HDRINST usr/include/linux/ioam6_iptunnel.h
  HDRINST usr/include/linux/stm.h
  HDRINST usr/include/linux/vsockmon.h
  HDRINST usr/include/linux/seg6.h
  HDRINST usr/include/linux/idxd.h
  HDRINST usr/include/linux/nitro_enclaves.h
  HDRINST usr/include/linux/ptrace.h
  HDRINST usr/include/linux/ioam6_genl.h
  HDRINST usr/include/linux/qnx4_fs.h
  HDRINST usr/include/linux/fsl_mc.h
  HDRINST usr/include/linux/net_tstamp.h
  HDRINST usr/include/linux/msg.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_TTL.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ttl.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ah.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ECN.h
  HDRINST usr/include/linux/netfilter_ipv4/ip_tables.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ecn.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_REJECT.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_LOG.h
  HDRINST usr/include/linux/sem.h
  HDRINST usr/include/linux/net_namespace.h
  HDRINST usr/include/linux/radeonfb.h
  HDRINST usr/include/linux/tee.h
  HDRINST usr/include/linux/udp.h
  HDRINST usr/include/linux/virtio_bt.h
  HDRINST usr/include/linux/v4l2-subdev.h
  HDRINST usr/include/linux/posix_acl_xattr.h
  HDRINST usr/include/linux/v4l2-mediabus.h
  HDRINST usr/include/linux/atmapi.h
  HDRINST usr/include/linux/raid/md_p.h
  HDRINST usr/include/linux/raid/md_u.h
  HDRINST usr/include/linux/zorro_ids.h
  HDRINST usr/include/linux/nbd.h
  HDRINST usr/include/linux/isst_if.h
  HDRINST usr/include/linux/rxrpc.h
  HDRINST usr/include/linux/unistd.h
  HDRINST usr/include/linux/if_arp.h
  HDRINST usr/include/linux/atm_zatm.h
  HDRINST usr/include/linux/io_uring.h
  HDRINST usr/include/linux/if_fddi.h
  CC      /kernel/build64-default/tools/objtool/weak.o
  HDRINST usr/include/linux/bpqether.h
  CC      /kernel/build64-default/tools/objtool/check.o
  HDRINST usr/include/linux/sysinfo.h
  HDRINST usr/include/linux/auto_dev-ioctl.h
  HDRINST usr/include/linux/nfs4_mount.h
  CC      /kernel/build64-default/tools/objtool/special.o
  HDRINST usr/include/linux/keyboard.h
  HDRINST usr/include/linux/virtio_mmio.h
  CC      /kernel/build64-default/tools/objtool/builtin-check.o
  HDRINST usr/include/linux/input.h
  CC      /kernel/build64-default/tools/objtool/elf.o
  HDRINST usr/include/linux/qnxtypes.h
  CC      /kernel/build64-default/tools/objtool/objtool.o
  HDRINST usr/include/linux/mdio.h
  MKDIR   /kernel/build64-default/tools/objtool/arch/x86/
  CC      /kernel/build64-default/tools/objtool/orc_gen.o
  HDRINST usr/include/linux/lwtunnel.h
  HDRINST usr/include/linux/gfs2_ondisk.h
  HDRINST usr/include/linux/eventfd.h
  MKDIR   /kernel/build64-default/tools/objtool/arch/x86/lib/
  HDRINST usr/include/linux/nfs4.h
  CC      /kernel/build64-default/tools/objtool/orc_dump.o
  CC      /kernel/build64-default/tools/objtool/arch/x86/special.o
  CC      /kernel/build64-default/tools/objtool/libstring.o
  CC      /kernel/build64-default/tools/objtool/libctype.o
  HDRINST usr/include/linux/ptp_clock.h
  GEN     /kernel/build64-default/tools/objtool/arch/x86/lib/inat-tables.c
  CC      /kernel/build64-default/tools/objtool/str_error_r.o
  HDRINST usr/include/linux/nubus.h
  HDRINST usr/include/linux/if_bonding.h
  CC      /kernel/build64-default/tools/objtool/librbtree.o
  HDRINST usr/include/linux/kcov.h
  HDRINST usr/include/linux/fadvise.h
  HDRINST usr/include/linux/taskstats.h
  HDRINST usr/include/linux/veth.h
  HDRINST usr/include/linux/atm.h
  HDRINST usr/include/linux/ipmi.h
  HDRINST usr/include/linux/kdev_t.h
  HDRINST usr/include/linux/mount.h
  HDRINST usr/include/linux/shm.h
  HDRINST usr/include/linux/resource.h
  HDRINST usr/include/linux/prctl.h
  HDRINST usr/include/linux/watch_queue.h
  HDRINST usr/include/linux/sched.h
  HDRINST usr/include/linux/phonet.h
  HDRINST usr/include/linux/random.h
  HDRINST usr/include/linux/tty.h
  HDRINST usr/include/linux/apm_bios.h
  HDRINST usr/include/linux/fd.h
  HDRINST usr/include/linux/um_timetravel.h
  HDRINST usr/include/linux/tls.h
  HDRINST usr/include/linux/rpmsg_types.h
  HDRINST usr/include/linux/pfrut.h
  HDRINST usr/include/linux/mei.h
  HDRINST usr/include/linux/fsi.h
  HDRINST usr/include/linux/rds.h
  HDRINST usr/include/linux/if_x25.h
  HDRINST usr/include/linux/param.h
  HDRINST usr/include/linux/netdevice.h
  HDRINST usr/include/linux/binfmts.h
  HDRINST usr/include/linux/if_pppox.h
  HDRINST usr/include/linux/sockios.h
  HDRINST usr/include/linux/kcm.h
  HDRINST usr/include/linux/virtio_9p.h
  HDRINST usr/include/linux/genwqe/genwqe_card.h
  HDRINST usr/include/linux/if_tun.h
  HDRINST usr/include/linux/ext4.h
  HDRINST usr/include/linux/if_ether.h
  HDRINST usr/include/linux/kvm_para.h
  HDRINST usr/include/linux/kernel-page-flags.h
  HDRINST usr/include/linux/cdrom.h
  HDRINST usr/include/linux/un.h
  HDRINST usr/include/linux/module.h
  HDRINST usr/include/linux/mqueue.h
  HDRINST usr/include/linux/a.out.h
  HDRINST usr/include/linux/input-event-codes.h
  HDRINST usr/include/linux/coda.h
  HDRINST usr/include/linux/rio_mport_cdev.h
  HDRINST usr/include/linux/ipsec.h
  HDRINST usr/include/linux/blkpg.h
  HDRINST usr/include/linux/blkzoned.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_arpreply.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_redirect.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_nflog.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_802_3.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_nat.h
  CC      /kernel/build64-default/tools/objtool/arch/x86/decode.o
  HDRINST usr/include/linux/netfilter_bridge/ebt_mark_m.h
  HDRINST usr/include/linux/netfilter_bridge/ebtables.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_vlan.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_limit.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_log.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_stp.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_pkttype.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_ip.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_ip6.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_arp.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_mark_t.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_among.h
  HDRINST usr/include/linux/reiserfs_fs.h
  HDRINST usr/include/linux/cciss_ioctl.h
  HDRINST usr/include/linux/fsmap.h
  HDRINST usr/include/linux/smiapp.h
  HDRINST usr/include/linux/switchtec_ioctl.h
  HDRINST usr/include/linux/atmdev.h
  HDRINST usr/include/linux/hpet.h
  HDRINST usr/include/linux/virtio_config.h
  HDRINST usr/include/linux/string.h
  HDRINST usr/include/linux/nsm.h
  HDRINST usr/include/linux/kfd_sysfs.h
  HDRINST usr/include/linux/inet_diag.h
  HDRINST usr/include/linux/netdev.h
  HDRINST usr/include/linux/xattr.h
  HDRINST usr/include/linux/iommufd.h
  HDRINST usr/include/linux/user_events.h
  HDRINST usr/include/linux/errno.h
  HDRINST usr/include/linux/icmp.h
  HDRINST usr/include/linux/i2o-dev.h
  HDRINST usr/include/linux/pg.h
  HDRINST usr/include/linux/if_bridge.h
  HDRINST usr/include/linux/thermal.h
  HDRINST usr/include/linux/uinput.h
  HDRINST usr/include/linux/handshake.h
  HDRINST usr/include/linux/dqblk_xfs.h
  HDRINST usr/include/linux/v4l2-common.h
  HDRINST usr/include/linux/nvram.h
  HDRINST usr/include/linux/if_vlan.h
  HDRINST usr/include/linux/uhid.h
  HDRINST usr/include/linux/omap3isp.h
  HDRINST usr/include/linux/rose.h
  HDRINST usr/include/linux/phantom.h
  HDRINST usr/include/linux/dpll.h
  HDRINST usr/include/linux/ipmi_msgdefs.h
  HDRINST usr/include/linux/bcm933xx_hcs.h
  HDRINST usr/include/linux/bpf.h
  HDRINST usr/include/linux/mempolicy.h
  HDRINST usr/include/linux/efs_fs_sb.h
  HDRINST usr/include/linux/nexthop.h
  HDRINST usr/include/linux/net_dropmon.h
  HDRINST usr/include/linux/surface_aggregator/cdev.h
  HDRINST usr/include/linux/surface_aggregator/dtx.h
  HDRINST usr/include/linux/net.h
  HDRINST usr/include/linux/mii.h
  HDRINST usr/include/linux/virtio_pcidev.h
  HDRINST usr/include/linux/termios.h
  HDRINST usr/include/linux/cgroupstats.h
  HDRINST usr/include/linux/mpls.h
  HDRINST usr/include/linux/iommu.h
  HDRINST usr/include/linux/toshiba.h
  HDRINST usr/include/linux/virtio_scsi.h
  HDRINST usr/include/linux/zorro.h
  HDRINST usr/include/linux/chio.h
  HDRINST usr/include/linux/pkt_sched.h
  HDRINST usr/include/linux/cramfs_fs.h
  HDRINST usr/include/linux/nfs3.h
  HDRINST usr/include/linux/vfio_ccw.h
  HDRINST usr/include/linux/atm_nicstar.h
  HDRINST usr/include/linux/ncsi.h
  HDRINST usr/include/linux/virtio_net.h
  HDRINST usr/include/linux/ioctl.h
  HDRINST usr/include/linux/stddef.h
  HDRINST usr/include/linux/limits.h
  HDRINST usr/include/linux/ipmi_bmc.h
  HDRINST usr/include/linux/netfilter_arp.h
  HDRINST usr/include/linux/if_addr.h
  HDRINST usr/include/linux/rpmsg.h
  HDRINST usr/include/linux/media-bus-format.h
  HDRINST usr/include/linux/kernelcapi.h
  HDRINST usr/include/linux/ppp_defs.h
  HDRINST usr/include/linux/ethtool.h
  HDRINST usr/include/linux/aspeed-video.h
  HDRINST usr/include/linux/hdlc.h
  HDRINST usr/include/linux/fscrypt.h
  HDRINST usr/include/linux/batadv_packet.h
  HDRINST usr/include/linux/uuid.h
  HDRINST usr/include/linux/capi.h
  HDRINST usr/include/linux/mptcp.h
  HDRINST usr/include/linux/hidraw.h
  HDRINST usr/include/linux/virtio_console.h
  HDRINST usr/include/linux/irqnr.h
  HDRINST usr/include/linux/coresight-stm.h
  HDRINST usr/include/linux/cxl_mem.h
  HDRINST usr/include/linux/iso_fs.h
  HDRINST usr/include/linux/virtio_blk.h
  HDRINST usr/include/linux/udf_fs_i.h
  HDRINST usr/include/linux/coff.h
  HDRINST usr/include/linux/dma-buf.h
  HDRINST usr/include/linux/ife.h
  HDRINST usr/include/linux/agpgart.h
  HDRINST usr/include/linux/socket.h
  HDRINST usr/include/linux/nilfs2_ondisk.h
  HDRINST usr/include/linux/connector.h
  HDRINST usr/include/linux/auto_fs4.h
  HDRINST usr/include/linux/bt-bmc.h
  HDRINST usr/include/linux/map_to_7segment.h
  HDRINST usr/include/linux/tc_act/tc_skbedit.h
  HDRINST usr/include/linux/tc_act/tc_ctinfo.h
  HDRINST usr/include/linux/tc_act/tc_defact.h
  HDRINST usr/include/linux/tc_act/tc_gact.h
  HDRINST usr/include/linux/tc_act/tc_vlan.h
  HDRINST usr/include/linux/tc_act/tc_skbmod.h
  HDRINST usr/include/linux/tc_act/tc_sample.h
  HDRINST usr/include/linux/tc_act/tc_tunnel_key.h
  HDRINST usr/include/linux/tc_act/tc_gate.h
  HDRINST usr/include/linux/tc_act/tc_mirred.h
  HDRINST usr/include/linux/tc_act/tc_nat.h
  HDRINST usr/include/linux/tc_act/tc_csum.h
  HDRINST usr/include/linux/tc_act/tc_ife.h
  HDRINST usr/include/linux/tc_act/tc_connmark.h
  HDRINST usr/include/linux/tc_act/tc_mpls.h
  HDRINST usr/include/linux/tc_act/tc_ct.h
  HDRINST usr/include/linux/tc_act/tc_pedit.h
  HDRINST usr/include/linux/tc_act/tc_bpf.h
  HDRINST usr/include/linux/netrom.h
  HDRINST usr/include/linux/joystick.h
  HDRINST usr/include/linux/falloc.h
  HDRINST usr/include/linux/cycx_cfm.h
  HDRINST usr/include/linux/omapfb.h
  HDRINST usr/include/linux/msdos_fs.h
  HDRINST usr/include/linux/virtio_types.h
  HDRINST usr/include/linux/mroute.h
  HDRINST usr/include/linux/psample.h
  HDRINST usr/include/linux/ipv6.h
  HDRINST usr/include/linux/nfsd_netlink.h
  HDRINST usr/include/linux/dw100.h
  HDRINST usr/include/linux/psp-sev.h
  HDRINST usr/include/linux/vfio.h
  HDRINST usr/include/linux/if_ppp.h
  HDRINST usr/include/linux/byteorder/big_endian.h
  HDRINST usr/include/linux/byteorder/little_endian.h
  HDRINST usr/include/linux/comedi.h
  HDRINST usr/include/linux/scif_ioctl.h
  HDRINST usr/include/linux/timerfd.h
  HDRINST usr/include/linux/time_types.h
  HDRINST usr/include/linux/firewire-constants.h
  HDRINST usr/include/linux/virtio_snd.h
  HDRINST usr/include/linux/ppp-ioctl.h
  HDRINST usr/include/linux/fib_rules.h
  HDRINST usr/include/linux/gen_stats.h
  HDRINST usr/include/linux/virtio_iommu.h
  HDRINST usr/include/linux/genetlink.h
  HDRINST usr/include/linux/uvcvideo.h
  HDRINST usr/include/linux/pfkeyv2.h
  HDRINST usr/include/linux/soundcard.h
  HDRINST usr/include/linux/times.h
  HDRINST usr/include/linux/nfc.h
  HDRINST usr/include/linux/affs_hardblocks.h
  HDRINST usr/include/linux/nilfs2_api.h
  HDRINST usr/include/linux/rseq.h
  HDRINST usr/include/linux/caif/caif_socket.h
  HDRINST usr/include/linux/caif/if_caif.h
  HDRINST usr/include/linux/i2c-dev.h
  HDRINST usr/include/linux/cuda.h
  HDRINST usr/include/linux/mei_uuid.h
  HDRINST usr/include/linux/cn_proc.h
  HDRINST usr/include/linux/parport.h
  HDRINST usr/include/linux/v4l2-controls.h
  HDRINST usr/include/linux/hsi/cs-protocol.h
  HDRINST usr/include/linux/hsi/hsi_char.h
  HDRINST usr/include/linux/seg6_genl.h
  HDRINST usr/include/linux/am437x-vpfe.h
  HDRINST usr/include/linux/amt.h
  HDRINST usr/include/linux/netconf.h
  HDRINST usr/include/linux/erspan.h
  HDRINST usr/include/linux/nsfs.h
  HDRINST usr/include/linux/xilinx-v4l2-controls.h
  HDRINST usr/include/linux/aspeed-p2a-ctrl.h
  HDRINST usr/include/linux/vfio_zdev.h
  HDRINST usr/include/linux/serio.h
  HDRINST usr/include/linux/acrn.h
  HDRINST usr/include/linux/nfs2.h
  HDRINST usr/include/linux/mptcp_pm.h
  HDRINST usr/include/linux/virtio_pci.h
  HDRINST usr/include/linux/ipc.h
  HDRINST usr/include/linux/ethtool_netlink.h
  HDRINST usr/include/linux/kd.h
  HDRINST usr/include/linux/elf.h
  HDRINST usr/include/linux/videodev2.h
  HDRINST usr/include/linux/if_alg.h
  HDRINST usr/include/linux/sonypi.h
  HDRINST usr/include/linux/fsverity.h
  HDRINST usr/include/linux/if.h
  HDRINST usr/include/linux/btrfs.h
  HDRINST usr/include/linux/vm_sockets_diag.h
  HDRINST usr/include/linux/netfilter_bridge.h
  HDRINST usr/include/linux/packet_diag.h
  HDRINST usr/include/linux/netfilter_ipv4.h
  HDRINST usr/include/linux/kvm.h
  HDRINST usr/include/linux/pci.h
  HDRINST usr/include/linux/if_addrlabel.h
  HDRINST usr/include/linux/hdlcdrv.h
  HDRINST usr/include/linux/cfm_bridge.h
  HDRINST usr/include/linux/fiemap.h
  HDRINST usr/include/linux/dm-ioctl.h
  HDRINST usr/include/linux/aspeed-lpc-ctrl.h
  HDRINST usr/include/linux/atmioc.h
  HDRINST usr/include/linux/dlm.h
  HDRINST usr/include/linux/pci_regs.h
  HDRINST usr/include/linux/cachefiles.h
  HDRINST usr/include/linux/membarrier.h
  HDRINST usr/include/linux/nfs_idmap.h
  HDRINST usr/include/linux/ip.h
  HDRINST usr/include/linux/atm_he.h
  HDRINST usr/include/linux/nfsd/export.h
  HDRINST usr/include/linux/nfsd/stats.h
  HDRINST usr/include/linux/nfsd/debug.h
  HDRINST usr/include/linux/nfsd/cld.h
  HDRINST usr/include/linux/ip_vs.h
  HDRINST usr/include/linux/vmcore.h
  HDRINST usr/include/linux/vbox_vmmdev_types.h
  HDRINST usr/include/linux/dvb/osd.h
  HDRINST usr/include/linux/dvb/dmx.h
  HDRINST usr/include/linux/dvb/net.h
  HDRINST usr/include/linux/dvb/frontend.h
  HDRINST usr/include/linux/dvb/ca.h
  HDRINST usr/include/linux/dvb/version.h
  HDRINST usr/include/linux/dvb/video.h
  HDRINST usr/include/linux/dvb/audio.h
  HDRINST usr/include/linux/nfs.h
  HDRINST usr/include/linux/if_link.h
  HDRINST usr/include/linux/wait.h
  HDRINST usr/include/linux/icmpv6.h
  HDRINST usr/include/linux/media.h
  HDRINST usr/include/linux/seg6_local.h
  HDRINST usr/include/linux/tps6594_pfsm.h
  HDRINST usr/include/linux/openvswitch.h
  HDRINST usr/include/linux/atmsap.h
  HDRINST usr/include/linux/fpga-dfl.h
  HDRINST usr/include/linux/userio.h
  HDRINST usr/include/linux/signal.h
  HDRINST usr/include/linux/map_to_14segment.h
  HDRINST usr/include/linux/hdreg.h
  HDRINST usr/include/linux/utime.h
  HDRINST usr/include/linux/usbdevice_fs.h
  HDRINST usr/include/linux/timex.h
  HDRINST usr/include/linux/if_fc.h
  HDRINST usr/include/linux/reiserfs_xattr.h
  HDRINST usr/include/linux/hw_breakpoint.h
  HDRINST usr/include/linux/quota.h
  HDRINST usr/include/linux/ioprio.h
  HDRINST usr/include/linux/eventpoll.h
  HDRINST usr/include/linux/atmclip.h
  HDRINST usr/include/linux/can.h
  HDRINST usr/include/linux/if_team.h
  HDRINST usr/include/linux/usbip.h
  HDRINST usr/include/linux/stat.h
  HDRINST usr/include/linux/fou.h
  HDRINST usr/include/linux/hash_info.h
  HDRINST usr/include/linux/ppp-comp.h
  HDRINST usr/include/linux/ip6_tunnel.h
  HDRINST usr/include/linux/tipc_netlink.h
  HDRINST usr/include/linux/in.h
  HDRINST usr/include/linux/wireguard.h
  HDRINST usr/include/linux/btf.h
  HDRINST usr/include/linux/batman_adv.h
  HDRINST usr/include/linux/fcntl.h
  HDRINST usr/include/linux/if_ltalk.h
  HDRINST usr/include/linux/i2c.h
  HDRINST usr/include/linux/atm_idt77105.h
  HDRINST usr/include/linux/kexec.h
  HDRINST usr/include/linux/arm_sdei.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6_tables.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_ah.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_NPT.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_rt.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_REJECT.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_opts.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_srh.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_LOG.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_mh.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_HL.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_hl.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_frag.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_ipv6header.h
  HDRINST usr/include/linux/minix_fs.h
  HDRINST usr/include/linux/aio_abi.h
  HDRINST usr/include/linux/pktcdvd.h
  HDRINST usr/include/linux/libc-compat.h
  HDRINST usr/include/linux/atmlec.h
  HDRINST usr/include/linux/signalfd.h
  HDRINST usr/include/linux/bpf_common.h
  HDRINST usr/include/linux/seg6_iptunnel.h
  HDRINST usr/include/linux/synclink.h
  HDRINST usr/include/linux/mpls_iptunnel.h
  HDRINST usr/include/linux/mctp.h
  HDRINST usr/include/linux/if_xdp.h
  HDRINST usr/include/linux/llc.h
  HDRINST usr/include/linux/atmsvc.h
  HDRINST usr/include/linux/sed-opal.h
  HDRINST usr/include/linux/sock_diag.h
  HDRINST usr/include/linux/time.h
  HDRINST usr/include/linux/securebits.h
  HDRINST usr/include/linux/fsl_hypervisor.h
  HDRINST usr/include/linux/if_hippi.h
  HDRINST usr/include/linux/seccomp.h
  HDRINST usr/include/linux/oom.h
  HDRINST usr/include/linux/filter.h
  HDRINST usr/include/linux/inotify.h
  HDRINST usr/include/linux/rfkill.h
  HDRINST usr/include/linux/reboot.h
  HDRINST usr/include/linux/can/vxcan.h
  HDRINST usr/include/linux/can/j1939.h
  HDRINST usr/include/linux/can/netlink.h
  HDRINST usr/include/linux/can/bcm.h
  HDRINST usr/include/linux/can/raw.h
  HDRINST usr/include/linux/can/gw.h
  HDRINST usr/include/linux/can/error.h
  HDRINST usr/include/linux/can/isotp.h
  HDRINST usr/include/linux/if_eql.h
  HDRINST usr/include/linux/psp-dbc.h
  HDRINST usr/include/linux/hiddev.h
  HDRINST usr/include/linux/blktrace_api.h
  HDRINST usr/include/linux/ccs.h
  HDRINST usr/include/linux/ioam6.h
  HDRINST usr/include/linux/hsr_netlink.h
  HDRINST usr/include/linux/mmc/ioctl.h
  HDRINST usr/include/linux/bfs_fs.h
  HDRINST usr/include/linux/npcm-video.h
  HDRINST usr/include/linux/rio_cm_cdev.h
  HDRINST usr/include/linux/uleds.h
  HDRINST usr/include/linux/mrp_bridge.h
  HDRINST usr/include/linux/adb.h
  HDRINST usr/include/linux/pmu.h
  HDRINST usr/include/linux/udmabuf.h
  HDRINST usr/include/linux/kcmp.h
  HDRINST usr/include/linux/dma-heap.h
  HDRINST usr/include/linux/userfaultfd.h
  HDRINST usr/include/linux/netfilter_arp/arpt_mangle.h
  HDRINST usr/include/linux/netfilter_arp/arp_tables.h
  HDRINST usr/include/linux/tipc.h
  HDRINST usr/include/linux/virtio_ids.h
  HDRINST usr/include/linux/l2tp.h
  HDRINST usr/include/linux/devlink.h
  HDRINST usr/include/linux/virtio_gpio.h
  HDRINST usr/include/linux/dcbnl.h
  HDRINST usr/include/linux/cyclades.h
  HDRINST usr/include/regulator/regulator.h
  HDRINST usr/include/sound/intel/avs/tokens.h
  HDRINST usr/include/sound/sof/fw.h
  HDRINST usr/include/sound/sof/abi.h
  HDRINST usr/include/sound/sof/tokens.h
  HDRINST usr/include/sound/sof/header.h
  HDRINST usr/include/sound/usb_stream.h
  HDRINST usr/include/sound/sfnt_info.h
  HDRINST usr/include/sound/asequencer.h
  HDRINST usr/include/sound/tlv.h
  HDRINST usr/include/sound/scarlett2.h
  HDRINST usr/include/sound/asound.h
  HDRINST usr/include/sound/asoc.h
  HDRINST usr/include/sound/sb16_csp.h
  HDRINST usr/include/sound/compress_offload.h
  HDRINST usr/include/sound/hdsp.h
  HDRINST usr/include/sound/emu10k1.h
  HDRINST usr/include/sound/snd_ar_tokens.h
  HDRINST usr/include/sound/snd_sst_tokens.h
  HDRINST usr/include/sound/asound_fm.h
  HDRINST usr/include/sound/hdspm.h
  HDRINST usr/include/sound/compress_params.h
  HDRINST usr/include/sound/firewire.h
  HDRINST usr/include/sound/skl-tplg-interface.h
  HDRINST usr/include/scsi/scsi_bsg_ufs.h
  HDRINST usr/include/scsi/scsi_netlink_fc.h
  HDRINST usr/include/scsi/scsi_bsg_mpi3mr.h
  HDRINST usr/include/scsi/fc/fc_ns.h
  HDRINST usr/include/scsi/fc/fc_els.h
  HDRINST usr/include/scsi/fc/fc_fs.h
  HDRINST usr/include/scsi/fc/fc_gs.h
  HDRINST usr/include/scsi/scsi_bsg_fc.h
  HDRINST usr/include/scsi/cxlflash_ioctl.h
  HDRINST usr/include/scsi/scsi_netlink.h
  HDRINST usr/include/linux/version.h
  HDRINST usr/include/asm/processor-flags.h
  HDRINST usr/include/asm/auxvec.h
  HDRINST usr/include/asm/svm.h
  HDRINST usr/include/asm/bitsperlong.h
  HDRINST usr/include/asm/kvm_perf.h
  HDRINST usr/include/asm/mce.h
  HDRINST usr/include/asm/posix_types.h
  HDRINST usr/include/asm/msr.h
  HDRINST usr/include/asm/sigcontext32.h
  HDRINST usr/include/asm/mman.h
  HDRINST usr/include/asm/shmbuf.h
  HDRINST usr/include/asm/e820.h
  HDRINST usr/include/asm/posix_types_64.h
  HDRINST usr/include/asm/vsyscall.h
  HDRINST usr/include/asm/msgbuf.h
  HDRINST usr/include/asm/swab.h
  HDRINST usr/include/asm/statfs.h
  HDRINST usr/include/asm/posix_types_x32.h
  HDRINST usr/include/asm/ptrace.h
  HDRINST usr/include/asm/unistd.h
  HDRINST usr/include/asm/ist.h
  HDRINST usr/include/asm/prctl.h
  HDRINST usr/include/asm/boot.h
  HDRINST usr/include/asm/sigcontext.h
  HDRINST usr/include/asm/posix_types_32.h
  HDRINST usr/include/asm/kvm_para.h
  HDRINST usr/include/asm/a.out.h
  HDRINST usr/include/asm/mtrr.h
  HDRINST usr/include/asm/amd_hsmp.h
  HDRINST usr/include/asm/hwcap2.h
  HDRINST usr/include/asm/ptrace-abi.h
  HDRINST usr/include/asm/vm86.h
  HDRINST usr/include/asm/vmx.h
  HDRINST usr/include/asm/ldt.h
  HDRINST usr/include/asm/perf_regs.h
  HDRINST usr/include/asm/kvm.h
  HDRINST usr/include/asm/debugreg.h
  HDRINST usr/include/asm/signal.h
  HDRINST usr/include/asm/bootparam.h
  HDRINST usr/include/asm/siginfo.h
  HDRINST usr/include/asm/hw_breakpoint.h
  HDRINST usr/include/asm/stat.h
  HDRINST usr/include/asm/setup.h
  HDRINST usr/include/asm/sgx.h
  HDRINST usr/include/asm/sembuf.h
  HDRINST usr/include/asm/ucontext.h
  HDRINST usr/include/asm/byteorder.h
  HDRINST usr/include/asm/unistd_64.h
  HDRINST usr/include/asm/ioctls.h
  HDRINST usr/include/asm/bpf_perf_event.h
  HDRINST usr/include/asm/types.h
  HDRINST usr/include/asm/poll.h
  HDRINST usr/include/asm/resource.h
  HDRINST usr/include/asm/param.h
  HDRINST usr/include/asm/sockios.h
  HDRINST usr/include/asm/errno.h
  HDRINST usr/include/asm/unistd_x32.h
  HDRINST usr/include/asm/termios.h
  HDRINST usr/include/asm/ioctl.h
  HDRINST usr/include/asm/socket.h
  HDRINST usr/include/asm/unistd_32.h
  HDRINST usr/include/asm/termbits.h
  HDRINST usr/include/asm/fcntl.h
  HDRINST usr/include/asm/ipcbuf.h
  HOSTLD  scripts/mod/modpost
  CC      kernel/bounds.s
  CHKSHA1 ../include/linux/atomic/atomic-arch-fallback.h
  CHKSHA1 ../include/linux/atomic/atomic-instrumented.h
  CHKSHA1 ../include/linux/atomic/atomic-long.h
  UPD     include/generated/timeconst.h
  UPD     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
  LD      /kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
  UPD     include/generated/asm-offsets.h
  CALL    ../scripts/checksyscalls.sh
  LD      /kernel/build64-default/tools/objtool/objtool-in.o
  LINK    /kernel/build64-default/tools/objtool/objtool
  LDS     scripts/module.lds
  HOSTCC  usr/gen_init_cpio
  AR      certs/built-in.a
  CC      security/commoncap.o
  CC      ipc/compat.o
  CC      security/min_addr.o
  CC      ipc/util.o
  CC      security/inode.o
  CC      ipc/msgutil.o
  CC      security/device_cgroup.o
  CC      mm/filemap.o
  CC      init/main.o
  CC      io_uring/io_uring.o
  AR      arch/x86/virt/vmx/built-in.a
  AR      arch/x86/video/built-in.a
  AS      arch/x86/lib/clear_page_64.o
  CC [M]  arch/x86/video/fbdev.o
  CC      io_uring/xattr.o
  CC      mm/mempool.o
  CC      io_uring/nop.o
  CC      ipc/msg.o
  CC      arch/x86/lib/cmdline.o
  CC      arch/x86/pci/i386.o
  AS      arch/x86/lib/cmpxchg16b_emu.o
  CC      arch/x86/power/cpu.o
  AR      arch/x86/virt/built-in.a
  CC      security/keys/gc.o
  CC      arch/x86/realmode/init.o
  UPD     init/utsversion-tmp.h
  AR      fs/quota/built-in.a
  AR      virt/lib/built-in.a
  CC      arch/x86/events/amd/core.o
  CC      fs/iomap/trace.o
  CC      fs/nfs_common/grace.o
  AR      arch/x86/ia32/built-in.a
  CC      block/partitions/core.o
  AS      arch/x86/crypto/aesni-intel_asm.o
  CC      fs/kernfs/mount.o
  CC      net/core/sock.o
  AR      drivers/cache/built-in.a
  CC      fs/notify/dnotify/dnotify.o
  CC      sound/core/sound.o
  CC [M]  virt/lib/irqbypass.o
  AR      arch/x86/net/built-in.a
  CC      sound/core/seq/seq.o
  CC      arch/x86/crypto/aesni-intel_glue.o
  AR      arch/x86/platform/atom/built-in.a
  AR      sound/i2c/other/built-in.a
  CC      arch/x86/kernel/fpu/init.o
  CC      arch/x86/mm/pat/set_memory.o
  AR      arch/x86/platform/ce4100/built-in.a
  CC      fs/notify/inotify/inotify_fsnotify.o
  AR      sound/i2c/built-in.a
  CC      io_uring/fs.o
  CC      ipc/sem.o
  AR      drivers/irqchip/built-in.a
  CC [M]  arch/x86/kvm/../../../virt/kvm/kvm_main.o
  CC      arch/x86/entry/vdso/vma.o
  CC      lib/kunit/hooks.o
  CC      ipc/shm.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/eventfd.o
  CC      arch/x86/platform/efi/memmap.o
  CC      kernel/sched/core.o
  AR      drivers/bus/mhi/built-in.a
  AR      drivers/bus/built-in.a
  CC      arch/x86/platform/efi/quirks.o
  CC      crypto/api.o
  AR      drivers/phy/allwinner/built-in.a
  AR      drivers/phy/amlogic/built-in.a
  CC      arch/x86/lib/copy_mc.o
  CC      fs/proc/task_mmu.o
  AR      drivers/phy/broadcom/built-in.a
  AR      drivers/phy/cadence/built-in.a
  AR      drivers/phy/freescale/built-in.a
  AR      drivers/phy/hisilicon/built-in.a
  AR      drivers/phy/ingenic/built-in.a
  AR      drivers/phy/intel/built-in.a
  CC [M]  lib/kunit/test.o
  AR      drivers/phy/lantiq/built-in.a
  AR      drivers/phy/marvell/built-in.a
  GEN     usr/initramfs_data.cpio
  AR      drivers/phy/mediatek/built-in.a
  COPY    usr/initramfs_inc_data
  AS      usr/initramfs_data.o
  AR      drivers/phy/microchip/built-in.a
  AR      usr/built-in.a
  AR      drivers/phy/motorola/built-in.a
  AR      drivers/phy/mscc/built-in.a
  CC      arch/x86/entry/vsyscall/vsyscall_64.o
  AR      drivers/phy/qualcomm/built-in.a
  AR      drivers/phy/ralink/built-in.a
  AR      drivers/phy/renesas/built-in.a
  CC      arch/x86/kernel/fpu/bugs.o
  AR      drivers/phy/rockchip/built-in.a
  AR      drivers/phy/samsung/built-in.a
  AR      drivers/phy/socionext/built-in.a
  AS      arch/x86/lib/copy_mc_64.o
  AR      drivers/phy/st/built-in.a
  AS      arch/x86/lib/copy_page_64.o
  AR      drivers/phy/starfive/built-in.a
  AR      drivers/phy/sunplus/built-in.a
  AS      arch/x86/lib/copy_user_64.o
  AR      drivers/phy/tegra/built-in.a
  AR      drivers/phy/ti/built-in.a
  AS      arch/x86/lib/copy_user_uncached_64.o
  CC      arch/x86/lib/cpu.o
  AR      drivers/phy/xilinx/built-in.a
  CC      arch/x86/kernel/fpu/core.o
  CC      drivers/phy/phy-core.o
  CC      fs/proc/inode.o
  CC      sound/core/seq/seq_lock.o
  CC      fs/notify/inotify/inotify_user.o
  AR      virt/built-in.a
  AS      arch/x86/realmode/rm/header.o
  CC      sound/core/seq/seq_clientmgr.o
  CC      fs/proc/root.o
  CC      sound/core/seq/seq_memory.o
  CC      sound/core/seq/seq_queue.o
  AS      arch/x86/realmode/rm/trampoline_64.o
  AS      arch/x86/realmode/rm/stack.o
  CC      security/keys/key.o
  AS      arch/x86/realmode/rm/reboot.o
  CC      sound/core/seq/seq_fifo.o
  AR      fs/notify/dnotify/built-in.a
  CC      sound/core/seq/seq_prioq.o
  CC      fs/kernfs/inode.o
  AS      arch/x86/realmode/rm/wakeup_asm.o
  CC      arch/x86/realmode/rm/wakemain.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/binary_stats.o
  CC      arch/x86/pci/init.o
  AR      fs/nfs_common/built-in.a
  CC      arch/x86/realmode/rm/video-mode.o
  CC      security/keys/keyring.o
  CC      security/keys/keyctl.o
  AS      arch/x86/entry/vsyscall/vsyscall_emu_64.o
  AR      sound/drivers/opl3/built-in.a
  AR      sound/drivers/opl4/built-in.a
  CC      arch/x86/platform/efi/efi.o
  CC      security/keys/permission.o
  AR      sound/drivers/mpu401/built-in.a
  AS      arch/x86/realmode/rm/copy.o
  AR      sound/drivers/vx/built-in.a
  AR      sound/drivers/pcsp/built-in.a
  AS      arch/x86/realmode/rm/bioscall.o
  AR      arch/x86/platform/geode/built-in.a
  AR      sound/drivers/built-in.a
  CC      arch/x86/entry/vdso/extable.o
  CC      arch/x86/entry/vdso/vdso32-setup.o
  CC      arch/x86/power/hibernate_64.o
  CC      arch/x86/realmode/rm/regs.o
  LDS     arch/x86/entry/vdso/vdso.lds
  CC      block/partitions/ldm.o
  CC      crypto/cipher.o
  AS      arch/x86/crypto/aesni-intel_avx-x86_64.o
  CC      crypto/compress.o
  CC      arch/x86/realmode/rm/video-vga.o
  AS      arch/x86/lib/csum-copy_64.o
  CC      arch/x86/events/amd/lbr.o
  CC      fs/iomap/iter.o
  CC      arch/x86/pci/mmconfig_64.o
  CC      arch/x86/lib/csum-partial_64.o
  CC      arch/x86/realmode/rm/video-vesa.o
  CC [M]  lib/kunit/resource.o
  CC      fs/proc/base.o
  CC      fs/sysfs/file.o
  CC      arch/x86/realmode/rm/video-bios.o
  CC      arch/x86/platform/efi/efi_64.o
  CC      arch/x86/lib/csum-wrappers_64.o
  CC      arch/x86/mm/pat/memtype.o
  CC      fs/sysfs/dir.o
  AS      arch/x86/crypto/aes_ctrby8_avx-x86_64.o
  PASYMS  arch/x86/realmode/rm/pasyms.h
  CC      sound/core/seq/seq_timer.o
  LDS     arch/x86/realmode/rm/realmode.lds
  AR      arch/x86/entry/vsyscall/built-in.a
  LD      arch/x86/realmode/rm/realmode.elf
  RELOCS  arch/x86/realmode/rm/realmode.relocs
  CC      sound/core/seq/seq_system.o
  OBJCOPY arch/x86/realmode/rm/realmode.bin
  AS      arch/x86/realmode/rmpiggy.o
  AR      arch/x86/realmode/built-in.a
  AS [M]  arch/x86/crypto/ghash-clmulni-intel_asm.o
  CC      sound/core/seq/seq_ports.o
  CC      fs/configfs/inode.o
  CC [M]  arch/x86/crypto/ghash-clmulni-intel_glue.o
  CC      fs/configfs/file.o
  AR      sound/isa/ad1816a/built-in.a
  AR      sound/isa/ad1848/built-in.a
  CC      arch/x86/kernel/cpu/mce/core.o
  AR      sound/isa/cs423x/built-in.a
  CC      fs/proc/generic.o
  AR      sound/isa/es1688/built-in.a
  AR      sound/isa/galaxy/built-in.a
  CC      lib/math/div64.o
  AR      sound/isa/gus/built-in.a
  CC      lib/math/gcd.o
  CC      arch/x86/lib/delay.o
  AR      sound/isa/msnd/built-in.a
  AS      arch/x86/lib/getuser.o
  AR      sound/isa/opti9xx/built-in.a
  AR      sound/pci/ac97/built-in.a
  AS      arch/x86/entry/vdso/vdso-note.o
  AR      sound/isa/sb/built-in.a
  AR      sound/pci/ali5451/built-in.a
  CC      arch/x86/kernel/cpu/mce/severity.o
  CC      init/do_mounts.o
  CC      init/do_mounts_initrd.o
  CC      fs/kernfs/dir.o
  AR      sound/pci/asihpi/built-in.a
  AR      sound/isa/wavefront/built-in.a
  CC      lib/math/lcm.o
  AR      sound/pci/au88x0/built-in.a
  CC      arch/x86/mm/init.o
  AR      sound/isa/wss/built-in.a
  CC      lib/crypto/memneq.o
  AR      sound/isa/built-in.a
  AR      sound/pci/aw2/built-in.a
  AR      sound/pci/ctxfi/built-in.a
  AR      drivers/phy/built-in.a
  CC      lib/math/int_log.o
  AR      fs/notify/inotify/built-in.a
  CC      lib/zlib_inflate/inffast.o
  AR      sound/pci/ca0106/built-in.a
  CC      lib/zlib_inflate/inflate.o
  CC      fs/notify/fsnotify.o
  AR      drivers/pinctrl/actions/built-in.a
  CC      fs/notify/fanotify/fanotify.o
  CC      crypto/algapi.o
  AR      sound/pci/cs46xx/built-in.a
  AR      drivers/pinctrl/bcm/built-in.a
  AR      sound/pci/cs5535audio/built-in.a
  AR      drivers/pinctrl/cirrus/built-in.a
  CC      drivers/gpio/gpiolib.o
  AR      sound/pci/lola/built-in.a
  AR      drivers/pinctrl/freescale/built-in.a
  CC      lib/math/int_pow.o
  AR      sound/pci/lx6464es/built-in.a
  CC      drivers/pinctrl/intel/pinctrl-baytrail.o
  AR      sound/pci/echoaudio/built-in.a
  CC      arch/x86/entry/vdso/vclock_gettime.o
  CC [M]  lib/kunit/static_stub.o
  AS      arch/x86/power/hibernate_asm_64.o
  AR      sound/pci/emu10k1/built-in.a
  CC      lib/math/int_sqrt.o
  CC      arch/x86/power/hibernate.o
  AR      sound/pci/hda/built-in.a
  GEN     arch/x86/lib/inat-tables.c
  CC [M]  sound/pci/hda/hda_bind.o
  CC [M]  sound/pci/hda/hda_codec.o
  CC      lib/math/reciprocal_div.o
  CC      lib/zlib_inflate/infutil.o
  CC      arch/x86/lib/insn-eval.o
  CC      arch/x86/events/amd/ibs.o
  CC      fs/iomap/buffered-io.o
  CC      arch/x86/kernel/fpu/regset.o
  CC      lib/math/rational.o
  CC      arch/x86/pci/direct.o
  CC      arch/x86/kernel/fpu/signal.o
  CC      arch/x86/entry/vdso/vgetcpu.o
  CC      ipc/syscall.o
  CC      ipc/ipc_sysctl.o
  CC      fs/sysfs/symlink.o
  CC      arch/x86/events/amd/uncore.o
  AS [M]  arch/x86/crypto/crc32-pclmul_asm.o
  CC      lib/crypto/utils.o
  CC [M]  arch/x86/crypto/crc32-pclmul_glue.o
  CC      io_uring/splice.o
  CC      sound/core/init.o
  CC      arch/x86/mm/pat/memtype_interval.o
  CC      block/partitions/msdos.o
  CC      security/keys/process_keys.o
  CC      net/core/request_sock.o
  CC      sound/core/seq/seq_info.o
  AS      arch/x86/platform/efi/efi_stub_64.o
  CC      fs/configfs/dir.o
  CC      net/core/skbuff.o
  CC      lib/zlib_inflate/inftrees.o
  AR      arch/x86/platform/efi/built-in.a
  AR      arch/x86/platform/iris/built-in.a
  CC      arch/x86/platform/intel/iosf_mbi.o
  HOSTCC  arch/x86/entry/vdso/vdso2c
  CC      fs/proc/array.o
  CC      block/partitions/efi.o
  CC [M]  lib/kunit/string-stream.o
  CC      lib/zlib_inflate/inflate_syms.o
  CC [M]  lib/math/prime_numbers.o
  CC      arch/x86/kernel/fpu/xstate.o
  CC      net/core/datagram.o
  CC      drivers/gpio/gpiolib-devres.o
  CC      lib/crypto/chacha.o
  CC      fs/proc/fd.o
  CC      lib/crypto/aes.o
  AR      arch/x86/power/built-in.a
  CC      lib/crypto/gf128mul.o
  CC      fs/notify/fanotify/fanotify_user.o
  AS [M]  arch/x86/crypto/crct10dif-pcl-asm_64.o
  CC [M]  arch/x86/crypto/crct10dif-pclmul_glue.o
  CC      fs/sysfs/mount.o
  LDS     arch/x86/entry/vdso/vdso32/vdso32.lds
  LD [M]  arch/x86/crypto/ghash-clmulni-intel.o
  AS      arch/x86/entry/vdso/vdso32/note.o
  CC      arch/x86/pci/mmconfig-shared.o
  CC      fs/kernfs/file.o
  CC      arch/x86/kernel/cpu/mtrr/mtrr.o
  CC      ipc/mqueue.o
  CC      arch/x86/kernel/cpu/microcode/core.o
  AS      arch/x86/entry/vdso/vdso32/system_call.o
  AR      arch/x86/mm/pat/built-in.a
  CC      arch/x86/mm/init_64.o
  AS      arch/x86/entry/vdso/vdso32/sigreturn.o
  CC      drivers/pinctrl/intel/pinctrl-intel.o
  CC      arch/x86/lib/insn.o
  CC      arch/x86/entry/vdso/vdso32/vclock_gettime.o
  AR      sound/core/seq/built-in.a
  CC      arch/x86/kernel/cpu/cacheinfo.o
  CC      arch/x86/kernel/cpu/microcode/intel.o
  CC      init/initramfs.o
  CC      sound/core/memory.o
  CC      lib/zlib_deflate/deflate.o
  CC      crypto/scatterwalk.o
  AR      lib/zlib_inflate/built-in.a
  CC      kernel/sched/fair.o
  CC [M]  lib/kunit/assert.o
  CC      lib/crypto/blake2s.o
  CC      mm/oom_kill.o
  AR      arch/x86/platform/intel/built-in.a
  CC      io_uring/sync.o
  AR      arch/x86/platform/intel-mid/built-in.a
  AS      arch/x86/lib/memcpy_64.o
  AR      arch/x86/platform/intel-quark/built-in.a
  AR      lib/math/built-in.a
  AS      arch/x86/lib/memmove_64.o
  AS      arch/x86/lib/memset_64.o
  AR      arch/x86/platform/olpc/built-in.a
  AR      arch/x86/events/amd/built-in.a
  AR      arch/x86/platform/scx200/built-in.a
  CC      ipc/namespace.o
  CC      arch/x86/events/intel/core.o
  CC      arch/x86/lib/misc.o
  CC      arch/x86/events/intel/bts.o
  CC      security/keys/request_key.o
  AR      arch/x86/platform/ts5500/built-in.a
  AR      arch/x86/platform/uv/built-in.a
  CC      arch/x86/lib/pc-conf-reg.o
  AR      arch/x86/platform/built-in.a
  CC      arch/x86/kernel/cpu/mce/genpool.o
  CC      drivers/gpio/gpiolib-legacy.o
  LD [M]  arch/x86/crypto/crc32-pclmul.o
  CC      net/core/stream.o
  LD [M]  arch/x86/crypto/crct10dif-pclmul.o
  AR      arch/x86/crypto/built-in.a
  CC      net/core/scm.o
  CC      sound/core/control.o
  CC      arch/x86/events/intel/ds.o
  AR      block/partitions/built-in.a
  CC      fs/configfs/symlink.o
  CC      arch/x86/events/intel/knc.o
  CC      block/bdev.o
  AS      arch/x86/lib/putuser.o
  AS      arch/x86/lib/retpoline.o
  CC      fs/sysfs/group.o
  CC      arch/x86/events/intel/lbr.o
  CC      net/core/gen_stats.o
  CC      arch/x86/entry/vdso/vdso32/vgetcpu.o
  CC      arch/x86/lib/usercopy.o
  CC      arch/x86/lib/usercopy_64.o
  CC [M]  drivers/pinctrl/intel/pinctrl-cherryview.o
  VDSO    arch/x86/entry/vdso/vdso64.so.dbg
  CC      lib/lzo/lzo1x_compress.o
  CC      fs/proc/proc_tty.o
  CC      arch/x86/kernel/cpu/mtrr/if.o
  VDSO    arch/x86/entry/vdso/vdso32.so.dbg
  CC [M]  lib/kunit/try-catch.o
  OBJCOPY arch/x86/entry/vdso/vdso64.so
  CC      lib/crypto/blake2s-generic.o
  CC      crypto/proc.o
  OBJCOPY arch/x86/entry/vdso/vdso32.so
  VDSO2C  arch/x86/entry/vdso/vdso-image-64.c
  VDSO2C  arch/x86/entry/vdso/vdso-image-32.c
  CC      arch/x86/entry/vdso/vdso-image-64.o
  CC      arch/x86/kernel/cpu/microcode/amd.o
  CC      fs/kernfs/symlink.o
  CC      arch/x86/pci/fixup.o
  CC      lib/lzo/lzo1x_decompress_safe.o
  CC      drivers/gpio/gpiolib-cdev.o
  AR      arch/x86/kernel/fpu/built-in.a
  CC      net/core/gen_estimator.o
  CC      init/calibrate.o
  CC [M]  sound/pci/hda/hda_jack.o
  CC      init/init_task.o
  CC      fs/iomap/direct-io.o
  CC      arch/x86/entry/vdso/vdso-image-32.o
  CC      lib/zlib_deflate/deftree.o
  CC      arch/x86/kernel/cpu/mce/intel.o
  CC      fs/proc/cmdline.o
  CC      io_uring/advise.o
  CC      fs/configfs/mount.o
  CC      lib/crypto/blake2s-selftest.o
  CC      arch/x86/events/intel/p4.o
  CC      security/keys/request_key_auth.o
  CC      net/core/net_namespace.o
  CC      arch/x86/kernel/cpu/mtrr/generic.o
  AR      fs/sysfs/built-in.a
  AR      arch/x86/entry/vdso/built-in.a
  AR      fs/notify/fanotify/built-in.a
  CC      arch/x86/kernel/cpu/mtrr/cleanup.o
  CC      fs/notify/notification.o
  AS      arch/x86/entry/entry.o
  CC [M]  lib/kunit/executor.o
  CC      arch/x86/kernel/cpu/scattered.o
  CC      fs/notify/group.o
  CC      arch/x86/events/intel/p6.o
  AS      arch/x86/entry/entry_64.o
  CC      arch/x86/entry/syscall_64.o
  CC      lib/crypto/des.o
  CC [M]  drivers/pinctrl/intel/pinctrl-broxton.o
  CC      arch/x86/lib/msr-smp.o
  CC      crypto/aead.o
  CC      arch/x86/events/core.o
  CC      arch/x86/events/zhaoxin/core.o
  CC      arch/x86/events/probe.o
  AR      fs/kernfs/built-in.a
  CC      fs/configfs/item.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/vfio.o
  CC      net/core/secure_seq.o
  CC      net/core/flow_dissector.o
  CC      lib/zlib_deflate/deflate_syms.o
  AR      lib/lzo/built-in.a
  CC      fs/proc/consoles.o
  CC      fs/proc/cpuinfo.o
  CC      ipc/mq_sysctl.o
  CC      arch/x86/mm/fault.o
  CC      arch/x86/lib/cache-smp.o
  CC      lib/crypto/sha1.o
  AR      arch/x86/kernel/cpu/microcode/built-in.a
  CC      block/fops.o
  CC      net/core/sysctl_net_core.o
  CC      init/version.o
  CC      io_uring/filetable.o
  AR      sound/ppc/built-in.a
  CC      arch/x86/kernel/cpu/mce/threshold.o
  AR      sound/arm/built-in.a
  CC      arch/x86/kernel/cpu/mce/apei.o
  CC      arch/x86/lib/msr.o
  CC      crypto/geniv.o
  CC      arch/x86/pci/acpi.o
  AR      sound/sh/built-in.a
  CC      arch/x86/pci/legacy.o
  CC      crypto/lskcipher.o
  CC      io_uring/openclose.o
  CC      security/keys/user_defined.o
  AR      init/built-in.a
  CC [M]  lib/kunit/attributes.o
  CC [M]  lib/kunit/device.o
  CC [M]  drivers/pinctrl/intel/pinctrl-geminilake.o
  CC      mm/fadvise.o
  CC [M]  sound/pci/hda/hda_auto_parser.o
  AR      ipc/built-in.a
  CC      arch/x86/entry/common.o
  CC      arch/x86/events/intel/pt.o
  CC      crypto/skcipher.o
  AR      lib/zlib_deflate/built-in.a
  AR      fs/configfs/built-in.a
  CC      fs/iomap/fiemap.o
  CC      fs/iomap/seek.o
  CC      fs/notify/mark.o
  CC      sound/core/misc.o
  AS      arch/x86/entry/thunk_64.o
  CC      fs/devpts/inode.o
  CC      fs/ext4/balloc.o
  CC      block/bio.o
  CC      fs/notify/fdinfo.o
  AS      arch/x86/entry/entry_64_compat.o
  CC      arch/x86/entry/syscall_32.o
  CC      fs/proc/devices.o
  CC      fs/iomap/swapfile.o
  CC      kernel/sched/build_policy.o
  CC      kernel/locking/mutex.o
  AS      arch/x86/lib/msr-reg.o
  AR      arch/x86/events/zhaoxin/built-in.a
  AR      arch/x86/kernel/cpu/mtrr/built-in.a
  CC      crypto/seqiv.o
  CC      arch/x86/events/utils.o
  CC      crypto/echainiv.o
  CC      lib/crypto/sha256.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/coalesced_mmio.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/async_pf.o
  CC      security/keys/compat.o
  CC      drivers/gpio/gpiolib-sysfs.o
  CC      drivers/gpio/gpiolib-acpi.o
  CC      security/keys/proc.o
  CC [M]  drivers/pinctrl/intel/pinctrl-sunrisepoint.o
  CC [M]  lib/kunit/debugfs.o
  CC      arch/x86/pci/irq.o
  CC      arch/x86/lib/msr-reg-export.o
  CC      fs/proc/interrupts.o
  CC      net/core/dev.o
  CC      security/keys/sysctl.o
  CC      block/elevator.o
  CC      arch/x86/pci/common.o
  CC      sound/core/device.o
  AR      arch/x86/kernel/cpu/mce/built-in.a
  CC      block/blk-core.o
  CC      arch/x86/pci/early.o
  CC      arch/x86/kernel/cpu/topology.o
  AS      arch/x86/lib/hweight.o
  CC      arch/x86/lib/iomem.o
  CC      mm/maccess.o
  CC [M]  lib/crypto/arc4.o
  CC      fs/ext4/bitmap.o
  CC      sound/core/info.o
  CC      fs/ext4/block_validity.o
  AR      fs/devpts/built-in.a
  CC      sound/core/isadma.o
  CC      kernel/locking/semaphore.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/irqchip.o
  AR      arch/x86/entry/built-in.a
  AR      fs/iomap/built-in.a
  AR      sound/pci/ice1712/built-in.a
  CC      fs/jbd2/transaction.o
  AR      sound/pci/korg1212/built-in.a
  CC      arch/x86/events/rapl.o
  CC      arch/x86/mm/ioremap.o
  AR      sound/pci/mixart/built-in.a
  CC      arch/x86/mm/extable.o
  CC      fs/ext4/dir.o
  CC      arch/x86/events/intel/uncore.o
  CC      kernel/locking/rwsem.o
  CC [M]  sound/pci/hda/hda_sysfs.o
  CC      io_uring/uring_cmd.o
  AR      fs/notify/built-in.a
  CC      crypto/ahash.o
  CC      block/blk-sysfs.o
  AR      lib/kunit/built-in.a
  LD [M]  lib/kunit/kunit.o
  CC      fs/proc/loadavg.o
  AR      drivers/pinctrl/intel/built-in.a
  CC [M]  arch/x86/kvm/../../../virt/kvm/dirty_ring.o
  AR      drivers/pinctrl/mediatek/built-in.a
  CC      mm/page-writeback.o
  CC      arch/x86/events/msr.o
  CC      mm/folio-compat.o
  CC      mm/readahead.o
  AR      drivers/pinctrl/mvebu/built-in.a
  CC      mm/swap.o
  AR      drivers/pinctrl/nomadik/built-in.a
  AR      drivers/pinctrl/nuvoton/built-in.a
  AR      drivers/pinctrl/nxp/built-in.a
  CC      arch/x86/events/intel/uncore_nhmex.o
  AR      security/keys/built-in.a
  AR      drivers/pinctrl/qcom/built-in.a
  AR      security/built-in.a
  AS      arch/x86/lib/iomap_copy_64.o
  AR      drivers/pinctrl/sprd/built-in.a
  CC      fs/proc/meminfo.o
  AR      lib/crypto/built-in.a
  LD [M]  lib/crypto/libarc4.o
  AR      drivers/pinctrl/sunplus/built-in.a
  CC      arch/x86/lib/inat.o
  CC      crypto/shash.o
  AR      drivers/pinctrl/ti/built-in.a
  CC      lib/lz4/lz4_compress.o
  CC      drivers/pinctrl/core.o
  CC      lib/lz4/lz4hc_compress.o
  CC      arch/x86/kernel/cpu/common.o
  CC      kernel/locking/percpu-rwsem.o
  CC      io_uring/epoll.o
  CC      crypto/akcipher.o
  AR      arch/x86/lib/built-in.a
  CC      sound/core/vmaster.o
  AR      arch/x86/lib/lib.a
  CC      sound/core/ctljack.o
  CC      arch/x86/events/intel/uncore_snb.o
  CC      arch/x86/kernel/cpu/rdrand.o
  CC      fs/ext4/ext4_jbd2.o
  CC      drivers/gpio/gpiolib-swnode.o
  CC      kernel/locking/irqflag-debug.o
  CC      kernel/locking/mutex-debug.o
  CC      crypto/sig.o
  CC      fs/ramfs/inode.o
  CC      fs/ramfs/file-mmu.o
  CC [M]  sound/pci/hda/hda_controller.o
  CC      fs/ext4/extents.o
  CC      arch/x86/pci/bus_numa.o
  CC      fs/jbd2/commit.o
  CC      fs/jbd2/recovery.o
  CC      kernel/locking/lockdep.o
  CC      fs/jbd2/checkpoint.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/pfncache.o
  CC      arch/x86/mm/mmap.o
  CC      fs/ext4/extents_status.o
  CC      fs/hugetlbfs/inode.o
  CC      net/core/dev_addr_lists.o
  CC [M]  sound/pci/hda/hda_proc.o
  CC      kernel/locking/lockdep_proc.o
  CC      mm/truncate.o
  CC      fs/proc/stat.o
  CC      fs/ext4/file.o
  CC      block/blk-flush.o
  CC      fs/proc/uptime.o
  CC      block/blk-settings.o
  CC      kernel/locking/spinlock.o
  CC      fs/fat/cache.o
  CC      sound/core/jack.o
  CC      io_uring/statx.o
  CC      fs/fat/dir.o
  AR      drivers/gpio/built-in.a
  CC      lib/lz4/lz4_decompress.o
  CC      fs/ext4/fsmap.o
  CC      arch/x86/mm/pgtable.o
  CC      io_uring/net.o
  CC      fs/nfs/client.o
  CC      fs/nfs/dir.o
  CC      kernel/locking/osq_lock.o
  CC      arch/x86/pci/amd_bus.o
  CC      crypto/kpp.o
  CC      fs/nfs/file.o
  CC      arch/x86/events/intel/uncore_snbep.o
  CC      fs/nfs/getroot.o
  AR      fs/ramfs/built-in.a
  CC      kernel/locking/qspinlock.o
  CC      kernel/locking/rtmutex_api.o
  CC      arch/x86/mm/physaddr.o
  CC      lib/zstd/zstd_compress_module.o
  CC      drivers/pinctrl/pinctrl-utils.o
  CC      lib/zstd/compress/fse_compress.o
  CC      fs/proc/util.o
  AR      sound/synth/emux/built-in.a
  CC      fs/proc/version.o
  AR      sound/synth/built-in.a
  CC      arch/x86/mm/tlb.o
  CC      fs/proc/softirqs.o
  CC [M]  arch/x86/kvm/x86.o
  CC      kernel/locking/spinlock_debug.o
  CC      arch/x86/events/intel/uncore_discovery.o
  CC      sound/core/timer.o
  CC      arch/x86/kernel/cpu/match.o
  CC      fs/proc/namespaces.o
  AR      drivers/pwm/built-in.a
  CC      fs/fat/fatent.o
  CC      fs/nfs/inode.o
  CC      fs/nfs/super.o
  CC      block/blk-ioc.o
  CC      fs/jbd2/revoke.o
  CC      fs/fat/file.o
  CC      fs/jbd2/journal.o
  CC      net/core/dst.o
  CC      lib/zstd/compress/hist.o
  CC [M]  sound/pci/hda/hda_hwdep.o
  CC      lib/zstd/compress/huf_compress.o
  CC      fs/proc/self.o
  CC      arch/x86/kernel/cpu/bugs.o
  AR      arch/x86/pci/built-in.a
  CC      lib/zstd/compress/zstd_compress.o
  CC      fs/proc/thread_self.o
  CC      mm/vmscan.o
  CC      arch/x86/kernel/cpu/aperfmperf.o
  CC      crypto/acompress.o
  CC      arch/x86/kernel/cpu/cpuid-deps.o
  CC      drivers/pinctrl/pinmux.o
  AR      fs/hugetlbfs/built-in.a
  CC      kernel/power/qos.o
  CC      fs/fat/inode.o
  CC      kernel/locking/qrwlock.o
  CC      mm/shrinker.o
  CC      fs/proc/proc_sysctl.o
  CC      drivers/pinctrl/pinconf.o
  CC      fs/exportfs/expfs.o
  CC      kernel/power/main.o
  CC      arch/x86/kernel/cpu/umwait.o
  AR      lib/lz4/built-in.a
  CC      lib/xz/xz_dec_syms.o
  CC      fs/fat/misc.o
  CC      arch/x86/kernel/cpu/proc.o
  CC      fs/proc/proc_net.o
  CC      kernel/printk/printk.o
  CC      fs/lockd/clntlock.o
  CC      kernel/printk/printk_safe.o
  CC      kernel/irq/irqdesc.o
  CC [M]  sound/pci/hda/hda_generic.o
  CC      kernel/irq/handle.o
  CC      kernel/printk/nbcon.o
  CC      arch/x86/mm/cpu_entry_area.o
  CC      kernel/irq/manage.o
  CC      block/blk-map.o
  AR      sound/usb/misc/built-in.a
  AR      sound/firewire/built-in.a
  CC      crypto/scompress.o
  CC      io_uring/msg_ring.o
  CC      mm/shmem.o
  AR      sound/usb/usx2y/built-in.a
  CC      fs/fat/nfs.o
  AR      sound/usb/caiaq/built-in.a
  AR      sound/sparc/built-in.a
  CC      drivers/pinctrl/pinconf-generic.o
  CC      mm/util.o
  MKCAP   arch/x86/kernel/cpu/capflags.c
  AR      sound/usb/6fire/built-in.a
  AR      sound/usb/hiface/built-in.a
  AR      fs/exportfs/built-in.a
  CC      lib/xz/xz_dec_stream.o
  CC      arch/x86/kernel/cpu/powerflags.o
  AR      sound/usb/bcd2000/built-in.a
  CC      kernel/irq/spurious.o
  CC      fs/nls/nls_base.o
  AR      sound/usb/built-in.a
  CC      kernel/irq/resend.o
  AR      fs/unicode/built-in.a
  CC      kernel/printk/printk_ringbuffer.o
  CC      arch/x86/events/intel/cstate.o
  CC      fs/fat/namei_vfat.o
  CC      fs/fat/namei_msdos.o
  CC      sound/core/hrtimer.o
  CC      crypto/algboss.o
  CC      kernel/irq/chip.o
  CC      mm/mmzone.o
  CC      kernel/sched/build_utility.o
  CC      mm/vmstat.o
  CC      kernel/irq/dummychip.o
  CC      fs/ntfs/aops.o
  CC      fs/ntfs/attrib.o
  CC      kernel/power/console.o
  CC      arch/x86/kernel/cpu/feat_ctl.o
  CC      arch/x86/mm/maccess.o
  CC      crypto/testmgr.o
  CC      lib/xz/xz_dec_lzma2.o
  CC      net/core/netevent.o
  CC      net/core/neighbour.o
  AR      drivers/pinctrl/built-in.a
  CC      kernel/printk/sysctl.o
  CC      drivers/pci/msi/pcidev_msi.o
  CC      mm/backing-dev.o
  CC      drivers/video/console/dummycon.o
  CC      fs/nls/nls_cp437.o
  CC      drivers/video/logo/logo.o
  CC      kernel/irq/devres.o
  CC      drivers/video/console/vgacon.o
  CC      drivers/video/backlight/backlight.o
  CC      fs/proc/kcore.o
  CC      arch/x86/mm/pgprot.o
  CC      drivers/video/fbdev/core/fb_notify.o
  CC      fs/proc/kmsg.o
  CC      sound/core/seq_device.o
  AR      fs/hostfs/built-in.a
  AR      drivers/video/fbdev/omap/built-in.a
  CC      fs/nls/nls_ascii.o
  CC      fs/lockd/clntproc.o
  CC      block/blk-merge.o
  CC      io_uring/timeout.o
  CC      arch/x86/kernel/cpu/intel.o
  AR      sound/pci/nm256/built-in.a
  CC      mm/mm_init.o
  AR      arch/x86/events/intel/built-in.a
  AR      arch/x86/events/built-in.a
  CC      arch/x86/mm/hugetlbpage.o
  CC      arch/x86/mm/numa.o
  CC      arch/x86/mm/numa_64.o
  CC      drivers/video/aperture.o
  AR      kernel/locking/built-in.a
  CC [M]  arch/x86/kvm/emulate.o
  CC      drivers/pci/msi/api.o
  CC      fs/ext4/fsync.o
  CC      lib/xz/xz_dec_bcj.o
  CC      fs/ext4/hash.o
  CC      kernel/power/process.o
  CC      fs/ext4/ialloc.o
  HOSTCC  drivers/video/logo/pnmtologo
  CC      kernel/irq/autoprobe.o
  CC      kernel/irq/irqdomain.o
  AR      fs/fat/built-in.a
  CC      kernel/irq/proc.o
  CC      fs/ext4/indirect.o
  CC      fs/ext4/inline.o
  AR      sound/pci/oxygen/built-in.a
  CC      fs/nfs/io.o
  CC      fs/lockd/clntxdr.o
  CC      fs/lockd/host.o
  CC      fs/nfs/direct.o
  AR      fs/jbd2/built-in.a
  CC      fs/ntfs/collate.o
  CC      kernel/rcu/update.o
  CC      fs/ntfs/compress.o
  CC      fs/nls/nls_iso8859-1.o
  CC [M]  sound/core/control_led.o
  LOGO    drivers/video/logo/logo_linux_clut224.c
  CC      drivers/video/logo/logo_linux_clut224.o
  CC      lib/zstd/compress/zstd_compress_literals.o
  AR      drivers/video/logo/built-in.a
  CC      lib/zstd/compress/zstd_compress_sequences.o
  CC [M]  drivers/video/fbdev/core/fb_info.o
  AR      lib/xz/built-in.a
  CC      fs/ntfs/debug.o
  CC      drivers/video/cmdline.o
  AR      kernel/printk/built-in.a
  CC      drivers/video/nomodeset.o
  CC [M]  drivers/video/fbdev/core/fbmem.o
  AR      drivers/video/backlight/built-in.a
  CC      fs/proc/page.o
  AR      kernel/livepatch/built-in.a
  CC      drivers/video/hdmi.o
  AR      drivers/video/console/built-in.a
  CC      lib/zstd/compress/zstd_compress_superblock.o
  CC      drivers/pci/msi/msi.o
  CC      fs/ntfs/dir.o
  CC      arch/x86/mm/amdtopology.o
  CC      lib/zstd/compress/zstd_double_fast.o
  CC      lib/zstd/compress/zstd_fast.o
  CC      fs/nls/nls_utf8.o
  CC      fs/debugfs/inode.o
  CC      fs/tracefs/inode.o
  CC      lib/zstd/compress/zstd_lazy.o
  CC      io_uring/sqpoll.o
  CC      fs/tracefs/event_inode.o
  CC      io_uring/fdinfo.o
  CC      mm/percpu.o
  CC      arch/x86/kernel/cpu/intel_pconfig.o
  CC      drivers/idle/intel_idle.o
  CC      fs/ntfs/file.o
  CC      fs/lockd/svc.o
  CC      kernel/power/suspend.o
  CC      kernel/rcu/sync.o
  CC      fs/ext4/inode.o
  CC [M]  sound/core/hwdep.o
  CC      fs/pstore/inode.o
  CC      kernel/irq/migration.o
  CC      block/blk-timeout.o
  CC      kernel/rcu/srcutree.o
  CC      kernel/rcu/tree.o
  CC      fs/btrfs/super.o
  CC [M]  drivers/video/fbdev/core/fbcmap.o
  CC      arch/x86/kernel/cpu/tsx.o
  CC      arch/x86/kernel/cpu/intel_epb.o
  CC      crypto/cmac.o
  CC [M]  sound/core/pcm.o
  CC [M]  fs/nls/nls_ucs2_utils.o
  AR      sound/pci/pcxhr/built-in.a
  AR      sound/spi/built-in.a
  AR      sound/pci/riptide/built-in.a
  AR      sound/pci/rme9652/built-in.a
  AR      sound/parisc/built-in.a
  CC      arch/x86/kernel/acpi/boot.o
  AR      sound/pcmcia/vx/built-in.a
  CC      arch/x86/mm/srat.o
  AR      sound/mips/built-in.a
  AR      fs/nls/built-in.a
  CC      arch/x86/mm/pkeys.o
  CC      arch/x86/kernel/acpi/sleep.o
  AR      sound/pcmcia/pdaudiocf/built-in.a
  AR      sound/pcmcia/built-in.a
  AR      fs/proc/built-in.a
  CC [M]  drivers/video/fbdev/core/modedb.o
  AR      sound/soc/built-in.a
  CC      arch/x86/kernel/cpu/amd.o
  CC      arch/x86/mm/pti.o
  CC      drivers/pci/msi/irqdomain.o
  CC      fs/ext4/ioctl.o
  CC [M]  sound/pci/hda/patch_realtek.o
  AS      arch/x86/kernel/acpi/wakeup_64.o
  CC [M]  drivers/video/fbdev/core/fbcvt.o
  CC      arch/x86/kernel/apic/apic.o
  AR      fs/tracefs/built-in.a
  CC      fs/debugfs/file.o
  CC      arch/x86/kernel/apic/apic_common.o
  CC      arch/x86/kernel/kprobes/core.o
  CC      block/blk-lib.o
  CC      fs/ntfs/index.o
  CC      kernel/irq/cpuhotplug.o
  CC      fs/efivarfs/inode.o
  CC      fs/ntfs/inode.o
  CC      fs/efivarfs/file.o
  CC      fs/ntfs/mft.o
  CC      fs/ntfs/mst.o
  CC      crypto/hmac.o
  CC      fs/efivarfs/super.o
  CC      fs/pstore/platform.o
  CC      fs/nfs/pagelist.o
  CC      kernel/power/hibernate.o
  CC [M]  drivers/video/fbdev/core/fb_cmdline.o
  CC      io_uring/tctx.o
  CC      io_uring/poll.o
  AR      drivers/idle/built-in.a
  AR      drivers/char/ipmi/built-in.a
  CC [M]  fs/netfs/buffered_read.o
  CC [M]  sound/core/pcm_native.o
  CC      drivers/acpi/acpica/dsargs.o
  CC      fs/pstore/pmsg.o
  CC [M]  fs/smb/common/cifs_arc4.o
  CC [M]  fs/smb/common/cifs_md4.o
  CC      fs/lockd/svclock.o
  AR      arch/x86/mm/built-in.a
  CC      arch/x86/kernel/acpi/apei.o
  CC [M]  fs/smb/client/trace.o
  CC      net/core/rtnetlink.o
  CC [M]  fs/smb/client/cifsfs.o
  AR      drivers/pci/msi/built-in.a
  CC      drivers/pci/pcie/portdrv.o
  CC      drivers/acpi/numa/srat.o
  CC      drivers/pci/pcie/rcec.o
  CC      fs/efivarfs/vars.o
  AR      sound/pci/trident/built-in.a
  CC      kernel/irq/pm.o
  LDS     arch/x86/kernel/vmlinux.lds
  CC [M]  drivers/video/fbdev/core/fb_backlight.o
  CC [M]  drivers/video/fbdev/core/fbmon.o
  CC [M]  fs/smb/client/cifs_debug.o
  AS      arch/x86/kernel/head_64.o
  CC [M]  drivers/video/fbdev/core/fb_defio.o
  CC      block/blk-mq.o
  CC [M]  fs/smb/client/connect.o
  CC      drivers/acpi/acpica/dscontrol.o
  CC      arch/x86/kernel/kprobes/opt.o
  CC      crypto/vmac.o
  CC      crypto/xcbc.o
  CC      fs/ntfs/namei.o
  CC [M]  fs/smb/client/dir.o
  AR      fs/debugfs/built-in.a
  AR      fs/pstore/built-in.a
  CC [M]  fs/fuse/dev.o
  CC [M]  fs/overlayfs/super.o
  CC      drivers/acpi/acpica/dsdebug.o
  CC [M]  drivers/video/fbdev/core/fb_chrdev.o
  CC [M]  fs/fuse/dir.o
  CC      arch/x86/kernel/acpi/cppc.o
  CC      arch/x86/kernel/apic/apic_noop.o
  CC      arch/x86/kernel/head64.o
  CC      arch/x86/kernel/cpu/hygon.o
  CC      fs/ntfs/runlist.o
  CC      drivers/acpi/acpica/dsfield.o
  CC      drivers/pci/pcie/aspm.o
  CC      kernel/power/snapshot.o
  CC      kernel/power/swap.o
  CC      mm/slab_common.o
  AR      fs/efivarfs/built-in.a
  CC [M]  fs/netfs/buffered_write.o
  CC [M]  fs/fuse/file.o
  CC      block/blk-mq-tag.o
  CC      block/blk-stat.o
  CC      block/blk-mq-sysfs.o
  CC      kernel/irq/msi.o
  AR      drivers/acpi/numa/built-in.a
  CC      block/blk-mq-cpumap.o
  CC      drivers/pci/hotplug/pci_hotplug_core.o
  CC      io_uring/cancel.o
  CC      drivers/pci/hotplug/acpi_pcihp.o
  CC      arch/x86/kernel/kprobes/ftrace.o
  CC      drivers/pci/hotplug/pciehp_core.o
  CC      crypto/crypto_null.o
  CC      fs/ntfs/super.o
  CC      arch/x86/kernel/apic/ipi.o
  CC      arch/x86/kernel/acpi/cstate.o
  CC      drivers/acpi/acpica/dsinit.o
  CC      lib/zstd/compress/zstd_ldm.o
  CC      fs/lockd/svcshare.o
  CC      drivers/acpi/acpica/dsmethod.o
  CC      drivers/acpi/acpica/dsmthdat.o
  CC      kernel/irq/affinity.o
  CC      arch/x86/kernel/cpu/centaur.o
  CC [M]  drivers/video/fbdev/core/fb_procfs.o
  CC [M]  fs/overlayfs/namei.o
  AR      kernel/sched/built-in.a
  CC      fs/nfs/read.o
  CC      kernel/dma/mapping.o
  CC [M]  drivers/video/fbdev/core/fbsysfs.o
  CC [M]  sound/pci/hda/patch_analog.o
  CC      drivers/acpi/acpica/dsobject.o
  AR      drivers/pci/controller/dwc/built-in.a
  CC      drivers/pci/controller/vmd.o
  AR      drivers/pci/controller/mobiveil/built-in.a
  CC [M]  fs/smb/client/file.o
  CC      drivers/acpi/acpica/dsopcode.o
  CC      fs/ext4/mballoc.o
  CC      arch/x86/kernel/ebda.o
  AR      arch/x86/kernel/kprobes/built-in.a
  CC      fs/ext4/migrate.o
  CC      net/core/utils.o
  CC      drivers/pci/hotplug/pciehp_ctrl.o
  CC      crypto/md5.o
  CC      fs/ntfs/sysctl.o
  CC      drivers/acpi/acpica/dspkginit.o
  CC      arch/x86/kernel/apic/vector.o
  CC      drivers/acpi/acpica/dsutils.o
  CC [M]  fs/overlayfs/util.o
  AR      arch/x86/kernel/acpi/built-in.a
  CC      drivers/pci/pcie/aer.o
  CC [M]  fs/overlayfs/inode.o
  CC      io_uring/kbuf.o
  CC      fs/btrfs/ctree.o
  CC      drivers/pnp/core.o
  CC      arch/x86/kernel/cpu/zhaoxin.o
  CC      drivers/pnp/pnpacpi/core.o
  CC      drivers/pnp/card.o
  CC      kernel/irq/matrix.o
  CC [M]  fs/fuse/inode.o
  CC      fs/btrfs/extent-tree.o
  CC      arch/x86/kernel/cpu/perfctr-watchdog.o
  CC      io_uring/rsrc.o
  AR      drivers/pci/switch/built-in.a
  CC      drivers/pci/access.o
  CC      fs/btrfs/print-tree.o
  AR      drivers/video/fbdev/omap2/omapfb/dss/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/displays/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/built-in.a
  CC      fs/lockd/svcproc.o
  CC      drivers/acpi/acpica/dswexec.o
  AR      drivers/video/fbdev/omap2/built-in.a
  CC [M]  sound/core/pcm_lib.o
  CC      kernel/power/user.o
  CC      kernel/power/poweroff.o
  CC      lib/zstd/compress/zstd_opt.o
  CC      mm/compaction.o
  CC      fs/ntfs/unistr.o
  CC [M]  fs/netfs/direct_read.o
  CC      crypto/sha1_generic.o
  CC      fs/nfs/symlink.o
  CC      fs/nfs/unlink.o
  CC [M]  sound/pci/hda/patch_hdmi.o
  CC [M]  drivers/video/fbdev/core/fbcon.o
  CC      kernel/dma/direct.o
  CC      fs/nfs/write.o
  CC      drivers/pci/hotplug/pciehp_pci.o
  CC [M]  drivers/video/fbdev/core/bitblit.o
  CC [M]  fs/netfs/direct_write.o
  CC      drivers/pnp/driver.o
  CC      drivers/pnp/pnpacpi/rsparser.o
  CC      fs/ext4/mmp.o
  CC      drivers/acpi/acpica/dswload.o
  AR      drivers/pci/controller/built-in.a
  CC      drivers/pci/bus.o
  AR      drivers/amba/built-in.a
  CC [M]  drivers/video/fbdev/uvesafb.o
  CC      fs/nfs/namespace.o
  CC      arch/x86/kernel/cpu/vmware.o
  CC      net/core/link_watch.o
  CC [M]  fs/fuse/control.o
  CC      drivers/pci/pcie/err.o
  CC      kernel/rcu/rcu_segcblist.o
  CC      arch/x86/kernel/platform-quirks.o
  CC      fs/ntfs/upcase.o
  CC [M]  fs/smb/client/inode.o
  CC [M]  fs/overlayfs/file.o
  CC      crypto/sha256_generic.o
  AR      kernel/power/built-in.a
  CC      drivers/pci/probe.o
  CC      drivers/acpi/acpica/dswload2.o
  CC      drivers/pnp/resource.o
  AR      kernel/irq/built-in.a
  CC      drivers/pnp/manager.o
  CC      kernel/entry/common.o
  CC      drivers/pci/hotplug/pciehp_hpc.o
  CC      kernel/entry/syscall_user_dispatch.o
  CC      arch/x86/kernel/cpu/hypervisor.o
  CC      drivers/pnp/support.o
  CC      arch/x86/kernel/apic/init.o
  CC      kernel/dma/ops_helpers.o
  CC [M]  fs/netfs/io.o
  CC      fs/lockd/svcsubs.o
  CC      drivers/acpi/acpica/dswscope.o
  CC      arch/x86/kernel/process_64.o
  CC      drivers/pci/pcie/aer_inject.o
  CC      block/blk-mq-sched.o
  AR      drivers/pnp/pnpacpi/built-in.a
  CC      net/core/filter.o
  CC      drivers/pci/pcie/pme.o
  CC      drivers/pnp/interface.o
  CC      drivers/acpi/acpica/dswstate.o
  CC      arch/x86/kernel/signal.o
  CC      drivers/pnp/quirks.o
  CC [M]  fs/smb/client/link.o
  CC      arch/x86/kernel/cpu/mshyperv.o
  CC      io_uring/rw.o
  AR      fs/ntfs/built-in.a
  CC      fs/lockd/mon.o
  AR      kernel/rcu/built-in.a
  CC      crypto/sha512_generic.o
  CC [M]  arch/x86/kvm/i8259.o
  CC [M]  sound/pci/hda/hda_eld.o
  CC      io_uring/opdef.o
  CC [M]  sound/core/pcm_misc.o
  CC [M]  fs/fuse/xattr.o
  CC [M]  fs/overlayfs/dir.o
  CC      net/core/sock_diag.o
  CC [M]  fs/netfs/iterator.o
  CC      lib/raid6/algos.o
  CC [M]  fs/smb/client/misc.o
  CC      net/core/dev_ioctl.o
  CC      arch/x86/kernel/apic/hw_nmi.o
  CC      io_uring/notif.o
  CC      drivers/acpi/acpica/evevent.o
  CC      arch/x86/kernel/apic/io_apic.o
  CC      kernel/dma/dummy.o
  CC [M]  drivers/video/fbdev/core/softcursor.o
  CC      drivers/pnp/system.o
  CC      fs/open.o
  CC      drivers/pci/hotplug/acpiphp_core.o
  CC      kernel/entry/kvm.o
  CC      drivers/pci/pcie/dpc.o
  CC      net/core/tso.o
  CC [M]  drivers/video/fbdev/core/tileblit.o
  CC [M]  sound/core/pcm_memory.o
  CC      kernel/dma/contiguous.o
  CC [M]  fs/overlayfs/readdir.o
  CC      drivers/acpi/acpica/evgpe.o
  CC      crypto/sha3_generic.o
  CC [M]  fs/fuse/acl.o
  CC [M]  fs/fuse/readdir.o
  CC      block/ioctl.o
  CC      arch/x86/kernel/cpu/debugfs.o
  CC [M]  drivers/video/fbdev/simplefb.o
  CC [M]  sound/pci/hda/hda_intel.o
  CC [M]  fs/netfs/locking.o
  CC      lib/raid6/recov.o
  CC [M]  fs/overlayfs/copy_up.o
  CC      fs/btrfs/root-tree.o
  CC [M]  fs/fuse/ioctl.o
  CC      arch/x86/kernel/apic/msi.o
  CC      arch/x86/kernel/apic/x2apic_phys.o
  AR      drivers/pnp/built-in.a
  CC      block/genhd.o
  CC      kernel/module/main.o
  CC      mm/show_mem.o
  CC      fs/lockd/trace.o
  CC [M]  arch/x86/kvm/irq.o
  CC      kernel/module/strict_rwx.o
  CC      drivers/acpi/acpica/evgpeblk.o
  CC      fs/nfs/mount_clnt.o
  CC      fs/ext4/move_extent.o
  CC      net/core/sock_reuseport.o
  CC [M]  drivers/video/fbdev/core/fb_logo.o
  CC      drivers/pci/hotplug/acpiphp_glue.o
  CC      kernel/dma/swiotlb.o
  AR      drivers/pci/pcie/built-in.a
  CC      drivers/pci/host-bridge.o
  CC      lib/zstd/zstd_decompress_module.o
  CC [M]  sound/core/memalloc.o
  CC      lib/zstd/decompress/huf_decompress.o
  CC      arch/x86/kernel/cpu/capflags.o
  CC      crypto/blake2b_generic.o
  AR      arch/x86/kernel/cpu/built-in.a
  CC [M]  sound/core/pcm_timer.o
  AR      kernel/entry/built-in.a
  LD [M]  sound/core/snd-ctl-led.o
  CC      kernel/module/kmod.o
  CC      kernel/module/tree_lookup.o
  CC      net/llc/llc_core.o
  CC      io_uring/waitid.o
  LD [M]  sound/core/snd-hwdep.o
  CC      mm/shmem_quota.o
  AR      sound/atmel/built-in.a
  CC      kernel/time/time.o
  HOSTCC  lib/raid6/mktables
  AR      sound/hda/built-in.a
  CC [M]  sound/hda/hda_bus_type.o
  CC      drivers/acpi/acpica/evgpeinit.o
  LD [M]  sound/pci/hda/snd-hda-codec.o
  CC [M]  fs/netfs/main.o
  CC [M]  arch/x86/kvm/lapic.o
  CC [M]  sound/hda/hdac_bus.o
  CC      net/core/fib_notifier.o
  CC [M]  arch/x86/kvm/i8254.o
  AR      sound/x86/built-in.a
  AR      sound/xen/built-in.a
  CC      kernel/time/timer.o
  LD [M]  sound/pci/hda/snd-hda-codec-generic.o
  CC      kernel/futex/core.o
  UNROLL  lib/raid6/int1.c
  UNROLL  lib/raid6/int2.c
  CC      kernel/futex/syscalls.o
  UNROLL  lib/raid6/int4.c
  CC      kernel/futex/pi.o
  UNROLL  lib/raid6/int8.c
  CC      lib/raid6/recov_ssse3.o
  LD [M]  fs/fuse/fuse.o
  CC      mm/interval_tree.o
  LD [M]  sound/pci/hda/snd-hda-codec-realtek.o
  CC      drivers/acpi/acpica/evgpeutil.o
  CC      arch/x86/kernel/apic/x2apic_cluster.o
  CC      net/ethernet/eth.o
  CC      lib/zstd/decompress/zstd_ddict.o
  CC [M]  fs/overlayfs/export.o
  CC      fs/read_write.o
  CC [M]  drivers/video/fbdev/core/cfbfillrect.o
  CC      fs/file_table.o
  CC      fs/btrfs/dir-item.o
  CC      mm/list_lru.o
  CC      fs/ext4/namei.o
  CC [M]  drivers/video/fbdev/core/cfbcopyarea.o
  CC      lib/zstd/decompress/zstd_decompress.o
  CC      arch/x86/kernel/signal_64.o
  CC      drivers/acpi/apei/apei-base.o
  CC      fs/lockd/xdr.o
  CC      drivers/acpi/apei/hest.o
  AR      drivers/acpi/pmic/built-in.a
  CC      drivers/acpi/apei/erst.o
  CC      fs/ext4/page-io.o
  CC      drivers/acpi/dptf/int340x_thermal.o
  CC      fs/ext4/readpage.o
  AR      sound/core/built-in.a
  CC      block/ioprio.o
  LD [M]  sound/core/snd-pcm.o
  CC      fs/btrfs/file-item.o
  CC      drivers/acpi/acpica/evglock.o
  CC      fs/nfs/nfstrace.o
  CC [M]  sound/hda/hdac_device.o
  CC      net/llc/llc_input.o
  CC      crypto/ecb.o
  AR      drivers/pci/hotplug/built-in.a
  CC      drivers/pci/remove.o
  CC      io_uring/register.o
  LD [M]  sound/pci/hda/snd-hda-codec-analog.o
  CC      lib/raid6/recov_avx2.o
  CC      drivers/pci/pci.o
  LD [M]  sound/pci/hda/snd-hda-codec-hdmi.o
  LD [M]  sound/pci/hda/snd-hda-intel.o
  CC      kernel/dma/remap.o
  AR      sound/pci/ymfpci/built-in.a
  CC      io_uring/io-wq.o
  AR      sound/pci/vx222/built-in.a
  AR      sound/virtio/built-in.a
  AR      sound/pci/built-in.a
  CC      kernel/futex/requeue.o
  CC [M]  fs/smb/client/netmisc.o
  CC      kernel/module/debug_kmemleak.o
  CC      fs/super.o
  CC      arch/x86/kernel/apic/apic_flat_64.o
  CC      arch/x86/kernel/apic/probe_64.o
  CC      kernel/futex/waitwake.o
  CC      fs/char_dev.o
  CC      drivers/acpi/acpica/evhandler.o
  CC [M]  arch/x86/kvm/ioapic.o
  AR      drivers/clk/actions/built-in.a
  CC [M]  fs/overlayfs/params.o
  AR      drivers/clk/analogbits/built-in.a
  CC      kernel/time/hrtimer.o
  AR      drivers/clk/bcm/built-in.a
  CC [M]  fs/netfs/misc.o
  AR      drivers/clk/imgtec/built-in.a
  AR      drivers/clk/imx/built-in.a
  AR      drivers/acpi/dptf/built-in.a
  CC      fs/stat.o
  AR      drivers/clk/ingenic/built-in.a
  CC      drivers/acpi/acpica/evmisc.o
  AR      drivers/clk/mediatek/built-in.a
  AR      drivers/clk/microchip/built-in.a
  CC      io_uring/futex.o
  CC      crypto/cbc.o
  AR      drivers/clk/mstar/built-in.a
  CC      kernel/cgroup/cgroup.o
  AR      drivers/clk/mvebu/built-in.a
  CC [M]  drivers/video/fbdev/core/cfbimgblt.o
  AR      drivers/clk/ralink/built-in.a
  CC      kernel/cgroup/rstat.o
  AR      drivers/clk/renesas/built-in.a
  AR      drivers/clk/socfpga/built-in.a
  AR      drivers/clk/sprd/built-in.a
  CC      kernel/module/kallsyms.o
  AR      drivers/clk/starfive/built-in.a
  CC      mm/workingset.o
  AR      drivers/clk/sunxi-ng/built-in.a
  AR      drivers/clk/ti/built-in.a
  CC      kernel/module/procfs.o
  AR      drivers/clk/versatile/built-in.a
  CC      kernel/module/sysfs.o
  CC      drivers/clk/x86/clk-lpss-atom.o
  CC      block/badblocks.o
  CC      block/blk-rq-qos.o
  AR      kernel/dma/built-in.a
  CC      lib/raid6/mmx.o
  CC      net/core/xdp.o
  CC      net/llc/llc_output.o
  CC      drivers/pci/pci-driver.o
  CC      lib/raid6/sse1.o
  CC      block/disk-events.o
  CC      lib/raid6/sse2.o
  CC      drivers/acpi/apei/bert.o
  CC      drivers/acpi/apei/ghes.o
  AR      net/ethernet/built-in.a
  CC      mm/debug.o
  CC      fs/ext4/resize.o
  CC [M]  sound/hda/hdac_sysfs.o
  CC      drivers/acpi/acpica/evregion.o
  AR      arch/x86/kernel/apic/built-in.a
  CC      drivers/acpi/tables.o
  CC      lib/zstd/decompress/zstd_decompress_block.o
  CC      arch/x86/kernel/traps.o
  CC      fs/lockd/clnt4xdr.o
  AR      kernel/futex/built-in.a
  CC      kernel/trace/trace_clock.o
  CC      crypto/pcbc.o
  CC      kernel/trace/ftrace.o
  CC      drivers/pci/search.o
  CC [M]  fs/overlayfs/xattrs.o
  CC      fs/exec.o
  CC      drivers/clk/x86/clk-pmc-atom.o
  CC [M]  fs/netfs/objects.o
  CC      lib/zstd/zstd_common_module.o
  CC [M]  fs/netfs/output.o
  CC      drivers/acpi/acpica/evrgnini.o
  CC      drivers/acpi/acpica/evsci.o
  CC      kernel/cgroup/namespace.o
  AR      kernel/module/built-in.a
  CC [M]  fs/smb/client/smbencrypt.o
  CC      drivers/dma/dw/core.o
  CC      crypto/cts.o
  CC      kernel/cgroup/cgroup-v1.o
  CC      drivers/dma/dw/dw.o
  CC [M]  drivers/video/fbdev/core/fb_io_fops.o
  CC      drivers/dma/dw/idma32.o
  AR      net/llc/built-in.a
  CC      crypto/lrw.o
  CC      fs/btrfs/inode-item.o
  CC      lib/raid6/avx2.o
  CC [M]  drivers/video/fbdev/core/sysfillrect.o
  CC      net/802/p8022.o
  CC [M]  arch/x86/kvm/irq_comm.o
  CC      net/802/psnap.o
  CC      drivers/dma/dw/acpi.o
  CC      drivers/dma/hsu/hsu.o
  CC      drivers/pci/pci-sysfs.o
  CC [M]  sound/hda/hdac_regmap.o
  AR      drivers/soc/apple/built-in.a
  AR      drivers/soc/aspeed/built-in.a
  CC      block/blk-ia-ranges.o
  CC      kernel/time/timekeeping.o
  CC      fs/nfs/export.o
  AR      io_uring/built-in.a
  AR      drivers/soc/bcm/built-in.a
  AR      drivers/soc/fsl/built-in.a
  AR      drivers/soc/fujitsu/built-in.a
  CC      net/core/flow_offload.o
  AR      drivers/soc/hisilicon/built-in.a
  CC      mm/gup.o
  AR      drivers/soc/imx/built-in.a
  CC      net/sched/sch_generic.o
  AR      drivers/soc/ixp4xx/built-in.a
  CC      drivers/acpi/acpica/evxface.o
  AR      drivers/soc/mediatek/built-in.a
  AR      drivers/soc/loongson/built-in.a
  CC [M]  drivers/video/fbdev/core/syscopyarea.o
  AR      drivers/soc/microchip/built-in.a
  AR      drivers/soc/nuvoton/built-in.a
  AR      drivers/soc/pxa/built-in.a
  LD [M]  fs/overlayfs/overlay.o
  AR      drivers/soc/amlogic/built-in.a
  AR      drivers/clk/x86/built-in.a
  AR      drivers/soc/qcom/built-in.a
  CC      drivers/pci/rom.o
  AR      drivers/soc/renesas/built-in.a
  AR      drivers/clk/xilinx/built-in.a
  CC      drivers/clk/clk-devres.o
  AR      drivers/soc/rockchip/built-in.a
  CC      lib/raid6/avx512.o
  AR      drivers/soc/sunxi/built-in.a
  AR      drivers/soc/ti/built-in.a
  AR      drivers/acpi/apei/built-in.a
  AR      drivers/soc/xilinx/built-in.a
  AR      drivers/soc/built-in.a
  CC      net/sched/sch_mq.o
  CC      arch/x86/kernel/idt.o
  CC      lib/zstd/common/debug.o
  CC      fs/lockd/xdr4.o
  AR      drivers/pmdomain/actions/built-in.a
  CC      lib/zstd/common/entropy_common.o
  AR      drivers/pmdomain/amlogic/built-in.a
  CC      lib/zstd/common/error_private.o
  AR      drivers/pmdomain/apple/built-in.a
  CC      kernel/cgroup/freezer.o
  AR      drivers/pmdomain/arm/built-in.a
  CC      kernel/cgroup/legacy_freezer.o
  AR      drivers/pmdomain/bcm/built-in.a
  AR      drivers/pmdomain/imx/built-in.a
  AR      drivers/pmdomain/mediatek/built-in.a
  CC      fs/nfs/sysfs.o
  CC      drivers/acpi/blacklist.o
  CC      drivers/dma/dw/pci.o
  AR      drivers/pmdomain/qcom/built-in.a
  AR      drivers/pmdomain/renesas/built-in.a
  LD [M]  fs/netfs/netfs.o
  AR      drivers/pmdomain/rockchip/built-in.a
  AR      drivers/pmdomain/samsung/built-in.a
  CC      fs/lockd/svc4proc.o
  AR      drivers/pmdomain/st/built-in.a
  CC      crypto/xts.o
  CC      drivers/clk/clk-bulk.o
  AR      drivers/pmdomain/starfive/built-in.a
  CC      crypto/ctr.o
  CC      crypto/gcm.o
  CC      drivers/pci/setup-res.o
  AR      drivers/pmdomain/sunxi/built-in.a
  CC      drivers/acpi/acpica/evxfevnt.o
  CC      crypto/pcrypt.o
  AR      drivers/pmdomain/tegra/built-in.a
  AR      drivers/pmdomain/ti/built-in.a
  CC      net/802/stp.o
  AR      drivers/pmdomain/xilinx/built-in.a
  CC      drivers/pmdomain/core.o
  CC [M]  sound/hda/hdac_controller.o
  AR      drivers/dma/hsu/built-in.a
  CC      net/netlink/af_netlink.o
  AR      net/bpf/built-in.a
  AR      drivers/dma/idxd/built-in.a
  CC      sound/sound_core.o
  AR      drivers/dma/mediatek/built-in.a
  CC      block/early-lookup.o
  AR      drivers/dma/qcom/built-in.a
  CC      block/bsg.o
  CC [M]  drivers/video/fbdev/core/sysimgblt.o
  AR      drivers/dma/ti/built-in.a
  CC      drivers/clk/clkdev.o
  CC      sound/last.o
  CC      fs/ext4/super.o
  CC [M]  sound/hda/hdac_stream.o
  CC [M]  arch/x86/kvm/cpuid.o
  CC [M]  fs/smb/client/transport.o
  CC      lib/raid6/recov_avx512.o
  CC      drivers/pci/irq.o
  CC      drivers/acpi/acpica/evxfgpe.o
  CC      kernel/cgroup/pids.o
  CC      drivers/clk/clk.o
  CC [M]  drivers/video/fbdev/core/fb_sys_fops.o
  CC      arch/x86/kernel/irq.o
  CC      drivers/clk/clk-divider.o
  AR      drivers/dma/dw/built-in.a
  AR      drivers/dma/xilinx/built-in.a
  CC      kernel/time/ntp.o
  CC      drivers/pci/vpd.o
  CC [M]  drivers/dma/ioat/init.o
  CC      kernel/time/clocksource.o
  CC      kernel/time/jiffies.o
  CC      kernel/time/timer_list.o
  CC      net/sched/sch_frag.o
  CC [M]  drivers/dma/ioat/dma.o
  CC      arch/x86/kernel/irq_64.o
  CC      kernel/cgroup/cpuset.o
  CC      fs/btrfs/disk-io.o
  CC      fs/pipe.o
  CC [M]  drivers/dma/ioat/prep.o
  CC      drivers/clk/clk-fixed-factor.o
  CC      net/sched/sch_api.o
  CC      fs/nfs/fs_context.o
  CC      drivers/acpi/osi.o
  AR      net/802/built-in.a
  CC      net/ethtool/ioctl.o
  CC      drivers/clk/clk-fixed-rate.o
  CC      drivers/acpi/acpica/evxfregn.o
  CC      net/ethtool/common.o
  CC      block/bsg-lib.o
  CC [M]  drivers/dma/ioat/dca.o
  CC      drivers/acpi/acpica/exconcat.o
  CC      lib/zstd/common/fse_decompress.o
  CC      crypto/cryptd.o
  CC      fs/nfs/sysctl.o
  CC      fs/lockd/procfs.o
  CC      drivers/pci/setup-bus.o
  CC      drivers/pci/vc.o
  TABLE   lib/raid6/tables.c
  CC      drivers/pci/mmap.o
  CC      fs/nfs/nfs2super.o
  CC      lib/raid6/int1.o
  CC      kernel/time/timeconv.o
  CC [M]  sound/hda/array.o
  CC [M]  sound/hda/hdmi_chmap.o
  CC      block/blk-cgroup.o
  CC      net/netlink/genetlink.o
  LD [M]  drivers/video/fbdev/core/fb.o
  CC      drivers/dma/dmaengine.o
  CC      drivers/pci/setup-irq.o
  CC      net/core/gro.o
  CC      drivers/acpi/acpica/exconfig.o
  AR      drivers/video/fbdev/core/built-in.a
  CC      fs/btrfs/transaction.o
  AR      drivers/video/fbdev/built-in.a
  CC      net/core/netdev-genl.o
  AR      drivers/video/built-in.a
  CC      drivers/clk/clk-gate.o
  CC      fs/btrfs/inode.o
  CC      net/netlink/policy.o
  CC      net/ethtool/netlink.o
  CC      drivers/pmdomain/governor.o
  CC      kernel/time/timecounter.o
  CC      drivers/virtio/virtio.o
  CC      drivers/virtio/virtio_ring.o
  CC      lib/zstd/common/zstd_common.o
  CC      drivers/tty/vt/vt_ioctl.o
  CC      drivers/virtio/virtio_anchor.o
  CC [M]  drivers/dma/ioat/sysfs.o
  CC      drivers/pci/proc.o
  CC      kernel/time/alarmtimer.o
  CC      block/blk-cgroup-rwstat.o
  AR      fs/lockd/built-in.a
  AR      lib/zstd/built-in.a
  CC      drivers/tty/vt/vc_screen.o
  CC      net/netlink/diag.o
  CC      mm/mmap_lock.o
  CC      lib/raid6/int2.o
  CC      fs/namei.o
  CC      drivers/acpi/acpica/exconvrt.o
  CC      drivers/tty/hvc/hvc_console.o
  CC      drivers/virtio/virtio_pci_modern_dev.o
  CC [M]  sound/hda/trace.o
  CC      kernel/trace/ring_buffer.o
  CC      crypto/des_generic.o
  CC      drivers/tty/serial/8250/8250_core.o
  CC      block/blk-throttle.o
  CC      drivers/tty/serial/serial_core.o
  CC      drivers/tty/serial/8250/8250_pnp.o
  CC      lib/raid6/int4.o
  CC      arch/x86/kernel/dumpstack_64.o
  CC [M]  sound/hda/hdac_component.o
  CC      drivers/acpi/acpica/excreate.o
  CC      lib/fonts/fonts.o
  CC      drivers/virtio/virtio_pci_legacy_dev.o
  CC [M]  arch/x86/kvm/pmu.o
  AR      drivers/pmdomain/built-in.a
  CC      lib/fonts/font_8x8.o
  LD [M]  drivers/dma/ioat/ioatdma.o
  CC      drivers/char/hw_random/core.o
  CC [M]  fs/smb/client/cached_dir.o
  CC      drivers/char/hw_random/intel-rng.o
  CC      drivers/virtio/virtio_pci_modern.o
  AR      drivers/tty/ipwireless/built-in.a
  CC      drivers/char/agp/backend.o
  CC      drivers/char/tpm/tpm-chip.o
  CC      drivers/dma/virt-dma.o
  CC      crypto/aes_generic.o
  CC      fs/nfs/proc.o
  CC      drivers/pci/slot.o
  CC      drivers/dma/acpi-dma.o
  CC      drivers/char/agp/generic.o
  CC      drivers/char/mem.o
  CC      drivers/acpi/acpica/exdebug.o
  CC      lib/raid6/int8.o
  CC      drivers/tty/tty_io.o
  CC      crypto/crc32c_generic.o
  CC      net/ethtool/bitset.o
  CC      net/sched/sch_blackhole.o
  AR      drivers/tty/hvc/built-in.a
  CC      drivers/tty/vt/selection.o
  CC      drivers/tty/vt/keyboard.o
  CC      arch/x86/kernel/time.o
  CC      mm/highmem.o
  CC      net/core/netdev-genl-gen.o
  CC      drivers/acpi/acpica/exdump.o
  CC      net/core/gso.o
  CC      block/mq-deadline.o
  CC      kernel/time/posix-timers.o
  CC      lib/fonts/font_8x16.o
  CC [M]  sound/hda/hdac_i915.o
  AR      net/netlink/built-in.a
  CC      block/kyber-iosched.o
  CC [M]  fs/smb/client/cifs_unicode.o
  CC      fs/fcntl.o
  CC      drivers/tty/serial/8250/8250_port.o
  CC      net/core/net-sysfs.o
  CC      drivers/tty/n_tty.o
  CC      kernel/time/posix-cpu-timers.o
  CC      lib/argv_split.o
  CC      drivers/acpi/acpica/exfield.o
  CC      net/ethtool/strset.o
  CC      drivers/acpi/acpica/exfldio.o
  CC      arch/x86/kernel/ioport.o
  CC      crypto/crct10dif_common.o
  AR      drivers/char/hw_random/built-in.a
  CC      drivers/acpi/acpica/exmisc.o
  CC      drivers/char/random.o
  CC      drivers/char/tpm/tpm-dev-common.o
  CC      drivers/virtio/virtio_pci_common.o
  AR      drivers/dma/built-in.a
  CC      block/bfq-iosched.o
  CC      drivers/pci/pci-acpi.o
  AR      lib/fonts/built-in.a
  CC      drivers/pci/quirks.o
  CC [M]  net/netfilter/ipvs/ip_vs_conn.o
  AR      kernel/cgroup/built-in.a
  CC      drivers/clk/clk-multiplier.o
  CC [M]  net/netfilter/ipvs/ip_vs_core.o
  CC      lib/raid6/tables.o
  CC      drivers/pci/ats.o
  CC      lib/bug.o
  CC      mm/memory.o
  AR      drivers/iommu/amd/built-in.a
  CC      drivers/iommu/intel/dmar.o
  CC      drivers/clk/clk-mux.o
  CC      lib/buildid.o
  CC      net/sched/sch_fifo.o
  AR      drivers/iommu/arm/arm-smmu/built-in.a
  CC      fs/ext4/symlink.o
  AR      drivers/iommu/arm/arm-smmu-v3/built-in.a
  AR      drivers/iommu/arm/built-in.a
  CC      drivers/virtio/virtio_pci_legacy.o
  CC [M]  arch/x86/kvm/mtrr.o
  CC      drivers/tty/serial/8250/8250_dma.o
  CC      drivers/char/agp/isoch.o
  AR      net/ipv4/netfilter/built-in.a
  CC [M]  net/ipv4/netfilter/nf_defrag_ipv4.o
  CC [M]  sound/hda/intel-dsp-config.o
  CC      drivers/acpi/acpica/exmutex.o
  CC      crypto/crct10dif_generic.o
  CC      fs/nfs/nfs2xdr.o
  CC [M]  net/ipv4/netfilter/nf_reject_ipv4.o
  CC [M]  arch/x86/kvm/debugfs.o
  AR      drivers/gpu/host1x/built-in.a
  CC      net/core/page_pool.o
  AR      drivers/gpu/drm/tests/built-in.a
  CC      drivers/connector/cn_queue.o
  CC [M]  drivers/gpu/drm/tests/drm_kunit_helpers.o
  CC      drivers/char/tpm/tpm-dev.o
  CC [M]  fs/smb/client/nterr.o
  CC      arch/x86/kernel/dumpstack.o
  CC [M]  drivers/gpu/drm/tests/drm_buddy_test.o
  CC      drivers/connector/connector.o
  CC      drivers/acpi/acpica/exnames.o
  CC      kernel/trace/trace.o
  CC [M]  fs/smb/client/cifsencrypt.o
  CC      drivers/clk/clk-composite.o
  AR      lib/raid6/built-in.a
  CC      net/ethtool/linkinfo.o
  CC      fs/nfs/nfs3super.o
  CC [M]  sound/hda/intel-nhlt.o
  CC      drivers/base/power/sysfs.o
  CC      drivers/tty/vt/consolemap.o
  CC      lib/cmdline.o
  CC      kernel/time/posix-clock.o
  CC      crypto/authenc.o
  CC      drivers/virtio/virtio_pci_admin_legacy_io.o
  CC      fs/ext4/sysfs.o
  CC      drivers/tty/tty_ioctl.o
  CC      kernel/time/itimer.o
  CC      lib/cpumask.o
  CC      drivers/char/agp/intel-agp.o
  CC      kernel/time/clockevents.o
  CC      fs/ext4/xattr.o
  CC      drivers/base/firmware_loader/builtin/main.o
  CC      drivers/base/firmware_loader/main.o
  HOSTCC  drivers/tty/vt/conmakehash
  AR      net/sched/built-in.a
  CC      drivers/acpi/acpica/exoparg1.o
  AR      drivers/gpu/vga/built-in.a
  CC      drivers/acpi/acpica/exoparg2.o
  CC      arch/x86/kernel/nmi.o
  CC      drivers/base/regmap/regmap.o
  CC [M]  arch/x86/kvm/mmu/mmu.o
  CC [M]  arch/x86/kvm/mmu/page_track.o
  CC      block/bfq-wf2q.o
  CC      drivers/char/tpm/tpm-interface.o
  AR      drivers/iommu/iommufd/built-in.a
  CC      drivers/tty/serial/8250/8250_dwlib.o
  CC      drivers/clk/clk-fractional-divider.o
  CC      net/core/page_pool_user.o
  AR      drivers/base/firmware_loader/builtin/built-in.a
  CC      net/netfilter/core.o
  CC      drivers/acpi/acpica/exoparg3.o
  CC      drivers/acpi/acpica/exoparg6.o
  CC [M]  drivers/gpu/drm/tests/drm_cmdline_parser_test.o
  CC      drivers/block/loop.o
  CC      block/bfq-cgroup.o
  CC [M]  sound/hda/intel-sdw-acpi.o
  CC      lib/ctype.o
  CC      drivers/base/power/generic_ops.o
  CC      block/blk-mq-pci.o
  CC      lib/dec_and_lock.o
  CC      arch/x86/kernel/ldt.o
  AS      arch/x86/kernel/ibt_selftest.o
  CC      drivers/char/misc.o
  CC [M]  drivers/virtio/virtio_mem.o
  CC      drivers/char/virtio_console.o
  CC      drivers/tty/vt/vt.o
  CC      drivers/tty/serial/8250/8250_pcilib.o
  CC      drivers/connector/cn_proc.o
  CC      net/ethtool/linkmodes.o
  CC [M]  fs/smb/client/readdir.o
  CC      drivers/iommu/intel/iommu.o
  CC [M]  arch/x86/kvm/mmu/spte.o
  CC [M]  net/ipv4/netfilter/ip_tables.o
  CC      lib/decompress.o
  CC      fs/btrfs/file.o
  CC      drivers/char/agp/intel-gtt.o
  CC      drivers/acpi/acpica/exprep.o
  CC [M]  net/netfilter/ipvs/ip_vs_ctl.o
  CC      fs/nfs/nfs3client.o
  CC      kernel/time/tick-common.o
  CC      lib/decompress_bunzip2.o
  CC      crypto/authencesn.o
  CC      drivers/acpi/acpica/exregion.o
  CC      kernel/time/tick-broadcast.o
  CC      drivers/clk/clk-gpio.o
  CC      drivers/pci/iov.o
  CC      kernel/trace/trace_output.o
  CC      drivers/pci/pci-label.o
  CC [M]  arch/x86/kvm/mmu/tdp_iter.o
  AR      drivers/base/firmware_loader/built-in.a
  CC      drivers/tty/tty_ldisc.o
  CC      drivers/char/tpm/tpm1-cmd.o
  LD [M]  sound/hda/snd-hda-core.o
  CC      drivers/base/power/common.o
  CC      arch/x86/kernel/setup.o
  LD [M]  sound/hda/snd-intel-dspcfg.o
  CC      drivers/base/power/qos.o
  LD [M]  sound/hda/snd-intel-sdw-acpi.o
  AR      sound/built-in.a
  CC      drivers/tty/serial/8250/8250_early.o
  CC      drivers/acpi/acpica/exresnte.o
  CC [M]  fs/smb/client/ioctl.o
  CC      drivers/base/regmap/regcache.o
  CC      arch/x86/kernel/x86_init.o
  AR      drivers/base/test/built-in.a
  CC      drivers/base/component.o
  CC [M]  fs/smb/client/sess.o
  CC      net/core/net-procfs.o
  CC      net/ipv4/route.o
  CC      lib/decompress_inflate.o
  CC      block/blk-mq-virtio.o
  AR      drivers/clk/built-in.a
  CC      drivers/char/tpm/tpm2-cmd.o
  AR      drivers/misc/eeprom/built-in.a
  AR      drivers/misc/cb710/built-in.a
  AR      drivers/misc/ti-st/built-in.a
  CC      drivers/acpi/acpica/exresolv.o
  AR      drivers/misc/lis3lv02d/built-in.a
  CC [M]  fs/smb/client/export.o
  CC [M]  drivers/misc/mei/hdcp/mei_hdcp.o
  CC      lib/decompress_unlz4.o
  CC      drivers/tty/tty_buffer.o
  CC      net/ethtool/rss.o
  AR      drivers/char/agp/built-in.a
  CC      kernel/time/tick-broadcast-hrtimer.o
  CC      net/ethtool/linkstate.o
  CC      drivers/iommu/intel/pasid.o
  CC      crypto/lzo.o
  CC      fs/ext4/xattr_hurd.o
  CC      fs/nfs/nfs3proc.o
  AR      drivers/connector/built-in.a
  CC      crypto/lzo-rle.o
  CC      drivers/tty/serial/8250/8250_dw.o
  CC      crypto/lz4.o
  CC      drivers/iommu/intel/nested.o
  CC      crypto/lz4hc.o
  CC      drivers/mfd/mfd-core.o
  CC      drivers/pci/pci-stub.o
  CC      drivers/mfd/intel-lpss.o
  CC [M]  drivers/gpu/drm/tests/drm_connector_test.o
  CC      drivers/mfd/intel-lpss-pci.o
  CC [M]  drivers/block/nbd.o
  CC      net/netfilter/nf_log.o
  CC      drivers/acpi/acpica/exresop.o
  CC [M]  drivers/misc/mei/pxp/mei_pxp.o
  AR      drivers/virtio/built-in.a
  CC      drivers/base/power/runtime.o
  CC [M]  net/ipv4/netfilter/iptable_filter.o
  CC      net/netfilter/nf_queue.o
  CC      drivers/misc/mei/init.o
  CC      lib/decompress_unlzma.o
  CC      arch/x86/kernel/i8259.o
  CC      drivers/misc/mei/hbm.o
  CC      drivers/base/power/wakeirq.o
  CC      block/blk-mq-debugfs.o
  CC      kernel/time/tick-oneshot.o
  CC      net/core/netpoll.o
  CC      crypto/xxhash_generic.o
  CC [M]  fs/smb/client/unc.o
  CC      crypto/rng.o
  CC      crypto/drbg.o
  CC      crypto/jitterentropy.o
  CC      drivers/acpi/acpica/exserial.o
  CC      net/core/fib_rules.o
  CC      drivers/tty/tty_port.o
  CC      crypto/jitterentropy-kcapi.o
  CC      drivers/char/tpm/tpmrm-dev.o
  CC      drivers/misc/mei/interrupt.o
  CC      drivers/base/regmap/regcache-rbtree.o
  CC      drivers/pci/vgaarb.o
  CC [M]  drivers/gpu/drm/tests/drm_damage_helper_test.o
  CC      drivers/base/power/main.o
  CC      drivers/base/power/wakeup.o
  CC [M]  drivers/gpu/drm/tests/drm_dp_mst_helper_test.o
  CC      fs/ext4/xattr_trusted.o
  CC      fs/btrfs/defrag.o
  CC      net/ethtool/debug.o
  CC      fs/btrfs/extent_map.o
  CC      drivers/base/power/wakeup_stats.o
  CC      drivers/tty/serial/8250/8250_exar.o
  AR      drivers/gpu/drm/arm/built-in.a
  AR      drivers/gpu/drm/display/built-in.a
  CC      drivers/mfd/intel-lpss-acpi.o
  CC      drivers/mfd/intel_soc_pmic_crc.o
  CC [M]  drivers/gpu/drm/display/drm_display_helper_mod.o
  COPY    drivers/tty/vt/defkeymap.c
  CONMK   drivers/tty/vt/consolemap_deftbl.c
  CC      drivers/tty/vt/defkeymap.o
  CC      drivers/acpi/acpica/exstore.o
  CC      drivers/tty/serial/8250/8250_lpss.o
  CC      kernel/time/tick-sched.o
  CC      drivers/tty/serial/8250/8250_mid.o
  CC      arch/x86/kernel/irqinit.o
  CC      lib/decompress_unlzo.o
  CC      drivers/char/tpm/tpm2-space.o
  CC      drivers/tty/vt/consolemap_deftbl.o
  AR      drivers/tty/vt/built-in.a
  CC      drivers/tty/tty_mutex.o
  CC      fs/nfs/nfs3xdr.o
  CC      kernel/trace/trace_seq.o
  CC      kernel/trace/trace_stat.o
  CC [M]  net/ipv4/netfilter/iptable_mangle.o
  AR      drivers/nfc/built-in.a
  AR      drivers/misc/cardreader/built-in.a
  CC      drivers/char/tpm/tpm-sysfs.o
  CC      drivers/base/regmap/regcache-flat.o
  CC      block/blk-pm.o
  CC      drivers/misc/mei/client.o
  CC      crypto/ghash-generic.o
  CC      kernel/bpf/core.o
  CC      drivers/acpi/acpica/exstoren.o
  CC [M]  drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
  CC      drivers/base/power/clock_ops.o
  CC      mm/mincore.o
  CC [M]  net/netfilter/ipvs/ip_vs_sched.o
  CC [M]  net/netfilter/ipvs/ip_vs_xmit.o
  CC      fs/btrfs/sysfs.o
  CC      net/netfilter/nf_sockopt.o
  CC      mm/mlock.o
  CC      drivers/acpi/osl.o
  CC      drivers/misc/mei/main.o
  CC      drivers/iommu/intel/trace.o
  CC      fs/ext4/xattr_user.o
  CC      net/netfilter/utils.o
  CC [M]  drivers/gpu/drm/tests/drm_exec_test.o
  CC      lib/decompress_unxz.o
  CC [M]  fs/smb/client/winucase.o
  CC [M]  net/netfilter/nfnetlink.o
  CC [M]  drivers/mfd/lpc_sch.o
  CC [M]  drivers/mfd/lpc_ich.o
  CC [M]  fs/smb/client/smb2ops.o
  CC      fs/ext4/fast_commit.o
  CC      drivers/tty/serial/8250/8250_pci.o
  CC      drivers/acpi/acpica/exstorob.o
  CC      drivers/tty/serial/8250/8250_pericom.o
  CC      net/ethtool/wol.o
  AR      drivers/pci/built-in.a
  CC [M]  net/ipv4/netfilter/iptable_nat.o
  CC      kernel/trace/trace_printk.o
  CC      drivers/iommu/intel/cap_audit.o
  CC      arch/x86/kernel/jump_label.o
  CC [M]  fs/smb/client/smb2maperror.o
  CC      drivers/base/regmap/regcache-maple.o
  CC      crypto/af_alg.o
  CC      net/ethtool/features.o
  CC      kernel/time/vsyscall.o
  AR      drivers/block/built-in.a
  CC      block/holder.o
  CC      kernel/trace/pid_list.o
  CC      drivers/char/tpm/eventlog/common.o
  AR      drivers/dax/hmem/built-in.a
  CC      drivers/dax/super.o
  CC      drivers/acpi/acpica/exsystem.o
  CC      net/core/net-traces.o
  CC      drivers/dax/bus.o
  CC      lib/decompress_unzstd.o
  CC      fs/ext4/orphan.o
  CC [M]  drivers/gpu/drm/display/drm_dp_helper.o
  CC [M]  fs/smb/client/smb2transport.o
  CC [M]  drivers/gpu/drm/display/drm_dp_mst_topology.o
  CC [M]  drivers/gpu/drm/tests/drm_format_helper_test.o
  CC      net/ethtool/privflags.o
  CC      net/ethtool/rings.o
  CC [M]  net/netfilter/nf_conntrack_core.o
  AR      drivers/base/power/built-in.a
  CC      drivers/dma-buf/dma-buf.o
  CC      drivers/base/core.o
  CC      drivers/misc/mei/dma-ring.o
  CC      drivers/dma-buf/dma-fence.o
  CC      kernel/time/timekeeping_debug.o
  CC      drivers/base/bus.o
  CC      kernel/trace/trace_sched_switch.o
  CC      drivers/dma-buf/dma-fence-array.o
  AR      drivers/mfd/built-in.a
  CC      arch/x86/kernel/irq_work.o
  CC [M]  net/ipv4/netfilter/ipt_REJECT.o
  CC      drivers/acpi/acpica/extrace.o
  CC      drivers/tty/tty_ldsem.o
  CC      net/ipv4/inetpeer.o
  CC      drivers/base/regmap/regmap-debugfs.o
  CC      drivers/base/regmap/regmap-i2c.o
  CC      net/ethtool/channels.o
  AR      block/built-in.a
  CC      lib/dump_stack.o
  CC      drivers/char/tpm/eventlog/tpm1.o
  CC [M]  net/netfilter/ipvs/ip_vs_app.o
  CC      mm/mmap.o
  CC      fs/btrfs/accessors.o
  CC      net/ethtool/coalesce.o
  CC [M]  drivers/gpu/drm/display/drm_dsc_helper.o
  CC      fs/btrfs/xattr.o
  CC      drivers/acpi/acpica/exutils.o
  CC      drivers/iommu/intel/irq_remapping.o
  CC      drivers/iommu/intel/perfmon.o
  CC      kernel/trace/trace_functions.o
  AR      fs/nfs/built-in.a
  CC      drivers/acpi/utils.o
  CC      drivers/acpi/reboot.o
  AR      drivers/tty/serial/8250/built-in.a
  CC      drivers/dma-buf/dma-fence-chain.o
  CC      drivers/tty/serial/serial_base_bus.o
  CC      drivers/misc/mei/bus.o
  CC      kernel/time/namespace.o
  CC [M]  net/netfilter/ipvs/ip_vs_sync.o
  CC      fs/btrfs/ordered-data.o
  CC      drivers/acpi/acpica/hwacpi.o
  CC [M]  fs/smb/client/smb2misc.o
  CC      drivers/tty/tty_baudrate.o
  CC      drivers/char/tpm/eventlog/tpm2.o
  CC      kernel/trace/trace_preemptirq.o
  AR      drivers/dax/built-in.a
  CC      drivers/base/dd.o
  CC      drivers/char/hpet.o
  CC      drivers/char/nvram.o
  CC      lib/earlycpio.o
  AR      drivers/cxl/core/built-in.a
  AR      drivers/cxl/built-in.a
  CC      drivers/iommu/iommu.o
  CC      net/ethtool/pause.o
  CC      mm/mmu_gather.o
  CC      arch/x86/kernel/probe_roms.o
  CC [M]  net/netfilter/ipvs/ip_vs_est.o
  CC      lib/extable.o
  CC [M]  drivers/gpu/drm/tests/drm_format_test.o
  CC [M]  drivers/gpu/drm/tests/drm_framebuffer_test.o
  CC      crypto/algif_hash.o
  CC      drivers/base/regmap/regmap-irq.o
  CC      drivers/acpi/acpica/hwesleep.o
  CC      net/ipv4/protocol.o
  AR      kernel/bpf/built-in.a
  CC      drivers/dma-buf/dma-fence-unwrap.o
  CC      net/ipv4/ip_input.o
  CC      kernel/trace/trace_nop.o
  AR      fs/ext4/built-in.a
  CC      drivers/char/tpm/tpm_ppi.o
  CC      drivers/tty/serial/serial_ctrl.o
  CC      drivers/iommu/iommu-traces.o
  CC      drivers/tty/tty_jobctrl.o
  CC [M]  arch/x86/kvm/mmu/tdp_mmu.o
  CC      net/ethtool/eee.o
  AR      kernel/time/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_proto.o
  CC      drivers/tty/serial/serial_port.o
  CC [M]  net/netfilter/ipvs/ip_vs_pe.o
  CC [M]  net/netfilter/nf_conntrack_standalone.o
  CC      mm/mprotect.o
  CC [M]  drivers/gpu/drm/display/drm_hdcp_helper.o
  CC      drivers/acpi/nvs.o
  CC [M]  drivers/gpu/drm/display/drm_hdmi_helper.o
  CC      drivers/acpi/acpica/hwgpe.o
  CC      lib/flex_proportions.o
  CC      lib/idr.o
  CC      drivers/char/tpm/eventlog/acpi.o
  CC      drivers/tty/serial/earlycon.o
  CC      drivers/misc/mei/bus-fixup.o
  CC      drivers/acpi/wakeup.o
  CC      net/ethtool/tsinfo.o
  CC      drivers/acpi/acpica/hwregs.o
  CC      fs/btrfs/extent_io.o
  CC      arch/x86/kernel/sys_ia32.o
  AR      drivers/iommu/intel/built-in.a
  CC      drivers/dma-buf/dma-resv.o
  CC      drivers/acpi/sleep.o
  CC      crypto/algif_skcipher.o
  CC      net/core/selftests.o
  AR      drivers/gpu/drm/renesas/rcar-du/built-in.a
  CC      mm/mremap.o
  AR      drivers/gpu/drm/renesas/built-in.a
  AR      drivers/gpu/drm/omapdrm/built-in.a
  CC      kernel/trace/trace_functions_graph.o
  AR      drivers/gpu/drm/tilcdc/built-in.a
  CC      kernel/trace/fgraph.o
  CC      drivers/acpi/acpica/hwsleep.o
  CC [M]  net/netfilter/nf_conntrack_expect.o
  CC [M]  drivers/gpu/drm/tests/drm_gem_shmem_test.o
  AR      drivers/gpu/drm/imx/built-in.a
  CC      drivers/base/syscore.o
  CC      drivers/char/tpm/eventlog/efi.o
  AR      drivers/base/regmap/built-in.a
  CC      kernel/trace/blktrace.o
  CC      net/core/ptp_classifier.o
  CC      drivers/iommu/iommu-sysfs.o
  CC [M]  drivers/gpu/drm/display/drm_scdc_helper.o
  CC [M]  drivers/gpu/drm/display/drm_dp_aux_dev.o
  CC      net/ethtool/cabletest.o
  CC [M]  net/netfilter/nf_conntrack_helper.o
  CC      drivers/iommu/dma-iommu.o
  CC [M]  fs/smb/client/smb2pdu.o
  CC      fs/ioctl.o
  CC      lib/irq_regs.o
  CC [M]  fs/smb/client/smb2inode.o
  CC      drivers/acpi/device_sysfs.o
  CC      crypto/xor.o
  CC      crypto/hash_info.o
  CC      crypto/simd.o
  CC      drivers/acpi/acpica/hwvalid.o
  CC      lib/is_single_threaded.o
  CC [M]  fs/smb/client/smb2file.o
  CC      drivers/tty/serial/serial_mctrl_gpio.o
  CC [M]  net/netfilter/ipvs/ip_vs_proto_tcp.o
  CC [M]  crypto/md4.o
  CC      drivers/misc/mei/debugfs.o
  CC      drivers/tty/n_null.o
  AR      drivers/macintosh/built-in.a
  CC      drivers/scsi/scsi.o
  CC      drivers/dma-buf/sync_file.o
  AR      drivers/nvme/common/built-in.a
  CC      drivers/nvme/host/core.o
  CC      arch/x86/kernel/signal_32.o
  CC      drivers/misc/mei/mei-trace.o
  CC      drivers/char/tpm/tpm_crb.o
  CC      net/core/netprio_cgroup.o
  CC      kernel/events/core.o
  CC      net/ipv4/ip_fragment.o
  CC      drivers/acpi/acpica/hwxface.o
  CC      drivers/dma-buf/sw_sync.o
  AR      drivers/gpu/drm/i2c/built-in.a
  AR      drivers/gpu/drm/panel/built-in.a
  CC [M]  net/netfilter/nf_conntrack_proto.o
  CC      lib/klist.o
  AR      drivers/gpu/drm/bridge/analogix/built-in.a
  AR      drivers/gpu/drm/bridge/cadence/built-in.a
  CC [M]  drivers/gpu/drm/tests/drm_managed_test.o
  CC [M]  net/netfilter/nf_conntrack_proto_generic.o
  AR      drivers/gpu/drm/bridge/imx/built-in.a
  CC      drivers/acpi/device_pm.o
  AR      drivers/gpu/drm/bridge/synopsys/built-in.a
  AR      drivers/gpu/drm/bridge/built-in.a
  CC      net/ethtool/tunnels.o
  AR      drivers/gpu/drm/hisilicon/built-in.a
  CC      kernel/trace/trace_events.o
  CC      drivers/acpi/proc.o
  CC      drivers/base/driver.o
  CC      drivers/ata/libata-core.o
  CC      drivers/spi/spi.o
  CC [M]  net/netfilter/ipvs/ip_vs_proto_udp.o
  AR      drivers/nvme/target/built-in.a
  CC      drivers/dma-buf/sync_debug.o
  AR      drivers/gpu/drm/mxsfb/built-in.a
  CC [M]  crypto/ccm.o
  AR      drivers/gpu/drm/tiny/built-in.a
  CC [M]  crypto/arc4.o
  AR      drivers/gpu/drm/xlnx/built-in.a
  CC      drivers/misc/mei/pci-me.o
  AR      drivers/gpu/drm/gud/built-in.a
  AR      drivers/gpu/drm/solomon/built-in.a
  CC      drivers/misc/mei/hw-me.o
  CC [M]  fs/smb/client/cifsacl.o
  CC      drivers/tty/pty.o
  LD [M]  drivers/gpu/drm/display/drm_display_helper.o
  CC [M]  crypto/ecc.o
  AR      drivers/tty/serial/built-in.a
  CC      net/core/dst_cache.o
  CC [M]  crypto/essiv.o
  CC      drivers/acpi/acpica/hwxfsleep.o
  CC [M]  drivers/gpu/drm/ttm/ttm_tt.o
  CC [M]  drivers/misc/mei/gsc-me.o
  CC      lib/kobject.o
  CC      mm/msync.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo.o
  CC [M]  drivers/gpu/drm/scheduler/sched_main.o
  CC      mm/page_vma_mapped.o
  CC [M]  arch/x86/kvm/hyperv.o
  CC      arch/x86/kernel/sys_x86_64.o
  CC [M]  net/netfilter/nf_conntrack_proto_tcp.o
  CC [M]  drivers/gpu/drm/tests/drm_mm_test.o
  CC [M]  arch/x86/kvm/smm.o
  CC      drivers/base/class.o
  CC [M]  net/netfilter/nf_conntrack_proto_udp.o
  CC [M]  fs/smb/client/fs_context.o
  CC      drivers/acpi/acpica/hwpci.o
  CC      drivers/iommu/iova.o
  AR      drivers/char/tpm/built-in.a
  AR      drivers/char/built-in.a
  CC      drivers/base/platform.o
  CC [M]  drivers/gpu/drm/tests/drm_modes_test.o
  CC      arch/x86/kernel/espfix_64.o
  CC [M]  drivers/dma-buf/selftest.o
  CC      drivers/acpi/bus.o
  CC      drivers/tty/sysrq.o
  CC [M]  fs/smb/client/dns_resolve.o
  CC      lib/kobject_uevent.o
  CC      lib/logic_pio.o
  CC      arch/x86/kernel/ksysfs.o
  CC      drivers/scsi/hosts.o
  CC [M]  net/netfilter/nf_conntrack_proto_icmp.o
  CC [M]  drivers/dma-buf/st-dma-fence.o
  CC      drivers/acpi/acpica/nsaccess.o
  CC [M]  drivers/gpu/drm/scheduler/sched_fence.o
  CC      net/ipv4/ip_forward.o
  CC [M]  drivers/gpu/drm/amd/amdxcp/amdgpu_xcp_drv.o
  CC      drivers/acpi/acpica/nsalloc.o
  CC      net/ipv4/ip_options.o
  CC      net/ethtool/fec.o
  CC      net/ipv4/ip_output.o
  CC      kernel/trace/trace_export.o
  CC      lib/maple_tree.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.o
  CC      net/core/gro_cells.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo_util.o
  CC      kernel/trace/trace_event_perf.o
  CC [M]  arch/x86/kvm/vmx/vmx.o
  LD [M]  drivers/misc/mei/mei-gsc.o
  CC [M]  net/netfilter/ipvs/ip_vs_nfct.o
  CC      arch/x86/kernel/bootflag.o
  CC [M]  net/netfilter/ipvs/ip_vs_rr.o
  CC [M]  drivers/gpu/drm/tests/drm_plane_helper_test.o
  CC      mm/pagewalk.o
  CC      arch/x86/kernel/e820.o
  CC      drivers/acpi/acpica/nsarguments.o
  CC      arch/x86/kernel/pci-dma.o
  CC      drivers/iommu/irq_remapping.o
  CC      drivers/base/cpu.o
  CC      drivers/acpi/acpica/nsconvert.o
  CC      net/ethtool/eeprom.o
  AR      drivers/misc/mei/built-in.a
  CC [M]  drivers/gpu/drm/scheduler/sched_entity.o
  AR      drivers/misc/built-in.a
  CC [M]  drivers/dma-buf/st-dma-fence-chain.o
  CC      drivers/ata/libata-scsi.o
  CC [M]  crypto/ecdh.o
  LD [M]  drivers/gpu/drm/amd/amdxcp/amdxcp.o
  CC      net/ethtool/stats.o
  CC      drivers/base/firmware.o
  CC      drivers/ata/libata-eh.o
  CC [M]  net/netfilter/nf_conntrack_extend.o
  CC      drivers/scsi/scsi_ioctl.o
  CC      drivers/ata/libata-transport.o
  AR      drivers/tty/built-in.a
  CC      drivers/acpi/acpica/nsdump.o
  CC [M]  crypto/ecdh_helper.o
  CC [M]  drivers/net/phy/aquantia/aquantia_main.o
  CC      drivers/net/phy/mdio-boardinfo.o
  CC [M]  drivers/net/phy/aquantia/aquantia_firmware.o
  CC      arch/x86/kernel/quirks.o
  AR      drivers/firewire/built-in.a
  ASN.1   fs/smb/client/cifs_spnego_negtokeninit.asn1.[ch]
  CC [M]  fs/smb/client/namespace.o
  AR      net/core/built-in.a
  CC      net/xfrm/xfrm_policy.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo_vm.o
  CC      kernel/trace/trace_events_filter.o
  CC      drivers/acpi/glue.o
  CC      drivers/acpi/scan.o
  CC [M]  net/netfilter/nf_conntrack_acct.o
  CC [M]  drivers/gpu/drm/tests/drm_probe_helper_test.o
  CC      fs/btrfs/volumes.o
  CC [M]  net/netfilter/nf_conntrack_seqadj.o
  CC [M]  net/netfilter/nf_conntrack_proto_icmpv6.o
  CC      drivers/scsi/scsicam.o
  CC [M]  drivers/net/phy/aquantia/aquantia_hwmon.o
  CC      drivers/acpi/acpica/nseval.o
  AR      drivers/iommu/built-in.a
  CC      arch/x86/kernel/topology.o
  CC      kernel/fork.o
  LD [M]  crypto/ecdh_generic.o
  CC      drivers/base/init.o
  AR      crypto/built-in.a
  CC [M]  fs/smb/client/smb1ops.o
  CC      net/xfrm/xfrm_state.o
  CC      net/ipv4/ip_sockglue.o
  CC      net/ethtool/phc_vclocks.o
  CC      mm/pgtable-generic.o
  LD [M]  drivers/gpu/drm/scheduler/gpu-sched.o
  CC      net/xfrm/xfrm_hash.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_device.o
  CC      drivers/acpi/acpica/nsinit.o
  LD [M]  net/netfilter/ipvs/ip_vs.o
  CC      drivers/nvme/host/ioctl.o
  CC      arch/x86/kernel/kdebugfs.o
  CC      net/ethtool/mm.o
  CC [M]  arch/x86/kvm/kvm-asm-offsets.s
  CC [M]  net/netfilter/nf_conntrack_proto_dccp.o
  CC [M]  drivers/dma-buf/st-dma-fence-unwrap.o
  CC [M]  drivers/dma-buf/st-dma-resv.o
  AR      drivers/spi/built-in.a
  CC      fs/btrfs/async-thread.o
  CC [M]  drivers/gpu/drm/tests/drm_rect_test.o
  CC      arch/x86/kernel/alternative.o
  CC      net/unix/af_unix.o
  CC      arch/x86/kernel/i8253.o
  AR      net/ipv6/netfilter/built-in.a
  CC      net/ipv6/af_inet6.o
  CC [M]  net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
  CC      drivers/scsi/scsi_error.o
  CC      net/ipv6/anycast.o
  CC [M]  drivers/gpu/drm/ttm/ttm_module.o
  CC      drivers/ata/libata-trace.o
  CC      net/xfrm/xfrm_input.o
  CC [M]  net/netfilter/nf_conntrack_proto_sctp.o
  CC      drivers/acpi/acpica/nsload.o
  LD [M]  drivers/net/phy/aquantia/aquantia.o
  CC [M]  net/ipv6/netfilter/nf_conntrack_reasm.o
  CC      drivers/net/phy/stubs.o
  CC      drivers/base/map.o
  CC      arch/x86/kernel/hw_breakpoint.o
  CC      drivers/scsi/scsi_lib.o
  CC [M]  net/netfilter/nf_conntrack_netlink.o
  CC      drivers/ata/libata-sata.o
  AR      drivers/dma-buf/built-in.a
  LD [M]  drivers/dma-buf/dmabuf_selftests.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_doorbell_mgr.o
  AR      drivers/cdrom/built-in.a
  AR      drivers/auxdisplay/built-in.a
  CC      drivers/usb/common/common.o
  CC      drivers/usb/core/usb.o
  CC      drivers/acpi/acpica/nsnames.o
  CC      mm/rmap.o
  AR      drivers/usb/phy/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.o
  CC      mm/vmalloc.o
  CC      drivers/base/devres.o
  CC [M]  drivers/gpu/drm/ttm/ttm_execbuf_util.o
  CC      drivers/usb/host/pci-quirks.o
  CC      net/ipv4/inet_hashtables.o
  CC      net/xfrm/xfrm_output.o
  CC [M]  drivers/gpu/drm/ttm/ttm_range_manager.o
  CC      kernel/trace/trace_events_trigger.o
  CC      drivers/usb/host/ehci-hcd.o
  CC      drivers/acpi/acpica/nsobject.o
  CC      net/ethtool/module.o
  CC      drivers/nvme/host/sysfs.o
  CC      net/ipv4/inet_timewait_sock.o
  CC      arch/x86/kernel/tsc.o
  CC [M]  net/netfilter/nf_nat_core.o
  CC      drivers/net/phy/mdio_devres.o
  CC      drivers/acpi/acpica/nsparse.o
  CC      net/unix/garbage.o
  CC [M]  drivers/gpu/drm/ttm/ttm_resource.o
  CC [M]  fs/smb/client/cifssmb.o
  CC      arch/x86/kernel/tsc_msr.o
  CC      drivers/acpi/acpica/nspredef.o
  CC      drivers/usb/common/debug.o
  CC      drivers/acpi/acpica/nsprepkg.o
  CC [M]  drivers/gpu/drm/ttm/ttm_pool.o
  AR      drivers/usb/common/built-in.a
  CC      drivers/usb/host/ehci-pci.o
  CC      net/ipv4/inet_connection_sock.o
  CC      drivers/acpi/acpica/nsrepair.o
  CC      drivers/usb/storage/scsiglue.o
  CC      drivers/acpi/acpica/nsrepair2.o
  CC      drivers/usb/storage/protocol.o
  CC      fs/btrfs/ioctl.o
  CC      drivers/usb/core/hub.o
  CC      fs/btrfs/locking.o
  CC      drivers/ata/libata-sff.o
  CC      drivers/ata/libata-pmp.o
  CC      drivers/base/attribute_container.o
  CC      net/ipv6/ip6_output.o
  CC [M]  drivers/gpu/drm/i915/i915_config.o
  CC [M]  arch/x86/kvm/vmx/pmu_intel.o
  CC      drivers/base/transport_class.o
  LD [M]  net/ipv6/netfilter/nf_defrag_ipv6.o
  CC      drivers/input/serio/serio.o
  CC      drivers/usb/host/ohci-hcd.o
  CC      drivers/usb/host/ohci-pci.o
  CC      drivers/net/phy/phy.o
  CC      drivers/usb/storage/transport.o
  CC      net/ethtool/pse-pd.o
  CC      drivers/base/topology.o
  CC      drivers/acpi/acpica/nssearch.o
  CC [M]  drivers/gpu/drm/i915/i915_driver.o
  CC      drivers/nvme/host/pr.o
  CC      kernel/trace/trace_eprobe.o
  CC      net/unix/sysctl_net_unix.o
  CC      fs/btrfs/orphan.o
  CC      arch/x86/kernel/io_delay.o
  CC      drivers/scsi/scsi_lib_dma.o
  CC      drivers/usb/host/uhci-hcd.o
  CC      drivers/usb/host/xhci.o
  CC      net/unix/diag.o
  CC      drivers/base/container.o
  CC [M]  drivers/gpu/drm/i915/i915_drm_client.o
  CC [M]  drivers/gpu/drm/i915/i915_getparam.o
  CC      net/ipv6/ip6_input.o
  CC      drivers/acpi/acpica/nsutils.o
  CC [M]  drivers/gpu/drm/ttm/ttm_device.o
  CC      drivers/usb/storage/usb.o
  CC      drivers/scsi/scsi_scan.o
  CC      net/unix/scm.o
  CC      net/xfrm/xfrm_sysctl.o
  CC      arch/x86/kernel/rtc.o
  CC      arch/x86/kernel/resource.o
  GEN     drivers/scsi/scsi_devinfo_tbl.c
  CC      drivers/usb/serial/usb-serial.o
  CC      drivers/input/serio/i8042.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.o
  CC [M]  net/netfilter/nf_nat_proto.o
  CC      drivers/usb/serial/generic.o
  CC      drivers/net/phy/phy-c45.o
  AR      drivers/usb/misc/built-in.a
  CC      drivers/acpi/acpica/nswalk.o
  CC      drivers/base/property.o
  AS      arch/x86/kernel/irqflags.o
  CC      fs/btrfs/export.o
  CC      drivers/ata/libata-acpi.o
  CC      drivers/usb/serial/bus.o
  CC      drivers/usb/serial/console.o
  CC      net/ethtool/plca.o
  CC [M]  net/netfilter/nf_nat_helper.o
  CC      lib/memcat_p.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_crtc.o
  CC      kernel/exec_domain.o
  CC      drivers/nvme/host/trace.o
  CC      net/ipv4/tcp.o
  CC [M]  arch/x86/kvm/vmx/vmcs12.o
  CC      mm/page_alloc.o
  CC      kernel/events/ring_buffer.o
  CC [M]  drivers/gpu/drm/ttm/ttm_sys_manager.o
  CC      drivers/acpi/acpica/nsxfeval.o
  CC      arch/x86/kernel/static_call.o
  CC      lib/nmi_backtrace.o
  CC [M]  drivers/gpu/drm/ttm/ttm_agp_backend.o
  CC [M]  drivers/gpu/drm/i915/i915_ioctl.o
  CC      drivers/nvme/host/fault_inject.o
  CC      kernel/trace/trace_kprobe.o
  AR      net/unix/built-in.a
  CC      drivers/usb/storage/initializers.o
  CC      drivers/input/keyboard/atkbd.o
  AR      drivers/input/mouse/built-in.a
  CC      drivers/usb/storage/sierra_ms.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.o
  CC      fs/btrfs/tree-log.o
  CC      drivers/ata/libata-pata-timings.o
  CC      drivers/usb/serial/ftdi_sio.o
  CC      net/xfrm/xfrm_replay.o
  CC      drivers/rtc/lib.o
  CC      kernel/trace/error_report-traces.o
  CC      drivers/nvme/host/pci.o
  CC      drivers/acpi/acpica/nsxfname.o
  CC      drivers/scsi/scsi_devinfo.o
  CC      drivers/usb/gadget/udc/core.o
  CC [M]  drivers/usb/class/usbtmc.o
  CC [M]  net/netfilter/nf_nat_redirect.o
  CC      drivers/input/input.o
  CC [M]  arch/x86/kvm/vmx/nested.o
  CC      arch/x86/kernel/process.o
  CC      drivers/usb/gadget/udc/trace.o
  CC      drivers/usb/host/xhci-mem.o
  CC      drivers/input/serio/libps2.o
  LD [M]  drivers/gpu/drm/ttm/ttm.o
  CC      drivers/usb/host/xhci-ext-caps.o
  AR      net/ethtool/built-in.a
  CC      lib/objpool.o
  CC      drivers/usb/host/xhci-ring.o
  CC      drivers/ata/ahci.o
  CC      drivers/base/cacheinfo.o
  CC      drivers/ata/libahci.o
  CC      drivers/net/phy/phy-core.o
  CC      drivers/usb/host/xhci-hub.o
  CC      drivers/acpi/mipi-disco-img.o
  AR      drivers/net/pse-pd/built-in.a
  CC      drivers/acpi/resource.o
  CC      drivers/usb/core/hcd.o
  CC      drivers/acpi/acpica/nsxfobj.o
  CC      drivers/usb/host/xhci-dbg.o
  CC      drivers/rtc/class.o
  CC      kernel/panic.o
  CC      drivers/usb/storage/option_ms.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atom.o
  CC      kernel/events/callchain.o
  CC [M]  net/netfilter/nf_nat_masquerade.o
  CC      drivers/rtc/interface.o
  CC      drivers/net/mdio/acpi_mdio.o
  AR      drivers/net/pcs/built-in.a
  CC      drivers/rtc/nvmem.o
  CC      fs/btrfs/free-space-cache.o
  CC [M]  drivers/gpu/drm/i915/i915_irq.o
  CC      drivers/usb/core/urb.o
  CC      drivers/ata/ata_piix.o
  CC      lib/plist.o
  CC      net/ipv6/addrconf.o
  CC [M]  fs/smb/client/cifs_spnego_negtokeninit.asn1.o
  CC      drivers/acpi/acpica/psargs.o
  AR      drivers/input/keyboard/built-in.a
  CC [M]  fs/smb/client/asn1.o
  CC      kernel/cpu.o
  CC      drivers/scsi/scsi_sysctl.o
  CC      lib/radix-tree.o
  CC      drivers/usb/host/xhci-trace.o
  AR      drivers/input/serio/built-in.a
  CC      drivers/net/mdio/fwnode_mdio.o
  CC      drivers/usb/host/xhci-debugfs.o
  CC      drivers/usb/serial/pl2303.o
  CC      drivers/base/swnode.o
  CC      drivers/rtc/dev.o
  CC      drivers/rtc/proc.o
  CC      drivers/input/input-compat.o
  CC      drivers/acpi/acpi_processor.o
  CC      drivers/usb/storage/usual-tables.o
  CC      drivers/acpi/acpica/psloop.o
  CC      net/xfrm/xfrm_device.o
  CC      drivers/acpi/acpica/psobject.o
  CC      kernel/events/hw_breakpoint.o
  CC      drivers/acpi/acpica/psopcode.o
  CC      drivers/net/phy/phy_device.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fence.o
  AR      drivers/i2c/algos/built-in.a
  CC [M]  drivers/i2c/algos/i2c-algo-bit.o
  AR      drivers/i3c/built-in.a
  CC      drivers/i2c/busses/i2c-designware-common.o
  AR      drivers/usb/gadget/udc/built-in.a
  AR      drivers/i2c/muxes/built-in.a
  CC [M]  drivers/i2c/muxes/i2c-mux-gpio.o
  AR      drivers/usb/gadget/function/built-in.a
  AR      drivers/usb/gadget/legacy/built-in.a
  CC      drivers/usb/gadget/usbstring.o
  CC      drivers/usb/gadget/config.o
  CC      lib/ratelimit.o
  CC      drivers/scsi/scsi_debugfs.o
  CC      arch/x86/kernel/ptrace.o
  CC      arch/x86/kernel/tls.o
  CC      drivers/input/input-mt.o
  CC      fs/readdir.o
  CC      lib/rbtree.o
  CC      kernel/trace/power-traces.o
  CC      drivers/i2c/busses/i2c-designware-master.o
  CC      drivers/acpi/acpica/psopinfo.o
  AR      drivers/net/mdio/built-in.a
  CC      kernel/exit.o
  CC      drivers/scsi/scsi_trace.o
  CC [M]  drivers/gpu/drm/i915/i915_mitigations.o
  AR      drivers/usb/storage/built-in.a
  CC      drivers/usb/core/message.o
  CC      arch/x86/kernel/step.o
  CC      drivers/acpi/acpica/psparse.o
  CC [M]  net/netfilter/x_tables.o
  CC      drivers/rtc/sysfs.o
  CC      drivers/acpi/acpica/psscope.o
  AR      drivers/ata/built-in.a
  LD [M]  fs/smb/client/cifs.o
  AR      drivers/media/i2c/built-in.a
  AR      drivers/nvme/host/built-in.a
  AR      drivers/media/tuners/built-in.a
  AR      drivers/nvme/built-in.a
  CC      drivers/usb/host/xhci-pci.o
  CC      drivers/rtc/rtc-mc146818-lib.o
  AR      drivers/media/rc/keymaps/built-in.a
  AR      drivers/media/common/b2c2/built-in.a
  CC      drivers/rtc/rtc-cmos.o
  AR      drivers/media/common/saa7146/built-in.a
  AR      drivers/usb/serial/built-in.a
  CC      drivers/input/input-poller.o
  AR      drivers/media/rc/built-in.a
  CC      drivers/usb/gadget/epautoconf.o
  CC      lib/seq_buf.o
  AR      drivers/media/common/siano/built-in.a
  CC      drivers/base/auxiliary.o
  CC      kernel/events/uprobes.o
  AR      drivers/media/common/v4l2-tpg/built-in.a
  AR      drivers/media/common/videobuf2/built-in.a
  AR      drivers/ptp/built-in.a
  AR      drivers/media/platform/allegro-dvt/built-in.a
  AR      drivers/media/common/built-in.a
  CC [M]  drivers/ptp/ptp_clock.o
  CC [M]  drivers/gpu/drm/i915/i915_module.o
  AR      drivers/media/platform/amlogic/meson-ge2d/built-in.a
  AR      drivers/media/platform/amlogic/built-in.a
  AR      drivers/media/platform/amphion/built-in.a
  AR      drivers/media/platform/aspeed/built-in.a
  AR      drivers/media/platform/atmel/built-in.a
  CC      arch/x86/kernel/i8237.o
  AR      drivers/media/platform/cadence/built-in.a
  CC      drivers/i2c/i2c-boardinfo.o
  AR      drivers/media/platform/chips-media/coda/built-in.a
  CC      drivers/acpi/processor_core.o
  AR      drivers/media/platform/chips-media/wave5/built-in.a
  CC      drivers/acpi/processor_pdc.o
  AR      drivers/media/platform/chips-media/built-in.a
  CC      kernel/trace/rpm-traces.o
  CC      drivers/i2c/i2c-core-base.o
  AR      drivers/media/platform/intel/built-in.a
  AR      drivers/media/platform/marvell/built-in.a
  AR      drivers/media/platform/mediatek/jpeg/built-in.a
  CC      drivers/acpi/acpica/pstree.o
  AR      drivers/media/platform/mediatek/mdp/built-in.a
  CC      lib/siphash.o
  CC      fs/select.o
  AR      drivers/media/platform/mediatek/vcodec/common/built-in.a
  AR      drivers/media/platform/mediatek/vcodec/encoder/built-in.a
  AR      drivers/media/platform/mediatek/vpu/built-in.a
  CC      lib/string.o
  AR      drivers/media/platform/mediatek/vcodec/decoder/built-in.a
  AR      drivers/media/platform/mediatek/mdp3/built-in.a
  CC      kernel/trace/trace_dynevent.o
  AR      drivers/media/platform/mediatek/vcodec/built-in.a
  CC      drivers/i2c/i2c-core-smbus.o
  AR      drivers/media/platform/mediatek/built-in.a
  CC      net/ipv6/addrlabel.o
  AR      drivers/media/platform/microchip/built-in.a
  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
  AR      drivers/media/platform/nxp/dw100/built-in.a
  CC      net/ipv4/tcp_input.o
  AR      drivers/media/platform/nxp/imx-jpeg/built-in.a
  AR      drivers/media/pci/ttpci/built-in.a
  AR      drivers/media/platform/nxp/imx8-isi/built-in.a
  CC      net/xfrm/xfrm_algo.o
  AR      drivers/media/platform/nxp/built-in.a
  AR      drivers/media/pci/b2c2/built-in.a
  CC      fs/dcache.o
  CC      net/ipv6/route.o
  AR      drivers/media/pci/pluto2/built-in.a
  CC      arch/x86/kernel/stacktrace.o
  CC      drivers/scsi/scsi_logging.o
  AR      drivers/media/platform/qcom/camss/built-in.a
  AR      drivers/media/pci/dm1105/built-in.a
  AR      drivers/media/platform/qcom/venus/built-in.a
  AR      drivers/media/platform/qcom/built-in.a
  AR      drivers/media/pci/pt1/built-in.a
  CC      drivers/input/ff-core.o
  CC      drivers/input/touchscreen.o
  AR      drivers/media/pci/pt3/built-in.a
  CC      drivers/base/devtmpfs.o
  AR      drivers/media/pci/mantis/built-in.a
  CC      drivers/base/node.o
  AR      drivers/media/platform/renesas/rcar-vin/built-in.a
  CC      drivers/usb/gadget/composite.o
  AR      drivers/media/pci/ngene/built-in.a
  AR      drivers/media/platform/renesas/rzg2l-cru/built-in.a
  CC      arch/x86/kernel/reboot.o
  AR      drivers/media/pci/ddbridge/built-in.a
  AR      drivers/media/platform/renesas/vsp1/built-in.a
  CC      fs/inode.o
  AR      drivers/media/platform/renesas/built-in.a
  CC      drivers/acpi/acpica/psutils.o
  AR      drivers/media/pci/saa7146/built-in.a
  AR      drivers/media/pci/smipcie/built-in.a
  AR      drivers/media/pci/netup_unidvb/built-in.a
  AR      drivers/media/platform/rockchip/rga/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.o
  CC      net/xfrm/xfrm_user.o
  AR      drivers/media/platform/rockchip/rkisp1/built-in.a
  AR      drivers/media/pci/intel/ipu3/built-in.a
  AR      drivers/media/platform/rockchip/built-in.a
  AR      drivers/media/pci/intel/ivsc/built-in.a
  AR      drivers/media/pci/intel/built-in.a
  CC      net/ipv6/ip6_fib.o
  AR      drivers/media/platform/samsung/exynos-gsc/built-in.a
  AR      drivers/media/pci/built-in.a
  CC      net/ipv4/tcp_output.o
  CC      lib/timerqueue.o
  CC      drivers/i2c/busses/i2c-designware-platdrv.o
  AR      drivers/media/platform/samsung/exynos4-is/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_params.o
  AR      drivers/media/platform/samsung/s3c-camif/built-in.a
  AR      drivers/media/platform/samsung/s5p-g2d/built-in.a
  CC      fs/btrfs/zlib.o
  CC [M]  arch/x86/kvm/vmx/posted_intr.o
  AR      drivers/media/platform/samsung/s5p-jpeg/built-in.a
  CC      mm/init-mm.o
  AR      drivers/media/platform/samsung/s5p-mfc/built-in.a
  CC      drivers/base/memory.o
  AR      drivers/media/platform/samsung/built-in.a
  CC      lib/vsprintf.o
  AR      drivers/rtc/built-in.a
  AR      drivers/media/platform/st/sti/bdisp/built-in.a
  CC      net/ipv6/ipv6_sockglue.o
  AR      drivers/media/platform/st/sti/c8sectpfe/built-in.a
  AR      drivers/media/platform/sunxi/sun4i-csi/built-in.a
  AR      drivers/media/platform/st/sti/delta/built-in.a
  AR      drivers/media/platform/sunxi/sun6i-csi/built-in.a
  AR      drivers/media/platform/st/sti/hva/built-in.a
  CC      drivers/net/phy/linkmode.o
  CC [M]  drivers/ptp/ptp_chardev.o
  AR      drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
  AR      drivers/media/platform/st/stm32/built-in.a
  AR      drivers/media/platform/st/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
  CC      drivers/acpi/acpica/pswalk.o
  AR      drivers/media/platform/sunxi/sun8i-di/built-in.a
  AR      drivers/media/platform/ti/am437x/built-in.a
  CC      drivers/acpi/acpica/psxface.o
  AR      drivers/media/platform/sunxi/sun8i-rotate/built-in.a
  AR      drivers/media/platform/ti/cal/built-in.a
  AR      drivers/media/platform/sunxi/built-in.a
  AR      drivers/media/platform/ti/vpe/built-in.a
  AR      drivers/power/reset/built-in.a
  CC      drivers/power/supply/power_supply_core.o
  CC [M]  drivers/gpu/drm/i915/i915_pci.o
  CC [M]  drivers/gpu/drm/i915/i915_scatterlist.o
  AR      drivers/media/platform/ti/davinci/built-in.a
  CC      net/ipv4/tcp_timer.o
  AR      drivers/media/platform/ti/j721e-csi2rx/built-in.a
  CC      drivers/usb/gadget/functions.o
  AR      drivers/media/platform/ti/omap/built-in.a
  AR      drivers/media/platform/ti/omap3isp/built-in.a
  CC      net/ipv4/tcp_ipv4.o
  CC      kernel/trace/trace_probe.o
  AR      drivers/media/platform/ti/built-in.a
  AR      drivers/media/platform/verisilicon/built-in.a
  CC      fs/btrfs/lzo.o
  CC      fs/btrfs/zstd.o
  CC      drivers/usb/core/driver.o
  AR      drivers/media/platform/via/built-in.a
  AR      drivers/media/platform/xilinx/built-in.a
  CC      drivers/input/ff-memless.o
  AR      drivers/media/platform/built-in.a
  AR      drivers/media/usb/b2c2/built-in.a
  AR      drivers/media/usb/dvb-usb/built-in.a
  AR      drivers/media/usb/dvb-usb-v2/built-in.a
  AR      drivers/usb/host/built-in.a
  AR      drivers/media/usb/s2255/built-in.a
  CC      fs/btrfs/compression.o
  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
  AR      drivers/media/usb/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_object.o
  CC      drivers/scsi/scsi_pm.o
  AR      drivers/media/mmc/siano/built-in.a
  CC      drivers/acpi/acpica/rsaddr.o
  AR      drivers/media/mmc/built-in.a
  CC      mm/memblock.o
  AR      drivers/media/firewire/built-in.a
  CC      drivers/base/module.o
  AR      drivers/media/spi/built-in.a
  CC      kernel/softirq.o
  AR      drivers/media/test-drivers/built-in.a
  CC      drivers/base/pinctrl.o
  AR      drivers/media/built-in.a
  CC      drivers/acpi/acpica/rscalc.o
  CC      arch/x86/kernel/msr.o
  CC      drivers/usb/gadget/configfs.o
  CC      drivers/usb/core/config.o
  CC      drivers/i2c/busses/i2c-designware-baytrail.o
  CC      drivers/input/vivaldi-fmap.o
  CC [M]  net/netfilter/xt_tcpudp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gart.o
  CC      drivers/net/phy/mdio_bus.o
  AR      kernel/events/built-in.a
  CC      drivers/i2c/i2c-core-acpi.o
  CC      fs/btrfs/delayed-ref.o
  CC      drivers/input/input-leds.o
  CC      drivers/usb/gadget/u_f.o
  CC      net/ipv6/ndisc.o
  CC [M]  drivers/ptp/ptp_sysfs.o
  CC [M]  arch/x86/kvm/vmx/hyperv.o
  CC      drivers/acpi/acpica/rscreate.o
  CC      net/ipv6/udp.o
  CC      drivers/i2c/i2c-core-slave.o
  CC [M]  arch/x86/kvm/vmx/hyperv_evmcs.o
  CC [M]  net/netfilter/xt_mark.o
  CC      drivers/power/supply/power_supply_sysfs.o
  CC      drivers/base/devcoredump.o
  CC [M]  drivers/gpu/drm/i915/i915_suspend.o
  CC      drivers/i2c/i2c-dev.o
  CC      mm/memory_hotplug.o
  CC      drivers/scsi/scsi_bsg.o
  CC      arch/x86/kernel/cpuid.o
  CC      drivers/scsi/scsi_common.o
  CC      net/ipv6/udplite.o
  CC      mm/slub.o
  CC [M]  net/netfilter/xt_nat.o
  CC      fs/attr.o
  CC      drivers/input/mousedev.o
  CC [M]  drivers/i2c/busses/i2c-scmi.o
  CC      drivers/input/evdev.o
  CC      drivers/acpi/acpica/rsdumpinfo.o
  CC      fs/btrfs/relocation.o
  CC      kernel/trace/trace_uprobe.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_encoders.o
  CC [M]  drivers/ptp/ptp_vclock.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.o
  CC      kernel/trace/rethook.o
  CC      drivers/usb/core/file.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.o
  CC      drivers/power/supply/power_supply_leds.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.o
  CC      kernel/resource.o
  CC      drivers/acpi/acpica/rsinfo.o
  CC [M]  drivers/gpu/drm/vgem/vgem_drv.o
  CC [M]  net/netfilter/xt_REDIRECT.o
  CC      fs/btrfs/delayed-inode.o
  CC      drivers/base/platform-msi.o
  CC [M]  drivers/gpu/drm/vgem/vgem_fence.o
  CC      drivers/acpi/acpica/rsio.o
  AR      drivers/usb/gadget/built-in.a
  CC      drivers/power/supply/power_supply_hwmon.o
  CC      arch/x86/kernel/early-quirks.o
  CC      net/ipv4/tcp_minisocks.o
  CC [M]  drivers/i2c/i2c-smbus.o
  CC      drivers/acpi/acpica/rsirq.o
  CC      drivers/net/phy/mdio_device.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_display.o
  CC      drivers/scsi/sd.o
  AR      net/xfrm/built-in.a
  CC      drivers/acpi/ec.o
  CC [M]  drivers/i2c/i2c-mux.o
  LD [M]  arch/x86/kvm/kvm.o
  CC      drivers/net/phy/swphy.o
  CC      drivers/net/phy/fixed_phy.o
  CC      lib/win_minmax.o
  CC [M]  net/netfilter/xt_MASQUERADE.o
  CC      drivers/acpi/acpica/rslist.o
  CC [M]  drivers/gpu/drm/i915/i915_switcheroo.o
  CC      fs/bad_inode.o
  CC [M]  drivers/i2c/busses/i2c-ccgx-ucsi.o
  CC      net/ipv6/raw.o
  CC      lib/xarray.o
  UPD     arch/x86/kvm/kvm-asm-offsets.h
  CC      lib/lockref.o
  AS [M]  arch/x86/kvm/vmx/vmenter.o
  CC      net/ipv6/icmp.o
  CC      net/ipv6/mcast.o
  LD [M]  arch/x86/kvm/kvm-intel.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_mocs_test.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.o
  CC      net/ipv4/tcp_cong.o
  CC      drivers/usb/core/buffer.o
  CC      net/ipv4/tcp_metrics.o
  CC      fs/btrfs/scrub.o
  CC [M]  drivers/ptp/ptp_kvm_x86.o
  CC      drivers/usb/core/sysfs.o
  CC      drivers/base/physical_location.o
  AR      drivers/input/built-in.a
  CC [M]  drivers/gpu/drm/xe/tests/xe_test_mod.o
  AR      drivers/power/supply/built-in.a
  CC [M]  net/netfilter/xt_addrtype.o
  AR      drivers/power/built-in.a
  CC      drivers/acpi/acpica/rsmemory.o
  CC      drivers/hwmon/hwmon.o
  CC      drivers/acpi/acpica/rsmisc.o
  LD [M]  drivers/gpu/drm/vgem/vgem.o
  CC      lib/bcd.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/object.o
  CC      drivers/acpi/acpica/rsserial.o
  CC      lib/sort.o
  CC      lib/parser.o
  CC [M]  drivers/gpu/drm/ast/ast_drv.o
  CC      lib/debug_locks.o
  CC      arch/x86/kernel/smp.o
  CC [M]  drivers/hwmon/acpi_power_meter.o
  CC      fs/btrfs/backref.o
  CC      lib/random32.o
  CC [M]  drivers/ptp/ptp_kvm_common.o
  CC      fs/btrfs/ulist.o
  CC      drivers/acpi/acpica/rsutils.o
  AR      drivers/thermal/broadcom/built-in.a
  CC      drivers/acpi/acpica/rsxface.o
  CC [M]  drivers/gpu/drm/i915/i915_sysfs.o
  AR      drivers/thermal/samsung/built-in.a
  CC      drivers/thermal/intel/intel_tcc.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_pci_test.o
  CC [M]  drivers/i2c/busses/i2c-i801.o
  CC      drivers/thermal/intel/therm_throt.o
  CC [M]  drivers/gpu/drm/i915/i915_utils.o
  CC [M]  drivers/net/phy/phylink.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/client.o
  CC [M]  drivers/gpu/drm/ast/ast_i2c.o
  CC      drivers/base/trace.o
  AR      drivers/thermal/st/built-in.a
  CC [M]  net/netfilter/xt_conntrack.o
  CC      drivers/acpi/dock.o
  CC      kernel/sysctl.o
  CC      drivers/acpi/pci_root.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.o
  CC      drivers/gpu/drm/drm_mipi_dsi.o
  CC [M]  net/netfilter/xt_ipvs.o
  AR      drivers/thermal/qcom/built-in.a
  AR      drivers/thermal/tegra/built-in.a
  AR      drivers/thermal/mediatek/built-in.a
  CC      drivers/thermal/thermal_core.o
  CC      drivers/usb/core/endpoint.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.o
  CC      drivers/acpi/acpica/tbdata.o
  AR      kernel/trace/built-in.a
  CC      net/ipv4/tcp_fastopen.o
  CC      drivers/acpi/acpica/tbfadt.o
  CC      kernel/capability.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ring.o
  CC      lib/bust_spinlocks.o
  LD [M]  drivers/ptp/ptp.o
  CC      lib/kasprintf.o
  LD [M]  drivers/ptp/ptp_kvm.o
  CC      drivers/watchdog/watchdog_core.o
  CC      drivers/acpi/pci_link.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/conn.o
  CC      drivers/acpi/pci_irq.o
  CC      net/ipv4/tcp_rate.o
  CC [M]  drivers/hwmon/coretemp.o
  CC      drivers/usb/core/devio.o
  CC [M]  drivers/gpu/drm/ast/ast_main.o
  CC      fs/btrfs/qgroup.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_wa_test.o
  CC      net/ipv4/tcp_recovery.o
  CC      arch/x86/kernel/smpboot.o
  AR      drivers/base/built-in.a
  CC      drivers/scsi/sg.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.o
  CC      lib/bitmap.o
  CC      drivers/acpi/acpica/tbfind.o
  CC      drivers/acpi/acpi_lpss.o
  CC [M]  drivers/gpu/drm/drm_aperture.o
  CC      drivers/watchdog/watchdog_dev.o
  CC      lib/scatterlist.o
  CC      drivers/acpi/acpica/tbinstal.o
  CC [M]  drivers/gpu/drm/i915/intel_clock_gating.o
  CC [M]  drivers/gpu/drm/drm_atomic.o
  CC [M]  drivers/gpu/drm/i915/intel_device_info.o
  CC      lib/list_sort.o
  CC      drivers/usb/core/notify.o
  CC      drivers/watchdog/softdog.o
  CC [M]  drivers/thermal/intel/x86_pkg_temp_thermal.o
  CC      lib/uuid.o
  CC      lib/iov_iter.o
  CC      lib/clz_ctz.o
  CC [M]  drivers/gpu/drm/xe/xe_bb.o
  CC      net/ipv6/reassembly.o
  CC      drivers/acpi/acpi_apd.o
  CC      lib/bsearch.o
  CC      lib/find_bit.o
  CC [M]  drivers/gpu/drm/i915/intel_memory_region.o
  CC      drivers/acpi/acpica/tbprint.o
  CC [M]  drivers/gpu/drm/xe/xe_bo.o
  CC [M]  drivers/i2c/busses/i2c-isch.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/device.o
  LD [M]  net/netfilter/nf_conntrack.o
  CC      lib/llist.o
  CC [M]  drivers/md/persistent-data/dm-array.o
  LD [M]  net/netfilter/nf_nat.o
  AR      net/netfilter/built-in.a
  CC [M]  drivers/gpu/drm/drm_atomic_uapi.o
  CC      drivers/md/md.o
  LD [M]  drivers/gpu/drm/xe/tests/xe_test.o
  CC [M]  drivers/md/persistent-data/dm-bitset.o
  CC      drivers/md/md-bitmap.o
  CC      drivers/acpi/acpi_platform.o
  CC [M]  drivers/md/persistent-data/dm-block-manager.o
  CC      drivers/opp/core.o
  AR      drivers/hwmon/built-in.a
  CC      lib/lwq.o
  CC [M]  drivers/gpu/drm/ast/ast_mm.o
  CC [M]  drivers/gpu/drm/ast/ast_mode.o
  CC      drivers/acpi/acpica/tbutils.o
  CC [M]  drivers/gpu/drm/xe/xe_bo_evict.o
  CC      arch/x86/kernel/tsc_sync.o
  CC      arch/x86/kernel/setup_percpu.o
  CC      drivers/thermal/thermal_sysfs.o
  CC      drivers/thermal/thermal_trip.o
  CC      fs/btrfs/send.o
  CC      lib/memweight.o
  CC      kernel/ptrace.o
  CC      drivers/acpi/acpica/tbxface.o
  AR      drivers/watchdog/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_debugfs.o
  CC      drivers/md/md-autodetect.o
  CC [M]  drivers/net/phy/ax88796b.o
  CC [M]  drivers/net/phy/bcm7xxx.o
  CC      drivers/acpi/acpi_pnp.o
  CC      drivers/md/dm-uevent.o
  AR      drivers/thermal/intel/built-in.a
  CC      drivers/thermal/thermal_helpers.o
  CC      net/ipv4/tcp_ulp.o
  CC      drivers/usb/core/generic.o
  CC [M]  drivers/net/phy/bcm87xx.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_bios.o
  CC      net/ipv6/tcp_ipv6.o
  CC      drivers/scsi/scsi_sysfs.o
  CC      drivers/acpi/acpica/tbxfload.o
  CC      fs/btrfs/dev-replace.o
  CC [M]  drivers/gpu/drm/i915/intel_pcode.o
  CC [M]  drivers/i2c/busses/i2c-ismt.o
  CC [M]  drivers/gpu/drm/i915/intel_region_ttm.o
  CC [M]  drivers/i2c/busses/i2c-piix4.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/disp.o
  CC [M]  drivers/md/persistent-data/dm-space-map-common.o
  CC      mm/madvise.o
  CC [M]  drivers/i2c/busses/i2c-designware-pcidrv.o
  CC [M]  drivers/md/persistent-data/dm-space-map-disk.o
  CC [M]  drivers/gpu/drm/i915/intel_runtime_pm.o
  CC      drivers/usb/core/quirks.o
  CC      net/ipv6/ping.o
  CC      fs/btrfs/raid56.o
  CC      arch/x86/kernel/ftrace.o
  CC [M]  drivers/gpu/drm/ast/ast_post.o
  CC [M]  drivers/gpu/drm/drm_auth.o
  CC [M]  drivers/gpu/drm/ast/ast_dp501.o
  CC      drivers/thermal/thermal_hwmon.o
  CC      drivers/acpi/acpica/tbxfroot.o
  CC      drivers/acpi/acpica/utaddress.o
  CC      drivers/thermal/gov_fair_share.o
  CC      kernel/user.o
  CC [M]  drivers/gpu/drm/xe/xe_devcoredump.o
  CC      net/ipv6/exthdrs.o
  AS      arch/x86/kernel/ftrace_64.o
  CC      net/ipv6/datagram.o
  CC      drivers/md/dm.o
  CC      arch/x86/kernel/trace_clock.o
  CC [M]  drivers/gpu/drm/xe/xe_device.o
  CC      kernel/signal.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.o
  CC [M]  drivers/net/phy/bcm-phy-lib.o
  CC      drivers/acpi/power.o
  CC      mm/page_io.o
  CC [M]  drivers/net/phy/broadcom.o
  CC      drivers/acpi/acpica/utalloc.o
  CC [M]  drivers/gpu/drm/ast/ast_dp.o
  CC      kernel/sys.o
  CC [M]  drivers/net/phy/lxt.o
  CC      drivers/opp/cpu.o
  CC      drivers/opp/debugfs.o
  CC      drivers/usb/core/devices.o
  CC      drivers/usb/core/phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/driver.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_dp.o
  CC      drivers/thermal/gov_step_wise.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.o
  CC      drivers/thermal/gov_user_space.o
  CC      net/ipv4/tcp_offload.o
  CC      lib/kfifo.o
  CC      arch/x86/kernel/trace.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_trace_points.o
  CC      arch/x86/kernel/rethook.o
  CC [M]  drivers/md/persistent-data/dm-space-map-metadata.o
  CC      arch/x86/kernel/crash_core_64.o
  CC      drivers/acpi/acpica/utascii.o
  CC      arch/x86/kernel/module.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_encoders.o
  CC      drivers/usb/core/port.o
  LD [M]  drivers/i2c/busses/i2c-designware-pci.o
  AR      drivers/i2c/busses/built-in.a
  AR      drivers/i2c/built-in.a
  AR      drivers/scsi/built-in.a
  CC [M]  drivers/gpu/drm/i915/intel_sbi.o
  CC      drivers/cpufreq/cpufreq.o
  CC      drivers/cpuidle/governors/menu.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/event.o
  CC      drivers/cpuidle/governors/haltpoll.o
  CC      drivers/cpuidle/cpuidle.o
  CC      drivers/acpi/acpica/utbuffer.o
  CC      mm/swap_state.o
  CC [M]  drivers/md/persistent-data/dm-transaction-manager.o
  CC [M]  drivers/net/phy/realtek.o
  AR      drivers/opp/built-in.a
  CC      net/ipv6/ip6_flowlabel.o
  CC      drivers/cpufreq/freq_table.o
  CC      drivers/mmc/core/core.o
  CC      drivers/usb/core/hcd-pci.o
  CC      drivers/acpi/event.o
  CC      fs/btrfs/uuid-tree.o
  AR      drivers/thermal/built-in.a
  CC      drivers/md/dm-table.o
  CC      mm/swapfile.o
  CC [M]  drivers/net/phy/smsc.o
  CC      net/ipv6/inet6_connection_sock.o
  CC [M]  drivers/gpu/drm/xe/xe_device_sysfs.o
  CC      drivers/mmc/host/sdhci.o
  CC [M]  drivers/gpu/drm/xe/xe_dma_buf.o
  CC      drivers/mmc/host/sdhci-pci-core.o
  CC      drivers/mmc/host/sdhci-pci-o2micro.o
  CC      net/ipv6/udp_offload.o
  CC [M]  drivers/gpu/drm/xe/xe_drm_client.o
  LD [M]  drivers/gpu/drm/ast/ast.o
  CC      drivers/acpi/acpica/utcksum.o
  CC      drivers/acpi/acpica/utcopy.o
  CC      drivers/acpi/acpica/utexcep.o
  CC      fs/file.o
  CC      drivers/usb/core/usb-acpi.o
  CC      lib/percpu-refcount.o
  CC      arch/x86/kernel/early_printk.o
  CC [M]  drivers/md/persistent-data/dm-btree.o
  CC [M]  drivers/md/persistent-data/dm-btree-remove.o
  CC [M]  drivers/gpu/drm/xe/xe_exec.o
  CC      fs/filesystems.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sa.o
  CC      drivers/acpi/acpica/utdebug.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_i2c.o
  AR      drivers/cpuidle/governors/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/fifo.o
  CC      drivers/acpi/acpica/utdecode.o
  CC      drivers/md/dm-target.o
  CC      mm/swap_slots.o
  CC [M]  drivers/md/persistent-data/dm-btree-spine.o
  CC [M]  drivers/gpu/drm/i915/intel_step.o
  CC      drivers/acpi/acpica/utdelete.o
  CC      arch/x86/kernel/hpet.o
  CC      fs/btrfs/props.o
  CC      net/packet/af_packet.o
  CC      net/ipv4/tcp_plb.o
  CC      fs/btrfs/free-space-tree.o
  CC      arch/x86/kernel/amd_nb.o
  CC      fs/btrfs/tree-checker.o
  CC      drivers/md/dm-linear.o
  CC      drivers/acpi/acpica/uterror.o
  CC      drivers/acpi/evged.o
  CC      drivers/cpuidle/driver.o
  CC      lib/rhashtable.o
  CC      drivers/acpi/sysfs.o
  AR      drivers/usb/core/built-in.a
  AR      drivers/usb/built-in.a
  CC      mm/dmapool.o
  CC      net/key/af_key.o
  AR      net/bridge/netfilter/built-in.a
  CC      net/bridge/br.o
  CC [M]  drivers/gpu/drm/xe/xe_execlist.o
  AR      drivers/net/phy/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_exec_queue.o
  CC [M]  drivers/gpu/drm/xe/xe_force_wake.o
  AR      drivers/net/ethernet/adi/built-in.a
  CC      net/packet/diag.o
  AR      drivers/net/ethernet/alacritech/built-in.a
  CC      drivers/mmc/host/sdhci-pci-arasan.o
  AR      drivers/net/ethernet/amazon/built-in.a
  CC      drivers/acpi/property.o
  CC      drivers/acpi/acpica/uteval.o
  AR      drivers/net/ethernet/aquantia/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_ggtt.o
  AR      drivers/net/ethernet/asix/built-in.a
  AR      drivers/net/ethernet/cadence/built-in.a
  CC      drivers/acpi/acpi_cmos_rtc.o
  AR      drivers/net/ethernet/broadcom/built-in.a
  CC [M]  drivers/net/ethernet/broadcom/b44.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.o
  CC      net/ipv6/seg6.o
  CC [M]  drivers/gpu/drm/xe/xe_gpu_scheduler.o
  CC [M]  drivers/net/ethernet/broadcom/bnx2.o
  AR      net/dsa/built-in.a
  CC      drivers/acpi/acpica/utglobal.o
  AR      drivers/ufs/built-in.a
  CC      drivers/md/dm-stripe.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/head.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.o
  AR      drivers/leds/trigger/built-in.a
  CC      kernel/umh.o
  CC [M]  drivers/leds/trigger/ledtrig-audio.o
  LD [M]  drivers/md/persistent-data/dm-persistent-data.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.o
  AR      drivers/leds/blink/built-in.a
  AR      drivers/leds/simple/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ib.o
  CC      net/bridge/br_device.o
  CC      drivers/cpuidle/governor.o
  CC      drivers/acpi/acpica/uthex.o
  CC      drivers/cpufreq/cpufreq_performance.o
  CC      drivers/acpi/acpica/utids.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_pll.o
  CC      drivers/cpuidle/sysfs.o
  CC [M]  drivers/net/ethernet/broadcom/cnic.o
  CC      kernel/workqueue.o
  CC      drivers/md/dm-ioctl.o
  CC      drivers/mmc/core/bus.o
  CC [M]  drivers/gpu/drm/i915/intel_uncore.o
  CC      arch/x86/kernel/kvm.o
  CC      drivers/mmc/core/host.o
  CC      drivers/cpufreq/cpufreq_ondemand.o
  AR      drivers/net/ethernet/cavium/common/built-in.a
  CC      fs/namespace.o
  AR      drivers/net/ethernet/cavium/thunder/built-in.a
  AR      drivers/net/ethernet/cavium/liquidio/built-in.a
  AR      drivers/net/ethernet/cavium/octeon/built-in.a
  CC      drivers/acpi/x86/apple.o
  AR      drivers/net/ethernet/cavium/built-in.a
  AR      drivers/net/ethernet/cortina/built-in.a
  CC      drivers/acpi/x86/utils.o
  AR      drivers/net/ethernet/engleder/built-in.a
  CC      drivers/acpi/acpica/utinit.o
  CC      drivers/acpi/x86/s2idle.o
  CC [M]  drivers/gpu/drm/i915/intel_wakeref.o
  CC      net/ipv4/datagram.o
  CC      drivers/cpuidle/poll_state.o
  CC      drivers/cpufreq/cpufreq_governor.o
  CC      arch/x86/kernel/kvmclock.o
  CC      drivers/leds/led-core.o
  CC      drivers/cpuidle/cpuidle-haltpoll.o
  CC      drivers/cpufreq/cpufreq_governor_attr_set.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/mem.o
  CC [M]  drivers/net/ethernet/broadcom/tg3.o
  CC      fs/btrfs/space-info.o
  CC      lib/base64.o
  CC      kernel/pid.o
  CC      drivers/mmc/host/sdhci-pci-dwc-mshc.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/mmu.o
  HOSTCC  drivers/gpu/drm/xe/xe_gen_wa_oob
  CC [M]  drivers/gpu/drm/nouveau/nvif/outp.o
  CC      drivers/acpi/acpica/utlock.o
  CC      kernel/task_work.o
  CC [M]  drivers/gpu/drm/drm_blend.o
  CC      lib/once.o
  CC      lib/refcount.o
  CC      mm/hugetlb.o
  CC      net/ipv4/raw.o
  CC      net/ipv6/fib6_notifier.o
  CC      net/ipv4/udp.o
  CC      drivers/mmc/core/mmc.o
  CC      mm/hugetlb_vmemmap.o
  CC      drivers/acpi/debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_proxy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.o
  CC      drivers/cpufreq/acpi-cpufreq.o
  CC      lib/rcuref.o
  CC      net/ipv4/udplite.o
  CC      kernel/extable.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.o
  AR      drivers/cpuidle/built-in.a
  CC      drivers/acpi/acpica/utmath.o
  CC      drivers/acpi/acpica/utmisc.o
  AR      drivers/firmware/arm_ffa/built-in.a
  CC      drivers/cpufreq/intel_pstate.o
  CC      drivers/leds/led-class.o
  AR      drivers/firmware/arm_scmi/built-in.a
  CC      arch/x86/kernel/paravirt.o
  CC      drivers/mmc/core/mmc_ops.o
  AR      drivers/firmware/broadcom/built-in.a
  AR      drivers/firmware/cirrus/built-in.a
  CC      kernel/params.o
  AR      drivers/firmware/meson/built-in.a
  CC      net/bridge/br_fdb.o
  AR      drivers/firmware/microchip/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.o
  CC      drivers/md/dm-io.o
  CC      lib/usercopy.o
  CC      drivers/firmware/efi/libstub/efi-stub-helper.o
  CC [M]  drivers/gpu/drm/i915/vlv_sideband.o
  CC      kernel/kthread.o
  CC      drivers/mmc/host/sdhci-pci-gli.o
  CC      drivers/md/dm-kcopyd.o
  AR      drivers/net/ethernet/ezchip/built-in.a
  CC      lib/errseq.o
  CC      arch/x86/kernel/pvclock.o
  CC      drivers/acpi/acpi_lpat.o
  CC      kernel/sys_ni.o
  CC      drivers/firmware/efi/efi-bgrt.o
  CC      drivers/acpi/acpica/utmutex.o
  AR      drivers/net/usb/built-in.a
  CC [M]  drivers/net/usb/pegasus.o
  CC      arch/x86/kernel/pcspeaker.o
  CC [M]  drivers/net/usb/rtl8150.o
  CC [M]  drivers/gpu/drm/drm_bridge.o
  CC      mm/mempolicy.o
  CC      lib/bucket_locks.o
  AR      net/key/built-in.a
  CC [M]  net/sunrpc/auth_gss/auth_gss.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/timer.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_submit.o
  CC      drivers/leds/led-triggers.o
  CC      net/ipv6/rpl.o
  CC [M]  net/sunrpc/auth_gss/gss_generic_token.o
  CC      arch/x86/kernel/check.o
  CC      drivers/acpi/acpica/utnonansi.o
  CC      mm/sparse.o
  CC      net/8021q/vlan_core.o
  CC      kernel/nsproxy.o
  CC      kernel/notifier.o
  CC      drivers/acpi/acpi_lpit.o
  CC [M]  drivers/net/ipvlan/ipvlan_core.o
  CC      drivers/acpi/prmt.o
  CC      drivers/mmc/core/sd.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.o
  CC      drivers/acpi/acpi_pcc.o
  CC      net/ipv4/udp_offload.o
  CC      drivers/firmware/efi/libstub/gop.o
  AR      net/packet/built-in.a
  CC      lib/generic-radix-tree.o
  CC      drivers/acpi/acpica/utobject.o
  CC      arch/x86/kernel/uprobes.o
  CC      drivers/acpi/acpica/utosi.o
  CC [M]  drivers/net/ipvlan/ipvlan_main.o
  CC      drivers/md/dm-sysfs.o
  CC      drivers/acpi/ac.o
  CC      mm/sparse-vmemmap.o
  CC      fs/btrfs/block-rsv.o
  CC      drivers/md/dm-stats.o
  CC      net/ipv4/arp.o
  CC      drivers/firmware/efi/efi.o
  CC [M]  drivers/net/ipvlan/ipvlan_l3s.o
  AR      drivers/leds/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.o
  AR      drivers/crypto/stm32/built-in.a
  AR      drivers/crypto/xilinx/built-in.a
  AR      drivers/crypto/hisilicon/built-in.a
  CC [M]  net/sunrpc/auth_gss/gss_mech_switch.o
  CC [M]  drivers/gpu/drm/xe/xe_gt.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/vmm.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/user.o
  AR      drivers/crypto/intel/keembay/built-in.a
  CC      lib/bitmap-str.o
  AR      drivers/crypto/intel/ixp4xx/built-in.a
  AR      drivers/crypto/intel/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/userc361.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/client.o
  AR      drivers/crypto/starfive/built-in.a
  CC      drivers/acpi/acpica/utownerid.o
  CC [M]  drivers/gpu/drm/drm_cache.o
  AR      drivers/crypto/built-in.a
  CC      drivers/mmc/host/sdhci-acpi.o
  CC      drivers/firmware/efi/vars.o
  CC [M]  net/8021q/vlan.o
  CC [M]  drivers/gpu/drm/i915/vlv_suspend.o
  CC [M]  drivers/net/usb/r8152.o
  CC [M]  net/sunrpc/auth_gss/svcauth_gss.o
  CC      net/ipv6/ioam6.o
  AR      drivers/cpufreq/built-in.a
  CC      drivers/acpi/button.o
  CC      drivers/clocksource/acpi_pm.o
  CC      drivers/firmware/efi/libstub/secureboot.o
  CC [M]  net/sunrpc/auth_gss/gss_rpc_upcall.o
  CC      drivers/hid/hid-core.o
  CC      drivers/hid/usbhid/hid-core.o
  CC      arch/x86/kernel/perf_regs.o
  CC      kernel/ksysfs.o
  CC      drivers/acpi/acpica/utpredef.o
  AR      drivers/staging/media/built-in.a
  AR      drivers/staging/built-in.a
  CC      drivers/hid/usbhid/hiddev.o
  CC      mm/mmu_notifier.o
  CC      drivers/md/dm-rq.o
  CC      drivers/mmc/core/sd_ops.o
  CC      lib/string_helpers.o
  CC      drivers/mmc/core/sdio.o
  CC      arch/x86/kernel/tracepoint.o
  CC      net/bridge/br_forward.o
  CC [M]  net/8021q/vlan_dev.o
  CC [M]  drivers/gpu/drm/drm_client.o
  CC      net/bridge/br_if.o
  CC      drivers/acpi/acpica/utresdecode.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/engine.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/enum.o
  CC      drivers/firmware/efi/reboot.o
  CC      net/bridge/br_input.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/event.o
  CC      drivers/mmc/core/sdio_ops.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.o
  CC      arch/x86/kernel/itmt.o
  CC      fs/seq_file.o
  CC      kernel/cred.o
  CC      drivers/acpi/acpica/utresrc.o
  CC      fs/btrfs/delalloc-space.o
  CC      drivers/clocksource/i8253.o
  CC      drivers/firmware/efi/libstub/tpm.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_ccs_mode.o
  CC      drivers/acpi/acpica/utstate.o
  CC [M]  net/8021q/vlan_netlink.o
  LD [M]  drivers/net/ipvlan/ipvlan.o
  CC      drivers/firmware/efi/memattr.o
  CC      fs/xattr.o
  CC [M]  drivers/net/usb/asix_devices.o
  CC      drivers/mmc/host/cqhci-core.o
  CC [M]  net/8021q/vlanproc.o
  CC      kernel/reboot.o
  CC      lib/hexdump.o
  CC      net/ipv4/icmp.o
  CC [M]  net/sunrpc/auth_gss/gss_rpc_xdr.o
  CC      drivers/acpi/fan_core.o
  CC      fs/libfs.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_dram.o
  CC      drivers/firmware/efi/tpm.o
  CC      fs/fs-writeback.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_clock.o
  CC      net/bridge/br_ioctl.o
  CC [M]  net/sunrpc/auth_gss/trace.o
  CC      drivers/acpi/acpica/utstring.o
  CC      drivers/md/dm-io-rewind.o
  CC      lib/kstrtox.o
  CC      net/ipv4/devinet.o
  CC      kernel/async.o
  CC [M]  drivers/gpu/drm/drm_client_modeset.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_gmch.o
  CC      arch/x86/kernel/umip.o
  AR      drivers/clocksource/built-in.a
  CC      drivers/acpi/fan_attr.o
  CC      drivers/firmware/efi/libstub/file.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/firmware.o
  CC      drivers/mmc/core/sdio_bus.o
  CC      drivers/md/dm-builtin.o
  AR      drivers/hid/usbhid/built-in.a
  CC      net/sunrpc/clnt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/gpuobj.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_debugfs.o
  CC      drivers/acpi/processor_driver.o
  CC      drivers/acpi/acpica/utstrsuppt.o
  CC [M]  drivers/md/dm-bufio.o
  CC      drivers/acpi/acpica/utstrtoul64.o
  CC      fs/pnode.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.o
  CC      net/ipv6/sysctl_net_ipv6.o
  CC      lib/debug_info.o
  AR      net/8021q/built-in.a
  CC [M]  drivers/md/dm-bio-prison-v1.o
  AR      drivers/net/ethernet/fungible/built-in.a
  CC      drivers/acpi/processor_thermal.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/intr.o
  CC      drivers/hid/hid-input.o
  CC [M]  drivers/md/dm-bio-prison-v2.o
  LD [M]  net/8021q/8021q.o
  CC      drivers/firmware/efi/libstub/mem.o
  CC      net/ipv6/xfrm6_policy.o
  CC      drivers/firmware/efi/libstub/random.o
  CC      mm/ksm.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_freq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/ioctl.o
  CC      drivers/acpi/acpica/utxface.o
  CC      net/bridge/br_stp.o
  CC      drivers/acpi/acpica/utxfinit.o
  CC      kernel/range.o
  CC      drivers/acpi/acpica/utxferror.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/memory.o
  CC      drivers/firmware/efi/libstub/randomalloc.o
  CC      drivers/firmware/efi/memmap.o
  CC [M]  drivers/mmc/host/sdhci-pltfm.o
  CC      net/dcb/dcbnl.o
  CC      kernel/smpboot.o
  CC      fs/btrfs/block-group.o
  CC      net/dcb/dcbevent.o
  CC      drivers/firmware/efi/libstub/pci.o
  CC      arch/x86/kernel/unwind_orc.o
  CC      drivers/acpi/acpica/utxfmutex.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_idle.o
  CC      net/ipv4/af_inet.o
  CC      drivers/mmc/core/sdio_cis.o
  CC      fs/splice.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/mm.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_mcr.o
  CC [M]  drivers/gpu/drm/drm_color_mgmt.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_pch.o
  CC [M]  drivers/md/dm-crypt.o
  CC      net/ipv4/igmp.o
  CC      arch/x86/kernel/callthunks.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_mech.o
  CC      drivers/acpi/processor_idle.o
  CC [M]  drivers/gpu/drm/i915/i915_memcpy.o
  CC [M]  drivers/md/dm-thin.o
  CC      drivers/firmware/efi/libstub/skip_spaces.o
  CC [M]  drivers/md/dm-thin-metadata.o
  CC      drivers/firmware/efi/libstub/lib-cmdline.o
  CC      drivers/acpi/processor_throttling.o
  AR      drivers/platform/x86/amd/built-in.a
  CC [M]  drivers/platform/x86/intel/pmc/core.o
  AR      drivers/acpi/acpica/built-in.a
  CC [M]  drivers/platform/x86/intel/pmt/class.o
  CC      drivers/platform/x86/intel/turbo_max_3.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_pagefault.o
  AR      drivers/firmware/imx/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_sysfs.o
  CC [M]  drivers/gpu/drm/i915/i915_mm.o
  AR      drivers/firmware/psci/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_sw_fence.o
  CC      net/ipv4/fib_frontend.o
  AR      drivers/firmware/qcom/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_sw_fence_work.o
  CC      kernel/ucount.o
  AR      drivers/mmc/host/built-in.a
  CC [M]  drivers/gpu/drm/drm_connector.o
  CC      drivers/mailbox/mailbox.o
  CC      drivers/firmware/efi/libstub/lib-ctype.o
  CC      drivers/mailbox/pcc.o
  CC      drivers/firmware/efi/libstub/alignedmem.o
  CC      lib/iomap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/object.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.o
  CC      drivers/devfreq/devfreq.o
  CC [M]  drivers/devfreq/governor_simpleondemand.o
  CC      net/ipv4/fib_semantics.o
  CC      net/ipv6/xfrm6_state.o
  CC      drivers/mmc/core/sdio_io.o
  CC      lib/pci_iomap.o
  CC      drivers/mmc/core/sdio_irq.o
  CC      mm/migrate.o
  CC [M]  drivers/gpu/drm/drm_crtc.o
  CC      arch/x86/kernel/cet.o
  CC [M]  drivers/gpu/drm/i915/i915_syncmap.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_seal.o
  CC      net/bridge/br_stp_bpdu.o
  CC      kernel/regset.o
  CC      drivers/firmware/efi/libstub/relocate.o
  CC      fs/sync.o
  CC [M]  drivers/platform/x86/intel/pmt/telemetry.o
  CC      net/ipv4/fib_trie.o
  CC      net/ipv4/fib_notifier.o
  CC [M]  drivers/gpu/drm/drm_displayid.o
  CC      drivers/mmc/core/slot-gpio.o
  CC      drivers/acpi/processor_perflib.o
  AR      drivers/firmware/smccc/built-in.a
  CC [M]  drivers/devfreq/governor_performance.o
  AR      drivers/firmware/tegra/built-in.a
  AR      drivers/firmware/xilinx/built-in.a
  CC      drivers/mmc/core/regulator.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_unseal.o
  AR      drivers/mailbox/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_throttle_sysfs.o
  AR      drivers/net/ethernet/huawei/built-in.a
  CC      kernel/ksyms_common.o
  CC      drivers/powercap/powercap_sys.o
  CC      drivers/acpi/container.o
  AR      drivers/perf/built-in.a
  CC      drivers/hid/hid-quirks.o
  CC      lib/iomap_copy.o
  CC      drivers/powercap/intel_rapl_common.o
  CC      drivers/acpi/thermal_lib.o
  AR      net/dcb/built-in.a
  CC      drivers/acpi/thermal.o
  CC [M]  drivers/platform/x86/intel/pmc/core_ssram.o
  CC [M]  drivers/platform/x86/intel/pmt/crashlog.o
  CC      fs/utimes.o
  CC      fs/d_path.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/oproxy.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_wrap.o
  CC      lib/devres.o
  CC      arch/x86/kernel/mmconf-fam10h_64.o
  CC      drivers/firmware/efi/libstub/printk.o
  CC      kernel/groups.o
  CC      net/ipv6/xfrm6_input.o
  CC      drivers/hid/hid-debug.o
  CC [M]  drivers/platform/x86/intel/pmc/spt.o
  CC      net/sunrpc/xprt.o
  CC [M]  drivers/gpu/drm/i915/i915_user_extensions.o
  CC      net/ipv6/xfrm6_output.o
  CC      drivers/hid/hidraw.o
  CC [M]  drivers/net/usb/asix_common.o
  CC      drivers/firmware/efi/libstub/vsprintf.o
  CC [M]  drivers/gpu/drm/i915/i915_ioc32.o
  CC      drivers/hid/hid-generic.o
  CC [M]  drivers/platform/x86/intel/pmc/cnp.o
  CC      net/ipv6/xfrm6_protocol.o
  CC      net/ipv6/netfilter.o
  CC      drivers/acpi/acpi_memhotplug.o
  AR      drivers/devfreq/built-in.a
  CC      drivers/mmc/core/debugfs.o
  CC      net/ipv4/inet_fragment.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.o
  CC      fs/stack.o
  CC      kernel/vhost_task.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vf_error.o
  CC      net/ipv4/ping.o
  CC      drivers/platform/x86/p2sb.o
  CC      drivers/platform/x86/pmc_atom.o
  CC      net/bridge/br_stp_if.o
  LD [M]  drivers/md/dm-bio-prison.o
  CC      drivers/firmware/efi/libstub/x86-stub.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sched.o
  CC      drivers/firmware/dmi_scan.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_class.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_telemetry.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_crashlog.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.o
  CC [M]  drivers/gpu/drm/i915/i915_debugfs.o
  CC      net/sunrpc/socklib.o
  CC      net/bridge/br_stp_timer.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_crypto.o
  CC [M]  drivers/platform/x86/intel/pmc/icl.o
  CC      arch/x86/kernel/vsmp_64.o
  CC      net/ipv4/ip_tunnel_core.o
  CC      drivers/acpi/ioapic.o
  CC      net/ipv4/gre_offload.o
  CC      net/bridge/br_netlink.o
  CC      lib/check_signature.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/option.o
  CC      net/ipv6/fib6_rules.o
  CC      fs/btrfs/discard.o
  CC      fs/btrfs/reflink.o
  LD [M]  drivers/md/dm-thin-pool.o
  CC [M]  drivers/platform/x86/intel/vsec.o
  CC      kernel/kcmp.o
  CC      net/bridge/br_netlink_tunnel.o
  CC      drivers/powercap/intel_rapl_msr.o
  AR      drivers/md/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_debugfs_params.o
  CC      lib/interval_tree.o
  CC      net/sunrpc/xprtsock.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_topology.o
  CC      net/ipv4/metrics.o
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC      drivers/hid/hid-a4tech.o
  CC      kernel/freezer.o
  CC      mm/memory-tiers.o
  CC      drivers/mmc/core/block.o
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC      lib/assoc_array.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ads.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ids.o
  CC [M]  drivers/gpu/drm/drm_drv.o
  CC      fs/fs_struct.o
  CC [M]  drivers/platform/x86/intel/pmc/tgl.o
  AR      arch/x86/kernel/built-in.a
  CC [M]  drivers/net/usb/ax88172a.o
  AR      arch/x86/built-in.a
  CC      kernel/stacktrace.o
  CC      kernel/dma.o
  CC      net/ipv6/proc.o
  CC      drivers/firmware/efi/libstub/x86-5lvl.o
  CC      drivers/acpi/battery.o
  CC      net/ipv6/syncookies.o
  CC [M]  drivers/gpu/drm/drm_dumb_buffers.o
  CC      net/ipv6/mip6.o
  CC [M]  drivers/gpu/drm/drm_edid.o
  CC      drivers/mmc/core/queue.o
  CC      net/bridge/br_arp_nd_proxy.o
  CC      fs/btrfs/subpage.o
  AR      drivers/powercap/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/ramht.o
  CC      fs/btrfs/tree-mod-log.o
  CC      lib/list_debug.o
  CC [M]  drivers/gpu/drm/drm_eld.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_keys.o
  AR      drivers/platform/surface/built-in.a
  CC      net/ipv4/netlink.o
  CC      drivers/hid/hid-apple.o
  CC      fs/btrfs/extent-io-tree.o
  CC      drivers/ras/ras.o
  CC      fs/btrfs/fs.o
  CC [M]  drivers/platform/x86/wmi.o
  CC      drivers/ras/debugfs.o
  CC      fs/btrfs/messages.o
  CC [M]  drivers/platform/x86/intel/pmc/adl.o
  CC      net/ipv4/nexthop.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_main.o
  CC [M]  drivers/net/ethernet/intel/e1000e/82571.o
  CC      kernel/smp.o
  CC [M]  drivers/gpu/drm/i915/i915_pmu.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_main.o
  CC      lib/debugobjects.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ich8lan.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_ethtool.o
  CC      fs/btrfs/bio.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_main.o
  CC      net/l3mdev/l3mdev.o
  CC [M]  drivers/net/ethernet/intel/igbvf/vf.o
  STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
  CC      mm/migrate_device.o
  STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
  CC [M]  drivers/net/ethernet/intel/igbvf/mbx.o
  STUBCPY drivers/firmware/efi/libstub/file.stub.o
  CC [M]  drivers/platform/x86/wmi-bmof.o
  STUBCPY drivers/firmware/efi/libstub/gop.stub.o
  STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
  STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
  CC [M]  drivers/platform/x86/intel/pmc/mtl.o
  STUBCPY drivers/firmware/efi/libstub/mem.stub.o
  STUBCPY drivers/firmware/efi/libstub/pci.stub.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_hw.o
  STUBCPY drivers/firmware/efi/libstub/printk.stub.o
  STUBCPY drivers/firmware/efi/libstub/random.stub.o
  STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
  CC [M]  drivers/net/usb/ax88179_178a.o
  STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
  CC [M]  drivers/net/usb/cdc_ether.o
  STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
  STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
  STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
  CC      net/handshake/alert.o
  STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
  CC [M]  net/bluetooth/af_bluetooth.o
  STUBCPY drivers/firmware/efi/libstub/x86-5lvl.stub.o
  STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
  CC [M]  net/dns_resolver/dns_key.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ct.o
  AR      drivers/firmware/efi/libstub/lib.a
  CC      drivers/firmware/efi/esrt.o
  CC      net/ipv4/udp_tunnel_stub.o
  CC [M]  net/dns_resolver/dns_query.o
  LD [M]  net/sunrpc/auth_gss/auth_rpcgss.o
  CC [M]  drivers/net/usb/cdc_eem.o
  CC      drivers/acpi/hed.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/subdev.o
  CC      drivers/acpi/bgrt.o
  LD [M]  net/sunrpc/auth_gss/rpcsec_gss_krb5.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.o
  CC      net/ipv6/addrconf_core.o
  CC      drivers/hid/hid-belkin.o
  CC [M]  net/bluetooth/hci_core.o
  CC [M]  drivers/platform/x86/mxm-wmi.o
  CC [M]  drivers/gpu/drm/drm_encoder.o
  AR      drivers/ras/built-in.a
  CC      drivers/acpi/cppc_acpi.o
  CC      net/sunrpc/sched.o
  CC      fs/statfs.o
  CC      fs/btrfs/lru_cache.o
  CC      net/handshake/genl.o
  CC      lib/bitrev.o
  AR      drivers/mmc/core/built-in.a
  AR      drivers/mmc/built-in.a
  CC      net/bridge/br_sysfs_if.o
  CC [M]  drivers/platform/x86/intel/pmc/arl.o
  AR      net/l3mdev/built-in.a
  CC [M]  drivers/platform/x86/intel/pmc/lnl.o
  AR      drivers/hwtracing/intel_th/built-in.a
  CC [M]  drivers/net/ethernet/intel/igbvf/ethtool.o
  CC      lib/crc16.o
  CC      fs/btrfs/raid-stripe-tree.o
  CC      lib/crc-t10dif.o
  CC      kernel/uid16.o
  CC      drivers/acpi/spcr.o
  CC      drivers/firmware/efi/efi-pstore.o
  HOSTCC  lib/gen_crc32table
  LD [M]  net/dns_resolver/dns_resolver.o
  AR      drivers/net/ethernet/i825xx/built-in.a
  CC      net/devres.o
  AR      drivers/net/ethernet/microsoft/built-in.a
  AR      drivers/net/ethernet/litex/built-in.a
  CC      drivers/acpi/acpi_pad.o
  CC [M]  drivers/net/ethernet/intel/e1000e/80003es2lan.o
  CC      lib/libcrc32c.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_main.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_db_mgr.o
  CC [M]  drivers/gpu/drm/i915/gt/gen2_engine_cs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.o
  CC [M]  drivers/net/usb/smsc75xx.o
  CC      drivers/hid/hid-cherry.o
  CC      mm/huge_memory.o
  CC      lib/xxhash.o
  CC [M]  drivers/acpi/acpi_video.o
  CC      net/socket.o
  CC      net/sunrpc/auth.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/uevent.o
  CC      net/sunrpc/auth_null.o
  CC      net/compat.o
  CC [M]  drivers/platform/x86/intel_ips.o
  CC      drivers/hid/hid-chicony.o
  CC      net/handshake/netlink.o
  CC      mm/khugepaged.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_engine_cs.o
  CC      drivers/hid/hid-cypress.o
  CC [M]  drivers/acpi/video_detect.o
  CC      net/ipv4/sysctl_net_ipv4.o
  CC [M]  drivers/platform/x86/intel/pmc/pltdrv.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_common.o
  CC      net/ipv6/exthdrs_core.o
  CC      drivers/firmware/efi/cper.o
  CC      net/ipv6/ip6_checksum.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.o
  CC [M]  drivers/gpu/drm/drm_file.o
  CC [M]  drivers/net/ethernet/intel/igbvf/netdev.o
  CC [M]  drivers/gpu/drm/drm_fourcc.o
  CC      kernel/kallsyms.o
  CC      net/sysctl_net.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_ppgtt.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_hwconfig.o
  CC [M]  drivers/gpu/drm/drm_framebuffer.o
  CC      lib/genalloc.o
  CC      drivers/firmware/efi/cper_cxl.o
  CC      net/bridge/br_sysfs_br.o
  LD [M]  drivers/platform/x86/intel/pmc/intel_pmc_core.o
  CC      drivers/firmware/dmi-sysfs.o
  LD [M]  drivers/platform/x86/intel/pmc/intel_pmc_core_pltdrv.o
  CC [M]  drivers/platform/x86/intel/rst.o
  CC      net/bridge/br_nf_core.o
  CC      fs/btrfs/acl.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/fw.o
  CC [M]  net/bluetooth/hci_conn.o
  CC      drivers/hid/hid-ezkey.o
  CC      net/handshake/request.o
  CC      kernel/acct.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/hs.o
  CC      drivers/android/binderfs.o
  CC [M]  drivers/net/ethernet/intel/e1000e/mac.o
  CC      net/sunrpc/auth_tls.o
  CC      net/sunrpc/auth_unix.o
  CC [M]  drivers/gpu/drm/i915/gt/gen7_renderclear.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_ethtool.o
  CC      drivers/firmware/efi/runtime-wrappers.o
  CC      drivers/firmware/dmi-id.o
  CC      net/sunrpc/svc.o
  CC      drivers/firmware/memmap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/ls.o
  CC      net/ipv6/ip6_icmp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/acr.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_engine_cs.o
  AR      drivers/acpi/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/flcn.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_log.o
  LD [M]  drivers/acpi/video.o
  LD [M]  drivers/platform/x86/intel/intel_vsec.o
  LD [M]  drivers/platform/x86/intel/intel-rst.o
  AR      drivers/platform/x86/intel/built-in.a
  AR      drivers/nvmem/layouts/built-in.a
  CC      lib/percpu_counter.o
  AR      drivers/platform/x86/built-in.a
  CC      drivers/nvmem/core.o
  AR      drivers/platform/built-in.a
  CC      net/ipv4/proc.o
  CC [M]  drivers/net/usb/smsc95xx.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_82599.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_pc.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_submit.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_csa.o
  CC      drivers/hid/hid-kensington.o
  CC [M]  drivers/uio/uio.o
  CC [M]  drivers/mtd/chips/chipreg.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ras.o
  CC [M]  drivers/gpu/drm/xe/xe_heci_gsc.o
  CC      drivers/android/binder.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_ppgtt.o
  CC      net/bridge/br_multicast.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.o
  CC      kernel/crash_core.o
  CC [M]  drivers/vfio/pci/vfio_pci_core.o
  CC [M]  drivers/vfio/pci/vfio_pci_intrs.o
  AR      fs/btrfs/built-in.a
  CC      fs/fs_pin.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_mac.o
  CC [M]  drivers/vfio/pci/vfio_pci_rdwr.o
  CC      lib/fault-inject.o
  CC      drivers/firmware/efi/dev-path-parser.o
  CC [M]  drivers/vfio/pci/vfio_pci_config.o
  CC [M]  drivers/vfio/vfio_main.o
  CC      lib/syscall.o
  CC      kernel/compat.o
  CC      net/bridge/br_mdb.o
  CC [M]  drivers/gpu/drm/drm_gem.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/base.o
  CC [M]  drivers/pps/pps.o
  LD [M]  drivers/net/ethernet/intel/igbvf/igbvf.o
  CC      net/ipv6/output_core.o
  CC [M]  drivers/net/ethernet/intel/e1000e/manage.o
  CC [M]  drivers/bluetooth/btusb.o
  CC [M]  drivers/dca/dca-core.o
  CC [M]  drivers/bluetooth/btintel.o
  CC      drivers/hid/hid-lg.o
  CC [M]  drivers/mtd/mtdcore.o
  CC      net/handshake/tlshd.o
  AR      drivers/nvmem/built-in.a
  CC [M]  drivers/bluetooth/btbcm.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine.o
  CC      net/bridge/br_multicast_eht.o
  CC      fs/nsfs.o
  CC      drivers/hid/hid-lg-g15.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_82598.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
  CC      kernel/utsname.o
  CC      lib/dynamic_debug.o
  CC [M]  drivers/bluetooth/btrtl.o
  CC      drivers/firmware/efi/apple-properties.o
  CC      net/ipv4/syncookies.o
  CC [M]  drivers/ssb/main.o
  CC      net/ipv4/esp4.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_param.o
  CC [M]  drivers/ssb/scan.o
  CC      net/ipv4/esp4_offload.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_phy.o
  CC [M]  drivers/net/usb/mcs7830.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_i225.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_82575.o
  CC [M]  drivers/pps/kapi.o
  CC [M]  drivers/dca/dca-sysfs.o
  CC [M]  drivers/vhost/net.o
  CC [M]  drivers/vhost/vhost.o
  CC      mm/page_counter.o
  CC      kernel/user_namespace.o
  CC      fs/fs_types.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/cmdq.o
  CC [M]  drivers/vhost/iotlb.o
  CC [M]  drivers/net/usb/usbnet.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.o
  CC [M]  drivers/vfio/pci/vfio_pci.o
  CC      mm/memcontrol.o
  CC [M]  drivers/net/ethernet/intel/e1000e/nvm.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
  CC      net/ipv6/protocol.o
  CC [M]  net/bluetooth/hci_event.o
  CC      drivers/firmware/efi/earlycon.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/fw.o
  CC      net/handshake/trace.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_fence.o
  CC      drivers/android/binder_alloc.o
  CC      drivers/hid/hid-microsoft.o
  CC [M]  drivers/pps/sysfs.o
  CC [M]  drivers/net/ethernet/intel/e1000e/phy.o
  CC [M]  drivers/vfio/group.o
  CC      fs/fs_context.o
  LD [M]  drivers/dca/dca.o
  CC      fs/fs_parser.o
  CC [M]  drivers/gpu/drm/xe/xe_huc.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/vf.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.o
  CC [M]  drivers/ssb/sprom.o
  CC [M]  drivers/mtd/mtdsuper.o
  CC [M]  drivers/gpu/drm/drm_ioctl.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.o
  CC [M]  drivers/gpu/drm/drm_lease.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_base.o
  CC [M]  drivers/net/ethernet/intel/e1000e/param.o
  CC [M]  drivers/vfio/container.o
  LD [M]  drivers/net/ethernet/intel/e1000/e1000.o
  AR      drivers/net/ethernet/intel/built-in.a
  CC [M]  drivers/net/ethernet/intel/e100.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_nvm.o
  LD [M]  drivers/vfio/pci/vfio-pci-core.o
  CC      kernel/pid_namespace.o
  CC [M]  drivers/mtd/mtdconcat.o
  LD [M]  drivers/pps/pps_core.o
  LD [M]  drivers/vfio/pci/vfio-pci.o
  CC [M]  drivers/mtd/mtdpart.o
  CC      net/ipv4/netfilter.o
  CC [M]  drivers/vfio/virqfd.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/msgq.o
  CC      drivers/firmware/efi/cper-x86.o
  LD [M]  drivers/vhost/vhost_iotlb.o
  CC      lib/errname.o
  CC      lib/nlattr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.o
  CC [M]  drivers/net/usb/cdc_ncm.o
  CC      net/ipv6/ip6_offload.o
  CC      drivers/hid/hid-monterey.o
  CC      fs/fsopen.o
  CC [M]  drivers/vfio/vfio_iommu_type1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/v1.o
  CC      net/sunrpc/svcsock.o
  CC [M]  drivers/ssb/pci.o
  CC      lib/cpu_rmap.o
  CC [M]  drivers/net/usb/r8153_ecm.o
  CC [M]  drivers/mtd/mtdchar.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/mbx.o
  CC      net/sunrpc/svcauth.o
  CC [M]  drivers/gpu/drm/xe/xe_huc_debugfs.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_mac.o
  LD [M]  drivers/vhost/vhost_net.o
  CC [M]  drivers/ssb/pcihost_wrapper.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ethtool.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_context.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_context_sseu.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_cs.o
  CC      fs/init.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.o
  CC      net/ipv4/inet_diag.o
  AR      net/handshake/built-in.a
  CC      lib/dynamic_queue_limits.o
  AR      drivers/firmware/efi/built-in.a
  CC      net/sunrpc/svcauth_unix.o
  AR      drivers/firmware/built-in.a
  CC      lib/glob.o
  CC [M]  drivers/ssb/driver_chipcommon.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
  CC      lib/strncpy_from_user.o
  CC      net/sunrpc/addr.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_phy.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_x540.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_nvm.o
  UPD     kernel/config_data
  CC      lib/strnlen_user.o
  CC      kernel/stop_machine.o
  CC      lib/net_utils.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.o
  CC      net/ipv6/tcpv6_offload.o
  CC [M]  drivers/gpu/drm/drm_managed.o
  AR      drivers/hid/built-in.a
  CC [M]  drivers/gpu/drm/drm_mm.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_x550.o
  CC      net/ipv6/exthdrs_offload.o
  CC      fs/kernel_read_file.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ethtool.o
  CC      fs/mnt_idmapping.o
  CC [M]  drivers/gpu/drm/xe/xe_irq.o
  CC [M]  drivers/net/ethernet/intel/e1000e/netdev.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/gp102.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ptp.o
  CC      lib/sg_pool.o
  CC      kernel/kprobes.o
  CC      lib/stackdepot.o
  CC      net/bridge/br_vlan.o
  CC      net/bridge/br_vlan_tunnel.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_diag.o
  AR      drivers/net/ethernet/microchip/built-in.a
  AR      drivers/android/built-in.a
  AR      drivers/net/ethernet/mscc/built-in.a
  LD [M]  drivers/mtd/mtd.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ipsec.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_lib.o
  AR      drivers/net/ethernet/neterion/built-in.a
  CC [M]  drivers/net/ethernet/intel/igc/igc_ethtool.o
  LD [M]  drivers/vfio/vfio.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_ptp.o
  CC [M]  drivers/ssb/driver_chipcommon_pmu.o
  CC      net/bridge/br_vlan_options.o
  CC      kernel/hung_task.o
  CC      kernel/watchdog.o
  CC      fs/remap_range.o
  CC [M]  drivers/gpu/drm/drm_mode_config.o
  CC [M]  drivers/gpu/drm/drm_mode_object.o
  CC      fs/buffer.o
  LD [M]  drivers/net/usb/asix.o
  CC      lib/ref_tracker.o
  CC      net/ipv6/inet6_hashtables.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_phy.o
  CC      net/bridge/br_mst.o
  CC [M]  drivers/ssb/driver_pcicore.o
  CC      lib/ucs2_string.o
  CC [M]  drivers/gpu/drm/drm_modes.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_pm.o
  CC      mm/vmpressure.o
  CC      net/sunrpc/rpcb_clnt.o
  CC      lib/sbitmap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/ga100.o
  CC      net/ipv6/mcast_snoop.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/ga102.o
  CC [M]  net/bluetooth/mgmt.o
  CC      lib/group_cpus.o
  CC [M]  drivers/gpu/drm/xe/xe_lrc.o
  CC [M]  net/ipv6/ip6_udp_tunnel.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_user.o
  CC [M]  drivers/gpu/drm/xe/xe_migrate.o
  CC [M]  drivers/gpu/drm/xe/xe_mmio.o
  CC      net/ipv4/tcp_diag.o
  CC      lib/fw_table.o
  CC [M]  drivers/gpu/drm/xe/xe_mocs.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.o
  LD [M]  drivers/ssb/ssb.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_dump.o
  CC [M]  drivers/gpu/drm/drm_modeset_lock.o
  CC [M]  drivers/gpu/drm/xe/xe_module.o
  CC      kernel/watchdog_perf.o
  CC      mm/swap_cgroup.o
  CC      net/sunrpc/timer.o
  CC [M]  net/bridge/br_netfilter_hooks.o
  CC      mm/hugetlb_cgroup.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.o
  CC      kernel/seccomp.o
  CC      fs/mpage.o
  CC [M]  net/bridge/br_netfilter_ipv6.o
  CC [M]  drivers/gpu/drm/drm_plane.o
  CC      net/ipv4/udp_diag.o
  AR      drivers/net/ethernet/netronome/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_oa.o
  AR      drivers/net/ethernet/ni/built-in.a
  AR      drivers/net/ethernet/packetengines/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/lsfw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.o
  AR      drivers/net/ethernet/realtek/built-in.a
  CC [M]  drivers/net/ethernet/realtek/8139cp.o
  CC [M]  lib/crc-itu-t.o
  AR      drivers/net/ethernet/renesas/built-in.a
  AR      drivers/net/ethernet/sfc/built-in.a
  AR      drivers/net/ethernet/smsc/built-in.a
  CC [M]  drivers/net/ethernet/smsc/smsc9420.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_mbx.o
  CC [M]  drivers/gpu/drm/drm_prime.o
  CC [M]  lib/asn1_decoder.o
  CC [M]  drivers/gpu/drm/xe/xe_pat.o
  CC      kernel/relay.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_umc.o
  CC      kernel/utsname_sysctl.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_i210.o
  AR      net/ipv6/built-in.a
  CC [M]  drivers/net/ethernet/intel/igb/igb_ptp.o
  CC [M]  drivers/gpu/drm/drm_print.o
  CC      kernel/delayacct.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_hwmon.o
  CC [M]  drivers/net/ethernet/realtek/8139too.o
  AR      drivers/net/ethernet/socionext/built-in.a
  CC      kernel/taskstats.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_execlists_submission.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt.o
  CC      mm/kmemleak.o
  CC [M]  drivers/gpu/drm/xe/xe_pci.o
  CC [M]  drivers/gpu/drm/xe/xe_pcode.o
  CC [M]  drivers/gpu/drm/drm_property.o
  CC [M]  net/bluetooth/hci_sock.o
  CC      net/ipv4/tcp_cubic.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_tsn.o
  CC      net/sunrpc/xdr.o
  LD [M]  drivers/net/ethernet/intel/ixgbevf/ixgbevf.o
  CC      net/sunrpc/sunrpc_syms.o
  AR      net/bridge/built-in.a
  CC      net/sunrpc/cache.o
  CC [M]  drivers/gpu/drm/drm_syncobj.o
  GEN     lib/oid_registry_data.c
  CC [M]  lib/oid_registry.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_xdp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.o
  CC      net/ipv4/xfrm4_policy.o
  CC [M]  drivers/gpu/drm/drm_sysfs.o
  CC      net/sunrpc/rpc_pipe.o
  CC      fs/proc_namespace.o
  CC [M]  drivers/gpu/drm/xe/xe_perf.o
  CC      kernel/tsacct.o
  CC      fs/direct-io.o
  CC [M]  drivers/gpu/drm/drm_trace_points.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.o
  AR      drivers/net/ethernet/vertexcom/built-in.a
  AR      drivers/net/ethernet/wangxun/built-in.a
  CC      mm/page_isolation.o
  AR      drivers/net/ethernet/xilinx/built-in.a
  AR      drivers/net/ethernet/synopsys/built-in.a
  CC      net/ipv4/xfrm4_state.o
  AR      drivers/net/ethernet/pensando/built-in.a
  CC [M]  drivers/net/ethernet/realtek/r8169_main.o
  CC      fs/eventpoll.o
  CC      fs/anon_inodes.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
  CC [M]  drivers/gpu/drm/xe/xe_pm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.o
  CC [M]  drivers/gpu/drm/xe/xe_preempt_fence.o
  AR      lib/lib.a
  GEN     lib/crc32table.h
  CC [M]  drivers/gpu/drm/drm_vblank.o
  CC      lib/crc32.o
  CC [M]  drivers/gpu/drm/xe/xe_pt.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt.o
  CC      drivers/net/loopback.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.o
  CC [M]  drivers/net/vxlan/vxlan_core.o
  CC      drivers/net/netconsole.o
  CC [M]  drivers/net/vxlan/vxlan_multicast.o
  CC      kernel/tracepoint.o
  CC      fs/signalfd.o
  CC      net/ipv4/xfrm4_input.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.o
  CC      mm/early_ioremap.o
  CC [M]  drivers/gpu/drm/drm_vblank_work.o
  LD [M]  net/bridge/br_netfilter.o
  CC [M]  drivers/gpu/drm/xe/xe_pt_walk.o
  CC      fs/timerfd.o
  CC [M]  drivers/net/dummy.o
  CC      net/ipv4/xfrm4_output.o
  LD [M]  drivers/net/ethernet/intel/igb/igb.o
  CC      net/ipv4/xfrm4_protocol.o
  CC [M]  drivers/net/vxlan/vxlan_vnifilter.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.o
  CC [M]  drivers/gpu/drm/drm_vma_manager.o
  CC [M]  drivers/net/vxlan/vxlan_mdb.o
  LD [M]  drivers/net/ethernet/intel/e1000e/e1000e.o
  LD [M]  drivers/net/ethernet/intel/igc/igc.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.o
  CC      kernel/latencytop.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.o
  CC [M]  net/ipv4/ip_tunnel.o
  CC [M]  drivers/gpu/drm/xe/xe_query.o
  CC [M]  drivers/net/macvlan.o
  CC      fs/eventfd.o
  AR      lib/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_range_fence.o
  CC [M]  drivers/gpu/drm/drm_writeback.o
  CC      mm/cma.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_rap.o
  CC [M]  net/bluetooth/hci_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_sr.o
  CC [M]  drivers/net/ethernet/realtek/r8169_firmware.o
  CC      net/sunrpc/sysfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fw_attestation.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_whitelist.o
  CC      kernel/irq_work.o
  CC      fs/userfaultfd.o
  CC      fs/aio.o
  CC      net/sunrpc/svc_xprt.o
  CC      fs/locks.o
  CC      mm/secretmem.o
  CC [M]  drivers/net/mii.o
  CC [M]  drivers/gpu/drm/lib/drm_random.o
  CC      mm/userfaultfd.o
  CC      kernel/static_call.o
  CC      kernel/static_call_inline.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gv100.o
  CC [M]  drivers/net/mdio.o
  CC [M]  drivers/gpu/drm/xe/xe_rtp.o
  CC      net/sunrpc/xprtmultipath.o
  CC      fs/binfmt_script.o
  CC [M]  drivers/gpu/drm/drm_ioc32.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_securedisplay.o
  CC [M]  drivers/net/ethernet/realtek/r8169_phy_config.o
  CC [M]  drivers/net/tun.o
  CC [M]  net/ipv4/udp_tunnel_core.o
  CC [M]  net/ipv4/udp_tunnel_nic.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.o
  CC      mm/memremap.o
  CC [M]  drivers/gpu/drm/xe/xe_ring_ops.o
  CC      net/sunrpc/stats.o
  CC      kernel/numa.o
  CC      mm/hmm.o
  CC      mm/memfd.o
  AR      net/ipv4/built-in.a
  CC      mm/bootmem_info.o
  CC      fs/binfmt_elf.o
  CC      kernel/user-return-notifier.o
  CC      kernel/padata.o
  CC [M]  drivers/gpu/drm/xe/xe_sa.o
  CC [M]  drivers/gpu/drm/xe/xe_sched_job.o
  CC [M]  drivers/gpu/drm/xe/xe_step.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_sync.o
  CC [M]  drivers/gpu/drm/drm_panel.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
  CC [M]  drivers/gpu/drm/drm_pci.o
  CC      kernel/jump_label.o
  CC      fs/compat_binfmt_elf.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mca.o
  CC [M]  drivers/net/veth.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.o
  CC [M]  drivers/gpu/drm/drm_debugfs.o
  CC [M]  drivers/gpu/drm/drm_debugfs_crc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.o
  CC      net/sunrpc/sysctl.o
  CC      fs/backing-file.o
  CC [M]  drivers/gpu/drm/xe/xe_tile.o
  CC [M]  drivers/gpu/drm/xe/xe_tile_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_trace.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
  LD [M]  drivers/net/ethernet/realtek/r8169.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_lsdma.o
  CC [M]  net/bluetooth/l2cap_core.o
  CC [M]  drivers/gpu/drm/drm_edid_load.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_tuning.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.o
  CC      kernel/context_tracking.o
  CC      kernel/iomem.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga100.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_irq.o
  CC      fs/mbcache.o
  CC      kernel/rseq.o
  GZIP    kernel/config_data.gz
  CC      kernel/configs.o
  CC [M]  drivers/gpu/drm/xe/xe_uc.o
  CC      fs/posix_acl.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.o
  CC [M]  net/bluetooth/l2cap_sock.o
  CC [M]  drivers/gpu/drm/drm_panel_orientation_quirks.o
  CC [M]  drivers/gpu/drm/drm_exec.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_debugfs.o
  CC [M]  net/bluetooth/smp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga102.o
  CC [M]  drivers/gpu/drm/drm_gpuvm.o
  AR      mm/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_uc_fw.o
  CC      fs/coredump.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.o
  LD [M]  net/ipv4/udp_tunnel.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.o
  CC      fs/drop_caches.o
  CC      fs/sysctls.o
  CC [M]  drivers/gpu/drm/xe/xe_vm.o
  CC [M]  net/bluetooth/lib.o
  CC      fs/fhandle.o
  CC [M]  drivers/gpu/drm/xe/xe_vram_freq.o
  CC [M]  net/bluetooth/ecdh_helper.o
  AR      net/sunrpc/built-in.a
  AR      net/built-in.a
  CC [M]  net/bluetooth/hci_request.o
  CC [M]  net/bluetooth/mgmt_util.o
  CC [M]  drivers/gpu/drm/drm_buddy.o
  CC [M]  net/bluetooth/mgmt_config.o
  CC [M]  drivers/gpu/drm/xe/xe_wait_user_fence.o
  CC [M]  drivers/gpu/drm/drm_gem_shmem_helper.o
  CC [M]  drivers/gpu/drm/drm_suballoc.o
  CC [M]  net/bluetooth/hci_codec.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_mcr.o
  CC [M]  drivers/gpu/drm/xe/xe_wa.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.o
  CC [M]  drivers/gpu/drm/xe/xe_wopcm.o
  CC [M]  drivers/gpu/drm/drm_gem_ttm_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.o
  CC [M]  drivers/gpu/drm/xe/xe_hwmon.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.o
  CC [M]  net/bluetooth/eir.o
  CC [M]  drivers/gpu/drm/drm_atomic_helper.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
  AR      kernel/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_guc_relay.o
  LD [M]  drivers/net/ethernet/intel/ixgbe/ixgbe.o
  CC [M]  drivers/gpu/drm/xe/xe_memirq.o
  AR      drivers/net/ethernet/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik_ih.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v8_0.o
  CC [M]  drivers/gpu/drm/xe/xe_sriov.o
  CC [M]  net/bluetooth/hci_sync.o
  CC [M]  net/bluetooth/coredump.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v7_0.o
  LD [M]  drivers/net/vxlan/vxlan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.o
  AR      drivers/net/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_lmtt.o
  CC [M]  drivers/gpu/drm/xe/xe_lmtt_2l.o
  CC [M]  drivers/gpu/drm/xe/xe_lmtt_ml.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
  CC [M]  drivers/gpu/drm/drm_atomic_state_helper.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_irq.o
  CC [M]  net/bluetooth/sco.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik_sdma.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v4_2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_utils.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gk20a.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fb_bo.o
  CC [M]  drivers/gpu/drm/drm_bridge_connector.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fbdev_fb.o
  CC [M]  drivers/gpu/drm/drm_crtc_helper.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display.o
  CC [M]  drivers/gpu/drm/drm_damage_helper.o
  CC [M]  drivers/gpu/drm/drm_encoder_slave.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm107.o
  AR      fs/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm20b.o
  CC [M]  net/bluetooth/iso.o
  CC [M]  net/bluetooth/a2mp.o
  CC [M]  net/bluetooth/amp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/tu102.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_misc.o
  CC [M]  net/bluetooth/hci_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_requests.o
  CC [M]  drivers/gpu/drm/drm_flip_work.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_rps.o
  CC [M]  drivers/gpu/drm/xe/display/xe_dsb_buffer.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gtt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v6_0.o
  CC [M]  drivers/gpu/drm/drm_format_helper.o
  CC [M]  drivers/gpu/drm/drm_gem_atomic_helper.o
  CC [M]  drivers/gpu/drm/xe/display/xe_fb_pin.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_llc.o
  CC [M]  drivers/gpu/drm/drm_gem_framebuffer_helper.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_lrc.o
  CC [M]  drivers/gpu/drm/drm_kms_helper_common.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_migrate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.o
  CC [M]  drivers/gpu/drm/drm_modeset_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v6_0.o
  CC [M]  drivers/gpu/drm/drm_plane_helper.o
  CC [M]  drivers/gpu/drm/drm_probe_helper.o
  CC [M]  drivers/gpu/drm/drm_rect.o
  CC [M]  drivers/gpu/drm/drm_self_refresh_helper.o
  CC [M]  drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
  CC [M]  drivers/gpu/drm/drm_simple_kms_helper.o
  CC [M]  drivers/gpu/drm/bridge/panel.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si_ih.o
  CC [M]  drivers/gpu/drm/xe/display/xe_plane_initial.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/bit.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_dram.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/boost.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si_dma.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_pch.o
  CC [M]  drivers/gpu/drm/xe/i915-display/icl_dsi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/conn.o
  CC [M]  drivers/gpu/drm/drm_fbdev_generic.o
  CC [M]  drivers/gpu/drm/drm_fb_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/cstep.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/dcb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v3_1.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_mocs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_audio.o
  LD [M]  drivers/gpu/drm/drm.o
  LD [M]  drivers/gpu/drm/drm_shmem_helper.o
  LD [M]  drivers/gpu/drm/drm_suballoc_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_vi.o
  LD [M]  drivers/gpu/drm/drm_ttm_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/disp.o
  AR      drivers/gpu/drm/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/dp.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ppgtt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v6_1.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_rc6.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_region_lmem.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_renderstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/extdev.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_reset.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/fan.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_backlight.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bios.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ring.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_color.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/soc15.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/gpio.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/emu_soc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ring_submission.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 [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/iccsense.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/image.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_ai.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cursor.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/mxm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega10_reg_init.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/npde.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pcir.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pll.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_rps.o
  LD [M]  drivers/gpu/drm/drm_kms_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega20_reg_init.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_4.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sa_media.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v2_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pmu.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sseu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nv.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/arct_reg_init.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_timeline.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_tlb.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/power_budget.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_wopcm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/ramcfg.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_nv.o
  LD [M]  net/bluetooth/bluetooth.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_workarounds.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/amd/amdgpu/nbio_v7_2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v4_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v5_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowramin.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/aldebaran_reg_init.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/aldebaran.o
  CC [M]  drivers/gpu/drm/i915/gt/shmem_utils.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/soc21.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_device.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowrom.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_driver.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sienna_cichlid.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smu_v13_0_10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/timing.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/therm.o
  CC [M]  drivers/gpu/drm/i915/gt/sysfs_engines.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v4_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v6_0.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/vmap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_7.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_renderstate.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_irq.o
  CC [M]  drivers/gpu/drm/i915/gt/gen7_renderstate.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_renderstate.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_params.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v5_2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/lsdma_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/vpstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/xpio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0203.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0205.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0209.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_9.o
  CC [M]  drivers/gpu/drm/i915/gt/gen9_renderstate.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/P0260.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v1_7.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v3_6.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_busy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v4_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v4_6_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v7_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v8_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_trace.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_wa.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_clflush.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_context.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv31.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_create.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dmc.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_domain.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v10_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0.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/i915/gem/i915_gem_internal.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v11_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0_3.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_lmem.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_mman.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.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 [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_object.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v11_5_0.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_pages.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllnv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllgt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_7.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_phys.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v8_7.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_region.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v8_10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v12_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ih.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/iceland_ih.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_drrs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/tonga_ih.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cz_ih.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv10.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega10_ih.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv1a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv20.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_shmem.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega20_ih.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/navi10_ih.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/ih_v6_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/ih_v6_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_psp.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v3_1.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fdi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v10_0.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_stolen.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gv100.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v11_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/ga100.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_throttle.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_tiling.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v12_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/r535.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v13_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/user.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_global_state.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v10_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_gmbus.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdcp.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_userptr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdmi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_rlc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_wait.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gemfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.o
  CC [M]  drivers/gpu/drm/i915/i915_active.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.o
  CC [M]  drivers/gpu/drm/i915/i915_cmd_parser.o
  CC [M]  drivers/gpu/drm/i915/i915_deps.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v10_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/imu_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hti.o
  CC [M]  drivers/gpu/drm/i915/i915_gem.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_evict.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_gtt.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/amd/amdgpu/gfx_v11_0_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/imu_v11_0_3.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_ww.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.o
  CC [M]  drivers/gpu/drm/i915/i915_query.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
  CC [M]  drivers/gpu/drm/i915/i915_request.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.o
  CC [M]  drivers/gpu/drm/i915/i915_scheduler.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv46.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv47.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv49.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/i915/i915_trace_points.o
  CC [M]  drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.o
  CC [M]  drivers/gpu/drm/i915/i915_vma.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v2_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.o
  CC [M]  drivers/gpu/drm/i915/i915_vma_resource.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_panel.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v3_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_4.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pps.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v5_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v5_2.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp89.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_psr.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_quirks.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf108.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk104.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk110.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mes_v10_1.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mes_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_tc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vblank.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vdsc.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vga.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm20b.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vrr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp100.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v5_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp10b.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_wm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gv100.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v7_0.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_scaler.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vce.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v3_0.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga100.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/nouveau/nvkm/subdev/fb/ga102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v4_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_sw_ring.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v1_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v2_0.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv1a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v2_5.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv20.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_opregion.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v3_0.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v4_0.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbdev.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gsc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.o
  CC [M]  drivers/gpu/drm/i915/i915_hwmon.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.o
  CC [M]  drivers/gpu/drm/i915/display/hsw_ips.o
  CC [M]  drivers/gpu/drm/i915/display/i9xx_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv41.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.o
  CC [M]  drivers/gpu/drm/i915/display/i9xx_wm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv44.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv49.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv4e.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_atomic.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/rammcp77.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_atomic_plane.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.o
  CC [M]  drivers/gpu/drm/i915/display/intel_audio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf108.o
  CC [M]  drivers/gpu/drm/i915/display/intel_bios.o
  CC [M]  drivers/gpu/drm/i915/display/intel_bw.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_kunit_helpers.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vpe_v6_1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm107.o
  CC [M]  drivers/gpu/drm/i915/display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm200.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_color.o
  CC [M]  drivers/gpu/drm/i915/display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/xe/xe_guc.o
  CC [M]  drivers/gpu/drm/i915/display/intel_connector.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_umsch_mm.o
  HDRTEST drivers/gpu/drm/xe/abi/gsc_proxy_commands_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_klvs_abi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.o
  HDRTEST drivers/gpu/drm/xe/abi/gsc_command_header_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
  CC [M]  drivers/gpu/drm/i915/display/intel_crtc.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_errors_abi.h
  CC [M]  drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_slpc_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/gsc_mkhi_commands_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_mmio_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/umsch_mm_v4_0.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_messages_abi.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v1_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr2.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_cursor.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_irq.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband_reg.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v2_1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gddr3.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_wakeref.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pcode.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gddr5.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v3_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_driver.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gf100.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg_defs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v9_0.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_trace.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v11_0.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v11_0_6.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_irq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0_6.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_reset.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_params.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_utils.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_config.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power_map.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power_well.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/mca_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_module.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_chardev.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem_stolen.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_mchbar_regs.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display_reset.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_debugfs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gpu_error.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_pch.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_dram.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_gmch.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vgpu.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_topology.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_pasid.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_doorbell.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_flat_memory.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu116.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_queue.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_rps.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga100.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_fixed.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_cik.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_runtime_pm.h
  CC [M]  drivers/gpu/drm/i915/display/intel_display_wa.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_vi.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_step.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uc_fw.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dmc.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpio_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v9.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpll.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v10.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pci_config.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_lmem.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv50.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_mman.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_kernel_queue.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf117.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk110.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gm200.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_vi.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object_frontbuffer.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_clock_gating.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv04.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_gt_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
  CC [M]  drivers/gpu/drm/i915/display/intel_dpt_common.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active.h
  HDRTEST drivers/gpu/drm/xe/display/xe_display.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv4e.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_v9.o
  HDRTEST drivers/gpu/drm/xe/display/intel_fb_bo.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process_queue_manager.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager.o
  HDRTEST drivers/gpu/drm/xe/display/intel_fbdev_fb.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_cik.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_vi.o
  CC [M]  drivers/gpu/drm/i915/display/intel_drrs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padg94.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v9.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsb_buffer.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv4e.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv50.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb_bo.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb_pin.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busgf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bit.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_instr_defs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gsc_commands.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fbc.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_mi_commands.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_interrupt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_gsc_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_events.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_reg_defs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_oa_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_guc_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_gt_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/cik_event_interrupt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v9.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_pcode_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v10.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_gpu_commands.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_sriov_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_lrc_layout.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_mchbar_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_engine_regs.h
  CC [M]  drivers/gpu/drm/i915/display/intel_fdi.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_test.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_kunit_helpers.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_pci_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_migrate_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_dma_buf_test.h
  CC [M]  drivers/gpu/drm/i915/display/intel_fifo_underrun.o
  CC [M]  drivers/gpu/drm/i915/display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v11.o
  CC [M]  drivers/gpu/drm/i915/display/intel_global_state.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdcp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_smi_events.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hotplug.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_mocs_test.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hotplug_irq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_bo_test.h
  HDRTEST drivers/gpu/drm/xe/xe_assert.h
  HDRTEST drivers/gpu/drm/xe/xe_bb.h
  CC [M]  drivers/gpu/drm/i915/display/intel_hti.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp102.o
  HDRTEST drivers/gpu/drm/xe/xe_bb_types.h
  HDRTEST drivers/gpu/drm/xe/xe_bo.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_crat.o
  HDRTEST drivers/gpu/drm/xe/xe_bo_doc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/ga102.o
  CC [M]  drivers/gpu/drm/i915/display/intel_link_bw.o
  HDRTEST drivers/gpu/drm/xe/xe_bo_evict.h
  CC [M]  drivers/gpu/drm/i915/display/intel_load_detect.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debug.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debugfs.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lpe_audio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_lock.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_svm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_migrate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_setup.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.o
  HDRTEST drivers/gpu/drm/xe/xe_bo_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_verify.o
  HDRTEST drivers/gpu/drm/xe/xe_debugfs.h
  CC [M]  drivers/gpu/drm/i915/display/intel_overlay.o
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump_types.h
  HDRTEST drivers/gpu/drm/xe/xe_device.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pch_display.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pch_refclk.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.o
  CC [M]  drivers/gpu/drm/i915/display/intel_plane_initial.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pmdemand.o
  CC [M]  drivers/gpu/drm/i915/display/intel_psr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_quirks.o
  CC [M]  drivers/gpu/drm/i915/display/intel_sprite.o
  CC [M]  drivers/gpu/drm/i915/display/intel_sprite_uapi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp10b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/ga100.o
  HDRTEST drivers/gpu/drm/xe/xe_device_sysfs.h
  CC [M]  drivers/gpu/drm/i915/display/intel_tc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gc_9_4_3.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vblank.o
  HDRTEST drivers/gpu/drm/xe/xe_device_types.h
  HDRTEST drivers/gpu/drm/xe/xe_dma_buf.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv44.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/g84.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vga.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_wm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk20a.o
  HDRTEST drivers/gpu/drm/xe/xe_drm_client.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.o
  CC [M]  drivers/gpu/drm/i915/display/skl_scaler.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.o
  HDRTEST drivers/gpu/drm/xe/xe_drv.h
  CC [M]  drivers/gpu/drm/i915/display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gv100.o
  HDRTEST drivers/gpu/drm/xe/xe_exec.h
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/tu102.o
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/r535.o
  CC [M]  drivers/gpu/drm/i915/display/skl_watermark.o
  HDRTEST drivers/gpu/drm/xe/xe_execlist.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mem.o
  CC [M]  drivers/gpu/drm/i915/display/intel_acpi.o
  CC [M]  drivers/gpu/drm/i915/display/intel_opregion.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv04.o
  HDRTEST drivers/gpu/drm/xe/xe_execlist_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memgf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.o
  HDRTEST drivers/gpu/drm/xe/xe_force_wake.h
  HDRTEST drivers/gpu/drm/xe/xe_force_wake_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fbdev.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv04.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fbdev_fb.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_debugfs_params.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.o
  HDRTEST drivers/gpu/drm/xe/xe_ggtt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv44.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.o
  HDRTEST drivers/gpu/drm/xe/xe_ggtt_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmmcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk104.o
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_job.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pipe_crc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk20a.o
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gsc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_acp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../acp/acp_hw.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ch7017.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ch7xxx.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ioc32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm20b.o
  HDRTEST drivers/gpu/drm/xe/xe_gsc_proxy.h
  HDRTEST drivers/gpu/drm/xe/xe_gsc_submit.h
  HDRTEST drivers/gpu/drm/xe/xe_gsc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_ccs_mode.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_clock.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_freq.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp10b.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_mcr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/arcturus_ppt.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ivch.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/navi10_ppt.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ns2501.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_sil164.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_pagefault.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_tfp410.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/vangogh_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/umem.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ummu.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_printk.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/cyan_skillfish_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/smu_v11_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/renoir_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_sriov_printk.h
  CC [M]  drivers/gpu/drm/i915/display/g4x_dp.o
  CC [M]  drivers/gpu/drm/i915/display/g4x_hdmi.o
  CC [M]  drivers/gpu/drm/i915/display/icl_dsi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/uvmm.o
  CC [M]  drivers/gpu/drm/i915/display/intel_backlight.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/smu_v12_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/mxms.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_crt.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_throttle_sysfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/aldebaran_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/yellow_carp_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/agp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_0_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_topology.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_ddi.o
  HDRTEST drivers/gpu/drm/xe/xe_guc.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads.h
  CC [M]  drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_db_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_4_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_fwif.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_device.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_trace.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dkl_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_5_ppt.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_hwconfig.h
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_aux.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_7_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_log.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_log_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_6_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_relay.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_relay_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu14/smu_v14_0.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.o
  HDRTEST drivers/gpu/drm/xe/xe_heci_gsc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_hdcp.o
  HDRTEST drivers/gpu/drm/xe/xe_huc_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu14/smu_v14_0_0_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/amdgpu_smu.o
  HDRTEST drivers/gpu/drm/xe/xe_huc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu_cmn.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_link_training.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/memx.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu8_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/tonga_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_mst.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/fiji_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_hwmon.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/polaris10_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi_vbt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/iceland_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dvo.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu7_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_irq.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.o
  HDRTEST drivers/gpu/drm/xe/xe_lmtt.h
  HDRTEST drivers/gpu/drm/xe/xe_lmtt_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_gmbus.o
  HDRTEST drivers/gpu/drm/xe/xe_lrc.h
  CC [M]  drivers/gpu/drm/i915/display/intel_hdmi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lspcon.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lvds.o
  CC [M]  drivers/gpu/drm/i915/display/intel_panel.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega10_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_lrc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf117.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk20a.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pps.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gm200.o
  CC [M]  drivers/gpu/drm/i915/display/intel_qp_tables.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu10_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_sdvo.o
  HDRTEST drivers/gpu/drm/xe/xe_macros.h
  HDRTEST drivers/gpu/drm/xe/xe_map.h
  CC [M]  drivers/gpu/drm/i915/display/intel_snps_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/ci_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega12_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vegam_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_tv.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu9_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_memirq.h
  HDRTEST drivers/gpu/drm/xe/xe_memirq_types.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fan.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vdsc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega20_smumgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vrr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fannil.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fanpwm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fantog.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/hwmgr.o
  HDRTEST drivers/gpu/drm/xe/xe_migrate_doc.h
  CC [M]  drivers/gpu/drm/i915/display/vlv_dsi.o
  HDRTEST drivers/gpu/drm/xe/xe_mmio.h
  CC [M]  drivers/gpu/drm/i915/display/vlv_dsi_pll.o
  CC [M]  drivers/gpu/drm/i915/i915_perf.o
  HDRTEST drivers/gpu/drm/xe/xe_mocs.h
  HDRTEST drivers/gpu/drm/xe/xe_module.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/processpptables.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/hardwaremanager.o
  HDRTEST drivers/gpu/drm/xe/xe_oa.h
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu8_hwmgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/ic.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pppcielanes.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/temp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv50.o
  HDRTEST drivers/gpu/drm/xe/xe_oa_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/process_pptables_v1_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomctrl.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_cmd.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/g84.o
  HDRTEST drivers/gpu/drm/xe/xe_pat.h
  HDRTEST drivers/gpu/drm/xe/xe_pci.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomfwctrl.o
  HDRTEST drivers/gpu/drm/xe/xe_pci_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_hwmgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gt215.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf100.o
  HDRTEST drivers/gpu/drm/xe/xe_pcode.h
  HDRTEST drivers/gpu/drm/xe/xe_pcode_api.h
  HDRTEST drivers/gpu/drm/xe/xe_perf.h
  HDRTEST drivers/gpu/drm/xe/xe_platform_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf119.o
  HDRTEST drivers/gpu/drm/xe/xe_pm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm200.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_gsccs.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_powertune.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_thermal.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_clockpowergating.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_processpptables.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_hwmgr.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_pm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_powertune.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_thermal.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu10_hwmgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pp_psm.o
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence_types.h
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_session.o
  HDRTEST drivers/gpu/drm/xe/xe_pt.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_types.h
  CC [M]  drivers/gpu/drm/i915/i915_gpu_error.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.o
  CC [M]  drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.o
  HDRTEST drivers/gpu/drm/xe/xe_pt_walk.h
  HDRTEST drivers/gpu/drm/xe/xe_query.h
  CC [M]  drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.o
  HDRTEST drivers/gpu/drm/xe/xe_range_fence.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_processpptables.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_hwmgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv40.o
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv41.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.o
  CC [M]  drivers/gpu/drm/i915/selftests/i915_random.o
  CC [M]  drivers/gpu/drm/i915/selftests/i915_selftest.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/uvfn.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_thermal.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_atomic.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pp_overdriver.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_flush_test.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu_helper.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_live_test.o
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_processpptables.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_mmap.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_hwmgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_powertune.o
  HDRTEST drivers/gpu/drm/xe/xe_reg_whitelist.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_thermal.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_reset.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/gv100.o
  HDRTEST drivers/gpu/drm/xe/xe_res_cursor.h
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/tu102.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_spinner.o
  CC [M]  drivers/gpu/drm/i915/selftests/intel_scheduler_helpers.o
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops_types.h
  CC [M]  drivers/gpu/drm/i915/selftests/librapl.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/common_baco.o
  HDRTEST drivers/gpu/drm/xe/xe_rtp.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_baco.o
  HDRTEST drivers/gpu/drm/xe/xe_rtp_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sa.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/ga100.o
  CC [M]  drivers/gpu/drm/i915/i915_vgpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dkl_phy_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_baco.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/r535.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.o
  HDRTEST drivers/gpu/drm/i915/display/intel_crtc_state_dump.h
  HDRTEST drivers/gpu/drm/xe/xe_sa_types.h
  HDRTEST drivers/gpu/drm/i915/display/hsw_ips.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gpio.o
  HDRTEST drivers/gpu/drm/xe/xe_sched_job.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/g4x_hdmi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf117.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu9_baco.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.o
  HDRTEST drivers/gpu/drm/i915/display/intel_overlay.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/tonga_baco.o
  HDRTEST drivers/gpu/drm/i915/display/skl_watermark_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dmc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.o
  HDRTEST drivers/gpu/drm/xe/xe_sched_job_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_vga.h
  HDRTEST drivers/gpu/drm/xe/xe_sriov.h
  HDRTEST drivers/gpu/drm/i915/display/intel_audio.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lvds.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/polaris_baco.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/fiji_baco.o
  HDRTEST drivers/gpu/drm/xe/xe_sriov_printk.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ci_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/falcon.o
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_setup.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_baco.o
  HDRTEST drivers/gpu/drm/i915/display/intel_cdclk.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/amd_powerplay.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_limits.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/legacy_dpm.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_dpm.o
  HDRTEST drivers/gpu/drm/xe/xe_sriov_types.h
  HDRTEST drivers/gpu/drm/xe/xe_step.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_smc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/xtensa.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hotplug.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dkl_phy.h
  HDRTEST drivers/gpu/drm/i915/display/intel_atomic.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_dpm.o
  HDRTEST drivers/gpu/drm/i915/display/intel_color_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_driver.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dpll.h
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_pll_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_mst.h
  HDRTEST drivers/gpu/drm/xe/xe_step_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_smc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fdi_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gp102.o
  HDRTEST drivers/gpu/drm/i915/display/g4x_dp.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm_internal.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gv100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_tc.h
  HDRTEST drivers/gpu/drm/xe/xe_sync.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_params.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/ga100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_frontbuffer.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crtc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_irq.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi_vbt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.o
  HDRTEST drivers/gpu/drm/xe/xe_sync_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_psr.h
  HDRTEST drivers/gpu/drm/xe/xe_tile.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.o
  HDRTEST drivers/gpu/drm/i915/display/intel_crt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.o
  HDRTEST drivers/gpu/drm/i915/display/intel_opregion.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_color.o
  HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy_regs.h
  HDRTEST drivers/gpu/drm/i915/display/i9xx_wm.h
  HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_services.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_helpers.o
  HDRTEST drivers/gpu/drm/i915/display/intel_global_state.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lpe_audio.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_pp_smu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_drrs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_psr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb_buffer.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_rps.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_replay.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/pci.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_wb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/dc_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_hdcp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/user.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/conversion.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmi.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fbdev.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/fixpt31_32.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/vector.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/head.o
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_pps_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hdmi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.o
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/dc_common.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fdi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/dce_calcs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/vga.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fb.h
  HDRTEST drivers/gpu/drm/i915/display/intel_qp_tables.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/custom_float.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/bw_fixed.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vdsc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.o
  HDRTEST drivers/gpu/drm/xe/xe_trace.h
  HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_interface.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_core.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_sys_mgr.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_pll.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_common.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper2.o
  HDRTEST drivers/gpu/drm/xe/xe_tuning.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo_dev.h
  HDRTEST drivers/gpu/drm/xe/xe_uc.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser2.o
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp.h
  HDRTEST drivers/gpu/drm/i915/display/intel_sdvo_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_abi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce60/command_table_helper_dce60.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pch_refclk.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce80/command_table_helper_dce80.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce110/command_table_helper_dce110.o
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_lock.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_trace.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper_dce112.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper2_dce112.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_mode_lib.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_rq_dlg_helpers.o
  HDRTEST drivers/gpu/drm/xe/xe_uc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_vm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dml1_display_rq_dlg_calc.o
  HDRTEST drivers/gpu/drm/xe/xe_vm_doc.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ad102.o
  HDRTEST drivers/gpu/drm/xe/xe_vram_freq.h
  HDRTEST drivers/gpu/drm/xe/xe_wa.h
  HDRTEST drivers/gpu/drm/i915/display/i9xx_plane.h
  HDRTEST drivers/gpu/drm/xe/xe_wait_user_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn10/dcn10_fpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_backlight.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpll_mgr.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/dcn20_fpu.o
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/udisp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_mode_vba.o
  HDRTEST drivers/gpu/drm/xe/xe_wopcm_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_plane_initial.h
  LD [M]  drivers/gpu/drm/xe/xe.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uhead.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/nv04.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_device.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20v2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20v2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fifo_underrun.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gf119.o
  HDRTEST drivers/gpu/drm/i915/display/intel_cursor.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_rq_dlg_calc_21.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_mode_vba_21.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/user.o
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpt_common.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/dcn30_fpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_mode_vba_30.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_rq_dlg_calc_30.o
  HDRTEST drivers/gpu/drm/i915/display/skl_scaler.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_mode_vba_31.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fb_bo.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hti.h
  HDRTEST drivers/gpu/drm/i915/display/icl_dsi_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.o
  HDRTEST drivers/gpu/drm/i915/display/intel_atomic_plane.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_rq_dlg_calc_31.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/cgrp.o
  HDRTEST drivers/gpu/drm/i915/display/skl_watermark.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fbc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_reg_defs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_acpi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_connector.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/chid.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dpt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_rq_dlg_calc_314.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_32.o
  HDRTEST drivers/gpu/drm/i915/display/intel_quirks.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_link_training.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.o
  HDRTEST drivers/gpu/drm/i915/display/intel_color.h
  HDRTEST drivers/gpu/drm/i915/display/intel_crtc.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_debugfs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_verify.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_rq_dlg_calc_32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/runq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power_well.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_util_32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/g98.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/dcn31_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk110.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/dcn32_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn321/dcn321_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn301/dcn301_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn302/dcn302_fpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_psr_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn303/dcn303_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/dcn314_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/r535.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/ucgrp.o
  HDRTEST drivers/gpu/drm/i915/display/intel_wm.h
  HDRTEST drivers/gpu/drm/i915/display/intel_pipe_crc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/uchan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/base.o
  HDRTEST drivers/gpu/drm/i915/display/intel_audio_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn35/dcn35_fpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_panel.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dsc/rc_calc_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calcs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.o
  HDRTEST drivers/gpu/drm/i915/display/intel_sprite.h
  HDRTEST drivers/gpu/drm/i915/display/intel_wm_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_tv.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv15.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv17.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fbdev_fb.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_math.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hti_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_vrr.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_auto.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce60/dce60_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_load_detect.h
  HDRTEST drivers/gpu/drm/i915/display/skl_universal_plane.h
  HDRTEST drivers/gpu/drm/i915/display/intel_mg_phy_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce100/dce_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_bw.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_irq.h
  HDRTEST drivers/gpu/drm/i915/display/intel_de.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lvds_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce110/dce110_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_gmbus_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv44.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.o
  HDRTEST drivers/gpu/drm/i915/display/intel_sdvo.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gt200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce112/dce112_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux.h
  HDRTEST drivers/gpu/drm/i915/display/intel_vdsc_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce120/dce120_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv1_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp79.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv1_clk_mgr_vbios_smu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gt215.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp89.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_gmbus.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv2_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn20/dcn20_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dmc_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_ddi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hotplug_irq.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn201/dcn201_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_tv_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.o
  HDRTEST drivers/gpu/drm/i915/display/intel_bios.h
  HDRTEST drivers/gpu/drm/i915/display/intel_pch_display.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf117.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf119.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.o
  HDRTEST drivers/gpu/drm/i915/display/intel_backlight.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn21/rn_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vblank.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pmdemand.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn21/rn_clk_mgr_vbios_smu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_backlight_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.o
  HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn30/dcn30_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_reset.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power_map.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn301/vg_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gm20b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_wa.h
  HDRTEST drivers/gpu/drm/i915/display/icl_dsi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lspcon.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn301/dcn301_smu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn31/dcn31_smu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn31/dcn31_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn314/dcn314_smu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn314/dcn314_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dpio_phy.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_hdcp.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn315/dcn315_smu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fb_pin.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn315/dcn315_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_debugfs_params.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn316/dcn316_smu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_link_bw.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp107.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pps.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn316/dcn316_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp108.o
  HDRTEST drivers/gpu/drm/i915/display/intel_sprite_uapi.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp10b.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_region.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context_types.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_lmem.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_mman.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn32/dcn32_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn32/dcn32_clk_mgr_smu_msg.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ga102.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_clflush.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ad102.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_tiling.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_stolen.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn35/dcn35_smu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn35/dcn35_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_audio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxnv40.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_create.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_stream_encoder.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxnv50.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_move.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_link_encoder.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ioctls.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf104.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_domain.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_internal.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf108.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf110.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_dmabuf.h
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_context.h
  HDRTEST drivers/gpu/drm/i915/gem/selftests/huge_gem_object.h
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_gem_object.h
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_mem_input.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_clock_source.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_scl_filters.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_transform.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf117.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_pm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_opp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_shrinker.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_dmcu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_abm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gemfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_ipp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_aux.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_i2c.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_timeline_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_i2c_hw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_i2c_sw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dmub_psr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dmub_abm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm20b.o
  HDRTEST drivers/gpu/drm/i915/gt/selftest_engine.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_breadcrumbs.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_context_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dmub_abm_lcd.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dce/dce_panel_cntl.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_execlists_submission.h
  HDRTEST drivers/gpu/drm



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

* ✗ CI.Hooks: failure for Add OA functionality to Xe (rev9)
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (19 preceding siblings ...)
  2024-02-08  6:01 ` ✓ CI.Build: " Patchwork
@ 2024-02-08  6:02 ` Patchwork
  2024-02-08  6:03 ` ✓ CI.checksparse: success " Patchwork
                   ` (2 subsequent siblings)
  23 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2024-02-08  6:02 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

== Series Details ==

Series: Add OA functionality to Xe (rev9)
URL   : https://patchwork.freedesktop.org/series/121084/
State : failure

== Summary ==

run-parts: executing /workspace/ci/hooks/00-showenv
/workspace
+ pwd
+ ls -la
total 1076
drwxrwxr-x 12 1003 1003   4096 Feb  8 06:01 .
drwxr-xr-x  1 root root   4096 Feb  8 06:01 ..
-rw-rw-r--  1 1003 1003 820136 Feb  8 06:01 build.log
-rw-rw-r--  1 1003 1003   3431 Feb  8 05:53 checkpatch.log
drwxrwxr-x  5 1003 1003   4096 Feb  8 05:50 ci
drwxrwxr-x  9 1003 1003   4096 Feb  8 05:50 docker
drwxrwxr-x  8 1003 1003   4096 Feb  8 05:50 .git
-rw-rw-r--  1 1003 1003    998 Feb  8 05:52 git_apply.log
drwxrwxr-x  4 1003 1003   4096 Feb  8 05:50 .github
-rw-rw-r--  1 1003 1003    233 Feb  8 05:50 .groovylintrc.json
-rw-rw-r--  1 1003 1003     78 Feb  8 06:01 hooks.log
drwxrwxr-x 31 1003 1003   4096 Feb  8 06:01 kernel
-rw-rw-r--  1 1003 1003 149650 Feb  8 05:52 kernel.mbox
-rw-rw-r--  1 1003 1003  51932 Feb  8 05:54 kunit.log
-rw-rw-r--  1 1003 1003     48 Feb  8 05:52 parent.tag
drwxrwxr-x 44 1003 1003   4096 Feb  8 05:50 pipelines
-rw-rw-r--  1 1003 1003    793 Feb  8 05:50 README.adoc
drwxrwxr-x  3 1003 1003   4096 Feb  8 05:50 scripts
drwxrwxr-x  3 1003 1003   4096 Feb  8 05:50 src
drwxrwxr-x  2 1003 1003   4096 Feb  8 05:50 vars
drwxrwxr-x  2 1003 1003   4096 Feb  8 05:50 .vscode
+ uname -a
Linux 0ce49daa0b9b 5.4.0-164-generic #181-Ubuntu SMP Fri Sep 1 13:41:22 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
+ 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"
+ '[' -n /workspace ']'
+ git_args='-C /workspace/kernel'
+ git_log_args=
+ git --no-pager -C /workspace/kernel log --format=oneline --abbrev-commit
66f587ab1 drm/xe/oa: Override GuC RC with OA on PVC
0721016a2 drm/xe/oa: Add MMIO trigger support
e6d6e48f9 drm/xe/oa/uapi: OA buffer mmap
2331a8adb drm/xe/oa/uapi: Query OA unit properties
5c2b738e0 drm/xe/oa: Add OAC support
c857f5dde drm/xe/oa: Add OAR support
682beac55 drm/xe/oa: Disable overrun mode for Xe2+ OAG
7316cfc71 drm/xe/oa/uapi: Read file_operation
27d462ab8 drm/xe/oa/uapi: Expose OA stream fd
ffe009333 drm/xe/oa: OA stream initialization (OAG)
9e4695063 drm/xe/oa/uapi: Define and parse OA stream properties
d5ebf601b drm/xe/oa/uapi: Add/remove OA config perf ops
44a32d47f drm/xe/oa/uapi: Initialize OA units
df01eaab3 drm/xe/oa/uapi: Add OA data formats
719be21bf drm/xe/perf/uapi: Add perf_stream_paranoid sysctl
f2ce5d3c2 drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types
a942be9b4 drm-tip: 2024y-02m-08d-00h-15m-57s UTC integration manifest
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/generated/compile.h
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool 
  UPD     include/config/kernel.release
  UPD     include/generated/utsrelease.h
  HOSTCC  /workspace/kernel/build64-default/tools/objtool/fixdep.o
  CALL    ../scripts/checksyscalls.sh
  HOSTLD  /workspace/kernel/build64-default/tools/objtool/fixdep-in.o
  LINK    /workspace/kernel/build64-default/tools/objtool/fixdep
  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/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/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.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 M=drivers/gpu/drm/xe W=1
make[1]: Entering directory '/workspace/kernel/build64-default'
  CC [M]  drivers/gpu/drm/xe/xe_bb.o
  CC [M]  drivers/gpu/drm/xe/xe_bo.o
  CC [M]  drivers/gpu/drm/xe/xe_bo_evict.o
  CC [M]  drivers/gpu/drm/xe/xe_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_devcoredump.o
  CC [M]  drivers/gpu/drm/xe/xe_device.o
  CC [M]  drivers/gpu/drm/xe/xe_device_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_dma_buf.o
  CC [M]  drivers/gpu/drm/xe/xe_drm_client.o
  CC [M]  drivers/gpu/drm/xe/xe_exec.o
  CC [M]  drivers/gpu/drm/xe/xe_execlist.o
  CC [M]  drivers/gpu/drm/xe/xe_exec_queue.o
  CC [M]  drivers/gpu/drm/xe/xe_force_wake.o
  CC [M]  drivers/gpu/drm/xe/xe_ggtt.o
  CC [M]  drivers/gpu/drm/xe/xe_gpu_scheduler.o
  HOSTCC  drivers/gpu/drm/xe/xe_gen_wa_oob
  CC [M]  drivers/gpu/drm/xe/xe_gsc_proxy.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_submit.o
  CC [M]  drivers/gpu/drm/xe/xe_gt.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_ccs_mode.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_clock.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_freq.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_idle.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_mcr.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_pagefault.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_throttle_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_topology.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ads.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ct.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_db_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_hwconfig.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_log.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_pc.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_submit.o
  CC [M]  drivers/gpu/drm/xe/xe_heci_gsc.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_huc.o
  CC [M]  drivers/gpu/drm/xe/xe_huc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_irq.o
  CC [M]  drivers/gpu/drm/xe/xe_lrc.o
  CC [M]  drivers/gpu/drm/xe/xe_mmio.o
  CC [M]  drivers/gpu/drm/xe/xe_mocs.o
  CC [M]  drivers/gpu/drm/xe/xe_module.o
  CC [M]  drivers/gpu/drm/xe/xe_oa.o
  CC [M]  drivers/gpu/drm/xe/xe_pat.o
  CC [M]  drivers/gpu/drm/xe/xe_pci.o
  CC [M]  drivers/gpu/drm/xe/xe_pcode.o
  CC [M]  drivers/gpu/drm/xe/xe_pm.o
  CC [M]  drivers/gpu/drm/xe/xe_perf.o
  CC [M]  drivers/gpu/drm/xe/xe_preempt_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_pt.o
  CC [M]  drivers/gpu/drm/xe/xe_pt_walk.o
  CC [M]  drivers/gpu/drm/xe/xe_query.o
  CC [M]  drivers/gpu/drm/xe/xe_range_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_sr.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_whitelist.o
  CC [M]  drivers/gpu/drm/xe/xe_rtp.o
  CC [M]  drivers/gpu/drm/xe/xe_sa.o
  CC [M]  drivers/gpu/drm/xe/xe_sched_job.o
  CC [M]  drivers/gpu/drm/xe/xe_step.o
  CC [M]  drivers/gpu/drm/xe/xe_sync.o
  CC [M]  drivers/gpu/drm/xe/xe_tile.o
  CC [M]  drivers/gpu/drm/xe/xe_tile_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_trace.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_tuning.o
  CC [M]  drivers/gpu/drm/xe/xe_uc.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_fw.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_wopcm.o
  CC [M]  drivers/gpu/drm/xe/xe_hwmon.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_relay.o
  CC [M]  drivers/gpu/drm/xe/xe_memirq.o
  CC [M]  drivers/gpu/drm/xe/xe_sriov.o
  CC [M]  drivers/gpu/drm/xe/xe_lmtt.o
  CC [M]  drivers/gpu/drm/xe/xe_lmtt_2l.o
  CC [M]  drivers/gpu/drm/xe/xe_lmtt_ml.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_irq.o
../drivers/gpu/drm/xe/xe_guc_pc.c:873: warning: expecting prototype for xe_guc_pc_override_gucrc_mode(). Prototype was for xe_guc_pc_unset_gucrc_mode() instead
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_utils.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fb_bo.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fbdev_fb.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_misc.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_rps.o
  CC [M]  drivers/gpu/drm/xe/display/xe_dsb_buffer.o
  CC [M]  drivers/gpu/drm/xe/display/xe_fb_pin.o
  CC [M]  drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
  CC [M]  drivers/gpu/drm/xe/display/xe_plane_initial.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_dram.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_pch.o
  CC [M]  drivers/gpu/drm/xe/i915-display/icl_dsi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic.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 [M]  drivers/gpu/drm/xe/i915-display/intel_backlight.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bios.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_color.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 [M]  drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cursor.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cx0_phy.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 [M]  drivers/gpu/drm/xe/i915-display/intel_display_driver.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 [M]  drivers/gpu/drm/xe/i915-display/intel_display_power.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_map.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 [M]  drivers/gpu/drm/xe/i915-display/intel_display_wa.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 [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 [M]  drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.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 [M]  drivers/gpu/drm/xe/i915-display/intel_dpll.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_drrs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsb.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi.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_fb.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fdi.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 [M]  drivers/gpu/drm/xe/i915-display/intel_hdmi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug.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 [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 [M]  drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pps.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_psr.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 [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 [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_wm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_scaler.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/i915-display/intel_fbdev.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs.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 [M]  drivers/gpu/drm/xe/tests/xe_kunit_helpers.o
  HDRTEST drivers/gpu/drm/xe/abi/gsc_proxy_commands_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_klvs_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/gsc_command_header_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_errors_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_slpc_abi.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/gsc_mkhi_commands_abi.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.o
  HDRTEST drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_mocs_test.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_mmio_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_messages_abi.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_test_mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_pci_test.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_wa_test.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_irq.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband_reg.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_wakeref.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pcode.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg_defs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_trace.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_utils.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_config.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem_stolen.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_mchbar_regs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_debugfs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gpu_error.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_pch.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_dram.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_gmch.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vgpu.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_fixed.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_runtime_pm.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_step.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uc_fw.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pci_config.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_lmem.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_mman.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object_frontbuffer.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_clock_gating.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_gt_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active.h
  HDRTEST drivers/gpu/drm/xe/display/xe_display.h
  HDRTEST drivers/gpu/drm/xe/display/intel_fb_bo.h
  HDRTEST drivers/gpu/drm/xe/display/intel_fbdev_fb.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_instr_defs.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gsc_commands.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_mi_commands.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gsc_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_reg_defs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_oa_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_guc_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gt_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_pcode_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gpu_commands.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_sriov_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_lrc_layout.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_mchbar_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_engine_regs.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_kunit_helpers.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_pci_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_migrate_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_dma_buf_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_mocs_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_bo_test.h
  HDRTEST drivers/gpu/drm/xe/xe_assert.h
  HDRTEST drivers/gpu/drm/xe/xe_bb.h
  HDRTEST drivers/gpu/drm/xe/xe_bb_types.h
  HDRTEST drivers/gpu/drm/xe/xe_bo.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_evict.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_types.h
  HDRTEST drivers/gpu/drm/xe/xe_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump_types.h
  HDRTEST drivers/gpu/drm/xe/xe_device.h
  HDRTEST drivers/gpu/drm/xe/xe_device_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_device_types.h
  HDRTEST drivers/gpu/drm/xe/xe_dma_buf.h
  HDRTEST drivers/gpu/drm/xe/xe_drm_client.h
  HDRTEST drivers/gpu/drm/xe/xe_drv.h
  HDRTEST drivers/gpu/drm/xe/xe_exec.h
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue.h
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue_types.h
  HDRTEST drivers/gpu/drm/xe/xe_execlist.h
  HDRTEST drivers/gpu/drm/xe/xe_execlist_types.h
  HDRTEST drivers/gpu/drm/xe/xe_force_wake.h
  HDRTEST drivers/gpu/drm/xe/xe_force_wake_types.h
  HDRTEST drivers/gpu/drm/xe/xe_ggtt.h
  HDRTEST drivers/gpu/drm/xe/xe_ggtt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler.h
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gsc.h
  HDRTEST drivers/gpu/drm/xe/xe_gsc_proxy.h
  LD [M]  drivers/gpu/drm/xe/tests/xe_test.o
  HDRTEST drivers/gpu/drm/xe/xe_gsc_submit.h
  HDRTEST drivers/gpu/drm/xe/xe_gsc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_ccs_mode.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_clock.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_freq.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_mcr.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_pagefault.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_printk.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sriov_printk.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_throttle_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_topology.h
  HDRTEST drivers/gpu/drm/xe/xe_guc.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_db_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_fwif.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_hwconfig.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_log.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_log_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_relay.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_relay_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_heci_gsc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_huc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hwmon.h
  HDRTEST drivers/gpu/drm/xe/xe_irq.h
  HDRTEST drivers/gpu/drm/xe/xe_lmtt.h
  HDRTEST drivers/gpu/drm/xe/xe_lmtt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_lrc.h
  HDRTEST drivers/gpu/drm/xe/xe_lrc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_macros.h
  HDRTEST drivers/gpu/drm/xe/xe_map.h
  HDRTEST drivers/gpu/drm/xe/xe_memirq.h
  HDRTEST drivers/gpu/drm/xe/xe_memirq_types.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_mmio.h
  HDRTEST drivers/gpu/drm/xe/xe_mocs.h
  HDRTEST drivers/gpu/drm/xe/xe_module.h
  HDRTEST drivers/gpu/drm/xe/xe_oa.h
  HDRTEST drivers/gpu/drm/xe/xe_oa_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pat.h
  HDRTEST drivers/gpu/drm/xe/xe_pci.h
  HDRTEST drivers/gpu/drm/xe/xe_pci_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pcode.h
  HDRTEST drivers/gpu/drm/xe/xe_pcode_api.h
  HDRTEST drivers/gpu/drm/xe/xe_perf.h
  HDRTEST drivers/gpu/drm/xe/xe_platform_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pm.h
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_walk.h
  HDRTEST drivers/gpu/drm/xe/xe_query.h
  HDRTEST drivers/gpu/drm/xe/xe_range_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr_types.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_whitelist.h
  HDRTEST drivers/gpu/drm/xe/xe_res_cursor.h
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops.h
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops_types.h
  HDRTEST drivers/gpu/drm/xe/xe_rtp.h
  HDRTEST drivers/gpu/drm/xe/xe_rtp_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sa.h
  HDRTEST drivers/gpu/drm/xe/xe_sa_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sched_job.h
  HDRTEST drivers/gpu/drm/xe/xe_sched_job_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sriov.h
  HDRTEST drivers/gpu/drm/xe/xe_sriov_printk.h
  HDRTEST drivers/gpu/drm/xe/xe_sriov_types.h
  HDRTEST drivers/gpu/drm/xe/xe_step.h
  HDRTEST drivers/gpu/drm/xe/xe_step_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sync.h
  HDRTEST drivers/gpu/drm/xe/xe_sync_types.h
  HDRTEST drivers/gpu/drm/xe/xe_tile.h
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_trace.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_sys_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
  HDRTEST drivers/gpu/drm/xe/xe_tuning.h
  HDRTEST drivers/gpu/drm/xe/xe_uc.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_abi.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_types.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_vm.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_types.h
  HDRTEST drivers/gpu/drm/xe/xe_vram_freq.h
  HDRTEST drivers/gpu/drm/xe/xe_wa.h
  HDRTEST drivers/gpu/drm/xe/xe_wait_user_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm_types.h
  GEN     xe_wa_oob.c xe_wa_oob.h
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC [M]  drivers/gpu/drm/xe/xe_gsc.o
  CC [M]  drivers/gpu/drm/xe/xe_guc.o
  CC [M]  drivers/gpu/drm/xe/xe_migrate.o
  CC [M]  drivers/gpu/drm/xe/xe_ring_ops.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_vm.o
  CC [M]  drivers/gpu/drm/xe/xe_wa.o
  LD [M]  drivers/gpu/drm/xe/xe.o
  MODPOST drivers/gpu/drm/xe/Module.symvers
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/xe/tests/xe_mocs_test.o
  CC [M]  drivers/gpu/drm/xe/xe.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_mocs_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_test.mod.o
  LD [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_bo_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_mocs_test.ko
  LD [M]  drivers/gpu/drm/xe/xe.ko
make[1]: Leaving directory '/workspace/kernel/build64-default'
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
include/uapi/drm/xe_drm.h:1352: warning: Enum value 'DRM_XE_PERF_TYPE_OA' not described in enum 'drm_xe_perf_type'
include/uapi/drm/xe_drm.h:1352: warning: Enum value 'DRM_XE_PERF_TYPE_MAX' not described in enum 'drm_xe_perf_type'
include/uapi/drm/xe_drm.h:1521: warning: Incorrect use of kernel-doc format:          * OA_FORMAT's are specified the same way as in Bspec, in terms of
include/uapi/drm/xe_drm.h:1555: warning: Enum value 'DRM_XE_OA_PROPERTY_MAX' not described in enum 'drm_xe_oa_property_id'
include/uapi/drm/xe_drm.h:1579: warning: Function parameter or struct member 'uuid' not described in 'drm_xe_oa_config'
include/uapi/drm/xe_drm.h:1591: warning: Function parameter or struct member 'reserved' not described in 'drm_xe_oa_stream_status'
include/uapi/drm/xe_drm.h:1603: warning: Function parameter or struct member 'reserved' not described in 'drm_xe_oa_stream_info'
drivers/gpu/drm/xe/xe_oa_types.h:70: warning: Function parameter or struct member 'counter_select' not described in 'xe_oa_format'
drivers/gpu/drm/xe/xe_oa_types.h:70: warning: Function parameter or struct member 'size' not described in 'xe_oa_format'
drivers/gpu/drm/xe/xe_oa_types.h:70: warning: Function parameter or struct member 'type' not described in 'xe_oa_format'
drivers/gpu/drm/xe/xe_oa_types.h:70: warning: Function parameter or struct member 'header' not described in 'xe_oa_format'
drivers/gpu/drm/xe/xe_oa_types.h:70: warning: Function parameter or struct member 'counter_size' not described in 'xe_oa_format'
drivers/gpu/drm/xe/xe_oa_types.h:70: warning: Function parameter or struct member 'bc_report' not described in 'xe_oa_format'
drivers/gpu/drm/xe/xe_oa_types.h:85: warning: Function parameter or struct member 'base' not described in 'xe_oa_regs'
drivers/gpu/drm/xe/xe_oa_types.h:85: warning: Function parameter or struct member 'oa_head_ptr' not described in 'xe_oa_regs'
drivers/gpu/drm/xe/xe_oa_types.h:85: warning: Function parameter or struct member 'oa_tail_ptr' not described in 'xe_oa_regs'
drivers/gpu/drm/xe/xe_oa_types.h:85: warning: Function parameter or struct member 'oa_buffer' not described in 'xe_oa_regs'
drivers/gpu/drm/xe/xe_oa_types.h:85: warning: Function parameter or struct member 'oa_ctx_ctrl' not described in 'xe_oa_regs'
drivers/gpu/drm/xe/xe_oa_types.h:85: warning: Function parameter or struct member 'oa_ctrl' not described in 'xe_oa_regs'
drivers/gpu/drm/xe/xe_oa_types.h:85: warning: Function parameter or struct member 'oa_debug' not described in 'xe_oa_regs'
drivers/gpu/drm/xe/xe_oa_types.h:85: warning: Function parameter or struct member 'oa_status' not described in 'xe_oa_regs'
drivers/gpu/drm/xe/xe_oa_types.h:85: warning: Function parameter or struct member 'oa_ctrl_counter_select_mask' not described in 'xe_oa_regs'
drivers/gpu/drm/xe/xe_oa_types.h:119: warning: Function parameter or struct member 'gt_lock' not described in 'xe_oa_gt'
drivers/gpu/drm/xe/xe_oa_types.h:119: warning: Excess struct member 'lock' description in 'xe_oa_gt'
drivers/gpu/drm/xe/xe_oa_types.h:230: warning: Function parameter or struct member 'stream_lock' not described in 'xe_oa_stream'
drivers/gpu/drm/xe/xe_oa_types.h:230: warning: Excess struct member 'lock' description in 'xe_oa_stream'
drivers/gpu/drm/xe/xe_guc_pc.c:874: warning: expecting prototype for xe_guc_pc_override_gucrc_mode(). Prototype was for xe_guc_pc_unset_gucrc_mode() instead
27 warnings as Errors
run-parts: /workspace/ci/hooks/20-kernel-doc exited with return code 123



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

* ✓ CI.checksparse: success for Add OA functionality to Xe (rev9)
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (20 preceding siblings ...)
  2024-02-08  6:02 ` ✗ CI.Hooks: failure " Patchwork
@ 2024-02-08  6:03 ` Patchwork
  2024-02-08  6:22 ` ✓ CI.BAT: " Patchwork
  2024-02-08 21:34 ` [PATCH 00/16] Add OA functionality to Xe Lionel Landwerlin
  23 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2024-02-08  6:03 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

== Series Details ==

Series: Add OA functionality to Xe (rev9)
URL   : https://patchwork.freedesktop.org/series/121084/
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 a942be9b4f39a05326a5fc3fd774fb143b4d9507
Sparse version: 0.6.1 (Ubuntu: 0.6.1-2build1)
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] 42+ messages in thread

* ✓ CI.BAT: success for Add OA functionality to Xe (rev9)
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (21 preceding siblings ...)
  2024-02-08  6:03 ` ✓ CI.checksparse: success " Patchwork
@ 2024-02-08  6:22 ` Patchwork
  2024-02-08 21:34 ` [PATCH 00/16] Add OA functionality to Xe Lionel Landwerlin
  23 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2024-02-08  6:22 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: intel-xe

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

== Series Details ==

Series: Add OA functionality to Xe (rev9)
URL   : https://patchwork.freedesktop.org/series/121084/
State : success

== Summary ==

CI Bug Log - changes from xe-747-a942be9b4f39a05326a5fc3fd774fb143b4d9507_BAT -> xe-pw-121084v9_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (3 -> 3)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


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

  * Linux: xe-747-a942be9b4f39a05326a5fc3fd774fb143b4d9507 -> xe-pw-121084v9

  IGT_7705: 45aef708b65772e54ee9a68b1f3885fa25140fdf @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-747-a942be9b4f39a05326a5fc3fd774fb143b4d9507: a942be9b4f39a05326a5fc3fd774fb143b4d9507
  xe-pw-121084v9: 121084v9

== Logs ==

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

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

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

* Re: [PATCH 00/16] Add OA functionality to Xe
  2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
                   ` (22 preceding siblings ...)
  2024-02-08  6:22 ` ✓ CI.BAT: " Patchwork
@ 2024-02-08 21:34 ` Lionel Landwerlin
  2024-02-08 21:56   ` Dixit, Ashutosh
  23 siblings, 1 reply; 42+ messages in thread
From: Lionel Landwerlin @ 2024-02-08 21:34 UTC (permalink / raw)
  To: intel-xe

Hi Ashutosh,

Just looked at the series and I'm not seeing a way to reconfigure the OA 
unit with a different config once the stream is opened.
Was this feature removed?

Thanks,

-Lionel

On 08/02/2024 07:49, Ashutosh Dixit wrote:
> Please see cover letter for v7 here:
> https://patchwork.freedesktop.org/series/121084/#rev7
>
> For changes in v8 and v9, see:
> https://patchwork.freedesktop.org/series/128993/
>
> This series is also available at:
>          https://gitlab.freedesktop.org/adixit/kernel/-/tree/xe-oa
>
> The series has been tested against this IGT series:
>          https://gitlab.freedesktop.org/adixit/igt-gpu-tools/-/tree/xe-oa
>
> v2: Fix build
> v3: Rebase, due to s/xe_engine/xe_exec_queue/
> v4: Re-run for testing
> v5: Address review comments, new patches 11 through 17
> v6: New patches 18 through 21
> v7: Patches are completely redone and don't start with i915 version of the uapi
> v8: See https://patchwork.freedesktop.org/patch/575214/?series=128993&rev=1
> v9: See https://patchwork.freedesktop.org/patch/577441/?series=128993&rev=2
>
> Ashutosh Dixit (16):
>    drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream
>      types
>    drm/xe/perf/uapi: Add perf_stream_paranoid sysctl
>    drm/xe/oa/uapi: Add OA data formats
>    drm/xe/oa/uapi: Initialize OA units
>    drm/xe/oa/uapi: Add/remove OA config perf ops
>    drm/xe/oa/uapi: Define and parse OA stream properties
>    drm/xe/oa: OA stream initialization (OAG)
>    drm/xe/oa/uapi: Expose OA stream fd
>    drm/xe/oa/uapi: Read file_operation
>    drm/xe/oa: Disable overrun mode for Xe2+ OAG
>    drm/xe/oa: Add OAR support
>    drm/xe/oa: Add OAC support
>    drm/xe/oa/uapi: Query OA unit properties
>    drm/xe/oa/uapi: OA buffer mmap
>    drm/xe/oa: Add MMIO trigger support
>    drm/xe/oa: Override GuC RC with OA on PVC
>
>   drivers/gpu/drm/xe/Makefile                   |    2 +
>   .../gpu/drm/xe/instructions/xe_mi_commands.h  |    3 +
>   drivers/gpu/drm/xe/regs/xe_engine_regs.h      |    4 +-
>   drivers/gpu/drm/xe/regs/xe_gt_regs.h          |    3 +
>   drivers/gpu/drm/xe/regs/xe_oa_regs.h          |  100 +
>   drivers/gpu/drm/xe/xe_device.c                |   18 +-
>   drivers/gpu/drm/xe/xe_device_types.h          |    4 +
>   drivers/gpu/drm/xe/xe_gt_types.h              |    4 +
>   drivers/gpu/drm/xe/xe_guc_pc.c                |   60 +
>   drivers/gpu/drm/xe/xe_guc_pc.h                |    3 +
>   drivers/gpu/drm/xe/xe_hw_engine_types.h       |    2 +
>   drivers/gpu/drm/xe/xe_lrc.c                   |   11 +-
>   drivers/gpu/drm/xe/xe_lrc.h                   |    1 +
>   drivers/gpu/drm/xe/xe_module.c                |    6 +
>   drivers/gpu/drm/xe/xe_oa.c                    | 2319 +++++++++++++++++
>   drivers/gpu/drm/xe/xe_oa.h                    |   30 +
>   drivers/gpu/drm/xe/xe_oa_types.h              |  230 ++
>   drivers/gpu/drm/xe/xe_perf.c                  |   67 +
>   drivers/gpu/drm/xe/xe_perf.h                  |   20 +
>   drivers/gpu/drm/xe/xe_query.c                 |   79 +
>   drivers/gpu/drm/xe/xe_reg_whitelist.c         |   24 +-
>   include/uapi/drm/xe_drm.h                     |  263 ++
>   22 files changed, 3245 insertions(+), 8 deletions(-)
>   create mode 100644 drivers/gpu/drm/xe/regs/xe_oa_regs.h
>   create mode 100644 drivers/gpu/drm/xe/xe_oa.c
>   create mode 100644 drivers/gpu/drm/xe/xe_oa.h
>   create mode 100644 drivers/gpu/drm/xe/xe_oa_types.h
>   create mode 100644 drivers/gpu/drm/xe/xe_perf.c
>   create mode 100644 drivers/gpu/drm/xe/xe_perf.h
>


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

* Re: [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties
  2024-02-08  5:49 ` [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties Ashutosh Dixit
@ 2024-02-08 21:40   ` Lionel Landwerlin
  2024-02-08 22:26     ` Dixit, Ashutosh
  0 siblings, 1 reply; 42+ messages in thread
From: Lionel Landwerlin @ 2024-02-08 21:40 UTC (permalink / raw)
  To: Ashutosh Dixit, intel-xe; +Cc: Umesh Nerlige Ramappa

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

On 08/02/2024 07:49, Ashutosh Dixit wrote:
> Properties for OA streams are specified by user space, when the stream is
> opened, as a chain of drm_xe_ext_set_property struct's. Parse and validate
> these stream properties.
>
> v2: Remove struct drm_xe_oa_open_param (Harish Chegondi)
>      Drop DRM_XE_OA_PROPERTY_POLL_OA_PERIOD_US (Umesh)
>      Eliminate comparison with xe_oa_max_sample_rate (Umesh)
>      Drop 'struct drm_xe_oa_record_header' (Umesh)
>
> Reviewed-by: Umesh Nerlige Ramappa<umesh.nerlige.ramappa@intel.com>
> Signed-off-by: Ashutosh Dixit<ashutosh.dixit@intel.com>
> ---
>   drivers/gpu/drm/xe/xe_oa.c   | 344 +++++++++++++++++++++++++++++++++++
>   drivers/gpu/drm/xe/xe_oa.h   |   6 +
>   drivers/gpu/drm/xe/xe_perf.c |   2 +
>   include/uapi/drm/xe_drm.h    |  70 +++++++
>   4 files changed, 422 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index a62f71244ec15..915dd71454c7c 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -3,10 +3,14 @@
>    * Copyright © 2023 Intel Corporation
>    */
>   
> +#include <linux/nospec.h>
> +
>   #include <drm/xe_drm.h>
>   
> +#include "regs/xe_gt_regs.h"
>   #include "regs/xe_oa_regs.h"
>   #include "xe_device.h"
> +#include "xe_exec_queue.h"
>   #include "xe_gt.h"
>   #include "xe_mmio.h"
>   #include "xe_oa.h"
> @@ -36,6 +40,19 @@ struct xe_oa_config {
>   	struct rcu_head rcu;
>   };
>   
> +struct xe_oa_open_param {
> +	u32 oa_unit_id;
> +	bool sample;
> +	u32 metric_set;
> +	enum xe_oa_format_name oa_format;
> +	int period_exponent;
> +	bool disabled;
> +	int exec_queue_id;
> +	int engine_instance;
> +	struct xe_exec_queue *exec_q;
> +	struct xe_hw_engine *hwe;
> +};
> +
>   #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
>   
>   static const struct xe_oa_format oa_formats[] = {
> @@ -78,6 +95,333 @@ static void xe_oa_config_put(struct xe_oa_config *oa_config)
>   	kref_put(&oa_config->ref, xe_oa_config_release);
>   }
>   
> +/*
> + * OA timestamp frequency = CS timestamp frequency in most platforms. On some
> + * platforms OA unit ignores the CTC_SHIFT and the 2 timestamps differ. In such
> + * cases, return the adjusted CS timestamp frequency to the user.
> + */
> +u32 xe_oa_timestamp_frequency(struct xe_gt *gt)
> +{
> +	u32 reg, shift;
> +
> +	/*
> +	 * Wa_18013179988:dg2
> +	 * Wa_14015568240:pvc
> +	 * Wa_14015846243:mtl
> +	 */
> +	switch (gt_to_xe(gt)->info.platform) {
> +	case XE_DG2:
> +	case XE_PVC:
> +	case XE_METEORLAKE:
> +		xe_device_mem_access_get(gt_to_xe(gt));
> +		reg = xe_mmio_read32(gt, RPM_CONFIG0);
> +		xe_device_mem_access_put(gt_to_xe(gt));
> +
> +		shift = REG_FIELD_GET(RPM_CONFIG0_CTC_SHIFT_PARAMETER_MASK, reg);
> +		return gt->info.reference_clock << (3 - shift);
> +
> +	default:
> +		return gt->info.reference_clock;
> +	}
> +}
> +
> +static u64 oa_exponent_to_ns(struct xe_gt *gt, int exponent)
> +{
> +	u64 nom = (2ULL << exponent) * NSEC_PER_SEC;
> +	u32 den = xe_oa_timestamp_frequency(gt);
> +
> +	return div_u64(nom + den - 1, den);
> +}
> +
> +static bool engine_supports_oa_format(const struct xe_hw_engine *hwe, int type)
> +{
> +	switch (hwe->oa_unit->type) {
> +	case DRM_XE_OA_UNIT_TYPE_OAG:
> +		return type == DRM_XE_OA_FMT_TYPE_OAG || type == DRM_XE_OA_FMT_TYPE_OAR ||
> +			type == DRM_XE_OA_FMT_TYPE_OAC || type == DRM_XE_OA_FMT_TYPE_PEC;
> +	case DRM_XE_OA_UNIT_TYPE_OAM:
> +		return type == DRM_XE_OA_FMT_TYPE_OAM || type == DRM_XE_OA_FMT_TYPE_OAM_MPEC;
> +	default:
> +		return false;
> +	}
> +}
> +
> +static int decode_oa_format(struct xe_oa *oa, u64 fmt, enum xe_oa_format_name *name)
> +{
> +	u32 counter_size = FIELD_GET(DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE, fmt);
> +	u32 counter_sel = FIELD_GET(DRM_XE_OA_FORMAT_MASK_COUNTER_SEL, fmt);
> +	u32 bc_report = FIELD_GET(DRM_XE_OA_FORMAT_MASK_BC_REPORT, fmt);
> +	u32 type = FIELD_GET(DRM_XE_OA_FORMAT_MASK_FMT_TYPE, fmt);
> +	int idx;
> +
> +	for_each_set_bit(idx, oa->format_mask, XE_OA_FORMAT_MAX) {
> +		const struct xe_oa_format *f = &oa->oa_formats[idx];
> +
> +		if (counter_size == f->counter_size && bc_report == f->bc_report &&
> +		    type == f->type && counter_sel == f->counter_select) {
> +			*name = idx;
> +			return 0;
> +		}
> +	}
> +
> +	return -EINVAL;
> +}
> +
> +u16 xe_oa_unit_id(struct xe_hw_engine *hwe)
> +{
> +	return hwe->oa_unit && hwe->oa_unit->num_engines ?
> +		hwe->oa_unit->oa_unit_id : U16_MAX;
> +}
> +
> +static int xe_oa_assign_hwe(struct xe_oa *oa, struct xe_oa_open_param *param)
> +{
> +	struct xe_gt *gt;
> +	int i, ret = 0;
> +
> +	if (param->exec_q) {
> +		/* When we have an exec_q, get hwe from the exec_q */
> +		param->hwe = xe_gt_hw_engine(param->exec_q->gt, param->exec_q->class,
> +					     param->engine_instance, true);
> +	} else {
> +		struct xe_hw_engine *hwe;
> +		enum xe_hw_engine_id id;
> +
> +		/* Else just get the first hwe attached to the oa unit */
> +		for_each_gt(gt, oa->xe, i) {
> +			for_each_hw_engine(hwe, gt, id) {
> +				if (xe_oa_unit_id(hwe) == param->oa_unit_id) {
> +					param->hwe = hwe;
> +					goto out;
> +				}
> +			}
> +		}
> +	}
> +out:
> +	if (!param->hwe || xe_oa_unit_id(param->hwe) != param->oa_unit_id) {
> +		drm_dbg(&oa->xe->drm, "Unable to find hwe (%d, %d) for OA unit ID %d\n",
> +			param->exec_q ? param->exec_q->class : -1,
> +			param->engine_instance, param->oa_unit_id);
> +		ret = -EINVAL;
> +	}
> +
> +	return ret;
> +}
> +
> +static int xe_oa_set_prop_oa_unit_id(struct xe_oa *oa, u64 value,
> +				     struct xe_oa_open_param *param)
> +{
> +	if (value >= oa->oa_unit_ids) {
> +		drm_dbg(&oa->xe->drm, "OA unit ID out of range %lld\n", value);
> +		return -EINVAL;
> +	}
> +	param->oa_unit_id = value;
> +	return 0;
> +}
> +
> +static int xe_oa_set_prop_sample_oa(struct xe_oa *oa, u64 value,
> +				    struct xe_oa_open_param *param)
> +{
> +	param->sample = value;
> +	return 0;
> +}
> +
> +static int xe_oa_set_prop_metric_set(struct xe_oa *oa, u64 value,
> +				     struct xe_oa_open_param *param)
> +{
> +	param->metric_set = value;
> +	return 0;
> +}
> +
> +static int xe_oa_set_prop_oa_format(struct xe_oa *oa, u64 value,
> +				    struct xe_oa_open_param *param)
> +{
> +	int ret = decode_oa_format(oa, value, &param->oa_format);
> +
> +	if (ret) {
> +		drm_dbg(&oa->xe->drm, "Unsupported OA report format %#llx\n", value);
> +		return ret;
> +	}
> +	return 0;
> +}
> +
> +static int xe_oa_set_prop_oa_exponent(struct xe_oa *oa, u64 value,
> +				      struct xe_oa_open_param *param)
> +{
> +#define OA_EXPONENT_MAX 31
> +
> +	if (value > OA_EXPONENT_MAX) {
> +		drm_dbg(&oa->xe->drm, "OA timer exponent too high (> %u)\n", OA_EXPONENT_MAX);
> +		return -EINVAL;
> +	}
> +	param->period_exponent = value;
> +	return 0;
> +}
> +
> +static int xe_oa_set_prop_disabled(struct xe_oa *oa, u64 value,
> +				   struct xe_oa_open_param *param)
> +{
> +	param->disabled = value;
> +	return 0;
> +}
> +
> +static int xe_oa_set_prop_exec_queue_id(struct xe_oa *oa, u64 value,
> +					struct xe_oa_open_param *param)
> +{
> +	param->exec_queue_id = value;
> +	return 0;
> +}
> +
> +static int xe_oa_set_prop_engine_instance(struct xe_oa *oa, u64 value,
> +					  struct xe_oa_open_param *param)
> +{
> +	param->engine_instance = value;
> +	return 0;
> +}
> +
> +typedef int (*xe_oa_set_property_fn)(struct xe_oa *oa, u64 value,
> +				     struct xe_oa_open_param *param);
> +static const xe_oa_set_property_fn xe_oa_set_property_funcs[] = {
> +	[DRM_XE_OA_PROPERTY_OA_UNIT_ID] = xe_oa_set_prop_oa_unit_id,
> +	[DRM_XE_OA_PROPERTY_SAMPLE_OA] = xe_oa_set_prop_sample_oa,
> +	[DRM_XE_OA_PROPERTY_OA_METRIC_SET] = xe_oa_set_prop_metric_set,
> +	[DRM_XE_OA_PROPERTY_OA_FORMAT] = xe_oa_set_prop_oa_format,
> +	[DRM_XE_OA_PROPERTY_OA_EXPONENT] = xe_oa_set_prop_oa_exponent,
> +	[DRM_XE_OA_PROPERTY_OA_DISABLED] = xe_oa_set_prop_disabled,
> +	[DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID] = xe_oa_set_prop_exec_queue_id,
> +	[DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE] = xe_oa_set_prop_engine_instance,
> +};
> +
> +static int xe_oa_user_ext_set_property(struct xe_oa *oa, u64 extension,
> +				       struct xe_oa_open_param *param)
> +{
> +	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(oa->xe, err))
> +		return -EFAULT;
> +
> +	if (XE_IOCTL_DBG(oa->xe, ext.property >= ARRAY_SIZE(xe_oa_set_property_funcs)) ||
> +	    XE_IOCTL_DBG(oa->xe, ext.pad))
> +		return -EINVAL;
> +
> +	idx = array_index_nospec(ext.property, ARRAY_SIZE(xe_oa_set_property_funcs));
> +	return xe_oa_set_property_funcs[idx](oa, ext.value, param);
> +}
> +
> +typedef int (*xe_oa_user_extension_fn)(struct xe_oa *oa, u64 extension,
> +				       struct xe_oa_open_param *param);
> +static const xe_oa_user_extension_fn xe_oa_user_extension_funcs[] = {
> +	[DRM_XE_OA_EXTENSION_SET_PROPERTY] = xe_oa_user_ext_set_property,
> +};
> +
> +static int xe_oa_user_extensions(struct xe_oa *oa, u64 extension, int ext_number,
> +				 struct xe_oa_open_param *param)
> +{
> +	u64 __user *address = u64_to_user_ptr(extension);
> +	struct drm_xe_user_extension ext;
> +	int err;
> +	u32 idx;
> +
> +	if (XE_IOCTL_DBG(oa->xe, ext_number >= DRM_XE_OA_PROPERTY_MAX))
> +		return -E2BIG;
> +
> +	err = __copy_from_user(&ext, address, sizeof(ext));
> +	if (XE_IOCTL_DBG(oa->xe, err))
> +		return -EFAULT;
> +
> +	if (XE_IOCTL_DBG(oa->xe, ext.pad) ||
> +	    XE_IOCTL_DBG(oa->xe, ext.name >= ARRAY_SIZE(xe_oa_user_extension_funcs)))
> +		return -EINVAL;
> +
> +	idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_oa_user_extension_funcs));
> +	err = xe_oa_user_extension_funcs[idx](oa, extension, param);
> +	if (XE_IOCTL_DBG(oa->xe, err))
> +		return err;
> +
> +	if (ext.next_extension)
> +		return xe_oa_user_extensions(oa, ext.next_extension, ++ext_number, param);
> +
> +	return 0;
> +}
> +
> +int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> +{
> +	struct xe_oa *oa = &to_xe_device(dev)->oa;
> +	struct xe_file *xef = to_xe_file(file);
> +	struct xe_oa_open_param param = {};
> +	const struct xe_oa_format *f;
> +	bool privileged_op = true;
> +	int ret;
> +
> +	if (!oa->xe) {
> +		drm_dbg(&oa->xe->drm, "xe oa interface not available for this system\n");
> +		return -ENODEV;
> +	}
> +
> +	ret = xe_oa_user_extensions(oa, (u64)data, 0, &param);
> +	if (ret)
> +		return ret;
> +
> +	if (param.exec_queue_id > 0) {
> +		param.exec_q = xe_exec_queue_lookup(xef, param.exec_queue_id);
> +		if (XE_IOCTL_DBG(oa->xe, !param.exec_q))
> +			return -ENOENT;
> +	}
> +
> +	/*
> +	 * Query based sampling (using MI_REPORT_PERF_COUNT) with OAR/OAC,
> +	 * without global stream access, can be an unprivileged operation
> +	 */
> +	if (param.exec_q && !param.sample)
> +		privileged_op = false;
> +
> +	if (privileged_op && xe_perf_stream_paranoid && !perfmon_capable()) {
> +		drm_dbg(&oa->xe->drm, "Insufficient privileges to open xe perf stream\n");
> +		ret = -EACCES;
> +		goto err_exec_q;
> +	}
> +
> +	if (!param.exec_q && !param.sample) {
> +		drm_dbg(&oa->xe->drm, "Only OA report sampling supported\n");
> +		ret = -EINVAL;
> +		goto err_exec_q;
> +	}
> +
> +	ret = xe_oa_assign_hwe(oa, &param);
> +	if (ret)
> +		goto err_exec_q;
> +
> +	f = &oa->oa_formats[param.oa_format];
> +	if (!param.oa_format || !f->size ||
> +	    !engine_supports_oa_format(param.hwe, f->type)) {
> +		drm_dbg(&oa->xe->drm, "Invalid OA format %d type %d size %d for class %d\n",
> +			param.oa_format, f->type, f->size, param.hwe->class);
> +		ret = -EINVAL;
> +		goto err_exec_q;
> +	}
> +
> +	if (param.period_exponent > 0) {
> +		u64 oa_period, oa_freq_hz;
> +
> +		/* Requesting samples from OAG buffer is a privileged operation */
> +		if (!param.sample) {
> +			drm_dbg(&oa->xe->drm, "OA_EXPONENT specified without SAMPLE_OA\n");
> +			ret = -EINVAL;
> +			goto err_exec_q;
> +		}
> +		oa_period = oa_exponent_to_ns(param.hwe->gt, param.period_exponent);
> +		oa_freq_hz = div64_u64(NSEC_PER_SEC, oa_period);
> +		drm_dbg(&oa->xe->drm, "Using periodic sampling freq %lld Hz\n", oa_freq_hz);
> +	}
> +err_exec_q:
> +	if (ret < 0 && param.exec_q)
> +		xe_exec_queue_put(param.exec_q);
> +	return ret;
> +}
> +
>   static bool xe_oa_is_valid_flex_addr(struct xe_oa *oa, u32 addr)
>   {
>   	static const struct xe_reg flex_eu_regs[] = {
> diff --git a/drivers/gpu/drm/xe/xe_oa.h b/drivers/gpu/drm/xe/xe_oa.h
> index 4a4e3b2b70fcd..6308aa1829bd7 100644
> --- a/drivers/gpu/drm/xe/xe_oa.h
> +++ b/drivers/gpu/drm/xe/xe_oa.h
> @@ -11,14 +11,20 @@
>   struct drm_device;
>   struct drm_file;
>   struct xe_device;
> +struct xe_gt;
> +struct xe_hw_engine;
>   
>   int xe_oa_init(struct xe_device *xe);
>   void xe_oa_fini(struct xe_device *xe);
>   void xe_oa_register(struct xe_device *xe);
>   void xe_oa_unregister(struct xe_device *xe);
> +int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data,
> +			    struct drm_file *file);
>   int xe_oa_add_config_ioctl(struct drm_device *dev, void *data,
>   			   struct drm_file *file);
>   int xe_oa_remove_config_ioctl(struct drm_device *dev, void *data,
>   			      struct drm_file *file);
> +u32 xe_oa_timestamp_frequency(struct xe_gt *gt);
> +u16 xe_oa_unit_id(struct xe_hw_engine *hwe);
>   
>   #endif
> diff --git a/drivers/gpu/drm/xe/xe_perf.c b/drivers/gpu/drm/xe/xe_perf.c
> index 2aee4c7989486..2c0615481b7df 100644
> --- a/drivers/gpu/drm/xe/xe_perf.c
> +++ b/drivers/gpu/drm/xe/xe_perf.c
> @@ -16,6 +16,8 @@ static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_perf_param *arg,
>   		       struct drm_file *file)
>   {
>   	switch (arg->perf_op) {
> +	case DRM_XE_PERF_OP_STREAM_OPEN:
> +		return xe_oa_stream_open_ioctl(dev, (void *)arg->param, file);
>   	case DRM_XE_PERF_OP_ADD_CONFIG:
>   		return xe_oa_add_config_ioctl(dev, (void *)arg->param, file);
>   	case DRM_XE_PERF_OP_REMOVE_CONFIG:
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 0632ebf209c35..502302f3c2c73 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1421,6 +1421,76 @@ enum drm_xe_oa_format_type {
>   	DRM_XE_OA_FMT_TYPE_PEC,
>   };
>   
> +/**
> + * enum drm_xe_oa_property_id - OA stream property id's
> + *
> + * Stream params are specified as a chain of @drm_xe_ext_set_property
> + * struct's, with @property values from enum @drm_xe_oa_property_id and
> + * @drm_xe_user_extension base.name set to @DRM_XE_OA_EXTENSION_SET_PROPERTY.
> + * @param field in struct @drm_xe_perf_param points to the first
> + * @drm_xe_ext_set_property struct.
> + */
> +enum drm_xe_oa_property_id {
> +#define DRM_XE_OA_EXTENSION_SET_PROPERTY	0
> +	/**
> +	 * @DRM_XE_OA_PROPERTY_OA_UNIT_ID: ID of the OA unit on which to open
> +	 * the OA stream, see @oa_unit_id in 'struct
> +	 * drm_xe_query_oa_units'. Defaults to 0 if not provided.
> +	 */
> +	DRM_XE_OA_PROPERTY_OA_UNIT_ID = 1,
> +
> +	/**
> +	 * @DRM_XE_OA_PROPERTY_SAMPLE_OA: A value of 1 requests inclusion of raw
> +	 * OA unit reports or stream samples in a global buffer attached to an
> +	 * OA unit.
> +	 */
> +	DRM_XE_OA_PROPERTY_SAMPLE_OA,
> +
> +	/**
> +	 * @DRM_XE_OA_PROPERTY_OA_METRIC_SET: OA metrics defining contents of OA
> +	 * reports, previously added via @DRM_XE_PERF_OP_ADD_CONFIG.
> +	 */
> +	DRM_XE_OA_PROPERTY_OA_METRIC_SET,
> +
> +	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: Perf counter report format */
> +	DRM_XE_OA_PROPERTY_OA_FORMAT,
> +	/**
> +	 * OA_FORMAT's are specified the same way as in Bspec, in terms of
> +	 * the following quantities: a. enum @drm_xe_oa_format_type
> +	 * b. Counter select c. Counter size and d. BC report
> +	 */
> +#define DRM_XE_OA_FORMAT_MASK_FMT_TYPE		(0xff << 0)
> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SEL	(0xff << 8)
> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE	(0xff << 16)
> +#define DRM_XE_OA_FORMAT_MASK_BC_REPORT		(0xff << 24)


People outside of Intel don't have access to the BSpec.

And since there is no page number either, it would just be easier for 
everybody to say :

      "Refer to the oa_formats array in drivers/gpu/drm/xe/xe_oa.c"


-Lionel


> +
> +	/**
> +	 * @DRM_XE_OA_PROPERTY_OA_EXPONENT: Requests periodic OA unit sampling
> +	 * with sampling frequency proportional to 2^(period_exponent + 1)
> +	 */
> +	DRM_XE_OA_PROPERTY_OA_EXPONENT,
> +
> +	/**
> +	 * @DRM_XE_OA_PROPERTY_OA_DISABLED: A value of 1 will open the OA
> +	 * stream in a DISABLED state (see @DRM_XE_PERF_IOCTL_ENABLE).
> +	 */
> +	DRM_XE_OA_PROPERTY_OA_DISABLED,
> +
> +	/**
> +	 * @DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID: Open the stream for a specific
> +	 * @exec_queue_id. Perf queries can be executed on this exec queue.
> +	 */
> +	DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID,
> +
> +	/**
> +	 * @DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE: Optional engine instance to
> +	 * pass along with @DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID or will default to 0.
> +	 */
> +	DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE,
> +
> +	DRM_XE_OA_PROPERTY_MAX /* non-ABI */
> +};
> +
>   /**
>    * struct drm_xe_oa_config - OA metric configuration
>    *


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

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

* Re: [PATCH 00/16] Add OA functionality to Xe
  2024-02-08 21:34 ` [PATCH 00/16] Add OA functionality to Xe Lionel Landwerlin
@ 2024-02-08 21:56   ` Dixit, Ashutosh
  0 siblings, 0 replies; 42+ messages in thread
From: Dixit, Ashutosh @ 2024-02-08 21:56 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-xe

On Thu, 08 Feb 2024 13:34:42 -0800, Lionel Landwerlin wrote:
>

Hi Lionel,

> Just looked at the series and I'm not seeing a way to reconfigure the OA
> unit with a different config once the stream is opened.
> Was this feature removed?

No, it's still there. Search for 'xe_oa_config_locked' here:

https://patchwork.freedesktop.org/patch/577445/?series=121084&rev=9

In Xe, because there are multiple stream types, we have a PERF layer. OA is
one of the stream types. So these operations are part of the PERF layer now:

/**
 * enum drm_xe_perf_ioctls - Perf fd ioctl's
 *
 * Information exchanged between userspace and kernel for perf fd ioctl's
 * is stream type specific
 */
enum drm_xe_perf_ioctls {
	/** @DRM_XE_PERF_IOCTL_ENABLE: Enable data capture for a stream */
	DRM_XE_PERF_IOCTL_ENABLE = _IO('i', 0x0),

	/** @DRM_XE_PERF_IOCTL_DISABLE: Disable data capture for a stream */
	DRM_XE_PERF_IOCTL_DISABLE = _IO('i', 0x1),

	/** @DRM_XE_PERF_IOCTL_CONFIG: Change stream configuration */
	DRM_XE_PERF_IOCTL_CONFIG = _IO('i', 0x2),

	/** @DRM_XE_PERF_IOCTL_STATUS: Return stream status */
	DRM_XE_PERF_IOCTL_STATUS = _IO('i', 0x3),

	/** @DRM_XE_PERF_IOCTL_INFO: Return stream info */
	DRM_XE_PERF_IOCTL_INFO = _IO('i', 0x4),
};

Thanks.
--
Ashutosh

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

* Re: [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties
  2024-02-08 21:40   ` Lionel Landwerlin
@ 2024-02-08 22:26     ` Dixit, Ashutosh
  2024-02-09  6:25       ` Lionel Landwerlin
  2024-02-12 18:57       ` Umesh Nerlige Ramappa
  0 siblings, 2 replies; 42+ messages in thread
From: Dixit, Ashutosh @ 2024-02-08 22:26 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-xe, Umesh Nerlige Ramappa

On Thu, 08 Feb 2024 13:40:29 -0800, Lionel Landwerlin wrote:

Hi Lionel,

> +
> +	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: Perf counter report format */
> +	DRM_XE_OA_PROPERTY_OA_FORMAT,
> +	/**
> +	 * OA_FORMAT's are specified the same way as in Bspec, in terms of
> +	 * the following quantities: a. enum @drm_xe_oa_format_type
> +	 * b. Counter select c. Counter size and d. BC report
> +	 */
> +#define DRM_XE_OA_FORMAT_MASK_FMT_TYPE		(0xff << 0)
> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SEL	(0xff << 8)
> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE	(0xff << 16)
> +#define DRM_XE_OA_FORMAT_MASK_BC_REPORT		(0xff << 24)
>
> People outside of Intel don't have access to the BSpec.

Hmm, I was assuming Bspec is public, at least parts of it. Since we keep
dropping Bspec references in patch commit messages?

>
> And since there is no page number either

Page numbers are in the commit message, but you are right, they should be
added here.

> , it would just be easier for everybody to say :
>
>      "Refer to the oa_formats array in drivers/gpu/drm/xe/xe_oa.c"

Umesh, what do you think about this? I don't like the idea too much, of
referring to the internal implementation in the uapi, but if Bspec is not
public, and we want to keep this uapi, we'll probably need to do this.

Also, we are directly returning the oa_status register in response to
DRM_XE_PERF_IOCTL_STATUS ioctl (see 'struct drm_xe_oa_stream_status'), so
that also needs access to Bspec. But there I think we can just document the
relevant bits in xe_drm.h.

Thanks.
--
Ashutosh

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

* Re: [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG)
  2024-02-08  5:49 ` [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG) Ashutosh Dixit
@ 2024-02-09  6:23   ` Lionel Landwerlin
  2024-02-09  7:08     ` Dixit, Ashutosh
  0 siblings, 1 reply; 42+ messages in thread
From: Lionel Landwerlin @ 2024-02-09  6:23 UTC (permalink / raw)
  To: Ashutosh Dixit, intel-xe; +Cc: Umesh Nerlige Ramappa

On 08/02/2024 07:49, Ashutosh Dixit wrote:
> Implement majority of OA stream initialization (as part of OA stream open)
> ioctl). OAG buffer is allocated for receiving perf counter samples from
> HW. OAG unit is initialized and the selected OA metric configuration is
> programmed into OAG unit HW using a command/batch buffer.
>
> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
> ---
>   drivers/gpu/drm/xe/regs/xe_gt_regs.h |   3 +
>   drivers/gpu/drm/xe/xe_oa.c           | 391 +++++++++++++++++++++++++++
>   drivers/gpu/drm/xe/xe_oa_types.h     |  79 ++++++
>   3 files changed, 473 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> index 15ac2d284d48f..853d6f9db8a99 100644
> --- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> @@ -134,6 +134,8 @@
>   
>   #define SQCNT1					XE_REG_MCR(0x8718)
>   #define XELPMP_SQCNT1				XE_REG(0x8718)
> +#define   SQCNT1_PMON_ENABLE			REG_BIT(30)
> +#define   SQCNT1_OABPC				REG_BIT(29)
>   #define   ENFORCE_RAR				REG_BIT(23)
>   
>   #define XEHP_SQCM				XE_REG_MCR(0x8724)
> @@ -357,6 +359,7 @@
>   #define ROW_CHICKEN				XE_REG_MCR(0xe4f0, XE_REG_OPTION_MASKED)
>   #define   UGM_BACKUP_MODE			REG_BIT(13)
>   #define   MDQ_ARBITRATION_MODE			REG_BIT(12)
> +#define   STALL_DOP_GATING_DISABLE		REG_BIT(5)
>   #define   EARLY_EOT_DIS				REG_BIT(1)
>   
>   #define ROW_CHICKEN2				XE_REG_MCR(0xe4f4, XE_REG_OPTION_MASKED)
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 915dd71454c7c..f3270fc30065f 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -5,17 +5,25 @@
>   
>   #include <linux/nospec.h>
>   
> +#include <drm/drm_drv.h>
>   #include <drm/xe_drm.h>
>   
> +#include "instructions/xe_mi_commands.h"
>   #include "regs/xe_gt_regs.h"
>   #include "regs/xe_oa_regs.h"
>   #include "xe_device.h"
>   #include "xe_exec_queue.h"
> +#include "xe_bb.h"
> +#include "xe_bo.h"
>   #include "xe_gt.h"
> +#include "xe_gt_mcr.h"
>   #include "xe_mmio.h"
>   #include "xe_oa.h"
> +#include "xe_sched_job.h"
>   #include "xe_perf.h"
>   
> +#define DEFAULT_POLL_FREQUENCY_HZ 200
> +#define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
>   #define XE_OA_UNIT_INVALID U32_MAX
>   
>   struct xe_oa_reg {
> @@ -53,6 +61,13 @@ struct xe_oa_open_param {
>   	struct xe_hw_engine *hwe;
>   };
>   
> +struct xe_oa_config_bo {
> +	struct llist_node node;
> +
> +	struct xe_oa_config *oa_config;
> +	struct xe_bb *bb;
> +};
> +
>   #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
>   
>   static const struct xe_oa_format oa_formats[] = {
> @@ -95,6 +110,378 @@ static void xe_oa_config_put(struct xe_oa_config *oa_config)
>   	kref_put(&oa_config->ref, xe_oa_config_release);
>   }
>   
> +static struct xe_oa_config *xe_oa_config_get(struct xe_oa_config *oa_config)
> +{
> +	return kref_get_unless_zero(&oa_config->ref) ? oa_config : NULL;
> +}
> +
> +static struct xe_oa_config *xe_oa_get_oa_config(struct xe_oa *oa, int metrics_set)
> +{
> +	struct xe_oa_config *oa_config;
> +
> +	rcu_read_lock();
> +	oa_config = idr_find(&oa->metrics_idr, metrics_set);
> +	if (oa_config)
> +		oa_config = xe_oa_config_get(oa_config);
> +	rcu_read_unlock();
> +
> +	return oa_config;
> +}
> +
> +static void free_oa_config_bo(struct xe_oa_config_bo *oa_bo)
> +{
> +	xe_oa_config_put(oa_bo->oa_config);
> +	xe_bb_free(oa_bo->bb, NULL);
> +	kfree(oa_bo);
> +}
> +
> +static const struct xe_oa_regs *__oa_regs(struct xe_oa_stream *stream)
> +{
> +	return &stream->hwe->oa_unit->regs;
> +}
> +
> +static int xe_oa_submit_bb(struct xe_oa_stream *stream, struct xe_bb *bb)
> +{
> +	struct xe_sched_job *job;
> +	struct dma_fence *fence;
> +	long timeout;
> +	int err = 0;
> +
> +	/* Kernel configuration is issued on stream->k_exec_q, not stream->exec_q */
> +	job = xe_bb_create_job(stream->k_exec_q, bb);
> +	if (IS_ERR(job)) {
> +		err = PTR_ERR(job);
> +		goto exit;
> +	}
> +
> +	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)
> +		err = timeout;
> +	else if (!timeout)
> +		err = -ETIME;
> +exit:
> +	return err;
> +}
> +
> +static void write_cs_mi_lri(struct xe_bb *bb, const struct xe_oa_reg *reg_data, u32 n_regs)
> +{
> +	u32 i;
> +
> +#define MI_LOAD_REGISTER_IMM_MAX_REGS (126)
> +
> +	for (i = 0; i < n_regs; i++) {
> +		if ((i % MI_LOAD_REGISTER_IMM_MAX_REGS) == 0) {
> +			u32 n_lri = min_t(u32, n_regs - i,
> +					  MI_LOAD_REGISTER_IMM_MAX_REGS);
> +
> +			bb->cs[bb->len++] = MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(n_lri);
> +		}
> +		bb->cs[bb->len++] = reg_data[i].addr.addr;
> +		bb->cs[bb->len++] = reg_data[i].value;
> +	}
> +}
> +
> +static int num_lri_dwords(int num_regs)
> +{
> +	int count = 0;
> +
> +	if (num_regs > 0) {
> +		count += DIV_ROUND_UP(num_regs, MI_LOAD_REGISTER_IMM_MAX_REGS);
> +		count += num_regs * 2;
> +	}
> +
> +	return count;
> +}
> +
> +static void xe_oa_free_oa_buffer(struct xe_oa_stream *stream)
> +{
> +	xe_bo_unpin_map_no_vm(stream->oa_buffer.bo);
> +}
> +
> +static void xe_oa_free_configs(struct xe_oa_stream *stream)
> +{
> +	struct xe_oa_config_bo *oa_bo, *tmp;
> +
> +	xe_oa_config_put(stream->oa_config);
> +	llist_for_each_entry_safe(oa_bo, tmp, stream->oa_config_bos.first, node)
> +		free_oa_config_bo(oa_bo);
> +}
> +
> +#define HAS_OA_BPC_REPORTING(xe) (GRAPHICS_VERx100(xe) >= 1255)
> +
> +static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
> +{
> +	u32 sqcnt1;
> +
> +	/*
> +	 * Wa_1508761755:xehpsdv, dg2
> +	 * Enable thread stall DOP gating and EU DOP gating.
> +	 */
> +	if (stream->oa->xe->info.platform == XE_DG2) {
> +		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
> +					  _MASKED_BIT_DISABLE(STALL_DOP_GATING_DISABLE));
> +		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
> +					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
> +	}
> +
> +	/* Make sure we disable noa to save power. */
> +	xe_mmio_rmw32(stream->gt, RPM_CONFIG1, GT_NOA_ENABLE, 0);
> +
> +	sqcnt1 = SQCNT1_PMON_ENABLE |
> +		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
> +
> +	/* Reset PMON Enable to save power. */
> +	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, sqcnt1, 0);
> +}
> +
> +static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream)
> +{
> +	struct xe_bo *bo;
> +
> +	BUILD_BUG_ON_NOT_POWER_OF_2(XE_OA_BUFFER_SIZE);
> +	BUILD_BUG_ON(XE_OA_BUFFER_SIZE < SZ_128K || XE_OA_BUFFER_SIZE > SZ_16M);
> +
> +	bo = xe_bo_create_pin_map(stream->oa->xe, stream->gt->tile, NULL,
> +				  XE_OA_BUFFER_SIZE, ttm_bo_type_kernel,
> +				  XE_BO_CREATE_SYSTEM_BIT | XE_BO_CREATE_GGTT_BIT);
> +	if (IS_ERR(bo))
> +		return PTR_ERR(bo);
> +
> +	stream->oa_buffer.bo = bo;
> +	stream->oa_buffer.vaddr = bo->vmap.vaddr;
> +	return 0;
> +}
> +
> +static struct xe_oa_config_bo *
> +__xe_oa_alloc_config_buffer(struct xe_oa_stream *stream, struct xe_oa_config *oa_config)
> +{
> +	struct xe_oa_config_bo *oa_bo;
> +	size_t config_length;
> +	struct xe_bb *bb;
> +
> +	oa_bo = kzalloc(sizeof(*oa_bo), GFP_KERNEL);
> +	if (!oa_bo)
> +		return ERR_PTR(-ENOMEM);
> +
> +	config_length = num_lri_dwords(oa_config->regs_len);
> +	config_length = ALIGN(sizeof(u32) * config_length, XE_PAGE_SIZE) / sizeof(u32);
> +
> +	bb = xe_bb_new(stream->gt, config_length, false);
> +	if (IS_ERR(bb))
> +		goto err_free;
> +
> +	write_cs_mi_lri(bb, oa_config->regs, oa_config->regs_len);
> +
> +	oa_bo->bb = bb;
> +	oa_bo->oa_config = xe_oa_config_get(oa_config);
> +	llist_add(&oa_bo->node, &stream->oa_config_bos);
> +
> +	return oa_bo;
> +err_free:
> +	kfree(oa_bo);
> +	return ERR_CAST(bb);
> +}
> +
> +static struct xe_oa_config_bo *xe_oa_alloc_config_buffer(struct xe_oa_stream *stream)
> +{
> +	struct xe_oa_config *oa_config = stream->oa_config;
> +	struct xe_oa_config_bo *oa_bo;
> +
> +	/* Look for the buffer in the already allocated BOs attached to the stream */
> +	llist_for_each_entry(oa_bo, stream->oa_config_bos.first, node) {
> +		if (oa_bo->oa_config == oa_config &&
> +		    memcmp(oa_bo->oa_config->uuid, oa_config->uuid,
> +			   sizeof(oa_config->uuid)) == 0)
> +			goto out;
> +	}
> +
> +	oa_bo = __xe_oa_alloc_config_buffer(stream, oa_config);
> +out:
> +	return oa_bo;
> +}
> +
> +static int xe_oa_emit_oa_config(struct xe_oa_stream *stream)
> +{
> +#define NOA_PROGRAM_ADDITIONAL_DELAY_US 500
> +	struct xe_oa_config_bo *oa_bo;
> +	int err, us = NOA_PROGRAM_ADDITIONAL_DELAY_US;
> +
> +	oa_bo = xe_oa_alloc_config_buffer(stream);
> +	if (IS_ERR(oa_bo)) {
> +		err = PTR_ERR(oa_bo);
> +		goto exit;
> +	}
> +
> +	err = xe_oa_submit_bb(stream, oa_bo->bb);
> +
> +	/* Additional empirical delay needed for NOA programming after registers are written */
> +	usleep_range(us, 2 * us);


Looks like the entire oa_config emission is synchronous.

That's a difference from i915 where we could just pipeline all the 
config changes with perf queries in between.

If there was a mechanism to return a syncobj in this ioctl, we could do 
the wait from userspace and/or pipeline more submissions.


-Lionel


> +exit:
> +	return err;
> +}
> +
> +static u32 oag_report_ctx_switches(const struct xe_oa_stream *stream)
> +{
> +	/* If user didn't require OA reports, ask HW not to emit ctx switch reports */
> +	return _MASKED_FIELD(OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS,
> +			     stream->sample ?
> +			     0 : OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS);
> +}
> +
> +static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
> +{
> +	u32 oa_debug, sqcnt1;
> +
> +	/*
> +	 * Wa_1508761755:xehpsdv, dg2
> +	 * EU NOA signals behave incorrectly if EU clock gating is enabled.
> +	 * Disable thread stall DOP gating and EU DOP gating.
> +	 */
> +	if (stream->oa->xe->info.platform == XE_DG2) {
> +		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
> +					  _MASKED_BIT_ENABLE(STALL_DOP_GATING_DISABLE));
> +		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
> +					  _MASKED_BIT_ENABLE(DISABLE_DOP_GATING));
> +	}
> +
> +	/* Disable clk ratio reports */
> +	oa_debug = OAG_OA_DEBUG_DISABLE_CLK_RATIO_REPORTS |
> +		OAG_OA_DEBUG_INCLUDE_CLK_RATIO;
> +
> +	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_debug,
> +			_MASKED_BIT_ENABLE(oa_debug) |
> +			oag_report_ctx_switches(stream));
> +
> +	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctx_ctrl, stream->periodic ?
> +			(OAG_OAGLBCTXCTRL_COUNTER_RESUME |
> +			 OAG_OAGLBCTXCTRL_TIMER_ENABLE |
> +			 REG_FIELD_PREP(OAG_OAGLBCTXCTRL_TIMER_PERIOD_MASK,
> +					stream->period_exponent)) : 0);
> +
> +	/*
> +	 * Initialize Super Queue Internal Cnt Register
> +	 * Set PMON Enable in order to collect valid metrics
> +	 * Enable bytes per clock reporting
> +	 */
> +	sqcnt1 = SQCNT1_PMON_ENABLE |
> +		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
> +
> +	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, 0, sqcnt1);
> +
> +	return xe_oa_emit_oa_config(stream);
> +}
> +
> +static int xe_oa_stream_init(struct xe_oa_stream *stream,
> +			     struct xe_oa_open_param *param)
> +{
> +	struct xe_oa_unit *u = param->hwe->oa_unit;
> +	struct xe_gt *gt = param->hwe->gt;
> +	int ret;
> +
> +	stream->exec_q = param->exec_q;
> +	stream->poll_period_ns = DEFAULT_POLL_PERIOD_NS;
> +	stream->hwe = param->hwe;
> +	stream->gt = stream->hwe->gt;
> +	stream->oa_buffer.format = &stream->oa->oa_formats[param->oa_format];
> +
> +	stream->sample = param->sample;
> +	stream->periodic = param->period_exponent > 0;
> +	stream->period_exponent = param->period_exponent;
> +
> +	stream->oa_config = xe_oa_get_oa_config(stream->oa, param->metric_set);
> +	if (!stream->oa_config) {
> +		drm_dbg(&stream->oa->xe->drm, "Invalid OA config id=%i\n", param->metric_set);
> +		ret = -EINVAL;
> +		goto exit;
> +	}
> +
> +	ret = xe_oa_alloc_oa_buffer(stream);
> +	if (ret)
> +		goto err_free_configs;
> +
> +	/* Take runtime pm ref and forcewake to disable RC6 */
> +	xe_device_mem_access_get(stream->oa->xe);
> +	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> +
> +	stream->k_exec_q = xe_exec_queue_create(stream->oa->xe, NULL,
> +						BIT(stream->hwe->logical_instance), 1,
> +						stream->hwe, EXEC_QUEUE_FLAG_KERNEL, 0);
> +	if (IS_ERR(stream->k_exec_q)) {
> +		ret = PTR_ERR(stream->k_exec_q);
> +		drm_err(&stream->oa->xe->drm, "gt%d, hwe %s, xe_exec_queue_create failed=%d",
> +			stream->gt->info.id, stream->hwe->name, ret);
> +		goto err_fw_put;
> +	}
> +
> +	ret = xe_oa_enable_metric_set(stream);
> +	if (ret) {
> +		drm_dbg(&stream->oa->xe->drm, "Unable to enable metric set\n");
> +		goto err_put_k_exec_q;
> +	}
> +
> +	drm_dbg(&stream->oa->xe->drm, "opening stream oa config uuid=%s\n",
> +		stream->oa_config->uuid);
> +
> +	WRITE_ONCE(u->exclusive_stream, stream);
> +
> +	spin_lock_init(&stream->oa_buffer.ptr_lock);
> +	mutex_init(&stream->stream_lock);
> +
> +	return 0;
> +
> +err_put_k_exec_q:
> +	xe_oa_disable_metric_set(stream);
> +	xe_exec_queue_put(stream->k_exec_q);
> +err_fw_put:
> +	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> +	xe_device_mem_access_put(stream->oa->xe);
> +	xe_oa_free_oa_buffer(stream);
> +err_free_configs:
> +	xe_oa_free_configs(stream);
> +exit:
> +	return ret;
> +}
> +
> +static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
> +					  struct xe_oa_open_param *param)
> +{
> +	struct xe_oa_stream *stream;
> +	int stream_fd;
> +	int ret;
> +
> +	/* We currently only allow exclusive access */
> +	if (param->hwe->oa_unit->exclusive_stream) {
> +		drm_dbg(&oa->xe->drm, "OA unit already in use\n");
> +		ret = -EBUSY;
> +		goto exit;
> +	}
> +
> +	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
> +	if (!stream) {
> +		ret = -ENOMEM;
> +		goto exit;
> +	}
> +
> +	stream->oa = oa;
> +	ret = xe_oa_stream_init(stream, param);
> +	if (ret)
> +		goto err_free;
> +
> +	/* Hold a reference on the drm device till stream_fd is released */
> +	drm_dev_get(&stream->oa->xe->drm);
> +
> +	return stream_fd;
> +err_free:
> +	kfree(stream);
> +exit:
> +	return ret;
> +}
> +
>   /*
>    * OA timestamp frequency = CS timestamp frequency in most platforms. On some
>    * platforms OA unit ignores the CTC_SHIFT and the 2 timestamps differ. In such
> @@ -416,6 +803,10 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data, struct drm_file
>   		oa_freq_hz = div64_u64(NSEC_PER_SEC, oa_period);
>   		drm_dbg(&oa->xe->drm, "Using periodic sampling freq %lld Hz\n", oa_freq_hz);
>   	}
> +
> +	mutex_lock(&param.hwe->gt->oa.gt_lock);
> +	ret = xe_oa_stream_open_ioctl_locked(oa, &param);
> +	mutex_unlock(&param.hwe->gt->oa.gt_lock);
>   err_exec_q:
>   	if (ret < 0 && param.exec_q)
>   		xe_exec_queue_put(param.exec_q);
> diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
> index 594e38c6328d2..539830f5f0b24 100644
> --- a/drivers/gpu/drm/xe/xe_oa_types.h
> +++ b/drivers/gpu/drm/xe/xe_oa_types.h
> @@ -14,6 +14,8 @@
>   #include <drm/xe_drm.h>
>   #include "regs/xe_reg_defs.h"
>   
> +#define XE_OA_BUFFER_SIZE SZ_16M
> +
>   enum xe_oa_report_header {
>   	HDR_32_BIT = 0,
>   	HDR_64_BIT,
> @@ -141,4 +143,81 @@ struct xe_oa {
>   	/** @oa_unit_ids: tracks oa unit ids assigned across gt's */
>   	u16 oa_unit_ids;
>   };
> +
> +/** @oa_buffer: State of the stream OA buffer */
> +struct oa_buffer {
> +	/** @format: data format */
> +	const struct xe_oa_format *format;
> +
> +	/** @format: xe_bo backing the OA buffer */
> +	struct xe_bo *bo;
> +
> +	/** @vaddr: mapped vaddr of the OA buffer */
> +	u8 *vaddr;
> +
> +	/** @ptr_lock: Lock protecting reads/writes to head/tail pointers */
> +	spinlock_t ptr_lock;
> +
> +	/** @head: Cached head to read from */
> +	u32 head;
> +
> +	/** @tail: The last verified cached tail where HW has completed writing */
> +	u32 tail;
> +};
> +
> +/**
> + * struct xe_oa_stream - state for a single open stream FD
> + */
> +struct xe_oa_stream {
> +	/** @oa: xe_oa backpointer */
> +	struct xe_oa *oa;
> +
> +	/** @gt: gt associated with the oa stream */
> +	struct xe_gt *gt;
> +
> +	/** @hwe: hardware engine associated with this oa stream */
> +	struct xe_hw_engine *hwe;
> +
> +	/** @lock: Lock serializing stream operations */
> +	struct mutex stream_lock;
> +
> +	/** @sample: true if DRM_XE_OA_PROP_SAMPLE_OA is provided */
> +	bool sample;
> +
> +	/** @exec_q: Exec queue corresponding to DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID */
> +	struct xe_exec_queue *exec_q;
> +
> +	/** @k_exec_q: kernel exec_q used for OA programming batch submissions */
> +	struct xe_exec_queue *k_exec_q;
> +
> +	/** @enabled: Whether the stream is currently enabled */
> +	bool enabled;
> +
> +	/** @oa_config: OA configuration used by the stream */
> +	struct xe_oa_config *oa_config;
> +
> +	/** @oa_config_bos: List of struct @xe_oa_config_bo's */
> +	struct llist_head oa_config_bos;
> +
> +	/** @poll_check_timer: Timer to periodically check for data in the OA buffer */
> +	struct hrtimer poll_check_timer;
> +
> +	/** @poll_wq: Wait queue for waiting for OA data to be available */
> +	wait_queue_head_t poll_wq;
> +
> +	/** @pollin: Whether there is data available to read */
> +	bool pollin;
> +
> +	/** @periodic: Whether periodic sampling is currently enabled */
> +	bool periodic;
> +
> +	/** @period_exponent: OA unit sampling frequency is derived from this */
> +	int period_exponent;
> +
> +	/** @oa_buffer: OA buffer for the stream */
> +	struct oa_buffer oa_buffer;
> +
> +	/** @poll_period_ns: hrtimer period for checking OA buffer for available data */
> +	u64 poll_period_ns;
> +};
>   #endif



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

* Re: [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties
  2024-02-08 22:26     ` Dixit, Ashutosh
@ 2024-02-09  6:25       ` Lionel Landwerlin
  2024-02-09  6:46         ` Dixit, Ashutosh
  2024-02-12 18:57       ` Umesh Nerlige Ramappa
  1 sibling, 1 reply; 42+ messages in thread
From: Lionel Landwerlin @ 2024-02-09  6:25 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: intel-xe, Umesh Nerlige Ramappa

On 09/02/2024 00:26, Dixit, Ashutosh wrote:
> On Thu, 08 Feb 2024 13:40:29 -0800, Lionel Landwerlin wrote:
>
> Hi Lionel,
>
>> +
>> +	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: Perf counter report format */
>> +	DRM_XE_OA_PROPERTY_OA_FORMAT,
>> +	/**
>> +	 * OA_FORMAT's are specified the same way as in Bspec, in terms of
>> +	 * the following quantities: a. enum @drm_xe_oa_format_type
>> +	 * b. Counter select c. Counter size and d. BC report
>> +	 */
>> +#define DRM_XE_OA_FORMAT_MASK_FMT_TYPE		(0xff << 0)
>> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SEL	(0xff << 8)
>> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE	(0xff << 16)
>> +#define DRM_XE_OA_FORMAT_MASK_BC_REPORT		(0xff << 24)
>>
>> People outside of Intel don't have access to the BSpec.
> Hmm, I was assuming Bspec is public, at least parts of it. Since we keep
> dropping Bspec references in patch commit messages?
>
>> And since there is no page number either
> Page numbers are in the commit message, but you are right, they should be
> added here.
>
>> , it would just be easier for everybody to say :
>>
>>       "Refer to the oa_formats array in drivers/gpu/drm/xe/xe_oa.c"
> Umesh, what do you think about this? I don't like the idea too much, of
> referring to the internal implementation in the uapi, but if Bspec is not
> public, and we want to keep this uapi, we'll probably need to do this.
>
> Also, we are directly returning the oa_status register in response to
> DRM_XE_PERF_IOCTL_STATUS ioctl (see 'struct drm_xe_oa_stream_status'), so
> that also needs access to Bspec. But there I think we can just document the
> relevant bits in xe_drm.h.


What got me confused is the BC field, which I expected would take some 
non-zero value so Gfx8+ formats (since some of them has B/C counters).

But actually it's zero in xe_oa.c


-Lionel


>
> Thanks.
> --
> Ashutosh



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

* Re: [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties
  2024-02-09  6:25       ` Lionel Landwerlin
@ 2024-02-09  6:46         ` Dixit, Ashutosh
  0 siblings, 0 replies; 42+ messages in thread
From: Dixit, Ashutosh @ 2024-02-09  6:46 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-xe, Umesh Nerlige Ramappa

On Thu, 08 Feb 2024 22:25:40 -0800, Lionel Landwerlin wrote:
>
> On 09/02/2024 00:26, Dixit, Ashutosh wrote:
> > On Thu, 08 Feb 2024 13:40:29 -0800, Lionel Landwerlin wrote:
> >
> > Hi Lionel,
> >
> >> +
> >> +	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: Perf counter report format */
> >> +	DRM_XE_OA_PROPERTY_OA_FORMAT,
> >> +	/**
> >> +	 * OA_FORMAT's are specified the same way as in Bspec, in terms of
> >> +	 * the following quantities: a. enum @drm_xe_oa_format_type
> >> +	 * b. Counter select c. Counter size and d. BC report
> >> +	 */
> >> +#define DRM_XE_OA_FORMAT_MASK_FMT_TYPE		(0xff << 0)
> >> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SEL	(0xff << 8)
> >> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE	(0xff << 16)
> >> +#define DRM_XE_OA_FORMAT_MASK_BC_REPORT		(0xff << 24)
> >>
> >> People outside of Intel don't have access to the BSpec.
> > Hmm, I was assuming Bspec is public, at least parts of it. Since we keep
> > dropping Bspec references in patch commit messages?
> >
> >> And since there is no page number either
> > Page numbers are in the commit message, but you are right, they should be
> > added here.
> >
> >> , it would just be easier for everybody to say :
> >>
> >>       "Refer to the oa_formats array in drivers/gpu/drm/xe/xe_oa.c"
> > Umesh, what do you think about this? I don't like the idea too much, of
> > referring to the internal implementation in the uapi, but if Bspec is not
> > public, and we want to keep this uapi, we'll probably need to do this.
> >
> > Also, we are directly returning the oa_status register in response to
> > DRM_XE_PERF_IOCTL_STATUS ioctl (see 'struct drm_xe_oa_stream_status'), so
> > that also needs access to Bspec. But there I think we can just document the
> > relevant bits in xe_drm.h.
>
>
> What got me confused is the BC field, which I expected would take some
> non-zero value so Gfx8+ formats (since some of them has B/C counters).
>
> But actually it's zero in xe_oa.c

I know what you are saying, but seems counter_size and bc_report fields got
introduced (and are applicable) only to Xe2+. So to me the code looks
correct.

Compare Bspec:52198 (Xe1 and older) with Bspec:60942 (Xe2+).

I will add the Bspec page number and "Refer to the oa_formats array in
drivers/gpu/drm/xe/xe_oa.c" to xe_drm.h.

Thanks.
--
Ashutosh

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

* Re: [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG)
  2024-02-09  6:23   ` Lionel Landwerlin
@ 2024-02-09  7:08     ` Dixit, Ashutosh
  2024-02-09  8:14       ` Lionel Landwerlin
  0 siblings, 1 reply; 42+ messages in thread
From: Dixit, Ashutosh @ 2024-02-09  7:08 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-xe, Umesh Nerlige Ramappa

On Thu, 08 Feb 2024 22:23:30 -0800, Lionel Landwerlin wrote:
>

Hi Lionel,

> > +static int xe_oa_emit_oa_config(struct xe_oa_stream *stream)
> > +{
> > +#define NOA_PROGRAM_ADDITIONAL_DELAY_US 500
> > +	struct xe_oa_config_bo *oa_bo;
> > +	int err, us = NOA_PROGRAM_ADDITIONAL_DELAY_US;
> > +
> > +	oa_bo = xe_oa_alloc_config_buffer(stream);
> > +	if (IS_ERR(oa_bo)) {
> > +		err = PTR_ERR(oa_bo);
> > +		goto exit;
> > +	}
> > +
> > +	err = xe_oa_submit_bb(stream, oa_bo->bb);
> > +
> > +	/* Additional empirical delay needed for NOA programming after registers are written */
> > +	usleep_range(us, 2 * us);
>
> Looks like the entire oa_config emission is synchronous.

Yes that is indeed the case in this patchset.

> That's a difference from i915 where we could just pipeline all the config
> changes with perf queries in between.
>
> If there was a mechanism to return a syncobj in this ioctl, we could do the
> wait from userspace and/or pipeline more submissions.

That is the plan. To expose syncobj's in OA properties and make also make
the oa_config emission asynchronous. But have not been able to get to it
yet (IGT's are mostly getting ready, but now we may also need to add
support for GPUVis before we can merge these patches, if we can't get a
temporary waiver).

So the direction right now is to get the current patchset merged before
adding more features (like the syncobj).

(Also, separately I'm trying to figure out if a delay similar to the NOA
programming delay is really needed when we have PES registers, the case for
Xe2+. Looks like it might not be, but still needs to be confirmed).

Thanks.
--
Ashutosh

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

* Re: [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG)
  2024-02-09  7:08     ` Dixit, Ashutosh
@ 2024-02-09  8:14       ` Lionel Landwerlin
  2024-02-13 17:04         ` Dixit, Ashutosh
  0 siblings, 1 reply; 42+ messages in thread
From: Lionel Landwerlin @ 2024-02-09  8:14 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: intel-xe, Umesh Nerlige Ramappa

On 09/02/2024 09:08, Dixit, Ashutosh wrote:
> On Thu, 08 Feb 2024 22:23:30 -0800, Lionel Landwerlin wrote:
> Hi Lionel,
>
>>> +static int xe_oa_emit_oa_config(struct xe_oa_stream *stream)
>>> +{
>>> +#define NOA_PROGRAM_ADDITIONAL_DELAY_US 500
>>> +	struct xe_oa_config_bo *oa_bo;
>>> +	int err, us = NOA_PROGRAM_ADDITIONAL_DELAY_US;
>>> +
>>> +	oa_bo = xe_oa_alloc_config_buffer(stream);
>>> +	if (IS_ERR(oa_bo)) {
>>> +		err = PTR_ERR(oa_bo);
>>> +		goto exit;
>>> +	}
>>> +
>>> +	err = xe_oa_submit_bb(stream, oa_bo->bb);
>>> +
>>> +	/* Additional empirical delay needed for NOA programming after registers are written */
>>> +	usleep_range(us, 2 * us);
>> Looks like the entire oa_config emission is synchronous.
> Yes that is indeed the case in this patchset.
>
>> That's a difference from i915 where we could just pipeline all the config
>> changes with perf queries in between.
>>
>> If there was a mechanism to return a syncobj in this ioctl, we could do the
>> wait from userspace and/or pipeline more submissions.
> That is the plan. To expose syncobj's in OA properties and make also make
> the oa_config emission asynchronous. But have not been able to get to it
> yet (IGT's are mostly getting ready, but now we may also need to add
> support for GPUVis before we can merge these patches, if we can't get a
> temporary waiver).
>
> So the direction right now is to get the current patchset merged before
> adding more features (like the syncobj).


Thanks,


Any idea when that will happen?

I suppose you'll have to define a new ioctl for this?


-Lionel


>
> (Also, separately I'm trying to figure out if a delay similar to the NOA
> programming delay is really needed when we have PES registers, the case for
> Xe2+. Looks like it might not be, but still needs to be confirmed).
>
> Thanks.
> --
> Ashutosh



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

* Re: [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties
  2024-02-08 22:26     ` Dixit, Ashutosh
  2024-02-09  6:25       ` Lionel Landwerlin
@ 2024-02-12 18:57       ` Umesh Nerlige Ramappa
  2024-02-12 19:08         ` Umesh Nerlige Ramappa
  1 sibling, 1 reply; 42+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-02-12 18:57 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: Lionel Landwerlin, intel-xe

On Thu, Feb 08, 2024 at 02:26:39PM -0800, Dixit, Ashutosh wrote:
>On Thu, 08 Feb 2024 13:40:29 -0800, Lionel Landwerlin wrote:
>
>Hi Lionel,
>
>> +
>> +	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: Perf counter report format */
>> +	DRM_XE_OA_PROPERTY_OA_FORMAT,
>> +	/**
>> +	 * OA_FORMAT's are specified the same way as in Bspec, in terms of
>> +	 * the following quantities: a. enum @drm_xe_oa_format_type
>> +	 * b. Counter select c. Counter size and d. BC report
>> +	 */
>> +#define DRM_XE_OA_FORMAT_MASK_FMT_TYPE		(0xff << 0)
>> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SEL	(0xff << 8)
>> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE	(0xff << 16)
>> +#define DRM_XE_OA_FORMAT_MASK_BC_REPORT		(0xff << 24)
>>
>> People outside of Intel don't have access to the BSpec.
>
>Hmm, I was assuming Bspec is public, at least parts of it. Since we keep
>dropping Bspec references in patch commit messages?
>
>>
>> And since there is no page number either
>
>Page numbers are in the commit message, but you are right, they should be
>added here.
>
>> , it would just be easier for everybody to say :
>>
>>      "Refer to the oa_formats array in drivers/gpu/drm/xe/xe_oa.c"
>
>Umesh, what do you think about this? I don't like the idea too much, of
>referring to the internal implementation in the uapi, but if Bspec is not
>public, and we want to keep this uapi, we'll probably need to do this.
>
>Also, we are directly returning the oa_status register in response to
>DRM_XE_PERF_IOCTL_STATUS ioctl (see 'struct drm_xe_oa_stream_status'), so
>that also needs access to Bspec. But there I think we can just document the
>relevant bits in xe_drm.h.

If that's the case, then based on the PRM documents, I would just put 
this in the comment - 

"Refer to performance counter report formats under the Observability 
section in the PRM"

Thanks,
Umesh

>
>Thanks.
>--
>Ashutosh

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

* Re: [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties
  2024-02-12 18:57       ` Umesh Nerlige Ramappa
@ 2024-02-12 19:08         ` Umesh Nerlige Ramappa
  2024-02-13  7:04           ` Dixit, Ashutosh
  0 siblings, 1 reply; 42+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-02-12 19:08 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: Lionel Landwerlin, intel-xe

On Mon, Feb 12, 2024 at 10:57:18AM -0800, Umesh Nerlige Ramappa wrote:
>On Thu, Feb 08, 2024 at 02:26:39PM -0800, Dixit, Ashutosh wrote:
>>On Thu, 08 Feb 2024 13:40:29 -0800, Lionel Landwerlin wrote:
>>
>>Hi Lionel,
>>
>>>+
>>>+	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: Perf counter report format */
>>>+	DRM_XE_OA_PROPERTY_OA_FORMAT,
>>>+	/**
>>>+	 * OA_FORMAT's are specified the same way as in Bspec, in terms of
>>>+	 * the following quantities: a. enum @drm_xe_oa_format_type
>>>+	 * b. Counter select c. Counter size and d. BC report
>>>+	 */
>>>+#define DRM_XE_OA_FORMAT_MASK_FMT_TYPE		(0xff << 0)
>>>+#define DRM_XE_OA_FORMAT_MASK_COUNTER_SEL	(0xff << 8)
>>>+#define DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE	(0xff << 16)
>>>+#define DRM_XE_OA_FORMAT_MASK_BC_REPORT		(0xff << 24)
>>>
>>>People outside of Intel don't have access to the BSpec.
>>
>>Hmm, I was assuming Bspec is public, at least parts of it. Since we keep
>>dropping Bspec references in patch commit messages?
>>
>>>
>>>And since there is no page number either
>>
>>Page numbers are in the commit message, but you are right, they should be
>>added here.
>>
>>>, it would just be easier for everybody to say :
>>>
>>>     "Refer to the oa_formats array in drivers/gpu/drm/xe/xe_oa.c"
>>
>>Umesh, what do you think about this? I don't like the idea too much, of
>>referring to the internal implementation in the uapi, but if Bspec is not
>>public, and we want to keep this uapi, we'll probably need to do this.
>>
>>Also, we are directly returning the oa_status register in response to
>>DRM_XE_PERF_IOCTL_STATUS ioctl (see 'struct drm_xe_oa_stream_status'), so
>>that also needs access to Bspec. But there I think we can just document the
>>relevant bits in xe_drm.h.
>
>If that's the case, then based on the PRM documents, I would just put 
>this in the comment -
>
>"Refer to performance counter report formats under the Observability 
>section in the PRM"


Missed your comment on the oa_status reg. In general, we should avoid 
exposing the register as is in the uApi. Instead we should just have a 
set of enums or bits that define a particular state. That would do away 
with the need to point to the spec.

If you disagree, then PRM reference should be good enough - OAG_OASTATUS 
register in the PRM or Hardware Specifications.

Specifically from this link:
https://www.intel.com/content/www/us/en/docs/graphics-for-linux/developer-reference/1-0/overview.html

Thanks,
Umesh

>
>Thanks,
>Umesh
>
>>
>>Thanks.
>>--
>>Ashutosh

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

* Re: [PATCH 13/16] drm/xe/oa/uapi: Query OA unit properties
  2024-02-08  5:49 ` [PATCH 13/16] drm/xe/oa/uapi: Query OA unit properties Ashutosh Dixit
@ 2024-02-12 19:59   ` Umesh Nerlige Ramappa
  2024-02-13  7:09     ` Dixit, Ashutosh
  0 siblings, 1 reply; 42+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-02-12 19:59 UTC (permalink / raw)
  To: Ashutosh Dixit; +Cc: intel-xe

On Wed, Feb 07, 2024 at 09:49:13PM -0800, Ashutosh Dixit wrote:
>Implement query for properties of OA units present on a device.
>
>v2: Clean up reserved/pad fields (Umesh)
>    Follow the same scheme as other query structs
>v3: Skip reporting reserved engines attached to OA units
>v4: Expose oa_buf_size via DRM_XE_PERF_IOCTL_INFO (Umesh)
>
>Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
>---
> drivers/gpu/drm/xe/xe_oa.c    | 13 ++++++
> drivers/gpu/drm/xe/xe_query.c | 79 +++++++++++++++++++++++++++++++++++
> include/uapi/drm/xe_drm.h     | 75 +++++++++++++++++++++++++++++++++
> 3 files changed, 167 insertions(+)
>
>diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>index dc138e5a10087..1178620cd4e76 100644
>--- a/drivers/gpu/drm/xe/xe_oa.c
>+++ b/drivers/gpu/drm/xe/xe_oa.c
>@@ -1018,6 +1018,17 @@ static long xe_oa_status_locked(struct xe_oa_stream *stream, unsigned long arg)
> 	return 0;
> }
>
>+static long xe_oa_info_locked(struct xe_oa_stream *stream, unsigned long arg)
>+{
>+	struct drm_xe_oa_stream_info info = { .oa_buf_size = XE_OA_BUFFER_SIZE, };
>+	void __user *uaddr = (void __user *)arg;
>+
>+	if (copy_to_user(uaddr, &info, sizeof(info)))
>+		return -EFAULT;
>+
>+	return 0;
>+}
>+
> static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
> 			       unsigned int cmd,
> 			       unsigned long arg)
>@@ -1033,6 +1044,8 @@ static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
> 		return xe_oa_config_locked(stream, arg);
> 	case DRM_XE_PERF_IOCTL_STATUS:
> 		return xe_oa_status_locked(stream, arg);
>+	case DRM_XE_PERF_IOCTL_INFO:
>+		return xe_oa_info_locked(stream, arg);
> 	}
>
> 	return -EINVAL;
>diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
>index 4f1ab91dbec58..828be65a076d6 100644
>--- a/drivers/gpu/drm/xe/xe_query.c
>+++ b/drivers/gpu/drm/xe/xe_query.c
>@@ -516,6 +516,84 @@ static int query_gt_topology(struct xe_device *xe,
> 	return 0;
> }
>
>+static size_t calc_oa_unit_query_size(struct xe_device *xe)
>+{
>+	size_t size = sizeof(struct drm_xe_query_oa_units);
>+	struct xe_gt *gt;
>+	int i, id;
>+
>+	for_each_gt(gt, xe, id) {
>+		for (i = 0; i < gt->oa.num_oa_units; i++) {
>+			size += sizeof(struct drm_xe_oa_unit);
>+			size += gt->oa.oa_unit[i].num_engines *
>+				sizeof(struct drm_xe_engine_class_instance);
>+		}
>+	}
>+
>+	return size;
>+}
>+
>+static int query_oa_units(struct xe_device *xe,
>+			  struct drm_xe_device_query *query)
>+{
>+	void __user *query_ptr = u64_to_user_ptr(query->data);
>+	size_t size = calc_oa_unit_query_size(xe);
>+	struct drm_xe_query_oa_units *qoa;
>+	enum xe_hw_engine_id hwe_id;
>+	struct drm_xe_oa_unit *du;
>+	struct xe_hw_engine *hwe;
>+	struct xe_oa_unit *u;
>+	int gt_id, i, j, ret;
>+	struct xe_gt *gt;
>+	u8 *pdu;
>+
>+	if (query->size == 0) {
>+		query->size = size;
>+		return 0;
>+	} else if (XE_IOCTL_DBG(xe, query->size != size)) {
>+		return -EINVAL;
>+	}
>+
>+	qoa = kzalloc(size, GFP_KERNEL);
>+	if (!qoa)
>+		return -ENOMEM;
>+
>+	pdu = (u8 *)&qoa->oa_units[0];
>+	for_each_gt(gt, xe, gt_id) {
>+		for (i = 0; i < gt->oa.num_oa_units; i++) {
>+			u = &gt->oa.oa_unit[i];
>+			du = (struct drm_xe_oa_unit *)pdu;
>+
>+			du->oa_unit_id = u->oa_unit_id;
>+			du->oa_unit_type = u->type;
>+			du->oa_timestamp_freq = xe_oa_timestamp_frequency(gt);
>+
>+			for (j = 1; j < DRM_XE_OA_PROPERTY_MAX; j++)
>+				du->capabilities |= BIT(j);
>+
>+			j = 0;
>+			for_each_hw_engine(hwe, gt, hwe_id) {
>+				if (!xe_hw_engine_is_reserved(hwe) &&
>+				    xe_oa_unit_id(hwe) == u->oa_unit_id) {
>+					du->eci[j].engine_class =
>+						xe_to_user_engine_class[hwe->class];
>+					du->eci[j].engine_instance = hwe->logical_instance;
>+					du->eci[j].gt_id = gt->info.id;
>+					j++;
>+				}
>+			}
>+			du->num_engines = j;
>+			pdu += sizeof(*du) + j * sizeof(du->eci[0]);
>+			qoa->num_oa_units++;
>+		}
>+	}
>+
>+	ret = copy_to_user(query_ptr, qoa, size);
>+	kfree(qoa);
>+
>+	return ret ? -EFAULT : 0;
>+}
>+
> static int (* const xe_query_funcs[])(struct xe_device *xe,
> 				      struct drm_xe_device_query *query) = {
> 	query_engines,
>@@ -525,6 +603,7 @@ static int (* const xe_query_funcs[])(struct xe_device *xe,
> 	query_hwconfig,
> 	query_gt_topology,
> 	query_engine_cycles,
>+	query_oa_units,
> };
>
> 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 df0dfd60b52fa..bd535343a406c 100644
>--- a/include/uapi/drm/xe_drm.h
>+++ b/include/uapi/drm/xe_drm.h
>@@ -646,6 +646,7 @@ struct drm_xe_device_query {
> #define DRM_XE_DEVICE_QUERY_HWCONFIG		4
> #define DRM_XE_DEVICE_QUERY_GT_TOPOLOGY		5
> #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES	6
>+#define DRM_XE_DEVICE_QUERY_OA_UNITS		7
> 	/** @query: The type of data to query */
> 	__u32 query;
>
>@@ -1411,6 +1412,68 @@ enum drm_xe_oa_unit_type {
> 	DRM_XE_OA_UNIT_TYPE_OAM,
> };
>
>+/**
>+ * struct drm_xe_oa_unit - describe OA unit
>+ */
>+struct drm_xe_oa_unit {
>+	/** @oa_unit_id: OA unit ID */
>+	__u32 oa_unit_id;
>+
>+	/** @oa_unit_type: OA unit type of @drm_xe_oa_unit_type */
>+	__u32 oa_unit_type;
>+
>+	/**
>+	 * @capabilities: OA capabilities bit-mask: this is a bit-mask of
>+	 * property id's in enum @drm_xe_oa_property_id
>+	 */
>+	__u64 capabilities;

IMO, this should be a specific set of flags that are defined as and when 
we add new features so that it helps UMDs detect them. Some features or 
behaviors may be independent of the properties, so a 1:1 mapping to 
properties may not be the best solution. In the past we have had i915 
perf revision bumps even when we haven't added a new property (For ex: 
when we supported media engines in i915 - class:instance properties were 
already present and we just added support for OAM in that case. For such 
cases capabilities would define a new bit, but not properties).

The first set of properties defined with this series should not need a 
capabilities entry. If the uApi changes in future or adds new features, 
we need to use these bits.

Thanks,
Umesh

>+
>+	/** @oa_timestamp_freq: OA timestamp freq */
>+	__u64 oa_timestamp_freq;
>+
>+	/** @reserved: MBZ */
>+	__u64 reserved[4];
>+
>+	/** @num_engines: number of engines in @eci array */
>+	__u64 num_engines;
>+
>+	/** @eci: engines attached to this OA unit */
>+	struct drm_xe_engine_class_instance eci[];
>+};
>+
>+/**
>+ * struct drm_xe_query_oa_units - describe OA units
>+ *
>+ * If a query is made with a struct drm_xe_device_query where .query
>+ * is equal to DRM_XE_DEVICE_QUERY_OA_UNITS, then the reply uses struct
>+ * drm_xe_query_oa_units in .data.
>+ *
>+ * OA unit properties for all OA units can be accessed using a code block
>+ * such as the one below:
>+ *
>+ * .. code-block:: C
>+ *
>+ *	struct drm_xe_query_oa_units *qoa;
>+ *	struct drm_xe_oa_unit *oau;
>+ *	u8 *poau;
>+ *
>+ *	// malloc qoa and issue DRM_XE_DEVICE_QUERY_OA_UNITS. Then:
>+ *	poau = (u8 *)&qoa->oa_units[0];
>+ *	for (int i = 0; i < qoa->num_oa_units; i++) {
>+ *		oau = (struct drm_xe_oa_unit *)poau;
>+ *		// Access 'struct drm_xe_oa_unit' fields here
>+ *		poau += sizeof(*oau) + oau->num_engines * sizeof(oau->eci[0]);
>+ *	}
>+ */
>+struct drm_xe_query_oa_units {
>+	/** @num_oa_units: number of OA units returned in oau[] */
>+	__u32 num_oa_units;
>+	/** @pad: MBZ */
>+	__u32 pad;
>+	/** @oa_units: OA units returned for this device */
>+	struct drm_xe_oa_unit oa_units[];
>+};
>+
> /** enum drm_xe_oa_format_type - OA format types */
> enum drm_xe_oa_format_type {
> 	DRM_XE_OA_FMT_TYPE_OAG,
>@@ -1527,6 +1590,18 @@ struct drm_xe_oa_stream_status {
> 	__u64 reserved[3];
> };
>
>+/**
>+ * struct drm_xe_oa_stream_info - OA stream info returned from
>+ * @DRM_XE_PERF_IOCTL_INFO perf fd ioctl
>+ */
>+struct drm_xe_oa_stream_info {
>+	/** @oa_buf_size: OA buffer size */
>+	__u64 oa_buf_size;
>+
>+	/** @reserved */
>+	__u64 reserved[3];
>+};
>+
> #if defined(__cplusplus)
> }
> #endif
>-- 
>2.41.0
>

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

* Re: [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties
  2024-02-12 19:08         ` Umesh Nerlige Ramappa
@ 2024-02-13  7:04           ` Dixit, Ashutosh
  0 siblings, 0 replies; 42+ messages in thread
From: Dixit, Ashutosh @ 2024-02-13  7:04 UTC (permalink / raw)
  To: Umesh Nerlige Ramappa; +Cc: Lionel Landwerlin, intel-xe

On Mon, 12 Feb 2024 11:08:26 -0800, Umesh Nerlige Ramappa wrote:
>

Hi Umesh,

> On Mon, Feb 12, 2024 at 10:57:18AM -0800, Umesh Nerlige Ramappa wrote:
> > On Thu, Feb 08, 2024 at 02:26:39PM -0800, Dixit, Ashutosh wrote:
> >> On Thu, 08 Feb 2024 13:40:29 -0800, Lionel Landwerlin wrote:
> >>
> >> Hi Lionel,
> >>
> >>> +
> >>> +	/** @DRM_XE_OA_PROPERTY_OA_FORMAT: Perf counter report format */
> >>> +	DRM_XE_OA_PROPERTY_OA_FORMAT,
> >>> +	/**
> >>> +	 * OA_FORMAT's are specified the same way as in Bspec, in terms of
> >>> +	 * the following quantities: a. enum @drm_xe_oa_format_type
> >>> +	 * b. Counter select c. Counter size and d. BC report
> >>> +	 */
> >>> +#define DRM_XE_OA_FORMAT_MASK_FMT_TYPE		(0xff << 0)
> >>> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SEL	(0xff << 8)
> >>> +#define DRM_XE_OA_FORMAT_MASK_COUNTER_SIZE	(0xff << 16)
> >>> +#define DRM_XE_OA_FORMAT_MASK_BC_REPORT		(0xff << 24)
> >>>
> >>> People outside of Intel don't have access to the BSpec.
> >>
> >> Hmm, I was assuming Bspec is public, at least parts of it. Since we keep
> >> dropping Bspec references in patch commit messages?
> >>
> >>>
> >>> And since there is no page number either
> >>
> >> Page numbers are in the commit message, but you are right, they should be
> >> added here.
> >>
> >>> , it would just be easier for everybody to say :
> >>>
> >>>     "Refer to the oa_formats array in drivers/gpu/drm/xe/xe_oa.c"
> >>
> >> Umesh, what do you think about this? I don't like the idea too much, of
> >> referring to the internal implementation in the uapi, but if Bspec is not
> >> public, and we want to keep this uapi, we'll probably need to do this.
> >>
> >> Also, we are directly returning the oa_status register in response to
> >> DRM_XE_PERF_IOCTL_STATUS ioctl (see 'struct drm_xe_oa_stream_status'), so
> >> that also needs access to Bspec. But there I think we can just document the
> >> relevant bits in xe_drm.h.
> >
> > If that's the case, then based on the PRM documents, I would just put
> > this in the comment -
> >
> > "Refer to performance counter report formats under the Observability
> > section in the PRM"
>
>
> Missed your comment on the oa_status reg. In general, we should avoid
> exposing the register as is in the uApi. Instead we should just have a set
> of enums or bits that define a particular state. That would do away with
> the need to point to the spec.
>
> If you disagree, then PRM reference should be good enough - OAG_OASTATUS
> register in the PRM or Hardware Specifications.
>
> Specifically from this link:
> https://www.intel.com/content/www/us/en/docs/graphics-for-linux/developer-reference/1-0/overview.html

This is what I ended up doing for this:

+	/** @oa_status: OA status register as specified in PRM/Bspec 46717/61226 */
 	__u64 oa_status;
+#define DRM_XE_OASTATUS_MMIO_TRG_Q_FULL		(1 << 6)
+#define DRM_XE_OASTATUS_COUNTER_OVERFLOW	(1 << 2)
+#define DRM_XE_OASTATUS_BUFFER_OVERFLOW		(1 << 1)
+#define DRM_XE_OASTATUS_REPORT_LOST		(1 << 0)

And for the formats:

+	/*
+	 * OA_FORMAT's are specified the same way as in PRM/Bspec 52198/60942,
+	 * in terms of the following quantities: a. enum @drm_xe_oa_format_type
+	 * b. Counter select c. Counter size and d. BC report. Also refer to the
+	 * oa_formats array in drivers/gpu/drm/xe/xe_oa.c.
+ 	 */

Probably easier to see this here:

https://patchwork.freedesktop.org/patch/577943/?series=128993&rev=3

Thanks.
--
Ashutosh

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

* Re: [PATCH 13/16] drm/xe/oa/uapi: Query OA unit properties
  2024-02-12 19:59   ` Umesh Nerlige Ramappa
@ 2024-02-13  7:09     ` Dixit, Ashutosh
  0 siblings, 0 replies; 42+ messages in thread
From: Dixit, Ashutosh @ 2024-02-13  7:09 UTC (permalink / raw)
  To: Umesh Nerlige Ramappa; +Cc: intel-xe

On Mon, 12 Feb 2024 11:59:30 -0800, Umesh Nerlige Ramappa wrote:
>

Hi Umesh,

> On Wed, Feb 07, 2024 at 09:49:13PM -0800, Ashutosh Dixit wrote:
> > @@ -1411,6 +1412,68 @@ enum drm_xe_oa_unit_type {
> >	DRM_XE_OA_UNIT_TYPE_OAM,
> > };
> >
> > +/**
> > + * struct drm_xe_oa_unit - describe OA unit
> > + */
> > +struct drm_xe_oa_unit {
> > +	/** @oa_unit_id: OA unit ID */
> > +	__u32 oa_unit_id;
> > +
> > +	/** @oa_unit_type: OA unit type of @drm_xe_oa_unit_type */
> > +	__u32 oa_unit_type;
> > +
> > +	/**
> > +	 * @capabilities: OA capabilities bit-mask: this is a bit-mask of
> > +	 * property id's in enum @drm_xe_oa_property_id
> > +	 */
> > +	__u64 capabilities;
>
> IMO, this should be a specific set of flags that are defined as and when we
> add new features so that it helps UMDs detect them. Some features or
> behaviors may be independent of the properties, so a 1:1 mapping to
> properties may not be the best solution. In the past we have had i915 perf
> revision bumps even when we haven't added a new property (For ex: when we
> supported media engines in i915 - class:instance properties were already
> present and we just added support for OAM in that case. For such cases
> capabilities would define a new bit, but not properties).
>
> The first set of properties defined with this series should not need a
> capabilities entry. If the uApi changes in future or adds new features, we
> need to use these bits.

OK, I went ahead and implemented this. Though after this, this seems more
like a version to me, rather than capabilities. The only difference being,
instead of incrementing the version, we add bits to the capabilities. Which
seems fine.

I did pick a DRM_XE_OA_CAPS_BASE value of 1:

https://patchwork.freedesktop.org/patch/578014/?series=121084&rev=10

Thanks.
--
Ashutosh

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

* Re: [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG)
  2024-02-09  8:14       ` Lionel Landwerlin
@ 2024-02-13 17:04         ` Dixit, Ashutosh
  0 siblings, 0 replies; 42+ messages in thread
From: Dixit, Ashutosh @ 2024-02-13 17:04 UTC (permalink / raw)
  To: Lionel Landwerlin; +Cc: intel-xe, Umesh Nerlige Ramappa

On Fri, 09 Feb 2024 00:14:13 -0800, Lionel Landwerlin wrote:
>

Hi Lionel,

> On 09/02/2024 09:08, Dixit, Ashutosh wrote:
> > On Thu, 08 Feb 2024 22:23:30 -0800, Lionel Landwerlin wrote:
> > Hi Lionel,
> >
> >>> +static int xe_oa_emit_oa_config(struct xe_oa_stream *stream)
> >>> +{
> >>> +#define NOA_PROGRAM_ADDITIONAL_DELAY_US 500
> >>> +	struct xe_oa_config_bo *oa_bo;
> >>> +	int err, us = NOA_PROGRAM_ADDITIONAL_DELAY_US;
> >>> +
> >>> +	oa_bo = xe_oa_alloc_config_buffer(stream);
> >>> +	if (IS_ERR(oa_bo)) {
> >>> +		err = PTR_ERR(oa_bo);
> >>> +		goto exit;
> >>> +	}
> >>> +
> >>> +	err = xe_oa_submit_bb(stream, oa_bo->bb);
> >>> +
> >>> +	/* Additional empirical delay needed for NOA programming after registers are written */
> >>> +	usleep_range(us, 2 * us);
> >> Looks like the entire oa_config emission is synchronous.
> > Yes that is indeed the case in this patchset.
> >
> >> That's a difference from i915 where we could just pipeline all the config
> >> changes with perf queries in between.
> >>
> >> If there was a mechanism to return a syncobj in this ioctl, we could do the
> >> wait from userspace and/or pipeline more submissions.
> > That is the plan. To expose syncobj's in OA properties and make also make
> > the oa_config emission asynchronous. But have not been able to get to it
> > yet (IGT's are mostly getting ready, but now we may also need to add
> > support for GPUVis before we can merge these patches, if we can't get a
> > temporary waiver).
> >
> > So the direction right now is to get the current patchset merged before
> > adding more features (like the syncobj).
>
> Any idea when that will happen?

I am assuming you are asking about the merge so: adding GPUVis support
seems to be a bit of a chore, so it will take a few (like 4+) weeks I am
thinking.

However I am hearing someone might add support in Mesa for Xe OA. If we are
able to use Mesa as an upstream consumer of the OA uapi, it might go a bit
faster. So discussions are on about this.

> I suppose you'll have to define a new ioctl for this?

Let me explain the overall idea first. Similar to 'xe-exec' we need these
two fields:

        /** @num_syncs: Amount of struct drm_xe_sync in array. */
        __u32 num_syncs;

        /** @syncs: Pointer to struct drm_xe_sync array. */
        __u64 syncs;

With these we can implement "fence wait" and "fence signal", similar to
what happens with xe_exec (and which allows xe_exec to be pipelined). That
is stream (re)configuration can wait for a fence, and will signal a fence
after stream configuration is complete (including any additional delays
after writing the registers, if an additional delay is needed).

Now we need to do this in two places:

1. When the stream is opened. In this case 'num_syncs' and 'syncs' can be
   passed in via stream properties.

2. During stream reconfiguration, that is during CONFIG ioctl on the stream
   fd (called in Xe as DRM_XE_PERF_IOCTL_CONFIG). So this ioctl will need to
   accept a struct which has { 'id', 'num_syncs' and 'syncs' } as its members.

   That reminds me, I need to make this change for the CONFIG stream fd
   ioctl now, or at least introduce reserved fields to make this happen in
   the future without breaking the uapi.

Does all this make sense?

Thanks.
--
Ashutosh

> > (Also, separately I'm trying to figure out if a delay similar to the NOA
> > programming delay is really needed when we have PES registers, the case for
> > Xe2+. Looks like it might not be, but still needs to be confirmed).
> >
> > Thanks.
> > --
> > Ashutosh
>
>

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

* [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG)
  2024-03-05  5:32 Ashutosh Dixit
@ 2024-03-05  5:32 ` Ashutosh Dixit
  0 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-03-05  5:32 UTC (permalink / raw)
  To: intel-xe

Implement majority of OA stream initialization (as part of OA stream open)
ioctl). OAG buffer is allocated for receiving perf counter samples from
HW. OAG unit is initialized and the selected OA metric configuration is
programmed into OAG unit HW using a command/batch buffer.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h |   3 +
 drivers/gpu/drm/xe/xe_oa.c           | 391 +++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_oa_types.h     |  79 ++++++
 3 files changed, 473 insertions(+)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index 15ac2d284d48..853d6f9db8a9 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -134,6 +134,8 @@
 
 #define SQCNT1					XE_REG_MCR(0x8718)
 #define XELPMP_SQCNT1				XE_REG(0x8718)
+#define   SQCNT1_PMON_ENABLE			REG_BIT(30)
+#define   SQCNT1_OABPC				REG_BIT(29)
 #define   ENFORCE_RAR				REG_BIT(23)
 
 #define XEHP_SQCM				XE_REG_MCR(0x8724)
@@ -357,6 +359,7 @@
 #define ROW_CHICKEN				XE_REG_MCR(0xe4f0, XE_REG_OPTION_MASKED)
 #define   UGM_BACKUP_MODE			REG_BIT(13)
 #define   MDQ_ARBITRATION_MODE			REG_BIT(12)
+#define   STALL_DOP_GATING_DISABLE		REG_BIT(5)
 #define   EARLY_EOT_DIS				REG_BIT(1)
 
 #define ROW_CHICKEN2				XE_REG_MCR(0xe4f4, XE_REG_OPTION_MASKED)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 915dd71454c7..f3270fc30065 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -5,17 +5,25 @@
 
 #include <linux/nospec.h>
 
+#include <drm/drm_drv.h>
 #include <drm/xe_drm.h>
 
+#include "instructions/xe_mi_commands.h"
 #include "regs/xe_gt_regs.h"
 #include "regs/xe_oa_regs.h"
 #include "xe_device.h"
 #include "xe_exec_queue.h"
+#include "xe_bb.h"
+#include "xe_bo.h"
 #include "xe_gt.h"
+#include "xe_gt_mcr.h"
 #include "xe_mmio.h"
 #include "xe_oa.h"
+#include "xe_sched_job.h"
 #include "xe_perf.h"
 
+#define DEFAULT_POLL_FREQUENCY_HZ 200
+#define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
 #define XE_OA_UNIT_INVALID U32_MAX
 
 struct xe_oa_reg {
@@ -53,6 +61,13 @@ struct xe_oa_open_param {
 	struct xe_hw_engine *hwe;
 };
 
+struct xe_oa_config_bo {
+	struct llist_node node;
+
+	struct xe_oa_config *oa_config;
+	struct xe_bb *bb;
+};
+
 #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
 
 static const struct xe_oa_format oa_formats[] = {
@@ -95,6 +110,378 @@ static void xe_oa_config_put(struct xe_oa_config *oa_config)
 	kref_put(&oa_config->ref, xe_oa_config_release);
 }
 
+static struct xe_oa_config *xe_oa_config_get(struct xe_oa_config *oa_config)
+{
+	return kref_get_unless_zero(&oa_config->ref) ? oa_config : NULL;
+}
+
+static struct xe_oa_config *xe_oa_get_oa_config(struct xe_oa *oa, int metrics_set)
+{
+	struct xe_oa_config *oa_config;
+
+	rcu_read_lock();
+	oa_config = idr_find(&oa->metrics_idr, metrics_set);
+	if (oa_config)
+		oa_config = xe_oa_config_get(oa_config);
+	rcu_read_unlock();
+
+	return oa_config;
+}
+
+static void free_oa_config_bo(struct xe_oa_config_bo *oa_bo)
+{
+	xe_oa_config_put(oa_bo->oa_config);
+	xe_bb_free(oa_bo->bb, NULL);
+	kfree(oa_bo);
+}
+
+static const struct xe_oa_regs *__oa_regs(struct xe_oa_stream *stream)
+{
+	return &stream->hwe->oa_unit->regs;
+}
+
+static int xe_oa_submit_bb(struct xe_oa_stream *stream, struct xe_bb *bb)
+{
+	struct xe_sched_job *job;
+	struct dma_fence *fence;
+	long timeout;
+	int err = 0;
+
+	/* Kernel configuration is issued on stream->k_exec_q, not stream->exec_q */
+	job = xe_bb_create_job(stream->k_exec_q, bb);
+	if (IS_ERR(job)) {
+		err = PTR_ERR(job);
+		goto exit;
+	}
+
+	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)
+		err = timeout;
+	else if (!timeout)
+		err = -ETIME;
+exit:
+	return err;
+}
+
+static void write_cs_mi_lri(struct xe_bb *bb, const struct xe_oa_reg *reg_data, u32 n_regs)
+{
+	u32 i;
+
+#define MI_LOAD_REGISTER_IMM_MAX_REGS (126)
+
+	for (i = 0; i < n_regs; i++) {
+		if ((i % MI_LOAD_REGISTER_IMM_MAX_REGS) == 0) {
+			u32 n_lri = min_t(u32, n_regs - i,
+					  MI_LOAD_REGISTER_IMM_MAX_REGS);
+
+			bb->cs[bb->len++] = MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(n_lri);
+		}
+		bb->cs[bb->len++] = reg_data[i].addr.addr;
+		bb->cs[bb->len++] = reg_data[i].value;
+	}
+}
+
+static int num_lri_dwords(int num_regs)
+{
+	int count = 0;
+
+	if (num_regs > 0) {
+		count += DIV_ROUND_UP(num_regs, MI_LOAD_REGISTER_IMM_MAX_REGS);
+		count += num_regs * 2;
+	}
+
+	return count;
+}
+
+static void xe_oa_free_oa_buffer(struct xe_oa_stream *stream)
+{
+	xe_bo_unpin_map_no_vm(stream->oa_buffer.bo);
+}
+
+static void xe_oa_free_configs(struct xe_oa_stream *stream)
+{
+	struct xe_oa_config_bo *oa_bo, *tmp;
+
+	xe_oa_config_put(stream->oa_config);
+	llist_for_each_entry_safe(oa_bo, tmp, stream->oa_config_bos.first, node)
+		free_oa_config_bo(oa_bo);
+}
+
+#define HAS_OA_BPC_REPORTING(xe) (GRAPHICS_VERx100(xe) >= 1255)
+
+static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
+{
+	u32 sqcnt1;
+
+	/*
+	 * Wa_1508761755:xehpsdv, dg2
+	 * Enable thread stall DOP gating and EU DOP gating.
+	 */
+	if (stream->oa->xe->info.platform == XE_DG2) {
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
+					  _MASKED_BIT_DISABLE(STALL_DOP_GATING_DISABLE));
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
+					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
+	}
+
+	/* Make sure we disable noa to save power. */
+	xe_mmio_rmw32(stream->gt, RPM_CONFIG1, GT_NOA_ENABLE, 0);
+
+	sqcnt1 = SQCNT1_PMON_ENABLE |
+		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
+
+	/* Reset PMON Enable to save power. */
+	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, sqcnt1, 0);
+}
+
+static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream)
+{
+	struct xe_bo *bo;
+
+	BUILD_BUG_ON_NOT_POWER_OF_2(XE_OA_BUFFER_SIZE);
+	BUILD_BUG_ON(XE_OA_BUFFER_SIZE < SZ_128K || XE_OA_BUFFER_SIZE > SZ_16M);
+
+	bo = xe_bo_create_pin_map(stream->oa->xe, stream->gt->tile, NULL,
+				  XE_OA_BUFFER_SIZE, ttm_bo_type_kernel,
+				  XE_BO_CREATE_SYSTEM_BIT | XE_BO_CREATE_GGTT_BIT);
+	if (IS_ERR(bo))
+		return PTR_ERR(bo);
+
+	stream->oa_buffer.bo = bo;
+	stream->oa_buffer.vaddr = bo->vmap.vaddr;
+	return 0;
+}
+
+static struct xe_oa_config_bo *
+__xe_oa_alloc_config_buffer(struct xe_oa_stream *stream, struct xe_oa_config *oa_config)
+{
+	struct xe_oa_config_bo *oa_bo;
+	size_t config_length;
+	struct xe_bb *bb;
+
+	oa_bo = kzalloc(sizeof(*oa_bo), GFP_KERNEL);
+	if (!oa_bo)
+		return ERR_PTR(-ENOMEM);
+
+	config_length = num_lri_dwords(oa_config->regs_len);
+	config_length = ALIGN(sizeof(u32) * config_length, XE_PAGE_SIZE) / sizeof(u32);
+
+	bb = xe_bb_new(stream->gt, config_length, false);
+	if (IS_ERR(bb))
+		goto err_free;
+
+	write_cs_mi_lri(bb, oa_config->regs, oa_config->regs_len);
+
+	oa_bo->bb = bb;
+	oa_bo->oa_config = xe_oa_config_get(oa_config);
+	llist_add(&oa_bo->node, &stream->oa_config_bos);
+
+	return oa_bo;
+err_free:
+	kfree(oa_bo);
+	return ERR_CAST(bb);
+}
+
+static struct xe_oa_config_bo *xe_oa_alloc_config_buffer(struct xe_oa_stream *stream)
+{
+	struct xe_oa_config *oa_config = stream->oa_config;
+	struct xe_oa_config_bo *oa_bo;
+
+	/* Look for the buffer in the already allocated BOs attached to the stream */
+	llist_for_each_entry(oa_bo, stream->oa_config_bos.first, node) {
+		if (oa_bo->oa_config == oa_config &&
+		    memcmp(oa_bo->oa_config->uuid, oa_config->uuid,
+			   sizeof(oa_config->uuid)) == 0)
+			goto out;
+	}
+
+	oa_bo = __xe_oa_alloc_config_buffer(stream, oa_config);
+out:
+	return oa_bo;
+}
+
+static int xe_oa_emit_oa_config(struct xe_oa_stream *stream)
+{
+#define NOA_PROGRAM_ADDITIONAL_DELAY_US 500
+	struct xe_oa_config_bo *oa_bo;
+	int err, us = NOA_PROGRAM_ADDITIONAL_DELAY_US;
+
+	oa_bo = xe_oa_alloc_config_buffer(stream);
+	if (IS_ERR(oa_bo)) {
+		err = PTR_ERR(oa_bo);
+		goto exit;
+	}
+
+	err = xe_oa_submit_bb(stream, oa_bo->bb);
+
+	/* Additional empirical delay needed for NOA programming after registers are written */
+	usleep_range(us, 2 * us);
+exit:
+	return err;
+}
+
+static u32 oag_report_ctx_switches(const struct xe_oa_stream *stream)
+{
+	/* If user didn't require OA reports, ask HW not to emit ctx switch reports */
+	return _MASKED_FIELD(OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS,
+			     stream->sample ?
+			     0 : OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS);
+}
+
+static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
+{
+	u32 oa_debug, sqcnt1;
+
+	/*
+	 * Wa_1508761755:xehpsdv, dg2
+	 * EU NOA signals behave incorrectly if EU clock gating is enabled.
+	 * Disable thread stall DOP gating and EU DOP gating.
+	 */
+	if (stream->oa->xe->info.platform == XE_DG2) {
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
+					  _MASKED_BIT_ENABLE(STALL_DOP_GATING_DISABLE));
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
+					  _MASKED_BIT_ENABLE(DISABLE_DOP_GATING));
+	}
+
+	/* Disable clk ratio reports */
+	oa_debug = OAG_OA_DEBUG_DISABLE_CLK_RATIO_REPORTS |
+		OAG_OA_DEBUG_INCLUDE_CLK_RATIO;
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_debug,
+			_MASKED_BIT_ENABLE(oa_debug) |
+			oag_report_ctx_switches(stream));
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctx_ctrl, stream->periodic ?
+			(OAG_OAGLBCTXCTRL_COUNTER_RESUME |
+			 OAG_OAGLBCTXCTRL_TIMER_ENABLE |
+			 REG_FIELD_PREP(OAG_OAGLBCTXCTRL_TIMER_PERIOD_MASK,
+					stream->period_exponent)) : 0);
+
+	/*
+	 * Initialize Super Queue Internal Cnt Register
+	 * Set PMON Enable in order to collect valid metrics
+	 * Enable bytes per clock reporting
+	 */
+	sqcnt1 = SQCNT1_PMON_ENABLE |
+		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
+
+	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, 0, sqcnt1);
+
+	return xe_oa_emit_oa_config(stream);
+}
+
+static int xe_oa_stream_init(struct xe_oa_stream *stream,
+			     struct xe_oa_open_param *param)
+{
+	struct xe_oa_unit *u = param->hwe->oa_unit;
+	struct xe_gt *gt = param->hwe->gt;
+	int ret;
+
+	stream->exec_q = param->exec_q;
+	stream->poll_period_ns = DEFAULT_POLL_PERIOD_NS;
+	stream->hwe = param->hwe;
+	stream->gt = stream->hwe->gt;
+	stream->oa_buffer.format = &stream->oa->oa_formats[param->oa_format];
+
+	stream->sample = param->sample;
+	stream->periodic = param->period_exponent > 0;
+	stream->period_exponent = param->period_exponent;
+
+	stream->oa_config = xe_oa_get_oa_config(stream->oa, param->metric_set);
+	if (!stream->oa_config) {
+		drm_dbg(&stream->oa->xe->drm, "Invalid OA config id=%i\n", param->metric_set);
+		ret = -EINVAL;
+		goto exit;
+	}
+
+	ret = xe_oa_alloc_oa_buffer(stream);
+	if (ret)
+		goto err_free_configs;
+
+	/* Take runtime pm ref and forcewake to disable RC6 */
+	xe_device_mem_access_get(stream->oa->xe);
+	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+
+	stream->k_exec_q = xe_exec_queue_create(stream->oa->xe, NULL,
+						BIT(stream->hwe->logical_instance), 1,
+						stream->hwe, EXEC_QUEUE_FLAG_KERNEL, 0);
+	if (IS_ERR(stream->k_exec_q)) {
+		ret = PTR_ERR(stream->k_exec_q);
+		drm_err(&stream->oa->xe->drm, "gt%d, hwe %s, xe_exec_queue_create failed=%d",
+			stream->gt->info.id, stream->hwe->name, ret);
+		goto err_fw_put;
+	}
+
+	ret = xe_oa_enable_metric_set(stream);
+	if (ret) {
+		drm_dbg(&stream->oa->xe->drm, "Unable to enable metric set\n");
+		goto err_put_k_exec_q;
+	}
+
+	drm_dbg(&stream->oa->xe->drm, "opening stream oa config uuid=%s\n",
+		stream->oa_config->uuid);
+
+	WRITE_ONCE(u->exclusive_stream, stream);
+
+	spin_lock_init(&stream->oa_buffer.ptr_lock);
+	mutex_init(&stream->stream_lock);
+
+	return 0;
+
+err_put_k_exec_q:
+	xe_oa_disable_metric_set(stream);
+	xe_exec_queue_put(stream->k_exec_q);
+err_fw_put:
+	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+	xe_device_mem_access_put(stream->oa->xe);
+	xe_oa_free_oa_buffer(stream);
+err_free_configs:
+	xe_oa_free_configs(stream);
+exit:
+	return ret;
+}
+
+static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
+					  struct xe_oa_open_param *param)
+{
+	struct xe_oa_stream *stream;
+	int stream_fd;
+	int ret;
+
+	/* We currently only allow exclusive access */
+	if (param->hwe->oa_unit->exclusive_stream) {
+		drm_dbg(&oa->xe->drm, "OA unit already in use\n");
+		ret = -EBUSY;
+		goto exit;
+	}
+
+	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	if (!stream) {
+		ret = -ENOMEM;
+		goto exit;
+	}
+
+	stream->oa = oa;
+	ret = xe_oa_stream_init(stream, param);
+	if (ret)
+		goto err_free;
+
+	/* Hold a reference on the drm device till stream_fd is released */
+	drm_dev_get(&stream->oa->xe->drm);
+
+	return stream_fd;
+err_free:
+	kfree(stream);
+exit:
+	return ret;
+}
+
 /*
  * OA timestamp frequency = CS timestamp frequency in most platforms. On some
  * platforms OA unit ignores the CTC_SHIFT and the 2 timestamps differ. In such
@@ -416,6 +803,10 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data, struct drm_file
 		oa_freq_hz = div64_u64(NSEC_PER_SEC, oa_period);
 		drm_dbg(&oa->xe->drm, "Using periodic sampling freq %lld Hz\n", oa_freq_hz);
 	}
+
+	mutex_lock(&param.hwe->gt->oa.gt_lock);
+	ret = xe_oa_stream_open_ioctl_locked(oa, &param);
+	mutex_unlock(&param.hwe->gt->oa.gt_lock);
 err_exec_q:
 	if (ret < 0 && param.exec_q)
 		xe_exec_queue_put(param.exec_q);
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index b5c1a47c8988..ca282c316ec7 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -14,6 +14,8 @@
 #include <drm/xe_drm.h>
 #include "regs/xe_reg_defs.h"
 
+#define XE_OA_BUFFER_SIZE SZ_16M
+
 enum xe_oa_report_header {
 	HDR_32_BIT = 0,
 	HDR_64_BIT,
@@ -137,4 +139,81 @@ struct xe_oa {
 	/** @oa_unit_ids: tracks oa unit ids assigned across gt's */
 	u16 oa_unit_ids;
 };
+
+/** @oa_buffer: State of the stream OA buffer */
+struct oa_buffer {
+	/** @format: data format */
+	const struct xe_oa_format *format;
+
+	/** @format: xe_bo backing the OA buffer */
+	struct xe_bo *bo;
+
+	/** @vaddr: mapped vaddr of the OA buffer */
+	u8 *vaddr;
+
+	/** @ptr_lock: Lock protecting reads/writes to head/tail pointers */
+	spinlock_t ptr_lock;
+
+	/** @head: Cached head to read from */
+	u32 head;
+
+	/** @tail: The last verified cached tail where HW has completed writing */
+	u32 tail;
+};
+
+/**
+ * struct xe_oa_stream - state for a single open stream FD
+ */
+struct xe_oa_stream {
+	/** @oa: xe_oa backpointer */
+	struct xe_oa *oa;
+
+	/** @gt: gt associated with the oa stream */
+	struct xe_gt *gt;
+
+	/** @hwe: hardware engine associated with this oa stream */
+	struct xe_hw_engine *hwe;
+
+	/** @stream_lock: Lock serializing stream operations */
+	struct mutex stream_lock;
+
+	/** @sample: true if DRM_XE_OA_PROP_SAMPLE_OA is provided */
+	bool sample;
+
+	/** @exec_q: Exec queue corresponding to DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID */
+	struct xe_exec_queue *exec_q;
+
+	/** @k_exec_q: kernel exec_q used for OA programming batch submissions */
+	struct xe_exec_queue *k_exec_q;
+
+	/** @enabled: Whether the stream is currently enabled */
+	bool enabled;
+
+	/** @oa_config: OA configuration used by the stream */
+	struct xe_oa_config *oa_config;
+
+	/** @oa_config_bos: List of struct @xe_oa_config_bo's */
+	struct llist_head oa_config_bos;
+
+	/** @poll_check_timer: Timer to periodically check for data in the OA buffer */
+	struct hrtimer poll_check_timer;
+
+	/** @poll_wq: Wait queue for waiting for OA data to be available */
+	wait_queue_head_t poll_wq;
+
+	/** @pollin: Whether there is data available to read */
+	bool pollin;
+
+	/** @periodic: Whether periodic sampling is currently enabled */
+	bool periodic;
+
+	/** @period_exponent: OA unit sampling frequency is derived from this */
+	int period_exponent;
+
+	/** @oa_buffer: OA buffer for the stream */
+	struct oa_buffer oa_buffer;
+
+	/** @poll_period_ns: hrtimer period for checking OA buffer for available data */
+	u64 poll_period_ns;
+};
 #endif
-- 
2.41.0


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

* [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG)
  2024-02-13  6:44 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
@ 2024-02-13  6:44 ` Ashutosh Dixit
  0 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-02-13  6:44 UTC (permalink / raw)
  To: intel-xe; +Cc: Umesh Nerlige Ramappa

Implement majority of OA stream initialization (as part of OA stream open)
ioctl). OAG buffer is allocated for receiving perf counter samples from
HW. OAG unit is initialized and the selected OA metric configuration is
programmed into OAG unit HW using a command/batch buffer.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h |   3 +
 drivers/gpu/drm/xe/xe_oa.c           | 391 +++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_oa_types.h     |  79 ++++++
 3 files changed, 473 insertions(+)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index 15ac2d284d48f..853d6f9db8a99 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -134,6 +134,8 @@
 
 #define SQCNT1					XE_REG_MCR(0x8718)
 #define XELPMP_SQCNT1				XE_REG(0x8718)
+#define   SQCNT1_PMON_ENABLE			REG_BIT(30)
+#define   SQCNT1_OABPC				REG_BIT(29)
 #define   ENFORCE_RAR				REG_BIT(23)
 
 #define XEHP_SQCM				XE_REG_MCR(0x8724)
@@ -357,6 +359,7 @@
 #define ROW_CHICKEN				XE_REG_MCR(0xe4f0, XE_REG_OPTION_MASKED)
 #define   UGM_BACKUP_MODE			REG_BIT(13)
 #define   MDQ_ARBITRATION_MODE			REG_BIT(12)
+#define   STALL_DOP_GATING_DISABLE		REG_BIT(5)
 #define   EARLY_EOT_DIS				REG_BIT(1)
 
 #define ROW_CHICKEN2				XE_REG_MCR(0xe4f4, XE_REG_OPTION_MASKED)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 915dd71454c7c..f3270fc30065f 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -5,17 +5,25 @@
 
 #include <linux/nospec.h>
 
+#include <drm/drm_drv.h>
 #include <drm/xe_drm.h>
 
+#include "instructions/xe_mi_commands.h"
 #include "regs/xe_gt_regs.h"
 #include "regs/xe_oa_regs.h"
 #include "xe_device.h"
 #include "xe_exec_queue.h"
+#include "xe_bb.h"
+#include "xe_bo.h"
 #include "xe_gt.h"
+#include "xe_gt_mcr.h"
 #include "xe_mmio.h"
 #include "xe_oa.h"
+#include "xe_sched_job.h"
 #include "xe_perf.h"
 
+#define DEFAULT_POLL_FREQUENCY_HZ 200
+#define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
 #define XE_OA_UNIT_INVALID U32_MAX
 
 struct xe_oa_reg {
@@ -53,6 +61,13 @@ struct xe_oa_open_param {
 	struct xe_hw_engine *hwe;
 };
 
+struct xe_oa_config_bo {
+	struct llist_node node;
+
+	struct xe_oa_config *oa_config;
+	struct xe_bb *bb;
+};
+
 #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
 
 static const struct xe_oa_format oa_formats[] = {
@@ -95,6 +110,378 @@ static void xe_oa_config_put(struct xe_oa_config *oa_config)
 	kref_put(&oa_config->ref, xe_oa_config_release);
 }
 
+static struct xe_oa_config *xe_oa_config_get(struct xe_oa_config *oa_config)
+{
+	return kref_get_unless_zero(&oa_config->ref) ? oa_config : NULL;
+}
+
+static struct xe_oa_config *xe_oa_get_oa_config(struct xe_oa *oa, int metrics_set)
+{
+	struct xe_oa_config *oa_config;
+
+	rcu_read_lock();
+	oa_config = idr_find(&oa->metrics_idr, metrics_set);
+	if (oa_config)
+		oa_config = xe_oa_config_get(oa_config);
+	rcu_read_unlock();
+
+	return oa_config;
+}
+
+static void free_oa_config_bo(struct xe_oa_config_bo *oa_bo)
+{
+	xe_oa_config_put(oa_bo->oa_config);
+	xe_bb_free(oa_bo->bb, NULL);
+	kfree(oa_bo);
+}
+
+static const struct xe_oa_regs *__oa_regs(struct xe_oa_stream *stream)
+{
+	return &stream->hwe->oa_unit->regs;
+}
+
+static int xe_oa_submit_bb(struct xe_oa_stream *stream, struct xe_bb *bb)
+{
+	struct xe_sched_job *job;
+	struct dma_fence *fence;
+	long timeout;
+	int err = 0;
+
+	/* Kernel configuration is issued on stream->k_exec_q, not stream->exec_q */
+	job = xe_bb_create_job(stream->k_exec_q, bb);
+	if (IS_ERR(job)) {
+		err = PTR_ERR(job);
+		goto exit;
+	}
+
+	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)
+		err = timeout;
+	else if (!timeout)
+		err = -ETIME;
+exit:
+	return err;
+}
+
+static void write_cs_mi_lri(struct xe_bb *bb, const struct xe_oa_reg *reg_data, u32 n_regs)
+{
+	u32 i;
+
+#define MI_LOAD_REGISTER_IMM_MAX_REGS (126)
+
+	for (i = 0; i < n_regs; i++) {
+		if ((i % MI_LOAD_REGISTER_IMM_MAX_REGS) == 0) {
+			u32 n_lri = min_t(u32, n_regs - i,
+					  MI_LOAD_REGISTER_IMM_MAX_REGS);
+
+			bb->cs[bb->len++] = MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(n_lri);
+		}
+		bb->cs[bb->len++] = reg_data[i].addr.addr;
+		bb->cs[bb->len++] = reg_data[i].value;
+	}
+}
+
+static int num_lri_dwords(int num_regs)
+{
+	int count = 0;
+
+	if (num_regs > 0) {
+		count += DIV_ROUND_UP(num_regs, MI_LOAD_REGISTER_IMM_MAX_REGS);
+		count += num_regs * 2;
+	}
+
+	return count;
+}
+
+static void xe_oa_free_oa_buffer(struct xe_oa_stream *stream)
+{
+	xe_bo_unpin_map_no_vm(stream->oa_buffer.bo);
+}
+
+static void xe_oa_free_configs(struct xe_oa_stream *stream)
+{
+	struct xe_oa_config_bo *oa_bo, *tmp;
+
+	xe_oa_config_put(stream->oa_config);
+	llist_for_each_entry_safe(oa_bo, tmp, stream->oa_config_bos.first, node)
+		free_oa_config_bo(oa_bo);
+}
+
+#define HAS_OA_BPC_REPORTING(xe) (GRAPHICS_VERx100(xe) >= 1255)
+
+static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
+{
+	u32 sqcnt1;
+
+	/*
+	 * Wa_1508761755:xehpsdv, dg2
+	 * Enable thread stall DOP gating and EU DOP gating.
+	 */
+	if (stream->oa->xe->info.platform == XE_DG2) {
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
+					  _MASKED_BIT_DISABLE(STALL_DOP_GATING_DISABLE));
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
+					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
+	}
+
+	/* Make sure we disable noa to save power. */
+	xe_mmio_rmw32(stream->gt, RPM_CONFIG1, GT_NOA_ENABLE, 0);
+
+	sqcnt1 = SQCNT1_PMON_ENABLE |
+		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
+
+	/* Reset PMON Enable to save power. */
+	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, sqcnt1, 0);
+}
+
+static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream)
+{
+	struct xe_bo *bo;
+
+	BUILD_BUG_ON_NOT_POWER_OF_2(XE_OA_BUFFER_SIZE);
+	BUILD_BUG_ON(XE_OA_BUFFER_SIZE < SZ_128K || XE_OA_BUFFER_SIZE > SZ_16M);
+
+	bo = xe_bo_create_pin_map(stream->oa->xe, stream->gt->tile, NULL,
+				  XE_OA_BUFFER_SIZE, ttm_bo_type_kernel,
+				  XE_BO_CREATE_SYSTEM_BIT | XE_BO_CREATE_GGTT_BIT);
+	if (IS_ERR(bo))
+		return PTR_ERR(bo);
+
+	stream->oa_buffer.bo = bo;
+	stream->oa_buffer.vaddr = bo->vmap.vaddr;
+	return 0;
+}
+
+static struct xe_oa_config_bo *
+__xe_oa_alloc_config_buffer(struct xe_oa_stream *stream, struct xe_oa_config *oa_config)
+{
+	struct xe_oa_config_bo *oa_bo;
+	size_t config_length;
+	struct xe_bb *bb;
+
+	oa_bo = kzalloc(sizeof(*oa_bo), GFP_KERNEL);
+	if (!oa_bo)
+		return ERR_PTR(-ENOMEM);
+
+	config_length = num_lri_dwords(oa_config->regs_len);
+	config_length = ALIGN(sizeof(u32) * config_length, XE_PAGE_SIZE) / sizeof(u32);
+
+	bb = xe_bb_new(stream->gt, config_length, false);
+	if (IS_ERR(bb))
+		goto err_free;
+
+	write_cs_mi_lri(bb, oa_config->regs, oa_config->regs_len);
+
+	oa_bo->bb = bb;
+	oa_bo->oa_config = xe_oa_config_get(oa_config);
+	llist_add(&oa_bo->node, &stream->oa_config_bos);
+
+	return oa_bo;
+err_free:
+	kfree(oa_bo);
+	return ERR_CAST(bb);
+}
+
+static struct xe_oa_config_bo *xe_oa_alloc_config_buffer(struct xe_oa_stream *stream)
+{
+	struct xe_oa_config *oa_config = stream->oa_config;
+	struct xe_oa_config_bo *oa_bo;
+
+	/* Look for the buffer in the already allocated BOs attached to the stream */
+	llist_for_each_entry(oa_bo, stream->oa_config_bos.first, node) {
+		if (oa_bo->oa_config == oa_config &&
+		    memcmp(oa_bo->oa_config->uuid, oa_config->uuid,
+			   sizeof(oa_config->uuid)) == 0)
+			goto out;
+	}
+
+	oa_bo = __xe_oa_alloc_config_buffer(stream, oa_config);
+out:
+	return oa_bo;
+}
+
+static int xe_oa_emit_oa_config(struct xe_oa_stream *stream)
+{
+#define NOA_PROGRAM_ADDITIONAL_DELAY_US 500
+	struct xe_oa_config_bo *oa_bo;
+	int err, us = NOA_PROGRAM_ADDITIONAL_DELAY_US;
+
+	oa_bo = xe_oa_alloc_config_buffer(stream);
+	if (IS_ERR(oa_bo)) {
+		err = PTR_ERR(oa_bo);
+		goto exit;
+	}
+
+	err = xe_oa_submit_bb(stream, oa_bo->bb);
+
+	/* Additional empirical delay needed for NOA programming after registers are written */
+	usleep_range(us, 2 * us);
+exit:
+	return err;
+}
+
+static u32 oag_report_ctx_switches(const struct xe_oa_stream *stream)
+{
+	/* If user didn't require OA reports, ask HW not to emit ctx switch reports */
+	return _MASKED_FIELD(OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS,
+			     stream->sample ?
+			     0 : OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS);
+}
+
+static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
+{
+	u32 oa_debug, sqcnt1;
+
+	/*
+	 * Wa_1508761755:xehpsdv, dg2
+	 * EU NOA signals behave incorrectly if EU clock gating is enabled.
+	 * Disable thread stall DOP gating and EU DOP gating.
+	 */
+	if (stream->oa->xe->info.platform == XE_DG2) {
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
+					  _MASKED_BIT_ENABLE(STALL_DOP_GATING_DISABLE));
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
+					  _MASKED_BIT_ENABLE(DISABLE_DOP_GATING));
+	}
+
+	/* Disable clk ratio reports */
+	oa_debug = OAG_OA_DEBUG_DISABLE_CLK_RATIO_REPORTS |
+		OAG_OA_DEBUG_INCLUDE_CLK_RATIO;
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_debug,
+			_MASKED_BIT_ENABLE(oa_debug) |
+			oag_report_ctx_switches(stream));
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctx_ctrl, stream->periodic ?
+			(OAG_OAGLBCTXCTRL_COUNTER_RESUME |
+			 OAG_OAGLBCTXCTRL_TIMER_ENABLE |
+			 REG_FIELD_PREP(OAG_OAGLBCTXCTRL_TIMER_PERIOD_MASK,
+					stream->period_exponent)) : 0);
+
+	/*
+	 * Initialize Super Queue Internal Cnt Register
+	 * Set PMON Enable in order to collect valid metrics
+	 * Enable bytes per clock reporting
+	 */
+	sqcnt1 = SQCNT1_PMON_ENABLE |
+		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
+
+	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, 0, sqcnt1);
+
+	return xe_oa_emit_oa_config(stream);
+}
+
+static int xe_oa_stream_init(struct xe_oa_stream *stream,
+			     struct xe_oa_open_param *param)
+{
+	struct xe_oa_unit *u = param->hwe->oa_unit;
+	struct xe_gt *gt = param->hwe->gt;
+	int ret;
+
+	stream->exec_q = param->exec_q;
+	stream->poll_period_ns = DEFAULT_POLL_PERIOD_NS;
+	stream->hwe = param->hwe;
+	stream->gt = stream->hwe->gt;
+	stream->oa_buffer.format = &stream->oa->oa_formats[param->oa_format];
+
+	stream->sample = param->sample;
+	stream->periodic = param->period_exponent > 0;
+	stream->period_exponent = param->period_exponent;
+
+	stream->oa_config = xe_oa_get_oa_config(stream->oa, param->metric_set);
+	if (!stream->oa_config) {
+		drm_dbg(&stream->oa->xe->drm, "Invalid OA config id=%i\n", param->metric_set);
+		ret = -EINVAL;
+		goto exit;
+	}
+
+	ret = xe_oa_alloc_oa_buffer(stream);
+	if (ret)
+		goto err_free_configs;
+
+	/* Take runtime pm ref and forcewake to disable RC6 */
+	xe_device_mem_access_get(stream->oa->xe);
+	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+
+	stream->k_exec_q = xe_exec_queue_create(stream->oa->xe, NULL,
+						BIT(stream->hwe->logical_instance), 1,
+						stream->hwe, EXEC_QUEUE_FLAG_KERNEL, 0);
+	if (IS_ERR(stream->k_exec_q)) {
+		ret = PTR_ERR(stream->k_exec_q);
+		drm_err(&stream->oa->xe->drm, "gt%d, hwe %s, xe_exec_queue_create failed=%d",
+			stream->gt->info.id, stream->hwe->name, ret);
+		goto err_fw_put;
+	}
+
+	ret = xe_oa_enable_metric_set(stream);
+	if (ret) {
+		drm_dbg(&stream->oa->xe->drm, "Unable to enable metric set\n");
+		goto err_put_k_exec_q;
+	}
+
+	drm_dbg(&stream->oa->xe->drm, "opening stream oa config uuid=%s\n",
+		stream->oa_config->uuid);
+
+	WRITE_ONCE(u->exclusive_stream, stream);
+
+	spin_lock_init(&stream->oa_buffer.ptr_lock);
+	mutex_init(&stream->stream_lock);
+
+	return 0;
+
+err_put_k_exec_q:
+	xe_oa_disable_metric_set(stream);
+	xe_exec_queue_put(stream->k_exec_q);
+err_fw_put:
+	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+	xe_device_mem_access_put(stream->oa->xe);
+	xe_oa_free_oa_buffer(stream);
+err_free_configs:
+	xe_oa_free_configs(stream);
+exit:
+	return ret;
+}
+
+static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
+					  struct xe_oa_open_param *param)
+{
+	struct xe_oa_stream *stream;
+	int stream_fd;
+	int ret;
+
+	/* We currently only allow exclusive access */
+	if (param->hwe->oa_unit->exclusive_stream) {
+		drm_dbg(&oa->xe->drm, "OA unit already in use\n");
+		ret = -EBUSY;
+		goto exit;
+	}
+
+	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	if (!stream) {
+		ret = -ENOMEM;
+		goto exit;
+	}
+
+	stream->oa = oa;
+	ret = xe_oa_stream_init(stream, param);
+	if (ret)
+		goto err_free;
+
+	/* Hold a reference on the drm device till stream_fd is released */
+	drm_dev_get(&stream->oa->xe->drm);
+
+	return stream_fd;
+err_free:
+	kfree(stream);
+exit:
+	return ret;
+}
+
 /*
  * OA timestamp frequency = CS timestamp frequency in most platforms. On some
  * platforms OA unit ignores the CTC_SHIFT and the 2 timestamps differ. In such
@@ -416,6 +803,10 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data, struct drm_file
 		oa_freq_hz = div64_u64(NSEC_PER_SEC, oa_period);
 		drm_dbg(&oa->xe->drm, "Using periodic sampling freq %lld Hz\n", oa_freq_hz);
 	}
+
+	mutex_lock(&param.hwe->gt->oa.gt_lock);
+	ret = xe_oa_stream_open_ioctl_locked(oa, &param);
+	mutex_unlock(&param.hwe->gt->oa.gt_lock);
 err_exec_q:
 	if (ret < 0 && param.exec_q)
 		xe_exec_queue_put(param.exec_q);
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index ea1ca969a04f1..f15cd7e5ad9af 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -14,6 +14,8 @@
 #include <drm/xe_drm.h>
 #include "regs/xe_reg_defs.h"
 
+#define XE_OA_BUFFER_SIZE SZ_16M
+
 enum xe_oa_report_header {
 	HDR_32_BIT = 0,
 	HDR_64_BIT,
@@ -137,4 +139,81 @@ struct xe_oa {
 	/** @oa_unit_ids: tracks oa unit ids assigned across gt's */
 	u16 oa_unit_ids;
 };
+
+/** @oa_buffer: State of the stream OA buffer */
+struct oa_buffer {
+	/** @format: data format */
+	const struct xe_oa_format *format;
+
+	/** @format: xe_bo backing the OA buffer */
+	struct xe_bo *bo;
+
+	/** @vaddr: mapped vaddr of the OA buffer */
+	u8 *vaddr;
+
+	/** @ptr_lock: Lock protecting reads/writes to head/tail pointers */
+	spinlock_t ptr_lock;
+
+	/** @head: Cached head to read from */
+	u32 head;
+
+	/** @tail: The last verified cached tail where HW has completed writing */
+	u32 tail;
+};
+
+/**
+ * struct xe_oa_stream - state for a single open stream FD
+ */
+struct xe_oa_stream {
+	/** @oa: xe_oa backpointer */
+	struct xe_oa *oa;
+
+	/** @gt: gt associated with the oa stream */
+	struct xe_gt *gt;
+
+	/** @hwe: hardware engine associated with this oa stream */
+	struct xe_hw_engine *hwe;
+
+	/** @stream_lock: Lock serializing stream operations */
+	struct mutex stream_lock;
+
+	/** @sample: true if DRM_XE_OA_PROP_SAMPLE_OA is provided */
+	bool sample;
+
+	/** @exec_q: Exec queue corresponding to DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID */
+	struct xe_exec_queue *exec_q;
+
+	/** @k_exec_q: kernel exec_q used for OA programming batch submissions */
+	struct xe_exec_queue *k_exec_q;
+
+	/** @enabled: Whether the stream is currently enabled */
+	bool enabled;
+
+	/** @oa_config: OA configuration used by the stream */
+	struct xe_oa_config *oa_config;
+
+	/** @oa_config_bos: List of struct @xe_oa_config_bo's */
+	struct llist_head oa_config_bos;
+
+	/** @poll_check_timer: Timer to periodically check for data in the OA buffer */
+	struct hrtimer poll_check_timer;
+
+	/** @poll_wq: Wait queue for waiting for OA data to be available */
+	wait_queue_head_t poll_wq;
+
+	/** @pollin: Whether there is data available to read */
+	bool pollin;
+
+	/** @periodic: Whether periodic sampling is currently enabled */
+	bool periodic;
+
+	/** @period_exponent: OA unit sampling frequency is derived from this */
+	int period_exponent;
+
+	/** @oa_buffer: OA buffer for the stream */
+	struct oa_buffer oa_buffer;
+
+	/** @poll_period_ns: hrtimer period for checking OA buffer for available data */
+	u64 poll_period_ns;
+};
 #endif
-- 
2.41.0


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

* [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG)
  2024-01-20  2:00 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
@ 2024-01-20  2:00 ` Ashutosh Dixit
  0 siblings, 0 replies; 42+ messages in thread
From: Ashutosh Dixit @ 2024-01-20  2:00 UTC (permalink / raw)
  To: intel-xe

Implement majority of OA stream initialization (as part of OA stream open)
ioctl). OAG buffer is allocated for receiving perf counter samples from
HW. OAG unit is initialized and the selected OA metric configuration is
programmed into OAG unit HW using a command/batch buffer.

Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h |   3 +
 drivers/gpu/drm/xe/xe_oa.c           | 391 +++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_oa_types.h     |  79 ++++++
 3 files changed, 473 insertions(+)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index 0d4bfc35ff37e..9374dab272cdf 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -134,6 +134,8 @@
 
 #define SQCNT1					XE_REG_MCR(0x8718)
 #define XELPMP_SQCNT1				XE_REG(0x8718)
+#define   SQCNT1_PMON_ENABLE			REG_BIT(30)
+#define   SQCNT1_OABPC				REG_BIT(29)
 #define   ENFORCE_RAR				REG_BIT(23)
 
 #define XEHP_SQCM				XE_REG_MCR(0x8724)
@@ -351,6 +353,7 @@
 #define ROW_CHICKEN				XE_REG_MCR(0xe4f0, XE_REG_OPTION_MASKED)
 #define   UGM_BACKUP_MODE			REG_BIT(13)
 #define   MDQ_ARBITRATION_MODE			REG_BIT(12)
+#define   STALL_DOP_GATING_DISABLE		REG_BIT(5)
 #define   EARLY_EOT_DIS				REG_BIT(1)
 
 #define ROW_CHICKEN2				XE_REG_MCR(0xe4f4, XE_REG_OPTION_MASKED)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index c60e91eb3552e..11ab63373194c 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -5,17 +5,25 @@
 
 #include <linux/nospec.h>
 
+#include <drm/drm_drv.h>
 #include <drm/xe_drm.h>
 
+#include "instructions/xe_mi_commands.h"
 #include "regs/xe_gt_regs.h"
 #include "regs/xe_oa_regs.h"
 #include "xe_device.h"
 #include "xe_exec_queue.h"
+#include "xe_bb.h"
+#include "xe_bo.h"
 #include "xe_gt.h"
+#include "xe_gt_mcr.h"
 #include "xe_mmio.h"
 #include "xe_oa.h"
+#include "xe_sched_job.h"
 #include "xe_perf.h"
 
+#define DEFAULT_POLL_FREQUENCY_HZ 200
+#define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
 #define XE_OA_UNIT_INVALID U32_MAX
 
 struct xe_oa_reg {
@@ -53,6 +61,13 @@ struct xe_oa_open_param {
 	struct xe_hw_engine *hwe;
 };
 
+struct xe_oa_config_bo {
+	struct llist_node node;
+
+	struct xe_oa_config *oa_config;
+	struct xe_bb *bb;
+};
+
 #define DRM_FMT(x) DRM_XE_OA_FMT_TYPE_##x
 
 static const struct xe_oa_format oa_formats[] = {
@@ -95,6 +110,378 @@ static void xe_oa_config_put(struct xe_oa_config *oa_config)
 	kref_put(&oa_config->ref, xe_oa_config_release);
 }
 
+static struct xe_oa_config *xe_oa_config_get(struct xe_oa_config *oa_config)
+{
+	return kref_get_unless_zero(&oa_config->ref) ? oa_config : NULL;
+}
+
+static struct xe_oa_config *xe_oa_get_oa_config(struct xe_oa *oa, int metrics_set)
+{
+	struct xe_oa_config *oa_config;
+
+	rcu_read_lock();
+	oa_config = idr_find(&oa->metrics_idr, metrics_set);
+	if (oa_config)
+		oa_config = xe_oa_config_get(oa_config);
+	rcu_read_unlock();
+
+	return oa_config;
+}
+
+static void free_oa_config_bo(struct xe_oa_config_bo *oa_bo)
+{
+	xe_oa_config_put(oa_bo->oa_config);
+	xe_bb_free(oa_bo->bb, NULL);
+	kfree(oa_bo);
+}
+
+static const struct xe_oa_regs *__oa_regs(struct xe_oa_stream *stream)
+{
+	return &stream->hwe->oa_unit->regs;
+}
+
+static int xe_oa_submit_bb(struct xe_oa_stream *stream, struct xe_bb *bb)
+{
+	struct xe_sched_job *job;
+	struct dma_fence *fence;
+	long timeout;
+	int err = 0;
+
+	/* Kernel configuration is issued on stream->k_exec_q, not stream->exec_q */
+	job = xe_bb_create_job(stream->k_exec_q, bb);
+	if (IS_ERR(job)) {
+		err = PTR_ERR(job);
+		goto exit;
+	}
+
+	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)
+		err = timeout;
+	else if (!timeout)
+		err = -ETIME;
+exit:
+	return err;
+}
+
+static void write_cs_mi_lri(struct xe_bb *bb, const struct xe_oa_reg *reg_data, u32 n_regs)
+{
+	u32 i;
+
+#define MI_LOAD_REGISTER_IMM_MAX_REGS (126)
+
+	for (i = 0; i < n_regs; i++) {
+		if ((i % MI_LOAD_REGISTER_IMM_MAX_REGS) == 0) {
+			u32 n_lri = min_t(u32, n_regs - i,
+					  MI_LOAD_REGISTER_IMM_MAX_REGS);
+
+			bb->cs[bb->len++] = MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(n_lri);
+		}
+		bb->cs[bb->len++] = reg_data[i].addr.addr;
+		bb->cs[bb->len++] = reg_data[i].value;
+	}
+}
+
+static int num_lri_dwords(int num_regs)
+{
+	int count = 0;
+
+	if (num_regs > 0) {
+		count += DIV_ROUND_UP(num_regs, MI_LOAD_REGISTER_IMM_MAX_REGS);
+		count += num_regs * 2;
+	}
+
+	return count;
+}
+
+static void xe_oa_free_oa_buffer(struct xe_oa_stream *stream)
+{
+	xe_bo_unpin_map_no_vm(stream->oa_buffer.bo);
+}
+
+static void xe_oa_free_configs(struct xe_oa_stream *stream)
+{
+	struct xe_oa_config_bo *oa_bo, *tmp;
+
+	xe_oa_config_put(stream->oa_config);
+	llist_for_each_entry_safe(oa_bo, tmp, stream->oa_config_bos.first, node)
+		free_oa_config_bo(oa_bo);
+}
+
+#define HAS_OA_BPC_REPORTING(xe) (GRAPHICS_VERx100(xe) >= 1255)
+
+static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
+{
+	u32 sqcnt1;
+
+	/*
+	 * Wa_1508761755:xehpsdv, dg2
+	 * Enable thread stall DOP gating and EU DOP gating.
+	 */
+	if (stream->oa->xe->info.platform == XE_DG2) {
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
+					  _MASKED_BIT_DISABLE(STALL_DOP_GATING_DISABLE));
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
+					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
+	}
+
+	/* Make sure we disable noa to save power. */
+	xe_mmio_rmw32(stream->gt, RPM_CONFIG1, GT_NOA_ENABLE, 0);
+
+	sqcnt1 = SQCNT1_PMON_ENABLE |
+		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
+
+	/* Reset PMON Enable to save power. */
+	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, sqcnt1, 0);
+}
+
+static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream)
+{
+	struct xe_bo *bo;
+
+	BUILD_BUG_ON_NOT_POWER_OF_2(XE_OA_BUFFER_SIZE);
+	BUILD_BUG_ON(XE_OA_BUFFER_SIZE < SZ_128K || XE_OA_BUFFER_SIZE > SZ_16M);
+
+	bo = xe_bo_create_pin_map(stream->oa->xe, stream->gt->tile, NULL,
+				  XE_OA_BUFFER_SIZE, ttm_bo_type_kernel,
+				  XE_BO_CREATE_SYSTEM_BIT | XE_BO_CREATE_GGTT_BIT);
+	if (IS_ERR(bo))
+		return PTR_ERR(bo);
+
+	stream->oa_buffer.bo = bo;
+	stream->oa_buffer.vaddr = bo->vmap.vaddr;
+	return 0;
+}
+
+static struct xe_oa_config_bo *
+__xe_oa_alloc_config_buffer(struct xe_oa_stream *stream, struct xe_oa_config *oa_config)
+{
+	struct xe_oa_config_bo *oa_bo;
+	size_t config_length;
+	struct xe_bb *bb;
+
+	oa_bo = kzalloc(sizeof(*oa_bo), GFP_KERNEL);
+	if (!oa_bo)
+		return ERR_PTR(-ENOMEM);
+
+	config_length = num_lri_dwords(oa_config->regs_len);
+	config_length = ALIGN(sizeof(u32) * config_length, XE_PAGE_SIZE) / sizeof(u32);
+
+	bb = xe_bb_new(stream->gt, config_length, false);
+	if (IS_ERR(bb))
+		goto err_free;
+
+	write_cs_mi_lri(bb, oa_config->regs, oa_config->regs_len);
+
+	oa_bo->bb = bb;
+	oa_bo->oa_config = xe_oa_config_get(oa_config);
+	llist_add(&oa_bo->node, &stream->oa_config_bos);
+
+	return oa_bo;
+err_free:
+	kfree(oa_bo);
+	return ERR_CAST(bb);
+}
+
+static struct xe_oa_config_bo *xe_oa_alloc_config_buffer(struct xe_oa_stream *stream)
+{
+	struct xe_oa_config *oa_config = stream->oa_config;
+	struct xe_oa_config_bo *oa_bo;
+
+	/* Look for the buffer in the already allocated BOs attached to the stream */
+	llist_for_each_entry(oa_bo, stream->oa_config_bos.first, node) {
+		if (oa_bo->oa_config == oa_config &&
+		    memcmp(oa_bo->oa_config->uuid, oa_config->uuid,
+			   sizeof(oa_config->uuid)) == 0)
+			goto out;
+	}
+
+	oa_bo = __xe_oa_alloc_config_buffer(stream, oa_config);
+out:
+	return oa_bo;
+}
+
+static int xe_oa_emit_oa_config(struct xe_oa_stream *stream)
+{
+#define NOA_PROGRAM_ADDITIONAL_DELAY_US 500
+	struct xe_oa_config_bo *oa_bo;
+	int err, us = NOA_PROGRAM_ADDITIONAL_DELAY_US;
+
+	oa_bo = xe_oa_alloc_config_buffer(stream);
+	if (IS_ERR(oa_bo)) {
+		err = PTR_ERR(oa_bo);
+		goto exit;
+	}
+
+	err = xe_oa_submit_bb(stream, oa_bo->bb);
+
+	/* Additional empirical delay needed for NOA programming after registers are written */
+	usleep_range(us, 2 * us);
+exit:
+	return err;
+}
+
+static u32 oag_report_ctx_switches(const struct xe_oa_stream *stream)
+{
+	/* If user didn't require OA reports, ask HW not to emit ctx switch reports */
+	return _MASKED_FIELD(OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS,
+			     stream->sample ?
+			     0 : OAG_OA_DEBUG_DISABLE_CTX_SWITCH_REPORTS);
+}
+
+static int xe_oa_enable_metric_set(struct xe_oa_stream *stream)
+{
+	u32 oa_debug, sqcnt1;
+
+	/*
+	 * Wa_1508761755:xehpsdv, dg2
+	 * EU NOA signals behave incorrectly if EU clock gating is enabled.
+	 * Disable thread stall DOP gating and EU DOP gating.
+	 */
+	if (stream->oa->xe->info.platform == XE_DG2) {
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN,
+					  _MASKED_BIT_ENABLE(STALL_DOP_GATING_DISABLE));
+		xe_gt_mcr_multicast_write(stream->gt, ROW_CHICKEN2,
+					  _MASKED_BIT_ENABLE(DISABLE_DOP_GATING));
+	}
+
+	/* Disable clk ratio reports */
+	oa_debug = OAG_OA_DEBUG_DISABLE_CLK_RATIO_REPORTS |
+		OAG_OA_DEBUG_INCLUDE_CLK_RATIO;
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_debug,
+			_MASKED_BIT_ENABLE(oa_debug) |
+			oag_report_ctx_switches(stream));
+
+	xe_mmio_write32(stream->gt, __oa_regs(stream)->oa_ctx_ctrl, stream->periodic ?
+			(OAG_OAGLBCTXCTRL_COUNTER_RESUME |
+			 OAG_OAGLBCTXCTRL_TIMER_ENABLE |
+			 REG_FIELD_PREP(OAG_OAGLBCTXCTRL_TIMER_PERIOD_MASK,
+					stream->period_exponent)) : 0);
+
+	/*
+	 * Initialize Super Queue Internal Cnt Register
+	 * Set PMON Enable in order to collect valid metrics
+	 * Enable bytes per clock reporting
+	 */
+	sqcnt1 = SQCNT1_PMON_ENABLE |
+		 (HAS_OA_BPC_REPORTING(stream->oa->xe) ? SQCNT1_OABPC : 0);
+
+	xe_mmio_rmw32(stream->gt, XELPMP_SQCNT1, 0, sqcnt1);
+
+	return xe_oa_emit_oa_config(stream);
+}
+
+static int xe_oa_stream_init(struct xe_oa_stream *stream,
+			     struct xe_oa_open_param *param)
+{
+	struct xe_oa_unit *u = param->hwe->oa_unit;
+	struct xe_gt *gt = param->hwe->gt;
+	int ret;
+
+	stream->exec_q = param->exec_q;
+	stream->poll_period_ns = DEFAULT_POLL_PERIOD_NS;
+	stream->hwe = param->hwe;
+	stream->gt = stream->hwe->gt;
+	stream->oa_buffer.format = &stream->oa->oa_formats[param->oa_format];
+
+	stream->sample = param->sample;
+	stream->periodic = param->period_exponent > 0;
+	stream->period_exponent = param->period_exponent;
+
+	stream->oa_config = xe_oa_get_oa_config(stream->oa, param->metric_set);
+	if (!stream->oa_config) {
+		drm_dbg(&stream->oa->xe->drm, "Invalid OA config id=%i\n", param->metric_set);
+		ret = -EINVAL;
+		goto exit;
+	}
+
+	ret = xe_oa_alloc_oa_buffer(stream);
+	if (ret)
+		goto err_free_configs;
+
+	/* Take runtime pm ref and forcewake to disable RC6 */
+	xe_device_mem_access_get(stream->oa->xe);
+	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+
+	stream->k_exec_q = xe_exec_queue_create(stream->oa->xe, NULL,
+						BIT(stream->hwe->logical_instance), 1,
+						stream->hwe, EXEC_QUEUE_FLAG_KERNEL, 0);
+	if (IS_ERR(stream->k_exec_q)) {
+		ret = PTR_ERR(stream->k_exec_q);
+		drm_err(&stream->oa->xe->drm, "gt%d, hwe %s, xe_exec_queue_create failed=%d",
+			stream->gt->info.id, stream->hwe->name, ret);
+		goto err_fw_put;
+	}
+
+	ret = xe_oa_enable_metric_set(stream);
+	if (ret) {
+		drm_dbg(&stream->oa->xe->drm, "Unable to enable metric set\n");
+		goto err_put_k_exec_q;
+	}
+
+	drm_dbg(&stream->oa->xe->drm, "opening stream oa config uuid=%s\n",
+		stream->oa_config->uuid);
+
+	WRITE_ONCE(u->exclusive_stream, stream);
+
+	spin_lock_init(&stream->oa_buffer.ptr_lock);
+	mutex_init(&stream->stream_lock);
+
+	return 0;
+
+err_put_k_exec_q:
+	xe_oa_disable_metric_set(stream);
+	xe_exec_queue_put(stream->k_exec_q);
+err_fw_put:
+	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+	xe_device_mem_access_put(stream->oa->xe);
+	xe_oa_free_oa_buffer(stream);
+err_free_configs:
+	xe_oa_free_configs(stream);
+exit:
+	return ret;
+}
+
+static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
+					  struct xe_oa_open_param *param)
+{
+	struct xe_oa_stream *stream;
+	int stream_fd;
+	int ret;
+
+	/* We currently only allow exclusive access */
+	if (param->hwe->oa_unit->exclusive_stream) {
+		drm_dbg(&oa->xe->drm, "OA unit already in use\n");
+		ret = -EBUSY;
+		goto exit;
+	}
+
+	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	if (!stream) {
+		ret = -ENOMEM;
+		goto exit;
+	}
+
+	stream->oa = oa;
+	ret = xe_oa_stream_init(stream, param);
+	if (ret)
+		goto err_free;
+
+	/* Hold a reference on the drm device till stream_fd is released */
+	drm_dev_get(&stream->oa->xe->drm);
+
+	return stream_fd;
+err_free:
+	kfree(stream);
+exit:
+	return ret;
+}
+
 /*
  * OA timestamp frequency = CS timestamp frequency in most platforms. On some
  * platforms OA unit ignores the CTC_SHIFT and the 2 timestamps differ. In such
@@ -416,6 +803,10 @@ int xe_oa_stream_open_ioctl(struct drm_device *dev, void *data, struct drm_file
 		oa_freq_hz = div64_u64(NSEC_PER_SEC, oa_period);
 		drm_dbg(&oa->xe->drm, "Using periodic sampling freq %lld Hz\n", oa_freq_hz);
 	}
+
+	mutex_lock(&param.hwe->gt->oa.gt_lock);
+	ret = xe_oa_stream_open_ioctl_locked(oa, &param);
+	mutex_unlock(&param.hwe->gt->oa.gt_lock);
 err_exec_q:
 	if (ret < 0 && param.exec_q)
 		xe_exec_queue_put(param.exec_q);
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index 594e38c6328d2..539830f5f0b24 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -14,6 +14,8 @@
 #include <drm/xe_drm.h>
 #include "regs/xe_reg_defs.h"
 
+#define XE_OA_BUFFER_SIZE SZ_16M
+
 enum xe_oa_report_header {
 	HDR_32_BIT = 0,
 	HDR_64_BIT,
@@ -141,4 +143,81 @@ struct xe_oa {
 	/** @oa_unit_ids: tracks oa unit ids assigned across gt's */
 	u16 oa_unit_ids;
 };
+
+/** @oa_buffer: State of the stream OA buffer */
+struct oa_buffer {
+	/** @format: data format */
+	const struct xe_oa_format *format;
+
+	/** @format: xe_bo backing the OA buffer */
+	struct xe_bo *bo;
+
+	/** @vaddr: mapped vaddr of the OA buffer */
+	u8 *vaddr;
+
+	/** @ptr_lock: Lock protecting reads/writes to head/tail pointers */
+	spinlock_t ptr_lock;
+
+	/** @head: Cached head to read from */
+	u32 head;
+
+	/** @tail: The last verified cached tail where HW has completed writing */
+	u32 tail;
+};
+
+/**
+ * struct xe_oa_stream - state for a single open stream FD
+ */
+struct xe_oa_stream {
+	/** @oa: xe_oa backpointer */
+	struct xe_oa *oa;
+
+	/** @gt: gt associated with the oa stream */
+	struct xe_gt *gt;
+
+	/** @hwe: hardware engine associated with this oa stream */
+	struct xe_hw_engine *hwe;
+
+	/** @lock: Lock serializing stream operations */
+	struct mutex stream_lock;
+
+	/** @sample: true if DRM_XE_OA_PROP_SAMPLE_OA is provided */
+	bool sample;
+
+	/** @exec_q: Exec queue corresponding to DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID */
+	struct xe_exec_queue *exec_q;
+
+	/** @k_exec_q: kernel exec_q used for OA programming batch submissions */
+	struct xe_exec_queue *k_exec_q;
+
+	/** @enabled: Whether the stream is currently enabled */
+	bool enabled;
+
+	/** @oa_config: OA configuration used by the stream */
+	struct xe_oa_config *oa_config;
+
+	/** @oa_config_bos: List of struct @xe_oa_config_bo's */
+	struct llist_head oa_config_bos;
+
+	/** @poll_check_timer: Timer to periodically check for data in the OA buffer */
+	struct hrtimer poll_check_timer;
+
+	/** @poll_wq: Wait queue for waiting for OA data to be available */
+	wait_queue_head_t poll_wq;
+
+	/** @pollin: Whether there is data available to read */
+	bool pollin;
+
+	/** @periodic: Whether periodic sampling is currently enabled */
+	bool periodic;
+
+	/** @period_exponent: OA unit sampling frequency is derived from this */
+	int period_exponent;
+
+	/** @oa_buffer: OA buffer for the stream */
+	struct oa_buffer oa_buffer;
+
+	/** @poll_period_ns: hrtimer period for checking OA buffer for available data */
+	u64 poll_period_ns;
+};
 #endif
-- 
2.41.0


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

end of thread, other threads:[~2024-03-05  5:33 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-08  5:49 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 01/16] drm/xe/perf/uapi: "Perf" layer to support multiple perf counter stream types Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 02/16] drm/xe/perf/uapi: Add perf_stream_paranoid sysctl Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 03/16] drm/xe/oa/uapi: Add OA data formats Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 04/16] drm/xe/oa/uapi: Initialize OA units Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 05/16] drm/xe/oa/uapi: Add/remove OA config perf ops Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 06/16] drm/xe/oa/uapi: Define and parse OA stream properties Ashutosh Dixit
2024-02-08 21:40   ` Lionel Landwerlin
2024-02-08 22:26     ` Dixit, Ashutosh
2024-02-09  6:25       ` Lionel Landwerlin
2024-02-09  6:46         ` Dixit, Ashutosh
2024-02-12 18:57       ` Umesh Nerlige Ramappa
2024-02-12 19:08         ` Umesh Nerlige Ramappa
2024-02-13  7:04           ` Dixit, Ashutosh
2024-02-08  5:49 ` [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG) Ashutosh Dixit
2024-02-09  6:23   ` Lionel Landwerlin
2024-02-09  7:08     ` Dixit, Ashutosh
2024-02-09  8:14       ` Lionel Landwerlin
2024-02-13 17:04         ` Dixit, Ashutosh
2024-02-08  5:49 ` [PATCH 08/16] drm/xe/oa/uapi: Expose OA stream fd Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 09/16] drm/xe/oa/uapi: Read file_operation Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 10/16] drm/xe/oa: Disable overrun mode for Xe2+ OAG Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 11/16] drm/xe/oa: Add OAR support Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 12/16] drm/xe/oa: Add OAC support Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 13/16] drm/xe/oa/uapi: Query OA unit properties Ashutosh Dixit
2024-02-12 19:59   ` Umesh Nerlige Ramappa
2024-02-13  7:09     ` Dixit, Ashutosh
2024-02-08  5:49 ` [PATCH 14/16] drm/xe/oa/uapi: OA buffer mmap Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 15/16] drm/xe/oa: Add MMIO trigger support Ashutosh Dixit
2024-02-08  5:49 ` [PATCH 16/16] drm/xe/oa: Override GuC RC with OA on PVC Ashutosh Dixit
2024-02-08  5:52 ` ✓ CI.Patch_applied: success for Add OA functionality to Xe (rev9) Patchwork
2024-02-08  5:53 ` ✗ CI.checkpatch: warning " Patchwork
2024-02-08  5:54 ` ✓ CI.KUnit: success " Patchwork
2024-02-08  6:01 ` ✓ CI.Build: " Patchwork
2024-02-08  6:02 ` ✗ CI.Hooks: failure " Patchwork
2024-02-08  6:03 ` ✓ CI.checksparse: success " Patchwork
2024-02-08  6:22 ` ✓ CI.BAT: " Patchwork
2024-02-08 21:34 ` [PATCH 00/16] Add OA functionality to Xe Lionel Landwerlin
2024-02-08 21:56   ` Dixit, Ashutosh
  -- strict thread matches above, loose matches on Subject: below --
2024-03-05  5:32 Ashutosh Dixit
2024-03-05  5:32 ` [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG) Ashutosh Dixit
2024-02-13  6:44 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
2024-02-13  6:44 ` [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG) Ashutosh Dixit
2024-01-20  2:00 [PATCH 00/16] Add OA functionality to Xe Ashutosh Dixit
2024-01-20  2:00 ` [PATCH 07/16] drm/xe/oa: OA stream initialization (OAG) Ashutosh Dixit

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.