xref: /openbmc/linux/drivers/gpu/drm/i915/display/g4x_dp.c (revision 3d8853dd)
1 // SPDX-License-Identifier: MIT
2 /*
3  * Copyright © 2020 Intel Corporation
4  *
5  * DisplayPort support for G4x,ILK,SNB,IVB,VLV,CHV (HSW+ handled by the DDI code).
6  */
7 
8 #include <linux/string_helpers.h>
9 
10 #include "g4x_dp.h"
11 #include "i915_reg.h"
12 #include "intel_audio.h"
13 #include "intel_backlight.h"
14 #include "intel_connector.h"
15 #include "intel_crtc.h"
16 #include "intel_de.h"
17 #include "intel_display_power.h"
18 #include "intel_display_types.h"
19 #include "intel_dp.h"
20 #include "intel_dp_link_training.h"
21 #include "intel_dpio_phy.h"
22 #include "intel_fifo_underrun.h"
23 #include "intel_hdmi.h"
24 #include "intel_hotplug.h"
25 #include "intel_pch_display.h"
26 #include "intel_pps.h"
27 #include "vlv_sideband.h"
28 
29 static const struct dpll g4x_dpll[] = {
30 	{ .dot = 162000, .p1 = 2, .p2 = 10, .n = 2, .m1 = 23, .m2 = 8, },
31 	{ .dot = 270000, .p1 = 1, .p2 = 10, .n = 1, .m1 = 14, .m2 = 2, },
32 };
33 
34 static const struct dpll pch_dpll[] = {
35 	{ .dot = 162000, .p1 = 2, .p2 = 10, .n = 1, .m1 = 12, .m2 = 9, },
36 	{ .dot = 270000, .p1 = 1, .p2 = 10, .n = 2, .m1 = 14, .m2 = 8, },
37 };
38 
39 static const struct dpll vlv_dpll[] = {
40 	{ .dot = 162000, .p1 = 3, .p2 = 2, .n = 5, .m1 = 3, .m2 = 81, },
41 	{ .dot = 270000, .p1 = 2, .p2 = 2, .n = 1, .m1 = 2, .m2 = 27, },
42 };
43 
44 static const struct dpll chv_dpll[] = {
45 	/* m2 is .22 binary fixed point  */
46 	{ .dot = 162000, .p1 = 4, .p2 = 2, .n = 1, .m1 = 2, .m2 = 0x819999a /* 32.4 */ },
47 	{ .dot = 270000, .p1 = 4, .p2 = 1, .n = 1, .m1 = 2, .m2 = 0x6c00000 /* 27.0 */ },
48 };
49 
50 const struct dpll *vlv_get_dpll(struct drm_i915_private *i915)
51 {
52 	return IS_CHERRYVIEW(i915) ? &chv_dpll[0] : &vlv_dpll[0];
53 }
54 
55 void g4x_dp_set_clock(struct intel_encoder *encoder,
56 		      struct intel_crtc_state *pipe_config)
57 {
58 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
59 	const struct dpll *divisor = NULL;
60 	int i, count = 0;
61 
62 	if (IS_G4X(dev_priv)) {
63 		divisor = g4x_dpll;
64 		count = ARRAY_SIZE(g4x_dpll);
65 	} else if (HAS_PCH_SPLIT(dev_priv)) {
66 		divisor = pch_dpll;
67 		count = ARRAY_SIZE(pch_dpll);
68 	} else if (IS_CHERRYVIEW(dev_priv)) {
69 		divisor = chv_dpll;
70 		count = ARRAY_SIZE(chv_dpll);
71 	} else if (IS_VALLEYVIEW(dev_priv)) {
72 		divisor = vlv_dpll;
73 		count = ARRAY_SIZE(vlv_dpll);
74 	}
75 
76 	if (divisor && count) {
77 		for (i = 0; i < count; i++) {
78 			if (pipe_config->port_clock == divisor[i].dot) {
79 				pipe_config->dpll = divisor[i];
80 				pipe_config->clock_set = true;
81 				break;
82 			}
83 		}
84 	}
85 }
86 
87 static void intel_dp_prepare(struct intel_encoder *encoder,
88 			     const struct intel_crtc_state *pipe_config)
89 {
90 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
91 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
92 	enum port port = encoder->port;
93 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
94 	const struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode;
95 
96 	intel_dp_set_link_params(intel_dp,
97 				 pipe_config->port_clock,
98 				 pipe_config->lane_count);
99 
100 	/*
101 	 * There are four kinds of DP registers:
102 	 * IBX PCH
103 	 * SNB CPU
104 	 * IVB CPU
105 	 * CPT PCH
106 	 *
107 	 * IBX PCH and CPU are the same for almost everything,
108 	 * except that the CPU DP PLL is configured in this
109 	 * register
110 	 *
111 	 * CPT PCH is quite different, having many bits moved
112 	 * to the TRANS_DP_CTL register instead. That
113 	 * configuration happens (oddly) in ilk_pch_enable
114 	 */
115 
116 	/* Preserve the BIOS-computed detected bit. This is
117 	 * supposed to be read-only.
118 	 */
119 	intel_dp->DP = intel_de_read(dev_priv, intel_dp->output_reg) & DP_DETECTED;
120 
121 	/* Handle DP bits in common between all three register formats */
122 	intel_dp->DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
123 	intel_dp->DP |= DP_PORT_WIDTH(pipe_config->lane_count);
124 
125 	/* Split out the IBX/CPU vs CPT settings */
126 
127 	if (IS_IVYBRIDGE(dev_priv) && port == PORT_A) {
128 		if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
129 			intel_dp->DP |= DP_SYNC_HS_HIGH;
130 		if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
131 			intel_dp->DP |= DP_SYNC_VS_HIGH;
132 		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
133 
134 		if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
135 			intel_dp->DP |= DP_ENHANCED_FRAMING;
136 
137 		intel_dp->DP |= DP_PIPE_SEL_IVB(crtc->pipe);
138 	} else if (HAS_PCH_CPT(dev_priv) && port != PORT_A) {
139 		u32 trans_dp;
140 
141 		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
142 
143 		trans_dp = intel_de_read(dev_priv, TRANS_DP_CTL(crtc->pipe));
144 		if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
145 			trans_dp |= TRANS_DP_ENH_FRAMING;
146 		else
147 			trans_dp &= ~TRANS_DP_ENH_FRAMING;
148 		intel_de_write(dev_priv, TRANS_DP_CTL(crtc->pipe), trans_dp);
149 	} else {
150 		if (IS_G4X(dev_priv) && pipe_config->limited_color_range)
151 			intel_dp->DP |= DP_COLOR_RANGE_16_235;
152 
153 		if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
154 			intel_dp->DP |= DP_SYNC_HS_HIGH;
155 		if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
156 			intel_dp->DP |= DP_SYNC_VS_HIGH;
157 		intel_dp->DP |= DP_LINK_TRAIN_OFF;
158 
159 		if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
160 			intel_dp->DP |= DP_ENHANCED_FRAMING;
161 
162 		if (IS_CHERRYVIEW(dev_priv))
163 			intel_dp->DP |= DP_PIPE_SEL_CHV(crtc->pipe);
164 		else
165 			intel_dp->DP |= DP_PIPE_SEL(crtc->pipe);
166 	}
167 }
168 
169 static void assert_dp_port(struct intel_dp *intel_dp, bool state)
170 {
171 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
172 	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
173 	bool cur_state = intel_de_read(dev_priv, intel_dp->output_reg) & DP_PORT_EN;
174 
175 	I915_STATE_WARN(cur_state != state,
176 			"[ENCODER:%d:%s] state assertion failure (expected %s, current %s)\n",
177 			dig_port->base.base.base.id, dig_port->base.base.name,
178 			str_on_off(state), str_on_off(cur_state));
179 }
180 #define assert_dp_port_disabled(d) assert_dp_port((d), false)
181 
182 static void assert_edp_pll(struct drm_i915_private *dev_priv, bool state)
183 {
184 	bool cur_state = intel_de_read(dev_priv, DP_A) & DP_PLL_ENABLE;
185 
186 	I915_STATE_WARN(cur_state != state,
187 			"eDP PLL state assertion failure (expected %s, current %s)\n",
188 			str_on_off(state), str_on_off(cur_state));
189 }
190 #define assert_edp_pll_enabled(d) assert_edp_pll((d), true)
191 #define assert_edp_pll_disabled(d) assert_edp_pll((d), false)
192 
193 static void ilk_edp_pll_on(struct intel_dp *intel_dp,
194 			   const struct intel_crtc_state *pipe_config)
195 {
196 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
197 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
198 
199 	assert_transcoder_disabled(dev_priv, pipe_config->cpu_transcoder);
200 	assert_dp_port_disabled(intel_dp);
201 	assert_edp_pll_disabled(dev_priv);
202 
203 	drm_dbg_kms(&dev_priv->drm, "enabling eDP PLL for clock %d\n",
204 		    pipe_config->port_clock);
205 
206 	intel_dp->DP &= ~DP_PLL_FREQ_MASK;
207 
208 	if (pipe_config->port_clock == 162000)
209 		intel_dp->DP |= DP_PLL_FREQ_162MHZ;
210 	else
211 		intel_dp->DP |= DP_PLL_FREQ_270MHZ;
212 
213 	intel_de_write(dev_priv, DP_A, intel_dp->DP);
214 	intel_de_posting_read(dev_priv, DP_A);
215 	udelay(500);
216 
217 	/*
218 	 * [DevILK] Work around required when enabling DP PLL
219 	 * while a pipe is enabled going to FDI:
220 	 * 1. Wait for the start of vertical blank on the enabled pipe going to FDI
221 	 * 2. Program DP PLL enable
222 	 */
223 	if (IS_IRONLAKE(dev_priv))
224 		intel_wait_for_vblank_if_active(dev_priv, !crtc->pipe);
225 
226 	intel_dp->DP |= DP_PLL_ENABLE;
227 
228 	intel_de_write(dev_priv, DP_A, intel_dp->DP);
229 	intel_de_posting_read(dev_priv, DP_A);
230 	udelay(200);
231 }
232 
233 static void ilk_edp_pll_off(struct intel_dp *intel_dp,
234 			    const struct intel_crtc_state *old_crtc_state)
235 {
236 	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
237 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
238 
239 	assert_transcoder_disabled(dev_priv, old_crtc_state->cpu_transcoder);
240 	assert_dp_port_disabled(intel_dp);
241 	assert_edp_pll_enabled(dev_priv);
242 
243 	drm_dbg_kms(&dev_priv->drm, "disabling eDP PLL\n");
244 
245 	intel_dp->DP &= ~DP_PLL_ENABLE;
246 
247 	intel_de_write(dev_priv, DP_A, intel_dp->DP);
248 	intel_de_posting_read(dev_priv, DP_A);
249 	udelay(200);
250 }
251 
252 static bool cpt_dp_port_selected(struct drm_i915_private *dev_priv,
253 				 enum port port, enum pipe *pipe)
254 {
255 	enum pipe p;
256 
257 	for_each_pipe(dev_priv, p) {
258 		u32 val = intel_de_read(dev_priv, TRANS_DP_CTL(p));
259 
260 		if ((val & TRANS_DP_PORT_SEL_MASK) == TRANS_DP_PORT_SEL(port)) {
261 			*pipe = p;
262 			return true;
263 		}
264 	}
265 
266 	drm_dbg_kms(&dev_priv->drm, "No pipe for DP port %c found\n",
267 		    port_name(port));
268 
269 	/* must initialize pipe to something for the asserts */
270 	*pipe = PIPE_A;
271 
272 	return false;
273 }
274 
275 bool g4x_dp_port_enabled(struct drm_i915_private *dev_priv,
276 			 i915_reg_t dp_reg, enum port port,
277 			 enum pipe *pipe)
278 {
279 	bool ret;
280 	u32 val;
281 
282 	val = intel_de_read(dev_priv, dp_reg);
283 
284 	ret = val & DP_PORT_EN;
285 
286 	/* asserts want to know the pipe even if the port is disabled */
287 	if (IS_IVYBRIDGE(dev_priv) && port == PORT_A)
288 		*pipe = (val & DP_PIPE_SEL_MASK_IVB) >> DP_PIPE_SEL_SHIFT_IVB;
289 	else if (HAS_PCH_CPT(dev_priv) && port != PORT_A)
290 		ret &= cpt_dp_port_selected(dev_priv, port, pipe);
291 	else if (IS_CHERRYVIEW(dev_priv))
292 		*pipe = (val & DP_PIPE_SEL_MASK_CHV) >> DP_PIPE_SEL_SHIFT_CHV;
293 	else
294 		*pipe = (val & DP_PIPE_SEL_MASK) >> DP_PIPE_SEL_SHIFT;
295 
296 	return ret;
297 }
298 
299 static bool intel_dp_get_hw_state(struct intel_encoder *encoder,
300 				  enum pipe *pipe)
301 {
302 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
303 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
304 	intel_wakeref_t wakeref;
305 	bool ret;
306 
307 	wakeref = intel_display_power_get_if_enabled(dev_priv,
308 						     encoder->power_domain);
309 	if (!wakeref)
310 		return false;
311 
312 	ret = g4x_dp_port_enabled(dev_priv, intel_dp->output_reg,
313 				  encoder->port, pipe);
314 
315 	intel_display_power_put(dev_priv, encoder->power_domain, wakeref);
316 
317 	return ret;
318 }
319 
320 static void g4x_dp_get_m_n(struct intel_crtc_state *crtc_state)
321 {
322 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
323 
324 	if (crtc_state->has_pch_encoder) {
325 		intel_pch_transcoder_get_m1_n1(crtc, &crtc_state->dp_m_n);
326 		intel_pch_transcoder_get_m2_n2(crtc, &crtc_state->dp_m2_n2);
327 	} else {
328 		intel_cpu_transcoder_get_m1_n1(crtc, crtc_state->cpu_transcoder,
329 					       &crtc_state->dp_m_n);
330 		intel_cpu_transcoder_get_m2_n2(crtc, crtc_state->cpu_transcoder,
331 					       &crtc_state->dp_m2_n2);
332 	}
333 }
334 
335 static void intel_dp_get_config(struct intel_encoder *encoder,
336 				struct intel_crtc_state *pipe_config)
337 {
338 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
339 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
340 	u32 tmp, flags = 0;
341 	enum port port = encoder->port;
342 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
343 
344 	if (encoder->type == INTEL_OUTPUT_EDP)
345 		pipe_config->output_types |= BIT(INTEL_OUTPUT_EDP);
346 	else
347 		pipe_config->output_types |= BIT(INTEL_OUTPUT_DP);
348 
349 	tmp = intel_de_read(dev_priv, intel_dp->output_reg);
350 
351 	pipe_config->has_audio = tmp & DP_AUDIO_OUTPUT_ENABLE && port != PORT_A;
352 
353 	if (HAS_PCH_CPT(dev_priv) && port != PORT_A) {
354 		u32 trans_dp = intel_de_read(dev_priv,
355 					     TRANS_DP_CTL(crtc->pipe));
356 
357 		if (trans_dp & TRANS_DP_HSYNC_ACTIVE_HIGH)
358 			flags |= DRM_MODE_FLAG_PHSYNC;
359 		else
360 			flags |= DRM_MODE_FLAG_NHSYNC;
361 
362 		if (trans_dp & TRANS_DP_VSYNC_ACTIVE_HIGH)
363 			flags |= DRM_MODE_FLAG_PVSYNC;
364 		else
365 			flags |= DRM_MODE_FLAG_NVSYNC;
366 	} else {
367 		if (tmp & DP_SYNC_HS_HIGH)
368 			flags |= DRM_MODE_FLAG_PHSYNC;
369 		else
370 			flags |= DRM_MODE_FLAG_NHSYNC;
371 
372 		if (tmp & DP_SYNC_VS_HIGH)
373 			flags |= DRM_MODE_FLAG_PVSYNC;
374 		else
375 			flags |= DRM_MODE_FLAG_NVSYNC;
376 	}
377 
378 	pipe_config->hw.adjusted_mode.flags |= flags;
379 
380 	if (IS_G4X(dev_priv) && tmp & DP_COLOR_RANGE_16_235)
381 		pipe_config->limited_color_range = true;
382 
383 	pipe_config->lane_count =
384 		((tmp & DP_PORT_WIDTH_MASK) >> DP_PORT_WIDTH_SHIFT) + 1;
385 
386 	g4x_dp_get_m_n(pipe_config);
387 
388 	if (port == PORT_A) {
389 		if ((intel_de_read(dev_priv, DP_A) & DP_PLL_FREQ_MASK) == DP_PLL_FREQ_162MHZ)
390 			pipe_config->port_clock = 162000;
391 		else
392 			pipe_config->port_clock = 270000;
393 	}
394 
395 	pipe_config->hw.adjusted_mode.crtc_clock =
396 		intel_dotclock_calculate(pipe_config->port_clock,
397 					 &pipe_config->dp_m_n);
398 
399 	if (intel_dp_is_edp(intel_dp))
400 		intel_edp_fixup_vbt_bpp(encoder, pipe_config->pipe_bpp);
401 }
402 
403 static void
404 intel_dp_link_down(struct intel_encoder *encoder,
405 		   const struct intel_crtc_state *old_crtc_state)
406 {
407 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
408 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
409 	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
410 	enum port port = encoder->port;
411 
412 	if (drm_WARN_ON(&dev_priv->drm,
413 			(intel_de_read(dev_priv, intel_dp->output_reg) &
414 			 DP_PORT_EN) == 0))
415 		return;
416 
417 	drm_dbg_kms(&dev_priv->drm, "\n");
418 
419 	if ((IS_IVYBRIDGE(dev_priv) && port == PORT_A) ||
420 	    (HAS_PCH_CPT(dev_priv) && port != PORT_A)) {
421 		intel_dp->DP &= ~DP_LINK_TRAIN_MASK_CPT;
422 		intel_dp->DP |= DP_LINK_TRAIN_PAT_IDLE_CPT;
423 	} else {
424 		intel_dp->DP &= ~DP_LINK_TRAIN_MASK;
425 		intel_dp->DP |= DP_LINK_TRAIN_PAT_IDLE;
426 	}
427 	intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
428 	intel_de_posting_read(dev_priv, intel_dp->output_reg);
429 
430 	intel_dp->DP &= ~(DP_PORT_EN | DP_AUDIO_OUTPUT_ENABLE);
431 	intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
432 	intel_de_posting_read(dev_priv, intel_dp->output_reg);
433 
434 	/*
435 	 * HW workaround for IBX, we need to move the port
436 	 * to transcoder A after disabling it to allow the
437 	 * matching HDMI port to be enabled on transcoder A.
438 	 */
439 	if (HAS_PCH_IBX(dev_priv) && crtc->pipe == PIPE_B && port != PORT_A) {
440 		/*
441 		 * We get CPU/PCH FIFO underruns on the other pipe when
442 		 * doing the workaround. Sweep them under the rug.
443 		 */
444 		intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, false);
445 		intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, false);
446 
447 		/* always enable with pattern 1 (as per spec) */
448 		intel_dp->DP &= ~(DP_PIPE_SEL_MASK | DP_LINK_TRAIN_MASK);
449 		intel_dp->DP |= DP_PORT_EN | DP_PIPE_SEL(PIPE_A) |
450 			DP_LINK_TRAIN_PAT_1;
451 		intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
452 		intel_de_posting_read(dev_priv, intel_dp->output_reg);
453 
454 		intel_dp->DP &= ~DP_PORT_EN;
455 		intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
456 		intel_de_posting_read(dev_priv, intel_dp->output_reg);
457 
458 		intel_wait_for_vblank_if_active(dev_priv, PIPE_A);
459 		intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true);
460 		intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
461 	}
462 
463 	msleep(intel_dp->pps.panel_power_down_delay);
464 
465 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
466 		intel_wakeref_t wakeref;
467 
468 		with_intel_pps_lock(intel_dp, wakeref)
469 			intel_dp->pps.active_pipe = INVALID_PIPE;
470 	}
471 }
472 
473 static void intel_disable_dp(struct intel_atomic_state *state,
474 			     struct intel_encoder *encoder,
475 			     const struct intel_crtc_state *old_crtc_state,
476 			     const struct drm_connector_state *old_conn_state)
477 {
478 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
479 
480 	intel_dp->link_trained = false;
481 
482 	intel_audio_codec_disable(encoder, old_crtc_state, old_conn_state);
483 
484 	/*
485 	 * Make sure the panel is off before trying to change the mode.
486 	 * But also ensure that we have vdd while we switch off the panel.
487 	 */
488 	intel_pps_vdd_on(intel_dp);
489 	intel_edp_backlight_off(old_conn_state);
490 	intel_dp_set_power(intel_dp, DP_SET_POWER_D3);
491 	intel_pps_off(intel_dp);
492 }
493 
494 static void g4x_disable_dp(struct intel_atomic_state *state,
495 			   struct intel_encoder *encoder,
496 			   const struct intel_crtc_state *old_crtc_state,
497 			   const struct drm_connector_state *old_conn_state)
498 {
499 	intel_disable_dp(state, encoder, old_crtc_state, old_conn_state);
500 }
501 
502 static void vlv_disable_dp(struct intel_atomic_state *state,
503 			   struct intel_encoder *encoder,
504 			   const struct intel_crtc_state *old_crtc_state,
505 			   const struct drm_connector_state *old_conn_state)
506 {
507 	intel_disable_dp(state, encoder, old_crtc_state, old_conn_state);
508 }
509 
510 static void g4x_post_disable_dp(struct intel_atomic_state *state,
511 				struct intel_encoder *encoder,
512 				const struct intel_crtc_state *old_crtc_state,
513 				const struct drm_connector_state *old_conn_state)
514 {
515 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
516 	enum port port = encoder->port;
517 
518 	/*
519 	 * Bspec does not list a specific disable sequence for g4x DP.
520 	 * Follow the ilk+ sequence (disable pipe before the port) for
521 	 * g4x DP as it does not suffer from underruns like the normal
522 	 * g4x modeset sequence (disable pipe after the port).
523 	 */
524 	intel_dp_link_down(encoder, old_crtc_state);
525 
526 	/* Only ilk+ has port A */
527 	if (port == PORT_A)
528 		ilk_edp_pll_off(intel_dp, old_crtc_state);
529 }
530 
531 static void vlv_post_disable_dp(struct intel_atomic_state *state,
532 				struct intel_encoder *encoder,
533 				const struct intel_crtc_state *old_crtc_state,
534 				const struct drm_connector_state *old_conn_state)
535 {
536 	intel_dp_link_down(encoder, old_crtc_state);
537 }
538 
539 static void chv_post_disable_dp(struct intel_atomic_state *state,
540 				struct intel_encoder *encoder,
541 				const struct intel_crtc_state *old_crtc_state,
542 				const struct drm_connector_state *old_conn_state)
543 {
544 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
545 
546 	intel_dp_link_down(encoder, old_crtc_state);
547 
548 	vlv_dpio_get(dev_priv);
549 
550 	/* Assert data lane reset */
551 	chv_data_lane_soft_reset(encoder, old_crtc_state, true);
552 
553 	vlv_dpio_put(dev_priv);
554 }
555 
556 static void
557 cpt_set_link_train(struct intel_dp *intel_dp,
558 		   const struct intel_crtc_state *crtc_state,
559 		   u8 dp_train_pat)
560 {
561 	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
562 
563 	intel_dp->DP &= ~DP_LINK_TRAIN_MASK_CPT;
564 
565 	switch (intel_dp_training_pattern_symbol(dp_train_pat)) {
566 	case DP_TRAINING_PATTERN_DISABLE:
567 		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
568 		break;
569 	case DP_TRAINING_PATTERN_1:
570 		intel_dp->DP |= DP_LINK_TRAIN_PAT_1_CPT;
571 		break;
572 	case DP_TRAINING_PATTERN_2:
573 		intel_dp->DP |= DP_LINK_TRAIN_PAT_2_CPT;
574 		break;
575 	default:
576 		MISSING_CASE(intel_dp_training_pattern_symbol(dp_train_pat));
577 		return;
578 	}
579 
580 	intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
581 	intel_de_posting_read(dev_priv, intel_dp->output_reg);
582 }
583 
584 static void
585 g4x_set_link_train(struct intel_dp *intel_dp,
586 		   const struct intel_crtc_state *crtc_state,
587 		   u8 dp_train_pat)
588 {
589 	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
590 
591 	intel_dp->DP &= ~DP_LINK_TRAIN_MASK;
592 
593 	switch (intel_dp_training_pattern_symbol(dp_train_pat)) {
594 	case DP_TRAINING_PATTERN_DISABLE:
595 		intel_dp->DP |= DP_LINK_TRAIN_OFF;
596 		break;
597 	case DP_TRAINING_PATTERN_1:
598 		intel_dp->DP |= DP_LINK_TRAIN_PAT_1;
599 		break;
600 	case DP_TRAINING_PATTERN_2:
601 		intel_dp->DP |= DP_LINK_TRAIN_PAT_2;
602 		break;
603 	default:
604 		MISSING_CASE(intel_dp_training_pattern_symbol(dp_train_pat));
605 		return;
606 	}
607 
608 	intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
609 	intel_de_posting_read(dev_priv, intel_dp->output_reg);
610 }
611 
612 static void intel_dp_enable_port(struct intel_dp *intel_dp,
613 				 const struct intel_crtc_state *crtc_state)
614 {
615 	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
616 
617 	/* enable with pattern 1 (as per spec) */
618 
619 	intel_dp_program_link_training_pattern(intel_dp, crtc_state,
620 					       DP_PHY_DPRX, DP_TRAINING_PATTERN_1);
621 
622 	/*
623 	 * Magic for VLV/CHV. We _must_ first set up the register
624 	 * without actually enabling the port, and then do another
625 	 * write to enable the port. Otherwise link training will
626 	 * fail when the power sequencer is freshly used for this port.
627 	 */
628 	intel_dp->DP |= DP_PORT_EN;
629 	if (crtc_state->has_audio)
630 		intel_dp->DP |= DP_AUDIO_OUTPUT_ENABLE;
631 
632 	intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
633 	intel_de_posting_read(dev_priv, intel_dp->output_reg);
634 }
635 
636 static void intel_enable_dp(struct intel_atomic_state *state,
637 			    struct intel_encoder *encoder,
638 			    const struct intel_crtc_state *pipe_config,
639 			    const struct drm_connector_state *conn_state)
640 {
641 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
642 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
643 	u32 dp_reg = intel_de_read(dev_priv, intel_dp->output_reg);
644 	intel_wakeref_t wakeref;
645 
646 	if (drm_WARN_ON(&dev_priv->drm, dp_reg & DP_PORT_EN))
647 		return;
648 
649 	with_intel_pps_lock(intel_dp, wakeref) {
650 		if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
651 			vlv_pps_init(encoder, pipe_config);
652 
653 		intel_dp_enable_port(intel_dp, pipe_config);
654 
655 		intel_pps_vdd_on_unlocked(intel_dp);
656 		intel_pps_on_unlocked(intel_dp);
657 		intel_pps_vdd_off_unlocked(intel_dp, true);
658 	}
659 
660 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
661 		unsigned int lane_mask = 0x0;
662 
663 		if (IS_CHERRYVIEW(dev_priv))
664 			lane_mask = intel_dp_unused_lane_mask(pipe_config->lane_count);
665 
666 		vlv_wait_port_ready(dev_priv, dp_to_dig_port(intel_dp),
667 				    lane_mask);
668 	}
669 
670 	intel_dp_set_power(intel_dp, DP_SET_POWER_D0);
671 	intel_dp_configure_protocol_converter(intel_dp, pipe_config);
672 	intel_dp_check_frl_training(intel_dp);
673 	intel_dp_pcon_dsc_configure(intel_dp, pipe_config);
674 	intel_dp_start_link_train(intel_dp, pipe_config);
675 	intel_dp_stop_link_train(intel_dp, pipe_config);
676 
677 	intel_audio_codec_enable(encoder, pipe_config, conn_state);
678 }
679 
680 static void g4x_enable_dp(struct intel_atomic_state *state,
681 			  struct intel_encoder *encoder,
682 			  const struct intel_crtc_state *pipe_config,
683 			  const struct drm_connector_state *conn_state)
684 {
685 	intel_enable_dp(state, encoder, pipe_config, conn_state);
686 	intel_edp_backlight_on(pipe_config, conn_state);
687 }
688 
689 static void vlv_enable_dp(struct intel_atomic_state *state,
690 			  struct intel_encoder *encoder,
691 			  const struct intel_crtc_state *pipe_config,
692 			  const struct drm_connector_state *conn_state)
693 {
694 	intel_edp_backlight_on(pipe_config, conn_state);
695 }
696 
697 static void g4x_pre_enable_dp(struct intel_atomic_state *state,
698 			      struct intel_encoder *encoder,
699 			      const struct intel_crtc_state *pipe_config,
700 			      const struct drm_connector_state *conn_state)
701 {
702 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
703 	enum port port = encoder->port;
704 
705 	intel_dp_prepare(encoder, pipe_config);
706 
707 	/* Only ilk+ has port A */
708 	if (port == PORT_A)
709 		ilk_edp_pll_on(intel_dp, pipe_config);
710 }
711 
712 static void vlv_pre_enable_dp(struct intel_atomic_state *state,
713 			      struct intel_encoder *encoder,
714 			      const struct intel_crtc_state *pipe_config,
715 			      const struct drm_connector_state *conn_state)
716 {
717 	vlv_phy_pre_encoder_enable(encoder, pipe_config);
718 
719 	intel_enable_dp(state, encoder, pipe_config, conn_state);
720 }
721 
722 static void vlv_dp_pre_pll_enable(struct intel_atomic_state *state,
723 				  struct intel_encoder *encoder,
724 				  const struct intel_crtc_state *pipe_config,
725 				  const struct drm_connector_state *conn_state)
726 {
727 	intel_dp_prepare(encoder, pipe_config);
728 
729 	vlv_phy_pre_pll_enable(encoder, pipe_config);
730 }
731 
732 static void chv_pre_enable_dp(struct intel_atomic_state *state,
733 			      struct intel_encoder *encoder,
734 			      const struct intel_crtc_state *pipe_config,
735 			      const struct drm_connector_state *conn_state)
736 {
737 	chv_phy_pre_encoder_enable(encoder, pipe_config);
738 
739 	intel_enable_dp(state, encoder, pipe_config, conn_state);
740 
741 	/* Second common lane will stay alive on its own now */
742 	chv_phy_release_cl2_override(encoder);
743 }
744 
745 static void chv_dp_pre_pll_enable(struct intel_atomic_state *state,
746 				  struct intel_encoder *encoder,
747 				  const struct intel_crtc_state *pipe_config,
748 				  const struct drm_connector_state *conn_state)
749 {
750 	intel_dp_prepare(encoder, pipe_config);
751 
752 	chv_phy_pre_pll_enable(encoder, pipe_config);
753 }
754 
755 static void chv_dp_post_pll_disable(struct intel_atomic_state *state,
756 				    struct intel_encoder *encoder,
757 				    const struct intel_crtc_state *old_crtc_state,
758 				    const struct drm_connector_state *old_conn_state)
759 {
760 	chv_phy_post_pll_disable(encoder, old_crtc_state);
761 }
762 
763 static u8 intel_dp_voltage_max_2(struct intel_dp *intel_dp,
764 				 const struct intel_crtc_state *crtc_state)
765 {
766 	return DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
767 }
768 
769 static u8 intel_dp_voltage_max_3(struct intel_dp *intel_dp,
770 				 const struct intel_crtc_state *crtc_state)
771 {
772 	return DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
773 }
774 
775 static u8 intel_dp_preemph_max_2(struct intel_dp *intel_dp)
776 {
777 	return DP_TRAIN_PRE_EMPH_LEVEL_2;
778 }
779 
780 static u8 intel_dp_preemph_max_3(struct intel_dp *intel_dp)
781 {
782 	return DP_TRAIN_PRE_EMPH_LEVEL_3;
783 }
784 
785 static void vlv_set_signal_levels(struct intel_encoder *encoder,
786 				  const struct intel_crtc_state *crtc_state)
787 {
788 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
789 	unsigned long demph_reg_value, preemph_reg_value,
790 		uniqtranscale_reg_value;
791 	u8 train_set = intel_dp->train_set[0];
792 
793 	switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) {
794 	case DP_TRAIN_PRE_EMPH_LEVEL_0:
795 		preemph_reg_value = 0x0004000;
796 		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
797 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
798 			demph_reg_value = 0x2B405555;
799 			uniqtranscale_reg_value = 0x552AB83A;
800 			break;
801 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
802 			demph_reg_value = 0x2B404040;
803 			uniqtranscale_reg_value = 0x5548B83A;
804 			break;
805 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
806 			demph_reg_value = 0x2B245555;
807 			uniqtranscale_reg_value = 0x5560B83A;
808 			break;
809 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
810 			demph_reg_value = 0x2B405555;
811 			uniqtranscale_reg_value = 0x5598DA3A;
812 			break;
813 		default:
814 			return;
815 		}
816 		break;
817 	case DP_TRAIN_PRE_EMPH_LEVEL_1:
818 		preemph_reg_value = 0x0002000;
819 		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
820 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
821 			demph_reg_value = 0x2B404040;
822 			uniqtranscale_reg_value = 0x5552B83A;
823 			break;
824 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
825 			demph_reg_value = 0x2B404848;
826 			uniqtranscale_reg_value = 0x5580B83A;
827 			break;
828 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
829 			demph_reg_value = 0x2B404040;
830 			uniqtranscale_reg_value = 0x55ADDA3A;
831 			break;
832 		default:
833 			return;
834 		}
835 		break;
836 	case DP_TRAIN_PRE_EMPH_LEVEL_2:
837 		preemph_reg_value = 0x0000000;
838 		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
839 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
840 			demph_reg_value = 0x2B305555;
841 			uniqtranscale_reg_value = 0x5570B83A;
842 			break;
843 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
844 			demph_reg_value = 0x2B2B4040;
845 			uniqtranscale_reg_value = 0x55ADDA3A;
846 			break;
847 		default:
848 			return;
849 		}
850 		break;
851 	case DP_TRAIN_PRE_EMPH_LEVEL_3:
852 		preemph_reg_value = 0x0006000;
853 		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
854 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
855 			demph_reg_value = 0x1B405555;
856 			uniqtranscale_reg_value = 0x55ADDA3A;
857 			break;
858 		default:
859 			return;
860 		}
861 		break;
862 	default:
863 		return;
864 	}
865 
866 	vlv_set_phy_signal_level(encoder, crtc_state,
867 				 demph_reg_value, preemph_reg_value,
868 				 uniqtranscale_reg_value, 0);
869 }
870 
871 static void chv_set_signal_levels(struct intel_encoder *encoder,
872 				  const struct intel_crtc_state *crtc_state)
873 {
874 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
875 	u32 deemph_reg_value, margin_reg_value;
876 	bool uniq_trans_scale = false;
877 	u8 train_set = intel_dp->train_set[0];
878 
879 	switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) {
880 	case DP_TRAIN_PRE_EMPH_LEVEL_0:
881 		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
882 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
883 			deemph_reg_value = 128;
884 			margin_reg_value = 52;
885 			break;
886 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
887 			deemph_reg_value = 128;
888 			margin_reg_value = 77;
889 			break;
890 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
891 			deemph_reg_value = 128;
892 			margin_reg_value = 102;
893 			break;
894 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
895 			deemph_reg_value = 128;
896 			margin_reg_value = 154;
897 			uniq_trans_scale = true;
898 			break;
899 		default:
900 			return;
901 		}
902 		break;
903 	case DP_TRAIN_PRE_EMPH_LEVEL_1:
904 		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
905 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
906 			deemph_reg_value = 85;
907 			margin_reg_value = 78;
908 			break;
909 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
910 			deemph_reg_value = 85;
911 			margin_reg_value = 116;
912 			break;
913 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
914 			deemph_reg_value = 85;
915 			margin_reg_value = 154;
916 			break;
917 		default:
918 			return;
919 		}
920 		break;
921 	case DP_TRAIN_PRE_EMPH_LEVEL_2:
922 		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
923 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
924 			deemph_reg_value = 64;
925 			margin_reg_value = 104;
926 			break;
927 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
928 			deemph_reg_value = 64;
929 			margin_reg_value = 154;
930 			break;
931 		default:
932 			return;
933 		}
934 		break;
935 	case DP_TRAIN_PRE_EMPH_LEVEL_3:
936 		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
937 		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
938 			deemph_reg_value = 43;
939 			margin_reg_value = 154;
940 			break;
941 		default:
942 			return;
943 		}
944 		break;
945 	default:
946 		return;
947 	}
948 
949 	chv_set_phy_signal_level(encoder, crtc_state,
950 				 deemph_reg_value, margin_reg_value,
951 				 uniq_trans_scale);
952 }
953 
954 static u32 g4x_signal_levels(u8 train_set)
955 {
956 	u32 signal_levels = 0;
957 
958 	switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
959 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
960 	default:
961 		signal_levels |= DP_VOLTAGE_0_4;
962 		break;
963 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
964 		signal_levels |= DP_VOLTAGE_0_6;
965 		break;
966 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
967 		signal_levels |= DP_VOLTAGE_0_8;
968 		break;
969 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
970 		signal_levels |= DP_VOLTAGE_1_2;
971 		break;
972 	}
973 	switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) {
974 	case DP_TRAIN_PRE_EMPH_LEVEL_0:
975 	default:
976 		signal_levels |= DP_PRE_EMPHASIS_0;
977 		break;
978 	case DP_TRAIN_PRE_EMPH_LEVEL_1:
979 		signal_levels |= DP_PRE_EMPHASIS_3_5;
980 		break;
981 	case DP_TRAIN_PRE_EMPH_LEVEL_2:
982 		signal_levels |= DP_PRE_EMPHASIS_6;
983 		break;
984 	case DP_TRAIN_PRE_EMPH_LEVEL_3:
985 		signal_levels |= DP_PRE_EMPHASIS_9_5;
986 		break;
987 	}
988 	return signal_levels;
989 }
990 
991 static void
992 g4x_set_signal_levels(struct intel_encoder *encoder,
993 		      const struct intel_crtc_state *crtc_state)
994 {
995 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
996 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
997 	u8 train_set = intel_dp->train_set[0];
998 	u32 signal_levels;
999 
1000 	signal_levels = g4x_signal_levels(train_set);
1001 
1002 	drm_dbg_kms(&dev_priv->drm, "Using signal levels %08x\n",
1003 		    signal_levels);
1004 
1005 	intel_dp->DP &= ~(DP_VOLTAGE_MASK | DP_PRE_EMPHASIS_MASK);
1006 	intel_dp->DP |= signal_levels;
1007 
1008 	intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
1009 	intel_de_posting_read(dev_priv, intel_dp->output_reg);
1010 }
1011 
1012 /* SNB CPU eDP voltage swing and pre-emphasis control */
1013 static u32 snb_cpu_edp_signal_levels(u8 train_set)
1014 {
1015 	u8 signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
1016 					DP_TRAIN_PRE_EMPHASIS_MASK);
1017 
1018 	switch (signal_levels) {
1019 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1020 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1021 		return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
1022 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_1:
1023 		return EDP_LINK_TRAIN_400MV_3_5DB_SNB_B;
1024 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_2:
1025 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_2:
1026 		return EDP_LINK_TRAIN_400_600MV_6DB_SNB_B;
1027 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_1:
1028 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_1:
1029 		return EDP_LINK_TRAIN_600_800MV_3_5DB_SNB_B;
1030 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1031 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_3 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1032 		return EDP_LINK_TRAIN_800_1200MV_0DB_SNB_B;
1033 	default:
1034 		MISSING_CASE(signal_levels);
1035 		return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
1036 	}
1037 }
1038 
1039 static void
1040 snb_cpu_edp_set_signal_levels(struct intel_encoder *encoder,
1041 			      const struct intel_crtc_state *crtc_state)
1042 {
1043 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1044 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1045 	u8 train_set = intel_dp->train_set[0];
1046 	u32 signal_levels;
1047 
1048 	signal_levels = snb_cpu_edp_signal_levels(train_set);
1049 
1050 	drm_dbg_kms(&dev_priv->drm, "Using signal levels %08x\n",
1051 		    signal_levels);
1052 
1053 	intel_dp->DP &= ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB;
1054 	intel_dp->DP |= signal_levels;
1055 
1056 	intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
1057 	intel_de_posting_read(dev_priv, intel_dp->output_reg);
1058 }
1059 
1060 /* IVB CPU eDP voltage swing and pre-emphasis control */
1061 static u32 ivb_cpu_edp_signal_levels(u8 train_set)
1062 {
1063 	u8 signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
1064 					DP_TRAIN_PRE_EMPHASIS_MASK);
1065 
1066 	switch (signal_levels) {
1067 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1068 		return EDP_LINK_TRAIN_400MV_0DB_IVB;
1069 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_1:
1070 		return EDP_LINK_TRAIN_400MV_3_5DB_IVB;
1071 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_2:
1072 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_2:
1073 		return EDP_LINK_TRAIN_400MV_6DB_IVB;
1074 
1075 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1076 		return EDP_LINK_TRAIN_600MV_0DB_IVB;
1077 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_1:
1078 		return EDP_LINK_TRAIN_600MV_3_5DB_IVB;
1079 
1080 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_0:
1081 		return EDP_LINK_TRAIN_800MV_0DB_IVB;
1082 	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_1:
1083 		return EDP_LINK_TRAIN_800MV_3_5DB_IVB;
1084 
1085 	default:
1086 		MISSING_CASE(signal_levels);
1087 		return EDP_LINK_TRAIN_500MV_0DB_IVB;
1088 	}
1089 }
1090 
1091 static void
1092 ivb_cpu_edp_set_signal_levels(struct intel_encoder *encoder,
1093 			      const struct intel_crtc_state *crtc_state)
1094 {
1095 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1096 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1097 	u8 train_set = intel_dp->train_set[0];
1098 	u32 signal_levels;
1099 
1100 	signal_levels = ivb_cpu_edp_signal_levels(train_set);
1101 
1102 	drm_dbg_kms(&dev_priv->drm, "Using signal levels %08x\n",
1103 		    signal_levels);
1104 
1105 	intel_dp->DP &= ~EDP_LINK_TRAIN_VOL_EMP_MASK_IVB;
1106 	intel_dp->DP |= signal_levels;
1107 
1108 	intel_de_write(dev_priv, intel_dp->output_reg, intel_dp->DP);
1109 	intel_de_posting_read(dev_priv, intel_dp->output_reg);
1110 }
1111 
1112 /*
1113  * If display is now connected check links status,
1114  * there has been known issues of link loss triggering
1115  * long pulse.
1116  *
1117  * Some sinks (eg. ASUS PB287Q) seem to perform some
1118  * weird HPD ping pong during modesets. So we can apparently
1119  * end up with HPD going low during a modeset, and then
1120  * going back up soon after. And once that happens we must
1121  * retrain the link to get a picture. That's in case no
1122  * userspace component reacted to intermittent HPD dip.
1123  */
1124 static enum intel_hotplug_state
1125 intel_dp_hotplug(struct intel_encoder *encoder,
1126 		 struct intel_connector *connector)
1127 {
1128 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1129 	struct drm_modeset_acquire_ctx ctx;
1130 	enum intel_hotplug_state state;
1131 	int ret;
1132 
1133 	if (intel_dp->compliance.test_active &&
1134 	    intel_dp->compliance.test_type == DP_TEST_LINK_PHY_TEST_PATTERN) {
1135 		intel_dp_phy_test(encoder);
1136 		/* just do the PHY test and nothing else */
1137 		return INTEL_HOTPLUG_UNCHANGED;
1138 	}
1139 
1140 	state = intel_encoder_hotplug(encoder, connector);
1141 
1142 	drm_modeset_acquire_init(&ctx, 0);
1143 
1144 	for (;;) {
1145 		ret = intel_dp_retrain_link(encoder, &ctx);
1146 
1147 		if (ret == -EDEADLK) {
1148 			drm_modeset_backoff(&ctx);
1149 			continue;
1150 		}
1151 
1152 		break;
1153 	}
1154 
1155 	drm_modeset_drop_locks(&ctx);
1156 	drm_modeset_acquire_fini(&ctx);
1157 	drm_WARN(encoder->base.dev, ret,
1158 		 "Acquiring modeset locks failed with %i\n", ret);
1159 
1160 	/*
1161 	 * Keeping it consistent with intel_ddi_hotplug() and
1162 	 * intel_hdmi_hotplug().
1163 	 */
1164 	if (state == INTEL_HOTPLUG_UNCHANGED && !connector->hotplug_retries)
1165 		state = INTEL_HOTPLUG_RETRY;
1166 
1167 	return state;
1168 }
1169 
1170 static bool ibx_digital_port_connected(struct intel_encoder *encoder)
1171 {
1172 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1173 	u32 bit = dev_priv->display.hotplug.pch_hpd[encoder->hpd_pin];
1174 
1175 	return intel_de_read(dev_priv, SDEISR) & bit;
1176 }
1177 
1178 static bool g4x_digital_port_connected(struct intel_encoder *encoder)
1179 {
1180 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1181 	u32 bit;
1182 
1183 	switch (encoder->hpd_pin) {
1184 	case HPD_PORT_B:
1185 		bit = PORTB_HOTPLUG_LIVE_STATUS_G4X;
1186 		break;
1187 	case HPD_PORT_C:
1188 		bit = PORTC_HOTPLUG_LIVE_STATUS_G4X;
1189 		break;
1190 	case HPD_PORT_D:
1191 		bit = PORTD_HOTPLUG_LIVE_STATUS_G4X;
1192 		break;
1193 	default:
1194 		MISSING_CASE(encoder->hpd_pin);
1195 		return false;
1196 	}
1197 
1198 	return intel_de_read(dev_priv, PORT_HOTPLUG_STAT) & bit;
1199 }
1200 
1201 static bool gm45_digital_port_connected(struct intel_encoder *encoder)
1202 {
1203 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1204 	u32 bit;
1205 
1206 	switch (encoder->hpd_pin) {
1207 	case HPD_PORT_B:
1208 		bit = PORTB_HOTPLUG_LIVE_STATUS_GM45;
1209 		break;
1210 	case HPD_PORT_C:
1211 		bit = PORTC_HOTPLUG_LIVE_STATUS_GM45;
1212 		break;
1213 	case HPD_PORT_D:
1214 		bit = PORTD_HOTPLUG_LIVE_STATUS_GM45;
1215 		break;
1216 	default:
1217 		MISSING_CASE(encoder->hpd_pin);
1218 		return false;
1219 	}
1220 
1221 	return intel_de_read(dev_priv, PORT_HOTPLUG_STAT) & bit;
1222 }
1223 
1224 static bool ilk_digital_port_connected(struct intel_encoder *encoder)
1225 {
1226 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1227 	u32 bit = dev_priv->display.hotplug.hpd[encoder->hpd_pin];
1228 
1229 	return intel_de_read(dev_priv, DEISR) & bit;
1230 }
1231 
1232 static void intel_dp_encoder_destroy(struct drm_encoder *encoder)
1233 {
1234 	intel_dp_encoder_flush_work(encoder);
1235 
1236 	drm_encoder_cleanup(encoder);
1237 	kfree(enc_to_dig_port(to_intel_encoder(encoder)));
1238 }
1239 
1240 enum pipe vlv_active_pipe(struct intel_dp *intel_dp)
1241 {
1242 	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
1243 	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
1244 	enum pipe pipe;
1245 
1246 	if (g4x_dp_port_enabled(dev_priv, intel_dp->output_reg,
1247 				encoder->port, &pipe))
1248 		return pipe;
1249 
1250 	return INVALID_PIPE;
1251 }
1252 
1253 static void intel_dp_encoder_reset(struct drm_encoder *encoder)
1254 {
1255 	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
1256 	struct intel_dp *intel_dp = enc_to_intel_dp(to_intel_encoder(encoder));
1257 
1258 	intel_dp->DP = intel_de_read(dev_priv, intel_dp->output_reg);
1259 
1260 	intel_dp->reset_link_params = true;
1261 
1262 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
1263 		intel_wakeref_t wakeref;
1264 
1265 		with_intel_pps_lock(intel_dp, wakeref)
1266 			intel_dp->pps.active_pipe = vlv_active_pipe(intel_dp);
1267 	}
1268 
1269 	intel_pps_encoder_reset(intel_dp);
1270 }
1271 
1272 static const struct drm_encoder_funcs intel_dp_enc_funcs = {
1273 	.reset = intel_dp_encoder_reset,
1274 	.destroy = intel_dp_encoder_destroy,
1275 };
1276 
1277 bool g4x_dp_init(struct drm_i915_private *dev_priv,
1278 		 i915_reg_t output_reg, enum port port)
1279 {
1280 	struct intel_digital_port *dig_port;
1281 	struct intel_encoder *intel_encoder;
1282 	struct drm_encoder *encoder;
1283 	struct intel_connector *intel_connector;
1284 
1285 	dig_port = kzalloc(sizeof(*dig_port), GFP_KERNEL);
1286 	if (!dig_port)
1287 		return false;
1288 
1289 	intel_connector = intel_connector_alloc();
1290 	if (!intel_connector)
1291 		goto err_connector_alloc;
1292 
1293 	intel_encoder = &dig_port->base;
1294 	encoder = &intel_encoder->base;
1295 
1296 	mutex_init(&dig_port->hdcp_mutex);
1297 
1298 	if (drm_encoder_init(&dev_priv->drm, &intel_encoder->base,
1299 			     &intel_dp_enc_funcs, DRM_MODE_ENCODER_TMDS,
1300 			     "DP %c", port_name(port)))
1301 		goto err_encoder_init;
1302 
1303 	intel_encoder->hotplug = intel_dp_hotplug;
1304 	intel_encoder->compute_config = intel_dp_compute_config;
1305 	intel_encoder->get_hw_state = intel_dp_get_hw_state;
1306 	intel_encoder->get_config = intel_dp_get_config;
1307 	intel_encoder->sync_state = intel_dp_sync_state;
1308 	intel_encoder->initial_fastset_check = intel_dp_initial_fastset_check;
1309 	intel_encoder->update_pipe = intel_backlight_update;
1310 	intel_encoder->suspend = intel_dp_encoder_suspend;
1311 	intel_encoder->shutdown = intel_dp_encoder_shutdown;
1312 	if (IS_CHERRYVIEW(dev_priv)) {
1313 		intel_encoder->pre_pll_enable = chv_dp_pre_pll_enable;
1314 		intel_encoder->pre_enable = chv_pre_enable_dp;
1315 		intel_encoder->enable = vlv_enable_dp;
1316 		intel_encoder->disable = vlv_disable_dp;
1317 		intel_encoder->post_disable = chv_post_disable_dp;
1318 		intel_encoder->post_pll_disable = chv_dp_post_pll_disable;
1319 	} else if (IS_VALLEYVIEW(dev_priv)) {
1320 		intel_encoder->pre_pll_enable = vlv_dp_pre_pll_enable;
1321 		intel_encoder->pre_enable = vlv_pre_enable_dp;
1322 		intel_encoder->enable = vlv_enable_dp;
1323 		intel_encoder->disable = vlv_disable_dp;
1324 		intel_encoder->post_disable = vlv_post_disable_dp;
1325 	} else {
1326 		intel_encoder->pre_enable = g4x_pre_enable_dp;
1327 		intel_encoder->enable = g4x_enable_dp;
1328 		intel_encoder->disable = g4x_disable_dp;
1329 		intel_encoder->post_disable = g4x_post_disable_dp;
1330 	}
1331 
1332 	if ((IS_IVYBRIDGE(dev_priv) && port == PORT_A) ||
1333 	    (HAS_PCH_CPT(dev_priv) && port != PORT_A))
1334 		dig_port->dp.set_link_train = cpt_set_link_train;
1335 	else
1336 		dig_port->dp.set_link_train = g4x_set_link_train;
1337 
1338 	if (IS_CHERRYVIEW(dev_priv))
1339 		intel_encoder->set_signal_levels = chv_set_signal_levels;
1340 	else if (IS_VALLEYVIEW(dev_priv))
1341 		intel_encoder->set_signal_levels = vlv_set_signal_levels;
1342 	else if (IS_IVYBRIDGE(dev_priv) && port == PORT_A)
1343 		intel_encoder->set_signal_levels = ivb_cpu_edp_set_signal_levels;
1344 	else if (IS_SANDYBRIDGE(dev_priv) && port == PORT_A)
1345 		intel_encoder->set_signal_levels = snb_cpu_edp_set_signal_levels;
1346 	else
1347 		intel_encoder->set_signal_levels = g4x_set_signal_levels;
1348 
1349 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv) ||
1350 	    (HAS_PCH_SPLIT(dev_priv) && port != PORT_A)) {
1351 		dig_port->dp.preemph_max = intel_dp_preemph_max_3;
1352 		dig_port->dp.voltage_max = intel_dp_voltage_max_3;
1353 	} else {
1354 		dig_port->dp.preemph_max = intel_dp_preemph_max_2;
1355 		dig_port->dp.voltage_max = intel_dp_voltage_max_2;
1356 	}
1357 
1358 	dig_port->dp.output_reg = output_reg;
1359 	dig_port->max_lanes = 4;
1360 
1361 	intel_encoder->type = INTEL_OUTPUT_DP;
1362 	intel_encoder->power_domain = intel_display_power_ddi_lanes_domain(dev_priv, port);
1363 	if (IS_CHERRYVIEW(dev_priv)) {
1364 		if (port == PORT_D)
1365 			intel_encoder->pipe_mask = BIT(PIPE_C);
1366 		else
1367 			intel_encoder->pipe_mask = BIT(PIPE_A) | BIT(PIPE_B);
1368 	} else {
1369 		intel_encoder->pipe_mask = ~0;
1370 	}
1371 	intel_encoder->cloneable = 0;
1372 	intel_encoder->port = port;
1373 	intel_encoder->hpd_pin = intel_hpd_pin_default(dev_priv, port);
1374 
1375 	dig_port->hpd_pulse = intel_dp_hpd_pulse;
1376 
1377 	if (HAS_GMCH(dev_priv)) {
1378 		if (IS_GM45(dev_priv))
1379 			dig_port->connected = gm45_digital_port_connected;
1380 		else
1381 			dig_port->connected = g4x_digital_port_connected;
1382 	} else {
1383 		if (port == PORT_A)
1384 			dig_port->connected = ilk_digital_port_connected;
1385 		else
1386 			dig_port->connected = ibx_digital_port_connected;
1387 	}
1388 
1389 	if (port != PORT_A)
1390 		intel_infoframe_init(dig_port);
1391 
1392 	dig_port->aux_ch = intel_bios_port_aux_ch(dev_priv, port);
1393 	if (!intel_dp_init_connector(dig_port, intel_connector))
1394 		goto err_init_connector;
1395 
1396 	return true;
1397 
1398 err_init_connector:
1399 	drm_encoder_cleanup(encoder);
1400 err_encoder_init:
1401 	kfree(intel_connector);
1402 err_connector_alloc:
1403 	kfree(dig_port);
1404 	return false;
1405 }
1406