diff options
author | Dave Airlie <airlied@redhat.com> | 2016-07-14 23:50:58 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-07-14 23:50:58 -0400 |
commit | ff37c05a996bb96eccc21f4fb1b32ba0e24f3443 (patch) | |
tree | c09b09b37521f2f8f3f7a9bb3b0a33a2b3bde1a1 /drivers/gpu/drm/i915/intel_dp_mst.c | |
parent | 6c181c82106e12dced317e93a7a396cbb8c64f75 (diff) | |
parent | 0b2c0582f1570bfc95aa9ac1cd340a215d8e8335 (diff) |
Merge tag 'drm-intel-next-2016-07-11' of git://anongit.freedesktop.org/drm-intel into drm-next
- select igt testing depencies for CONFIG_DRM_I915_DEBUG (Chris)
- track outputs in crtc state and clean up all our ad-hoc connector/encoder
walking in modest code (Ville)
- demidlayer drm_device/drm_i915_private (Chris Wilson)
- thundering herd fix from Chris Wilson, with lots of help from Tvrtko Ursulin
- piles of assorted clean and fallout from the thundering herd fix
- documentation and more tuning for waitboosting (Chris)
- pooled EU support on bxt (Arun Siluvery)
- bxt support is no longer considered prelimary!
- ring/engine vfunc cleanup from Tvrtko
- introduce intel_wait_for_register helper (Chris)
- opregion updates (Jani Nukla)
- tuning and fixes for wait_for macros (Tvrkto&Imre)
- more kabylake pci ids (Rodrigo)
- pps cleanup and fixes for bxt (Imre)
- move sink crc support over to atomic state (Maarten)
- fix up async fbdev init ordering (Chris)
- fbc fixes from Paulo and Chris
* tag 'drm-intel-next-2016-07-11' of git://anongit.freedesktop.org/drm-intel: (223 commits)
drm/i915: Update DRIVER_DATE to 20160711
drm/i915: Select DRM_VGEM for igt
drm/i915: Select X86_MSR for igt
drm/i915: Fill unused GGTT with scratch pages for VT-d
drm/i915: Introduce Kabypoint PCH for Kabylake H/DT.
drm/i915:gen9: implement WaMediaPoolStateCmdInWABB
drm/i915: Check for invalid cloning earlier during modeset
drm/i915: Simplify hdmi_12bpc_possible()
drm/i915: Kill has_dsi_encoder
drm/i915: s/INTEL_OUTPUT_DISPLAYPORT/INTEL_OUTPUT_DP/
drm/i915: Replace some open coded intel_crtc_has_dp_encoder()s
drm/i915: Kill has_dp_encoder from pipe_config
drm/i915: Replace manual lvds and sdvo/hdmi counting with intel_crtc_has_type()
drm/i915: Unify intel_pipe_has_type() and intel_pipe_will_have_type()
drm/i915: Add output_types bitmask into the crtc state
drm/i915: Remove encoder type checks from MST suspend/resume
drm/i915: Don't mark eDP encoders as MST capable
drm/i915: avoid wait_for_atomic() in non-atomic host2guc_action()
drm/i915: Group the irq breadcrumb variables into the same cacheline
drm/i915: Wake up the bottom-half if we steal their interrupt
...
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp_mst.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp_mst.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c index 9646816604be..68a005d729e9 100644 --- a/drivers/gpu/drm/i915/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/intel_dp_mst.c | |||
@@ -47,7 +47,6 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder, | |||
47 | 47 | ||
48 | pipe_config->dp_encoder_is_mst = true; | 48 | pipe_config->dp_encoder_is_mst = true; |
49 | pipe_config->has_pch_encoder = false; | 49 | pipe_config->has_pch_encoder = false; |
50 | pipe_config->has_dp_encoder = true; | ||
51 | bpp = 24; | 50 | bpp = 24; |
52 | /* | 51 | /* |
53 | * for MST we always configure max link bw - the spec doesn't | 52 | * for MST we always configure max link bw - the spec doesn't |
@@ -140,7 +139,7 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder) | |||
140 | struct intel_digital_port *intel_dig_port = intel_mst->primary; | 139 | struct intel_digital_port *intel_dig_port = intel_mst->primary; |
141 | struct intel_dp *intel_dp = &intel_dig_port->dp; | 140 | struct intel_dp *intel_dp = &intel_dig_port->dp; |
142 | struct drm_device *dev = encoder->base.dev; | 141 | struct drm_device *dev = encoder->base.dev; |
143 | struct drm_i915_private *dev_priv = dev->dev_private; | 142 | struct drm_i915_private *dev_priv = to_i915(dev); |
144 | enum port port = intel_dig_port->port; | 143 | enum port port = intel_dig_port->port; |
145 | int ret; | 144 | int ret; |
146 | uint32_t temp; | 145 | uint32_t temp; |
@@ -207,14 +206,17 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder) | |||
207 | struct intel_digital_port *intel_dig_port = intel_mst->primary; | 206 | struct intel_digital_port *intel_dig_port = intel_mst->primary; |
208 | struct intel_dp *intel_dp = &intel_dig_port->dp; | 207 | struct intel_dp *intel_dp = &intel_dig_port->dp; |
209 | struct drm_device *dev = intel_dig_port->base.base.dev; | 208 | struct drm_device *dev = intel_dig_port->base.base.dev; |
210 | struct drm_i915_private *dev_priv = dev->dev_private; | 209 | struct drm_i915_private *dev_priv = to_i915(dev); |
211 | enum port port = intel_dig_port->port; | 210 | enum port port = intel_dig_port->port; |
212 | int ret; | 211 | int ret; |
213 | 212 | ||
214 | DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links); | 213 | DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links); |
215 | 214 | ||
216 | if (wait_for((I915_READ(DP_TP_STATUS(port)) & DP_TP_STATUS_ACT_SENT), | 215 | if (intel_wait_for_register(dev_priv, |
217 | 1)) | 216 | DP_TP_STATUS(port), |
217 | DP_TP_STATUS_ACT_SENT, | ||
218 | DP_TP_STATUS_ACT_SENT, | ||
219 | 1)) | ||
218 | DRM_ERROR("Timed out waiting for ACT sent\n"); | 220 | DRM_ERROR("Timed out waiting for ACT sent\n"); |
219 | 221 | ||
220 | ret = drm_dp_check_act_status(&intel_dp->mst_mgr); | 222 | ret = drm_dp_check_act_status(&intel_dp->mst_mgr); |
@@ -239,12 +241,10 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder, | |||
239 | struct intel_digital_port *intel_dig_port = intel_mst->primary; | 241 | struct intel_digital_port *intel_dig_port = intel_mst->primary; |
240 | struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); | 242 | struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); |
241 | struct drm_device *dev = encoder->base.dev; | 243 | struct drm_device *dev = encoder->base.dev; |
242 | struct drm_i915_private *dev_priv = dev->dev_private; | 244 | struct drm_i915_private *dev_priv = to_i915(dev); |
243 | enum transcoder cpu_transcoder = pipe_config->cpu_transcoder; | 245 | enum transcoder cpu_transcoder = pipe_config->cpu_transcoder; |
244 | u32 temp, flags = 0; | 246 | u32 temp, flags = 0; |
245 | 247 | ||
246 | pipe_config->has_dp_encoder = true; | ||
247 | |||
248 | temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder)); | 248 | temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder)); |
249 | if (temp & TRANS_DDI_PHSYNC) | 249 | if (temp & TRANS_DDI_PHSYNC) |
250 | flags |= DRM_MODE_FLAG_PHSYNC; | 250 | flags |= DRM_MODE_FLAG_PHSYNC; |
@@ -336,6 +336,7 @@ static const struct drm_connector_funcs intel_dp_mst_connector_funcs = { | |||
336 | .fill_modes = drm_helper_probe_single_connector_modes, | 336 | .fill_modes = drm_helper_probe_single_connector_modes, |
337 | .set_property = intel_dp_mst_set_property, | 337 | .set_property = intel_dp_mst_set_property, |
338 | .atomic_get_property = intel_connector_atomic_get_property, | 338 | .atomic_get_property = intel_connector_atomic_get_property, |
339 | .late_register = intel_connector_register, | ||
339 | .early_unregister = intel_connector_unregister, | 340 | .early_unregister = intel_connector_unregister, |
340 | .destroy = intel_dp_mst_connector_destroy, | 341 | .destroy = intel_dp_mst_connector_destroy, |
341 | .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, | 342 | .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, |
@@ -477,9 +478,11 @@ static void intel_dp_register_mst_connector(struct drm_connector *connector) | |||
477 | { | 478 | { |
478 | struct intel_connector *intel_connector = to_intel_connector(connector); | 479 | struct intel_connector *intel_connector = to_intel_connector(connector); |
479 | struct drm_device *dev = connector->dev; | 480 | struct drm_device *dev = connector->dev; |
481 | |||
480 | drm_modeset_lock_all(dev); | 482 | drm_modeset_lock_all(dev); |
481 | intel_connector_add_to_fbdev(intel_connector); | 483 | intel_connector_add_to_fbdev(intel_connector); |
482 | drm_modeset_unlock_all(dev); | 484 | drm_modeset_unlock_all(dev); |
485 | |||
483 | drm_connector_register(&intel_connector->base); | 486 | drm_connector_register(&intel_connector->base); |
484 | } | 487 | } |
485 | 488 | ||