[Intel-gfx] [PATCH 09/17] drm/i915: Introduce encoder->get_buf_trans()
Jani Nikula
jani.nikula at linux.intel.com
Tue May 11 18:31:42 UTC 2021
On Wed, 21 Apr 2021, Ville Syrjala <ville.syrjala at linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at 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.syrjala at linux.intel.com>
The series up to and including this patch,
Reviewed-by: Jani Nikula <jani.nikula at 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);
--
Jani Nikula, Intel Open Source Graphics Center
More information about the Intel-gfx
mailing list