xref: /openbmc/linux/drivers/gpu/drm/i915/display/intel_dp_mst.c (revision 817396dc9f6ab2481b94071de2e586aae876e89c)
1 /*
2  * Copyright © 2008 Intel Corporation
3  *             2014 Red Hat Inc.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22  * IN THE SOFTWARE.
23  *
24  */
25 
26 #include <drm/drm_atomic_helper.h>
27 #include <drm/drm_edid.h>
28 #include <drm/drm_probe_helper.h>
29 
30 #include "i915_drv.h"
31 #include "intel_atomic.h"
32 #include "intel_audio.h"
33 #include "intel_connector.h"
34 #include "intel_ddi.h"
35 #include "intel_display_types.h"
36 #include "intel_dp.h"
37 #include "intel_dp_mst.h"
38 #include "intel_dpio_phy.h"
39 
40 static int intel_dp_mst_compute_link_config(struct intel_encoder *encoder,
41 					    struct intel_crtc_state *crtc_state,
42 					    struct drm_connector_state *conn_state,
43 					    struct link_config_limits *limits)
44 {
45 	struct drm_atomic_state *state = crtc_state->uapi.state;
46 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
47 	struct intel_dp *intel_dp = &intel_mst->primary->dp;
48 	struct intel_connector *connector =
49 		to_intel_connector(conn_state->connector);
50 	const struct drm_display_mode *adjusted_mode =
51 		&crtc_state->hw.adjusted_mode;
52 	void *port = connector->port;
53 	bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
54 					   DP_DPCD_QUIRK_CONSTANT_N);
55 	int bpp, slots = -EINVAL;
56 
57 	crtc_state->lane_count = limits->max_lane_count;
58 	crtc_state->port_clock = limits->max_clock;
59 
60 	for (bpp = limits->max_bpp; bpp >= limits->min_bpp; bpp -= 2 * 3) {
61 		crtc_state->pipe_bpp = bpp;
62 
63 		crtc_state->pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock,
64 						       crtc_state->pipe_bpp,
65 						       false);
66 
67 		slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr,
68 						      port, crtc_state->pbn, 0);
69 		if (slots == -EDEADLK)
70 			return slots;
71 		if (slots >= 0)
72 			break;
73 	}
74 
75 	if (slots < 0) {
76 		DRM_DEBUG_KMS("failed finding vcpi slots:%d\n", slots);
77 		return slots;
78 	}
79 
80 	intel_link_compute_m_n(crtc_state->pipe_bpp,
81 			       crtc_state->lane_count,
82 			       adjusted_mode->crtc_clock,
83 			       crtc_state->port_clock,
84 			       &crtc_state->dp_m_n,
85 			       constant_n, crtc_state->fec_enable);
86 	crtc_state->dp_m_n.tu = slots;
87 
88 	return 0;
89 }
90 
91 static int intel_dp_mst_compute_config(struct intel_encoder *encoder,
92 				       struct intel_crtc_state *pipe_config,
93 				       struct drm_connector_state *conn_state)
94 {
95 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
96 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
97 	struct intel_dp *intel_dp = &intel_mst->primary->dp;
98 	struct intel_connector *connector =
99 		to_intel_connector(conn_state->connector);
100 	struct intel_digital_connector_state *intel_conn_state =
101 		to_intel_digital_connector_state(conn_state);
102 	const struct drm_display_mode *adjusted_mode =
103 		&pipe_config->hw.adjusted_mode;
104 	void *port = connector->port;
105 	struct link_config_limits limits;
106 	int ret;
107 
108 	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
109 		return -EINVAL;
110 
111 	pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
112 	pipe_config->has_pch_encoder = false;
113 
114 	if (intel_conn_state->force_audio == HDMI_AUDIO_AUTO)
115 		pipe_config->has_audio =
116 			drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port);
117 	else
118 		pipe_config->has_audio =
119 			intel_conn_state->force_audio == HDMI_AUDIO_ON;
120 
121 	/*
122 	 * for MST we always configure max link bw - the spec doesn't
123 	 * seem to suggest we should do otherwise.
124 	 */
125 	limits.min_clock =
126 	limits.max_clock = intel_dp_max_link_rate(intel_dp);
127 
128 	limits.min_lane_count =
129 	limits.max_lane_count = intel_dp_max_lane_count(intel_dp);
130 
131 	limits.min_bpp = intel_dp_min_bpp(pipe_config);
132 	/*
133 	 * FIXME: If all the streams can't fit into the link with
134 	 * their current pipe_bpp we should reduce pipe_bpp across
135 	 * the board until things start to fit. Until then we
136 	 * limit to <= 8bpc since that's what was hardcoded for all
137 	 * MST streams previously. This hack should be removed once
138 	 * we have the proper retry logic in place.
139 	 */
140 	limits.max_bpp = min(pipe_config->pipe_bpp, 24);
141 
142 	intel_dp_adjust_compliance_config(intel_dp, pipe_config, &limits);
143 
144 	ret = intel_dp_mst_compute_link_config(encoder, pipe_config,
145 					       conn_state, &limits);
146 	if (ret)
147 		return ret;
148 
149 	pipe_config->limited_color_range =
150 		intel_dp_limited_color_range(pipe_config, conn_state);
151 
152 	if (IS_GEN9_LP(dev_priv))
153 		pipe_config->lane_lat_optim_mask =
154 			bxt_ddi_phy_calc_lane_lat_optim_mask(pipe_config->lane_count);
155 
156 	intel_ddi_compute_min_voltage_level(dev_priv, pipe_config);
157 
158 	return 0;
159 }
160 
161 static int
162 intel_dp_mst_atomic_check(struct drm_connector *connector,
163 			  struct drm_atomic_state *state)
164 {
165 	struct drm_connector_state *new_conn_state =
166 		drm_atomic_get_new_connector_state(state, connector);
167 	struct drm_connector_state *old_conn_state =
168 		drm_atomic_get_old_connector_state(state, connector);
169 	struct intel_connector *intel_connector =
170 		to_intel_connector(connector);
171 	struct drm_crtc *new_crtc = new_conn_state->crtc;
172 	struct drm_dp_mst_topology_mgr *mgr;
173 	int ret;
174 
175 	ret = intel_digital_connector_atomic_check(connector, state);
176 	if (ret)
177 		return ret;
178 
179 	if (!old_conn_state->crtc)
180 		return 0;
181 
182 	/* We only want to free VCPI if this state disables the CRTC on this
183 	 * connector
184 	 */
185 	if (new_crtc) {
186 		struct intel_atomic_state *intel_state =
187 			to_intel_atomic_state(state);
188 		struct intel_crtc *intel_crtc = to_intel_crtc(new_crtc);
189 		struct intel_crtc_state *crtc_state =
190 			intel_atomic_get_new_crtc_state(intel_state,
191 							intel_crtc);
192 
193 		if (!crtc_state ||
194 		    !drm_atomic_crtc_needs_modeset(&crtc_state->uapi) ||
195 		    crtc_state->uapi.enable)
196 			return 0;
197 	}
198 
199 	mgr = &enc_to_mst(old_conn_state->best_encoder)->primary->dp.mst_mgr;
200 	ret = drm_dp_atomic_release_vcpi_slots(state, mgr,
201 					       intel_connector->port);
202 
203 	return ret;
204 }
205 
206 static void intel_mst_disable_dp(struct intel_encoder *encoder,
207 				 const struct intel_crtc_state *old_crtc_state,
208 				 const struct drm_connector_state *old_conn_state)
209 {
210 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
211 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
212 	struct intel_dp *intel_dp = &intel_dig_port->dp;
213 	struct intel_connector *connector =
214 		to_intel_connector(old_conn_state->connector);
215 	int ret;
216 
217 	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
218 
219 	drm_dp_mst_reset_vcpi_slots(&intel_dp->mst_mgr, connector->port);
220 
221 	ret = drm_dp_update_payload_part1(&intel_dp->mst_mgr);
222 	if (ret) {
223 		DRM_DEBUG_KMS("failed to update payload %d\n", ret);
224 	}
225 	if (old_crtc_state->has_audio)
226 		intel_audio_codec_disable(encoder,
227 					  old_crtc_state, old_conn_state);
228 }
229 
230 static void intel_mst_post_disable_dp(struct intel_encoder *encoder,
231 				      const struct intel_crtc_state *old_crtc_state,
232 				      const struct drm_connector_state *old_conn_state)
233 {
234 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
235 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
236 	struct intel_dp *intel_dp = &intel_dig_port->dp;
237 	struct intel_connector *connector =
238 		to_intel_connector(old_conn_state->connector);
239 	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
240 	bool last_mst_stream;
241 
242 	intel_dp->active_mst_links--;
243 	last_mst_stream = intel_dp->active_mst_links == 0;
244 
245 	intel_crtc_vblank_off(old_crtc_state);
246 
247 	intel_disable_pipe(old_crtc_state);
248 
249 	intel_ddi_disable_transcoder_func(old_crtc_state);
250 
251 	if (INTEL_GEN(dev_priv) >= 9)
252 		skylake_scaler_disable(old_crtc_state);
253 	else
254 		ironlake_pfit_disable(old_crtc_state);
255 
256 	/*
257 	 * From TGL spec: "If multi-stream slave transcoder: Configure
258 	 * Transcoder Clock Select to direct no clock to the transcoder"
259 	 *
260 	 * From older GENs spec: "Configure Transcoder Clock Select to direct
261 	 * no clock to the transcoder"
262 	 */
263 	if (INTEL_GEN(dev_priv) < 12 || !last_mst_stream)
264 		intel_ddi_disable_pipe_clock(old_crtc_state);
265 
266 	/* this can fail */
267 	drm_dp_check_act_status(&intel_dp->mst_mgr);
268 	/* and this can also fail */
269 	drm_dp_update_payload_part2(&intel_dp->mst_mgr);
270 
271 	drm_dp_mst_deallocate_vcpi(&intel_dp->mst_mgr, connector->port);
272 
273 	/*
274 	 * Power down mst path before disabling the port, otherwise we end
275 	 * up getting interrupts from the sink upon detecting link loss.
276 	 */
277 	drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port,
278 				     false);
279 
280 	intel_mst->connector = NULL;
281 	if (last_mst_stream)
282 		intel_dig_port->base.post_disable(&intel_dig_port->base,
283 						  old_crtc_state, NULL);
284 
285 	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
286 }
287 
288 static void intel_mst_pre_pll_enable_dp(struct intel_encoder *encoder,
289 					const struct intel_crtc_state *pipe_config,
290 					const struct drm_connector_state *conn_state)
291 {
292 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
293 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
294 	struct intel_dp *intel_dp = &intel_dig_port->dp;
295 
296 	if (intel_dp->active_mst_links == 0)
297 		intel_dig_port->base.pre_pll_enable(&intel_dig_port->base,
298 						    pipe_config, NULL);
299 }
300 
301 static void intel_mst_pre_enable_dp(struct intel_encoder *encoder,
302 				    const struct intel_crtc_state *pipe_config,
303 				    const struct drm_connector_state *conn_state)
304 {
305 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
306 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
307 	struct intel_dp *intel_dp = &intel_dig_port->dp;
308 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
309 	struct intel_connector *connector =
310 		to_intel_connector(conn_state->connector);
311 	int ret;
312 	u32 temp;
313 	bool first_mst_stream;
314 
315 	/* MST encoders are bound to a crtc, not to a connector,
316 	 * force the mapping here for get_hw_state.
317 	 */
318 	connector->encoder = encoder;
319 	intel_mst->connector = connector;
320 	first_mst_stream = intel_dp->active_mst_links == 0;
321 
322 	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
323 
324 	if (first_mst_stream)
325 		intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
326 
327 	drm_dp_send_power_updown_phy(&intel_dp->mst_mgr, connector->port, true);
328 
329 	if (first_mst_stream)
330 		intel_dig_port->base.pre_enable(&intel_dig_port->base,
331 						pipe_config, NULL);
332 
333 	ret = drm_dp_mst_allocate_vcpi(&intel_dp->mst_mgr,
334 				       connector->port,
335 				       pipe_config->pbn,
336 				       pipe_config->dp_m_n.tu);
337 	if (!ret)
338 		DRM_ERROR("failed to allocate vcpi\n");
339 
340 	intel_dp->active_mst_links++;
341 	temp = I915_READ(intel_dp->regs.dp_tp_status);
342 	I915_WRITE(intel_dp->regs.dp_tp_status, temp);
343 
344 	ret = drm_dp_update_payload_part1(&intel_dp->mst_mgr);
345 
346 	/*
347 	 * Before Gen 12 this is not done as part of
348 	 * intel_dig_port->base.pre_enable() and should be done here. For
349 	 * Gen 12+ the step in which this should be done is different for the
350 	 * first MST stream, so it's done on the DDI for the first stream and
351 	 * here for the following ones.
352 	 */
353 	if (INTEL_GEN(dev_priv) < 12 || !first_mst_stream)
354 		intel_ddi_enable_pipe_clock(pipe_config);
355 
356 	intel_ddi_set_dp_msa(pipe_config, conn_state);
357 }
358 
359 static void intel_mst_enable_dp(struct intel_encoder *encoder,
360 				const struct intel_crtc_state *pipe_config,
361 				const struct drm_connector_state *conn_state)
362 {
363 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
364 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
365 	struct intel_dp *intel_dp = &intel_dig_port->dp;
366 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
367 
368 	DRM_DEBUG_KMS("active links %d\n", intel_dp->active_mst_links);
369 
370 	if (intel_de_wait_for_set(dev_priv, intel_dp->regs.dp_tp_status,
371 				  DP_TP_STATUS_ACT_SENT, 1))
372 		DRM_ERROR("Timed out waiting for ACT sent\n");
373 
374 	drm_dp_check_act_status(&intel_dp->mst_mgr);
375 
376 	drm_dp_update_payload_part2(&intel_dp->mst_mgr);
377 	if (pipe_config->has_audio)
378 		intel_audio_codec_enable(encoder, pipe_config, conn_state);
379 }
380 
381 static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder,
382 				      enum pipe *pipe)
383 {
384 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
385 	*pipe = intel_mst->pipe;
386 	if (intel_mst->connector)
387 		return true;
388 	return false;
389 }
390 
391 static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder,
392 					struct intel_crtc_state *pipe_config)
393 {
394 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base);
395 	struct intel_digital_port *intel_dig_port = intel_mst->primary;
396 
397 	intel_ddi_get_config(&intel_dig_port->base, pipe_config);
398 }
399 
400 static int intel_dp_mst_get_ddc_modes(struct drm_connector *connector)
401 {
402 	struct intel_connector *intel_connector = to_intel_connector(connector);
403 	struct intel_dp *intel_dp = intel_connector->mst_port;
404 	struct edid *edid;
405 	int ret;
406 
407 	if (drm_connector_is_unregistered(connector))
408 		return intel_connector_update_modes(connector, NULL);
409 
410 	edid = drm_dp_mst_get_edid(connector, &intel_dp->mst_mgr, intel_connector->port);
411 	ret = intel_connector_update_modes(connector, edid);
412 	kfree(edid);
413 
414 	return ret;
415 }
416 
417 static const struct drm_connector_funcs intel_dp_mst_connector_funcs = {
418 	.fill_modes = drm_helper_probe_single_connector_modes,
419 	.atomic_get_property = intel_digital_connector_atomic_get_property,
420 	.atomic_set_property = intel_digital_connector_atomic_set_property,
421 	.late_register = intel_connector_register,
422 	.early_unregister = intel_connector_unregister,
423 	.destroy = intel_connector_destroy,
424 	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
425 	.atomic_duplicate_state = intel_digital_connector_duplicate_state,
426 };
427 
428 static int intel_dp_mst_get_modes(struct drm_connector *connector)
429 {
430 	return intel_dp_mst_get_ddc_modes(connector);
431 }
432 
433 static enum drm_mode_status
434 intel_dp_mst_mode_valid(struct drm_connector *connector,
435 			struct drm_display_mode *mode)
436 {
437 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
438 	struct intel_connector *intel_connector = to_intel_connector(connector);
439 	struct intel_dp *intel_dp = intel_connector->mst_port;
440 	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
441 	int max_rate, mode_rate, max_lanes, max_link_clock;
442 
443 	if (drm_connector_is_unregistered(connector))
444 		return MODE_ERROR;
445 
446 	if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
447 		return MODE_NO_DBLESCAN;
448 
449 	max_link_clock = intel_dp_max_link_rate(intel_dp);
450 	max_lanes = intel_dp_max_lane_count(intel_dp);
451 
452 	max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
453 	mode_rate = intel_dp_link_required(mode->clock, 18);
454 
455 	/* TODO - validate mode against available PBN for link */
456 	if (mode->clock < 10000)
457 		return MODE_CLOCK_LOW;
458 
459 	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
460 		return MODE_H_ILLEGAL;
461 
462 	if (mode_rate > max_rate || mode->clock > max_dotclk)
463 		return MODE_CLOCK_HIGH;
464 
465 	return intel_mode_valid_max_plane_size(dev_priv, mode);
466 }
467 
468 static struct drm_encoder *intel_mst_atomic_best_encoder(struct drm_connector *connector,
469 							 struct drm_connector_state *state)
470 {
471 	struct intel_connector *intel_connector = to_intel_connector(connector);
472 	struct intel_dp *intel_dp = intel_connector->mst_port;
473 	struct intel_crtc *crtc = to_intel_crtc(state->crtc);
474 
475 	return &intel_dp->mst_encoders[crtc->pipe]->base.base;
476 }
477 
478 static int
479 intel_dp_mst_detect(struct drm_connector *connector,
480 		    struct drm_modeset_acquire_ctx *ctx, bool force)
481 {
482 	struct intel_connector *intel_connector = to_intel_connector(connector);
483 	struct intel_dp *intel_dp = intel_connector->mst_port;
484 
485 	if (drm_connector_is_unregistered(connector))
486 		return connector_status_disconnected;
487 
488 	return drm_dp_mst_detect_port(connector, ctx, &intel_dp->mst_mgr,
489 				      intel_connector->port);
490 }
491 
492 static const struct drm_connector_helper_funcs intel_dp_mst_connector_helper_funcs = {
493 	.get_modes = intel_dp_mst_get_modes,
494 	.mode_valid = intel_dp_mst_mode_valid,
495 	.atomic_best_encoder = intel_mst_atomic_best_encoder,
496 	.atomic_check = intel_dp_mst_atomic_check,
497 	.detect_ctx = intel_dp_mst_detect,
498 };
499 
500 static void intel_dp_mst_encoder_destroy(struct drm_encoder *encoder)
501 {
502 	struct intel_dp_mst_encoder *intel_mst = enc_to_mst(encoder);
503 
504 	drm_encoder_cleanup(encoder);
505 	kfree(intel_mst);
506 }
507 
508 static const struct drm_encoder_funcs intel_dp_mst_enc_funcs = {
509 	.destroy = intel_dp_mst_encoder_destroy,
510 };
511 
512 static bool intel_dp_mst_get_hw_state(struct intel_connector *connector)
513 {
514 	if (connector->encoder && connector->base.state->crtc) {
515 		enum pipe pipe;
516 		if (!connector->encoder->get_hw_state(connector->encoder, &pipe))
517 			return false;
518 		return true;
519 	}
520 	return false;
521 }
522 
523 static struct drm_connector *intel_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, const char *pathprop)
524 {
525 	struct intel_dp *intel_dp = container_of(mgr, struct intel_dp, mst_mgr);
526 	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
527 	struct drm_device *dev = intel_dig_port->base.base.dev;
528 	struct drm_i915_private *dev_priv = to_i915(dev);
529 	struct intel_connector *intel_connector;
530 	struct drm_connector *connector;
531 	enum pipe pipe;
532 	int ret;
533 
534 	intel_connector = intel_connector_alloc();
535 	if (!intel_connector)
536 		return NULL;
537 
538 	intel_connector->get_hw_state = intel_dp_mst_get_hw_state;
539 	intel_connector->mst_port = intel_dp;
540 	intel_connector->port = port;
541 	drm_dp_mst_get_port_malloc(port);
542 
543 	connector = &intel_connector->base;
544 	ret = drm_connector_init(dev, connector, &intel_dp_mst_connector_funcs,
545 				 DRM_MODE_CONNECTOR_DisplayPort);
546 	if (ret) {
547 		intel_connector_free(intel_connector);
548 		return NULL;
549 	}
550 
551 	drm_connector_helper_add(connector, &intel_dp_mst_connector_helper_funcs);
552 
553 	for_each_pipe(dev_priv, pipe) {
554 		struct drm_encoder *enc =
555 			&intel_dp->mst_encoders[pipe]->base.base;
556 
557 		ret = drm_connector_attach_encoder(&intel_connector->base, enc);
558 		if (ret)
559 			goto err;
560 	}
561 
562 	drm_object_attach_property(&connector->base, dev->mode_config.path_property, 0);
563 	drm_object_attach_property(&connector->base, dev->mode_config.tile_property, 0);
564 
565 	ret = drm_connector_set_path_property(connector, pathprop);
566 	if (ret)
567 		goto err;
568 
569 	intel_attach_force_audio_property(connector);
570 	intel_attach_broadcast_rgb_property(connector);
571 
572 	/*
573 	 * Reuse the prop from the SST connector because we're
574 	 * not allowed to create new props after device registration.
575 	 */
576 	connector->max_bpc_property =
577 		intel_dp->attached_connector->base.max_bpc_property;
578 	if (connector->max_bpc_property)
579 		drm_connector_attach_max_bpc_property(connector, 6, 12);
580 
581 	return connector;
582 
583 err:
584 	drm_connector_cleanup(connector);
585 	return NULL;
586 }
587 
588 static void intel_dp_register_mst_connector(struct drm_connector *connector)
589 {
590 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
591 
592 	if (dev_priv->fbdev)
593 		drm_fb_helper_add_one_connector(&dev_priv->fbdev->helper,
594 						connector);
595 
596 	drm_connector_register(connector);
597 }
598 
599 static void intel_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
600 					   struct drm_connector *connector)
601 {
602 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
603 
604 	DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", connector->base.id, connector->name);
605 	drm_connector_unregister(connector);
606 
607 	if (dev_priv->fbdev)
608 		drm_fb_helper_remove_one_connector(&dev_priv->fbdev->helper,
609 						   connector);
610 
611 	drm_connector_put(connector);
612 }
613 
614 static const struct drm_dp_mst_topology_cbs mst_cbs = {
615 	.add_connector = intel_dp_add_mst_connector,
616 	.register_connector = intel_dp_register_mst_connector,
617 	.destroy_connector = intel_dp_destroy_mst_connector,
618 };
619 
620 static struct intel_dp_mst_encoder *
621 intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum pipe pipe)
622 {
623 	struct intel_dp_mst_encoder *intel_mst;
624 	struct intel_encoder *intel_encoder;
625 	struct drm_device *dev = intel_dig_port->base.base.dev;
626 
627 	intel_mst = kzalloc(sizeof(*intel_mst), GFP_KERNEL);
628 
629 	if (!intel_mst)
630 		return NULL;
631 
632 	intel_mst->pipe = pipe;
633 	intel_encoder = &intel_mst->base;
634 	intel_mst->primary = intel_dig_port;
635 
636 	drm_encoder_init(dev, &intel_encoder->base, &intel_dp_mst_enc_funcs,
637 			 DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe));
638 
639 	intel_encoder->type = INTEL_OUTPUT_DP_MST;
640 	intel_encoder->power_domain = intel_dig_port->base.power_domain;
641 	intel_encoder->port = intel_dig_port->base.port;
642 	intel_encoder->cloneable = 0;
643 	/*
644 	 * This is wrong, but broken userspace uses the intersection
645 	 * of possible_crtcs of all the encoders of a given connector
646 	 * to figure out which crtcs can drive said connector. What
647 	 * should be used instead is the union of possible_crtcs.
648 	 * To keep such userspace functioning we must misconfigure
649 	 * this to make sure the intersection is not empty :(
650 	 */
651 	intel_encoder->pipe_mask = ~0;
652 
653 	intel_encoder->compute_config = intel_dp_mst_compute_config;
654 	intel_encoder->disable = intel_mst_disable_dp;
655 	intel_encoder->post_disable = intel_mst_post_disable_dp;
656 	intel_encoder->pre_pll_enable = intel_mst_pre_pll_enable_dp;
657 	intel_encoder->pre_enable = intel_mst_pre_enable_dp;
658 	intel_encoder->enable = intel_mst_enable_dp;
659 	intel_encoder->get_hw_state = intel_dp_mst_enc_get_hw_state;
660 	intel_encoder->get_config = intel_dp_mst_enc_get_config;
661 
662 	return intel_mst;
663 
664 }
665 
666 static bool
667 intel_dp_create_fake_mst_encoders(struct intel_digital_port *intel_dig_port)
668 {
669 	struct intel_dp *intel_dp = &intel_dig_port->dp;
670 	struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
671 	enum pipe pipe;
672 
673 	for_each_pipe(dev_priv, pipe)
674 		intel_dp->mst_encoders[pipe] = intel_dp_create_fake_mst_encoder(intel_dig_port, pipe);
675 	return true;
676 }
677 
678 int
679 intel_dp_mst_encoder_active_links(struct intel_digital_port *intel_dig_port)
680 {
681 	return intel_dig_port->dp.active_mst_links;
682 }
683 
684 int
685 intel_dp_mst_encoder_init(struct intel_digital_port *intel_dig_port, int conn_base_id)
686 {
687 	struct drm_i915_private *i915 = to_i915(intel_dig_port->base.base.dev);
688 	struct intel_dp *intel_dp = &intel_dig_port->dp;
689 	enum port port = intel_dig_port->base.port;
690 	int ret;
691 
692 	if (!HAS_DP_MST(i915) || intel_dp_is_edp(intel_dp))
693 		return 0;
694 
695 	if (INTEL_GEN(i915) < 12 && port == PORT_A)
696 		return 0;
697 
698 	if (INTEL_GEN(i915) < 11 && port == PORT_E)
699 		return 0;
700 
701 	intel_dp->mst_mgr.cbs = &mst_cbs;
702 
703 	/* create encoders */
704 	intel_dp_create_fake_mst_encoders(intel_dig_port);
705 	ret = drm_dp_mst_topology_mgr_init(&intel_dp->mst_mgr, &i915->drm,
706 					   &intel_dp->aux, 16, 3, conn_base_id);
707 	if (ret)
708 		return ret;
709 
710 	intel_dp->can_mst = true;
711 
712 	return 0;
713 }
714 
715 void
716 intel_dp_mst_encoder_cleanup(struct intel_digital_port *intel_dig_port)
717 {
718 	struct intel_dp *intel_dp = &intel_dig_port->dp;
719 
720 	if (!intel_dp->can_mst)
721 		return;
722 
723 	drm_dp_mst_topology_mgr_destroy(&intel_dp->mst_mgr);
724 	/* encoders will get killed by normal cleanup */
725 }
726