drm/i915: Move SST DP link retraining into the ->post_hotplug() hook
Doing link retraining from the short pulse handler is problematic since that might introduce deadlocks with MST sideband processing. Currently we don't retrain MST links from this code, but we want to change that. So better to move the entire thing to the hotplug work. We can utilize the new encoder->hotplug() hook for this. The only thing we leave in the short pulse handler is the link status check. That one still depends on the link parameters stored under intel_dp, so no locking around that but races should be mostly harmless as the actual retraining code will recheck the link state if we end up there by mistake. v2: Rebase due to ->post_hotplug() now being just ->hotplug() Check the connector type to figure out if we should do the HDMI thing or the DP think for DDI [pushed with whitespace changes for sparse] Cc: Manasi Navare <manasi.d.navare@intel.com> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Acked-by: Manasi Navare <manasi.d.navare@intel.com> Signed-off-by: Lyude Paul <lyude@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180117192149.17760-3-ville.syrjala@linux.intel.com
Dieser Commit ist enthalten in:

committet von
Lyude Paul

Ursprung
dba14b27dd
Commit
c85d200e83
@@ -2923,7 +2923,10 @@ static bool intel_ddi_hotplug(struct intel_encoder *encoder,
|
||||
drm_modeset_acquire_init(&ctx, 0);
|
||||
|
||||
for (;;) {
|
||||
ret = intel_hdmi_reset_link(encoder, &ctx);
|
||||
if (connector->base.connector_type == DRM_MODE_CONNECTOR_HDMIA)
|
||||
ret = intel_hdmi_reset_link(encoder, &ctx);
|
||||
else
|
||||
ret = intel_dp_retrain_link(encoder, &ctx);
|
||||
|
||||
if (ret == -EDEADLK) {
|
||||
drm_modeset_backoff(&ctx);
|
||||
@@ -3056,10 +3059,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port)
|
||||
drm_encoder_init(&dev_priv->drm, encoder, &intel_ddi_funcs,
|
||||
DRM_MODE_ENCODER_TMDS, "DDI %c", port_name(port));
|
||||
|
||||
if (init_hdmi)
|
||||
intel_encoder->hotplug = intel_ddi_hotplug;
|
||||
else
|
||||
intel_encoder->hotplug = intel_encoder_hotplug;
|
||||
intel_encoder->hotplug = intel_ddi_hotplug;
|
||||
intel_encoder->compute_output_type = intel_ddi_compute_output_type;
|
||||
intel_encoder->compute_config = intel_ddi_compute_config;
|
||||
intel_encoder->enable = intel_enable_ddi;
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren