drm/i915: Update atomic state when removing mst connector, v3.
Fully remove the MST connector from the atomic state, and remove the early returns in check_*_state for MST connectors. With atomic the state can be made consistent all the time. Thanks to Sivakumar Thulasimani for the idea of using drm_atomic_helper_set_config. Changes since v1: - Remove the MST check in intel_connector_check_state too. Changes since v2: - Use drm_atomic_helper_set_config. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com> Reviewed-by: Sivakumar Thulasimani <sivakumar.thulasimani@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
ee165b1a6e
commit
20fae983c6
|
@ -6372,10 +6372,6 @@ static void intel_connector_check_state(struct intel_connector *connector)
|
||||||
connector->base.base.id,
|
connector->base.base.id,
|
||||||
connector->base.name);
|
connector->base.name);
|
||||||
|
|
||||||
/* there is no real hw state for MST connectors */
|
|
||||||
if (connector->mst_port)
|
|
||||||
return;
|
|
||||||
|
|
||||||
I915_STATE_WARN(connector->base.dpms == DRM_MODE_DPMS_OFF,
|
I915_STATE_WARN(connector->base.dpms == DRM_MODE_DPMS_OFF,
|
||||||
"wrong connector dpms state\n");
|
"wrong connector dpms state\n");
|
||||||
I915_STATE_WARN(connector->base.encoder != &encoder->base,
|
I915_STATE_WARN(connector->base.encoder != &encoder->base,
|
||||||
|
@ -12748,13 +12744,6 @@ check_encoder_state(struct drm_device *dev)
|
||||||
encoder->base.crtc,
|
encoder->base.crtc,
|
||||||
"connector's crtc doesn't match encoder crtc\n");
|
"connector's crtc doesn't match encoder crtc\n");
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* for MST connectors if we unplug the connector is gone
|
|
||||||
* away but the encoder is still connected to a crtc
|
|
||||||
* until a modeset happens in response to the hotplug.
|
|
||||||
*/
|
|
||||||
if (!enabled && encoder->base.encoder_type == DRM_MODE_ENCODER_DPMST)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
I915_STATE_WARN(!!encoder->base.crtc != enabled,
|
I915_STATE_WARN(!!encoder->base.crtc != enabled,
|
||||||
"encoder's enabled state mismatch "
|
"encoder's enabled state mismatch "
|
||||||
|
|
|
@ -453,9 +453,20 @@ static void intel_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
|
||||||
{
|
{
|
||||||
struct intel_connector *intel_connector = to_intel_connector(connector);
|
struct intel_connector *intel_connector = to_intel_connector(connector);
|
||||||
struct drm_device *dev = connector->dev;
|
struct drm_device *dev = connector->dev;
|
||||||
|
|
||||||
/* need to nuke the connector */
|
/* need to nuke the connector */
|
||||||
drm_modeset_lock_all(dev);
|
drm_modeset_lock_all(dev);
|
||||||
intel_connector_dpms(connector, DRM_MODE_DPMS_OFF);
|
if (connector->state->crtc) {
|
||||||
|
struct drm_mode_set set;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
memset(&set, 0, sizeof(set));
|
||||||
|
set.crtc = connector->state->crtc,
|
||||||
|
|
||||||
|
ret = drm_atomic_helper_set_config(&set);
|
||||||
|
|
||||||
|
WARN(ret, "Disabling mst crtc failed with %i\n", ret);
|
||||||
|
}
|
||||||
drm_modeset_unlock_all(dev);
|
drm_modeset_unlock_all(dev);
|
||||||
|
|
||||||
intel_connector->unregister(intel_connector);
|
intel_connector->unregister(intel_connector);
|
||||||
|
|
Loading…
Reference in New Issue