Commit 7e9de44e authored by Gustavo Sousa's avatar Gustavo Sousa
Browse files

drm/xe: Modify stepping info directly in xe_step_*_get()



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: default avatarMatt 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: default avatarGustavo Sousa <gustavo.sousa@intel.com>
parent 0e07b163
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -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);
	}

	/*
+30 −22
Original line number Diff line number Diff line
@@ -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,
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)	\
+4 −4
Original line number Diff line number Diff line
@@ -12,8 +12,8 @@

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,
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; }