|
|
@@ -311,9 +311,8 @@ static int intel_dp_mst_get_ddc_modes(struct drm_connector *connector)
|
|
|
struct edid *edid;
|
|
|
int ret;
|
|
|
|
|
|
- if (!intel_dp) {
|
|
|
+ if (!READ_ONCE(connector->registered))
|
|
|
return intel_connector_update_modes(connector, NULL);
|
|
|
- }
|
|
|
|
|
|
edid = drm_dp_mst_get_edid(connector, &intel_dp->mst_mgr, intel_connector->port);
|
|
|
ret = intel_connector_update_modes(connector, edid);
|
|
|
@@ -328,9 +327,10 @@ intel_dp_mst_detect(struct drm_connector *connector, bool force)
|
|
|
struct intel_connector *intel_connector = to_intel_connector(connector);
|
|
|
struct intel_dp *intel_dp = intel_connector->mst_port;
|
|
|
|
|
|
- if (!intel_dp)
|
|
|
+ if (!READ_ONCE(connector->registered))
|
|
|
return connector_status_disconnected;
|
|
|
- return drm_dp_mst_detect_port(connector, &intel_dp->mst_mgr, intel_connector->port);
|
|
|
+ return drm_dp_mst_detect_port(connector, &intel_dp->mst_mgr,
|
|
|
+ intel_connector->port);
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
@@ -370,7 +370,7 @@ intel_dp_mst_mode_valid(struct drm_connector *connector,
|
|
|
int bpp = 24; /* MST uses fixed bpp */
|
|
|
int max_rate, mode_rate, max_lanes, max_link_clock;
|
|
|
|
|
|
- if (!intel_dp)
|
|
|
+ if (!READ_ONCE(connector->registered))
|
|
|
return MODE_ERROR;
|
|
|
|
|
|
if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
|
|
|
@@ -402,7 +402,7 @@ static struct drm_encoder *intel_mst_atomic_best_encoder(struct drm_connector *c
|
|
|
struct intel_dp *intel_dp = intel_connector->mst_port;
|
|
|
struct intel_crtc *crtc = to_intel_crtc(state->crtc);
|
|
|
|
|
|
- if (!intel_dp)
|
|
|
+ if (!READ_ONCE(connector->registered))
|
|
|
return NULL;
|
|
|
return &intel_dp->mst_encoders[crtc->pipe]->base.base;
|
|
|
}
|
|
|
@@ -503,7 +503,6 @@ static void intel_dp_register_mst_connector(struct drm_connector *connector)
|
|
|
static void intel_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
|
|
|
struct drm_connector *connector)
|
|
|
{
|
|
|
- struct intel_connector *intel_connector = to_intel_connector(connector);
|
|
|
struct drm_i915_private *dev_priv = to_i915(connector->dev);
|
|
|
|
|
|
DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", connector->base.id, connector->name);
|
|
|
@@ -512,10 +511,6 @@ static void intel_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
|
|
|
if (dev_priv->fbdev)
|
|
|
drm_fb_helper_remove_one_connector(&dev_priv->fbdev->helper,
|
|
|
connector);
|
|
|
- /* prevent race with the check in ->detect */
|
|
|
- drm_modeset_lock(&connector->dev->mode_config.connection_mutex, NULL);
|
|
|
- intel_connector->mst_port = NULL;
|
|
|
- drm_modeset_unlock(&connector->dev->mode_config.connection_mutex);
|
|
|
|
|
|
drm_connector_put(connector);
|
|
|
}
|