Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.6.
   1/*
   2 * Copyright © 2014-2016 Intel Corporation
   3 *
   4 * Permission is hereby granted, free of charge, to any person obtaining a
   5 * copy of this software and associated documentation files (the "Software"),
   6 * to deal in the Software without restriction, including without limitation
   7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8 * and/or sell copies of the Software, and to permit persons to whom the
   9 * Software is furnished to do so, subject to the following conditions:
  10 *
  11 * The above copyright notice and this permission notice (including the next
  12 * paragraph) shall be included in all copies or substantial portions of the
  13 * Software.
  14 *
  15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  21 * DEALINGS IN THE SOFTWARE.
  22 */
  23
  24#include "intel_drv.h"
  25
  26/**
  27 * DOC: DPIO
  28 *
  29 * VLV, CHV and BXT have slightly peculiar display PHYs for driving DP/HDMI
  30 * ports. DPIO is the name given to such a display PHY. These PHYs
  31 * don't follow the standard programming model using direct MMIO
  32 * registers, and instead their registers must be accessed trough IOSF
  33 * sideband. VLV has one such PHY for driving ports B and C, and CHV
  34 * adds another PHY for driving port D. Each PHY responds to specific
  35 * IOSF-SB port.
  36 *
  37 * Each display PHY is made up of one or two channels. Each channel
  38 * houses a common lane part which contains the PLL and other common
  39 * logic. CH0 common lane also contains the IOSF-SB logic for the
  40 * Common Register Interface (CRI) ie. the DPIO registers. CRI clock
  41 * must be running when any DPIO registers are accessed.
  42 *
  43 * In addition to having their own registers, the PHYs are also
  44 * controlled through some dedicated signals from the display
  45 * controller. These include PLL reference clock enable, PLL enable,
  46 * and CRI clock selection, for example.
  47 *
  48 * Eeach channel also has two splines (also called data lanes), and
  49 * each spline is made up of one Physical Access Coding Sub-Layer
  50 * (PCS) block and two TX lanes. So each channel has two PCS blocks
  51 * and four TX lanes. The TX lanes are used as DP lanes or TMDS
  52 * data/clock pairs depending on the output type.
  53 *
  54 * Additionally the PHY also contains an AUX lane with AUX blocks
  55 * for each channel. This is used for DP AUX communication, but
  56 * this fact isn't really relevant for the driver since AUX is
  57 * controlled from the display controller side. No DPIO registers
  58 * need to be accessed during AUX communication,
  59 *
  60 * Generally on VLV/CHV the common lane corresponds to the pipe and
  61 * the spline (PCS/TX) corresponds to the port.
  62 *
  63 * For dual channel PHY (VLV/CHV):
  64 *
  65 *  pipe A == CMN/PLL/REF CH0
  66 *
  67 *  pipe B == CMN/PLL/REF CH1
  68 *
  69 *  port B == PCS/TX CH0
  70 *
  71 *  port C == PCS/TX CH1
  72 *
  73 * This is especially important when we cross the streams
  74 * ie. drive port B with pipe B, or port C with pipe A.
  75 *
  76 * For single channel PHY (CHV):
  77 *
  78 *  pipe C == CMN/PLL/REF CH0
  79 *
  80 *  port D == PCS/TX CH0
  81 *
  82 * On BXT the entire PHY channel corresponds to the port. That means
  83 * the PLL is also now associated with the port rather than the pipe,
  84 * and so the clock needs to be routed to the appropriate transcoder.
  85 * Port A PLL is directly connected to transcoder EDP and port B/C
  86 * PLLs can be routed to any transcoder A/B/C.
  87 *
  88 * Note: DDI0 is digital port B, DD1 is digital port C, and DDI2 is
  89 * digital port D (CHV) or port A (BXT). ::
  90 *
  91 *
  92 *     Dual channel PHY (VLV/CHV/BXT)
  93 *     ---------------------------------
  94 *     |      CH0      |      CH1      |
  95 *     |  CMN/PLL/REF  |  CMN/PLL/REF  |
  96 *     |---------------|---------------| Display PHY
  97 *     | PCS01 | PCS23 | PCS01 | PCS23 |
  98 *     |-------|-------|-------|-------|
  99 *     |TX0|TX1|TX2|TX3|TX0|TX1|TX2|TX3|
 100 *     ---------------------------------
 101 *     |     DDI0      |     DDI1      | DP/HDMI ports
 102 *     ---------------------------------
 103 *
 104 *     Single channel PHY (CHV/BXT)
 105 *     -----------------
 106 *     |      CH0      |
 107 *     |  CMN/PLL/REF  |
 108 *     |---------------| Display PHY
 109 *     | PCS01 | PCS23 |
 110 *     |-------|-------|
 111 *     |TX0|TX1|TX2|TX3|
 112 *     -----------------
 113 *     |     DDI2      | DP/HDMI port
 114 *     -----------------
 115 */
 116
 117/**
 118 * struct bxt_ddi_phy_info - Hold info for a broxton DDI phy
 119 */
 120struct bxt_ddi_phy_info {
 121	/**
 122	 * @dual_channel: true if this phy has a second channel.
 123	 */
 124	bool dual_channel;
 125
 126	/**
 127	 * @rcomp_phy: If -1, indicates this phy has its own rcomp resistor.
 128	 * Otherwise the GRC value will be copied from the phy indicated by
 129	 * this field.
 130	 */
 131	enum dpio_phy rcomp_phy;
 132
 133	/**
 134	 * @reset_delay: delay in us to wait before setting the common reset
 135	 * bit in BXT_PHY_CTL_FAMILY, which effectively enables the phy.
 136	 */
 137	int reset_delay;
 138
 139	/**
 140	 * @pwron_mask: Mask with the appropriate bit set that would cause the
 141	 * punit to power this phy if written to BXT_P_CR_GT_DISP_PWRON.
 142	 */
 143	u32 pwron_mask;
 144
 145	/**
 146	 * @channel: struct containing per channel information.
 147	 */
 148	struct {
 149		/**
 150		 * @channel.port: which port maps to this channel.
 151		 */
 152		enum port port;
 153	} channel[2];
 154};
 155
 156static const struct bxt_ddi_phy_info bxt_ddi_phy_info[] = {
 157	[DPIO_PHY0] = {
 158		.dual_channel = true,
 159		.rcomp_phy = DPIO_PHY1,
 160		.pwron_mask = BIT(0),
 161
 162		.channel = {
 163			[DPIO_CH0] = { .port = PORT_B },
 164			[DPIO_CH1] = { .port = PORT_C },
 165		}
 166	},
 167	[DPIO_PHY1] = {
 168		.dual_channel = false,
 169		.rcomp_phy = -1,
 170		.pwron_mask = BIT(1),
 171
 172		.channel = {
 173			[DPIO_CH0] = { .port = PORT_A },
 174		}
 175	},
 176};
 177
 178static const struct bxt_ddi_phy_info glk_ddi_phy_info[] = {
 179	[DPIO_PHY0] = {
 180		.dual_channel = false,
 181		.rcomp_phy = DPIO_PHY1,
 182		.pwron_mask = BIT(0),
 183		.reset_delay = 20,
 184
 185		.channel = {
 186			[DPIO_CH0] = { .port = PORT_B },
 187		}
 188	},
 189	[DPIO_PHY1] = {
 190		.dual_channel = false,
 191		.rcomp_phy = -1,
 192		.pwron_mask = BIT(3),
 193		.reset_delay = 20,
 194
 195		.channel = {
 196			[DPIO_CH0] = { .port = PORT_A },
 197		}
 198	},
 199	[DPIO_PHY2] = {
 200		.dual_channel = false,
 201		.rcomp_phy = DPIO_PHY1,
 202		.pwron_mask = BIT(1),
 203		.reset_delay = 20,
 204
 205		.channel = {
 206			[DPIO_CH0] = { .port = PORT_C },
 207		}
 208	},
 209};
 210
 211static const struct bxt_ddi_phy_info *
 212bxt_get_phy_list(struct drm_i915_private *dev_priv, int *count)
 213{
 214	if (IS_GEMINILAKE(dev_priv)) {
 215		*count =  ARRAY_SIZE(glk_ddi_phy_info);
 216		return glk_ddi_phy_info;
 217	} else {
 218		*count =  ARRAY_SIZE(bxt_ddi_phy_info);
 219		return bxt_ddi_phy_info;
 220	}
 221}
 222
 223static const struct bxt_ddi_phy_info *
 224bxt_get_phy_info(struct drm_i915_private *dev_priv, enum dpio_phy phy)
 225{
 226	int count;
 227	const struct bxt_ddi_phy_info *phy_list =
 228		bxt_get_phy_list(dev_priv, &count);
 229
 230	return &phy_list[phy];
 231}
 232
 233void bxt_port_to_phy_channel(struct drm_i915_private *dev_priv, enum port port,
 234			     enum dpio_phy *phy, enum dpio_channel *ch)
 235{
 236	const struct bxt_ddi_phy_info *phy_info, *phys;
 237	int i, count;
 238
 239	phys = bxt_get_phy_list(dev_priv, &count);
 240
 241	for (i = 0; i < count; i++) {
 242		phy_info = &phys[i];
 243
 244		if (port == phy_info->channel[DPIO_CH0].port) {
 245			*phy = i;
 246			*ch = DPIO_CH0;
 247			return;
 248		}
 249
 250		if (phy_info->dual_channel &&
 251		    port == phy_info->channel[DPIO_CH1].port) {
 252			*phy = i;
 253			*ch = DPIO_CH1;
 254			return;
 255		}
 256	}
 257
 258	WARN(1, "PHY not found for PORT %c", port_name(port));
 259	*phy = DPIO_PHY0;
 260	*ch = DPIO_CH0;
 261}
 262
 263void bxt_ddi_phy_set_signal_level(struct drm_i915_private *dev_priv,
 264				  enum port port, u32 margin, u32 scale,
 265				  u32 enable, u32 deemphasis)
 266{
 267	u32 val;
 268	enum dpio_phy phy;
 269	enum dpio_channel ch;
 270
 271	bxt_port_to_phy_channel(dev_priv, port, &phy, &ch);
 272
 273	/*
 274	 * While we write to the group register to program all lanes at once we
 275	 * can read only lane registers and we pick lanes 0/1 for that.
 276	 */
 277	val = I915_READ(BXT_PORT_PCS_DW10_LN01(phy, ch));
 278	val &= ~(TX2_SWING_CALC_INIT | TX1_SWING_CALC_INIT);
 279	I915_WRITE(BXT_PORT_PCS_DW10_GRP(phy, ch), val);
 280
 281	val = I915_READ(BXT_PORT_TX_DW2_LN0(phy, ch));
 282	val &= ~(MARGIN_000 | UNIQ_TRANS_SCALE);
 283	val |= margin << MARGIN_000_SHIFT | scale << UNIQ_TRANS_SCALE_SHIFT;
 284	I915_WRITE(BXT_PORT_TX_DW2_GRP(phy, ch), val);
 285
 286	val = I915_READ(BXT_PORT_TX_DW3_LN0(phy, ch));
 287	val &= ~SCALE_DCOMP_METHOD;
 288	if (enable)
 289		val |= SCALE_DCOMP_METHOD;
 290
 291	if ((val & UNIQUE_TRANGE_EN_METHOD) && !(val & SCALE_DCOMP_METHOD))
 292		DRM_ERROR("Disabled scaling while ouniqetrangenmethod was set");
 293
 294	I915_WRITE(BXT_PORT_TX_DW3_GRP(phy, ch), val);
 295
 296	val = I915_READ(BXT_PORT_TX_DW4_LN0(phy, ch));
 297	val &= ~DE_EMPHASIS;
 298	val |= deemphasis << DEEMPH_SHIFT;
 299	I915_WRITE(BXT_PORT_TX_DW4_GRP(phy, ch), val);
 300
 301	val = I915_READ(BXT_PORT_PCS_DW10_LN01(phy, ch));
 302	val |= TX2_SWING_CALC_INIT | TX1_SWING_CALC_INIT;
 303	I915_WRITE(BXT_PORT_PCS_DW10_GRP(phy, ch), val);
 304}
 305
 306bool bxt_ddi_phy_is_enabled(struct drm_i915_private *dev_priv,
 307			    enum dpio_phy phy)
 308{
 309	const struct bxt_ddi_phy_info *phy_info;
 310
 311	phy_info = bxt_get_phy_info(dev_priv, phy);
 312
 313	if (!(I915_READ(BXT_P_CR_GT_DISP_PWRON) & phy_info->pwron_mask))
 314		return false;
 315
 316	if ((I915_READ(BXT_PORT_CL1CM_DW0(phy)) &
 317	     (PHY_POWER_GOOD | PHY_RESERVED)) != PHY_POWER_GOOD) {
 318		DRM_DEBUG_DRIVER("DDI PHY %d powered, but power hasn't settled\n",
 319				 phy);
 320
 321		return false;
 322	}
 323
 324	if (!(I915_READ(BXT_PHY_CTL_FAMILY(phy)) & COMMON_RESET_DIS)) {
 325		DRM_DEBUG_DRIVER("DDI PHY %d powered, but still in reset\n",
 326				 phy);
 327
 328		return false;
 329	}
 330
 331	return true;
 332}
 333
 334static u32 bxt_get_grc(struct drm_i915_private *dev_priv, enum dpio_phy phy)
 335{
 336	u32 val = I915_READ(BXT_PORT_REF_DW6(phy));
 337
 338	return (val & GRC_CODE_MASK) >> GRC_CODE_SHIFT;
 339}
 340
 341static void bxt_phy_wait_grc_done(struct drm_i915_private *dev_priv,
 342				  enum dpio_phy phy)
 343{
 344	if (intel_wait_for_register(dev_priv,
 345				    BXT_PORT_REF_DW3(phy),
 346				    GRC_DONE, GRC_DONE,
 347				    10))
 348		DRM_ERROR("timeout waiting for PHY%d GRC\n", phy);
 349}
 350
 351static void _bxt_ddi_phy_init(struct drm_i915_private *dev_priv,
 352			      enum dpio_phy phy)
 353{
 354	const struct bxt_ddi_phy_info *phy_info;
 355	u32 val;
 356
 357	phy_info = bxt_get_phy_info(dev_priv, phy);
 358
 359	if (bxt_ddi_phy_is_enabled(dev_priv, phy)) {
 360		/* Still read out the GRC value for state verification */
 361		if (phy_info->rcomp_phy != -1)
 362			dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv, phy);
 363
 364		if (bxt_ddi_phy_verify_state(dev_priv, phy)) {
 365			DRM_DEBUG_DRIVER("DDI PHY %d already enabled, "
 366					 "won't reprogram it\n", phy);
 367			return;
 368		}
 369
 370		DRM_DEBUG_DRIVER("DDI PHY %d enabled with invalid state, "
 371				 "force reprogramming it\n", phy);
 372	}
 373
 374	val = I915_READ(BXT_P_CR_GT_DISP_PWRON);
 375	val |= phy_info->pwron_mask;
 376	I915_WRITE(BXT_P_CR_GT_DISP_PWRON, val);
 377
 378	/*
 379	 * The PHY registers start out inaccessible and respond to reads with
 380	 * all 1s.  Eventually they become accessible as they power up, then
 381	 * the reserved bit will give the default 0.  Poll on the reserved bit
 382	 * becoming 0 to find when the PHY is accessible.
 383	 * HW team confirmed that the time to reach phypowergood status is
 384	 * anywhere between 50 us and 100us.
 385	 */
 386	if (wait_for_us(((I915_READ(BXT_PORT_CL1CM_DW0(phy)) &
 387		(PHY_RESERVED | PHY_POWER_GOOD)) == PHY_POWER_GOOD), 100)) {
 388		DRM_ERROR("timeout during PHY%d power on\n", phy);
 389	}
 390
 391	/* Program PLL Rcomp code offset */
 392	val = I915_READ(BXT_PORT_CL1CM_DW9(phy));
 393	val &= ~IREF0RC_OFFSET_MASK;
 394	val |= 0xE4 << IREF0RC_OFFSET_SHIFT;
 395	I915_WRITE(BXT_PORT_CL1CM_DW9(phy), val);
 396
 397	val = I915_READ(BXT_PORT_CL1CM_DW10(phy));
 398	val &= ~IREF1RC_OFFSET_MASK;
 399	val |= 0xE4 << IREF1RC_OFFSET_SHIFT;
 400	I915_WRITE(BXT_PORT_CL1CM_DW10(phy), val);
 401
 402	/* Program power gating */
 403	val = I915_READ(BXT_PORT_CL1CM_DW28(phy));
 404	val |= OCL1_POWER_DOWN_EN | DW28_OLDO_DYN_PWR_DOWN_EN |
 405		SUS_CLK_CONFIG;
 406	I915_WRITE(BXT_PORT_CL1CM_DW28(phy), val);
 407
 408	if (phy_info->dual_channel) {
 409		val = I915_READ(BXT_PORT_CL2CM_DW6(phy));
 410		val |= DW6_OLDO_DYN_PWR_DOWN_EN;
 411		I915_WRITE(BXT_PORT_CL2CM_DW6(phy), val);
 412	}
 413
 414	if (phy_info->rcomp_phy != -1) {
 415		uint32_t grc_code;
 416
 417		bxt_phy_wait_grc_done(dev_priv, phy_info->rcomp_phy);
 418
 419		/*
 420		 * PHY0 isn't connected to an RCOMP resistor so copy over
 421		 * the corresponding calibrated value from PHY1, and disable
 422		 * the automatic calibration on PHY0.
 423		 */
 424		val = dev_priv->bxt_phy_grc = bxt_get_grc(dev_priv,
 425							  phy_info->rcomp_phy);
 426		grc_code = val << GRC_CODE_FAST_SHIFT |
 427			   val << GRC_CODE_SLOW_SHIFT |
 428			   val;
 429		I915_WRITE(BXT_PORT_REF_DW6(phy), grc_code);
 430
 431		val = I915_READ(BXT_PORT_REF_DW8(phy));
 432		val |= GRC_DIS | GRC_RDY_OVRD;
 433		I915_WRITE(BXT_PORT_REF_DW8(phy), val);
 434	}
 435
 436	if (phy_info->reset_delay)
 437		udelay(phy_info->reset_delay);
 438
 439	val = I915_READ(BXT_PHY_CTL_FAMILY(phy));
 440	val |= COMMON_RESET_DIS;
 441	I915_WRITE(BXT_PHY_CTL_FAMILY(phy), val);
 442}
 443
 444void bxt_ddi_phy_uninit(struct drm_i915_private *dev_priv, enum dpio_phy phy)
 445{
 446	const struct bxt_ddi_phy_info *phy_info;
 447	uint32_t val;
 448
 449	phy_info = bxt_get_phy_info(dev_priv, phy);
 450
 451	val = I915_READ(BXT_PHY_CTL_FAMILY(phy));
 452	val &= ~COMMON_RESET_DIS;
 453	I915_WRITE(BXT_PHY_CTL_FAMILY(phy), val);
 454
 455	val = I915_READ(BXT_P_CR_GT_DISP_PWRON);
 456	val &= ~phy_info->pwron_mask;
 457	I915_WRITE(BXT_P_CR_GT_DISP_PWRON, val);
 458}
 459
 460void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy)
 461{
 462	const struct bxt_ddi_phy_info *phy_info =
 463		bxt_get_phy_info(dev_priv, phy);
 464	enum dpio_phy rcomp_phy = phy_info->rcomp_phy;
 465	bool was_enabled;
 466
 467	lockdep_assert_held(&dev_priv->power_domains.lock);
 468
 469	was_enabled = true;
 470	if (rcomp_phy != -1)
 471		was_enabled = bxt_ddi_phy_is_enabled(dev_priv, rcomp_phy);
 472
 473	/*
 474	 * We need to copy the GRC calibration value from rcomp_phy,
 475	 * so make sure it's powered up.
 476	 */
 477	if (!was_enabled)
 478		_bxt_ddi_phy_init(dev_priv, rcomp_phy);
 479
 480	_bxt_ddi_phy_init(dev_priv, phy);
 481
 482	if (!was_enabled)
 483		bxt_ddi_phy_uninit(dev_priv, rcomp_phy);
 484}
 485
 486static bool __printf(6, 7)
 487__phy_reg_verify_state(struct drm_i915_private *dev_priv, enum dpio_phy phy,
 488		       i915_reg_t reg, u32 mask, u32 expected,
 489		       const char *reg_fmt, ...)
 490{
 491	struct va_format vaf;
 492	va_list args;
 493	u32 val;
 494
 495	val = I915_READ(reg);
 496	if ((val & mask) == expected)
 497		return true;
 498
 499	va_start(args, reg_fmt);
 500	vaf.fmt = reg_fmt;
 501	vaf.va = &args;
 502
 503	DRM_DEBUG_DRIVER("DDI PHY %d reg %pV [%08x] state mismatch: "
 504			 "current %08x, expected %08x (mask %08x)\n",
 505			 phy, &vaf, reg.reg, val, (val & ~mask) | expected,
 506			 mask);
 507
 508	va_end(args);
 509
 510	return false;
 511}
 512
 513bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
 514			      enum dpio_phy phy)
 515{
 516	const struct bxt_ddi_phy_info *phy_info;
 517	uint32_t mask;
 518	bool ok;
 519
 520	phy_info = bxt_get_phy_info(dev_priv, phy);
 521
 522#define _CHK(reg, mask, exp, fmt, ...)					\
 523	__phy_reg_verify_state(dev_priv, phy, reg, mask, exp, fmt,	\
 524			       ## __VA_ARGS__)
 525
 526	if (!bxt_ddi_phy_is_enabled(dev_priv, phy))
 527		return false;
 528
 529	ok = true;
 530
 531	/* PLL Rcomp code offset */
 532	ok &= _CHK(BXT_PORT_CL1CM_DW9(phy),
 533		    IREF0RC_OFFSET_MASK, 0xe4 << IREF0RC_OFFSET_SHIFT,
 534		    "BXT_PORT_CL1CM_DW9(%d)", phy);
 535	ok &= _CHK(BXT_PORT_CL1CM_DW10(phy),
 536		    IREF1RC_OFFSET_MASK, 0xe4 << IREF1RC_OFFSET_SHIFT,
 537		    "BXT_PORT_CL1CM_DW10(%d)", phy);
 538
 539	/* Power gating */
 540	mask = OCL1_POWER_DOWN_EN | DW28_OLDO_DYN_PWR_DOWN_EN | SUS_CLK_CONFIG;
 541	ok &= _CHK(BXT_PORT_CL1CM_DW28(phy), mask, mask,
 542		    "BXT_PORT_CL1CM_DW28(%d)", phy);
 543
 544	if (phy_info->dual_channel)
 545		ok &= _CHK(BXT_PORT_CL2CM_DW6(phy),
 546			   DW6_OLDO_DYN_PWR_DOWN_EN, DW6_OLDO_DYN_PWR_DOWN_EN,
 547			   "BXT_PORT_CL2CM_DW6(%d)", phy);
 548
 549	if (phy_info->rcomp_phy != -1) {
 550		u32 grc_code = dev_priv->bxt_phy_grc;
 551
 552		grc_code = grc_code << GRC_CODE_FAST_SHIFT |
 553			   grc_code << GRC_CODE_SLOW_SHIFT |
 554			   grc_code;
 555		mask = GRC_CODE_FAST_MASK | GRC_CODE_SLOW_MASK |
 556		       GRC_CODE_NOM_MASK;
 557		ok &= _CHK(BXT_PORT_REF_DW6(phy), mask, grc_code,
 558			   "BXT_PORT_REF_DW6(%d)", phy);
 559
 560		mask = GRC_DIS | GRC_RDY_OVRD;
 561		ok &= _CHK(BXT_PORT_REF_DW8(phy), mask, mask,
 562			    "BXT_PORT_REF_DW8(%d)", phy);
 563	}
 564
 565	return ok;
 566#undef _CHK
 567}
 568
 569uint8_t
 570bxt_ddi_phy_calc_lane_lat_optim_mask(uint8_t lane_count)
 571{
 572	switch (lane_count) {
 573	case 1:
 574		return 0;
 575	case 2:
 576		return BIT(2) | BIT(0);
 577	case 4:
 578		return BIT(3) | BIT(2) | BIT(0);
 579	default:
 580		MISSING_CASE(lane_count);
 581
 582		return 0;
 583	}
 584}
 585
 586void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
 587				     uint8_t lane_lat_optim_mask)
 588{
 589	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 590	enum port port = encoder->port;
 591	enum dpio_phy phy;
 592	enum dpio_channel ch;
 593	int lane;
 594
 595	bxt_port_to_phy_channel(dev_priv, port, &phy, &ch);
 596
 597	for (lane = 0; lane < 4; lane++) {
 598		u32 val = I915_READ(BXT_PORT_TX_DW14_LN(phy, ch, lane));
 599
 600		/*
 601		 * Note that on CHV this flag is called UPAR, but has
 602		 * the same function.
 603		 */
 604		val &= ~LATENCY_OPTIM;
 605		if (lane_lat_optim_mask & BIT(lane))
 606			val |= LATENCY_OPTIM;
 607
 608		I915_WRITE(BXT_PORT_TX_DW14_LN(phy, ch, lane), val);
 609	}
 610}
 611
 612uint8_t
 613bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder)
 614{
 615	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 616	enum port port = encoder->port;
 617	enum dpio_phy phy;
 618	enum dpio_channel ch;
 619	int lane;
 620	uint8_t mask;
 621
 622	bxt_port_to_phy_channel(dev_priv, port, &phy, &ch);
 623
 624	mask = 0;
 625	for (lane = 0; lane < 4; lane++) {
 626		u32 val = I915_READ(BXT_PORT_TX_DW14_LN(phy, ch, lane));
 627
 628		if (val & LATENCY_OPTIM)
 629			mask |= BIT(lane);
 630	}
 631
 632	return mask;
 633}
 634
 635
 636void chv_set_phy_signal_level(struct intel_encoder *encoder,
 637			      u32 deemph_reg_value, u32 margin_reg_value,
 638			      bool uniq_trans_scale)
 639{
 640	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 641	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
 642	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
 643	enum dpio_channel ch = vlv_dport_to_channel(dport);
 644	enum pipe pipe = intel_crtc->pipe;
 645	u32 val;
 646	int i;
 647
 648	mutex_lock(&dev_priv->sb_lock);
 649
 650	/* Clear calc init */
 651	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW10(ch));
 652	val &= ~(DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3);
 653	val &= ~(DPIO_PCS_TX1DEEMP_MASK | DPIO_PCS_TX2DEEMP_MASK);
 654	val |= DPIO_PCS_TX1DEEMP_9P5 | DPIO_PCS_TX2DEEMP_9P5;
 655	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW10(ch), val);
 656
 657	if (intel_crtc->config->lane_count > 2) {
 658		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW10(ch));
 659		val &= ~(DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3);
 660		val &= ~(DPIO_PCS_TX1DEEMP_MASK | DPIO_PCS_TX2DEEMP_MASK);
 661		val |= DPIO_PCS_TX1DEEMP_9P5 | DPIO_PCS_TX2DEEMP_9P5;
 662		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW10(ch), val);
 663	}
 664
 665	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW9(ch));
 666	val &= ~(DPIO_PCS_TX1MARGIN_MASK | DPIO_PCS_TX2MARGIN_MASK);
 667	val |= DPIO_PCS_TX1MARGIN_000 | DPIO_PCS_TX2MARGIN_000;
 668	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW9(ch), val);
 669
 670	if (intel_crtc->config->lane_count > 2) {
 671		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW9(ch));
 672		val &= ~(DPIO_PCS_TX1MARGIN_MASK | DPIO_PCS_TX2MARGIN_MASK);
 673		val |= DPIO_PCS_TX1MARGIN_000 | DPIO_PCS_TX2MARGIN_000;
 674		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW9(ch), val);
 675	}
 676
 677	/* Program swing deemph */
 678	for (i = 0; i < intel_crtc->config->lane_count; i++) {
 679		val = vlv_dpio_read(dev_priv, pipe, CHV_TX_DW4(ch, i));
 680		val &= ~DPIO_SWING_DEEMPH9P5_MASK;
 681		val |= deemph_reg_value << DPIO_SWING_DEEMPH9P5_SHIFT;
 682		vlv_dpio_write(dev_priv, pipe, CHV_TX_DW4(ch, i), val);
 683	}
 684
 685	/* Program swing margin */
 686	for (i = 0; i < intel_crtc->config->lane_count; i++) {
 687		val = vlv_dpio_read(dev_priv, pipe, CHV_TX_DW2(ch, i));
 688
 689		val &= ~DPIO_SWING_MARGIN000_MASK;
 690		val |= margin_reg_value << DPIO_SWING_MARGIN000_SHIFT;
 691
 692		/*
 693		 * Supposedly this value shouldn't matter when unique transition
 694		 * scale is disabled, but in fact it does matter. Let's just
 695		 * always program the same value and hope it's OK.
 696		 */
 697		val &= ~(0xff << DPIO_UNIQ_TRANS_SCALE_SHIFT);
 698		val |= 0x9a << DPIO_UNIQ_TRANS_SCALE_SHIFT;
 699
 700		vlv_dpio_write(dev_priv, pipe, CHV_TX_DW2(ch, i), val);
 701	}
 702
 703	/*
 704	 * The document said it needs to set bit 27 for ch0 and bit 26
 705	 * for ch1. Might be a typo in the doc.
 706	 * For now, for this unique transition scale selection, set bit
 707	 * 27 for ch0 and ch1.
 708	 */
 709	for (i = 0; i < intel_crtc->config->lane_count; i++) {
 710		val = vlv_dpio_read(dev_priv, pipe, CHV_TX_DW3(ch, i));
 711		if (uniq_trans_scale)
 712			val |= DPIO_TX_UNIQ_TRANS_SCALE_EN;
 713		else
 714			val &= ~DPIO_TX_UNIQ_TRANS_SCALE_EN;
 715		vlv_dpio_write(dev_priv, pipe, CHV_TX_DW3(ch, i), val);
 716	}
 717
 718	/* Start swing calculation */
 719	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW10(ch));
 720	val |= DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3;
 721	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW10(ch), val);
 722
 723	if (intel_crtc->config->lane_count > 2) {
 724		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW10(ch));
 725		val |= DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3;
 726		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW10(ch), val);
 727	}
 728
 729	mutex_unlock(&dev_priv->sb_lock);
 730
 731}
 732
 733void chv_data_lane_soft_reset(struct intel_encoder *encoder,
 734			      const struct intel_crtc_state *crtc_state,
 735			      bool reset)
 736{
 737	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 738	enum dpio_channel ch = vlv_dport_to_channel(enc_to_dig_port(&encoder->base));
 739	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
 740	enum pipe pipe = crtc->pipe;
 741	uint32_t val;
 742
 743	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW0(ch));
 744	if (reset)
 745		val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
 746	else
 747		val |= DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET;
 748	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW0(ch), val);
 749
 750	if (crtc->config->lane_count > 2) {
 751		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW0(ch));
 752		if (reset)
 753			val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
 754		else
 755			val |= DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET;
 756		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW0(ch), val);
 757	}
 758
 759	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW1(ch));
 760	val |= CHV_PCS_REQ_SOFTRESET_EN;
 761	if (reset)
 762		val &= ~DPIO_PCS_CLK_SOFT_RESET;
 763	else
 764		val |= DPIO_PCS_CLK_SOFT_RESET;
 765	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW1(ch), val);
 766
 767	if (crtc->config->lane_count > 2) {
 768		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW1(ch));
 769		val |= CHV_PCS_REQ_SOFTRESET_EN;
 770		if (reset)
 771			val &= ~DPIO_PCS_CLK_SOFT_RESET;
 772		else
 773			val |= DPIO_PCS_CLK_SOFT_RESET;
 774		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW1(ch), val);
 775	}
 776}
 777
 778void chv_phy_pre_pll_enable(struct intel_encoder *encoder,
 779			    const struct intel_crtc_state *crtc_state)
 780{
 781	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
 782	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 783	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
 784	enum dpio_channel ch = vlv_dport_to_channel(dport);
 785	enum pipe pipe = crtc->pipe;
 786	unsigned int lane_mask =
 787		intel_dp_unused_lane_mask(crtc_state->lane_count);
 788	u32 val;
 789
 790	/*
 791	 * Must trick the second common lane into life.
 792	 * Otherwise we can't even access the PLL.
 793	 */
 794	if (ch == DPIO_CH0 && pipe == PIPE_B)
 795		dport->release_cl2_override =
 796			!chv_phy_powergate_ch(dev_priv, DPIO_PHY0, DPIO_CH1, true);
 797
 798	chv_phy_powergate_lanes(encoder, true, lane_mask);
 799
 800	mutex_lock(&dev_priv->sb_lock);
 801
 802	/* Assert data lane reset */
 803	chv_data_lane_soft_reset(encoder, crtc_state, true);
 804
 805	/* program left/right clock distribution */
 806	if (pipe != PIPE_B) {
 807		val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW5_CH0);
 808		val &= ~(CHV_BUFLEFTENA1_MASK | CHV_BUFRIGHTENA1_MASK);
 809		if (ch == DPIO_CH0)
 810			val |= CHV_BUFLEFTENA1_FORCE;
 811		if (ch == DPIO_CH1)
 812			val |= CHV_BUFRIGHTENA1_FORCE;
 813		vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW5_CH0, val);
 814	} else {
 815		val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW1_CH1);
 816		val &= ~(CHV_BUFLEFTENA2_MASK | CHV_BUFRIGHTENA2_MASK);
 817		if (ch == DPIO_CH0)
 818			val |= CHV_BUFLEFTENA2_FORCE;
 819		if (ch == DPIO_CH1)
 820			val |= CHV_BUFRIGHTENA2_FORCE;
 821		vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW1_CH1, val);
 822	}
 823
 824	/* program clock channel usage */
 825	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW8(ch));
 826	val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
 827	if (pipe != PIPE_B)
 828		val &= ~CHV_PCS_USEDCLKCHANNEL;
 829	else
 830		val |= CHV_PCS_USEDCLKCHANNEL;
 831	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW8(ch), val);
 832
 833	if (crtc_state->lane_count > 2) {
 834		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW8(ch));
 835		val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
 836		if (pipe != PIPE_B)
 837			val &= ~CHV_PCS_USEDCLKCHANNEL;
 838		else
 839			val |= CHV_PCS_USEDCLKCHANNEL;
 840		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW8(ch), val);
 841	}
 842
 843	/*
 844	 * This a a bit weird since generally CL
 845	 * matches the pipe, but here we need to
 846	 * pick the CL based on the port.
 847	 */
 848	val = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW19(ch));
 849	if (pipe != PIPE_B)
 850		val &= ~CHV_CMN_USEDCLKCHANNEL;
 851	else
 852		val |= CHV_CMN_USEDCLKCHANNEL;
 853	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW19(ch), val);
 854
 855	mutex_unlock(&dev_priv->sb_lock);
 856}
 857
 858void chv_phy_pre_encoder_enable(struct intel_encoder *encoder,
 859				const struct intel_crtc_state *crtc_state)
 860{
 861	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
 862	struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
 863	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 864	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
 865	enum dpio_channel ch = vlv_dport_to_channel(dport);
 866	enum pipe pipe = crtc->pipe;
 867	int data, i, stagger;
 868	u32 val;
 869
 870	mutex_lock(&dev_priv->sb_lock);
 871
 872	/* allow hardware to manage TX FIFO reset source */
 873	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW11(ch));
 874	val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
 875	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
 876
 877	if (crtc_state->lane_count > 2) {
 878		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
 879		val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
 880		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
 881	}
 882
 883	/* Program Tx lane latency optimal setting*/
 884	for (i = 0; i < crtc_state->lane_count; i++) {
 885		/* Set the upar bit */
 886		if (crtc_state->lane_count == 1)
 887			data = 0x0;
 888		else
 889			data = (i == 1) ? 0x0 : 0x1;
 890		vlv_dpio_write(dev_priv, pipe, CHV_TX_DW14(ch, i),
 891				data << DPIO_UPAR_SHIFT);
 892	}
 893
 894	/* Data lane stagger programming */
 895	if (crtc_state->port_clock > 270000)
 896		stagger = 0x18;
 897	else if (crtc_state->port_clock > 135000)
 898		stagger = 0xd;
 899	else if (crtc_state->port_clock > 67500)
 900		stagger = 0x7;
 901	else if (crtc_state->port_clock > 33750)
 902		stagger = 0x4;
 903	else
 904		stagger = 0x2;
 905
 906	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW11(ch));
 907	val |= DPIO_TX2_STAGGER_MASK(0x1f);
 908	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
 909
 910	if (crtc_state->lane_count > 2) {
 911		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
 912		val |= DPIO_TX2_STAGGER_MASK(0x1f);
 913		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
 914	}
 915
 916	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW12(ch),
 917		       DPIO_LANESTAGGER_STRAP(stagger) |
 918		       DPIO_LANESTAGGER_STRAP_OVRD |
 919		       DPIO_TX1_STAGGER_MASK(0x1f) |
 920		       DPIO_TX1_STAGGER_MULT(6) |
 921		       DPIO_TX2_STAGGER_MULT(0));
 922
 923	if (crtc_state->lane_count > 2) {
 924		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW12(ch),
 925			       DPIO_LANESTAGGER_STRAP(stagger) |
 926			       DPIO_LANESTAGGER_STRAP_OVRD |
 927			       DPIO_TX1_STAGGER_MASK(0x1f) |
 928			       DPIO_TX1_STAGGER_MULT(7) |
 929			       DPIO_TX2_STAGGER_MULT(5));
 930	}
 931
 932	/* Deassert data lane reset */
 933	chv_data_lane_soft_reset(encoder, crtc_state, false);
 934
 935	mutex_unlock(&dev_priv->sb_lock);
 936}
 937
 938void chv_phy_release_cl2_override(struct intel_encoder *encoder)
 939{
 940	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
 941	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 942
 943	if (dport->release_cl2_override) {
 944		chv_phy_powergate_ch(dev_priv, DPIO_PHY0, DPIO_CH1, false);
 945		dport->release_cl2_override = false;
 946	}
 947}
 948
 949void chv_phy_post_pll_disable(struct intel_encoder *encoder,
 950			      const struct intel_crtc_state *old_crtc_state)
 951{
 952	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 953	enum pipe pipe = to_intel_crtc(old_crtc_state->base.crtc)->pipe;
 954	u32 val;
 955
 956	mutex_lock(&dev_priv->sb_lock);
 957
 958	/* disable left/right clock distribution */
 959	if (pipe != PIPE_B) {
 960		val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW5_CH0);
 961		val &= ~(CHV_BUFLEFTENA1_MASK | CHV_BUFRIGHTENA1_MASK);
 962		vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW5_CH0, val);
 963	} else {
 964		val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW1_CH1);
 965		val &= ~(CHV_BUFLEFTENA2_MASK | CHV_BUFRIGHTENA2_MASK);
 966		vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW1_CH1, val);
 967	}
 968
 969	mutex_unlock(&dev_priv->sb_lock);
 970
 971	/*
 972	 * Leave the power down bit cleared for at least one
 973	 * lane so that chv_powergate_phy_ch() will power
 974	 * on something when the channel is otherwise unused.
 975	 * When the port is off and the override is removed
 976	 * the lanes power down anyway, so otherwise it doesn't
 977	 * really matter what the state of power down bits is
 978	 * after this.
 979	 */
 980	chv_phy_powergate_lanes(encoder, false, 0x0);
 981}
 982
 983void vlv_set_phy_signal_level(struct intel_encoder *encoder,
 984			      u32 demph_reg_value, u32 preemph_reg_value,
 985			      u32 uniqtranscale_reg_value, u32 tx3_demph)
 986{
 987	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
 988	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
 989	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
 990	enum dpio_channel port = vlv_dport_to_channel(dport);
 991	enum pipe pipe = intel_crtc->pipe;
 992
 993	mutex_lock(&dev_priv->sb_lock);
 994	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), 0x00000000);
 995	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW4(port), demph_reg_value);
 996	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW2(port),
 997			 uniqtranscale_reg_value);
 998	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW3(port), 0x0C782040);
 999
1000	if (tx3_demph)
1001		vlv_dpio_write(dev_priv, pipe, VLV_TX3_DW4(port), tx3_demph);
1002
1003	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW11(port), 0x00030000);
1004	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW9(port), preemph_reg_value);
1005	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), DPIO_TX_OCALINIT_EN);
1006	mutex_unlock(&dev_priv->sb_lock);
1007}
1008
1009void vlv_phy_pre_pll_enable(struct intel_encoder *encoder,
1010			    const struct intel_crtc_state *crtc_state)
1011{
1012	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
1013	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1014	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
1015	enum dpio_channel port = vlv_dport_to_channel(dport);
1016	enum pipe pipe = crtc->pipe;
1017
1018	/* Program Tx lane resets to default */
1019	mutex_lock(&dev_priv->sb_lock);
1020	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(port),
1021			 DPIO_PCS_TX_LANE2_RESET |
1022			 DPIO_PCS_TX_LANE1_RESET);
1023	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(port),
1024			 DPIO_PCS_CLK_CRI_RXEB_EIOS_EN |
1025			 DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN |
1026			 (1<<DPIO_PCS_CLK_DATAWIDTH_SHIFT) |
1027				 DPIO_PCS_CLK_SOFT_RESET);
1028
1029	/* Fix up inter-pair skew failure */
1030	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW12(port), 0x00750f00);
1031	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW11(port), 0x00001500);
1032	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW14(port), 0x40400000);
1033	mutex_unlock(&dev_priv->sb_lock);
1034}
1035
1036void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder,
1037				const struct intel_crtc_state *crtc_state)
1038{
1039	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
1040	struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
1041	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1042	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
1043	enum dpio_channel port = vlv_dport_to_channel(dport);
1044	enum pipe pipe = crtc->pipe;
1045	u32 val;
1046
1047	mutex_lock(&dev_priv->sb_lock);
1048
1049	/* Enable clock channels for this port */
1050	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW8(port));
1051	val = 0;
1052	if (pipe)
1053		val |= (1<<21);
1054	else
1055		val &= ~(1<<21);
1056	val |= 0x001000c4;
1057	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW8(port), val);
1058
1059	/* Program lane clock */
1060	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW14(port), 0x00760018);
1061	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW23(port), 0x00400888);
1062
1063	mutex_unlock(&dev_priv->sb_lock);
1064}
1065
1066void vlv_phy_reset_lanes(struct intel_encoder *encoder,
1067			 const struct intel_crtc_state *old_crtc_state)
1068{
1069	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
1070	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1071	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc);
1072	enum dpio_channel port = vlv_dport_to_channel(dport);
1073	enum pipe pipe = crtc->pipe;
1074
1075	mutex_lock(&dev_priv->sb_lock);
1076	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(port), 0x00000000);
1077	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(port), 0x00e00060);
1078	mutex_unlock(&dev_priv->sb_lock);
1079}