diff options
author | Dave Airlie <airlied@redhat.com> | 2018-11-28 18:50:33 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2018-11-28 18:50:34 -0500 |
commit | bfeb122d3080b03aa49405c615f4d8144ab30073 (patch) | |
tree | 82eff682912a83e87b61c6d5de6b4a04cd2f6dcf /drivers/gpu/drm/i915/intel_dp_mst.c | |
parent | b239499f927f79401d51a677bc640980ca630604 (diff) | |
parent | b4bf44d2dcbd6c35d9651bc6286e4940b8b3df95 (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.c | 33 |
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 | ||
217 | static 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 | |||
217 | static void intel_mst_pre_enable_dp(struct intel_encoder *encoder, | 231 | static 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 | ||
338 | static void | ||
339 | intel_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 | |||
350 | static const struct drm_connector_funcs intel_dp_mst_connector_funcs = { | 352 | static 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; |