aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp_mst.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2018-11-28 18:50:33 -0500
committerDave Airlie <airlied@redhat.com>2018-11-28 18:50:34 -0500
commitbfeb122d3080b03aa49405c615f4d8144ab30073 (patch)
tree82eff682912a83e87b61c6d5de6b4a04cd2f6dcf /drivers/gpu/drm/i915/intel_dp_mst.c
parentb239499f927f79401d51a677bc640980ca630604 (diff)
parentb4bf44d2dcbd6c35d9651bc6286e4940b8b3df95 (diff)
Merge tag 'drm-intel-next-2018-11-22' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
Changes outside i915: - Connector property to limit max bpc (Radhakrishna) - Fix LPE audio runtime PM and deinit (Ville) - DP FEC prep work (Anusha) - Mark pinned shmemfs pages as unevictable (Kuo-Hsin) - Backmerge drm-next (Jani) Inside i915: - Revert OA UAPI change that lacks userspace (Joonas) - Register macro cleanup (Jani) - 32-bit build fixes on pin flags (Chris) - Fix MG DP mode and PHY gating for HDMI (Imre) - DP MST race, hpd and irq fixes (Lyude) - Combo PHY fixes and cleanup (Imre, Lucas) - Move display init and cleanup under modeset init and cleanup (José) - PSR fixes (José) - Subslice size fixes (Daniele) - Abstract and clean up fixed point helpers (Jani) - Plane input CSC for YUV to RGB conversion (Uma) - Break long iterations for get/put shmemfs pages (Chris) - Improve DDI encoder hw state readout sanity checks (Imre) - Fix power well leaks for MST (José) - Scaler fixes (Ville) - Watermark fixes (Ville) - Fix VLV/CHV DSI panel orientation readout (Ville) - ICL rawclock fixes (Paulo) - Workaround DMC power well request issues (Imre) - Plane allocation fix (Maarten) - Transcoder enum value/ordering robustness fixes (Imre) - UTS_RELEASE build dependency fix (Hans Holmberg) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/87k1l4cesj.fsf@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp_mst.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index a911691dbd0f..4de247ddf05f 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -51,6 +51,7 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
51 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN) 51 if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
52 return false; 52 return false;
53 53
54 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
54 pipe_config->has_pch_encoder = false; 55 pipe_config->has_pch_encoder = false;
55 bpp = 24; 56 bpp = 24;
56 if (intel_dp->compliance.test_data.bpc) { 57 if (intel_dp->compliance.test_data.bpc) {
@@ -208,12 +209,25 @@ static void intel_mst_pre_pll_enable_dp(struct intel_encoder *encoder,
208 struct intel_digital_port *intel_dig_port = intel_mst->primary; 209 struct intel_digital_port *intel_dig_port = intel_mst->primary;
209 struct intel_dp *intel_dp = &intel_dig_port->dp; 210 struct intel_dp *intel_dp = &intel_dig_port->dp;
210 211
211 if (intel_dp->active_mst_links == 0 && 212 if (intel_dp->active_mst_links == 0)
212 intel_dig_port->base.pre_pll_enable)
213 intel_dig_port->base.pre_pll_enable(&intel_dig_port->base, 213 intel_dig_port->base.pre_pll_enable(&intel_dig_port->base,
214 pipe_config, NULL); 214 pipe_config, NULL);
215} 215}
216 216
217static void intel_mst_post_pll_disable_dp(struct intel_encoder *encoder,
218 const struct intel_crtc_state *old_crtc_state,
219 const struct drm_connector_state *old_conn_state)
220{
221 struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
222 struct intel_digital_port *intel_dig_port = intel_mst->primary;
223 struct intel_dp *intel_dp = &intel_dig_port->dp;
224
225 if (intel_dp->active_mst_links == 0)
226 intel_dig_port->base.post_pll_disable(&intel_dig_port->base,
227 old_crtc_state,
228 old_conn_state);
229}
230
217static void intel_mst_pre_enable_dp(struct intel_encoder *encoder, 231static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
218 const struct intel_crtc_state *pipe_config, 232 const struct intel_crtc_state *pipe_config,
219 const struct drm_connector_state *conn_state) 233 const struct drm_connector_state *conn_state)
@@ -335,24 +349,12 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force)
335 intel_connector->port); 349 intel_connector->port);
336} 350}
337 351
338static void
339intel_dp_mst_connector_destroy(struct drm_connector *connector)
340{
341 struct intel_connector *intel_connector = to_intel_connector(connector);
342
343 if (!IS_ERR_OR_NULL(intel_connector->edid))
344 kfree(intel_connector->edid);
345
346 drm_connector_cleanup(connector);
347 kfree(connector);
348}
349
350static const struct drm_connector_funcs intel_dp_mst_connector_funcs = { 352static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
351 .detect = intel_dp_mst_detect, 353 .detect = intel_dp_mst_detect,
352 .fill_modes = drm_helper_probe_single_connector_modes, 354 .fill_modes = drm_helper_probe_single_connector_modes,
353 .late_register = intel_connector_register, 355 .late_register = intel_connector_register,
354 .early_unregister = intel_connector_unregister, 356 .early_unregister = intel_connector_unregister,
355 .destroy = intel_dp_mst_connector_destroy, 357 .destroy = intel_connector_destroy,
356 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 358 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
357 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, 359 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
358}; 360};
@@ -560,6 +562,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum
560 intel_encoder->disable = intel_mst_disable_dp; 562 intel_encoder->disable = intel_mst_disable_dp;
561 intel_encoder->post_disable = intel_mst_post_disable_dp; 563 intel_encoder->post_disable = intel_mst_post_disable_dp;
562 intel_encoder->pre_pll_enable = intel_mst_pre_pll_enable_dp; 564 intel_encoder->pre_pll_enable = intel_mst_pre_pll_enable_dp;
565 intel_encoder->post_pll_disable = intel_mst_post_pll_disable_dp;
563 intel_encoder->pre_enable = intel_mst_pre_enable_dp; 566 intel_encoder->pre_enable = intel_mst_pre_enable_dp;
564 intel_encoder->enable = intel_mst_enable_dp; 567 intel_encoder->enable = intel_mst_enable_dp;
565 intel_encoder->get_hw_state = intel_dp_mst_enc_get_hw_state; 568 intel_encoder->get_hw_state = intel_dp_mst_enc_get_hw_state;