All of lore.kernel.org
 help / color / mirror / Atom feed
* [Intel-xe] [PATCH v3 00/31] Separate GT and tile
@ 2023-05-30 21:15 Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 01/31] drm/xe/mtl: Disable media GT Matt Roper
                   ` (33 more replies)
  0 siblings, 34 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, Rodrigo Vivi, matthew.d.roper, Nirmoy Das

A 'tile' is not the same thing as a 'GT.'  For historical reasons, i915
attempted to use a single 'struct intel_gt' to represent both concepts,
although this design hasn't worked out terribly well.  For Xe we have
the opportunity to design the driver in a way that more accurately
reflects the real hardware behavior.

Different vendors use the term "tile" a bit differently, but in the
Intel world, a 'tile' is pretty close to what most people would think of
as being a complete GPU.  When multiple GPUs are placed behind a single
PCI device, that's what we refer to as a "multi-tile device."  In such
cases, pretty much all hardware is replicated per-tile, although certain
responsibilities like PCI communication, reporting of interrupts to the
OS, etc. are handled solely by the "root tile."  A multi-tile platform
takes care of tying the tiles together in a way such that interrupt
notifications from remote tiles are forwarded to the root tile, the
per-tile vram is combined into a single address space, etc.

In contrast, a "GT" (which officially stands for "Graphics Technology")
is the subset of a GPU/tile that is responsible for implementing
graphics and/or media operations.  The GT is where a lot of the driver
implementation happens since it's where the hardware engines, the
execution units, and the GuC all reside.

Historically most Intel devices were single-tile devices that contained
a single GT.  PVC is currently the only released Intel platform built on
a multi-tile design (i.e., multiple GPUs behind a single PCI device);
each PVC tile only has a single GT.  In contrast, platforms like MTL
that have separate chips for render and media IP are still only a single
logical GPU, but the graphics and media IP blocks are each exposed as a
separate GT within that single GPU.  This is important from a software
perspective because multi-GT platforms like MTL only replicate a subset
of the GPU hardware and behave differently than multi-tile platforms
like PVC where nearly everything is replicated.

This series separates tiles from GTs in a manner that more closely
matches the hardware behavior.  We now consider a PCI device (xe_device)
to contain one or more tiles (struct xe_tile).  Each tile will contain
one or two GTs (struct xe_gt).  Although we don't have any platforms yet
that are multi-tile *and* contain more than one GT per tile, that may
change in the future.  This driver redesign splits functionality as
follows:

Per-tile functionality (shared by all GTs within the tile):
 - Complete 4MB MMIO space (containing SGunit/SoC registers, GT
   registers, display registers, etc.)
 - Global GTT
 - VRAM (if discrete)
 - Interrupt flows
 - Migration context
 - kernel batchbuffer pool
 - Primary GT
 - Media GT (if media version >= 13)

Per-GT functionality:
 - GuC
 - Hardware engines
 - Programmable hardware units (subslices, EUs)
 - GSI subset of registers (multiple copies of these registers reside
   within the complete MMIO space provided by the tile, but at different
   offsets --- 0 for render, 0x380000 for media)
 - Multicast register steering
 - TLBs to cache page table translations
 - Reset capability
 - Low-level power management (e.g., C6)
 - Clock frequency
 - MOCS and PAT programming

At the moment I've left USM / pagefault handling at the GT level,
although I'm not familiar enough with that specific feature to know
whether it's truly correct or not.

The first patch in this series temporarily drops MTL media GT support.
The driver doesn't load properly on MTL today, largely due to the
mishandling of GT vs tile; dropping support completely allows us to more
easily make the necessary driver redesign required.  The media GT is
re-enabled (properly this time) near the end of the series and this
allows the driver to load successfully without error on MTL for the
first time.  There are still issues when submitting workloads to MTL
after driver load (i.e., CAT errors), but those seem to be a separate
platform-specific issues unrelated to the GT/tile work in this series
that will need to be debugged and fixed separately.


This series leaves a few open questions and FIXME's:
 - Unlike i915, the Xe driver has chosen to expose GTs to userspace
   rather than keeping them a hidden implementation detail.  With the
   separation of xe_tile and xe_gt, we need to decide whether we also
   want to expose tiles (in addition to GTs), whether we want to _only_
   expose tiles (and keep the primary vs media GT separation a hidden
   internal detail), or something else.
 - How should GTs be numbered?  Today it's straightforward --- PVC
   assigns GT IDs 0 and 1 to the primary GT of each tile.  MTL assigns
   GT IDs 0 and 1 to the primary and media GTs of its sole tile.  But if
   we have a platform in the future that has multiple tiles _and_
   multiple GTs per tile, how should we handle the numbering in that
   case?
 - Xe (mis)design used xe_gt as the target of all MMIO operations (i.e.,
   xe_mmio_*()).  This really doesn't make sense, especially since
   there's a lot of MMIO accesses that are completely unrelated to GT
   (i.e., sgunit registers, display registers, etc.).  i915 used
   'intel_uncore' as the MMIO target, although that wasn't really an
   accurate reflection of the hardware either.  What we really want is
   something that combines the MMIO register space (stored in the tile)
   with the GSI offset (stored in the GT).  My current plan is to
   introduce an "xe_mmio_view" (name may change) in a future series that
   will serve as a target for register operations.  There will be
   sensible APIs to obtain an xe_mmio_view appropriate to the type of
   register access being performed (and that will also be able to do
   some range sanity checking in debug drivers to help catch misuse).
   That's a somewhat large/invasive change, so I'm saving that for a
   follow-up series after this one is completed.

v2:
 - Fix kunit test build
 - Add kerneldoc narrative about multi-tile design
 - Undo accidental squashing of GGTT and VRAM patches
 - Improved comments and commit message explanations in a few places.
 - Move display changes to fixup! patches
 - Rebase onto latest drm-xe-next codebase

v3:
 - Rebase onto latest drm-xe-next (including a new fixup! patch for
   some display-related changes).
 - Various cosmetic style issues and typo fixes

Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Michael J. Ruhl <michael.j.ruhl@intel.com>
Cc: Nirmoy Das <nirmoy.das@intel.com>


Matt Roper (31):
  drm/xe/mtl: Disable media GT
  drm/xe: Introduce xe_tile
  drm/xe: Add backpointer from gt to tile
  fixup! drm/xe: keep pulling mem_access_get further back
  drm/xe: Add for_each_tile iterator
  drm/xe: Move register MMIO into xe_tile
  fixup! drm/xe/display: Implement display support
  drm/xe: Move GGTT from GT to tile
  fixup! drm/xe/display: Implement display support
  drm/xe: Move VRAM from GT to tile
  fixup! drm/xe/display: Implement display support
  drm/xe: Memory allocations are tile-based, not GT-based
  fixup! drm/xe/display: Implement display support
  drm/xe: Move migration from GT to tile
  drm/xe: Clarify 'gt' retrieval for primary tile
  drm/xe: Drop vram_id
  drm/xe: Drop extra_gts[] declarations and XE_GT_TYPE_REMOTE
  drm/xe: Allocate GT dynamically
  drm/xe: Add media GT to tile
  drm/xe: Move display IRQ postinstall out of GT function
  drm/xe: Interrupts are delivered per-tile, not per-GT
  drm/xe/irq: Handle ASLE backlight interrupts at same time as display
  drm/xe/irq: Ensure primary GuC won't clobber media GuC's interrupt
    mask
  drm/xe/irq: Untangle postinstall functions
  drm/xe: Replace xe_gt_irq_postinstall with xe_irq_enable_hwe
  drm/xe: Invalidate TLB on all affected GTs during GGTT updates
  drm/xe/tlb: Obtain forcewake when doing GGTT TLB invalidations
  drm/xe: Allow GT looping and lookup on standalone media
  drm/xe: Update query uapi to support standalone media
  drm/xe: Reinstate media GT support
  drm/xe: Add kerneldoc description of multi-tile devices

 Documentation/gpu/xe/index.rst                |   1 +
 Documentation/gpu/xe/xe_tile.rst              |  14 +
 drivers/gpu/drm/i915/display/intel_dsb.c      |   5 +-
 drivers/gpu/drm/i915/display/intel_fbc.c      |   3 +-
 drivers/gpu/drm/i915/display/intel_fbdev.c    |   7 +-
 drivers/gpu/drm/xe/Makefile                   |   1 +
 .../drm/xe/compat-i915-headers/intel_uncore.h |   2 +-
 drivers/gpu/drm/xe/display/ext/i915_irq.c     |   2 +-
 drivers/gpu/drm/xe/display/xe_fb_pin.c        |  17 +-
 drivers/gpu/drm/xe/display/xe_plane_initial.c |   8 +-
 drivers/gpu/drm/xe/regs/xe_gt_regs.h          |   8 +
 drivers/gpu/drm/xe/tests/xe_bo.c              |  14 +-
 drivers/gpu/drm/xe/tests/xe_migrate.c         |  40 +-
 drivers/gpu/drm/xe/tests/xe_rtp_test.c        |   6 +-
 drivers/gpu/drm/xe/xe_bb.c                    |   5 +-
 drivers/gpu/drm/xe/xe_bo.c                    | 105 ++---
 drivers/gpu/drm/xe/xe_bo.h                    |  20 +-
 drivers/gpu/drm/xe/xe_bo_evict.c              |  22 +-
 drivers/gpu/drm/xe/xe_bo_types.h              |   4 +-
 drivers/gpu/drm/xe/xe_device.c                |  12 +-
 drivers/gpu/drm/xe/xe_device.h                |  66 ++-
 drivers/gpu/drm/xe/xe_device_types.h          | 109 ++++-
 drivers/gpu/drm/xe/xe_engine.c                |   2 +-
 drivers/gpu/drm/xe/xe_ggtt.c                  |  57 ++-
 drivers/gpu/drm/xe/xe_ggtt.h                  |   6 +-
 drivers/gpu/drm/xe/xe_ggtt_types.h            |   2 +-
 drivers/gpu/drm/xe/xe_gt.c                    | 143 +------
 drivers/gpu/drm/xe/xe_gt.h                    |   8 +-
 drivers/gpu/drm/xe/xe_gt_debugfs.c            |   8 +-
 drivers/gpu/drm/xe/xe_gt_pagefault.c          |  16 +-
 drivers/gpu/drm/xe/xe_gt_printk.h             |   6 +-
 drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c   |   8 +-
 drivers/gpu/drm/xe/xe_gt_types.h              |  89 ++--
 drivers/gpu/drm/xe/xe_guc.c                   |  11 +-
 drivers/gpu/drm/xe/xe_guc_ads.c               |   5 +-
 drivers/gpu/drm/xe/xe_guc_ct.c                |   5 +-
 drivers/gpu/drm/xe/xe_guc_hwconfig.c          |   5 +-
 drivers/gpu/drm/xe/xe_guc_log.c               |   6 +-
 drivers/gpu/drm/xe/xe_guc_pc.c                |   5 +-
 drivers/gpu/drm/xe/xe_hw_engine.c             |   6 +-
 drivers/gpu/drm/xe/xe_irq.c                   | 389 +++++++++---------
 drivers/gpu/drm/xe/xe_irq.h                   |   3 +-
 drivers/gpu/drm/xe/xe_lrc.c                   |  13 +-
 drivers/gpu/drm/xe/xe_lrc_types.h             |   4 +-
 drivers/gpu/drm/xe/xe_migrate.c               |  76 ++--
 drivers/gpu/drm/xe/xe_migrate.h               |   9 +-
 drivers/gpu/drm/xe/xe_mmio.c                  |  94 ++---
 drivers/gpu/drm/xe/xe_mmio.h                  |  23 +-
 drivers/gpu/drm/xe/xe_mocs.c                  |  14 +-
 drivers/gpu/drm/xe/xe_pci.c                   |  86 ++--
 drivers/gpu/drm/xe/xe_pt.c                    | 144 +++----
 drivers/gpu/drm/xe/xe_pt.h                    |  14 +-
 drivers/gpu/drm/xe/xe_query.c                 |  32 +-
 drivers/gpu/drm/xe/xe_res_cursor.h            |   2 +-
 drivers/gpu/drm/xe/xe_sa.c                    |  13 +-
 drivers/gpu/drm/xe/xe_sa.h                    |   4 +-
 drivers/gpu/drm/xe/xe_tile.c                  | 155 +++++++
 drivers/gpu/drm/xe/xe_tile.h                  |  16 +
 drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c        |  20 +-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c          |  16 +-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.h          |   4 +-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h    |   6 +-
 drivers/gpu/drm/xe/xe_uc_fw.c                 |   5 +-
 drivers/gpu/drm/xe/xe_vm.c                    | 156 ++++---
 drivers/gpu/drm/xe/xe_vm.h                    |   2 +-
 drivers/gpu/drm/xe/xe_vm_types.h              |  22 +-
 include/uapi/drm/xe_drm.h                     |   4 +-
 67 files changed, 1219 insertions(+), 966 deletions(-)
 create mode 100644 Documentation/gpu/xe/xe_tile.rst
 create mode 100644 drivers/gpu/drm/xe/xe_tile.c
 create mode 100644 drivers/gpu/drm/xe/xe_tile.h

-- 
2.40.1


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

* [Intel-xe] [PATCH v3 01/31] drm/xe/mtl: Disable media GT
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-31 13:45   ` Gustavo Sousa
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 02/31] drm/xe: Introduce xe_tile Matt Roper
                   ` (32 subsequent siblings)
  33 siblings, 1 reply; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Xe incorrectly conflates the concept of 'tile' and 'GT.'  Since MTL's
media support is not yet functioning properly, let's just disable it
completely for now while we fix the fundamental driver design.  Support
for media GTs on platforms like MTL will be re-added later.

v2:
 - Drop some unrelated code cleanup that didn't belong in this patch.
   (Lucas)

Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Matt Atwood <matthew.s.atwood@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
 drivers/gpu/drm/xe/xe_mmio.c |  2 --
 drivers/gpu/drm/xe/xe_pci.c  | 13 +------------
 2 files changed, 1 insertion(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index d3b57669c9a7..ef2353eef6fe 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -340,8 +340,6 @@ static void xe_mmio_probe_tiles(struct xe_device *xe)
 	mtcfg = xe_mmio_read64(gt, XEHP_MTCFG_ADDR);
 	adj_tile_count = xe->info.tile_count =
 		REG_FIELD_GET(TILE_COUNT, mtcfg) + 1;
-	if (xe->info.media_verx100 >= 1300)
-		xe->info.tile_count *= 2;
 
 	drm_info(&xe->drm, "tile_count: %d, adj_tile_count %d\n",
 		 xe->info.tile_count, adj_tile_count);
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index d8f1213ae1d6..be860f6d0a4f 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -19,6 +19,7 @@
 #include "xe_device.h"
 #include "xe_display.h"
 #include "xe_drv.h"
+#include "xe_gt.h"
 #include "xe_macros.h"
 #include "xe_module.h"
 #include "xe_pci_types.h"
@@ -290,21 +291,11 @@ static const struct xe_device_desc pvc_desc = {
 	.extra_gts = pvc_gts,
 };
 
-static const struct xe_gt_desc xelpmp_gts[] = {
-	{
-		.type = XE_GT_TYPE_MEDIA,
-		.vram_id = 0,
-		.mmio_adj_limit = 0x40000,
-		.mmio_adj_offset = 0x380000,
-	},
-};
-
 static const struct xe_device_desc mtl_desc = {
 	/* .graphics and .media determined via GMD_ID */
 	.require_force_probe = true,
 	PLATFORM(XE_METEORLAKE),
 	.has_display = true,
-	.extra_gts = xelpmp_gts,
 };
 
 #undef PLATFORM
@@ -566,8 +557,6 @@ static int xe_info_init(struct xe_device *xe,
 	 * treats it as the number of GTs rather than just the number of tiles.
 	 */
 	xe->info.tile_count = 1 + graphics_desc->max_remote_tiles;
-	if (MEDIA_VER(xe) >= 13)
-		xe->info.tile_count++;
 
 	for (id = 0; id < xe->info.tile_count; ++id) {
 		gt = xe->gt + id;
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 02/31] drm/xe: Introduce xe_tile
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 01/31] drm/xe/mtl: Disable media GT Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 03/31] drm/xe: Add backpointer from gt to tile Matt Roper
                   ` (31 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Create a new xe_tile structure to begin separating the concept of "tile"
from "GT."  A tile is effectively a complete GPU, and a GT is just one
part of that.  On platforms like MTL, there's only a single full GPU
(tile) which has its IP blocks provided by two GTs.  In contrast, a
"multi-tile" platform like PVC is basically multiple complete GPUs
packed behind a single PCI device.

For now, just create xe_tile as a simple wrapper around xe_gt.  The
items in xe_gt that are truly tied to the tile rather than the GT will
be moved in future patches.  Support for multiple GTs per tile (i.e.,
the MTL standalone media case) will also be re-introduced in a future
patch.

v2:
 - Fix kunit test build
 - Move hunk from next patch to use local tile variable rather than
   direct xe->tiles[id] accesses.  (Lucas)
 - Mention compute in kerneldoc.  (Rodrigo)

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_bo.c       |  2 +-
 drivers/gpu/drm/xe/tests/xe_rtp_test.c |  6 ++--
 drivers/gpu/drm/xe/xe_device.h         | 11 +++++--
 drivers/gpu/drm/xe/xe_device_types.h   | 40 ++++++++++++++++++++++++--
 drivers/gpu/drm/xe/xe_gt_types.h       | 15 ++++++----
 drivers/gpu/drm/xe/xe_mmio.c           | 13 +++++----
 drivers/gpu/drm/xe/xe_pci.c            |  7 ++++-
 drivers/gpu/drm/xe/xe_vm.c             |  2 +-
 drivers/gpu/drm/xe/xe_vm_types.h       |  8 +++---
 9 files changed, 78 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_bo.c b/drivers/gpu/drm/xe/tests/xe_bo.c
index 9bd381e5b7a6..6075f12a1962 100644
--- a/drivers/gpu/drm/xe/tests/xe_bo.c
+++ b/drivers/gpu/drm/xe/tests/xe_bo.c
@@ -174,7 +174,7 @@ static int evict_test_run_gt(struct xe_device *xe, struct xe_gt *gt, struct kuni
 	struct xe_bo *bo, *external;
 	unsigned int bo_flags = XE_BO_CREATE_USER_BIT |
 		XE_BO_CREATE_VRAM_IF_DGFX(gt);
-	struct xe_vm *vm = xe_migrate_get_vm(xe->gt[0].migrate);
+	struct xe_vm *vm = xe_migrate_get_vm(xe_device_get_root_tile(xe)->primary_gt.migrate);
 	struct ww_acquire_ctx ww;
 	int err, i;
 
diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
index ab6f7a47db50..45f2614f91ec 100644
--- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
@@ -13,6 +13,7 @@
 
 #include "regs/xe_gt_regs.h"
 #include "regs/xe_reg_defs.h"
+#include "xe_device.h"
 #include "xe_device_types.h"
 #include "xe_pci_test.h"
 #include "xe_reg_sr.h"
@@ -236,9 +237,10 @@ static void xe_rtp_process_tests(struct kunit *test)
 {
 	const struct rtp_test_case *param = test->param_value;
 	struct xe_device *xe = test->priv;
-	struct xe_reg_sr *reg_sr = &xe->gt[0].reg_sr;
+	struct xe_gt *gt = &xe_device_get_root_tile(xe)->primary_gt;
+	struct xe_reg_sr *reg_sr = &gt->reg_sr;
 	const struct xe_reg_sr_entry *sre, *sr_entry = NULL;
-	struct xe_rtp_process_ctx ctx = XE_RTP_PROCESS_CTX_INITIALIZER(&xe->gt[0]);
+	struct xe_rtp_process_ctx ctx = XE_RTP_PROCESS_CTX_INITIALIZER(gt);
 	unsigned long idx, count = 0;
 
 	xe_reg_sr_init(reg_sr, "xe_rtp_tests", xe);
diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index cbae480a2092..f7acaf51a1fc 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -48,12 +48,17 @@ static inline struct xe_file *to_xe_file(const struct drm_file *file)
 	return file->driver_priv;
 }
 
+static inline struct xe_tile *xe_device_get_root_tile(struct xe_device *xe)
+{
+	return &xe->tiles[0];
+}
+
 static inline struct xe_gt *xe_device_get_gt(struct xe_device *xe, u8 gt_id)
 {
 	struct xe_gt *gt;
 
-	XE_BUG_ON(gt_id > XE_MAX_GT);
-	gt = xe->gt + gt_id;
+	XE_BUG_ON(gt_id > XE_MAX_TILES_PER_DEVICE);
+	gt = &xe->tiles[gt_id].primary_gt;
 	XE_BUG_ON(gt->info.id != gt_id);
 	XE_BUG_ON(gt->info.type == XE_GT_TYPE_UNINITIALIZED);
 
@@ -65,7 +70,7 @@ static inline struct xe_gt *xe_device_get_gt(struct xe_device *xe, u8 gt_id)
  */
 static inline struct xe_gt *to_gt(struct xe_device *xe)
 {
-	return xe->gt;
+	return &xe_device_get_root_tile(xe)->primary_gt;
 }
 
 static inline bool xe_device_guc_submission_enabled(struct xe_device *xe)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 51c16d207780..396ee281e499 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -35,7 +35,7 @@
 
 #define XE_GT0		0
 #define XE_GT1		1
-#define XE_MAX_GT	(XE_GT1 + 1)
+#define XE_MAX_TILES_PER_DEVICE	(XE_GT1 + 1)
 
 #define XE_MAX_ASID	(BIT(20))
 
@@ -49,6 +49,40 @@
 	 (_xe)->info.step.graphics >= (min_step) &&			\
 	 (_xe)->info.step.graphics < (max_step))
 
+#define tile_to_xe(tile__)								\
+	_Generic(tile__,								\
+		 const struct xe_tile *: (const struct xe_device *)((tile__)->xe),	\
+		 struct xe_tile *: (tile__)->xe)
+
+/**
+ * struct xe_tile - hardware tile structure
+ *
+ * From a driver perspective, a "tile" is effectively a complete GPU, containing
+ * an SGunit, 1-2 GTs, and (for discrete platforms) VRAM.
+ *
+ * Multi-tile platforms effectively bundle multiple GPUs behind a single PCI
+ * device and designate one "root" tile as being responsible for external PCI
+ * communication.  PCI BAR0 exposes the GGTT and MMIO register space for each
+ * tile in a stacked layout, and PCI BAR2 exposes the local memory associated
+ * with each tile similarly.  Device-wide interrupts can be enabled/disabled
+ * at the root tile, and the MSTR_TILE_INTR register will report which tiles
+ * have interrupts that need servicing.
+ */
+struct xe_tile {
+	/** @xe: Backpointer to tile's PCI device */
+	struct xe_device *xe;
+
+	/** @id: ID of the tile */
+	u8 id;
+
+	/**
+	 * @primary_gt: Primary GT
+	 */
+	struct xe_gt primary_gt;
+
+	/* TODO: Add media GT here */
+};
+
 /**
  * struct xe_device - Top level struct of XE device
  */
@@ -256,8 +290,8 @@ struct xe_device {
 	/** @ordered_wq: used to serialize compute mode resume */
 	struct workqueue_struct *ordered_wq;
 
-	/** @gt: graphics tile */
-	struct xe_gt gt[XE_MAX_GT];
+	/** @tiles: device tiles */
+	struct xe_tile tiles[XE_MAX_TILES_PER_DEVICE];
 
 	/**
 	 * @mem_access: keep track of memory access in the device, possibly
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 093d650c35f4..456e3e447a2e 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -77,12 +77,17 @@ enum xe_steering_type {
 };
 
 /**
- * struct xe_gt - Top level struct of a graphics tile
+ * struct xe_gt - A "Graphics Technology" unit of the GPU
  *
- * A graphics tile may be a physical split (duplicate pieces of silicon,
- * different GGTT + VRAM) or a virtual split (shared GGTT + VRAM). Either way
- * this structure encapsulates of everything a GT is (MMIO, VRAM, memory
- * management, microcontrols, and a hardware set of engines).
+ * A GT ("Graphics Technology") is the subset of a GPU primarily responsible
+ * for implementing the graphics, compute, and/or media IP.  It encapsulates
+ * the hardware engines, programmable execution units, and GuC.   Each GT has
+ * its own handling of power management (RC6+forcewake) and multicast register
+ * steering.
+ *
+ * A GPU/tile may have a single GT that supplies all graphics, compute, and
+ * media functionality, or the graphics/compute and media may be split into
+ * separate GTs within a tile.
  */
 struct xe_gt {
 	/** @xe: backpointer to XE device */
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index ef2353eef6fe..9bc5715e9ebe 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -438,6 +438,7 @@ int xe_mmio_ioctl(struct drm_device *dev, void *data,
 		  struct drm_file *file)
 {
 	struct xe_device *xe = to_xe_device(dev);
+	struct xe_gt *gt = xe_device_get_gt(xe, 0);
 	struct drm_xe_mmio *args = data;
 	unsigned int bits_flag, bytes;
 	struct xe_reg reg;
@@ -480,7 +481,7 @@ int xe_mmio_ioctl(struct drm_device *dev, void *data,
 	 */
 	reg = XE_REG(args->addr);
 
-	xe_force_wake_get(gt_to_fw(&xe->gt[0]), XE_FORCEWAKE_ALL);
+	xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
 
 	if (args->flags & DRM_XE_MMIO_WRITE) {
 		switch (bits_flag) {
@@ -489,10 +490,10 @@ int xe_mmio_ioctl(struct drm_device *dev, void *data,
 				ret = -EINVAL;
 				goto exit;
 			}
-			xe_mmio_write32(to_gt(xe), reg, args->value);
+			xe_mmio_write32(gt, reg, args->value);
 			break;
 		case DRM_XE_MMIO_64BIT:
-			xe_mmio_write64(to_gt(xe), reg, args->value);
+			xe_mmio_write64(gt, reg, args->value);
 			break;
 		default:
 			drm_dbg(&xe->drm, "Invalid MMIO bit size");
@@ -507,10 +508,10 @@ int xe_mmio_ioctl(struct drm_device *dev, void *data,
 	if (args->flags & DRM_XE_MMIO_READ) {
 		switch (bits_flag) {
 		case DRM_XE_MMIO_32BIT:
-			args->value = xe_mmio_read32(to_gt(xe), reg);
+			args->value = xe_mmio_read32(gt, reg);
 			break;
 		case DRM_XE_MMIO_64BIT:
-			args->value = xe_mmio_read64(to_gt(xe), reg);
+			args->value = xe_mmio_read64(gt, reg);
 			break;
 		default:
 			drm_dbg(&xe->drm, "Invalid MMIO bit size");
@@ -522,7 +523,7 @@ int xe_mmio_ioctl(struct drm_device *dev, void *data,
 	}
 
 exit:
-	xe_force_wake_put(gt_to_fw(&xe->gt[0]), XE_FORCEWAKE_ALL);
+	xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
 
 	return ret;
 }
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index be860f6d0a4f..87b82b7ae0d8 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -497,6 +497,7 @@ static int xe_info_init(struct xe_device *xe,
 	const struct xe_graphics_desc *graphics_desc = NULL;
 	const struct xe_media_desc *media_desc = NULL;
 	u32 graphics_gmdid_revid = 0, media_gmdid_revid = 0;
+	struct xe_tile *tile;
 	struct xe_gt *gt;
 	u8 id;
 
@@ -559,7 +560,11 @@ static int xe_info_init(struct xe_device *xe,
 	xe->info.tile_count = 1 + graphics_desc->max_remote_tiles;
 
 	for (id = 0; id < xe->info.tile_count; ++id) {
-		gt = xe->gt + id;
+		tile = &xe->tiles[id];
+		tile->xe = xe;
+		tile->id = id;
+
+		gt = &tile->primary_gt;
 		gt->info.id = id;
 		gt->xe = xe;
 
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index dd1335e12d4c..87416b8bb878 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -3389,7 +3389,7 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
 	struct xe_device *xe = vma->vm->xe;
 	struct xe_gt *gt;
 	u32 gt_needs_invalidate = 0;
-	int seqno[XE_MAX_GT];
+	int seqno[XE_MAX_TILES_PER_DEVICE];
 	u8 id;
 	int ret;
 
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index fada7896867f..203ba9d946b8 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -159,7 +159,7 @@ struct xe_vm {
 	struct kref refcount;
 
 	/* engine used for (un)binding vma's */
-	struct xe_engine *eng[XE_MAX_GT];
+	struct xe_engine *eng[XE_MAX_TILES_PER_DEVICE];
 
 	/** Protects @rebind_list and the page-table structures */
 	struct dma_resv resv;
@@ -167,9 +167,9 @@ struct xe_vm {
 	u64 size;
 	struct rb_root vmas;
 
-	struct xe_pt *pt_root[XE_MAX_GT];
-	struct xe_bo *scratch_bo[XE_MAX_GT];
-	struct xe_pt *scratch_pt[XE_MAX_GT][XE_VM_MAX_LEVEL];
+	struct xe_pt *pt_root[XE_MAX_TILES_PER_DEVICE];
+	struct xe_bo *scratch_bo[XE_MAX_TILES_PER_DEVICE];
+	struct xe_pt *scratch_pt[XE_MAX_TILES_PER_DEVICE][XE_VM_MAX_LEVEL];
 
 	/** @flags: flags for this VM, statically setup a creation time */
 #define XE_VM_FLAGS_64K			BIT(0)
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 03/31] drm/xe: Add backpointer from gt to tile
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 01/31] drm/xe/mtl: Disable media GT Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 02/31] drm/xe: Introduce xe_tile Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 04/31] fixup! drm/xe: keep pulling mem_access_get further back Matt Roper
                   ` (30 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Rather than a backpointer to the xe_device, a GT should have a
backpointer to its tile (which can then be used to lookup the device if
necessary).

The gt_to_xe() helper macro (which moves from xe_gt.h to xe_gt_types.h)
can and should still be used to jump directly from an xe_gt to
xe_device.

v2:
 - Fix kunit test build
 - Move a couple changes to the previous patch. (Lucas)

Reviewed-by: Matt Atwood <matthew.s.atwood@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_bo.c            |  2 +-
 drivers/gpu/drm/xe/xe_bb.c                  |  2 +-
 drivers/gpu/drm/xe/xe_ggtt.c                | 12 ++++++------
 drivers/gpu/drm/xe/xe_gt.h                  |  5 -----
 drivers/gpu/drm/xe/xe_gt_printk.h           |  6 +++---
 drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c |  8 ++++----
 drivers/gpu/drm/xe/xe_gt_types.h            | 14 ++++++++++++--
 drivers/gpu/drm/xe/xe_mmio.c                |  6 +++---
 drivers/gpu/drm/xe/xe_mocs.c                | 14 +++++++-------
 drivers/gpu/drm/xe/xe_pci.c                 |  2 +-
 drivers/gpu/drm/xe/xe_pt.c                  |  2 +-
 drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c      |  6 +++---
 12 files changed, 42 insertions(+), 37 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_bo.c b/drivers/gpu/drm/xe/tests/xe_bo.c
index 6075f12a1962..8f3afdc6cca6 100644
--- a/drivers/gpu/drm/xe/tests/xe_bo.c
+++ b/drivers/gpu/drm/xe/tests/xe_bo.c
@@ -90,7 +90,7 @@ static int ccs_test_migrate(struct xe_gt *gt, struct xe_bo *bo,
 	}
 
 	/* Check last CCS value, or at least last value in page. */
-	offset = xe_device_ccs_bytes(gt->xe, bo->size);
+	offset = xe_device_ccs_bytes(gt_to_xe(gt), bo->size);
 	offset = min_t(u32, offset, PAGE_SIZE) / sizeof(u64) - 1;
 	if (cpu_map[offset] != get_val) {
 		KUNIT_FAIL(test,
diff --git a/drivers/gpu/drm/xe/xe_bb.c b/drivers/gpu/drm/xe/xe_bb.c
index 3deb2d55f421..bf7c94b769d7 100644
--- a/drivers/gpu/drm/xe/xe_bb.c
+++ b/drivers/gpu/drm/xe/xe_bb.c
@@ -16,7 +16,7 @@
 
 static int bb_prefetch(struct xe_gt *gt)
 {
-	struct xe_device *xe = gt->xe;
+	struct xe_device *xe = gt_to_xe(gt);
 
 	if (GRAPHICS_VERx100(xe) >= 1250 && !xe_gt_is_media_type(gt))
 		/*
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index f986e8218820..189d377f8690 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -142,14 +142,14 @@ static void xe_ggtt_initial_clear(struct xe_ggtt *ggtt)
 	u64 start, end;
 
 	/* Display may have allocated inside ggtt, so be careful with clearing here */
-	xe_device_mem_access_get(ggtt->gt->xe);
+	xe_device_mem_access_get(gt_to_xe(ggtt->gt));
 	mutex_lock(&ggtt->lock);
 	drm_mm_for_each_hole(hole, &ggtt->mm, start, end)
 		xe_ggtt_clear(ggtt, start, end - start);
 
 	xe_ggtt_invalidate(ggtt->gt);
 	mutex_unlock(&ggtt->lock);
-	xe_device_mem_access_put(ggtt->gt->xe);
+	xe_device_mem_access_put(gt_to_xe(ggtt->gt));
 }
 
 int xe_ggtt_init(struct xe_gt *gt, struct xe_ggtt *ggtt)
@@ -290,14 +290,14 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
 	if (err)
 		return err;
 
-	xe_device_mem_access_get(ggtt->gt->xe);
+	xe_device_mem_access_get(gt_to_xe(ggtt->gt));
 	mutex_lock(&ggtt->lock);
 	err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node, bo->size,
 					  alignment, 0, start, end, 0);
 	if (!err)
 		xe_ggtt_map_bo(ggtt, bo);
 	mutex_unlock(&ggtt->lock);
-	xe_device_mem_access_put(ggtt->gt->xe);
+	xe_device_mem_access_put(gt_to_xe(ggtt->gt));
 
 	return err;
 }
@@ -315,7 +315,7 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
 
 void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct drm_mm_node *node)
 {
-	xe_device_mem_access_get(ggtt->gt->xe);
+	xe_device_mem_access_get(gt_to_xe(ggtt->gt));
 	mutex_lock(&ggtt->lock);
 
 	xe_ggtt_clear(ggtt, node->start, node->size);
@@ -325,7 +325,7 @@ void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct drm_mm_node *node)
 	xe_ggtt_invalidate(ggtt->gt);
 
 	mutex_unlock(&ggtt->lock);
-	xe_device_mem_access_put(ggtt->gt->xe);
+	xe_device_mem_access_put(gt_to_xe(ggtt->gt));
 }
 
 void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
diff --git a/drivers/gpu/drm/xe/xe_gt.h b/drivers/gpu/drm/xe/xe_gt.h
index 086369f7ee6d..f4e98f499b36 100644
--- a/drivers/gpu/drm/xe/xe_gt.h
+++ b/drivers/gpu/drm/xe/xe_gt.h
@@ -49,11 +49,6 @@ static inline bool xe_gt_is_media_type(struct xe_gt *gt)
 	return gt->info.type == XE_GT_TYPE_MEDIA;
 }
 
-#define gt_to_xe(gt__)								\
-	_Generic(gt__,								\
-		 const struct xe_gt *: (const struct xe_device *)((gt__)->xe),	\
-		 struct xe_gt *: (gt__)->xe)
-
 static inline bool xe_gt_is_usm_hwe(struct xe_gt *gt, struct xe_hw_engine *hwe)
 {
 	struct xe_device *xe = gt_to_xe(gt);
diff --git a/drivers/gpu/drm/xe/xe_gt_printk.h b/drivers/gpu/drm/xe/xe_gt_printk.h
index 0b801429cf1a..5991bcadd47e 100644
--- a/drivers/gpu/drm/xe/xe_gt_printk.h
+++ b/drivers/gpu/drm/xe/xe_gt_printk.h
@@ -11,7 +11,7 @@
 #include "xe_device_types.h"
 
 #define xe_gt_printk(_gt, _level, _fmt, ...) \
-	drm_##_level(&(_gt)->xe->drm, "GT%u: " _fmt, (_gt)->info.id, ##__VA_ARGS__)
+	drm_##_level(&gt_to_xe(_gt)->drm, "GT%u: " _fmt, (_gt)->info.id, ##__VA_ARGS__)
 
 #define xe_gt_err(_gt, _fmt, ...) \
 	xe_gt_printk((_gt), err, _fmt, ##__VA_ARGS__)
@@ -32,10 +32,10 @@
 	xe_gt_printk((_gt), err_ratelimited, _fmt, ##__VA_ARGS__)
 
 #define xe_gt_WARN(_gt, _condition, _fmt, ...) \
-	drm_WARN(&(_gt)->xe->drm, _condition, "GT%u: " _fmt, (_gt)->info.id, ##__VA_ARGS__)
+	drm_WARN(&gt_to_xe(_gt)->drm, _condition, "GT%u: " _fmt, (_gt)->info.id, ##__VA_ARGS__)
 
 #define xe_gt_WARN_ONCE(_gt, _condition, _fmt, ...) \
-	drm_WARN_ONCE(&(_gt)->xe->drm, _condition, "GT%u: " _fmt, (_gt)->info.id, ##__VA_ARGS__)
+	drm_WARN_ONCE(&gt_to_xe(_gt)->drm, _condition, "GT%u: " _fmt, (_gt)->info.id, ##__VA_ARGS__)
 
 #define xe_gt_WARN_ON(_gt, _condition) \
 	xe_gt_WARN((_gt), _condition, "%s(%s)", "gt_WARN_ON", __stringify(_condition))
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 44e442bf306c..2fcb477604e2 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -248,9 +248,9 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
 
 	XE_BUG_ON(len > MAX_TLB_INVALIDATION_LEN);
 
-	xe_device_mem_access_get(gt->xe);
+	xe_device_mem_access_get(xe);
 	ret = send_tlb_invalidation(&gt->uc.guc, fence, action, len);
-	xe_device_mem_access_put(gt->xe);
+	xe_device_mem_access_put(xe);
 
 	return ret;
 }
@@ -328,8 +328,8 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
 		TLB_INVALIDATION_SEQNO_MAX;
 	if (!expected_seqno)
 		expected_seqno = 1;
-	if (drm_WARN_ON(&gt->xe->drm, expected_seqno != msg[0])) {
-		drm_err(&gt->xe->drm, "TLB expected_seqno(%d) != msg(%u)\n",
+	if (drm_WARN_ON(&gt_to_xe(gt)->drm, expected_seqno != msg[0])) {
+		drm_err(&gt_to_xe(gt)->drm, "TLB expected_seqno(%d) != msg(%u)\n",
 			expected_seqno, msg[0]);
 	}
 
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 456e3e447a2e..11605a99ad66 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -76,6 +76,16 @@ enum xe_steering_type {
 	NUM_STEERING_TYPES
 };
 
+#define gt_to_tile(gt__)							\
+	_Generic(gt__,								\
+		 const struct xe_gt *: (const struct xe_tile *)((gt__)->tile),	\
+		 struct xe_gt *: (gt__)->tile)
+
+#define gt_to_xe(gt__)										\
+	_Generic(gt__,										\
+		 const struct xe_gt *: (const struct xe_device *)(gt_to_tile(gt__)->xe),	\
+		 struct xe_gt *: gt_to_tile(gt__)->xe)
+
 /**
  * struct xe_gt - A "Graphics Technology" unit of the GPU
  *
@@ -90,8 +100,8 @@ enum xe_steering_type {
  * separate GTs within a tile.
  */
 struct xe_gt {
-	/** @xe: backpointer to XE device */
-	struct xe_device *xe;
+	/** @tile: Backpointer to GT's tile */
+	struct xe_tile *tile;
 
 	/** @info: GT info */
 	struct {
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index 9bc5715e9ebe..79f902d2faea 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -217,8 +217,8 @@ int xe_mmio_tile_vram_size(struct xe_gt *gt, u64 *vram_size, u64 *tile_size, u64
 		return err;
 
 	/* actual size */
-	if (unlikely(gt->xe->info.platform == XE_DG1)) {
-		*tile_size = pci_resource_len(to_pci_dev(gt->xe->drm.dev), GEN12_LMEM_BAR);
+	if (unlikely(gt_to_xe(gt)->info.platform == XE_DG1)) {
+		*tile_size = pci_resource_len(to_pci_dev(gt_to_xe(gt)->drm.dev), GEN12_LMEM_BAR);
 		*tile_offset = 0;
 	} else {
 		reg = xe_gt_mcr_unicast_read_any(gt, XEHP_TILE_ADDR_RANGE(gt->info.id));
@@ -227,7 +227,7 @@ int xe_mmio_tile_vram_size(struct xe_gt *gt, u64 *vram_size, u64 *tile_size, u64
 	}
 
 	/* minus device usage */
-	if (gt->xe->info.has_flat_ccs) {
+	if (gt_to_xe(gt)->info.has_flat_ccs) {
 		reg = xe_gt_mcr_unicast_read_any(gt, XEHP_FLAT_CCS_BASE_ADDR);
 		offset = (u64)REG_FIELD_GET(GENMASK(31, 8), reg) * SZ_64K;
 	} else {
diff --git a/drivers/gpu/drm/xe/xe_mocs.c b/drivers/gpu/drm/xe/xe_mocs.c
index c7a9e733ef3b..86277ecb749b 100644
--- a/drivers/gpu/drm/xe/xe_mocs.c
+++ b/drivers/gpu/drm/xe/xe_mocs.c
@@ -472,7 +472,7 @@ static void __init_mocs_table(struct xe_gt *gt,
 	unsigned int i;
 	u32 mocs;
 
-	mocs_dbg(&gt->xe->drm, "entries:%d\n", info->n_entries);
+	mocs_dbg(&gt_to_xe(gt)->drm, "entries:%d\n", info->n_entries);
 	drm_WARN_ONCE(&xe->drm, !info->unused_entries_index,
 		      "Unused entries index should have been defined\n");
 	for (i = 0;
@@ -480,7 +480,7 @@ static void __init_mocs_table(struct xe_gt *gt,
 	     i++) {
 		struct xe_reg reg = XE_REG(addr + i * 4);
 
-		mocs_dbg(&gt->xe->drm, "%d 0x%x 0x%x\n", i, reg.addr, mocs);
+		mocs_dbg(&gt_to_xe(gt)->drm, "%d 0x%x 0x%x\n", i, reg.addr, mocs);
 		xe_mmio_write32(gt, reg, mocs);
 	}
 }
@@ -509,13 +509,13 @@ static void init_l3cc_table(struct xe_gt *gt,
 	unsigned int i;
 	u32 l3cc;
 
-	mocs_dbg(&gt->xe->drm, "entries:%d\n", info->n_entries);
+	mocs_dbg(&gt_to_xe(gt)->drm, "entries:%d\n", info->n_entries);
 	for (i = 0;
 	     i < (info->n_entries + 1) / 2 ?
 	     (l3cc = l3cc_combine(get_entry_l3cc(info, 2 * i),
 				  get_entry_l3cc(info, 2 * i + 1))), 1 : 0;
 	     i++) {
-		mocs_dbg(&gt->xe->drm, "%d 0x%x 0x%x\n", i, LNCFCMOCS(i).addr,
+		mocs_dbg(&gt_to_xe(gt)->drm, "%d 0x%x 0x%x\n", i, LNCFCMOCS(i).addr,
 			 l3cc);
 		xe_mmio_write32(gt, LNCFCMOCS(i), l3cc);
 	}
@@ -525,7 +525,7 @@ void xe_mocs_init_early(struct xe_gt *gt)
 {
 	struct xe_mocs_info table;
 
-	get_mocs_settings(gt->xe, &table);
+	get_mocs_settings(gt_to_xe(gt), &table);
 	gt->mocs.uc_index = table.uc_index;
 	gt->mocs.wb_index = table.wb_index;
 }
@@ -538,8 +538,8 @@ void xe_mocs_init(struct xe_gt *gt)
 	/*
 	 * LLC and eDRAM control values are not applicable to dgfx
 	 */
-	flags = get_mocs_settings(gt->xe, &table);
-	mocs_dbg(&gt->xe->drm, "flag:0x%x\n", flags);
+	flags = get_mocs_settings(gt_to_xe(gt), &table);
+	mocs_dbg(&gt_to_xe(gt)->drm, "flag:0x%x\n", flags);
 
 	if (flags & HAS_GLOBAL_MOCS)
 		__init_mocs_table(gt, &table, GLOBAL_MOCS(0).addr);
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 87b82b7ae0d8..551ba20083b9 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -566,7 +566,7 @@ static int xe_info_init(struct xe_device *xe,
 
 		gt = &tile->primary_gt;
 		gt->info.id = id;
-		gt->xe = xe;
+		gt->tile = tile;
 
 		if (id == 0) {
 			gt->info.type = XE_GT_TYPE_MAIN;
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index 2a5481111a5f..e2cd1946af5a 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -696,7 +696,7 @@ xe_pt_stage_bind_entry(struct xe_ptw *parent, pgoff_t offset,
 		 * TODO: Suballocate the pt bo to avoid wasting a lot of
 		 * memory.
 		 */
-		if (GRAPHICS_VERx100(xe_walk->gt->xe) >= 1250 && level == 1 &&
+		if (GRAPHICS_VERx100(gt_to_xe(xe_walk->gt)) >= 1250 && level == 1 &&
 		    covers && xe_pt_scan_64K(addr, next, xe_walk)) {
 			walk->shifts = xe_compact_pt_shifts;
 			flags |= XE_PDE_64K;
diff --git a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
index d49b2cfeba92..49470f0722bd 100644
--- a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
@@ -53,20 +53,20 @@ bool xe_ttm_stolen_cpu_access_needs_ggtt(struct xe_device *xe)
 
 static s64 detect_bar2_dgfx(struct xe_gt *gt, struct xe_ttm_stolen_mgr *mgr)
 {
-	struct pci_dev *pdev = to_pci_dev(gt->xe->drm.dev);
+	struct pci_dev *pdev = to_pci_dev(gt_to_xe(gt)->drm.dev);
 	u64 stolen_size;
 	u64 tile_offset;
 	u64 tile_size;
 	u64 vram_size;
 
 	if (xe_mmio_tile_vram_size(gt, &vram_size, &tile_size, &tile_offset)) {
-		drm_err(&gt->xe->drm, "Querying total vram size failed\n");
+		drm_err(&gt_to_xe(gt)->drm, "Querying total vram size failed\n");
 		return 0;
 	}
 
 	/* Use DSM base address instead for stolen memory */
 	mgr->stolen_base = (xe_mmio_read64(gt, DSMBASE) & BDSM_MASK) - tile_offset;
-	if (drm_WARN_ON(&gt->xe->drm, tile_size < mgr->stolen_base))
+	if (drm_WARN_ON(&gt_to_xe(gt)->drm, tile_size < mgr->stolen_base))
 		return 0;
 
 	stolen_size = tile_size - mgr->stolen_base;
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 04/31] fixup! drm/xe: keep pulling mem_access_get further back
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (2 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 03/31] drm/xe: Add backpointer from gt to tile Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 05/31] drm/xe: Add for_each_tile iterator Matt Roper
                   ` (29 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: matthew.d.roper

The commit being fixed here probably should have split its own
display-specific changes out into a fixup! patch too.
---
 drivers/gpu/drm/xe/display/xe_fb_pin.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index d140eee6473d..747fbb06cd83 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -130,7 +130,7 @@ static int __xe_pin_fb_vma_ggtt(struct intel_framebuffer *fb,
 	/* TODO: Consider sharing framebuffer mapping?
 	 * embed i915_vma inside intel_framebuffer
 	 */
-	xe_device_mem_access_get(ggtt->gt->xe);
+	xe_device_mem_access_get(gt_to_xe(ggtt->gt));
 	ret = mutex_lock_interruptible(&ggtt->lock);
 	if (ret)
 		goto out;
@@ -178,7 +178,7 @@ static int __xe_pin_fb_vma_ggtt(struct intel_framebuffer *fb,
 out_unlock:
 	mutex_unlock(&ggtt->lock);
 out:
-	xe_device_mem_access_put(ggtt->gt->xe);
+	xe_device_mem_access_put(gt_to_xe(ggtt->gt));
 	return ret;
 }
 
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 05/31] drm/xe: Add for_each_tile iterator
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (3 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 04/31] fixup! drm/xe: keep pulling mem_access_get further back Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-31 14:35   ` Gustavo Sousa
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 06/31] drm/xe: Move register MMIO into xe_tile Matt Roper
                   ` (28 subsequent siblings)
  33 siblings, 1 reply; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

As we start splitting tile handling out from GT handling, we'll need to
be able to iterate over tiles separately from GTs.  This iterator will
be used in upcoming patches.

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
 drivers/gpu/drm/xe/xe_device.h | 4 ++++
 drivers/gpu/drm/xe/xe_pci.c    | 3 +--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index f7acaf51a1fc..745dbb16d417 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -83,6 +83,10 @@ static inline void xe_device_guc_submission_disable(struct xe_device *xe)
 	xe->info.enable_guc = false;
 }
 
+#define for_each_tile(tile__, xe__, id__) \
+	for ((id__) = 0; (id__) < (xe__)->info.tile_count; (id__++)) \
+		for_each_if ((tile__) = &(xe__)->tiles[(id__)])
+
 #define for_each_gt(gt__, xe__, id__) \
 	for ((id__) = 0; (id__) < (xe__)->info.tile_count; (id__++)) \
 		for_each_if ((gt__) = xe_device_get_gt((xe__), (id__)))
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 551ba20083b9..91d5dc59aa7e 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -559,8 +559,7 @@ static int xe_info_init(struct xe_device *xe,
 	 */
 	xe->info.tile_count = 1 + graphics_desc->max_remote_tiles;
 
-	for (id = 0; id < xe->info.tile_count; ++id) {
-		tile = &xe->tiles[id];
+	for_each_tile(tile, xe, id) {
 		tile->xe = xe;
 		tile->id = id;
 
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 06/31] drm/xe: Move register MMIO into xe_tile
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (4 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 05/31] drm/xe: Add for_each_tile iterator Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 07/31] fixup! drm/xe/display: Implement display support Matt Roper
                   ` (27 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Each tile has its own register region in the BAR, containing instances
of all registers for the platform.  In contrast, the multiple GTs within
a tile share the same MMIO space; there's just a small subset of
registers (the GSI registers) which have multiple copies at different
offsets (0x0 for primary GT, 0x380000 for media GT).  Move the register
MMIO region size/pointers to the tile structure, leaving just the GSI
offset information in the GT structure.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_device_types.h | 16 ++++++++++++++++
 drivers/gpu/drm/xe/xe_ggtt.c         |  3 ++-
 drivers/gpu/drm/xe/xe_gt_types.h     |  9 +++------
 drivers/gpu/drm/xe/xe_mmio.c         | 26 ++++++++++++++------------
 drivers/gpu/drm/xe/xe_mmio.h         | 21 ++++++++++++++++-----
 5 files changed, 51 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 396ee281e499..619f40a7e275 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -81,6 +81,22 @@ struct xe_tile {
 	struct xe_gt primary_gt;
 
 	/* TODO: Add media GT here */
+
+	/**
+	 * @mmio: MMIO info for a tile.
+	 *
+	 * Each tile has its own 16MB space in BAR0, laid out as:
+	 * * 0-4MB: registers
+	 * * 4MB-8MB: reserved
+	 * * 8MB-16MB: global GTT
+	 */
+	struct {
+		/** @size: size of tile's MMIO space */
+		size_t size;
+
+		/** @regs: pointer to tile's MMIO space (starting with registers) */
+		void *regs;
+	} mmio;
 };
 
 /**
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 189d377f8690..3333b2545740 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -93,6 +93,7 @@ static void ggtt_fini_noalloc(struct drm_device *drm, void *arg)
 int xe_ggtt_init_noalloc(struct xe_gt *gt, struct xe_ggtt *ggtt)
 {
 	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
 	unsigned int gsm_size;
 
@@ -106,7 +107,7 @@ int xe_ggtt_init_noalloc(struct xe_gt *gt, struct xe_ggtt *ggtt)
 		return -ENOMEM;
 	}
 
-	ggtt->gsm = gt->mmio.regs + SZ_8M;
+	ggtt->gsm = tile->mmio.regs + SZ_8M;
 	ggtt->size = (gsm_size / 8) * (u64) XE_PAGE_SIZE;
 
 	if (IS_DGFX(xe) && xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K)
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 11605a99ad66..81e6ab0c77e0 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -124,14 +124,11 @@ struct xe_gt {
 	} info;
 
 	/**
-	 * @mmio: mmio info for GT, can be subset of the global device mmio
-	 * space
+	 * @mmio: mmio info for GT.  All GTs within a tile share the same
+	 * register space, but have their own copy of GSI registers at a
+	 * specific offset, as well as their own forcewake handling.
 	 */
 	struct {
-		/** @size: size of MMIO space on GT */
-		size_t size;
-		/** @regs: pointer to MMIO space on GT */
-		void *regs;
 		/** @fw: force wake for GT */
 		struct xe_force_wake fw;
 		/**
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index 79f902d2faea..b27103080ca9 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -346,6 +346,7 @@ static void xe_mmio_probe_tiles(struct xe_device *xe)
 
 	if (xe->info.tile_count > 1) {
 		const int mmio_bar = 0;
+		struct xe_tile *tile;
 		size_t size;
 		void *regs;
 
@@ -359,11 +360,11 @@ static void xe_mmio_probe_tiles(struct xe_device *xe)
 		size = xe->mmio.size / adj_tile_count;
 		regs = xe->mmio.regs;
 
-		for_each_gt(gt, xe, id) {
-			if (id && !xe_gt_is_media_type(gt))
-				regs += size;
-			gt->mmio.size = size;
-			gt->mmio.regs = regs;
+		for_each_tile(tile, xe, id) {
+			tile->mmio.size = size;
+			tile->mmio.regs = regs;
+
+			regs += size;
 		}
 	}
 }
@@ -379,15 +380,16 @@ static void mmio_fini(struct drm_device *drm, void *arg)
 
 int xe_mmio_init(struct xe_device *xe)
 {
+	struct xe_tile *root_tile = xe_device_get_root_tile(xe);
 	struct xe_gt *gt = xe_device_get_gt(xe, 0);
 	const int mmio_bar = 0;
 	int err;
 
 	/*
-	 * Map the entire BAR, which includes registers (0-4MB), reserved space
-	 * (4MB-8MB), and GGTT (8MB-16MB). Other parts of the driver (GTs,
-	 * GGTTs) will derive the pointers they need from the mapping in the
-	 * device structure.
+	 * Map the first 16MB of th BAR, which includes the registers (0-4MB),
+	 * reserved space (4MB-8MB), and GGTT (8MB-16MB) for a single tile.
+	 * This will get remapped later if we determine that we're running
+	 * on a multi-tile system.
 	 */
 	xe->mmio.size = SZ_16M;
 	xe->mmio.regs = pci_iomap(to_pci_dev(xe->drm.dev), mmio_bar,
@@ -401,9 +403,9 @@ int xe_mmio_init(struct xe_device *xe)
 	if (err)
 		return err;
 
-	/* 1 GT for now, 1 to 1 mapping, may change on multi-GT devices */
-	gt->mmio.size = xe->mmio.size;
-	gt->mmio.regs = xe->mmio.regs;
+	/* Setup first tile; other tiles (if present) will be setup later. */
+	root_tile->mmio.size = xe->mmio.size;
+	root_tile->mmio.regs = xe->mmio.regs;
 
 	/*
 	 * The boot firmware initializes local memory and assesses its health.
diff --git a/drivers/gpu/drm/xe/xe_mmio.h b/drivers/gpu/drm/xe/xe_mmio.h
index da91729a3854..0ba7aa790f0b 100644
--- a/drivers/gpu/drm/xe/xe_mmio.h
+++ b/drivers/gpu/drm/xe/xe_mmio.h
@@ -10,6 +10,7 @@
 #include <linux/io-64-nonatomic-lo-hi.h>
 
 #include "regs/xe_reg_defs.h"
+#include "xe_device_types.h"
 #include "xe_gt_types.h"
 
 struct drm_device;
@@ -22,27 +23,33 @@ int xe_mmio_init(struct xe_device *xe);
 
 static inline u8 xe_mmio_read8(struct xe_gt *gt, struct xe_reg reg)
 {
+	struct xe_tile *tile = gt_to_tile(gt);
+
 	if (reg.addr < gt->mmio.adj_limit)
 		reg.addr += gt->mmio.adj_offset;
 
-	return readb(gt->mmio.regs + reg.addr);
+	return readb(tile->mmio.regs + reg.addr);
 }
 
 static inline void xe_mmio_write32(struct xe_gt *gt,
 				   struct xe_reg reg, u32 val)
 {
+	struct xe_tile *tile = gt_to_tile(gt);
+
 	if (reg.addr < gt->mmio.adj_limit)
 		reg.addr += gt->mmio.adj_offset;
 
-	writel(val, gt->mmio.regs + reg.addr);
+	writel(val, tile->mmio.regs + reg.addr);
 }
 
 static inline u32 xe_mmio_read32(struct xe_gt *gt, struct xe_reg reg)
 {
+	struct xe_tile *tile = gt_to_tile(gt);
+
 	if (reg.addr < gt->mmio.adj_limit)
 		reg.addr += gt->mmio.adj_offset;
 
-	return readl(gt->mmio.regs + reg.addr);
+	return readl(tile->mmio.regs + reg.addr);
 }
 
 static inline u32 xe_mmio_rmw32(struct xe_gt *gt, struct xe_reg reg, u32 clr,
@@ -60,18 +67,22 @@ static inline u32 xe_mmio_rmw32(struct xe_gt *gt, struct xe_reg reg, u32 clr,
 static inline void xe_mmio_write64(struct xe_gt *gt,
 				   struct xe_reg reg, u64 val)
 {
+	struct xe_tile *tile = gt_to_tile(gt);
+
 	if (reg.addr < gt->mmio.adj_limit)
 		reg.addr += gt->mmio.adj_offset;
 
-	writeq(val, gt->mmio.regs + reg.addr);
+	writeq(val, tile->mmio.regs + reg.addr);
 }
 
 static inline u64 xe_mmio_read64(struct xe_gt *gt, struct xe_reg reg)
 {
+	struct xe_tile *tile = gt_to_tile(gt);
+
 	if (reg.addr < gt->mmio.adj_limit)
 		reg.addr += gt->mmio.adj_offset;
 
-	return readq(gt->mmio.regs + reg.addr);
+	return readq(tile->mmio.regs + reg.addr);
 }
 
 static inline int xe_mmio_write32_and_verify(struct xe_gt *gt,
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 07/31] fixup! drm/xe/display: Implement display support
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (5 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 06/31] drm/xe: Move register MMIO into xe_tile Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 08/31] drm/xe: Move GGTT from GT to tile Matt Roper
                   ` (26 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/display/ext/i915_irq.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/display/ext/i915_irq.c b/drivers/gpu/drm/xe/display/ext/i915_irq.c
index a0f22bd52549..6235ff9dec36 100644
--- a/drivers/gpu/drm/xe/display/ext/i915_irq.c
+++ b/drivers/gpu/drm/xe/display/ext/i915_irq.c
@@ -670,7 +670,7 @@ gen8_de_irq_handler(struct drm_i915_private *dev_priv, u32 master_ctl)
 
 void gen11_display_irq_handler(struct drm_i915_private *i915)
 {
-	void __iomem * const regs = to_gt(i915)->mmio.regs;
+	void __iomem * const regs = xe_device_get_root_tile(i915)->mmio.regs;
 	const u32 disp_ctl = raw_reg_read(regs, GEN11_DISPLAY_INT_CTL);
 
 	/*
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 08/31] drm/xe: Move GGTT from GT to tile
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (6 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 07/31] fixup! drm/xe/display: Implement display support Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 09/31] fixup! drm/xe/display: Implement display support Matt Roper
                   ` (25 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

The GGTT exists at the tile level.  When a tile contains multiple GTs,
they share the same GGTT.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_bo.c           |  6 ++--
 drivers/gpu/drm/xe/xe_bo_evict.c     |  8 +++--
 drivers/gpu/drm/xe/xe_device_types.h |  8 +++++
 drivers/gpu/drm/xe/xe_ggtt.c         | 42 +++++++++++-----------
 drivers/gpu/drm/xe/xe_ggtt.h         |  6 ++--
 drivers/gpu/drm/xe/xe_ggtt_types.h   |  2 +-
 drivers/gpu/drm/xe/xe_gt.c           | 10 +-----
 drivers/gpu/drm/xe/xe_gt_debugfs.c   |  2 +-
 drivers/gpu/drm/xe/xe_gt_types.h     |  3 --
 drivers/gpu/drm/xe/xe_tile.c         | 52 ++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_tile.h         | 14 ++++++++
 11 files changed, 110 insertions(+), 43 deletions(-)
 create mode 100644 drivers/gpu/drm/xe/xe_tile.c
 create mode 100644 drivers/gpu/drm/xe/xe_tile.h

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 94f3a8ce4b69..09a9c121a84d 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -964,7 +964,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
 	WARN_ON(!list_empty(&bo->vmas));
 
 	if (bo->ggtt_node.size)
-		xe_ggtt_remove_bo(bo->gt->mem.ggtt, bo);
+		xe_ggtt_remove_bo(gt_to_tile(bo->gt)->mem.ggtt, bo);
 
 	if (bo->vm && xe_bo_is_user(bo))
 		xe_vm_put(bo->vm);
@@ -1241,10 +1241,10 @@ xe_bo_create_locked_range(struct xe_device *xe,
 		XE_BUG_ON(!gt);
 
 		if (flags & XE_BO_FIXED_PLACEMENT_BIT) {
-			err = xe_ggtt_insert_bo_at(gt->mem.ggtt, bo,
+			err = xe_ggtt_insert_bo_at(gt_to_tile(gt)->mem.ggtt, bo,
 						   start + bo->size, U64_MAX);
 		} else {
-			err = xe_ggtt_insert_bo(gt->mem.ggtt, bo);
+			err = xe_ggtt_insert_bo(gt_to_tile(gt)->mem.ggtt, bo);
 		}
 		if (err)
 			goto err_unlock_put_bo;
diff --git a/drivers/gpu/drm/xe/xe_bo_evict.c b/drivers/gpu/drm/xe/xe_bo_evict.c
index 6642c5f52009..a72963c54bf3 100644
--- a/drivers/gpu/drm/xe/xe_bo_evict.c
+++ b/drivers/gpu/drm/xe/xe_bo_evict.c
@@ -149,9 +149,11 @@ int xe_bo_restore_kernel(struct xe_device *xe)
 		}
 
 		if (bo->flags & XE_BO_CREATE_GGTT_BIT) {
-			mutex_lock(&bo->gt->mem.ggtt->lock);
-			xe_ggtt_map_bo(bo->gt->mem.ggtt, bo);
-			mutex_unlock(&bo->gt->mem.ggtt->lock);
+			struct xe_tile *tile = gt_to_tile(bo->gt);
+
+			mutex_lock(&tile->mem.ggtt->lock);
+			xe_ggtt_map_bo(tile->mem.ggtt, bo);
+			mutex_unlock(&tile->mem.ggtt->lock);
 		}
 
 		/*
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 619f40a7e275..d7b809253eb9 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -23,6 +23,8 @@
 #include "intel_display_core.h"
 #endif
 
+struct xe_ggtt;
+
 #define XE_BO_INVALID_OFFSET	LONG_MAX
 
 #define GRAPHICS_VER(xe) ((xe)->info.graphics_verx100 / 100)
@@ -97,6 +99,12 @@ struct xe_tile {
 		/** @regs: pointer to tile's MMIO space (starting with registers) */
 		void *regs;
 	} mmio;
+
+	/** @mem: memory management info for tile */
+	struct {
+		/** @ggtt: Global graphics translation table */
+		struct xe_ggtt *ggtt;
+	} mem;
 };
 
 /**
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 3333b2545740..eae20b50497e 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -90,24 +90,19 @@ static void ggtt_fini_noalloc(struct drm_device *drm, void *arg)
 	xe_bo_unpin_map_no_vm(ggtt->scratch);
 }
 
-int xe_ggtt_init_noalloc(struct xe_gt *gt, struct xe_ggtt *ggtt)
+int xe_ggtt_init_noalloc(struct xe_ggtt *ggtt)
 {
-	struct xe_device *xe = gt_to_xe(gt);
-	struct xe_tile *tile = gt_to_tile(gt);
+	struct xe_device *xe = tile_to_xe(ggtt->tile);
 	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
 	unsigned int gsm_size;
 
-	XE_BUG_ON(xe_gt_is_media_type(gt));
-
-	ggtt->gt = gt;
-
 	gsm_size = probe_gsm_size(pdev);
 	if (gsm_size == 0) {
 		drm_err(&xe->drm, "Hardware reported no preallocated GSM\n");
 		return -ENOMEM;
 	}
 
-	ggtt->gsm = tile->mmio.regs + SZ_8M;
+	ggtt->gsm = ggtt->tile->mmio.regs + SZ_8M;
 	ggtt->size = (gsm_size / 8) * (u64) XE_PAGE_SIZE;
 
 	if (IS_DGFX(xe) && xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K)
@@ -143,19 +138,20 @@ static void xe_ggtt_initial_clear(struct xe_ggtt *ggtt)
 	u64 start, end;
 
 	/* Display may have allocated inside ggtt, so be careful with clearing here */
-	xe_device_mem_access_get(gt_to_xe(ggtt->gt));
+	xe_device_mem_access_get(tile_to_xe(ggtt->tile));
 	mutex_lock(&ggtt->lock);
 	drm_mm_for_each_hole(hole, &ggtt->mm, start, end)
 		xe_ggtt_clear(ggtt, start, end - start);
 
-	xe_ggtt_invalidate(ggtt->gt);
+	xe_ggtt_invalidate(ggtt);
 	mutex_unlock(&ggtt->lock);
-	xe_device_mem_access_put(gt_to_xe(ggtt->gt));
+	xe_device_mem_access_put(tile_to_xe(ggtt->tile));
 }
 
-int xe_ggtt_init(struct xe_gt *gt, struct xe_ggtt *ggtt)
+int xe_ggtt_init(struct xe_ggtt *ggtt)
 {
-	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_device *xe = tile_to_xe(ggtt->tile);
+	struct xe_gt *gt = &ggtt->tile->primary_gt;
 	unsigned int flags;
 	int err;
 
@@ -195,8 +191,14 @@ int xe_ggtt_init(struct xe_gt *gt, struct xe_ggtt *ggtt)
 #define PVC_GUC_TLB_INV_DESC1			XE_REG(0xcf80)
 #define   PVC_GUC_TLB_INV_DESC1_INVALIDATE	REG_BIT(6)
 
-void xe_ggtt_invalidate(struct xe_gt *gt)
+void xe_ggtt_invalidate(struct xe_ggtt *ggtt)
 {
+	/*
+	 * TODO: Loop over each GT in tile once media GT support is
+	 * re-added
+	 */
+	struct xe_gt *gt = &ggtt->tile->primary_gt;
+
 	/* TODO: vfunc for GuC vs. non-GuC */
 
 	if (gt->uc.guc.submission_state.enabled) {
@@ -269,7 +271,7 @@ void xe_ggtt_map_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
 		xe_ggtt_set_pte(ggtt, start + offset, pte);
 	}
 
-	xe_ggtt_invalidate(ggtt->gt);
+	xe_ggtt_invalidate(ggtt);
 }
 
 static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
@@ -291,14 +293,14 @@ static int __xe_ggtt_insert_bo_at(struct xe_ggtt *ggtt, struct xe_bo *bo,
 	if (err)
 		return err;
 
-	xe_device_mem_access_get(gt_to_xe(ggtt->gt));
+	xe_device_mem_access_get(tile_to_xe(ggtt->tile));
 	mutex_lock(&ggtt->lock);
 	err = drm_mm_insert_node_in_range(&ggtt->mm, &bo->ggtt_node, bo->size,
 					  alignment, 0, start, end, 0);
 	if (!err)
 		xe_ggtt_map_bo(ggtt, bo);
 	mutex_unlock(&ggtt->lock);
-	xe_device_mem_access_put(gt_to_xe(ggtt->gt));
+	xe_device_mem_access_put(tile_to_xe(ggtt->tile));
 
 	return err;
 }
@@ -316,17 +318,17 @@ int xe_ggtt_insert_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
 
 void xe_ggtt_remove_node(struct xe_ggtt *ggtt, struct drm_mm_node *node)
 {
-	xe_device_mem_access_get(gt_to_xe(ggtt->gt));
+	xe_device_mem_access_get(tile_to_xe(ggtt->tile));
 	mutex_lock(&ggtt->lock);
 
 	xe_ggtt_clear(ggtt, node->start, node->size);
 	drm_mm_remove_node(node);
 	node->size = 0;
 
-	xe_ggtt_invalidate(ggtt->gt);
+	xe_ggtt_invalidate(ggtt);
 
 	mutex_unlock(&ggtt->lock);
-	xe_device_mem_access_put(gt_to_xe(ggtt->gt));
+	xe_device_mem_access_put(tile_to_xe(ggtt->tile));
 }
 
 void xe_ggtt_remove_bo(struct xe_ggtt *ggtt, struct xe_bo *bo)
diff --git a/drivers/gpu/drm/xe/xe_ggtt.h b/drivers/gpu/drm/xe/xe_ggtt.h
index 333947100504..205a6d058bbd 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.h
+++ b/drivers/gpu/drm/xe/xe_ggtt.h
@@ -12,9 +12,9 @@ struct drm_printer;
 
 u64 xe_ggtt_pte_encode(struct xe_bo *bo, u64 bo_offset);
 void xe_ggtt_set_pte(struct xe_ggtt *ggtt, u64 addr, u64 pte);
-void xe_ggtt_invalidate(struct xe_gt *gt);
-int xe_ggtt_init_noalloc(struct xe_gt *gt, struct xe_ggtt *ggtt);
-int xe_ggtt_init(struct xe_gt *gt, struct xe_ggtt *ggtt);
+void xe_ggtt_invalidate(struct xe_ggtt *ggtt);
+int xe_ggtt_init_noalloc(struct xe_ggtt *ggtt);
+int xe_ggtt_init(struct xe_ggtt *ggtt);
 void xe_ggtt_printk(struct xe_ggtt *ggtt, const char *prefix);
 
 int xe_ggtt_insert_special_node(struct xe_ggtt *ggtt, struct drm_mm_node *node,
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index ea70aaef4b31..d34b3e733945 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -12,7 +12,7 @@ struct xe_bo;
 struct xe_gt;
 
 struct xe_ggtt {
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 
 	u64 size;
 
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index 18eda5b1377f..0f07f810bb1f 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -67,11 +67,6 @@ int xe_gt_alloc(struct xe_device *xe, struct xe_gt *gt)
 	XE_BUG_ON(gt->info.type == XE_GT_TYPE_UNINITIALIZED);
 
 	if (!xe_gt_is_media_type(gt)) {
-		gt->mem.ggtt = drmm_kzalloc(drm, sizeof(*gt->mem.ggtt),
-					    GFP_KERNEL);
-		if (!gt->mem.ggtt)
-			return -ENOMEM;
-
 		gt->mem.vram_mgr = drmm_kzalloc(drm, sizeof(*gt->mem.vram_mgr),
 						GFP_KERNEL);
 		if (!gt->mem.vram_mgr)
@@ -80,7 +75,6 @@ int xe_gt_alloc(struct xe_device *xe, struct xe_gt *gt)
 	} else {
 		struct xe_gt *full_gt = xe_find_full_gt(gt);
 
-		gt->mem.ggtt = full_gt->mem.ggtt;
 		gt->mem.vram_mgr = full_gt->mem.vram_mgr;
 	}
 
@@ -354,8 +348,6 @@ int xe_gt_init_noalloc(struct xe_gt *gt)
 	if (err)
 		goto err_force_wake;
 
-	err = xe_ggtt_init_noalloc(gt, gt->mem.ggtt);
-
 err_force_wake:
 	err2 = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
 	XE_WARN_ON(err2);
@@ -376,7 +368,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
 	xe_pat_init(gt);
 
 	if (!xe_gt_is_media_type(gt)) {
-		err = xe_ggtt_init(gt, gt->mem.ggtt);
+		err = xe_ggtt_init(gt_to_tile(gt)->mem.ggtt);
 		if (err)
 			goto err_force_wake;
 	}
diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
index 339ecd5fad9b..1114254bc519 100644
--- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
@@ -98,7 +98,7 @@ static int ggtt(struct seq_file *m, void *data)
 	struct xe_gt *gt = node_to_gt(m->private);
 	struct drm_printer p = drm_seq_file_printer(m);
 
-	return xe_ggtt_dump(gt->mem.ggtt, &p);
+	return xe_ggtt_dump(gt_to_tile(gt)->mem.ggtt, &p);
 }
 
 static int register_save_restore(struct seq_file *m, void *data)
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 81e6ab0c77e0..c06a0b27d6fc 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -14,7 +14,6 @@
 #include "xe_uc_types.h"
 
 struct xe_engine_ops;
-struct xe_ggtt;
 struct xe_migrate;
 struct xe_ring_ops;
 struct xe_ttm_gtt_mgr;
@@ -176,8 +175,6 @@ struct xe_gt {
 		} vram;
 		/** @vram_mgr: VRAM TTM manager */
 		struct xe_ttm_vram_mgr *vram_mgr;
-		/** @ggtt: Global graphics translation table */
-		struct xe_ggtt *ggtt;
 	} mem;
 
 	/** @reset: state for GT resets */
diff --git a/drivers/gpu/drm/xe/xe_tile.c b/drivers/gpu/drm/xe/xe_tile.c
new file mode 100644
index 000000000000..7ef594f301ca
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_tile.c
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include <drm/drm_managed.h>
+
+#include "xe_device.h"
+#include "xe_ggtt.h"
+#include "xe_tile.h"
+#include "xe_ttm_vram_mgr.h"
+
+/**
+ * xe_tile_alloc - Perform per-tile memory allocation
+ * @tile: Tile to perform allocations for
+ *
+ * Allocates various per-tile data structures using DRM-managed allocations.
+ * Does not touch the hardware.
+ *
+ * Returns -ENOMEM if allocations fail, otherwise 0.
+ */
+int xe_tile_alloc(struct xe_tile *tile)
+{
+	struct drm_device *drm = &tile_to_xe(tile)->drm;
+
+	tile->mem.ggtt = drmm_kzalloc(drm, sizeof(*tile->mem.ggtt),
+				      GFP_KERNEL);
+	if (!tile->mem.ggtt)
+		return -ENOMEM;
+	tile->mem.ggtt->tile = tile;
+
+	return 0;
+}
+
+/**
+ * xe_tile_init_noalloc - Init tile up to the point where allocations can happen.
+ * @tile: The tile to initialize.
+ *
+ * This function prepares the tile to allow memory allocations to VRAM, but is
+ * not allowed to allocate memory itself. This state is useful for display
+ * readout, because the inherited display framebuffer will otherwise be
+ * overwritten as it is usually put at the start of VRAM.
+ *
+ * Note that since this is tile initialization, it should not perform any
+ * GT-specific operations, and thus does not need to hold GT forcewake.
+ *
+ * Returns: 0 on success, negative error code on error.
+ */
+int xe_tile_init_noalloc(struct xe_tile *tile)
+{
+	return xe_ggtt_init_noalloc(tile->mem.ggtt);
+}
diff --git a/drivers/gpu/drm/xe/xe_tile.h b/drivers/gpu/drm/xe/xe_tile.h
new file mode 100644
index 000000000000..77529ea136a6
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_tile.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_TILE_H_
+#define _XE_TILE_H_
+
+struct xe_tile;
+
+int xe_tile_alloc(struct xe_tile *tile);
+int xe_tile_init_noalloc(struct xe_tile *tile);
+
+#endif
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 09/31] fixup! drm/xe/display: Implement display support
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (7 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 08/31] drm/xe: Move GGTT from GT to tile Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 10/31] drm/xe: Move VRAM from GT to tile Matt Roper
                   ` (24 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/display/xe_fb_pin.c        | 10 +++++-----
 drivers/gpu/drm/xe/display/xe_plane_initial.c |  5 +++--
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index 747fbb06cd83..3e863461fe79 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -123,14 +123,14 @@ static int __xe_pin_fb_vma_ggtt(struct intel_framebuffer *fb,
 {
 	struct xe_bo *bo = intel_fb_obj(&fb->base);
 	struct xe_device *xe = to_xe_device(fb->base.dev);
-	struct xe_ggtt *ggtt = to_gt(xe)->mem.ggtt;
+	struct xe_ggtt *ggtt = xe_device_get_root_tile(xe)->mem.ggtt;
 	u32 align;
 	int ret;
 
 	/* TODO: Consider sharing framebuffer mapping?
 	 * embed i915_vma inside intel_framebuffer
 	 */
-	xe_device_mem_access_get(gt_to_xe(ggtt->gt));
+	xe_device_mem_access_get(tile_to_xe(ggtt->tile));
 	ret = mutex_lock_interruptible(&ggtt->lock);
 	if (ret)
 		goto out;
@@ -174,11 +174,11 @@ static int __xe_pin_fb_vma_ggtt(struct intel_framebuffer *fb,
 					   rot_info->plane[i].dst_stride);
 	}
 
-	xe_ggtt_invalidate(to_gt(xe));
+	xe_ggtt_invalidate(ggtt);
 out_unlock:
 	mutex_unlock(&ggtt->lock);
 out:
-	xe_device_mem_access_put(gt_to_xe(ggtt->gt));
+	xe_device_mem_access_put(tile_to_xe(ggtt->tile));
 	return ret;
 }
 
@@ -240,7 +240,7 @@ static struct i915_vma *__xe_pin_fb_vma(struct intel_framebuffer *fb,
 static void __xe_unpin_fb_vma(struct i915_vma *vma)
 {
 	struct xe_device *xe = to_xe_device(vma->bo->ttm.base.dev);
-	struct xe_ggtt *ggtt = to_gt(xe)->mem.ggtt;
+	struct xe_ggtt *ggtt = xe_device_get_root_tile(xe)->mem.ggtt;
 
 	if (vma->dpt)
 		xe_bo_unpin_map_no_vm(vma->dpt);
diff --git a/drivers/gpu/drm/xe/display/xe_plane_initial.c b/drivers/gpu/drm/xe/display/xe_plane_initial.c
index 34ae461865a7..41540b27775c 100644
--- a/drivers/gpu/drm/xe/display/xe_plane_initial.c
+++ b/drivers/gpu/drm/xe/display/xe_plane_initial.c
@@ -52,6 +52,7 @@ initial_plane_bo(struct xe_device *xe,
 		 struct intel_initial_plane_config *plane_config)
 {
 	struct xe_gt *gt0 = xe_device_get_gt(xe, 0);
+	struct xe_tile *tile0 = xe_device_get_root_tile(xe);
 	struct xe_bo *bo;
 	resource_size_t phys_base;
 	u32 base, size, flags;
@@ -64,7 +65,7 @@ initial_plane_bo(struct xe_device *xe,
 
 	base = round_down(plane_config->base, page_size);
 	if (IS_DGFX(xe)) {
-		u64 __iomem *gte = gt0->mem.ggtt->gsm;
+		u64 __iomem *gte = tile0->mem.ggtt->gsm;
 		u64 pte;
 
 		gte += base / XE_PAGE_SIZE;
@@ -115,7 +116,7 @@ initial_plane_bo(struct xe_device *xe,
 			page_size);
 	size -= base;
 
-	bo = xe_bo_create_pin_map_at(xe, gt0, NULL, size, phys_base,
+	bo = xe_bo_create_pin_map_at(xe, &tile0->primary_gt, NULL, size, phys_base,
 				     ttm_bo_type_kernel, flags);
 	if (IS_ERR(bo)) {
 		drm_dbg(&xe->drm,
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 10/31] drm/xe: Move VRAM from GT to tile
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (8 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 09/31] fixup! drm/xe/display: Implement display support Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
       [not found]   ` <168556108480.1068887.9605005606411033865@gjsousa-mobl2>
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 11/31] fixup! drm/xe/display: Implement display support Matt Roper
                   ` (23 subsequent siblings)
  33 siblings, 1 reply; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

On platforms with VRAM, the VRAM is associated with the tile, not the
GT.

v2:
 - Unsquash the GGTT handling back into its own patch.
 - Fix kunit test build
v3:
 - Tweak the "FIXME" comment to clarify that this function will be
   completely gone by the end of the series.  (Lucas)

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/Makefile                |  1 +
 drivers/gpu/drm/xe/tests/xe_bo.c           |  6 +-
 drivers/gpu/drm/xe/xe_bo.c                 | 44 ++++++------
 drivers/gpu/drm/xe/xe_bo.h                 |  4 +-
 drivers/gpu/drm/xe/xe_device.c             | 14 ++--
 drivers/gpu/drm/xe/xe_device_types.h       | 30 ++++++++
 drivers/gpu/drm/xe/xe_gt.c                 | 82 ++--------------------
 drivers/gpu/drm/xe/xe_gt_pagefault.c       |  6 +-
 drivers/gpu/drm/xe/xe_gt_types.h           | 37 ----------
 drivers/gpu/drm/xe/xe_irq.c                |  2 +-
 drivers/gpu/drm/xe/xe_mmio.c               | 51 +++++++-------
 drivers/gpu/drm/xe/xe_mmio.h               |  2 +-
 drivers/gpu/drm/xe/xe_pci.c                |  2 -
 drivers/gpu/drm/xe/xe_query.c              |  4 +-
 drivers/gpu/drm/xe/xe_res_cursor.h         |  2 +-
 drivers/gpu/drm/xe/xe_tile.c               | 33 ++++++++-
 drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c     | 18 ++---
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c       | 16 ++---
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.h       |  4 +-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h |  6 +-
 20 files changed, 161 insertions(+), 203 deletions(-)

diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index da1e447c08c7..f34d4bdd510b 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -97,6 +97,7 @@ xe-y += xe_bb.o \
 	xe_sched_job.o \
 	xe_step.o \
 	xe_sync.o \
+	xe_tile.o \
 	xe_trace.o \
 	xe_ttm_sys_mgr.o \
 	xe_ttm_stolen_mgr.o \
diff --git a/drivers/gpu/drm/xe/tests/xe_bo.c b/drivers/gpu/drm/xe/tests/xe_bo.c
index 8f3afdc6cca6..6235a6c73a06 100644
--- a/drivers/gpu/drm/xe/tests/xe_bo.c
+++ b/drivers/gpu/drm/xe/tests/xe_bo.c
@@ -115,9 +115,9 @@ static void ccs_test_run_gt(struct xe_device *xe, struct xe_gt *gt,
 	int ret;
 
 	/* TODO: Sanity check */
-	vram_bit = XE_BO_CREATE_VRAM0_BIT << gt->info.vram_id;
+	vram_bit = XE_BO_CREATE_VRAM0_BIT << gt_to_tile(gt)->id;
 	kunit_info(test, "Testing gt id %u vram id %u\n", gt->info.id,
-		   gt->info.vram_id);
+		   gt_to_tile(gt)->id);
 
 	bo = xe_bo_create_locked(xe, NULL, NULL, SZ_1M, ttm_bo_type_device,
 				 vram_bit);
@@ -179,7 +179,7 @@ static int evict_test_run_gt(struct xe_device *xe, struct xe_gt *gt, struct kuni
 	int err, i;
 
 	kunit_info(test, "Testing device %s gt id %u vram id %u\n",
-		   dev_name(xe->drm.dev), gt->info.id, gt->info.vram_id);
+		   dev_name(xe->drm.dev), gt->info.id, gt_to_tile(gt)->id);
 
 	for (i = 0; i < 2; ++i) {
 		xe_vm_lock(vm, &ww, 0, false);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 09a9c121a84d..17de7cc5fe36 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -71,25 +71,25 @@ static bool xe_bo_is_user(struct xe_bo *bo)
 	return bo->flags & XE_BO_CREATE_USER_BIT;
 }
 
-static struct xe_gt *
-mem_type_to_gt(struct xe_device *xe, u32 mem_type)
+static struct xe_tile *
+mem_type_to_tile(struct xe_device *xe, u32 mem_type)
 {
 	XE_BUG_ON(mem_type != XE_PL_STOLEN && !mem_type_is_vram(mem_type));
 
-	return xe_device_get_gt(xe, mem_type == XE_PL_STOLEN ? 0 : (mem_type - XE_PL_VRAM0));
+	return &xe->tiles[mem_type == XE_PL_STOLEN ? 0 : (mem_type - XE_PL_VRAM0)];
 }
 
 /**
- * xe_bo_to_gt() - Get a GT from a BO's memory location
+ * xe_bo_to_tile() - Get a tile from a BO's memory location
  * @bo: The buffer object
  *
- * Get a GT from a BO's memory location, should be called on BOs in VRAM only.
+ * Get a tile from a BO's memory location, should be called on BOs in VRAM only.
  *
- * Return: xe_gt object which is closest to the BO
+ * Return: xe_tile object which is closest to the BO
  */
-struct xe_gt *xe_bo_to_gt(struct xe_bo *bo)
+struct xe_tile *xe_bo_to_tile(struct xe_bo *bo)
 {
-	return mem_type_to_gt(xe_bo_device(bo), bo->ttm.resource->mem_type);
+	return mem_type_to_tile(xe_bo_device(bo), bo->ttm.resource->mem_type);
 }
 
 static void try_add_system(struct xe_bo *bo, struct ttm_place *places,
@@ -109,9 +109,9 @@ static void try_add_system(struct xe_bo *bo, struct ttm_place *places,
 static void add_vram(struct xe_device *xe, struct xe_bo *bo,
 		     struct ttm_place *places, u32 bo_flags, u32 mem_type, u32 *c)
 {
-	struct xe_gt *gt = mem_type_to_gt(xe, mem_type);
+	struct xe_tile *tile = mem_type_to_tile(xe, mem_type);
 
-	XE_BUG_ON(!gt->mem.vram.size);
+	XE_BUG_ON(!tile->mem.vram.size);
 
 	places[*c] = (struct ttm_place) {
 		.mem_type = mem_type,
@@ -362,7 +362,7 @@ static int xe_ttm_io_mem_reserve(struct ttm_device *bdev,
 				 struct ttm_resource *mem)
 {
 	struct xe_device *xe = ttm_to_xe_device(bdev);
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 
 	switch (mem->mem_type) {
 	case XE_PL_SYSTEM:
@@ -370,15 +370,15 @@ static int xe_ttm_io_mem_reserve(struct ttm_device *bdev,
 		return 0;
 	case XE_PL_VRAM0:
 	case XE_PL_VRAM1:
-		gt = mem_type_to_gt(xe, mem->mem_type);
+		tile = mem_type_to_tile(xe, mem->mem_type);
 		mem->bus.offset = mem->start << PAGE_SHIFT;
 
-		if (gt->mem.vram.mapping &&
+		if (tile->mem.vram.mapping &&
 		    mem->placement & TTM_PL_FLAG_CONTIGUOUS)
-			mem->bus.addr = (u8 *)gt->mem.vram.mapping +
+			mem->bus.addr = (u8 *)tile->mem.vram.mapping +
 				mem->bus.offset;
 
-		mem->bus.offset += gt->mem.vram.io_start;
+		mem->bus.offset += tile->mem.vram.io_start;
 		mem->bus.is_iomem = true;
 
 #if  !defined(CONFIG_X86)
@@ -638,9 +638,9 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
 	if (bo->gt)
 		gt = bo->gt;
 	else if (resource_is_vram(new_mem))
-		gt = mem_type_to_gt(xe, new_mem->mem_type);
+		gt = &mem_type_to_tile(xe, new_mem->mem_type)->primary_gt;
 	else if (resource_is_vram(old_mem))
-		gt = mem_type_to_gt(xe, old_mem->mem_type);
+		gt = &mem_type_to_tile(xe, old_mem->mem_type)->primary_gt;
 
 	XE_BUG_ON(!gt);
 	XE_BUG_ON(!gt->migrate);
@@ -664,7 +664,7 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
 
 			/* Create a new VMAP once kernel BO back in VRAM */
 			if (!ret && resource_is_vram(new_mem)) {
-				void *new_addr = gt->mem.vram.mapping +
+				void *new_addr = gt_to_tile(gt)->mem.vram.mapping +
 					(new_mem->start << PAGE_SHIFT);
 
 				if (XE_WARN_ON(new_mem->start == XE_BO_INVALID_OFFSET)) {
@@ -836,14 +836,14 @@ static unsigned long xe_ttm_io_mem_pfn(struct ttm_buffer_object *ttm_bo,
 {
 	struct xe_device *xe = ttm_to_xe_device(ttm_bo->bdev);
 	struct xe_bo *bo = ttm_to_xe_bo(ttm_bo);
-	struct xe_gt *gt = mem_type_to_gt(xe, ttm_bo->resource->mem_type);
+	struct xe_tile *tile = mem_type_to_tile(xe, ttm_bo->resource->mem_type);
 	struct xe_res_cursor cursor;
 
 	if (ttm_bo->resource->mem_type == XE_PL_STOLEN)
 		return xe_ttm_stolen_io_offset(bo, page_offset << PAGE_SHIFT) >> PAGE_SHIFT;
 
 	xe_res_first(ttm_bo->resource, (u64)page_offset << PAGE_SHIFT, 0, &cursor);
-	return (gt->mem.vram.io_start + cursor.start) >> PAGE_SHIFT;
+	return (tile->mem.vram.io_start + cursor.start) >> PAGE_SHIFT;
 }
 
 static void __xe_bo_vunmap(struct xe_bo *bo);
@@ -1344,12 +1344,12 @@ struct xe_bo *xe_bo_create_from_data(struct xe_device *xe, struct xe_gt *gt,
 uint64_t vram_region_gpu_offset(struct ttm_resource *res)
 {
 	struct xe_device *xe = ttm_to_xe_device(res->bo->bdev);
-	struct xe_gt *gt = mem_type_to_gt(xe, res->mem_type);
+	struct xe_tile *tile = mem_type_to_tile(xe, res->mem_type);
 
 	if (res->mem_type == XE_PL_STOLEN)
 		return xe_ttm_stolen_gpu_offset(xe);
 
-	return xe->mem.vram.base + gt->mem.vram.base;
+	return xe->mem.vram.base + tile->mem.vram.base;
 }
 
 /**
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index d945675a259f..2cad82510201 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -22,7 +22,7 @@
 /* -- */
 #define XE_BO_CREATE_STOLEN_BIT		BIT(4)
 #define XE_BO_CREATE_VRAM_IF_DGFX(gt) \
-	(IS_DGFX(gt_to_xe(gt)) ? XE_BO_CREATE_VRAM0_BIT << gt->info.vram_id : \
+	(IS_DGFX(gt_to_xe(gt)) ? XE_BO_CREATE_VRAM0_BIT << gt_to_tile(gt)->id : \
 	 XE_BO_CREATE_SYSTEM_BIT)
 #define XE_BO_CREATE_GGTT_BIT		BIT(5)
 #define XE_BO_CREATE_IGNORE_MIN_PAGE_SIZE_BIT BIT(6)
@@ -108,7 +108,7 @@ struct xe_bo *xe_bo_create_from_data(struct xe_device *xe, struct xe_gt *gt,
 int xe_bo_placement_for_flags(struct xe_device *xe, struct xe_bo *bo,
 			      u32 bo_flags);
 
-struct xe_gt *xe_bo_to_gt(struct xe_bo *bo);
+struct xe_tile *xe_bo_to_tile(struct xe_bo *bo);
 
 static inline struct xe_bo *ttm_to_xe_bo(const struct ttm_buffer_object *bo)
 {
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index dd4a4a6e0b94..cf28b0f150ed 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -28,6 +28,7 @@
 #include "xe_pcode.h"
 #include "xe_pm.h"
 #include "xe_query.h"
+#include "xe_tile.h"
 #include "xe_ttm_stolen_mgr.h"
 #include "xe_ttm_sys_mgr.h"
 #include "xe_vm.h"
@@ -244,6 +245,7 @@ static void xe_device_sanitize(struct drm_device *drm, void *arg)
 
 int xe_device_probe(struct xe_device *xe)
 {
+	struct xe_tile *tile;
 	struct xe_gt *gt;
 	int err;
 	u8 id;
@@ -253,8 +255,12 @@ int xe_device_probe(struct xe_device *xe)
 	if (err)
 		return err;
 
-	for_each_gt(gt, xe, id) {
-		err = xe_gt_alloc(xe, gt);
+	for_each_tile(tile, xe, id) {
+		err = xe_tile_alloc(tile);
+		if (err)
+			return err;
+
+		err = xe_gt_alloc(xe, &tile->primary_gt);
 		if (err)
 			return err;
 	}
@@ -289,8 +295,8 @@ int xe_device_probe(struct xe_device *xe)
 
 	xe_ttm_sys_mgr_init(xe);
 
-	for_each_gt(gt, xe, id) {
-		err = xe_gt_init_noalloc(gt);
+	for_each_tile(tile, xe, id) {
+		err = xe_tile_init_noalloc(tile);
 		if (err)
 			goto err_irq_shutdown;
 	}
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index d7b809253eb9..ab8310525f7b 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -102,6 +102,36 @@ struct xe_tile {
 
 	/** @mem: memory management info for tile */
 	struct {
+		/**
+		 * @vram: VRAM info for tile.
+		 *
+		 * Although VRAM is associated with a specific tile, it can
+		 * still be accessed by all tiles' GTs.
+		 */
+		struct {
+			/** @io_start: IO start address of this VRAM instance */
+			resource_size_t io_start;
+			/**
+			 * @io_size: IO size of this VRAM instance
+			 *
+			 * This represents how much of this VRAM we can access
+			 * via the CPU through the VRAM BAR. This can be smaller
+			 * than @size, in which case only part of VRAM is CPU
+			 * accessible (typically the first 256M). This
+			 * configuration is known as small-bar.
+			 */
+			resource_size_t io_size;
+			/** @base: offset of VRAM starting base */
+			resource_size_t base;
+			/** @size: size of VRAM. */
+			resource_size_t size;
+			/** @mapping: pointer to VRAM mappable space */
+			void *__iomem mapping;
+		} vram;
+
+		/** @vram_mgr: VRAM TTM manager */
+		struct xe_ttm_vram_mgr *vram_mgr;
+
 		/** @ggtt: Global graphics translation table */
 		struct xe_ggtt *ggtt;
 	} mem;
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index 0f07f810bb1f..419fc471053c 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -37,7 +37,6 @@
 #include "xe_ring_ops.h"
 #include "xe_sa.h"
 #include "xe_sched_job.h"
-#include "xe_ttm_vram_mgr.h"
 #include "xe_tuning.h"
 #include "xe_uc.h"
 #include "xe_vm.h"
@@ -46,58 +45,22 @@
 
 struct xe_gt *xe_find_full_gt(struct xe_gt *gt)
 {
-	struct xe_gt *search;
-	u8 id;
-
-	XE_BUG_ON(!xe_gt_is_media_type(gt));
-
-	for_each_gt(search, gt_to_xe(gt), id) {
-		if (search->info.vram_id == gt->info.vram_id)
-			return search;
-	}
-
-	XE_BUG_ON("NOT POSSIBLE");
-	return NULL;
+	/*
+	 * FIXME: Once the code is prepared for re-enabling, this function will
+	 * be gone. Just return the only possible gt for now.
+	 */
+	return gt;
 }
 
 int xe_gt_alloc(struct xe_device *xe, struct xe_gt *gt)
 {
-	struct drm_device *drm = &xe->drm;
-
 	XE_BUG_ON(gt->info.type == XE_GT_TYPE_UNINITIALIZED);
 
-	if (!xe_gt_is_media_type(gt)) {
-		gt->mem.vram_mgr = drmm_kzalloc(drm, sizeof(*gt->mem.vram_mgr),
-						GFP_KERNEL);
-		if (!gt->mem.vram_mgr)
-			return -ENOMEM;
-
-	} else {
-		struct xe_gt *full_gt = xe_find_full_gt(gt);
-
-		gt->mem.vram_mgr = full_gt->mem.vram_mgr;
-	}
-
 	gt->ordered_wq = alloc_ordered_workqueue("gt-ordered-wq", 0);
 
 	return 0;
 }
 
-static int gt_ttm_mgr_init(struct xe_gt *gt)
-{
-	struct xe_device *xe = gt_to_xe(gt);
-	int err;
-
-	if (gt->mem.vram.size) {
-		err = xe_ttm_vram_mgr_init(gt, gt->mem.vram_mgr);
-		if (err)
-			return err;
-		xe->info.mem_region_mask |= BIT(gt->info.vram_id) << 1;
-	}
-
-	return 0;
-}
-
 void xe_gt_sanitize(struct xe_gt *gt)
 {
 	/*
@@ -321,41 +284,6 @@ int xe_gt_init_early(struct xe_gt *gt)
 	return 0;
 }
 
-/**
- * xe_gt_init_noalloc - Init GT up to the point where allocations can happen.
- * @gt: The GT to initialize.
- *
- * This function prepares the GT to allow memory allocations to VRAM, but is not
- * allowed to allocate memory itself. This state is useful for display readout,
- * because the inherited display framebuffer will otherwise be overwritten as it
- * is usually put at the start of VRAM.
- *
- * Returns: 0 on success, negative error code on error.
- */
-int xe_gt_init_noalloc(struct xe_gt *gt)
-{
-	int err, err2;
-
-	if (xe_gt_is_media_type(gt))
-		return 0;
-
-	xe_device_mem_access_get(gt_to_xe(gt));
-	err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
-	if (err)
-		goto err;
-
-	err = gt_ttm_mgr_init(gt);
-	if (err)
-		goto err_force_wake;
-
-err_force_wake:
-	err2 = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
-	XE_WARN_ON(err2);
-	xe_device_mem_access_put(gt_to_xe(gt));
-err:
-	return err;
-}
-
 static int gt_fw_domain_init(struct xe_gt *gt)
 {
 	int err, i;
diff --git a/drivers/gpu/drm/xe/xe_gt_pagefault.c b/drivers/gpu/drm/xe/xe_gt_pagefault.c
index 1677640e1075..f4f3d95ae6b1 100644
--- a/drivers/gpu/drm/xe/xe_gt_pagefault.c
+++ b/drivers/gpu/drm/xe/xe_gt_pagefault.c
@@ -107,6 +107,7 @@ static struct xe_vma *lookup_vma(struct xe_vm *vm, u64 page_addr)
 static int handle_pagefault(struct xe_gt *gt, struct pagefault *pf)
 {
 	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_vm *vm;
 	struct xe_vma *vma = NULL;
 	struct xe_bo *bo;
@@ -195,7 +196,7 @@ static int handle_pagefault(struct xe_gt *gt, struct pagefault *pf)
 		}
 
 		/* Migrate to VRAM, move should invalidate the VMA first */
-		ret = xe_bo_migrate(bo, XE_PL_VRAM0 + gt->info.vram_id);
+		ret = xe_bo_migrate(bo, XE_PL_VRAM0 + tile->id);
 		if (ret)
 			goto unlock_dma_resv;
 	} else if (bo) {
@@ -498,6 +499,7 @@ static struct xe_vma *get_acc_vma(struct xe_vm *vm, struct acc *acc)
 static int handle_acc(struct xe_gt *gt, struct acc *acc)
 {
 	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_vm *vm;
 	struct xe_vma *vma;
 	struct xe_bo *bo;
@@ -553,7 +555,7 @@ static int handle_acc(struct xe_gt *gt, struct acc *acc)
 		goto unlock_vm;
 
 	/* Migrate to VRAM, move should invalidate the VMA first */
-	ret = xe_bo_migrate(bo, XE_PL_VRAM0 + gt->info.vram_id);
+	ret = xe_bo_migrate(bo, XE_PL_VRAM0 + tile->id);
 
 	if (only_needs_bo_lock(bo))
 		xe_bo_unlock(bo, &ww);
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index c06a0b27d6fc..a040ec896e70 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -16,8 +16,6 @@
 struct xe_engine_ops;
 struct xe_migrate;
 struct xe_ring_ops;
-struct xe_ttm_gtt_mgr;
-struct xe_ttm_vram_mgr;
 
 enum xe_gt_type {
 	XE_GT_TYPE_UNINITIALIZED,
@@ -108,8 +106,6 @@ struct xe_gt {
 		enum xe_gt_type type;
 		/** @id: id of GT */
 		u8 id;
-		/** @vram: id of the VRAM for this GT */
-		u8 vram_id;
 		/** @clock_freq: clock frequency */
 		u32 clock_freq;
 		/** @engine_mask: mask of engines present on GT */
@@ -144,39 +140,6 @@ struct xe_gt {
 	 */
 	struct xe_reg_sr reg_sr;
 
-	/**
-	 * @mem: memory management info for GT, multiple GTs can point to same
-	 * objects (virtual split)
-	 */
-	struct {
-		/**
-		 * @vram: VRAM info for GT, multiple GTs can point to same info
-		 * (virtual split), can be subset of global device VRAM
-		 */
-		struct {
-			/** @io_start: IO start address of this VRAM instance */
-			resource_size_t io_start;
-			/**
-			 * @io_size: IO size of this VRAM instance
-			 *
-			 * This represents how much of the VRAM the CPU can access
-			 * via the VRAM BAR.
-			 * This can be smaller than the actual @size, in which
-			 * case only part of VRAM is CPU accessible (typically
-			 * the first 256M). This configuration is known as small-bar.
-			 */
-			resource_size_t io_size;
-			/** @base: offset of VRAM starting base */
-			resource_size_t base;
-			/** @size: size of VRAM. */
-			resource_size_t size;
-			/** @mapping: pointer to VRAM mappable space */
-			void *__iomem mapping;
-		} vram;
-		/** @vram_mgr: VRAM TTM manager */
-		struct xe_ttm_vram_mgr *vram_mgr;
-	} mem;
-
 	/** @reset: state for GT resets */
 	struct {
 		/**
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 5bf359c81cc5..5be31855d789 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -369,7 +369,7 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
 	}
 
 	for_each_gt(gt, xe, id) {
-		if ((master_tile_ctl & DG1_MSTR_TILE(gt->info.vram_id)) == 0)
+		if ((master_tile_ctl & DG1_MSTR_TILE(gt_to_tile(gt)->id)) == 0)
 			continue;
 
 		if (!xe_gt_is_media_type(gt))
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index b27103080ca9..0120b836dd1d 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -206,8 +206,10 @@ static int xe_determine_lmem_bar_size(struct xe_device *xe)
  * NOTE: multi-tile bases will include the tile offset.
  *
  */
-int xe_mmio_tile_vram_size(struct xe_gt *gt, u64 *vram_size, u64 *tile_size, u64 *tile_offset)
+int xe_mmio_tile_vram_size(struct xe_tile *tile, u64 *vram_size, u64 *tile_size, u64 *tile_offset)
 {
+	struct xe_device *xe = tile_to_xe(tile);
+	struct xe_gt *gt = &tile->primary_gt;
 	u64 offset;
 	int err;
 	u32 reg;
@@ -217,8 +219,8 @@ int xe_mmio_tile_vram_size(struct xe_gt *gt, u64 *vram_size, u64 *tile_size, u64
 		return err;
 
 	/* actual size */
-	if (unlikely(gt_to_xe(gt)->info.platform == XE_DG1)) {
-		*tile_size = pci_resource_len(to_pci_dev(gt_to_xe(gt)->drm.dev), GEN12_LMEM_BAR);
+	if (unlikely(xe->info.platform == XE_DG1)) {
+		*tile_size = pci_resource_len(to_pci_dev(xe->drm.dev), GEN12_LMEM_BAR);
 		*tile_offset = 0;
 	} else {
 		reg = xe_gt_mcr_unicast_read_any(gt, XEHP_TILE_ADDR_RANGE(gt->info.id));
@@ -227,7 +229,7 @@ int xe_mmio_tile_vram_size(struct xe_gt *gt, u64 *vram_size, u64 *tile_size, u64
 	}
 
 	/* minus device usage */
-	if (gt_to_xe(gt)->info.has_flat_ccs) {
+	if (xe->info.has_flat_ccs) {
 		reg = xe_gt_mcr_unicast_read_any(gt, XEHP_FLAT_CCS_BASE_ADDR);
 		offset = (u64)REG_FIELD_GET(GENMASK(31, 8), reg) * SZ_64K;
 	} else {
@@ -242,10 +244,10 @@ int xe_mmio_tile_vram_size(struct xe_gt *gt, u64 *vram_size, u64 *tile_size, u64
 
 int xe_mmio_probe_vram(struct xe_device *xe)
 {
+	struct xe_tile *tile;
 	resource_size_t io_size;
 	u64 available_size = 0;
 	u64 total_size = 0;
-	struct xe_gt *gt;
 	u64 tile_offset;
 	u64 tile_size;
 	u64 vram_size;
@@ -255,9 +257,9 @@ int xe_mmio_probe_vram(struct xe_device *xe)
 	if (!IS_DGFX(xe))
 		return 0;
 
-	/* Get the size of the gt0 vram for later accessibility comparison */
-	gt = xe_device_get_gt(xe, 0);
-	err = xe_mmio_tile_vram_size(gt, &vram_size, &tile_size, &tile_offset);
+	/* Get the size of the root tile's vram for later accessibility comparison */
+	tile = xe_device_get_root_tile(xe);
+	err = xe_mmio_tile_vram_size(tile, &vram_size, &tile_size, &tile_offset);
 	if (err)
 		return err;
 
@@ -265,7 +267,7 @@ int xe_mmio_probe_vram(struct xe_device *xe)
 	if (err)
 		return err;
 
-	/* small bar issues will only cover gt0 sizes */
+	/* small bar issues will only cover root tile sizes */
 	if (xe->mem.vram.io_size < vram_size)
 		drm_warn(&xe->drm, "Restricting VRAM size to PCI resource size (0x%llx->0x%llx)\n",
 			 vram_size, (u64)xe->mem.vram.io_size);
@@ -275,35 +277,32 @@ int xe_mmio_probe_vram(struct xe_device *xe)
 
 	io_size = xe->mem.vram.io_size;
 
-	/* gt specific ranges */
-	for_each_gt(gt, xe, id) {
-		if (xe_gt_is_media_type(gt))
-			continue;
-
-		err = xe_mmio_tile_vram_size(gt, &vram_size, &tile_size, &tile_offset);
+	/* tile specific ranges */
+	for_each_tile(tile, xe, id) {
+		err = xe_mmio_tile_vram_size(tile, &vram_size, &tile_size, &tile_offset);
 		if (err)
 			return err;
 
-		gt->mem.vram.io_start = xe->mem.vram.io_start + tile_offset;
-		gt->mem.vram.io_size = min_t(u64, vram_size, io_size);
+		tile->mem.vram.io_start = xe->mem.vram.io_start + tile_offset;
+		tile->mem.vram.io_size = min_t(u64, vram_size, io_size);
 
-		if (!gt->mem.vram.io_size) {
+		if (!tile->mem.vram.io_size) {
 			drm_err(&xe->drm, "Tile without any CPU visible VRAM. Aborting.\n");
 			return -ENODEV;
 		}
 
-		gt->mem.vram.base = tile_offset;
+		tile->mem.vram.base = tile_offset;
 
 		/* small bar can limit the visible size.  size accordingly */
-		gt->mem.vram.size = min_t(u64, vram_size, io_size);
-		gt->mem.vram.mapping = xe->mem.vram.mapping + tile_offset;
+		tile->mem.vram.size = min_t(u64, vram_size, io_size);
+		tile->mem.vram.mapping = xe->mem.vram.mapping + tile_offset;
 
-		drm_info(&xe->drm, "VRAM[%u, %u]: %pa, %pa\n", id, gt->info.vram_id,
-			 &gt->mem.vram.io_start, &gt->mem.vram.size);
+		drm_info(&xe->drm, "VRAM[%u, %u]: %pa, %pa\n", id, tile->id,
+			 &tile->mem.vram.io_start, &tile->mem.vram.size);
 
-		if (gt->mem.vram.io_size < gt->mem.vram.size)
+		if (tile->mem.vram.io_size < tile->mem.vram.size)
 			drm_info(&xe->drm, "VRAM[%u, %u]: CPU access limited to %pa\n", id,
-				 gt->info.vram_id, &gt->mem.vram.io_size);
+				 tile->id, &tile->mem.vram.io_size);
 
 		/* calculate total size using tile size to get the correct HW sizing */
 		total_size += tile_size;
@@ -329,7 +328,7 @@ int xe_mmio_probe_vram(struct xe_device *xe)
 
 static void xe_mmio_probe_tiles(struct xe_device *xe)
 {
-	struct xe_gt *gt = xe_device_get_gt(xe, 0);
+	struct xe_gt *gt = &xe_device_get_root_tile(xe)->primary_gt;
 	u32 mtcfg;
 	u8 adj_tile_count;
 	u8 id;
diff --git a/drivers/gpu/drm/xe/xe_mmio.h b/drivers/gpu/drm/xe/xe_mmio.h
index 0ba7aa790f0b..3c547d78afba 100644
--- a/drivers/gpu/drm/xe/xe_mmio.h
+++ b/drivers/gpu/drm/xe/xe_mmio.h
@@ -144,6 +144,6 @@ static inline bool xe_mmio_in_range(const struct xe_mmio_range *range,
 }
 
 int xe_mmio_probe_vram(struct xe_device *xe);
-int xe_mmio_tile_vram_size(struct xe_gt *gt, u64 *vram_size, u64 *tile_size, u64 *tile_base);
+int xe_mmio_tile_vram_size(struct xe_tile *tile, u64 *vram_size, u64 *tile_size, u64 *tile_base);
 
 #endif
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 91d5dc59aa7e..ea3d69607d13 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -569,7 +569,6 @@ static int xe_info_init(struct xe_device *xe,
 
 		if (id == 0) {
 			gt->info.type = XE_GT_TYPE_MAIN;
-			gt->info.vram_id = id;
 
 			gt->info.__engine_mask = graphics_desc->hw_engine_mask;
 			if (MEDIA_VER(xe) < 13 && media_desc)
@@ -579,7 +578,6 @@ static int xe_info_init(struct xe_device *xe,
 			gt->mmio.adj_offset = 0;
 		} else {
 			gt->info.type = desc->extra_gts[id - 1].type;
-			gt->info.vram_id = desc->extra_gts[id - 1].vram_id;
 			gt->info.__engine_mask = (gt->info.type == XE_GT_TYPE_MEDIA) ?
 				media_desc->hw_engine_mask :
 				graphics_desc->hw_engine_mask;
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index b10959fde43b..799bf68800e7 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -182,7 +182,7 @@ static int query_config(struct xe_device *xe, struct drm_xe_device_query *query)
 	config->num_params = num_params;
 	config->info[XE_QUERY_CONFIG_REV_AND_DEVICE_ID] =
 		xe->info.devid | (xe->info.revid << 16);
-	if (to_gt(xe)->mem.vram.size)
+	if (xe_device_get_root_tile(xe)->mem.vram.size)
 		config->info[XE_QUERY_CONFIG_FLAGS] =
 			XE_QUERY_CONFIG_FLAGS_HAS_VRAM;
 	if (xe->info.enable_guc)
@@ -242,7 +242,7 @@ static int query_gts(struct xe_device *xe, struct drm_xe_device_query *query)
 			gts->gts[id].native_mem_regions = 0x1;
 		else
 			gts->gts[id].native_mem_regions =
-				BIT(gt->info.vram_id) << 1;
+				BIT(gt_to_tile(gt)->id) << 1;
 		gts->gts[id].slow_mem_regions = xe->info.mem_region_mask ^
 			gts->gts[id].native_mem_regions;
 	}
diff --git a/drivers/gpu/drm/xe/xe_res_cursor.h b/drivers/gpu/drm/xe/xe_res_cursor.h
index 4e99fae26b4c..f2ba609712d3 100644
--- a/drivers/gpu/drm/xe/xe_res_cursor.h
+++ b/drivers/gpu/drm/xe/xe_res_cursor.h
@@ -53,7 +53,7 @@ static struct drm_buddy *xe_res_get_buddy(struct ttm_resource *res)
 	struct xe_device *xe = ttm_to_xe_device(res->bo->bdev);
 
 	if (res->mem_type != XE_PL_STOLEN) {
-		return &xe_device_get_gt(xe, res->mem_type - XE_PL_VRAM0)->mem.vram_mgr->mm;
+		return &xe->tiles[res->mem_type - XE_PL_VRAM0].mem.vram_mgr->mm;
 	} else {
 		struct ttm_resource_manager *mgr =
 			ttm_manager_type(&xe->ttm, XE_PL_STOLEN);
diff --git a/drivers/gpu/drm/xe/xe_tile.c b/drivers/gpu/drm/xe/xe_tile.c
index 7ef594f301ca..5530a6b6ef31 100644
--- a/drivers/gpu/drm/xe/xe_tile.c
+++ b/drivers/gpu/drm/xe/xe_tile.c
@@ -29,6 +29,25 @@ int xe_tile_alloc(struct xe_tile *tile)
 		return -ENOMEM;
 	tile->mem.ggtt->tile = tile;
 
+	tile->mem.vram_mgr = drmm_kzalloc(drm, sizeof(*tile->mem.vram_mgr), GFP_KERNEL);
+	if (!tile->mem.vram_mgr)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static int tile_ttm_mgr_init(struct xe_tile *tile)
+{
+	struct xe_device *xe = tile_to_xe(tile);
+	int err;
+
+	if (tile->mem.vram.size) {
+		err = xe_ttm_vram_mgr_init(tile, tile->mem.vram_mgr);
+		if (err)
+			return err;
+		xe->info.mem_region_mask |= BIT(tile->id) << 1;
+	}
+
 	return 0;
 }
 
@@ -48,5 +67,17 @@ int xe_tile_alloc(struct xe_tile *tile)
  */
 int xe_tile_init_noalloc(struct xe_tile *tile)
 {
-	return xe_ggtt_init_noalloc(tile->mem.ggtt);
+	int err;
+
+	xe_device_mem_access_get(tile_to_xe(tile));
+
+	err = tile_ttm_mgr_init(tile);
+	if (err)
+		goto err_mem_access;
+
+	err = xe_ggtt_init_noalloc(tile->mem.ggtt);
+
+err_mem_access:
+	xe_device_mem_access_put(tile_to_xe(tile));
+	return err;
 }
diff --git a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
index 49470f0722bd..c68325161c19 100644
--- a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
@@ -51,29 +51,31 @@ bool xe_ttm_stolen_cpu_access_needs_ggtt(struct xe_device *xe)
 	return GRAPHICS_VERx100(xe) < 1270 && !IS_DGFX(xe);
 }
 
-static s64 detect_bar2_dgfx(struct xe_gt *gt, struct xe_ttm_stolen_mgr *mgr)
+static s64 detect_bar2_dgfx(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr)
 {
-	struct pci_dev *pdev = to_pci_dev(gt_to_xe(gt)->drm.dev);
+	struct xe_tile *tile = xe_device_get_root_tile(xe);
+	struct xe_gt *mmio = &tile->primary_gt;
+	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
 	u64 stolen_size;
 	u64 tile_offset;
 	u64 tile_size;
 	u64 vram_size;
 
-	if (xe_mmio_tile_vram_size(gt, &vram_size, &tile_size, &tile_offset)) {
-		drm_err(&gt_to_xe(gt)->drm, "Querying total vram size failed\n");
+	if (xe_mmio_tile_vram_size(tile, &vram_size, &tile_size, &tile_offset)) {
+		drm_err(&xe->drm, "Querying total vram size failed\n");
 		return 0;
 	}
 
 	/* Use DSM base address instead for stolen memory */
-	mgr->stolen_base = (xe_mmio_read64(gt, DSMBASE) & BDSM_MASK) - tile_offset;
-	if (drm_WARN_ON(&gt_to_xe(gt)->drm, tile_size < mgr->stolen_base))
+	mgr->stolen_base = (xe_mmio_read64(mmio, DSMBASE) & BDSM_MASK) - tile_offset;
+	if (drm_WARN_ON(&xe->drm, tile_size < mgr->stolen_base))
 		return 0;
 
 	stolen_size = tile_size - mgr->stolen_base;
 
 	/* Verify usage fits in the actual resource available */
 	if (mgr->stolen_base + stolen_size <= pci_resource_len(pdev, GEN12_LMEM_BAR))
-		mgr->io_base = gt->mem.vram.io_start + mgr->stolen_base;
+		mgr->io_base = tile->mem.vram.io_start + mgr->stolen_base;
 
 	/*
 	 * There may be few KB of platform dependent reserved memory at the end
@@ -141,7 +143,7 @@ void xe_ttm_stolen_mgr_init(struct xe_device *xe)
 	int err;
 
 	if (IS_DGFX(xe))
-		stolen_size = detect_bar2_dgfx(to_gt(xe), mgr);
+		stolen_size = detect_bar2_dgfx(xe, mgr);
 	else if (GRAPHICS_VERx100(xe) >= 1270)
 		stolen_size = detect_bar2_integrated(xe, mgr);
 	else
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 73836b9b7fed..1a84abd35fcf 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -353,16 +353,14 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
 	return drmm_add_action_or_reset(&xe->drm, ttm_vram_mgr_fini, mgr);
 }
 
-int xe_ttm_vram_mgr_init(struct xe_gt *gt, struct xe_ttm_vram_mgr *mgr)
+int xe_ttm_vram_mgr_init(struct xe_tile *tile, struct xe_ttm_vram_mgr *mgr)
 {
-	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_device *xe = tile_to_xe(tile);
 
-	XE_BUG_ON(xe_gt_is_media_type(gt));
+	mgr->tile = tile;
 
-	mgr->gt = gt;
-
-	return __xe_ttm_vram_mgr_init(xe, mgr, XE_PL_VRAM0 + gt->info.vram_id,
-				      gt->mem.vram.size, gt->mem.vram.io_size,
+	return __xe_ttm_vram_mgr_init(xe, mgr, XE_PL_VRAM0 + tile->id,
+				      tile->mem.vram.size, tile->mem.vram.io_size,
 				      PAGE_SIZE);
 }
 
@@ -373,7 +371,7 @@ int xe_ttm_vram_mgr_alloc_sgt(struct xe_device *xe,
 			      enum dma_data_direction dir,
 			      struct sg_table **sgt)
 {
-	struct xe_gt *gt = xe_device_get_gt(xe, res->mem_type - XE_PL_VRAM0);
+	struct xe_tile *tile = &xe->tiles[res->mem_type - XE_PL_VRAM0];
 	struct xe_res_cursor cursor;
 	struct scatterlist *sg;
 	int num_entries = 0;
@@ -406,7 +404,7 @@ int xe_ttm_vram_mgr_alloc_sgt(struct xe_device *xe,
 	 */
 	xe_res_first(res, offset, length, &cursor);
 	for_each_sgtable_sg((*sgt), sg, i) {
-		phys_addr_t phys = cursor.start + gt->mem.vram.io_start;
+		phys_addr_t phys = cursor.start + tile->mem.vram.io_start;
 		size_t size = cursor.size;
 		dma_addr_t addr;
 
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index 35e5367a79fb..6e1d6033d739 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -10,12 +10,12 @@
 
 enum dma_data_direction;
 struct xe_device;
-struct xe_gt;
+struct xe_tile;
 
 int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
 			   u32 mem_type, u64 size, u64 io_size,
 			   u64 default_page_size);
-int xe_ttm_vram_mgr_init(struct xe_gt *gt, struct xe_ttm_vram_mgr *mgr);
+int xe_ttm_vram_mgr_init(struct xe_tile *tile, struct xe_ttm_vram_mgr *mgr);
 int xe_ttm_vram_mgr_alloc_sgt(struct xe_device *xe,
 			      struct ttm_resource *res,
 			      u64 offset, u64 length,
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
index 3d9417ff7434..48bb991c14a5 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
@@ -9,7 +9,7 @@
 #include <drm/drm_buddy.h>
 #include <drm/ttm/ttm_device.h>
 
-struct xe_gt;
+struct xe_tile;
 
 /**
  * struct xe_ttm_vram_mgr - XE TTM VRAM manager
@@ -17,8 +17,8 @@ struct xe_gt;
  * Manages placement of TTM resource in VRAM.
  */
 struct xe_ttm_vram_mgr {
-	/** @gt: Graphics tile which the VRAM belongs to */
-	struct xe_gt *gt;
+	/** @tile: Tile which the VRAM belongs to */
+	struct xe_tile *tile;
 	/** @manager: Base TTM resource manager */
 	struct ttm_resource_manager manager;
 	/** @mm: DRM buddy allocator which manages the VRAM */
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 11/31] fixup! drm/xe/display: Implement display support
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (9 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 10/31] drm/xe: Move VRAM from GT to tile Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 12/31] drm/xe: Memory allocations are tile-based, not GT-based Matt Roper
                   ` (22 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/display/xe_plane_initial.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/display/xe_plane_initial.c b/drivers/gpu/drm/xe/display/xe_plane_initial.c
index 41540b27775c..39dd97acae08 100644
--- a/drivers/gpu/drm/xe/display/xe_plane_initial.c
+++ b/drivers/gpu/drm/xe/display/xe_plane_initial.c
@@ -51,7 +51,6 @@ static struct xe_bo *
 initial_plane_bo(struct xe_device *xe,
 		 struct intel_initial_plane_config *plane_config)
 {
-	struct xe_gt *gt0 = xe_device_get_gt(xe, 0);
 	struct xe_tile *tile0 = xe_device_get_root_tile(xe);
 	struct xe_bo *bo;
 	resource_size_t phys_base;
@@ -84,7 +83,7 @@ initial_plane_bo(struct xe_device *xe,
 		 * We don't currently expect this to ever be placed in the
 		 * stolen portion.
 		 */
-		if (phys_base >= gt0->mem.vram.size) {
+		if (phys_base >= tile0->mem.vram.size) {
 			drm_err(&xe->drm,
 				"Initial plane programming using invalid range, phys_base=%pa\n",
 				&phys_base);
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 12/31] drm/xe: Memory allocations are tile-based, not GT-based
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (10 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 11/31] fixup! drm/xe/display: Implement display support Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 13/31] fixup! drm/xe/display: Implement display support Matt Roper
                   ` (21 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Since memory and address spaces are a tile concept rather than a GT
concept, we need to plumb tile-based handling through lots of
memory-related code.

Note that one remaining shortcoming here that will need to be addressed
before media GT support can be re-enabled is that although the address
space is shared between a tile's GTs, each GT caches the PTEs
independently in their own TLB and thus TLB invalidation should be
handled at the GT level.

v2:
 - Fix kunit test build.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_bo.c      |   2 +-
 drivers/gpu/drm/xe/tests/xe_migrate.c |  21 ++--
 drivers/gpu/drm/xe/xe_bb.c            |   3 +-
 drivers/gpu/drm/xe/xe_bo.c            |  67 ++++++------
 drivers/gpu/drm/xe/xe_bo.h            |  18 +--
 drivers/gpu/drm/xe/xe_bo_evict.c      |   2 +-
 drivers/gpu/drm/xe/xe_bo_types.h      |   4 +-
 drivers/gpu/drm/xe/xe_device_types.h  |   7 ++
 drivers/gpu/drm/xe/xe_ggtt.c          |   5 +-
 drivers/gpu/drm/xe/xe_gt.c            |  21 +---
 drivers/gpu/drm/xe/xe_gt_debugfs.c    |   6 +-
 drivers/gpu/drm/xe/xe_gt_pagefault.c  |  10 +-
 drivers/gpu/drm/xe/xe_gt_types.h      |   7 --
 drivers/gpu/drm/xe/xe_guc_ads.c       |   5 +-
 drivers/gpu/drm/xe/xe_guc_ct.c        |   5 +-
 drivers/gpu/drm/xe/xe_guc_hwconfig.c  |   5 +-
 drivers/gpu/drm/xe/xe_guc_log.c       |   6 +-
 drivers/gpu/drm/xe/xe_guc_pc.c        |   5 +-
 drivers/gpu/drm/xe/xe_hw_engine.c     |   5 +-
 drivers/gpu/drm/xe/xe_lrc.c           |  13 +--
 drivers/gpu/drm/xe/xe_lrc_types.h     |   4 +-
 drivers/gpu/drm/xe/xe_migrate.c       |  23 ++--
 drivers/gpu/drm/xe/xe_migrate.h       |   5 +-
 drivers/gpu/drm/xe/xe_pt.c            | 144 ++++++++++++------------
 drivers/gpu/drm/xe/xe_pt.h            |  14 +--
 drivers/gpu/drm/xe/xe_sa.c            |  13 +--
 drivers/gpu/drm/xe/xe_sa.h            |   4 +-
 drivers/gpu/drm/xe/xe_tile.c          |   7 ++
 drivers/gpu/drm/xe/xe_uc_fw.c         |   5 +-
 drivers/gpu/drm/xe/xe_vm.c            | 152 +++++++++++++-------------
 drivers/gpu/drm/xe/xe_vm.h            |   2 +-
 drivers/gpu/drm/xe/xe_vm_types.h      |  12 +-
 include/uapi/drm/xe_drm.h             |   4 +-
 33 files changed, 296 insertions(+), 310 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_bo.c b/drivers/gpu/drm/xe/tests/xe_bo.c
index 6235a6c73a06..f933e5df6c12 100644
--- a/drivers/gpu/drm/xe/tests/xe_bo.c
+++ b/drivers/gpu/drm/xe/tests/xe_bo.c
@@ -173,7 +173,7 @@ static int evict_test_run_gt(struct xe_device *xe, struct xe_gt *gt, struct kuni
 {
 	struct xe_bo *bo, *external;
 	unsigned int bo_flags = XE_BO_CREATE_USER_BIT |
-		XE_BO_CREATE_VRAM_IF_DGFX(gt);
+		XE_BO_CREATE_VRAM_IF_DGFX(gt_to_tile(gt));
 	struct xe_vm *vm = xe_migrate_get_vm(xe_device_get_root_tile(xe)->primary_gt.migrate);
 	struct ww_acquire_ctx ww;
 	int err, i;
diff --git a/drivers/gpu/drm/xe/tests/xe_migrate.c b/drivers/gpu/drm/xe/tests/xe_migrate.c
index 4a3ca2960fd5..85ef9bacfe52 100644
--- a/drivers/gpu/drm/xe/tests/xe_migrate.c
+++ b/drivers/gpu/drm/xe/tests/xe_migrate.c
@@ -63,7 +63,7 @@ static int run_sanity_job(struct xe_migrate *m, struct xe_device *xe,
 
 static void
 sanity_populate_cb(struct xe_migrate_pt_update *pt_update,
-		   struct xe_gt *gt, struct iosys_map *map, void *dst,
+		   struct xe_tile *tile, struct iosys_map *map, void *dst,
 		   u32 qword_ofs, u32 num_qwords,
 		   const struct xe_vm_pgtable_update *update)
 {
@@ -76,7 +76,7 @@ sanity_populate_cb(struct xe_migrate_pt_update *pt_update,
 	for (i = 0; i < num_qwords; i++) {
 		value = (qword_ofs + i - update->ofs) * 0x1111111111111111ULL;
 		if (map)
-			xe_map_wr(gt_to_xe(gt), map, (qword_ofs + i) *
+			xe_map_wr(tile_to_xe(tile), map, (qword_ofs + i) *
 				  sizeof(u64), u64, value);
 		else
 			ptr[i] = value;
@@ -108,7 +108,7 @@ static void test_copy(struct xe_migrate *m, struct xe_bo *bo,
 	const char *str = big ? "Copying big bo" : "Copying small bo";
 	int err;
 
-	struct xe_bo *sysmem = xe_bo_create_locked(xe, m->gt, NULL,
+	struct xe_bo *sysmem = xe_bo_create_locked(xe, gt_to_tile(m->gt), NULL,
 						   bo->size,
 						   ttm_bo_type_kernel,
 						   XE_BO_CREATE_SYSTEM_BIT);
@@ -240,6 +240,7 @@ static void test_pt_update(struct xe_migrate *m, struct xe_bo *pt,
 static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 {
 	struct xe_gt *gt = m->gt;
+	struct xe_tile *tile = gt_to_tile(m->gt);
 	struct xe_device *xe = gt_to_xe(gt);
 	struct xe_bo *pt, *bo = m->pt_bo, *big, *tiny;
 	struct xe_res_cursor src_it;
@@ -256,18 +257,18 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 		return;
 	}
 
-	big = xe_bo_create_pin_map(xe, m->gt, m->eng->vm, SZ_4M,
+	big = xe_bo_create_pin_map(xe, tile, m->eng->vm, SZ_4M,
 				   ttm_bo_type_kernel,
-				   XE_BO_CREATE_VRAM_IF_DGFX(m->gt) |
+				   XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				   XE_BO_CREATE_PINNED_BIT);
 	if (IS_ERR(big)) {
 		KUNIT_FAIL(test, "Failed to allocate bo: %li\n", PTR_ERR(big));
 		goto vunmap;
 	}
 
-	pt = xe_bo_create_pin_map(xe, m->gt, m->eng->vm, XE_PAGE_SIZE,
+	pt = xe_bo_create_pin_map(xe, tile, m->eng->vm, XE_PAGE_SIZE,
 				  ttm_bo_type_kernel,
-				  XE_BO_CREATE_VRAM_IF_DGFX(m->gt) |
+				  XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				  XE_BO_CREATE_PINNED_BIT);
 	if (IS_ERR(pt)) {
 		KUNIT_FAIL(test, "Failed to allocate fake pt: %li\n",
@@ -275,10 +276,10 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 		goto free_big;
 	}
 
-	tiny = xe_bo_create_pin_map(xe, m->gt, m->eng->vm,
+	tiny = xe_bo_create_pin_map(xe, tile, m->eng->vm,
 				    2 * SZ_4K,
 				    ttm_bo_type_kernel,
-				    XE_BO_CREATE_VRAM_IF_DGFX(m->gt) |
+				    XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				    XE_BO_CREATE_PINNED_BIT);
 	if (IS_ERR(tiny)) {
 		KUNIT_FAIL(test, "Failed to allocate fake pt: %li\n",
@@ -286,7 +287,7 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 		goto free_pt;
 	}
 
-	bb = xe_bb_new(m->gt, 32, xe->info.supports_usm);
+	bb = xe_bb_new(gt, 32, xe->info.supports_usm);
 	if (IS_ERR(bb)) {
 		KUNIT_FAIL(test, "Failed to create batchbuffer: %li\n",
 			   PTR_ERR(bb));
diff --git a/drivers/gpu/drm/xe/xe_bb.c b/drivers/gpu/drm/xe/xe_bb.c
index bf7c94b769d7..f9b6b7adf99f 100644
--- a/drivers/gpu/drm/xe/xe_bb.c
+++ b/drivers/gpu/drm/xe/xe_bb.c
@@ -30,6 +30,7 @@ static int bb_prefetch(struct xe_gt *gt)
 
 struct xe_bb *xe_bb_new(struct xe_gt *gt, u32 dwords, bool usm)
 {
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_bb *bb = kmalloc(sizeof(*bb), GFP_KERNEL);
 	int err;
 
@@ -42,7 +43,7 @@ struct xe_bb *xe_bb_new(struct xe_gt *gt, u32 dwords, bool usm)
 	 * space to accomodate the platform-specific hardware prefetch
 	 * requirements.
 	 */
-	bb->bo = xe_sa_bo_new(!usm ? gt->kernel_bb_pool : gt->usm.bb_pool,
+	bb->bo = xe_sa_bo_new(!usm ? tile->mem.kernel_bb_pool : gt->usm.bb_pool,
 			      4 * (dwords + 1) + bb_prefetch(gt));
 	if (IS_ERR(bb->bo)) {
 		err = PTR_ERR(bb->bo);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 17de7cc5fe36..311fd83f1929 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -458,7 +458,7 @@ static int xe_bo_trigger_rebind(struct xe_device *xe, struct xe_bo *bo,
 			}
 
 			xe_vm_assert_held(vm);
-			if (list_empty(&vma->rebind_link) && vma->gt_present)
+			if (list_empty(&vma->rebind_link) && vma->tile_present)
 				list_add_tail(&vma->rebind_link, &vm->rebind_list);
 
 			if (vm_resv_locked)
@@ -565,7 +565,7 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
 	struct xe_bo *bo = ttm_to_xe_bo(ttm_bo);
 	struct ttm_resource *old_mem = ttm_bo->resource;
 	struct ttm_tt *ttm = ttm_bo->ttm;
-	struct xe_gt *gt = NULL;
+	struct xe_tile *tile = NULL;
 	struct dma_fence *fence;
 	bool move_lacks_source;
 	bool needs_clear;
@@ -635,15 +635,15 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
 		goto out;
 	}
 
-	if (bo->gt)
-		gt = bo->gt;
+	if (bo->tile)
+		tile = bo->tile;
 	else if (resource_is_vram(new_mem))
-		gt = &mem_type_to_tile(xe, new_mem->mem_type)->primary_gt;
+		tile = mem_type_to_tile(xe, new_mem->mem_type);
 	else if (resource_is_vram(old_mem))
-		gt = &mem_type_to_tile(xe, old_mem->mem_type)->primary_gt;
+		tile = mem_type_to_tile(xe, old_mem->mem_type);
 
-	XE_BUG_ON(!gt);
-	XE_BUG_ON(!gt->migrate);
+	XE_BUG_ON(!tile);
+	XE_BUG_ON(!tile->primary_gt.migrate);
 
 	trace_xe_bo_move(bo);
 	xe_device_mem_access_get(xe);
@@ -664,7 +664,7 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
 
 			/* Create a new VMAP once kernel BO back in VRAM */
 			if (!ret && resource_is_vram(new_mem)) {
-				void *new_addr = gt_to_tile(gt)->mem.vram.mapping +
+				void *new_addr = tile->mem.vram.mapping +
 					(new_mem->start << PAGE_SHIFT);
 
 				if (XE_WARN_ON(new_mem->start == XE_BO_INVALID_OFFSET)) {
@@ -681,9 +681,10 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
 		}
 	} else {
 		if (move_lacks_source)
-			fence = xe_migrate_clear(gt->migrate, bo, new_mem);
+			fence = xe_migrate_clear(tile->primary_gt.migrate, bo, new_mem);
 		else
-			fence = xe_migrate_copy(gt->migrate, bo, bo, old_mem, new_mem);
+			fence = xe_migrate_copy(tile->primary_gt.migrate,
+						bo, bo, old_mem, new_mem);
 		if (IS_ERR(fence)) {
 			ret = PTR_ERR(fence);
 			xe_device_mem_access_put(xe);
@@ -964,7 +965,7 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
 	WARN_ON(!list_empty(&bo->vmas));
 
 	if (bo->ggtt_node.size)
-		xe_ggtt_remove_bo(gt_to_tile(bo->gt)->mem.ggtt, bo);
+		xe_ggtt_remove_bo(bo->tile->mem.ggtt, bo);
 
 	if (bo->vm && xe_bo_is_user(bo))
 		xe_vm_put(bo->vm);
@@ -1086,7 +1087,7 @@ void xe_bo_free(struct xe_bo *bo)
 }
 
 struct xe_bo *__xe_bo_create_locked(struct xe_device *xe, struct xe_bo *bo,
-				    struct xe_gt *gt, struct dma_resv *resv,
+				    struct xe_tile *tile, struct dma_resv *resv,
 				    size_t size, enum ttm_bo_type type,
 				    u32 flags)
 {
@@ -1099,7 +1100,7 @@ struct xe_bo *__xe_bo_create_locked(struct xe_device *xe, struct xe_bo *bo,
 	int err;
 
 	/* Only kernel objects should set GT */
-	XE_BUG_ON(gt && type != ttm_bo_type_kernel);
+	XE_BUG_ON(tile && type != ttm_bo_type_kernel);
 
 	if (XE_WARN_ON(!size))
 		return ERR_PTR(-EINVAL);
@@ -1120,7 +1121,7 @@ struct xe_bo *__xe_bo_create_locked(struct xe_device *xe, struct xe_bo *bo,
 		alignment = SZ_4K >> PAGE_SHIFT;
 	}
 
-	bo->gt = gt;
+	bo->tile = tile;
 	bo->size = size;
 	bo->flags = flags;
 	bo->ttm.base.funcs = &xe_gem_object_funcs;
@@ -1202,7 +1203,7 @@ static int __xe_bo_fixed_placement(struct xe_device *xe,
 
 struct xe_bo *
 xe_bo_create_locked_range(struct xe_device *xe,
-			  struct xe_gt *gt, struct xe_vm *vm,
+			  struct xe_tile *tile, struct xe_vm *vm,
 			  size_t size, u64 start, u64 end,
 			  enum ttm_bo_type type, u32 flags)
 {
@@ -1225,7 +1226,7 @@ xe_bo_create_locked_range(struct xe_device *xe,
 		}
 	}
 
-	bo = __xe_bo_create_locked(xe, bo, gt, vm ? &vm->resv : NULL, size,
+	bo = __xe_bo_create_locked(xe, bo, tile, vm ? &vm->resv : NULL, size,
 				   type, flags);
 	if (IS_ERR(bo))
 		return bo;
@@ -1235,16 +1236,16 @@ xe_bo_create_locked_range(struct xe_device *xe,
 	bo->vm = vm;
 
 	if (bo->flags & XE_BO_CREATE_GGTT_BIT) {
-		if (!gt && flags & XE_BO_CREATE_STOLEN_BIT)
-			gt = xe_device_get_gt(xe, 0);
+		if (!tile && flags & XE_BO_CREATE_STOLEN_BIT)
+			tile = xe_device_get_root_tile(xe);
 
-		XE_BUG_ON(!gt);
+		XE_BUG_ON(!tile);
 
 		if (flags & XE_BO_FIXED_PLACEMENT_BIT) {
-			err = xe_ggtt_insert_bo_at(gt_to_tile(gt)->mem.ggtt, bo,
+			err = xe_ggtt_insert_bo_at(tile->mem.ggtt, bo,
 						   start + bo->size, U64_MAX);
 		} else {
-			err = xe_ggtt_insert_bo(gt_to_tile(gt)->mem.ggtt, bo);
+			err = xe_ggtt_insert_bo(tile->mem.ggtt, bo);
 		}
 		if (err)
 			goto err_unlock_put_bo;
@@ -1258,18 +1259,18 @@ xe_bo_create_locked_range(struct xe_device *xe,
 	return ERR_PTR(err);
 }
 
-struct xe_bo *xe_bo_create_locked(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create_locked(struct xe_device *xe, struct xe_tile *tile,
 				  struct xe_vm *vm, size_t size,
 				  enum ttm_bo_type type, u32 flags)
 {
-	return xe_bo_create_locked_range(xe, gt, vm, size, 0, ~0ULL, type, flags);
+	return xe_bo_create_locked_range(xe, tile, vm, size, 0, ~0ULL, type, flags);
 }
 
-struct xe_bo *xe_bo_create(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create(struct xe_device *xe, struct xe_tile *tile,
 			   struct xe_vm *vm, size_t size,
 			   enum ttm_bo_type type, u32 flags)
 {
-	struct xe_bo *bo = xe_bo_create_locked(xe, gt, vm, size, type, flags);
+	struct xe_bo *bo = xe_bo_create_locked(xe, tile, vm, size, type, flags);
 
 	if (!IS_ERR(bo))
 		xe_bo_unlock_vm_held(bo);
@@ -1277,7 +1278,7 @@ struct xe_bo *xe_bo_create(struct xe_device *xe, struct xe_gt *gt,
 	return bo;
 }
 
-struct xe_bo *xe_bo_create_pin_map_at(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create_pin_map_at(struct xe_device *xe, struct xe_tile *tile,
 				      struct xe_vm *vm,
 				      size_t size, u64 offset,
 				      enum ttm_bo_type type, u32 flags)
@@ -1291,7 +1292,7 @@ struct xe_bo *xe_bo_create_pin_map_at(struct xe_device *xe, struct xe_gt *gt,
 	    xe_ttm_stolen_cpu_access_needs_ggtt(xe))
 		flags |= XE_BO_CREATE_GGTT_BIT;
 
-	bo = xe_bo_create_locked_range(xe, gt, vm, size, start, end, type, flags);
+	bo = xe_bo_create_locked_range(xe, tile, vm, size, start, end, type, flags);
 	if (IS_ERR(bo))
 		return bo;
 
@@ -1315,18 +1316,18 @@ struct xe_bo *xe_bo_create_pin_map_at(struct xe_device *xe, struct xe_gt *gt,
 	return ERR_PTR(err);
 }
 
-struct xe_bo *xe_bo_create_pin_map(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create_pin_map(struct xe_device *xe, struct xe_tile *tile,
 				   struct xe_vm *vm, size_t size,
 				   enum ttm_bo_type type, u32 flags)
 {
-	return xe_bo_create_pin_map_at(xe, gt, vm, size, ~0ull, type, flags);
+	return xe_bo_create_pin_map_at(xe, tile, vm, size, ~0ull, type, flags);
 }
 
-struct xe_bo *xe_bo_create_from_data(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create_from_data(struct xe_device *xe, struct xe_tile *tile,
 				     const void *data, size_t size,
 				     enum ttm_bo_type type, u32 flags)
 {
-	struct xe_bo *bo = xe_bo_create_pin_map(xe, gt, NULL,
+	struct xe_bo *bo = xe_bo_create_pin_map(xe, tile, NULL,
 						ALIGN(size, PAGE_SIZE),
 						type, flags);
 	if (IS_ERR(bo))
@@ -1957,7 +1958,7 @@ int xe_bo_dumb_create(struct drm_file *file_priv,
 			   page_size);
 
 	bo = xe_bo_create(xe, NULL, NULL, args->size, ttm_bo_type_device,
-			  XE_BO_CREATE_VRAM_IF_DGFX(to_gt(xe)) |
+			  XE_BO_CREATE_VRAM_IF_DGFX(xe_device_get_root_tile(xe)) |
 			  XE_BO_CREATE_USER_BIT | XE_BO_SCANOUT_BIT);
 	if (IS_ERR(bo))
 		return PTR_ERR(bo);
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 2cad82510201..4b5f23ca6501 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -21,8 +21,8 @@
 					 XE_BO_CREATE_VRAM1_BIT)
 /* -- */
 #define XE_BO_CREATE_STOLEN_BIT		BIT(4)
-#define XE_BO_CREATE_VRAM_IF_DGFX(gt) \
-	(IS_DGFX(gt_to_xe(gt)) ? XE_BO_CREATE_VRAM0_BIT << gt_to_tile(gt)->id : \
+#define XE_BO_CREATE_VRAM_IF_DGFX(tile) \
+	(IS_DGFX(tile_to_xe(tile)) ? XE_BO_CREATE_VRAM0_BIT << (tile)->id : \
 	 XE_BO_CREATE_SYSTEM_BIT)
 #define XE_BO_CREATE_GGTT_BIT		BIT(5)
 #define XE_BO_CREATE_IGNORE_MIN_PAGE_SIZE_BIT BIT(6)
@@ -81,27 +81,27 @@ struct xe_bo *xe_bo_alloc(void);
 void xe_bo_free(struct xe_bo *bo);
 
 struct xe_bo *__xe_bo_create_locked(struct xe_device *xe, struct xe_bo *bo,
-				    struct xe_gt *gt, struct dma_resv *resv,
+				    struct xe_tile *tile, struct dma_resv *resv,
 				    size_t size, enum ttm_bo_type type,
 				    u32 flags);
 struct xe_bo *
 xe_bo_create_locked_range(struct xe_device *xe,
-			  struct xe_gt *gt, struct xe_vm *vm,
+			  struct xe_tile *tile, struct xe_vm *vm,
 			  size_t size, u64 start, u64 end,
 			  enum ttm_bo_type type, u32 flags);
-struct xe_bo *xe_bo_create_locked(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create_locked(struct xe_device *xe, struct xe_tile *tile,
 				  struct xe_vm *vm, size_t size,
 				  enum ttm_bo_type type, u32 flags);
-struct xe_bo *xe_bo_create(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create(struct xe_device *xe, struct xe_tile *tile,
 			   struct xe_vm *vm, size_t size,
 			   enum ttm_bo_type type, u32 flags);
-struct xe_bo *xe_bo_create_pin_map(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create_pin_map(struct xe_device *xe, struct xe_tile *tile,
 				   struct xe_vm *vm, size_t size,
 				   enum ttm_bo_type type, u32 flags);
-struct xe_bo *xe_bo_create_pin_map_at(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create_pin_map_at(struct xe_device *xe, struct xe_tile *tile,
 				      struct xe_vm *vm, size_t size, u64 offset,
 				      enum ttm_bo_type type, u32 flags);
-struct xe_bo *xe_bo_create_from_data(struct xe_device *xe, struct xe_gt *gt,
+struct xe_bo *xe_bo_create_from_data(struct xe_device *xe, struct xe_tile *tile,
 				     const void *data, size_t size,
 				     enum ttm_bo_type type, u32 flags);
 
diff --git a/drivers/gpu/drm/xe/xe_bo_evict.c b/drivers/gpu/drm/xe/xe_bo_evict.c
index a72963c54bf3..9226195bd560 100644
--- a/drivers/gpu/drm/xe/xe_bo_evict.c
+++ b/drivers/gpu/drm/xe/xe_bo_evict.c
@@ -149,7 +149,7 @@ int xe_bo_restore_kernel(struct xe_device *xe)
 		}
 
 		if (bo->flags & XE_BO_CREATE_GGTT_BIT) {
-			struct xe_tile *tile = gt_to_tile(bo->gt);
+			struct xe_tile *tile = bo->tile;
 
 			mutex_lock(&tile->mem.ggtt->lock);
 			xe_ggtt_map_bo(tile->mem.ggtt, bo);
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 06de3330211d..f6ee920303af 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -29,8 +29,8 @@ struct xe_bo {
 	u32 flags;
 	/** @vm: VM this BO is attached to, for extobj this will be NULL */
 	struct xe_vm *vm;
-	/** @gt: GT this BO is attached to (kernel BO only) */
-	struct xe_gt *gt;
+	/** @tile: Tile this BO is attached to (kernel BO only) */
+	struct xe_tile *tile;
 	/** @vmas: List of VMAs for this BO */
 	struct list_head vmas;
 	/** @placements: valid placements for this BO */
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index ab8310525f7b..f25165c2e983 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -134,6 +134,13 @@ struct xe_tile {
 
 		/** @ggtt: Global graphics translation table */
 		struct xe_ggtt *ggtt;
+
+		/**
+		 * @kernel_bb_pool: Pool from which batchbuffers are allocated.
+		 *
+		 * Media GT shares a pool with its primary GT.
+		 */
+		struct xe_sa_manager *kernel_bb_pool;
 	} mem;
 };
 
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index eae20b50497e..d2035142f41d 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -151,7 +151,6 @@ static void xe_ggtt_initial_clear(struct xe_ggtt *ggtt)
 int xe_ggtt_init(struct xe_ggtt *ggtt)
 {
 	struct xe_device *xe = tile_to_xe(ggtt->tile);
-	struct xe_gt *gt = &ggtt->tile->primary_gt;
 	unsigned int flags;
 	int err;
 
@@ -164,9 +163,9 @@ int xe_ggtt_init(struct xe_ggtt *ggtt)
 	if (ggtt->flags & XE_GGTT_FLAGS_64K)
 		flags |= XE_BO_CREATE_SYSTEM_BIT;
 	else
-		flags |= XE_BO_CREATE_VRAM_IF_DGFX(gt);
+		flags |= XE_BO_CREATE_VRAM_IF_DGFX(ggtt->tile);
 
-	ggtt->scratch = xe_bo_create_pin_map(xe, gt, NULL, XE_PAGE_SIZE,
+	ggtt->scratch = xe_bo_create_pin_map(xe, ggtt->tile, NULL, XE_PAGE_SIZE,
 					     ttm_bo_type_kernel,
 					     flags);
 
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index 419fc471053c..74023a5dc8b2 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -95,7 +95,7 @@ static int emit_nop_job(struct xe_gt *gt, struct xe_engine *e)
 	if (IS_ERR(bb))
 		return PTR_ERR(bb);
 
-	batch_ofs = xe_bo_ggtt_addr(gt->kernel_bb_pool->bo);
+	batch_ofs = xe_bo_ggtt_addr(gt_to_tile(gt)->mem.kernel_bb_pool->bo);
 	job = xe_bb_create_wa_job(e, bb, batch_ofs);
 	if (IS_ERR(job)) {
 		xe_bb_free(bb, NULL);
@@ -144,7 +144,7 @@ static int emit_wa_job(struct xe_gt *gt, struct xe_engine *e)
 		}
 	}
 
-	batch_ofs = xe_bo_ggtt_addr(gt->kernel_bb_pool->bo);
+	batch_ofs = xe_bo_ggtt_addr(gt_to_tile(gt)->mem.kernel_bb_pool->bo);
 	job = xe_bb_create_wa_job(e, bb, batch_ofs);
 	if (IS_ERR(job)) {
 		xe_bb_free(bb, NULL);
@@ -370,31 +370,16 @@ static int all_fw_domain_init(struct xe_gt *gt)
 		goto err_force_wake;
 
 	if (!xe_gt_is_media_type(gt)) {
-		gt->kernel_bb_pool = xe_sa_bo_manager_init(gt, SZ_1M, 16);
-		if (IS_ERR(gt->kernel_bb_pool)) {
-			err = PTR_ERR(gt->kernel_bb_pool);
-			goto err_force_wake;
-		}
-
 		/*
 		 * USM has its only SA pool to non-block behind user operations
 		 */
 		if (gt_to_xe(gt)->info.supports_usm) {
-			gt->usm.bb_pool = xe_sa_bo_manager_init(gt, SZ_1M, 16);
+			gt->usm.bb_pool = xe_sa_bo_manager_init(gt_to_tile(gt), SZ_1M, 16);
 			if (IS_ERR(gt->usm.bb_pool)) {
 				err = PTR_ERR(gt->usm.bb_pool);
 				goto err_force_wake;
 			}
 		}
-	} else {
-		struct xe_gt *full_gt = xe_find_full_gt(gt);
-
-		/*
-		 * Media GT's kernel_bb_pool is only used while recording the
-		 * default context during GT init.  The USM pool should never
-		 * be needed on the media GT.
-		 */
-		gt->kernel_bb_pool = full_gt->kernel_bb_pool;
 	}
 
 	if (!xe_gt_is_media_type(gt)) {
diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
index 1114254bc519..b5a5538ae630 100644
--- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
@@ -64,11 +64,11 @@ static int force_reset(struct seq_file *m, void *data)
 
 static int sa_info(struct seq_file *m, void *data)
 {
-	struct xe_gt *gt = node_to_gt(m->private);
+	struct xe_tile *tile = gt_to_tile(node_to_gt(m->private));
 	struct drm_printer p = drm_seq_file_printer(m);
 
-	drm_suballoc_dump_debug_info(&gt->kernel_bb_pool->base, &p,
-				     gt->kernel_bb_pool->gpu_addr);
+	drm_suballoc_dump_debug_info(&tile->mem.kernel_bb_pool->base, &p,
+				     tile->mem.kernel_bb_pool->gpu_addr);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/xe/xe_gt_pagefault.c b/drivers/gpu/drm/xe/xe_gt_pagefault.c
index f4f3d95ae6b1..1c2b23ae89cf 100644
--- a/drivers/gpu/drm/xe/xe_gt_pagefault.c
+++ b/drivers/gpu/drm/xe/xe_gt_pagefault.c
@@ -71,8 +71,8 @@ static bool access_is_atomic(enum access_type access_type)
 
 static bool vma_is_valid(struct xe_gt *gt, struct xe_vma *vma)
 {
-	return BIT(gt->info.id) & vma->gt_present &&
-		!(BIT(gt->info.id) & vma->usm.gt_invalidated);
+	return BIT(gt_to_tile(gt)->id) & vma->tile_present &&
+		!(BIT(gt->info.id) & vma->usm.tile_invalidated);
 }
 
 static bool vma_matches(struct xe_vma *vma, struct xe_vma *lookup)
@@ -208,8 +208,8 @@ static int handle_pagefault(struct xe_gt *gt, struct pagefault *pf)
 
 	/* Bind VMA only to the GT that has faulted */
 	trace_xe_vma_pf_bind(vma);
-	fence = __xe_pt_bind_vma(gt, vma, xe_gt_migrate_engine(gt), NULL, 0,
-				 vma->gt_present & BIT(gt->info.id));
+	fence = __xe_pt_bind_vma(tile, vma, xe_gt_migrate_engine(gt), NULL, 0,
+				 vma->tile_present & BIT(tile->id));
 	if (IS_ERR(fence)) {
 		ret = PTR_ERR(fence);
 		goto unlock_dma_resv;
@@ -225,7 +225,7 @@ static int handle_pagefault(struct xe_gt *gt, struct pagefault *pf)
 
 	if (xe_vma_is_userptr(vma))
 		ret = xe_vma_userptr_check_repin(vma);
-	vma->usm.gt_invalidated &= ~BIT(gt->info.id);
+	vma->usm.tile_invalidated &= ~BIT(gt_to_tile(gt)->id);
 
 unlock_dma_resv:
 	if (only_needs_bo_lock(bo))
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index a040ec896e70..c44560b6dc71 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -278,13 +278,6 @@ struct xe_gt {
 	/** @hw_engines: hardware engines on the GT */
 	struct xe_hw_engine hw_engines[XE_NUM_HW_ENGINES];
 
-	/**
-	 * @kernel_bb_pool: Pool from which batchbuffers are allocated.
-	 *
-	 * Media GT shares a pool with its primary GT.
-	 */
-	struct xe_sa_manager *kernel_bb_pool;
-
 	/** @migrate: Migration helper for vram blits and clearing */
 	struct xe_migrate *migrate;
 
diff --git a/drivers/gpu/drm/xe/xe_guc_ads.c b/drivers/gpu/drm/xe/xe_guc_ads.c
index 6d550d746909..dd69d097b920 100644
--- a/drivers/gpu/drm/xe/xe_guc_ads.c
+++ b/drivers/gpu/drm/xe/xe_guc_ads.c
@@ -273,16 +273,17 @@ int xe_guc_ads_init(struct xe_guc_ads *ads)
 {
 	struct xe_device *xe = ads_to_xe(ads);
 	struct xe_gt *gt = ads_to_gt(ads);
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_bo *bo;
 	int err;
 
 	ads->golden_lrc_size = calculate_golden_lrc_size(ads);
 	ads->regset_size = calculate_regset_size(gt);
 
-	bo = xe_bo_create_pin_map(xe, gt, NULL, guc_ads_size(ads) +
+	bo = xe_bo_create_pin_map(xe, tile, NULL, guc_ads_size(ads) +
 				  MAX_GOLDEN_LRC_SIZE,
 				  ttm_bo_type_kernel,
-				  XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+				  XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				  XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(bo))
 		return PTR_ERR(bo);
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index 9dc906f2651a..137c184df487 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -130,6 +130,7 @@ int xe_guc_ct_init(struct xe_guc_ct *ct)
 {
 	struct xe_device *xe = ct_to_xe(ct);
 	struct xe_gt *gt = ct_to_gt(ct);
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_bo *bo;
 	int err;
 
@@ -145,9 +146,9 @@ int xe_guc_ct_init(struct xe_guc_ct *ct)
 
 	primelockdep(ct);
 
-	bo = xe_bo_create_pin_map(xe, gt, NULL, guc_ct_size(),
+	bo = xe_bo_create_pin_map(xe, tile, NULL, guc_ct_size(),
 				  ttm_bo_type_kernel,
-				  XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+				  XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				  XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(bo))
 		return PTR_ERR(bo);
diff --git a/drivers/gpu/drm/xe/xe_guc_hwconfig.c b/drivers/gpu/drm/xe/xe_guc_hwconfig.c
index a6982f323ed1..c8f875e970ab 100644
--- a/drivers/gpu/drm/xe/xe_guc_hwconfig.c
+++ b/drivers/gpu/drm/xe/xe_guc_hwconfig.c
@@ -70,6 +70,7 @@ int xe_guc_hwconfig_init(struct xe_guc *guc)
 {
 	struct xe_device *xe = guc_to_xe(guc);
 	struct xe_gt *gt = guc_to_gt(guc);
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_bo *bo;
 	u32 size;
 	int err;
@@ -94,9 +95,9 @@ int xe_guc_hwconfig_init(struct xe_guc *guc)
 	if (!size)
 		return -EINVAL;
 
-	bo = xe_bo_create_pin_map(xe, gt, NULL, PAGE_ALIGN(size),
+	bo = xe_bo_create_pin_map(xe, tile, NULL, PAGE_ALIGN(size),
 				  ttm_bo_type_kernel,
-				  XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+				  XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				  XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(bo))
 		return PTR_ERR(bo);
diff --git a/drivers/gpu/drm/xe/xe_guc_log.c b/drivers/gpu/drm/xe/xe_guc_log.c
index 9a7b5d5906c1..403aaafcaba6 100644
--- a/drivers/gpu/drm/xe/xe_guc_log.c
+++ b/drivers/gpu/drm/xe/xe_guc_log.c
@@ -87,13 +87,13 @@ static void guc_log_fini(struct drm_device *drm, void *arg)
 int xe_guc_log_init(struct xe_guc_log *log)
 {
 	struct xe_device *xe = log_to_xe(log);
-	struct xe_gt *gt = log_to_gt(log);
+	struct xe_tile *tile = gt_to_tile(log_to_gt(log));
 	struct xe_bo *bo;
 	int err;
 
-	bo = xe_bo_create_pin_map(xe, gt, NULL, guc_log_size(),
+	bo = xe_bo_create_pin_map(xe, tile, NULL, guc_log_size(),
 				  ttm_bo_type_kernel,
-				  XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+				  XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				  XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(bo))
 		return PTR_ERR(bo);
diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
index e799faa1c6b8..67faa9ee0006 100644
--- a/drivers/gpu/drm/xe/xe_guc_pc.c
+++ b/drivers/gpu/drm/xe/xe_guc_pc.c
@@ -888,6 +888,7 @@ static void pc_fini(struct drm_device *drm, void *arg)
 int xe_guc_pc_init(struct xe_guc_pc *pc)
 {
 	struct xe_gt *gt = pc_to_gt(pc);
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_device *xe = gt_to_xe(gt);
 	struct xe_bo *bo;
 	u32 size = PAGE_ALIGN(sizeof(struct slpc_shared_data));
@@ -895,9 +896,9 @@ int xe_guc_pc_init(struct xe_guc_pc *pc)
 
 	mutex_init(&pc->freq_lock);
 
-	bo = xe_bo_create_pin_map(xe, gt, NULL, size,
+	bo = xe_bo_create_pin_map(xe, tile, NULL, size,
 				  ttm_bo_type_kernel,
-				  XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+				  XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				  XE_BO_CREATE_GGTT_BIT);
 
 	if (IS_ERR(bo))
diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
index 7e4b0b465244..b12f65a2bab3 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine.c
+++ b/drivers/gpu/drm/xe/xe_hw_engine.c
@@ -373,6 +373,7 @@ static int hw_engine_init(struct xe_gt *gt, struct xe_hw_engine *hwe,
 			  enum xe_hw_engine_id id)
 {
 	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_tile *tile = gt_to_tile(gt);
 	int err;
 
 	XE_BUG_ON(id >= ARRAY_SIZE(engine_infos) || !engine_infos[id].name);
@@ -381,8 +382,8 @@ static int hw_engine_init(struct xe_gt *gt, struct xe_hw_engine *hwe,
 	xe_reg_sr_apply_mmio(&hwe->reg_sr, gt);
 	xe_reg_sr_apply_whitelist(&hwe->reg_whitelist, hwe->mmio_base, gt);
 
-	hwe->hwsp = xe_bo_create_pin_map(xe, gt, NULL, SZ_4K, ttm_bo_type_kernel,
-					 XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+	hwe->hwsp = xe_bo_create_pin_map(xe, tile, NULL, SZ_4K, ttm_bo_type_kernel,
+					 XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 					 XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(hwe->hwsp)) {
 		err = PTR_ERR(hwe->hwsp);
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index ae605e7805de..8f25a38f36a5 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -592,7 +592,7 @@ static void *empty_lrc_data(struct xe_hw_engine *hwe)
 
 static void xe_lrc_set_ppgtt(struct xe_lrc *lrc, struct xe_vm *vm)
 {
-	u64 desc = xe_vm_pdp4_descriptor(vm, lrc->full_gt);
+	u64 desc = xe_vm_pdp4_descriptor(vm, lrc->tile);
 
 	xe_lrc_write_ctx_reg(lrc, CTX_PDP0_UDW, upper_32_bits(desc));
 	xe_lrc_write_ctx_reg(lrc, CTX_PDP0_LDW, lower_32_bits(desc));
@@ -607,6 +607,7 @@ int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
 		struct xe_engine *e, struct xe_vm *vm, u32 ring_size)
 {
 	struct xe_gt *gt = hwe->gt;
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_device *xe = gt_to_xe(gt);
 	struct iosys_map map;
 	void *init_data = NULL;
@@ -619,19 +620,15 @@ int xe_lrc_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe,
 	 * FIXME: Perma-pinning LRC as we don't yet support moving GGTT address
 	 * via VM bind calls.
 	 */
-	lrc->bo = xe_bo_create_pin_map(xe, hwe->gt, vm,
+	lrc->bo = xe_bo_create_pin_map(xe, tile, vm,
 				      ring_size + xe_lrc_size(xe, hwe->class),
 				      ttm_bo_type_kernel,
-				      XE_BO_CREATE_VRAM_IF_DGFX(hwe->gt) |
+				      XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				      XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(lrc->bo))
 		return PTR_ERR(lrc->bo);
 
-	if (xe_gt_is_media_type(hwe->gt))
-		lrc->full_gt = xe_find_full_gt(hwe->gt);
-	else
-		lrc->full_gt = hwe->gt;
-
+	lrc->tile = gt_to_tile(hwe->gt);
 	lrc->ring.size = ring_size;
 	lrc->ring.tail = 0;
 
diff --git a/drivers/gpu/drm/xe/xe_lrc_types.h b/drivers/gpu/drm/xe/xe_lrc_types.h
index 8fe08535873d..78220336062c 100644
--- a/drivers/gpu/drm/xe/xe_lrc_types.h
+++ b/drivers/gpu/drm/xe/xe_lrc_types.h
@@ -20,8 +20,8 @@ struct xe_lrc {
 	 */
 	struct xe_bo *bo;
 
-	/** @full_gt: full GT which this LRC belongs to */
-	struct xe_gt *full_gt;
+	/** @tile: tile which this LRC belongs to */
+	struct xe_tile *tile;
 
 	/** @flags: LRC flags */
 	u32 flags;
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index 1853c852ebef..9de7bdeee85c 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -129,6 +129,7 @@ static u64 xe_migrate_vram_ofs(u64 addr)
 static int xe_migrate_create_cleared_bo(struct xe_migrate *m, struct xe_vm *vm)
 {
 	struct xe_gt *gt = m->gt;
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_device *xe = vm->xe;
 	size_t cleared_size;
 	u64 vram_addr;
@@ -139,9 +140,9 @@ static int xe_migrate_create_cleared_bo(struct xe_migrate *m, struct xe_vm *vm)
 
 	cleared_size = xe_device_ccs_bytes(xe, MAX_PREEMPTDISABLE_TRANSFER);
 	cleared_size = PAGE_ALIGN(cleared_size);
-	m->cleared_bo = xe_bo_create_pin_map(xe, gt, vm, cleared_size,
+	m->cleared_bo = xe_bo_create_pin_map(xe, tile, vm, cleared_size,
 					     ttm_bo_type_kernel,
-					     XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+					     XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 					     XE_BO_CREATE_PINNED_BIT);
 	if (IS_ERR(m->cleared_bo))
 		return PTR_ERR(m->cleared_bo);
@@ -161,7 +162,8 @@ static int xe_migrate_prepare_vm(struct xe_gt *gt, struct xe_migrate *m,
 	u32 num_entries = NUM_PT_SLOTS, num_level = vm->pt_root[id]->level;
 	u32 map_ofs, level, i;
 	struct xe_device *xe = gt_to_xe(m->gt);
-	struct xe_bo *bo, *batch = gt->kernel_bb_pool->bo;
+	struct xe_tile *tile = gt_to_tile(m->gt);
+	struct xe_bo *bo, *batch = tile->mem.kernel_bb_pool->bo;
 	u64 entry;
 	int ret;
 
@@ -175,10 +177,10 @@ static int xe_migrate_prepare_vm(struct xe_gt *gt, struct xe_migrate *m,
 	/* Need to be sure everything fits in the first PT, or create more */
 	XE_BUG_ON(m->batch_base_ofs + batch->size >= SZ_2M);
 
-	bo = xe_bo_create_pin_map(vm->xe, m->gt, vm,
+	bo = xe_bo_create_pin_map(vm->xe, tile, vm,
 				  num_entries * XE_PAGE_SIZE,
 				  ttm_bo_type_kernel,
-				  XE_BO_CREATE_VRAM_IF_DGFX(m->gt) |
+				  XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				  XE_BO_CREATE_PINNED_BIT);
 	if (IS_ERR(bo))
 		return PTR_ERR(bo);
@@ -984,7 +986,7 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
 	return fence;
 }
 
-static void write_pgtable(struct xe_gt *gt, struct xe_bb *bb, u64 ppgtt_ofs,
+static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs,
 			  const struct xe_vm_pgtable_update *update,
 			  struct xe_migrate_pt_update *pt_update)
 {
@@ -1023,7 +1025,7 @@ static void write_pgtable(struct xe_gt *gt, struct xe_bb *bb, u64 ppgtt_ofs,
 			(chunk * 2 + 1);
 		bb->cs[bb->len++] = lower_32_bits(addr);
 		bb->cs[bb->len++] = upper_32_bits(addr);
-		ops->populate(pt_update, gt, NULL, bb->cs + bb->len, ofs, chunk,
+		ops->populate(pt_update, tile, NULL, bb->cs + bb->len, ofs, chunk,
 			      update);
 
 		bb->len += chunk * 2;
@@ -1081,7 +1083,7 @@ xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
 	for (i = 0; i < num_updates; i++) {
 		const struct xe_vm_pgtable_update *update = &updates[i];
 
-		ops->populate(pt_update, m->gt, &update->pt_bo->vmap, NULL,
+		ops->populate(pt_update, gt_to_tile(m->gt), &update->pt_bo->vmap, NULL,
 			      update->ofs, update->qwords, update);
 	}
 
@@ -1149,6 +1151,7 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
 {
 	const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
 	struct xe_gt *gt = m->gt;
+	struct xe_tile *tile = gt_to_tile(m->gt);
 	struct xe_device *xe = gt_to_xe(gt);
 	struct xe_sched_job *job;
 	struct dma_fence *fence;
@@ -1243,7 +1246,7 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
 		addr = xe_migrate_vm_addr(ppgtt_ofs, 0) +
 			(page_ofs / sizeof(u64)) * XE_PAGE_SIZE;
 		for (i = 0; i < num_updates; i++)
-			write_pgtable(m->gt, bb, addr + i * XE_PAGE_SIZE,
+			write_pgtable(tile, bb, addr + i * XE_PAGE_SIZE,
 				      &updates[i], pt_update);
 	} else {
 		/* phys pages, no preamble required */
@@ -1253,7 +1256,7 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
 		/* Preemption is enabled again by the ring ops. */
 		emit_arb_clear(bb);
 		for (i = 0; i < num_updates; i++)
-			write_pgtable(m->gt, bb, 0, &updates[i], pt_update);
+			write_pgtable(tile, bb, 0, &updates[i], pt_update);
 	}
 
 	if (!eng)
diff --git a/drivers/gpu/drm/xe/xe_migrate.h b/drivers/gpu/drm/xe/xe_migrate.h
index c283b626c21c..e627f4023d5a 100644
--- a/drivers/gpu/drm/xe/xe_migrate.h
+++ b/drivers/gpu/drm/xe/xe_migrate.h
@@ -19,6 +19,7 @@ struct xe_migrate;
 struct xe_migrate_pt_update;
 struct xe_sync_entry;
 struct xe_pt;
+struct xe_tile;
 struct xe_vm;
 struct xe_vm_pgtable_update;
 struct xe_vma;
@@ -31,7 +32,7 @@ struct xe_migrate_pt_update_ops {
 	/**
 	 * @populate: Populate a command buffer or page-table with ptes.
 	 * @pt_update: Embeddable callback argument.
-	 * @gt: The gt for the current operation.
+	 * @tile: The tile for the current operation.
 	 * @map: struct iosys_map into the memory to be populated.
 	 * @pos: If @map is NULL, map into the memory to be populated.
 	 * @ofs: qword offset into @map, unused if @map is NULL.
@@ -43,7 +44,7 @@ struct xe_migrate_pt_update_ops {
 	 * page-tables with PTEs.
 	 */
 	void (*populate)(struct xe_migrate_pt_update *pt_update,
-			 struct xe_gt *gt, struct iosys_map *map,
+			 struct xe_tile *tile, struct iosys_map *map,
 			 void *pos, u32 ofs, u32 num_qwords,
 			 const struct xe_vm_pgtable_update *update);
 
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index e2cd1946af5a..094058cb5f93 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -165,12 +165,10 @@ u64 gen8_pte_encode(struct xe_vma *vma, struct xe_bo *bo,
 	return __gen8_pte_encode(pte, cache, flags, pt_level);
 }
 
-static u64 __xe_pt_empty_pte(struct xe_gt *gt, struct xe_vm *vm,
+static u64 __xe_pt_empty_pte(struct xe_tile *tile, struct xe_vm *vm,
 			     unsigned int level)
 {
-	u8 id = gt->info.id;
-
-	XE_BUG_ON(xe_gt_is_media_type(gt));
+	u8 id = tile->id;
 
 	if (!vm->scratch_bo[id])
 		return 0;
@@ -189,7 +187,7 @@ static u64 __xe_pt_empty_pte(struct xe_gt *gt, struct xe_vm *vm,
 /**
  * xe_pt_create() - Create a page-table.
  * @vm: The vm to create for.
- * @gt: The gt to create for.
+ * @tile: The tile to create for.
  * @level: The page-table level.
  *
  * Allocate and initialize a single struct xe_pt metadata structure. Also
@@ -201,7 +199,7 @@ static u64 __xe_pt_empty_pte(struct xe_gt *gt, struct xe_vm *vm,
  * Return: A valid struct xe_pt pointer on success, Pointer error code on
  * error.
  */
-struct xe_pt *xe_pt_create(struct xe_vm *vm, struct xe_gt *gt,
+struct xe_pt *xe_pt_create(struct xe_vm *vm, struct xe_tile *tile,
 			   unsigned int level)
 {
 	struct xe_pt *pt;
@@ -215,9 +213,9 @@ struct xe_pt *xe_pt_create(struct xe_vm *vm, struct xe_gt *gt,
 	if (!pt)
 		return ERR_PTR(-ENOMEM);
 
-	bo = xe_bo_create_pin_map(vm->xe, gt, vm, SZ_4K,
+	bo = xe_bo_create_pin_map(vm->xe, tile, vm, SZ_4K,
 				  ttm_bo_type_kernel,
-				  XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+				  XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				  XE_BO_CREATE_IGNORE_MIN_PAGE_SIZE_BIT |
 				  XE_BO_CREATE_PINNED_BIT |
 				  XE_BO_CREATE_NO_RESV_EVICT);
@@ -241,30 +239,28 @@ struct xe_pt *xe_pt_create(struct xe_vm *vm, struct xe_gt *gt,
 /**
  * xe_pt_populate_empty() - Populate a page-table bo with scratch- or zero
  * entries.
- * @gt: The gt the scratch pagetable of which to use.
+ * @tile: The tile the scratch pagetable of which to use.
  * @vm: The vm we populate for.
  * @pt: The pagetable the bo of which to initialize.
  *
- * Populate the page-table bo of @pt with entries pointing into the gt's
+ * Populate the page-table bo of @pt with entries pointing into the tile's
  * scratch page-table tree if any. Otherwise populate with zeros.
  */
-void xe_pt_populate_empty(struct xe_gt *gt, struct xe_vm *vm,
+void xe_pt_populate_empty(struct xe_tile *tile, struct xe_vm *vm,
 			  struct xe_pt *pt)
 {
 	struct iosys_map *map = &pt->bo->vmap;
 	u64 empty;
 	int i;
 
-	XE_BUG_ON(xe_gt_is_media_type(gt));
-
-	if (!vm->scratch_bo[gt->info.id]) {
+	if (!vm->scratch_bo[tile->id]) {
 		/*
 		 * FIXME: Some memory is allocated already allocated to zero?
 		 * Find out which memory that is and avoid this memset...
 		 */
 		xe_map_memset(vm->xe, map, 0, 0, SZ_4K);
 	} else {
-		empty = __xe_pt_empty_pte(gt, vm, pt->level);
+		empty = __xe_pt_empty_pte(tile, vm, pt->level);
 		for (i = 0; i < XE_PDES; i++)
 			xe_pt_write(vm->xe, map, i, empty);
 	}
@@ -318,9 +314,9 @@ void xe_pt_destroy(struct xe_pt *pt, u32 flags, struct llist_head *deferred)
 
 /**
  * xe_pt_create_scratch() - Setup a scratch memory pagetable tree for the
- * given gt and vm.
+ * given tile and vm.
  * @xe: xe device.
- * @gt: gt to set up for.
+ * @tile: tile to set up for.
  * @vm: vm to set up for.
  *
  * Sets up a pagetable tree with one page-table per level and a single
@@ -329,10 +325,10 @@ void xe_pt_destroy(struct xe_pt *pt, u32 flags, struct llist_head *deferred)
  *
  * Return: 0 on success, negative error code on error.
  */
-int xe_pt_create_scratch(struct xe_device *xe, struct xe_gt *gt,
+int xe_pt_create_scratch(struct xe_device *xe, struct xe_tile *tile,
 			 struct xe_vm *vm)
 {
-	u8 id = gt->info.id;
+	u8 id = tile->id;
 	unsigned int flags;
 	int i;
 
@@ -345,9 +341,9 @@ int xe_pt_create_scratch(struct xe_device *xe, struct xe_gt *gt,
 	if (vm->flags & XE_VM_FLAGS_64K)
 		flags |= XE_BO_CREATE_SYSTEM_BIT;
 	else
-		flags |= XE_BO_CREATE_VRAM_IF_DGFX(gt);
+		flags |= XE_BO_CREATE_VRAM_IF_DGFX(tile);
 
-	vm->scratch_bo[id] = xe_bo_create_pin_map(xe, gt, vm, SZ_4K,
+	vm->scratch_bo[id] = xe_bo_create_pin_map(xe, tile, vm, SZ_4K,
 						  ttm_bo_type_kernel,
 						  flags);
 	if (IS_ERR(vm->scratch_bo[id]))
@@ -357,11 +353,11 @@ int xe_pt_create_scratch(struct xe_device *xe, struct xe_gt *gt,
 		      vm->scratch_bo[id]->size);
 
 	for (i = 0; i < vm->pt_root[id]->level; i++) {
-		vm->scratch_pt[id][i] = xe_pt_create(vm, gt, i);
+		vm->scratch_pt[id][i] = xe_pt_create(vm, tile, i);
 		if (IS_ERR(vm->scratch_pt[id][i]))
 			return PTR_ERR(vm->scratch_pt[id][i]);
 
-		xe_pt_populate_empty(gt, vm, vm->scratch_pt[id][i]);
+		xe_pt_populate_empty(tile, vm, vm->scratch_pt[id][i]);
 	}
 
 	return 0;
@@ -410,8 +406,8 @@ struct xe_pt_stage_bind_walk {
 	/* Input parameters for the walk */
 	/** @vm: The vm we're building for. */
 	struct xe_vm *vm;
-	/** @gt: The gt we're building for. */
-	struct xe_gt *gt;
+	/** @tile: The tile we're building for. */
+	struct xe_tile *tile;
 	/** @cache: Desired cache level for the ptes */
 	enum xe_cache_level cache;
 	/** @default_pte: PTE flag only template. No address is associated */
@@ -679,7 +675,7 @@ xe_pt_stage_bind_entry(struct xe_ptw *parent, pgoff_t offset,
 	if (covers || !*child) {
 		u64 flags = 0;
 
-		xe_child = xe_pt_create(xe_walk->vm, xe_walk->gt, level - 1);
+		xe_child = xe_pt_create(xe_walk->vm, xe_walk->tile, level - 1);
 		if (IS_ERR(xe_child))
 			return PTR_ERR(xe_child);
 
@@ -687,7 +683,7 @@ xe_pt_stage_bind_entry(struct xe_ptw *parent, pgoff_t offset,
 			       round_down(addr, 1ull << walk->shifts[level]));
 
 		if (!covers)
-			xe_pt_populate_empty(xe_walk->gt, xe_walk->vm, xe_child);
+			xe_pt_populate_empty(xe_walk->tile, xe_walk->vm, xe_child);
 
 		*child = &xe_child->base;
 
@@ -696,7 +692,7 @@ xe_pt_stage_bind_entry(struct xe_ptw *parent, pgoff_t offset,
 		 * TODO: Suballocate the pt bo to avoid wasting a lot of
 		 * memory.
 		 */
-		if (GRAPHICS_VERx100(gt_to_xe(xe_walk->gt)) >= 1250 && level == 1 &&
+		if (GRAPHICS_VERx100(tile_to_xe(xe_walk->tile)) >= 1250 && level == 1 &&
 		    covers && xe_pt_scan_64K(addr, next, xe_walk)) {
 			walk->shifts = xe_compact_pt_shifts;
 			flags |= XE_PDE_64K;
@@ -719,7 +715,7 @@ static const struct xe_pt_walk_ops xe_pt_stage_bind_ops = {
 /**
  * xe_pt_stage_bind() - Build a disconnected page-table tree for a given address
  * range.
- * @gt: The gt we're building for.
+ * @tile: The tile we're building for.
  * @vma: The vma indicating the address range.
  * @entries: Storage for the update entries used for connecting the tree to
  * the main tree at commit time.
@@ -735,7 +731,7 @@ static const struct xe_pt_walk_ops xe_pt_stage_bind_ops = {
  * Return 0 on success, negative error code on error.
  */
 static int
-xe_pt_stage_bind(struct xe_gt *gt, struct xe_vma *vma,
+xe_pt_stage_bind(struct xe_tile *tile, struct xe_vma *vma,
 		 struct xe_vm_pgtable_update *entries, u32 *num_entries)
 {
 	struct xe_bo *bo = vma->bo;
@@ -748,14 +744,14 @@ xe_pt_stage_bind(struct xe_gt *gt, struct xe_vma *vma,
 			.max_level = XE_PT_HIGHEST_LEVEL,
 		},
 		.vm = vma->vm,
-		.gt = gt,
+		.tile = tile,
 		.curs = &curs,
 		.va_curs_start = vma->start,
 		.pte_flags = vma->pte_flags,
 		.wupd.entries = entries,
 		.needs_64K = (vma->vm->flags & XE_VM_FLAGS_64K) && is_vram,
 	};
-	struct xe_pt *pt = vma->vm->pt_root[gt->info.id];
+	struct xe_pt *pt = vma->vm->pt_root[tile->id];
 	int ret;
 
 	if (is_vram) {
@@ -849,8 +845,8 @@ struct xe_pt_zap_ptes_walk {
 	struct xe_pt_walk base;
 
 	/* Input parameters for the walk */
-	/** @gt: The gt we're building for */
-	struct xe_gt *gt;
+	/** @tile: The tile we're building for */
+	struct xe_tile *tile;
 
 	/* Output */
 	/** @needs_invalidate: Whether we need to invalidate TLB*/
@@ -878,7 +874,7 @@ static int xe_pt_zap_ptes_entry(struct xe_ptw *parent, pgoff_t offset,
 	 */
 	if (xe_pt_nonshared_offsets(addr, next, --level, walk, action, &offset,
 				    &end_offset)) {
-		xe_map_memset(gt_to_xe(xe_walk->gt), &xe_child->bo->vmap,
+		xe_map_memset(tile_to_xe(xe_walk->tile), &xe_child->bo->vmap,
 			      offset * sizeof(u64), 0,
 			      (end_offset - offset) * sizeof(u64));
 		xe_walk->needs_invalidate = true;
@@ -893,7 +889,7 @@ static const struct xe_pt_walk_ops xe_pt_zap_ptes_ops = {
 
 /**
  * xe_pt_zap_ptes() - Zap (zero) gpu ptes of an address range
- * @gt: The gt we're zapping for.
+ * @tile: The tile we're zapping for.
  * @vma: GPU VMA detailing address range.
  *
  * Eviction and Userptr invalidation needs to be able to zap the
@@ -907,7 +903,7 @@ static const struct xe_pt_walk_ops xe_pt_zap_ptes_ops = {
  * Return: Whether ptes were actually updated and a TLB invalidation is
  * required.
  */
-bool xe_pt_zap_ptes(struct xe_gt *gt, struct xe_vma *vma)
+bool xe_pt_zap_ptes(struct xe_tile *tile, struct xe_vma *vma)
 {
 	struct xe_pt_zap_ptes_walk xe_walk = {
 		.base = {
@@ -915,11 +911,11 @@ bool xe_pt_zap_ptes(struct xe_gt *gt, struct xe_vma *vma)
 			.shifts = xe_normal_pt_shifts,
 			.max_level = XE_PT_HIGHEST_LEVEL,
 		},
-		.gt = gt,
+		.tile = tile,
 	};
-	struct xe_pt *pt = vma->vm->pt_root[gt->info.id];
+	struct xe_pt *pt = vma->vm->pt_root[tile->id];
 
-	if (!(vma->gt_present & BIT(gt->info.id)))
+	if (!(vma->tile_present & BIT(tile->id)))
 		return false;
 
 	(void)xe_pt_walk_shared(&pt->base, pt->level, vma->start, vma->end + 1,
@@ -929,7 +925,7 @@ bool xe_pt_zap_ptes(struct xe_gt *gt, struct xe_vma *vma)
 }
 
 static void
-xe_vm_populate_pgtable(struct xe_migrate_pt_update *pt_update, struct xe_gt *gt,
+xe_vm_populate_pgtable(struct xe_migrate_pt_update *pt_update, struct xe_tile *tile,
 		       struct iosys_map *map, void *data,
 		       u32 qword_ofs, u32 num_qwords,
 		       const struct xe_vm_pgtable_update *update)
@@ -938,11 +934,9 @@ xe_vm_populate_pgtable(struct xe_migrate_pt_update *pt_update, struct xe_gt *gt,
 	u64 *ptr = data;
 	u32 i;
 
-	XE_BUG_ON(xe_gt_is_media_type(gt));
-
 	for (i = 0; i < num_qwords; i++) {
 		if (map)
-			xe_map_wr(gt_to_xe(gt), map, (qword_ofs + i) *
+			xe_map_wr(tile_to_xe(tile), map, (qword_ofs + i) *
 				  sizeof(u64), u64, ptes[i].pte);
 		else
 			ptr[i] = ptes[i].pte;
@@ -1016,14 +1010,14 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
 }
 
 static int
-xe_pt_prepare_bind(struct xe_gt *gt, struct xe_vma *vma,
+xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
 		   struct xe_vm_pgtable_update *entries, u32 *num_entries,
 		   bool rebind)
 {
 	int err;
 
 	*num_entries = 0;
-	err = xe_pt_stage_bind(gt, vma, entries, num_entries);
+	err = xe_pt_stage_bind(tile, vma, entries, num_entries);
 	if (!err)
 		BUG_ON(!*num_entries);
 	else /* abort! */
@@ -1250,7 +1244,7 @@ static int invalidation_fence_init(struct xe_gt *gt,
 /**
  * __xe_pt_bind_vma() - Build and connect a page-table tree for the vma
  * address range.
- * @gt: The gt to bind for.
+ * @tile: The tile to bind for.
  * @vma: The vma to bind.
  * @e: The engine with which to do pipelined page-table updates.
  * @syncs: Entries to sync on before binding the built tree to the live vm tree.
@@ -1270,7 +1264,7 @@ static int invalidation_fence_init(struct xe_gt *gt,
  * on success, an error pointer on error.
  */
 struct dma_fence *
-__xe_pt_bind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
+__xe_pt_bind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e,
 		 struct xe_sync_entry *syncs, u32 num_syncs,
 		 bool rebind)
 {
@@ -1291,18 +1285,17 @@ __xe_pt_bind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
 	bind_pt_update.locked = false;
 	xe_bo_assert_held(vma->bo);
 	xe_vm_assert_held(vm);
-	XE_BUG_ON(xe_gt_is_media_type(gt));
 
 	vm_dbg(&vma->vm->xe->drm,
 	       "Preparing bind, with range [%llx...%llx) engine %p.\n",
 	       vma->start, vma->end, e);
 
-	err = xe_pt_prepare_bind(gt, vma, entries, &num_entries, rebind);
+	err = xe_pt_prepare_bind(tile, vma, entries, &num_entries, rebind);
 	if (err)
 		goto err;
 	XE_BUG_ON(num_entries > ARRAY_SIZE(entries));
 
-	xe_vm_dbg_print_entries(gt_to_xe(gt), entries, num_entries);
+	xe_vm_dbg_print_entries(tile_to_xe(tile), entries, num_entries);
 
 	if (rebind && !xe_vm_no_dma_fences(vma->vm)) {
 		ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
@@ -1310,9 +1303,9 @@ __xe_pt_bind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
 			return ERR_PTR(-ENOMEM);
 	}
 
-	fence = xe_migrate_update_pgtables(gt->migrate,
+	fence = xe_migrate_update_pgtables(tile->primary_gt.migrate,
 					   vm, vma->bo,
-					   e ? e : vm->eng[gt->info.id],
+					   e ? e : vm->eng[tile->id],
 					   entries, num_entries,
 					   syncs, num_syncs,
 					   &bind_pt_update.base);
@@ -1321,7 +1314,7 @@ __xe_pt_bind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
 
 		/* TLB invalidation must be done before signaling rebind */
 		if (rebind && !xe_vm_no_dma_fences(vma->vm)) {
-			int err = invalidation_fence_init(gt, ifence, fence,
+			int err = invalidation_fence_init(&tile->primary_gt, ifence, fence,
 							  vma);
 			if (err) {
 				dma_fence_put(fence);
@@ -1344,7 +1337,7 @@ __xe_pt_bind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
 				  bind_pt_update.locked ? &deferred : NULL);
 
 		/* This vma is live (again?) now */
-		vma->gt_present |= BIT(gt->info.id);
+		vma->tile_present |= BIT(tile->id);
 
 		if (bind_pt_update.locked) {
 			vma->userptr.initial_bind = true;
@@ -1373,8 +1366,8 @@ struct xe_pt_stage_unbind_walk {
 	struct xe_pt_walk base;
 
 	/* Input parameters for the walk */
-	/** @gt: The gt we're unbinding from. */
-	struct xe_gt *gt;
+	/** @tile: The tile we're unbinding from. */
+	struct xe_tile *tile;
 
 	/**
 	 * @modified_start: Walk range start, modified to include any
@@ -1479,7 +1472,7 @@ static const struct xe_pt_walk_ops xe_pt_stage_unbind_ops = {
 /**
  * xe_pt_stage_unbind() - Build page-table update structures for an unbind
  * operation
- * @gt: The gt we're unbinding for.
+ * @tile: The tile we're unbinding for.
  * @vma: The vma we're unbinding.
  * @entries: Caller-provided storage for the update structures.
  *
@@ -1490,7 +1483,7 @@ static const struct xe_pt_walk_ops xe_pt_stage_unbind_ops = {
  *
  * Return: The number of entries used.
  */
-static unsigned int xe_pt_stage_unbind(struct xe_gt *gt, struct xe_vma *vma,
+static unsigned int xe_pt_stage_unbind(struct xe_tile *tile, struct xe_vma *vma,
 				       struct xe_vm_pgtable_update *entries)
 {
 	struct xe_pt_stage_unbind_walk xe_walk = {
@@ -1499,12 +1492,12 @@ static unsigned int xe_pt_stage_unbind(struct xe_gt *gt, struct xe_vma *vma,
 			.shifts = xe_normal_pt_shifts,
 			.max_level = XE_PT_HIGHEST_LEVEL,
 		},
-		.gt = gt,
+		.tile = tile,
 		.modified_start = vma->start,
 		.modified_end = vma->end + 1,
 		.wupd.entries = entries,
 	};
-	struct xe_pt *pt = vma->vm->pt_root[gt->info.id];
+	struct xe_pt *pt = vma->vm->pt_root[tile->id];
 
 	(void)xe_pt_walk_shared(&pt->base, pt->level, vma->start, vma->end + 1,
 				 &xe_walk.base);
@@ -1514,19 +1507,17 @@ static unsigned int xe_pt_stage_unbind(struct xe_gt *gt, struct xe_vma *vma,
 
 static void
 xe_migrate_clear_pgtable_callback(struct xe_migrate_pt_update *pt_update,
-				  struct xe_gt *gt, struct iosys_map *map,
+				  struct xe_tile *tile, struct iosys_map *map,
 				  void *ptr, u32 qword_ofs, u32 num_qwords,
 				  const struct xe_vm_pgtable_update *update)
 {
 	struct xe_vma *vma = pt_update->vma;
-	u64 empty = __xe_pt_empty_pte(gt, vma->vm, update->pt->level);
+	u64 empty = __xe_pt_empty_pte(tile, vma->vm, update->pt->level);
 	int i;
 
-	XE_BUG_ON(xe_gt_is_media_type(gt));
-
 	if (map && map->is_iomem)
 		for (i = 0; i < num_qwords; ++i)
-			xe_map_wr(gt_to_xe(gt), map, (qword_ofs + i) *
+			xe_map_wr(tile_to_xe(tile), map, (qword_ofs + i) *
 				  sizeof(u64), u64, empty);
 	else if (map)
 		memset64(map->vaddr + qword_ofs * sizeof(u64), empty,
@@ -1577,7 +1568,7 @@ static const struct xe_migrate_pt_update_ops userptr_unbind_ops = {
 /**
  * __xe_pt_unbind_vma() - Disconnect and free a page-table tree for the vma
  * address range.
- * @gt: The gt to unbind for.
+ * @tile: The tile to unbind for.
  * @vma: The vma to unbind.
  * @e: The engine with which to do pipelined page-table updates.
  * @syncs: Entries to sync on before disconnecting the tree to be destroyed.
@@ -1595,7 +1586,7 @@ static const struct xe_migrate_pt_update_ops userptr_unbind_ops = {
  * on success, an error pointer on error.
  */
 struct dma_fence *
-__xe_pt_unbind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
+__xe_pt_unbind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e,
 		   struct xe_sync_entry *syncs, u32 num_syncs)
 {
 	struct xe_vm_pgtable_update entries[XE_VM_MAX_LEVEL * 2 + 1];
@@ -1614,16 +1605,15 @@ __xe_pt_unbind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
 
 	xe_bo_assert_held(vma->bo);
 	xe_vm_assert_held(vm);
-	XE_BUG_ON(xe_gt_is_media_type(gt));
 
 	vm_dbg(&vma->vm->xe->drm,
 	       "Preparing unbind, with range [%llx...%llx) engine %p.\n",
 	       vma->start, vma->end, e);
 
-	num_entries = xe_pt_stage_unbind(gt, vma, entries);
+	num_entries = xe_pt_stage_unbind(tile, vma, entries);
 	XE_BUG_ON(num_entries > ARRAY_SIZE(entries));
 
-	xe_vm_dbg_print_entries(gt_to_xe(gt), entries, num_entries);
+	xe_vm_dbg_print_entries(tile_to_xe(tile), entries, num_entries);
 
 	ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
 	if (!ifence)
@@ -1634,9 +1624,9 @@ __xe_pt_unbind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
 	 * clear again here. The eviction may have updated pagetables at a
 	 * lower level, because it needs to be more conservative.
 	 */
-	fence = xe_migrate_update_pgtables(gt->migrate,
+	fence = xe_migrate_update_pgtables(tile->primary_gt.migrate,
 					   vm, NULL, e ? e :
-					   vm->eng[gt->info.id],
+					   vm->eng[tile->id],
 					   entries, num_entries,
 					   syncs, num_syncs,
 					   &unbind_pt_update.base);
@@ -1644,7 +1634,7 @@ __xe_pt_unbind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
 		int err;
 
 		/* TLB invalidation must be done before signaling unbind */
-		err = invalidation_fence_init(gt, ifence, fence, vma);
+		err = invalidation_fence_init(&tile->primary_gt, ifence, fence, vma);
 		if (err) {
 			dma_fence_put(fence);
 			kfree(ifence);
@@ -1662,18 +1652,18 @@ __xe_pt_unbind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
 					   DMA_RESV_USAGE_BOOKKEEP);
 		xe_pt_commit_unbind(vma, entries, num_entries,
 				    unbind_pt_update.locked ? &deferred : NULL);
-		vma->gt_present &= ~BIT(gt->info.id);
+		vma->tile_present &= ~BIT(tile->id);
 	} else {
 		kfree(ifence);
 	}
 
-	if (!vma->gt_present)
+	if (!vma->tile_present)
 		list_del_init(&vma->rebind_link);
 
 	if (unbind_pt_update.locked) {
 		XE_WARN_ON(!xe_vma_is_userptr(vma));
 
-		if (!vma->gt_present) {
+		if (!vma->tile_present) {
 			spin_lock(&vm->userptr.invalidated_lock);
 			list_del_init(&vma->userptr.invalidate_link);
 			spin_unlock(&vm->userptr.invalidated_lock);
diff --git a/drivers/gpu/drm/xe/xe_pt.h b/drivers/gpu/drm/xe/xe_pt.h
index 1152043e5c63..10f334b9c004 100644
--- a/drivers/gpu/drm/xe/xe_pt.h
+++ b/drivers/gpu/drm/xe/xe_pt.h
@@ -13,8 +13,8 @@ struct dma_fence;
 struct xe_bo;
 struct xe_device;
 struct xe_engine;
-struct xe_gt;
 struct xe_sync_entry;
+struct xe_tile;
 struct xe_vm;
 struct xe_vma;
 
@@ -23,27 +23,27 @@ struct xe_vma;
 
 unsigned int xe_pt_shift(unsigned int level);
 
-struct xe_pt *xe_pt_create(struct xe_vm *vm, struct xe_gt *gt,
+struct xe_pt *xe_pt_create(struct xe_vm *vm, struct xe_tile *tile,
 			   unsigned int level);
 
-int xe_pt_create_scratch(struct xe_device *xe, struct xe_gt *gt,
+int xe_pt_create_scratch(struct xe_device *xe, struct xe_tile *tile,
 			 struct xe_vm *vm);
 
-void xe_pt_populate_empty(struct xe_gt *gt, struct xe_vm *vm,
+void xe_pt_populate_empty(struct xe_tile *tile, struct xe_vm *vm,
 			  struct xe_pt *pt);
 
 void xe_pt_destroy(struct xe_pt *pt, u32 flags, struct llist_head *deferred);
 
 struct dma_fence *
-__xe_pt_bind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
+__xe_pt_bind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e,
 		 struct xe_sync_entry *syncs, u32 num_syncs,
 		 bool rebind);
 
 struct dma_fence *
-__xe_pt_unbind_vma(struct xe_gt *gt, struct xe_vma *vma, struct xe_engine *e,
+__xe_pt_unbind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e,
 		   struct xe_sync_entry *syncs, u32 num_syncs);
 
-bool xe_pt_zap_ptes(struct xe_gt *gt, struct xe_vma *vma);
+bool xe_pt_zap_ptes(struct xe_tile *tile, struct xe_vma *vma);
 
 u64 gen8_pde_encode(struct xe_bo *bo, u64 bo_offset,
 		    const enum xe_cache_level level);
diff --git a/drivers/gpu/drm/xe/xe_sa.c b/drivers/gpu/drm/xe/xe_sa.c
index c16f7c14ff52..fee71080bd31 100644
--- a/drivers/gpu/drm/xe/xe_sa.c
+++ b/drivers/gpu/drm/xe/xe_sa.c
@@ -11,7 +11,6 @@
 
 #include "xe_bo.h"
 #include "xe_device.h"
-#include "xe_gt.h"
 #include "xe_map.h"
 
 static void xe_sa_bo_manager_fini(struct drm_device *drm, void *arg)
@@ -33,14 +32,14 @@ static void xe_sa_bo_manager_fini(struct drm_device *drm, void *arg)
 	sa_manager->bo = NULL;
 }
 
-struct xe_sa_manager *xe_sa_bo_manager_init(struct xe_gt *gt, u32 size, u32 align)
+struct xe_sa_manager *xe_sa_bo_manager_init(struct xe_tile *tile, u32 size, u32 align)
 {
-	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_device *xe = tile_to_xe(tile);
 	u32 managed_size = size - SZ_4K;
 	struct xe_bo *bo;
 	int ret;
 
-	struct xe_sa_manager *sa_manager = drmm_kzalloc(&gt_to_xe(gt)->drm,
+	struct xe_sa_manager *sa_manager = drmm_kzalloc(&tile_to_xe(tile)->drm,
 							sizeof(*sa_manager),
 							GFP_KERNEL);
 	if (!sa_manager)
@@ -48,8 +47,8 @@ struct xe_sa_manager *xe_sa_bo_manager_init(struct xe_gt *gt, u32 size, u32 alig
 
 	sa_manager->bo = NULL;
 
-	bo = xe_bo_create_pin_map(xe, gt, NULL, size, ttm_bo_type_kernel,
-				  XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+	bo = xe_bo_create_pin_map(xe, tile, NULL, size, ttm_bo_type_kernel,
+				  XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				  XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(bo)) {
 		drm_err(&xe->drm, "failed to allocate bo for sa manager: %ld\n",
@@ -90,7 +89,7 @@ struct drm_suballoc *xe_sa_bo_new(struct xe_sa_manager *sa_manager,
 void xe_sa_bo_flush_write(struct drm_suballoc *sa_bo)
 {
 	struct xe_sa_manager *sa_manager = to_xe_sa_manager(sa_bo->manager);
-	struct xe_device *xe = gt_to_xe(sa_manager->bo->gt);
+	struct xe_device *xe = tile_to_xe(sa_manager->bo->tile);
 
 	if (!sa_manager->bo->vmap.is_iomem)
 		return;
diff --git a/drivers/gpu/drm/xe/xe_sa.h b/drivers/gpu/drm/xe/xe_sa.h
index 3063fb34c720..4e96483057d7 100644
--- a/drivers/gpu/drm/xe/xe_sa.h
+++ b/drivers/gpu/drm/xe/xe_sa.h
@@ -9,9 +9,9 @@
 
 struct dma_fence;
 struct xe_bo;
-struct xe_gt;
+struct xe_tile;
 
-struct xe_sa_manager *xe_sa_bo_manager_init(struct xe_gt *gt, u32 size, u32 align);
+struct xe_sa_manager *xe_sa_bo_manager_init(struct xe_tile *tile, u32 size, u32 align);
 
 struct drm_suballoc *xe_sa_bo_new(struct xe_sa_manager *sa_manager,
 				  u32 size);
diff --git a/drivers/gpu/drm/xe/xe_tile.c b/drivers/gpu/drm/xe/xe_tile.c
index 5530a6b6ef31..59d3e25ea550 100644
--- a/drivers/gpu/drm/xe/xe_tile.c
+++ b/drivers/gpu/drm/xe/xe_tile.c
@@ -7,6 +7,7 @@
 
 #include "xe_device.h"
 #include "xe_ggtt.h"
+#include "xe_sa.h"
 #include "xe_tile.h"
 #include "xe_ttm_vram_mgr.h"
 
@@ -76,6 +77,12 @@ int xe_tile_init_noalloc(struct xe_tile *tile)
 		goto err_mem_access;
 
 	err = xe_ggtt_init_noalloc(tile->mem.ggtt);
+	if (err)
+		goto err_mem_access;
+
+	tile->mem.kernel_bb_pool = xe_sa_bo_manager_init(tile, SZ_1M, 16);
+	if (IS_ERR(tile->mem.kernel_bb_pool))
+		err = PTR_ERR(tile->mem.kernel_bb_pool);
 
 err_mem_access:
 	xe_device_mem_access_put(tile_to_xe(tile));
diff --git a/drivers/gpu/drm/xe/xe_uc_fw.c b/drivers/gpu/drm/xe/xe_uc_fw.c
index 317c541753fb..b05038921e02 100644
--- a/drivers/gpu/drm/xe/xe_uc_fw.c
+++ b/drivers/gpu/drm/xe/xe_uc_fw.c
@@ -322,6 +322,7 @@ int xe_uc_fw_init(struct xe_uc_fw *uc_fw)
 {
 	struct xe_device *xe = uc_fw_to_xe(uc_fw);
 	struct xe_gt *gt = uc_fw_to_gt(uc_fw);
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct device *dev = xe->drm.dev;
 	const struct firmware *fw = NULL;
 	struct uc_css_header *css;
@@ -411,9 +412,9 @@ int xe_uc_fw_init(struct xe_uc_fw *uc_fw)
 	if (uc_fw->type == XE_UC_FW_TYPE_GUC)
 		guc_read_css_info(uc_fw, css);
 
-	obj = xe_bo_create_from_data(xe, gt, fw->data, fw->size,
+	obj = xe_bo_create_from_data(xe, tile, fw->data, fw->size,
 				     ttm_bo_type_kernel,
-				     XE_BO_CREATE_VRAM_IF_DGFX(gt) |
+				     XE_BO_CREATE_VRAM_IF_DGFX(tile) |
 				     XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(obj)) {
 		drm_notice(&xe->drm, "%s firmware %s: failed to create / populate bo",
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 87416b8bb878..803ed7b9ba88 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -465,7 +465,7 @@ int xe_vm_lock_dma_resv(struct xe_vm *vm, struct ww_acquire_ctx *ww,
 		xe_bo_assert_held(vma->bo);
 
 		list_del_init(&vma->notifier.rebind_link);
-		if (vma->gt_present && !vma->destroyed)
+		if (vma->tile_present && !vma->destroyed)
 			list_move_tail(&vma->rebind_link, &vm->rebind_list);
 	}
 	spin_unlock(&vm->notifier.list_lock);
@@ -703,7 +703,7 @@ static bool vma_userptr_invalidate(struct mmu_interval_notifier *mni,
 	 * Tell exec and rebind worker they need to repin and rebind this
 	 * userptr.
 	 */
-	if (!xe_vm_in_fault_mode(vm) && !vma->destroyed && vma->gt_present) {
+	if (!xe_vm_in_fault_mode(vm) && !vma->destroyed && vma->tile_present) {
 		spin_lock(&vm->userptr.invalidated_lock);
 		list_move_tail(&vma->userptr.invalidate_link,
 			       &vm->userptr.invalidated);
@@ -821,7 +821,7 @@ struct dma_fence *xe_vm_rebind(struct xe_vm *vm, bool rebind_worker)
 
 	xe_vm_assert_held(vm);
 	list_for_each_entry_safe(vma, next, &vm->rebind_list, rebind_link) {
-		XE_WARN_ON(!vma->gt_present);
+		XE_WARN_ON(!vma->tile_present);
 
 		list_del_init(&vma->rebind_link);
 		dma_fence_put(fence);
@@ -842,10 +842,10 @@ static struct xe_vma *xe_vma_create(struct xe_vm *vm,
 				    u64 bo_offset_or_userptr,
 				    u64 start, u64 end,
 				    bool read_only,
-				    u64 gt_mask)
+				    u64 tile_mask)
 {
 	struct xe_vma *vma;
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	u8 id;
 
 	XE_BUG_ON(start >= end);
@@ -870,12 +870,11 @@ static struct xe_vma *xe_vma_create(struct xe_vm *vm,
 	if (read_only)
 		vma->pte_flags = XE_PTE_READ_ONLY;
 
-	if (gt_mask) {
-		vma->gt_mask = gt_mask;
+	if (tile_mask) {
+		vma->tile_mask = tile_mask;
 	} else {
-		for_each_gt(gt, vm->xe, id)
-			if (!xe_gt_is_media_type(gt))
-				vma->gt_mask |= 0x1 << id;
+		for_each_tile(tile, vm->xe, id)
+			vma->tile_mask |= 0x1 << id;
 	}
 
 	if (vm->xe->info.platform == XE_PVC)
@@ -1162,8 +1161,8 @@ static void vm_destroy_work_func(struct work_struct *w);
 struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
 {
 	struct xe_vm *vm;
-	int err, i = 0, number_gts = 0;
-	struct xe_gt *gt;
+	int err, i = 0, number_tiles = 0;
+	struct xe_tile *tile;
 	u8 id;
 
 	vm = kzalloc(sizeof(*vm), GFP_KERNEL);
@@ -1215,15 +1214,12 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
 	if (IS_DGFX(xe) && xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K)
 		vm->flags |= XE_VM_FLAGS_64K;
 
-	for_each_gt(gt, xe, id) {
-		if (xe_gt_is_media_type(gt))
-			continue;
-
+	for_each_tile(tile, xe, id) {
 		if (flags & XE_VM_FLAG_MIGRATION &&
-		    gt->info.id != XE_VM_FLAG_GT_ID(flags))
+		    tile->id != XE_VM_FLAG_GT_ID(flags))
 			continue;
 
-		vm->pt_root[id] = xe_pt_create(vm, gt, xe->info.vm_max_level);
+		vm->pt_root[id] = xe_pt_create(vm, tile, xe->info.vm_max_level);
 		if (IS_ERR(vm->pt_root[id])) {
 			err = PTR_ERR(vm->pt_root[id]);
 			vm->pt_root[id] = NULL;
@@ -1232,11 +1228,11 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
 	}
 
 	if (flags & XE_VM_FLAG_SCRATCH_PAGE) {
-		for_each_gt(gt, xe, id) {
+		for_each_tile(tile, xe, id) {
 			if (!vm->pt_root[id])
 				continue;
 
-			err = xe_pt_create_scratch(xe, gt, vm);
+			err = xe_pt_create_scratch(xe, tile, vm);
 			if (err)
 				goto err_scratch_pt;
 		}
@@ -1253,17 +1249,18 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
 	}
 
 	/* Fill pt_root after allocating scratch tables */
-	for_each_gt(gt, xe, id) {
+	for_each_tile(tile, xe, id) {
 		if (!vm->pt_root[id])
 			continue;
 
-		xe_pt_populate_empty(gt, vm, vm->pt_root[id]);
+		xe_pt_populate_empty(tile, vm, vm->pt_root[id]);
 	}
 	dma_resv_unlock(&vm->resv);
 
 	/* Kernel migration VM shouldn't have a circular loop.. */
 	if (!(flags & XE_VM_FLAG_MIGRATION)) {
-		for_each_gt(gt, xe, id) {
+		for_each_tile(tile, xe, id) {
+			struct xe_gt *gt = &tile->primary_gt;
 			struct xe_vm *migrate_vm;
 			struct xe_engine *eng;
 
@@ -1280,11 +1277,11 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
 				return ERR_CAST(eng);
 			}
 			vm->eng[id] = eng;
-			number_gts++;
+			number_tiles++;
 		}
 	}
 
-	if (number_gts > 1)
+	if (number_tiles > 1)
 		vm->composite_fence_ctx = dma_fence_context_alloc(1);
 
 	mutex_lock(&xe->usm.lock);
@@ -1299,7 +1296,7 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
 	return vm;
 
 err_scratch_pt:
-	for_each_gt(gt, xe, id) {
+	for_each_tile(tile, xe, id) {
 		if (!vm->pt_root[id])
 			continue;
 
@@ -1312,7 +1309,7 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
 		xe_bo_put(vm->scratch_bo[id]);
 	}
 err_destroy_root:
-	for_each_gt(gt, xe, id) {
+	for_each_tile(tile, xe, id) {
 		if (vm->pt_root[id])
 			xe_pt_destroy(vm->pt_root[id], vm->flags, NULL);
 	}
@@ -1369,7 +1366,7 @@ void xe_vm_close_and_put(struct xe_vm *vm)
 	struct rb_root contested = RB_ROOT;
 	struct ww_acquire_ctx ww;
 	struct xe_device *xe = vm->xe;
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	u8 id;
 
 	XE_BUG_ON(vm->preempt.num_engines);
@@ -1380,7 +1377,7 @@ void xe_vm_close_and_put(struct xe_vm *vm)
 	if (xe_vm_in_compute_mode(vm))
 		flush_work(&vm->preempt.rebind_work);
 
-	for_each_gt(gt, xe, id) {
+	for_each_tile(tile, xe, id) {
 		if (vm->eng[id]) {
 			xe_engine_kill(vm->eng[id]);
 			xe_engine_put(vm->eng[id]);
@@ -1417,7 +1414,7 @@ void xe_vm_close_and_put(struct xe_vm *vm)
 	 * install a fence to resv. Hence it's safe to
 	 * destroy the pagetables immediately.
 	 */
-	for_each_gt(gt, xe, id) {
+	for_each_tile(tile, xe, id) {
 		if (vm->scratch_bo[id]) {
 			u32 i;
 
@@ -1467,7 +1464,7 @@ static void vm_destroy_work_func(struct work_struct *w)
 		container_of(w, struct xe_vm, destroy_work);
 	struct ww_acquire_ctx ww;
 	struct xe_device *xe = vm->xe;
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	u8 id;
 	void *lookup;
 
@@ -1492,7 +1489,7 @@ static void vm_destroy_work_func(struct work_struct *w)
 	 * can be moved to xe_vm_close_and_put.
 	 */
 	xe_vm_lock(vm, &ww, 0, false);
-	for_each_gt(gt, xe, id) {
+	for_each_tile(tile, xe, id) {
 		if (vm->pt_root[id]) {
 			xe_pt_destroy(vm->pt_root[id], vm->flags, NULL);
 			vm->pt_root[id] = NULL;
@@ -1528,11 +1525,9 @@ struct xe_vm *xe_vm_lookup(struct xe_file *xef, u32 id)
 	return vm;
 }
 
-u64 xe_vm_pdp4_descriptor(struct xe_vm *vm, struct xe_gt *full_gt)
+u64 xe_vm_pdp4_descriptor(struct xe_vm *vm, struct xe_tile *tile)
 {
-	XE_BUG_ON(xe_gt_is_media_type(full_gt));
-
-	return gen8_pde_encode(vm->pt_root[full_gt->info.id]->bo, 0,
+	return gen8_pde_encode(vm->pt_root[tile->id]->bo, 0,
 			       XE_CACHE_WB);
 }
 
@@ -1540,32 +1535,30 @@ static struct dma_fence *
 xe_vm_unbind_vma(struct xe_vma *vma, struct xe_engine *e,
 		 struct xe_sync_entry *syncs, u32 num_syncs)
 {
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	struct dma_fence *fence = NULL;
 	struct dma_fence **fences = NULL;
 	struct dma_fence_array *cf = NULL;
 	struct xe_vm *vm = vma->vm;
 	int cur_fence = 0, i;
-	int number_gts = hweight_long(vma->gt_present);
+	int number_tiles = hweight_long(vma->tile_present);
 	int err;
 	u8 id;
 
 	trace_xe_vma_unbind(vma);
 
-	if (number_gts > 1) {
-		fences = kmalloc_array(number_gts, sizeof(*fences),
+	if (number_tiles > 1) {
+		fences = kmalloc_array(number_tiles, sizeof(*fences),
 				       GFP_KERNEL);
 		if (!fences)
 			return ERR_PTR(-ENOMEM);
 	}
 
-	for_each_gt(gt, vm->xe, id) {
-		if (!(vma->gt_present & BIT(id)))
+	for_each_tile(tile, vm->xe, id) {
+		if (!(vma->tile_present & BIT(id)))
 			goto next;
 
-		XE_BUG_ON(xe_gt_is_media_type(gt));
-
-		fence = __xe_pt_unbind_vma(gt, vma, e, syncs, num_syncs);
+		fence = __xe_pt_unbind_vma(tile, vma, e, syncs, num_syncs);
 		if (IS_ERR(fence)) {
 			err = PTR_ERR(fence);
 			goto err_fences;
@@ -1580,7 +1573,7 @@ xe_vm_unbind_vma(struct xe_vma *vma, struct xe_engine *e,
 	}
 
 	if (fences) {
-		cf = dma_fence_array_create(number_gts, fences,
+		cf = dma_fence_array_create(number_tiles, fences,
 					    vm->composite_fence_ctx,
 					    vm->composite_fence_seqno++,
 					    false);
@@ -1612,32 +1605,31 @@ static struct dma_fence *
 xe_vm_bind_vma(struct xe_vma *vma, struct xe_engine *e,
 	       struct xe_sync_entry *syncs, u32 num_syncs)
 {
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	struct dma_fence *fence;
 	struct dma_fence **fences = NULL;
 	struct dma_fence_array *cf = NULL;
 	struct xe_vm *vm = vma->vm;
 	int cur_fence = 0, i;
-	int number_gts = hweight_long(vma->gt_mask);
+	int number_tiles = hweight_long(vma->tile_mask);
 	int err;
 	u8 id;
 
 	trace_xe_vma_bind(vma);
 
-	if (number_gts > 1) {
-		fences = kmalloc_array(number_gts, sizeof(*fences),
+	if (number_tiles > 1) {
+		fences = kmalloc_array(number_tiles, sizeof(*fences),
 				       GFP_KERNEL);
 		if (!fences)
 			return ERR_PTR(-ENOMEM);
 	}
 
-	for_each_gt(gt, vm->xe, id) {
-		if (!(vma->gt_mask & BIT(id)))
+	for_each_tile(tile, vm->xe, id) {
+		if (!(vma->tile_mask & BIT(id)))
 			goto next;
 
-		XE_BUG_ON(xe_gt_is_media_type(gt));
-		fence = __xe_pt_bind_vma(gt, vma, e, syncs, num_syncs,
-					 vma->gt_present & BIT(id));
+		fence = __xe_pt_bind_vma(tile, vma, e, syncs, num_syncs,
+					 vma->tile_present & BIT(id));
 		if (IS_ERR(fence)) {
 			err = PTR_ERR(fence);
 			goto err_fences;
@@ -1652,7 +1644,7 @@ xe_vm_bind_vma(struct xe_vma *vma, struct xe_engine *e,
 	}
 
 	if (fences) {
-		cf = dma_fence_array_create(number_gts, fences,
+		cf = dma_fence_array_create(number_tiles, fences,
 					    vm->composite_fence_ctx,
 					    vm->composite_fence_seqno++,
 					    false);
@@ -2047,7 +2039,7 @@ static int xe_vm_prefetch(struct xe_vm *vm, struct xe_vma *vma,
 			return err;
 	}
 
-	if (vma->gt_mask != (vma->gt_present & ~vma->usm.gt_invalidated)) {
+	if (vma->tile_mask != (vma->tile_present & ~vma->usm.tile_invalidated)) {
 		return xe_vm_bind(vm, vma, e, vma->bo, syncs, num_syncs,
 				  afence);
 	} else {
@@ -2649,7 +2641,7 @@ static struct xe_vma *vm_unbind_lookup_vmas(struct xe_vm *vm,
 					  first->start,
 					  lookup->start - 1,
 					  (first->pte_flags & XE_PTE_READ_ONLY),
-					  first->gt_mask);
+					  first->tile_mask);
 		if (first->bo)
 			xe_bo_unlock(first->bo, &ww);
 		if (!new_first) {
@@ -2680,7 +2672,7 @@ static struct xe_vma *vm_unbind_lookup_vmas(struct xe_vm *vm,
 					 last->start + chunk,
 					 last->end,
 					 (last->pte_flags & XE_PTE_READ_ONLY),
-					 last->gt_mask);
+					 last->tile_mask);
 		if (last->bo)
 			xe_bo_unlock(last->bo, &ww);
 		if (!new_last) {
@@ -2816,7 +2808,7 @@ static struct xe_vma *vm_bind_ioctl_lookup_vma(struct xe_vm *vm,
 					       struct xe_bo *bo,
 					       u64 bo_offset_or_userptr,
 					       u64 addr, u64 range, u32 op,
-					       u64 gt_mask, u32 region)
+					       u64 tile_mask, u32 region)
 {
 	struct ww_acquire_ctx ww;
 	struct xe_vma *vma, lookup;
@@ -2837,7 +2829,7 @@ static struct xe_vma *vm_bind_ioctl_lookup_vma(struct xe_vm *vm,
 		vma = xe_vma_create(vm, bo, bo_offset_or_userptr, addr,
 				    addr + range - 1,
 				    op & XE_VM_BIND_FLAG_READONLY,
-				    gt_mask);
+				    tile_mask);
 		xe_bo_unlock(bo, &ww);
 		if (!vma)
 			return ERR_PTR(-ENOMEM);
@@ -2877,7 +2869,7 @@ static struct xe_vma *vm_bind_ioctl_lookup_vma(struct xe_vm *vm,
 		vma = xe_vma_create(vm, NULL, bo_offset_or_userptr, addr,
 				    addr + range - 1,
 				    op & XE_VM_BIND_FLAG_READONLY,
-				    gt_mask);
+				    tile_mask);
 		if (!vma)
 			return ERR_PTR(-ENOMEM);
 
@@ -3114,11 +3106,11 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 			goto put_engine;
 		}
 
-		if (bind_ops[i].gt_mask) {
-			u64 valid_gts = BIT(xe->info.tile_count) - 1;
+		if (bind_ops[i].tile_mask) {
+			u64 valid_tiles = BIT(xe->info.tile_count) - 1;
 
-			if (XE_IOCTL_ERR(xe, bind_ops[i].gt_mask &
-					 ~valid_gts)) {
+			if (XE_IOCTL_ERR(xe, bind_ops[i].tile_mask &
+					 ~valid_tiles)) {
 				err = -EINVAL;
 				goto put_engine;
 			}
@@ -3209,11 +3201,11 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 		u64 addr = bind_ops[i].addr;
 		u32 op = bind_ops[i].op;
 		u64 obj_offset = bind_ops[i].obj_offset;
-		u64 gt_mask = bind_ops[i].gt_mask;
+		u64 tile_mask = bind_ops[i].tile_mask;
 		u32 region = bind_ops[i].region;
 
 		vmas[i] = vm_bind_ioctl_lookup_vma(vm, bos[i], obj_offset,
-						   addr, range, op, gt_mask,
+						   addr, range, op, tile_mask,
 						   region);
 		if (IS_ERR(vmas[i])) {
 			err = PTR_ERR(vmas[i]);
@@ -3387,8 +3379,8 @@ void xe_vm_unlock(struct xe_vm *vm, struct ww_acquire_ctx *ww)
 int xe_vm_invalidate_vma(struct xe_vma *vma)
 {
 	struct xe_device *xe = vma->vm->xe;
-	struct xe_gt *gt;
-	u32 gt_needs_invalidate = 0;
+	struct xe_tile *tile;
+	u32 tile_needs_invalidate = 0;
 	int seqno[XE_MAX_TILES_PER_DEVICE];
 	u8 id;
 	int ret;
@@ -3410,25 +3402,29 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
 		}
 	}
 
-	for_each_gt(gt, xe, id) {
-		if (xe_pt_zap_ptes(gt, vma)) {
-			gt_needs_invalidate |= BIT(id);
+	for_each_tile(tile, xe, id) {
+		if (xe_pt_zap_ptes(tile, vma)) {
+			tile_needs_invalidate |= BIT(id);
 			xe_device_wmb(xe);
-			seqno[id] = xe_gt_tlb_invalidation_vma(gt, NULL, vma);
+			/*
+			 * FIXME: We potentially need to invalidate multiple
+			 * GTs within the tile
+			 */
+			seqno[id] = xe_gt_tlb_invalidation_vma(&tile->primary_gt, NULL, vma);
 			if (seqno[id] < 0)
 				return seqno[id];
 		}
 	}
 
-	for_each_gt(gt, xe, id) {
-		if (gt_needs_invalidate & BIT(id)) {
-			ret = xe_gt_tlb_invalidation_wait(gt, seqno[id]);
+	for_each_tile(tile, xe, id) {
+		if (tile_needs_invalidate & BIT(id)) {
+			ret = xe_gt_tlb_invalidation_wait(&tile->primary_gt, seqno[id]);
 			if (ret < 0)
 				return ret;
 		}
 	}
 
-	vma->usm.gt_invalidated = vma->gt_mask;
+	vma->usm.tile_invalidated = vma->tile_mask;
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
index 748dc16ebed9..372f26153209 100644
--- a/drivers/gpu/drm/xe/xe_vm.h
+++ b/drivers/gpu/drm/xe/xe_vm.h
@@ -54,7 +54,7 @@ xe_vm_find_overlapping_vma(struct xe_vm *vm, const struct xe_vma *vma);
 
 #define xe_vm_assert_held(vm) dma_resv_assert_held(&(vm)->resv)
 
-u64 xe_vm_pdp4_descriptor(struct xe_vm *vm, struct xe_gt *full_gt);
+u64 xe_vm_pdp4_descriptor(struct xe_vm *vm, struct xe_tile *tile);
 
 int xe_vm_create_ioctl(struct drm_device *dev, void *data,
 		       struct drm_file *file);
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index 203ba9d946b8..c45c5daeeaa7 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -37,17 +37,17 @@ struct xe_vma {
 	/** @bo_offset: offset into BO if not a userptr, unused for userptr */
 	u64 bo_offset;
 
-	/** @gt_mask: GT mask of where to create binding for this VMA */
-	u64 gt_mask;
+	/** @tile_mask: Tile mask of where to create binding for this VMA */
+	u64 tile_mask;
 
 	/**
-	 * @gt_present: GT mask of binding are present for this VMA.
+	 * @tile_present: GT mask of binding are present for this VMA.
 	 * protected by vm->lock, vm->resv and for userptrs,
 	 * vm->userptr.notifier_lock for writing. Needs either for reading,
 	 * but if reading is done under the vm->lock only, it needs to be held
 	 * in write mode.
 	 */
-	u64 gt_present;
+	u64 tile_present;
 
 	/**
 	 * @destroyed: VMA is destroyed, in the sense that it shouldn't be
@@ -132,8 +132,8 @@ struct xe_vma {
 
 	/** @usm: unified shared memory state */
 	struct {
-		/** @gt_invalidated: VMA has been invalidated */
-		u64 gt_invalidated;
+		/** @tile_invalidated: VMA has been invalidated */
+		u64 tile_invalidated;
 	} usm;
 
 	struct {
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index d5fc54b5be74..0ebc50beb5e5 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -407,10 +407,10 @@ struct drm_xe_vm_bind_op {
 	__u64 addr;
 
 	/**
-	 * @gt_mask: Mask for which GTs to create binds for, 0 == All GTs,
+	 * @tile_mask: Mask for which tiles to create binds for, 0 == All tiles,
 	 * only applies to creating new VMAs
 	 */
-	__u64 gt_mask;
+	__u64 tile_mask;
 
 	/** @op: Operation to perform (lower 16 bits) and flags (upper 16 bits) */
 	__u32 op;
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 13/31] fixup! drm/xe/display: Implement display support
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (11 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 12/31] drm/xe: Memory allocations are tile-based, not GT-based Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 14/31] drm/xe: Move migration from GT to tile Matt Roper
                   ` (20 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dsb.c      | 5 +++--
 drivers/gpu/drm/i915/display/intel_fbc.c      | 3 ++-
 drivers/gpu/drm/i915/display/intel_fbdev.c    | 7 ++++---
 drivers/gpu/drm/xe/display/xe_fb_pin.c        | 7 ++++---
 drivers/gpu/drm/xe/display/xe_plane_initial.c | 2 +-
 5 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c b/drivers/gpu/drm/i915/display/intel_dsb.c
index 7c93580282b4..3830309aacf4 100644
--- a/drivers/gpu/drm/i915/display/intel_dsb.c
+++ b/drivers/gpu/drm/i915/display/intel_dsb.c
@@ -379,9 +379,10 @@ struct intel_dsb *intel_dsb_prepare(struct intel_crtc *crtc,
 #else
 	/* ~1 qword per instruction, full cachelines */
 	size = ALIGN(max_cmds * 8, 64);
-	obj = xe_bo_create_pin_map(i915, to_gt(i915), NULL, PAGE_ALIGN(size),
+	obj = xe_bo_create_pin_map(i915, xe_device_get_root_tile(i915),
+				   NULL, PAGE_ALIGN(size),
 				   ttm_bo_type_kernel,
-				   XE_BO_CREATE_VRAM_IF_DGFX(to_gt(i915)) |
+				   XE_BO_CREATE_VRAM_IF_DGFX(xe_device_get_root_tile(i915)) |
 				   XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(obj)) {
 		kfree(dsb);
diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
index 9dc7083fe974..0e8e899f596b 100644
--- a/drivers/gpu/drm/i915/display/intel_fbc.c
+++ b/drivers/gpu/drm/i915/display/intel_fbc.c
@@ -71,7 +71,8 @@ static int i915_gem_stolen_insert_node_in_range(struct xe_device *xe, struct xe_
 	int err;
 	u32 flags = XE_BO_CREATE_PINNED_BIT | XE_BO_CREATE_STOLEN_BIT;
 
-	*bo = xe_bo_create_locked_range(xe, to_gt(xe), NULL, size, start, end,
+	*bo = xe_bo_create_locked_range(xe, xe_device_get_root_tile(xe),
+					NULL, size, start, end,
 					ttm_bo_type_kernel, flags);
 	if (IS_ERR(*bo)) {
 		err = PTR_ERR(*bo);
diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
index 95f4cbc2e675..ebb07d0ccff6 100644
--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
@@ -210,7 +210,8 @@ static int intelfb_alloc(struct drm_fb_helper *helper,
 	}
 #else
 	if (!IS_DGFX(dev_priv)) {
-		obj = xe_bo_create_pin_map(dev_priv, to_gt(dev_priv), NULL, size,
+		obj = xe_bo_create_pin_map(dev_priv, xe_device_get_root_tile(dev_priv),
+					   NULL, size,
 					   ttm_bo_type_kernel, XE_BO_SCANOUT_BIT |
 					   XE_BO_CREATE_STOLEN_BIT |
 					   XE_BO_CREATE_PINNED_BIT);
@@ -220,9 +221,9 @@ static int intelfb_alloc(struct drm_fb_helper *helper,
 			drm_info(&dev_priv->drm, "Allocated fbdev into stolen failed: %li\n", PTR_ERR(obj));
 	}
 	if (IS_ERR(obj)) {
-		obj = xe_bo_create_pin_map(dev_priv, to_gt(dev_priv), NULL, size,
+		obj = xe_bo_create_pin_map(dev_priv, xe_device_get_root_tile(dev_priv), NULL, size,
 					  ttm_bo_type_kernel, XE_BO_SCANOUT_BIT |
-					  XE_BO_CREATE_VRAM_IF_DGFX(to_gt(dev_priv)) |
+					  XE_BO_CREATE_VRAM_IF_DGFX(xe_device_get_root_tile(dev_priv)) |
 					  XE_BO_CREATE_PINNED_BIT);
 	}
 #endif
diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c
index 3e863461fe79..83c9245dd362 100644
--- a/drivers/gpu/drm/xe/display/xe_fb_pin.c
+++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c
@@ -45,6 +45,7 @@ static int __xe_pin_fb_vma_dpt(struct intel_framebuffer *fb,
 			       struct i915_vma *vma)
 {
 	struct xe_device *xe = to_xe_device(fb->base.dev);
+	struct xe_tile *tile0 = xe_device_get_root_tile(xe);
 	struct xe_bo *bo = intel_fb_obj(&fb->base), *dpt;
 	u32 dpt_size, size = bo->ttm.base.size;
 
@@ -55,17 +56,17 @@ static int __xe_pin_fb_vma_dpt(struct intel_framebuffer *fb,
 		dpt_size = ALIGN(intel_rotation_info_size(&view->rotated) * 8,
 				 XE_PAGE_SIZE);
 
-	dpt = xe_bo_create_pin_map(xe, to_gt(xe), NULL, dpt_size,
+	dpt = xe_bo_create_pin_map(xe, tile0, NULL, dpt_size,
 				  ttm_bo_type_kernel,
 				  XE_BO_CREATE_VRAM0_BIT |
 				  XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(dpt))
-		dpt = xe_bo_create_pin_map(xe, to_gt(xe), NULL, dpt_size,
+		dpt = xe_bo_create_pin_map(xe, tile0, NULL, dpt_size,
 					   ttm_bo_type_kernel,
 					   XE_BO_CREATE_STOLEN_BIT |
 					   XE_BO_CREATE_GGTT_BIT);
 	if (IS_ERR(dpt))
-		dpt = xe_bo_create_pin_map(xe, to_gt(xe), NULL, dpt_size,
+		dpt = xe_bo_create_pin_map(xe, tile0, NULL, dpt_size,
 					   ttm_bo_type_kernel,
 					   XE_BO_CREATE_SYSTEM_BIT |
 					   XE_BO_CREATE_GGTT_BIT);
diff --git a/drivers/gpu/drm/xe/display/xe_plane_initial.c b/drivers/gpu/drm/xe/display/xe_plane_initial.c
index 39dd97acae08..99c35a4ef673 100644
--- a/drivers/gpu/drm/xe/display/xe_plane_initial.c
+++ b/drivers/gpu/drm/xe/display/xe_plane_initial.c
@@ -115,7 +115,7 @@ initial_plane_bo(struct xe_device *xe,
 			page_size);
 	size -= base;
 
-	bo = xe_bo_create_pin_map_at(xe, &tile0->primary_gt, NULL, size, phys_base,
+	bo = xe_bo_create_pin_map_at(xe, tile0, NULL, size, phys_base,
 				     ttm_bo_type_kernel, flags);
 	if (IS_ERR(bo)) {
 		drm_dbg(&xe->drm,
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 14/31] drm/xe: Move migration from GT to tile
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (12 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 13/31] fixup! drm/xe/display: Implement display support Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
       [not found]   ` <168556649753.1068887.14814865037521875125@gjsousa-mobl2>
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 15/31] drm/xe: Clarify 'gt' retrieval for primary tile Matt Roper
                   ` (19 subsequent siblings)
  33 siblings, 1 reply; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Migration primarily focuses on the memory associated with a tile, so it
makes more sense to track this at the tile level (especially since the
driver was already skipping migration operations on media GTs).

Note that the blitter engine used to perform the migration always lives
in the tile's primary GT today.  In theory that could change if media
GTs ever start including blitter engines in the future, but we can
extend the design if/when that happens in the future.

v2:
 - Fix kunit test build
 - Kerneldoc parameter name update

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_bo.c      |  4 +-
 drivers/gpu/drm/xe/tests/xe_migrate.c | 25 ++++++-----
 drivers/gpu/drm/xe/xe_bo.c            |  6 +--
 drivers/gpu/drm/xe/xe_bo_evict.c      | 14 +++---
 drivers/gpu/drm/xe/xe_device_types.h  |  3 ++
 drivers/gpu/drm/xe/xe_engine.c        |  2 +-
 drivers/gpu/drm/xe/xe_gt.c            | 27 +++---------
 drivers/gpu/drm/xe/xe_gt.h            |  1 -
 drivers/gpu/drm/xe/xe_gt_pagefault.c  |  2 +-
 drivers/gpu/drm/xe/xe_gt_types.h      |  3 --
 drivers/gpu/drm/xe/xe_migrate.c       | 61 +++++++++++++--------------
 drivers/gpu/drm/xe/xe_migrate.h       |  4 +-
 drivers/gpu/drm/xe/xe_pt.c            |  4 +-
 drivers/gpu/drm/xe/xe_tile.c          | 10 ++++-
 drivers/gpu/drm/xe/xe_tile.h          |  2 +
 drivers/gpu/drm/xe/xe_vm.c            |  2 +-
 drivers/gpu/drm/xe/xe_vm_types.h      |  2 +-
 17 files changed, 82 insertions(+), 90 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_bo.c b/drivers/gpu/drm/xe/tests/xe_bo.c
index f933e5df6c12..5309204d8d1b 100644
--- a/drivers/gpu/drm/xe/tests/xe_bo.c
+++ b/drivers/gpu/drm/xe/tests/xe_bo.c
@@ -35,7 +35,7 @@ static int ccs_test_migrate(struct xe_gt *gt, struct xe_bo *bo,
 
 	/* Optionally clear bo *and* CCS data in VRAM. */
 	if (clear) {
-		fence = xe_migrate_clear(gt->migrate, bo, bo->ttm.resource);
+		fence = xe_migrate_clear(gt_to_tile(gt)->migrate, bo, bo->ttm.resource);
 		if (IS_ERR(fence)) {
 			KUNIT_FAIL(test, "Failed to submit bo clear.\n");
 			return PTR_ERR(fence);
@@ -174,7 +174,7 @@ static int evict_test_run_gt(struct xe_device *xe, struct xe_gt *gt, struct kuni
 	struct xe_bo *bo, *external;
 	unsigned int bo_flags = XE_BO_CREATE_USER_BIT |
 		XE_BO_CREATE_VRAM_IF_DGFX(gt_to_tile(gt));
-	struct xe_vm *vm = xe_migrate_get_vm(xe_device_get_root_tile(xe)->primary_gt.migrate);
+	struct xe_vm *vm = xe_migrate_get_vm(xe_device_get_root_tile(xe)->migrate);
 	struct ww_acquire_ctx ww;
 	int err, i;
 
diff --git a/drivers/gpu/drm/xe/tests/xe_migrate.c b/drivers/gpu/drm/xe/tests/xe_migrate.c
index 85ef9bacfe52..d9f1f31c92d2 100644
--- a/drivers/gpu/drm/xe/tests/xe_migrate.c
+++ b/drivers/gpu/drm/xe/tests/xe_migrate.c
@@ -101,14 +101,14 @@ static const struct xe_migrate_pt_update_ops sanity_ops = {
 static void test_copy(struct xe_migrate *m, struct xe_bo *bo,
 		      struct kunit *test)
 {
-	struct xe_device *xe = gt_to_xe(m->gt);
+	struct xe_device *xe = tile_to_xe(m->tile);
 	u64 retval, expected = 0;
 	bool big = bo->size >= SZ_2M;
 	struct dma_fence *fence;
 	const char *str = big ? "Copying big bo" : "Copying small bo";
 	int err;
 
-	struct xe_bo *sysmem = xe_bo_create_locked(xe, gt_to_tile(m->gt), NULL,
+	struct xe_bo *sysmem = xe_bo_create_locked(xe, m->tile, NULL,
 						   bo->size,
 						   ttm_bo_type_kernel,
 						   XE_BO_CREATE_SYSTEM_BIT);
@@ -189,7 +189,7 @@ static void test_copy(struct xe_migrate *m, struct xe_bo *bo,
 static void test_pt_update(struct xe_migrate *m, struct xe_bo *pt,
 			   struct kunit *test, bool force_gpu)
 {
-	struct xe_device *xe = gt_to_xe(m->gt);
+	struct xe_device *xe = tile_to_xe(m->tile);
 	struct dma_fence *fence;
 	u64 retval, expected;
 	ktime_t then, now;
@@ -239,16 +239,15 @@ static void test_pt_update(struct xe_migrate *m, struct xe_bo *pt,
 
 static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 {
-	struct xe_gt *gt = m->gt;
-	struct xe_tile *tile = gt_to_tile(m->gt);
-	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_tile *tile = m->tile;
+	struct xe_device *xe = tile_to_xe(tile);
 	struct xe_bo *pt, *bo = m->pt_bo, *big, *tiny;
 	struct xe_res_cursor src_it;
 	struct dma_fence *fence;
 	u64 retval, expected;
 	struct xe_bb *bb;
 	int err;
-	u8 id = gt->info.id;
+	u8 id = tile->id;
 
 	err = xe_bo_vmap(bo);
 	if (err) {
@@ -287,7 +286,7 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 		goto free_pt;
 	}
 
-	bb = xe_bb_new(gt, 32, xe->info.supports_usm);
+	bb = xe_bb_new(&tile->primary_gt, 32, xe->info.supports_usm);
 	if (IS_ERR(bb)) {
 		KUNIT_FAIL(test, "Failed to create batchbuffer: %li\n",
 			   PTR_ERR(bb));
@@ -324,7 +323,7 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 	xe_map_wr(xe, &pt->vmap, 0, u32, 0xdeaddead);
 	expected = 0;
 
-	emit_clear(m->gt, bb, xe_migrate_vm_addr(NUM_KERNEL_PDE - 1, 0), 4, 4,
+	emit_clear(&tile->primary_gt, bb, xe_migrate_vm_addr(NUM_KERNEL_PDE - 1, 0), 4, 4,
 		   IS_DGFX(xe));
 	run_sanity_job(m, xe, bb, 1, "Writing to our newly mapped pagetable",
 		       test);
@@ -391,14 +390,14 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 static int migrate_test_run_device(struct xe_device *xe)
 {
 	struct kunit *test = xe_cur_kunit();
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	int id;
 
-	for_each_gt(gt, xe, id) {
-		struct xe_migrate *m = gt->migrate;
+	for_each_tile(tile, xe, id) {
+		struct xe_migrate *m = tile->migrate;
 		struct ww_acquire_ctx ww;
 
-		kunit_info(test, "Testing gt id %d.\n", id);
+		kunit_info(test, "Testing tile id %d.\n", id);
 		xe_vm_lock(m->eng->vm, &ww, 0, true);
 		xe_device_mem_access_get(xe);
 		xe_migrate_sanity_test(m, test);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 311fd83f1929..b94a80a32d86 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -643,7 +643,7 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
 		tile = mem_type_to_tile(xe, old_mem->mem_type);
 
 	XE_BUG_ON(!tile);
-	XE_BUG_ON(!tile->primary_gt.migrate);
+	XE_BUG_ON(!tile->migrate);
 
 	trace_xe_bo_move(bo);
 	xe_device_mem_access_get(xe);
@@ -681,9 +681,9 @@ static int xe_bo_move(struct ttm_buffer_object *ttm_bo, bool evict,
 		}
 	} else {
 		if (move_lacks_source)
-			fence = xe_migrate_clear(tile->primary_gt.migrate, bo, new_mem);
+			fence = xe_migrate_clear(tile->migrate, bo, new_mem);
 		else
-			fence = xe_migrate_copy(tile->primary_gt.migrate,
+			fence = xe_migrate_copy(tile->migrate,
 						bo, bo, old_mem, new_mem);
 		if (IS_ERR(fence)) {
 			ret = PTR_ERR(fence);
diff --git a/drivers/gpu/drm/xe/xe_bo_evict.c b/drivers/gpu/drm/xe/xe_bo_evict.c
index 9226195bd560..f559a7f3eb3e 100644
--- a/drivers/gpu/drm/xe/xe_bo_evict.c
+++ b/drivers/gpu/drm/xe/xe_bo_evict.c
@@ -8,7 +8,7 @@
 #include "xe_bo.h"
 #include "xe_device.h"
 #include "xe_ggtt.h"
-#include "xe_gt.h"
+#include "xe_tile.h"
 
 /**
  * xe_bo_evict_all - evict all BOs from VRAM
@@ -29,7 +29,7 @@ int xe_bo_evict_all(struct xe_device *xe)
 	struct ttm_device *bdev = &xe->ttm;
 	struct ww_acquire_ctx ww;
 	struct xe_bo *bo;
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	struct list_head still_in_list;
 	u32 mem_type;
 	u8 id;
@@ -83,8 +83,8 @@ int xe_bo_evict_all(struct xe_device *xe)
 	 * Wait for all user BO to be evicted as those evictions depend on the
 	 * memory moved below.
 	 */
-	for_each_gt(gt, xe, id)
-		xe_gt_migrate_wait(gt);
+	for_each_tile(tile, xe, id)
+		xe_tile_migrate_wait(tile);
 
 	spin_lock(&xe->pinned.lock);
 	for (;;) {
@@ -186,7 +186,7 @@ int xe_bo_restore_user(struct xe_device *xe)
 {
 	struct ww_acquire_ctx ww;
 	struct xe_bo *bo;
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	struct list_head still_in_list;
 	u8 id;
 	int ret;
@@ -224,8 +224,8 @@ int xe_bo_restore_user(struct xe_device *xe)
 	spin_unlock(&xe->pinned.lock);
 
 	/* Wait for validate to complete */
-	for_each_gt(gt, xe, id)
-		xe_gt_migrate_wait(gt);
+	for_each_tile(tile, xe, id)
+		xe_tile_migrate_wait(tile);
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index f25165c2e983..11042e565208 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -142,6 +142,9 @@ struct xe_tile {
 		 */
 		struct xe_sa_manager *kernel_bb_pool;
 	} mem;
+
+	/** @migrate: Migration helper for vram blits and clearing */
+	struct xe_migrate *migrate;
 };
 
 /**
diff --git a/drivers/gpu/drm/xe/xe_engine.c b/drivers/gpu/drm/xe/xe_engine.c
index 1a9082db8f1b..b3036c4a8ec3 100644
--- a/drivers/gpu/drm/xe/xe_engine.c
+++ b/drivers/gpu/drm/xe/xe_engine.c
@@ -560,7 +560,7 @@ int xe_engine_create_ioctl(struct drm_device *dev, void *data,
 			if (XE_IOCTL_ERR(xe, !hwe))
 				return -EINVAL;
 
-			migrate_vm = xe_migrate_get_vm(gt->migrate);
+			migrate_vm = xe_migrate_get_vm(gt_to_tile(gt)->migrate);
 			new = xe_engine_create(xe, migrate_vm, logical_mask,
 					       args->width, hwe,
 					       ENGINE_FLAG_PERSISTENT |
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index 74023a5dc8b2..aa047db4c937 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -43,15 +43,6 @@
 #include "xe_wa.h"
 #include "xe_wopcm.h"
 
-struct xe_gt *xe_find_full_gt(struct xe_gt *gt)
-{
-	/*
-	 * FIXME: Once the code is prepared for re-enabling, this function will
-	 * be gone. Just return the only possible gt for now.
-	 */
-	return gt;
-}
-
 int xe_gt_alloc(struct xe_device *xe, struct xe_gt *gt)
 {
 	XE_BUG_ON(gt->info.type == XE_GT_TYPE_UNINITIALIZED);
@@ -169,6 +160,7 @@ static int emit_wa_job(struct xe_gt *gt, struct xe_engine *e)
 int xe_gt_record_default_lrcs(struct xe_gt *gt)
 {
 	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_tile *tile = gt_to_tile(gt);
 	struct xe_hw_engine *hwe;
 	enum xe_hw_engine_id id;
 	int err = 0;
@@ -192,7 +184,7 @@ int xe_gt_record_default_lrcs(struct xe_gt *gt)
 		if (!default_lrc)
 			return -ENOMEM;
 
-		vm = xe_migrate_get_vm(gt->migrate);
+		vm = xe_migrate_get_vm(tile->migrate);
 		e = xe_engine_create(xe, vm, BIT(hwe->logical_instance), 1,
 				     hwe, ENGINE_FLAG_WA);
 		if (IS_ERR(e)) {
@@ -383,13 +375,13 @@ static int all_fw_domain_init(struct xe_gt *gt)
 	}
 
 	if (!xe_gt_is_media_type(gt)) {
-		gt->migrate = xe_migrate_init(gt);
-		if (IS_ERR(gt->migrate)) {
-			err = PTR_ERR(gt->migrate);
+		struct xe_tile *tile = gt_to_tile(gt);
+
+		tile->migrate = xe_migrate_init(tile);
+		if (IS_ERR(tile->migrate)) {
+			err = PTR_ERR(tile->migrate);
 			goto err_force_wake;
 		}
-	} else {
-		gt->migrate = xe_find_full_gt(gt)->migrate;
 	}
 
 	err = xe_uc_init_hw(&gt->uc);
@@ -644,11 +636,6 @@ int xe_gt_resume(struct xe_gt *gt)
 	return err;
 }
 
-void xe_gt_migrate_wait(struct xe_gt *gt)
-{
-	xe_migrate_wait(gt->migrate);
-}
-
 struct xe_hw_engine *xe_gt_hw_engine(struct xe_gt *gt,
 				     enum xe_engine_class class,
 				     u16 instance, bool logical)
diff --git a/drivers/gpu/drm/xe/xe_gt.h b/drivers/gpu/drm/xe/xe_gt.h
index f4e98f499b36..c8abbeb0fb96 100644
--- a/drivers/gpu/drm/xe/xe_gt.h
+++ b/drivers/gpu/drm/xe/xe_gt.h
@@ -25,7 +25,6 @@ void xe_gt_suspend_prepare(struct xe_gt *gt);
 int xe_gt_suspend(struct xe_gt *gt);
 int xe_gt_resume(struct xe_gt *gt);
 void xe_gt_reset_async(struct xe_gt *gt);
-void xe_gt_migrate_wait(struct xe_gt *gt);
 void xe_gt_sanitize(struct xe_gt *gt);
 
 struct xe_gt *xe_find_full_gt(struct xe_gt *gt);
diff --git a/drivers/gpu/drm/xe/xe_gt_pagefault.c b/drivers/gpu/drm/xe/xe_gt_pagefault.c
index 1c2b23ae89cf..73db7f7c0381 100644
--- a/drivers/gpu/drm/xe/xe_gt_pagefault.c
+++ b/drivers/gpu/drm/xe/xe_gt_pagefault.c
@@ -208,7 +208,7 @@ static int handle_pagefault(struct xe_gt *gt, struct pagefault *pf)
 
 	/* Bind VMA only to the GT that has faulted */
 	trace_xe_vma_pf_bind(vma);
-	fence = __xe_pt_bind_vma(tile, vma, xe_gt_migrate_engine(gt), NULL, 0,
+	fence = __xe_pt_bind_vma(tile, vma, xe_tile_migrate_engine(tile), NULL, 0,
 				 vma->tile_present & BIT(tile->id));
 	if (IS_ERR(fence)) {
 		ret = PTR_ERR(fence);
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index c44560b6dc71..34d5dd98885e 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -278,9 +278,6 @@ struct xe_gt {
 	/** @hw_engines: hardware engines on the GT */
 	struct xe_hw_engine hw_engines[XE_NUM_HW_ENGINES];
 
-	/** @migrate: Migration helper for vram blits and clearing */
-	struct xe_migrate *migrate;
-
 	/** @pcode: GT's PCODE */
 	struct {
 		/** @lock: protecting GT's PCODE mailbox data */
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index 9de7bdeee85c..ca6f3e6c2e9e 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -36,8 +36,8 @@
 struct xe_migrate {
 	/** @eng: Default engine used for migration */
 	struct xe_engine *eng;
-	/** @gt: Backpointer to the gt this struct xe_migrate belongs to. */
-	struct xe_gt *gt;
+	/** @tile: Backpointer to the tile this struct xe_migrate belongs to. */
+	struct xe_tile *tile;
 	/** @job_mutex: Timeline mutex for @eng. */
 	struct mutex job_mutex;
 	/** @pt_bo: Page-table buffer object. */
@@ -70,17 +70,17 @@ struct xe_migrate {
 #define NUM_PT_PER_BLIT (MAX_PREEMPTDISABLE_TRANSFER / SZ_2M)
 
 /**
- * xe_gt_migrate_engine() - Get this gt's migrate engine.
- * @gt: The gt.
+ * xe_tile_migrate_engine() - Get this tile's migrate engine.
+ * @tile: The tile.
  *
- * Returns the default migrate engine of this gt.
+ * Returns the default migrate engine of this tile.
  * TODO: Perhaps this function is slightly misplaced, and even unneeded?
  *
  * Return: The default migrate engine
  */
-struct xe_engine *xe_gt_migrate_engine(struct xe_gt *gt)
+struct xe_engine *xe_tile_migrate_engine(struct xe_tile *tile)
 {
-	return gt->migrate->eng;
+	return tile->migrate->eng;
 }
 
 static void xe_migrate_fini(struct drm_device *dev, void *arg)
@@ -128,8 +128,7 @@ static u64 xe_migrate_vram_ofs(u64 addr)
  */
 static int xe_migrate_create_cleared_bo(struct xe_migrate *m, struct xe_vm *vm)
 {
-	struct xe_gt *gt = m->gt;
-	struct xe_tile *tile = gt_to_tile(gt);
+	struct xe_tile *tile = m->tile;
 	struct xe_device *xe = vm->xe;
 	size_t cleared_size;
 	u64 vram_addr;
@@ -155,14 +154,13 @@ static int xe_migrate_create_cleared_bo(struct xe_migrate *m, struct xe_vm *vm)
 	return 0;
 }
 
-static int xe_migrate_prepare_vm(struct xe_gt *gt, struct xe_migrate *m,
+static int xe_migrate_prepare_vm(struct xe_tile *tile, struct xe_migrate *m,
 				 struct xe_vm *vm)
 {
-	u8 id = gt->info.id;
+	struct xe_device *xe = tile_to_xe(tile);
+	u8 id = tile->id;
 	u32 num_entries = NUM_PT_SLOTS, num_level = vm->pt_root[id]->level;
 	u32 map_ofs, level, i;
-	struct xe_device *xe = gt_to_xe(m->gt);
-	struct xe_tile *tile = gt_to_tile(m->gt);
 	struct xe_bo *bo, *batch = tile->mem.kernel_bb_pool->bo;
 	u64 entry;
 	int ret;
@@ -231,7 +229,7 @@ static int xe_migrate_prepare_vm(struct xe_gt *gt, struct xe_migrate *m,
 		m->batch_base_ofs = xe_migrate_vram_ofs(batch_addr);
 
 		if (xe->info.supports_usm) {
-			batch = gt->usm.bb_pool->bo;
+			batch = tile->primary_gt.usm.bb_pool->bo;
 			batch_addr = xe_bo_addr(batch, 0, XE_PAGE_SIZE,
 						&is_vram);
 			m->usm_batch_base_ofs = xe_migrate_vram_ofs(batch_addr);
@@ -308,34 +306,33 @@ static int xe_migrate_prepare_vm(struct xe_gt *gt, struct xe_migrate *m,
 
 /**
  * xe_migrate_init() - Initialize a migrate context
- * @gt: Back-pointer to the gt we're initializing for.
+ * @tile: Back-pointer to the tile we're initializing for.
  *
  * Return: Pointer to a migrate context on success. Error pointer on error.
  */
-struct xe_migrate *xe_migrate_init(struct xe_gt *gt)
+struct xe_migrate *xe_migrate_init(struct xe_tile *tile)
 {
-	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_device *xe = tile_to_xe(tile);
+	struct xe_gt *primary_gt = &tile->primary_gt;
 	struct xe_migrate *m;
 	struct xe_vm *vm;
 	struct ww_acquire_ctx ww;
 	int err;
 
-	XE_BUG_ON(xe_gt_is_media_type(gt));
-
 	m = drmm_kzalloc(&xe->drm, sizeof(*m), GFP_KERNEL);
 	if (!m)
 		return ERR_PTR(-ENOMEM);
 
-	m->gt = gt;
+	m->tile = tile;
 
 	/* Special layout, prepared below.. */
 	vm = xe_vm_create(xe, XE_VM_FLAG_MIGRATION |
-			  XE_VM_FLAG_SET_GT_ID(gt));
+			  XE_VM_FLAG_SET_TILE_ID(tile));
 	if (IS_ERR(vm))
 		return ERR_CAST(vm);
 
 	xe_vm_lock(vm, &ww, 0, false);
-	err = xe_migrate_prepare_vm(gt, m, vm);
+	err = xe_migrate_prepare_vm(tile, m, vm);
 	xe_vm_unlock(vm, &ww);
 	if (err) {
 		xe_vm_close_and_put(vm);
@@ -343,9 +340,9 @@ struct xe_migrate *xe_migrate_init(struct xe_gt *gt)
 	}
 
 	if (xe->info.supports_usm) {
-		struct xe_hw_engine *hwe = xe_gt_hw_engine(gt,
+		struct xe_hw_engine *hwe = xe_gt_hw_engine(primary_gt,
 							   XE_ENGINE_CLASS_COPY,
-							   gt->usm.reserved_bcs_instance,
+							   primary_gt->usm.reserved_bcs_instance,
 							   false);
 		if (!hwe)
 			return ERR_PTR(-EINVAL);
@@ -354,7 +351,7 @@ struct xe_migrate *xe_migrate_init(struct xe_gt *gt)
 					  BIT(hwe->logical_instance), 1,
 					  hwe, ENGINE_FLAG_KERNEL);
 	} else {
-		m->eng = xe_engine_create_class(xe, gt, vm,
+		m->eng = xe_engine_create_class(xe, primary_gt, vm,
 						XE_ENGINE_CLASS_COPY,
 						ENGINE_FLAG_KERNEL);
 	}
@@ -549,7 +546,7 @@ static u32 xe_migrate_ccs_copy(struct xe_migrate *m,
 			       u64 dst_ofs, bool dst_is_vram, u32 dst_size,
 			       u64 ccs_ofs, bool copy_ccs)
 {
-	struct xe_gt *gt = m->gt;
+	struct xe_gt *gt = &m->tile->primary_gt;
 	u32 flush_flags = 0;
 
 	if (xe_device_has_flat_ccs(gt_to_xe(gt)) && !copy_ccs && dst_is_vram) {
@@ -613,7 +610,7 @@ struct dma_fence *xe_migrate_copy(struct xe_migrate *m,
 				  struct ttm_resource *src,
 				  struct ttm_resource *dst)
 {
-	struct xe_gt *gt = m->gt;
+	struct xe_gt *gt = &m->tile->primary_gt;
 	struct xe_device *xe = gt_to_xe(gt);
 	struct dma_fence *fence = NULL;
 	u64 size = src_bo->size;
@@ -876,7 +873,7 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
 				   struct ttm_resource *dst)
 {
 	bool clear_vram = mem_type_is_vram(dst->mem_type);
-	struct xe_gt *gt = m->gt;
+	struct xe_gt *gt = &m->tile->primary_gt;
 	struct xe_device *xe = gt_to_xe(gt);
 	struct dma_fence *fence = NULL;
 	u64 size = bo->size;
@@ -1083,7 +1080,7 @@ xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
 	for (i = 0; i < num_updates; i++) {
 		const struct xe_vm_pgtable_update *update = &updates[i];
 
-		ops->populate(pt_update, gt_to_tile(m->gt), &update->pt_bo->vmap, NULL,
+		ops->populate(pt_update, m->tile, &update->pt_bo->vmap, NULL,
 			      update->ofs, update->qwords, update);
 	}
 
@@ -1150,9 +1147,9 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
 			   struct xe_migrate_pt_update *pt_update)
 {
 	const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
-	struct xe_gt *gt = m->gt;
-	struct xe_tile *tile = gt_to_tile(m->gt);
-	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_tile *tile = m->tile;
+	struct xe_gt *gt = &tile->primary_gt;
+	struct xe_device *xe = tile_to_xe(tile);
 	struct xe_sched_job *job;
 	struct dma_fence *fence;
 	struct drm_suballoc *sa_bo = NULL;
diff --git a/drivers/gpu/drm/xe/xe_migrate.h b/drivers/gpu/drm/xe/xe_migrate.h
index e627f4023d5a..204337ea3b4e 100644
--- a/drivers/gpu/drm/xe/xe_migrate.h
+++ b/drivers/gpu/drm/xe/xe_migrate.h
@@ -71,7 +71,7 @@ struct xe_migrate_pt_update {
 	struct xe_vma *vma;
 };
 
-struct xe_migrate *xe_migrate_init(struct xe_gt *gt);
+struct xe_migrate *xe_migrate_init(struct xe_tile *tile);
 
 struct dma_fence *xe_migrate_copy(struct xe_migrate *m,
 				  struct xe_bo *src_bo,
@@ -97,5 +97,5 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
 
 void xe_migrate_wait(struct xe_migrate *m);
 
-struct xe_engine *xe_gt_migrate_engine(struct xe_gt *gt);
+struct xe_engine *xe_tile_migrate_engine(struct xe_tile *tile);
 #endif
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index 094058cb5f93..41b2be028b8a 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -1303,7 +1303,7 @@ __xe_pt_bind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e,
 			return ERR_PTR(-ENOMEM);
 	}
 
-	fence = xe_migrate_update_pgtables(tile->primary_gt.migrate,
+	fence = xe_migrate_update_pgtables(tile->migrate,
 					   vm, vma->bo,
 					   e ? e : vm->eng[tile->id],
 					   entries, num_entries,
@@ -1624,7 +1624,7 @@ __xe_pt_unbind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e
 	 * clear again here. The eviction may have updated pagetables at a
 	 * lower level, because it needs to be more conservative.
 	 */
-	fence = xe_migrate_update_pgtables(tile->primary_gt.migrate,
+	fence = xe_migrate_update_pgtables(tile->migrate,
 					   vm, NULL, e ? e :
 					   vm->eng[tile->id],
 					   entries, num_entries,
diff --git a/drivers/gpu/drm/xe/xe_tile.c b/drivers/gpu/drm/xe/xe_tile.c
index 59d3e25ea550..908eec5c17d9 100644
--- a/drivers/gpu/drm/xe/xe_tile.c
+++ b/drivers/gpu/drm/xe/xe_tile.c
@@ -7,6 +7,7 @@
 
 #include "xe_device.h"
 #include "xe_ggtt.h"
+#include "xe_migrate.h"
 #include "xe_sa.h"
 #include "xe_tile.h"
 #include "xe_ttm_vram_mgr.h"
@@ -81,10 +82,17 @@ int xe_tile_init_noalloc(struct xe_tile *tile)
 		goto err_mem_access;
 
 	tile->mem.kernel_bb_pool = xe_sa_bo_manager_init(tile, SZ_1M, 16);
-	if (IS_ERR(tile->mem.kernel_bb_pool))
+	if (IS_ERR(tile->mem.kernel_bb_pool)) {
 		err = PTR_ERR(tile->mem.kernel_bb_pool);
+		goto err_mem_access;
+	}
 
 err_mem_access:
 	xe_device_mem_access_put(tile_to_xe(tile));
 	return err;
 }
+
+void xe_tile_migrate_wait(struct xe_tile *tile)
+{
+	xe_migrate_wait(tile->migrate);
+}
diff --git a/drivers/gpu/drm/xe/xe_tile.h b/drivers/gpu/drm/xe/xe_tile.h
index 77529ea136a6..33bf41292195 100644
--- a/drivers/gpu/drm/xe/xe_tile.h
+++ b/drivers/gpu/drm/xe/xe_tile.h
@@ -11,4 +11,6 @@ struct xe_tile;
 int xe_tile_alloc(struct xe_tile *tile);
 int xe_tile_init_noalloc(struct xe_tile *tile);
 
+void xe_tile_migrate_wait(struct xe_tile *tile);
+
 #endif
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 803ed7b9ba88..c47680ad4920 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1267,7 +1267,7 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
 			if (!vm->pt_root[id])
 				continue;
 
-			migrate_vm = xe_migrate_get_vm(gt->migrate);
+			migrate_vm = xe_migrate_get_vm(tile->migrate);
 			eng = xe_engine_create_class(xe, gt, migrate_vm,
 						     XE_ENGINE_CLASS_COPY,
 						     ENGINE_FLAG_VM);
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index c45c5daeeaa7..76af6ac0fa84 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -179,7 +179,7 @@ struct xe_vm {
 #define XE_VM_FLAG_SCRATCH_PAGE		BIT(4)
 #define XE_VM_FLAG_FAULT_MODE		BIT(5)
 #define XE_VM_FLAG_GT_ID(flags)		(((flags) >> 6) & 0x3)
-#define XE_VM_FLAG_SET_GT_ID(gt)	((gt)->info.id << 6)
+#define XE_VM_FLAG_SET_TILE_ID(tile)	((tile)->id << 6)
 	unsigned long flags;
 
 	/** @composite_fence_ctx: context composite fence */
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 15/31] drm/xe: Clarify 'gt' retrieval for primary tile
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (13 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 14/31] drm/xe: Move migration from GT to tile Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 16/31] drm/xe: Drop vram_id Matt Roper
                   ` (18 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper, Nirmoy Das

There are a bunch of places in the driver where we need to perform
non-GT MMIO against the platform's primary tile (display code, top-level
interrupt enable/disable, driver initialization, etc.).  Rename
'to_gt()' to 'xe_primary_mmio_gt()' to clarify that we're trying to get
a primary MMIO handle for these top-level operations.

In the future we need to move away from xe_gt as the target for MMIO
operations (most of which are completely unrelated to GT).

v2:
 - s/xe_primary_mmio_gt/xe_root_mmio_gt/ for more consistency with how
   we refer to tile 0.  (Lucas)
v3:
 - Tweak comment on xe_root_mmio_gt().  (Lucas)

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Acked-by: Nirmoy Das <nirmoy.das@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 .../gpu/drm/xe/compat-i915-headers/intel_uncore.h   |  2 +-
 drivers/gpu/drm/xe/xe_device.c                      |  2 +-
 drivers/gpu/drm/xe/xe_device.h                      | 13 +++++++++++--
 drivers/gpu/drm/xe/xe_irq.c                         |  6 +++---
 drivers/gpu/drm/xe/xe_mmio.c                        |  6 +++---
 drivers/gpu/drm/xe/xe_query.c                       |  2 +-
 drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c              |  4 ++--
 7 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h b/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
index 14f195fe275d..fae6213d26f1 100644
--- a/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
+++ b/drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
@@ -14,7 +14,7 @@ static inline struct xe_gt *__fake_uncore_to_gt(struct fake_uncore *uncore)
 {
 	struct xe_device *xe = container_of(uncore, struct xe_device, uncore);
 
-	return to_gt(xe);
+	return xe_root_mmio_gt(xe);
 }
 
 static inline u32 intel_uncore_read(struct fake_uncore *uncore,
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index cf28b0f150ed..3c4c41eebf05 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -402,7 +402,7 @@ static void device_kill_persistent_engines(struct xe_device *xe,
 
 void xe_device_wmb(struct xe_device *xe)
 {
-	struct xe_gt *gt = xe_device_get_gt(xe, 0);
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
 
 	wmb();
 	if (IS_DGFX(xe))
diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index 745dbb16d417..5b957a8b56c8 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -66,9 +66,18 @@ static inline struct xe_gt *xe_device_get_gt(struct xe_device *xe, u8 gt_id)
 }
 
 /*
- * FIXME: Placeholder until multi-gt lands. Once that lands, kill this function.
+ * Provide a GT structure suitable for performing non-GT MMIO operations against
+ * the primary tile.  Primarily intended for early tile initialization, display
+ * handling, top-most interrupt enable/disable, etc.  Since anything using the
+ * MMIO handle returned by this function doesn't need GSI offset translation,
+ * we'll return the primary GT from the root tile.
+ *
+ * FIXME: Fix the driver design so that 'gt' isn't the target of all MMIO
+ * operations.
+ *
+ * Returns the primary gt of the root tile.
  */
-static inline struct xe_gt *to_gt(struct xe_device *xe)
+static inline struct xe_gt *xe_root_mmio_gt(struct xe_device *xe)
 {
 	return &xe_device_get_root_tile(xe)->primary_gt;
 }
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 5be31855d789..628057497cd5 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -285,7 +285,7 @@ static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
 static irqreturn_t xelp_irq_handler(int irq, void *arg)
 {
 	struct xe_device *xe = arg;
-	struct xe_gt *gt = xe_device_get_gt(xe, 0);	/* Only 1 GT here */
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
 	u32 master_ctl, gu_misc_iir;
 	long unsigned int intr_dw[2];
 	u32 identity[32];
@@ -311,7 +311,7 @@ static irqreturn_t xelp_irq_handler(int irq, void *arg)
 
 static u32 dg1_intr_disable(struct xe_device *xe)
 {
-	struct xe_gt *gt = xe_device_get_gt(xe, 0);
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
 	u32 val;
 
 	/* First disable interrupts */
@@ -329,7 +329,7 @@ static u32 dg1_intr_disable(struct xe_device *xe)
 
 static void dg1_intr_enable(struct xe_device *xe, bool stall)
 {
-	struct xe_gt *gt = xe_device_get_gt(xe, 0);
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
 
 	xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, DG1_MSTR_IRQ);
 	if (stall)
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index 0120b836dd1d..d25e6a05b157 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -328,7 +328,7 @@ int xe_mmio_probe_vram(struct xe_device *xe)
 
 static void xe_mmio_probe_tiles(struct xe_device *xe)
 {
-	struct xe_gt *gt = &xe_device_get_root_tile(xe)->primary_gt;
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
 	u32 mtcfg;
 	u8 adj_tile_count;
 	u8 id;
@@ -380,7 +380,7 @@ static void mmio_fini(struct drm_device *drm, void *arg)
 int xe_mmio_init(struct xe_device *xe)
 {
 	struct xe_tile *root_tile = xe_device_get_root_tile(xe);
-	struct xe_gt *gt = xe_device_get_gt(xe, 0);
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
 	const int mmio_bar = 0;
 	int err;
 
@@ -439,7 +439,7 @@ int xe_mmio_ioctl(struct drm_device *dev, void *data,
 		  struct drm_file *file)
 {
 	struct xe_device *xe = to_xe_device(dev);
-	struct xe_gt *gt = xe_device_get_gt(xe, 0);
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
 	struct drm_xe_mmio *args = data;
 	unsigned int bits_flag, bytes;
 	struct xe_reg reg;
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index 799bf68800e7..8087c94dd782 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -259,7 +259,7 @@ static int query_gts(struct xe_device *xe, struct drm_xe_device_query *query)
 static int query_hwconfig(struct xe_device *xe,
 			  struct drm_xe_device_query *query)
 {
-	struct xe_gt *gt = xe_device_get_gt(xe, 0);
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
 	size_t size = xe_guc_hwconfig_size(&gt->uc.guc);
 	void __user *query_ptr = u64_to_user_ptr(query->data);
 	void *hwconfig;
diff --git a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
index c68325161c19..21ecc734f10a 100644
--- a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
@@ -54,7 +54,7 @@ bool xe_ttm_stolen_cpu_access_needs_ggtt(struct xe_device *xe)
 static s64 detect_bar2_dgfx(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr)
 {
 	struct xe_tile *tile = xe_device_get_root_tile(xe);
-	struct xe_gt *mmio = &tile->primary_gt;
+	struct xe_gt *mmio = xe_root_mmio_gt(xe);
 	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
 	u64 stolen_size;
 	u64 tile_offset;
@@ -92,7 +92,7 @@ static u32 detect_bar2_integrated(struct xe_device *xe, struct xe_ttm_stolen_mgr
 	u32 stolen_size;
 	u32 ggc, gms;
 
-	ggc = xe_mmio_read32(to_gt(xe), GGC);
+	ggc = xe_mmio_read32(xe_root_mmio_gt(xe), GGC);
 
 	/* check GGMS, should be fixed 0x3 (8MB) */
 	if (drm_WARN_ON(&xe->drm, (ggc & GGMS_MASK) != GGMS_MASK))
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 16/31] drm/xe: Drop vram_id
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (14 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 15/31] drm/xe: Clarify 'gt' retrieval for primary tile Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 17/31] drm/xe: Drop extra_gts[] declarations and XE_GT_TYPE_REMOTE Matt Roper
                   ` (17 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

The VRAM ID is always the tile ID; there's no need to track it
separately within a GT.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_pci.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index ea3d69607d13..42e6fcb07c94 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -34,7 +34,6 @@ struct xe_subplatform_desc {
 
 struct xe_gt_desc {
 	enum xe_gt_type type;
-	u8 vram_id;
 	u32 mmio_adj_limit;
 	u32 mmio_adj_offset;
 };
@@ -276,7 +275,6 @@ static const struct xe_device_desc dg2_desc = {
 static const struct xe_gt_desc pvc_gts[] = {
 	{
 		.type = XE_GT_TYPE_REMOTE,
-		.vram_id = 1,
 		.mmio_adj_limit = 0,
 		.mmio_adj_offset = 0,
 	},
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 17/31] drm/xe: Drop extra_gts[] declarations and XE_GT_TYPE_REMOTE
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (15 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 16/31] drm/xe: Drop vram_id Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 18/31] drm/xe: Allocate GT dynamically Matt Roper
                   ` (16 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Now that tiles and GTs are handled separately, extra_gts[] doesn't
really provide any useful information that we can't just infer directly.
The primary GT of the root tile and of the remote tiles behave the same
way and don't need independent handling.

When we re-add support for media GTs in a future patch, the presence of
media can be determined from MEDIA_VER() (i.e., >= 13) and media's GSI
offset handling is expected to remain constant for all forseeable future
platforms, so it won't need to be provided in a definition structure
either.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_gt_types.h |  1 -
 drivers/gpu/drm/xe/xe_pci.c      | 36 ++++++--------------------------
 2 files changed, 6 insertions(+), 31 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 34d5dd98885e..99ab7ec99ccd 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -20,7 +20,6 @@ struct xe_ring_ops;
 enum xe_gt_type {
 	XE_GT_TYPE_UNINITIALIZED,
 	XE_GT_TYPE_MAIN,
-	XE_GT_TYPE_REMOTE,
 	XE_GT_TYPE_MEDIA,
 };
 
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 42e6fcb07c94..2565a6b6ff4e 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -46,7 +46,6 @@ struct xe_device_desc {
 
 	const char *platform_name;
 	const struct xe_subplatform_desc *subplatforms;
-	const struct xe_gt_desc *extra_gts;
 
 	enum xe_platform platform;
 
@@ -272,21 +271,12 @@ static const struct xe_device_desc dg2_desc = {
 	.has_display = true,
 };
 
-static const struct xe_gt_desc pvc_gts[] = {
-	{
-		.type = XE_GT_TYPE_REMOTE,
-		.mmio_adj_limit = 0,
-		.mmio_adj_offset = 0,
-	},
-};
-
 static const struct xe_device_desc pvc_desc = {
 	.graphics = &graphics_xehpc,
 	DGFX_FEATURES,
 	PLATFORM(XE_PVC),
 	.has_display = false,
 	.require_force_probe = true,
-	.extra_gts = pvc_gts,
 };
 
 static const struct xe_device_desc mtl_desc = {
@@ -562,28 +552,14 @@ static int xe_info_init(struct xe_device *xe,
 		tile->id = id;
 
 		gt = &tile->primary_gt;
-		gt->info.id = id;
+		gt->info.id = id;	/* FIXME: Determine sensible numbering */
 		gt->tile = tile;
+		gt->info.type = XE_GT_TYPE_MAIN;
+		gt->info.__engine_mask = graphics_desc->hw_engine_mask;
+		if (MEDIA_VER(xe) < 13 && media_desc)
+			gt->info.__engine_mask |= media_desc->hw_engine_mask;
 
-		if (id == 0) {
-			gt->info.type = XE_GT_TYPE_MAIN;
-
-			gt->info.__engine_mask = graphics_desc->hw_engine_mask;
-			if (MEDIA_VER(xe) < 13 && media_desc)
-				gt->info.__engine_mask |= media_desc->hw_engine_mask;
-
-			gt->mmio.adj_limit = 0;
-			gt->mmio.adj_offset = 0;
-		} else {
-			gt->info.type = desc->extra_gts[id - 1].type;
-			gt->info.__engine_mask = (gt->info.type == XE_GT_TYPE_MEDIA) ?
-				media_desc->hw_engine_mask :
-				graphics_desc->hw_engine_mask;
-			gt->mmio.adj_limit =
-				desc->extra_gts[id - 1].mmio_adj_limit;
-			gt->mmio.adj_offset =
-				desc->extra_gts[id - 1].mmio_adj_offset;
-		}
+		/* TODO: Init media GT, if present */
 	}
 
 	return 0;
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 18/31] drm/xe: Allocate GT dynamically
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (16 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 17/31] drm/xe: Drop extra_gts[] declarations and XE_GT_TYPE_REMOTE Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 19/31] drm/xe: Add media GT to tile Matt Roper
                   ` (15 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

In preparation for re-adding media GT support, switch the primary GT
within the tile to a dynamic allocation.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_migrate.c  |  4 ++--
 drivers/gpu/drm/xe/tests/xe_rtp_test.c |  2 +-
 drivers/gpu/drm/xe/xe_device.c         |  4 ----
 drivers/gpu/drm/xe/xe_device.h         |  8 ++++++--
 drivers/gpu/drm/xe/xe_device_types.h   |  2 +-
 drivers/gpu/drm/xe/xe_ggtt.c           |  2 +-
 drivers/gpu/drm/xe/xe_gt.c             | 11 ++++++++---
 drivers/gpu/drm/xe/xe_gt.h             |  2 +-
 drivers/gpu/drm/xe/xe_migrate.c        | 12 ++++++------
 drivers/gpu/drm/xe/xe_mmio.c           |  2 +-
 drivers/gpu/drm/xe/xe_pci.c            |  7 +++++--
 drivers/gpu/drm/xe/xe_pt.c             |  4 ++--
 drivers/gpu/drm/xe/xe_vm.c             |  6 +++---
 13 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/xe/tests/xe_migrate.c b/drivers/gpu/drm/xe/tests/xe_migrate.c
index d9f1f31c92d2..60266fea7faa 100644
--- a/drivers/gpu/drm/xe/tests/xe_migrate.c
+++ b/drivers/gpu/drm/xe/tests/xe_migrate.c
@@ -286,7 +286,7 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 		goto free_pt;
 	}
 
-	bb = xe_bb_new(&tile->primary_gt, 32, xe->info.supports_usm);
+	bb = xe_bb_new(tile->primary_gt, 32, xe->info.supports_usm);
 	if (IS_ERR(bb)) {
 		KUNIT_FAIL(test, "Failed to create batchbuffer: %li\n",
 			   PTR_ERR(bb));
@@ -323,7 +323,7 @@ static void xe_migrate_sanity_test(struct xe_migrate *m, struct kunit *test)
 	xe_map_wr(xe, &pt->vmap, 0, u32, 0xdeaddead);
 	expected = 0;
 
-	emit_clear(&tile->primary_gt, bb, xe_migrate_vm_addr(NUM_KERNEL_PDE - 1, 0), 4, 4,
+	emit_clear(tile->primary_gt, bb, xe_migrate_vm_addr(NUM_KERNEL_PDE - 1, 0), 4, 4,
 		   IS_DGFX(xe));
 	run_sanity_job(m, xe, bb, 1, "Writing to our newly mapped pagetable",
 		       test);
diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
index 45f2614f91ec..b2beba0019cd 100644
--- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
+++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
@@ -237,7 +237,7 @@ static void xe_rtp_process_tests(struct kunit *test)
 {
 	const struct rtp_test_case *param = test->param_value;
 	struct xe_device *xe = test->priv;
-	struct xe_gt *gt = &xe_device_get_root_tile(xe)->primary_gt;
+	struct xe_gt *gt = xe_device_get_root_tile(xe)->primary_gt;
 	struct xe_reg_sr *reg_sr = &gt->reg_sr;
 	const struct xe_reg_sr_entry *sre, *sr_entry = NULL;
 	struct xe_rtp_process_ctx ctx = XE_RTP_PROCESS_CTX_INITIALIZER(gt);
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 3c4c41eebf05..c7985af85a53 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -259,10 +259,6 @@ int xe_device_probe(struct xe_device *xe)
 		err = xe_tile_alloc(tile);
 		if (err)
 			return err;
-
-		err = xe_gt_alloc(xe, &tile->primary_gt);
-		if (err)
-			return err;
 	}
 
 	err = xe_mmio_init(xe);
diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index 5b957a8b56c8..0a3a9134dd18 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -58,7 +58,11 @@ static inline struct xe_gt *xe_device_get_gt(struct xe_device *xe, u8 gt_id)
 	struct xe_gt *gt;
 
 	XE_BUG_ON(gt_id > XE_MAX_TILES_PER_DEVICE);
-	gt = &xe->tiles[gt_id].primary_gt;
+
+	gt = xe->tiles[gt_id].primary_gt;
+	if (drm_WARN_ON(&xe->drm, !gt))
+		return NULL;
+
 	XE_BUG_ON(gt->info.id != gt_id);
 	XE_BUG_ON(gt->info.type == XE_GT_TYPE_UNINITIALIZED);
 
@@ -79,7 +83,7 @@ static inline struct xe_gt *xe_device_get_gt(struct xe_device *xe, u8 gt_id)
  */
 static inline struct xe_gt *xe_root_mmio_gt(struct xe_device *xe)
 {
-	return &xe_device_get_root_tile(xe)->primary_gt;
+	return xe_device_get_root_tile(xe)->primary_gt;
 }
 
 static inline bool xe_device_guc_submission_enabled(struct xe_device *xe)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 11042e565208..e6af89e940a1 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -80,7 +80,7 @@ struct xe_tile {
 	/**
 	 * @primary_gt: Primary GT
 	 */
-	struct xe_gt primary_gt;
+	struct xe_gt *primary_gt;
 
 	/* TODO: Add media GT here */
 
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index d2035142f41d..c4862c1cfd9b 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -196,7 +196,7 @@ void xe_ggtt_invalidate(struct xe_ggtt *ggtt)
 	 * TODO: Loop over each GT in tile once media GT support is
 	 * re-added
 	 */
-	struct xe_gt *gt = &ggtt->tile->primary_gt;
+	struct xe_gt *gt = ggtt->tile->primary_gt;
 
 	/* TODO: vfunc for GuC vs. non-GuC */
 
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index aa047db4c937..f00b82e90106 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -43,13 +43,18 @@
 #include "xe_wa.h"
 #include "xe_wopcm.h"
 
-int xe_gt_alloc(struct xe_device *xe, struct xe_gt *gt)
+struct xe_gt *xe_gt_alloc(struct xe_tile *tile)
 {
-	XE_BUG_ON(gt->info.type == XE_GT_TYPE_UNINITIALIZED);
+	struct xe_gt *gt;
 
+	gt = drmm_kzalloc(&tile_to_xe(tile)->drm, sizeof(*gt), GFP_KERNEL);
+	if (!gt)
+		return ERR_PTR(-ENOMEM);
+
+	gt->tile = tile;
 	gt->ordered_wq = alloc_ordered_workqueue("gt-ordered-wq", 0);
 
-	return 0;
+	return gt;
 }
 
 void xe_gt_sanitize(struct xe_gt *gt)
diff --git a/drivers/gpu/drm/xe/xe_gt.h b/drivers/gpu/drm/xe/xe_gt.h
index c8abbeb0fb96..abcefd8cde78 100644
--- a/drivers/gpu/drm/xe/xe_gt.h
+++ b/drivers/gpu/drm/xe/xe_gt.h
@@ -16,7 +16,7 @@
 	     for_each_if (((hwe__) = (gt__)->hw_engines + (id__)) && \
 			  xe_hw_engine_is_valid((hwe__)))
 
-int xe_gt_alloc(struct xe_device *xe, struct xe_gt *gt);
+struct xe_gt *xe_gt_alloc(struct xe_tile *tile);
 int xe_gt_init_early(struct xe_gt *gt);
 int xe_gt_init_noalloc(struct xe_gt *gt);
 int xe_gt_init(struct xe_gt *gt);
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index ca6f3e6c2e9e..86df1be3af8f 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -229,7 +229,7 @@ static int xe_migrate_prepare_vm(struct xe_tile *tile, struct xe_migrate *m,
 		m->batch_base_ofs = xe_migrate_vram_ofs(batch_addr);
 
 		if (xe->info.supports_usm) {
-			batch = tile->primary_gt.usm.bb_pool->bo;
+			batch = tile->primary_gt->usm.bb_pool->bo;
 			batch_addr = xe_bo_addr(batch, 0, XE_PAGE_SIZE,
 						&is_vram);
 			m->usm_batch_base_ofs = xe_migrate_vram_ofs(batch_addr);
@@ -313,7 +313,7 @@ static int xe_migrate_prepare_vm(struct xe_tile *tile, struct xe_migrate *m,
 struct xe_migrate *xe_migrate_init(struct xe_tile *tile)
 {
 	struct xe_device *xe = tile_to_xe(tile);
-	struct xe_gt *primary_gt = &tile->primary_gt;
+	struct xe_gt *primary_gt = tile->primary_gt;
 	struct xe_migrate *m;
 	struct xe_vm *vm;
 	struct ww_acquire_ctx ww;
@@ -546,7 +546,7 @@ static u32 xe_migrate_ccs_copy(struct xe_migrate *m,
 			       u64 dst_ofs, bool dst_is_vram, u32 dst_size,
 			       u64 ccs_ofs, bool copy_ccs)
 {
-	struct xe_gt *gt = &m->tile->primary_gt;
+	struct xe_gt *gt = m->tile->primary_gt;
 	u32 flush_flags = 0;
 
 	if (xe_device_has_flat_ccs(gt_to_xe(gt)) && !copy_ccs && dst_is_vram) {
@@ -610,7 +610,7 @@ struct dma_fence *xe_migrate_copy(struct xe_migrate *m,
 				  struct ttm_resource *src,
 				  struct ttm_resource *dst)
 {
-	struct xe_gt *gt = &m->tile->primary_gt;
+	struct xe_gt *gt = m->tile->primary_gt;
 	struct xe_device *xe = gt_to_xe(gt);
 	struct dma_fence *fence = NULL;
 	u64 size = src_bo->size;
@@ -873,7 +873,7 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
 				   struct ttm_resource *dst)
 {
 	bool clear_vram = mem_type_is_vram(dst->mem_type);
-	struct xe_gt *gt = &m->tile->primary_gt;
+	struct xe_gt *gt = m->tile->primary_gt;
 	struct xe_device *xe = gt_to_xe(gt);
 	struct dma_fence *fence = NULL;
 	u64 size = bo->size;
@@ -1148,7 +1148,7 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
 {
 	const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
 	struct xe_tile *tile = m->tile;
-	struct xe_gt *gt = &tile->primary_gt;
+	struct xe_gt *gt = tile->primary_gt;
 	struct xe_device *xe = tile_to_xe(tile);
 	struct xe_sched_job *job;
 	struct dma_fence *fence;
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index d25e6a05b157..33049dc46102 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -209,7 +209,7 @@ static int xe_determine_lmem_bar_size(struct xe_device *xe)
 int xe_mmio_tile_vram_size(struct xe_tile *tile, u64 *vram_size, u64 *tile_size, u64 *tile_offset)
 {
 	struct xe_device *xe = tile_to_xe(tile);
-	struct xe_gt *gt = &tile->primary_gt;
+	struct xe_gt *gt = tile->primary_gt;
 	u64 offset;
 	int err;
 	u32 reg;
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 2565a6b6ff4e..ddb256a4e39c 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -551,9 +551,12 @@ static int xe_info_init(struct xe_device *xe,
 		tile->xe = xe;
 		tile->id = id;
 
-		gt = &tile->primary_gt;
+		tile->primary_gt = xe_gt_alloc(tile);
+		if (IS_ERR(tile->primary_gt))
+			return PTR_ERR(tile->primary_gt);
+
+		gt = tile->primary_gt;
 		gt->info.id = id;	/* FIXME: Determine sensible numbering */
-		gt->tile = tile;
 		gt->info.type = XE_GT_TYPE_MAIN;
 		gt->info.__engine_mask = graphics_desc->hw_engine_mask;
 		if (MEDIA_VER(xe) < 13 && media_desc)
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index 41b2be028b8a..bef265715000 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -1314,7 +1314,7 @@ __xe_pt_bind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e,
 
 		/* TLB invalidation must be done before signaling rebind */
 		if (rebind && !xe_vm_no_dma_fences(vma->vm)) {
-			int err = invalidation_fence_init(&tile->primary_gt, ifence, fence,
+			int err = invalidation_fence_init(tile->primary_gt, ifence, fence,
 							  vma);
 			if (err) {
 				dma_fence_put(fence);
@@ -1634,7 +1634,7 @@ __xe_pt_unbind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_engine *e
 		int err;
 
 		/* TLB invalidation must be done before signaling unbind */
-		err = invalidation_fence_init(&tile->primary_gt, ifence, fence, vma);
+		err = invalidation_fence_init(tile->primary_gt, ifence, fence, vma);
 		if (err) {
 			dma_fence_put(fence);
 			kfree(ifence);
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index c47680ad4920..e83af647e385 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1260,7 +1260,7 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
 	/* Kernel migration VM shouldn't have a circular loop.. */
 	if (!(flags & XE_VM_FLAG_MIGRATION)) {
 		for_each_tile(tile, xe, id) {
-			struct xe_gt *gt = &tile->primary_gt;
+			struct xe_gt *gt = tile->primary_gt;
 			struct xe_vm *migrate_vm;
 			struct xe_engine *eng;
 
@@ -3410,7 +3410,7 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
 			 * FIXME: We potentially need to invalidate multiple
 			 * GTs within the tile
 			 */
-			seqno[id] = xe_gt_tlb_invalidation_vma(&tile->primary_gt, NULL, vma);
+			seqno[id] = xe_gt_tlb_invalidation_vma(tile->primary_gt, NULL, vma);
 			if (seqno[id] < 0)
 				return seqno[id];
 		}
@@ -3418,7 +3418,7 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
 
 	for_each_tile(tile, xe, id) {
 		if (tile_needs_invalidate & BIT(id)) {
-			ret = xe_gt_tlb_invalidation_wait(&tile->primary_gt, seqno[id]);
+			ret = xe_gt_tlb_invalidation_wait(tile->primary_gt, seqno[id]);
 			if (ret < 0)
 				return ret;
 		}
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 19/31] drm/xe: Add media GT to tile
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (17 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 18/31] drm/xe: Allocate GT dynamically Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 20/31] drm/xe: Move display IRQ postinstall out of GT function Matt Roper
                   ` (14 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: matthew.d.roper, Rodrigo Vivi

This media_gt pointer isn't actually allocated yet.  Future patches will
start hooking it up at appropriate places in the code, and then creation
of the media GT will be added once those infrastructure changes are in
place.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/xe/xe_device_types.h | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index e6af89e940a1..da553878448d 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -82,7 +82,12 @@ struct xe_tile {
 	 */
 	struct xe_gt *primary_gt;
 
-	/* TODO: Add media GT here */
+	/**
+	 * @media_gt: Media GT
+	 *
+	 * Only present on devices with media version >= 13.
+	 */
+	struct xe_gt *media_gt;
 
 	/**
 	 * @mmio: MMIO info for a tile.
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 20/31] drm/xe: Move display IRQ postinstall out of GT function
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (18 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 19/31] drm/xe: Add media GT to tile Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 21/31] drm/xe: Interrupts are delivered per-tile, not per-GT Matt Roper
                   ` (13 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper, Rodrigo Vivi

Display interrupts are unrelated to the GT (and are also only relevant
to the root tile).  Move the postinstall call up a level in the
callstack.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_irq.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 628057497cd5..654c34a5b99a 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -490,8 +490,6 @@ void xe_gt_irq_postinstall(struct xe_gt *gt)
 		dg1_irq_postinstall(xe, gt);
 	else
 		xelp_irq_postinstall(xe, gt);
-
-	xe_display_irq_postinstall(xe, gt);
 }
 
 static void xe_irq_postinstall(struct xe_device *xe)
@@ -501,6 +499,8 @@ static void xe_irq_postinstall(struct xe_device *xe)
 
 	for_each_gt(gt, xe, id)
 		xe_gt_irq_postinstall(gt);
+
+	xe_display_irq_postinstall(xe, xe_root_mmio_gt(xe));
 }
 
 static irq_handler_t xe_irq_handler(struct xe_device *xe)
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 21/31] drm/xe: Interrupts are delivered per-tile, not per-GT
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (19 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 20/31] drm/xe: Move display IRQ postinstall out of GT function Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-31 21:55   ` Gustavo Sousa
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 22/31] drm/xe/irq: Handle ASLE backlight interrupts at same time as display Matt Roper
                   ` (12 subsequent siblings)
  33 siblings, 1 reply; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

IRQ delivery and handling needs to be handled on a per-tile basis.  Note
that this is true even for the "GT interrupts" relating to engines and
GuCs --- the interrupts relating to both GTs get raised through a single
set of registers in the tile's sgunit range.

On true multi-tile platforms, interrupts on remote tiles are internally
forwarded to the root tile; the first thing the top-level interrupt
handler should do is consult the root tile's instance of
DG1_MSTR_TILE_INTR to determine which tile(s) had interrupts.  This
register is also responsible for enabling/disabling top-level reporting
of any interrupts to the OS.  Although this register technically exists
on all tiles, it should only be used on the root tile.

The (mis)use of struct xe_gt as a target for MMIO operations in the
driver makes the code somewhat confusing since we wind up needing a GT
pointer to handle programming that's unrelated to the GT.  To mitigate
this confusion, all of the xe_gt structures used solely as an MMIO
target in interrupt code are renamed to 'mmio' so that it's clear that
the structure being passed does not necessarily relate to any specific
GT (primary or media) that we might be dealing with interrupts for.
Reworking the driver's MMIO handling to not be dependent on xe_gt is
planned as a future patch series.

Note that GT initialization code currently calls xe_gt_irq_postinstall()
in an attempt to enable the HWE interrupts for the GT being initialized.
Unfortunately xe_gt_irq_postinstall() doesn't really match its name and
does a bunch of other stuff unrelated to the GT interrupts (such as
enabling the top-level device interrupts).  That will be addressed in
future patches.

v2:
 - Clarify commit message with explanation of why DG1_MSTR_TILE_INTR is
   only used on the root tile, even though it's an sgunit register that
   is technically present in each tile's MMIO space.  (Aravind)
 - Also clarify that the xe_gt used as a target for MMIO operations may
   or may not relate to the GT we're dealing with for interrupts.
   (Lucas)

Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_gt.c  |   2 +-
 drivers/gpu/drm/xe/xe_irq.c | 334 ++++++++++++++++++++----------------
 drivers/gpu/drm/xe/xe_irq.h |   4 +-
 3 files changed, 187 insertions(+), 153 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index f00b82e90106..071d4fbd3efc 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -310,7 +310,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
 	gt->info.engine_mask = gt->info.__engine_mask;
 
 	/* Enables per hw engine IRQs */
-	xe_gt_irq_postinstall(gt);
+	xe_gt_irq_postinstall(gt_to_tile(gt));
 
 	/* Rerun MCR init as we now have hw engine list */
 	xe_gt_mcr_init(gt);
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 654c34a5b99a..ad2f73b2a031 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -27,60 +27,66 @@
 #define IIR(offset)				XE_REG(offset + 0x8)
 #define IER(offset)				XE_REG(offset + 0xc)
 
-static void assert_iir_is_zero(struct xe_gt *gt, struct xe_reg reg)
+static void assert_iir_is_zero(struct xe_gt *mmio, struct xe_reg reg)
 {
-	u32 val = xe_mmio_read32(gt, reg);
+	u32 val = xe_mmio_read32(mmio, reg);
 
 	if (val == 0)
 		return;
 
-	drm_WARN(&gt_to_xe(gt)->drm, 1,
+	drm_WARN(&gt_to_xe(mmio)->drm, 1,
 		 "Interrupt register 0x%x is not zero: 0x%08x\n",
 		 reg.addr, val);
-	xe_mmio_write32(gt, reg, 0xffffffff);
-	xe_mmio_read32(gt, reg);
-	xe_mmio_write32(gt, reg, 0xffffffff);
-	xe_mmio_read32(gt, reg);
+	xe_mmio_write32(mmio, reg, 0xffffffff);
+	xe_mmio_read32(mmio, reg);
+	xe_mmio_write32(mmio, reg, 0xffffffff);
+	xe_mmio_read32(mmio, reg);
 }
 
 /*
  * Unmask and enable the specified interrupts.  Does not check current state,
  * so any bits not specified here will become masked and disabled.
  */
-static void unmask_and_enable(struct xe_gt *gt, u32 irqregs, u32 bits)
+static void unmask_and_enable(struct xe_tile *tile, u32 irqregs, u32 bits)
 {
+	struct xe_gt *mmio = tile->primary_gt;
+
 	/*
 	 * If we're just enabling an interrupt now, it shouldn't already
 	 * be raised in the IIR.
 	 */
-	assert_iir_is_zero(gt, IIR(irqregs));
+	assert_iir_is_zero(mmio, IIR(irqregs));
 
-	xe_mmio_write32(gt, IER(irqregs), bits);
-	xe_mmio_write32(gt, IMR(irqregs), ~bits);
+	xe_mmio_write32(mmio, IER(irqregs), bits);
+	xe_mmio_write32(mmio, IMR(irqregs), ~bits);
 
 	/* Posting read */
-	xe_mmio_read32(gt, IMR(irqregs));
+	xe_mmio_read32(mmio, IMR(irqregs));
 }
 
 /* Mask and disable all interrupts. */
-static void mask_and_disable(struct xe_gt *gt, u32 irqregs)
+static void mask_and_disable(struct xe_tile *tile, u32 irqregs)
 {
-	xe_mmio_write32(gt, IMR(irqregs), ~0);
+	struct xe_gt *mmio = tile->primary_gt;
+
+	xe_mmio_write32(mmio, IMR(irqregs), ~0);
 	/* Posting read */
-	xe_mmio_read32(gt, IMR(irqregs));
+	xe_mmio_read32(mmio, IMR(irqregs));
 
-	xe_mmio_write32(gt, IER(irqregs), 0);
+	xe_mmio_write32(mmio, IER(irqregs), 0);
 
 	/* IIR can theoretically queue up two events. Be paranoid. */
-	xe_mmio_write32(gt, IIR(irqregs), ~0);
-	xe_mmio_read32(gt, IIR(irqregs));
-	xe_mmio_write32(gt, IIR(irqregs), ~0);
-	xe_mmio_read32(gt, IIR(irqregs));
+	xe_mmio_write32(mmio, IIR(irqregs), ~0);
+	xe_mmio_read32(mmio, IIR(irqregs));
+	xe_mmio_write32(mmio, IIR(irqregs), ~0);
+	xe_mmio_read32(mmio, IIR(irqregs));
 }
 
-static u32 xelp_intr_disable(struct xe_gt *gt)
+static u32 xelp_intr_disable(struct xe_device *xe)
 {
-	xe_mmio_write32(gt, GFX_MSTR_IRQ, 0);
+	struct xe_gt *mmio = xe_root_mmio_gt(xe);
+
+	xe_mmio_write32(mmio, GFX_MSTR_IRQ, 0);
 
 	/*
 	 * Now with master disabled, get a sample of level indications
@@ -88,36 +94,41 @@ static u32 xelp_intr_disable(struct xe_gt *gt)
 	 * New indications can and will light up during processing,
 	 * and will generate new interrupt after enabling master.
 	 */
-	return xe_mmio_read32(gt, GFX_MSTR_IRQ);
+	return xe_mmio_read32(mmio, GFX_MSTR_IRQ);
 }
 
 static u32
-gu_misc_irq_ack(struct xe_gt *gt, const u32 master_ctl)
+gu_misc_irq_ack(struct xe_device *xe, const u32 master_ctl)
 {
+	struct xe_gt *mmio = xe_root_mmio_gt(xe);
 	u32 iir;
 
 	if (!(master_ctl & GU_MISC_IRQ))
 		return 0;
 
-	iir = xe_mmio_read32(gt, IIR(GU_MISC_IRQ_OFFSET));
+	iir = xe_mmio_read32(mmio, IIR(GU_MISC_IRQ_OFFSET));
 	if (likely(iir))
-		xe_mmio_write32(gt, IIR(GU_MISC_IRQ_OFFSET), iir);
+		xe_mmio_write32(mmio, IIR(GU_MISC_IRQ_OFFSET), iir);
 
 	return iir;
 }
 
-static inline void xelp_intr_enable(struct xe_gt *gt, bool stall)
+static inline void xelp_intr_enable(struct xe_device *xe, bool stall)
 {
-	xe_mmio_write32(gt, GFX_MSTR_IRQ, MASTER_IRQ);
+	struct xe_gt *mmio = xe_root_mmio_gt(xe);
+
+	xe_mmio_write32(mmio, GFX_MSTR_IRQ, MASTER_IRQ);
 	if (stall)
-		xe_mmio_read32(gt, GFX_MSTR_IRQ);
+		xe_mmio_read32(mmio, GFX_MSTR_IRQ);
 }
 
-static void gt_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
+static void gt_irq_postinstall(struct xe_tile *tile)
 {
+	struct xe_device *xe = tile_to_xe(tile);
+	struct xe_gt *mmio = tile->primary_gt;
 	u32 irqs, dmask, smask;
-	u32 ccs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COMPUTE);
-	u32 bcs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COPY);
+	u32 ccs_mask = xe_hw_engine_mask_per_class(tile->primary_gt, XE_ENGINE_CLASS_COMPUTE);
+	u32 bcs_mask = xe_hw_engine_mask_per_class(tile->primary_gt, XE_ENGINE_CLASS_COPY);
 
 	if (xe_device_guc_submission_enabled(xe)) {
 		irqs = GT_RENDER_USER_INTERRUPT |
@@ -133,57 +144,57 @@ static void gt_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
 	smask = irqs << 16;
 
 	/* Enable RCS, BCS, VCS and VECS class interrupts. */
-	xe_mmio_write32(gt, RENDER_COPY_INTR_ENABLE, dmask);
-	xe_mmio_write32(gt, VCS_VECS_INTR_ENABLE, dmask);
+	xe_mmio_write32(mmio, RENDER_COPY_INTR_ENABLE, dmask);
+	xe_mmio_write32(mmio, VCS_VECS_INTR_ENABLE, dmask);
 	if (ccs_mask)
-		xe_mmio_write32(gt, CCS_RSVD_INTR_ENABLE, smask);
+		xe_mmio_write32(mmio, CCS_RSVD_INTR_ENABLE, smask);
 
 	/* Unmask irqs on RCS, BCS, VCS and VECS engines. */
-	xe_mmio_write32(gt, RCS0_RSVD_INTR_MASK, ~smask);
-	xe_mmio_write32(gt, BCS_RSVD_INTR_MASK, ~smask);
+	xe_mmio_write32(mmio, RCS0_RSVD_INTR_MASK, ~smask);
+	xe_mmio_write32(mmio, BCS_RSVD_INTR_MASK, ~smask);
 	if (bcs_mask & (BIT(1)|BIT(2)))
-		xe_mmio_write32(gt, XEHPC_BCS1_BCS2_INTR_MASK, ~dmask);
+		xe_mmio_write32(mmio, XEHPC_BCS1_BCS2_INTR_MASK, ~dmask);
 	if (bcs_mask & (BIT(3)|BIT(4)))
-		xe_mmio_write32(gt, XEHPC_BCS3_BCS4_INTR_MASK, ~dmask);
+		xe_mmio_write32(mmio, XEHPC_BCS3_BCS4_INTR_MASK, ~dmask);
 	if (bcs_mask & (BIT(5)|BIT(6)))
-		xe_mmio_write32(gt, XEHPC_BCS5_BCS6_INTR_MASK, ~dmask);
+		xe_mmio_write32(mmio, XEHPC_BCS5_BCS6_INTR_MASK, ~dmask);
 	if (bcs_mask & (BIT(7)|BIT(8)))
-		xe_mmio_write32(gt, XEHPC_BCS7_BCS8_INTR_MASK, ~dmask);
-	xe_mmio_write32(gt, VCS0_VCS1_INTR_MASK, ~dmask);
-	xe_mmio_write32(gt, VCS2_VCS3_INTR_MASK, ~dmask);
-	xe_mmio_write32(gt, VECS0_VECS1_INTR_MASK, ~dmask);
+		xe_mmio_write32(mmio, XEHPC_BCS7_BCS8_INTR_MASK, ~dmask);
+	xe_mmio_write32(mmio, VCS0_VCS1_INTR_MASK, ~dmask);
+	xe_mmio_write32(mmio, VCS2_VCS3_INTR_MASK, ~dmask);
+	xe_mmio_write32(mmio, VECS0_VECS1_INTR_MASK, ~dmask);
 	if (ccs_mask & (BIT(0)|BIT(1)))
-		xe_mmio_write32(gt, CCS0_CCS1_INTR_MASK, ~dmask);
+		xe_mmio_write32(mmio, CCS0_CCS1_INTR_MASK, ~dmask);
 	if (ccs_mask & (BIT(2)|BIT(3)))
-		xe_mmio_write32(gt,  CCS2_CCS3_INTR_MASK, ~dmask);
+		xe_mmio_write32(mmio,  CCS2_CCS3_INTR_MASK, ~dmask);
 
 	/*
 	 * RPS interrupts will get enabled/disabled on demand when RPS itself
 	 * is enabled/disabled.
 	 */
 	/* TODO: gt->pm_ier, gt->pm_imr */
-	xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_ENABLE, 0);
-	xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_MASK,  ~0);
+	xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_ENABLE, 0);
+	xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_MASK,  ~0);
 
 	/* Same thing for GuC interrupts */
-	xe_mmio_write32(gt, GUC_SG_INTR_ENABLE, 0);
-	xe_mmio_write32(gt, GUC_SG_INTR_MASK,  ~0);
+	xe_mmio_write32(mmio, GUC_SG_INTR_ENABLE, 0);
+	xe_mmio_write32(mmio, GUC_SG_INTR_MASK,  ~0);
 }
 
-static void xelp_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
+static void xelp_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
 {
 	/* TODO: PCH */
 
-	gt_irq_postinstall(xe, gt);
+	gt_irq_postinstall(tile);
 
-	unmask_and_enable(gt, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
+	unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
 
-	xelp_intr_enable(gt, true);
+	xelp_intr_enable(xe, true);
 }
 
 static u32
 gt_engine_identity(struct xe_device *xe,
-		   struct xe_gt *gt,
+		   struct xe_gt *mmio,
 		   const unsigned int bank,
 		   const unsigned int bit)
 {
@@ -192,7 +203,7 @@ gt_engine_identity(struct xe_device *xe,
 
 	lockdep_assert_held(&xe->irq.lock);
 
-	xe_mmio_write32(gt, IIR_REG_SELECTOR(bank), BIT(bit));
+	xe_mmio_write32(mmio, IIR_REG_SELECTOR(bank), BIT(bit));
 
 	/*
 	 * NB: Specs do not specify how long to spin wait,
@@ -200,7 +211,7 @@ gt_engine_identity(struct xe_device *xe,
 	 */
 	timeout_ts = (local_clock() >> 10) + 100;
 	do {
-		ident = xe_mmio_read32(gt, INTR_IDENTITY_REG(bank));
+		ident = xe_mmio_read32(mmio, INTR_IDENTITY_REG(bank));
 	} while (!(ident & INTR_DATA_VALID) &&
 		 !time_after32(local_clock() >> 10, timeout_ts));
 
@@ -210,7 +221,7 @@ gt_engine_identity(struct xe_device *xe,
 		return 0;
 	}
 
-	xe_mmio_write32(gt, INTR_IDENTITY_REG(bank), INTR_DATA_VALID);
+	xe_mmio_write32(mmio, INTR_IDENTITY_REG(bank), INTR_DATA_VALID);
 
 	return ident;
 }
@@ -232,10 +243,32 @@ gt_other_irq_handler(struct xe_gt *gt, const u8 instance, const u16 iir)
 	}
 }
 
-static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
+static struct xe_gt *pick_engine_gt(struct xe_tile *tile,
+				    enum xe_engine_class class,
+				    unsigned int instance)
+{
+	struct xe_device *xe = tile_to_xe(tile);
+
+	if (MEDIA_VER(xe) < 13)
+		return tile->primary_gt;
+
+	if (class == XE_ENGINE_CLASS_VIDEO_DECODE ||
+	    class == XE_ENGINE_CLASS_VIDEO_ENHANCE)
+		return tile->media_gt;
+
+	if (class == XE_ENGINE_CLASS_OTHER &&
+	    instance == OTHER_MEDIA_GUC_INSTANCE)
+		return tile->media_gt;
+
+	return tile->primary_gt;
+}
+
+static void gt_irq_handler(struct xe_tile *tile,
 			   u32 master_ctl, long unsigned int *intr_dw,
 			   u32 *identity)
 {
+	struct xe_device *xe = tile_to_xe(tile);
+	struct xe_gt *mmio = tile->primary_gt;
 	unsigned int bank, bit;
 	u16 instance, intr_vec;
 	enum xe_engine_class class;
@@ -247,27 +280,26 @@ static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
 		if (!(master_ctl & GT_DW_IRQ(bank)))
 			continue;
 
-		if (!xe_gt_is_media_type(gt)) {
-			intr_dw[bank] =
-				xe_mmio_read32(gt, GT_INTR_DW(bank));
-			for_each_set_bit(bit, intr_dw + bank, 32)
-				identity[bit] = gt_engine_identity(xe, gt,
-								   bank, bit);
-			xe_mmio_write32(gt, GT_INTR_DW(bank),
-					intr_dw[bank]);
-		}
+		intr_dw[bank] = xe_mmio_read32(mmio, GT_INTR_DW(bank));
+		for_each_set_bit(bit, intr_dw + bank, 32)
+			identity[bit] = gt_engine_identity(xe, mmio, bank, bit);
+		xe_mmio_write32(mmio, GT_INTR_DW(bank), intr_dw[bank]);
 
 		for_each_set_bit(bit, intr_dw + bank, 32) {
+			struct xe_gt *engine_gt;
+
 			class = INTR_ENGINE_CLASS(identity[bit]);
 			instance = INTR_ENGINE_INSTANCE(identity[bit]);
 			intr_vec = INTR_ENGINE_INTR(identity[bit]);
 
+			engine_gt = pick_engine_gt(tile, class, instance);
+
 			if (class == XE_ENGINE_CLASS_OTHER) {
-				gt_other_irq_handler(gt, instance, intr_vec);
+				gt_other_irq_handler(engine_gt, instance, intr_vec);
 				continue;
 			}
 
-			hwe = xe_gt_hw_engine(gt, class, instance, false);
+			hwe = xe_gt_hw_engine(engine_gt, class, instance, false);
 			if (!hwe)
 				continue;
 
@@ -285,24 +317,24 @@ static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
 static irqreturn_t xelp_irq_handler(int irq, void *arg)
 {
 	struct xe_device *xe = arg;
-	struct xe_gt *gt = xe_root_mmio_gt(xe);
+	struct xe_tile *tile = xe_device_get_root_tile(xe);
 	u32 master_ctl, gu_misc_iir;
 	long unsigned int intr_dw[2];
 	u32 identity[32];
 
-	master_ctl = xelp_intr_disable(gt);
+	master_ctl = xelp_intr_disable(xe);
 	if (!master_ctl) {
-		xelp_intr_enable(gt, false);
+		xelp_intr_enable(xe, false);
 		return IRQ_NONE;
 	}
 
-	gt_irq_handler(xe, gt, master_ctl, intr_dw, identity);
+	gt_irq_handler(tile, master_ctl, intr_dw, identity);
 
 	xe_display_irq_handler(xe, master_ctl);
 
-	gu_misc_iir = gu_misc_irq_ack(gt, master_ctl);
+	gu_misc_iir = gu_misc_irq_ack(xe, master_ctl);
 
-	xelp_intr_enable(gt, false);
+	xelp_intr_enable(xe, false);
 
 	xe_display_irq_enable(xe, gu_misc_iir);
 
@@ -311,38 +343,38 @@ static irqreturn_t xelp_irq_handler(int irq, void *arg)
 
 static u32 dg1_intr_disable(struct xe_device *xe)
 {
-	struct xe_gt *gt = xe_root_mmio_gt(xe);
+	struct xe_gt *mmio = xe_root_mmio_gt(xe);
 	u32 val;
 
 	/* First disable interrupts */
-	xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, 0);
+	xe_mmio_write32(mmio, DG1_MSTR_TILE_INTR, 0);
 
 	/* Get the indication levels and ack the master unit */
-	val = xe_mmio_read32(gt, DG1_MSTR_TILE_INTR);
+	val = xe_mmio_read32(mmio, DG1_MSTR_TILE_INTR);
 	if (unlikely(!val))
 		return 0;
 
-	xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, val);
+	xe_mmio_write32(mmio, DG1_MSTR_TILE_INTR, val);
 
 	return val;
 }
 
 static void dg1_intr_enable(struct xe_device *xe, bool stall)
 {
-	struct xe_gt *gt = xe_root_mmio_gt(xe);
+	struct xe_gt *mmio = xe_root_mmio_gt(xe);
 
-	xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, DG1_MSTR_IRQ);
+	xe_mmio_write32(mmio, DG1_MSTR_TILE_INTR, DG1_MSTR_IRQ);
 	if (stall)
-		xe_mmio_read32(gt, DG1_MSTR_TILE_INTR);
+		xe_mmio_read32(mmio, DG1_MSTR_TILE_INTR);
 }
 
-static void dg1_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
+static void dg1_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
 {
-	gt_irq_postinstall(xe, gt);
+	gt_irq_postinstall(tile);
 
-	unmask_and_enable(gt, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
+	unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
 
-	if (gt->info.id == XE_GT0)
+	if (tile->id == 0)
 		dg1_intr_enable(xe, true);
 }
 
@@ -354,8 +386,8 @@ static void dg1_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
 static irqreturn_t dg1_irq_handler(int irq, void *arg)
 {
 	struct xe_device *xe = arg;
-	struct xe_gt *gt;
-	u32 master_tile_ctl, master_ctl = 0, tile0_master_ctl = 0, gu_misc_iir;
+	struct xe_tile *tile;
+	u32 master_tile_ctl, master_ctl = 0, gu_misc_iir = 0;
 	long unsigned int intr_dw[2];
 	u32 identity[32];
 	u8 id;
@@ -368,12 +400,13 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
 		return IRQ_NONE;
 	}
 
-	for_each_gt(gt, xe, id) {
-		if ((master_tile_ctl & DG1_MSTR_TILE(gt_to_tile(gt)->id)) == 0)
+	for_each_tile(tile, xe, id) {
+		struct xe_gt *mmio = tile->primary_gt;
+
+		if ((master_tile_ctl & DG1_MSTR_TILE(tile->id)) == 0)
 			continue;
 
-		if (!xe_gt_is_media_type(gt))
-			master_ctl = xe_mmio_read32(gt, GFX_MSTR_IRQ);
+		master_ctl = xe_mmio_read32(mmio, GFX_MSTR_IRQ);
 
 		/*
 		 * We might be in irq handler just when PCIe DPC is initiated
@@ -381,124 +414,125 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
 		 * irq as device is inaccessible.
 		 */
 		if (master_ctl == REG_GENMASK(31, 0)) {
-			dev_dbg(gt_to_xe(gt)->drm.dev,
+			dev_dbg(tile_to_xe(tile)->drm.dev,
 				"Ignore this IRQ as device might be in DPC containment.\n");
 			return IRQ_HANDLED;
 		}
 
-		if (!xe_gt_is_media_type(gt))
-			xe_mmio_write32(gt, GFX_MSTR_IRQ, master_ctl);
-		gt_irq_handler(xe, gt, master_ctl, intr_dw, identity);
+		xe_mmio_write32(mmio, GFX_MSTR_IRQ, master_ctl);
+
+		gt_irq_handler(tile, master_ctl, intr_dw, identity);
 
 		/*
-		 * Save primary tile's master interrupt register for display
-		 * processing below.
+		 * Display interrupts (including display backlight operations
+		 * that get reported as Gunit GSE) would only be hooked up to
+		 * the primary tile.
 		 */
-		if (id == 0)
-			tile0_master_ctl = master_ctl;
+		if (id == 0) {
+			xe_display_irq_handler(xe, master_ctl);
+			gu_misc_iir = gu_misc_irq_ack(xe, master_ctl);
+		}
 	}
 
-	xe_display_irq_handler(xe, tile0_master_ctl);
-
-	/* Gunit GSE interrupts can trigger display backlight operations */
-	gu_misc_iir = gu_misc_irq_ack(gt, tile0_master_ctl);
-
 	dg1_intr_enable(xe, false);
-
 	xe_display_irq_enable(xe, gu_misc_iir);
 
 	return IRQ_HANDLED;
 }
 
-static void gt_irq_reset(struct xe_gt *gt)
+static void gt_irq_reset(struct xe_tile *tile)
 {
-	u32 ccs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COMPUTE);
-	u32 bcs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COPY);
+	struct xe_gt *mmio = tile->primary_gt;
+
+	u32 ccs_mask = xe_hw_engine_mask_per_class(tile->primary_gt,
+						   XE_ENGINE_CLASS_COMPUTE);
+	u32 bcs_mask = xe_hw_engine_mask_per_class(tile->primary_gt,
+						   XE_ENGINE_CLASS_COPY);
 
 	/* Disable RCS, BCS, VCS and VECS class engines. */
-	xe_mmio_write32(gt, RENDER_COPY_INTR_ENABLE,	 0);
-	xe_mmio_write32(gt, VCS_VECS_INTR_ENABLE,	 0);
+	xe_mmio_write32(mmio, RENDER_COPY_INTR_ENABLE, 0);
+	xe_mmio_write32(mmio, VCS_VECS_INTR_ENABLE, 0);
 	if (ccs_mask)
-		xe_mmio_write32(gt, CCS_RSVD_INTR_ENABLE, 0);
+		xe_mmio_write32(mmio, CCS_RSVD_INTR_ENABLE, 0);
 
 	/* Restore masks irqs on RCS, BCS, VCS and VECS engines. */
-	xe_mmio_write32(gt, RCS0_RSVD_INTR_MASK,	~0);
-	xe_mmio_write32(gt, BCS_RSVD_INTR_MASK,	~0);
+	xe_mmio_write32(mmio, RCS0_RSVD_INTR_MASK,	~0);
+	xe_mmio_write32(mmio, BCS_RSVD_INTR_MASK,	~0);
 	if (bcs_mask & (BIT(1)|BIT(2)))
-		xe_mmio_write32(gt, XEHPC_BCS1_BCS2_INTR_MASK, ~0);
+		xe_mmio_write32(mmio, XEHPC_BCS1_BCS2_INTR_MASK, ~0);
 	if (bcs_mask & (BIT(3)|BIT(4)))
-		xe_mmio_write32(gt, XEHPC_BCS3_BCS4_INTR_MASK, ~0);
+		xe_mmio_write32(mmio, XEHPC_BCS3_BCS4_INTR_MASK, ~0);
 	if (bcs_mask & (BIT(5)|BIT(6)))
-		xe_mmio_write32(gt, XEHPC_BCS5_BCS6_INTR_MASK, ~0);
+		xe_mmio_write32(mmio, XEHPC_BCS5_BCS6_INTR_MASK, ~0);
 	if (bcs_mask & (BIT(7)|BIT(8)))
-		xe_mmio_write32(gt, XEHPC_BCS7_BCS8_INTR_MASK, ~0);
-	xe_mmio_write32(gt, VCS0_VCS1_INTR_MASK,	~0);
-	xe_mmio_write32(gt, VCS2_VCS3_INTR_MASK,	~0);
-	xe_mmio_write32(gt, VECS0_VECS1_INTR_MASK,	~0);
+		xe_mmio_write32(mmio, XEHPC_BCS7_BCS8_INTR_MASK, ~0);
+	xe_mmio_write32(mmio, VCS0_VCS1_INTR_MASK,	~0);
+	xe_mmio_write32(mmio, VCS2_VCS3_INTR_MASK,	~0);
+	xe_mmio_write32(mmio, VECS0_VECS1_INTR_MASK,	~0);
 	if (ccs_mask & (BIT(0)|BIT(1)))
-		xe_mmio_write32(gt, CCS0_CCS1_INTR_MASK, ~0);
+		xe_mmio_write32(mmio, CCS0_CCS1_INTR_MASK, ~0);
 	if (ccs_mask & (BIT(2)|BIT(3)))
-		xe_mmio_write32(gt,  CCS2_CCS3_INTR_MASK, ~0);
+		xe_mmio_write32(mmio,  CCS2_CCS3_INTR_MASK, ~0);
 
-	xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_ENABLE, 0);
-	xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_MASK,  ~0);
-	xe_mmio_write32(gt, GUC_SG_INTR_ENABLE,	 0);
-	xe_mmio_write32(gt, GUC_SG_INTR_MASK,		~0);
+	xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_ENABLE, 0);
+	xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_MASK,  ~0);
+	xe_mmio_write32(mmio, GUC_SG_INTR_ENABLE,	 0);
+	xe_mmio_write32(mmio, GUC_SG_INTR_MASK,		~0);
 }
 
-static void xelp_irq_reset(struct xe_gt *gt)
+static void xelp_irq_reset(struct xe_tile *tile)
 {
-	xelp_intr_disable(gt);
+	xelp_intr_disable(tile_to_xe(tile));
 
-	gt_irq_reset(gt);
+	gt_irq_reset(tile);
 
-	mask_and_disable(gt, GU_MISC_IRQ_OFFSET);
-	mask_and_disable(gt, PCU_IRQ_OFFSET);
+	mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
+	mask_and_disable(tile, PCU_IRQ_OFFSET);
 }
 
-static void dg1_irq_reset(struct xe_gt *gt)
+static void dg1_irq_reset(struct xe_tile *tile)
 {
-	if (gt->info.id == 0)
-		dg1_intr_disable(gt_to_xe(gt));
+	if (tile->id == 0)
+		dg1_intr_disable(tile_to_xe(tile));
 
-	gt_irq_reset(gt);
+	gt_irq_reset(tile);
 
-	mask_and_disable(gt, GU_MISC_IRQ_OFFSET);
-	mask_and_disable(gt, PCU_IRQ_OFFSET);
+	mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
+	mask_and_disable(tile, PCU_IRQ_OFFSET);
 }
 
 static void xe_irq_reset(struct xe_device *xe)
 {
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	u8 id;
 
-	for_each_gt(gt, xe, id) {
+	for_each_tile(tile, xe, id) {
 		if (GRAPHICS_VERx100(xe) >= 1210)
-			dg1_irq_reset(gt);
+			dg1_irq_reset(tile);
 		else
-			xelp_irq_reset(gt);
+			xelp_irq_reset(tile);
 	}
 
 	xe_display_irq_reset(xe);
 }
 
-void xe_gt_irq_postinstall(struct xe_gt *gt)
+void xe_gt_irq_postinstall(struct xe_tile *tile)
 {
-	struct xe_device *xe = gt_to_xe(gt);
+	struct xe_device *xe = tile_to_xe(tile);
 
 	if (GRAPHICS_VERx100(xe) >= 1210)
-		dg1_irq_postinstall(xe, gt);
+		dg1_irq_postinstall(xe, tile);
 	else
-		xelp_irq_postinstall(xe, gt);
+		xelp_irq_postinstall(xe, tile);
 }
 
 static void xe_irq_postinstall(struct xe_device *xe)
 {
-	struct xe_gt *gt;
+	struct xe_tile *tile;
 	u8 id;
 
-	for_each_gt(gt, xe, id)
-		xe_gt_irq_postinstall(gt);
+	for_each_tile(tile, xe, id)
+		xe_gt_irq_postinstall(tile);
 
 	xe_display_irq_postinstall(xe, xe_root_mmio_gt(xe));
 }
diff --git a/drivers/gpu/drm/xe/xe_irq.h b/drivers/gpu/drm/xe/xe_irq.h
index 34ecf22b32d3..69113c21e1cd 100644
--- a/drivers/gpu/drm/xe/xe_irq.h
+++ b/drivers/gpu/drm/xe/xe_irq.h
@@ -7,10 +7,10 @@
 #define _XE_IRQ_H_
 
 struct xe_device;
-struct xe_gt;
+struct xe_tile;
 
 int xe_irq_install(struct xe_device *xe);
-void xe_gt_irq_postinstall(struct xe_gt *gt);
+void xe_gt_irq_postinstall(struct xe_tile *tile);
 void xe_irq_shutdown(struct xe_device *xe);
 void xe_irq_suspend(struct xe_device *xe);
 void xe_irq_resume(struct xe_device *xe);
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 22/31] drm/xe/irq: Handle ASLE backlight interrupts at same time as display
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (20 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 21/31] drm/xe: Interrupts are delivered per-tile, not per-GT Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 23/31] drm/xe/irq: Ensure primary GuC won't clobber media GuC's interrupt mask Matt Roper
                   ` (11 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Our only use of GUnit interrupts is to handle ASLE backlight operations
that are reported as GUnit GSE interrupts.  Move the enable/disable of
these interrupts adjacent to display interrupts.

In the future we may want to even move these inside the
xe_display_irq_*() functions.  But since these rely on xe_irq static
functions like mask_and_disable() it's easier to keep them separate for
now.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_irq.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index ad2f73b2a031..c069e374a947 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -187,8 +187,6 @@ static void xelp_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
 
 	gt_irq_postinstall(tile);
 
-	unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
-
 	xelp_intr_enable(xe, true);
 }
 
@@ -372,8 +370,6 @@ static void dg1_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
 {
 	gt_irq_postinstall(tile);
 
-	unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
-
 	if (tile->id == 0)
 		dg1_intr_enable(xe, true);
 }
@@ -486,7 +482,6 @@ static void xelp_irq_reset(struct xe_tile *tile)
 
 	gt_irq_reset(tile);
 
-	mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
 	mask_and_disable(tile, PCU_IRQ_OFFSET);
 }
 
@@ -497,7 +492,6 @@ static void dg1_irq_reset(struct xe_tile *tile)
 
 	gt_irq_reset(tile);
 
-	mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
 	mask_and_disable(tile, PCU_IRQ_OFFSET);
 }
 
@@ -513,6 +507,8 @@ static void xe_irq_reset(struct xe_device *xe)
 			xelp_irq_reset(tile);
 	}
 
+	tile = xe_device_get_root_tile(xe);
+	mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
 	xe_display_irq_reset(xe);
 }
 
@@ -535,6 +531,13 @@ static void xe_irq_postinstall(struct xe_device *xe)
 		xe_gt_irq_postinstall(tile);
 
 	xe_display_irq_postinstall(xe, xe_root_mmio_gt(xe));
+
+	/*
+	 * ASLE backlight operations are reported via GUnit GSE interrupts
+	 * on the root tile.
+	 */
+	unmask_and_enable(xe_device_get_root_tile(xe),
+			  GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
 }
 
 static irq_handler_t xe_irq_handler(struct xe_device *xe)
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 23/31] drm/xe/irq: Ensure primary GuC won't clobber media GuC's interrupt mask
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (21 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 22/31] drm/xe/irq: Handle ASLE backlight interrupts at same time as display Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 24/31] drm/xe/irq: Untangle postinstall functions Matt Roper
                   ` (10 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Although primary and media GuC share a single interrupt enable bit, they
each have distinct bits in the mask register.  Although we always enable
interrupts for the primary GuC before the media GuC today (and never
disable either of them), this might not always be the case in the
future, so use a RMW when updating the mask register to ensure the other
GuC's mask doesn't get clobbered.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_guc.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index ecc843d91f62..04a57af85d9e 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -532,12 +532,15 @@ static void guc_enable_irq(struct xe_guc *guc)
 		REG_FIELD_PREP(ENGINE0_MASK, GUC_INTR_GUC2HOST)  :
 		REG_FIELD_PREP(ENGINE1_MASK, GUC_INTR_GUC2HOST);
 
+	/* Primary GuC and media GuC share a single enable bit */
 	xe_mmio_write32(gt, GUC_SG_INTR_ENABLE,
 			REG_FIELD_PREP(ENGINE1_MASK, GUC_INTR_GUC2HOST));
-	if (xe_gt_is_media_type(gt))
-		xe_mmio_rmw32(gt, GUC_SG_INTR_MASK, events, 0);
-	else
-		xe_mmio_write32(gt, GUC_SG_INTR_MASK, ~events);
+
+	/*
+	 * There are separate mask bits for primary and media GuCs, so use
+	 * a RMW operation to avoid clobbering the other GuC's setting.
+	 */
+	xe_mmio_rmw32(gt, GUC_SG_INTR_MASK, events, 0);
 }
 
 int xe_guc_enable_communication(struct xe_guc *guc)
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 24/31] drm/xe/irq: Untangle postinstall functions
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (22 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 23/31] drm/xe/irq: Ensure primary GuC won't clobber media GuC's interrupt mask Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 25/31] drm/xe: Replace xe_gt_irq_postinstall with xe_irq_enable_hwe Matt Roper
                   ` (9 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

The xe_irq_postinstall() never actually gets called after installing the
interrupt handler.  This oversight seems to get papered over due to the
fact that the (misnamed) xe_gt_irq_postinstall does more than it really
should and gets called in the middle of the GT initialization.  The
callstack for postinstall is also a bit muddled with top-level device
interrupt enablement happening within platform-specific functions called
from the per-tile xe_gt_irq_postinstall() function.

Clean this all up by adding the missing call to xe_irq_postinstall()
after installing the interrupt handler and pull top-level irq enablement
up to xe_irq_postinstall where we'd expect it to be.

The xe_gt_irq_postinstall() function is still a bit misnamed here; an
upcoming patch will refocus its purpose and rename it.

v2:
 - Squash in patch to actually call xe_irq_postinstall() after
   installing the interrupt handler.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_irq.c | 37 +++++++++----------------------------
 1 file changed, 9 insertions(+), 28 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index c069e374a947..85bb9bd6b6be 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -122,7 +122,7 @@ static inline void xelp_intr_enable(struct xe_device *xe, bool stall)
 		xe_mmio_read32(mmio, GFX_MSTR_IRQ);
 }
 
-static void gt_irq_postinstall(struct xe_tile *tile)
+void xe_gt_irq_postinstall(struct xe_tile *tile)
 {
 	struct xe_device *xe = tile_to_xe(tile);
 	struct xe_gt *mmio = tile->primary_gt;
@@ -181,15 +181,6 @@ static void gt_irq_postinstall(struct xe_tile *tile)
 	xe_mmio_write32(mmio, GUC_SG_INTR_MASK,  ~0);
 }
 
-static void xelp_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
-{
-	/* TODO: PCH */
-
-	gt_irq_postinstall(tile);
-
-	xelp_intr_enable(xe, true);
-}
-
 static u32
 gt_engine_identity(struct xe_device *xe,
 		   struct xe_gt *mmio,
@@ -366,14 +357,6 @@ static void dg1_intr_enable(struct xe_device *xe, bool stall)
 		xe_mmio_read32(mmio, DG1_MSTR_TILE_INTR);
 }
 
-static void dg1_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
-{
-	gt_irq_postinstall(tile);
-
-	if (tile->id == 0)
-		dg1_intr_enable(xe, true);
-}
-
 /*
  * Top-level interrupt handler for Xe_LP+ and beyond.  These platforms have
  * a "master tile" interrupt register which must be consulted before the
@@ -512,16 +495,6 @@ static void xe_irq_reset(struct xe_device *xe)
 	xe_display_irq_reset(xe);
 }
 
-void xe_gt_irq_postinstall(struct xe_tile *tile)
-{
-	struct xe_device *xe = tile_to_xe(tile);
-
-	if (GRAPHICS_VERx100(xe) >= 1210)
-		dg1_irq_postinstall(xe, tile);
-	else
-		xelp_irq_postinstall(xe, tile);
-}
-
 static void xe_irq_postinstall(struct xe_device *xe)
 {
 	struct xe_tile *tile;
@@ -538,6 +511,12 @@ static void xe_irq_postinstall(struct xe_device *xe)
 	 */
 	unmask_and_enable(xe_device_get_root_tile(xe),
 			  GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
+
+	/* Enable top-level interrupts */
+	if (GRAPHICS_VERx100(xe) >= 1210)
+		dg1_intr_enable(xe, true);
+	else
+		xelp_intr_enable(xe, true);
 }
 
 static irq_handler_t xe_irq_handler(struct xe_device *xe)
@@ -588,6 +567,8 @@ int xe_irq_install(struct xe_device *xe)
 		return err;
 	}
 
+	xe_irq_postinstall(xe);
+
 	err = drmm_add_action_or_reset(&xe->drm, irq_uninstall, xe);
 	if (err)
 		return err;
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 25/31] drm/xe: Replace xe_gt_irq_postinstall with xe_irq_enable_hwe
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (23 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 24/31] drm/xe/irq: Untangle postinstall functions Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 26/31] drm/xe: Invalidate TLB on all affected GTs during GGTT updates Matt Roper
                   ` (8 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

The majority of xe_gt_irq_postinstall() is really focused on the
hardware engine interrupts; other GT-related interrupts such as the GuC
are enabled/disabled independently.  Renaming the function and making it
truly GT-specific will make it more clear what the intended focus is.

Disabling/masking of other interrupts (such as GuC interrupts) is
unnecessary since that has already happened during the irq_reset stage,
and doing so will become harmful once the media GT is re-enabled since
calls to xe_gt_irq_postinstall during media GT initialization would
incorrectly disable the primary GT's GuC interrupts.

Also, since this function is called from gt_fw_domain_init(), it's not
necessary to also call it earlier during xe_irq_postinstall; just
xe_irq_resume to handle runtime resume should be sufficient.

v2:
 - Drop unnecessary !gt check.  (Lucas)
 - Reword some comments about enable/unmask for clarity.  (Lucas)

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/xe_gt.c        |  4 +-
 drivers/gpu/drm/xe/xe_hw_engine.c |  1 +
 drivers/gpu/drm/xe/xe_irq.c       | 87 +++++++++++++++----------------
 drivers/gpu/drm/xe/xe_irq.h       |  3 +-
 4 files changed, 48 insertions(+), 47 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index 071d4fbd3efc..335148f1cd39 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -309,8 +309,8 @@ static int gt_fw_domain_init(struct xe_gt *gt)
 	/* XXX: Fake that we pull the engine mask from hwconfig blob */
 	gt->info.engine_mask = gt->info.__engine_mask;
 
-	/* Enables per hw engine IRQs */
-	xe_gt_irq_postinstall(gt_to_tile(gt));
+	/* Enable per hw engine IRQs */
+	xe_irq_enable_hwe(gt);
 
 	/* Rerun MCR init as we now have hw engine list */
 	xe_gt_mcr_init(gt);
diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
index b12f65a2bab3..b42a0cb50159 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine.c
+++ b/drivers/gpu/drm/xe/xe_hw_engine.c
@@ -17,6 +17,7 @@
 #include "xe_gt.h"
 #include "xe_gt_topology.h"
 #include "xe_hw_fence.h"
+#include "xe_irq.h"
 #include "xe_lrc.h"
 #include "xe_macros.h"
 #include "xe_mmio.h"
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 85bb9bd6b6be..b4ed1e4a3388 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -122,13 +122,12 @@ static inline void xelp_intr_enable(struct xe_device *xe, bool stall)
 		xe_mmio_read32(mmio, GFX_MSTR_IRQ);
 }
 
-void xe_gt_irq_postinstall(struct xe_tile *tile)
+/* Enable/unmask the HWE interrupts for a specific GT's engines. */
+void xe_irq_enable_hwe(struct xe_gt *gt)
 {
-	struct xe_device *xe = tile_to_xe(tile);
-	struct xe_gt *mmio = tile->primary_gt;
+	struct xe_device *xe = gt_to_xe(gt);
+	u32 ccs_mask, bcs_mask;
 	u32 irqs, dmask, smask;
-	u32 ccs_mask = xe_hw_engine_mask_per_class(tile->primary_gt, XE_ENGINE_CLASS_COMPUTE);
-	u32 bcs_mask = xe_hw_engine_mask_per_class(tile->primary_gt, XE_ENGINE_CLASS_COPY);
 
 	if (xe_device_guc_submission_enabled(xe)) {
 		irqs = GT_RENDER_USER_INTERRUPT |
@@ -140,45 +139,44 @@ void xe_gt_irq_postinstall(struct xe_tile *tile)
 		       GT_WAIT_SEMAPHORE_INTERRUPT;
 	}
 
+	ccs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COMPUTE);
+	bcs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COPY);
+
 	dmask = irqs << 16 | irqs;
 	smask = irqs << 16;
 
-	/* Enable RCS, BCS, VCS and VECS class interrupts. */
-	xe_mmio_write32(mmio, RENDER_COPY_INTR_ENABLE, dmask);
-	xe_mmio_write32(mmio, VCS_VECS_INTR_ENABLE, dmask);
-	if (ccs_mask)
-		xe_mmio_write32(mmio, CCS_RSVD_INTR_ENABLE, smask);
+	if (!xe_gt_is_media_type(gt)) {
+		/* Enable interrupts for each engine class */
+		xe_mmio_write32(gt, RENDER_COPY_INTR_ENABLE, dmask);
+		if (ccs_mask)
+			xe_mmio_write32(gt, CCS_RSVD_INTR_ENABLE, smask);
 
-	/* Unmask irqs on RCS, BCS, VCS and VECS engines. */
-	xe_mmio_write32(mmio, RCS0_RSVD_INTR_MASK, ~smask);
-	xe_mmio_write32(mmio, BCS_RSVD_INTR_MASK, ~smask);
-	if (bcs_mask & (BIT(1)|BIT(2)))
-		xe_mmio_write32(mmio, XEHPC_BCS1_BCS2_INTR_MASK, ~dmask);
-	if (bcs_mask & (BIT(3)|BIT(4)))
-		xe_mmio_write32(mmio, XEHPC_BCS3_BCS4_INTR_MASK, ~dmask);
-	if (bcs_mask & (BIT(5)|BIT(6)))
-		xe_mmio_write32(mmio, XEHPC_BCS5_BCS6_INTR_MASK, ~dmask);
-	if (bcs_mask & (BIT(7)|BIT(8)))
-		xe_mmio_write32(mmio, XEHPC_BCS7_BCS8_INTR_MASK, ~dmask);
-	xe_mmio_write32(mmio, VCS0_VCS1_INTR_MASK, ~dmask);
-	xe_mmio_write32(mmio, VCS2_VCS3_INTR_MASK, ~dmask);
-	xe_mmio_write32(mmio, VECS0_VECS1_INTR_MASK, ~dmask);
-	if (ccs_mask & (BIT(0)|BIT(1)))
-		xe_mmio_write32(mmio, CCS0_CCS1_INTR_MASK, ~dmask);
-	if (ccs_mask & (BIT(2)|BIT(3)))
-		xe_mmio_write32(mmio,  CCS2_CCS3_INTR_MASK, ~dmask);
+		/* Unmask interrupts for each engine instance */
+		xe_mmio_write32(gt, RCS0_RSVD_INTR_MASK, ~smask);
+		xe_mmio_write32(gt, BCS_RSVD_INTR_MASK, ~smask);
+		if (bcs_mask & (BIT(1)|BIT(2)))
+			xe_mmio_write32(gt, XEHPC_BCS1_BCS2_INTR_MASK, ~dmask);
+		if (bcs_mask & (BIT(3)|BIT(4)))
+			xe_mmio_write32(gt, XEHPC_BCS3_BCS4_INTR_MASK, ~dmask);
+		if (bcs_mask & (BIT(5)|BIT(6)))
+			xe_mmio_write32(gt, XEHPC_BCS5_BCS6_INTR_MASK, ~dmask);
+		if (bcs_mask & (BIT(7)|BIT(8)))
+			xe_mmio_write32(gt, XEHPC_BCS7_BCS8_INTR_MASK, ~dmask);
+		if (ccs_mask & (BIT(0)|BIT(1)))
+			xe_mmio_write32(gt, CCS0_CCS1_INTR_MASK, ~dmask);
+		if (ccs_mask & (BIT(2)|BIT(3)))
+			xe_mmio_write32(gt,  CCS2_CCS3_INTR_MASK, ~dmask);
+	}
 
-	/*
-	 * RPS interrupts will get enabled/disabled on demand when RPS itself
-	 * is enabled/disabled.
-	 */
-	/* TODO: gt->pm_ier, gt->pm_imr */
-	xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_ENABLE, 0);
-	xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_MASK,  ~0);
+	if (xe_gt_is_media_type(gt) || MEDIA_VER(xe) < 13) {
+		/* Enable interrupts for each engine class */
+		xe_mmio_write32(gt, VCS_VECS_INTR_ENABLE, dmask);
 
-	/* Same thing for GuC interrupts */
-	xe_mmio_write32(mmio, GUC_SG_INTR_ENABLE, 0);
-	xe_mmio_write32(mmio, GUC_SG_INTR_MASK,  ~0);
+		/* Unmask interrupts for each engine instance */
+		xe_mmio_write32(gt, VCS0_VCS1_INTR_MASK, ~dmask);
+		xe_mmio_write32(gt, VCS2_VCS3_INTR_MASK, ~dmask);
+		xe_mmio_write32(gt, VECS0_VECS1_INTR_MASK, ~dmask);
+	}
 }
 
 static u32
@@ -497,12 +495,6 @@ static void xe_irq_reset(struct xe_device *xe)
 
 static void xe_irq_postinstall(struct xe_device *xe)
 {
-	struct xe_tile *tile;
-	u8 id;
-
-	for_each_tile(tile, xe, id)
-		xe_gt_irq_postinstall(tile);
-
 	xe_display_irq_postinstall(xe, xe_root_mmio_gt(xe));
 
 	/*
@@ -591,9 +583,16 @@ void xe_irq_suspend(struct xe_device *xe)
 
 void xe_irq_resume(struct xe_device *xe)
 {
+	struct xe_gt *gt;
+	int id;
+
 	spin_lock_irq(&xe->irq.lock);
 	xe->irq.enabled = true;
 	xe_irq_reset(xe);
 	xe_irq_postinstall(xe);
+
+	for_each_gt(gt, xe, id)
+		xe_irq_enable_hwe(gt);
+
 	spin_unlock_irq(&xe->irq.lock);
 }
diff --git a/drivers/gpu/drm/xe/xe_irq.h b/drivers/gpu/drm/xe/xe_irq.h
index 69113c21e1cd..bc42bc90d967 100644
--- a/drivers/gpu/drm/xe/xe_irq.h
+++ b/drivers/gpu/drm/xe/xe_irq.h
@@ -8,11 +8,12 @@
 
 struct xe_device;
 struct xe_tile;
+struct xe_gt;
 
 int xe_irq_install(struct xe_device *xe);
-void xe_gt_irq_postinstall(struct xe_tile *tile);
 void xe_irq_shutdown(struct xe_device *xe);
 void xe_irq_suspend(struct xe_device *xe);
 void xe_irq_resume(struct xe_device *xe);
+void xe_irq_enable_hwe(struct xe_gt *gt);
 
 #endif
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 26/31] drm/xe: Invalidate TLB on all affected GTs during GGTT updates
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (24 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 25/31] drm/xe: Replace xe_gt_irq_postinstall with xe_irq_enable_hwe Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 27/31] drm/xe/tlb: Obtain forcewake when doing GGTT TLB invalidations Matt Roper
                   ` (7 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: matthew.d.roper, Nirmoy Das

The GGTT is part of the tile and is shared by the primary and media GTs
on platforms with a standalone media architecture.  However each of
these GTs has its own TLBs caching the page table lookups, and each
needs to be invalidated separately.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
---
 drivers/gpu/drm/xe/xe_ggtt.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index c4862c1cfd9b..9a3edead3948 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -190,13 +190,10 @@ int xe_ggtt_init(struct xe_ggtt *ggtt)
 #define PVC_GUC_TLB_INV_DESC1			XE_REG(0xcf80)
 #define   PVC_GUC_TLB_INV_DESC1_INVALIDATE	REG_BIT(6)
 
-void xe_ggtt_invalidate(struct xe_ggtt *ggtt)
+static void ggtt_invalidate_gt_tlb(struct xe_gt *gt)
 {
-	/*
-	 * TODO: Loop over each GT in tile once media GT support is
-	 * re-added
-	 */
-	struct xe_gt *gt = ggtt->tile->primary_gt;
+	if (!gt)
+		return;
 
 	/* TODO: vfunc for GuC vs. non-GuC */
 
@@ -221,6 +218,13 @@ void xe_ggtt_invalidate(struct xe_ggtt *ggtt)
 	}
 }
 
+void xe_ggtt_invalidate(struct xe_ggtt *ggtt)
+{
+	/* Each GT in a tile has its own TLB to cache GGTT lookups */
+	ggtt_invalidate_gt_tlb(ggtt->tile->primary_gt);
+	ggtt_invalidate_gt_tlb(ggtt->tile->media_gt);
+}
+
 void xe_ggtt_printk(struct xe_ggtt *ggtt, const char *prefix)
 {
 	u64 addr, scratch_pte;
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 27/31] drm/xe/tlb: Obtain forcewake when doing GGTT TLB invalidations
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (25 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 26/31] drm/xe: Invalidate TLB on all affected GTs during GGTT updates Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 28/31] drm/xe: Allow GT looping and lookup on standalone media Matt Roper
                   ` (6 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper, Nirmoy Das

Updates to the GGTT can happen when there are no in-flight jobs keeping
the hardware awake.  If the GT is powered down when invalidation is
requested, we will not be able to communicate with the GuC (or MMIO) and
the invalidation request will go missing.  Explicitly grab GT forcewake
to ensure the GT and GuC are powered up during the TLB invalidation.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
---
 drivers/gpu/drm/xe/xe_ggtt.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 9a3edead3948..bae9f66a33cb 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -195,6 +195,13 @@ static void ggtt_invalidate_gt_tlb(struct xe_gt *gt)
 	if (!gt)
 		return;
 
+	/*
+	 * Invalidation can happen when there's no in-flight work keeping the
+	 * GT awake.  We need to explicitly grab forcewake to ensure the GT
+	 * and GuC are accessible.
+	 */
+	xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+
 	/* TODO: vfunc for GuC vs. non-GuC */
 
 	if (gt->uc.guc.submission_state.enabled) {
@@ -216,6 +223,8 @@ static void ggtt_invalidate_gt_tlb(struct xe_gt *gt)
 			xe_mmio_write32(gt, GUC_TLB_INV_CR,
 					GUC_TLB_INV_CR_INVALIDATE);
 	}
+
+	xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
 }
 
 void xe_ggtt_invalidate(struct xe_ggtt *ggtt)
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 28/31] drm/xe: Allow GT looping and lookup on standalone media
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (26 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 27/31] drm/xe/tlb: Obtain forcewake when doing GGTT TLB invalidations Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 29/31] drm/xe: Update query uapi to support " Matt Roper
                   ` (5 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Allow xe_device_get_gt() and for_each_gt() to operate as expected on
platforms with standalone media.

FIXME: We need to figure out a consistent ID scheme for GTs.  This patch
keeps the pre-existing behavior of 0/1 being the GT IDs for both PVC
(multi-tile) and MTL (multi-GT), but depending on the direction we
decide to go with uapi, we may change this in the future (e.g., to
return 0/1 on PVC and 0/2 on MTL).  Or if we decide we only need to
expose tiles to userspace and not GTs, we may not even need ID numbers
for the GTs anymore.

v2:
 - Restructure a bit to make the assertions more clear.
 - Clarify in commit message that the goal here is to preserve existing
   behavior; UAPI-visible changes may be introduced in the future once
   we settle on what we really want.

Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
 drivers/gpu/drm/xe/xe_device.h | 40 +++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index 0a3a9134dd18..ea3270ea0d46 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -53,18 +53,42 @@ static inline struct xe_tile *xe_device_get_root_tile(struct xe_device *xe)
 	return &xe->tiles[0];
 }
 
+#define XE_MAX_GT_PER_TILE 2
+
+static inline struct xe_gt *xe_tile_get_gt(struct xe_tile *tile, u8 gt_id)
+{
+	if (drm_WARN_ON(&tile_to_xe(tile)->drm, gt_id > XE_MAX_GT_PER_TILE))
+		gt_id = 0;
+
+	return gt_id ? tile->media_gt : tile->primary_gt;
+}
+
 static inline struct xe_gt *xe_device_get_gt(struct xe_device *xe, u8 gt_id)
 {
+	struct xe_tile *root_tile = xe_device_get_root_tile(xe);
 	struct xe_gt *gt;
 
-	XE_BUG_ON(gt_id > XE_MAX_TILES_PER_DEVICE);
+	/*
+	 * FIXME: This only works for now because multi-tile and standalone
+	 * media are mutually exclusive on the platforms we have today.
+	 *
+	 * id => GT mapping may change once we settle on how we want to handle
+	 * our UAPI.
+	 */
+	if (MEDIA_VER(xe) >= 13) {
+		gt = xe_tile_get_gt(root_tile, gt_id);
+	} else {
+		if (drm_WARN_ON(&xe->drm, gt_id > XE_MAX_TILES_PER_DEVICE))
+			gt_id = 0;
 
-	gt = xe->tiles[gt_id].primary_gt;
-	if (drm_WARN_ON(&xe->drm, !gt))
+		gt = xe->tiles[gt_id].primary_gt;
+	}
+
+	if (!gt)
 		return NULL;
 
-	XE_BUG_ON(gt->info.id != gt_id);
-	XE_BUG_ON(gt->info.type == XE_GT_TYPE_UNINITIALIZED);
+	drm_WARN_ON(&xe->drm, gt->info.id != gt_id);
+	drm_WARN_ON(&xe->drm, gt->info.type == XE_GT_TYPE_UNINITIALIZED);
 
 	return gt;
 }
@@ -100,8 +124,12 @@ static inline void xe_device_guc_submission_disable(struct xe_device *xe)
 	for ((id__) = 0; (id__) < (xe__)->info.tile_count; (id__++)) \
 		for_each_if ((tile__) = &(xe__)->tiles[(id__)])
 
+/*
+ * FIXME: This only works for now since multi-tile and standalone media
+ * happen to be mutually exclusive.  Future platforms may change this...
+ */
 #define for_each_gt(gt__, xe__, id__) \
-	for ((id__) = 0; (id__) < (xe__)->info.tile_count; (id__++)) \
+	for ((id__) = 0; (id__) < (xe__)->info.tile_count + (MEDIA_VER(xe__) >= 13 ? 1 : 0); (id__++)) \
 		for_each_if ((gt__) = xe_device_get_gt((xe__), (id__)))
 
 static inline struct xe_force_wake * gt_to_fw(struct xe_gt *gt)
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 29/31] drm/xe: Update query uapi to support standalone media
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (27 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 28/31] drm/xe: Allow GT looping and lookup on standalone media Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 30/31] drm/xe: Reinstate media GT support Matt Roper
                   ` (4 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: matthew.d.roper

Now that a higher GT count can result from either multiple tiles (with
one GT each) or an extra media GT within the root tile, we need to
update the query code slightly to stop looking at tile_count.

FIXME: As noted previously, we need to decide on a formal direction for
exposing tiles and/or GTs to userspace.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
 drivers/gpu/drm/xe/xe_query.c | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index 8087c94dd782..ce2f0d92a4e4 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -26,6 +26,18 @@ static const enum xe_engine_class xe_to_user_engine_class[] = {
 	[XE_ENGINE_CLASS_COMPUTE] = DRM_XE_ENGINE_CLASS_COMPUTE,
 };
 
+static int num_gt(struct xe_device *xe)
+{
+	int num = xe->info.tile_count;
+
+	if (xe_device_get_root_tile(xe)->media_gt) {
+		drm_WARN_ON(&xe->drm, num > 1);
+		num++;
+	}
+
+	return num;
+}
+
 static size_t calc_hw_engine_info_size(struct xe_device *xe)
 {
 	struct xe_hw_engine *hwe;
@@ -192,7 +204,7 @@ static int query_config(struct xe_device *xe, struct drm_xe_device_query *query)
 		xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K ? SZ_64K : SZ_4K;
 	config->info[XE_QUERY_CONFIG_VA_BITS] = 12 +
 		(9 * (xe->info.vm_max_level + 1));
-	config->info[XE_QUERY_CONFIG_GT_COUNT] = xe->info.tile_count;
+	config->info[XE_QUERY_CONFIG_GT_COUNT] = num_gt(xe);
 	config->info[XE_QUERY_CONFIG_MEM_REGION_COUNT] =
 		hweight_long(xe->info.mem_region_mask);
 	config->info[XE_QUERY_CONFIG_MAX_ENGINE_PRIORITY] =
@@ -211,7 +223,7 @@ static int query_gts(struct xe_device *xe, struct drm_xe_device_query *query)
 {
 	struct xe_gt *gt;
 	size_t size = sizeof(struct drm_xe_query_gts) +
-		xe->info.tile_count * sizeof(struct drm_xe_query_gt);
+		num_gt(xe) * sizeof(struct drm_xe_query_gt);
 	struct drm_xe_query_gts __user *query_ptr =
 		u64_to_user_ptr(query->data);
 	struct drm_xe_query_gts *gts;
@@ -228,14 +240,12 @@ static int query_gts(struct xe_device *xe, struct drm_xe_device_query *query)
 	if (XE_IOCTL_ERR(xe, !gts))
 		return -ENOMEM;
 
-	gts->num_gt = xe->info.tile_count;
+	gts->num_gt = num_gt(xe);
 	for_each_gt(gt, xe, id) {
-		if (id == 0)
-			gts->gts[id].type = XE_QUERY_GT_TYPE_MAIN;
-		else if (xe_gt_is_media_type(gt))
+		if (xe_gt_is_media_type(gt))
 			gts->gts[id].type = XE_QUERY_GT_TYPE_MEDIA;
 		else
-			gts->gts[id].type = XE_QUERY_GT_TYPE_REMOTE;
+			gts->gts[id].type = XE_QUERY_GT_TYPE_MAIN;
 		gts->gts[id].instance = id;
 		gts->gts[id].clock_freq = gt->info.clock_freq;
 		if (!IS_DGFX(xe))
@@ -290,7 +300,7 @@ static int query_hwconfig(struct xe_device *xe,
 
 static size_t calc_topo_query_size(struct xe_device *xe)
 {
-	return xe->info.tile_count *
+	return num_gt(xe) *
 		(3 * sizeof(struct drm_xe_query_topology_mask) +
 		 sizeof_field(struct xe_gt, fuse_topo.g_dss_mask) +
 		 sizeof_field(struct xe_gt, fuse_topo.c_dss_mask) +
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 30/31] drm/xe: Reinstate media GT support
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (28 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 29/31] drm/xe: Update query uapi to support " Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 31/31] drm/xe: Add kerneldoc description of multi-tile devices Matt Roper
                   ` (3 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

Now that tiles and GTs are handled separately and other prerequisite
changes are in place, we're ready to re-enable the media GT.

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 drivers/gpu/drm/xe/regs/xe_gt_regs.h |  8 ++++++++
 drivers/gpu/drm/xe/xe_pci.c          | 26 +++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index b6ef531ca930..0f920175526e 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -8,6 +8,14 @@
 
 #include "regs/xe_reg_defs.h"
 
+/*
+ * The GSI register range [0x0 - 0x40000) is replicated at a higher offset
+ * for the media GT.  xe_mmio and xe_gt_mcr functions will automatically
+ * translate offsets by MEDIA_GT_GSI_OFFSET when operating on the media GT.
+ */
+#define MEDIA_GT_GSI_OFFSET				0x380000
+#define MEDIA_GT_GSI_LENGTH				0x40000
+
 /* RPM unit config (Gen8+) */
 #define RPM_CONFIG0					XE_REG(0xd00)
 #define   RPM_CONFIG0_CRYSTAL_CLOCK_FREQ_MASK		REG_GENMASK(5, 3)
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index ddb256a4e39c..a5212ff3aacf 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -562,7 +562,31 @@ static int xe_info_init(struct xe_device *xe,
 		if (MEDIA_VER(xe) < 13 && media_desc)
 			gt->info.__engine_mask |= media_desc->hw_engine_mask;
 
-		/* TODO: Init media GT, if present */
+		if (MEDIA_VER(xe) < 13 || !media_desc)
+			continue;
+
+		/*
+		 * Allocate and setup media GT for platforms with standalone
+		 * media.
+		 */
+		tile->media_gt = xe_gt_alloc(tile);
+		if (IS_ERR(tile->media_gt))
+			return PTR_ERR(tile->media_gt);
+
+		gt = tile->media_gt;
+		gt->info.type = XE_GT_TYPE_MEDIA;
+		gt->info.__engine_mask = media_desc->hw_engine_mask;
+		gt->mmio.adj_offset = MEDIA_GT_GSI_OFFSET;
+		gt->mmio.adj_limit = MEDIA_GT_GSI_LENGTH;
+
+		/*
+		 * FIXME: At the moment multi-tile and standalone media are
+		 * mutually exclusive on current platforms.  We'll need to
+		 * come up with a better way to number GTs if we ever wind
+		 * up with platforms that support both together.
+		 */
+		drm_WARN_ON(&xe->drm, id != 0);
+		gt->info.id = 1;
 	}
 
 	return 0;
-- 
2.40.1


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

* [Intel-xe] [PATCH v3 31/31] drm/xe: Add kerneldoc description of multi-tile devices
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (29 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 30/31] drm/xe: Reinstate media GT support Matt Roper
@ 2023-05-30 21:15 ` Matt Roper
  2023-05-30 21:18 ` [Intel-xe] ✓ CI.Patch_applied: success for Separate GT and tile (rev4) Patchwork
                   ` (2 subsequent siblings)
  33 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-30 21:15 UTC (permalink / raw)
  To: intel-xe; +Cc: Lucas De Marchi, matthew.d.roper

v2:
 - Fix doubled word.  (Lucas)

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
 Documentation/gpu/xe/index.rst   |  1 +
 Documentation/gpu/xe/xe_tile.rst | 14 ++++++++
 drivers/gpu/drm/xe/xe_tile.c     | 57 ++++++++++++++++++++++++++++++++
 3 files changed, 72 insertions(+)
 create mode 100644 Documentation/gpu/xe/xe_tile.rst

diff --git a/Documentation/gpu/xe/index.rst b/Documentation/gpu/xe/index.rst
index 2fddf9ed251e..5c4d6bb370f3 100644
--- a/Documentation/gpu/xe/index.rst
+++ b/Documentation/gpu/xe/index.rst
@@ -21,3 +21,4 @@ DG2, etc is provided to prototype the driver.
    xe_wa
    xe_rtp
    xe_firmware
+   xe_tile
diff --git a/Documentation/gpu/xe/xe_tile.rst b/Documentation/gpu/xe/xe_tile.rst
new file mode 100644
index 000000000000..c33f68dd95b6
--- /dev/null
+++ b/Documentation/gpu/xe/xe_tile.rst
@@ -0,0 +1,14 @@
+.. SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+==================
+Multi-tile Devices
+==================
+
+.. kernel-doc:: drivers/gpu/drm/xe/xe_tile.c
+   :doc: Multi-tile Design
+
+Internal API
+============
+
+.. kernel-doc:: drivers/gpu/drm/xe/xe_tile.c
+   :internal:
diff --git a/drivers/gpu/drm/xe/xe_tile.c b/drivers/gpu/drm/xe/xe_tile.c
index 908eec5c17d9..fda58380c83c 100644
--- a/drivers/gpu/drm/xe/xe_tile.c
+++ b/drivers/gpu/drm/xe/xe_tile.c
@@ -12,6 +12,63 @@
 #include "xe_tile.h"
 #include "xe_ttm_vram_mgr.h"
 
+/**
+ * DOC: Multi-tile Design
+ *
+ * Different vendors use the term "tile" a bit differently, but in the Intel
+ * world, a 'tile' is pretty close to what most people would think of as being
+ * a complete GPU.  When multiple GPUs are placed behind a single PCI device,
+ * that's what is referred to as a "multi-tile device."  In such cases, pretty
+ * much all hardware is replicated per-tile, although certain responsibilities
+ * like PCI communication, reporting of interrupts to the OS, etc. are handled
+ * solely by the "root tile."  A multi-tile platform takes care of tying the
+ * tiles together in a way such that interrupt notifications from remote tiles
+ * are forwarded to the root tile, the per-tile vram is combined into a single
+ * address space, etc.
+ *
+ * In contrast, a "GT" (which officially stands for "Graphics Technology") is
+ * the subset of a GPU/tile that is responsible for implementing graphics
+ * and/or media operations.  The GT is where a lot of the driver implementation
+ * happens since it's where the hardware engines, the execution units, and the
+ * GuC all reside.
+ *
+ * Historically most Intel devices were single-tile devices that contained a
+ * single GT.  PVC is an example of an Intel platform built on a multi-tile
+ * design (i.e., multiple GPUs behind a single PCI device); each PVC tile only
+ * has a single GT.  In contrast, platforms like MTL that have separate chips
+ * for render and media IP are still only a single logical GPU, but the
+ * graphics and media IP blocks are each exposed as a separate GT within that
+ * single GPU.  This is important from a software perspective because multi-GT
+ * platforms like MTL only replicate a subset of the GPU hardware and behave
+ * differently than multi-tile platforms like PVC where nearly everything is
+ * replicated.
+ *
+ * Per-tile functionality (shared by all GTs within the tile):
+ *  - Complete 4MB MMIO space (containing SGunit/SoC registers, GT
+ *    registers, display registers, etc.)
+ *  - Global GTT
+ *  - VRAM (if discrete)
+ *  - Interrupt flows
+ *  - Migration context
+ *  - kernel batchbuffer pool
+ *  - Primary GT
+ *  - Media GT (if media version >= 13)
+ *
+ * Per-GT functionality:
+ *  - GuC
+ *  - Hardware engines
+ *  - Programmable hardware units (subslices, EUs)
+ *  - GSI subset of registers (multiple copies of these registers reside
+ *    within the complete MMIO space provided by the tile, but at different
+ *    offsets --- 0 for render, 0x380000 for media)
+ *  - Multicast register steering
+ *  - TLBs to cache page table translations
+ *  - Reset capability
+ *  - Low-level power management (e.g., C6)
+ *  - Clock frequency
+ *  - MOCS and PAT programming
+ */
+
 /**
  * xe_tile_alloc - Perform per-tile memory allocation
  * @tile: Tile to perform allocations for
-- 
2.40.1


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

* [Intel-xe] ✓ CI.Patch_applied: success for Separate GT and tile (rev4)
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (30 preceding siblings ...)
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 31/31] drm/xe: Add kerneldoc description of multi-tile devices Matt Roper
@ 2023-05-30 21:18 ` Patchwork
  2023-05-30 21:21 ` [Intel-xe] ✓ CI.KUnit: " Patchwork
  2023-05-30 21:25 ` [Intel-xe] ✓ CI.Build: " Patchwork
  33 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2023-05-30 21:18 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-xe

== Series Details ==

Series: Separate GT and tile (rev4)
URL   : https://patchwork.freedesktop.org/series/117614/
State : success

== Summary ==

=== Applying kernel patches on branch 'drm-xe-next' with base: ===
Base commit: 90a956e56 drm/xe: Rename GPU offset helper to reflect true usage
=== git am output follows ===
Applying: drm/xe/mtl: Disable media GT
Applying: drm/xe: Introduce xe_tile
Applying: drm/xe: Add backpointer from gt to tile
Applying: fixup! drm/xe: keep pulling mem_access_get further back
Applying: drm/xe: Add for_each_tile iterator
Applying: drm/xe: Move register MMIO into xe_tile
Applying: fixup! drm/xe/display: Implement display support
Applying: drm/xe: Move GGTT from GT to tile
Applying: fixup! drm/xe/display: Implement display support
Applying: drm/xe: Move VRAM from GT to tile
Applying: fixup! drm/xe/display: Implement display support
Applying: drm/xe: Memory allocations are tile-based, not GT-based
Applying: fixup! drm/xe/display: Implement display support
Applying: drm/xe: Move migration from GT to tile
Applying: drm/xe: Clarify 'gt' retrieval for primary tile
Applying: drm/xe: Drop vram_id
Applying: drm/xe: Drop extra_gts[] declarations and XE_GT_TYPE_REMOTE
Applying: drm/xe: Allocate GT dynamically
Applying: drm/xe: Add media GT to tile
Applying: drm/xe: Move display IRQ postinstall out of GT function
Applying: drm/xe: Interrupts are delivered per-tile, not per-GT
Applying: drm/xe/irq: Handle ASLE backlight interrupts at same time as display
Applying: drm/xe/irq: Ensure primary GuC won't clobber media GuC's interrupt mask
Applying: drm/xe/irq: Untangle postinstall functions
Applying: drm/xe: Replace xe_gt_irq_postinstall with xe_irq_enable_hwe
Applying: drm/xe: Invalidate TLB on all affected GTs during GGTT updates
Applying: drm/xe/tlb: Obtain forcewake when doing GGTT TLB invalidations
Applying: drm/xe: Allow GT looping and lookup on standalone media
Applying: drm/xe: Update query uapi to support standalone media
Applying: drm/xe: Reinstate media GT support
Applying: drm/xe: Add kerneldoc description of multi-tile devices



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

* [Intel-xe] ✓ CI.KUnit: success for Separate GT and tile (rev4)
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (31 preceding siblings ...)
  2023-05-30 21:18 ` [Intel-xe] ✓ CI.Patch_applied: success for Separate GT and tile (rev4) Patchwork
@ 2023-05-30 21:21 ` Patchwork
  2023-05-30 21:25 ` [Intel-xe] ✓ CI.Build: " Patchwork
  33 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2023-05-30 21:21 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-xe

== Series Details ==

Series: Separate GT and tile (rev4)
URL   : https://patchwork.freedesktop.org/series/117614/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
stty: 'standard input': Inappropriate ioctl for device
[21:19:59] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[21:20:03] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[21:20:25] Starting KUnit Kernel (1/1)...
[21:20:25] ============================================================
[21:20:25] ==================== xe_bo (2 subtests) ====================
[21:20:25] [SKIPPED] xe_ccs_migrate_kunit
[21:20:25] [SKIPPED] xe_bo_evict_kunit
[21:20:25] ===================== [SKIPPED] xe_bo ======================
[21:20:25] ================== xe_dma_buf (1 subtest) ==================
[21:20:25] [SKIPPED] xe_dma_buf_kunit
[21:20:25] =================== [SKIPPED] xe_dma_buf ===================
[21:20:25] ================== xe_migrate (1 subtest) ==================
[21:20:25] [SKIPPED] xe_migrate_sanity_kunit
[21:20:25] =================== [SKIPPED] xe_migrate ===================
[21:20:25] =================== xe_pci (2 subtests) ====================
[21:20:25] [PASSED] xe_gmdid_graphics_ip
[21:20:25] [PASSED] xe_gmdid_media_ip
[21:20:25] ===================== [PASSED] xe_pci ======================
[21:20:25] ==================== xe_rtp (1 subtest) ====================
[21:20:25] ================== xe_rtp_process_tests  ===================
[21:20:25] [PASSED] coalesce-same-reg
[21:20:25] [PASSED] no-match-no-add
[21:20:25] [PASSED] no-match-no-add-multiple-rules
[21:20:25] [PASSED] two-regs-two-entries
[21:20:25] [PASSED] clr-one-set-other
[21:20:25] [PASSED] set-field
[21:20:25] [PASSED] conflict-duplicate
[21:20:25] [PASSED] conflict-not-disjoint
[21:20:25] [PASSED] conflict-reg-type
[21:20:25] ============== [PASSED] xe_rtp_process_tests ===============
[21:20:25] ===================== [PASSED] xe_rtp ======================
[21:20:25] ==================== xe_wa (1 subtest) =====================
[21:20:25] ======================== xe_wa_gt  =========================
[21:20:25] [PASSED] TIGERLAKE (B0)
[21:20:25] [PASSED] DG1 (A0)
[21:20:25] [PASSED] DG1 (B0)
[21:20:25] [PASSED] ALDERLAKE_S (A0)
[21:20:25] [PASSED] ALDERLAKE_S (B0)
[21:20:25] [PASSED] ALDERLAKE_S (C0)
[21:20:25] [PASSED] ALDERLAKE_S (D0)
[21:20:25] [PASSED] DG2_G10 (A0)
[21:20:25] [ERROR] Test: xe_wa_gt: missing subtest result line!
[21:20:25] 
[21:20:25] Pid: 39, comm: kunit_try_catch Tainted: G        W        N 6.3.0
[21:20:25] RIP: 0033:klist_put+0x14/0x90
[21:20:25] RSP: 00000000a187be90  EFLAGS: 00010246
[21:20:25] RAX: 0000000000000000 RBX: 0000000061e48810 RCX: 0000000060709a48
[21:20:25] RDX: 000000006002acd0 RSI: 0000000000000001 RDI: 0000000061ec0120
[21:20:25] RBP: 0000000061ec0120 R08: 0000000000000001 R09: 000000006017739e
[21:20:25] R10: 0000000000000006 R11: 000000006205e000 R12: 0000000061e48890
[21:20:25] R13: 000000006062e320 R14: 00000000604449e0 R15: 0000000000000000
[21:20:25] Kernel panic - not syncing: Segfault with no mm
[21:20:25] ==================== [CRASHED] xe_wa_gt ====================
[21:20:25] [ERROR] Test: xe_wa: missing subtest result line!
[21:20:25] ===================== [CRASHED] xe_wa ======================
[21:20:25] ============================================================
[21:20:25] Testing complete. Ran 23 tests: passed: 19, skipped: 4, errors: 2
[21:20:25] Elapsed time: 26.544s total, 4.209s configuring, 22.014s building, 0.320s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[21:20:25] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[21:20:27] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[21:20:45] Starting KUnit Kernel (1/1)...
[21:20:45] ============================================================
[21:20:45] ============ drm_test_pick_cmdline (2 subtests) ============
[21:20:45] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[21:20:45] =============== drm_test_pick_cmdline_named  ===============
[21:20:45] [PASSED] NTSC
[21:20:45] [PASSED] NTSC-J
[21:20:45] [PASSED] PAL
[21:20:45] [PASSED] PAL-M
[21:20:45] =========== [PASSED] drm_test_pick_cmdline_named ===========
[21:20:45] ============== [PASSED] drm_test_pick_cmdline ==============
[21:20:45] ================== drm_buddy (6 subtests) ==================
[21:20:45] [PASSED] drm_test_buddy_alloc_limit
[21:20:45] [PASSED] drm_test_buddy_alloc_range
[21:20:45] [PASSED] drm_test_buddy_alloc_optimistic
[21:20:45] [PASSED] drm_test_buddy_alloc_pessimistic
[21:20:45] [PASSED] drm_test_buddy_alloc_smoke
[21:20:45] [PASSED] drm_test_buddy_alloc_pathological
[21:20:45] ==================== [PASSED] drm_buddy ====================
[21:20:45] ============= drm_cmdline_parser (40 subtests) =============
[21:20:45] [PASSED] drm_test_cmdline_force_d_only
[21:20:45] [PASSED] drm_test_cmdline_force_D_only_dvi
[21:20:45] [PASSED] drm_test_cmdline_force_D_only_hdmi
[21:20:45] [PASSED] drm_test_cmdline_force_D_only_not_digital
[21:20:45] [PASSED] drm_test_cmdline_force_e_only
[21:20:45] [PASSED] drm_test_cmdline_res
[21:20:45] [PASSED] drm_test_cmdline_res_vesa
[21:20:45] [PASSED] drm_test_cmdline_res_vesa_rblank
[21:20:45] [PASSED] drm_test_cmdline_res_rblank
[21:20:45] [PASSED] drm_test_cmdline_res_bpp
[21:20:45] [PASSED] drm_test_cmdline_res_refresh
[21:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh
[21:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[21:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[21:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[21:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[21:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[21:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[21:20:45] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[21:20:45] [PASSED] drm_test_cmdline_res_margins_force_on
[21:20:45] [PASSED] drm_test_cmdline_res_vesa_margins
[21:20:45] [PASSED] drm_test_cmdline_name
[21:20:45] [PASSED] drm_test_cmdline_name_bpp
[21:20:45] [PASSED] drm_test_cmdline_name_option
[21:20:45] [PASSED] drm_test_cmdline_name_bpp_option
[21:20:45] [PASSED] drm_test_cmdline_rotate_0
[21:20:45] [PASSED] drm_test_cmdline_rotate_90
[21:20:45] [PASSED] drm_test_cmdline_rotate_180
[21:20:45] [PASSED] drm_test_cmdline_rotate_270
[21:20:45] [PASSED] drm_test_cmdline_hmirror
[21:20:45] [PASSED] drm_test_cmdline_vmirror
[21:20:45] [PASSED] drm_test_cmdline_margin_options
[21:20:45] [PASSED] drm_test_cmdline_multiple_options
[21:20:45] [PASSED] drm_test_cmdline_bpp_extra_and_option
[21:20:45] [PASSED] drm_test_cmdline_extra_and_option
[21:20:45] [PASSED] drm_test_cmdline_freestanding_options
[21:20:45] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[21:20:45] [PASSED] drm_test_cmdline_panel_orientation
[21:20:45] ================ drm_test_cmdline_invalid  =================
[21:20:45] [PASSED] margin_only
[21:20:45] [PASSED] interlace_only
[21:20:45] [PASSED] res_missing_x
[21:20:45] [PASSED] res_missing_y
[21:20:45] [PASSED] res_bad_y
[21:20:45] [PASSED] res_missing_y_bpp
[21:20:45] [PASSED] res_bad_bpp
[21:20:45] [PASSED] res_bad_refresh
[21:20:45] [PASSED] res_bpp_refresh_force_on_off
[21:20:45] [PASSED] res_invalid_mode
[21:20:45] [PASSED] res_bpp_wrong_place_mode
[21:20:45] [PASSED] name_bpp_refresh
[21:20:45] [PASSED] name_refresh
[21:20:45] [PASSED] name_refresh_wrong_mode
[21:20:45] [PASSED] name_refresh_invalid_mode
[21:20:45] [PASSED] rotate_multiple
[21:20:45] [PASSED] rotate_invalid_val
[21:20:45] [PASSED] rotate_truncated
[21:20:45] [PASSED] invalid_option
[21:20:45] [PASSED] invalid_tv_option
[21:20:45] [PASSED] truncated_tv_option
[21:20:45] ============ [PASSED] drm_test_cmdline_invalid =============
[21:20:45] =============== drm_test_cmdline_tv_options  ===============
[21:20:45] [PASSED] NTSC
[21:20:45] [PASSED] NTSC_443
[21:20:45] [PASSED] NTSC_J
[21:20:45] [PASSED] PAL
[21:20:45] [PASSED] PAL_M
[21:20:45] [PASSED] PAL_N
[21:20:45] [PASSED] SECAM
[21:20:45] =========== [PASSED] drm_test_cmdline_tv_options ===========
[21:20:45] =============== [PASSED] drm_cmdline_parser ================
[21:20:45] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[21:20:45] ========== drm_test_get_tv_mode_from_name_valid  ===========
[21:20:45] [PASSED] NTSC
[21:20:45] [PASSED] NTSC-443
[21:20:45] [PASSED] NTSC-J
[21:20:45] [PASSED] PAL
[21:20:45] [PASSED] PAL-M
[21:20:45] [PASSED] PAL-N
[21:20:45] [PASSED] SECAM
[21:20:45] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[21:20:45] [PASSED] drm_test_get_tv_mode_from_name_truncated
[21:20:45] ============ [PASSED] drm_get_tv_mode_from_name ============
[21:20:45] ============= drm_damage_helper (21 subtests) ==============
[21:20:45] [PASSED] drm_test_damage_iter_no_damage
[21:20:45] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[21:20:45] [PASSED] drm_test_damage_iter_no_damage_src_moved
[21:20:45] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[21:20:45] [PASSED] drm_test_damage_iter_no_damage_not_visible
[21:20:45] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[21:20:45] [PASSED] drm_test_damage_iter_no_damage_no_fb
[21:20:45] [PASSED] drm_test_damage_iter_simple_damage
[21:20:45] [PASSED] drm_test_damage_iter_single_damage
[21:20:45] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[21:20:45] [PASSED] drm_test_damage_iter_single_damage_outside_src
[21:20:45] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[21:20:45] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[21:20:45] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[21:20:45] [PASSED] drm_test_damage_iter_single_damage_src_moved
[21:20:45] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[21:20:45] [PASSED] drm_test_damage_iter_damage
[21:20:45] [PASSED] drm_test_damage_iter_damage_one_intersect
[21:20:45] [PASSED] drm_test_damage_iter_damage_one_outside
[21:20:45] [PASSED] drm_test_damage_iter_damage_src_moved
[21:20:45] [PASSED] drm_test_damage_iter_damage_not_visible
[21:20:45] ================ [PASSED] drm_damage_helper ================
[21:20:45] ============== drm_dp_mst_helper (2 subtests) ==============
[21:20:45] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[21:20:45] [PASSED] Clock 154000 BPP 30 DSC disabled
[21:20:45] [PASSED] Clock 234000 BPP 30 DSC disabled
[21:20:45] [PASSED] Clock 297000 BPP 24 DSC disabled
[21:20:45] [PASSED] Clock 332880 BPP 24 DSC enabled
[21:20:45] [PASSED] Clock 324540 BPP 24 DSC enabled
[21:20:45] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[21:20:45] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[21:20:45] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[21:20:45] [PASSED] DP_POWER_UP_PHY with port number
[21:20:45] [PASSED] DP_POWER_DOWN_PHY with port number
[21:20:45] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[21:20:45] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[21:20:45] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[21:20:45] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[21:20:45] [PASSED] DP_QUERY_PAYLOAD with port number
[21:20:45] [PASSED] DP_QUERY_PAYLOAD with VCPI
[21:20:45] [PASSED] DP_REMOTE_DPCD_READ with port number
[21:20:45] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[21:20:45] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[21:20:45] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[21:20:45] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[21:20:45] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[21:20:45] [PASSED] DP_REMOTE_I2C_READ with port number
[21:20:45] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[21:20:45] [PASSED] DP_REMOTE_I2C_READ with transactions array
[21:20:45] [PASSED] DP_REMOTE_I2C_WRITE with port number
[21:20:45] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[21:20:45] [PASSED] DP_REMOTE_I2C_WRITE with data array
[21:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[21:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[21:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[21:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[21:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[21:20:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[21:20:45] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[21:20:45] ================ [PASSED] drm_dp_mst_helper ================
[21:20:45] =========== drm_format_helper_test (11 subtests) ===========
[21:20:45] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[21:20:45] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[21:20:45] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[21:20:45] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[21:20:45] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[21:20:45] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[21:20:45] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[21:20:45] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[21:20:45] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[21:20:45] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[21:20:45] ============== drm_test_fb_xrgb8888_to_mono  ===============
[21:20:45] [PASSED] single_pixel_source_buffer
[21:20:45] [PASSED] single_pixel_clip_rectangle
[21:20:45] [PASSED] well_known_colors
[21:20:45] [PASSED] destination_pitch
[21:20:45] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[21:20:45] ============= [PASSED] drm_format_helper_test ==============
[21:20:45] ================= drm_format (18 subtests) =================
[21:20:45] [PASSED] drm_test_format_block_width_invalid
[21:20:45] [PASSED] drm_test_format_block_width_one_plane
[21:20:45] [PASSED] drm_test_format_block_width_two_plane
[21:20:45] [PASSED] drm_test_format_block_width_three_plane
[21:20:45] [PASSED] drm_test_format_block_width_tiled
[21:20:45] [PASSED] drm_test_format_block_height_invalid
[21:20:45] [PASSED] drm_test_format_block_height_one_plane
[21:20:45] [PASSED] drm_test_format_block_height_two_plane
[21:20:45] [PASSED] drm_test_format_block_height_three_plane
[21:20:45] [PASSED] drm_test_format_block_height_tiled
[21:20:45] [PASSED] drm_test_format_min_pitch_invalid
[21:20:45] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[21:20:45] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[21:20:45] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[21:20:45] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[21:20:45] [PASSED] drm_test_format_min_pitch_two_plane
[21:20:45] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[21:20:45] [PASSED] drm_test_format_min_pitch_tiled
[21:20:45] =================== [PASSED] drm_format ====================
[21:20:45] =============== drm_framebuffer (1 subtest) ================
[21:20:45] =============== drm_test_framebuffer_create  ===============
[21:20:45] [PASSED] ABGR8888 normal sizes
[21:20:45] [PASSED] ABGR8888 max sizes
[21:20:45] [PASSED] ABGR8888 pitch greater than min required
[21:20:45] [PASSED] ABGR8888 pitch less than min required
[21:20:45] [PASSED] ABGR8888 Invalid width
[21:20:45] [PASSED] ABGR8888 Invalid buffer handle
[21:20:45] [PASSED] No pixel format
[21:20:45] [PASSED] ABGR8888 Width 0
[21:20:45] [PASSED] ABGR8888 Height 0
[21:20:45] [PASSED] ABGR8888 Out of bound height * pitch combination
[21:20:45] [PASSED] ABGR8888 Large buffer offset
[21:20:45] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[21:20:45] [PASSED] ABGR8888 Valid buffer modifier
[21:20:45] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[21:20:45] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[21:20:45] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[21:20:45] [PASSED] NV12 Normal sizes
[21:20:45] [PASSED] NV12 Max sizes
[21:20:45] [PASSED] NV12 Invalid pitch
[21:20:45] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[21:20:45] [PASSED] NV12 different  modifier per-plane
[21:20:45] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[21:20:45] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[21:20:45] [PASSED] NV12 Modifier for inexistent plane
[21:20:45] [PASSED] NV12 Handle for inexistent plane
[21:20:45] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[21:20:45] [PASSED] YVU420 Normal sizes
[21:20:45] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[21:20:45] [PASSED] YVU420 Max sizes
[21:20:45] [PASSED] YVU420 Invalid pitch
[21:20:45] [PASSED] YVU420 Different pitches
[21:20:45] [PASSED] YVU420 Different buffer offsets/pitches
[21:20:45] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[21:20:45] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[21:20:45] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[21:20:45] [PASSED] YVU420 Valid modifier
[21:20:45] [PASSED] YVU420 Different modifiers per plane
[21:20:45] [PASSED] YVU420 Modifier for inexistent plane
[21:20:45] [PASSED] X0L2 Normal sizes
[21:20:45] [PASSED] X0L2 Max sizes
[21:20:45] [PASSED] X0L2 Invalid pitch
[21:20:45] [PASSED] X0L2 Pitch greater than minimum required
stty: 'standard input': Inappropriate ioctl for device
[21:20:45] [PASSED] X0L2 Handle for inexistent plane
[21:20:45] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[21:20:45] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[21:20:45] [PASSED] X0L2 Valid modifier
[21:20:45] [PASSED] X0L2 Modifier for inexistent plane
[21:20:45] =========== [PASSED] drm_test_framebuffer_create ===========
[21:20:45] ================= [PASSED] drm_framebuffer =================
[21:20:45] =============== drm-test-managed (1 subtest) ===============
[21:20:45] [PASSED] drm_test_managed_run_action
[21:20:45] ================ [PASSED] drm-test-managed =================
[21:20:45] =================== drm_mm (19 subtests) ===================
[21:20:45] [PASSED] drm_test_mm_init
[21:20:45] [PASSED] drm_test_mm_debug
[21:20:55] [PASSED] drm_test_mm_reserve
[21:21:05] [PASSED] drm_test_mm_insert
[21:21:06] [PASSED] drm_test_mm_replace
[21:21:06] [PASSED] drm_test_mm_insert_range
[21:21:06] [PASSED] drm_test_mm_frag
[21:21:06] [PASSED] drm_test_mm_align
[21:21:06] [PASSED] drm_test_mm_align32
[21:21:07] [PASSED] drm_test_mm_align64
[21:21:07] [PASSED] drm_test_mm_evict
[21:21:07] [PASSED] drm_test_mm_evict_range
[21:21:07] [PASSED] drm_test_mm_topdown
[21:21:07] [PASSED] drm_test_mm_bottomup
[21:21:07] [PASSED] drm_test_mm_lowest
[21:21:07] [PASSED] drm_test_mm_highest
[21:21:08] [PASSED] drm_test_mm_color
[21:21:08] [PASSED] drm_test_mm_color_evict
[21:21:08] [PASSED] drm_test_mm_color_evict_range
[21:21:08] ===================== [PASSED] drm_mm ======================
[21:21:08] ============= drm_modes_analog_tv (4 subtests) =============
[21:21:08] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[21:21:08] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[21:21:08] [PASSED] drm_test_modes_analog_tv_pal_576i
[21:21:08] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[21:21:08] =============== [PASSED] drm_modes_analog_tv ===============
[21:21:08] ============== drm_plane_helper (2 subtests) ===============
[21:21:08] =============== drm_test_check_plane_state  ================
[21:21:08] [PASSED] clipping_simple
[21:21:08] [PASSED] clipping_rotate_reflect
[21:21:08] [PASSED] positioning_simple
[21:21:08] [PASSED] upscaling
[21:21:08] [PASSED] downscaling
[21:21:08] [PASSED] rounding1
[21:21:08] [PASSED] rounding2
[21:21:08] [PASSED] rounding3
[21:21:08] [PASSED] rounding4
[21:21:08] =========== [PASSED] drm_test_check_plane_state ============
[21:21:08] =========== drm_test_check_invalid_plane_state  ============
[21:21:08] [PASSED] positioning_invalid
[21:21:08] [PASSED] upscaling_invalid
[21:21:08] [PASSED] downscaling_invalid
[21:21:08] ======= [PASSED] drm_test_check_invalid_plane_state ========
[21:21:08] ================ [PASSED] drm_plane_helper =================
[21:21:08] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[21:21:08] ====== drm_test_connector_helper_tv_get_modes_check  =======
[21:21:08] [PASSED] None
[21:21:08] [PASSED] PAL
[21:21:08] [PASSED] NTSC
[21:21:08] [PASSED] Both, NTSC Default
[21:21:08] [PASSED] Both, PAL Default
[21:21:08] [PASSED] Both, NTSC Default, with PAL on command-line
[21:21:08] [PASSED] Both, PAL Default, with NTSC on command-line
[21:21:08] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[21:21:08] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[21:21:08] ================== drm_rect (9 subtests) ===================
[21:21:08] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[21:21:08] [PASSED] drm_test_rect_clip_scaled_not_clipped
[21:21:08] [PASSED] drm_test_rect_clip_scaled_clipped
[21:21:08] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[21:21:08] ================= drm_test_rect_intersect  =================
[21:21:08] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[21:21:08] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[21:21:08] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[21:21:08] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[21:21:08] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[21:21:08] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[21:21:08] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[21:21:08] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[21:21:08] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[21:21:08] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[21:21:08] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[21:21:08] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[21:21:08] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[21:21:08] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[21:21:08] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[21:21:08] ============= [PASSED] drm_test_rect_intersect =============
[21:21:08] ================ drm_test_rect_calc_hscale  ================
[21:21:08] [PASSED] normal use
[21:21:08] [PASSED] out of max range
[21:21:08] [PASSED] out of min range
[21:21:08] [PASSED] zero dst
[21:21:08] [PASSED] negative src
[21:21:08] [PASSED] negative dst
[21:21:08] ============ [PASSED] drm_test_rect_calc_hscale ============
[21:21:08] ================ drm_test_rect_calc_vscale  ================
[21:21:08] [PASSED] normal use
[21:21:08] [PASSED] out of max range
[21:21:08] [PASSED] out of min range
[21:21:08] [PASSED] zero dst
[21:21:08] [PASSED] negative src
[21:21:08] [PASSED] negative dst
[21:21:08] ============ [PASSED] drm_test_rect_calc_vscale ============
[21:21:08] ================== drm_test_rect_rotate  ===================
[21:21:08] [PASSED] reflect-x
[21:21:08] [PASSED] reflect-y
[21:21:08] [PASSED] rotate-0
[21:21:08] [PASSED] rotate-90
[21:21:08] [PASSED] rotate-180
[21:21:08] [PASSED] rotate-270
[21:21:08] ============== [PASSED] drm_test_rect_rotate ===============
[21:21:08] ================ drm_test_rect_rotate_inv  =================
[21:21:08] [PASSED] reflect-x
[21:21:08] [PASSED] reflect-y
[21:21:08] [PASSED] rotate-0
[21:21:08] [PASSED] rotate-90
[21:21:08] [PASSED] rotate-180
[21:21:08] [PASSED] rotate-270
[21:21:08] ============ [PASSED] drm_test_rect_rotate_inv =============
[21:21:08] ==================== [PASSED] drm_rect =====================
[21:21:08] ============================================================
[21:21:08] Testing complete. Ran 333 tests: passed: 333
[21:21:08] Elapsed time: 43.074s total, 1.697s configuring, 18.347s building, 22.996s running

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



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

* [Intel-xe] ✓ CI.Build: success for Separate GT and tile (rev4)
  2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
                   ` (32 preceding siblings ...)
  2023-05-30 21:21 ` [Intel-xe] ✓ CI.KUnit: " Patchwork
@ 2023-05-30 21:25 ` Patchwork
  33 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2023-05-30 21:25 UTC (permalink / raw)
  To: Matt Roper; +Cc: intel-xe

== Series Details ==

Series: Separate GT and tile (rev4)
URL   : https://patchwork.freedesktop.org/series/117614/
State : success

== Summary ==

+ trap cleanup EXIT
+ cd /kernel
+ git clone https://gitlab.freedesktop.org/drm/xe/ci.git .ci
Cloning into '.ci'...
++ date +%s
+ echo -e '\e[0Ksection_start:1685481679:build_x86_64[collapsed=true]\r\e[0KBuild x86-64'
+ mkdir -p build64
^[[0Ksection_start:1685481679:build_x86_64[collapsed=true]
^[[0KBuild x86-64
+ cat .ci/kernel/kconfig
+ [[ '' != '' ]]
+ make O=build64 olddefconfig
make[1]: Entering directory '/kernel/build64'
  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
#
# configuration written to .config
#
make[1]: Leaving directory '/kernel/build64'
++ nproc
+ make O=build64 -j48
make[1]: Entering directory '/kernel/build64'
  GEN     Makefile
  WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h
  WRAP    arch/x86/include/generated/uapi/asm/errno.h
  WRAP    arch/x86/include/generated/uapi/asm/fcntl.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctl.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctls.h
  WRAP    arch/x86/include/generated/uapi/asm/ipcbuf.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.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/param.h
  SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
  WRAP    arch/x86/include/generated/uapi/asm/poll.h
  WRAP    arch/x86/include/generated/uapi/asm/resource.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/uapi/asm/socket.h
  WRAP    arch/x86/include/generated/uapi/asm/sockios.h
  WRAP    arch/x86/include/generated/uapi/asm/termbits.h
  WRAP    arch/x86/include/generated/uapi/asm/termios.h
  WRAP    arch/x86/include/generated/uapi/asm/types.h
  UPD     include/generated/uapi/linux/version.h
  UPD     include/config/kernel.release
  UPD     include/generated/compile.h
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  HOSTCC  arch/x86/tools/relocs_32.o
  WRAP    arch/x86/include/generated/asm/export.h
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.h
  HOSTCC  arch/x86/tools/relocs_64.o
  WRAP    arch/x86/include/generated/asm/irq_regs.h
  WRAP    arch/x86/include/generated/asm/kmap_size.h
  HOSTCC  arch/x86/tools/relocs_common.o
  WRAP    arch/x86/include/generated/asm/local64.h
  WRAP    arch/x86/include/generated/asm/mmiowb.h
  WRAP    arch/x86/include/generated/asm/module.lds.h
  WRAP    arch/x86/include/generated/asm/rwonce.h
  WRAP    arch/x86/include/generated/asm/unaligned.h
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/sorttable
  HOSTCC  scripts/asn1_compiler
  HOSTCC  scripts/unifdef
  UPD     include/generated/utsrelease.h
  DESCEND objtool
  HOSTCC  /kernel/build64/tools/objtool/fixdep.o
  HOSTLD  /kernel/build64/tools/objtool/fixdep-in.o
  LINK    /kernel/build64/tools/objtool/fixdep
  INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/exec-cmd.h
  INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/help.h
  INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/pager.h
  INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/parse-options.h
  INSTALL /kernel/build64/tools/objtool/libsubcmd/include/subcmd/run-command.h
  INSTALL libsubcmd_headers
  CC      /kernel/build64/tools/objtool/libsubcmd/exec-cmd.o
  CC      /kernel/build64/tools/objtool/libsubcmd/help.o
  CC      /kernel/build64/tools/objtool/libsubcmd/pager.o
  CC      /kernel/build64/tools/objtool/libsubcmd/parse-options.o
  CC      /kernel/build64/tools/objtool/libsubcmd/run-command.o
  CC      /kernel/build64/tools/objtool/libsubcmd/sigchain.o
  CC      /kernel/build64/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/uvesafb.h
  HDRINST usr/include/video/sisfb.h
  HDRINST usr/include/drm/amdgpu_drm.h
  HDRINST usr/include/drm/i915_drm.h
  HDRINST usr/include/drm/qaic_accel.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/tegra_drm.h
  HDRINST usr/include/drm/drm_mode.h
  HDRINST usr/include/drm/ivpu_accel.h
  HDRINST usr/include/drm/exynos_drm.h
  HDRINST usr/include/drm/drm_sarea.h
  HDRINST usr/include/drm/v3d_drm.h
  HDRINST usr/include/drm/qxl_drm.h
  HDRINST usr/include/drm/drm_fourcc.h
  HDRINST usr/include/drm/habanalabs_accel.h
  HDRINST usr/include/drm/nouveau_drm.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/resource.h
  HDRINST usr/include/asm-generic/param.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
  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
  UPD     scripts/mod/devicetable-offsets.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/hfi/hfi1_user.h
  HDRINST usr/include/rdma/mana-abi.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/bnxt_re-abi.h
  HDRINST usr/include/rdma/mlx5_user_ioctl_verbs.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
  HDRINST usr/include/rdma/mlx4-abi.h
  HDRINST usr/include/rdma/mthca-abi.h
  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
  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_text.h
  HDRINST usr/include/linux/tc_ematch/tc_em_nbyte.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
  MKELF   scripts/mod/elfconfig.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
  HOSTCC  scripts/mod/modpost.o
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/sumversion.o
  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/neighbour.h
  HDRINST usr/include/linux/dlm_device.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/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
  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/ch9.h
  HDRINST usr/include/linux/usb/cdc.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/wireless.h
  HDRINST usr/include/linux/fdreg.h
  HDRINST usr/include/linux/cciss_defs.h
  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/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
  HDRINST usr/include/linux/bpqether.h
  HDRINST usr/include/linux/sysinfo.h
  HDRINST usr/include/linux/auto_dev-ioctl.h
  HDRINST usr/include/linux/nfs4_mount.h
  HDRINST usr/include/linux/keyboard.h
  HDRINST usr/include/linux/virtio_mmio.h
  HDRINST usr/include/linux/input.h
  HDRINST usr/include/linux/qnxtypes.h
  HDRINST usr/include/linux/mdio.h
  HDRINST usr/include/linux/lwtunnel.h
  HDRINST usr/include/linux/gfs2_ondisk.h
  HDRINST usr/include/linux/nfs4.h
  HDRINST usr/include/linux/ptp_clock.h
  HDRINST usr/include/linux/nubus.h
  HDRINST usr/include/linux/if_bonding.h
  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/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
  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/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/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/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/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/cm4000_cs.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
  LD      /kernel/build64/tools/objtool/libsubcmd/libsubcmd-in.o
  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_connmark.h
  HDRINST usr/include/linux/tc_act/tc_ife.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/tc_act/tc_ipt.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
  AR      /kernel/build64/tools/objtool/libsubcmd/libsubcmd.a
  HDRINST usr/include/linux/mroute.h
  HDRINST usr/include/linux/psample.h
  HDRINST usr/include/linux/ipv6.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/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/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
  CC      /kernel/build64/tools/objtool/weak.o
  HDRINST usr/include/linux/cfm_bridge.h
  HDRINST usr/include/linux/fiemap.h
  CC      /kernel/build64/tools/objtool/check.o
  HDRINST usr/include/linux/dm-ioctl.h
  HDRINST usr/include/linux/aspeed-lpc-ctrl.h
  MKDIR   /kernel/build64/tools/objtool/arch/x86/
  CC      /kernel/build64/tools/objtool/special.o
  HDRINST usr/include/linux/atmioc.h
  CC      /kernel/build64/tools/objtool/builtin-check.o
  HDRINST usr/include/linux/dlm.h
  HDRINST usr/include/linux/pci_regs.h
  MKDIR   /kernel/build64/tools/objtool/arch/x86/lib/
  CC      /kernel/build64/tools/objtool/elf.o
  HDRINST usr/include/linux/cachefiles.h
  CC      /kernel/build64/tools/objtool/objtool.o
  HDRINST usr/include/linux/membarrier.h
  HDRINST usr/include/linux/nfs_idmap.h
  CC      /kernel/build64/tools/objtool/orc_gen.o
  CC      /kernel/build64/tools/objtool/arch/x86/special.o
  HDRINST usr/include/linux/ip.h
  GEN     /kernel/build64/tools/objtool/arch/x86/lib/inat-tables.c
  CC      /kernel/build64/tools/objtool/orc_dump.o
  HDRINST usr/include/linux/atm_he.h
  HDRINST usr/include/linux/nfsd/export.h
  CC      /kernel/build64/tools/objtool/libstring.o
  CC      /kernel/build64/tools/objtool/libctype.o
  CC      /kernel/build64/tools/objtool/str_error_r.o
  HDRINST usr/include/linux/nfsd/stats.h
  CC      /kernel/build64/tools/objtool/librbtree.o
  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/openvswitch.h
  HDRINST usr/include/linux/atmsap.h
  HDRINST usr/include/linux/bpfilter.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
  CC      /kernel/build64/tools/objtool/arch/x86/decode.o
  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/dlm_netlink.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/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/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/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/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_fs.h
  HDRINST usr/include/scsi/fc/fc_els.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/sembuf.h
  HDRINST usr/include/asm/sgx.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-long.h
  CHKSHA1 ../include/linux/atomic/atomic-instrumented.h
  UPD     include/generated/timeconst.h
  UPD     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
  LD      /kernel/build64/tools/objtool/arch/x86/objtool-in.o
  UPD     include/generated/asm-offsets.h
  CALL    ../scripts/checksyscalls.sh
  LD      /kernel/build64/tools/objtool/objtool-in.o
  LINK    /kernel/build64/tools/objtool/objtool
  LDS     scripts/module.lds
  CC      ipc/compat.o
  CC      ipc/util.o
  CC      ipc/msgutil.o
  HOSTCC  usr/gen_init_cpio
  AS      arch/x86/lib/clear_page_64.o
  CC      ipc/msg.o
  AR      certs/built-in.a
  CC      ipc/sem.o
  CC      arch/x86/lib/cmdline.o
  CC      init/main.o
  AS      arch/x86/lib/cmpxchg16b_emu.o
  CC      ipc/shm.o
  CC      ipc/syscall.o
  CC      ipc/ipc_sysctl.o
  CC      arch/x86/lib/copy_mc.o
  CC      block/bdev.o
  AS      arch/x86/lib/copy_mc_64.o
  AR      arch/x86/video/built-in.a
  CC      ipc/mqueue.o
  AS      arch/x86/lib/copy_page_64.o
  CC      block/fops.o
  CC      init/do_mounts.o
  CC      security/commoncap.o
  CC      io_uring/io_uring.o
  UPD     init/utsversion-tmp.h
  CC      arch/x86/pci/i386.o
  CC      arch/x86/power/cpu.o
  CC [M]  arch/x86/video/fbdev.o
  CC      security/keys/gc.o
  CC      security/min_addr.o
  CC      fs/nfs_common/grace.o
  CC      arch/x86/realmode/init.o
  CC      block/partitions/core.o
  AR      virt/lib/built-in.a
  AS      arch/x86/crypto/aesni-intel_asm.o
  CC [M]  virt/lib/irqbypass.o
  CC      net/core/sock.o
  AR      sound/drivers/opl3/built-in.a
  AR      drivers/irqchip/built-in.a
  AR      sound/pci/ac97/built-in.a
  AR      sound/i2c/other/built-in.a
  AR      sound/isa/ad1816a/built-in.a
  CC      arch/x86/kernel/fpu/init.o
  CC      arch/x86/mm/pat/set_memory.o
  CC      sound/core/seq/seq.o
  CC      arch/x86/events/amd/core.o
  CC      fs/notify/dnotify/dnotify.o
  AR      sound/i2c/built-in.a
  AR      sound/drivers/opl4/built-in.a
  AR      sound/pci/ali5451/built-in.a
  AR      sound/isa/ad1848/built-in.a
  AR      sound/isa/cs423x/built-in.a
  AR      sound/isa/es1688/built-in.a
  AR      sound/drivers/mpu401/built-in.a
  CC      ipc/namespace.o
  CC      fs/iomap/trace.o
  CC      lib/kunit/test.o
  CC      arch/x86/entry/vdso/vma.o
  AR      drivers/bus/mhi/built-in.a
  AS      arch/x86/lib/copy_user_64.o
  AR      sound/pci/asihpi/built-in.a
  CC      arch/x86/entry/vsyscall/vsyscall_64.o
  AR      sound/pci/au88x0/built-in.a
  AR      drivers/bus/built-in.a
  AR      sound/isa/galaxy/built-in.a
  AR      sound/drivers/vx/built-in.a
  CC      kernel/sched/core.o
  AR      sound/drivers/pcsp/built-in.a
  AR      sound/pci/aw2/built-in.a
  AS      arch/x86/entry/vsyscall/vsyscall_emu_64.o
  CC      mm/kasan/common.o
  AR      sound/isa/gus/built-in.a
  AR      sound/drivers/built-in.a
  CC      crypto/api.o
  CC      arch/x86/crypto/aesni-intel_glue.o
  AR      sound/isa/msnd/built-in.a
  AR      drivers/phy/allwinner/built-in.a
  AR      sound/pci/ctxfi/built-in.a
  AS      arch/x86/entry/entry.o
  AR      sound/isa/opti9xx/built-in.a
  CC      lib/kunit/resource.o
  AR      drivers/phy/amlogic/built-in.a
  CC      arch/x86/power/hibernate_64.o
  AR      sound/pci/ca0106/built-in.a
  AR      sound/isa/sb/built-in.a
  AR      drivers/phy/broadcom/built-in.a
  AR      sound/pci/cs46xx/built-in.a
  AR      sound/isa/wavefront/built-in.a
  CC      lib/kunit/static_stub.o
  AR      sound/pci/cs5535audio/built-in.a
  AR      sound/isa/wss/built-in.a
  AR      drivers/phy/cadence/built-in.a
  CC      mm/kasan/report.o
  AR      sound/isa/built-in.a
  AR      sound/pci/lola/built-in.a
  AR      drivers/phy/freescale/built-in.a
  AR      sound/pci/lx6464es/built-in.a
  AR      drivers/phy/hisilicon/built-in.a
  CC      block/partitions/ldm.o
  AR      drivers/phy/ingenic/built-in.a
  AR      sound/pci/echoaudio/built-in.a
  AR      drivers/phy/intel/built-in.a
  AR      sound/pci/emu10k1/built-in.a
  AR      drivers/phy/lantiq/built-in.a
  AR      sound/pci/hda/built-in.a
  AR      drivers/phy/marvell/built-in.a
  CC [M]  sound/pci/hda/hda_bind.o
  AR      drivers/phy/mediatek/built-in.a
  AR      drivers/phy/microchip/built-in.a
  AR      drivers/phy/motorola/built-in.a
  AR      drivers/phy/mscc/built-in.a
  AR      drivers/phy/qualcomm/built-in.a
  CC      arch/x86/lib/cpu.o
  AR      drivers/phy/ralink/built-in.a
  AR      drivers/phy/renesas/built-in.a
  AR      drivers/phy/rockchip/built-in.a
  GEN     usr/initramfs_data.cpio
  COPY    usr/initramfs_inc_data
  AR      drivers/phy/samsung/built-in.a
  AS      usr/initramfs_data.o
  AR      drivers/phy/socionext/built-in.a
  AR      drivers/phy/st/built-in.a
  AR      usr/built-in.a
  CC      arch/x86/lib/delay.o
  AR      drivers/phy/sunplus/built-in.a
  AR      drivers/phy/tegra/built-in.a
  AR      drivers/phy/ti/built-in.a
  AR      drivers/phy/xilinx/built-in.a
  CC      drivers/phy/phy-core.o
  AR      virt/built-in.a
  AS      arch/x86/crypto/aesni-intel_avx-x86_64.o
  AR      sound/ppc/built-in.a
  AS      arch/x86/crypto/aes_ctrby8_avx-x86_64.o
  CC      sound/core/seq/seq_lock.o
  AR      sound/pci/ice1712/built-in.a
  CC      crypto/cipher.o
  AS      arch/x86/realmode/rm/header.o
  AR      sound/pci/korg1212/built-in.a
  CC      arch/x86/kernel/fpu/bugs.o
  AS      arch/x86/realmode/rm/trampoline_64.o
  AR      sound/pci/mixart/built-in.a
  CC      lib/kunit/string-stream.o
  AS      arch/x86/realmode/rm/stack.o
  AS      arch/x86/lib/getuser.o
  AR      sound/pci/nm256/built-in.a
  AS [M]  arch/x86/crypto/ghash-clmulni-intel_asm.o
  AS      arch/x86/realmode/rm/reboot.o
  CC      lib/kunit/assert.o
  CC      security/keys/key.o
  AS      arch/x86/realmode/rm/wakeup_asm.o
  CC      ipc/mq_sysctl.o
  CC      io_uring/xattr.o
  AS      arch/x86/entry/entry_64.o
  CC      arch/x86/mm/pat/memtype.o
  CC      arch/x86/realmode/rm/wakemain.o
  CC [M]  arch/x86/crypto/ghash-clmulni-intel_glue.o
  CC      io_uring/nop.o
  AR      fs/notify/dnotify/built-in.a
  GEN     arch/x86/lib/inat-tables.c
  CC      fs/notify/inotify/inotify_fsnotify.o
  AR      fs/nfs_common/built-in.a
  CC      fs/notify/fanotify/fanotify.o
  CC      arch/x86/lib/insn-eval.o
  CC      arch/x86/pci/init.o
  CC      fs/notify/fanotify/fanotify_user.o
  CC      arch/x86/pci/mmconfig_64.o
  CC      arch/x86/realmode/rm/video-mode.o
  CC      arch/x86/kernel/fpu/core.o
  AS      arch/x86/realmode/rm/copy.o
  CC      sound/core/sound.o
  AS      arch/x86/realmode/rm/bioscall.o
  AS      arch/x86/power/hibernate_asm_64.o
  CC      arch/x86/power/hibernate.o
  CC      arch/x86/entry/vdso/extable.o
  CC      arch/x86/realmode/rm/regs.o
  CC      arch/x86/mm/init.o
  AR      fs/quota/built-in.a
  AR      arch/x86/entry/vsyscall/built-in.a
  CC      arch/x86/mm/init_64.o
  CC      lib/math/div64.o
  CC      block/partitions/msdos.o
  CC      arch/x86/realmode/rm/video-vga.o
  CC      lib/crypto/memneq.o
  CC      arch/x86/mm/fault.o
  CC [M]  sound/pci/hda/hda_codec.o
  CC      sound/core/seq/seq_clientmgr.o
  CC      mm/kasan/init.o
  CC      lib/math/gcd.o
  CC      arch/x86/realmode/rm/video-vesa.o
  CC      fs/iomap/iter.o
  CC      lib/crypto/utils.o
  CC      lib/math/lcm.o
  CC      lib/crypto/chacha.o
  CC      crypto/compress.o
  CC      fs/iomap/buffered-io.o
  CC      fs/iomap/direct-io.o
  CC      arch/x86/events/amd/lbr.o
  CC      arch/x86/realmode/rm/video-bios.o
  CC      lib/crypto/aes.o
  CC      lib/math/int_pow.o
  CC      lib/kunit/try-catch.o
  CC      lib/math/int_sqrt.o
  PASYMS  arch/x86/realmode/rm/pasyms.h
  LDS     arch/x86/realmode/rm/realmode.lds
  CC      arch/x86/pci/direct.o
  AS [M]  arch/x86/crypto/crc32-pclmul_asm.o
  CC      arch/x86/mm/pat/memtype_interval.o
  LD      arch/x86/realmode/rm/realmode.elf
  CC      lib/crypto/gf128mul.o
  RELOCS  arch/x86/realmode/rm/realmode.relocs
  OBJCOPY arch/x86/realmode/rm/realmode.bin
  AS      arch/x86/realmode/rmpiggy.o
  CC [M]  arch/x86/crypto/crc32-pclmul_glue.o
  CC      fs/notify/inotify/inotify_user.o
  CC      lib/math/reciprocal_div.o
  CC      arch/x86/events/intel/core.o
  AR      arch/x86/realmode/built-in.a
  CC      sound/core/seq/seq_memory.o
  CC      arch/x86/events/zhaoxin/core.o
  CC      lib/math/rational.o
  CC      arch/x86/events/intel/bts.o
  CC [M]  lib/math/prime_numbers.o
  CC      mm/filemap.o
  AR      drivers/phy/built-in.a
  AR      drivers/pinctrl/actions/built-in.a
  AR      drivers/pinctrl/bcm/built-in.a
  CC      sound/core/init.o
  AR      drivers/pinctrl/cirrus/built-in.a
  AR      drivers/pinctrl/freescale/built-in.a
  CC      drivers/pinctrl/intel/pinctrl-baytrail.o
  CC      drivers/pinctrl/intel/pinctrl-intel.o
  CC      fs/kernfs/mount.o
  CC [M]  drivers/pinctrl/intel/pinctrl-cherryview.o
  CC      fs/proc/task_mmu.o
  CC      fs/kernfs/inode.o
  CC      arch/x86/entry/vdso/vdso32-setup.o
  CC      crypto/algapi.o
  CC      init/do_mounts_initrd.o
  AR      arch/x86/power/built-in.a
  CC      fs/kernfs/dir.o
  CC      lib/kunit/executor.o
  CC      arch/x86/events/intel/ds.o
  CC      init/initramfs.o
  CC      security/keys/keyring.o
  CC      arch/x86/lib/insn.o
  CC      block/partitions/efi.o
  AR      sound/pci/oxygen/built-in.a
  AR      sound/pci/pcxhr/built-in.a
  CC      fs/kernfs/file.o
  CC      block/bio.o
  LDS     arch/x86/entry/vdso/vdso.lds
  AS [M]  arch/x86/crypto/crct10dif-pcl-asm_64.o
  AS      arch/x86/entry/vdso/vdso-note.o
  CC      arch/x86/entry/vdso/vclock_gettime.o
  CC [M]  arch/x86/crypto/crct10dif-pclmul_glue.o
  CC      io_uring/fs.o
  CC      arch/x86/entry/vdso/vgetcpu.o
  CC      mm/kasan/generic.o
  CC      crypto/scatterwalk.o
  AR      arch/x86/mm/pat/built-in.a
  CC      lib/kunit/hooks.o
  CC      arch/x86/events/amd/ibs.o
  CC      lib/crypto/blake2s.o
  AR      lib/math/built-in.a
  CC [M]  sound/pci/hda/hda_jack.o
  CC      security/inode.o
  CC      arch/x86/pci/mmconfig-shared.o
  CC      arch/x86/events/intel/knc.o
  AS      arch/x86/lib/memcpy_64.o
  CC      init/calibrate.o
  CC      arch/x86/kernel/fpu/regset.o
  AS      arch/x86/lib/memmove_64.o
  AR      arch/x86/events/zhaoxin/built-in.a
  AR      lib/kunit/built-in.a
  AR      sound/pci/riptide/built-in.a
  CC      fs/iomap/fiemap.o
  CC      kernel/locking/mutex.o
  AS      arch/x86/lib/memset_64.o
  AR      sound/pci/rme9652/built-in.a
  CC      kernel/power/qos.o
  CC      arch/x86/lib/misc.o
  CC      kernel/locking/semaphore.o
  AR      sound/pci/trident/built-in.a
  CC      arch/x86/lib/pc-conf-reg.o
  CC      security/device_cgroup.o
  CC      kernel/locking/rwsem.o
  AR      ipc/built-in.a
  CC      fs/iomap/seek.o
  AR      fs/notify/fanotify/built-in.a
  CC      sound/core/memory.o
  CC      fs/proc/inode.o
  CC      crypto/proc.o
  CC      fs/proc/root.o
  LD [M]  arch/x86/crypto/ghash-clmulni-intel.o
  LD [M]  arch/x86/crypto/crc32-pclmul.o
  CC      lib/crypto/blake2s-generic.o
  AR      fs/notify/inotify/built-in.a
  LD [M]  arch/x86/crypto/crct10dif-pclmul.o
  CC      fs/notify/fsnotify.o
  AR      arch/x86/crypto/built-in.a
  HOSTCC  arch/x86/entry/vdso/vdso2c
  CC      arch/x86/events/core.o
  AR      sound/pci/ymfpci/built-in.a
  CC      arch/x86/mm/ioremap.o
  AS      arch/x86/lib/putuser.o
  CC      sound/core/seq/seq_queue.o
  CC      arch/x86/kernel/cpu/mce/core.o
  CC      arch/x86/kernel/cpu/mce/severity.o
  AS      arch/x86/lib/retpoline.o
  CC      arch/x86/kernel/cpu/mce/genpool.o
  CC      arch/x86/lib/usercopy.o
  CC      sound/core/seq/seq_fifo.o
  AR      sound/pci/vx222/built-in.a
  CC      init/init_task.o
  CC      lib/crypto/blake2s-selftest.o
  CC      arch/x86/kernel/acpi/boot.o
  AR      block/partitions/built-in.a
  AR      sound/arm/built-in.a
  CC      fs/kernfs/symlink.o
  AR      arch/x86/ia32/built-in.a
  CC      sound/core/control.o
  LDS     arch/x86/entry/vdso/vdso32/vdso32.lds
  AS      arch/x86/entry/vdso/vdso32/note.o
  AR      arch/x86/platform/atom/built-in.a
  AR      arch/x86/platform/ce4100/built-in.a
  CC      mm/kasan/report_generic.o
  AS      arch/x86/entry/vdso/vdso32/system_call.o
  CC      arch/x86/kernel/acpi/sleep.o
  CC      arch/x86/platform/efi/memmap.o
  CC      mm/kasan/shadow.o
  AS      arch/x86/entry/vdso/vdso32/sigreturn.o
  CC      arch/x86/entry/vdso/vdso32/vclock_gettime.o
  CC      arch/x86/entry/vdso/vdso32/vgetcpu.o
  CC [M]  drivers/pinctrl/intel/pinctrl-broxton.o
  CC [M]  drivers/pinctrl/intel/pinctrl-geminilake.o
  CC      crypto/aead.o
  CC [M]  drivers/pinctrl/intel/pinctrl-sunrisepoint.o
  AR      arch/x86/platform/geode/built-in.a
  CC      io_uring/splice.o
  AR      arch/x86/net/built-in.a
  CC      arch/x86/lib/usercopy_64.o
  CC      security/keys/keyctl.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/kvm_main.o
  CC      arch/x86/kernel/fpu/signal.o
  CC      arch/x86/lib/msr-smp.o
  CC      arch/x86/pci/fixup.o
  AS      arch/x86/kernel/acpi/wakeup_64.o
  CC      fs/proc/base.o
  CC      sound/core/seq/seq_prioq.o
  CC      arch/x86/events/amd/uncore.o
  AR      arch/x86/platform/iris/built-in.a
  CC      lib/crypto/des.o
  CC      drivers/gpio/gpiolib.o
  CC      lib/crypto/sha1.o
  CC      fs/iomap/swapfile.o
  CC      kernel/power/main.o
  CC      sound/core/misc.o
  CC      fs/notify/notification.o
  CC      lib/crypto/sha256.o
  CC      arch/x86/lib/cache-smp.o
  CC [M]  sound/pci/hda/hda_auto_parser.o
  CC      arch/x86/lib/msr.o
  AS      arch/x86/lib/msr-reg.o
  CC      init/version.o
  CC      net/llc/llc_core.o
  AR      fs/kernfs/built-in.a
  CC      net/ethernet/eth.o
  CC      net/802/p8022.o
  CC      arch/x86/mm/extable.o
  CC      net/802/psnap.o
  CC      kernel/sched/fair.o
  CC      crypto/geniv.o
  AR      drivers/pinctrl/intel/built-in.a
  AR      drivers/pinctrl/mediatek/built-in.a
  AR      drivers/pinctrl/mvebu/built-in.a
  AR      drivers/pinctrl/nomadik/built-in.a
  CC      arch/x86/lib/msr-reg-export.o
  CC      arch/x86/entry/syscall_64.o
  AR      drivers/pinctrl/nuvoton/built-in.a
  CC      net/sched/sch_generic.o
  VDSO    arch/x86/entry/vdso/vdso64.so.dbg
  AR      drivers/pinctrl/sprd/built-in.a
  CC      net/netlink/af_netlink.o
  AR      net/bpf/built-in.a
  AR      drivers/pinctrl/sunplus/built-in.a
  VDSO    arch/x86/entry/vdso/vdso32.so.dbg
  CC      arch/x86/kernel/apic/apic.o
  AR      drivers/pinctrl/ti/built-in.a
  CC      net/netlink/genetlink.o
  OBJCOPY arch/x86/entry/vdso/vdso64.so
  CC      drivers/pinctrl/core.o
  AR      init/built-in.a
  OBJCOPY arch/x86/entry/vdso/vdso32.so
  CC      mm/kasan/quarantine.o
  VDSO2C  arch/x86/entry/vdso/vdso-image-64.c
  CC      block/elevator.o
  VDSO2C  arch/x86/entry/vdso/vdso-image-32.c
  CC      net/netlink/policy.o
  CC      arch/x86/entry/vdso/vdso-image-64.o
  CC      arch/x86/platform/efi/quirks.o
  CC      arch/x86/kernel/kprobes/core.o
  LDS     arch/x86/kernel/vmlinux.lds
  CC      fs/notify/group.o
  CC      net/core/request_sock.o
  CC      fs/notify/mark.o
  CC      lib/zlib_inflate/inffast.o
  CC      sound/core/seq/seq_timer.o
  CC      arch/x86/entry/vdso/vdso-image-32.o
  CC      arch/x86/pci/acpi.o
  CC      lib/zlib_inflate/inflate.o
  CC      arch/x86/kernel/fpu/xstate.o
  CC      crypto/skcipher.o
  CC      fs/notify/fdinfo.o
  AR      fs/iomap/built-in.a
  CC      arch/x86/kernel/acpi/apei.o
  CC      crypto/seqiv.o
  CC      arch/x86/pci/legacy.o
  AR      arch/x86/events/amd/built-in.a
  CC      arch/x86/events/probe.o
  AR      arch/x86/entry/vdso/built-in.a
  CC      arch/x86/pci/irq.o
  CC      arch/x86/entry/common.o
  AS      arch/x86/lib/hweight.o
  CC      kernel/power/console.o
  CC      arch/x86/pci/common.o
  CC      arch/x86/lib/iomem.o
  CC      net/llc/llc_input.o
  CC      arch/x86/mm/mmap.o
  CC      arch/x86/kernel/cpu/mce/intel.o
  CC      security/keys/permission.o
  CC      arch/x86/events/intel/lbr.o
  CC      kernel/locking/percpu-rwsem.o
  CC [M]  lib/crypto/arc4.o
  CC      net/802/stp.o
  CC      crypto/echainiv.o
  AR      mm/kasan/built-in.a
  CC      mm/mempool.o
  CC [M]  sound/pci/hda/hda_sysfs.o
  CC      mm/oom_kill.o
  CC      mm/fadvise.o
  CC      arch/x86/events/utils.o
  CC      sound/core/seq/seq_system.o
  CC      arch/x86/events/rapl.o
  CC      arch/x86/platform/efi/efi.o
  CC      arch/x86/platform/efi/efi_64.o
  CC      arch/x86/kernel/acpi/cppc.o
  AS      arch/x86/platform/efi/efi_stub_64.o
  CC      arch/x86/kernel/kprobes/opt.o
  CC      mm/maccess.o
  AS      arch/x86/lib/iomap_copy_64.o
  CC      arch/x86/events/intel/p4.o
  CC      arch/x86/pci/early.o
  CC      arch/x86/kernel/cpu/mce/threshold.o
  CC      arch/x86/lib/inat.o
  CC      net/core/skbuff.o
  CC      lib/zlib_inflate/infutil.o
  AR      net/ethernet/built-in.a
  CC      arch/x86/events/intel/p6.o
  AR      lib/crypto/built-in.a
  LD [M]  lib/crypto/libarc4.o
  CC      block/blk-core.o
  AS      arch/x86/entry/thunk_64.o
  AR      fs/notify/built-in.a
  CC      lib/zlib_deflate/deflate.o
  CC      lib/lzo/lzo1x_compress.o
  AR      arch/x86/lib/built-in.a
  AR      arch/x86/lib/lib.a
  CC      security/keys/process_keys.o
  CC [M]  sound/pci/hda/hda_controller.o
  CC      arch/x86/mm/pgtable.o
  AS      arch/x86/entry/entry_64_compat.o
  CC      kernel/locking/irqflag-debug.o
  CC      arch/x86/entry/syscall_32.o
  CC      io_uring/sync.o
  CC      kernel/power/process.o
  CC      kernel/power/suspend.o
  CC      kernel/locking/mutex-debug.o
  CC      drivers/pinctrl/pinctrl-utils.o
  CC      lib/lz4/lz4_compress.o
  CC      lib/zlib_inflate/inftrees.o
  CC      net/core/datagram.o
  CC      crypto/ahash.o
  CC      net/llc/llc_output.o
  CC      sound/core/seq/seq_ports.o
  AR      net/802/built-in.a
  AR      drivers/pwm/built-in.a
  CC      net/ethtool/ioctl.o
  CC      drivers/pci/msi/pcidev_msi.o
  CC      arch/x86/kernel/acpi/cstate.o
  CC      drivers/pci/msi/api.o
  CC      drivers/video/console/dummycon.o
  CC      lib/zlib_inflate/inflate_syms.o
  CC      drivers/video/console/vgacon.o
  AR      arch/x86/kernel/fpu/built-in.a
  CC      drivers/idle/intel_idle.o
  CC      drivers/video/logo/logo.o
  AR      drivers/char/ipmi/built-in.a
  CC      drivers/video/backlight/backlight.o
  CC      net/core/stream.o
  CC      lib/lzo/lzo1x_decompress_safe.o
  CC      arch/x86/pci/bus_numa.o
  CC      drivers/pci/msi/msi.o
  CC      kernel/locking/lockdep.o
  CC      fs/proc/generic.o
  CC      arch/x86/kernel/kprobes/ftrace.o
  CC      fs/proc/array.o
  CC      fs/proc/fd.o
  CC      arch/x86/kernel/cpu/mce/apei.o
  CC      arch/x86/kernel/apic/apic_common.o
  AR      arch/x86/platform/efi/built-in.a
  CC      net/core/scm.o
  CC      drivers/pinctrl/pinmux.o
  CC      arch/x86/platform/intel/iosf_mbi.o
  AR      arch/x86/entry/built-in.a
  CC      arch/x86/events/msr.o
  CC      arch/x86/events/intel/pt.o
  CC      security/keys/request_key.o
  AR      lib/zlib_inflate/built-in.a
  CC [M]  sound/pci/hda/hda_proc.o
  HOSTCC  drivers/video/logo/pnmtologo
  CC      net/sched/sch_mq.o
  CC      io_uring/advise.o
  CC      lib/zlib_deflate/deftree.o
  CC      lib/zlib_deflate/deflate_syms.o
  AR      arch/x86/kernel/acpi/built-in.a
  CC      net/netlink/diag.o
  CC      arch/x86/pci/amd_bus.o
  AR      lib/lzo/built-in.a
  CC      drivers/pinctrl/pinconf.o
  CC      kernel/locking/lockdep_proc.o
  CC      arch/x86/mm/physaddr.o
  AR      net/llc/built-in.a
  CC      crypto/shash.o
  CC      sound/core/seq/seq_info.o
  CC      crypto/akcipher.o
  CC      arch/x86/kernel/apic/apic_noop.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/eventfd.o
  LOGO    drivers/video/logo/logo_linux_clut224.c
  CC      drivers/video/logo/logo_linux_clut224.o
  AS      arch/x86/kernel/head_64.o
  CC      drivers/gpio/gpiolib-devres.o
  CC      crypto/kpp.o
  AR      drivers/video/logo/built-in.a
  AR      arch/x86/kernel/kprobes/built-in.a
  CC      lib/zstd/zstd_compress_module.o
  CC      mm/page-writeback.o
  CC      kernel/printk/printk.o
  CC      mm/folio-compat.o
  AR      arch/x86/kernel/cpu/mce/built-in.a
  CC      arch/x86/kernel/cpu/mtrr/mtrr.o
  CC      kernel/power/hibernate.o
  AR      drivers/video/backlight/built-in.a
  CC      arch/x86/kernel/apic/ipi.o
  CC      arch/x86/kernel/cpu/mtrr/if.o
  CC      fs/proc/proc_tty.o
  CC      arch/x86/kernel/apic/vector.o
  CC      arch/x86/kernel/apic/hw_nmi.o
  AR      arch/x86/platform/intel/built-in.a
  AR      arch/x86/platform/intel-mid/built-in.a
  AR      drivers/video/console/built-in.a
  AR      arch/x86/platform/intel-quark/built-in.a
  AR      arch/x86/platform/olpc/built-in.a
  CC      drivers/video/fbdev/core/fb_notify.o
  AR      arch/x86/platform/scx200/built-in.a
  AR      arch/x86/platform/ts5500/built-in.a
  CC      fs/proc/cmdline.o
  CC      arch/x86/kernel/head64.o
  AR      arch/x86/platform/uv/built-in.a
  AR      arch/x86/platform/built-in.a
  CC      arch/x86/mm/tlb.o
  CC      drivers/pci/msi/irqdomain.o
  AR      drivers/video/fbdev/omap/built-in.a
  CC      net/core/gen_stats.o
  CC      io_uring/filetable.o
  CC [M]  drivers/video/fbdev/core/fbmem.o
  AR      drivers/idle/built-in.a
  CC      io_uring/openclose.o
  AR      sound/core/seq/built-in.a
  CC      fs/sysfs/file.o
  CC      drivers/pinctrl/pinconf-generic.o
  AR      lib/zlib_deflate/built-in.a
  CC      sound/core/device.o
  CC      fs/sysfs/dir.o
  CC      drivers/video/aperture.o
  CC      lib/zstd/compress/fse_compress.o
  CC      security/keys/request_key_auth.o
  CC      drivers/gpio/gpiolib-legacy.o
  CC      drivers/video/cmdline.o
  AR      arch/x86/pci/built-in.a
  CC      fs/proc/consoles.o
  CC      mm/readahead.o
  CC      drivers/gpio/gpiolib-cdev.o
  CC      drivers/gpio/gpiolib-sysfs.o
  CC [M]  sound/pci/hda/hda_hwdep.o
  CC      drivers/video/nomodeset.o
  CC      lib/lz4/lz4hc_compress.o
  CC      net/sched/sch_frag.o
  CC      drivers/video/hdmi.o
  CC      arch/x86/kernel/cpu/cacheinfo.o
  CC      security/keys/user_defined.o
  AR      net/netlink/built-in.a
  CC      arch/x86/mm/cpu_entry_area.o
  CC      security/keys/compat.o
  CC      crypto/acompress.o
  CC      kernel/locking/spinlock.o
  CC      net/ethtool/common.o
  CC      arch/x86/mm/maccess.o
  CC      arch/x86/kernel/cpu/scattered.o
  CC      lib/zstd/compress/hist.o
  CC      arch/x86/kernel/cpu/mtrr/generic.o
  CC      fs/sysfs/symlink.o
  CC      sound/core/info.o
  CC      block/blk-sysfs.o
  CC      block/blk-flush.o
  CC      fs/sysfs/mount.o
  AR      drivers/pinctrl/built-in.a
  CC      sound/core/isadma.o
  CC      lib/zstd/compress/huf_compress.o
  CC      lib/lz4/lz4_decompress.o
  CC      arch/x86/events/intel/uncore.o
  CC [M]  drivers/video/fbdev/core/fbmon.o
  CC      fs/proc/cpuinfo.o
  CC      fs/sysfs/group.o
  AR      drivers/pci/msi/built-in.a
  CC      drivers/pci/pcie/portdrv.o
  CC      drivers/pci/pcie/rcec.o
  CC      arch/x86/mm/pgprot.o
  CC      kernel/locking/osq_lock.o
  CC      lib/zstd/compress/zstd_compress.o
  CC [M]  sound/pci/hda/hda_generic.o
  CC      net/ethtool/netlink.o
  CC      net/core/gen_estimator.o
  CC      fs/proc/devices.o
  CC      kernel/power/snapshot.o
  CC      kernel/power/swap.o
  CC      mm/swap.o
  CC      drivers/gpio/gpiolib-acpi.o
  CC      mm/truncate.o
  AR      drivers/video/fbdev/omap2/omapfb/dss/built-in.a
  CC      sound/core/vmaster.o
  AR      drivers/video/fbdev/omap2/omapfb/displays/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/built-in.a
  CC      drivers/acpi/acpica/dsargs.o
  AR      drivers/video/fbdev/omap2/built-in.a
  CC      security/keys/proc.o
  CC      security/keys/sysctl.o
  CC      io_uring/uring_cmd.o
  CC [M]  drivers/video/fbdev/uvesafb.o
  CC      drivers/acpi/acpica/dscontrol.o
  CC      crypto/scompress.o
  AR      drivers/amba/built-in.a
  CC      drivers/pnp/pnpacpi/core.o
  CC      drivers/pnp/core.o
  AR      drivers/clk/actions/built-in.a
  AR      drivers/clk/analogbits/built-in.a
  AR      drivers/clk/bcm/built-in.a
  AR      drivers/clk/imgtec/built-in.a
  CC      drivers/pnp/card.o
  AR      drivers/clk/imx/built-in.a
  AR      drivers/clk/ingenic/built-in.a
  AR      drivers/clk/mediatek/built-in.a
  AR      drivers/clk/microchip/built-in.a
  CC      arch/x86/mm/hugetlbpage.o
  AR      drivers/clk/mstar/built-in.a
  CC      drivers/acpi/apei/apei-base.o
  AR      drivers/clk/mvebu/built-in.a
  AR      drivers/clk/ralink/built-in.a
  CC      drivers/pnp/driver.o
  AR      drivers/clk/renesas/built-in.a
  AR      drivers/clk/socfpga/built-in.a
  CC      arch/x86/kernel/apic/io_apic.o
  AR      drivers/clk/sprd/built-in.a
  AR      drivers/clk/sunxi-ng/built-in.a
  CC      arch/x86/kernel/cpu/mtrr/cleanup.o
  CC      arch/x86/kernel/apic/msi.o
  CC      net/sched/sch_api.o
  AR      fs/sysfs/built-in.a
  AR      drivers/clk/ti/built-in.a
  CC [M]  drivers/video/fbdev/simplefb.o
  AR      drivers/clk/versatile/built-in.a
  CC [M]  arch/x86/kvm/../../../virt/kvm/binary_stats.o
  CC      drivers/clk/x86/clk-lpss-atom.o
  CC      drivers/acpi/apei/hest.o
  CC      drivers/clk/x86/clk-pmc-atom.o
  CC      kernel/printk/printk_safe.o
  CC [M]  drivers/video/fbdev/core/fbcmap.o
  CC      net/ethtool/bitset.o
  CC      fs/proc/interrupts.o
  CC      drivers/pci/pcie/aspm.o
  CC      drivers/acpi/acpica/dsdebug.o
  CC      fs/configfs/inode.o
  CC      drivers/acpi/acpica/dsfield.o
  CC      block/blk-settings.o
  CC      fs/configfs/file.o
  CC      sound/core/ctljack.o
  AR      lib/lz4/built-in.a
  AR      security/keys/built-in.a
  CC      lib/xz/xz_dec_syms.o
  CC      kernel/printk/printk_ringbuffer.o
  AR      security/built-in.a
  CC      arch/x86/mm/kasan_init_64.o
  CC      drivers/pnp/pnpacpi/rsparser.o
  CC      lib/xz/xz_dec_stream.o
  CC      drivers/pci/pcie/aer.o
  CC      net/sched/sch_blackhole.o
  CC      kernel/printk/sysctl.o
  CC      drivers/pci/hotplug/pci_hotplug_core.o
  CC      crypto/algboss.o
  CC      drivers/pci/pcie/err.o
  CC      fs/proc/loadavg.o
  CC      drivers/pci/hotplug/acpi_pcihp.o
  CC      kernel/sched/build_policy.o
  CC      drivers/gpio/gpiolib-swnode.o
  CC      drivers/pci/hotplug/pciehp_core.o
  CC      drivers/pnp/resource.o
  AR      drivers/clk/x86/built-in.a
  AR      drivers/clk/xilinx/built-in.a
  CC      arch/x86/mm/pkeys.o
  CC      drivers/clk/clk-devres.o
  CC      drivers/clk/clk-bulk.o
  CC      drivers/pci/pcie/aer_inject.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/vfio.o
  CC      drivers/clk/clkdev.o
  CC      io_uring/epoll.o
  CC      arch/x86/kernel/apic/x2apic_phys.o
  CC      lib/zstd/compress/zstd_compress_literals.o
  CC      drivers/acpi/acpica/dsinit.o
  CC      lib/zstd/compress/zstd_compress_sequences.o
  CC      sound/core/jack.o
  CC      drivers/acpi/apei/erst.o
  AR      drivers/acpi/pmic/built-in.a
  CC      drivers/clk/clk.o
  CC      lib/xz/xz_dec_lzma2.o
  CC      arch/x86/mm/pti.o
  CC      kernel/power/user.o
  CC      arch/x86/events/intel/uncore_nhmex.o
  CC [M]  drivers/video/fbdev/core/fbsysfs.o
  CC [M]  drivers/video/fbdev/core/modedb.o
  AR      arch/x86/kernel/cpu/mtrr/built-in.a
  CC      arch/x86/kernel/cpu/topology.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/coalesced_mmio.o
  CC      fs/configfs/dir.o
  AR      kernel/printk/built-in.a
  CC      arch/x86/kernel/apic/x2apic_cluster.o
  CC      fs/devpts/inode.o
  AR      drivers/gpio/built-in.a
  CC      fs/ext4/balloc.o
  CC      fs/proc/meminfo.o
  CC      fs/ext4/bitmap.o
  CC      block/blk-ioc.o
  CC      drivers/pci/hotplug/pciehp_ctrl.o
  CC      fs/proc/stat.o
  CC      drivers/dma/dw/core.o
  CC      drivers/acpi/acpica/dsmethod.o
  CC      drivers/dma/dw/dw.o
  CC      drivers/dma/dw/idma32.o
  CC      net/ethtool/strset.o
  CC      net/ethtool/linkinfo.o
  CC      lib/xz/xz_dec_bcj.o
  CC      drivers/acpi/dptf/int340x_thermal.o
  AR      drivers/pnp/pnpacpi/built-in.a
  AR      drivers/soc/apple/built-in.a
  CC      drivers/virtio/virtio.o
  CC      drivers/virtio/virtio_ring.o
  AR      drivers/soc/aspeed/built-in.a
  CC      drivers/tty/hvc/hvc_console.o
  CC      drivers/tty/vt/vt_ioctl.o
  AR      drivers/soc/bcm/bcm63xx/built-in.a
  AR      drivers/soc/bcm/built-in.a
  CC      crypto/testmgr.o
  AR      drivers/soc/fsl/built-in.a
  CC      arch/x86/kernel/cpu/common.o
  AR      drivers/soc/fujitsu/built-in.a
  CC      drivers/tty/vt/vc_screen.o
  AR      drivers/soc/imx/built-in.a
  AR      drivers/soc/ixp4xx/built-in.a
  AR      drivers/soc/loongson/built-in.a
  CC      kernel/locking/qspinlock.o
  CC      mm/vmscan.o
  AR      drivers/soc/mediatek/built-in.a
  CC      io_uring/statx.o
  AR      drivers/soc/microchip/built-in.a
  AR      drivers/soc/nuvoton/built-in.a
  CC      sound/core/timer.o
  AR      drivers/soc/pxa/built-in.a
  CC      drivers/tty/vt/selection.o
  AR      drivers/soc/amlogic/built-in.a
  AR      drivers/soc/qcom/built-in.a
  AR      drivers/soc/renesas/built-in.a
  AR      drivers/soc/rockchip/built-in.a
  AR      drivers/soc/sifive/built-in.a
  AR      drivers/soc/sunxi/built-in.a
  AR      drivers/soc/ti/built-in.a
  CC      drivers/tty/serial/8250/8250_core.o
  AR      drivers/soc/xilinx/built-in.a
  AR      drivers/soc/built-in.a
  CC      drivers/tty/serial/serial_core.o
  CC      drivers/tty/serial/8250/8250_pnp.o
  CC      drivers/pnp/manager.o
  CC      drivers/pci/pcie/pme.o
  AR      arch/x86/mm/built-in.a
  CC      kernel/power/poweroff.o
  CC      drivers/pnp/support.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/async_pf.o
  CC      arch/x86/kernel/apic/apic_flat_64.o
  CC      drivers/acpi/acpica/dsmthdat.o
  CC [M]  net/netfilter/ipvs/ip_vs_conn.o
  CC      net/netfilter/core.o
  CC [M]  net/netfilter/ipvs/ip_vs_core.o
  CC      fs/proc/uptime.o
  CC      fs/proc/util.o
  CC [M]  net/netfilter/ipvs/ip_vs_ctl.o
  AR      drivers/acpi/dptf/built-in.a
  CC      net/netfilter/nf_log.o
  AR      lib/xz/built-in.a
  CC      drivers/acpi/apei/bert.o
  CC      fs/proc/version.o
  AR      fs/devpts/built-in.a
  CC      net/core/net_namespace.o
  CC      net/netfilter/nf_queue.o
  AR      kernel/power/built-in.a
  CC      drivers/virtio/virtio_anchor.o
  CC [M]  drivers/video/fbdev/core/fbcvt.o
  CC      drivers/virtio/virtio_pci_modern_dev.o
  CC      drivers/pci/hotplug/pciehp_pci.o
  CC      kernel/locking/rtmutex_api.o
  CC      block/blk-map.o
  CC      arch/x86/events/intel/uncore_snb.o
  CC      net/ethtool/linkmodes.o
  CC      net/sched/sch_fifo.o
  CC      drivers/pnp/interface.o
  CC      fs/configfs/symlink.o
  CC      fs/configfs/mount.o
  CC      io_uring/net.o
  AR      net/ipv4/netfilter/built-in.a
  CC [M]  net/ipv4/netfilter/nf_defrag_ipv4.o
  CC      drivers/acpi/acpica/dsobject.o
  CC [M]  net/ipv4/netfilter/nf_reject_ipv4.o
  CC      arch/x86/kernel/apic/probe_64.o
  CC      net/xfrm/xfrm_policy.o
  CC      net/ipv4/route.o
  AR      drivers/tty/hvc/built-in.a
  CC      drivers/tty/vt/keyboard.o
  CC      net/core/secure_seq.o
  AR      drivers/tty/ipwireless/built-in.a
  CC      drivers/tty/tty_io.o
  CC      drivers/char/hw_random/core.o
  CC      fs/proc/softirqs.o
  CC      drivers/pci/pcie/dpc.o
  CC      drivers/dma/dw/acpi.o
  CC      fs/proc/namespaces.o
  CC      net/ethtool/rss.o
  CC      drivers/acpi/apei/ghes.o
  CC      lib/zstd/compress/zstd_compress_superblock.o
  AR      arch/x86/kernel/apic/built-in.a
  CC      drivers/tty/serial/earlycon.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/irqchip.o
  CC      drivers/pci/hotplug/pciehp_hpc.o
  CC      drivers/tty/serial/8250/8250_port.o
  CC [M]  drivers/video/fbdev/core/fb_cmdline.o
  CC      drivers/acpi/acpica/dsopcode.o
  CC      drivers/dma/hsu/hsu.o
  CC      fs/ext4/block_validity.o
  CC      fs/configfs/item.o
  CC      drivers/pnp/quirks.o
  CC [M]  drivers/video/fbdev/core/fb_defio.o
  CC      lib/zstd/compress/zstd_double_fast.o
  CC      arch/x86/kernel/cpu/rdrand.o
  CC      fs/proc/self.o
  CC      drivers/virtio/virtio_pci_legacy_dev.o
  CC      block/blk-merge.o
  CC      drivers/virtio/virtio_mmio.o
  CC      arch/x86/events/intel/uncore_snbep.o
  CC      arch/x86/kernel/cpu/match.o
  AR      net/sched/built-in.a
  CC      kernel/locking/spinlock_debug.o
  CC      net/unix/af_unix.o
  CC      drivers/dma/dw/pci.o
  AR      net/ipv6/netfilter/built-in.a
  CC      sound/core/hrtimer.o
  CC [M]  net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
  AR      drivers/pci/pcie/built-in.a
  CC      sound/core/seq_device.o
  CC      drivers/char/hw_random/intel-rng.o
  CC      net/unix/garbage.o
  CC      kernel/locking/qrwlock.o
  CC      net/netfilter/nf_sockopt.o
  AR      drivers/pci/controller/dwc/built-in.a
  AR      drivers/pci/controller/mobiveil/built-in.a
  CC [M]  net/ipv4/netfilter/ip_tables.o
  CC      drivers/pci/controller/vmd.o
  CC      drivers/acpi/acpica/dspkginit.o
  AR      fs/configfs/built-in.a
  CC [M]  sound/pci/hda/patch_realtek.o
  CC      fs/jbd2/transaction.o
  CC [M]  net/ipv4/netfilter/iptable_filter.o
  CC      net/core/flow_dissector.o
  CC      net/core/sysctl_net_core.o
  CC      fs/proc/thread_self.o
  CC      net/ethtool/linkstate.o
  CC      arch/x86/kernel/cpu/bugs.o
  CC      crypto/cmac.o
  CC [M]  net/ipv4/netfilter/iptable_mangle.o
  CC [M]  drivers/video/fbdev/core/fbcon.o
  CC      drivers/pnp/system.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/dirty_ring.o
  AR      drivers/dma/hsu/built-in.a
  CC      drivers/acpi/acpica/dsutils.o
  CC      fs/ext4/dir.o
  CC      fs/ext4/ext4_jbd2.o
  CC      fs/ext4/extents.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/pfncache.o
  AR      drivers/acpi/apei/built-in.a
  AR      drivers/pci/switch/built-in.a
  CC      arch/x86/kernel/ebda.o
  CC      drivers/tty/vt/consolemap.o
  AR      kernel/locking/built-in.a
  CC      drivers/pci/hotplug/acpiphp_core.o
  CC      drivers/pci/hotplug/acpiphp_glue.o
  CC      net/ipv4/inetpeer.o
  AR      drivers/dma/dw/built-in.a
  AR      drivers/dma/idxd/built-in.a
  CC [M]  drivers/video/fbdev/core/bitblit.o
  AR      drivers/dma/mediatek/built-in.a
  AR      drivers/dma/qcom/built-in.a
  CC [M]  sound/core/control_led.o
  AR      drivers/dma/ti/built-in.a
  AR      drivers/dma/xilinx/built-in.a
  CC [M]  drivers/dma/ioat/init.o
  AR      drivers/char/hw_random/built-in.a
  CC      drivers/char/agp/backend.o
  CC      drivers/virtio/virtio_pci_modern.o
  CC [M]  drivers/dma/ioat/dma.o
  CC      drivers/char/agp/generic.o
  CC      io_uring/msg_ring.o
  CC      fs/proc/proc_sysctl.o
  AR      drivers/pnp/built-in.a
  CC      crypto/hmac.o
  CC      io_uring/timeout.o
  CC      fs/ramfs/inode.o
  CC      drivers/clk/clk-divider.o
  CC      drivers/acpi/acpica/dswexec.o
  CC      drivers/tty/n_tty.o
  CC [M]  net/ipv4/netfilter/iptable_nat.o
  CC      drivers/acpi/acpica/dswload.o
  AR      drivers/pci/controller/built-in.a
  CC [M]  net/ipv6/netfilter/nf_conntrack_reasm.o
  CC      fs/hugetlbfs/inode.o
  CC [M]  arch/x86/kvm/x86.o
  CC [M]  drivers/video/fbdev/core/softcursor.o
  CC      net/ethtool/debug.o
  CC      block/blk-timeout.o
  CC      drivers/char/agp/isoch.o
  CC [M]  arch/x86/kvm/emulate.o
  CC [M]  net/netfilter/ipvs/ip_vs_sched.o
  HOSTCC  drivers/tty/vt/conmakehash
  CC [M]  sound/core/hwdep.o
  CC      drivers/tty/serial/8250/8250_dma.o
  CC      drivers/virtio/virtio_pci_common.o
  CC      block/blk-lib.o
  CC      block/blk-mq.o
  CC      net/ethtool/wol.o
  CC      kernel/irq/irqdesc.o
  CC      drivers/char/tpm/tpm-chip.o
  CC      drivers/acpi/acpica/dswload2.o
  CC      crypto/vmac.o
  CC      kernel/irq/handle.o
  CC      drivers/tty/vt/vt.o
  CC [M]  net/netfilter/ipvs/ip_vs_xmit.o
  AR      drivers/pci/hotplug/built-in.a
  CC      drivers/pci/access.o
  CC      fs/ramfs/file-mmu.o
  CC      drivers/clk/clk-fixed-factor.o
  CC [M]  drivers/dma/ioat/prep.o
  CC      fs/ext4/extents_status.o
  CC      arch/x86/kernel/cpu/aperfmperf.o
  CC      fs/jbd2/commit.o
  CC      crypto/xcbc.o
  CC      drivers/clk/clk-fixed-rate.o
  CC      drivers/char/agp/intel-agp.o
  CC      drivers/tty/tty_ioctl.o
  CC      io_uring/sqpoll.o
  CC      fs/ext4/file.o
  CC [M]  arch/x86/kvm/i8259.o
  CC      arch/x86/events/intel/uncore_discovery.o
  CC      drivers/acpi/acpica/dswscope.o
  CC      arch/x86/events/intel/cstate.o
  CC [M]  net/ipv4/netfilter/ipt_REJECT.o
  CC      kernel/irq/manage.o
  CC      net/ethtool/features.o
  CC [M]  arch/x86/kvm/irq.o
  CC [M]  sound/core/pcm.o
  AR      fs/ramfs/built-in.a
  CC      mm/shmem.o
  CC      drivers/clk/clk-gate.o
  CC      drivers/tty/serial/8250/8250_dwlib.o
  CC      lib/raid6/algos.o
  CC      kernel/sched/build_utility.o
  CC [M]  drivers/video/fbdev/core/tileblit.o
  CC      drivers/virtio/virtio_pci_legacy.o
  CC      net/core/dev.o
  CC      drivers/char/tpm/tpm-dev-common.o
  CC      lib/raid6/recov.o
  HOSTCC  lib/raid6/mktables
  CC      net/ipv4/protocol.o
  CC [M]  drivers/virtio/virtio_mem.o
  CC      arch/x86/kernel/cpu/cpuid-deps.o
  CC      drivers/clk/clk-multiplier.o
  CC      crypto/crypto_null.o
  CC      fs/fat/cache.o
  CC      drivers/acpi/acpica/dswstate.o
  CC      fs/proc/proc_net.o
  AR      fs/hugetlbfs/built-in.a
  CC      fs/nfs/client.o
  CC      net/unix/sysctl_net_unix.o
  CC      drivers/pci/bus.o
  LD [M]  net/ipv6/netfilter/nf_defrag_ipv6.o
  CC      fs/nfs/dir.o
  CC      net/ipv6/af_inet6.o
  UNROLL  lib/raid6/int1.c
  CC      drivers/tty/tty_ldisc.o
  CC      drivers/char/agp/intel-gtt.o
  CC      drivers/clk/clk-mux.o
  CC      drivers/acpi/acpica/evevent.o
  CC [M]  sound/pci/hda/patch_analog.o
  CC      arch/x86/kernel/cpu/umwait.o
  CC      net/ethtool/privflags.o
  UNROLL  lib/raid6/int2.c
  UNROLL  lib/raid6/int4.c
  CC      arch/x86/kernel/cpu/proc.o
  CC [M]  drivers/dma/ioat/dca.o
  CC      drivers/tty/serial/8250/8250_pcilib.o
  MKCAP   arch/x86/kernel/cpu/capflags.c
  UNROLL  lib/raid6/int8.c
  UNROLL  lib/raid6/int16.c
  UNROLL  lib/raid6/int32.c
  CC      lib/raid6/recov_avx2.o
  CC      lib/raid6/recov_ssse3.o
  CC      fs/jbd2/recovery.o
  CC      drivers/dma/dmaengine.o
  CC      io_uring/fdinfo.o
  AR      arch/x86/events/intel/built-in.a
  AR      arch/x86/events/built-in.a
  CC      drivers/acpi/acpica/evgpe.o
  CC      crypto/md5.o
  CC      fs/jbd2/checkpoint.o
  CC      drivers/char/tpm/tpm-dev.o
  CC [M]  sound/core/pcm_native.o
  CC [M]  drivers/video/fbdev/core/cfbfillrect.o
  CC      fs/jbd2/revoke.o
  CC      net/packet/af_packet.o
  CC      net/packet/diag.o
  CC      fs/fat/dir.o
  CC      drivers/tty/serial/serial_mctrl_gpio.o
  CC      net/xfrm/xfrm_state.o
  CC      net/ipv4/ip_input.o
  CC      net/xfrm/xfrm_hash.o
  CC      drivers/clk/clk-composite.o
  CC      fs/proc/kcore.o
  CC      drivers/pci/probe.o
  CC      arch/x86/kernel/platform-quirks.o
  CC      net/unix/diag.o
  CC [M]  net/netfilter/ipvs/ip_vs_app.o
  CC      lib/zstd/compress/zstd_fast.o
  AR      drivers/iommu/amd/built-in.a
  CC      drivers/acpi/acpica/evgpeblk.o
  CC      drivers/tty/serial/8250/8250_pci.o
  CC      drivers/iommu/intel/dmar.o
  CC      crypto/sha1_generic.o
  CC [M]  drivers/dma/ioat/sysfs.o
  AR      drivers/iommu/arm/arm-smmu/built-in.a
  CC      lib/raid6/mmx.o
  AR      drivers/iommu/arm/arm-smmu-v3/built-in.a
  CC      lib/raid6/sse1.o
  AR      drivers/iommu/arm/built-in.a
  CC      mm/util.o
  CC      kernel/irq/spurious.o
  CC      lib/raid6/sse2.o
  CC      drivers/tty/serial/8250/8250_exar.o
  CC [M]  sound/pci/hda/patch_hdmi.o
  CC      drivers/char/tpm/tpm-interface.o
  AR      drivers/iommu/iommufd/built-in.a
  CC      drivers/iommu/intel/iommu.o
  AR      drivers/char/agp/built-in.a
  CC      mm/mmzone.o
  COPY    drivers/tty/vt/defkeymap.c
  CC      net/unix/scm.o
  CC      net/ethtool/rings.o
  CC      drivers/acpi/acpica/evgpeinit.o
  CC      fs/jbd2/journal.o
  CC [M]  drivers/video/fbdev/core/cfbcopyarea.o
  CC [M]  net/netfilter/ipvs/ip_vs_sync.o
  CC      drivers/clk/clk-fractional-divider.o
  CC      lib/fonts/fonts.o
  CC      lib/argv_split.o
  CC      drivers/clk/clk-gpio.o
  CC      io_uring/tctx.o
  CC      crypto/sha256_generic.o
  CC      net/ipv6/anycast.o
  CC      lib/zstd/compress/zstd_lazy.o
  CC      kernel/irq/resend.o
  CONMK   drivers/tty/vt/consolemap_deftbl.c
  CC      drivers/tty/vt/defkeymap.o
  CC      fs/proc/kmsg.o
  AR      drivers/virtio/built-in.a
  CC      fs/proc/page.o
  LD [M]  drivers/dma/ioat/ioatdma.o
  CC      kernel/irq/chip.o
  CC      arch/x86/kernel/process_64.o
  CC      drivers/acpi/acpica/evgpeutil.o
  CC      drivers/dma/virt-dma.o
  CC      drivers/acpi/tables.o
  CC      lib/raid6/avx2.o
  CC      lib/fonts/font_8x8.o
  CC      fs/ext4/fsmap.o
  CC      fs/ext4/fsync.o
  CC      net/xfrm/xfrm_input.o
  CC      drivers/tty/vt/consolemap_deftbl.o
  CC      lib/fonts/font_8x16.o
  AR      drivers/tty/vt/built-in.a
  CC      drivers/acpi/blacklist.o
  CC      drivers/char/tpm/tpm1-cmd.o
  CC      drivers/char/tpm/tpm2-cmd.o
  CC      mm/vmstat.o
  CC      mm/backing-dev.o
  AR      drivers/clk/built-in.a
  CC      kernel/irq/dummychip.o
  CC      fs/fat/fatent.o
  AR      net/unix/built-in.a
  AR      drivers/gpu/host1x/built-in.a
  CC      net/key/af_key.o
  AR      drivers/gpu/drm/tests/built-in.a
  CC      crypto/sha512_generic.o
  CC [M]  drivers/gpu/drm/tests/drm_kunit_helpers.o
  CC      fs/fat/file.o
  CC [M]  sound/pci/hda/hda_eld.o
  CC      drivers/acpi/acpica/evglock.o
  CC      net/ethtool/channels.o
  AR      lib/fonts/built-in.a
  CC      mm/mm_init.o
  CC      net/ipv4/ip_fragment.o
  CC [M]  drivers/video/fbdev/core/cfbimgblt.o
  CC      drivers/tty/serial/8250/8250_early.o
  CC      io_uring/poll.o
  CC      io_uring/cancel.o
  CC      kernel/irq/devres.o
  CC      drivers/dma/acpi-dma.o
  CC      lib/raid6/avx512.o
  CC      drivers/pci/host-bridge.o
  CC      arch/x86/kernel/cpu/powerflags.o
  AR      fs/proc/built-in.a
  CC      block/blk-mq-tag.o
  CC      block/blk-stat.o
  CC      drivers/acpi/osi.o
  CC      drivers/acpi/acpica/evhandler.o
  CC [M]  drivers/gpu/drm/tests/drm_buddy_test.o
  CC      drivers/acpi/osl.o
  CC      drivers/iommu/intel/pasid.o
  CC      net/netfilter/utils.o
  CC [M]  arch/x86/kvm/lapic.o
  CC      mm/percpu.o
  CC      block/blk-mq-sysfs.o
  CC      net/ipv6/ip6_output.o
  CC      kernel/irq/autoprobe.o
  CC      crypto/blake2b_generic.o
  CC      drivers/tty/serial/8250/8250_dw.o
  CC [M]  net/netfilter/nfnetlink.o
  CC      drivers/char/tpm/tpmrm-dev.o
  CC [M]  drivers/gpu/drm/tests/drm_cmdline_parser_test.o
  CC      drivers/pci/remove.o
  CC      drivers/acpi/acpica/evmisc.o
  CC      drivers/pci/pci.o
  CC [M]  drivers/video/fbdev/core/sysfillrect.o
  CC [M]  net/netfilter/ipvs/ip_vs_est.o
  CC [M]  net/netfilter/ipvs/ip_vs_proto.o
  CC      lib/raid6/recov_avx512.o
  AR      drivers/dma/built-in.a
  AR      drivers/gpu/drm/arm/built-in.a
  CC      drivers/tty/serial/8250/8250_lpss.o
  CC      net/ethtool/coalesce.o
  CC      drivers/acpi/acpica/evregion.o
  CC [M]  sound/pci/hda/hda_intel.o
  CC      block/blk-mq-cpumap.o
  CC      fs/fat/inode.o
  CC      fs/nfs/file.o
  CC      fs/ext4/hash.o
  CC      fs/ext4/ialloc.o
  CC [M]  sound/core/pcm_lib.o
  CC      fs/ext4/indirect.o
  CC      kernel/irq/irqdomain.o
  CC      fs/ext4/inline.o
  CC      fs/fat/misc.o
  CC      arch/x86/kernel/cpu/feat_ctl.o
  CC      net/ipv4/ip_forward.o
  CC      kernel/irq/proc.o
  CC      io_uring/kbuf.o
  CC      drivers/char/tpm/tpm2-space.o
  CC      net/ipv6/ip6_input.o
  AR      sound/sh/built-in.a
  CC      block/blk-mq-sched.o
  CC [M]  drivers/gpu/drm/tests/drm_connector_test.o
  CC [M]  sound/core/pcm_misc.o
  CC      drivers/acpi/acpica/evrgnini.o
  CC      kernel/irq/migration.o
  TABLE   lib/raid6/tables.c
  CC      lib/raid6/int1.o
  CC      net/ipv4/ip_options.o
  CC      crypto/ecb.o
  CC      arch/x86/kernel/signal.o
  CC      drivers/tty/serial/8250/8250_mid.o
  CC [M]  net/netfilter/ipvs/ip_vs_pe.o
  CC      net/xfrm/xfrm_output.o
  LD [M]  sound/pci/hda/snd-hda-codec.o
  CC      arch/x86/kernel/cpu/intel.o
  CC [M]  drivers/video/fbdev/core/syscopyarea.o
  AR      net/packet/built-in.a
  CC      crypto/cbc.o
  AR      net/bridge/netfilter/built-in.a
  CC      net/bridge/br.o
  AR      fs/jbd2/built-in.a
  CC      mm/slab_common.o
  CC      drivers/iommu/intel/trace.o
  CC      net/xfrm/xfrm_sysctl.o
  CC      lib/raid6/int2.o
  CC      drivers/acpi/acpica/evsci.o
  CC      net/ethtool/pause.o
  CC [M]  drivers/gpu/drm/tests/drm_damage_helper_test.o
  CC      kernel/irq/cpuhotplug.o
  CC      kernel/irq/pm.o
  CC [M]  arch/x86/kvm/i8254.o
  CC      kernel/irq/msi.o
  CC      drivers/tty/serial/8250/8250_pericom.o
  CC      net/ethtool/eee.o
  CC      lib/zstd/compress/zstd_ldm.o
  CC      drivers/char/tpm/tpm-sysfs.o
  CC      mm/compaction.o
  CC      crypto/pcbc.o
  CC      arch/x86/kernel/signal_64.o
  CC      net/ipv4/ip_output.o
  CC      kernel/rcu/update.o
  CC      io_uring/rsrc.o
  CC      drivers/acpi/acpica/evxface.o
  CC      fs/fat/nfs.o
  CC      crypto/cts.o
  CC      block/ioctl.o
  AR      net/key/built-in.a
  CC [M]  drivers/gpu/drm/tests/drm_dp_mst_helper_test.o
  CC      fs/fat/namei_vfat.o
  CC      net/ipv4/ip_sockglue.o
  LD [M]  sound/pci/hda/snd-hda-codec-generic.o
  CC      drivers/connector/cn_queue.o
  CC      lib/raid6/int4.o
  LD [M]  sound/pci/hda/snd-hda-codec-realtek.o
  LD [M]  sound/pci/hda/snd-hda-codec-analog.o
  AR      kernel/sched/built-in.a
  CC [M]  drivers/video/fbdev/core/sysimgblt.o
  LD [M]  sound/pci/hda/snd-hda-codec-hdmi.o
  AR      kernel/livepatch/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_proto_tcp.o
  CC      kernel/dma/mapping.o
  LD [M]  sound/pci/hda/snd-hda-intel.o
  CC      drivers/connector/connector.o
  AR      sound/pci/built-in.a
  CC      fs/fat/namei_msdos.o
  CC      drivers/iommu/intel/cap_audit.o
  CC      kernel/irq/affinity.o
  CC      net/bridge/br_device.o
  CC      net/bridge/br_fdb.o
  AR      drivers/tty/serial/8250/built-in.a
  CC      fs/nfs/getroot.o
  AR      drivers/tty/serial/built-in.a
  CC      drivers/tty/tty_buffer.o
  CC      arch/x86/kernel/cpu/intel_pconfig.o
  CC [M]  sound/core/pcm_memory.o
  CC      drivers/char/mem.o
  CC      kernel/dma/direct.o
  CC      drivers/pci/pci-driver.o
  CC      lib/raid6/int8.o
  CC      drivers/char/tpm/eventlog/common.o
  CC      drivers/acpi/acpica/evxfevnt.o
  CC      arch/x86/kernel/cpu/tsx.o
  CC      net/ethtool/tsinfo.o
  CC      drivers/base/power/sysfs.o
  CC      net/ethtool/cabletest.o
  CC      drivers/base/power/generic_ops.o
  CC      drivers/block/loop.o
  CC      drivers/block/virtio_blk.o
  CC [M]  drivers/gpu/drm/tests/drm_format_helper_test.o
  CC      arch/x86/kernel/cpu/intel_epb.o
  CC      crypto/lrw.o
  CC      drivers/base/power/common.o
  CC      net/xfrm/xfrm_replay.o
  CC      drivers/acpi/acpica/evxfgpe.o
  CC      kernel/irq/matrix.o
  CC      net/xfrm/xfrm_device.o
  CC      block/genhd.o
  CC      fs/ext4/inode.o
  CC      drivers/acpi/acpica/evxfregn.o
  CC      mm/interval_tree.o
  CC      net/ethtool/tunnels.o
  CC      drivers/connector/cn_proc.o
  CC [M]  drivers/video/fbdev/core/fb_sys_fops.o
  CC      net/ethtool/fec.o
  CC [M]  sound/core/memalloc.o
  CC      fs/ext4/ioctl.o
  CC      arch/x86/kernel/cpu/amd.o
  CC      drivers/base/power/qos.o
  CC      drivers/tty/tty_port.o
  AR      fs/fat/built-in.a
  CC      fs/exportfs/expfs.o
  CC      lib/raid6/int16.o
  CC      drivers/char/tpm/eventlog/tpm1.o
  CC      fs/nfs/inode.o
  CC      fs/ext4/mballoc.o
  CC      net/ipv4/inet_hashtables.o
  CC      arch/x86/kernel/cpu/hygon.o
  CC      net/ethtool/eeprom.o
  CC      lib/zstd/compress/zstd_opt.o
  CC      kernel/rcu/sync.o
  CC      kernel/dma/ops_helpers.o
  CC      drivers/iommu/intel/irq_remapping.o
  CC      mm/list_lru.o
  CC      drivers/base/power/runtime.o
  CC      crypto/xts.o
  CC      drivers/acpi/acpica/exconcat.o
  CC      net/ipv6/addrconf.o
  CC      net/ethtool/stats.o
  CC      net/ipv6/addrlabel.o
  CC [M]  drivers/gpu/drm/tests/drm_format_test.o
  CC [M]  net/netfilter/ipvs/ip_vs_proto_udp.o
  CC      kernel/rcu/srcutree.o
  CC      net/ethtool/phc_vclocks.o
  CC      lib/raid6/int32.o
  CC [M]  net/netfilter/ipvs/ip_vs_nfct.o
  CC      io_uring/rw.o
  AR      fs/exportfs/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_rr.o
  LD [M]  drivers/video/fbdev/core/fb.o
  CC      drivers/pci/search.o
  CC      drivers/acpi/acpica/exconfig.o
  AR      drivers/misc/eeprom/built-in.a
  AR      drivers/video/fbdev/core/built-in.a
  AR      drivers/misc/cb710/built-in.a
  CC      drivers/char/tpm/eventlog/tpm2.o
  AR      drivers/video/fbdev/built-in.a
  CC      kernel/dma/dummy.o
  CC [M]  drivers/block/nbd.o
  AR      drivers/misc/ti-st/built-in.a
  AR      drivers/video/built-in.a
  CC      kernel/dma/contiguous.o
  AR      drivers/misc/lis3lv02d/built-in.a
  AR      drivers/misc/cardreader/built-in.a
  CC      drivers/tty/tty_mutex.o
  CC [M]  drivers/misc/mei/hdcp/mei_hdcp.o
  CC      arch/x86/kernel/cpu/centaur.o
  CC      kernel/dma/swiotlb.o
  AR      kernel/irq/built-in.a
  CC      drivers/acpi/acpica/exconvrt.o
  CC      lib/bug.o
  CC [M]  sound/core/pcm_timer.o
  LD [M]  sound/core/snd-ctl-led.o
  CC      block/ioprio.o
  CC      net/xfrm/xfrm_algo.o
  CC      crypto/ctr.o
  CC      drivers/acpi/acpica/excreate.o
  CC      io_uring/opdef.o
  CC      io_uring/notif.o
  AR      drivers/connector/built-in.a
  CC      lib/buildid.o
  CC      net/core/dev_addr_lists.o
  CC      lib/zstd/zstd_decompress_module.o
  AR      drivers/misc/built-in.a
  CC      mm/workingset.o
  CC      lib/raid6/tables.o
  CC      arch/x86/kernel/traps.o
  CC      kernel/entry/common.o
  CC      kernel/rcu/tree.o
  CC      arch/x86/kernel/idt.o
  CC [M]  drivers/gpu/drm/tests/drm_framebuffer_test.o
  CC      drivers/base/power/wakeirq.o
  CC      kernel/module/main.o
  CC      kernel/module/strict_rwx.o
  CC      arch/x86/kernel/cpu/zhaoxin.o
  CC      drivers/pci/pci-sysfs.o
  CC      net/bridge/br_forward.o
  CC      drivers/tty/tty_ldsem.o
  CC      drivers/char/tpm/tpm_ppi.o
  CC      kernel/module/tree_lookup.o
  CC      drivers/acpi/acpica/exdebug.o
  CC      net/ethtool/mm.o
  CC      drivers/iommu/intel/perfmon.o
  CC      drivers/base/firmware_loader/builtin/main.o
  CC      drivers/base/power/main.o
  CC      crypto/gcm.o
  LD [M]  sound/core/snd-hwdep.o
  CC      net/ethtool/module.o
  LD [M]  sound/core/snd-pcm.o
  CC      drivers/tty/tty_baudrate.o
  CC      drivers/tty/tty_jobctrl.o
  AR      sound/core/built-in.a
  CC      mm/debug.o
  AR      sound/synth/emux/built-in.a
  CC [M]  net/netfilter/nf_conntrack_core.o
  AR      sound/synth/built-in.a
  CC [M]  net/netfilter/nf_conntrack_standalone.o
  AR      sound/usb/misc/built-in.a
  LD [M]  net/netfilter/ipvs/ip_vs.o
  AR      sound/usb/usx2y/built-in.a
  AR      sound/usb/caiaq/built-in.a
  CC [M]  drivers/misc/mei/pxp/mei_pxp.o
  AR      sound/usb/6fire/built-in.a
  AR      sound/usb/hiface/built-in.a
  AR      sound/usb/bcd2000/built-in.a
  AR      sound/usb/built-in.a
  CC      block/badblocks.o
  AR      sound/firewire/built-in.a
  CC      block/blk-rq-qos.o
  AR      sound/sparc/built-in.a
  AR      drivers/base/firmware_loader/builtin/built-in.a
  AR      sound/spi/built-in.a
  CC      drivers/base/firmware_loader/main.o
  CC      arch/x86/kernel/cpu/perfctr-watchdog.o
  AR      sound/parisc/built-in.a
  AR      lib/raid6/built-in.a
  AR      sound/pcmcia/vx/built-in.a
  AR      sound/mips/built-in.a
  AR      drivers/block/built-in.a
  CC      block/disk-events.o
  AR      sound/pcmcia/pdaudiocf/built-in.a
  AR      sound/pcmcia/built-in.a
  AR      drivers/gpu/vga/built-in.a
  CC      net/bridge/br_if.o
  AR      sound/soc/built-in.a
  CC [M]  drivers/gpu/drm/tests/drm_managed_test.o
  AR      sound/atmel/built-in.a
  AR      sound/hda/built-in.a
  CC [M]  sound/hda/hda_bus_type.o
  CC      lib/cmdline.o
  CC      drivers/acpi/acpica/exdump.o
  CC      kernel/module/debug_kmemleak.o
  CC      net/xfrm/xfrm_user.o
  CC      io_uring/io-wq.o
  CC      drivers/pci/rom.o
  CC      fs/nfs/super.o
  CC [M]  sound/hda/hdac_bus.o
  CC      kernel/dma/remap.o
  CC [M]  sound/hda/hdac_device.o
  CC      block/blk-ia-ranges.o
  CC      net/ipv4/inet_timewait_sock.o
  CC      drivers/char/tpm/eventlog/acpi.o
  CC      drivers/pci/setup-res.o
  CC      net/core/dst.o
  CC      kernel/entry/syscall_user_dispatch.o
  CC      drivers/acpi/acpica/exfield.o
  AR      sound/x86/built-in.a
  CC      drivers/acpi/acpica/exfldio.o
  CC      drivers/mfd/mfd-core.o
  CC      kernel/entry/kvm.o
  CC [M]  drivers/gpu/drm/tests/drm_mm_test.o
  CC [M]  drivers/misc/mei/init.o
  CC      net/ethtool/pse-pd.o
  CC      drivers/tty/n_null.o
  CC      mm/gup.o
  CC      arch/x86/kernel/cpu/vmware.o
  AR      sound/xen/built-in.a
  AR      drivers/gpu/drm/display/built-in.a
  AR      drivers/gpu/drm/rcar-du/built-in.a
  CC [M]  drivers/gpu/drm/display/drm_display_helper_mod.o
  AR      drivers/gpu/drm/omapdrm/built-in.a
  CC [M]  drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
  CC [M]  drivers/gpu/drm/display/drm_dp_helper.o
  CC [M]  sound/hda/hdac_sysfs.o
  CC [M]  drivers/gpu/drm/tests/drm_modes_test.o
  CC [M]  drivers/misc/mei/hbm.o
  CC [M]  drivers/gpu/drm/display/drm_dp_mst_topology.o
  AR      kernel/dma/built-in.a
  CC      arch/x86/kernel/irq.o
  CC      fs/nfs/io.o
  CC      crypto/pcrypt.o
  CC      drivers/acpi/utils.o
  CC      arch/x86/kernel/cpu/hypervisor.o
  CC      drivers/acpi/reboot.o
  CC      drivers/acpi/acpica/exmisc.o
  AR      drivers/iommu/intel/built-in.a
  CC      drivers/iommu/iommu.o
  CC      net/bridge/br_input.o
  CC [M]  drivers/gpu/drm/tests/drm_plane_helper_test.o
  CC      block/bsg.o
  CC      drivers/char/tpm/eventlog/efi.o
  AR      drivers/base/firmware_loader/built-in.a
  CC      net/ethtool/plca.o
  CC      arch/x86/kernel/irq_64.o
  CC      drivers/pci/irq.o
  CC      arch/x86/kernel/cpu/mshyperv.o
  CC      drivers/iommu/iommu-traces.o
  CC      drivers/tty/pty.o
  CC      crypto/cryptd.o
  CC [M]  drivers/misc/mei/interrupt.o
  CC [M]  drivers/gpu/drm/tests/drm_probe_helper_test.o
  CC      drivers/mfd/intel-lpss.o
  AR      kernel/entry/built-in.a
  CC      drivers/acpi/acpica/exmutex.o
  CC      drivers/char/tpm/tpm_crb.o
  CC      crypto/des_generic.o
  AR      drivers/nfc/built-in.a
  CC      kernel/time/time.o
  AR      drivers/dax/hmem/built-in.a
  CC      drivers/dax/super.o
  CC      kernel/time/timer.o
  CC      net/core/netevent.o
  CC      net/ipv4/inet_connection_sock.o
  CC [M]  sound/hda/hdac_regmap.o
  CC      net/ipv4/tcp.o
  CC      arch/x86/kernel/cpu/capflags.o
  CC [M]  net/sunrpc/auth_gss/auth_gss.o
  CC      drivers/base/power/wakeup.o
  CC      drivers/base/power/wakeup_stats.o
  CC [M]  drivers/misc/mei/client.o
  CC      net/8021q/vlan_core.o
  CC      net/dcb/dcbnl.o
  CC      drivers/pci/vpd.o
  CC      net/l3mdev/l3mdev.o
  CC [M]  drivers/gpu/drm/tests/drm_rect_test.o
  CC [M]  net/bluetooth/af_bluetooth.o
  CC      block/bsg-lib.o
  AR      io_uring/built-in.a
  CC      net/dcb/dcbevent.o
  CC      drivers/acpi/acpica/exnames.o
  CC      fs/nfs/direct.o
  CC      kernel/module/kallsyms.o
  CC      kernel/module/procfs.o
  AR      sound/virtio/built-in.a
  CC      net/bridge/br_ioctl.o
  AR      arch/x86/kernel/cpu/built-in.a
  CC      drivers/iommu/iommu-sysfs.o
  CC      drivers/acpi/acpica/exoparg1.o
  AR      net/ethtool/built-in.a
  CC [M]  net/bluetooth/hci_core.o
  CC      drivers/mfd/intel-lpss-pci.o
  CC      drivers/tty/sysrq.o
  CC      drivers/base/power/domain.o
  CC      drivers/base/power/domain_governor.o
  CC [M]  arch/x86/kvm/ioapic.o
  CC [M]  sound/hda/hdac_controller.o
  AR      drivers/char/tpm/built-in.a
  CC      drivers/char/random.o
  CC      drivers/dax/bus.o
  CC      crypto/aes_generic.o
  CC      net/core/neighbour.o
  CC      net/devres.o
  CC [M]  net/dns_resolver/dns_key.o
  CC      lib/cpumask.o
  CC [M]  net/dns_resolver/dns_query.o
  CC      kernel/time/hrtimer.o
  CC      kernel/futex/core.o
  CC [M]  net/netfilter/nf_conntrack_expect.o
  CC      block/blk-cgroup.o
  CC      drivers/pci/setup-bus.o
  CC      kernel/cgroup/cgroup.o
  CC      drivers/acpi/acpica/exoparg2.o
  CC      arch/x86/kernel/dumpstack_64.o
  AR      net/l3mdev/built-in.a
  CC      kernel/cgroup/rstat.o
  CC      net/socket.o
  CC      drivers/iommu/dma-iommu.o
  CC      fs/nfs/pagelist.o
  CC      drivers/mfd/intel-lpss-acpi.o
  CC      drivers/acpi/acpica/exoparg3.o
  CC      block/blk-cgroup-rwstat.o
  CC      kernel/module/sysfs.o
  AR      net/xfrm/built-in.a
  CC      drivers/base/power/clock_ops.o
  CC      fs/nfs/read.o
  CC      lib/ctype.o
  CC      lib/dec_and_lock.o
  CC      drivers/iommu/ioasid.o
  CC      lib/decompress.o
  CC      mm/mmap_lock.o
  CC [M]  net/8021q/vlan.o
  CC      drivers/acpi/acpica/exoparg6.o
  CC      kernel/time/timekeeping.o
  CC      drivers/mfd/intel_soc_pmic_crc.o
  CC      fs/nfs/symlink.o
  AR      drivers/tty/built-in.a
  CC      drivers/acpi/acpica/exprep.o
  LD [M]  net/dns_resolver/dns_resolver.o
  CC      net/bridge/br_stp.o
  CC [M]  sound/hda/hdac_stream.o
  CC      net/compat.o
  CC [M]  drivers/mfd/lpc_sch.o
  CC      arch/x86/kernel/time.o
  CC      kernel/time/ntp.o
  CC [M]  net/8021q/vlan_dev.o
  CC      net/ipv6/route.o
  CC      fs/ext4/migrate.o
  CC [M]  arch/x86/kvm/irq_comm.o
  CC      crypto/deflate.o
  AR      kernel/module/built-in.a
  CC [M]  drivers/gpu/drm/display/drm_dsc_helper.o
  AR      drivers/dax/built-in.a
  AR      drivers/gpu/drm/tilcdc/built-in.a
  CC      kernel/cgroup/namespace.o
  AR      drivers/gpu/drm/imx/built-in.a
  CC      kernel/trace/trace_clock.o
  CC      kernel/trace/ftrace.o
  CC      drivers/acpi/acpica/exregion.o
  CC [M]  drivers/misc/mei/main.o
  CC      kernel/events/core.o
  CC      kernel/futex/syscalls.o
  CC      kernel/events/ring_buffer.o
  CC      kernel/bpf/core.o
  AR      net/dcb/built-in.a
  CC      kernel/events/callchain.o
  CC      arch/x86/kernel/ioport.o
  CC      kernel/events/hw_breakpoint.o
  CC      drivers/char/misc.o
  CC      arch/x86/kernel/dumpstack.o
  CC      kernel/events/uprobes.o
  AR      drivers/base/power/built-in.a
  CC [M]  drivers/mfd/lpc_ich.o
  CC      drivers/base/regmap/regmap.o
  AR      drivers/base/test/built-in.a
  CC      kernel/fork.o
  CC      kernel/time/clocksource.o
  CC      net/ipv4/tcp_input.o
  CC [M]  net/sunrpc/auth_gss/gss_generic_token.o
  CC [M]  net/8021q/vlan_netlink.o
  CC      drivers/iommu/iova.o
  CC      fs/lockd/clntlock.o
  CC      drivers/acpi/acpica/exresnte.o
  CC      mm/highmem.o
  CC [M]  net/netfilter/nf_conntrack_helper.o
  CC      crypto/crc32c_generic.o
  CC      fs/lockd/clntproc.o
  CC [M]  drivers/gpu/drm/display/drm_hdcp_helper.o
  CC      kernel/trace/ring_buffer.o
  CC [M]  sound/hda/array.o
  CC      kernel/rcu/rcu_segcblist.o
  CC      drivers/pci/vc.o
  CC      fs/ext4/mmp.o
  CC      drivers/pci/mmap.o
  CC      drivers/pci/setup-irq.o
  CC      net/bridge/br_stp_bpdu.o
  CC      mm/memory.o
  CC [M]  arch/x86/kvm/cpuid.o
  CC      drivers/char/virtio_console.o
  CC      drivers/acpi/acpica/exresolv.o
  CC [M]  net/8021q/vlanproc.o
  CC      drivers/pci/proc.o
  CC      kernel/futex/pi.o
  CC      arch/x86/kernel/nmi.o
  CC      crypto/crct10dif_common.o
  CC      block/blk-throttle.o
  CC      fs/nfs/unlink.o
  CC      kernel/time/jiffies.o
  CC [M]  drivers/misc/mei/dma-ring.o
  AR      drivers/mfd/built-in.a
  CC [M]  net/sunrpc/auth_gss/gss_mech_switch.o
  CC      kernel/exec_domain.o
  CC [M]  arch/x86/kvm/pmu.o
  CC [M]  arch/x86/kvm/mtrr.o
  CC [M]  net/bluetooth/hci_conn.o
  CC [M]  sound/hda/hdmi_chmap.o
  AR      kernel/rcu/built-in.a
  CC      kernel/panic.o
  CC [M]  drivers/gpu/drm/display/drm_hdmi_helper.o
  CC      drivers/iommu/irq_remapping.o
  CC      kernel/cpu.o
  CC [M]  drivers/gpu/drm/display/drm_scdc_helper.o
  CC      lib/zstd/decompress/huf_decompress.o
  CC      crypto/crct10dif_generic.o
  CC      drivers/acpi/acpica/exresop.o
  CC      net/core/rtnetlink.o
  CC      fs/ext4/move_extent.o
  CC      kernel/time/timer_list.o
  CC      fs/lockd/clntxdr.o
  CC      drivers/base/regmap/regcache.o
  CC      drivers/base/component.o
  CC      kernel/futex/requeue.o
  CC      net/sysctl_net.o
  CC [M]  drivers/misc/mei/bus.o
  CC      drivers/pci/slot.o
  CC [M]  drivers/gpu/drm/display/drm_dp_aux_dev.o
  CC      drivers/acpi/acpica/exserial.o
  CC      net/ipv4/tcp_output.o
  CC [M]  net/netfilter/nf_conntrack_proto.o
  CC      crypto/authenc.o
  AR      net/8021q/built-in.a
  LD [M]  net/8021q/8021q.o
  CC      kernel/exit.o
  CC      arch/x86/kernel/ldt.o
  CC      fs/ext4/namei.o
  CC      drivers/pci/pci-acpi.o
  AR      drivers/iommu/built-in.a
  CC [M]  net/bluetooth/hci_event.o
  CC      drivers/dma-buf/dma-buf.o
  CC      net/bridge/br_stp_if.o
  CC      drivers/dma-buf/dma-fence.o
  CC      kernel/futex/waitwake.o
  CC      net/core/utils.o
  CC [M]  arch/x86/kvm/hyperv.o
  CC [M]  net/netfilter/nf_conntrack_proto_generic.o
  CC [M]  sound/hda/trace.o
  CC      drivers/acpi/acpica/exstore.o
  CC      kernel/time/timeconv.o
  CC      drivers/char/hpet.o
  CC [M]  net/sunrpc/auth_gss/svcauth_gss.o
  CC      net/sunrpc/clnt.o
  CC      drivers/char/nvram.o
  CC      drivers/base/core.o
  CC      fs/ext4/page-io.o
  CC      fs/ext4/readpage.o
  CC      block/mq-deadline.o
  CC [M]  net/netfilter/nf_conntrack_proto_tcp.o
  CC      fs/lockd/host.o
  CC      fs/nfs/write.o
  CC      kernel/time/timecounter.o
  AR      drivers/gpu/drm/i2c/built-in.a
  AR      drivers/gpu/drm/panel/built-in.a
  CC      drivers/acpi/acpica/exstoren.o
  AR      drivers/gpu/drm/bridge/analogix/built-in.a
  LD [M]  drivers/gpu/drm/display/drm_display_helper.o
  AR      drivers/gpu/drm/bridge/cadence/built-in.a
  AR      kernel/futex/built-in.a
  AR      drivers/gpu/drm/bridge/imx/built-in.a
  CC      kernel/time/alarmtimer.o
  CC      drivers/acpi/acpica/exstorob.o
  AR      drivers/gpu/drm/bridge/synopsys/built-in.a
  AR      drivers/gpu/drm/bridge/built-in.a
  CC [M]  arch/x86/kvm/debugfs.o
  AR      kernel/bpf/built-in.a
  CC      fs/nfs/namespace.o
  AR      drivers/gpu/drm/hisilicon/built-in.a
  AR      drivers/gpu/drm/mxsfb/built-in.a
  CC      crypto/authencesn.o
  AR      drivers/gpu/drm/tiny/built-in.a
  AR      drivers/gpu/drm/xlnx/built-in.a
  AR      drivers/gpu/drm/gud/built-in.a
  CC [M]  drivers/misc/mei/bus-fixup.o
  AR      drivers/gpu/drm/solomon/built-in.a
  CC [M]  drivers/gpu/drm/ttm/ttm_tt.o
  CC      arch/x86/kernel/setup.o
  CC      drivers/base/bus.o
  CC      drivers/pci/quirks.o
  CC [M]  arch/x86/kvm/mmu/mmu.o
  CC [M]  sound/hda/hdac_component.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo.o
  CC      drivers/base/regmap/regcache-rbtree.o
  CC      drivers/dma-buf/dma-fence-array.o
  CC      net/bridge/br_stp_timer.o
  CC      net/sunrpc/xprt.o
  CC      drivers/acpi/acpica/exsystem.o
  CC      arch/x86/kernel/x86_init.o
  CC [M]  net/netfilter/nf_conntrack_proto_udp.o
  AR      drivers/char/built-in.a
  CC [M]  net/netfilter/nf_conntrack_proto_icmp.o
  CC      fs/lockd/svc.o
  CC      fs/ext4/resize.o
  CC      fs/nfs/mount_clnt.o
  CC      kernel/softirq.o
  CC      mm/mincore.o
  CC      fs/ext4/super.o
  CC [M]  drivers/misc/mei/debugfs.o
  CC      lib/zstd/decompress/zstd_ddict.o
  CC      kernel/trace/trace.o
  CC      drivers/dma-buf/dma-fence-chain.o
  CC      drivers/acpi/acpica/extrace.o
  CC      crypto/lzo.o
  CC [M]  net/sunrpc/auth_gss/gss_rpc_upcall.o
  CC [M]  sound/hda/hdac_i915.o
  CC      drivers/base/dd.o
  CC      lib/zstd/decompress/zstd_decompress.o
  CC      drivers/base/regmap/regcache-flat.o
  CC      block/kyber-iosched.o
  CC      kernel/time/posix-timers.o
  CC      drivers/acpi/acpica/exutils.o
  CC [M]  net/sunrpc/auth_gss/gss_rpc_xdr.o
  CC      lib/zstd/decompress/zstd_decompress_block.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo_util.o
  CC [M]  drivers/misc/mei/mei-trace.o
  CC      kernel/cgroup/cgroup-v1.o
  CC      arch/x86/kernel/i8259.o
  CC      lib/zstd/zstd_common_module.o
  CC      drivers/acpi/acpica/hwacpi.o
  CC      drivers/dma-buf/dma-fence-unwrap.o
  CC      net/bridge/br_netlink.o
  CC      drivers/dma-buf/dma-resv.o
  CC      crypto/lzo-rle.o
  CC      drivers/dma-buf/sync_file.o
  CC      net/bridge/br_netlink_tunnel.o
  CC      mm/mlock.o
  CC      kernel/resource.o
  CC      crypto/lz4.o
  CC      drivers/base/regmap/regmap-debugfs.o
  CC [M]  drivers/misc/mei/pci-me.o
  CC [M]  net/netfilter/nf_conntrack_extend.o
  CC      fs/lockd/svclock.o
  CC [M]  sound/hda/intel-dsp-config.o
  CC      fs/nfs/nfstrace.o
  CC [M]  net/sunrpc/auth_gss/trace.o
  CC      drivers/acpi/acpica/hwesleep.o
  CC      arch/x86/kernel/irqinit.o
  CC      kernel/sysctl.o
  CC      crypto/lz4hc.o
  CC      mm/mmap.o
  CC      lib/zstd/common/debug.o
  CC [M]  sound/hda/intel-nhlt.o
  CC      fs/nls/nls_base.o
  CC [M]  drivers/misc/mei/hw-me.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_mech.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo_vm.o
  CC      fs/nls/nls_cp437.o
  CC      drivers/base/syscore.o
  CC [M]  net/bluetooth/mgmt.o
  CC      drivers/base/regmap/regmap-i2c.o
  CC      drivers/acpi/acpica/hwgpe.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_seal.o
  CC [M]  net/bluetooth/hci_sock.o
  CC      block/bfq-iosched.o
  CC      crypto/xxhash_generic.o
  CC      mm/mmu_gather.o
  CC      drivers/base/regmap/regmap-irq.o
  CC      net/ipv6/ip6_fib.o
  CC      drivers/pci/ats.o
  CC      drivers/pci/iov.o
  CC      block/bfq-wf2q.o
  CC      block/bfq-cgroup.o
  CC      drivers/dma-buf/sw_sync.o
  CC      fs/lockd/svcshare.o
  CC      fs/nls/nls_ascii.o
  CC      kernel/cgroup/freezer.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_unseal.o
  CC      arch/x86/kernel/jump_label.o
  CC      net/ipv4/tcp_timer.o
  CC      arch/x86/kernel/irq_work.o
  CC      kernel/time/posix-cpu-timers.o
  CC [M]  sound/hda/intel-sdw-acpi.o
  CC      net/core/link_watch.o
  CC [M]  net/netfilter/nf_conntrack_acct.o
  CC      net/bridge/br_arp_nd_proxy.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_seqnum.o
  CC      drivers/acpi/acpica/hwregs.o
  CC [M]  drivers/gpu/drm/ttm/ttm_module.o
  CC      mm/mprotect.o
  CC      crypto/rng.o
  CC      fs/nls/nls_iso8859-1.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_wrap.o
  CC      mm/mremap.o
  CC      mm/msync.o
  CC [M]  drivers/misc/mei/gsc-me.o
  CC      net/bridge/br_sysfs_if.o
  CC      net/core/filter.o
  LD [M]  sound/hda/snd-hda-core.o
  CC      arch/x86/kernel/probe_roms.o
  CC      mm/page_vma_mapped.o
  LD [M]  sound/hda/snd-intel-dspcfg.o
  CC      mm/pagewalk.o
  LD [M]  sound/hda/snd-intel-sdw-acpi.o
  CC      mm/pgtable-generic.o
  CC      sound/sound_core.o
  CC      arch/x86/kernel/sys_ia32.o
  CC      net/sunrpc/socklib.o
  CC      fs/nls/nls_utf8.o
  CC      drivers/acpi/acpica/hwsleep.o
  CC [M]  drivers/gpu/drm/ttm/ttm_execbuf_util.o
  CC [M]  net/netfilter/nf_conntrack_seqadj.o
  CC      kernel/cgroup/legacy_freezer.o
  CC      drivers/dma-buf/sync_debug.o
  CC      kernel/time/posix-clock.o
  CC      fs/ext4/symlink.o
  CC      block/blk-mq-pci.o
  CC      block/blk-mq-virtio.o
  CC      fs/lockd/svcproc.o
  CC      drivers/pci/pci-label.o
  CC      drivers/acpi/acpica/hwvalid.o
  CC      crypto/drbg.o
  CC      sound/last.o
  CC      net/ipv4/tcp_ipv4.o
  CC      net/ipv4/tcp_minisocks.o
  AR      fs/nls/built-in.a
  CC [M]  drivers/gpu/drm/ttm/ttm_range_manager.o
  AR      drivers/base/regmap/built-in.a
  CC      net/sunrpc/xprtsock.o
  CC      drivers/base/driver.o
  CC      drivers/acpi/acpica/hwxface.o
  CC      net/bridge/br_sysfs_br.o
  LD [M]  drivers/misc/mei/mei.o
  CC      drivers/pci/pci-stub.o
  LD [M]  drivers/misc/mei/mei-me.o
  LD [M]  drivers/misc/mei/mei-gsc.o
  CC [M]  arch/x86/kvm/mmu/page_track.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_crypto.o
  CC      kernel/cgroup/pids.o
  CC      kernel/cgroup/cpuset.o
  CC      mm/rmap.o
  CC      arch/x86/kernel/signal_32.o
  CC [M]  drivers/dma-buf/selftest.o
  CC      mm/vmalloc.o
  CC [M]  drivers/gpu/drm/ttm/ttm_resource.o
  AR      sound/built-in.a
  CC [M]  net/sunrpc/auth_gss/gss_krb5_keys.o
  AR      drivers/cxl/core/built-in.a
  AR      drivers/cxl/built-in.a
  CC      kernel/time/itimer.o
  CC      drivers/acpi/acpica/hwxfsleep.o
  LD [M]  net/sunrpc/auth_gss/auth_rpcgss.o
  CC      lib/decompress_bunzip2.o
  CC      lib/decompress_inflate.o
  CC      lib/decompress_unlz4.o
  CC      kernel/time/clockevents.o
  AR      drivers/macintosh/built-in.a
  CC      kernel/time/tick-common.o
  CC      net/bridge/br_nf_core.o
  CC      drivers/acpi/acpica/hwpci.o
  CC      net/bridge/br_multicast.o
  CC      net/sunrpc/sched.o
  CC      net/sunrpc/auth.o
  CC      drivers/base/class.o
  CC      kernel/time/tick-broadcast.o
  CC [M]  net/bluetooth/hci_sysfs.o
  CC [M]  net/bluetooth/l2cap_core.o
  CC      drivers/pci/vgaarb.o
  CC [M]  drivers/gpu/drm/ttm/ttm_pool.o
  CC      lib/zstd/common/entropy_common.o
  CC      net/ipv4/tcp_cong.o
  CC      net/ipv4/tcp_metrics.o
  CC [M]  net/bluetooth/l2cap_sock.o
  CC [M]  drivers/dma-buf/st-dma-fence.o
  AR      kernel/events/built-in.a
  CC      kernel/capability.o
  CC      lib/zstd/common/error_private.o
  CC [M]  net/netfilter/nf_conntrack_proto_icmpv6.o
  CC      kernel/ptrace.o
  CC      drivers/acpi/acpica/nsaccess.o
  CC      lib/zstd/common/fse_decompress.o
  CC      block/blk-mq-debugfs.o
  CC [M]  net/bluetooth/smp.o
  CC [M]  arch/x86/kvm/mmu/spte.o
  CC      fs/lockd/svcsubs.o
  CC      net/ipv6/ipv6_sockglue.o
  CC      net/ipv4/tcp_fastopen.o
  CC      drivers/base/platform.o
  CC      arch/x86/kernel/sys_x86_64.o
  CC      lib/decompress_unlzma.o
  CC      kernel/trace/trace_output.o
  CC      drivers/acpi/acpica/nsalloc.o
  CC [M]  arch/x86/kvm/mmu/tdp_iter.o
  LD [M]  net/sunrpc/auth_gss/rpcsec_gss_krb5.o
  CC [M]  drivers/gpu/drm/ttm/ttm_device.o
  CC      lib/decompress_unlzo.o
  CC      mm/page_alloc.o
  CC      drivers/base/cpu.o
  CC      crypto/jitterentropy.o
  CC      drivers/base/firmware.o
  CC      crypto/jitterentropy-kcapi.o
  CC      kernel/time/tick-broadcast-hrtimer.o
  CC      drivers/base/init.o
  CC      lib/decompress_unxz.o
  CC      lib/decompress_unzstd.o
  CC      kernel/time/tick-oneshot.o
  CC [M]  drivers/dma-buf/st-dma-fence-chain.o
  CC      drivers/acpi/acpica/nsarguments.o
  CC      kernel/user.o
  CC      net/bridge/br_mdb.o
  CC [M]  arch/x86/kvm/mmu/tdp_mmu.o
  CC      net/bridge/br_multicast_eht.o
  CC      lib/zstd/common/zstd_common.o
  AR      drivers/pci/built-in.a
  CC      net/ipv4/tcp_rate.o
  CC      lib/dump_stack.o
  CC [M]  drivers/gpu/drm/scheduler/sched_main.o
  CC      crypto/ghash-generic.o
  CC      arch/x86/kernel/espfix_64.o
  AR      lib/zstd/built-in.a
  CC [M]  drivers/gpu/drm/scheduler/sched_fence.o
  CC      kernel/time/tick-sched.o
  CC [M]  drivers/gpu/drm/scheduler/sched_entity.o
  CC      block/blk-pm.o
  CC      net/bridge/br_vlan.o
  CC      net/sunrpc/auth_null.o
  CC      mm/init-mm.o
  CC [M]  drivers/gpu/drm/ttm/ttm_sys_manager.o
  CC      kernel/signal.o
  CC      arch/x86/kernel/ksysfs.o
  CC      drivers/acpi/acpica/nsconvert.o
  CC      net/bridge/br_vlan_tunnel.o
  CC [M]  net/netfilter/nf_conntrack_proto_dccp.o
  CC      kernel/sys.o
  CC      kernel/umh.o
  AR      fs/unicode/built-in.a
  CC      fs/lockd/mon.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.o
  CC      drivers/base/map.o
  CC      fs/ntfs/aops.o
  CC      crypto/af_alg.o
  CC      fs/nfs/export.o
  CC      fs/ntfs/attrib.o
  CC      lib/earlycpio.o
  CC      kernel/trace/trace_seq.o
  CC      mm/memblock.o
  CC      net/sunrpc/auth_unix.o
  CC      fs/autofs/init.o
  CC [M]  drivers/dma-buf/st-dma-fence-unwrap.o
  CC [M]  drivers/gpu/drm/ttm/ttm_agp_backend.o
  CC      drivers/acpi/acpica/nsdump.o
  CC      fs/autofs/inode.o
  CC      lib/extable.o
  CC      block/holder.o
  CC      fs/ntfs/collate.o
  CC      net/ipv4/tcp_recovery.o
  CC      arch/x86/kernel/bootflag.o
  CC      net/sunrpc/svc.o
  CC      drivers/base/devres.o
  CC      arch/x86/kernel/e820.o
  CC      net/ipv6/ndisc.o
  AR      kernel/cgroup/built-in.a
  CC      net/core/sock_diag.o
  CC      fs/nfs/sysfs.o
  CC      fs/debugfs/inode.o
  CC      kernel/time/vsyscall.o
  CC      drivers/acpi/acpica/nseval.o
  CC      fs/debugfs/file.o
  CC      lib/flex_proportions.o
  CC      drivers/scsi/scsi.o
  CC      kernel/time/timekeeping_debug.o
  CC      kernel/trace/trace_stat.o
  CC [M]  drivers/dma-buf/st-dma-resv.o
  CC      drivers/scsi/hosts.o
  LD [M]  drivers/gpu/drm/ttm/ttm.o
  CC [M]  net/netfilter/nf_conntrack_proto_sctp.o
  LD [M]  drivers/gpu/drm/scheduler/gpu-sched.o
  CC      fs/tracefs/inode.o
  CC      fs/ntfs/compress.o
  AR      block/built-in.a
  CC      drivers/scsi/scsi_ioctl.o
  CC      fs/lockd/xdr.o
  CC      fs/pstore/inode.o
  CC      fs/lockd/clnt4xdr.o
  CC      fs/autofs/root.o
  CC [M]  drivers/gpu/drm/i915/i915_driver.o
  CC      fs/lockd/xdr4.o
  CC      fs/btrfs/super.o
  CC      drivers/acpi/acpica/nsinit.o
  CC      lib/idr.o
  CC [M]  drivers/gpu/drm/i915/i915_drm_client.o
  CC      fs/ntfs/debug.o
  CC      fs/pstore/platform.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_device.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.o
  CC      fs/lockd/svc4proc.o
  CC      net/bridge/br_vlan_options.o
  AR      drivers/dma-buf/built-in.a
  LD [M]  drivers/dma-buf/dmabuf_selftests.o
  CC      kernel/time/namespace.o
  CC      drivers/nvme/host/core.o
  CC      drivers/base/attribute_container.o
  CC      drivers/nvme/host/ioctl.o
  CC      drivers/base/transport_class.o
  AR      drivers/nvme/target/built-in.a
  CC      mm/memory_hotplug.o
  CC      net/ipv4/tcp_ulp.o
  CC      kernel/trace/trace_printk.o
  CC      drivers/acpi/acpica/nsload.o
  CC [M]  arch/x86/kvm/smm.o
  CC      fs/nfs/fs_context.o
  CC      arch/x86/kernel/pci-dma.o
  CC      fs/ntfs/dir.o
  CC      net/core/dev_ioctl.o
  AR      fs/debugfs/built-in.a
  CC      drivers/base/topology.o
  AR      fs/tracefs/built-in.a
  CC      drivers/base/container.o
  CC      crypto/algif_hash.o
  CC      mm/madvise.o
  CC      lib/irq_regs.o
  CC      drivers/scsi/scsicam.o
  CC      fs/pstore/pmsg.o
  CC      fs/autofs/symlink.o
  CC      drivers/base/property.o
  CC      lib/is_single_threaded.o
  CC      net/bridge/br_mst.o
  CC      fs/lockd/procfs.o
  CC      drivers/acpi/acpica/nsnames.o
  CC      kernel/trace/pid_list.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.o
  CC      mm/page_io.o
  CC      net/sunrpc/svcsock.o
  CC      drivers/acpi/nvs.o
  AR      kernel/time/built-in.a
  CC [M]  net/bridge/br_netfilter_hooks.o
  CC      kernel/workqueue.o
  CC      kernel/trace/trace_sched_switch.o
  CC      mm/swap_state.o
  CC [M]  net/netfilter/nf_conntrack_netlink.o
  CC      net/ipv4/tcp_offload.o
  CC      crypto/algif_skcipher.o
  CC      fs/efivarfs/inode.o
  CC      arch/x86/kernel/quirks.o
  CC      fs/efivarfs/file.o
  CC      net/ipv4/tcp_plb.o
  CC      lib/klist.o
  CC      fs/autofs/waitq.o
  AR      fs/pstore/built-in.a
  CC      drivers/nvme/host/trace.o
  CC      drivers/scsi/scsi_error.o
  CC      net/sunrpc/svcauth.o
  CC      drivers/acpi/acpica/nsobject.o
  CC      mm/swapfile.o
  CC [M]  net/bridge/br_netfilter_ipv6.o
  CC      net/ipv4/datagram.o
  CC [M]  net/bluetooth/lib.o
  AR      fs/lockd/built-in.a
  CC      drivers/acpi/wakeup.o
  CC [M]  drivers/gpu/drm/i915/i915_config.o
  CC      lib/kobject.o
  CC [M]  arch/x86/kvm/vmx/vmx.o
  CC      fs/efivarfs/super.o
  CC [M]  fs/netfs/buffered_read.o
  CC      fs/ntfs/file.o
  CC [M]  fs/netfs/io.o
  CC      net/ipv6/udp.o
  CC      net/ipv6/udplite.o
  CC      fs/ntfs/index.o
  CC [M]  fs/netfs/iterator.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_crtc.o
  CC      kernel/pid.o
  CC      drivers/acpi/acpica/nsparse.o
  CC      kernel/trace/trace_functions.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.o
  CC      drivers/base/cacheinfo.o
  CC      fs/autofs/expire.o
  CC      arch/x86/kernel/topology.o
  CC [M]  drivers/gpu/drm/i915/i915_getparam.o
  CC [M]  fs/fscache/cache.o
  AR      net/bridge/built-in.a
  CC      drivers/acpi/sleep.o
  CC      net/core/tso.o
  CC      drivers/acpi/device_sysfs.o
  CC      crypto/xor.o
  CC      kernel/trace/trace_preemptirq.o
  CC      drivers/acpi/acpica/nspredef.o
  CC      fs/nfs/sysctl.o
  CC      drivers/base/swnode.o
  CC      arch/x86/kernel/kdebugfs.o
  CC      fs/efivarfs/vars.o
  CC      arch/x86/kernel/alternative.o
  CC      lib/kobject_uevent.o
  CC [M]  fs/smbfs_common/cifs_arc4.o
  CC [M]  fs/cifs/trace.o
  CC [M]  fs/cifs/cifsfs.o
  CC [M]  net/bluetooth/ecdh_helper.o
  CC [M]  fs/cifs/cifs_debug.o
  CC      fs/ntfs/inode.o
  CC      fs/autofs/dev-ioctl.o
  CC      net/ipv4/raw.o
  CC      fs/ntfs/mft.o
  CC      crypto/hash_info.o
  CC [M]  net/bluetooth/hci_request.o
  CC      drivers/acpi/acpica/nsprepkg.o
  CC      drivers/acpi/acpica/nsrepair.o
  CC      crypto/simd.o
  CC      drivers/acpi/acpica/nsrepair2.o
  CC [M]  drivers/gpu/drm/i915/i915_ioctl.o
  CC      fs/ext4/sysfs.o
  CC [M]  fs/smbfs_common/cifs_md4.o
  CC [M]  fs/netfs/main.o
  CC      fs/ntfs/mst.o
  CC      net/ipv6/raw.o
  CC      fs/nfs/nfs2super.o
  CC      drivers/scsi/scsi_lib.o
  CC      arch/x86/kernel/i8253.o
  CC      drivers/scsi/scsi_lib_dma.o
  CC [M]  fs/fscache/cookie.o
  CC [M]  fs/fscache/io.o
  CC      kernel/trace/trace_nop.o
  CC      net/sunrpc/svcauth_unix.o
  CC      drivers/base/auxiliary.o
  CC      net/core/sock_reuseport.o
  CC      kernel/task_work.o
  AR      fs/efivarfs/built-in.a
  CC      net/core/fib_notifier.o
  CC      kernel/extable.o
  CC [M]  drivers/gpu/drm/i915/i915_irq.o
  LD [M]  net/bridge/br_netfilter.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atom.o
  CC      drivers/scsi/scsi_scan.o
  CC      fs/nfs/proc.o
  CC      drivers/ata/libata-core.o
  CC [M]  net/bluetooth/mgmt_util.o
  CC      drivers/acpi/acpica/nssearch.o
  AR      fs/autofs/built-in.a
  CC      mm/swap_slots.o
  CC      net/sunrpc/addr.o
  CC      drivers/acpi/acpica/nsutils.o
  CC [M]  fs/fscache/main.o
  CC [M]  crypto/md4.o
  CC      drivers/acpi/acpica/nswalk.o
  CC      drivers/ata/libata-scsi.o
  CC      fs/ext4/xattr.o
  CC [M]  drivers/gpu/drm/i915/i915_mitigations.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fence.o
  CC      lib/logic_pio.o
  CC      drivers/base/devtmpfs.o
  CC      drivers/base/memory.o
  CC      drivers/base/module.o
  CC      kernel/trace/trace_functions_graph.o
  CC [M]  drivers/gpu/drm/i915/i915_module.o
  CC [M]  net/netfilter/nf_nat_core.o
  CC [M]  drivers/gpu/drm/i915/i915_params.o
  CC      kernel/params.o
  CC      fs/nfs/nfs2xdr.o
  CC      lib/maple_tree.o
  CC      arch/x86/kernel/hw_breakpoint.o
  CC [M]  fs/netfs/objects.o
  CC [M]  arch/x86/kvm/kvm-asm-offsets.s
  CC      drivers/acpi/acpica/nsxfeval.o
  CC [M]  crypto/ccm.o
  CC      fs/ntfs/namei.o
  CC      drivers/acpi/acpica/nsxfname.o
  CC [M]  net/bluetooth/mgmt_config.o
  CC      drivers/nvme/host/pci.o
  CC [M]  net/bluetooth/hci_codec.o
  CC      fs/ntfs/runlist.o
  CC      mm/dmapool.o
  CC [M]  fs/cifs/connect.o
  CC [M]  drivers/gpu/drm/i915/i915_pci.o
  GEN     drivers/scsi/scsi_devinfo_tbl.c
  CC      drivers/scsi/scsi_devinfo.o
  CC      kernel/kthread.o
  CC      drivers/base/pinctrl.o
  CC      net/ipv4/udp.o
  CC      net/ipv6/icmp.o
  CC [M]  net/bluetooth/eir.o
  CC [M]  fs/fscache/volume.o
  CC [M]  drivers/gpu/drm/i915/i915_scatterlist.o
  CC      net/sunrpc/rpcb_clnt.o
  CC      drivers/acpi/acpica/nsxfobj.o
  CC      net/ipv4/udplite.o
  CC [M]  fs/cifs/dir.o
  CC      lib/memcat_p.o
  CC [M]  fs/cifs/file.o
  CC [M]  fs/cifs/inode.o
  CC      net/core/xdp.o
  CC      net/core/flow_offload.o
  CC      arch/x86/kernel/tsc.o
  LD [M]  fs/netfs/netfs.o
  CC      fs/ntfs/super.o
  CC [M]  fs/fuse/dev.o
  CC [M]  fs/fuse/dir.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.o
  CC      arch/x86/kernel/tsc_msr.o
  CC [M]  drivers/gpu/drm/i915/i915_suspend.o
  CC      drivers/base/devcoredump.o
  CC [M]  arch/x86/kvm/vmx/pmu_intel.o
  CC      kernel/trace/fgraph.o
  CC [M]  drivers/gpu/drm/vgem/vgem_drv.o
  CC      kernel/trace/blktrace.o
  CC      mm/hugetlb.o
  CC      fs/ntfs/sysctl.o
  CC      mm/hugetlb_vmemmap.o
  CC [M]  fs/cifs/link.o
  CC      drivers/acpi/acpica/psargs.o
  CC [M]  crypto/arc4.o
  CC      drivers/scsi/scsi_sysctl.o
  CC      lib/nmi_backtrace.o
  CC      drivers/spi/spi.o
  CC      drivers/net/phy/mdio-boardinfo.o
  AR      drivers/net/pse-pd/built-in.a
  CC      fs/ntfs/unistr.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.o
  CC      drivers/net/mdio/acpi_mdio.o
  AR      drivers/net/pcs/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.o
  CC      fs/nfs/nfs3super.o
  CC [M]  net/netfilter/nf_nat_proto.o
  CC [M]  fs/fscache/proc.o
  CC      net/core/gro.o
  CC [M]  crypto/ecc.o
  CC [M]  net/bluetooth/hci_sync.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.o
  CC      drivers/base/platform-msi.o
  CC      drivers/net/mdio/fwnode_mdio.o
  CC      drivers/acpi/acpica/psloop.o
  CC [M]  drivers/gpu/drm/vgem/vgem_fence.o
  CC      drivers/scsi/scsi_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/object.o
  CC      drivers/base/physical_location.o
  CC      arch/x86/kernel/io_delay.o
  CC      fs/ext4/xattr_hurd.o
  CC [M]  crypto/essiv.o
  CC      net/core/netdev-genl.o
  CC      fs/btrfs/ctree.o
  CC [M]  net/netfilter/nf_nat_helper.o
  CC      kernel/trace/trace_events.o
  CC      kernel/trace/trace_export.o
  CC      kernel/trace/trace_event_perf.o
  CC      arch/x86/kernel/rtc.o
  CC      drivers/net/phy/mdio_devres.o
  CC      fs/btrfs/extent-tree.o
  CC [M]  drivers/gpu/drm/i915/i915_switcheroo.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_pci_test.o
  CC      fs/ntfs/upcase.o
  LD [M]  fs/fscache/fscache.o
  CC      drivers/acpi/acpica/psobject.o
  CC [M]  fs/cifs/misc.o
  CC      net/ipv6/mcast.o
  CC      net/sunrpc/timer.o
  CC [M]  drivers/gpu/drm/i915/i915_sysfs.o
  CC      drivers/acpi/acpica/psopcode.o
  CC      drivers/ata/libata-eh.o
  CC      drivers/base/trace.o
  CC      net/sunrpc/xdr.o
  CC      fs/nfs/nfs3client.o
  CC [M]  arch/x86/kvm/vmx/vmcs12.o
  LD [M]  drivers/gpu/drm/vgem/vgem.o
  CC      net/sunrpc/sunrpc_syms.o
  CC [M]  arch/x86/kvm/vmx/hyperv.o
  CC      drivers/scsi/scsi_trace.o
  AR      drivers/net/mdio/built-in.a
  CC [M]  fs/fuse/file.o
  CC [M]  drivers/gpu/drm/i915/i915_utils.o
  CC      fs/ext4/xattr_trusted.o
  AR      drivers/nvme/host/built-in.a
  CC [M]  fs/cifs/netmisc.o
  AR      drivers/nvme/built-in.a
  CC      net/sunrpc/cache.o
  CC      arch/x86/kernel/resource.o
  AR      drivers/firewire/built-in.a
  CC      kernel/trace/trace_events_filter.o
  AR      drivers/cdrom/built-in.a
  AR      drivers/auxdisplay/built-in.a
  CC      drivers/net/phy/phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/client.o
  CC      drivers/input/serio/serio.o
  CC      drivers/usb/common/common.o
  CC      drivers/acpi/acpica/psopinfo.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.o
  CC      drivers/usb/common/debug.o
  AR      fs/ntfs/built-in.a
  AR      drivers/net/ethernet/adi/built-in.a
  AR      drivers/net/ethernet/alacritech/built-in.a
  AS      arch/x86/kernel/irqflags.o
  AR      drivers/net/ethernet/amazon/built-in.a
  AR      drivers/net/ethernet/aquantia/built-in.a
  CC      arch/x86/kernel/static_call.o
  AR      drivers/net/ethernet/asix/built-in.a
  CC [M]  net/bluetooth/sco.o
  AR      drivers/net/ethernet/cadence/built-in.a
  AR      drivers/net/usb/built-in.a
  CC [M]  drivers/net/usb/pegasus.o
  AR      drivers/net/ethernet/broadcom/built-in.a
  CC [M]  drivers/net/ethernet/broadcom/b44.o
  AR      drivers/net/ethernet/cavium/common/built-in.a
  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
  AR      drivers/net/ethernet/cavium/built-in.a
  AR      drivers/net/ethernet/cortina/built-in.a
  CC [M]  net/bluetooth/iso.o
  AR      drivers/base/built-in.a
  CC      kernel/trace/trace_events_trigger.o
  CC      drivers/input/keyboard/atkbd.o
  CC [M]  net/netfilter/nf_nat_redirect.o
  CC [M]  drivers/gpu/drm/i915/intel_clock_gating.o
  CC      drivers/acpi/acpica/psparse.o
  CC      drivers/acpi/acpica/psscope.o
  CC      drivers/scsi/scsi_logging.o
  CC [M]  drivers/gpu/drm/i915/intel_device_info.o
  CC      fs/ext4/xattr_user.o
  CC      fs/ext4/fast_commit.o
  CC      net/core/netdev-genl-gen.o
  CC      arch/x86/kernel/process.o
  CC      net/sunrpc/rpc_pipe.o
  CC      fs/nfs/nfs3proc.o
  AR      drivers/usb/common/built-in.a
  CC [M]  crypto/ecdh.o
  CC      drivers/usb/core/usb.o
  CC      drivers/acpi/acpica/pstree.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/conn.o
  CC      drivers/input/serio/i8042.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_object.o
  CC      drivers/input/serio/libps2.o
  CC      drivers/acpi/acpica/psutils.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_wa_test.o
  CC      kernel/sys_ni.o
  CC      drivers/acpi/acpica/pswalk.o
  CC      fs/nfs/nfs3xdr.o
  CC [M]  arch/x86/kvm/vmx/nested.o
  CC      fs/ext4/orphan.o
  CC [M]  fs/cifs/smbencrypt.o
  CC      net/core/net-sysfs.o
  CC      drivers/scsi/scsi_pm.o
  CC      net/ipv4/udp_offload.o
  CC      net/sunrpc/sysfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gart.o
  CC [M]  crypto/ecdh_helper.o
  AR      drivers/input/mouse/built-in.a
  CC      drivers/input/input.o
  CC [M]  fs/cifs/transport.o
  CC      drivers/net/phy/phy-c45.o
  CC      drivers/acpi/acpica/psxface.o
  AR      drivers/input/keyboard/built-in.a
  CC      drivers/input/input-compat.o
  CC [M]  drivers/gpu/drm/xe/xe_bb.o
  CC      kernel/trace/trace_eprobe.o
  CC      drivers/acpi/acpica/rsaddr.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/device.o
  CC [M]  net/netfilter/nf_nat_masquerade.o
  CC      kernel/trace/trace_kprobe.o
  CC [M]  drivers/net/usb/rtl8150.o
  CC      kernel/nsproxy.o
  CC      drivers/usb/core/hub.o
  CC [M]  drivers/gpu/drm/xe/xe_bo.o
  LD [M]  crypto/ecdh_generic.o
  AR      crypto/built-in.a
  CC      drivers/acpi/acpica/rscalc.o
  AR      drivers/spi/built-in.a
  CC      drivers/rtc/lib.o
  AR      drivers/i2c/algos/built-in.a
  CC [M]  drivers/i2c/algos/i2c-algo-bit.o
  CC [M]  drivers/net/ipvlan/ipvlan_core.o
  CC [M]  drivers/net/ipvlan/ipvlan_main.o
  CC      drivers/acpi/acpica/rscreate.o
  CC      drivers/scsi/scsi_bsg.o
  CC      drivers/acpi/device_pm.o
  CC      drivers/i2c/busses/i2c-designware-common.o
  AR      drivers/input/serio/built-in.a
  CC [M]  drivers/gpu/drm/i915/intel_memory_region.o
  AR      drivers/i2c/muxes/built-in.a
  CC [M]  drivers/gpu/drm/i915/intel_pcode.o
  CC      arch/x86/kernel/ptrace.o
  CC [M]  drivers/i2c/muxes/i2c-mux-gpio.o
  CC      drivers/scsi/scsi_common.o
  CC [M]  fs/fuse/inode.o
  CC [M]  drivers/gpu/drm/ast/ast_drv.o
  CC [M]  drivers/net/ethernet/broadcom/bnx2.o
  CC [M]  drivers/net/ethernet/broadcom/cnic.o
  CC [M]  drivers/gpu/drm/ast/ast_i2c.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/disp.o
  CC [M]  fs/cifs/cached_dir.o
  CC [M]  drivers/gpu/drm/ast/ast_main.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/driver.o
  CC      drivers/rtc/class.o
  CC      drivers/ata/libata-transport.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_encoders.o
  CC [M]  drivers/net/vxlan/vxlan_core.o
  CC      drivers/acpi/acpica/rsdumpinfo.o
  CC      net/sunrpc/svc_xprt.o
  CC [M]  drivers/net/vxlan/vxlan_multicast.o
  CC [M]  net/bluetooth/a2mp.o
  CC      drivers/net/phy/phy-core.o
  CC [M]  net/bluetooth/amp.o
  CC      drivers/scsi/sd.o
  CC [M]  drivers/gpu/drm/xe/xe_bo_evict.o
  CC      net/ipv4/arp.o
  CC      kernel/notifier.o
  CC [M]  drivers/net/usb/r8152.o
  CC [M]  net/netfilter/x_tables.o
  AR      fs/ext4/built-in.a
  CC [M]  drivers/net/ethernet/broadcom/tg3.o
  CC      drivers/acpi/acpica/rsinfo.o
  CC      drivers/usb/core/hcd.o
  CC      drivers/acpi/proc.o
  CC      lib/plist.o
  CC      drivers/i2c/busses/i2c-designware-master.o
  CC      net/core/net-procfs.o
  CC      net/ipv6/reassembly.o
  CC      mm/sparse.o
  CC      drivers/rtc/interface.o
  CC [M]  drivers/net/vxlan/vxlan_vnifilter.o
  CC      lib/radix-tree.o
  CC [M]  drivers/net/usb/asix_devices.o
  CC      drivers/input/input-mt.o
  AR      fs/nfs/built-in.a
  CC      drivers/usb/core/urb.o
  CC      drivers/i2c/busses/i2c-designware-platdrv.o
  CC      arch/x86/kernel/tls.o
  CC      arch/x86/kernel/step.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/event.o
  CC      drivers/acpi/acpica/rsio.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/fifo.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/head.o
  CC [M]  drivers/gpu/drm/ast/ast_mm.o
  CC      drivers/ata/libata-trace.o
  CC      fs/btrfs/print-tree.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_display.o
  CC [M]  fs/cifs/cifs_unicode.o
  CC [M]  drivers/net/ipvlan/ipvlan_l3s.o
  CC [M]  drivers/gpu/drm/i915/intel_region_ttm.o
  CC      drivers/usb/core/message.o
  CC      drivers/net/phy/phy_device.o
  CC      kernel/trace/error_report-traces.o
  CC      drivers/acpi/acpica/rsirq.o
  CC [M]  fs/fuse/control.o
  CC      drivers/input/input-poller.o
  CC      drivers/rtc/nvmem.o
  CC      drivers/rtc/dev.o
  CC [M]  drivers/gpu/drm/xe/xe_debugfs.o
  CC [M]  fs/cifs/nterr.o
  CC [M]  drivers/gpu/drm/ast/ast_mode.o
  CC      drivers/input/ff-core.o
  CC      drivers/i2c/busses/i2c-designware-baytrail.o
  CC      net/core/netpoll.o
  CC [M]  fs/overlayfs/super.o
  CC      arch/x86/kernel/i8237.o
  CC [M]  net/bluetooth/hci_debugfs.o
  CC      mm/sparse-vmemmap.o
  CC [M]  fs/overlayfs/namei.o
  CC      fs/open.o
  CC      fs/read_write.o
  CC      fs/file_table.o
  CC      drivers/acpi/acpica/rslist.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/mem.o
  CC      fs/super.o
  CC      lib/ratelimit.o
  CC      kernel/ksysfs.o
  CC      drivers/ata/libata-sata.o
  CC      kernel/cred.o
  CC      drivers/net/loopback.o
  CC      kernel/trace/power-traces.o
  CC      mm/mmu_notifier.o
  CC      arch/x86/kernel/stacktrace.o
  CC      lib/rbtree.o
  CC      net/ipv6/tcp_ipv6.o
  CC      lib/seq_buf.o
  CC [M]  fs/fuse/xattr.o
  CC [M]  drivers/gpu/drm/ast/ast_post.o
  CC [M]  drivers/gpu/drm/i915/intel_runtime_pm.o
  CC      net/ipv4/icmp.o
  CC      drivers/input/touchscreen.o
  CC      drivers/acpi/acpica/rsmemory.o
  LD [M]  drivers/net/ipvlan/ipvlan.o
  CC      drivers/rtc/proc.o
  CC [M]  fs/cifs/cifsencrypt.o
  CC      kernel/reboot.o
  CC [M]  drivers/gpu/drm/xe/xe_devcoredump.o
  CC      net/core/fib_rules.o
  CC [M]  drivers/i2c/busses/i2c-scmi.o
  CC      fs/btrfs/root-tree.o
  CC      kernel/async.o
  CC [M]  fs/fuse/acl.o
  CC      net/sunrpc/xprtmultipath.o
  CC      lib/show_mem.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/mmu.o
  CC      net/ipv6/ping.o
  CC [M]  net/netfilter/xt_tcpudp.o
  CC      drivers/acpi/acpica/rsmisc.o
  CC      arch/x86/kernel/reboot.o
  CC      lib/siphash.o
  CC      lib/string.o
  CC      drivers/scsi/sg.o
  CC      lib/timerqueue.o
  CC      lib/vsprintf.o
  CC      drivers/usb/core/driver.o
  CC      drivers/rtc/sysfs.o
  CC [M]  net/netfilter/xt_mark.o
  CC      drivers/input/ff-memless.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.o
  CC      kernel/range.o
  CC      kernel/smpboot.o
  CC      lib/win_minmax.o
  CC      mm/ksm.o
  CC      kernel/ucount.o
  CC [M]  drivers/gpu/drm/xe/xe_device.o
  CC [M]  drivers/gpu/drm/i915/intel_sbi.o
  CC      fs/char_dev.o
  CC      drivers/input/vivaldi-fmap.o
  CC      drivers/ata/libata-sff.o
  CC [M]  fs/fuse/readdir.o
  CC [M]  drivers/i2c/busses/i2c-ccgx-ucsi.o
  CC [M]  fs/overlayfs/util.o
  CC      kernel/regset.o
  CC      drivers/net/phy/linkmode.o
  CC      lib/xarray.o
  CC      drivers/acpi/acpica/rsserial.o
  CC      net/core/net-traces.o
  LD [M]  net/bluetooth/bluetooth.o
  CC      drivers/ata/libata-pmp.o
  CC      mm/slub.o
  CC      lib/lockref.o
  CC      drivers/net/phy/mdio_bus.o
  CC      drivers/net/phy/mdio_device.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/outp.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/timer.o
  CC      drivers/rtc/rtc-mc146818-lib.o
  CC [M]  drivers/gpu/drm/ast/ast_dp501.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ring.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.o
  CC      kernel/trace/rpm-traces.o
  CC      drivers/acpi/acpica/rsutils.o
  CC [M]  net/netfilter/xt_nat.o
  CC [M]  fs/overlayfs/inode.o
  CC      arch/x86/kernel/msr.o
  CC      kernel/kmod.o
  CC      drivers/input/input-leds.o
  CC      fs/stat.o
  CC      fs/btrfs/dir-item.o
  CC      net/sunrpc/stats.o
  CC [M]  fs/cifs/readdir.o
  CC [M]  net/netfilter/xt_REDIRECT.o
  CC [M]  drivers/i2c/busses/i2c-i801.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_bios.o
  CC      drivers/acpi/bus.o
  CC      kernel/groups.o
  AR      drivers/i3c/built-in.a
  CC      net/ipv4/devinet.o
  CC [M]  drivers/gpu/drm/xe/xe_dma_buf.o
  CC [M]  drivers/gpu/drm/i915/intel_step.o
  CC      drivers/usb/core/config.o
  CC      drivers/acpi/acpica/rsxface.o
  CC [M]  fs/fuse/ioctl.o
  CC      drivers/acpi/acpica/tbdata.o
  CC      net/ipv4/af_inet.o
  CC      drivers/rtc/rtc-cmos.o
  CC      drivers/acpi/acpica/tbfadt.o
  CC [M]  arch/x86/kvm/vmx/posted_intr.o
  CC      drivers/input/mousedev.o
  CC      drivers/gpu/drm/drm_mipi_dsi.o
  CC      arch/x86/kernel/cpuid.o
  CC      drivers/input/evdev.o
  CC      kernel/kcmp.o
  LD [M]  drivers/net/vxlan/vxlan.o
  CC      kernel/trace/trace_dynevent.o
  CC      drivers/scsi/scsi_sysfs.o
  CC      drivers/ata/libata-acpi.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/vmm.o
  CC      drivers/net/phy/swphy.o
  CC      net/core/selftests.o
  CC [M]  drivers/gpu/drm/ast/ast_dp.o
  CC      drivers/acpi/acpica/tbfind.o
  CC      net/ipv6/exthdrs.o
  CC [M]  net/netfilter/xt_MASQUERADE.o
  CC      drivers/net/phy/fixed_phy.o
  CC      kernel/freezer.o
  CC      net/ipv4/igmp.o
  CC [M]  fs/overlayfs/file.o
  CC [M]  fs/overlayfs/dir.o
  CC      net/core/ptp_classifier.o
  CC      kernel/stacktrace.o
  CC      drivers/usb/core/file.o
  CC      net/ipv4/fib_frontend.o
  LD [M]  fs/fuse/fuse.o
  CC      arch/x86/kernel/early-quirks.o
  CC      arch/x86/kernel/smp.o
  CC      fs/btrfs/file-item.o
  CC      net/ipv4/fib_semantics.o
  CC      net/ipv6/datagram.o
  CC      drivers/acpi/glue.o
  CC      drivers/acpi/acpica/tbinstal.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/user.o
  CC [M]  drivers/gpu/drm/i915/intel_uncore.o
  CC [M]  drivers/gpu/drm/xe/xe_engine.o
  CC      net/sunrpc/sysctl.o
  CC      lib/bcd.o
  CC [M]  net/netfilter/xt_addrtype.o
  CC      kernel/dma.o
  CC      drivers/acpi/acpica/tbprint.o
  AR      drivers/rtc/built-in.a
  CC      drivers/usb/core/buffer.o
  CC      kernel/trace/trace_probe.o
  AR      drivers/media/i2c/built-in.a
  CC [M]  drivers/i2c/busses/i2c-isch.o
  AR      drivers/media/tuners/built-in.a
  CC      kernel/trace/trace_uprobe.o
  AR      drivers/media/rc/keymaps/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/userc361.o
  AR      drivers/media/rc/built-in.a
  AR      drivers/media/common/b2c2/built-in.a
  LD [M]  drivers/gpu/drm/ast/ast.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/client.o
  AR      drivers/media/common/saa7146/built-in.a
  CC      lib/sort.o
  AR      drivers/media/common/siano/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/engine.o
  AR      drivers/media/common/v4l2-tpg/built-in.a
  AR      drivers/media/common/videobuf2/built-in.a
  AR      drivers/media/common/built-in.a
  CC      lib/parser.o
  AR      drivers/media/platform/allegro-dvt/built-in.a
  AR      drivers/media/platform/amlogic/meson-ge2d/built-in.a
  AR      drivers/media/platform/amlogic/built-in.a
  CC      lib/debug_locks.o
  AR      drivers/media/platform/amphion/built-in.a
  AR      drivers/media/platform/aspeed/built-in.a
  AR      drivers/input/built-in.a
  AR      drivers/media/platform/atmel/built-in.a
  LD [M]  arch/x86/kvm/kvm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/enum.o
  AR      drivers/media/platform/cadence/built-in.a
  CC [M]  drivers/gpu/drm/drm_aperture.o
  CC      drivers/ata/libata-pata-timings.o
  AR      drivers/media/platform/chips-media/built-in.a
  CC      drivers/ata/ahci.o
  AR      drivers/media/platform/intel/built-in.a
  AR      drivers/media/platform/marvell/built-in.a
  CC [M]  fs/cifs/ioctl.o
  AR      drivers/media/platform/mediatek/jpeg/built-in.a
  CC [M]  fs/cifs/sess.o
  AR      drivers/media/platform/mediatek/mdp/built-in.a
  CC      kernel/smp.o
  AR      drivers/media/platform/mediatek/vcodec/built-in.a
  AR      drivers/media/platform/mediatek/vpu/built-in.a
  AR      drivers/media/platform/mediatek/mdp3/built-in.a
  AR      drivers/media/platform/mediatek/built-in.a
  AR      drivers/media/platform/microchip/built-in.a
  AR      drivers/media/platform/nvidia/tegra-vde/built-in.a
  CC      drivers/usb/core/sysfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.o
  AR      drivers/media/platform/nvidia/built-in.a
  AR      drivers/media/platform/nxp/dw100/built-in.a
  CC [M]  drivers/net/phy/phylink.o
  AR      drivers/media/platform/nxp/imx-jpeg/built-in.a
  CC      drivers/acpi/acpica/tbutils.o
  AR      drivers/media/platform/nxp/built-in.a
  AR      drivers/media/platform/qcom/camss/built-in.a
  CC      fs/exec.o
  AR      drivers/media/platform/renesas/rcar-vin/built-in.a
  AR      drivers/media/platform/qcom/venus/built-in.a
  CC [M]  drivers/net/usb/asix_common.o
  AR      drivers/media/platform/renesas/rzg2l-cru/built-in.a
  CC      fs/pipe.o
  AR      drivers/media/platform/qcom/built-in.a
  AR      drivers/media/platform/renesas/vsp1/built-in.a
  CC      arch/x86/kernel/smpboot.o
  AR      drivers/media/platform/renesas/built-in.a
  CC [M]  drivers/net/usb/ax88172a.o
  CC      net/core/netprio_cgroup.o
  CC      drivers/ata/libahci.o
  AR      drivers/media/platform/rockchip/rga/built-in.a
  AR      net/sunrpc/built-in.a
  AR      drivers/media/platform/rockchip/rkisp1/built-in.a
  AR      drivers/ptp/built-in.a
  AR      drivers/media/platform/rockchip/built-in.a
  CC [M]  drivers/ptp/ptp_clock.o
  CC      lib/random32.o
  AR      drivers/media/platform/samsung/exynos-gsc/built-in.a
  CC      lib/bust_spinlocks.o
  CC      lib/kasprintf.o
  AR      drivers/media/platform/samsung/exynos4-is/built-in.a
  AR      drivers/scsi/built-in.a
  UPD     arch/x86/kvm/kvm-asm-offsets.h
  CC      lib/bitmap.o
  AR      drivers/media/platform/samsung/s3c-camif/built-in.a
  AS [M]  arch/x86/kvm/vmx/vmenter.o
  AR      drivers/media/platform/samsung/s5p-g2d/built-in.a
  AR      drivers/power/reset/built-in.a
  AR      drivers/media/platform/samsung/s5p-jpeg/built-in.a
  CC      drivers/power/supply/power_supply_core.o
  AR      drivers/media/platform/samsung/s5p-mfc/built-in.a
  LD [M]  arch/x86/kvm/kvm-intel.o
  AR      drivers/media/platform/samsung/built-in.a
  CC [M]  fs/overlayfs/readdir.o
  CC      drivers/power/supply/power_supply_sysfs.o
  AR      drivers/media/platform/st/sti/bdisp/built-in.a
  AR      drivers/media/platform/st/sti/c8sectpfe/built-in.a
  AR      drivers/media/platform/st/sti/delta/built-in.a
  AR      drivers/media/platform/st/sti/hva/built-in.a
  AR      drivers/media/platform/st/stm32/built-in.a
  AR      drivers/media/platform/st/built-in.a
  CC      drivers/power/supply/power_supply_leds.o
  AR      drivers/media/platform/sunxi/sun4i-csi/built-in.a
  AR      drivers/media/platform/sunxi/sun6i-csi/built-in.a
  AR      drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
  CC [M]  drivers/ptp/ptp_chardev.o
  AR      drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
  CC      arch/x86/kernel/tsc_sync.o
  AR      drivers/media/platform/sunxi/sun8i-di/built-in.a
  CC [M]  drivers/i2c/busses/i2c-ismt.o
  AR      drivers/media/platform/sunxi/sun8i-rotate/built-in.a
  AR      drivers/media/platform/sunxi/built-in.a
  AR      drivers/media/platform/ti/am437x/built-in.a
  AR      drivers/media/platform/ti/cal/built-in.a
  CC [M]  drivers/gpu/drm/i915/intel_wakeref.o
  AR      drivers/media/platform/ti/vpe/built-in.a
  CC      drivers/acpi/acpica/tbxface.o
  AR      drivers/media/platform/ti/davinci/built-in.a
  AR      drivers/media/platform/ti/omap/built-in.a
  AR      drivers/media/platform/ti/omap3isp/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/event.o
  AR      drivers/media/platform/ti/built-in.a
  AR      drivers/media/platform/verisilicon/built-in.a
  AR      drivers/media/pci/ttpci/built-in.a
  AR      drivers/media/pci/b2c2/built-in.a
  AR      drivers/media/platform/via/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/firmware.o
  CC      net/ipv6/ip6_flowlabel.o
  AR      drivers/media/pci/pluto2/built-in.a
  AR      drivers/media/platform/xilinx/built-in.a
  AR      drivers/media/platform/built-in.a
  AR      drivers/media/pci/dm1105/built-in.a
  CC      drivers/ata/ata_piix.o
  AR      drivers/media/pci/pt1/built-in.a
  AR      drivers/media/pci/pt3/built-in.a
  AR      drivers/media/pci/mantis/built-in.a
  AR      drivers/usb/phy/built-in.a
  AR      drivers/media/pci/ngene/built-in.a
  CC [M]  net/netfilter/xt_conntrack.o
  CC      drivers/acpi/acpica/tbxfload.o
  AR      drivers/net/ethernet/engleder/built-in.a
  AR      drivers/media/pci/ddbridge/built-in.a
  CC      drivers/power/supply/power_supply_hwmon.o
  CC      kernel/trace/rethook.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/pci/intel/ipu3/built-in.a
  AR      drivers/media/pci/intel/built-in.a
  CC [M]  drivers/gpu/drm/drm_atomic.o
  AR      drivers/media/pci/built-in.a
  CC [M]  fs/cifs/export.o
  AR      drivers/media/usb/b2c2/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_exec.o
  AR      drivers/media/usb/dvb-usb/built-in.a
  AR      drivers/media/usb/dvb-usb-v2/built-in.a
  AR      drivers/media/usb/s2255/built-in.a
  AR      drivers/media/usb/siano/built-in.a
  AR      drivers/media/usb/ttusb-budget/built-in.a
  CC [M]  drivers/gpu/drm/drm_atomic_uapi.o
  AR      drivers/media/usb/ttusb-dec/built-in.a
  AR      drivers/media/usb/built-in.a
  CC      net/ipv4/fib_trie.o
  AR      drivers/media/mmc/siano/built-in.a
  AR      drivers/media/mmc/built-in.a
  AR      drivers/media/firewire/built-in.a
  AR      drivers/media/spi/built-in.a
  AR      drivers/media/test-drivers/built-in.a
  AR      drivers/media/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_dp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.o
  CC      drivers/hwmon/hwmon.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_trace_points.o
  CC [M]  drivers/gpu/drm/i915/vlv_sideband.o
  CC [M]  drivers/hwmon/acpi_power_meter.o
  CC      drivers/usb/core/endpoint.o
  CC [M]  drivers/hwmon/coretemp.o
  CC      drivers/usb/core/devio.o
  CC      fs/btrfs/inode-item.o
  CC      drivers/usb/host/pci-quirks.o
  CC      fs/btrfs/disk-io.o
  CC      drivers/i2c/i2c-boardinfo.o
  CC [M]  drivers/net/usb/ax88179_178a.o
  CC      drivers/acpi/acpica/tbxfroot.o
  CC [M]  drivers/ptp/ptp_sysfs.o
  CC      net/ipv6/inet6_connection_sock.o
  CC      drivers/i2c/i2c-core-base.o
  AR      drivers/power/supply/built-in.a
  AR      drivers/power/built-in.a
  CC      kernel/uid16.o
  CC [M]  drivers/ptp/ptp_vclock.o
  CC      drivers/usb/storage/scsiglue.o
  CC      lib/scatterlist.o
  CC      net/core/dst_cache.o
  CC [M]  fs/overlayfs/copy_up.o
  CC      mm/migrate.o
  CC      mm/migrate_device.o
  CC [M]  drivers/i2c/busses/i2c-piix4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/gpuobj.o
  CC [M]  fs/cifs/unc.o
  CC      drivers/net/netconsole.o
  CC      arch/x86/kernel/setup_percpu.o
  AR      kernel/trace/built-in.a
  AR      drivers/thermal/broadcom/built-in.a
  AR      drivers/thermal/samsung/built-in.a
  CC      drivers/thermal/intel/intel_tcc.o
  CC      drivers/thermal/intel/therm_throt.o
  CC      drivers/acpi/acpica/utaddress.o
  AR      drivers/thermal/st/built-in.a
  CC      lib/list_sort.o
  CC      drivers/net/virtio_net.o
  CC [M]  drivers/gpu/drm/xe/xe_execlist.o
  CC [M]  drivers/thermal/intel/x86_pkg_temp_thermal.o
  CC      drivers/net/net_failover.o
  CC [M]  drivers/thermal/intel/intel_menlow.o
  CC [M]  fs/cifs/winucase.o
  CC [M]  net/netfilter/xt_ipvs.o
  CC      arch/x86/kernel/ftrace.o
  CC      drivers/usb/host/ehci-hcd.o
  CC      drivers/watchdog/watchdog_core.o
  CC      drivers/watchdog/watchdog_dev.o
  CC [M]  fs/cifs/smb2ops.o
  CC      net/ipv6/udp_offload.o
  AR      drivers/ata/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_encoders.o
  CC [M]  drivers/ptp/ptp_kvm_x86.o
  CC      drivers/opp/core.o
  CC [M]  drivers/md/persistent-data/dm-array.o
  CC      drivers/acpi/acpica/utalloc.o
  CC      drivers/opp/cpu.o
  CC      drivers/opp/debugfs.o
  CC      drivers/usb/storage/protocol.o
  AR      drivers/thermal/qcom/built-in.a
  CC [M]  drivers/md/persistent-data/dm-bitset.o
  AR      drivers/hwmon/built-in.a
  CC [M]  drivers/gpu/drm/i915/vlv_suspend.o
  CC [M]  drivers/md/persistent-data/dm-block-manager.o
  CC      net/core/gro_cells.o
  CC [M]  drivers/ptp/ptp_kvm_common.o
  CC      kernel/kallsyms.o
  LD [M]  drivers/ptp/ptp.o
  CC [M]  drivers/net/phy/aquantia_main.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_dram.o
  CC      lib/uuid.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/intr.o
  CC      net/ipv4/fib_notifier.o
  AS      arch/x86/kernel/ftrace_64.o
  CC      drivers/acpi/acpica/utascii.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sa.o
  CC      lib/iov_iter.o
  CC [M]  fs/overlayfs/export.o
  CC [M]  drivers/net/usb/cdc_ether.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_i2c.o
  AR      drivers/net/ethernet/ezchip/built-in.a
  CC      arch/x86/kernel/trace_clock.o
  CC [M]  drivers/net/usb/cdc_eem.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_gmch.o
  CC [M]  drivers/i2c/busses/i2c-designware-pcidrv.o
  CC [M]  fs/cifs/smb2maperror.o
  CC      lib/clz_ctz.o
  CC      net/core/failover.o
  AR      drivers/net/ethernet/fungible/built-in.a
  CC      arch/x86/kernel/trace.o
  AR      drivers/thermal/intel/built-in.a
  CC      arch/x86/kernel/rethook.o
  AR      drivers/thermal/tegra/built-in.a
  AR      drivers/thermal/mediatek/built-in.a
  CC      drivers/thermal/thermal_core.o
  CC [M]  fs/cifs/smb2transport.o
  CC      arch/x86/kernel/crash_core_64.o
  CC [M]  drivers/gpu/drm/xe/xe_force_wake.o
  CC [M]  drivers/gpu/drm/xe/xe_ggtt.o
  CC      drivers/acpi/acpica/utbuffer.o
  CC      drivers/usb/storage/transport.o
  AR      drivers/net/ethernet/huawei/built-in.a
  LD [M]  drivers/ptp/ptp_kvm.o
  CC      drivers/cpufreq/cpufreq.o
  CC      drivers/watchdog/softdog.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_main.o
  CC      drivers/cpufreq/freq_table.o
  CC [M]  drivers/md/persistent-data/dm-space-map-common.o
  LD [M]  net/netfilter/nf_conntrack.o
  CC      net/ipv4/inet_fragment.o
  CC [M]  drivers/md/persistent-data/dm-space-map-disk.o
  LD [M]  net/netfilter/nf_nat.o
  CC [M]  drivers/net/usb/smsc75xx.o
  AR      net/netfilter/built-in.a
  CC [M]  drivers/gpu/drm/drm_auth.o
  CC [M]  drivers/md/persistent-data/dm-space-map-metadata.o
  CC      net/ipv6/seg6.o
  CC [M]  drivers/net/phy/aquantia_hwmon.o
  CC      drivers/usb/core/notify.o
  CC      drivers/cpuidle/governors/menu.o
  CC      drivers/cpuidle/cpuidle.o
  CC      drivers/usb/core/generic.o
  CC      drivers/cpuidle/governors/haltpoll.o
  CC      drivers/cpuidle/driver.o
  CC      arch/x86/kernel/module.o
  LD [M]  fs/overlayfs/overlay.o
  CC      drivers/acpi/acpica/utcksum.o
  AR      drivers/watchdog/built-in.a
  CC [M]  drivers/gpu/drm/drm_blend.o
  CC      mm/huge_memory.o
  CC      drivers/usb/core/quirks.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/ioctl.o
  CC      drivers/cpuidle/governor.o
  CC      net/ipv4/ping.o
  CC      fs/btrfs/transaction.o
  CC [M]  drivers/gpu/drm/drm_bridge.o
  LD [M]  drivers/i2c/busses/i2c-designware-pci.o
  CC      kernel/acct.o
  AR      drivers/i2c/busses/built-in.a
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_hw.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_ethtool.o
  CC      drivers/i2c/i2c-core-smbus.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_pch.o
  CC [M]  drivers/net/usb/smsc95xx.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/memory.o
  AR      net/core/built-in.a
  CC      drivers/cpuidle/sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt.o
  CC [M]  drivers/net/phy/ax88796b.o
  AR      drivers/opp/built-in.a
  CC      drivers/mmc/core/core.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.o
  CC [M]  drivers/net/dummy.o
  CC      drivers/acpi/acpica/utcopy.o
  CC      drivers/mmc/host/sdhci.o
  CC      drivers/acpi/acpica/utexcep.o
  CC      drivers/usb/core/devices.o
  CC      drivers/mmc/core/bus.o
  CC [M]  drivers/gpu/drm/drm_cache.o
  AR      drivers/net/ethernet/i825xx/built-in.a
  CC [M]  drivers/md/persistent-data/dm-transaction-manager.o
  CC      drivers/usb/storage/usb.o
  AR      drivers/ufs/built-in.a
  CC [M]  drivers/net/phy/bcm7xxx.o
  AR      drivers/leds/trigger/built-in.a
  CC [M]  drivers/leds/trigger/ledtrig-audio.o
  CC      arch/x86/kernel/early_printk.o
  CC      drivers/mmc/host/sdhci-pci-core.o
  AR      drivers/firmware/arm_ffa/built-in.a
  AR      drivers/firmware/arm_scmi/built-in.a
  AR      drivers/firmware/broadcom/built-in.a
  AR      drivers/firmware/cirrus/built-in.a
  CC      drivers/mmc/host/sdhci-pci-o2micro.o
  AR      drivers/firmware/meson/built-in.a
  CC      drivers/mmc/host/sdhci-pci-arasan.o
  AR      drivers/cpuidle/governors/built-in.a
  CC [M]  drivers/net/phy/bcm87xx.o
  CC      net/ipv6/fib6_notifier.o
  CC      drivers/firmware/efi/efi-bgrt.o
  CC      drivers/firmware/efi/libstub/efi-stub-helper.o
  CC      drivers/firmware/efi/libstub/gop.o
  CC      drivers/thermal/thermal_sysfs.o
  CC      drivers/acpi/acpica/utdebug.o
  CC      arch/x86/kernel/hpet.o
  AR      drivers/leds/blink/built-in.a
  CC      drivers/cpuidle/poll_state.o
  AR      drivers/net/ethernet/microsoft/built-in.a
  CC      drivers/leds/led-core.o
  AR      drivers/leds/simple/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/mm.o
  CC      drivers/leds/led-class.o
  CC [M]  drivers/net/phy/bcm-phy-lib.o
  CC      mm/khugepaged.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/object.o
  CC      kernel/crash_core.o
  CC      drivers/acpi/scan.o
  CC      arch/x86/kernel/amd_nb.o
  CC      drivers/cpuidle/cpuidle-haltpoll.o
  CC [M]  drivers/gpu/drm/i915/i915_memcpy.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_clock.o
  CC      drivers/usb/core/phy.o
  CC      kernel/compat.o
  CC [M]  drivers/md/persistent-data/dm-btree.o
  AR      drivers/firmware/imx/built-in.a
  CC      drivers/acpi/acpica/utdecode.o
  AR      drivers/firmware/psci/built-in.a
  CC      drivers/acpi/acpica/utdelete.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.o
  AR      drivers/crypto/stm32/built-in.a
  CC      drivers/firmware/efi/efi.o
  AR      drivers/crypto/xilinx/built-in.a
  AR      drivers/crypto/hisilicon/built-in.a
  CC [M]  drivers/md/persistent-data/dm-btree-remove.o
  CC      drivers/clocksource/acpi_pm.o
  CC [M]  drivers/md/persistent-data/dm-btree-spine.o
  AR      drivers/crypto/keembay/built-in.a
  AR      drivers/crypto/built-in.a
  CC [M]  drivers/net/phy/broadcom.o
  CC      drivers/mmc/host/sdhci-pci-dwc-mshc.o
  CC [M]  drivers/gpu/drm/i915/i915_mm.o
  CC      drivers/cpufreq/cpufreq_performance.o
  CC      drivers/i2c/i2c-core-acpi.o
  CC      drivers/usb/storage/initializers.o
  CC      drivers/firmware/efi/vars.o
  CC      drivers/firmware/efi/libstub/secureboot.o
  CC      drivers/leds/led-triggers.o
  AR      drivers/cpuidle/built-in.a
  CC      drivers/clocksource/i8253.o
  CC      drivers/i2c/i2c-core-slave.o
  CC      net/ipv6/rpl.o
  CC      drivers/thermal/thermal_trip.o
  CC      lib/bsearch.o
  CC      net/ipv4/ip_tunnel_core.o
  CC      fs/namei.o
  CC      mm/page_counter.o
  AR      drivers/firmware/smccc/built-in.a
  CC      mm/memcontrol.o
  CC [M]  drivers/net/usb/mcs7830.o
  CC      drivers/acpi/acpica/uterror.o
  CC      arch/x86/kernel/kvm.o
  CC      drivers/cpufreq/cpufreq_ondemand.o
  CC      drivers/mmc/host/sdhci-pci-gli.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_debugfs.o
  CC      drivers/cpufreq/cpufreq_governor.o
  CC      drivers/md/md.o
  CC      drivers/usb/core/port.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/oproxy.o
  AR      drivers/net/ethernet/litex/built-in.a
  CC      drivers/cpufreq/cpufreq_governor_attr_set.o
  CC      drivers/i2c/i2c-dev.o
  AR      drivers/net/ethernet/microchip/built-in.a
  CC [M]  drivers/net/usb/usbnet.o
  AR      drivers/clocksource/built-in.a
  CC      kernel/utsname.o
  CC      drivers/mmc/host/sdhci-acpi.o
  CC      drivers/firmware/efi/reboot.o
  CC      drivers/firmware/efi/memattr.o
  CC      drivers/acpi/acpica/uteval.o
  CC      drivers/acpi/acpica/utglobal.o
  CC      drivers/thermal/thermal_helpers.o
  CC [M]  drivers/net/phy/lxt.o
  CC      drivers/usb/storage/sierra_ms.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_mcr.o
  CC      drivers/firmware/efi/libstub/tpm.o
  CC      lib/find_bit.o
  CC      drivers/mmc/core/host.o
  CC      drivers/mmc/core/mmc.o
  AR      drivers/net/ethernet/mscc/built-in.a
  CC      drivers/hid/usbhid/hid-core.o
  AR      drivers/leds/built-in.a
  AR      drivers/net/ethernet/neterion/built-in.a
  CC      drivers/hid/hid-core.o
  AR      drivers/net/ethernet/netronome/built-in.a
  CC      drivers/usb/storage/option_ms.o
  CC [M]  drivers/gpu/drm/i915/i915_sw_fence.o
  CC [M]  fs/cifs/smb2misc.o
  CC      drivers/thermal/thermal_hwmon.o
  CC      fs/btrfs/inode.o
  LD [M]  drivers/md/persistent-data/dm-persistent-data.o
  CC [M]  drivers/net/phy/realtek.o
  CC [M]  drivers/i2c/i2c-smbus.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.o
  CC      kernel/user_namespace.o
  CC      drivers/md/md-bitmap.o
  CC      lib/llist.o
  CC      drivers/acpi/acpica/uthex.o
  CC      net/ipv6/ioam6.o
  CC      lib/memweight.o
  CC      lib/kfifo.o
  CC      drivers/usb/host/ehci-pci.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ib.o
  CC      drivers/md/md-autodetect.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_pll.o
  CC [M]  drivers/i2c/i2c-mux.o
  CC      drivers/hid/hid-input.o
  CC [M]  drivers/gpu/drm/drm_client.o
  CC      mm/vmpressure.o
  CC      drivers/cpufreq/acpi-cpufreq.o
  CC [M]  drivers/gpu/drm/drm_client_modeset.o
  CC      drivers/usb/core/hcd-pci.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/option.o
  CC      fs/btrfs/file.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_param.o
  CC      drivers/firmware/efi/libstub/file.o
  CC      drivers/acpi/acpica/utids.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.o
  CC      drivers/usb/storage/usual-tables.o
  CC      drivers/hid/usbhid/hiddev.o
  CC      drivers/thermal/gov_fair_share.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_pagefault.o
  CC      net/ipv4/gre_offload.o
  CC [M]  fs/cifs/smb2pdu.o
  CC      drivers/mmc/core/mmc_ops.o
  CC      drivers/mmc/host/cqhci-core.o
  CC      arch/x86/kernel/kvmclock.o
  CC [M]  drivers/gpu/drm/drm_color_mgmt.o
  CC      drivers/usb/host/ohci-hcd.o
  AR      drivers/i2c/built-in.a
  CC      drivers/usb/host/ohci-pci.o
  CC      drivers/md/dm-uevent.o
  CC      drivers/usb/host/uhci-hcd.o
  CC      lib/percpu-refcount.o
  CC      drivers/md/dm.o
  CC [M]  drivers/net/phy/smsc.o
  CC      drivers/acpi/acpica/utinit.o
  CC      drivers/thermal/gov_step_wise.o
  CC      net/ipv4/metrics.o
  CC [M]  drivers/net/usb/cdc_ncm.o
  CC      kernel/pid_namespace.o
  AR      drivers/usb/storage/built-in.a
  CC      arch/x86/kernel/paravirt.o
  AR      drivers/staging/media/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_sw_fence_work.o
  AR      drivers/staging/built-in.a
  CC      arch/x86/kernel/pvclock.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/ramht.o
  CC      drivers/firmware/efi/libstub/mem.o
  CC      drivers/usb/core/usb-acpi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.o
  CC      drivers/cpufreq/intel_pstate.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sysfs.o
  CC      drivers/usb/host/xhci.o
  CC      drivers/md/dm-table.o
  CC      net/ipv4/netlink.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.o
  CC      drivers/acpi/acpica/utlock.o
  CC      drivers/firmware/efi/libstub/random.o
  CC [M]  drivers/net/usb/r8153_ecm.o
  CC [M]  drivers/gpu/drm/i915/i915_syncmap.o
  LD [M]  drivers/net/ethernet/intel/e1000/e1000.o
  CC      drivers/thermal/gov_user_space.o
  CC      arch/x86/kernel/pcspeaker.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/subdev.o
  CC [M]  drivers/net/ethernet/intel/e1000e/82571.o
  CC [M]  drivers/gpu/drm/drm_connector.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ich8lan.o
  CC      fs/btrfs/defrag.o
  CC      lib/rhashtable.o
  AR      drivers/hid/usbhid/built-in.a
  CC [M]  drivers/net/ethernet/intel/e1000e/80003es2lan.o
  CC      drivers/mmc/core/sd.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_main.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_main.o
  CC      mm/swap_cgroup.o
  CC [M]  drivers/net/ethernet/intel/igbvf/vf.o
  CC [M]  drivers/mmc/host/sdhci-pltfm.o
  CC      net/ipv4/nexthop.o
  CC [M]  fs/cifs/smb2inode.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_mac.o
  CC      drivers/acpi/acpica/utmath.o
  AR      drivers/usb/core/built-in.a
  CC [M]  drivers/net/ethernet/intel/igc/igc_i225.o
  UPD     kernel/config_data
  CC      kernel/stop_machine.o
  CC      net/ipv6/sysctl_net_ipv6.o
  LD [M]  drivers/net/phy/aquantia.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
  AR      drivers/net/phy/built-in.a
  CC      arch/x86/kernel/check.o
  CC      drivers/firmware/efi/libstub/randomalloc.o
  CC      net/ipv6/xfrm6_policy.o
  CC      drivers/firmware/efi/libstub/pci.o
  AR      drivers/thermal/built-in.a
  CC      fs/fcntl.o
  CC      net/ipv4/udp_tunnel_stub.o
  CC      kernel/kprobes.o
  CC      drivers/md/dm-target.o
  CC      lib/base64.o
  CC      drivers/acpi/acpica/utmisc.o
  CC      drivers/usb/host/xhci-mem.o
  CC      lib/once.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.o
  CC [M]  drivers/gpu/drm/i915/i915_user_extensions.o
  CC      drivers/mmc/core/sd_ops.o
  AR      drivers/mmc/host/built-in.a
  CC [M]  drivers/net/macvlan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/uevent.o
  CC      arch/x86/kernel/uprobes.o
  CC [M]  drivers/net/mii.o
  CC      drivers/firmware/efi/libstub/skip_spaces.o
  CC      drivers/hid/hid-quirks.o
  CC [M]  drivers/net/ethernet/intel/igbvf/mbx.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_base.o
  CC      drivers/firmware/efi/libstub/lib-cmdline.o
  CC      drivers/acpi/acpica/utmutex.o
  CC [M]  drivers/gpu/drm/drm_crtc.o
  CC      kernel/hung_task.o
  CC      drivers/firmware/efi/libstub/lib-ctype.o
  LD [M]  drivers/net/usb/asix.o
  CC [M]  drivers/gpu/drm/i915/i915_ioc32.o
  CC      drivers/firmware/efi/libstub/alignedmem.o
  CC      lib/refcount.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_nvm.o
  CC      lib/usercopy.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_phy.o
  CC [M]  drivers/net/mdio.o
  CC      kernel/watchdog.o
  CC      drivers/usb/serial/usb-serial.o
  CC      kernel/watchdog_hld.o
  AR      drivers/usb/misc/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_topology.o
  CC [M]  drivers/usb/misc/ftdi-elan.o
  CC      kernel/seccomp.o
  CC      drivers/md/dm-linear.o
  CC      kernel/relay.o
  CC      lib/errseq.o
  CC      lib/bucket_locks.o
  CC      drivers/hid/hid-debug.o
  CC      drivers/usb/host/xhci-ext-caps.o
  CC      net/ipv6/xfrm6_state.o
  CC      drivers/mmc/core/sdio.o
  CC [M]  drivers/net/ethernet/intel/e1000e/mac.o
  CC      drivers/acpi/acpica/utnonansi.o
  AR      drivers/cpufreq/built-in.a
  CC      fs/ioctl.o
  AR      drivers/net/ethernet/ni/built-in.a
  CC      fs/readdir.o
  CC [M]  drivers/net/tun.o
  CC      drivers/acpi/acpica/utobject.o
  CC [M]  drivers/gpu/drm/i915/i915_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/fw.o
  CC [M]  drivers/net/ethernet/intel/igbvf/ethtool.o
  CC [M]  drivers/net/ethernet/intel/igbvf/netdev.o
  CC      drivers/hid/hidraw.o
  CC      drivers/firmware/efi/libstub/relocate.o
  CC      arch/x86/kernel/perf_regs.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_diag.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.o
  CC      drivers/acpi/acpica/utosi.o
  CC [M]  drivers/net/veth.o
  CC      lib/generic-radix-tree.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/hs.o
  CC      drivers/hid/hid-generic.o
  CC [M]  drivers/gpu/drm/i915/i915_debugfs_params.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.o
  AR      drivers/net/ethernet/packetengines/built-in.a
  HOSTCC  drivers/gpu/drm/xe/xe_gen_wa_oob
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.o
  CC      kernel/utsname_sysctl.o
  CC      kernel/delayacct.o
  CC      drivers/acpi/acpica/utownerid.o
  CC      drivers/md/dm-stripe.o
  CC      mm/hugetlb_cgroup.o
  AR      drivers/platform/x86/amd/built-in.a
  CC      drivers/platform/x86/intel/pmc/core.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ads.o
  CC      kernel/taskstats.o
  AR      drivers/platform/surface/built-in.a
  CC [M]  drivers/platform/x86/intel/pmt/class.o
  CC      drivers/platform/x86/intel/turbo_max_3.o
  CC      net/ipv6/xfrm6_input.o
  CC      drivers/firmware/efi/libstub/printk.o
  CC      drivers/firmware/efi/libstub/vsprintf.o
  CC      drivers/platform/x86/intel/pmc/spt.o
  CC      lib/string_helpers.o
  CC      drivers/platform/x86/intel/pmc/cnp.o
  CC      arch/x86/kernel/tracepoint.o
  CC      mm/kmemleak.o
  CC      drivers/acpi/acpica/utpredef.o
  CC      drivers/platform/x86/p2sb.o
  CC      fs/select.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ct.o
  CC [M]  drivers/net/ethernet/intel/e1000e/manage.o
  CC      drivers/mmc/core/sdio_ops.o
  CC      drivers/usb/serial/generic.o
  CC      drivers/mmc/core/sdio_bus.o
  CC [M]  drivers/net/ethernet/intel/e1000e/nvm.o
  CC      mm/page_isolation.o
  CC      drivers/usb/serial/bus.o
  CC [M]  drivers/platform/x86/intel/pmt/telemetry.o
  CC      kernel/tsacct.o
  CC      drivers/hid/hid-a4tech.o
  CC [M]  drivers/platform/x86/intel/pmt/crashlog.o
  CC      drivers/usb/serial/console.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/ls.o
  CC      arch/x86/kernel/itmt.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_class.o
  CC      mm/early_ioremap.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_debugfs.o
  CC      drivers/acpi/acpica/utresdecode.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/acr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/flcn.o
  CC      drivers/platform/x86/intel/pmc/icl.o
  CC      mm/cma.o
  CC      drivers/usb/host/xhci-ring.o
  CC      mm/secretmem.o
  CC      drivers/acpi/acpica/utresrc.o
  CC      drivers/acpi/resource.o
  CC      drivers/firmware/efi/libstub/x86-stub.o
  CC      drivers/usb/gadget/udc/core.o
  CC      net/ipv4/sysctl_net_ipv4.o
  CC      drivers/usb/gadget/udc/trace.o
  AR      drivers/net/ethernet/realtek/built-in.a
  CC [M]  drivers/net/ethernet/realtek/8139cp.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_debugfs.o
  CC      lib/hexdump.o
  CC      kernel/tracepoint.o
  CC      mm/userfaultfd.o
  CC [M]  fs/cifs/smb2file.o
  CC      net/ipv4/proc.o
  CC      drivers/mmc/core/sdio_cis.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_log.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_hwconfig.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.o
  CC      drivers/usb/serial/ftdi_sio.o
  CC      drivers/hid/hid-apple.o
  CC      drivers/platform/x86/intel/pmc/tgl.o
  AR      drivers/usb/gadget/function/built-in.a
  CC      drivers/usb/gadget/usbstring.o
  CC      drivers/acpi/acpica/utstate.o
  AR      drivers/usb/gadget/legacy/built-in.a
  CC      lib/kstrtox.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/drm_displayid.o
  CC      arch/x86/kernel/umip.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_main.o
  CC      drivers/md/dm-ioctl.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/vf.o
  CC      drivers/usb/serial/pl2303.o
  CC      net/ipv6/xfrm6_output.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/base.o
  CC [M]  fs/cifs/cifsacl.o
  CC [M]  drivers/gpu/drm/drm_drv.o
  CC      drivers/hid/hid-belkin.o
  CC [M]  drivers/net/ethernet/intel/e1000e/phy.o
  CC      mm/memremap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/cmdq.o
  LD [M]  drivers/net/ethernet/intel/igbvf/igbvf.o
  CC      drivers/platform/x86/pmc_atom.o
  CC      drivers/acpi/acpi_processor.o
  CC      lib/debug_info.o
  CC      lib/iomap.o
  STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
  STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
  CC      drivers/acpi/acpica/utstring.o
  STUBCPY drivers/firmware/efi/libstub/file.stub.o
  CC      drivers/platform/x86/intel/pmc/adl.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
  STUBCPY drivers/firmware/efi/libstub/mem.stub.o
  CC      drivers/md/dm-io.o
  STUBCPY drivers/firmware/efi/libstub/pci.stub.o
  STUBCPY drivers/firmware/efi/libstub/printk.stub.o
  STUBCPY drivers/firmware/efi/libstub/random.stub.o
  STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
  CC      kernel/latencytop.o
  STUBCPY drivers/firmware/efi/libstub/relocate.stub.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
  AR      drivers/firmware/tegra/built-in.a
  CC      mm/hmm.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_pc.o
  STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
  STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
  CC      drivers/mmc/core/sdio_io.o
  CC      drivers/usb/host/xhci-hub.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pipe_crc.o
  AR      drivers/firmware/efi/libstub/lib.a
  CC      drivers/usb/host/xhci-dbg.o
  CC      drivers/firmware/efi/tpm.o
  CC      lib/pci_iomap.o
  CC      arch/x86/kernel/unwind_orc.o
  CC      arch/x86/kernel/callthunks.o
  CC      fs/dcache.o
  CC      drivers/firmware/efi/memmap.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_ethtool.o
  CC      drivers/mmc/core/sdio_irq.o
  CC      drivers/md/dm-kcopyd.o
  CC      drivers/acpi/acpica/utstrsuppt.o
  CC      drivers/platform/x86/intel/pmc/mtl.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_submit.o
  AR      drivers/usb/gadget/udc/built-in.a
  CC      drivers/usb/gadget/config.o
  CC      drivers/hid/hid-cherry.o
  CC      fs/btrfs/extent_map.o
  CC      drivers/hid/hid-chicony.o
  CC      drivers/acpi/acpica/utstrtoul64.o
  CC      kernel/irq_work.o
  CC      net/ipv4/syncookies.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/mbx.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ethtool.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.o
  CC      drivers/usb/host/xhci-trace.o
  CC [M]  drivers/gpu/drm/i915/i915_pmu.o
  AR      drivers/usb/serial/built-in.a
  AR      drivers/firmware/xilinx/built-in.a
  CC      drivers/firmware/efi/esrt.o
  CC      drivers/mailbox/mailbox.o
  CC [M]  drivers/net/ethernet/intel/ixgb/ixgb_main.o
  CC      drivers/mailbox/pcc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/fw.o
  CC [M]  drivers/net/ethernet/intel/ixgb/ixgb_hw.o
  CC      fs/btrfs/sysfs.o
  CC [M]  drivers/net/ethernet/intel/ixgb/ixgb_ee.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ipsec.o
  CC [M]  drivers/gpu/drm/i915/gt/gen2_engine_cs.o
  CC      drivers/hid/hid-cypress.o
  CC      drivers/hid/hid-ezkey.o
  CC      net/ipv6/xfrm6_protocol.o
  CC      drivers/platform/x86/intel/pmc/pltdrv.o
  CC [M]  drivers/net/ethernet/realtek/8139too.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vf_error.o
  CC      drivers/acpi/acpica/utxface.o
  CC      drivers/usb/host/xhci-debugfs.o
  CC      arch/x86/kernel/mmconf-fam10h_64.o
  CC      drivers/usb/host/xhci-pci.o
  CC      lib/iomap_copy.o
  CC      mm/memfd.o
  CC      arch/x86/kernel/vsmp_64.o
  CC      drivers/mmc/core/slot-gpio.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine.o
  CC      drivers/usb/gadget/epautoconf.o
  CC      kernel/static_call.o
  CC      drivers/usb/gadget/composite.o
  CC      lib/devres.o
  CC      drivers/hid/hid-kensington.o
  CC      fs/inode.o
  CC      drivers/md/dm-sysfs.o
  AR      drivers/platform/x86/intel/pmc/built-in.a
  CC [M]  drivers/platform/x86/intel/vsec.o
  AR      drivers/mailbox/built-in.a
  CC      drivers/firmware/efi/efi-pstore.o
  CC      drivers/devfreq/devfreq.o
  CC      drivers/acpi/acpica/utxfinit.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_common.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_engine_cs.o
  CC      drivers/acpi/acpica/utxferror.o
  CC      kernel/static_call_inline.o
  CC      drivers/acpi/acpica/utxfmutex.o
  CC      drivers/hid/hid-lg.o
  CC      drivers/firmware/efi/cper.o
  CC [M]  drivers/net/ethernet/intel/e1000e/param.o
  AR      arch/x86/kernel/built-in.a
  CC [M]  drivers/net/ethernet/intel/igb/igb_ethtool.o
  AR      arch/x86/built-in.a
  CC      drivers/mmc/core/regulator.o
  CC [M]  fs/cifs/fs_context.o
  CC [M]  fs/cifs/dns_resolve.o
  ASN.1   fs/cifs/cifs_spnego_negtokeninit.asn1.[ch]
  CC [M]  fs/cifs/smb1ops.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/msgq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sched.o
  CC      drivers/firmware/efi/cper_cxl.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_ptp.o
  CC [M]  fs/cifs/cifssmb.o
  CC [M]  fs/cifs/cifs_spnego_negtokeninit.asn1.o
  CC      drivers/md/dm-stats.o
  CC      drivers/md/dm-rq.o
  CC      net/ipv4/esp4.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_ppgtt.o
  CC [M]  drivers/devfreq/governor_simpleondemand.o
  CC [M]  drivers/gpu/drm/i915/gt/gen7_renderclear.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.o
  AR      drivers/acpi/acpica/built-in.a
  CC      lib/check_signature.o
  CC      net/ipv6/netfilter.o
  CC      drivers/firmware/dmi_scan.o
  CC      drivers/acpi/processor_core.o
  CC      mm/bootmem_info.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_engine_cs.o
  CC      drivers/firmware/efi/runtime-wrappers.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ids.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_dump.o
  CC [M]  drivers/platform/x86/intel/rst.o
  AR      drivers/net/ethernet/intel/built-in.a
  CC [M]  drivers/net/ethernet/intel/igc/igc_tsn.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.o
  CC      drivers/md/dm-io-rewind.o
  CC      kernel/user-return-notifier.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/v1.o
  CC      lib/interval_tree.o
  CC      drivers/firmware/efi/dev-path-parser.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_xdp.o
  CC [M]  drivers/devfreq/governor_performance.o
  CC      drivers/mmc/core/debugfs.o
  CC      kernel/padata.o
  CC [M]  drivers/net/ethernet/realtek/r8169_main.o
  CC      lib/assoc_array.o
  CC [M]  drivers/net/ethernet/intel/ixgb/ixgb_ethtool.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_fence.o
  CC      lib/list_debug.o
  AR      mm/built-in.a
  CC [M]  drivers/gpu/drm/i915/gt/gen8_ppgtt.o
  CC      drivers/acpi/processor_pdc.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ethtool.o
  AR      drivers/usb/host/built-in.a
  LD [M]  drivers/platform/x86/intel/intel_vsec.o
  CC [M]  drivers/net/ethernet/intel/ixgb/ixgb_param.o
  CC      drivers/mmc/core/block.o
  LD [M]  drivers/platform/x86/intel/intel-rst.o
  AR      drivers/platform/x86/intel/built-in.a
  CC [M]  drivers/platform/x86/wmi.o
  CC      drivers/hid/hid-lg-g15.o
  CC      kernel/jump_label.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/gm200.o
  CC [M]  drivers/usb/class/usbtmc.o
  CC      fs/btrfs/accessors.o
  CC      lib/debugobjects.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.o
  CC      drivers/md/dm-builtin.o
  CC      fs/btrfs/xattr.o
  CC      drivers/hid/hid-microsoft.o
  CC [M]  drivers/gpu/drm/xe/xe_huc.o
  AR      drivers/devfreq/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.o
  CC      drivers/powercap/powercap_sys.o
  CC      drivers/powercap/intel_rapl_common.o
  CC      drivers/firmware/efi/apple-properties.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.o
  AR      drivers/perf/built-in.a
  CC      drivers/hid/hid-monterey.o
  CC      drivers/usb/gadget/functions.o
  CC      lib/bitrev.o
  CC      net/ipv6/fib6_rules.o
  CC      lib/crc16.o
  CC      drivers/acpi/ec.o
  CC [M]  drivers/net/ethernet/realtek/r8169_firmware.o
  CC      drivers/firmware/efi/earlycon.o
  CC [M]  drivers/platform/x86/wmi-bmof.o
  CC      net/ipv6/proc.o
  LD [M]  drivers/net/ethernet/intel/igc/igc.o
  CC      net/ipv4/esp4_offload.o
  CC [M]  drivers/net/ethernet/intel/e100.o
  CC [M]  fs/cifs/asn1.o
  CC      drivers/ras/ras.o
  CC      drivers/ras/debugfs.o
  CC      drivers/usb/gadget/configfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/gp102.o
  CC      kernel/context_tracking.o
  CC [M]  drivers/platform/x86/mxm-wmi.o
  CC [M]  drivers/md/dm-bufio.o
  CC      net/ipv4/netfilter.o
  CC [M]  drivers/net/ethernet/realtek/r8169_phy_config.o
  CC      drivers/acpi/dock.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.o
  CC      drivers/firmware/dmi-sysfs.o
  CC      drivers/acpi/pci_root.o
  CC      fs/attr.o
  CC [M]  drivers/gpu/drm/xe/xe_huc_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/ga100.o
  CC [M]  drivers/gpu/drm/xe/xe_irq.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
  CC      net/ipv4/inet_diag.o
  LD [M]  drivers/net/ethernet/intel/ixgb/ixgb.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_82575.o
  AR      drivers/hid/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/ga102.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_context.o
  AR      drivers/hwtracing/intel_th/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.o
  CC [M]  drivers/platform/x86/intel_ips.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_context_sseu.o
  CC      fs/bad_inode.o
  CC      lib/crc-t10dif.o
  LD [M]  drivers/net/ethernet/intel/ixgbevf/ixgbevf.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_mac.o
  CC      drivers/firmware/efi/cper-x86.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.o
  CC      drivers/android/binderfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_csa.o
  CC      drivers/android/binder.o
  CC      drivers/mmc/core/queue.o
  CC [M]  drivers/gpu/drm/xe/xe_lrc.o
  CC      kernel/iomem.o
  CC      fs/btrfs/ordered-data.o
  CC      drivers/powercap/intel_rapl_msr.o
  CC      net/ipv6/syncookies.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_cs.o
  CC [M]  drivers/md/dm-bio-prison-v1.o
  CC [M]  drivers/md/dm-bio-prison-v2.o
  CC      drivers/nvmem/core.o
  CC      drivers/firmware/dmi-id.o
  CC [M]  drivers/uio/uio.o
  CC [M]  drivers/mtd/chips/chipreg.o
  AR      drivers/ras/built-in.a
  CC      fs/file.o
  CC      drivers/firmware/memmap.o
  HOSTCC  lib/gen_crc32table
  CC      kernel/rseq.o
  CC [M]  drivers/gpu/drm/xe/xe_migrate.o
  CC [M]  drivers/gpu/drm/xe/xe_mmio.o
  CC      lib/libcrc32c.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_nvm.o
  CC      fs/btrfs/extent_io.o
  CC      drivers/acpi/pci_link.o
  CC [M]  drivers/net/ethernet/intel/e1000e/netdev.o
  CC [M]  drivers/md/dm-crypt.o
  AR      drivers/firmware/efi/built-in.a
  CC      drivers/android/binder_alloc.o
  CC      fs/btrfs/volumes.o
  CC [M]  drivers/md/dm-thin.o
  CC      drivers/acpi/pci_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ras.o
  CC [M]  drivers/gpu/drm/xe/xe_mocs.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ptp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/lsfw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.o
  AR      drivers/mmc/core/built-in.a
  AR      drivers/powercap/built-in.a
  AR      drivers/mmc/built-in.a
  CC      drivers/acpi/acpi_lpss.o
  CC      drivers/usb/gadget/u_f.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_phy.o
  AR      drivers/net/ethernet/renesas/built-in.a
  AR      drivers/platform/x86/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.o
  AR      drivers/platform/built-in.a
  CC [M]  drivers/vfio/pci/vfio_pci_core.o
  CC      net/ipv6/mip6.o
  CC [M]  drivers/mtd/mtdcore.o
  CC [M]  drivers/vfio/pci/vfio_pci_intrs.o
  CC      lib/xxhash.o
  CC [M]  drivers/vfio/pci/vfio_pci_rdwr.o
  AR      drivers/net/ethernet/sfc/built-in.a
  CC      lib/genalloc.o
  AR      drivers/net/ethernet/smsc/built-in.a
  CC [M]  drivers/net/ethernet/smsc/smsc9420.o
  AR      drivers/firmware/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.o
  CC      lib/percpu_counter.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_mbx.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_82599.o
  CC [M]  drivers/vfio/pci/vfio_pci_config.o
  LD [M]  drivers/net/ethernet/realtek/r8169.o
  GZIP    kernel/config_data.gz
  CC [M]  drivers/net/ethernet/intel/igb/e1000_i210.o
  CC      kernel/configs.o
  CC [M]  drivers/gpu/drm/xe/xe_module.o
  CC      net/ipv4/tcp_diag.o
  CC [M]  drivers/vfio/vfio_main.o
  AR      drivers/nvmem/built-in.a
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_pm.o
  AR      drivers/usb/gadget/built-in.a
  AR      drivers/usb/built-in.a
  CC [M]  drivers/bluetooth/btusb.o
  CC [M]  drivers/bluetooth/btintel.o
  CC [M]  drivers/pps/pps.o
  CC [M]  drivers/dca/dca-core.o
  CC [M]  drivers/dca/dca-sysfs.o
  CC [M]  drivers/ssb/main.o
  CC [M]  drivers/vhost/net.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_ptp.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_hwmon.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_user.o
  CC [M]  drivers/bluetooth/btbcm.o
  CC [M]  drivers/gpu/drm/drm_dumb_buffers.o
  CC      lib/fault-inject.o
  CC [M]  drivers/vhost/vhost.o
  CC [M]  drivers/vfio/group.o
  CC [M]  drivers/gpu/drm/xe/xe_pat.o
  AR      kernel/built-in.a
  CC [M]  drivers/ssb/scan.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_82598.o
  CC      fs/btrfs/async-thread.o
  LD [M]  fs/cifs/cifs.o
  CC      drivers/acpi/acpi_apd.o
  CC      drivers/acpi/acpi_platform.o
  CC      net/ipv6/addrconf_core.o
  CC      net/ipv6/exthdrs_core.o
  CC      fs/filesystems.o
  CC      fs/namespace.o
  CC [M]  drivers/pps/kapi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.o
  CC      fs/seq_file.o
  LD [M]  drivers/dca/dca.o
  CC [M]  drivers/mtd/mtdsuper.o
  CC [M]  drivers/gpu/drm/xe/xe_pci.o
  CC      lib/syscall.o
  CC      lib/dynamic_debug.o
  CC [M]  drivers/gpu/drm/drm_edid.o
  CC [M]  drivers/gpu/drm/drm_encoder.o
  CC [M]  drivers/mtd/mtdconcat.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.o
  CC      net/ipv4/udp_diag.o
  CC      fs/xattr.o
  CC [M]  drivers/vfio/iova_bitmap.o
  CC      fs/btrfs/ioctl.o
  CC      drivers/acpi/acpi_pnp.o
  CC [M]  drivers/bluetooth/btrtl.o
  CC [M]  drivers/ssb/sprom.o
  CC [M]  drivers/vfio/pci/vfio_pci.o
  CC      drivers/acpi/power.o
  CC      fs/libfs.o
  AR      drivers/net/ethernet/socionext/built-in.a
  CC      fs/fs-writeback.o
  CC [M]  drivers/vfio/container.o
  AR      drivers/net/ethernet/vertexcom/built-in.a
  CC [M]  drivers/vfio/virqfd.o
  CC [M]  drivers/vfio/vfio_iommu_type1.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_phy.o
  CC [M]  drivers/pps/sysfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_execlists_submission.o
  CC      lib/errname.o
  LD [M]  drivers/vfio/pci/vfio-pci-core.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt.o
  CC      drivers/acpi/event.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.o
  CC [M]  drivers/gpu/drm/xe/xe_pcode.o
  CC      fs/btrfs/locking.o
  CC      fs/btrfs/orphan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gv100.o
  CC      net/ipv6/ip6_checksum.o
  AR      drivers/net/ethernet/wangxun/built-in.a
  CC      net/ipv6/ip6_icmp.o
  AR      drivers/net/ethernet/xilinx/built-in.a
  LD [M]  drivers/net/ethernet/intel/igb/igb.o
  CC      fs/btrfs/export.o
  CC      net/ipv6/output_core.o
  AR      drivers/net/ethernet/synopsys/built-in.a
  CC      net/ipv6/protocol.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.o
  CC [M]  drivers/gpu/drm/xe/xe_pm.o
  LD [M]  drivers/pps/pps_core.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.o
  AR      drivers/net/ethernet/pensando/built-in.a
  CC      lib/nlattr.o
  CC [M]  drivers/gpu/drm/xe/xe_preempt_fence.o
  CC [M]  drivers/md/dm-thin-metadata.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.o
  LD [M]  drivers/vfio/pci/vfio-pci.o
  CC [M]  drivers/ssb/pci.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
  CC [M]  drivers/vhost/iotlb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga100.o
  CC      drivers/acpi/evged.o
  CC [M]  drivers/mtd/mtdpart.o
  CC      drivers/acpi/sysfs.o
  CC [M]  drivers/mtd/mtdchar.o
  CC      net/ipv4/tcp_cubic.o
../drivers/gpu/drm/i915/gt/intel_engine_cs.c:1525: warning: expecting prototype for intel_engines_cleanup_common(). Prototype was for intel_engine_cleanup_common() instead
  CC [M]  drivers/gpu/drm/xe/xe_pt.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt.o
  CC      drivers/acpi/property.o
  CC [M]  drivers/ssb/pcihost_wrapper.o
  CC [M]  drivers/gpu/drm/xe/xe_pt_walk.o
  CC [M]  drivers/ssb/driver_chipcommon.o
  CC      fs/btrfs/tree-log.o
  CC [M]  drivers/gpu/drm/xe/xe_query.o
  CC      fs/btrfs/free-space-cache.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
  LD [M]  drivers/vhost/vhost_net.o
  LD [M]  drivers/vhost/vhost_iotlb.o
  CC [M]  drivers/ssb/driver_chipcommon_pmu.o
  CC      lib/checksum.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.o
  CC      fs/btrfs/zlib.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga102.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_sr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_umc.o
  CC      net/ipv6/ip6_offload.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.o
  CC [M]  drivers/ssb/driver_pcicore.o
  CC      net/ipv4/xfrm4_policy.o
  CC      lib/cpu_rmap.o
  CC      drivers/acpi/acpi_cmos_rtc.o
  CC      fs/btrfs/lzo.o
  CC      lib/dynamic_queue_limits.o
  CC      drivers/acpi/x86/apple.o
  CC      net/ipv6/tcpv6_offload.o
  CC      net/ipv6/exthdrs_offload.o
  CC      net/ipv6/inet6_hashtables.o
  CC      fs/btrfs/zstd.o
  CC      lib/glob.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
  LD [M]  drivers/md/dm-bio-prison.o
  LD [M]  drivers/md/dm-thin-pool.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_irq.o
  AR      drivers/md/built-in.a
  CC      fs/pnode.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_mcr.o
  LD [M]  drivers/mtd/mtd.o
  CC      net/ipv4/xfrm4_state.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.o
  AR      drivers/android/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_rap.o
  CC [M]  drivers/gpu/drm/drm_file.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_x540.o
  CC      net/ipv6/mcast_snoop.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_whitelist.o
  CC [M]  drivers/gpu/drm/xe/xe_rtp.o
  LD [M]  drivers/vfio/vfio.o
  CC      fs/splice.o
  CC [M]  drivers/gpu/drm/xe/xe_ring_ops.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gk20a.o
  CC [M]  drivers/gpu/drm/drm_fourcc.o
  CC      lib/strncpy_from_user.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_x550.o
  CC      drivers/acpi/x86/utils.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_lib.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm107.o
  CC      drivers/acpi/x86/s2idle.o
  CC      drivers/acpi/debugfs.o
  LD [M]  drivers/ssb/ssb.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm20b.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fw_attestation.o
  LD [M]  drivers/net/ethernet/intel/e1000e/e1000e.o
  CC [M]  net/ipv6/ip6_udp_tunnel.o
  CC      fs/btrfs/compression.o
  CC      net/ipv4/xfrm4_input.o
  CC      fs/sync.o
  CC [M]  drivers/gpu/drm/drm_framebuffer.o
  CC      drivers/acpi/acpi_lpat.o
  CC      fs/utimes.o
  CC      fs/btrfs/delayed-ref.o
  CC [M]  drivers/gpu/drm/xe/xe_sa.o
  CC      lib/strnlen_user.o
  CC [M]  drivers/gpu/drm/xe/xe_sched_job.o
  CC      drivers/acpi/acpi_lpit.o
  CC      fs/btrfs/relocation.o
  CC      fs/btrfs/delayed-inode.o
  CC      fs/btrfs/scrub.o
  CC      drivers/acpi/prmt.o
  CC      net/ipv4/xfrm4_output.o
  CC      net/ipv4/xfrm4_protocol.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.o
  CC [M]  net/ipv4/ip_tunnel.o
  CC [M]  drivers/gpu/drm/xe/xe_step.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_securedisplay.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/tu102.o
  CC      drivers/acpi/acpi_pcc.o
  CC      fs/btrfs/backref.o
  CC [M]  drivers/gpu/drm/xe/xe_sync.o
  CC [M]  drivers/gpu/drm/xe/xe_tile.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/bit.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mca.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.o
  CC [M]  drivers/gpu/drm/drm_gem.o
  CC [M]  net/ipv4/udp_tunnel_core.o
  AR      net/ipv6/built-in.a
  CC      drivers/acpi/ac.o
  CC [M]  net/ipv4/udp_tunnel_nic.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
  CC      lib/net_utils.o
  CC      drivers/acpi/button.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_lsdma.o
  CC      drivers/acpi/fan_core.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.o
  CC      drivers/acpi/fan_attr.o
  CC      fs/btrfs/ulist.o
  CC [M]  drivers/gpu/drm/xe/xe_trace.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_requests.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
  CC      drivers/acpi/processor_driver.o
  CC      drivers/acpi/processor_thermal.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
  CC      drivers/acpi/processor_idle.o
  CC [M]  drivers/gpu/drm/drm_ioctl.o
  CC [M]  drivers/gpu/drm/drm_lease.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
  CC      fs/btrfs/qgroup.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gtt.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/nouveau/nvkm/subdev/bios/boost.o
  CC      drivers/acpi/processor_throttling.o
  CC      lib/sg_pool.o
  CC      drivers/acpi/processor_perflib.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.o
  CC      drivers/acpi/container.o
  CC [M]  drivers/gpu/drm/drm_managed.o
  CC      drivers/acpi/thermal.o
  CC [M]  drivers/gpu/drm/xe/xe_uc.o
  CC      drivers/acpi/acpi_memhotplug.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.o
  CC      fs/btrfs/send.o
  CC      drivers/acpi/ioapic.o
  CC      drivers/acpi/battery.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.o
  AR      net/ipv4/built-in.a
  CC      lib/stackdepot.o
  CC      fs/btrfs/dev-replace.o
  CC      fs/btrfs/raid56.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/conn.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_llc.o
  CC [M]  drivers/gpu/drm/drm_mm.o
  CC      fs/d_path.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_lrc.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_migrate.o
  CC      drivers/acpi/hed.o
  CC      drivers/acpi/bgrt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/cstep.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_fw.o
  CC      lib/ucs2_string.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/dcb.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_mocs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/disp.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ppgtt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik_ih.o
  CC      drivers/acpi/cppc_acpi.o
  CC [M]  drivers/gpu/drm/drm_mode_config.o
  CC [M]  drivers/gpu/drm/drm_mode_object.o
  CC      drivers/acpi/spcr.o
  CC      drivers/acpi/acpi_pad.o
  CC      fs/btrfs/uuid-tree.o
  CC      fs/btrfs/props.o
  CC      lib/sbitmap.o
  CC [M]  drivers/acpi/acpi_video.o
  CC [M]  drivers/acpi/video_detect.o
  CC      fs/btrfs/free-space-tree.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/dp.o
  LD [M]  net/ipv4/udp_tunnel.o
  CC      fs/stack.o
  CC [M]  drivers/gpu/drm/xe/xe_vm.o
  AR      net/built-in.a
  CC      lib/group_cpus.o
  CC [M]  drivers/gpu/drm/xe/xe_vm_madvise.o
  CC [M]  drivers/gpu/drm/drm_modes.o
  CC [M]  drivers/gpu/drm/xe/xe_wait_user_fence.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/extdev.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_rc6.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/fan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/gpio.o
  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_wopcm.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_region_lmem.o
  CC      fs/btrfs/tree-checker.o
  CC      fs/btrfs/space-info.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/iccsense.o
  CC [M]  lib/asn1_decoder.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/image.o
  CC      fs/fs_struct.o
  CC      fs/statfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v8_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/mxm.o
  GEN     lib/oid_registry_data.c
  CC [M]  drivers/gpu/drm/drm_modeset_lock.o
  CC [M]  lib/oid_registry.o
  CC      fs/btrfs/block-rsv.o
  CC      fs/btrfs/delalloc-space.o
  CC [M]  drivers/gpu/drm/drm_plane.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v7_0.o
  CC [M]  drivers/gpu/drm/drm_prime.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik_sdma.o
  CC [M]  drivers/gpu/drm/xe/xe_display.o
  AR      lib/lib.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/npde.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pcir.o
  GEN     lib/crc32table.h
  CC [M]  drivers/gpu/drm/xe/display/xe_fb_pin.o
  LD [M]  drivers/net/ethernet/intel/ixgbe/ixgbe.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_renderstate.o
  CC [M]  drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
  CC      fs/fs_pin.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v4_2.o
  CC      fs/btrfs/block-group.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_reset.o
  CC      lib/crc32.o
  AR      drivers/net/ethernet/built-in.a
  CC      fs/btrfs/discard.o
  CC [M]  drivers/gpu/drm/xe/display/xe_plane_initial.o
  CC      fs/nsfs.o
  CC      fs/btrfs/reflink.o
  AR      drivers/net/built-in.a
  CC [M]  drivers/gpu/drm/i915/gt/intel_ring.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ring_submission.o
  CC      fs/btrfs/subpage.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_rps.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pll.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pmu.o
  CC      fs/btrfs/tree-mod-log.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sa_media.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/power_budget.o
  CC      fs/fs_types.o
  CC [M]  drivers/gpu/drm/drm_print.o
  AR      drivers/acpi/built-in.a
  LD [M]  drivers/acpi/video.o
  CC [M]  drivers/gpu/drm/drm_property.o
  CC      fs/fs_context.o
  CC [M]  drivers/gpu/drm/drm_syncobj.o
  AR      lib/built-in.a
  CC [M]  drivers/gpu/drm/drm_sysfs.o
  CC      fs/fs_parser.o
  CC      fs/btrfs/extent-io-tree.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/ramcfg.o
  CC [M]  drivers/gpu/drm/drm_trace_points.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_rps.o
  CC      fs/btrfs/fs.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_irq.o
  CC      fs/fsopen.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.o
  CC      fs/init.o
  CC      fs/kernel_read_file.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sseu.o
  CC [M]  drivers/gpu/drm/drm_vblank.o
  CC      fs/btrfs/messages.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
  CC      fs/btrfs/bio.o
  CC [M]  drivers/gpu/drm/xe/display/ext/intel_clock_gating.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si.o
  CC      fs/btrfs/lru_cache.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_timeline.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_wopcm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v6_0.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_workarounds.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.o
  CC [M]  drivers/gpu/drm/xe/display/ext/intel_device_info.o
  CC [M]  drivers/gpu/drm/i915/gt/shmem_utils.o
  CC      fs/mnt_idmapping.o
  CC      fs/btrfs/acl.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si_ih.o
  CC [M]  drivers/gpu/drm/i915/gt/sysfs_engines.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.o
  CC [M]  drivers/gpu/drm/drm_vblank_work.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si_dma.o
  CC      fs/remap_range.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowramin.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
  CC [M]  drivers/gpu/drm/drm_vma_manager.o
  CC      fs/buffer.o
  CC      fs/mpage.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v6_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v3_1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowrom.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/timing.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_vi.o
  CC      fs/proc_namespace.o
  CC      fs/direct-io.o
  CC      fs/eventpoll.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/therm.o
  CC [M]  drivers/gpu/drm/drm_writeback.o
  CC [M]  drivers/gpu/drm/lib/drm_random.o
  CC [M]  drivers/gpu/drm/xe/display/ext/intel_dram.o
  CC [M]  drivers/gpu/drm/xe/display/ext/intel_pch.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/nouveau/nvkm/subdev/bios/vpstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/xpio.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v6_1.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/xe/i915-display/icl_dsi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/soc15.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_renderstate.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic.o
  CC [M]  drivers/gpu/drm/i915/gt/gen7_renderstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0209.o
  CC [M]  drivers/gpu/drm/drm_ioc32.o
  CC [M]  drivers/gpu/drm/drm_panel.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_renderstate.o
  CC      fs/anon_inodes.o
  CC [M]  drivers/gpu/drm/i915/gt/gen9_renderstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/P0260.o
  CC [M]  drivers/gpu/drm/drm_pci.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_busy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/emu_soc.o
  CC      fs/signalfd.o
  CC      fs/timerfd.o
  CC      fs/eventfd.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_ai.o
  CC [M]  drivers/gpu/drm/drm_debugfs.o
  CC [M]  drivers/gpu/drm/drm_debugfs_crc.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_clflush.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_0.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_context.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_create.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega10_reg_init.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv31.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega20_reg_init.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.o
  CC      fs/userfaultfd.o
  CC      fs/aio.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_4.o
  CC      fs/locks.o
  CC      fs/binfmt_script.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.o
  AR      fs/btrfs/built-in.a
  CC      fs/binfmt_elf.o
  CC [M]  drivers/gpu/drm/drm_edid_load.o
  CC [M]  drivers/gpu/drm/drm_panel_orientation_quirks.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv04.o
  CC      fs/compat_binfmt_elf.o
  CC [M]  drivers/gpu/drm/drm_buddy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_audio.o
  CC      fs/mbcache.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v2_3.o
  CC      fs/posix_acl.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nv.o
  CC      fs/coredump.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/arct_reg_init.o
  CC [M]  drivers/gpu/drm/drm_gem_shmem_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.o
  CC      fs/drop_caches.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_backlight.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_domain.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_internal.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_nv.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.o
  CC      fs/fhandle.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.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/i915/gem/i915_gem_object.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_lmem.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_mman.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllnv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v5_0.o
  CC [M]  drivers/gpu/drm/drm_suballoc.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_pages.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/amd/amdgpu/soc21.o
  CC [M]  drivers/gpu/drm/drm_gem_ttm_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sienna_cichlid.o
  CC [M]  drivers/gpu/drm/drm_atomic_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllgt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smu_v13_0_10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_phys.o
  CC [M]  drivers/gpu/drm/drm_atomic_state_helper.o
  CC [M]  drivers/gpu/drm/drm_bridge_connector.o
  CC [M]  drivers/gpu/drm/drm_crtc_helper.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv10.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_region.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v4_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv1a.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_shmem.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv20.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_stolen.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_throttle.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_tiling.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bios.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.o
  CC [M]  drivers/gpu/drm/drm_damage_helper.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bw.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_7.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v5_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/lsdma_v6_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_9.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.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/amd/amdgpu/df_v4_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v7_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.o
  CC [M]  drivers/gpu/drm/drm_encoder_slave.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v8_0.o
  CC [M]  drivers/gpu/drm/drm_flip_work.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_userptr.o
  AR      fs/built-in.a
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_wait.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gemfs.o
  CC [M]  drivers/gpu/drm/i915/i915_active.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.o
  CC [M]  drivers/gpu/drm/drm_format_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.o
  CC [M]  drivers/gpu/drm/i915/i915_cmd_parser.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/ga100.o
  CC [M]  drivers/gpu/drm/drm_gem_atomic_helper.o
  CC [M]  drivers/gpu/drm/i915/i915_deps.o
  CC [M]  drivers/gpu/drm/drm_gem_framebuffer_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_1.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_evict.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/user.o
  CC [M]  drivers/gpu/drm/drm_kms_helper_common.o
  CC [M]  drivers/gpu/drm/drm_modeset_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_gtt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_ww.o
  CC [M]  drivers/gpu/drm/i915/i915_gem.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_color.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v10_0.o
  CC [M]  drivers/gpu/drm/i915/i915_query.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.o
  CC [M]  drivers/gpu/drm/i915/i915_request.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gv100.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/drm_plane_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_connector.o
  CC [M]  drivers/gpu/drm/i915/i915_scheduler.o
  CC [M]  drivers/gpu/drm/drm_probe_helper.o
  CC [M]  drivers/gpu/drm/i915/i915_trace_points.o
  CC [M]  drivers/gpu/drm/drm_rect.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.o
  CC [M]  drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.o
  CC [M]  drivers/gpu/drm/i915/i915_vma.o
  CC [M]  drivers/gpu/drm/i915/i915_vma_resource.o
  CC [M]  drivers/gpu/drm/drm_self_refresh_helper.o
  CC [M]  drivers/gpu/drm/drm_simple_kms_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
  CC [M]  drivers/gpu/drm/bridge/panel.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_2.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v11_0.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
  CC [M]  drivers/gpu/drm/drm_fbdev_generic.o
  CC [M]  drivers/gpu/drm/drm_fb_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.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/nouveau/nvkm/subdev/fb/nv25.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.o
  LD [M]  drivers/gpu/drm/drm.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.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/xe/i915-display/intel_crtc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.o
  LD [M]  drivers/gpu/drm/drm_shmem_helper.o
  LD [M]  drivers/gpu/drm/drm_suballoc_helper.o
  LD [M]  drivers/gpu/drm/drm_ttm_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.o
  AR      drivers/gpu/drm/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_rc.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/i915/gt/uc/intel_guc_slpc.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_1.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/umc_v6_7.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v8_7.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/amd/amdgpu/umc_v8_10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ih.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/iceland_ih.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_driver.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/tonga_ih.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gsc.o
  CC [M]  drivers/gpu/drm/i915/i915_hwmon.o
  CC [M]  drivers/gpu/drm/i915/display/hsw_ips.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cz_ih.o
  CC [M]  drivers/gpu/drm/i915/display/intel_atomic.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.o
  CC [M]  drivers/gpu/drm/i915/display/intel_atomic_plane.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega10_ih.o
  CC [M]  drivers/gpu/drm/i915/display/intel_audio.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/vega20_ih.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
  CC [M]  drivers/gpu/drm/i915/display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/navi10_ih.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gt215.o
  LD [M]  drivers/gpu/drm/drm_kms_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/ih_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp77.o
  CC [M]  drivers/gpu/drm/i915/display/intel_color.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_psp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp89.o
  CC [M]  drivers/gpu/drm/i915/display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/i915/display/intel_connector.o
  CC [M]  drivers/gpu/drm/i915/display/intel_crtc.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/nouveau/nvkm/subdev/fb/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v3_1.o
  CC [M]  drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
  CC [M]  drivers/gpu/drm/i915/display/intel_cursor.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v10_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v11_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf108.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v12_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v13_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dmc.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_driver.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk104.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power_map.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v10_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power_well.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_reset.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_rps.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk110.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.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/amd/amdgpu/amdgpu_gfx.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.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/amdgpu_rlc.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpll.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm107.o
  CC [M]  drivers/gpu/drm/i915/display/intel_drrs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb_pin.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fbc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm20b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp100.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4_2.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fdi.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fifo_underrun.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp102.o
  CC [M]  drivers/gpu/drm/i915/display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll.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/amd/amdgpu/gfx_v9_4_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v10_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp10b.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/imu_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_drrs.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hotplug.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v11_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hotplug_irq.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hti.o
  CC [M]  drivers/gpu/drm/i915/display/intel_load_detect.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v11_0_3.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsb.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lpe_audio.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_setup.o
  CC [M]  drivers/gpu/drm/i915/display/intel_overlay.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pch_display.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/imu_v11_0_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pch_refclk.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.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/fb/ramnv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv1a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v2_4.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
  CC [M]  drivers/gpu/drm/i915/display/intel_plane_initial.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/amd/amdgpu/sdma_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_0.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/amd/amdgpu/sdma_v4_4.o
  CC [M]  drivers/gpu/drm/i915/display/intel_sprite_uapi.o
  CC [M]  drivers/gpu/drm/i915/display/intel_tc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv20.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vblank.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v5_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vga.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.o
  CC [M]  drivers/gpu/drm/i915/display/intel_wm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv41.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/nouveau/nvkm/subdev/fb/ramnv44.o
  CC [M]  drivers/gpu/drm/i915/display/i9xx_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv49.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/amd/amdgpu/sdma_v5_2.o
  CC [M]  drivers/gpu/drm/i915/display/i9xx_wm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/i915/display/skl_scaler.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_global_state.o
  CC [M]  drivers/gpu/drm/i915/display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/i915/display/skl_watermark.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/nouveau/nvkm/subdev/fb/ramgt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/rammcp77.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_gmbus.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v6_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fbdev.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/nouveau/nvkm/subdev/fb/ramgf108.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ivch.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm200.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ns2501.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_sil164.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdcp.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_tfp410.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mes_v10_1.o
  CC [M]  drivers/gpu/drm/i915/display/g4x_dp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mes_v11_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.o
  CC [M]  drivers/gpu/drm/i915/display/g4x_hdmi.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/nouveau/nvkm/subdev/fb/ramgp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramga102.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hti.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_lspcon.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr3.o
  CC [M]  drivers/gpu/drm/i915/display/icl_dsi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gddr3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v5_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/i915/display/intel_backlight.o
  CC [M]  drivers/gpu/drm/i915/display/intel_crt.o
  CC [M]  drivers/gpu/drm/i915/display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/i915/display/intel_ddi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_panel.o
  CC [M]  drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pps.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/nouveau/nvkm/subdev/fb/gddr5.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_aux.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/nv50.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_psr.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gf100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_hdcp.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_dp_link_training.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v6_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_quirks.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_mst.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v7_0.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/amd/amdgpu/amdgpu_vce.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v4_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi_vbt.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vblank.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_sw_ring.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v1_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dvo.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vdsc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.o
  CC [M]  drivers/gpu/drm/i915/display/intel_gmbus.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/ga102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdmi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vga.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lspcon.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/i915/display/intel_pps.o
  CC [M]  drivers/gpu/drm/i915/display/intel_qp_tables.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga102.o
  CC [M]  drivers/gpu/drm/i915/display/intel_sdvo.o
  CC [M]  drivers/gpu/drm/i915/display/intel_snps_phy.o
  CC [M]  drivers/gpu/drm/i915/display/intel_tv.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vdsc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vrr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vrr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v2_5.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_wm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v3_0.o
  CC [M]  drivers/gpu/drm/i915/display/vlv_dsi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v4_0.o
  CC [M]  drivers/gpu/drm/i915/display/vlv_dsi_pll.o
  CC [M]  drivers/gpu/drm/i915/i915_perf.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_cmd.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_scaler.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf117.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_irq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk104.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_pm.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/pxp/intel_pxp_session.o
  CC [M]  drivers/gpu/drm/i915/i915_gpu_error.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_watermark.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv04.o
  CC [M]  drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.o
  CC [M]  drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.o
  CC [M]  drivers/gpu/drm/i915/selftests/intel_scheduler_helpers.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/amd/amdgpu/jpeg_v4_0.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_atomic.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_acpi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv4e.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_flush_test.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_live_test.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_mmap.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_reset.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv50.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_spinner.o
  CC [M]  drivers/gpu/drm/i915/selftests/librapl.o
  CC [M]  drivers/gpu/drm/i915/i915_vgpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dkl_phy_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_crtc_state_dump.h
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_opregion.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v1_0.o
  HDRTEST drivers/gpu/drm/i915/display/hsw_ips.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padg94.o
  HDRTEST drivers/gpu/drm/i915/display/g4x_hdmi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgf119.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbdev.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgm200.o
  HDRTEST drivers/gpu/drm/i915/display/intel_overlay.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display.h
  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/i2c/bus.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vga.h
  HDRTEST drivers/gpu/drm/i915/display/intel_audio.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv04.o
  HDRTEST drivers/gpu/drm/i915/display/intel_lvds.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v2_0.o
  CC [M]  drivers/gpu/drm/xe/xe_guc.o
  CC [M]  drivers/gpu/drm/xe/xe_wa.o
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_setup.h
  HDRTEST drivers/gpu/drm/i915/display/intel_cdclk.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_limits.h
  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
  HDRTEST drivers/gpu/drm/i915/display/intel_display_driver.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpll.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv4e.o
  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/i915/display/intel_fdi_regs.h
  HDRTEST drivers/gpu/drm/i915/display/g4x_dp.h
  HDRTEST drivers/gpu/drm/i915/display/intel_tc.h
  HDRTEST drivers/gpu/drm/i915/display/intel_frontbuffer.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi_vbt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v2_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v3_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv50.o
  HDRTEST drivers/gpu/drm/i915/display/intel_psr.h
  HDRTEST drivers/gpu/drm/i915/display/intel_crt.h
  HDRTEST drivers/gpu/drm/i915/display/intel_opregion.h
  HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busgf119.o
  HDRTEST drivers/gpu/drm/i915/display/i9xx_wm.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_klvs_abi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_errors_abi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bit.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_slpc_abi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_global_state.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_mmio_abi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lpe_audio.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_abi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v9_0.o
  HDRTEST drivers/gpu/drm/i915/display/intel_drrs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_rps.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v11_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v11_0_6.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_messages_abi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0_6.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband_reg.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fbdev.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pps_regs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_wakeref.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hdmi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_reset.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mca_v3_0.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fdi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgf119.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pcode.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fb.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.o
  HDRTEST drivers/gpu/drm/i915/display/intel_qp_tables.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vdsc.h
  HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_core.h
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_pll.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo_dev.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg_defs.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/i915/display/intel_sdvo_regs.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/i915/display/intel_pch_refclk.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/i915/display/intel_display_trace.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_mchbar_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_module.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_chardev.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_gmch.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_topology.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vgpu.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_pasid.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_doorbell.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_regs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_fixed.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_runtime_pm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.o
  HDRTEST drivers/gpu/drm/i915/display/i9xx_plane.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_backlight.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dpll_mgr.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pm_types.h
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gk104.o
  HDRTEST drivers/gpu/drm/i915/display/intel_plane_initial.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fifo_underrun.h
  HDRTEST drivers/gpu/drm/i915/display/intel_cursor.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pci_config.h
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_flat_memory.o
  HDRTEST drivers/gpu/drm/i915/display/skl_scaler.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_clock_gating.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hti.h
  HDRTEST drivers/gpu/drm/xe/display/ext/i915_irq.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.o
  HDRTEST drivers/gpu/drm/i915/display/icl_dsi_regs.h
  HDRTEST drivers/gpu/drm/xe/display/ext/intel_pch.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.o
  HDRTEST drivers/gpu/drm/xe/display/ext/intel_dram.h
  HDRTEST drivers/gpu/drm/i915/display/intel_atomic_plane.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_queue.o
  HDRTEST drivers/gpu/drm/xe/display/ext/intel_device_info.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_reg_defs.h
  HDRTEST drivers/gpu/drm/i915/display/skl_watermark.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fbc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_guc_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_reg_defs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_acpi.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gt_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_cik.o
  HDRTEST drivers/gpu/drm/i915/display/intel_connector.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_gpu_commands.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_vi.o
  HDRTEST drivers/gpu/drm/i915/display/intel_quirks.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v9.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_link_training.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/ga102.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_lrc_layout.h
../drivers/gpu/drm/i915/i915_gpu_error.c:2174: warning: Function parameter or member 'dump_flags' not described in 'i915_capture_error_state'
  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/xe/regs/xe_engine_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_verify.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power_well.h
  HDRTEST drivers/gpu/drm/i915/display/intel_psr_regs.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_test.h
  HDRTEST drivers/gpu/drm/i915/display/intel_wm.h
  HDRTEST drivers/gpu/drm/i915/display/intel_pipe_crc.h
  HDRTEST drivers/gpu/drm/i915/display/intel_audio_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v10.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_pci_test.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v11.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_migrate_test.h
  HDRTEST drivers/gpu/drm/i915/display/intel_panel.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_dma_buf_test.h
  HDRTEST drivers/gpu/drm/i915/display/intel_sprite.h
  HDRTEST drivers/gpu/drm/i915/display/intel_wm_types.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_bo_test.h
  HDRTEST drivers/gpu/drm/xe/xe_bb.h
  HDRTEST drivers/gpu/drm/i915/display/intel_tv.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hti_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_bb_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_kernel_queue.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vrr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager.o
  HDRTEST drivers/gpu/drm/xe/xe_bo.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_doc.h
  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
../drivers/gpu/drm/i915/i915_perf.c:5307: warning: Function parameter or member 'i915' not described in 'i915_perf_ioctl_version'
  HDRTEST drivers/gpu/drm/i915/display/intel_bw.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_evict.h
  HDRTEST drivers/gpu/drm/i915/display/intel_de.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_vi.o
  HDRTEST drivers/gpu/drm/i915/display/intel_lvds_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_gmbus_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo.h
  HDRTEST drivers/gpu/drm/i915/display/intel_sdvo.h
  HDRTEST drivers/gpu/drm/xe/xe_debugfs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump.h
  HDRTEST drivers/gpu/drm/i915/display/intel_vdsc_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy.h
  HDRTEST drivers/gpu/drm/xe/xe_device.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_v9.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process_queue_manager.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_device_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_gmbus.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_cik.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
  HDRTEST drivers/gpu/drm/xe/xe_display.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi.h
  HDRTEST drivers/gpu/drm/xe/xe_dma_buf.h
  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
  HDRTEST drivers/gpu/drm/i915/display/intel_tv_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_drv.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb.h
  HDRTEST drivers/gpu/drm/i915/display/intel_bios.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_vi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v9.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pch_display.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v10.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_backlight.h
  HDRTEST drivers/gpu/drm/xe/xe_engine.h
  HDRTEST drivers/gpu/drm/i915/display/intel_vblank.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp.h
  HDRTEST drivers/gpu/drm/i915/display/intel_backlight_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.o
  HDRTEST drivers/gpu/drm/xe/xe_engine_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_reset.h
  HDRTEST drivers/gpu/drm/xe/xe_exec.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power_map.h
  HDRTEST drivers/gpu/drm/xe/xe_execlist.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.o
  HDRTEST drivers/gpu/drm/xe/xe_execlist_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
  HDRTEST drivers/gpu/drm/xe/xe_force_wake.h
  HDRTEST drivers/gpu/drm/i915/display/icl_dsi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lspcon.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dpio_phy.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_hdcp.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fb_pin.h
  HDRTEST drivers/gpu/drm/xe/xe_force_wake_types.h
  HDRTEST drivers/gpu/drm/xe/xe_ggtt.h
  HDRTEST drivers/gpu/drm/i915/display/intel_pps.h
  HDRTEST drivers/gpu/drm/i915/display/intel_sprite_uapi.h
  HDRTEST drivers/gpu/drm/xe/xe_ggtt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_clock.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_interrupt.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_mcr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_events.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/cik_event_interrupt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp10b.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_pagefault.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_region.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v9.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context_types.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_lmem.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_printk.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_mman.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/ga100.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.o
../drivers/gpu/drm/i915/gem/i915_gem_region.h:25: warning: Incorrect use of kernel-doc format:          * process_obj - Process the current object
../drivers/gpu/drm/i915/gem/i915_gem_region.h:35: warning: Function parameter or member 'process_obj' not described in 'i915_gem_apply_to_region_ops'
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v11.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_smi_events.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_clflush.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_tiling.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_crat.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_stolen.h
  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/amd/amdgpu/../amdkfd/kfd_debugfs.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_topology.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_types.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_create.h
  HDRTEST drivers/gpu/drm/xe/xe_guc.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads_types.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_move.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_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_svm.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_engine_types.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ioctls.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_fwif.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_domain.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_internal.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_hwconfig.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_dmabuf.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_migrate.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_context.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.o
  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/xe/xe_guc_log.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.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/i915/gem/selftests/mock_dmabuf.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
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit_types.h
../drivers/gpu/drm/i915/gem/i915_gem_ttm.h:50: warning: Function parameter or member 'bo' not described in 'i915_ttm_to_gem'
  HDRTEST drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_huc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.o
  HDRTEST drivers/gpu/drm/xe/xe_huc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gv100.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/tu102.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_userptr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_pm.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_shrinker.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mem.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gemfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv04.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv50.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_timeline_types.h
  HDRTEST drivers/gpu/drm/i915/gt/selftest_engine.h
  HDRTEST drivers/gpu/drm/xe/xe_irq.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memgf100.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_breadcrumbs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_job.o
  HDRTEST drivers/gpu/drm/xe/xe_lrc.h
  HDRTEST drivers/gpu/drm/xe/xe_lrc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv04.o
  HDRTEST drivers/gpu/drm/xe/xe_macros.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_acp.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../acp/acp_hw.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ioc32.o
  HDRTEST drivers/gpu/drm/xe/xe_map.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_context_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv44.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_execlists_submission.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmmcp77.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_pm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.o
  HDRTEST drivers/gpu/drm/i915/gt/selftest_rc6.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate_doc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk20a.o
  HDRTEST drivers/gpu/drm/xe/xe_mmio.h
  HDRTEST drivers/gpu/drm/xe/xe_mocs.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_llc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_module.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.o
  HDRTEST drivers/gpu/drm/xe/xe_pat.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt.h
  HDRTEST drivers/gpu/drm/xe/xe_pci.h
  HDRTEST drivers/gpu/drm/xe/xe_pci_types.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_region_lmem.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm200.o
  HDRTEST drivers/gpu/drm/xe/xe_pcode.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_requests.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm20b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/arcturus_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/navi10_ppt.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_ggtt_gmch.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_print.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/amd/amdgpu/../pm/swsmu/smu11/vangogh_ppt.o
  HDRTEST drivers/gpu/drm/i915/gt/gen8_ppgtt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/cyan_skillfish_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/smu_v11_0.o
  HDRTEST drivers/gpu/drm/xe/xe_pcode_api.h
../drivers/gpu/drm/i915/gem/i915_gem_object.h:94: warning: Function parameter or member 'file' not described in 'i915_gem_object_lookup_rcu'
../drivers/gpu/drm/i915/gem/i915_gem_object.h:94: warning: Excess function parameter 'filp' description in 'i915_gem_object_lookup_rcu'
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_mcr.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_timeline.h
  HDRTEST drivers/gpu/drm/i915/gt/gen6_engine_cs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/umem.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ummu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/renoir_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_platform_types.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_workarounds_types.h
  HDRTEST drivers/gpu/drm/i915/gt/selftest_rps.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_sa_media.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/uvmm.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/smu_v12_0.o
  HDRTEST drivers/gpu/drm/xe/xe_pm.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0.o
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_clock_utils.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/aldebaran_ppt.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_rps_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/mxms.o
  HDRTEST drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/agp.o
  HDRTEST drivers/gpu/drm/i915/gt/sysfs_engines.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/yellow_carp_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_0_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_4_ppt.o
  HDRTEST drivers/gpu/drm/i915/gt/gen7_renderclear.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_5_ppt.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_context.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_wopcm.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_mocs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine_pm.h
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_7_ppt.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_sysfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_rc6.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_ring_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_types.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_workarounds.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_6_ppt.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_pm_irq.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.o
  HDRTEST drivers/gpu/drm/i915/gt/shmem_utils.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_reset_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_walk.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_regs.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_reset.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.o
  HDRTEST drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_uc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/amdgpu_smu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.o
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_uc_fw_abi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu_cmn.o
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_print.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_fw.h
  HDRTEST drivers/gpu/drm/xe/xe_query.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smumgr.o
  HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_errors_abi.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_actions_slpc_abi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu8_smumgr.o
  HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_communication_mmio_abi.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_whitelist.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.o
  HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_actions_abi.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_communication_ctb_abi.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/tonga_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_res_cursor.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.o
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_reg.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_huc.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_huc_fw.h
../drivers/gpu/drm/i915/gt/intel_context.h:108: warning: Function parameter or member 'ce' not described in 'intel_context_lock_pinned'
../drivers/gpu/drm/i915/gt/intel_context.h:123: warning: Function parameter or member 'ce' not described in 'intel_context_is_pinned'
../drivers/gpu/drm/i915/gt/intel_context.h:142: warning: Function parameter or member 'ce' not described in 'intel_context_unlock_pinned'
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/memx.o
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops_types.h
  HDRTEST drivers/gpu/drm/xe/xe_rtp.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_capture.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/fiji_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_rtp_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sa.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_sa_types.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_submission.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_slpc_types.h
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:27: warning: Function parameter or member 'size' not described in '__guc_capture_bufstate'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:27: warning: Function parameter or member 'data' not described in '__guc_capture_bufstate'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:27: warning: Function parameter or member 'rd' not described in '__guc_capture_bufstate'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:27: warning: Function parameter or member 'wr' not described in '__guc_capture_bufstate'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'link' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'is_partial' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'eng_class' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'eng_inst' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'guc_id' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'lrca' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:59: warning: Function parameter or member 'reginfo' not described in '__guc_capture_parsed_output'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:62: warning: wrong kernel-doc identifier on line:
 * struct guc_debug_capture_list_header / struct guc_debug_capture_list
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:80: warning: wrong kernel-doc identifier on line:
 * struct __guc_mmio_reg_descr / struct __guc_mmio_reg_descr_group
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:105: warning: wrong kernel-doc identifier on line:
 * struct guc_state_capture_header_t / struct guc_state_capture_t /
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:163: warning: Function parameter or member 'is_valid' not described in '__guc_capture_ads_cache'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:163: warning: Function parameter or member 'ptr' not described in '__guc_capture_ads_cache'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:163: warning: Function parameter or member 'size' not described in '__guc_capture_ads_cache'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:163: warning: Function parameter or member 'status' not described in '__guc_capture_ads_cache'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:216: warning: Function parameter or member 'ads_null_cache' not described in 'intel_guc_state_capture'
../drivers/gpu/drm/i915/gt/uc/guc_capture_fwif.h:216: warning: Function parameter or member 'max_mmio_per_node' not described in 'intel_guc_state_capture'
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_log.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_ct.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/polaris10_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.o
  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/amd/amdgpu/../pm/powerplay/smumgr/iceland_smumgr.o
  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_step.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_uc_fw.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_trace.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_sys_mgr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu7_smumgr.o
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_ads.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega10_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu10_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_tuning.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.o
  HDRTEST drivers/gpu/drm/xe/xe_uc.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_debugfs.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_guc_rc.h
  HDRTEST drivers/gpu/drm/i915/gt/uc/intel_huc_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
  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
  HDRTEST drivers/gpu/drm/xe/xe_uc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.o
  HDRTEST drivers/gpu/drm/xe/xe_vm.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_hwconfig.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vegam_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_vm_doc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm107.o
  HDRTEST drivers/gpu/drm/xe/xe_vm_madvise.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_llc.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu9_smumgr.o
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'marker' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'read_ptr' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'write_ptr' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'size' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'sampled_write_ptr' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'wrap_offset' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'flush_to_file' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'buffer_full_cnt' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'reserved' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'flags' not described in 'guc_log_buffer_state'
../drivers/gpu/drm/i915/gt/uc/intel_guc_fwif.h:491: warning: Function parameter or member 'version' not described in 'guc_log_buffer_state'
  HDRTEST drivers/gpu/drm/i915/gt/gen8_engine_cs.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_sseu_debugfs.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_rc6_types.h
../drivers/gpu/drm/i915/gt/uc/intel_guc.h:274: warning: Function parameter or member 'dbgfs_node' not described in 'intel_guc'
  HDRTEST drivers/gpu/drm/i915/gt/intel_context_param.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gpu_commands.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega20_smumgr.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine_user.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_irq.h
  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/amd/amdgpu/../pm/powerplay/hwmgr/hwmgr.o
  HDRTEST drivers/gpu/drm/xe/xe_wa.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_gsc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.o
  HDRTEST drivers/gpu/drm/xe/xe_wait_user_fence.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/processpptables.o
  HDRTEST drivers/gpu/drm/xe/xe_wopcm.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/hardwaremanager.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_rps.h
  LD [M]  drivers/gpu/drm/xe/xe.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu8_hwmgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf117.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pppcielanes.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/process_pptables_v1_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomctrl.o
  HDRTEST drivers/gpu/drm/i915/gt/selftest_llc.h
  HDRTEST drivers/gpu/drm/i915/gt/gen6_ppgtt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomfwctrl.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_hwmgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_powertune.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk20a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gm200.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_ggtt_fencing.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_migrate_types.h
  HDRTEST drivers/gpu/drm/i915/gt/selftests/mock_timeline.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_lrc.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_lrc_reg.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_migrate.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_breadcrumbs_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gp10b.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.h
  HDRTEST drivers/gpu/drm/i915/gt/mock_engine.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine_stats.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_gtt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fan.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_buffer_pool_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fannil.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_ring.h
drivers/gpu/drm/xe/xe.o: warning: objtool: intel_set_cpu_fifo_underrun_reporting+0x306: unreachable instruction
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_thermal.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/nouveau/nvkm/subdev/therm/ic.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/temp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv50.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_renderstate.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gt215.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_sseu.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_clockpowergating.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.h
  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
  HDRTEST drivers/gpu/drm/i915/gt/gen2_engine_cs.h
  HDRTEST drivers/gpu/drm/i915/gvt/gvt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_powertune.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_thermal.o
  HDRTEST drivers/gpu/drm/i915/gvt/trace.h
  HDRTEST drivers/gpu/drm/i915/gvt/debug.h
  HDRTEST drivers/gpu/drm/i915/gvt/edid.h
  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/i915/gvt/page_track.h
../drivers/gpu/drm/i915/gt/intel_gtt.h:515: warning: Function parameter or member 'vm' not described in 'i915_vm_resv_put'
../drivers/gpu/drm/i915/gt/intel_gtt.h:515: warning: Excess function parameter 'resv' description in 'i915_vm_resv_put'
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_processpptables.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf119.o
  HDRTEST drivers/gpu/drm/i915/gvt/mmio.h
  HDRTEST drivers/gpu/drm/i915/gvt/sched_policy.h
  HDRTEST drivers/gpu/drm/i915/gvt/fb_decoder.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_hwmgr.o
  HDRTEST drivers/gpu/drm/i915/gvt/cmd_parser.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_thermal.o
  HDRTEST drivers/gpu/drm/i915/gvt/dmabuf.h
  HDRTEST drivers/gpu/drm/i915/gvt/mmio_context.h
  HDRTEST drivers/gpu/drm/i915/gvt/display.h
  HDRTEST drivers/gpu/drm/i915/gvt/gtt.h
  HDRTEST drivers/gpu/drm/i915/gvt/scheduler.h
  HDRTEST drivers/gpu/drm/i915/gvt/reg.h
  HDRTEST drivers/gpu/drm/i915/gvt/execlist.h
  HDRTEST drivers/gpu/drm/i915/gvt/interrupt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm107.o
  HDRTEST drivers/gpu/drm/i915/i915_active.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pp_overdriver.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gp100.o
  HDRTEST drivers/gpu/drm/i915/i915_active_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu_helper.o
  HDRTEST drivers/gpu/drm/i915/i915_cmd_parser.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_processpptables.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_hwmgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_powertune.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv40.o
  HDRTEST drivers/gpu/drm/i915/i915_config.h
  HDRTEST drivers/gpu/drm/i915/i915_debugfs.h
../drivers/gpu/drm/i915/gt/intel_engine_types.h:293: warning: Function parameter or member 'preempt_hang' not described in 'intel_engine_execlists'
  HDRTEST drivers/gpu/drm/i915/i915_debugfs_params.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_thermal.o
  HDRTEST drivers/gpu/drm/i915/i915_deps.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv41.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/common_baco.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_baco.o
  HDRTEST drivers/gpu/drm/i915/i915_driver.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.o
  HDRTEST drivers/gpu/drm/i915/i915_drm_client.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/base.o
  HDRTEST drivers/gpu/drm/i915/i915_drv.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_baco.o
  HDRTEST drivers/gpu/drm/i915/i915_file_private.h
  HDRTEST drivers/gpu/drm/i915/i915_fixed.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu9_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.o
  HDRTEST drivers/gpu/drm/i915/i915_gem.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/tonga_baco.o
  HDRTEST drivers/gpu/drm/i915/i915_gem_evict.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.o
  HDRTEST drivers/gpu/drm/i915/i915_gem_gtt.h
  HDRTEST drivers/gpu/drm/i915/i915_gem_ww.h
  HDRTEST drivers/gpu/drm/i915/i915_getparam.h
  HDRTEST drivers/gpu/drm/i915/i915_gpu_error.h
  HDRTEST drivers/gpu/drm/i915/i915_hwmon.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/base.o
  HDRTEST drivers/gpu/drm/i915/i915_ioc32.h
  HDRTEST drivers/gpu/drm/i915/i915_ioctl.h
  HDRTEST drivers/gpu/drm/i915/i915_iosf_mbi.h
  HDRTEST drivers/gpu/drm/i915/i915_irq.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/polaris_baco.o
  HDRTEST drivers/gpu/drm/i915/i915_memcpy.h
../drivers/gpu/drm/i915/i915_active.h:66: warning: Function parameter or member 'active' not described in '__i915_active_fence_init'
../drivers/gpu/drm/i915/i915_active.h:66: warning: Function parameter or member 'fence' not described in '__i915_active_fence_init'
../drivers/gpu/drm/i915/i915_active.h:66: warning: Function parameter or member 'fn' not described in '__i915_active_fence_init'
../drivers/gpu/drm/i915/i915_active.h:89: warning: Function parameter or member 'active' not described in 'i915_active_fence_set'
../drivers/gpu/drm/i915/i915_active.h:89: warning: Function parameter or member 'rq' not described in 'i915_active_fence_set'
../drivers/gpu/drm/i915/i915_active.h:102: warning: Function parameter or member 'active' not described in 'i915_active_fence_get'
../drivers/gpu/drm/i915/i915_active.h:122: warning: Function parameter or member 'active' not described in 'i915_active_fence_isset'
  HDRTEST drivers/gpu/drm/i915/i915_mitigations.h
  HDRTEST drivers/gpu/drm/i915/i915_mm.h
  HDRTEST drivers/gpu/drm/i915/i915_params.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/uvfn.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/fiji_baco.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ci_baco.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/amd_powerplay.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gpio.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/legacy_dpm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_dpm.o
  HDRTEST drivers/gpu/drm/i915/i915_pci.h
  HDRTEST drivers/gpu/drm/i915/i915_perf.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.o
  HDRTEST drivers/gpu/drm/i915/i915_perf_oa_regs.h
  HDRTEST drivers/gpu/drm/i915/i915_perf_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_smc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf117.o
  HDRTEST drivers/gpu/drm/i915/i915_pmu.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_dpm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_smc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/falcon.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm_internal.o
  HDRTEST drivers/gpu/drm/i915/i915_priolist_types.h
  HDRTEST drivers/gpu/drm/i915/i915_pvinfo.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/xtensa.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crtc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.o
  HDRTEST drivers/gpu/drm/i915/i915_query.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.o
  HDRTEST drivers/gpu/drm/i915/i915_reg.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.o
  HDRTEST drivers/gpu/drm/i915/i915_reg_defs.h
  HDRTEST drivers/gpu/drm/i915/i915_request.h
  HDRTEST drivers/gpu/drm/i915/i915_scatterlist.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.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/nouveau/nvkm/engine/ce/gm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_color.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.o
  HDRTEST drivers/gpu/drm/i915/i915_scheduler.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/dc_fpu.o
  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
../drivers/gpu/drm/i915/i915_pmu.h:21: warning: cannot understand function prototype: 'enum i915_pmu_tracked_events '
../drivers/gpu/drm/i915/i915_pmu.h:32: warning: cannot understand function prototype: 'enum '
../drivers/gpu/drm/i915/i915_pmu.h:41: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
 * How many different events we track in the global PMU mask.
  HDRTEST drivers/gpu/drm/i915/i915_scheduler_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gp102.o
  HDRTEST drivers/gpu/drm/i915/i915_selftest.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_pp_smu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_psr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_hdcp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/conversion.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/fixpt31_32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/vector.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/dc_common.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/ga102.o
../drivers/gpu/drm/i915/i915_scatterlist.h:160: warning: Incorrect use of kernel-doc format:          * release() - Free the memory of the struct i915_refct_sgt
../drivers/gpu/drm/i915/i915_scatterlist.h:164: warning: Function parameter or member 'release' not described in 'i915_refct_sgt_ops'
../drivers/gpu/drm/i915/i915_scatterlist.h:187: warning: Function parameter or member 'rsgt' not described in 'i915_refct_sgt_put'
../drivers/gpu/drm/i915/i915_scatterlist.h:198: warning: Function parameter or member 'rsgt' not described in 'i915_refct_sgt_get'
../drivers/gpu/drm/i915/i915_scatterlist.h:214: warning: Function parameter or member 'rsgt' not described in '__i915_refct_sgt_init'
  HDRTEST drivers/gpu/drm/i915/i915_suspend.h
  HDRTEST drivers/gpu/drm/i915/i915_sw_fence.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_interface.o
  HDRTEST drivers/gpu/drm/i915/i915_sw_fence_work.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table.o
  HDRTEST drivers/gpu/drm/i915/i915_switcheroo.h
../drivers/gpu/drm/i915/i915_request.h:176: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
 * Request queue structure.
../drivers/gpu/drm/i915/i915_request.h:477: warning: This comment starts with '/**', but isn't a kernel-doc comment. Refer Documentation/doc-guide/kernel-doc.rst
 * Returns true if seq1 is later than seq2.
  HDRTEST drivers/gpu/drm/i915/i915_syncmap.h
  HDRTEST drivers/gpu/drm/i915/i915_sysfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_common.o
  HDRTEST drivers/gpu/drm/i915/i915_tasklet.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.o
  HDRTEST drivers/gpu/drm/i915/i915_trace.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/base.o
  HDRTEST drivers/gpu/drm/i915/i915_ttm_buddy_manager.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/pci.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.o
  HDRTEST drivers/gpu/drm/i915/i915_user_extensions.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/user.o
  HDRTEST drivers/gpu/drm/i915/i915_utils.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser2.o
  HDRTEST drivers/gpu/drm/i915/i915_vgpu.h
  HDRTEST drivers/gpu/drm/i915/i915_vma.h
  HDRTEST drivers/gpu/drm/i915/i915_vma_resource.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.o
  HDRTEST drivers/gpu/drm/i915/i915_vma_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce60/command_table_helper_dce60.o
  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/intel_clock_gating.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper_dce112.o
  HDRTEST drivers/gpu/drm/i915/intel_device_info.h
  HDRTEST drivers/gpu/drm/i915/intel_gvt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper2_dce112.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dce_calcs.o
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'OP' not described in '__wait_for'
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'COND' not described in '__wait_for'
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'US' not described in '__wait_for'
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'Wmin' not described in '__wait_for'
../drivers/gpu/drm/i915/i915_utils.h:284: warning: Function parameter or member 'Wmax' not described in '__wait_for'
  HDRTEST drivers/gpu/drm/i915/intel_mchbar_regs.h
  HDRTEST drivers/gpu/drm/i915/intel_memory_region.h
  HDRTEST drivers/gpu/drm/i915/intel_pci_config.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/custom_float.o
  HDRTEST drivers/gpu/drm/i915/intel_pcode.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/bw_fixed.o
  HDRTEST drivers/gpu/drm/i915/intel_region_ttm.h
  HDRTEST drivers/gpu/drm/i915/intel_runtime_pm.h
  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
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.o
  HDRTEST drivers/gpu/drm/i915/intel_sbi.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dml1_display_rq_dlg_calc.o
  HDRTEST drivers/gpu/drm/i915/intel_step.h
  HDRTEST drivers/gpu/drm/i915/intel_uncore.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn10/dcn10_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/dcn20_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_mode_vba.o
  HDRTEST drivers/gpu/drm/i915/intel_wakeref.h
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_tee.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20.o
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_irq.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/head.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.o
../drivers/gpu/drm/i915/i915_vma_resource.h:91: warning: Incorrect use of kernel-doc format:          * struct i915_vma_bindinfo - Information needed for async bind
../drivers/gpu/drm/i915/i915_vma_resource.h:129: warning: Function parameter or member 'wakeref' not described in 'i915_vma_resource'
../drivers/gpu/drm/i915/i915_vma_resource.h:129: warning: Function parameter or member 'bi' not described in 'i915_vma_resource'
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_session.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.o
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_43.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/vga.o
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_cmd.h
../drivers/gpu/drm/i915/i915_vma.h:145: warning: expecting prototype for i915_vma_offset(). Prototype was for i915_vma_size() instead
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp.h
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_types.h
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20v2.o
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_cmn.h
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_huc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20v2.o
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_pm.h
  HDRTEST drivers/gpu/drm/i915/pxp/intel_pxp_cmd_interface_42.h
  HDRTEST drivers/gpu/drm/i915/selftests/igt_live_test.h
  HDRTEST drivers/gpu/drm/i915/selftests/igt_atomic.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.o
  HDRTEST drivers/gpu/drm/i915/selftests/mock_gem_device.h
  HDRTEST drivers/gpu/drm/i915/selftests/mock_drm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.o
  HDRTEST drivers/gpu/drm/i915/selftests/igt_reset.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_rq_dlg_calc_21.o
  HDRTEST drivers/gpu/drm/i915/selftests/intel_scheduler_helpers.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.o
  HDRTEST drivers/gpu/drm/i915/selftests/lib_sw_fence.h
  HDRTEST drivers/gpu/drm/i915/selftests/i915_perf_selftests.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_mode_vba_21.o
  HDRTEST drivers/gpu/drm/i915/selftests/mock_uncore.h
  HDRTEST drivers/gpu/drm/i915/selftests/mock_gtt.h
  HDRTEST drivers/gpu/drm/i915/selftests/i915_mock_selftests.h
  HDRTEST drivers/gpu/drm/i915/selftests/mock_request.h
  HDRTEST drivers/gpu/drm/i915/selftests/i915_random.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/dcn30_fpu.o
  HDRTEST drivers/gpu/drm/i915/selftests/igt_spinner.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_mode_vba_30.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.o
  HDRTEST drivers/gpu/drm/i915/selftests/librapl.h
../drivers/gpu/drm/i915/pxp/intel_pxp_types.h:96: warning: Function parameter or member 'dev_link' not described in 'intel_pxp'
  HDRTEST drivers/gpu/drm/i915/selftests/mock_region.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_rq_dlg_calc_30.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.o
  HDRTEST drivers/gpu/drm/i915/selftests/i915_live_selftests.h
  HDRTEST drivers/gpu/drm/i915/selftests/igt_mmap.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_mode_vba_31.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_rq_dlg_calc_31.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.o
  HDRTEST drivers/gpu/drm/i915/selftests/igt_flush_test.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_rq_dlg_calc_314.o
  HDRTEST drivers/gpu/drm/i915/soc/intel_pch.h
  HDRTEST drivers/gpu/drm/i915/soc/intel_dram.h
  HDRTEST drivers/gpu/drm/i915/soc/intel_gmch.h
  HDRTEST drivers/gpu/drm/i915/vlv_sideband.h
  HDRTEST drivers/gpu/drm/i915/vlv_sideband_reg.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.o
  HDRTEST drivers/gpu/drm/i915/vlv_suspend.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.o
  LD [M]  drivers/gpu/drm/i915/i915.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_rq_dlg_calc_32.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_util_32.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/dcn31_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/dcn32_fpu.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
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn303/dcn303_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/dcn314_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dsc/rc_calc_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calcs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_math.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_auto.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/udisp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce60/dce60_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce100/dce_clk_mgr.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/clk_mgr/dce110/dce110_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce112/dce112_clk_mgr.o
  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/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv1_clk_mgr_vbios_smu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv2_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn20/dcn20_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn201/dcn201_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn21/rn_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/user.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn21/rn_clk_mgr_vbios_smu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn30/dcn30_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn30/dcn30_clk_mgr_smu_msg.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn301/vg_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn301/dcn301_smu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn31/dcn31_smu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.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/nouveau/nvkm/engine/fifo/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/cgrp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/chid.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn314/dcn314_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/runq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn315/dcn315_smu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn315/dcn315_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fif



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

* Re: [Intel-xe] [PATCH v3 01/31] drm/xe/mtl: Disable media GT
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 01/31] drm/xe/mtl: Disable media GT Matt Roper
@ 2023-05-31 13:45   ` Gustavo Sousa
  0 siblings, 0 replies; 42+ messages in thread
From: Gustavo Sousa @ 2023-05-31 13:45 UTC (permalink / raw)
  To: Matt Roper, intel-xe; +Cc: matthew.d.roper, Lucas De Marchi

Quoting Matt Roper (2023-05-30 18:15:19-03:00)
>Xe incorrectly conflates the concept of 'tile' and 'GT.'  Since MTL's
>media support is not yet functioning properly, let's just disable it
>completely for now while we fix the fundamental driver design.  Support
>for media GTs on platforms like MTL will be re-added later.
>
>v2:
> - Drop some unrelated code cleanup that didn't belong in this patch.
>   (Lucas)
>
>Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>Reviewed-by: Matt Atwood <matthew.s.atwood@intel.com>
>Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
>Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
>---
> drivers/gpu/drm/xe/xe_mmio.c |  2 --
> drivers/gpu/drm/xe/xe_pci.c  | 13 +------------
> 2 files changed, 1 insertion(+), 14 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
>index d3b57669c9a7..ef2353eef6fe 100644
>--- a/drivers/gpu/drm/xe/xe_mmio.c
>+++ b/drivers/gpu/drm/xe/xe_mmio.c
>@@ -340,8 +340,6 @@ static void xe_mmio_probe_tiles(struct xe_device *xe)
>         mtcfg = xe_mmio_read64(gt, XEHP_MTCFG_ADDR);
>         adj_tile_count = xe->info.tile_count =
>                 REG_FIELD_GET(TILE_COUNT, mtcfg) + 1;
>-        if (xe->info.media_verx100 >= 1300)
>-                xe->info.tile_count *= 2;
> 
>         drm_info(&xe->drm, "tile_count: %d, adj_tile_count %d\n",
>                  xe->info.tile_count, adj_tile_count);
>diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
>index d8f1213ae1d6..be860f6d0a4f 100644
>--- a/drivers/gpu/drm/xe/xe_pci.c
>+++ b/drivers/gpu/drm/xe/xe_pci.c
>@@ -19,6 +19,7 @@
> #include "xe_device.h"
> #include "xe_display.h"
> #include "xe_drv.h"
>+#include "xe_gt.h"

I'm not sure why we are adding this include here.

--
Gustavo Sousa

> #include "xe_macros.h"
> #include "xe_module.h"
> #include "xe_pci_types.h"
>@@ -290,21 +291,11 @@ static const struct xe_device_desc pvc_desc = {
>         .extra_gts = pvc_gts,
> };
> 
>-static const struct xe_gt_desc xelpmp_gts[] = {
>-        {
>-                .type = XE_GT_TYPE_MEDIA,
>-                .vram_id = 0,
>-                .mmio_adj_limit = 0x40000,
>-                .mmio_adj_offset = 0x380000,
>-        },
>-};
>-
> static const struct xe_device_desc mtl_desc = {
>         /* .graphics and .media determined via GMD_ID */
>         .require_force_probe = true,
>         PLATFORM(XE_METEORLAKE),
>         .has_display = true,
>-        .extra_gts = xelpmp_gts,
> };
> 
> #undef PLATFORM
>@@ -566,8 +557,6 @@ static int xe_info_init(struct xe_device *xe,
>          * treats it as the number of GTs rather than just the number of tiles.
>          */
>         xe->info.tile_count = 1 + graphics_desc->max_remote_tiles;
>-        if (MEDIA_VER(xe) >= 13)
>-                xe->info.tile_count++;
> 
>         for (id = 0; id < xe->info.tile_count; ++id) {
>                 gt = xe->gt + id;
>-- 
>2.40.1
>

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

* Re: [Intel-xe] [PATCH v3 05/31] drm/xe: Add for_each_tile iterator
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 05/31] drm/xe: Add for_each_tile iterator Matt Roper
@ 2023-05-31 14:35   ` Gustavo Sousa
  0 siblings, 0 replies; 42+ messages in thread
From: Gustavo Sousa @ 2023-05-31 14:35 UTC (permalink / raw)
  To: Matt Roper, intel-xe; +Cc: matthew.d.roper, Lucas De Marchi

Quoting Matt Roper (2023-05-30 18:15:23-03:00)
>As we start splitting tile handling out from GT handling, we'll need to
>be able to iterate over tiles separately from GTs.  This iterator will
>be used in upcoming patches.
>
>Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
>Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
>---
> drivers/gpu/drm/xe/xe_device.h | 4 ++++
> drivers/gpu/drm/xe/xe_pci.c    | 3 +--
> 2 files changed, 5 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
>index f7acaf51a1fc..745dbb16d417 100644
>--- a/drivers/gpu/drm/xe/xe_device.h
>+++ b/drivers/gpu/drm/xe/xe_device.h
>@@ -83,6 +83,10 @@ static inline void xe_device_guc_submission_disable(struct xe_device *xe)
>         xe->info.enable_guc = false;
> }
> 
>+#define for_each_tile(tile__, xe__, id__) \
>+        for ((id__) = 0; (id__) < (xe__)->info.tile_count; (id__++)) \

Wouldn't it be safer to use (id__)++ above?

--
Gustavo Sousa

>+                for_each_if ((tile__) = &(xe__)->tiles[(id__)])
>+
> #define for_each_gt(gt__, xe__, id__) \
>         for ((id__) = 0; (id__) < (xe__)->info.tile_count; (id__++)) \
>                 for_each_if ((gt__) = xe_device_get_gt((xe__), (id__)))
>diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
>index 551ba20083b9..91d5dc59aa7e 100644
>--- a/drivers/gpu/drm/xe/xe_pci.c
>+++ b/drivers/gpu/drm/xe/xe_pci.c
>@@ -559,8 +559,7 @@ static int xe_info_init(struct xe_device *xe,
>          */
>         xe->info.tile_count = 1 + graphics_desc->max_remote_tiles;
> 
>-        for (id = 0; id < xe->info.tile_count; ++id) {
>-                tile = &xe->tiles[id];
>+        for_each_tile(tile, xe, id) {
>                 tile->xe = xe;
>                 tile->id = id;
> 
>-- 
>2.40.1
>

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

* Re: [Intel-xe] [PATCH v3 10/31] drm/xe: Move VRAM from GT to tile
       [not found]   ` <168556108480.1068887.9605005606411033865@gjsousa-mobl2>
@ 2023-05-31 21:38     ` Gustavo Sousa
  0 siblings, 0 replies; 42+ messages in thread
From: Gustavo Sousa @ 2023-05-31 21:38 UTC (permalink / raw)
  To: Matt Roper, intel-xe; +Cc: matthew.d.roper, Lucas De Marchi

Quoting Gustavo Sousa (2023-05-31 16:24:44-03:00)
> (...)
> 
>>-static s64 detect_bar2_dgfx(struct xe_gt *gt, struct xe_ttm_stolen_mgr *mgr)
>>+static s64 detect_bar2_dgfx(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr)
>> {
>>-        struct pci_dev *pdev = to_pci_dev(gt_to_xe(gt)->drm.dev);
>>+        struct xe_tile *tile = xe_device_get_root_tile(xe);
>>+        struct xe_gt *mmio = &tile->primary_gt;
>
>Was naming this variable "mmio" intentional here?

Ah okay, I got the intention after reading the explanation in "drm/xe:
Interrupts are delivered per-tile, not per-GT".

--
Gustavo Sousa

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

* Re: [Intel-xe] [PATCH v3 21/31] drm/xe: Interrupts are delivered per-tile, not per-GT
  2023-05-30 21:15 ` [Intel-xe] [PATCH v3 21/31] drm/xe: Interrupts are delivered per-tile, not per-GT Matt Roper
@ 2023-05-31 21:55   ` Gustavo Sousa
  2023-05-31 23:57     ` Matt Roper
  0 siblings, 1 reply; 42+ messages in thread
From: Gustavo Sousa @ 2023-05-31 21:55 UTC (permalink / raw)
  To: Matt Roper, intel-xe; +Cc: matthew.d.roper, Lucas De Marchi

Quoting Matt Roper (2023-05-30 18:15:39-03:00)
>IRQ delivery and handling needs to be handled on a per-tile basis.  Note
>that this is true even for the "GT interrupts" relating to engines and
>GuCs --- the interrupts relating to both GTs get raised through a single
>set of registers in the tile's sgunit range.
>
>On true multi-tile platforms, interrupts on remote tiles are internally
>forwarded to the root tile; the first thing the top-level interrupt
>handler should do is consult the root tile's instance of
>DG1_MSTR_TILE_INTR to determine which tile(s) had interrupts.  This
>register is also responsible for enabling/disabling top-level reporting
>of any interrupts to the OS.  Although this register technically exists
>on all tiles, it should only be used on the root tile.
>
>The (mis)use of struct xe_gt as a target for MMIO operations in the
>driver makes the code somewhat confusing since we wind up needing a GT
>pointer to handle programming that's unrelated to the GT.  To mitigate
>this confusion, all of the xe_gt structures used solely as an MMIO
>target in interrupt code are renamed to 'mmio' so that it's clear that
>the structure being passed does not necessarily relate to any specific
>GT (primary or media) that we might be dealing with interrupts for.
>Reworking the driver's MMIO handling to not be dependent on xe_gt is
>planned as a future patch series.
>
>Note that GT initialization code currently calls xe_gt_irq_postinstall()
>in an attempt to enable the HWE interrupts for the GT being initialized.
>Unfortunately xe_gt_irq_postinstall() doesn't really match its name and
>does a bunch of other stuff unrelated to the GT interrupts (such as
>enabling the top-level device interrupts).  That will be addressed in
>future patches.
>
>v2:
> - Clarify commit message with explanation of why DG1_MSTR_TILE_INTR is
>   only used on the root tile, even though it's an sgunit register that
>   is technically present in each tile's MMIO space.  (Aravind)
> - Also clarify that the xe_gt used as a target for MMIO operations may
>   or may not relate to the GT we're dealing with for interrupts.
>   (Lucas)
>
>Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
>Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
>---
> drivers/gpu/drm/xe/xe_gt.c  |   2 +-
> drivers/gpu/drm/xe/xe_irq.c | 334 ++++++++++++++++++++----------------
> drivers/gpu/drm/xe/xe_irq.h |   4 +-
> 3 files changed, 187 insertions(+), 153 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
>index f00b82e90106..071d4fbd3efc 100644
>--- a/drivers/gpu/drm/xe/xe_gt.c
>+++ b/drivers/gpu/drm/xe/xe_gt.c
>@@ -310,7 +310,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
>         gt->info.engine_mask = gt->info.__engine_mask;
> 
>         /* Enables per hw engine IRQs */
>-        xe_gt_irq_postinstall(gt);
>+        xe_gt_irq_postinstall(gt_to_tile(gt));

Like noted in a previous patch for a similar situation, couldn't we potentially
be repeating this call for the same tile in the future for tiles with multiple
gts?

If my concern is valid, I wonder if there are other cases I didn't catch besides
those two in the overall series.

--
Gustavo Sousa

> 
>         /* Rerun MCR init as we now have hw engine list */
>         xe_gt_mcr_init(gt);
>diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
>index 654c34a5b99a..ad2f73b2a031 100644
>--- a/drivers/gpu/drm/xe/xe_irq.c
>+++ b/drivers/gpu/drm/xe/xe_irq.c
>@@ -27,60 +27,66 @@
> #define IIR(offset)                                XE_REG(offset + 0x8)
> #define IER(offset)                                XE_REG(offset + 0xc)
> 
>-static void assert_iir_is_zero(struct xe_gt *gt, struct xe_reg reg)
>+static void assert_iir_is_zero(struct xe_gt *mmio, struct xe_reg reg)
> {
>-        u32 val = xe_mmio_read32(gt, reg);
>+        u32 val = xe_mmio_read32(mmio, reg);
> 
>         if (val == 0)
>                 return;
> 
>-        drm_WARN(&gt_to_xe(gt)->drm, 1,
>+        drm_WARN(&gt_to_xe(mmio)->drm, 1,
>                  "Interrupt register 0x%x is not zero: 0x%08x\n",
>                  reg.addr, val);
>-        xe_mmio_write32(gt, reg, 0xffffffff);
>-        xe_mmio_read32(gt, reg);
>-        xe_mmio_write32(gt, reg, 0xffffffff);
>-        xe_mmio_read32(gt, reg);
>+        xe_mmio_write32(mmio, reg, 0xffffffff);
>+        xe_mmio_read32(mmio, reg);
>+        xe_mmio_write32(mmio, reg, 0xffffffff);
>+        xe_mmio_read32(mmio, reg);
> }
> 
> /*
>  * Unmask and enable the specified interrupts.  Does not check current state,
>  * so any bits not specified here will become masked and disabled.
>  */
>-static void unmask_and_enable(struct xe_gt *gt, u32 irqregs, u32 bits)
>+static void unmask_and_enable(struct xe_tile *tile, u32 irqregs, u32 bits)
> {
>+        struct xe_gt *mmio = tile->primary_gt;
>+
>         /*
>          * If we're just enabling an interrupt now, it shouldn't already
>          * be raised in the IIR.
>          */
>-        assert_iir_is_zero(gt, IIR(irqregs));
>+        assert_iir_is_zero(mmio, IIR(irqregs));
> 
>-        xe_mmio_write32(gt, IER(irqregs), bits);
>-        xe_mmio_write32(gt, IMR(irqregs), ~bits);
>+        xe_mmio_write32(mmio, IER(irqregs), bits);
>+        xe_mmio_write32(mmio, IMR(irqregs), ~bits);
> 
>         /* Posting read */
>-        xe_mmio_read32(gt, IMR(irqregs));
>+        xe_mmio_read32(mmio, IMR(irqregs));
> }
> 
> /* Mask and disable all interrupts. */
>-static void mask_and_disable(struct xe_gt *gt, u32 irqregs)
>+static void mask_and_disable(struct xe_tile *tile, u32 irqregs)
> {
>-        xe_mmio_write32(gt, IMR(irqregs), ~0);
>+        struct xe_gt *mmio = tile->primary_gt;
>+
>+        xe_mmio_write32(mmio, IMR(irqregs), ~0);
>         /* Posting read */
>-        xe_mmio_read32(gt, IMR(irqregs));
>+        xe_mmio_read32(mmio, IMR(irqregs));
> 
>-        xe_mmio_write32(gt, IER(irqregs), 0);
>+        xe_mmio_write32(mmio, IER(irqregs), 0);
> 
>         /* IIR can theoretically queue up two events. Be paranoid. */
>-        xe_mmio_write32(gt, IIR(irqregs), ~0);
>-        xe_mmio_read32(gt, IIR(irqregs));
>-        xe_mmio_write32(gt, IIR(irqregs), ~0);
>-        xe_mmio_read32(gt, IIR(irqregs));
>+        xe_mmio_write32(mmio, IIR(irqregs), ~0);
>+        xe_mmio_read32(mmio, IIR(irqregs));
>+        xe_mmio_write32(mmio, IIR(irqregs), ~0);
>+        xe_mmio_read32(mmio, IIR(irqregs));
> }
> 
>-static u32 xelp_intr_disable(struct xe_gt *gt)
>+static u32 xelp_intr_disable(struct xe_device *xe)
> {
>-        xe_mmio_write32(gt, GFX_MSTR_IRQ, 0);
>+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
>+
>+        xe_mmio_write32(mmio, GFX_MSTR_IRQ, 0);
> 
>         /*
>          * Now with master disabled, get a sample of level indications
>@@ -88,36 +94,41 @@ static u32 xelp_intr_disable(struct xe_gt *gt)
>          * New indications can and will light up during processing,
>          * and will generate new interrupt after enabling master.
>          */
>-        return xe_mmio_read32(gt, GFX_MSTR_IRQ);
>+        return xe_mmio_read32(mmio, GFX_MSTR_IRQ);
> }
> 
> static u32
>-gu_misc_irq_ack(struct xe_gt *gt, const u32 master_ctl)
>+gu_misc_irq_ack(struct xe_device *xe, const u32 master_ctl)
> {
>+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
>         u32 iir;
> 
>         if (!(master_ctl & GU_MISC_IRQ))
>                 return 0;
> 
>-        iir = xe_mmio_read32(gt, IIR(GU_MISC_IRQ_OFFSET));
>+        iir = xe_mmio_read32(mmio, IIR(GU_MISC_IRQ_OFFSET));
>         if (likely(iir))
>-                xe_mmio_write32(gt, IIR(GU_MISC_IRQ_OFFSET), iir);
>+                xe_mmio_write32(mmio, IIR(GU_MISC_IRQ_OFFSET), iir);
> 
>         return iir;
> }
> 
>-static inline void xelp_intr_enable(struct xe_gt *gt, bool stall)
>+static inline void xelp_intr_enable(struct xe_device *xe, bool stall)
> {
>-        xe_mmio_write32(gt, GFX_MSTR_IRQ, MASTER_IRQ);
>+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
>+
>+        xe_mmio_write32(mmio, GFX_MSTR_IRQ, MASTER_IRQ);
>         if (stall)
>-                xe_mmio_read32(gt, GFX_MSTR_IRQ);
>+                xe_mmio_read32(mmio, GFX_MSTR_IRQ);
> }
> 
>-static void gt_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
>+static void gt_irq_postinstall(struct xe_tile *tile)
> {
>+        struct xe_device *xe = tile_to_xe(tile);
>+        struct xe_gt *mmio = tile->primary_gt;
>         u32 irqs, dmask, smask;
>-        u32 ccs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COMPUTE);
>-        u32 bcs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COPY);
>+        u32 ccs_mask = xe_hw_engine_mask_per_class(tile->primary_gt, XE_ENGINE_CLASS_COMPUTE);
>+        u32 bcs_mask = xe_hw_engine_mask_per_class(tile->primary_gt, XE_ENGINE_CLASS_COPY);
> 
>         if (xe_device_guc_submission_enabled(xe)) {
>                 irqs = GT_RENDER_USER_INTERRUPT |
>@@ -133,57 +144,57 @@ static void gt_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
>         smask = irqs << 16;
> 
>         /* Enable RCS, BCS, VCS and VECS class interrupts. */
>-        xe_mmio_write32(gt, RENDER_COPY_INTR_ENABLE, dmask);
>-        xe_mmio_write32(gt, VCS_VECS_INTR_ENABLE, dmask);
>+        xe_mmio_write32(mmio, RENDER_COPY_INTR_ENABLE, dmask);
>+        xe_mmio_write32(mmio, VCS_VECS_INTR_ENABLE, dmask);
>         if (ccs_mask)
>-                xe_mmio_write32(gt, CCS_RSVD_INTR_ENABLE, smask);
>+                xe_mmio_write32(mmio, CCS_RSVD_INTR_ENABLE, smask);
> 
>         /* Unmask irqs on RCS, BCS, VCS and VECS engines. */
>-        xe_mmio_write32(gt, RCS0_RSVD_INTR_MASK, ~smask);
>-        xe_mmio_write32(gt, BCS_RSVD_INTR_MASK, ~smask);
>+        xe_mmio_write32(mmio, RCS0_RSVD_INTR_MASK, ~smask);
>+        xe_mmio_write32(mmio, BCS_RSVD_INTR_MASK, ~smask);
>         if (bcs_mask & (BIT(1)|BIT(2)))
>-                xe_mmio_write32(gt, XEHPC_BCS1_BCS2_INTR_MASK, ~dmask);
>+                xe_mmio_write32(mmio, XEHPC_BCS1_BCS2_INTR_MASK, ~dmask);
>         if (bcs_mask & (BIT(3)|BIT(4)))
>-                xe_mmio_write32(gt, XEHPC_BCS3_BCS4_INTR_MASK, ~dmask);
>+                xe_mmio_write32(mmio, XEHPC_BCS3_BCS4_INTR_MASK, ~dmask);
>         if (bcs_mask & (BIT(5)|BIT(6)))
>-                xe_mmio_write32(gt, XEHPC_BCS5_BCS6_INTR_MASK, ~dmask);
>+                xe_mmio_write32(mmio, XEHPC_BCS5_BCS6_INTR_MASK, ~dmask);
>         if (bcs_mask & (BIT(7)|BIT(8)))
>-                xe_mmio_write32(gt, XEHPC_BCS7_BCS8_INTR_MASK, ~dmask);
>-        xe_mmio_write32(gt, VCS0_VCS1_INTR_MASK, ~dmask);
>-        xe_mmio_write32(gt, VCS2_VCS3_INTR_MASK, ~dmask);
>-        xe_mmio_write32(gt, VECS0_VECS1_INTR_MASK, ~dmask);
>+                xe_mmio_write32(mmio, XEHPC_BCS7_BCS8_INTR_MASK, ~dmask);
>+        xe_mmio_write32(mmio, VCS0_VCS1_INTR_MASK, ~dmask);
>+        xe_mmio_write32(mmio, VCS2_VCS3_INTR_MASK, ~dmask);
>+        xe_mmio_write32(mmio, VECS0_VECS1_INTR_MASK, ~dmask);
>         if (ccs_mask & (BIT(0)|BIT(1)))
>-                xe_mmio_write32(gt, CCS0_CCS1_INTR_MASK, ~dmask);
>+                xe_mmio_write32(mmio, CCS0_CCS1_INTR_MASK, ~dmask);
>         if (ccs_mask & (BIT(2)|BIT(3)))
>-                xe_mmio_write32(gt,  CCS2_CCS3_INTR_MASK, ~dmask);
>+                xe_mmio_write32(mmio,  CCS2_CCS3_INTR_MASK, ~dmask);
> 
>         /*
>          * RPS interrupts will get enabled/disabled on demand when RPS itself
>          * is enabled/disabled.
>          */
>         /* TODO: gt->pm_ier, gt->pm_imr */
>-        xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_ENABLE, 0);
>-        xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_MASK,  ~0);
>+        xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_ENABLE, 0);
>+        xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_MASK,  ~0);
> 
>         /* Same thing for GuC interrupts */
>-        xe_mmio_write32(gt, GUC_SG_INTR_ENABLE, 0);
>-        xe_mmio_write32(gt, GUC_SG_INTR_MASK,  ~0);
>+        xe_mmio_write32(mmio, GUC_SG_INTR_ENABLE, 0);
>+        xe_mmio_write32(mmio, GUC_SG_INTR_MASK,  ~0);
> }
> 
>-static void xelp_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
>+static void xelp_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
> {
>         /* TODO: PCH */
> 
>-        gt_irq_postinstall(xe, gt);
>+        gt_irq_postinstall(tile);
> 
>-        unmask_and_enable(gt, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
>+        unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
> 
>-        xelp_intr_enable(gt, true);
>+        xelp_intr_enable(xe, true);
> }
> 
> static u32
> gt_engine_identity(struct xe_device *xe,
>-                   struct xe_gt *gt,
>+                   struct xe_gt *mmio,
>                    const unsigned int bank,
>                    const unsigned int bit)
> {
>@@ -192,7 +203,7 @@ gt_engine_identity(struct xe_device *xe,
> 
>         lockdep_assert_held(&xe->irq.lock);
> 
>-        xe_mmio_write32(gt, IIR_REG_SELECTOR(bank), BIT(bit));
>+        xe_mmio_write32(mmio, IIR_REG_SELECTOR(bank), BIT(bit));
> 
>         /*
>          * NB: Specs do not specify how long to spin wait,
>@@ -200,7 +211,7 @@ gt_engine_identity(struct xe_device *xe,
>          */
>         timeout_ts = (local_clock() >> 10) + 100;
>         do {
>-                ident = xe_mmio_read32(gt, INTR_IDENTITY_REG(bank));
>+                ident = xe_mmio_read32(mmio, INTR_IDENTITY_REG(bank));
>         } while (!(ident & INTR_DATA_VALID) &&
>                  !time_after32(local_clock() >> 10, timeout_ts));
> 
>@@ -210,7 +221,7 @@ gt_engine_identity(struct xe_device *xe,
>                 return 0;
>         }
> 
>-        xe_mmio_write32(gt, INTR_IDENTITY_REG(bank), INTR_DATA_VALID);
>+        xe_mmio_write32(mmio, INTR_IDENTITY_REG(bank), INTR_DATA_VALID);
> 
>         return ident;
> }
>@@ -232,10 +243,32 @@ gt_other_irq_handler(struct xe_gt *gt, const u8 instance, const u16 iir)
>         }
> }
> 
>-static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
>+static struct xe_gt *pick_engine_gt(struct xe_tile *tile,
>+                                    enum xe_engine_class class,
>+                                    unsigned int instance)
>+{
>+        struct xe_device *xe = tile_to_xe(tile);
>+
>+        if (MEDIA_VER(xe) < 13)
>+                return tile->primary_gt;
>+
>+        if (class == XE_ENGINE_CLASS_VIDEO_DECODE ||
>+            class == XE_ENGINE_CLASS_VIDEO_ENHANCE)
>+                return tile->media_gt;
>+
>+        if (class == XE_ENGINE_CLASS_OTHER &&
>+            instance == OTHER_MEDIA_GUC_INSTANCE)
>+                return tile->media_gt;
>+
>+        return tile->primary_gt;
>+}
>+
>+static void gt_irq_handler(struct xe_tile *tile,
>                            u32 master_ctl, long unsigned int *intr_dw,
>                            u32 *identity)
> {
>+        struct xe_device *xe = tile_to_xe(tile);
>+        struct xe_gt *mmio = tile->primary_gt;
>         unsigned int bank, bit;
>         u16 instance, intr_vec;
>         enum xe_engine_class class;
>@@ -247,27 +280,26 @@ static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
>                 if (!(master_ctl & GT_DW_IRQ(bank)))
>                         continue;
> 
>-                if (!xe_gt_is_media_type(gt)) {
>-                        intr_dw[bank] =
>-                                xe_mmio_read32(gt, GT_INTR_DW(bank));
>-                        for_each_set_bit(bit, intr_dw + bank, 32)
>-                                identity[bit] = gt_engine_identity(xe, gt,
>-                                                                   bank, bit);
>-                        xe_mmio_write32(gt, GT_INTR_DW(bank),
>-                                        intr_dw[bank]);
>-                }
>+                intr_dw[bank] = xe_mmio_read32(mmio, GT_INTR_DW(bank));
>+                for_each_set_bit(bit, intr_dw + bank, 32)
>+                        identity[bit] = gt_engine_identity(xe, mmio, bank, bit);
>+                xe_mmio_write32(mmio, GT_INTR_DW(bank), intr_dw[bank]);
> 
>                 for_each_set_bit(bit, intr_dw + bank, 32) {
>+                        struct xe_gt *engine_gt;
>+
>                         class = INTR_ENGINE_CLASS(identity[bit]);
>                         instance = INTR_ENGINE_INSTANCE(identity[bit]);
>                         intr_vec = INTR_ENGINE_INTR(identity[bit]);
> 
>+                        engine_gt = pick_engine_gt(tile, class, instance);
>+
>                         if (class == XE_ENGINE_CLASS_OTHER) {
>-                                gt_other_irq_handler(gt, instance, intr_vec);
>+                                gt_other_irq_handler(engine_gt, instance, intr_vec);
>                                 continue;
>                         }
> 
>-                        hwe = xe_gt_hw_engine(gt, class, instance, false);
>+                        hwe = xe_gt_hw_engine(engine_gt, class, instance, false);
>                         if (!hwe)
>                                 continue;
> 
>@@ -285,24 +317,24 @@ static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
> static irqreturn_t xelp_irq_handler(int irq, void *arg)
> {
>         struct xe_device *xe = arg;
>-        struct xe_gt *gt = xe_root_mmio_gt(xe);
>+        struct xe_tile *tile = xe_device_get_root_tile(xe);
>         u32 master_ctl, gu_misc_iir;
>         long unsigned int intr_dw[2];
>         u32 identity[32];
> 
>-        master_ctl = xelp_intr_disable(gt);
>+        master_ctl = xelp_intr_disable(xe);
>         if (!master_ctl) {
>-                xelp_intr_enable(gt, false);
>+                xelp_intr_enable(xe, false);
>                 return IRQ_NONE;
>         }
> 
>-        gt_irq_handler(xe, gt, master_ctl, intr_dw, identity);
>+        gt_irq_handler(tile, master_ctl, intr_dw, identity);
> 
>         xe_display_irq_handler(xe, master_ctl);
> 
>-        gu_misc_iir = gu_misc_irq_ack(gt, master_ctl);
>+        gu_misc_iir = gu_misc_irq_ack(xe, master_ctl);
> 
>-        xelp_intr_enable(gt, false);
>+        xelp_intr_enable(xe, false);
> 
>         xe_display_irq_enable(xe, gu_misc_iir);
> 
>@@ -311,38 +343,38 @@ static irqreturn_t xelp_irq_handler(int irq, void *arg)
> 
> static u32 dg1_intr_disable(struct xe_device *xe)
> {
>-        struct xe_gt *gt = xe_root_mmio_gt(xe);
>+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
>         u32 val;
> 
>         /* First disable interrupts */
>-        xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, 0);
>+        xe_mmio_write32(mmio, DG1_MSTR_TILE_INTR, 0);
> 
>         /* Get the indication levels and ack the master unit */
>-        val = xe_mmio_read32(gt, DG1_MSTR_TILE_INTR);
>+        val = xe_mmio_read32(mmio, DG1_MSTR_TILE_INTR);
>         if (unlikely(!val))
>                 return 0;
> 
>-        xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, val);
>+        xe_mmio_write32(mmio, DG1_MSTR_TILE_INTR, val);
> 
>         return val;
> }
> 
> static void dg1_intr_enable(struct xe_device *xe, bool stall)
> {
>-        struct xe_gt *gt = xe_root_mmio_gt(xe);
>+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
> 
>-        xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, DG1_MSTR_IRQ);
>+        xe_mmio_write32(mmio, DG1_MSTR_TILE_INTR, DG1_MSTR_IRQ);
>         if (stall)
>-                xe_mmio_read32(gt, DG1_MSTR_TILE_INTR);
>+                xe_mmio_read32(mmio, DG1_MSTR_TILE_INTR);
> }
> 
>-static void dg1_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
>+static void dg1_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
> {
>-        gt_irq_postinstall(xe, gt);
>+        gt_irq_postinstall(tile);
> 
>-        unmask_and_enable(gt, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
>+        unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
> 
>-        if (gt->info.id == XE_GT0)
>+        if (tile->id == 0)
>                 dg1_intr_enable(xe, true);
> }
> 
>@@ -354,8 +386,8 @@ static void dg1_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> static irqreturn_t dg1_irq_handler(int irq, void *arg)
> {
>         struct xe_device *xe = arg;
>-        struct xe_gt *gt;
>-        u32 master_tile_ctl, master_ctl = 0, tile0_master_ctl = 0, gu_misc_iir;
>+        struct xe_tile *tile;
>+        u32 master_tile_ctl, master_ctl = 0, gu_misc_iir = 0;
>         long unsigned int intr_dw[2];
>         u32 identity[32];
>         u8 id;
>@@ -368,12 +400,13 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
>                 return IRQ_NONE;
>         }
> 
>-        for_each_gt(gt, xe, id) {
>-                if ((master_tile_ctl & DG1_MSTR_TILE(gt_to_tile(gt)->id)) == 0)
>+        for_each_tile(tile, xe, id) {
>+                struct xe_gt *mmio = tile->primary_gt;
>+
>+                if ((master_tile_ctl & DG1_MSTR_TILE(tile->id)) == 0)
>                         continue;
> 
>-                if (!xe_gt_is_media_type(gt))
>-                        master_ctl = xe_mmio_read32(gt, GFX_MSTR_IRQ);
>+                master_ctl = xe_mmio_read32(mmio, GFX_MSTR_IRQ);
> 
>                 /*
>                  * We might be in irq handler just when PCIe DPC is initiated
>@@ -381,124 +414,125 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
>                  * irq as device is inaccessible.
>                  */
>                 if (master_ctl == REG_GENMASK(31, 0)) {
>-                        dev_dbg(gt_to_xe(gt)->drm.dev,
>+                        dev_dbg(tile_to_xe(tile)->drm.dev,
>                                 "Ignore this IRQ as device might be in DPC containment.\n");
>                         return IRQ_HANDLED;
>                 }
> 
>-                if (!xe_gt_is_media_type(gt))
>-                        xe_mmio_write32(gt, GFX_MSTR_IRQ, master_ctl);
>-                gt_irq_handler(xe, gt, master_ctl, intr_dw, identity);
>+                xe_mmio_write32(mmio, GFX_MSTR_IRQ, master_ctl);
>+
>+                gt_irq_handler(tile, master_ctl, intr_dw, identity);
> 
>                 /*
>-                 * Save primary tile's master interrupt register for display
>-                 * processing below.
>+                 * Display interrupts (including display backlight operations
>+                 * that get reported as Gunit GSE) would only be hooked up to
>+                 * the primary tile.
>                  */
>-                if (id == 0)
>-                        tile0_master_ctl = master_ctl;
>+                if (id == 0) {
>+                        xe_display_irq_handler(xe, master_ctl);
>+                        gu_misc_iir = gu_misc_irq_ack(xe, master_ctl);
>+                }
>         }
> 
>-        xe_display_irq_handler(xe, tile0_master_ctl);
>-
>-        /* Gunit GSE interrupts can trigger display backlight operations */
>-        gu_misc_iir = gu_misc_irq_ack(gt, tile0_master_ctl);
>-
>         dg1_intr_enable(xe, false);
>-
>         xe_display_irq_enable(xe, gu_misc_iir);
> 
>         return IRQ_HANDLED;
> }
> 
>-static void gt_irq_reset(struct xe_gt *gt)
>+static void gt_irq_reset(struct xe_tile *tile)
> {
>-        u32 ccs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COMPUTE);
>-        u32 bcs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COPY);
>+        struct xe_gt *mmio = tile->primary_gt;
>+
>+        u32 ccs_mask = xe_hw_engine_mask_per_class(tile->primary_gt,
>+                                                   XE_ENGINE_CLASS_COMPUTE);
>+        u32 bcs_mask = xe_hw_engine_mask_per_class(tile->primary_gt,
>+                                                   XE_ENGINE_CLASS_COPY);
> 
>         /* Disable RCS, BCS, VCS and VECS class engines. */
>-        xe_mmio_write32(gt, RENDER_COPY_INTR_ENABLE,         0);
>-        xe_mmio_write32(gt, VCS_VECS_INTR_ENABLE,         0);
>+        xe_mmio_write32(mmio, RENDER_COPY_INTR_ENABLE, 0);
>+        xe_mmio_write32(mmio, VCS_VECS_INTR_ENABLE, 0);
>         if (ccs_mask)
>-                xe_mmio_write32(gt, CCS_RSVD_INTR_ENABLE, 0);
>+                xe_mmio_write32(mmio, CCS_RSVD_INTR_ENABLE, 0);
> 
>         /* Restore masks irqs on RCS, BCS, VCS and VECS engines. */
>-        xe_mmio_write32(gt, RCS0_RSVD_INTR_MASK,        ~0);
>-        xe_mmio_write32(gt, BCS_RSVD_INTR_MASK,        ~0);
>+        xe_mmio_write32(mmio, RCS0_RSVD_INTR_MASK,        ~0);
>+        xe_mmio_write32(mmio, BCS_RSVD_INTR_MASK,        ~0);
>         if (bcs_mask & (BIT(1)|BIT(2)))
>-                xe_mmio_write32(gt, XEHPC_BCS1_BCS2_INTR_MASK, ~0);
>+                xe_mmio_write32(mmio, XEHPC_BCS1_BCS2_INTR_MASK, ~0);
>         if (bcs_mask & (BIT(3)|BIT(4)))
>-                xe_mmio_write32(gt, XEHPC_BCS3_BCS4_INTR_MASK, ~0);
>+                xe_mmio_write32(mmio, XEHPC_BCS3_BCS4_INTR_MASK, ~0);
>         if (bcs_mask & (BIT(5)|BIT(6)))
>-                xe_mmio_write32(gt, XEHPC_BCS5_BCS6_INTR_MASK, ~0);
>+                xe_mmio_write32(mmio, XEHPC_BCS5_BCS6_INTR_MASK, ~0);
>         if (bcs_mask & (BIT(7)|BIT(8)))
>-                xe_mmio_write32(gt, XEHPC_BCS7_BCS8_INTR_MASK, ~0);
>-        xe_mmio_write32(gt, VCS0_VCS1_INTR_MASK,        ~0);
>-        xe_mmio_write32(gt, VCS2_VCS3_INTR_MASK,        ~0);
>-        xe_mmio_write32(gt, VECS0_VECS1_INTR_MASK,        ~0);
>+                xe_mmio_write32(mmio, XEHPC_BCS7_BCS8_INTR_MASK, ~0);
>+        xe_mmio_write32(mmio, VCS0_VCS1_INTR_MASK,        ~0);
>+        xe_mmio_write32(mmio, VCS2_VCS3_INTR_MASK,        ~0);
>+        xe_mmio_write32(mmio, VECS0_VECS1_INTR_MASK,        ~0);
>         if (ccs_mask & (BIT(0)|BIT(1)))
>-                xe_mmio_write32(gt, CCS0_CCS1_INTR_MASK, ~0);
>+                xe_mmio_write32(mmio, CCS0_CCS1_INTR_MASK, ~0);
>         if (ccs_mask & (BIT(2)|BIT(3)))
>-                xe_mmio_write32(gt,  CCS2_CCS3_INTR_MASK, ~0);
>+                xe_mmio_write32(mmio,  CCS2_CCS3_INTR_MASK, ~0);
> 
>-        xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_ENABLE, 0);
>-        xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_MASK,  ~0);
>-        xe_mmio_write32(gt, GUC_SG_INTR_ENABLE,         0);
>-        xe_mmio_write32(gt, GUC_SG_INTR_MASK,                ~0);
>+        xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_ENABLE, 0);
>+        xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_MASK,  ~0);
>+        xe_mmio_write32(mmio, GUC_SG_INTR_ENABLE,         0);
>+        xe_mmio_write32(mmio, GUC_SG_INTR_MASK,                ~0);
> }
> 
>-static void xelp_irq_reset(struct xe_gt *gt)
>+static void xelp_irq_reset(struct xe_tile *tile)
> {
>-        xelp_intr_disable(gt);
>+        xelp_intr_disable(tile_to_xe(tile));
> 
>-        gt_irq_reset(gt);
>+        gt_irq_reset(tile);
> 
>-        mask_and_disable(gt, GU_MISC_IRQ_OFFSET);
>-        mask_and_disable(gt, PCU_IRQ_OFFSET);
>+        mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
>+        mask_and_disable(tile, PCU_IRQ_OFFSET);
> }
> 
>-static void dg1_irq_reset(struct xe_gt *gt)
>+static void dg1_irq_reset(struct xe_tile *tile)
> {
>-        if (gt->info.id == 0)
>-                dg1_intr_disable(gt_to_xe(gt));
>+        if (tile->id == 0)
>+                dg1_intr_disable(tile_to_xe(tile));
> 
>-        gt_irq_reset(gt);
>+        gt_irq_reset(tile);
> 
>-        mask_and_disable(gt, GU_MISC_IRQ_OFFSET);
>-        mask_and_disable(gt, PCU_IRQ_OFFSET);
>+        mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
>+        mask_and_disable(tile, PCU_IRQ_OFFSET);
> }
> 
> static void xe_irq_reset(struct xe_device *xe)
> {
>-        struct xe_gt *gt;
>+        struct xe_tile *tile;
>         u8 id;
> 
>-        for_each_gt(gt, xe, id) {
>+        for_each_tile(tile, xe, id) {
>                 if (GRAPHICS_VERx100(xe) >= 1210)
>-                        dg1_irq_reset(gt);
>+                        dg1_irq_reset(tile);
>                 else
>-                        xelp_irq_reset(gt);
>+                        xelp_irq_reset(tile);
>         }
> 
>         xe_display_irq_reset(xe);
> }
> 
>-void xe_gt_irq_postinstall(struct xe_gt *gt)
>+void xe_gt_irq_postinstall(struct xe_tile *tile)
> {
>-        struct xe_device *xe = gt_to_xe(gt);
>+        struct xe_device *xe = tile_to_xe(tile);
> 
>         if (GRAPHICS_VERx100(xe) >= 1210)
>-                dg1_irq_postinstall(xe, gt);
>+                dg1_irq_postinstall(xe, tile);
>         else
>-                xelp_irq_postinstall(xe, gt);
>+                xelp_irq_postinstall(xe, tile);
> }
> 
> static void xe_irq_postinstall(struct xe_device *xe)
> {
>-        struct xe_gt *gt;
>+        struct xe_tile *tile;
>         u8 id;
> 
>-        for_each_gt(gt, xe, id)
>-                xe_gt_irq_postinstall(gt);
>+        for_each_tile(tile, xe, id)
>+                xe_gt_irq_postinstall(tile);
> 
>         xe_display_irq_postinstall(xe, xe_root_mmio_gt(xe));
> }
>diff --git a/drivers/gpu/drm/xe/xe_irq.h b/drivers/gpu/drm/xe/xe_irq.h
>index 34ecf22b32d3..69113c21e1cd 100644
>--- a/drivers/gpu/drm/xe/xe_irq.h
>+++ b/drivers/gpu/drm/xe/xe_irq.h
>@@ -7,10 +7,10 @@
> #define _XE_IRQ_H_
> 
> struct xe_device;
>-struct xe_gt;
>+struct xe_tile;
> 
> int xe_irq_install(struct xe_device *xe);
>-void xe_gt_irq_postinstall(struct xe_gt *gt);
>+void xe_gt_irq_postinstall(struct xe_tile *tile);
> void xe_irq_shutdown(struct xe_device *xe);
> void xe_irq_suspend(struct xe_device *xe);
> void xe_irq_resume(struct xe_device *xe);
>-- 
>2.40.1
>

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

* Re: [Intel-xe] [PATCH v3 14/31] drm/xe: Move migration from GT to tile
       [not found]   ` <168556649753.1068887.14814865037521875125@gjsousa-mobl2>
@ 2023-05-31 23:51     ` Matt Roper
  2023-06-01 15:21       ` Gustavo Sousa
  0 siblings, 1 reply; 42+ messages in thread
From: Matt Roper @ 2023-05-31 23:51 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: Lucas De Marchi, intel-xe

On Wed, May 31, 2023 at 05:54:57PM -0300, Gustavo Sousa wrote:
> Quoting Matt Roper (2023-05-30 18:15:32-03:00)
...
> >diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> >index 74023a5dc8b2..aa047db4c937 100644
> >--- a/drivers/gpu/drm/xe/xe_gt.c
> >+++ b/drivers/gpu/drm/xe/xe_gt.c
...
> >@@ -383,13 +375,13 @@ static int all_fw_domain_init(struct xe_gt *gt)
> >         }
> > 
> >         if (!xe_gt_is_media_type(gt)) {
> >-                gt->migrate = xe_migrate_init(gt);
> >-                if (IS_ERR(gt->migrate)) {
> >-                        err = PTR_ERR(gt->migrate);
> >+                struct xe_tile *tile = gt_to_tile(gt);
> >+
> >+                tile->migrate = xe_migrate_init(tile);
> 
> Couldn't we potentially be calling xe_migrate_init() multiple times for
> the same tile in the future?

This is inside a !xe_gt_is_media_type block, so it will only get called
on the tile's primary GT (i.e., once per tile).  If some third type of
GT ever gets added to tiles in the future we might need changes here
(and a lot of other places), but I don't think anything like that is on
our radar for now.

Although migration is a tile-based concept (memory-centric), we have to
use a blitter engine to perform the copy operations and the engine
itself lives inside the primary GT, so we want to do this init while
we're sure the primary GT is under forcewake.


Matt

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation

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

* Re: [Intel-xe] [PATCH v3 21/31] drm/xe: Interrupts are delivered per-tile, not per-GT
  2023-05-31 21:55   ` Gustavo Sousa
@ 2023-05-31 23:57     ` Matt Roper
  0 siblings, 0 replies; 42+ messages in thread
From: Matt Roper @ 2023-05-31 23:57 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: Lucas De Marchi, intel-xe

On Wed, May 31, 2023 at 06:55:05PM -0300, Gustavo Sousa wrote:
> Quoting Matt Roper (2023-05-30 18:15:39-03:00)
> >IRQ delivery and handling needs to be handled on a per-tile basis.  Note
> >that this is true even for the "GT interrupts" relating to engines and
> >GuCs --- the interrupts relating to both GTs get raised through a single
> >set of registers in the tile's sgunit range.
> >
> >On true multi-tile platforms, interrupts on remote tiles are internally
> >forwarded to the root tile; the first thing the top-level interrupt
> >handler should do is consult the root tile's instance of
> >DG1_MSTR_TILE_INTR to determine which tile(s) had interrupts.  This
> >register is also responsible for enabling/disabling top-level reporting
> >of any interrupts to the OS.  Although this register technically exists
> >on all tiles, it should only be used on the root tile.
> >
> >The (mis)use of struct xe_gt as a target for MMIO operations in the
> >driver makes the code somewhat confusing since we wind up needing a GT
> >pointer to handle programming that's unrelated to the GT.  To mitigate
> >this confusion, all of the xe_gt structures used solely as an MMIO
> >target in interrupt code are renamed to 'mmio' so that it's clear that
> >the structure being passed does not necessarily relate to any specific
> >GT (primary or media) that we might be dealing with interrupts for.
> >Reworking the driver's MMIO handling to not be dependent on xe_gt is
> >planned as a future patch series.
> >
> >Note that GT initialization code currently calls xe_gt_irq_postinstall()
> >in an attempt to enable the HWE interrupts for the GT being initialized.
> >Unfortunately xe_gt_irq_postinstall() doesn't really match its name and
> >does a bunch of other stuff unrelated to the GT interrupts (such as
> >enabling the top-level device interrupts).  That will be addressed in
> >future patches.
> >
> >v2:
> > - Clarify commit message with explanation of why DG1_MSTR_TILE_INTR is
> >   only used on the root tile, even though it's an sgunit register that
> >   is technically present in each tile's MMIO space.  (Aravind)
> > - Also clarify that the xe_gt used as a target for MMIO operations may
> >   or may not relate to the GT we're dealing with for interrupts.
> >   (Lucas)
> >
> >Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> >Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
> >Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
> >---
> > drivers/gpu/drm/xe/xe_gt.c  |   2 +-
> > drivers/gpu/drm/xe/xe_irq.c | 334 ++++++++++++++++++++----------------
> > drivers/gpu/drm/xe/xe_irq.h |   4 +-
> > 3 files changed, 187 insertions(+), 153 deletions(-)
> >
> >diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> >index f00b82e90106..071d4fbd3efc 100644
> >--- a/drivers/gpu/drm/xe/xe_gt.c
> >+++ b/drivers/gpu/drm/xe/xe_gt.c
> >@@ -310,7 +310,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
> >         gt->info.engine_mask = gt->info.__engine_mask;
> > 
> >         /* Enables per hw engine IRQs */
> >-        xe_gt_irq_postinstall(gt);
> >+        xe_gt_irq_postinstall(gt_to_tile(gt));
> 
> Like noted in a previous patch for a similar situation, couldn't we potentially
> be repeating this call for the same tile in the future for tiles with multiple
> gts?

This is a bit different from the other patch.  In the other patch, the
code in question was in a !mediagt section, so it's guaranteed to only
run once per tile (i.e., on the primary GT).

You're right that if this code stayed as-is, it would be problematic for
a multi-GT platform.  However the postinstall stuff gets further
refactoring later in the series ("drm/xe: Replace xe_gt_irq_postinstall
with xe_irq_enable_hwe") and this call is replaced with
xe_irq_enable_hwe(gt) which is refocused on just enabling/unmasking the
subset of engine interrupts that relate to this specific GT.  So by the
time we actually reinstate multiple GT support again, this should all
work properly.


Matt

> 
> If my concern is valid, I wonder if there are other cases I didn't catch besides
> those two in the overall series.
> 
> --
> Gustavo Sousa
> 
> > 
> >         /* Rerun MCR init as we now have hw engine list */
> >         xe_gt_mcr_init(gt);
> >diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
> >index 654c34a5b99a..ad2f73b2a031 100644
> >--- a/drivers/gpu/drm/xe/xe_irq.c
> >+++ b/drivers/gpu/drm/xe/xe_irq.c
> >@@ -27,60 +27,66 @@
> > #define IIR(offset)                                XE_REG(offset + 0x8)
> > #define IER(offset)                                XE_REG(offset + 0xc)
> > 
> >-static void assert_iir_is_zero(struct xe_gt *gt, struct xe_reg reg)
> >+static void assert_iir_is_zero(struct xe_gt *mmio, struct xe_reg reg)
> > {
> >-        u32 val = xe_mmio_read32(gt, reg);
> >+        u32 val = xe_mmio_read32(mmio, reg);
> > 
> >         if (val == 0)
> >                 return;
> > 
> >-        drm_WARN(&gt_to_xe(gt)->drm, 1,
> >+        drm_WARN(&gt_to_xe(mmio)->drm, 1,
> >                  "Interrupt register 0x%x is not zero: 0x%08x\n",
> >                  reg.addr, val);
> >-        xe_mmio_write32(gt, reg, 0xffffffff);
> >-        xe_mmio_read32(gt, reg);
> >-        xe_mmio_write32(gt, reg, 0xffffffff);
> >-        xe_mmio_read32(gt, reg);
> >+        xe_mmio_write32(mmio, reg, 0xffffffff);
> >+        xe_mmio_read32(mmio, reg);
> >+        xe_mmio_write32(mmio, reg, 0xffffffff);
> >+        xe_mmio_read32(mmio, reg);
> > }
> > 
> > /*
> >  * Unmask and enable the specified interrupts.  Does not check current state,
> >  * so any bits not specified here will become masked and disabled.
> >  */
> >-static void unmask_and_enable(struct xe_gt *gt, u32 irqregs, u32 bits)
> >+static void unmask_and_enable(struct xe_tile *tile, u32 irqregs, u32 bits)
> > {
> >+        struct xe_gt *mmio = tile->primary_gt;
> >+
> >         /*
> >          * If we're just enabling an interrupt now, it shouldn't already
> >          * be raised in the IIR.
> >          */
> >-        assert_iir_is_zero(gt, IIR(irqregs));
> >+        assert_iir_is_zero(mmio, IIR(irqregs));
> > 
> >-        xe_mmio_write32(gt, IER(irqregs), bits);
> >-        xe_mmio_write32(gt, IMR(irqregs), ~bits);
> >+        xe_mmio_write32(mmio, IER(irqregs), bits);
> >+        xe_mmio_write32(mmio, IMR(irqregs), ~bits);
> > 
> >         /* Posting read */
> >-        xe_mmio_read32(gt, IMR(irqregs));
> >+        xe_mmio_read32(mmio, IMR(irqregs));
> > }
> > 
> > /* Mask and disable all interrupts. */
> >-static void mask_and_disable(struct xe_gt *gt, u32 irqregs)
> >+static void mask_and_disable(struct xe_tile *tile, u32 irqregs)
> > {
> >-        xe_mmio_write32(gt, IMR(irqregs), ~0);
> >+        struct xe_gt *mmio = tile->primary_gt;
> >+
> >+        xe_mmio_write32(mmio, IMR(irqregs), ~0);
> >         /* Posting read */
> >-        xe_mmio_read32(gt, IMR(irqregs));
> >+        xe_mmio_read32(mmio, IMR(irqregs));
> > 
> >-        xe_mmio_write32(gt, IER(irqregs), 0);
> >+        xe_mmio_write32(mmio, IER(irqregs), 0);
> > 
> >         /* IIR can theoretically queue up two events. Be paranoid. */
> >-        xe_mmio_write32(gt, IIR(irqregs), ~0);
> >-        xe_mmio_read32(gt, IIR(irqregs));
> >-        xe_mmio_write32(gt, IIR(irqregs), ~0);
> >-        xe_mmio_read32(gt, IIR(irqregs));
> >+        xe_mmio_write32(mmio, IIR(irqregs), ~0);
> >+        xe_mmio_read32(mmio, IIR(irqregs));
> >+        xe_mmio_write32(mmio, IIR(irqregs), ~0);
> >+        xe_mmio_read32(mmio, IIR(irqregs));
> > }
> > 
> >-static u32 xelp_intr_disable(struct xe_gt *gt)
> >+static u32 xelp_intr_disable(struct xe_device *xe)
> > {
> >-        xe_mmio_write32(gt, GFX_MSTR_IRQ, 0);
> >+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
> >+
> >+        xe_mmio_write32(mmio, GFX_MSTR_IRQ, 0);
> > 
> >         /*
> >          * Now with master disabled, get a sample of level indications
> >@@ -88,36 +94,41 @@ static u32 xelp_intr_disable(struct xe_gt *gt)
> >          * New indications can and will light up during processing,
> >          * and will generate new interrupt after enabling master.
> >          */
> >-        return xe_mmio_read32(gt, GFX_MSTR_IRQ);
> >+        return xe_mmio_read32(mmio, GFX_MSTR_IRQ);
> > }
> > 
> > static u32
> >-gu_misc_irq_ack(struct xe_gt *gt, const u32 master_ctl)
> >+gu_misc_irq_ack(struct xe_device *xe, const u32 master_ctl)
> > {
> >+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
> >         u32 iir;
> > 
> >         if (!(master_ctl & GU_MISC_IRQ))
> >                 return 0;
> > 
> >-        iir = xe_mmio_read32(gt, IIR(GU_MISC_IRQ_OFFSET));
> >+        iir = xe_mmio_read32(mmio, IIR(GU_MISC_IRQ_OFFSET));
> >         if (likely(iir))
> >-                xe_mmio_write32(gt, IIR(GU_MISC_IRQ_OFFSET), iir);
> >+                xe_mmio_write32(mmio, IIR(GU_MISC_IRQ_OFFSET), iir);
> > 
> >         return iir;
> > }
> > 
> >-static inline void xelp_intr_enable(struct xe_gt *gt, bool stall)
> >+static inline void xelp_intr_enable(struct xe_device *xe, bool stall)
> > {
> >-        xe_mmio_write32(gt, GFX_MSTR_IRQ, MASTER_IRQ);
> >+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
> >+
> >+        xe_mmio_write32(mmio, GFX_MSTR_IRQ, MASTER_IRQ);
> >         if (stall)
> >-                xe_mmio_read32(gt, GFX_MSTR_IRQ);
> >+                xe_mmio_read32(mmio, GFX_MSTR_IRQ);
> > }
> > 
> >-static void gt_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> >+static void gt_irq_postinstall(struct xe_tile *tile)
> > {
> >+        struct xe_device *xe = tile_to_xe(tile);
> >+        struct xe_gt *mmio = tile->primary_gt;
> >         u32 irqs, dmask, smask;
> >-        u32 ccs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COMPUTE);
> >-        u32 bcs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COPY);
> >+        u32 ccs_mask = xe_hw_engine_mask_per_class(tile->primary_gt, XE_ENGINE_CLASS_COMPUTE);
> >+        u32 bcs_mask = xe_hw_engine_mask_per_class(tile->primary_gt, XE_ENGINE_CLASS_COPY);
> > 
> >         if (xe_device_guc_submission_enabled(xe)) {
> >                 irqs = GT_RENDER_USER_INTERRUPT |
> >@@ -133,57 +144,57 @@ static void gt_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> >         smask = irqs << 16;
> > 
> >         /* Enable RCS, BCS, VCS and VECS class interrupts. */
> >-        xe_mmio_write32(gt, RENDER_COPY_INTR_ENABLE, dmask);
> >-        xe_mmio_write32(gt, VCS_VECS_INTR_ENABLE, dmask);
> >+        xe_mmio_write32(mmio, RENDER_COPY_INTR_ENABLE, dmask);
> >+        xe_mmio_write32(mmio, VCS_VECS_INTR_ENABLE, dmask);
> >         if (ccs_mask)
> >-                xe_mmio_write32(gt, CCS_RSVD_INTR_ENABLE, smask);
> >+                xe_mmio_write32(mmio, CCS_RSVD_INTR_ENABLE, smask);
> > 
> >         /* Unmask irqs on RCS, BCS, VCS and VECS engines. */
> >-        xe_mmio_write32(gt, RCS0_RSVD_INTR_MASK, ~smask);
> >-        xe_mmio_write32(gt, BCS_RSVD_INTR_MASK, ~smask);
> >+        xe_mmio_write32(mmio, RCS0_RSVD_INTR_MASK, ~smask);
> >+        xe_mmio_write32(mmio, BCS_RSVD_INTR_MASK, ~smask);
> >         if (bcs_mask & (BIT(1)|BIT(2)))
> >-                xe_mmio_write32(gt, XEHPC_BCS1_BCS2_INTR_MASK, ~dmask);
> >+                xe_mmio_write32(mmio, XEHPC_BCS1_BCS2_INTR_MASK, ~dmask);
> >         if (bcs_mask & (BIT(3)|BIT(4)))
> >-                xe_mmio_write32(gt, XEHPC_BCS3_BCS4_INTR_MASK, ~dmask);
> >+                xe_mmio_write32(mmio, XEHPC_BCS3_BCS4_INTR_MASK, ~dmask);
> >         if (bcs_mask & (BIT(5)|BIT(6)))
> >-                xe_mmio_write32(gt, XEHPC_BCS5_BCS6_INTR_MASK, ~dmask);
> >+                xe_mmio_write32(mmio, XEHPC_BCS5_BCS6_INTR_MASK, ~dmask);
> >         if (bcs_mask & (BIT(7)|BIT(8)))
> >-                xe_mmio_write32(gt, XEHPC_BCS7_BCS8_INTR_MASK, ~dmask);
> >-        xe_mmio_write32(gt, VCS0_VCS1_INTR_MASK, ~dmask);
> >-        xe_mmio_write32(gt, VCS2_VCS3_INTR_MASK, ~dmask);
> >-        xe_mmio_write32(gt, VECS0_VECS1_INTR_MASK, ~dmask);
> >+                xe_mmio_write32(mmio, XEHPC_BCS7_BCS8_INTR_MASK, ~dmask);
> >+        xe_mmio_write32(mmio, VCS0_VCS1_INTR_MASK, ~dmask);
> >+        xe_mmio_write32(mmio, VCS2_VCS3_INTR_MASK, ~dmask);
> >+        xe_mmio_write32(mmio, VECS0_VECS1_INTR_MASK, ~dmask);
> >         if (ccs_mask & (BIT(0)|BIT(1)))
> >-                xe_mmio_write32(gt, CCS0_CCS1_INTR_MASK, ~dmask);
> >+                xe_mmio_write32(mmio, CCS0_CCS1_INTR_MASK, ~dmask);
> >         if (ccs_mask & (BIT(2)|BIT(3)))
> >-                xe_mmio_write32(gt,  CCS2_CCS3_INTR_MASK, ~dmask);
> >+                xe_mmio_write32(mmio,  CCS2_CCS3_INTR_MASK, ~dmask);
> > 
> >         /*
> >          * RPS interrupts will get enabled/disabled on demand when RPS itself
> >          * is enabled/disabled.
> >          */
> >         /* TODO: gt->pm_ier, gt->pm_imr */
> >-        xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_ENABLE, 0);
> >-        xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_MASK,  ~0);
> >+        xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_ENABLE, 0);
> >+        xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_MASK,  ~0);
> > 
> >         /* Same thing for GuC interrupts */
> >-        xe_mmio_write32(gt, GUC_SG_INTR_ENABLE, 0);
> >-        xe_mmio_write32(gt, GUC_SG_INTR_MASK,  ~0);
> >+        xe_mmio_write32(mmio, GUC_SG_INTR_ENABLE, 0);
> >+        xe_mmio_write32(mmio, GUC_SG_INTR_MASK,  ~0);
> > }
> > 
> >-static void xelp_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> >+static void xelp_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
> > {
> >         /* TODO: PCH */
> > 
> >-        gt_irq_postinstall(xe, gt);
> >+        gt_irq_postinstall(tile);
> > 
> >-        unmask_and_enable(gt, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
> >+        unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
> > 
> >-        xelp_intr_enable(gt, true);
> >+        xelp_intr_enable(xe, true);
> > }
> > 
> > static u32
> > gt_engine_identity(struct xe_device *xe,
> >-                   struct xe_gt *gt,
> >+                   struct xe_gt *mmio,
> >                    const unsigned int bank,
> >                    const unsigned int bit)
> > {
> >@@ -192,7 +203,7 @@ gt_engine_identity(struct xe_device *xe,
> > 
> >         lockdep_assert_held(&xe->irq.lock);
> > 
> >-        xe_mmio_write32(gt, IIR_REG_SELECTOR(bank), BIT(bit));
> >+        xe_mmio_write32(mmio, IIR_REG_SELECTOR(bank), BIT(bit));
> > 
> >         /*
> >          * NB: Specs do not specify how long to spin wait,
> >@@ -200,7 +211,7 @@ gt_engine_identity(struct xe_device *xe,
> >          */
> >         timeout_ts = (local_clock() >> 10) + 100;
> >         do {
> >-                ident = xe_mmio_read32(gt, INTR_IDENTITY_REG(bank));
> >+                ident = xe_mmio_read32(mmio, INTR_IDENTITY_REG(bank));
> >         } while (!(ident & INTR_DATA_VALID) &&
> >                  !time_after32(local_clock() >> 10, timeout_ts));
> > 
> >@@ -210,7 +221,7 @@ gt_engine_identity(struct xe_device *xe,
> >                 return 0;
> >         }
> > 
> >-        xe_mmio_write32(gt, INTR_IDENTITY_REG(bank), INTR_DATA_VALID);
> >+        xe_mmio_write32(mmio, INTR_IDENTITY_REG(bank), INTR_DATA_VALID);
> > 
> >         return ident;
> > }
> >@@ -232,10 +243,32 @@ gt_other_irq_handler(struct xe_gt *gt, const u8 instance, const u16 iir)
> >         }
> > }
> > 
> >-static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
> >+static struct xe_gt *pick_engine_gt(struct xe_tile *tile,
> >+                                    enum xe_engine_class class,
> >+                                    unsigned int instance)
> >+{
> >+        struct xe_device *xe = tile_to_xe(tile);
> >+
> >+        if (MEDIA_VER(xe) < 13)
> >+                return tile->primary_gt;
> >+
> >+        if (class == XE_ENGINE_CLASS_VIDEO_DECODE ||
> >+            class == XE_ENGINE_CLASS_VIDEO_ENHANCE)
> >+                return tile->media_gt;
> >+
> >+        if (class == XE_ENGINE_CLASS_OTHER &&
> >+            instance == OTHER_MEDIA_GUC_INSTANCE)
> >+                return tile->media_gt;
> >+
> >+        return tile->primary_gt;
> >+}
> >+
> >+static void gt_irq_handler(struct xe_tile *tile,
> >                            u32 master_ctl, long unsigned int *intr_dw,
> >                            u32 *identity)
> > {
> >+        struct xe_device *xe = tile_to_xe(tile);
> >+        struct xe_gt *mmio = tile->primary_gt;
> >         unsigned int bank, bit;
> >         u16 instance, intr_vec;
> >         enum xe_engine_class class;
> >@@ -247,27 +280,26 @@ static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
> >                 if (!(master_ctl & GT_DW_IRQ(bank)))
> >                         continue;
> > 
> >-                if (!xe_gt_is_media_type(gt)) {
> >-                        intr_dw[bank] =
> >-                                xe_mmio_read32(gt, GT_INTR_DW(bank));
> >-                        for_each_set_bit(bit, intr_dw + bank, 32)
> >-                                identity[bit] = gt_engine_identity(xe, gt,
> >-                                                                   bank, bit);
> >-                        xe_mmio_write32(gt, GT_INTR_DW(bank),
> >-                                        intr_dw[bank]);
> >-                }
> >+                intr_dw[bank] = xe_mmio_read32(mmio, GT_INTR_DW(bank));
> >+                for_each_set_bit(bit, intr_dw + bank, 32)
> >+                        identity[bit] = gt_engine_identity(xe, mmio, bank, bit);
> >+                xe_mmio_write32(mmio, GT_INTR_DW(bank), intr_dw[bank]);
> > 
> >                 for_each_set_bit(bit, intr_dw + bank, 32) {
> >+                        struct xe_gt *engine_gt;
> >+
> >                         class = INTR_ENGINE_CLASS(identity[bit]);
> >                         instance = INTR_ENGINE_INSTANCE(identity[bit]);
> >                         intr_vec = INTR_ENGINE_INTR(identity[bit]);
> > 
> >+                        engine_gt = pick_engine_gt(tile, class, instance);
> >+
> >                         if (class == XE_ENGINE_CLASS_OTHER) {
> >-                                gt_other_irq_handler(gt, instance, intr_vec);
> >+                                gt_other_irq_handler(engine_gt, instance, intr_vec);
> >                                 continue;
> >                         }
> > 
> >-                        hwe = xe_gt_hw_engine(gt, class, instance, false);
> >+                        hwe = xe_gt_hw_engine(engine_gt, class, instance, false);
> >                         if (!hwe)
> >                                 continue;
> > 
> >@@ -285,24 +317,24 @@ static void gt_irq_handler(struct xe_device *xe, struct xe_gt *gt,
> > static irqreturn_t xelp_irq_handler(int irq, void *arg)
> > {
> >         struct xe_device *xe = arg;
> >-        struct xe_gt *gt = xe_root_mmio_gt(xe);
> >+        struct xe_tile *tile = xe_device_get_root_tile(xe);
> >         u32 master_ctl, gu_misc_iir;
> >         long unsigned int intr_dw[2];
> >         u32 identity[32];
> > 
> >-        master_ctl = xelp_intr_disable(gt);
> >+        master_ctl = xelp_intr_disable(xe);
> >         if (!master_ctl) {
> >-                xelp_intr_enable(gt, false);
> >+                xelp_intr_enable(xe, false);
> >                 return IRQ_NONE;
> >         }
> > 
> >-        gt_irq_handler(xe, gt, master_ctl, intr_dw, identity);
> >+        gt_irq_handler(tile, master_ctl, intr_dw, identity);
> > 
> >         xe_display_irq_handler(xe, master_ctl);
> > 
> >-        gu_misc_iir = gu_misc_irq_ack(gt, master_ctl);
> >+        gu_misc_iir = gu_misc_irq_ack(xe, master_ctl);
> > 
> >-        xelp_intr_enable(gt, false);
> >+        xelp_intr_enable(xe, false);
> > 
> >         xe_display_irq_enable(xe, gu_misc_iir);
> > 
> >@@ -311,38 +343,38 @@ static irqreturn_t xelp_irq_handler(int irq, void *arg)
> > 
> > static u32 dg1_intr_disable(struct xe_device *xe)
> > {
> >-        struct xe_gt *gt = xe_root_mmio_gt(xe);
> >+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
> >         u32 val;
> > 
> >         /* First disable interrupts */
> >-        xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, 0);
> >+        xe_mmio_write32(mmio, DG1_MSTR_TILE_INTR, 0);
> > 
> >         /* Get the indication levels and ack the master unit */
> >-        val = xe_mmio_read32(gt, DG1_MSTR_TILE_INTR);
> >+        val = xe_mmio_read32(mmio, DG1_MSTR_TILE_INTR);
> >         if (unlikely(!val))
> >                 return 0;
> > 
> >-        xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, val);
> >+        xe_mmio_write32(mmio, DG1_MSTR_TILE_INTR, val);
> > 
> >         return val;
> > }
> > 
> > static void dg1_intr_enable(struct xe_device *xe, bool stall)
> > {
> >-        struct xe_gt *gt = xe_root_mmio_gt(xe);
> >+        struct xe_gt *mmio = xe_root_mmio_gt(xe);
> > 
> >-        xe_mmio_write32(gt, DG1_MSTR_TILE_INTR, DG1_MSTR_IRQ);
> >+        xe_mmio_write32(mmio, DG1_MSTR_TILE_INTR, DG1_MSTR_IRQ);
> >         if (stall)
> >-                xe_mmio_read32(gt, DG1_MSTR_TILE_INTR);
> >+                xe_mmio_read32(mmio, DG1_MSTR_TILE_INTR);
> > }
> > 
> >-static void dg1_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> >+static void dg1_irq_postinstall(struct xe_device *xe, struct xe_tile *tile)
> > {
> >-        gt_irq_postinstall(xe, gt);
> >+        gt_irq_postinstall(tile);
> > 
> >-        unmask_and_enable(gt, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
> >+        unmask_and_enable(tile, GU_MISC_IRQ_OFFSET, GU_MISC_GSE);
> > 
> >-        if (gt->info.id == XE_GT0)
> >+        if (tile->id == 0)
> >                 dg1_intr_enable(xe, true);
> > }
> > 
> >@@ -354,8 +386,8 @@ static void dg1_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> > static irqreturn_t dg1_irq_handler(int irq, void *arg)
> > {
> >         struct xe_device *xe = arg;
> >-        struct xe_gt *gt;
> >-        u32 master_tile_ctl, master_ctl = 0, tile0_master_ctl = 0, gu_misc_iir;
> >+        struct xe_tile *tile;
> >+        u32 master_tile_ctl, master_ctl = 0, gu_misc_iir = 0;
> >         long unsigned int intr_dw[2];
> >         u32 identity[32];
> >         u8 id;
> >@@ -368,12 +400,13 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
> >                 return IRQ_NONE;
> >         }
> > 
> >-        for_each_gt(gt, xe, id) {
> >-                if ((master_tile_ctl & DG1_MSTR_TILE(gt_to_tile(gt)->id)) == 0)
> >+        for_each_tile(tile, xe, id) {
> >+                struct xe_gt *mmio = tile->primary_gt;
> >+
> >+                if ((master_tile_ctl & DG1_MSTR_TILE(tile->id)) == 0)
> >                         continue;
> > 
> >-                if (!xe_gt_is_media_type(gt))
> >-                        master_ctl = xe_mmio_read32(gt, GFX_MSTR_IRQ);
> >+                master_ctl = xe_mmio_read32(mmio, GFX_MSTR_IRQ);
> > 
> >                 /*
> >                  * We might be in irq handler just when PCIe DPC is initiated
> >@@ -381,124 +414,125 @@ static irqreturn_t dg1_irq_handler(int irq, void *arg)
> >                  * irq as device is inaccessible.
> >                  */
> >                 if (master_ctl == REG_GENMASK(31, 0)) {
> >-                        dev_dbg(gt_to_xe(gt)->drm.dev,
> >+                        dev_dbg(tile_to_xe(tile)->drm.dev,
> >                                 "Ignore this IRQ as device might be in DPC containment.\n");
> >                         return IRQ_HANDLED;
> >                 }
> > 
> >-                if (!xe_gt_is_media_type(gt))
> >-                        xe_mmio_write32(gt, GFX_MSTR_IRQ, master_ctl);
> >-                gt_irq_handler(xe, gt, master_ctl, intr_dw, identity);
> >+                xe_mmio_write32(mmio, GFX_MSTR_IRQ, master_ctl);
> >+
> >+                gt_irq_handler(tile, master_ctl, intr_dw, identity);
> > 
> >                 /*
> >-                 * Save primary tile's master interrupt register for display
> >-                 * processing below.
> >+                 * Display interrupts (including display backlight operations
> >+                 * that get reported as Gunit GSE) would only be hooked up to
> >+                 * the primary tile.
> >                  */
> >-                if (id == 0)
> >-                        tile0_master_ctl = master_ctl;
> >+                if (id == 0) {
> >+                        xe_display_irq_handler(xe, master_ctl);
> >+                        gu_misc_iir = gu_misc_irq_ack(xe, master_ctl);
> >+                }
> >         }
> > 
> >-        xe_display_irq_handler(xe, tile0_master_ctl);
> >-
> >-        /* Gunit GSE interrupts can trigger display backlight operations */
> >-        gu_misc_iir = gu_misc_irq_ack(gt, tile0_master_ctl);
> >-
> >         dg1_intr_enable(xe, false);
> >-
> >         xe_display_irq_enable(xe, gu_misc_iir);
> > 
> >         return IRQ_HANDLED;
> > }
> > 
> >-static void gt_irq_reset(struct xe_gt *gt)
> >+static void gt_irq_reset(struct xe_tile *tile)
> > {
> >-        u32 ccs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COMPUTE);
> >-        u32 bcs_mask = xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_COPY);
> >+        struct xe_gt *mmio = tile->primary_gt;
> >+
> >+        u32 ccs_mask = xe_hw_engine_mask_per_class(tile->primary_gt,
> >+                                                   XE_ENGINE_CLASS_COMPUTE);
> >+        u32 bcs_mask = xe_hw_engine_mask_per_class(tile->primary_gt,
> >+                                                   XE_ENGINE_CLASS_COPY);
> > 
> >         /* Disable RCS, BCS, VCS and VECS class engines. */
> >-        xe_mmio_write32(gt, RENDER_COPY_INTR_ENABLE,         0);
> >-        xe_mmio_write32(gt, VCS_VECS_INTR_ENABLE,         0);
> >+        xe_mmio_write32(mmio, RENDER_COPY_INTR_ENABLE, 0);
> >+        xe_mmio_write32(mmio, VCS_VECS_INTR_ENABLE, 0);
> >         if (ccs_mask)
> >-                xe_mmio_write32(gt, CCS_RSVD_INTR_ENABLE, 0);
> >+                xe_mmio_write32(mmio, CCS_RSVD_INTR_ENABLE, 0);
> > 
> >         /* Restore masks irqs on RCS, BCS, VCS and VECS engines. */
> >-        xe_mmio_write32(gt, RCS0_RSVD_INTR_MASK,        ~0);
> >-        xe_mmio_write32(gt, BCS_RSVD_INTR_MASK,        ~0);
> >+        xe_mmio_write32(mmio, RCS0_RSVD_INTR_MASK,        ~0);
> >+        xe_mmio_write32(mmio, BCS_RSVD_INTR_MASK,        ~0);
> >         if (bcs_mask & (BIT(1)|BIT(2)))
> >-                xe_mmio_write32(gt, XEHPC_BCS1_BCS2_INTR_MASK, ~0);
> >+                xe_mmio_write32(mmio, XEHPC_BCS1_BCS2_INTR_MASK, ~0);
> >         if (bcs_mask & (BIT(3)|BIT(4)))
> >-                xe_mmio_write32(gt, XEHPC_BCS3_BCS4_INTR_MASK, ~0);
> >+                xe_mmio_write32(mmio, XEHPC_BCS3_BCS4_INTR_MASK, ~0);
> >         if (bcs_mask & (BIT(5)|BIT(6)))
> >-                xe_mmio_write32(gt, XEHPC_BCS5_BCS6_INTR_MASK, ~0);
> >+                xe_mmio_write32(mmio, XEHPC_BCS5_BCS6_INTR_MASK, ~0);
> >         if (bcs_mask & (BIT(7)|BIT(8)))
> >-                xe_mmio_write32(gt, XEHPC_BCS7_BCS8_INTR_MASK, ~0);
> >-        xe_mmio_write32(gt, VCS0_VCS1_INTR_MASK,        ~0);
> >-        xe_mmio_write32(gt, VCS2_VCS3_INTR_MASK,        ~0);
> >-        xe_mmio_write32(gt, VECS0_VECS1_INTR_MASK,        ~0);
> >+                xe_mmio_write32(mmio, XEHPC_BCS7_BCS8_INTR_MASK, ~0);
> >+        xe_mmio_write32(mmio, VCS0_VCS1_INTR_MASK,        ~0);
> >+        xe_mmio_write32(mmio, VCS2_VCS3_INTR_MASK,        ~0);
> >+        xe_mmio_write32(mmio, VECS0_VECS1_INTR_MASK,        ~0);
> >         if (ccs_mask & (BIT(0)|BIT(1)))
> >-                xe_mmio_write32(gt, CCS0_CCS1_INTR_MASK, ~0);
> >+                xe_mmio_write32(mmio, CCS0_CCS1_INTR_MASK, ~0);
> >         if (ccs_mask & (BIT(2)|BIT(3)))
> >-                xe_mmio_write32(gt,  CCS2_CCS3_INTR_MASK, ~0);
> >+                xe_mmio_write32(mmio,  CCS2_CCS3_INTR_MASK, ~0);
> > 
> >-        xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_ENABLE, 0);
> >-        xe_mmio_write32(gt, GPM_WGBOXPERF_INTR_MASK,  ~0);
> >-        xe_mmio_write32(gt, GUC_SG_INTR_ENABLE,         0);
> >-        xe_mmio_write32(gt, GUC_SG_INTR_MASK,                ~0);
> >+        xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_ENABLE, 0);
> >+        xe_mmio_write32(mmio, GPM_WGBOXPERF_INTR_MASK,  ~0);
> >+        xe_mmio_write32(mmio, GUC_SG_INTR_ENABLE,         0);
> >+        xe_mmio_write32(mmio, GUC_SG_INTR_MASK,                ~0);
> > }
> > 
> >-static void xelp_irq_reset(struct xe_gt *gt)
> >+static void xelp_irq_reset(struct xe_tile *tile)
> > {
> >-        xelp_intr_disable(gt);
> >+        xelp_intr_disable(tile_to_xe(tile));
> > 
> >-        gt_irq_reset(gt);
> >+        gt_irq_reset(tile);
> > 
> >-        mask_and_disable(gt, GU_MISC_IRQ_OFFSET);
> >-        mask_and_disable(gt, PCU_IRQ_OFFSET);
> >+        mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
> >+        mask_and_disable(tile, PCU_IRQ_OFFSET);
> > }
> > 
> >-static void dg1_irq_reset(struct xe_gt *gt)
> >+static void dg1_irq_reset(struct xe_tile *tile)
> > {
> >-        if (gt->info.id == 0)
> >-                dg1_intr_disable(gt_to_xe(gt));
> >+        if (tile->id == 0)
> >+                dg1_intr_disable(tile_to_xe(tile));
> > 
> >-        gt_irq_reset(gt);
> >+        gt_irq_reset(tile);
> > 
> >-        mask_and_disable(gt, GU_MISC_IRQ_OFFSET);
> >-        mask_and_disable(gt, PCU_IRQ_OFFSET);
> >+        mask_and_disable(tile, GU_MISC_IRQ_OFFSET);
> >+        mask_and_disable(tile, PCU_IRQ_OFFSET);
> > }
> > 
> > static void xe_irq_reset(struct xe_device *xe)
> > {
> >-        struct xe_gt *gt;
> >+        struct xe_tile *tile;
> >         u8 id;
> > 
> >-        for_each_gt(gt, xe, id) {
> >+        for_each_tile(tile, xe, id) {
> >                 if (GRAPHICS_VERx100(xe) >= 1210)
> >-                        dg1_irq_reset(gt);
> >+                        dg1_irq_reset(tile);
> >                 else
> >-                        xelp_irq_reset(gt);
> >+                        xelp_irq_reset(tile);
> >         }
> > 
> >         xe_display_irq_reset(xe);
> > }
> > 
> >-void xe_gt_irq_postinstall(struct xe_gt *gt)
> >+void xe_gt_irq_postinstall(struct xe_tile *tile)
> > {
> >-        struct xe_device *xe = gt_to_xe(gt);
> >+        struct xe_device *xe = tile_to_xe(tile);
> > 
> >         if (GRAPHICS_VERx100(xe) >= 1210)
> >-                dg1_irq_postinstall(xe, gt);
> >+                dg1_irq_postinstall(xe, tile);
> >         else
> >-                xelp_irq_postinstall(xe, gt);
> >+                xelp_irq_postinstall(xe, tile);
> > }
> > 
> > static void xe_irq_postinstall(struct xe_device *xe)
> > {
> >-        struct xe_gt *gt;
> >+        struct xe_tile *tile;
> >         u8 id;
> > 
> >-        for_each_gt(gt, xe, id)
> >-                xe_gt_irq_postinstall(gt);
> >+        for_each_tile(tile, xe, id)
> >+                xe_gt_irq_postinstall(tile);
> > 
> >         xe_display_irq_postinstall(xe, xe_root_mmio_gt(xe));
> > }
> >diff --git a/drivers/gpu/drm/xe/xe_irq.h b/drivers/gpu/drm/xe/xe_irq.h
> >index 34ecf22b32d3..69113c21e1cd 100644
> >--- a/drivers/gpu/drm/xe/xe_irq.h
> >+++ b/drivers/gpu/drm/xe/xe_irq.h
> >@@ -7,10 +7,10 @@
> > #define _XE_IRQ_H_
> > 
> > struct xe_device;
> >-struct xe_gt;
> >+struct xe_tile;
> > 
> > int xe_irq_install(struct xe_device *xe);
> >-void xe_gt_irq_postinstall(struct xe_gt *gt);
> >+void xe_gt_irq_postinstall(struct xe_tile *tile);
> > void xe_irq_shutdown(struct xe_device *xe);
> > void xe_irq_suspend(struct xe_device *xe);
> > void xe_irq_resume(struct xe_device *xe);
> >-- 
> >2.40.1
> >

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation

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

* Re: [Intel-xe] [PATCH v3 14/31] drm/xe: Move migration from GT to tile
  2023-05-31 23:51     ` Matt Roper
@ 2023-06-01 15:21       ` Gustavo Sousa
  0 siblings, 0 replies; 42+ messages in thread
From: Gustavo Sousa @ 2023-06-01 15:21 UTC (permalink / raw)
  To: Matt Roper; +Cc: Lucas De Marchi, intel-xe

Quoting Matt Roper (2023-05-31 20:51:36-03:00)
>On Wed, May 31, 2023 at 05:54:57PM -0300, Gustavo Sousa wrote:
>> Quoting Matt Roper (2023-05-30 18:15:32-03:00)
>...
>> >diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
>> >index 74023a5dc8b2..aa047db4c937 100644
>> >--- a/drivers/gpu/drm/xe/xe_gt.c
>> >+++ b/drivers/gpu/drm/xe/xe_gt.c
>...
>> >@@ -383,13 +375,13 @@ static int all_fw_domain_init(struct xe_gt *gt)
>> >         }
>> > 
>> >         if (!xe_gt_is_media_type(gt)) {
>> >-                gt->migrate = xe_migrate_init(gt);
>> >-                if (IS_ERR(gt->migrate)) {
>> >-                        err = PTR_ERR(gt->migrate);
>> >+                struct xe_tile *tile = gt_to_tile(gt);
>> >+
>> >+                tile->migrate = xe_migrate_init(tile);
>> 
>> Couldn't we potentially be calling xe_migrate_init() multiple times for
>> the same tile in the future?
>
>This is inside a !xe_gt_is_media_type block, so it will only get called
>on the tile's primary GT (i.e., once per tile).  If some third type of
>GT ever gets added to tiles in the future we might need changes here
>(and a lot of other places), but I don't think anything like that is on
>our radar for now.

Okay, got it. Yeah, my concern was for the addition of more non-media GTs.

>
>Although migration is a tile-based concept (memory-centric), we have to
>use a blitter engine to perform the copy operations and the engine
>itself lives inside the primary GT, so we want to do this init while
>we're sure the primary GT is under forcewake.

Alright, thanks for explaining it!

By the way, thanks a lot for the awesome and extensive documentation being added
with this series! It helped me a lot :-)

--
Gustavo Sousa

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

end of thread, other threads:[~2023-06-01 15:22 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-30 21:15 [Intel-xe] [PATCH v3 00/31] Separate GT and tile Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 01/31] drm/xe/mtl: Disable media GT Matt Roper
2023-05-31 13:45   ` Gustavo Sousa
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 02/31] drm/xe: Introduce xe_tile Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 03/31] drm/xe: Add backpointer from gt to tile Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 04/31] fixup! drm/xe: keep pulling mem_access_get further back Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 05/31] drm/xe: Add for_each_tile iterator Matt Roper
2023-05-31 14:35   ` Gustavo Sousa
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 06/31] drm/xe: Move register MMIO into xe_tile Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 07/31] fixup! drm/xe/display: Implement display support Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 08/31] drm/xe: Move GGTT from GT to tile Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 09/31] fixup! drm/xe/display: Implement display support Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 10/31] drm/xe: Move VRAM from GT to tile Matt Roper
     [not found]   ` <168556108480.1068887.9605005606411033865@gjsousa-mobl2>
2023-05-31 21:38     ` Gustavo Sousa
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 11/31] fixup! drm/xe/display: Implement display support Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 12/31] drm/xe: Memory allocations are tile-based, not GT-based Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 13/31] fixup! drm/xe/display: Implement display support Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 14/31] drm/xe: Move migration from GT to tile Matt Roper
     [not found]   ` <168556649753.1068887.14814865037521875125@gjsousa-mobl2>
2023-05-31 23:51     ` Matt Roper
2023-06-01 15:21       ` Gustavo Sousa
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 15/31] drm/xe: Clarify 'gt' retrieval for primary tile Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 16/31] drm/xe: Drop vram_id Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 17/31] drm/xe: Drop extra_gts[] declarations and XE_GT_TYPE_REMOTE Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 18/31] drm/xe: Allocate GT dynamically Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 19/31] drm/xe: Add media GT to tile Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 20/31] drm/xe: Move display IRQ postinstall out of GT function Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 21/31] drm/xe: Interrupts are delivered per-tile, not per-GT Matt Roper
2023-05-31 21:55   ` Gustavo Sousa
2023-05-31 23:57     ` Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 22/31] drm/xe/irq: Handle ASLE backlight interrupts at same time as display Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 23/31] drm/xe/irq: Ensure primary GuC won't clobber media GuC's interrupt mask Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 24/31] drm/xe/irq: Untangle postinstall functions Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 25/31] drm/xe: Replace xe_gt_irq_postinstall with xe_irq_enable_hwe Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 26/31] drm/xe: Invalidate TLB on all affected GTs during GGTT updates Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 27/31] drm/xe/tlb: Obtain forcewake when doing GGTT TLB invalidations Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 28/31] drm/xe: Allow GT looping and lookup on standalone media Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 29/31] drm/xe: Update query uapi to support " Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 30/31] drm/xe: Reinstate media GT support Matt Roper
2023-05-30 21:15 ` [Intel-xe] [PATCH v3 31/31] drm/xe: Add kerneldoc description of multi-tile devices Matt Roper
2023-05-30 21:18 ` [Intel-xe] ✓ CI.Patch_applied: success for Separate GT and tile (rev4) Patchwork
2023-05-30 21:21 ` [Intel-xe] ✓ CI.KUnit: " Patchwork
2023-05-30 21:25 ` [Intel-xe] ✓ CI.Build: " Patchwork

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.