Commit 10d987fd authored by Lucas De Marchi's avatar Lucas De Marchi

drm/i915: fix port checks for MST support on gen >= 11

Both Ice Lake and Elkhart Lake (gen 11) support MST on all external
connections except DDI A. Tiger Lake (gen 12) supports on all external
connections.

Move the check to happen inside intel_dp_mst_encoder_init() and add
specific platform checks.

v2: Replace != with == checks for ports on gen < 11 (Ville)
Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191015164029.18431-3-lucas.demarchi@intel.com
parent 327f8d8c
...@@ -7468,11 +7468,8 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, ...@@ -7468,11 +7468,8 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
intel_connector->get_hw_state = intel_connector_get_hw_state; intel_connector->get_hw_state = intel_connector_get_hw_state;
/* init MST on ports that can support it */ /* init MST on ports that can support it */
if (HAS_DP_MST(dev_priv) && !intel_dp_is_edp(intel_dp) && intel_dp_mst_encoder_init(intel_dig_port,
(port == PORT_B || port == PORT_C || intel_connector->base.base.id);
port == PORT_D || port == PORT_F))
intel_dp_mst_encoder_init(intel_dig_port,
intel_connector->base.base.id);
if (!intel_edp_init_connector(intel_dp, intel_connector)) { if (!intel_edp_init_connector(intel_dp, intel_connector)) {
intel_dp_aux_fini(intel_dp); intel_dp_aux_fini(intel_dp);
......
...@@ -655,21 +655,31 @@ intel_dp_mst_encoder_active_links(struct intel_digital_port *intel_dig_port) ...@@ -655,21 +655,31 @@ intel_dp_mst_encoder_active_links(struct intel_digital_port *intel_dig_port)
int int
intel_dp_mst_encoder_init(struct intel_digital_port *intel_dig_port, int conn_base_id) intel_dp_mst_encoder_init(struct intel_digital_port *intel_dig_port, int conn_base_id)
{ {
struct drm_i915_private *i915 = to_i915(intel_dig_port->base.base.dev);
struct intel_dp *intel_dp = &intel_dig_port->dp; struct intel_dp *intel_dp = &intel_dig_port->dp;
struct drm_device *dev = intel_dig_port->base.base.dev; enum port port = intel_dig_port->base.port;
int ret; int ret;
intel_dp->can_mst = true; if (!HAS_DP_MST(i915) || intel_dp_is_edp(intel_dp))
return 0;
if (INTEL_GEN(i915) < 12 && port == PORT_A)
return 0;
if (INTEL_GEN(i915) < 11 && port == PORT_E)
return 0;
intel_dp->mst_mgr.cbs = &mst_cbs; intel_dp->mst_mgr.cbs = &mst_cbs;
/* create encoders */ /* create encoders */
intel_dp_create_fake_mst_encoders(intel_dig_port); intel_dp_create_fake_mst_encoders(intel_dig_port);
ret = drm_dp_mst_topology_mgr_init(&intel_dp->mst_mgr, dev, ret = drm_dp_mst_topology_mgr_init(&intel_dp->mst_mgr, &i915->drm,
&intel_dp->aux, 16, 3, conn_base_id); &intel_dp->aux, 16, 3, conn_base_id);
if (ret) { if (ret)
intel_dp->can_mst = false;
return ret; return ret;
}
intel_dp->can_mst = true;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment