drm/i915/step: Add macro magic for handling steps
authorAnusha Srivatsa <anusha.srivatsa@intel.com>
Wed, 21 Jul 2021 21:52:35 +0000 (14:52 -0700)
committerAnusha Srivatsa <anusha.srivatsa@intel.com>
Thu, 22 Jul 2021 17:18:06 +0000 (10:18 -0700)
With the addition of stepping info for
all platforms, lets use macros for handling them
and autogenerating code for all steps at a time.

Suggested-by: Matt Roper <matthew.d.roper@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Anusha Srivatsa <anusha.srivatsa@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210721215238.24980-1-anusha.srivatsa@intel.com
drivers/gpu/drm/i915/intel_step.c
drivers/gpu/drm/i915/intel_step.h

index 12c92e5..b5fb961 100644 (file)
@@ -210,3 +210,17 @@ void intel_step_init(struct drm_i915_private *i915)
 
        RUNTIME_INFO(i915)->step = step;
 }
+
+#define STEP_NAME_CASE(name)   \
+       case STEP_##name:       \
+               return #name;
+
+const char *intel_step_name(enum intel_step step)
+{
+       switch (step) {
+       STEP_NAME_LIST(STEP_NAME_CASE);
+
+       default:
+               return "**";
+       }
+}
index 41567d9..f6641e2 100644 (file)
@@ -15,31 +15,39 @@ struct intel_step_info {
        u8 display_step;
 };
 
+#define STEP_ENUM_VAL(name)  STEP_##name,
+
+#define STEP_NAME_LIST(func)           \
+       func(A0)                        \
+       func(A1)                        \
+       func(A2)                        \
+       func(B0)                        \
+       func(B1)                        \
+       func(B2)                        \
+       func(C0)                        \
+       func(C1)                        \
+       func(D0)                        \
+       func(D1)                        \
+       func(E0)                        \
+       func(F0)                        \
+       func(G0)                        \
+       func(H0)                        \
+       func(I0)                        \
+       func(I1)                        \
+       func(J0)
+
 /*
  * Symbolic steppings that do not match the hardware. These are valid both as gt
  * and display steppings as symbolic names.
  */
 enum intel_step {
        STEP_NONE = 0,
-       STEP_A0,
-       STEP_A1,
-       STEP_A2,
-       STEP_B0,
-       STEP_B1,
-       STEP_C0,
-       STEP_D0,
-       STEP_D1,
-       STEP_E0,
-       STEP_F0,
-       STEP_G0,
-       STEP_H0,
-       STEP_I0,
-       STEP_I1,
-       STEP_J0,
+       STEP_NAME_LIST(STEP_ENUM_VAL)
        STEP_FUTURE,
        STEP_FOREVER,
 };
 
 void intel_step_init(struct drm_i915_private *i915);
+const char *intel_step_name(enum intel_step step);
 
 #endif /* __INTEL_STEP_H__ */