]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Modify stepping info directly in xe_step_*_get()
authorGustavo Sousa <gustavo.sousa@intel.com>
Tue, 10 Mar 2026 00:42:06 +0000 (21:42 -0300)
committerGustavo Sousa <gustavo.sousa@intel.com>
Tue, 10 Mar 2026 22:18:45 +0000 (19:18 -0300)
In an upcoming change, we will add a member to struct xe_step_info to
represent the platform-level stepping.  As such, we should stop assigning
the value returned by functions xe_step_pre_gmdid_get() and
xe_step_gmdid_get() directly to xe->info.step.

Since there are no other users for those functions, let's simply update
them to modify xe->info.step directly.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patch.msgid.link/20260309-extra-nvl-p-enabling-patches-v5-1-be9c902ee34e@intel.com
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
drivers/gpu/drm/xe/xe_pci.c
drivers/gpu/drm/xe/xe_step.c
drivers/gpu/drm/xe/xe_step.h

index 8bd8d5c9171e77d2ffe33a5b56988b5f76ee3f32..0bb22b69172224178960ad5785a4beca32f2f930 100644 (file)
@@ -913,7 +913,7 @@ static int xe_info_init(struct xe_device *xe,
        if (desc->pre_gmdid_graphics_ip) {
                graphics_ip = desc->pre_gmdid_graphics_ip;
                media_ip = desc->pre_gmdid_media_ip;
-               xe->info.step = xe_step_pre_gmdid_get(xe);
+               xe_step_pre_gmdid_get(xe);
        } else {
                xe_assert(xe, !desc->pre_gmdid_media_ip);
                ret = handle_gmdid(xe, &graphics_ip, &media_ip,
@@ -921,9 +921,7 @@ static int xe_info_init(struct xe_device *xe,
                if (ret)
                        return ret;
 
-               xe->info.step = xe_step_gmdid_get(xe,
-                                                 graphics_gmdid_revid,
-                                                 media_gmdid_revid);
+               xe_step_gmdid_get(xe, graphics_gmdid_revid, media_gmdid_revid);
        }
 
        /*
index 2860986f82f7875d135df257cddd7c0836f64e87..064b604b5b9428125435181a234699a775b20a0f 100644 (file)
@@ -115,15 +115,17 @@ __diag_pop();
  * Convert the PCI revid into proper IP steppings.  This should only be
  * used on platforms that do not have GMD_ID support.
  */
-struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
+void xe_step_pre_gmdid_get(struct xe_device *xe)
 {
        const struct xe_step_info *revids = NULL;
-       struct xe_step_info step = {};
        u16 revid = xe->info.revid;
        int size = 0;
        const int *basedie_info = NULL;
        int basedie_size = 0;
        int baseid = 0;
+       u8 graphics = STEP_NONE;
+       u8 media = STEP_NONE;
+       u8 basedie = STEP_NONE;
 
        if (xe->info.platform == XE_PVC) {
                baseid = FIELD_GET(GENMASK(5, 3), xe->info.revid);
@@ -166,10 +168,12 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
 
        /* Not using the stepping scheme for the platform yet. */
        if (!revids)
-               return step;
+               goto done;
 
        if (revid < size && revids[revid].graphics != STEP_NONE) {
-               step = revids[revid];
+               graphics = revids[revid].graphics;
+               media = revids[revid].media;
+               basedie = revids[revid].basedie;
        } else {
                drm_warn(&xe->drm, "Unknown revid 0x%02x\n", revid);
 
@@ -187,25 +191,30 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
                if (revid < size) {
                        drm_dbg(&xe->drm, "Using steppings for revid 0x%02x\n",
                                revid);
-                       step = revids[revid];
+                       graphics = revids[revid].graphics;
+                       media = revids[revid].media;
+                       basedie = revids[revid].basedie;
                } else {
                        drm_dbg(&xe->drm, "Using future steppings\n");
-                       step.graphics = STEP_FUTURE;
+                       graphics = STEP_FUTURE;
                }
        }
 
-       drm_WARN_ON(&xe->drm, step.graphics == STEP_NONE);
+       drm_WARN_ON(&xe->drm, graphics == STEP_NONE);
 
        if (basedie_info && basedie_size) {
                if (baseid < basedie_size && basedie_info[baseid] != STEP_NONE) {
-                       step.basedie = basedie_info[baseid];
+                       basedie = basedie_info[baseid];
                } else {
                        drm_warn(&xe->drm, "Unknown baseid 0x%02x\n", baseid);
-                       step.basedie = STEP_FUTURE;
+                       basedie = STEP_FUTURE;
                }
        }
 
-       return step;
+done:
+       xe->info.step.graphics = graphics;
+       xe->info.step.media = media;
+       xe->info.step.basedie = basedie;
 }
 
 /**
@@ -220,28 +229,27 @@ struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe)
  * all platforms:  major steppings (A0, B0, etc.) are 4 apart, with minor
  * steppings (A1, A2, etc.) taking the values in between.
  */
-struct xe_step_info xe_step_gmdid_get(struct xe_device *xe,
-                                     u32 graphics_gmdid_revid,
-                                     u32 media_gmdid_revid)
+void xe_step_gmdid_get(struct xe_device *xe,
+                      u32 graphics_gmdid_revid,
+                      u32 media_gmdid_revid)
 {
-       struct xe_step_info step = {
-               .graphics = STEP_A0 + graphics_gmdid_revid,
-               .media = STEP_A0 + media_gmdid_revid,
-       };
+       u8 graphics = STEP_A0 + graphics_gmdid_revid;
+       u8 media = STEP_A0 + media_gmdid_revid;
 
-       if (step.graphics >= STEP_FUTURE) {
-               step.graphics = STEP_FUTURE;
+       if (graphics >= STEP_FUTURE) {
+               graphics = STEP_FUTURE;
                drm_dbg(&xe->drm, "Graphics GMD_ID revid value %d treated as future stepping\n",
                        graphics_gmdid_revid);
        }
 
-       if (step.media >= STEP_FUTURE) {
-               step.media = STEP_FUTURE;
+       if (media >= STEP_FUTURE) {
+               media = STEP_FUTURE;
                drm_dbg(&xe->drm, "Media GMD_ID revid value %d treated as future stepping\n",
                        media_gmdid_revid);
        }
 
-       return step;
+       xe->info.step.graphics = graphics;
+       xe->info.step.media = media;
 }
 
 #define STEP_NAME_CASE(name)   \
index 686cb59200c28cdc75065119d970fec3dadab5c5..6febb7fac476d7bc72ef8faafedaaf6143c8d949 100644 (file)
 
 struct xe_device;
 
-struct xe_step_info xe_step_pre_gmdid_get(struct xe_device *xe);
-struct xe_step_info xe_step_gmdid_get(struct xe_device *xe,
-                                     u32 graphics_gmdid_revid,
-                                     u32 media_gmdid_revid);
+void xe_step_pre_gmdid_get(struct xe_device *xe);
+void xe_step_gmdid_get(struct xe_device *xe,
+                      u32 graphics_gmdid_revid,
+                      u32 media_gmdid_revid);
 static inline u32 xe_step_to_gmdid(enum xe_step step) { return step - STEP_A0; }
 
 const char *xe_step_name(enum xe_step step);