drm/xe: Reinstate media GT support
authorMatt Roper <matthew.d.roper@intel.com>
Thu, 1 Jun 2023 21:52:43 +0000 (14:52 -0700)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 19 Dec 2023 23:34:27 +0000 (18:34 -0500)
Now that tiles and GTs are handled separately and other prerequisite
changes are in place, we're ready to re-enable the media GT.

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://lore.kernel.org/r/20230601215244.678611-31-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/regs/xe_gt_regs.h
drivers/gpu/drm/xe/xe_pci.c

index d8b480f69c5f0f5d67329ba60ba76985fa302409..76c09526690ed88fd90e9ed1983275bce337c5ef 100644 (file)
@@ -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)
index abb2f13260079edfd3edaf77a510e20d27c6725a..208dc7a63f88c31b659c07092409a33005741e86 100644 (file)
@@ -545,7 +545,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;