cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

g4x_dp.c (42470B)


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