From: Ville Syrjälä <ville.syrj...@linux.intel.com>

Convert the get_buf_trans() functions into an encoder vfunc.
Allows us to get rid of bunch of platform if-ladders.

Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_crt.c      |  3 +
 drivers/gpu/drm/i915/display/intel_ddi.c      | 56 +++------------
 .../drm/i915/display/intel_ddi_buf_trans.c    | 68 +++++++++++--------
 .../drm/i915/display/intel_ddi_buf_trans.h    | 39 +----------
 .../drm/i915/display/intel_display_types.h    |  4 ++
 drivers/gpu/drm/i915/display/intel_fdi.c      |  3 +-
 6 files changed, 59 insertions(+), 114 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_crt.c 
b/drivers/gpu/drm/i915/display/intel_crt.c
index c85092eaa5c2..42da2e35bc7c 100644
--- a/drivers/gpu/drm/i915/display/intel_crt.c
+++ b/drivers/gpu/drm/i915/display/intel_crt.c
@@ -37,6 +37,7 @@
 #include "intel_connector.h"
 #include "intel_crt.h"
 #include "intel_ddi.h"
+#include "intel_ddi_buf_trans.h"
 #include "intel_display_types.h"
 #include "intel_fdi.h"
 #include "intel_fifo_underrun.h"
@@ -1079,6 +1080,8 @@ void intel_crt_init(struct drm_i915_private *dev_priv)
                crt->base.enable_clock = hsw_ddi_enable_clock;
                crt->base.disable_clock = hsw_ddi_disable_clock;
                crt->base.is_clock_enabled = hsw_ddi_is_clock_enabled;
+
+               intel_ddi_buf_trans_init(&crt->base);
        } else {
                if (HAS_PCH_SPLIT(dev_priv)) {
                        crt->base.compute_config = pch_crt_compute_config;
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c 
b/drivers/gpu/drm/i915/display/intel_ddi.c
index 5ac31bd13b3e..906fea249eaf 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -102,8 +102,7 @@ void hsw_prepare_dp_ddi_buffers(struct intel_encoder 
*encoder,
        enum port port = encoder->port;
        const struct intel_ddi_buf_trans *ddi_translations;
 
-       ddi_translations = hsw_get_buf_trans(encoder, crtc_state, &n_entries);
-
+       ddi_translations = encoder->get_buf_trans(encoder, crtc_state, 
&n_entries);
        if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
                return;
 
@@ -135,8 +134,7 @@ static void hsw_prepare_hdmi_ddi_buffers(struct 
intel_encoder *encoder,
        enum port port = encoder->port;
        const struct intel_ddi_buf_trans *ddi_translations;
 
-       ddi_translations = hsw_get_buf_trans(encoder, crtc_state,  &n_entries);
-
+       ddi_translations = encoder->get_buf_trans(encoder, crtc_state, 
&n_entries);
        if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
                return;
        if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -911,8 +909,7 @@ static void skl_ddi_set_iboost(struct intel_encoder 
*encoder,
                const struct intel_ddi_buf_trans *ddi_translations;
                int n_entries;
 
-               ddi_translations = hsw_get_buf_trans(encoder, crtc_state, 
&n_entries);
-
+               ddi_translations = encoder->get_buf_trans(encoder, crtc_state, 
&n_entries);
                if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
                        return;
                if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -942,7 +939,7 @@ static void bxt_ddi_vswing_sequence(struct intel_encoder 
*encoder,
        enum port port = encoder->port;
        int n_entries;
 
-       ddi_translations = bxt_get_buf_trans(encoder, crtc_state, &n_entries);
+       ddi_translations = encoder->get_buf_trans(encoder, crtc_state, 
&n_entries);
        if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
                return;
        if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -960,31 +957,9 @@ static u8 intel_ddi_dp_voltage_max(struct intel_dp 
*intel_dp,
 {
        struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
        struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-       enum port port = encoder->port;
-       enum phy phy = intel_port_to_phy(dev_priv, port);
        int n_entries;
 
-       if (DISPLAY_VER(dev_priv) >= 12) {
-               if (intel_phy_is_combo(dev_priv, phy))
-                       tgl_get_combo_buf_trans(encoder, crtc_state, 
&n_entries);
-               else
-                       tgl_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
-       } else if (DISPLAY_VER(dev_priv) == 11) {
-               if (IS_PLATFORM(dev_priv, INTEL_JASPERLAKE))
-                       jsl_get_combo_buf_trans(encoder, crtc_state, 
&n_entries);
-               else if (IS_PLATFORM(dev_priv, INTEL_ELKHARTLAKE))
-                       ehl_get_combo_buf_trans(encoder, crtc_state, 
&n_entries);
-               else if (intel_phy_is_combo(dev_priv, phy))
-                       icl_get_combo_buf_trans(encoder, crtc_state, 
&n_entries);
-               else
-                       icl_get_mg_buf_trans(encoder, crtc_state, &n_entries);
-       } else if (IS_CANNONLAKE(dev_priv)) {
-               cnl_get_buf_trans(encoder, crtc_state, &n_entries);
-       } else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) {
-               bxt_get_buf_trans(encoder, crtc_state, &n_entries);
-       } else {
-               hsw_get_buf_trans(encoder, crtc_state, &n_entries);
-       }
+       encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 
        if (drm_WARN_ON(&dev_priv->drm, n_entries < 1))
                n_entries = 1;
@@ -1016,8 +991,7 @@ static void cnl_ddi_vswing_program(struct intel_encoder 
*encoder,
        int n_entries, ln;
        u32 val;
 
-       ddi_translations = cnl_get_buf_trans(encoder, crtc_state, &n_entries);
-
+       ddi_translations = encoder->get_buf_trans(encoder, crtc_state, 
&n_entries);
        if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
                return;
        if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -1137,15 +1111,7 @@ static void icl_ddi_combo_vswing_program(struct 
intel_encoder *encoder,
        int n_entries, ln;
        u32 val;
 
-       if (DISPLAY_VER(dev_priv) >= 12)
-               ddi_translations = tgl_get_combo_buf_trans(encoder, crtc_state, 
&n_entries);
-       else if (IS_PLATFORM(dev_priv, INTEL_JASPERLAKE))
-               ddi_translations = jsl_get_combo_buf_trans(encoder, crtc_state, 
&n_entries);
-       else if (IS_PLATFORM(dev_priv, INTEL_ELKHARTLAKE))
-               ddi_translations = ehl_get_combo_buf_trans(encoder, crtc_state, 
&n_entries);
-       else
-               ddi_translations = icl_get_combo_buf_trans(encoder, crtc_state, 
&n_entries);
-
+       ddi_translations = encoder->get_buf_trans(encoder, crtc_state, 
&n_entries);
        if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
                return;
        if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -1272,8 +1238,7 @@ static void icl_mg_phy_ddi_vswing_sequence(struct 
intel_encoder *encoder,
        if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)
                return;
 
-       ddi_translations = icl_get_mg_buf_trans(encoder, crtc_state, 
&n_entries);
-
+       ddi_translations = encoder->get_buf_trans(encoder, crtc_state, 
&n_entries);
        if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
                return;
        if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -1410,8 +1375,7 @@ tgl_dkl_phy_ddi_vswing_sequence(struct intel_encoder 
*encoder,
        if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)
                return;
 
-       ddi_translations = tgl_get_dkl_buf_trans(encoder, crtc_state, 
&n_entries);
-
+       ddi_translations = encoder->get_buf_trans(encoder, crtc_state, 
&n_entries);
        if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
                return;
        if (drm_WARN_ON_ONCE(&dev_priv->drm, level >= n_entries))
@@ -4590,6 +4554,8 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, 
enum port port)
                encoder->get_config = hsw_ddi_get_config;
        }
 
+       intel_ddi_buf_trans_init(encoder);
+
        if (IS_DG1(dev_priv))
                encoder->hpd_pin = dg1_hpd_pin(dev_priv, port);
        else if (IS_ROCKETLAKE(dev_priv))
diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c 
b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
index 7574d6390a39..37a9c3b2c03c 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
@@ -1207,7 +1207,7 @@ hsw_get_buf_trans_hdmi(struct intel_encoder *encoder,
        return NULL;
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 hsw_get_buf_trans(struct intel_encoder *encoder,
                  const struct intel_crtc_state *crtc_state,
                  int *n_entries)
@@ -1247,7 +1247,7 @@ bxt_get_buf_trans_hdmi(struct intel_encoder *encoder, int 
*n_entries)
        return intel_get_buf_trans(&bxt_ddi_translations_hdmi, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 bxt_get_buf_trans(struct intel_encoder *encoder,
                  const struct intel_crtc_state *crtc_state,
                  int *n_entries)
@@ -1329,7 +1329,7 @@ cnl_get_buf_trans_edp(struct intel_encoder *encoder, int 
*n_entries)
        }
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 cnl_get_buf_trans(struct intel_encoder *encoder,
                  const struct intel_crtc_state *crtc_state,
                  int *n_entries)
@@ -1383,7 +1383,7 @@ icl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
        return icl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 icl_get_combo_buf_trans(struct intel_encoder *encoder,
                        const struct intel_crtc_state *crtc_state,
                        int *n_entries)
@@ -1419,7 +1419,7 @@ icl_get_mg_buf_trans_dp(struct intel_encoder *encoder,
        }
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 icl_get_mg_buf_trans(struct intel_encoder *encoder,
                     const struct intel_crtc_state *crtc_state,
                     int *n_entries)
@@ -1463,7 +1463,7 @@ ehl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
        return ehl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 ehl_get_combo_buf_trans(struct intel_encoder *encoder,
                        const struct intel_crtc_state *crtc_state,
                        int *n_entries)
@@ -1514,7 +1514,7 @@ jsl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
        return jsl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 jsl_get_combo_buf_trans(struct intel_encoder *encoder,
                        const struct intel_crtc_state *crtc_state,
                        int *n_entries)
@@ -1587,7 +1587,7 @@ tgl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
        return tgl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 tgl_get_combo_buf_trans(struct intel_encoder *encoder,
                        const struct intel_crtc_state *crtc_state,
                        int *n_entries)
@@ -1623,7 +1623,7 @@ tgl_get_dkl_buf_trans_dp(struct intel_encoder *encoder,
        }
 }
 
-const struct intel_ddi_buf_trans *
+static const struct intel_ddi_buf_trans *
 tgl_get_dkl_buf_trans(struct intel_encoder *encoder,
                      const struct intel_crtc_state *crtc_state,
                      int *n_entries)
@@ -1639,28 +1639,10 @@ int intel_ddi_hdmi_num_entries(struct intel_encoder 
*encoder,
                               int *default_entry)
 {
        struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-       enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
-       const struct intel_ddi_buf_trans *ddi_translations = NULL;
+       const struct intel_ddi_buf_trans *ddi_translations;
        int n_entries;
 
-       if (DISPLAY_VER(dev_priv) >= 12) {
-               if (intel_phy_is_combo(dev_priv, phy))
-                       ddi_translations = 
tgl_get_combo_buf_trans_hdmi(encoder, crtc_state, &n_entries);
-               else
-                       ddi_translations = tgl_get_dkl_buf_trans_hdmi(encoder, 
crtc_state, &n_entries);
-       } else if (DISPLAY_VER(dev_priv) == 11) {
-               if (intel_phy_is_combo(dev_priv, phy))
-                       ddi_translations = 
icl_get_combo_buf_trans_hdmi(encoder, crtc_state, &n_entries);
-               else
-                       ddi_translations = icl_get_mg_buf_trans_hdmi(encoder, 
crtc_state, &n_entries);
-       } else if (IS_CANNONLAKE(dev_priv)) {
-               ddi_translations = cnl_get_buf_trans_hdmi(encoder, &n_entries);
-       } else if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv)) {
-               ddi_translations = bxt_get_buf_trans_hdmi(encoder, &n_entries);
-       } else if (DISPLAY_VER(dev_priv) == 9 ||
-                  IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) {
-               ddi_translations = hsw_get_buf_trans_hdmi(encoder, &n_entries);
-       }
+       ddi_translations = encoder->get_buf_trans(encoder, crtc_state, 
&n_entries);
 
        if (drm_WARN_ON(&dev_priv->drm, !ddi_translations)) {
                *default_entry = 0;
@@ -1671,3 +1653,31 @@ int intel_ddi_hdmi_num_entries(struct intel_encoder 
*encoder,
 
        return n_entries;
 }
+
+void intel_ddi_buf_trans_init(struct intel_encoder *encoder)
+{
+       struct drm_i915_private *i915 = to_i915(encoder->base.dev);
+       enum phy phy = intel_port_to_phy(i915, encoder->port);
+
+       if (DISPLAY_VER(i915) >= 12) {
+               if (intel_phy_is_combo(i915, phy))
+                       encoder->get_buf_trans = tgl_get_combo_buf_trans;
+               else
+                       encoder->get_buf_trans = tgl_get_dkl_buf_trans;
+       } else if (DISPLAY_VER(i915) == 11) {
+               if (IS_PLATFORM(i915, INTEL_JASPERLAKE))
+                       encoder->get_buf_trans = jsl_get_combo_buf_trans;
+               else if (IS_PLATFORM(i915, INTEL_ELKHARTLAKE))
+                       encoder->get_buf_trans = ehl_get_combo_buf_trans;
+               else if (intel_phy_is_combo(i915, phy))
+                       encoder->get_buf_trans = icl_get_combo_buf_trans;
+               else
+                       encoder->get_buf_trans = icl_get_mg_buf_trans;
+       } else if (IS_CANNONLAKE(i915)) {
+               encoder->get_buf_trans = cnl_get_buf_trans;
+       } else if (IS_GEMINILAKE(i915) || IS_BROXTON(i915)) {
+               encoder->get_buf_trans = bxt_get_buf_trans;
+       } else {
+               encoder->get_buf_trans = hsw_get_buf_trans;
+       }
+}
diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h 
b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
index 940140e64c76..5f46af36794b 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
+++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
@@ -65,44 +65,7 @@ int intel_ddi_hdmi_num_entries(struct intel_encoder *encoder,
                               const struct intel_crtc_state *crtc_state,
                               int *default_entry);
 
-const struct intel_ddi_buf_trans *
-hsw_get_buf_trans(struct intel_encoder *encoder,
-                 const struct intel_crtc_state *crtc_state,
-                 int *n_entries);
+void intel_ddi_buf_trans_init(struct intel_encoder *encoder);
 
-const struct intel_ddi_buf_trans *
-bxt_get_buf_trans(struct intel_encoder *encoder,
-                 const struct intel_crtc_state *crtc_state,
-                 int *n_entries);
-
-const struct intel_ddi_buf_trans *
-tgl_get_combo_buf_trans(struct intel_encoder *encoder,
-                       const struct intel_crtc_state *crtc_state,
-                       int *n_entries);
-const struct intel_ddi_buf_trans *
-tgl_get_dkl_buf_trans(struct intel_encoder *encoder,
-                     const struct intel_crtc_state *crtc_state,
-                     int *n_entries);
-const struct intel_ddi_buf_trans *
-jsl_get_combo_buf_trans(struct intel_encoder *encoder,
-                       const struct intel_crtc_state *crtc_state,
-                       int *n_entries);
-const struct intel_ddi_buf_trans *
-ehl_get_combo_buf_trans(struct intel_encoder *encoder,
-                       const struct intel_crtc_state *crtc_state,
-                       int *n_entries);
-const struct intel_ddi_buf_trans *
-icl_get_combo_buf_trans(struct intel_encoder *encoder,
-                       const struct intel_crtc_state *crtc_state,
-                       int *n_entries);
-const struct intel_ddi_buf_trans *
-icl_get_mg_buf_trans(struct intel_encoder *encoder,
-                    const struct intel_crtc_state *crtc_state,
-                    int *n_entries);
-
-const struct intel_ddi_buf_trans *
-cnl_get_buf_trans(struct intel_encoder *encoder,
-                 const struct intel_crtc_state *crtc_state,
-                 int *n_entries);
 
 #endif
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index e2e707c4dff5..3451d7d6570d 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -49,6 +49,7 @@
 
 struct drm_printer;
 struct __intel_global_objs_state;
+struct intel_ddi_buf_trans;
 
 /*
  * Display related stuff
@@ -260,6 +261,9 @@ struct intel_encoder {
         * Returns whether the port clock is enabled or not.
         */
        bool (*is_clock_enabled)(struct intel_encoder *encoder);
+       const struct intel_ddi_buf_trans *(*get_buf_trans)(struct intel_encoder 
*encoder,
+                                                          const struct 
intel_crtc_state *crtc_state,
+                                                          int *n_entries);
        enum hpd_pin hpd_pin;
        enum intel_display_power_domain power_domain;
        /* for communication with audio component; protected by av_mutex */
diff --git a/drivers/gpu/drm/i915/display/intel_fdi.c 
b/drivers/gpu/drm/i915/display/intel_fdi.c
index 223762020afe..b61f6b74f81a 100644
--- a/drivers/gpu/drm/i915/display/intel_fdi.c
+++ b/drivers/gpu/drm/i915/display/intel_fdi.c
@@ -4,7 +4,6 @@
  */
 #include "intel_atomic.h"
 #include "intel_ddi.h"
-#include "intel_ddi_buf_trans.h"
 #include "intel_display_types.h"
 #include "intel_fdi.h"
 
@@ -568,7 +567,7 @@ void hsw_fdi_link_train(struct intel_encoder *encoder,
        u32 temp, i, rx_ctl_val;
        int n_entries;
 
-       hsw_get_buf_trans(encoder, crtc_state, &n_entries);
+       encoder->get_buf_trans(encoder, crtc_state, &n_entries);
 
        hsw_prepare_dp_ddi_buffers(encoder, crtc_state);
 
-- 
2.26.3

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to