]> www.infradead.org Git - linux.git/commitdiff
drm/xe/xe3lpm: Add new "instance0" steering table
authorMatt Roper <matthew.d.roper@intel.com>
Tue, 8 Oct 2024 01:35:09 +0000 (18:35 -0700)
committerMatt Roper <matthew.d.roper@intel.com>
Tue, 8 Oct 2024 16:20:53 +0000 (09:20 -0700)
MCR steering on Xe3 media IP is almost the same as it was on Xe2, except
for one new range (0x38D0D0 - 0x38D0FF) which has changed to an MCR
"MEDIAINF" range on Xe3.  Since we can always steer to grpid /
instanceid 0 for MEDIAINF ranges, define a new "INSTANCE0" steering
table for Xe3 media.  Xe3 can continue to use the same OADDRM/GPMXMT
table as Xe2.

v2: Merge continuous entries 38D0D0 - 38F0FF

Bspec: 74298
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241008013509.61233-7-matthew.s.atwood@intel.com
drivers/gpu/drm/xe/xe_gt_mcr.c

index 4c0767403881de0f37da665c702aca30642a4fc0..e21eb6c0fc204738f895455a61486eb0e292618f 100644 (file)
@@ -237,6 +237,17 @@ static const struct xe_mmio_range xe2lpm_instance0_steering_table[] = {
        {},
 };
 
+static const struct xe_mmio_range xe3lpm_instance0_steering_table[] = {
+       { 0x384000, 0x3847DF },         /* GAM, rsvd, GAM */
+       { 0x384900, 0x384AFF },         /* GAM */
+       { 0x389560, 0x3895FF },         /* MEDIAINF */
+       { 0x38B600, 0x38B8FF },         /* L3BANK */
+       { 0x38C800, 0x38D07F },         /* GAM, MEDIAINF */
+       { 0x38D0D0, 0x38F0FF },         /* MEDIAINF, GAM */
+       { 0x393C00, 0x393C7F },         /* MEDIAINF */
+       {},
+};
+
 static void init_steering_l3bank(struct xe_gt *gt)
 {
        struct xe_mmio *mmio = &gt->mmio;
@@ -441,7 +452,10 @@ void xe_gt_mcr_init(struct xe_gt *gt)
        if (gt->info.type == XE_GT_TYPE_MEDIA) {
                drm_WARN_ON(&xe->drm, MEDIA_VER(xe) < 13);
 
-               if (MEDIA_VERx100(xe) >= 1301) {
+               if (MEDIA_VER(xe) >= 30) {
+                       gt->steering[OADDRM].ranges = xe2lpm_gpmxmt_steering_table;
+                       gt->steering[INSTANCE0].ranges = xe3lpm_instance0_steering_table;
+               } else if (MEDIA_VERx100(xe) >= 1301) {
                        gt->steering[OADDRM].ranges = xe2lpm_gpmxmt_steering_table;
                        gt->steering[INSTANCE0].ranges = xe2lpm_instance0_steering_table;
                } else {