diff mbox series

[v6,2/3] drm/i915: Parse and set stepping for platforms with GMD

Message ID 20220916014648.1310346-3-radhakrishna.sripada@intel.com (mailing list archive)
State New, archived
Headers show
Series Initial Meteorlake Support | expand

Commit Message

Sripada, Radhakrishna Sept. 16, 2022, 1:46 a.m. UTC
From: José Roberto de Souza <jose.souza@intel.com>

Expand the current stepping convention to accommodate the GMD
stepping info. Typically GMD step maps to letter stepping
by "A + step %4" and number to "A + step /4" i.e, GMD step
0 maps to STEP_A0, 1 to _A1, 2 to _A2, 3 to _A3, 4 to STEP_B0...

Future platforms might break this formulae and may require a table
mapping to decode GMD step compatible with the convention.

v2:
 - Pass the updated ip version structure
v3:
 - Skip using GMD to step table(MattR)

Cc: Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
 drivers/gpu/drm/i915/intel_step.c | 25 +++++++++++++++++++++++++
 drivers/gpu/drm/i915/intel_step.h | 24 +++++++++++++++++++++++-
 2 files changed, 48 insertions(+), 1 deletion(-)

Comments

Lucas De Marchi Sept. 23, 2022, 5:45 p.m. UTC | #1
On Thu, Sep 15, 2022 at 06:46:47PM -0700, Radhakrishna Sripada wrote:
>From: José Roberto de Souza <jose.souza@intel.com>
>
>Expand the current stepping convention to accommodate the GMD
>stepping info. Typically GMD step maps to letter stepping
>by "A + step %4" and number to "A + step /4" i.e, GMD step
>0 maps to STEP_A0, 1 to _A1, 2 to _A2, 3 to _A3, 4 to STEP_B0...
>
>Future platforms might break this formulae and may require a table
>mapping to decode GMD step compatible with the convention.
>
>v2:
> - Pass the updated ip version structure
>v3:
> - Skip using GMD to step table(MattR)
>
>Cc: Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>
>Cc: Matt Roper <matthew.d.roper@intel.com>
>Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
>Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
>---
> drivers/gpu/drm/i915/intel_step.c | 25 +++++++++++++++++++++++++
> drivers/gpu/drm/i915/intel_step.h | 24 +++++++++++++++++++++++-
> 2 files changed, 48 insertions(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/i915/intel_step.c b/drivers/gpu/drm/i915/intel_step.c
>index 42b3133d8387..91e7c51991b0 100644
>--- a/drivers/gpu/drm/i915/intel_step.c
>+++ b/drivers/gpu/drm/i915/intel_step.c
>@@ -135,6 +135,19 @@ static const struct intel_step_info adlp_n_revids[] = {
> 	[0x0] = { COMMON_GT_MEDIA_STEP(A0), .display_step = STEP_D0 },
> };
>
>+static u8 gmd_to_intel_step(struct drm_i915_private *i915,
>+			    struct ip_version *gmd)
>+{
>+	u8 step = gmd->step + STEP_A0;
>+
>+	if (step >= STEP_FUTURE) {
>+		drm_dbg(&i915->drm, "Using future steppings\n");
>+		return STEP_FUTURE;
>+	}
>+
>+	return step;
>+}
>+
> static void pvc_step_init(struct drm_i915_private *i915, int pci_revid);
>
> void intel_step_init(struct drm_i915_private *i915)
>@@ -144,6 +157,18 @@ void intel_step_init(struct drm_i915_private *i915)
> 	int revid = INTEL_REVID(i915);
> 	struct intel_step_info step = {};
>
>+	if (HAS_GMD_ID(i915)) {
>+		step.graphics_step = gmd_to_intel_step(i915,
>+						       &RUNTIME_INFO(i915)->graphics.ip);
>+		step.media_step = gmd_to_intel_step(i915,
>+						    &RUNTIME_INFO(i915)->media.ip);
>+		step.display_step = gmd_to_intel_step(i915,
>+						      &RUNTIME_INFO(i915)->display.ip);
>+		RUNTIME_INFO(i915)->step = step;
>+
>+		return;
>+	}
>+
> 	if (IS_PONTEVECCHIO(i915)) {
> 		pvc_step_init(i915, revid);
> 		return;
>diff --git a/drivers/gpu/drm/i915/intel_step.h b/drivers/gpu/drm/i915/intel_step.h
>index a6b12bfa9744..57b9928ddca6 100644
>--- a/drivers/gpu/drm/i915/intel_step.h
>+++ b/drivers/gpu/drm/i915/intel_step.h
>@@ -23,21 +23,43 @@ struct intel_step_info {

missing comment in this struct that it's expected to have 4 number steps
per letter. I don't want someone to add a stepping B4 in future without
realizing that will render gmd_to_intel_step()  invalid


with that added: Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>

Lucas De Marchi
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/intel_step.c b/drivers/gpu/drm/i915/intel_step.c
index 42b3133d8387..91e7c51991b0 100644
--- a/drivers/gpu/drm/i915/intel_step.c
+++ b/drivers/gpu/drm/i915/intel_step.c
@@ -135,6 +135,19 @@  static const struct intel_step_info adlp_n_revids[] = {
 	[0x0] = { COMMON_GT_MEDIA_STEP(A0), .display_step = STEP_D0 },
 };
 
+static u8 gmd_to_intel_step(struct drm_i915_private *i915,
+			    struct ip_version *gmd)
+{
+	u8 step = gmd->step + STEP_A0;
+
+	if (step >= STEP_FUTURE) {
+		drm_dbg(&i915->drm, "Using future steppings\n");
+		return STEP_FUTURE;
+	}
+
+	return step;
+}
+
 static void pvc_step_init(struct drm_i915_private *i915, int pci_revid);
 
 void intel_step_init(struct drm_i915_private *i915)
@@ -144,6 +157,18 @@  void intel_step_init(struct drm_i915_private *i915)
 	int revid = INTEL_REVID(i915);
 	struct intel_step_info step = {};
 
+	if (HAS_GMD_ID(i915)) {
+		step.graphics_step = gmd_to_intel_step(i915,
+						       &RUNTIME_INFO(i915)->graphics.ip);
+		step.media_step = gmd_to_intel_step(i915,
+						    &RUNTIME_INFO(i915)->media.ip);
+		step.display_step = gmd_to_intel_step(i915,
+						      &RUNTIME_INFO(i915)->display.ip);
+		RUNTIME_INFO(i915)->step = step;
+
+		return;
+	}
+
 	if (IS_PONTEVECCHIO(i915)) {
 		pvc_step_init(i915, revid);
 		return;
diff --git a/drivers/gpu/drm/i915/intel_step.h b/drivers/gpu/drm/i915/intel_step.h
index a6b12bfa9744..57b9928ddca6 100644
--- a/drivers/gpu/drm/i915/intel_step.h
+++ b/drivers/gpu/drm/i915/intel_step.h
@@ -23,21 +23,43 @@  struct intel_step_info {
 	func(A0)			\
 	func(A1)			\
 	func(A2)			\
+	func(A3)			\
 	func(B0)			\
 	func(B1)			\
 	func(B2)			\
 	func(B3)			\
 	func(C0)			\
 	func(C1)			\
+	func(C2)			\
+	func(C3)			\
 	func(D0)			\
 	func(D1)			\
+	func(D2)			\
+	func(D3)			\
 	func(E0)			\
+	func(E1)			\
+	func(E2)			\
+	func(E3)			\
 	func(F0)			\
+	func(F1)			\
+	func(F2)			\
+	func(F3)			\
 	func(G0)			\
+	func(G1)			\
+	func(G2)			\
+	func(G3)			\
 	func(H0)			\
+	func(H1)			\
+	func(H2)			\
+	func(H3)			\
 	func(I0)			\
 	func(I1)			\
-	func(J0)
+	func(I2)			\
+	func(I3)			\
+	func(J0)			\
+	func(J1)			\
+	func(J2)			\
+	func(J3)
 
 /*
  * Symbolic steppings that do not match the hardware. These are valid both as gt