* 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);
/* 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);
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;
}
/**
* 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) \