]> git.itanic.dy.fi Git - linux-stable/commitdiff
drm/i915: Parse and set stepping for platforms with GMD
authorJosé Roberto de Souza <jose.souza@intel.com>
Fri, 16 Sep 2022 01:46:47 +0000 (18:46 -0700)
committerRadhakrishna Sripada <radhakrishna.sripada@intel.com>
Sat, 24 Sep 2022 00:37:23 +0000 (17:37 -0700)
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>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220916014648.1310346-3-radhakrishna.sripada@intel.com
drivers/gpu/drm/i915/intel_step.c
drivers/gpu/drm/i915/intel_step.h

index 42b3133d8387aba0330e3e246b6aef8647261df8..91e7c51991b03888ba5b0d639a8dc7a9bb46cc4d 100644 (file)
@@ -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;
index a6b12bfa9744a27a0d4c939f453fd9070598dc5f..96dfca4cba735616f3e289bd94ac8e7992044a98 100644 (file)
 struct drm_i915_private;
 
 struct intel_step_info {
+       /*
+        * It is expected to have 4 number steps per letter. Deviation from
+        * the expectation breaks gmd_to_intel_step().
+        */
        u8 graphics_step;       /* Represents the compute tile on Xe_HPC */
        u8 display_step;
        u8 media_step;
@@ -23,21 +27,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