drm/i915: Use intel_ddi_get_config() for MST
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 27 Oct 2017 19:31:28 +0000 (22:31 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 30 Oct 2017 18:00:39 +0000 (20:00 +0200)
Eliminate the partially duplicated DDI readout code from MST, and
instead just call intel_ddi_get_config(). As a nice bonus we get
more cross checking as intel_ddi_get_config() will populate
output_types based on the actual mode of the DDI port.

Additonally intel_ddi_get_config() must be changed to get the crtc
from the passed in crtc state rather than from the encoder->crtc link.
encoder->crtc really shouldn't be used anyway.

v2: Rebased on BXT MST latency_optim fix
    Make intel_ddi_clock_get() static

Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171027193128.14483-7-ville.syrjala@linux.intel.com
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
drivers/gpu/drm/i915/intel_ddi.c
drivers/gpu/drm/i915/intel_dp_mst.c
drivers/gpu/drm/i915/intel_drv.h

index 7a6806d77678dcb4d6fa91b3a41809c5ad465e68..eb8f4e3bb85f8c68adc8fb43bf2d8a31fa7771c7 100644 (file)
@@ -1453,8 +1453,8 @@ static void bxt_ddi_clock_get(struct intel_encoder *encoder,
        ddi_dotclock_get(pipe_config);
 }
 
-void intel_ddi_clock_get(struct intel_encoder *encoder,
-                        struct intel_crtc_state *pipe_config)
+static void intel_ddi_clock_get(struct intel_encoder *encoder,
+                               struct intel_crtc_state *pipe_config)
 {
        struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 
@@ -2533,7 +2533,7 @@ void intel_ddi_get_config(struct intel_encoder *encoder,
                          struct intel_crtc_state *pipe_config)
 {
        struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-       struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
+       struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->base.crtc);
        enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
        struct intel_digital_port *intel_dig_port;
        u32 temp, flags = 0;
index d523302e5081a2cae31f63b4dffc44a592052193..6f11bb35f66f5ce968bfeda14f154fd04da6214a 100644 (file)
@@ -286,56 +286,8 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder,
 {
        struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
        struct intel_digital_port *intel_dig_port = intel_mst->primary;
-       struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc);
-       struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
-       enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
-       u32 temp, flags = 0;
-
-       pipe_config->output_types |= BIT(INTEL_OUTPUT_DP_MST);
-
-       pipe_config->has_audio =
-               intel_ddi_is_audio_enabled(dev_priv, crtc);
-
-       temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
-       if (temp & TRANS_DDI_PHSYNC)
-               flags |= DRM_MODE_FLAG_PHSYNC;
-       else
-               flags |= DRM_MODE_FLAG_NHSYNC;
-       if (temp & TRANS_DDI_PVSYNC)
-               flags |= DRM_MODE_FLAG_PVSYNC;
-       else
-               flags |= DRM_MODE_FLAG_NVSYNC;
-
-       switch (temp & TRANS_DDI_BPC_MASK) {
-       case TRANS_DDI_BPC_6:
-               pipe_config->pipe_bpp = 18;
-               break;
-       case TRANS_DDI_BPC_8:
-               pipe_config->pipe_bpp = 24;
-               break;
-       case TRANS_DDI_BPC_10:
-               pipe_config->pipe_bpp = 30;
-               break;
-       case TRANS_DDI_BPC_12:
-               pipe_config->pipe_bpp = 36;
-               break;
-       default:
-               break;
-       }
-       pipe_config->base.adjusted_mode.flags |= flags;
-
-       pipe_config->lane_count =
-               ((temp & DDI_PORT_WIDTH_MASK) >> DDI_PORT_WIDTH_SHIFT) + 1;
-
-       intel_dp_get_m_n(crtc, pipe_config);
-
-       intel_ddi_clock_get(&intel_dig_port->base, pipe_config);
 
-       if (IS_GEN9_LP(dev_priv))
-               pipe_config->lane_lat_optim_mask =
-                       bxt_ddi_phy_get_lane_lat_optim_mask(encoder);
-
-       intel_ddi_compute_min_voltage_level(dev_priv, pipe_config);
+       intel_ddi_get_config(&intel_dig_port->base, pipe_config);
 }
 
 static int intel_dp_mst_get_ddc_modes(struct drm_connector *connector)
index 3828d9bee7f5760de24a128836f1fbf355bd33ae..4498d743cebc3e6de20e14e5dbbe4da17c69271f 100644 (file)
@@ -1295,8 +1295,6 @@ bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
 void intel_ddi_get_config(struct intel_encoder *encoder,
                          struct intel_crtc_state *pipe_config);
 
-void intel_ddi_clock_get(struct intel_encoder *encoder,
-                        struct intel_crtc_state *pipe_config);
 void intel_ddi_set_vc_payload_alloc(const struct intel_crtc_state *crtc_state,
                                    bool state);
 void intel_ddi_compute_min_voltage_level(struct drm_i915_private *dev_priv,