intel_dp_link_training.c 33.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*
 * Copyright © 2008-2015 Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 */

24
#include "intel_display_types.h"
25
#include "intel_dp.h"
26
#include "intel_dp_link_training.h"
27

28

29 30
static void intel_dp_reset_lttpr_common_caps(struct intel_dp *intel_dp)
{
31
	memset(intel_dp->lttpr_common_caps, 0, sizeof(intel_dp->lttpr_common_caps));
32 33
}

34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
static void intel_dp_reset_lttpr_count(struct intel_dp *intel_dp)
{
	intel_dp->lttpr_common_caps[DP_PHY_REPEATER_CNT -
				    DP_LT_TUNABLE_PHY_REPEATER_FIELD_DATA_STRUCTURE_REV] = 0;
}

static const char *intel_dp_phy_name(enum drm_dp_phy dp_phy,
				     char *buf, size_t buf_size)
{
	if (dp_phy == DP_PHY_DPRX)
		snprintf(buf, buf_size, "DPRX");
	else
		snprintf(buf, buf_size, "LTTPR %d", dp_phy - DP_PHY_LTTPR1 + 1);

	return buf;
}

static u8 *intel_dp_lttpr_phy_caps(struct intel_dp *intel_dp,
				   enum drm_dp_phy dp_phy)
{
	return intel_dp->lttpr_phy_caps[dp_phy - DP_PHY_LTTPR1];
}

static void intel_dp_read_lttpr_phy_caps(struct intel_dp *intel_dp,
					 enum drm_dp_phy dp_phy)
{
60
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
61 62 63 64 65 66 67
	u8 *phy_caps = intel_dp_lttpr_phy_caps(intel_dp, dp_phy);
	char phy_name[10];

	intel_dp_phy_name(dp_phy, phy_name, sizeof(phy_name));

	if (drm_dp_read_lttpr_phy_caps(&intel_dp->aux, dp_phy, phy_caps) < 0) {
		drm_dbg_kms(&dp_to_i915(intel_dp)->drm,
68 69
			    "[ENCODER:%d:%s][%s] failed to read the PHY caps\n",
			    encoder->base.base.id, encoder->base.name, phy_name);
70 71 72 73
		return;
	}

	drm_dbg_kms(&dp_to_i915(intel_dp)->drm,
74 75
		    "[ENCODER:%d:%s][%s] PHY capabilities: %*ph\n",
		    encoder->base.base.id, encoder->base.name, phy_name,
76 77 78 79
		    (int)sizeof(intel_dp->lttpr_phy_caps[0]),
		    phy_caps);
}

80 81
static bool intel_dp_read_lttpr_common_caps(struct intel_dp *intel_dp)
{
82 83
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
84 85 86 87 88 89 90 91

	if (intel_dp_is_edp(intel_dp))
		return false;

	/*
	 * Detecting LTTPRs must be avoided on platforms with an AUX timeout
	 * period < 3.2ms. (see DP Standard v2.0, 2.11.2, 3.6.6.1).
	 */
92
	if (DISPLAY_VER(i915) < 10 || IS_GEMINILAKE(i915))
93 94
		return false;

95
	if (drm_dp_read_lttpr_common_caps(&intel_dp->aux,
96 97
					  intel_dp->lttpr_common_caps) < 0)
		goto reset_caps;
98 99

	drm_dbg_kms(&dp_to_i915(intel_dp)->drm,
100 101
		    "[ENCODER:%d:%s] LTTPR common capabilities: %*ph\n",
		    encoder->base.base.id, encoder->base.name,
102 103 104
		    (int)sizeof(intel_dp->lttpr_common_caps),
		    intel_dp->lttpr_common_caps);

105 106 107 108
	/* The minimum value of LT_TUNABLE_PHY_REPEATER_FIELD_DATA_STRUCTURE_REV is 1.4 */
	if (intel_dp->lttpr_common_caps[0] < 0x14)
		goto reset_caps;

109
	return true;
110 111 112 113

reset_caps:
	intel_dp_reset_lttpr_common_caps(intel_dp);
	return false;
114 115 116 117 118 119 120 121 122 123 124
}

static bool
intel_dp_set_lttpr_transparent_mode(struct intel_dp *intel_dp, bool enable)
{
	u8 val = enable ? DP_PHY_REPEATER_MODE_TRANSPARENT :
			  DP_PHY_REPEATER_MODE_NON_TRANSPARENT;

	return drm_dp_dpcd_write(&intel_dp->aux, DP_PHY_REPEATER_MODE, &val, 1) == 1;
}

125
static int intel_dp_init_lttpr(struct intel_dp *intel_dp)
126
{
127 128
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
129 130 131
	int lttpr_count;
	int i;

132
	if (!intel_dp_read_lttpr_common_caps(intel_dp))
133 134
		return 0;

135 136 137 138 139 140 141 142
	lttpr_count = drm_dp_lttpr_count(intel_dp->lttpr_common_caps);
	/*
	 * Prevent setting LTTPR transparent mode explicitly if no LTTPRs are
	 * detected as this breaks link training at least on the Dell WD19TB
	 * dock.
	 */
	if (lttpr_count == 0)
		return 0;
143 144 145

	/*
	 * See DP Standard v2.0 3.6.6.1. about the explicit disabling of
146 147
	 * non-transparent mode and the disable->enable non-transparent mode
	 * sequence.
148 149 150
	 */
	intel_dp_set_lttpr_transparent_mode(intel_dp, true);

151 152 153 154 155
	/*
	 * In case of unsupported number of LTTPRs or failing to switch to
	 * non-transparent mode fall-back to transparent link training mode,
	 * still taking into account any LTTPR common lane- rate/count limits.
	 */
156
	if (lttpr_count < 0)
157 158 159
		return 0;

	if (!intel_dp_set_lttpr_transparent_mode(intel_dp, false)) {
160 161 162
		drm_dbg_kms(&i915->drm,
			    "[ENCODER:%d:%s] Switching to LTTPR non-transparent LT mode failed, fall-back to transparent mode\n",
			    encoder->base.base.id, encoder->base.name);
163 164 165 166 167 168 169 170 171 172 173

		intel_dp_set_lttpr_transparent_mode(intel_dp, true);
		intel_dp_reset_lttpr_count(intel_dp);

		return 0;
	}

	for (i = 0; i < lttpr_count; i++)
		intel_dp_read_lttpr_phy_caps(intel_dp, DP_PHY_LTTPR(i));

	return lttpr_count;
174
}
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205

/**
 * intel_dp_init_lttpr_and_dprx_caps - detect LTTPR and DPRX caps, init the LTTPR link training mode
 * @intel_dp: Intel DP struct
 *
 * Read the LTTPR common and DPRX capabilities and switch to non-transparent
 * link training mode if any is detected and read the PHY capabilities for all
 * detected LTTPRs. In case of an LTTPR detection error or if the number of
 * LTTPRs is more than is supported (8), fall back to the no-LTTPR,
 * transparent mode link training mode.
 *
 * Returns:
 *   >0  if LTTPRs were detected and the non-transparent LT mode was set. The
 *       DPRX capabilities are read out.
 *    0  if no LTTPRs or more than 8 LTTPRs were detected or in case of a
 *       detection failure and the transparent LT mode was set. The DPRX
 *       capabilities are read out.
 *   <0  Reading out the DPRX capabilities failed.
 */
int intel_dp_init_lttpr_and_dprx_caps(struct intel_dp *intel_dp)
{
	int lttpr_count = intel_dp_init_lttpr(intel_dp);

	/* The DPTX shall read the DPRX caps after LTTPR detection. */
	if (drm_dp_read_dpcd_caps(&intel_dp->aux, intel_dp->dpcd)) {
		intel_dp_reset_lttpr_common_caps(intel_dp);
		return -EIO;
	}

	return lttpr_count;
}
206

207
static u8 dp_voltage_max(u8 preemph)
208
{
209 210 211 212 213 214 215 216
	switch (preemph & DP_TRAIN_PRE_EMPHASIS_MASK) {
	case DP_TRAIN_PRE_EMPH_LEVEL_0:
		return DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
	case DP_TRAIN_PRE_EMPH_LEVEL_1:
		return DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
	case DP_TRAIN_PRE_EMPH_LEVEL_2:
		return DP_TRAIN_VOLTAGE_SWING_LEVEL_1;
	case DP_TRAIN_PRE_EMPH_LEVEL_3:
217
	default:
218
		return DP_TRAIN_VOLTAGE_SWING_LEVEL_0;
219 220 221
	}
}

222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
static u8 intel_dp_lttpr_voltage_max(struct intel_dp *intel_dp,
				     enum drm_dp_phy dp_phy)
{
	const u8 *phy_caps = intel_dp_lttpr_phy_caps(intel_dp, dp_phy);

	if (drm_dp_lttpr_voltage_swing_level_3_supported(phy_caps))
		return DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
	else
		return DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
}

static u8 intel_dp_lttpr_preemph_max(struct intel_dp *intel_dp,
				     enum drm_dp_phy dp_phy)
{
	const u8 *phy_caps = intel_dp_lttpr_phy_caps(intel_dp, dp_phy);

	if (drm_dp_lttpr_pre_emphasis_level_3_supported(phy_caps))
		return DP_TRAIN_PRE_EMPH_LEVEL_3;
	else
		return DP_TRAIN_PRE_EMPH_LEVEL_2;
}

static bool
intel_dp_phy_is_downstream_of_source(struct intel_dp *intel_dp,
				     enum drm_dp_phy dp_phy)
{
	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
249
	int lttpr_count = drm_dp_lttpr_count(intel_dp->lttpr_common_caps);
250

251
	drm_WARN_ON_ONCE(&i915->drm, lttpr_count <= 0 && dp_phy != DP_PHY_DPRX);
252

253
	return lttpr_count <= 0 || dp_phy == DP_PHY_LTTPR(lttpr_count - 1);
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
}

static u8 intel_dp_phy_voltage_max(struct intel_dp *intel_dp,
				   const struct intel_crtc_state *crtc_state,
				   enum drm_dp_phy dp_phy)
{
	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
	u8 voltage_max;

	/*
	 * Get voltage_max from the DPTX_PHY (source or LTTPR) upstream from
	 * the DPRX_PHY we train.
	 */
	if (intel_dp_phy_is_downstream_of_source(intel_dp, dp_phy))
		voltage_max = intel_dp->voltage_max(intel_dp, crtc_state);
	else
		voltage_max = intel_dp_lttpr_voltage_max(intel_dp, dp_phy + 1);

	drm_WARN_ON_ONCE(&i915->drm,
			 voltage_max != DP_TRAIN_VOLTAGE_SWING_LEVEL_2 &&
			 voltage_max != DP_TRAIN_VOLTAGE_SWING_LEVEL_3);

	return voltage_max;
}

static u8 intel_dp_phy_preemph_max(struct intel_dp *intel_dp,
				   enum drm_dp_phy dp_phy)
{
	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
	u8 preemph_max;

	/*
	 * Get preemph_max from the DPTX_PHY (source or LTTPR) upstream from
	 * the DPRX_PHY we train.
	 */
	if (intel_dp_phy_is_downstream_of_source(intel_dp, dp_phy))
		preemph_max = intel_dp->preemph_max(intel_dp);
	else
		preemph_max = intel_dp_lttpr_preemph_max(intel_dp, dp_phy + 1);

	drm_WARN_ON_ONCE(&i915->drm,
			 preemph_max != DP_TRAIN_PRE_EMPH_LEVEL_2 &&
			 preemph_max != DP_TRAIN_PRE_EMPH_LEVEL_3);

	return preemph_max;
}

301 302 303
static bool has_per_lane_signal_levels(struct intel_dp *intel_dp,
				       enum drm_dp_phy dp_phy)
{
304
	return !intel_dp_phy_is_downstream_of_source(intel_dp, dp_phy);
305 306 307 308 309 310 311
}

static u8 intel_dp_get_lane_adjust_train(struct intel_dp *intel_dp,
					 const struct intel_crtc_state *crtc_state,
					 enum drm_dp_phy dp_phy,
					 const u8 link_status[DP_LINK_STATUS_SIZE],
					 int lane)
312
{
313 314 315 316
	u8 v = 0;
	u8 p = 0;
	u8 voltage_max;
	u8 preemph_max;
317

318 319 320 321 322 323 324 325 326 327
	if (has_per_lane_signal_levels(intel_dp, dp_phy)) {
		lane = min(lane, crtc_state->lane_count - 1);

		v = drm_dp_get_adjust_request_voltage(link_status, lane);
		p = drm_dp_get_adjust_request_pre_emphasis(link_status, lane);
	} else {
		for (lane = 0; lane < crtc_state->lane_count; lane++) {
			v = max(v, drm_dp_get_adjust_request_voltage(link_status, lane));
			p = max(p, drm_dp_get_adjust_request_pre_emphasis(link_status, lane));
		}
328 329
	}

330
	preemph_max = intel_dp_phy_preemph_max(intel_dp, dp_phy);
331 332 333
	if (p >= preemph_max)
		p = preemph_max | DP_TRAIN_MAX_PRE_EMPHASIS_REACHED;

334 335
	v = min(v, dp_voltage_max(p));

336
	voltage_max = intel_dp_phy_voltage_max(intel_dp, crtc_state, dp_phy);
337 338 339
	if (v >= voltage_max)
		v = voltage_max | DP_TRAIN_MAX_SWING_REACHED;

340 341 342
	return v | p;
}

343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358
#define TRAIN_REQ_FMT "%d/%d/%d/%d"
#define _TRAIN_REQ_VSWING_ARGS(link_status, lane) \
	(drm_dp_get_adjust_request_voltage((link_status), (lane)) >> DP_TRAIN_VOLTAGE_SWING_SHIFT)
#define TRAIN_REQ_VSWING_ARGS(link_status) \
	_TRAIN_REQ_VSWING_ARGS(link_status, 0), \
	_TRAIN_REQ_VSWING_ARGS(link_status, 1), \
	_TRAIN_REQ_VSWING_ARGS(link_status, 2), \
	_TRAIN_REQ_VSWING_ARGS(link_status, 3)
#define _TRAIN_REQ_PREEMPH_ARGS(link_status, lane) \
	(drm_dp_get_adjust_request_pre_emphasis((link_status), (lane)) >> DP_TRAIN_PRE_EMPHASIS_SHIFT)
#define TRAIN_REQ_PREEMPH_ARGS(link_status) \
	_TRAIN_REQ_PREEMPH_ARGS(link_status, 0), \
	_TRAIN_REQ_PREEMPH_ARGS(link_status, 1), \
	_TRAIN_REQ_PREEMPH_ARGS(link_status, 2), \
	_TRAIN_REQ_PREEMPH_ARGS(link_status, 3)

359 360 361 362 363 364
void
intel_dp_get_adjust_train(struct intel_dp *intel_dp,
			  const struct intel_crtc_state *crtc_state,
			  enum drm_dp_phy dp_phy,
			  const u8 link_status[DP_LINK_STATUS_SIZE])
{
365
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
366
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
367
	char phy_name[10];
368 369
	int lane;

370
	drm_dbg_kms(&i915->drm, "[ENCODER:%d:%s][%s] lanes: %d, "
371
		    "vswing request: " TRAIN_REQ_FMT ", "
372
		    "pre-emphasis request: " TRAIN_REQ_FMT "\n",
373
		    encoder->base.base.id, encoder->base.name,
374
		    intel_dp_phy_name(dp_phy, phy_name, sizeof(phy_name)),
375 376
		    crtc_state->lane_count,
		    TRAIN_REQ_VSWING_ARGS(link_status),
377
		    TRAIN_REQ_PREEMPH_ARGS(link_status));
378

379
	for (lane = 0; lane < 4; lane++)
380 381 382
		intel_dp->train_set[lane] =
			intel_dp_get_lane_adjust_train(intel_dp, crtc_state,
						       dp_phy, link_status, lane);
383 384
}

385 386 387 388 389 390 391 392
static int intel_dp_training_pattern_set_reg(struct intel_dp *intel_dp,
					     enum drm_dp_phy dp_phy)
{
	return dp_phy == DP_PHY_DPRX ?
		DP_TRAINING_PATTERN_SET :
		DP_TRAINING_PATTERN_SET_PHY_REPEATER(dp_phy);
}

393 394
static bool
intel_dp_set_link_train(struct intel_dp *intel_dp,
395
			const struct intel_crtc_state *crtc_state,
396
			enum drm_dp_phy dp_phy,
397
			u8 dp_train_pat)
398
{
399
	int reg = intel_dp_training_pattern_set_reg(intel_dp, dp_phy);
400
	u8 buf[sizeof(intel_dp->train_set) + 1];
401
	int len;
402

403
	intel_dp_program_link_training_pattern(intel_dp, crtc_state,
404
					       dp_phy, dp_train_pat);
405 406

	buf[0] = dp_train_pat;
407 408 409
	/* DP_TRAINING_LANEx_SET follow DP_TRAINING_PATTERN_SET */
	memcpy(buf + 1, intel_dp->train_set, crtc_state->lane_count);
	len = crtc_state->lane_count + 1;
410

411
	return drm_dp_dpcd_write(&intel_dp->aux, reg, buf, len) == len;
412 413
}

414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431
static char dp_training_pattern_name(u8 train_pat)
{
	switch (train_pat) {
	case DP_TRAINING_PATTERN_1:
	case DP_TRAINING_PATTERN_2:
	case DP_TRAINING_PATTERN_3:
		return '0' + train_pat;
	case DP_TRAINING_PATTERN_4:
		return '4';
	default:
		MISSING_CASE(train_pat);
		return '?';
	}
}

void
intel_dp_program_link_training_pattern(struct intel_dp *intel_dp,
				       const struct intel_crtc_state *crtc_state,
432
				       enum drm_dp_phy dp_phy,
433 434 435
				       u8 dp_train_pat)
{
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
436
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
437
	u8 train_pat = intel_dp_training_pattern_symbol(dp_train_pat);
438
	char phy_name[10];
439 440

	if (train_pat != DP_TRAINING_PATTERN_DISABLE)
441 442
		drm_dbg_kms(&i915->drm,
			    "[ENCODER:%d:%s][%s] Using DP training pattern TPS%c\n",
443
			    encoder->base.base.id, encoder->base.name,
444 445
			    intel_dp_phy_name(dp_phy, phy_name, sizeof(phy_name)),
			    dp_training_pattern_name(train_pat));
446 447 448 449

	intel_dp->set_link_train(intel_dp, crtc_state, dp_train_pat);
}

450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467
#define TRAIN_SET_FMT "%d%s/%d%s/%d%s/%d%s"
#define _TRAIN_SET_VSWING_ARGS(train_set) \
	((train_set) & DP_TRAIN_VOLTAGE_SWING_MASK) >> DP_TRAIN_VOLTAGE_SWING_SHIFT, \
	(train_set) & DP_TRAIN_MAX_SWING_REACHED ? "(max)" : ""
#define TRAIN_SET_VSWING_ARGS(train_set) \
	_TRAIN_SET_VSWING_ARGS((train_set)[0]), \
	_TRAIN_SET_VSWING_ARGS((train_set)[1]), \
	_TRAIN_SET_VSWING_ARGS((train_set)[2]), \
	_TRAIN_SET_VSWING_ARGS((train_set)[3])
#define _TRAIN_SET_PREEMPH_ARGS(train_set) \
	((train_set) & DP_TRAIN_PRE_EMPHASIS_MASK) >> DP_TRAIN_PRE_EMPHASIS_SHIFT, \
	(train_set) & DP_TRAIN_MAX_PRE_EMPHASIS_REACHED ? "(max)" : ""
#define TRAIN_SET_PREEMPH_ARGS(train_set) \
	_TRAIN_SET_PREEMPH_ARGS((train_set)[0]), \
	_TRAIN_SET_PREEMPH_ARGS((train_set)[1]), \
	_TRAIN_SET_PREEMPH_ARGS((train_set)[2]), \
	_TRAIN_SET_PREEMPH_ARGS((train_set)[3])

468
void intel_dp_set_signal_levels(struct intel_dp *intel_dp,
469 470
				const struct intel_crtc_state *crtc_state,
				enum drm_dp_phy dp_phy)
471
{
472
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
473
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
474
	char phy_name[10];
475

476
	drm_dbg_kms(&i915->drm, "[ENCODER:%d:%s][%s] lanes: %d, "
477
		    "vswing levels: " TRAIN_SET_FMT ", "
478
		    "pre-emphasis levels: " TRAIN_SET_FMT "\n",
479
		    encoder->base.base.id, encoder->base.name,
480
		    intel_dp_phy_name(dp_phy, phy_name, sizeof(phy_name)),
481 482
		    crtc_state->lane_count,
		    TRAIN_SET_VSWING_ARGS(intel_dp->train_set),
483
		    TRAIN_SET_PREEMPH_ARGS(intel_dp->train_set));
484

485
	if (intel_dp_phy_is_downstream_of_source(intel_dp, dp_phy))
486
		encoder->set_signal_levels(encoder, crtc_state);
487 488
}

489 490
static bool
intel_dp_reset_link_train(struct intel_dp *intel_dp,
491
			  const struct intel_crtc_state *crtc_state,
492
			  enum drm_dp_phy dp_phy,
493
			  u8 dp_train_pat)
494
{
495
	memset(intel_dp->train_set, 0, sizeof(intel_dp->train_set));
496
	intel_dp_set_signal_levels(intel_dp, crtc_state, dp_phy);
497
	return intel_dp_set_link_train(intel_dp, crtc_state, dp_phy, dp_train_pat);
498 499 500
}

static bool
501
intel_dp_update_link_train(struct intel_dp *intel_dp,
502 503
			   const struct intel_crtc_state *crtc_state,
			   enum drm_dp_phy dp_phy)
504
{
505 506 507
	int reg = dp_phy == DP_PHY_DPRX ?
			    DP_TRAINING_LANE0_SET :
			    DP_TRAINING_LANE0_SET_PHY_REPEATER(dp_phy);
508 509
	int ret;

510
	intel_dp_set_signal_levels(intel_dp, crtc_state, dp_phy);
511

512
	ret = drm_dp_dpcd_write(&intel_dp->aux, reg,
513
				intel_dp->train_set, crtc_state->lane_count);
514

515
	return ret == crtc_state->lane_count;
516 517
}

518 519
static bool intel_dp_link_max_vswing_reached(struct intel_dp *intel_dp,
					     const struct intel_crtc_state *crtc_state)
520 521 522
{
	int lane;

523 524 525 526 527 528 529 530 531 532 533 534 535 536 537
	/*
	 * FIXME: The DP spec is very confusing here, also the Link CTS
	 * spec seems to have self contradicting tests around this area.
	 *
	 * In lieu of better ideas let's just stop when we've reached the
	 * max supported vswing with its max pre-emphasis, which is either
	 * 2+1 or 3+0 depending on whether vswing level 3 is supported or not.
	 */
	for (lane = 0; lane < crtc_state->lane_count; lane++) {
		u8 v = (intel_dp->train_set[lane] & DP_TRAIN_VOLTAGE_SWING_MASK) >>
			DP_TRAIN_VOLTAGE_SWING_SHIFT;
		u8 p = (intel_dp->train_set[lane] & DP_TRAIN_PRE_EMPHASIS_MASK) >>
			DP_TRAIN_PRE_EMPHASIS_SHIFT;

		if ((intel_dp->train_set[lane] & DP_TRAIN_MAX_SWING_REACHED) == 0)
538 539
			return false;

540 541 542 543
		if (v + p != 3)
			return false;
	}

544 545 546
	return true;
}

547 548 549 550
/*
 * Prepare link training by configuring the link parameters. On DDI platforms
 * also enable the port here.
 */
551
static bool
552 553
intel_dp_prepare_link_train(struct intel_dp *intel_dp,
			    const struct intel_crtc_state *crtc_state)
554
{
555 556
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
557 558
	u8 link_config[2];
	u8 link_bw, rate_select;
559

560
	if (intel_dp->prepare_link_retrain)
561
		intel_dp->prepare_link_retrain(intel_dp, crtc_state);
562

563
	intel_dp_compute_rate(intel_dp, crtc_state->port_clock,
564 565
			      &link_bw, &rate_select);

566
	if (link_bw)
567
		drm_dbg_kms(&i915->drm,
568 569
			    "[ENCODER:%d:%s] Using LINK_BW_SET value %02x\n",
			    encoder->base.base.id, encoder->base.name, link_bw);
570
	else
571
		drm_dbg_kms(&i915->drm,
572 573
			    "[ENCODER:%d:%s] Using LINK_RATE_SET value %02x\n",
			    encoder->base.base.id, encoder->base.name, rate_select);
574

575 576
	/* Write the link configuration data */
	link_config[0] = link_bw;
577
	link_config[1] = crtc_state->lane_count;
578 579 580
	if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
		link_config[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
	drm_dp_dpcd_write(&intel_dp->aux, DP_LINK_BW_SET, link_config, 2);
581

582 583
	/* eDP 1.4 rate select method. */
	if (!link_bw)
584 585 586
		drm_dp_dpcd_write(&intel_dp->aux, DP_LINK_RATE_SET,
				  &rate_select, 1);

587
	link_config[0] = crtc_state->vrr.enable ? DP_MSA_TIMING_PAR_IGNORE_EN : 0;
588 589
	link_config[1] = intel_dp_is_uhbr(crtc_state) ?
		DP_SET_ANSI_128B132B : DP_SET_ANSI_8B10B;
590 591
	drm_dp_dpcd_write(&intel_dp->aux, DP_DOWNSPREAD_CTRL, link_config, 2);

592 593 594
	return true;
}

595 596 597 598
static void intel_dp_link_training_clock_recovery_delay(struct intel_dp *intel_dp,
							enum drm_dp_phy dp_phy)
{
	if (dp_phy == DP_PHY_DPRX)
599
		drm_dp_link_train_clock_recovery_delay(&intel_dp->aux, intel_dp->dpcd);
600 601 602 603
	else
		drm_dp_lttpr_link_train_clock_recovery_delay();
}

604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622
static bool intel_dp_adjust_request_changed(int lane_count,
					    const u8 old_link_status[DP_LINK_STATUS_SIZE],
					    const u8 new_link_status[DP_LINK_STATUS_SIZE])
{
	int lane;

	for (lane = 0; lane < lane_count; lane++) {
		u8 old = drm_dp_get_adjust_request_voltage(old_link_status, lane) |
			drm_dp_get_adjust_request_pre_emphasis(old_link_status, lane);
		u8 new = drm_dp_get_adjust_request_voltage(new_link_status, lane) |
			drm_dp_get_adjust_request_pre_emphasis(new_link_status, lane);

		if (old != new)
			return true;
	}

	return false;
}

623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638
static void
intel_dp_dump_link_status(struct intel_dp *intel_dp, enum drm_dp_phy dp_phy,
			  const u8 link_status[DP_LINK_STATUS_SIZE])
{
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
	char phy_name[10];

	drm_dbg_kms(&i915->drm,
		    "[ENCODER:%d:%s][%s] ln0_1:0x%x ln2_3:0x%x align:0x%x sink:0x%x adj_req0_1:0x%x adj_req2_3:0x%x\n",
		    encoder->base.base.id, encoder->base.name,
		    intel_dp_phy_name(dp_phy, phy_name, sizeof(phy_name)),
		    link_status[0], link_status[1], link_status[2],
		    link_status[3], link_status[4], link_status[5]);
}

639 640 641 642
/*
 * Perform the link training clock recovery phase on the given DP PHY using
 * training pattern 1.
 */
643 644
static bool
intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp,
645 646
				      const struct intel_crtc_state *crtc_state,
				      enum drm_dp_phy dp_phy)
647
{
648 649
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
650
	u8 old_link_status[DP_LINK_STATUS_SIZE] = {};
651
	int voltage_tries, cr_tries, max_cr_tries;
652
	u8 link_status[DP_LINK_STATUS_SIZE];
653
	bool max_vswing_reached = false;
654 655 656
	char phy_name[10];

	intel_dp_phy_name(dp_phy, phy_name, sizeof(phy_name));
657

658
	/* clock recovery */
659
	if (!intel_dp_reset_link_train(intel_dp, crtc_state, dp_phy,
660 661
				       DP_TRAINING_PATTERN_1 |
				       DP_LINK_SCRAMBLING_DISABLE)) {
662 663
		drm_err(&i915->drm, "[ENCODER:%d:%s][%s] Failed to enable link training\n",
			encoder->base.base.id, encoder->base.name, phy_name);
664
		return false;
665 666
	}

667
	/*
668 669 670 671 672 673
	 * The DP 1.4 spec defines the max clock recovery retries value
	 * as 10 but for pre-DP 1.4 devices we set a very tolerant
	 * retry limit of 80 (4 voltage levels x 4 preemphasis levels x
	 * x 5 identical voltage retries). Since the previous specs didn't
	 * define a limit and created the possibility of an infinite loop
	 * we want to prevent any sync from triggering that corner case.
674 675 676 677 678 679
	 */
	if (intel_dp->dpcd[DP_DPCD_REV] >= DP_DPCD_REV_14)
		max_cr_tries = 10;
	else
		max_cr_tries = 80;

680
	voltage_tries = 1;
681
	for (cr_tries = 0; cr_tries < max_cr_tries; ++cr_tries) {
682
		intel_dp_link_training_clock_recovery_delay(intel_dp, dp_phy);
683

684 685
		if (drm_dp_dpcd_read_phy_link_status(&intel_dp->aux, dp_phy,
						     link_status) < 0) {
686 687
			drm_err(&i915->drm, "[ENCODER:%d:%s][%s] Failed to get link status\n",
				encoder->base.base.id, encoder->base.name, phy_name);
688
			return false;
689 690
		}

691
		if (drm_dp_clock_recovery_ok(link_status, crtc_state->lane_count)) {
692 693 694
			drm_dbg_kms(&i915->drm,
				    "[ENCODER:%d:%s][%s] Clock recovery OK\n",
				    encoder->base.base.id, encoder->base.name, phy_name);
695
			return true;
696 697
		}

698
		if (voltage_tries == 5) {
699
			intel_dp_dump_link_status(intel_dp, dp_phy, link_status);
700
			drm_dbg_kms(&i915->drm,
701 702
				    "[ENCODER:%d:%s][%s] Same voltage tried 5 times\n",
				    encoder->base.base.id, encoder->base.name, phy_name);
703 704 705
			return false;
		}

706
		if (max_vswing_reached) {
707
			intel_dp_dump_link_status(intel_dp, dp_phy, link_status);
708 709 710
			drm_dbg_kms(&i915->drm,
				    "[ENCODER:%d:%s][%s] Max Voltage Swing reached\n",
				    encoder->base.base.id, encoder->base.name, phy_name);
711
			return false;
712 713 714
		}

		/* Update training set as requested by target */
715 716 717
		intel_dp_get_adjust_train(intel_dp, crtc_state, dp_phy,
					  link_status);
		if (!intel_dp_update_link_train(intel_dp, crtc_state, dp_phy)) {
718
			drm_err(&i915->drm,
719 720
				"[ENCODER:%d:%s][%s] Failed to update link training\n",
				encoder->base.base.id, encoder->base.name, phy_name);
721
			return false;
722
		}
723

724 725
		if (!intel_dp_adjust_request_changed(crtc_state->lane_count,
						     old_link_status, link_status))
726 727 728 729
			++voltage_tries;
		else
			voltage_tries = 1;

730 731
		memcpy(old_link_status, link_status, sizeof(link_status));

732
		if (intel_dp_link_max_vswing_reached(intel_dp, crtc_state))
733
			max_vswing_reached = true;
734
	}
735

736
	intel_dp_dump_link_status(intel_dp, dp_phy, link_status);
737
	drm_err(&i915->drm,
738 739 740
		"[ENCODER:%d:%s][%s] Failed clock recovery %d times, giving up!\n",
		encoder->base.base.id, encoder->base.name, phy_name, max_cr_tries);

741
	return false;
742 743
}

744
/*
745 746 747
 * Pick Training Pattern Sequence (TPS) for channel equalization. 128b/132b TPS2
 * for UHBR+, TPS4 for HBR3 or for 1.4 devices that support it, TPS3 for HBR2 or
 * 1.2 devices that support it, TPS2 otherwise.
748
 */
749
static u32 intel_dp_training_pattern(struct intel_dp *intel_dp,
750 751
				     const struct intel_crtc_state *crtc_state,
				     enum drm_dp_phy dp_phy)
752
{
753
	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
754
	bool source_tps3, sink_tps3, source_tps4, sink_tps4;
755

756 757 758 759
	/* UHBR+ use separate 128b/132b TPS2 */
	if (intel_dp_is_uhbr(crtc_state))
		return DP_TRAINING_PATTERN_2;

760
	/*
761 762 763
	 * TPS4 support is mandatory for all downstream devices that
	 * support HBR3. There are no known eDP panels that support
	 * TPS4 as of Feb 2018 as per VESA eDP_v1.4b_E1 specification.
764
	 * LTTPRs must support TPS4.
765
	 */
766
	source_tps4 = intel_dp_source_supports_tps4(i915);
767 768
	sink_tps4 = dp_phy != DP_PHY_DPRX ||
		    drm_dp_tps4_supported(intel_dp->dpcd);
769 770
	if (source_tps4 && sink_tps4) {
		return DP_TRAINING_PATTERN_4;
771
	} else if (crtc_state->port_clock == 810000) {
772
		if (!source_tps4)
773 774
			drm_dbg_kms(&i915->drm,
				    "8.1 Gbps link rate without source TPS4 support\n");
775
		if (!sink_tps4)
776
			drm_dbg_kms(&i915->drm,
777
				    "8.1 Gbps link rate without sink TPS4 support\n");
778
	}
779

780
	/*
781 782
	 * TPS3 support is mandatory for downstream devices that
	 * support HBR2. However, not all sinks follow the spec.
783
	 */
784
	source_tps3 = intel_dp_source_supports_tps3(i915);
785 786
	sink_tps3 = dp_phy != DP_PHY_DPRX ||
		    drm_dp_tps3_supported(intel_dp->dpcd);
787
	if (source_tps3 && sink_tps3) {
788
		return  DP_TRAINING_PATTERN_3;
789
	} else if (crtc_state->port_clock >= 540000) {
790
		if (!source_tps3)
791 792
			drm_dbg_kms(&i915->drm,
				    ">=5.4/6.48 Gbps link rate without source TPS3 support\n");
793
		if (!sink_tps3)
794
			drm_dbg_kms(&i915->drm,
795
				    ">=5.4/6.48 Gbps link rate without sink TPS3 support\n");
796
	}
797

798
	return DP_TRAINING_PATTERN_2;
799 800
}

801 802 803 804 805
static void
intel_dp_link_training_channel_equalization_delay(struct intel_dp *intel_dp,
						  enum drm_dp_phy dp_phy)
{
	if (dp_phy == DP_PHY_DPRX) {
806
		drm_dp_link_train_channel_eq_delay(&intel_dp->aux, intel_dp->dpcd);
807 808 809
	} else {
		const u8 *phy_caps = intel_dp_lttpr_phy_caps(intel_dp, dp_phy);

810
		drm_dp_lttpr_link_train_channel_eq_delay(&intel_dp->aux, phy_caps);
811 812 813
	}
}

814
/*
815 816 817
 * Perform the link training channel equalization phase on the given DP PHY
 * using one of training pattern 2, 3 or 4 depending on the source and
 * sink capabilities.
818
 */
819
static bool
820
intel_dp_link_training_channel_equalization(struct intel_dp *intel_dp,
821 822
					    const struct intel_crtc_state *crtc_state,
					    enum drm_dp_phy dp_phy)
823
{
824 825
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
826
	int tries;
827
	u32 training_pattern;
828
	u8 link_status[DP_LINK_STATUS_SIZE];
829
	bool channel_eq = false;
830 831 832
	char phy_name[10];

	intel_dp_phy_name(dp_phy, phy_name, sizeof(phy_name));
833

834
	training_pattern = intel_dp_training_pattern(intel_dp, crtc_state, dp_phy);
835 836 837
	/* Scrambling is disabled for TPS2/3 and enabled for TPS4 */
	if (training_pattern != DP_TRAINING_PATTERN_4)
		training_pattern |= DP_LINK_SCRAMBLING_DISABLE;
838

839
	/* channel equalization */
840
	if (!intel_dp_set_link_train(intel_dp, crtc_state, dp_phy,
841
				     training_pattern)) {
842 843 844 845
		drm_err(&i915->drm,
			"[ENCODER:%d:%s][%s] Failed to start channel equalization\n",
			encoder->base.base.id, encoder->base.name,
			phy_name);
846
		return false;
847 848
	}

849
	for (tries = 0; tries < 5; tries++) {
850 851 852 853
		intel_dp_link_training_channel_equalization_delay(intel_dp,
								  dp_phy);
		if (drm_dp_dpcd_read_phy_link_status(&intel_dp->aux, dp_phy,
						     link_status) < 0) {
854
			drm_err(&i915->drm,
855 856
				"[ENCODER:%d:%s][%s] Failed to get link status\n",
				encoder->base.base.id, encoder->base.name, phy_name);
857 858 859 860 861
			break;
		}

		/* Make sure clock is still ok */
		if (!drm_dp_clock_recovery_ok(link_status,
862
					      crtc_state->lane_count)) {
863
			intel_dp_dump_link_status(intel_dp, dp_phy, link_status);
864
			drm_dbg_kms(&i915->drm,
865 866 867
				    "[ENCODER:%d:%s][%s] Clock recovery check failed, cannot "
				    "continue channel equalization\n",
				    encoder->base.base.id, encoder->base.name, phy_name);
868
			break;
869 870 871
		}

		if (drm_dp_channel_eq_ok(link_status,
872
					 crtc_state->lane_count)) {
873
			channel_eq = true;
874 875 876
			drm_dbg_kms(&i915->drm,
				    "[ENCODER:%d:%s][%s] Channel EQ done. DP Training successful\n",
				    encoder->base.base.id, encoder->base.name, phy_name);
877 878 879 880
			break;
		}

		/* Update training set as requested by target */
881 882 883
		intel_dp_get_adjust_train(intel_dp, crtc_state, dp_phy,
					  link_status);
		if (!intel_dp_update_link_train(intel_dp, crtc_state, dp_phy)) {
884
			drm_err(&i915->drm,
885 886
				"[ENCODER:%d:%s][%s] Failed to update link training\n",
				encoder->base.base.id, encoder->base.name, phy_name);
887 888
			break;
		}
889 890 891 892
	}

	/* Try 5 times, else fail and try at lower BW */
	if (tries == 5) {
893
		intel_dp_dump_link_status(intel_dp, dp_phy, link_status);
894
		drm_dbg_kms(&i915->drm,
895 896
			    "[ENCODER:%d:%s][%s] Channel equalization failed 5 times\n",
			    encoder->base.base.id, encoder->base.name, phy_name);
897 898
	}

899
	return channel_eq;
900 901
}

902 903
static bool intel_dp_disable_dpcd_training_pattern(struct intel_dp *intel_dp,
						   enum drm_dp_phy dp_phy)
904
{
905
	int reg = intel_dp_training_pattern_set_reg(intel_dp, dp_phy);
906 907
	u8 val = DP_TRAINING_PATTERN_DISABLE;

908
	return drm_dp_dpcd_write(&intel_dp->aux, reg, &val, 1) == 1;
909 910
}

911 912 913 914 915
/**
 * intel_dp_stop_link_train - stop link training
 * @intel_dp: DP struct
 * @crtc_state: state for CRTC attached to the encoder
 *
916 917 918
 * Stop the link training of the @intel_dp port, disabling the training
 * pattern in the sink's DPCD, and disabling the test pattern symbol
 * generation on the port.
919 920 921 922 923 924 925 926
 *
 * What symbols are output on the port after this point is
 * platform specific: On DDI/VLV/CHV platforms it will be the idle pattern
 * with the pipe being disabled, on older platforms it's HW specific if/how an
 * idle pattern is generated, as the pipe is already enabled here for those.
 *
 * This function must be called after intel_dp_start_link_train().
 */
927 928
void intel_dp_stop_link_train(struct intel_dp *intel_dp,
			      const struct intel_crtc_state *crtc_state)
929
{
930 931
	intel_dp->link_trained = true;

932
	intel_dp_disable_dpcd_training_pattern(intel_dp, DP_PHY_DPRX);
933
	intel_dp_program_link_training_pattern(intel_dp, crtc_state, DP_PHY_DPRX,
934
					       DP_TRAINING_PATTERN_DISABLE);
935 936
}

937
static bool
938 939 940
intel_dp_link_train_phy(struct intel_dp *intel_dp,
			const struct intel_crtc_state *crtc_state,
			enum drm_dp_phy dp_phy)
941
{
942 943
	struct intel_connector *connector = intel_dp->attached_connector;
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
944
	char phy_name[10];
945 946
	bool ret = false;

947
	if (!intel_dp_link_training_clock_recovery(intel_dp, crtc_state, dp_phy))
948 949
		goto out;

950
	if (!intel_dp_link_training_channel_equalization(intel_dp, crtc_state, dp_phy))
951
		goto out;
952

953
	ret = true;
954

955
out:
956
	drm_dbg_kms(&dp_to_i915(intel_dp)->drm,
957 958 959 960
		    "[CONNECTOR:%d:%s][ENCODER:%d:%s][%s] Link Training %s at link rate = %d, lane count = %d\n",
		    connector->base.base.id, connector->base.name,
		    encoder->base.base.id, encoder->base.name,
		    intel_dp_phy_name(dp_phy, phy_name, sizeof(phy_name)),
961
		    ret ? "passed" : "failed",
962
		    crtc_state->port_clock, crtc_state->lane_count);
963

964 965 966 967 968 969 970
	return ret;
}

static void intel_dp_schedule_fallback_link_training(struct intel_dp *intel_dp,
						     const struct intel_crtc_state *crtc_state)
{
	struct intel_connector *intel_connector = intel_dp->attached_connector;
971
	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
972

973 974
	if (intel_dp->hobl_active) {
		drm_dbg_kms(&dp_to_i915(intel_dp)->drm,
975 976 977
			    "[ENCODER:%d:%s] Link Training failed with HOBL active, "
			    "not enabling it from now on",
			    encoder->base.base.id, encoder->base.name);
978 979
		intel_dp->hobl_failed = true;
	} else if (intel_dp_get_link_train_fallback_values(intel_dp,
980 981
							   crtc_state->port_clock,
							   crtc_state->lane_count)) {
982 983 984 985 986
		return;
	}

	/* Schedule a Hotplug Uevent to userspace to start modeset */
	schedule_work(&intel_connector->modeset_retry_work);
987
}
988

989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010
/* Perform the link training on all LTTPRs and the DPRX on a link. */
static bool
intel_dp_link_train_all_phys(struct intel_dp *intel_dp,
			     const struct intel_crtc_state *crtc_state,
			     int lttpr_count)
{
	bool ret = true;
	int i;

	intel_dp_prepare_link_train(intel_dp, crtc_state);

	for (i = lttpr_count - 1; i >= 0; i--) {
		enum drm_dp_phy dp_phy = DP_PHY_LTTPR(i);

		ret = intel_dp_link_train_phy(intel_dp, crtc_state, dp_phy);
		intel_dp_disable_dpcd_training_pattern(intel_dp, dp_phy);

		if (!ret)
			break;
	}

	if (ret)
1011
		ret = intel_dp_link_train_phy(intel_dp, crtc_state, DP_PHY_DPRX);
1012 1013 1014 1015 1016 1017 1018

	if (intel_dp->set_idle_link_train)
		intel_dp->set_idle_link_train(intel_dp, crtc_state);

	return ret;
}

1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031
/**
 * intel_dp_start_link_train - start link training
 * @intel_dp: DP struct
 * @crtc_state: state for CRTC attached to the encoder
 *
 * Start the link training of the @intel_dp port, scheduling a fallback
 * retraining with reduced link rate/lane parameters if the link training
 * fails.
 * After calling this function intel_dp_stop_link_train() must be called.
 */
void intel_dp_start_link_train(struct intel_dp *intel_dp,
			       const struct intel_crtc_state *crtc_state)
{
1032 1033 1034 1035
	/*
	 * TODO: Reiniting LTTPRs here won't be needed once proper connector
	 * HW state readout is added.
	 */
1036 1037 1038
	int lttpr_count = intel_dp_init_lttpr_and_dprx_caps(intel_dp);

	if (lttpr_count < 0)
1039 1040
		/* Still continue with enabling the port and link training. */
		lttpr_count = 0;
1041

1042
	if (!intel_dp_link_train_all_phys(intel_dp, crtc_state, lttpr_count))
1043 1044
		intel_dp_schedule_fallback_link_training(intel_dp, crtc_state);
}