Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.2.
   1/*
   2 * Copyright © 2008 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 DEALINGS
  21 * IN THE SOFTWARE.
  22 *
  23 * Authors:
  24 *    Keith Packard <keithp@keithp.com>
  25 *
  26 */
  27
  28#include <linux/i2c.h>
  29#include <linux/slab.h>
  30#include <linux/export.h>
  31#include <linux/notifier.h>
  32#include <linux/reboot.h>
  33#include <drm/drmP.h>
  34#include <drm/drm_atomic_helper.h>
  35#include <drm/drm_crtc.h>
  36#include <drm/drm_crtc_helper.h>
  37#include <drm/drm_edid.h>
  38#include "intel_drv.h"
  39#include <drm/i915_drm.h>
  40#include "i915_drv.h"
  41
  42#define DP_LINK_CHECK_TIMEOUT	(10 * 1000)
  43
  44/* Compliance test status bits  */
  45#define INTEL_DP_RESOLUTION_SHIFT_MASK	0
  46#define INTEL_DP_RESOLUTION_PREFERRED	(1 << INTEL_DP_RESOLUTION_SHIFT_MASK)
  47#define INTEL_DP_RESOLUTION_STANDARD	(2 << INTEL_DP_RESOLUTION_SHIFT_MASK)
  48#define INTEL_DP_RESOLUTION_FAILSAFE	(3 << INTEL_DP_RESOLUTION_SHIFT_MASK)
  49
  50struct dp_link_dpll {
  51	int clock;
  52	struct dpll dpll;
  53};
  54
  55static const struct dp_link_dpll gen4_dpll[] = {
  56	{ 162000,
  57		{ .p1 = 2, .p2 = 10, .n = 2, .m1 = 23, .m2 = 8 } },
  58	{ 270000,
  59		{ .p1 = 1, .p2 = 10, .n = 1, .m1 = 14, .m2 = 2 } }
  60};
  61
  62static const struct dp_link_dpll pch_dpll[] = {
  63	{ 162000,
  64		{ .p1 = 2, .p2 = 10, .n = 1, .m1 = 12, .m2 = 9 } },
  65	{ 270000,
  66		{ .p1 = 1, .p2 = 10, .n = 2, .m1 = 14, .m2 = 8 } }
  67};
  68
  69static const struct dp_link_dpll vlv_dpll[] = {
  70	{ 162000,
  71		{ .p1 = 3, .p2 = 2, .n = 5, .m1 = 3, .m2 = 81 } },
  72	{ 270000,
  73		{ .p1 = 2, .p2 = 2, .n = 1, .m1 = 2, .m2 = 27 } }
  74};
  75
  76/*
  77 * CHV supports eDP 1.4 that have  more link rates.
  78 * Below only provides the fixed rate but exclude variable rate.
  79 */
  80static const struct dp_link_dpll chv_dpll[] = {
  81	/*
  82	 * CHV requires to program fractional division for m2.
  83	 * m2 is stored in fixed point format using formula below
  84	 * (m2_int << 22) | m2_fraction
  85	 */
  86	{ 162000,	/* m2_int = 32, m2_fraction = 1677722 */
  87		{ .p1 = 4, .p2 = 2, .n = 1, .m1 = 2, .m2 = 0x819999a } },
  88	{ 270000,	/* m2_int = 27, m2_fraction = 0 */
  89		{ .p1 = 4, .p2 = 1, .n = 1, .m1 = 2, .m2 = 0x6c00000 } },
  90	{ 540000,	/* m2_int = 27, m2_fraction = 0 */
  91		{ .p1 = 2, .p2 = 1, .n = 1, .m1 = 2, .m2 = 0x6c00000 } }
  92};
  93
  94static const int bxt_rates[] = { 162000, 216000, 243000, 270000,
  95				  324000, 432000, 540000 };
  96static const int skl_rates[] = { 162000, 216000, 270000,
  97				  324000, 432000, 540000 };
  98static const int default_rates[] = { 162000, 270000, 540000 };
  99
 100/**
 101 * is_edp - is the given port attached to an eDP panel (either CPU or PCH)
 102 * @intel_dp: DP struct
 103 *
 104 * If a CPU or PCH DP output is attached to an eDP panel, this function
 105 * will return true, and false otherwise.
 106 */
 107static bool is_edp(struct intel_dp *intel_dp)
 108{
 109	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 110
 111	return intel_dig_port->base.type == INTEL_OUTPUT_EDP;
 112}
 113
 114static struct drm_device *intel_dp_to_dev(struct intel_dp *intel_dp)
 115{
 116	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 117
 118	return intel_dig_port->base.base.dev;
 119}
 120
 121static struct intel_dp *intel_attached_dp(struct drm_connector *connector)
 122{
 123	return enc_to_intel_dp(&intel_attached_encoder(connector)->base);
 124}
 125
 126static void intel_dp_link_down(struct intel_dp *intel_dp);
 127static bool edp_panel_vdd_on(struct intel_dp *intel_dp);
 128static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync);
 129static void vlv_init_panel_power_sequencer(struct intel_dp *intel_dp);
 130static void vlv_steal_power_sequencer(struct drm_device *dev,
 131				      enum pipe pipe);
 132
 133static unsigned int intel_dp_unused_lane_mask(int lane_count)
 134{
 135	return ~((1 << lane_count) - 1) & 0xf;
 136}
 137
 138static int
 139intel_dp_max_link_bw(struct intel_dp  *intel_dp)
 140{
 141	int max_link_bw = intel_dp->dpcd[DP_MAX_LINK_RATE];
 142
 143	switch (max_link_bw) {
 144	case DP_LINK_BW_1_62:
 145	case DP_LINK_BW_2_7:
 146	case DP_LINK_BW_5_4:
 147		break;
 148	default:
 149		WARN(1, "invalid max DP link bw val %x, using 1.62Gbps\n",
 150		     max_link_bw);
 151		max_link_bw = DP_LINK_BW_1_62;
 152		break;
 153	}
 154	return max_link_bw;
 155}
 156
 157static u8 intel_dp_max_lane_count(struct intel_dp *intel_dp)
 158{
 159	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 160	u8 source_max, sink_max;
 161
 162	source_max = intel_dig_port->max_lanes;
 163	sink_max = drm_dp_max_lane_count(intel_dp->dpcd);
 164
 165	return min(source_max, sink_max);
 166}
 167
 168/*
 169 * The units on the numbers in the next two are... bizarre.  Examples will
 170 * make it clearer; this one parallels an example in the eDP spec.
 171 *
 172 * intel_dp_max_data_rate for one lane of 2.7GHz evaluates as:
 173 *
 174 *     270000 * 1 * 8 / 10 == 216000
 175 *
 176 * The actual data capacity of that configuration is 2.16Gbit/s, so the
 177 * units are decakilobits.  ->clock in a drm_display_mode is in kilohertz -
 178 * or equivalently, kilopixels per second - so for 1680x1050R it'd be
 179 * 119000.  At 18bpp that's 2142000 kilobits per second.
 180 *
 181 * Thus the strange-looking division by 10 in intel_dp_link_required, to
 182 * get the result in decakilobits instead of kilobits.
 183 */
 184
 185static int
 186intel_dp_link_required(int pixel_clock, int bpp)
 187{
 188	return (pixel_clock * bpp + 9) / 10;
 189}
 190
 191static int
 192intel_dp_max_data_rate(int max_link_clock, int max_lanes)
 193{
 194	return (max_link_clock * max_lanes * 8) / 10;
 195}
 196
 197static enum drm_mode_status
 198intel_dp_mode_valid(struct drm_connector *connector,
 199		    struct drm_display_mode *mode)
 200{
 201	struct intel_dp *intel_dp = intel_attached_dp(connector);
 202	struct intel_connector *intel_connector = to_intel_connector(connector);
 203	struct drm_display_mode *fixed_mode = intel_connector->panel.fixed_mode;
 204	int target_clock = mode->clock;
 205	int max_rate, mode_rate, max_lanes, max_link_clock;
 206	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
 207
 208	if (is_edp(intel_dp) && fixed_mode) {
 209		if (mode->hdisplay > fixed_mode->hdisplay)
 210			return MODE_PANEL;
 211
 212		if (mode->vdisplay > fixed_mode->vdisplay)
 213			return MODE_PANEL;
 214
 215		target_clock = fixed_mode->clock;
 216	}
 217
 218	max_link_clock = intel_dp_max_link_rate(intel_dp);
 219	max_lanes = intel_dp_max_lane_count(intel_dp);
 220
 221	max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
 222	mode_rate = intel_dp_link_required(target_clock, 18);
 223
 224	if (mode_rate > max_rate || target_clock > max_dotclk)
 225		return MODE_CLOCK_HIGH;
 226
 227	if (mode->clock < 10000)
 228		return MODE_CLOCK_LOW;
 229
 230	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
 231		return MODE_H_ILLEGAL;
 232
 233	return MODE_OK;
 234}
 235
 236uint32_t intel_dp_pack_aux(const uint8_t *src, int src_bytes)
 237{
 238	int	i;
 239	uint32_t v = 0;
 240
 241	if (src_bytes > 4)
 242		src_bytes = 4;
 243	for (i = 0; i < src_bytes; i++)
 244		v |= ((uint32_t) src[i]) << ((3-i) * 8);
 245	return v;
 246}
 247
 248static void intel_dp_unpack_aux(uint32_t src, uint8_t *dst, int dst_bytes)
 249{
 250	int i;
 251	if (dst_bytes > 4)
 252		dst_bytes = 4;
 253	for (i = 0; i < dst_bytes; i++)
 254		dst[i] = src >> ((3-i) * 8);
 255}
 256
 257static void
 258intel_dp_init_panel_power_sequencer(struct drm_device *dev,
 259				    struct intel_dp *intel_dp);
 260static void
 261intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
 262					      struct intel_dp *intel_dp);
 263
 264static void pps_lock(struct intel_dp *intel_dp)
 265{
 266	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 267	struct intel_encoder *encoder = &intel_dig_port->base;
 268	struct drm_device *dev = encoder->base.dev;
 269	struct drm_i915_private *dev_priv = dev->dev_private;
 270	enum intel_display_power_domain power_domain;
 271
 272	/*
 273	 * See vlv_power_sequencer_reset() why we need
 274	 * a power domain reference here.
 275	 */
 276	power_domain = intel_display_port_aux_power_domain(encoder);
 277	intel_display_power_get(dev_priv, power_domain);
 278
 279	mutex_lock(&dev_priv->pps_mutex);
 280}
 281
 282static void pps_unlock(struct intel_dp *intel_dp)
 283{
 284	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 285	struct intel_encoder *encoder = &intel_dig_port->base;
 286	struct drm_device *dev = encoder->base.dev;
 287	struct drm_i915_private *dev_priv = dev->dev_private;
 288	enum intel_display_power_domain power_domain;
 289
 290	mutex_unlock(&dev_priv->pps_mutex);
 291
 292	power_domain = intel_display_port_aux_power_domain(encoder);
 293	intel_display_power_put(dev_priv, power_domain);
 294}
 295
 296static void
 297vlv_power_sequencer_kick(struct intel_dp *intel_dp)
 298{
 299	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 300	struct drm_device *dev = intel_dig_port->base.base.dev;
 301	struct drm_i915_private *dev_priv = dev->dev_private;
 302	enum pipe pipe = intel_dp->pps_pipe;
 303	bool pll_enabled, release_cl_override = false;
 304	enum dpio_phy phy = DPIO_PHY(pipe);
 305	enum dpio_channel ch = vlv_pipe_to_channel(pipe);
 306	uint32_t DP;
 307
 308	if (WARN(I915_READ(intel_dp->output_reg) & DP_PORT_EN,
 309		 "skipping pipe %c power seqeuncer kick due to port %c being active\n",
 310		 pipe_name(pipe), port_name(intel_dig_port->port)))
 311		return;
 312
 313	DRM_DEBUG_KMS("kicking pipe %c power sequencer for port %c\n",
 314		      pipe_name(pipe), port_name(intel_dig_port->port));
 315
 316	/* Preserve the BIOS-computed detected bit. This is
 317	 * supposed to be read-only.
 318	 */
 319	DP = I915_READ(intel_dp->output_reg) & DP_DETECTED;
 320	DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
 321	DP |= DP_PORT_WIDTH(1);
 322	DP |= DP_LINK_TRAIN_PAT_1;
 323
 324	if (IS_CHERRYVIEW(dev))
 325		DP |= DP_PIPE_SELECT_CHV(pipe);
 326	else if (pipe == PIPE_B)
 327		DP |= DP_PIPEB_SELECT;
 328
 329	pll_enabled = I915_READ(DPLL(pipe)) & DPLL_VCO_ENABLE;
 330
 331	/*
 332	 * The DPLL for the pipe must be enabled for this to work.
 333	 * So enable temporarily it if it's not already enabled.
 334	 */
 335	if (!pll_enabled) {
 336		release_cl_override = IS_CHERRYVIEW(dev) &&
 337			!chv_phy_powergate_ch(dev_priv, phy, ch, true);
 338
 339		if (vlv_force_pll_on(dev, pipe, IS_CHERRYVIEW(dev) ?
 340				     &chv_dpll[0].dpll : &vlv_dpll[0].dpll)) {
 341			DRM_ERROR("Failed to force on pll for pipe %c!\n",
 342				  pipe_name(pipe));
 343			return;
 344		}
 345	}
 346
 347	/*
 348	 * Similar magic as in intel_dp_enable_port().
 349	 * We _must_ do this port enable + disable trick
 350	 * to make this power seqeuencer lock onto the port.
 351	 * Otherwise even VDD force bit won't work.
 352	 */
 353	I915_WRITE(intel_dp->output_reg, DP);
 354	POSTING_READ(intel_dp->output_reg);
 355
 356	I915_WRITE(intel_dp->output_reg, DP | DP_PORT_EN);
 357	POSTING_READ(intel_dp->output_reg);
 358
 359	I915_WRITE(intel_dp->output_reg, DP & ~DP_PORT_EN);
 360	POSTING_READ(intel_dp->output_reg);
 361
 362	if (!pll_enabled) {
 363		vlv_force_pll_off(dev, pipe);
 364
 365		if (release_cl_override)
 366			chv_phy_powergate_ch(dev_priv, phy, ch, false);
 367	}
 368}
 369
 370static enum pipe
 371vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
 372{
 373	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 374	struct drm_device *dev = intel_dig_port->base.base.dev;
 375	struct drm_i915_private *dev_priv = dev->dev_private;
 376	struct intel_encoder *encoder;
 377	unsigned int pipes = (1 << PIPE_A) | (1 << PIPE_B);
 378	enum pipe pipe;
 379
 380	lockdep_assert_held(&dev_priv->pps_mutex);
 381
 382	/* We should never land here with regular DP ports */
 383	WARN_ON(!is_edp(intel_dp));
 384
 385	if (intel_dp->pps_pipe != INVALID_PIPE)
 386		return intel_dp->pps_pipe;
 387
 388	/*
 389	 * We don't have power sequencer currently.
 390	 * Pick one that's not used by other ports.
 391	 */
 392	for_each_intel_encoder(dev, encoder) {
 393		struct intel_dp *tmp;
 394
 395		if (encoder->type != INTEL_OUTPUT_EDP)
 396			continue;
 397
 398		tmp = enc_to_intel_dp(&encoder->base);
 399
 400		if (tmp->pps_pipe != INVALID_PIPE)
 401			pipes &= ~(1 << tmp->pps_pipe);
 402	}
 403
 404	/*
 405	 * Didn't find one. This should not happen since there
 406	 * are two power sequencers and up to two eDP ports.
 407	 */
 408	if (WARN_ON(pipes == 0))
 409		pipe = PIPE_A;
 410	else
 411		pipe = ffs(pipes) - 1;
 412
 413	vlv_steal_power_sequencer(dev, pipe);
 414	intel_dp->pps_pipe = pipe;
 415
 416	DRM_DEBUG_KMS("picked pipe %c power sequencer for port %c\n",
 417		      pipe_name(intel_dp->pps_pipe),
 418		      port_name(intel_dig_port->port));
 419
 420	/* init power sequencer on this pipe and port */
 421	intel_dp_init_panel_power_sequencer(dev, intel_dp);
 422	intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
 423
 424	/*
 425	 * Even vdd force doesn't work until we've made
 426	 * the power sequencer lock in on the port.
 427	 */
 428	vlv_power_sequencer_kick(intel_dp);
 429
 430	return intel_dp->pps_pipe;
 431}
 432
 433typedef bool (*vlv_pipe_check)(struct drm_i915_private *dev_priv,
 434			       enum pipe pipe);
 435
 436static bool vlv_pipe_has_pp_on(struct drm_i915_private *dev_priv,
 437			       enum pipe pipe)
 438{
 439	return I915_READ(VLV_PIPE_PP_STATUS(pipe)) & PP_ON;
 440}
 441
 442static bool vlv_pipe_has_vdd_on(struct drm_i915_private *dev_priv,
 443				enum pipe pipe)
 444{
 445	return I915_READ(VLV_PIPE_PP_CONTROL(pipe)) & EDP_FORCE_VDD;
 446}
 447
 448static bool vlv_pipe_any(struct drm_i915_private *dev_priv,
 449			 enum pipe pipe)
 450{
 451	return true;
 452}
 453
 454static enum pipe
 455vlv_initial_pps_pipe(struct drm_i915_private *dev_priv,
 456		     enum port port,
 457		     vlv_pipe_check pipe_check)
 458{
 459	enum pipe pipe;
 460
 461	for (pipe = PIPE_A; pipe <= PIPE_B; pipe++) {
 462		u32 port_sel = I915_READ(VLV_PIPE_PP_ON_DELAYS(pipe)) &
 463			PANEL_PORT_SELECT_MASK;
 464
 465		if (port_sel != PANEL_PORT_SELECT_VLV(port))
 466			continue;
 467
 468		if (!pipe_check(dev_priv, pipe))
 469			continue;
 470
 471		return pipe;
 472	}
 473
 474	return INVALID_PIPE;
 475}
 476
 477static void
 478vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp)
 479{
 480	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 481	struct drm_device *dev = intel_dig_port->base.base.dev;
 482	struct drm_i915_private *dev_priv = dev->dev_private;
 483	enum port port = intel_dig_port->port;
 484
 485	lockdep_assert_held(&dev_priv->pps_mutex);
 486
 487	/* try to find a pipe with this port selected */
 488	/* first pick one where the panel is on */
 489	intel_dp->pps_pipe = vlv_initial_pps_pipe(dev_priv, port,
 490						  vlv_pipe_has_pp_on);
 491	/* didn't find one? pick one where vdd is on */
 492	if (intel_dp->pps_pipe == INVALID_PIPE)
 493		intel_dp->pps_pipe = vlv_initial_pps_pipe(dev_priv, port,
 494							  vlv_pipe_has_vdd_on);
 495	/* didn't find one? pick one with just the correct port */
 496	if (intel_dp->pps_pipe == INVALID_PIPE)
 497		intel_dp->pps_pipe = vlv_initial_pps_pipe(dev_priv, port,
 498							  vlv_pipe_any);
 499
 500	/* didn't find one? just let vlv_power_sequencer_pipe() pick one when needed */
 501	if (intel_dp->pps_pipe == INVALID_PIPE) {
 502		DRM_DEBUG_KMS("no initial power sequencer for port %c\n",
 503			      port_name(port));
 504		return;
 505	}
 506
 507	DRM_DEBUG_KMS("initial power sequencer for port %c: pipe %c\n",
 508		      port_name(port), pipe_name(intel_dp->pps_pipe));
 509
 510	intel_dp_init_panel_power_sequencer(dev, intel_dp);
 511	intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
 512}
 513
 514void vlv_power_sequencer_reset(struct drm_i915_private *dev_priv)
 515{
 516	struct drm_device *dev = dev_priv->dev;
 517	struct intel_encoder *encoder;
 518
 519	if (WARN_ON(!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev)))
 520		return;
 521
 522	/*
 523	 * We can't grab pps_mutex here due to deadlock with power_domain
 524	 * mutex when power_domain functions are called while holding pps_mutex.
 525	 * That also means that in order to use pps_pipe the code needs to
 526	 * hold both a power domain reference and pps_mutex, and the power domain
 527	 * reference get/put must be done while _not_ holding pps_mutex.
 528	 * pps_{lock,unlock}() do these steps in the correct order, so one
 529	 * should use them always.
 530	 */
 531
 532	for_each_intel_encoder(dev, encoder) {
 533		struct intel_dp *intel_dp;
 534
 535		if (encoder->type != INTEL_OUTPUT_EDP)
 536			continue;
 537
 538		intel_dp = enc_to_intel_dp(&encoder->base);
 539		intel_dp->pps_pipe = INVALID_PIPE;
 540	}
 541}
 542
 543static i915_reg_t
 544_pp_ctrl_reg(struct intel_dp *intel_dp)
 545{
 546	struct drm_device *dev = intel_dp_to_dev(intel_dp);
 547
 548	if (IS_BROXTON(dev))
 549		return BXT_PP_CONTROL(0);
 550	else if (HAS_PCH_SPLIT(dev))
 551		return PCH_PP_CONTROL;
 552	else
 553		return VLV_PIPE_PP_CONTROL(vlv_power_sequencer_pipe(intel_dp));
 554}
 555
 556static i915_reg_t
 557_pp_stat_reg(struct intel_dp *intel_dp)
 558{
 559	struct drm_device *dev = intel_dp_to_dev(intel_dp);
 560
 561	if (IS_BROXTON(dev))
 562		return BXT_PP_STATUS(0);
 563	else if (HAS_PCH_SPLIT(dev))
 564		return PCH_PP_STATUS;
 565	else
 566		return VLV_PIPE_PP_STATUS(vlv_power_sequencer_pipe(intel_dp));
 567}
 568
 569/* Reboot notifier handler to shutdown panel power to guarantee T12 timing
 570   This function only applicable when panel PM state is not to be tracked */
 571static int edp_notify_handler(struct notifier_block *this, unsigned long code,
 572			      void *unused)
 573{
 574	struct intel_dp *intel_dp = container_of(this, typeof(* intel_dp),
 575						 edp_notifier);
 576	struct drm_device *dev = intel_dp_to_dev(intel_dp);
 577	struct drm_i915_private *dev_priv = dev->dev_private;
 578
 579	if (!is_edp(intel_dp) || code != SYS_RESTART)
 580		return 0;
 581
 582	pps_lock(intel_dp);
 583
 584	if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
 585		enum pipe pipe = vlv_power_sequencer_pipe(intel_dp);
 586		i915_reg_t pp_ctrl_reg, pp_div_reg;
 587		u32 pp_div;
 588
 589		pp_ctrl_reg = VLV_PIPE_PP_CONTROL(pipe);
 590		pp_div_reg  = VLV_PIPE_PP_DIVISOR(pipe);
 591		pp_div = I915_READ(pp_div_reg);
 592		pp_div &= PP_REFERENCE_DIVIDER_MASK;
 593
 594		/* 0x1F write to PP_DIV_REG sets max cycle delay */
 595		I915_WRITE(pp_div_reg, pp_div | 0x1F);
 596		I915_WRITE(pp_ctrl_reg, PANEL_UNLOCK_REGS | PANEL_POWER_OFF);
 597		msleep(intel_dp->panel_power_cycle_delay);
 598	}
 599
 600	pps_unlock(intel_dp);
 601
 602	return 0;
 603}
 604
 605static bool edp_have_panel_power(struct intel_dp *intel_dp)
 606{
 607	struct drm_device *dev = intel_dp_to_dev(intel_dp);
 608	struct drm_i915_private *dev_priv = dev->dev_private;
 609
 610	lockdep_assert_held(&dev_priv->pps_mutex);
 611
 612	if ((IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) &&
 613	    intel_dp->pps_pipe == INVALID_PIPE)
 614		return false;
 615
 616	return (I915_READ(_pp_stat_reg(intel_dp)) & PP_ON) != 0;
 617}
 618
 619static bool edp_have_panel_vdd(struct intel_dp *intel_dp)
 620{
 621	struct drm_device *dev = intel_dp_to_dev(intel_dp);
 622	struct drm_i915_private *dev_priv = dev->dev_private;
 623
 624	lockdep_assert_held(&dev_priv->pps_mutex);
 625
 626	if ((IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) &&
 627	    intel_dp->pps_pipe == INVALID_PIPE)
 628		return false;
 629
 630	return I915_READ(_pp_ctrl_reg(intel_dp)) & EDP_FORCE_VDD;
 631}
 632
 633static void
 634intel_dp_check_edp(struct intel_dp *intel_dp)
 635{
 636	struct drm_device *dev = intel_dp_to_dev(intel_dp);
 637	struct drm_i915_private *dev_priv = dev->dev_private;
 638
 639	if (!is_edp(intel_dp))
 640		return;
 641
 642	if (!edp_have_panel_power(intel_dp) && !edp_have_panel_vdd(intel_dp)) {
 643		WARN(1, "eDP powered off while attempting aux channel communication.\n");
 644		DRM_DEBUG_KMS("Status 0x%08x Control 0x%08x\n",
 645			      I915_READ(_pp_stat_reg(intel_dp)),
 646			      I915_READ(_pp_ctrl_reg(intel_dp)));
 647	}
 648}
 649
 650static uint32_t
 651intel_dp_aux_wait_done(struct intel_dp *intel_dp, bool has_aux_irq)
 652{
 653	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 654	struct drm_device *dev = intel_dig_port->base.base.dev;
 655	struct drm_i915_private *dev_priv = dev->dev_private;
 656	i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg;
 657	uint32_t status;
 658	bool done;
 659
 660#define C (((status = I915_READ_NOTRACE(ch_ctl)) & DP_AUX_CH_CTL_SEND_BUSY) == 0)
 661	if (has_aux_irq)
 662		done = wait_event_timeout(dev_priv->gmbus_wait_queue, C,
 663					  msecs_to_jiffies_timeout(10));
 664	else
 665		done = wait_for_atomic(C, 10) == 0;
 666	if (!done)
 667		DRM_ERROR("dp aux hw did not signal timeout (has irq: %i)!\n",
 668			  has_aux_irq);
 669#undef C
 670
 671	return status;
 672}
 673
 674static uint32_t i9xx_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
 675{
 676	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 677	struct drm_device *dev = intel_dig_port->base.base.dev;
 678
 679	/*
 680	 * The clock divider is based off the hrawclk, and would like to run at
 681	 * 2MHz.  So, take the hrawclk value and divide by 2 and use that
 682	 */
 683	return index ? 0 : DIV_ROUND_CLOSEST(intel_hrawclk(dev), 2);
 684}
 685
 686static uint32_t ilk_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
 687{
 688	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 689	struct drm_device *dev = intel_dig_port->base.base.dev;
 690	struct drm_i915_private *dev_priv = dev->dev_private;
 691
 692	if (index)
 693		return 0;
 694
 695	if (intel_dig_port->port == PORT_A) {
 696		return DIV_ROUND_CLOSEST(dev_priv->cdclk_freq, 2000);
 697
 698	} else {
 699		return DIV_ROUND_CLOSEST(intel_pch_rawclk(dev), 2);
 700	}
 701}
 702
 703static uint32_t hsw_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
 704{
 705	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 706	struct drm_device *dev = intel_dig_port->base.base.dev;
 707	struct drm_i915_private *dev_priv = dev->dev_private;
 708
 709	if (intel_dig_port->port == PORT_A) {
 710		if (index)
 711			return 0;
 712		return DIV_ROUND_CLOSEST(dev_priv->cdclk_freq, 2000);
 713	} else if (HAS_PCH_LPT_H(dev_priv)) {
 714		/* Workaround for non-ULT HSW */
 715		switch (index) {
 716		case 0: return 63;
 717		case 1: return 72;
 718		default: return 0;
 719		}
 720	} else  {
 721		return index ? 0 : DIV_ROUND_CLOSEST(intel_pch_rawclk(dev), 2);
 722	}
 723}
 724
 725static uint32_t vlv_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
 726{
 727	return index ? 0 : 100;
 728}
 729
 730static uint32_t skl_get_aux_clock_divider(struct intel_dp *intel_dp, int index)
 731{
 732	/*
 733	 * SKL doesn't need us to program the AUX clock divider (Hardware will
 734	 * derive the clock from CDCLK automatically). We still implement the
 735	 * get_aux_clock_divider vfunc to plug-in into the existing code.
 736	 */
 737	return index ? 0 : 1;
 738}
 739
 740static uint32_t i9xx_get_aux_send_ctl(struct intel_dp *intel_dp,
 741				      bool has_aux_irq,
 742				      int send_bytes,
 743				      uint32_t aux_clock_divider)
 744{
 745	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 746	struct drm_device *dev = intel_dig_port->base.base.dev;
 747	uint32_t precharge, timeout;
 748
 749	if (IS_GEN6(dev))
 750		precharge = 3;
 751	else
 752		precharge = 5;
 753
 754	if (IS_BROADWELL(dev) && intel_dig_port->port == PORT_A)
 755		timeout = DP_AUX_CH_CTL_TIME_OUT_600us;
 756	else
 757		timeout = DP_AUX_CH_CTL_TIME_OUT_400us;
 758
 759	return DP_AUX_CH_CTL_SEND_BUSY |
 760	       DP_AUX_CH_CTL_DONE |
 761	       (has_aux_irq ? DP_AUX_CH_CTL_INTERRUPT : 0) |
 762	       DP_AUX_CH_CTL_TIME_OUT_ERROR |
 763	       timeout |
 764	       DP_AUX_CH_CTL_RECEIVE_ERROR |
 765	       (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
 766	       (precharge << DP_AUX_CH_CTL_PRECHARGE_2US_SHIFT) |
 767	       (aux_clock_divider << DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT);
 768}
 769
 770static uint32_t skl_get_aux_send_ctl(struct intel_dp *intel_dp,
 771				      bool has_aux_irq,
 772				      int send_bytes,
 773				      uint32_t unused)
 774{
 775	return DP_AUX_CH_CTL_SEND_BUSY |
 776	       DP_AUX_CH_CTL_DONE |
 777	       (has_aux_irq ? DP_AUX_CH_CTL_INTERRUPT : 0) |
 778	       DP_AUX_CH_CTL_TIME_OUT_ERROR |
 779	       DP_AUX_CH_CTL_TIME_OUT_1600us |
 780	       DP_AUX_CH_CTL_RECEIVE_ERROR |
 781	       (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
 782	       DP_AUX_CH_CTL_SYNC_PULSE_SKL(32);
 783}
 784
 785static int
 786intel_dp_aux_ch(struct intel_dp *intel_dp,
 787		const uint8_t *send, int send_bytes,
 788		uint8_t *recv, int recv_size)
 789{
 790	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
 791	struct drm_device *dev = intel_dig_port->base.base.dev;
 792	struct drm_i915_private *dev_priv = dev->dev_private;
 793	i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg;
 794	uint32_t aux_clock_divider;
 795	int i, ret, recv_bytes;
 796	uint32_t status;
 797	int try, clock = 0;
 798	bool has_aux_irq = HAS_AUX_IRQ(dev);
 799	bool vdd;
 800
 801	pps_lock(intel_dp);
 802
 803	/*
 804	 * We will be called with VDD already enabled for dpcd/edid/oui reads.
 805	 * In such cases we want to leave VDD enabled and it's up to upper layers
 806	 * to turn it off. But for eg. i2c-dev access we need to turn it on/off
 807	 * ourselves.
 808	 */
 809	vdd = edp_panel_vdd_on(intel_dp);
 810
 811	/* dp aux is extremely sensitive to irq latency, hence request the
 812	 * lowest possible wakeup latency and so prevent the cpu from going into
 813	 * deep sleep states.
 814	 */
 815	pm_qos_update_request(&dev_priv->pm_qos, 0);
 816
 817	intel_dp_check_edp(intel_dp);
 818
 819	/* Try to wait for any previous AUX channel activity */
 820	for (try = 0; try < 3; try++) {
 821		status = I915_READ_NOTRACE(ch_ctl);
 822		if ((status & DP_AUX_CH_CTL_SEND_BUSY) == 0)
 823			break;
 824		msleep(1);
 825	}
 826
 827	if (try == 3) {
 828		static u32 last_status = -1;
 829		const u32 status = I915_READ(ch_ctl);
 830
 831		if (status != last_status) {
 832			WARN(1, "dp_aux_ch not started status 0x%08x\n",
 833			     status);
 834			last_status = status;
 835		}
 836
 837		ret = -EBUSY;
 838		goto out;
 839	}
 840
 841	/* Only 5 data registers! */
 842	if (WARN_ON(send_bytes > 20 || recv_size > 20)) {
 843		ret = -E2BIG;
 844		goto out;
 845	}
 846
 847	while ((aux_clock_divider = intel_dp->get_aux_clock_divider(intel_dp, clock++))) {
 848		u32 send_ctl = intel_dp->get_aux_send_ctl(intel_dp,
 849							  has_aux_irq,
 850							  send_bytes,
 851							  aux_clock_divider);
 852
 853		/* Must try at least 3 times according to DP spec */
 854		for (try = 0; try < 5; try++) {
 855			/* Load the send data into the aux channel data registers */
 856			for (i = 0; i < send_bytes; i += 4)
 857				I915_WRITE(intel_dp->aux_ch_data_reg[i >> 2],
 858					   intel_dp_pack_aux(send + i,
 859							     send_bytes - i));
 860
 861			/* Send the command and wait for it to complete */
 862			I915_WRITE(ch_ctl, send_ctl);
 863
 864			status = intel_dp_aux_wait_done(intel_dp, has_aux_irq);
 865
 866			/* Clear done status and any errors */
 867			I915_WRITE(ch_ctl,
 868				   status |
 869				   DP_AUX_CH_CTL_DONE |
 870				   DP_AUX_CH_CTL_TIME_OUT_ERROR |
 871				   DP_AUX_CH_CTL_RECEIVE_ERROR);
 872
 873			if (status & DP_AUX_CH_CTL_TIME_OUT_ERROR)
 874				continue;
 875
 876			/* DP CTS 1.2 Core Rev 1.1, 4.2.1.1 & 4.2.1.2
 877			 *   400us delay required for errors and timeouts
 878			 *   Timeout errors from the HW already meet this
 879			 *   requirement so skip to next iteration
 880			 */
 881			if (status & DP_AUX_CH_CTL_RECEIVE_ERROR) {
 882				usleep_range(400, 500);
 883				continue;
 884			}
 885			if (status & DP_AUX_CH_CTL_DONE)
 886				goto done;
 887		}
 888	}
 889
 890	if ((status & DP_AUX_CH_CTL_DONE) == 0) {
 891		DRM_ERROR("dp_aux_ch not done status 0x%08x\n", status);
 892		ret = -EBUSY;
 893		goto out;
 894	}
 895
 896done:
 897	/* Check for timeout or receive error.
 898	 * Timeouts occur when the sink is not connected
 899	 */
 900	if (status & DP_AUX_CH_CTL_RECEIVE_ERROR) {
 901		DRM_ERROR("dp_aux_ch receive error status 0x%08x\n", status);
 902		ret = -EIO;
 903		goto out;
 904	}
 905
 906	/* Timeouts occur when the device isn't connected, so they're
 907	 * "normal" -- don't fill the kernel log with these */
 908	if (status & DP_AUX_CH_CTL_TIME_OUT_ERROR) {
 909		DRM_DEBUG_KMS("dp_aux_ch timeout status 0x%08x\n", status);
 910		ret = -ETIMEDOUT;
 911		goto out;
 912	}
 913
 914	/* Unload any bytes sent back from the other side */
 915	recv_bytes = ((status & DP_AUX_CH_CTL_MESSAGE_SIZE_MASK) >>
 916		      DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT);
 917
 918	/*
 919	 * By BSpec: "Message sizes of 0 or >20 are not allowed."
 920	 * We have no idea of what happened so we return -EBUSY so
 921	 * drm layer takes care for the necessary retries.
 922	 */
 923	if (recv_bytes == 0 || recv_bytes > 20) {
 924		DRM_DEBUG_KMS("Forbidden recv_bytes = %d on aux transaction\n",
 925			      recv_bytes);
 926		/*
 927		 * FIXME: This patch was created on top of a series that
 928		 * organize the retries at drm level. There EBUSY should
 929		 * also take care for 1ms wait before retrying.
 930		 * That aux retries re-org is still needed and after that is
 931		 * merged we remove this sleep from here.
 932		 */
 933		usleep_range(1000, 1500);
 934		ret = -EBUSY;
 935		goto out;
 936	}
 937
 938	if (recv_bytes > recv_size)
 939		recv_bytes = recv_size;
 940
 941	for (i = 0; i < recv_bytes; i += 4)
 942		intel_dp_unpack_aux(I915_READ(intel_dp->aux_ch_data_reg[i >> 2]),
 943				    recv + i, recv_bytes - i);
 944
 945	ret = recv_bytes;
 946out:
 947	pm_qos_update_request(&dev_priv->pm_qos, PM_QOS_DEFAULT_VALUE);
 948
 949	if (vdd)
 950		edp_panel_vdd_off(intel_dp, false);
 951
 952	pps_unlock(intel_dp);
 953
 954	return ret;
 955}
 956
 957#define BARE_ADDRESS_SIZE	3
 958#define HEADER_SIZE		(BARE_ADDRESS_SIZE + 1)
 959static ssize_t
 960intel_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
 961{
 962	struct intel_dp *intel_dp = container_of(aux, struct intel_dp, aux);
 963	uint8_t txbuf[20], rxbuf[20];
 964	size_t txsize, rxsize;
 965	int ret;
 966
 967	txbuf[0] = (msg->request << 4) |
 968		((msg->address >> 16) & 0xf);
 969	txbuf[1] = (msg->address >> 8) & 0xff;
 970	txbuf[2] = msg->address & 0xff;
 971	txbuf[3] = msg->size - 1;
 972
 973	switch (msg->request & ~DP_AUX_I2C_MOT) {
 974	case DP_AUX_NATIVE_WRITE:
 975	case DP_AUX_I2C_WRITE:
 976	case DP_AUX_I2C_WRITE_STATUS_UPDATE:
 977		txsize = msg->size ? HEADER_SIZE + msg->size : BARE_ADDRESS_SIZE;
 978		rxsize = 2; /* 0 or 1 data bytes */
 979
 980		if (WARN_ON(txsize > 20))
 981			return -E2BIG;
 982
 983		if (msg->buffer)
 984			memcpy(txbuf + HEADER_SIZE, msg->buffer, msg->size);
 985		else
 986			WARN_ON(msg->size);
 987
 988		ret = intel_dp_aux_ch(intel_dp, txbuf, txsize, rxbuf, rxsize);
 989		if (ret > 0) {
 990			msg->reply = rxbuf[0] >> 4;
 991
 992			if (ret > 1) {
 993				/* Number of bytes written in a short write. */
 994				ret = clamp_t(int, rxbuf[1], 0, msg->size);
 995			} else {
 996				/* Return payload size. */
 997				ret = msg->size;
 998			}
 999		}
1000		break;
1001
1002	case DP_AUX_NATIVE_READ:
1003	case DP_AUX_I2C_READ:
1004		txsize = msg->size ? HEADER_SIZE : BARE_ADDRESS_SIZE;
1005		rxsize = msg->size + 1;
1006
1007		if (WARN_ON(rxsize > 20))
1008			return -E2BIG;
1009
1010		ret = intel_dp_aux_ch(intel_dp, txbuf, txsize, rxbuf, rxsize);
1011		if (ret > 0) {
1012			msg->reply = rxbuf[0] >> 4;
1013			/*
1014			 * Assume happy day, and copy the data. The caller is
1015			 * expected to check msg->reply before touching it.
1016			 *
1017			 * Return payload size.
1018			 */
1019			ret--;
1020			memcpy(msg->buffer, rxbuf + 1, ret);
1021		}
1022		break;
1023
1024	default:
1025		ret = -EINVAL;
1026		break;
1027	}
1028
1029	return ret;
1030}
1031
1032static i915_reg_t g4x_aux_ctl_reg(struct drm_i915_private *dev_priv,
1033				       enum port port)
1034{
1035	switch (port) {
1036	case PORT_B:
1037	case PORT_C:
1038	case PORT_D:
1039		return DP_AUX_CH_CTL(port);
1040	default:
1041		MISSING_CASE(port);
1042		return DP_AUX_CH_CTL(PORT_B);
1043	}
1044}
1045
1046static i915_reg_t g4x_aux_data_reg(struct drm_i915_private *dev_priv,
1047					enum port port, int index)
1048{
1049	switch (port) {
1050	case PORT_B:
1051	case PORT_C:
1052	case PORT_D:
1053		return DP_AUX_CH_DATA(port, index);
1054	default:
1055		MISSING_CASE(port);
1056		return DP_AUX_CH_DATA(PORT_B, index);
1057	}
1058}
1059
1060static i915_reg_t ilk_aux_ctl_reg(struct drm_i915_private *dev_priv,
1061				       enum port port)
1062{
1063	switch (port) {
1064	case PORT_A:
1065		return DP_AUX_CH_CTL(port);
1066	case PORT_B:
1067	case PORT_C:
1068	case PORT_D:
1069		return PCH_DP_AUX_CH_CTL(port);
1070	default:
1071		MISSING_CASE(port);
1072		return DP_AUX_CH_CTL(PORT_A);
1073	}
1074}
1075
1076static i915_reg_t ilk_aux_data_reg(struct drm_i915_private *dev_priv,
1077					enum port port, int index)
1078{
1079	switch (port) {
1080	case PORT_A:
1081		return DP_AUX_CH_DATA(port, index);
1082	case PORT_B:
1083	case PORT_C:
1084	case PORT_D:
1085		return PCH_DP_AUX_CH_DATA(port, index);
1086	default:
1087		MISSING_CASE(port);
1088		return DP_AUX_CH_DATA(PORT_A, index);
1089	}
1090}
1091
1092/*
1093 * On SKL we don't have Aux for port E so we rely
1094 * on VBT to set a proper alternate aux channel.
1095 */
1096static enum port skl_porte_aux_port(struct drm_i915_private *dev_priv)
1097{
1098	const struct ddi_vbt_port_info *info =
1099		&dev_priv->vbt.ddi_port_info[PORT_E];
1100
1101	switch (info->alternate_aux_channel) {
1102	case DP_AUX_A:
1103		return PORT_A;
1104	case DP_AUX_B:
1105		return PORT_B;
1106	case DP_AUX_C:
1107		return PORT_C;
1108	case DP_AUX_D:
1109		return PORT_D;
1110	default:
1111		MISSING_CASE(info->alternate_aux_channel);
1112		return PORT_A;
1113	}
1114}
1115
1116static i915_reg_t skl_aux_ctl_reg(struct drm_i915_private *dev_priv,
1117				       enum port port)
1118{
1119	if (port == PORT_E)
1120		port = skl_porte_aux_port(dev_priv);
1121
1122	switch (port) {
1123	case PORT_A:
1124	case PORT_B:
1125	case PORT_C:
1126	case PORT_D:
1127		return DP_AUX_CH_CTL(port);
1128	default:
1129		MISSING_CASE(port);
1130		return DP_AUX_CH_CTL(PORT_A);
1131	}
1132}
1133
1134static i915_reg_t skl_aux_data_reg(struct drm_i915_private *dev_priv,
1135					enum port port, int index)
1136{
1137	if (port == PORT_E)
1138		port = skl_porte_aux_port(dev_priv);
1139
1140	switch (port) {
1141	case PORT_A:
1142	case PORT_B:
1143	case PORT_C:
1144	case PORT_D:
1145		return DP_AUX_CH_DATA(port, index);
1146	default:
1147		MISSING_CASE(port);
1148		return DP_AUX_CH_DATA(PORT_A, index);
1149	}
1150}
1151
1152static i915_reg_t intel_aux_ctl_reg(struct drm_i915_private *dev_priv,
1153					 enum port port)
1154{
1155	if (INTEL_INFO(dev_priv)->gen >= 9)
1156		return skl_aux_ctl_reg(dev_priv, port);
1157	else if (HAS_PCH_SPLIT(dev_priv))
1158		return ilk_aux_ctl_reg(dev_priv, port);
1159	else
1160		return g4x_aux_ctl_reg(dev_priv, port);
1161}
1162
1163static i915_reg_t intel_aux_data_reg(struct drm_i915_private *dev_priv,
1164					  enum port port, int index)
1165{
1166	if (INTEL_INFO(dev_priv)->gen >= 9)
1167		return skl_aux_data_reg(dev_priv, port, index);
1168	else if (HAS_PCH_SPLIT(dev_priv))
1169		return ilk_aux_data_reg(dev_priv, port, index);
1170	else
1171		return g4x_aux_data_reg(dev_priv, port, index);
1172}
1173
1174static void intel_aux_reg_init(struct intel_dp *intel_dp)
1175{
1176	struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));
1177	enum port port = dp_to_dig_port(intel_dp)->port;
1178	int i;
1179
1180	intel_dp->aux_ch_ctl_reg = intel_aux_ctl_reg(dev_priv, port);
1181	for (i = 0; i < ARRAY_SIZE(intel_dp->aux_ch_data_reg); i++)
1182		intel_dp->aux_ch_data_reg[i] = intel_aux_data_reg(dev_priv, port, i);
1183}
1184
1185static void
1186intel_dp_aux_fini(struct intel_dp *intel_dp)
1187{
1188	drm_dp_aux_unregister(&intel_dp->aux);
1189	kfree(intel_dp->aux.name);
1190}
1191
1192static int
1193intel_dp_aux_init(struct intel_dp *intel_dp, struct intel_connector *connector)
1194{
1195	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
1196	enum port port = intel_dig_port->port;
1197	int ret;
1198
1199	intel_aux_reg_init(intel_dp);
1200
1201	intel_dp->aux.name = kasprintf(GFP_KERNEL, "DPDDC-%c", port_name(port));
1202	if (!intel_dp->aux.name)
1203		return -ENOMEM;
1204
1205	intel_dp->aux.dev = connector->base.kdev;
1206	intel_dp->aux.transfer = intel_dp_aux_transfer;
1207
1208	DRM_DEBUG_KMS("registering %s bus for %s\n",
1209		      intel_dp->aux.name,
1210		      connector->base.kdev->kobj.name);
1211
1212	ret = drm_dp_aux_register(&intel_dp->aux);
1213	if (ret < 0) {
1214		DRM_ERROR("drm_dp_aux_register() for %s failed (%d)\n",
1215			  intel_dp->aux.name, ret);
1216		kfree(intel_dp->aux.name);
1217		return ret;
1218	}
1219
1220	return 0;
1221}
1222
1223static void
1224intel_dp_connector_unregister(struct intel_connector *intel_connector)
1225{
1226	struct intel_dp *intel_dp = intel_attached_dp(&intel_connector->base);
1227
1228	intel_dp_aux_fini(intel_dp);
1229	intel_connector_unregister(intel_connector);
1230}
1231
1232static void
1233skl_edp_set_pll_config(struct intel_crtc_state *pipe_config)
1234{
1235	u32 ctrl1;
1236
1237	memset(&pipe_config->dpll_hw_state, 0,
1238	       sizeof(pipe_config->dpll_hw_state));
1239
1240	pipe_config->ddi_pll_sel = SKL_DPLL0;
1241	pipe_config->dpll_hw_state.cfgcr1 = 0;
1242	pipe_config->dpll_hw_state.cfgcr2 = 0;
1243
1244	ctrl1 = DPLL_CTRL1_OVERRIDE(SKL_DPLL0);
1245	switch (pipe_config->port_clock / 2) {
1246	case 81000:
1247		ctrl1 |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_810,
1248					      SKL_DPLL0);
1249		break;
1250	case 135000:
1251		ctrl1 |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1350,
1252					      SKL_DPLL0);
1253		break;
1254	case 270000:
1255		ctrl1 |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_2700,
1256					      SKL_DPLL0);
1257		break;
1258	case 162000:
1259		ctrl1 |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1620,
1260					      SKL_DPLL0);
1261		break;
1262	/* TBD: For DP link rates 2.16 GHz and 4.32 GHz, VCO is 8640 which
1263	results in CDCLK change. Need to handle the change of CDCLK by
1264	disabling pipes and re-enabling them */
1265	case 108000:
1266		ctrl1 |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1080,
1267					      SKL_DPLL0);
1268		break;
1269	case 216000:
1270		ctrl1 |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_2160,
1271					      SKL_DPLL0);
1272		break;
1273
1274	}
1275	pipe_config->dpll_hw_state.ctrl1 = ctrl1;
1276}
1277
1278void
1279hsw_dp_set_ddi_pll_sel(struct intel_crtc_state *pipe_config)
1280{
1281	memset(&pipe_config->dpll_hw_state, 0,
1282	       sizeof(pipe_config->dpll_hw_state));
1283
1284	switch (pipe_config->port_clock / 2) {
1285	case 81000:
1286		pipe_config->ddi_pll_sel = PORT_CLK_SEL_LCPLL_810;
1287		break;
1288	case 135000:
1289		pipe_config->ddi_pll_sel = PORT_CLK_SEL_LCPLL_1350;
1290		break;
1291	case 270000:
1292		pipe_config->ddi_pll_sel = PORT_CLK_SEL_LCPLL_2700;
1293		break;
1294	}
1295}
1296
1297static int
1298intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
1299{
1300	if (intel_dp->num_sink_rates) {
1301		*sink_rates = intel_dp->sink_rates;
1302		return intel_dp->num_sink_rates;
1303	}
1304
1305	*sink_rates = default_rates;
1306
1307	return (intel_dp_max_link_bw(intel_dp) >> 3) + 1;
1308}
1309
1310bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp)
1311{
1312	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1313	struct drm_device *dev = dig_port->base.base.dev;
1314
1315	/* WaDisableHBR2:skl */
1316	if (IS_SKL_REVID(dev, 0, SKL_REVID_B0))
1317		return false;
1318
1319	if ((IS_HASWELL(dev) && !IS_HSW_ULX(dev)) || IS_BROADWELL(dev) ||
1320	    (INTEL_INFO(dev)->gen >= 9))
1321		return true;
1322	else
1323		return false;
1324}
1325
1326static int
1327intel_dp_source_rates(struct intel_dp *intel_dp, const int **source_rates)
1328{
1329	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1330	struct drm_device *dev = dig_port->base.base.dev;
1331	int size;
1332
1333	if (IS_BROXTON(dev)) {
1334		*source_rates = bxt_rates;
1335		size = ARRAY_SIZE(bxt_rates);
1336	} else if (IS_SKYLAKE(dev) || IS_KABYLAKE(dev)) {
1337		*source_rates = skl_rates;
1338		size = ARRAY_SIZE(skl_rates);
1339	} else {
1340		*source_rates = default_rates;
1341		size = ARRAY_SIZE(default_rates);
1342	}
1343
1344	/* This depends on the fact that 5.4 is last value in the array */
1345	if (!intel_dp_source_supports_hbr2(intel_dp))
1346		size--;
1347
1348	return size;
1349}
1350
1351static void
1352intel_dp_set_clock(struct intel_encoder *encoder,
1353		   struct intel_crtc_state *pipe_config)
1354{
1355	struct drm_device *dev = encoder->base.dev;
1356	const struct dp_link_dpll *divisor = NULL;
1357	int i, count = 0;
1358
1359	if (IS_G4X(dev)) {
1360		divisor = gen4_dpll;
1361		count = ARRAY_SIZE(gen4_dpll);
1362	} else if (HAS_PCH_SPLIT(dev)) {
1363		divisor = pch_dpll;
1364		count = ARRAY_SIZE(pch_dpll);
1365	} else if (IS_CHERRYVIEW(dev)) {
1366		divisor = chv_dpll;
1367		count = ARRAY_SIZE(chv_dpll);
1368	} else if (IS_VALLEYVIEW(dev)) {
1369		divisor = vlv_dpll;
1370		count = ARRAY_SIZE(vlv_dpll);
1371	}
1372
1373	if (divisor && count) {
1374		for (i = 0; i < count; i++) {
1375			if (pipe_config->port_clock == divisor[i].clock) {
1376				pipe_config->dpll = divisor[i].dpll;
1377				pipe_config->clock_set = true;
1378				break;
1379			}
1380		}
1381	}
1382}
1383
1384static int intersect_rates(const int *source_rates, int source_len,
1385			   const int *sink_rates, int sink_len,
1386			   int *common_rates)
1387{
1388	int i = 0, j = 0, k = 0;
1389
1390	while (i < source_len && j < sink_len) {
1391		if (source_rates[i] == sink_rates[j]) {
1392			if (WARN_ON(k >= DP_MAX_SUPPORTED_RATES))
1393				return k;
1394			common_rates[k] = source_rates[i];
1395			++k;
1396			++i;
1397			++j;
1398		} else if (source_rates[i] < sink_rates[j]) {
1399			++i;
1400		} else {
1401			++j;
1402		}
1403	}
1404	return k;
1405}
1406
1407static int intel_dp_common_rates(struct intel_dp *intel_dp,
1408				 int *common_rates)
1409{
1410	const int *source_rates, *sink_rates;
1411	int source_len, sink_len;
1412
1413	sink_len = intel_dp_sink_rates(intel_dp, &sink_rates);
1414	source_len = intel_dp_source_rates(intel_dp, &source_rates);
1415
1416	return intersect_rates(source_rates, source_len,
1417			       sink_rates, sink_len,
1418			       common_rates);
1419}
1420
1421static void snprintf_int_array(char *str, size_t len,
1422			       const int *array, int nelem)
1423{
1424	int i;
1425
1426	str[0] = '\0';
1427
1428	for (i = 0; i < nelem; i++) {
1429		int r = snprintf(str, len, "%s%d", i ? ", " : "", array[i]);
1430		if (r >= len)
1431			return;
1432		str += r;
1433		len -= r;
1434	}
1435}
1436
1437static void intel_dp_print_rates(struct intel_dp *intel_dp)
1438{
1439	const int *source_rates, *sink_rates;
1440	int source_len, sink_len, common_len;
1441	int common_rates[DP_MAX_SUPPORTED_RATES];
1442	char str[128]; /* FIXME: too big for stack? */
1443
1444	if ((drm_debug & DRM_UT_KMS) == 0)
1445		return;
1446
1447	source_len = intel_dp_source_rates(intel_dp, &source_rates);
1448	snprintf_int_array(str, sizeof(str), source_rates, source_len);
1449	DRM_DEBUG_KMS("source rates: %s\n", str);
1450
1451	sink_len = intel_dp_sink_rates(intel_dp, &sink_rates);
1452	snprintf_int_array(str, sizeof(str), sink_rates, sink_len);
1453	DRM_DEBUG_KMS("sink rates: %s\n", str);
1454
1455	common_len = intel_dp_common_rates(intel_dp, common_rates);
1456	snprintf_int_array(str, sizeof(str), common_rates, common_len);
1457	DRM_DEBUG_KMS("common rates: %s\n", str);
1458}
1459
1460static int rate_to_index(int find, const int *rates)
1461{
1462	int i = 0;
1463
1464	for (i = 0; i < DP_MAX_SUPPORTED_RATES; ++i)
1465		if (find == rates[i])
1466			break;
1467
1468	return i;
1469}
1470
1471int
1472intel_dp_max_link_rate(struct intel_dp *intel_dp)
1473{
1474	int rates[DP_MAX_SUPPORTED_RATES] = {};
1475	int len;
1476
1477	len = intel_dp_common_rates(intel_dp, rates);
1478	if (WARN_ON(len <= 0))
1479		return 162000;
1480
1481	return rates[rate_to_index(0, rates) - 1];
1482}
1483
1484int intel_dp_rate_select(struct intel_dp *intel_dp, int rate)
1485{
1486	return rate_to_index(rate, intel_dp->sink_rates);
1487}
1488
1489void intel_dp_compute_rate(struct intel_dp *intel_dp, int port_clock,
1490			   uint8_t *link_bw, uint8_t *rate_select)
1491{
1492	if (intel_dp->num_sink_rates) {
1493		*link_bw = 0;
1494		*rate_select =
1495			intel_dp_rate_select(intel_dp, port_clock);
1496	} else {
1497		*link_bw = drm_dp_link_rate_to_bw_code(port_clock);
1498		*rate_select = 0;
1499	}
1500}
1501
1502bool
1503intel_dp_compute_config(struct intel_encoder *encoder,
1504			struct intel_crtc_state *pipe_config)
1505{
1506	struct drm_device *dev = encoder->base.dev;
1507	struct drm_i915_private *dev_priv = dev->dev_private;
1508	struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
1509	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
1510	enum port port = dp_to_dig_port(intel_dp)->port;
1511	struct intel_crtc *intel_crtc = to_intel_crtc(pipe_config->base.crtc);
1512	struct intel_connector *intel_connector = intel_dp->attached_connector;
1513	int lane_count, clock;
1514	int min_lane_count = 1;
1515	int max_lane_count = intel_dp_max_lane_count(intel_dp);
1516	/* Conveniently, the link BW constants become indices with a shift...*/
1517	int min_clock = 0;
1518	int max_clock;
1519	int bpp, mode_rate;
1520	int link_avail, link_clock;
1521	int common_rates[DP_MAX_SUPPORTED_RATES] = {};
1522	int common_len;
1523	uint8_t link_bw, rate_select;
1524
1525	common_len = intel_dp_common_rates(intel_dp, common_rates);
1526
1527	/* No common link rates between source and sink */
1528	WARN_ON(common_len <= 0);
1529
1530	max_clock = common_len - 1;
1531
1532	if (HAS_PCH_SPLIT(dev) && !HAS_DDI(dev) && port != PORT_A)
1533		pipe_config->has_pch_encoder = true;
1534
1535	pipe_config->has_dp_encoder = true;
1536	pipe_config->has_drrs = false;
1537	pipe_config->has_audio = intel_dp->has_audio && port != PORT_A;
1538
1539	if (is_edp(intel_dp) && intel_connector->panel.fixed_mode) {
1540		intel_fixed_panel_mode(intel_connector->panel.fixed_mode,
1541				       adjusted_mode);
1542
1543		if (INTEL_INFO(dev)->gen >= 9) {
1544			int ret;
1545			ret = skl_update_scaler_crtc(pipe_config);
1546			if (ret)
1547				return ret;
1548		}
1549
1550		if (HAS_GMCH_DISPLAY(dev))
1551			intel_gmch_panel_fitting(intel_crtc, pipe_config,
1552						 intel_connector->panel.fitting_mode);
1553		else
1554			intel_pch_panel_fitting(intel_crtc, pipe_config,
1555						intel_connector->panel.fitting_mode);
1556	}
1557
1558	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)
1559		return false;
1560
1561	DRM_DEBUG_KMS("DP link computation with max lane count %i "
1562		      "max bw %d pixel clock %iKHz\n",
1563		      max_lane_count, common_rates[max_clock],
1564		      adjusted_mode->crtc_clock);
1565
1566	/* Walk through all bpp values. Luckily they're all nicely spaced with 2
1567	 * bpc in between. */
1568	bpp = pipe_config->pipe_bpp;
1569	if (is_edp(intel_dp)) {
1570
1571		/* Get bpp from vbt only for panels that dont have bpp in edid */
1572		if (intel_connector->base.display_info.bpc == 0 &&
1573			(dev_priv->vbt.edp_bpp && dev_priv->vbt.edp_bpp < bpp)) {
1574			DRM_DEBUG_KMS("clamping bpp for eDP panel to BIOS-provided %i\n",
1575				      dev_priv->vbt.edp_bpp);
1576			bpp = dev_priv->vbt.edp_bpp;
1577		}
1578
1579		/*
1580		 * Use the maximum clock and number of lanes the eDP panel
1581		 * advertizes being capable of. The panels are generally
1582		 * designed to support only a single clock and lane
1583		 * configuration, and typically these values correspond to the
1584		 * native resolution of the panel.
1585		 */
1586		min_lane_count = max_lane_count;
1587		min_clock = max_clock;
1588	}
1589
1590	for (; bpp >= 6*3; bpp -= 2*3) {
1591		mode_rate = intel_dp_link_required(adjusted_mode->crtc_clock,
1592						   bpp);
1593
1594		for (clock = min_clock; clock <= max_clock; clock++) {
1595			for (lane_count = min_lane_count;
1596				lane_count <= max_lane_count;
1597				lane_count <<= 1) {
1598
1599				link_clock = common_rates[clock];
1600				link_avail = intel_dp_max_data_rate(link_clock,
1601								    lane_count);
1602
1603				if (mode_rate <= link_avail) {
1604					goto found;
1605				}
1606			}
1607		}
1608	}
1609
1610	return false;
1611
1612found:
1613	if (intel_dp->color_range_auto) {
1614		/*
1615		 * See:
1616		 * CEA-861-E - 5.1 Default Encoding Parameters
1617		 * VESA DisplayPort Ver.1.2a - 5.1.1.1 Video Colorimetry
1618		 */
1619		pipe_config->limited_color_range =
1620			bpp != 18 && drm_match_cea_mode(adjusted_mode) > 1;
1621	} else {
1622		pipe_config->limited_color_range =
1623			intel_dp->limited_color_range;
1624	}
1625
1626	pipe_config->lane_count = lane_count;
1627
1628	pipe_config->pipe_bpp = bpp;
1629	pipe_config->port_clock = common_rates[clock];
1630
1631	intel_dp_compute_rate(intel_dp, pipe_config->port_clock,
1632			      &link_bw, &rate_select);
1633
1634	DRM_DEBUG_KMS("DP link bw %02x rate select %02x lane count %d clock %d bpp %d\n",
1635		      link_bw, rate_select, pipe_config->lane_count,
1636		      pipe_config->port_clock, bpp);
1637	DRM_DEBUG_KMS("DP link bw required %i available %i\n",
1638		      mode_rate, link_avail);
1639
1640	intel_link_compute_m_n(bpp, lane_count,
1641			       adjusted_mode->crtc_clock,
1642			       pipe_config->port_clock,
1643			       &pipe_config->dp_m_n);
1644
1645	if (intel_connector->panel.downclock_mode != NULL &&
1646		dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) {
1647			pipe_config->has_drrs = true;
1648			intel_link_compute_m_n(bpp, lane_count,
1649				intel_connector->panel.downclock_mode->clock,
1650				pipe_config->port_clock,
1651				&pipe_config->dp_m2_n2);
1652	}
1653
1654	if ((IS_SKYLAKE(dev)  || IS_KABYLAKE(dev)) && is_edp(intel_dp))
1655		skl_edp_set_pll_config(pipe_config);
1656	else if (IS_BROXTON(dev))
1657		/* handled in ddi */;
1658	else if (IS_HASWELL(dev) || IS_BROADWELL(dev))
1659		hsw_dp_set_ddi_pll_sel(pipe_config);
1660	else
1661		intel_dp_set_clock(encoder, pipe_config);
1662
1663	return true;
1664}
1665
1666void intel_dp_set_link_params(struct intel_dp *intel_dp,
1667			      const struct intel_crtc_state *pipe_config)
1668{
1669	intel_dp->link_rate = pipe_config->port_clock;
1670	intel_dp->lane_count = pipe_config->lane_count;
1671}
1672
1673static void intel_dp_prepare(struct intel_encoder *encoder)
1674{
1675	struct drm_device *dev = encoder->base.dev;
1676	struct drm_i915_private *dev_priv = dev->dev_private;
1677	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
1678	enum port port = dp_to_dig_port(intel_dp)->port;
1679	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
1680	const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
1681
1682	intel_dp_set_link_params(intel_dp, crtc->config);
1683
1684	/*
1685	 * There are four kinds of DP registers:
1686	 *
1687	 * 	IBX PCH
1688	 * 	SNB CPU
1689	 *	IVB CPU
1690	 * 	CPT PCH
1691	 *
1692	 * IBX PCH and CPU are the same for almost everything,
1693	 * except that the CPU DP PLL is configured in this
1694	 * register
1695	 *
1696	 * CPT PCH is quite different, having many bits moved
1697	 * to the TRANS_DP_CTL register instead. That
1698	 * configuration happens (oddly) in ironlake_pch_enable
1699	 */
1700
1701	/* Preserve the BIOS-computed detected bit. This is
1702	 * supposed to be read-only.
1703	 */
1704	intel_dp->DP = I915_READ(intel_dp->output_reg) & DP_DETECTED;
1705
1706	/* Handle DP bits in common between all three register formats */
1707	intel_dp->DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
1708	intel_dp->DP |= DP_PORT_WIDTH(crtc->config->lane_count);
1709
1710	/* Split out the IBX/CPU vs CPT settings */
1711
1712	if (IS_GEN7(dev) && port == PORT_A) {
1713		if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
1714			intel_dp->DP |= DP_SYNC_HS_HIGH;
1715		if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
1716			intel_dp->DP |= DP_SYNC_VS_HIGH;
1717		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
1718
1719		if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
1720			intel_dp->DP |= DP_ENHANCED_FRAMING;
1721
1722		intel_dp->DP |= crtc->pipe << 29;
1723	} else if (HAS_PCH_CPT(dev) && port != PORT_A) {
1724		u32 trans_dp;
1725
1726		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
1727
1728		trans_dp = I915_READ(TRANS_DP_CTL(crtc->pipe));
1729		if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
1730			trans_dp |= TRANS_DP_ENH_FRAMING;
1731		else
1732			trans_dp &= ~TRANS_DP_ENH_FRAMING;
1733		I915_WRITE(TRANS_DP_CTL(crtc->pipe), trans_dp);
1734	} else {
1735		if (!HAS_PCH_SPLIT(dev) && !IS_VALLEYVIEW(dev) &&
1736		    !IS_CHERRYVIEW(dev) && crtc->config->limited_color_range)
1737			intel_dp->DP |= DP_COLOR_RANGE_16_235;
1738
1739		if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
1740			intel_dp->DP |= DP_SYNC_HS_HIGH;
1741		if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
1742			intel_dp->DP |= DP_SYNC_VS_HIGH;
1743		intel_dp->DP |= DP_LINK_TRAIN_OFF;
1744
1745		if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
1746			intel_dp->DP |= DP_ENHANCED_FRAMING;
1747
1748		if (IS_CHERRYVIEW(dev))
1749			intel_dp->DP |= DP_PIPE_SELECT_CHV(crtc->pipe);
1750		else if (crtc->pipe == PIPE_B)
1751			intel_dp->DP |= DP_PIPEB_SELECT;
1752	}
1753}
1754
1755#define IDLE_ON_MASK		(PP_ON | PP_SEQUENCE_MASK | 0                     | PP_SEQUENCE_STATE_MASK)
1756#define IDLE_ON_VALUE   	(PP_ON | PP_SEQUENCE_NONE | 0                     | PP_SEQUENCE_STATE_ON_IDLE)
1757
1758#define IDLE_OFF_MASK		(PP_ON | PP_SEQUENCE_MASK | 0                     | 0)
1759#define IDLE_OFF_VALUE		(0     | PP_SEQUENCE_NONE | 0                     | 0)
1760
1761#define IDLE_CYCLE_MASK		(PP_ON | PP_SEQUENCE_MASK | PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK)
1762#define IDLE_CYCLE_VALUE	(0     | PP_SEQUENCE_NONE | 0                     | PP_SEQUENCE_STATE_OFF_IDLE)
1763
1764static void wait_panel_status(struct intel_dp *intel_dp,
1765				       u32 mask,
1766				       u32 value)
1767{
1768	struct drm_device *dev = intel_dp_to_dev(intel_dp);
1769	struct drm_i915_private *dev_priv = dev->dev_private;
1770	i915_reg_t pp_stat_reg, pp_ctrl_reg;
1771
1772	lockdep_assert_held(&dev_priv->pps_mutex);
1773
1774	pp_stat_reg = _pp_stat_reg(intel_dp);
1775	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
1776
1777	DRM_DEBUG_KMS("mask %08x value %08x status %08x control %08x\n",
1778			mask, value,
1779			I915_READ(pp_stat_reg),
1780			I915_READ(pp_ctrl_reg));
1781
1782	if (_wait_for((I915_READ(pp_stat_reg) & mask) == value, 5000, 10)) {
1783		DRM_ERROR("Panel status timeout: status %08x control %08x\n",
1784				I915_READ(pp_stat_reg),
1785				I915_READ(pp_ctrl_reg));
1786	}
1787
1788	DRM_DEBUG_KMS("Wait complete\n");
1789}
1790
1791static void wait_panel_on(struct intel_dp *intel_dp)
1792{
1793	DRM_DEBUG_KMS("Wait for panel power on\n");
1794	wait_panel_status(intel_dp, IDLE_ON_MASK, IDLE_ON_VALUE);
1795}
1796
1797static void wait_panel_off(struct intel_dp *intel_dp)
1798{
1799	DRM_DEBUG_KMS("Wait for panel power off time\n");
1800	wait_panel_status(intel_dp, IDLE_OFF_MASK, IDLE_OFF_VALUE);
1801}
1802
1803static void wait_panel_power_cycle(struct intel_dp *intel_dp)
1804{
1805	ktime_t panel_power_on_time;
1806	s64 panel_power_off_duration;
1807
1808	DRM_DEBUG_KMS("Wait for panel power cycle\n");
1809
1810	/* take the difference of currrent time and panel power off time
1811	 * and then make panel wait for t11_t12 if needed. */
1812	panel_power_on_time = ktime_get_boottime();
1813	panel_power_off_duration = ktime_ms_delta(panel_power_on_time, intel_dp->panel_power_off_time);
1814
1815	/* When we disable the VDD override bit last we have to do the manual
1816	 * wait. */
1817	if (panel_power_off_duration < (s64)intel_dp->panel_power_cycle_delay)
1818		wait_remaining_ms_from_jiffies(jiffies,
1819				       intel_dp->panel_power_cycle_delay - panel_power_off_duration);
1820
1821	wait_panel_status(intel_dp, IDLE_CYCLE_MASK, IDLE_CYCLE_VALUE);
1822}
1823
1824static void wait_backlight_on(struct intel_dp *intel_dp)
1825{
1826	wait_remaining_ms_from_jiffies(intel_dp->last_power_on,
1827				       intel_dp->backlight_on_delay);
1828}
1829
1830static void edp_wait_backlight_off(struct intel_dp *intel_dp)
1831{
1832	wait_remaining_ms_from_jiffies(intel_dp->last_backlight_off,
1833				       intel_dp->backlight_off_delay);
1834}
1835
1836/* Read the current pp_control value, unlocking the register if it
1837 * is locked
1838 */
1839
1840static  u32 ironlake_get_pp_control(struct intel_dp *intel_dp)
1841{
1842	struct drm_device *dev = intel_dp_to_dev(intel_dp);
1843	struct drm_i915_private *dev_priv = dev->dev_private;
1844	u32 control;
1845
1846	lockdep_assert_held(&dev_priv->pps_mutex);
1847
1848	control = I915_READ(_pp_ctrl_reg(intel_dp));
1849	if (!IS_BROXTON(dev)) {
1850		control &= ~PANEL_UNLOCK_MASK;
1851		control |= PANEL_UNLOCK_REGS;
1852	}
1853	return control;
1854}
1855
1856/*
1857 * Must be paired with edp_panel_vdd_off().
1858 * Must hold pps_mutex around the whole on/off sequence.
1859 * Can be nested with intel_edp_panel_vdd_{on,off}() calls.
1860 */
1861static bool edp_panel_vdd_on(struct intel_dp *intel_dp)
1862{
1863	struct drm_device *dev = intel_dp_to_dev(intel_dp);
1864	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
1865	struct intel_encoder *intel_encoder = &intel_dig_port->base;
1866	struct drm_i915_private *dev_priv = dev->dev_private;
1867	enum intel_display_power_domain power_domain;
1868	u32 pp;
1869	i915_reg_t pp_stat_reg, pp_ctrl_reg;
1870	bool need_to_disable = !intel_dp->want_panel_vdd;
1871
1872	lockdep_assert_held(&dev_priv->pps_mutex);
1873
1874	if (!is_edp(intel_dp))
1875		return false;
1876
1877	cancel_delayed_work(&intel_dp->panel_vdd_work);
1878	intel_dp->want_panel_vdd = true;
1879
1880	if (edp_have_panel_vdd(intel_dp))
1881		return need_to_disable;
1882
1883	power_domain = intel_display_port_aux_power_domain(intel_encoder);
1884	intel_display_power_get(dev_priv, power_domain);
1885
1886	DRM_DEBUG_KMS("Turning eDP port %c VDD on\n",
1887		      port_name(intel_dig_port->port));
1888
1889	if (!edp_have_panel_power(intel_dp))
1890		wait_panel_power_cycle(intel_dp);
1891
1892	pp = ironlake_get_pp_control(intel_dp);
1893	pp |= EDP_FORCE_VDD;
1894
1895	pp_stat_reg = _pp_stat_reg(intel_dp);
1896	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
1897
1898	I915_WRITE(pp_ctrl_reg, pp);
1899	POSTING_READ(pp_ctrl_reg);
1900	DRM_DEBUG_KMS("PP_STATUS: 0x%08x PP_CONTROL: 0x%08x\n",
1901			I915_READ(pp_stat_reg), I915_READ(pp_ctrl_reg));
1902	/*
1903	 * If the panel wasn't on, delay before accessing aux channel
1904	 */
1905	if (!edp_have_panel_power(intel_dp)) {
1906		DRM_DEBUG_KMS("eDP port %c panel power wasn't enabled\n",
1907			      port_name(intel_dig_port->port));
1908		msleep(intel_dp->panel_power_up_delay);
1909	}
1910
1911	return need_to_disable;
1912}
1913
1914/*
1915 * Must be paired with intel_edp_panel_vdd_off() or
1916 * intel_edp_panel_off().
1917 * Nested calls to these functions are not allowed since
1918 * we drop the lock. Caller must use some higher level
1919 * locking to prevent nested calls from other threads.
1920 */
1921void intel_edp_panel_vdd_on(struct intel_dp *intel_dp)
1922{
1923	bool vdd;
1924
1925	if (!is_edp(intel_dp))
1926		return;
1927
1928	pps_lock(intel_dp);
1929	vdd = edp_panel_vdd_on(intel_dp);
1930	pps_unlock(intel_dp);
1931
1932	I915_STATE_WARN(!vdd, "eDP port %c VDD already requested on\n",
1933	     port_name(dp_to_dig_port(intel_dp)->port));
1934}
1935
1936static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
1937{
1938	struct drm_device *dev = intel_dp_to_dev(intel_dp);
1939	struct drm_i915_private *dev_priv = dev->dev_private;
1940	struct intel_digital_port *intel_dig_port =
1941		dp_to_dig_port(intel_dp);
1942	struct intel_encoder *intel_encoder = &intel_dig_port->base;
1943	enum intel_display_power_domain power_domain;
1944	u32 pp;
1945	i915_reg_t pp_stat_reg, pp_ctrl_reg;
1946
1947	lockdep_assert_held(&dev_priv->pps_mutex);
1948
1949	WARN_ON(intel_dp->want_panel_vdd);
1950
1951	if (!edp_have_panel_vdd(intel_dp))
1952		return;
1953
1954	DRM_DEBUG_KMS("Turning eDP port %c VDD off\n",
1955		      port_name(intel_dig_port->port));
1956
1957	pp = ironlake_get_pp_control(intel_dp);
1958	pp &= ~EDP_FORCE_VDD;
1959
1960	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
1961	pp_stat_reg = _pp_stat_reg(intel_dp);
1962
1963	I915_WRITE(pp_ctrl_reg, pp);
1964	POSTING_READ(pp_ctrl_reg);
1965
1966	/* Make sure sequencer is idle before allowing subsequent activity */
1967	DRM_DEBUG_KMS("PP_STATUS: 0x%08x PP_CONTROL: 0x%08x\n",
1968	I915_READ(pp_stat_reg), I915_READ(pp_ctrl_reg));
1969
1970	if ((pp & POWER_TARGET_ON) == 0)
1971		intel_dp->panel_power_off_time = ktime_get_boottime();
1972
1973	power_domain = intel_display_port_aux_power_domain(intel_encoder);
1974	intel_display_power_put(dev_priv, power_domain);
1975}
1976
1977static void edp_panel_vdd_work(struct work_struct *__work)
1978{
1979	struct intel_dp *intel_dp = container_of(to_delayed_work(__work),
1980						 struct intel_dp, panel_vdd_work);
1981
1982	pps_lock(intel_dp);
1983	if (!intel_dp->want_panel_vdd)
1984		edp_panel_vdd_off_sync(intel_dp);
1985	pps_unlock(intel_dp);
1986}
1987
1988static void edp_panel_vdd_schedule_off(struct intel_dp *intel_dp)
1989{
1990	unsigned long delay;
1991
1992	/*
1993	 * Queue the timer to fire a long time from now (relative to the power
1994	 * down delay) to keep the panel power up across a sequence of
1995	 * operations.
1996	 */
1997	delay = msecs_to_jiffies(intel_dp->panel_power_cycle_delay * 5);
1998	schedule_delayed_work(&intel_dp->panel_vdd_work, delay);
1999}
2000
2001/*
2002 * Must be paired with edp_panel_vdd_on().
2003 * Must hold pps_mutex around the whole on/off sequence.
2004 * Can be nested with intel_edp_panel_vdd_{on,off}() calls.
2005 */
2006static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
2007{
2008	struct drm_i915_private *dev_priv =
2009		intel_dp_to_dev(intel_dp)->dev_private;
2010
2011	lockdep_assert_held(&dev_priv->pps_mutex);
2012
2013	if (!is_edp(intel_dp))
2014		return;
2015
2016	I915_STATE_WARN(!intel_dp->want_panel_vdd, "eDP port %c VDD not forced on",
2017	     port_name(dp_to_dig_port(intel_dp)->port));
2018
2019	intel_dp->want_panel_vdd = false;
2020
2021	if (sync)
2022		edp_panel_vdd_off_sync(intel_dp);
2023	else
2024		edp_panel_vdd_schedule_off(intel_dp);
2025}
2026
2027static void edp_panel_on(struct intel_dp *intel_dp)
2028{
2029	struct drm_device *dev = intel_dp_to_dev(intel_dp);
2030	struct drm_i915_private *dev_priv = dev->dev_private;
2031	u32 pp;
2032	i915_reg_t pp_ctrl_reg;
2033
2034	lockdep_assert_held(&dev_priv->pps_mutex);
2035
2036	if (!is_edp(intel_dp))
2037		return;
2038
2039	DRM_DEBUG_KMS("Turn eDP port %c panel power on\n",
2040		      port_name(dp_to_dig_port(intel_dp)->port));
2041
2042	if (WARN(edp_have_panel_power(intel_dp),
2043		 "eDP port %c panel power already on\n",
2044		 port_name(dp_to_dig_port(intel_dp)->port)))
2045		return;
2046
2047	wait_panel_power_cycle(intel_dp);
2048
2049	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
2050	pp = ironlake_get_pp_control(intel_dp);
2051	if (IS_GEN5(dev)) {
2052		/* ILK workaround: disable reset around power sequence */
2053		pp &= ~PANEL_POWER_RESET;
2054		I915_WRITE(pp_ctrl_reg, pp);
2055		POSTING_READ(pp_ctrl_reg);
2056	}
2057
2058	pp |= POWER_TARGET_ON;
2059	if (!IS_GEN5(dev))
2060		pp |= PANEL_POWER_RESET;
2061
2062	I915_WRITE(pp_ctrl_reg, pp);
2063	POSTING_READ(pp_ctrl_reg);
2064
2065	wait_panel_on(intel_dp);
2066	intel_dp->last_power_on = jiffies;
2067
2068	if (IS_GEN5(dev)) {
2069		pp |= PANEL_POWER_RESET; /* restore panel reset bit */
2070		I915_WRITE(pp_ctrl_reg, pp);
2071		POSTING_READ(pp_ctrl_reg);
2072	}
2073}
2074
2075void intel_edp_panel_on(struct intel_dp *intel_dp)
2076{
2077	if (!is_edp(intel_dp))
2078		return;
2079
2080	pps_lock(intel_dp);
2081	edp_panel_on(intel_dp);
2082	pps_unlock(intel_dp);
2083}
2084
2085
2086static void edp_panel_off(struct intel_dp *intel_dp)
2087{
2088	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2089	struct intel_encoder *intel_encoder = &intel_dig_port->base;
2090	struct drm_device *dev = intel_dp_to_dev(intel_dp);
2091	struct drm_i915_private *dev_priv = dev->dev_private;
2092	enum intel_display_power_domain power_domain;
2093	u32 pp;
2094	i915_reg_t pp_ctrl_reg;
2095
2096	lockdep_assert_held(&dev_priv->pps_mutex);
2097
2098	if (!is_edp(intel_dp))
2099		return;
2100
2101	DRM_DEBUG_KMS("Turn eDP port %c panel power off\n",
2102		      port_name(dp_to_dig_port(intel_dp)->port));
2103
2104	WARN(!intel_dp->want_panel_vdd, "Need eDP port %c VDD to turn off panel\n",
2105	     port_name(dp_to_dig_port(intel_dp)->port));
2106
2107	pp = ironlake_get_pp_control(intel_dp);
2108	/* We need to switch off panel power _and_ force vdd, for otherwise some
2109	 * panels get very unhappy and cease to work. */
2110	pp &= ~(POWER_TARGET_ON | PANEL_POWER_RESET | EDP_FORCE_VDD |
2111		EDP_BLC_ENABLE);
2112
2113	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
2114
2115	intel_dp->want_panel_vdd = false;
2116
2117	I915_WRITE(pp_ctrl_reg, pp);
2118	POSTING_READ(pp_ctrl_reg);
2119
2120	intel_dp->panel_power_off_time = ktime_get_boottime();
2121	wait_panel_off(intel_dp);
2122
2123	/* We got a reference when we enabled the VDD. */
2124	power_domain = intel_display_port_aux_power_domain(intel_encoder);
2125	intel_display_power_put(dev_priv, power_domain);
2126}
2127
2128void intel_edp_panel_off(struct intel_dp *intel_dp)
2129{
2130	if (!is_edp(intel_dp))
2131		return;
2132
2133	pps_lock(intel_dp);
2134	edp_panel_off(intel_dp);
2135	pps_unlock(intel_dp);
2136}
2137
2138/* Enable backlight in the panel power control. */
2139static void _intel_edp_backlight_on(struct intel_dp *intel_dp)
2140{
2141	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2142	struct drm_device *dev = intel_dig_port->base.base.dev;
2143	struct drm_i915_private *dev_priv = dev->dev_private;
2144	u32 pp;
2145	i915_reg_t pp_ctrl_reg;
2146
2147	/*
2148	 * If we enable the backlight right away following a panel power
2149	 * on, we may see slight flicker as the panel syncs with the eDP
2150	 * link.  So delay a bit to make sure the image is solid before
2151	 * allowing it to appear.
2152	 */
2153	wait_backlight_on(intel_dp);
2154
2155	pps_lock(intel_dp);
2156
2157	pp = ironlake_get_pp_control(intel_dp);
2158	pp |= EDP_BLC_ENABLE;
2159
2160	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
2161
2162	I915_WRITE(pp_ctrl_reg, pp);
2163	POSTING_READ(pp_ctrl_reg);
2164
2165	pps_unlock(intel_dp);
2166}
2167
2168/* Enable backlight PWM and backlight PP control. */
2169void intel_edp_backlight_on(struct intel_dp *intel_dp)
2170{
2171	if (!is_edp(intel_dp))
2172		return;
2173
2174	DRM_DEBUG_KMS("\n");
2175
2176	intel_panel_enable_backlight(intel_dp->attached_connector);
2177	_intel_edp_backlight_on(intel_dp);
2178}
2179
2180/* Disable backlight in the panel power control. */
2181static void _intel_edp_backlight_off(struct intel_dp *intel_dp)
2182{
2183	struct drm_device *dev = intel_dp_to_dev(intel_dp);
2184	struct drm_i915_private *dev_priv = dev->dev_private;
2185	u32 pp;
2186	i915_reg_t pp_ctrl_reg;
2187
2188	if (!is_edp(intel_dp))
2189		return;
2190
2191	pps_lock(intel_dp);
2192
2193	pp = ironlake_get_pp_control(intel_dp);
2194	pp &= ~EDP_BLC_ENABLE;
2195
2196	pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
2197
2198	I915_WRITE(pp_ctrl_reg, pp);
2199	POSTING_READ(pp_ctrl_reg);
2200
2201	pps_unlock(intel_dp);
2202
2203	intel_dp->last_backlight_off = jiffies;
2204	edp_wait_backlight_off(intel_dp);
2205}
2206
2207/* Disable backlight PP control and backlight PWM. */
2208void intel_edp_backlight_off(struct intel_dp *intel_dp)
2209{
2210	if (!is_edp(intel_dp))
2211		return;
2212
2213	DRM_DEBUG_KMS("\n");
2214
2215	_intel_edp_backlight_off(intel_dp);
2216	intel_panel_disable_backlight(intel_dp->attached_connector);
2217}
2218
2219/*
2220 * Hook for controlling the panel power control backlight through the bl_power
2221 * sysfs attribute. Take care to handle multiple calls.
2222 */
2223static void intel_edp_backlight_power(struct intel_connector *connector,
2224				      bool enable)
2225{
2226	struct intel_dp *intel_dp = intel_attached_dp(&connector->base);
2227	bool is_enabled;
2228
2229	pps_lock(intel_dp);
2230	is_enabled = ironlake_get_pp_control(intel_dp) & EDP_BLC_ENABLE;
2231	pps_unlock(intel_dp);
2232
2233	if (is_enabled == enable)
2234		return;
2235
2236	DRM_DEBUG_KMS("panel power control backlight %s\n",
2237		      enable ? "enable" : "disable");
2238
2239	if (enable)
2240		_intel_edp_backlight_on(intel_dp);
2241	else
2242		_intel_edp_backlight_off(intel_dp);
2243}
2244
2245static void assert_dp_port(struct intel_dp *intel_dp, bool state)
2246{
2247	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
2248	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
2249	bool cur_state = I915_READ(intel_dp->output_reg) & DP_PORT_EN;
2250
2251	I915_STATE_WARN(cur_state != state,
2252			"DP port %c state assertion failure (expected %s, current %s)\n",
2253			port_name(dig_port->port),
2254			onoff(state), onoff(cur_state));
2255}
2256#define assert_dp_port_disabled(d) assert_dp_port((d), false)
2257
2258static void assert_edp_pll(struct drm_i915_private *dev_priv, bool state)
2259{
2260	bool cur_state = I915_READ(DP_A) & DP_PLL_ENABLE;
2261
2262	I915_STATE_WARN(cur_state != state,
2263			"eDP PLL state assertion failure (expected %s, current %s)\n",
2264			onoff(state), onoff(cur_state));
2265}
2266#define assert_edp_pll_enabled(d) assert_edp_pll((d), true)
2267#define assert_edp_pll_disabled(d) assert_edp_pll((d), false)
2268
2269static void ironlake_edp_pll_on(struct intel_dp *intel_dp)
2270{
2271	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2272	struct intel_crtc *crtc = to_intel_crtc(intel_dig_port->base.base.crtc);
2273	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
2274
2275	assert_pipe_disabled(dev_priv, crtc->pipe);
2276	assert_dp_port_disabled(intel_dp);
2277	assert_edp_pll_disabled(dev_priv);
2278
2279	DRM_DEBUG_KMS("enabling eDP PLL for clock %d\n",
2280		      crtc->config->port_clock);
2281
2282	intel_dp->DP &= ~DP_PLL_FREQ_MASK;
2283
2284	if (crtc->config->port_clock == 162000)
2285		intel_dp->DP |= DP_PLL_FREQ_162MHZ;
2286	else
2287		intel_dp->DP |= DP_PLL_FREQ_270MHZ;
2288
2289	I915_WRITE(DP_A, intel_dp->DP);
2290	POSTING_READ(DP_A);
2291	udelay(500);
2292
2293	intel_dp->DP |= DP_PLL_ENABLE;
2294
2295	I915_WRITE(DP_A, intel_dp->DP);
2296	POSTING_READ(DP_A);
2297	udelay(200);
2298}
2299
2300static void ironlake_edp_pll_off(struct intel_dp *intel_dp)
2301{
2302	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2303	struct intel_crtc *crtc = to_intel_crtc(intel_dig_port->base.base.crtc);
2304	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
2305
2306	assert_pipe_disabled(dev_priv, crtc->pipe);
2307	assert_dp_port_disabled(intel_dp);
2308	assert_edp_pll_enabled(dev_priv);
2309
2310	DRM_DEBUG_KMS("disabling eDP PLL\n");
2311
2312	intel_dp->DP &= ~DP_PLL_ENABLE;
2313
2314	I915_WRITE(DP_A, intel_dp->DP);
2315	POSTING_READ(DP_A);
2316	udelay(200);
2317}
2318
2319/* If the sink supports it, try to set the power state appropriately */
2320void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode)
2321{
2322	int ret, i;
2323
2324	/* Should have a valid DPCD by this point */
2325	if (intel_dp->dpcd[DP_DPCD_REV] < 0x11)
2326		return;
2327
2328	if (mode != DRM_MODE_DPMS_ON) {
2329		ret = drm_dp_dpcd_writeb(&intel_dp->aux, DP_SET_POWER,
2330					 DP_SET_POWER_D3);
2331	} else {
2332		/*
2333		 * When turning on, we need to retry for 1ms to give the sink
2334		 * time to wake up.
2335		 */
2336		for (i = 0; i < 3; i++) {
2337			ret = drm_dp_dpcd_writeb(&intel_dp->aux, DP_SET_POWER,
2338						 DP_SET_POWER_D0);
2339			if (ret == 1)
2340				break;
2341			msleep(1);
2342		}
2343	}
2344
2345	if (ret != 1)
2346		DRM_DEBUG_KMS("failed to %s sink power state\n",
2347			      mode == DRM_MODE_DPMS_ON ? "enable" : "disable");
2348}
2349
2350static bool intel_dp_get_hw_state(struct intel_encoder *encoder,
2351				  enum pipe *pipe)
2352{
2353	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2354	enum port port = dp_to_dig_port(intel_dp)->port;
2355	struct drm_device *dev = encoder->base.dev;
2356	struct drm_i915_private *dev_priv = dev->dev_private;
2357	enum intel_display_power_domain power_domain;
2358	u32 tmp;
2359	bool ret;
2360
2361	power_domain = intel_display_port_power_domain(encoder);
2362	if (!intel_display_power_get_if_enabled(dev_priv, power_domain))
2363		return false;
2364
2365	ret = false;
2366
2367	tmp = I915_READ(intel_dp->output_reg);
2368
2369	if (!(tmp & DP_PORT_EN))
2370		goto out;
2371
2372	if (IS_GEN7(dev) && port == PORT_A) {
2373		*pipe = PORT_TO_PIPE_CPT(tmp);
2374	} else if (HAS_PCH_CPT(dev) && port != PORT_A) {
2375		enum pipe p;
2376
2377		for_each_pipe(dev_priv, p) {
2378			u32 trans_dp = I915_READ(TRANS_DP_CTL(p));
2379			if (TRANS_DP_PIPE_TO_PORT(trans_dp) == port) {
2380				*pipe = p;
2381				ret = true;
2382
2383				goto out;
2384			}
2385		}
2386
2387		DRM_DEBUG_KMS("No pipe for dp port 0x%x found\n",
2388			      i915_mmio_reg_offset(intel_dp->output_reg));
2389	} else if (IS_CHERRYVIEW(dev)) {
2390		*pipe = DP_PORT_TO_PIPE_CHV(tmp);
2391	} else {
2392		*pipe = PORT_TO_PIPE(tmp);
2393	}
2394
2395	ret = true;
2396
2397out:
2398	intel_display_power_put(dev_priv, power_domain);
2399
2400	return ret;
2401}
2402
2403static void intel_dp_get_config(struct intel_encoder *encoder,
2404				struct intel_crtc_state *pipe_config)
2405{
2406	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2407	u32 tmp, flags = 0;
2408	struct drm_device *dev = encoder->base.dev;
2409	struct drm_i915_private *dev_priv = dev->dev_private;
2410	enum port port = dp_to_dig_port(intel_dp)->port;
2411	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2412	int dotclock;
2413
2414	tmp = I915_READ(intel_dp->output_reg);
2415
2416	pipe_config->has_audio = tmp & DP_AUDIO_OUTPUT_ENABLE && port != PORT_A;
2417
2418	if (HAS_PCH_CPT(dev) && port != PORT_A) {
2419		u32 trans_dp = I915_READ(TRANS_DP_CTL(crtc->pipe));
2420
2421		if (trans_dp & TRANS_DP_HSYNC_ACTIVE_HIGH)
2422			flags |= DRM_MODE_FLAG_PHSYNC;
2423		else
2424			flags |= DRM_MODE_FLAG_NHSYNC;
2425
2426		if (trans_dp & TRANS_DP_VSYNC_ACTIVE_HIGH)
2427			flags |= DRM_MODE_FLAG_PVSYNC;
2428		else
2429			flags |= DRM_MODE_FLAG_NVSYNC;
2430	} else {
2431		if (tmp & DP_SYNC_HS_HIGH)
2432			flags |= DRM_MODE_FLAG_PHSYNC;
2433		else
2434			flags |= DRM_MODE_FLAG_NHSYNC;
2435
2436		if (tmp & DP_SYNC_VS_HIGH)
2437			flags |= DRM_MODE_FLAG_PVSYNC;
2438		else
2439			flags |= DRM_MODE_FLAG_NVSYNC;
2440	}
2441
2442	pipe_config->base.adjusted_mode.flags |= flags;
2443
2444	if (!HAS_PCH_SPLIT(dev) && !IS_VALLEYVIEW(dev) &&
2445	    !IS_CHERRYVIEW(dev) && tmp & DP_COLOR_RANGE_16_235)
2446		pipe_config->limited_color_range = true;
2447
2448	pipe_config->has_dp_encoder = true;
2449
2450	pipe_config->lane_count =
2451		((tmp & DP_PORT_WIDTH_MASK) >> DP_PORT_WIDTH_SHIFT) + 1;
2452
2453	intel_dp_get_m_n(crtc, pipe_config);
2454
2455	if (port == PORT_A) {
2456		if ((I915_READ(DP_A) & DP_PLL_FREQ_MASK) == DP_PLL_FREQ_162MHZ)
2457			pipe_config->port_clock = 162000;
2458		else
2459			pipe_config->port_clock = 270000;
2460	}
2461
2462	dotclock = intel_dotclock_calculate(pipe_config->port_clock,
2463					    &pipe_config->dp_m_n);
2464
2465	if (HAS_PCH_SPLIT(dev_priv->dev) && port != PORT_A)
2466		ironlake_check_encoder_dotclock(pipe_config, dotclock);
2467
2468	pipe_config->base.adjusted_mode.crtc_clock = dotclock;
2469
2470	if (is_edp(intel_dp) && dev_priv->vbt.edp_bpp &&
2471	    pipe_config->pipe_bpp > dev_priv->vbt.edp_bpp) {
2472		/*
2473		 * This is a big fat ugly hack.
2474		 *
2475		 * Some machines in UEFI boot mode provide us a VBT that has 18
2476		 * bpp and 1.62 GHz link bandwidth for eDP, which for reasons
2477		 * unknown we fail to light up. Yet the same BIOS boots up with
2478		 * 24 bpp and 2.7 GHz link. Use the same bpp as the BIOS uses as
2479		 * max, not what it tells us to use.
2480		 *
2481		 * Note: This will still be broken if the eDP panel is not lit
2482		 * up by the BIOS, and thus we can't get the mode at module
2483		 * load.
2484		 */
2485		DRM_DEBUG_KMS("pipe has %d bpp for eDP panel, overriding BIOS-provided max %d bpp\n",
2486			      pipe_config->pipe_bpp, dev_priv->vbt.edp_bpp);
2487		dev_priv->vbt.edp_bpp = pipe_config->pipe_bpp;
2488	}
2489}
2490
2491static void intel_disable_dp(struct intel_encoder *encoder)
2492{
2493	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2494	struct drm_device *dev = encoder->base.dev;
2495	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2496
2497	if (crtc->config->has_audio)
2498		intel_audio_codec_disable(encoder);
2499
2500	if (HAS_PSR(dev) && !HAS_DDI(dev))
2501		intel_psr_disable(intel_dp);
2502
2503	/* Make sure the panel is off before trying to change the mode. But also
2504	 * ensure that we have vdd while we switch off the panel. */
2505	intel_edp_panel_vdd_on(intel_dp);
2506	intel_edp_backlight_off(intel_dp);
2507	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
2508	intel_edp_panel_off(intel_dp);
2509
2510	/* disable the port before the pipe on g4x */
2511	if (INTEL_INFO(dev)->gen < 5)
2512		intel_dp_link_down(intel_dp);
2513}
2514
2515static void ilk_post_disable_dp(struct intel_encoder *encoder)
2516{
2517	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2518	enum port port = dp_to_dig_port(intel_dp)->port;
2519
2520	intel_dp_link_down(intel_dp);
2521
2522	/* Only ilk+ has port A */
2523	if (port == PORT_A)
2524		ironlake_edp_pll_off(intel_dp);
2525}
2526
2527static void vlv_post_disable_dp(struct intel_encoder *encoder)
2528{
2529	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2530
2531	intel_dp_link_down(intel_dp);
2532}
2533
2534static void chv_data_lane_soft_reset(struct intel_encoder *encoder,
2535				     bool reset)
2536{
2537	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
2538	enum dpio_channel ch = vlv_dport_to_channel(enc_to_dig_port(&encoder->base));
2539	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2540	enum pipe pipe = crtc->pipe;
2541	uint32_t val;
2542
2543	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW0(ch));
2544	if (reset)
2545		val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
2546	else
2547		val |= DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET;
2548	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW0(ch), val);
2549
2550	if (crtc->config->lane_count > 2) {
2551		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW0(ch));
2552		if (reset)
2553			val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
2554		else
2555			val |= DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET;
2556		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW0(ch), val);
2557	}
2558
2559	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW1(ch));
2560	val |= CHV_PCS_REQ_SOFTRESET_EN;
2561	if (reset)
2562		val &= ~DPIO_PCS_CLK_SOFT_RESET;
2563	else
2564		val |= DPIO_PCS_CLK_SOFT_RESET;
2565	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW1(ch), val);
2566
2567	if (crtc->config->lane_count > 2) {
2568		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW1(ch));
2569		val |= CHV_PCS_REQ_SOFTRESET_EN;
2570		if (reset)
2571			val &= ~DPIO_PCS_CLK_SOFT_RESET;
2572		else
2573			val |= DPIO_PCS_CLK_SOFT_RESET;
2574		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW1(ch), val);
2575	}
2576}
2577
2578static void chv_post_disable_dp(struct intel_encoder *encoder)
2579{
2580	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2581	struct drm_device *dev = encoder->base.dev;
2582	struct drm_i915_private *dev_priv = dev->dev_private;
2583
2584	intel_dp_link_down(intel_dp);
2585
2586	mutex_lock(&dev_priv->sb_lock);
2587
2588	/* Assert data lane reset */
2589	chv_data_lane_soft_reset(encoder, true);
2590
2591	mutex_unlock(&dev_priv->sb_lock);
2592}
2593
2594static void
2595_intel_dp_set_link_train(struct intel_dp *intel_dp,
2596			 uint32_t *DP,
2597			 uint8_t dp_train_pat)
2598{
2599	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2600	struct drm_device *dev = intel_dig_port->base.base.dev;
2601	struct drm_i915_private *dev_priv = dev->dev_private;
2602	enum port port = intel_dig_port->port;
2603
2604	if (HAS_DDI(dev)) {
2605		uint32_t temp = I915_READ(DP_TP_CTL(port));
2606
2607		if (dp_train_pat & DP_LINK_SCRAMBLING_DISABLE)
2608			temp |= DP_TP_CTL_SCRAMBLE_DISABLE;
2609		else
2610			temp &= ~DP_TP_CTL_SCRAMBLE_DISABLE;
2611
2612		temp &= ~DP_TP_CTL_LINK_TRAIN_MASK;
2613		switch (dp_train_pat & DP_TRAINING_PATTERN_MASK) {
2614		case DP_TRAINING_PATTERN_DISABLE:
2615			temp |= DP_TP_CTL_LINK_TRAIN_NORMAL;
2616
2617			break;
2618		case DP_TRAINING_PATTERN_1:
2619			temp |= DP_TP_CTL_LINK_TRAIN_PAT1;
2620			break;
2621		case DP_TRAINING_PATTERN_2:
2622			temp |= DP_TP_CTL_LINK_TRAIN_PAT2;
2623			break;
2624		case DP_TRAINING_PATTERN_3:
2625			temp |= DP_TP_CTL_LINK_TRAIN_PAT3;
2626			break;
2627		}
2628		I915_WRITE(DP_TP_CTL(port), temp);
2629
2630	} else if ((IS_GEN7(dev) && port == PORT_A) ||
2631		   (HAS_PCH_CPT(dev) && port != PORT_A)) {
2632		*DP &= ~DP_LINK_TRAIN_MASK_CPT;
2633
2634		switch (dp_train_pat & DP_TRAINING_PATTERN_MASK) {
2635		case DP_TRAINING_PATTERN_DISABLE:
2636			*DP |= DP_LINK_TRAIN_OFF_CPT;
2637			break;
2638		case DP_TRAINING_PATTERN_1:
2639			*DP |= DP_LINK_TRAIN_PAT_1_CPT;
2640			break;
2641		case DP_TRAINING_PATTERN_2:
2642			*DP |= DP_LINK_TRAIN_PAT_2_CPT;
2643			break;
2644		case DP_TRAINING_PATTERN_3:
2645			DRM_ERROR("DP training pattern 3 not supported\n");
2646			*DP |= DP_LINK_TRAIN_PAT_2_CPT;
2647			break;
2648		}
2649
2650	} else {
2651		if (IS_CHERRYVIEW(dev))
2652			*DP &= ~DP_LINK_TRAIN_MASK_CHV;
2653		else
2654			*DP &= ~DP_LINK_TRAIN_MASK;
2655
2656		switch (dp_train_pat & DP_TRAINING_PATTERN_MASK) {
2657		case DP_TRAINING_PATTERN_DISABLE:
2658			*DP |= DP_LINK_TRAIN_OFF;
2659			break;
2660		case DP_TRAINING_PATTERN_1:
2661			*DP |= DP_LINK_TRAIN_PAT_1;
2662			break;
2663		case DP_TRAINING_PATTERN_2:
2664			*DP |= DP_LINK_TRAIN_PAT_2;
2665			break;
2666		case DP_TRAINING_PATTERN_3:
2667			if (IS_CHERRYVIEW(dev)) {
2668				*DP |= DP_LINK_TRAIN_PAT_3_CHV;
2669			} else {
2670				DRM_ERROR("DP training pattern 3 not supported\n");
2671				*DP |= DP_LINK_TRAIN_PAT_2;
2672			}
2673			break;
2674		}
2675	}
2676}
2677
2678static void intel_dp_enable_port(struct intel_dp *intel_dp)
2679{
2680	struct drm_device *dev = intel_dp_to_dev(intel_dp);
2681	struct drm_i915_private *dev_priv = dev->dev_private;
2682	struct intel_crtc *crtc =
2683		to_intel_crtc(dp_to_dig_port(intel_dp)->base.base.crtc);
2684
2685	/* enable with pattern 1 (as per spec) */
2686	_intel_dp_set_link_train(intel_dp, &intel_dp->DP,
2687				 DP_TRAINING_PATTERN_1);
2688
2689	I915_WRITE(intel_dp->output_reg, intel_dp->DP);
2690	POSTING_READ(intel_dp->output_reg);
2691
2692	/*
2693	 * Magic for VLV/CHV. We _must_ first set up the register
2694	 * without actually enabling the port, and then do another
2695	 * write to enable the port. Otherwise link training will
2696	 * fail when the power sequencer is freshly used for this port.
2697	 */
2698	intel_dp->DP |= DP_PORT_EN;
2699	if (crtc->config->has_audio)
2700		intel_dp->DP |= DP_AUDIO_OUTPUT_ENABLE;
2701
2702	I915_WRITE(intel_dp->output_reg, intel_dp->DP);
2703	POSTING_READ(intel_dp->output_reg);
2704}
2705
2706static void intel_enable_dp(struct intel_encoder *encoder)
2707{
2708	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2709	struct drm_device *dev = encoder->base.dev;
2710	struct drm_i915_private *dev_priv = dev->dev_private;
2711	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2712	uint32_t dp_reg = I915_READ(intel_dp->output_reg);
2713	enum port port = dp_to_dig_port(intel_dp)->port;
2714	enum pipe pipe = crtc->pipe;
2715
2716	if (WARN_ON(dp_reg & DP_PORT_EN))
2717		return;
2718
2719	pps_lock(intel_dp);
2720
2721	if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev))
2722		vlv_init_panel_power_sequencer(intel_dp);
2723
2724	/*
2725	 * We get an occasional spurious underrun between the port
2726	 * enable and vdd enable, when enabling port A eDP.
2727	 *
2728	 * FIXME: Not sure if this applies to (PCH) port D eDP as well
2729	 */
2730	if (port == PORT_A)
2731		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
2732
2733	intel_dp_enable_port(intel_dp);
2734
2735	if (port == PORT_A && IS_GEN5(dev_priv)) {
2736		/*
2737		 * Underrun reporting for the other pipe was disabled in
2738		 * g4x_pre_enable_dp(). The eDP PLL and port have now been
2739		 * enabled, so it's now safe to re-enable underrun reporting.
2740		 */
2741		intel_wait_for_vblank_if_active(dev_priv->dev, !pipe);
2742		intel_set_cpu_fifo_underrun_reporting(dev_priv, !pipe, true);
2743		intel_set_pch_fifo_underrun_reporting(dev_priv, !pipe, true);
2744	}
2745
2746	edp_panel_vdd_on(intel_dp);
2747	edp_panel_on(intel_dp);
2748	edp_panel_vdd_off(intel_dp, true);
2749
2750	if (port == PORT_A)
2751		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
2752
2753	pps_unlock(intel_dp);
2754
2755	if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
2756		unsigned int lane_mask = 0x0;
2757
2758		if (IS_CHERRYVIEW(dev))
2759			lane_mask = intel_dp_unused_lane_mask(crtc->config->lane_count);
2760
2761		vlv_wait_port_ready(dev_priv, dp_to_dig_port(intel_dp),
2762				    lane_mask);
2763	}
2764
2765	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
2766	intel_dp_start_link_train(intel_dp);
2767	intel_dp_stop_link_train(intel_dp);
2768
2769	if (crtc->config->has_audio) {
2770		DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
2771				 pipe_name(pipe));
2772		intel_audio_codec_enable(encoder);
2773	}
2774}
2775
2776static void g4x_enable_dp(struct intel_encoder *encoder)
2777{
2778	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2779
2780	intel_enable_dp(encoder);
2781	intel_edp_backlight_on(intel_dp);
2782}
2783
2784static void vlv_enable_dp(struct intel_encoder *encoder)
2785{
2786	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2787
2788	intel_edp_backlight_on(intel_dp);
2789	intel_psr_enable(intel_dp);
2790}
2791
2792static void g4x_pre_enable_dp(struct intel_encoder *encoder)
2793{
2794	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
2795	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2796	enum port port = dp_to_dig_port(intel_dp)->port;
2797	enum pipe pipe = to_intel_crtc(encoder->base.crtc)->pipe;
2798
2799	intel_dp_prepare(encoder);
2800
2801	if (port == PORT_A && IS_GEN5(dev_priv)) {
2802		/*
2803		 * We get FIFO underruns on the other pipe when
2804		 * enabling the CPU eDP PLL, and when enabling CPU
2805		 * eDP port. We could potentially avoid the PLL
2806		 * underrun with a vblank wait just prior to enabling
2807		 * the PLL, but that doesn't appear to help the port
2808		 * enable case. Just sweep it all under the rug.
2809		 */
2810		intel_set_cpu_fifo_underrun_reporting(dev_priv, !pipe, false);
2811		intel_set_pch_fifo_underrun_reporting(dev_priv, !pipe, false);
2812	}
2813
2814	/* Only ilk+ has port A */
2815	if (port == PORT_A)
2816		ironlake_edp_pll_on(intel_dp);
2817}
2818
2819static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)
2820{
2821	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2822	struct drm_i915_private *dev_priv = intel_dig_port->base.base.dev->dev_private;
2823	enum pipe pipe = intel_dp->pps_pipe;
2824	i915_reg_t pp_on_reg = VLV_PIPE_PP_ON_DELAYS(pipe);
2825
2826	edp_panel_vdd_off_sync(intel_dp);
2827
2828	/*
2829	 * VLV seems to get confused when multiple power seqeuencers
2830	 * have the same port selected (even if only one has power/vdd
2831	 * enabled). The failure manifests as vlv_wait_port_ready() failing
2832	 * CHV on the other hand doesn't seem to mind having the same port
2833	 * selected in multiple power seqeuencers, but let's clear the
2834	 * port select always when logically disconnecting a power sequencer
2835	 * from a port.
2836	 */
2837	DRM_DEBUG_KMS("detaching pipe %c power sequencer from port %c\n",
2838		      pipe_name(pipe), port_name(intel_dig_port->port));
2839	I915_WRITE(pp_on_reg, 0);
2840	POSTING_READ(pp_on_reg);
2841
2842	intel_dp->pps_pipe = INVALID_PIPE;
2843}
2844
2845static void vlv_steal_power_sequencer(struct drm_device *dev,
2846				      enum pipe pipe)
2847{
2848	struct drm_i915_private *dev_priv = dev->dev_private;
2849	struct intel_encoder *encoder;
2850
2851	lockdep_assert_held(&dev_priv->pps_mutex);
2852
2853	if (WARN_ON(pipe != PIPE_A && pipe != PIPE_B))
2854		return;
2855
2856	for_each_intel_encoder(dev, encoder) {
2857		struct intel_dp *intel_dp;
2858		enum port port;
2859
2860		if (encoder->type != INTEL_OUTPUT_EDP)
2861			continue;
2862
2863		intel_dp = enc_to_intel_dp(&encoder->base);
2864		port = dp_to_dig_port(intel_dp)->port;
2865
2866		if (intel_dp->pps_pipe != pipe)
2867			continue;
2868
2869		DRM_DEBUG_KMS("stealing pipe %c power sequencer from port %c\n",
2870			      pipe_name(pipe), port_name(port));
2871
2872		WARN(encoder->base.crtc,
2873		     "stealing pipe %c power sequencer from active eDP port %c\n",
2874		     pipe_name(pipe), port_name(port));
2875
2876		/* make sure vdd is off before we steal it */
2877		vlv_detach_power_sequencer(intel_dp);
2878	}
2879}
2880
2881static void vlv_init_panel_power_sequencer(struct intel_dp *intel_dp)
2882{
2883	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2884	struct intel_encoder *encoder = &intel_dig_port->base;
2885	struct drm_device *dev = encoder->base.dev;
2886	struct drm_i915_private *dev_priv = dev->dev_private;
2887	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2888
2889	lockdep_assert_held(&dev_priv->pps_mutex);
2890
2891	if (!is_edp(intel_dp))
2892		return;
2893
2894	if (intel_dp->pps_pipe == crtc->pipe)
2895		return;
2896
2897	/*
2898	 * If another power sequencer was being used on this
2899	 * port previously make sure to turn off vdd there while
2900	 * we still have control of it.
2901	 */
2902	if (intel_dp->pps_pipe != INVALID_PIPE)
2903		vlv_detach_power_sequencer(intel_dp);
2904
2905	/*
2906	 * We may be stealing the power
2907	 * sequencer from another port.
2908	 */
2909	vlv_steal_power_sequencer(dev, crtc->pipe);
2910
2911	/* now it's all ours */
2912	intel_dp->pps_pipe = crtc->pipe;
2913
2914	DRM_DEBUG_KMS("initializing pipe %c power sequencer for port %c\n",
2915		      pipe_name(intel_dp->pps_pipe), port_name(intel_dig_port->port));
2916
2917	/* init power sequencer on this pipe and port */
2918	intel_dp_init_panel_power_sequencer(dev, intel_dp);
2919	intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
2920}
2921
2922static void vlv_pre_enable_dp(struct intel_encoder *encoder)
2923{
2924	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2925	struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
2926	struct drm_device *dev = encoder->base.dev;
2927	struct drm_i915_private *dev_priv = dev->dev_private;
2928	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
2929	enum dpio_channel port = vlv_dport_to_channel(dport);
2930	int pipe = intel_crtc->pipe;
2931	u32 val;
2932
2933	mutex_lock(&dev_priv->sb_lock);
2934
2935	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW8(port));
2936	val = 0;
2937	if (pipe)
2938		val |= (1<<21);
2939	else
2940		val &= ~(1<<21);
2941	val |= 0x001000c4;
2942	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW8(port), val);
2943	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW14(port), 0x00760018);
2944	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW23(port), 0x00400888);
2945
2946	mutex_unlock(&dev_priv->sb_lock);
2947
2948	intel_enable_dp(encoder);
2949}
2950
2951static void vlv_dp_pre_pll_enable(struct intel_encoder *encoder)
2952{
2953	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
2954	struct drm_device *dev = encoder->base.dev;
2955	struct drm_i915_private *dev_priv = dev->dev_private;
2956	struct intel_crtc *intel_crtc =
2957		to_intel_crtc(encoder->base.crtc);
2958	enum dpio_channel port = vlv_dport_to_channel(dport);
2959	int pipe = intel_crtc->pipe;
2960
2961	intel_dp_prepare(encoder);
2962
2963	/* Program Tx lane resets to default */
2964	mutex_lock(&dev_priv->sb_lock);
2965	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(port),
2966			 DPIO_PCS_TX_LANE2_RESET |
2967			 DPIO_PCS_TX_LANE1_RESET);
2968	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(port),
2969			 DPIO_PCS_CLK_CRI_RXEB_EIOS_EN |
2970			 DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN |
2971			 (1<<DPIO_PCS_CLK_DATAWIDTH_SHIFT) |
2972				 DPIO_PCS_CLK_SOFT_RESET);
2973
2974	/* Fix up inter-pair skew failure */
2975	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW12(port), 0x00750f00);
2976	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW11(port), 0x00001500);
2977	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW14(port), 0x40400000);
2978	mutex_unlock(&dev_priv->sb_lock);
2979}
2980
2981static void chv_pre_enable_dp(struct intel_encoder *encoder)
2982{
2983	struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2984	struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
2985	struct drm_device *dev = encoder->base.dev;
2986	struct drm_i915_private *dev_priv = dev->dev_private;
2987	struct intel_crtc *intel_crtc =
2988		to_intel_crtc(encoder->base.crtc);
2989	enum dpio_channel ch = vlv_dport_to_channel(dport);
2990	int pipe = intel_crtc->pipe;
2991	int data, i, stagger;
2992	u32 val;
2993
2994	mutex_lock(&dev_priv->sb_lock);
2995
2996	/* allow hardware to manage TX FIFO reset source */
2997	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW11(ch));
2998	val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
2999	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
3000
3001	if (intel_crtc->config->lane_count > 2) {
3002		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
3003		val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
3004		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
3005	}
3006
3007	/* Program Tx lane latency optimal setting*/
3008	for (i = 0; i < intel_crtc->config->lane_count; i++) {
3009		/* Set the upar bit */
3010		if (intel_crtc->config->lane_count == 1)
3011			data = 0x0;
3012		else
3013			data = (i == 1) ? 0x0 : 0x1;
3014		vlv_dpio_write(dev_priv, pipe, CHV_TX_DW14(ch, i),
3015				data << DPIO_UPAR_SHIFT);
3016	}
3017
3018	/* Data lane stagger programming */
3019	if (intel_crtc->config->port_clock > 270000)
3020		stagger = 0x18;
3021	else if (intel_crtc->config->port_clock > 135000)
3022		stagger = 0xd;
3023	else if (intel_crtc->config->port_clock > 67500)
3024		stagger = 0x7;
3025	else if (intel_crtc->config->port_clock > 33750)
3026		stagger = 0x4;
3027	else
3028		stagger = 0x2;
3029
3030	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW11(ch));
3031	val |= DPIO_TX2_STAGGER_MASK(0x1f);
3032	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
3033
3034	if (intel_crtc->config->lane_count > 2) {
3035		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
3036		val |= DPIO_TX2_STAGGER_MASK(0x1f);
3037		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
3038	}
3039
3040	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW12(ch),
3041		       DPIO_LANESTAGGER_STRAP(stagger) |
3042		       DPIO_LANESTAGGER_STRAP_OVRD |
3043		       DPIO_TX1_STAGGER_MASK(0x1f) |
3044		       DPIO_TX1_STAGGER_MULT(6) |
3045		       DPIO_TX2_STAGGER_MULT(0));
3046
3047	if (intel_crtc->config->lane_count > 2) {
3048		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW12(ch),
3049			       DPIO_LANESTAGGER_STRAP(stagger) |
3050			       DPIO_LANESTAGGER_STRAP_OVRD |
3051			       DPIO_TX1_STAGGER_MASK(0x1f) |
3052			       DPIO_TX1_STAGGER_MULT(7) |
3053			       DPIO_TX2_STAGGER_MULT(5));
3054	}
3055
3056	/* Deassert data lane reset */
3057	chv_data_lane_soft_reset(encoder, false);
3058
3059	mutex_unlock(&dev_priv->sb_lock);
3060
3061	intel_enable_dp(encoder);
3062
3063	/* Second common lane will stay alive on its own now */
3064	if (dport->release_cl2_override) {
3065		chv_phy_powergate_ch(dev_priv, DPIO_PHY0, DPIO_CH1, false);
3066		dport->release_cl2_override = false;
3067	}
3068}
3069
3070static void chv_dp_pre_pll_enable(struct intel_encoder *encoder)
3071{
3072	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
3073	struct drm_device *dev = encoder->base.dev;
3074	struct drm_i915_private *dev_priv = dev->dev_private;
3075	struct intel_crtc *intel_crtc =
3076		to_intel_crtc(encoder->base.crtc);
3077	enum dpio_channel ch = vlv_dport_to_channel(dport);
3078	enum pipe pipe = intel_crtc->pipe;
3079	unsigned int lane_mask =
3080		intel_dp_unused_lane_mask(intel_crtc->config->lane_count);
3081	u32 val;
3082
3083	intel_dp_prepare(encoder);
3084
3085	/*
3086	 * Must trick the second common lane into life.
3087	 * Otherwise we can't even access the PLL.
3088	 */
3089	if (ch == DPIO_CH0 && pipe == PIPE_B)
3090		dport->release_cl2_override =
3091			!chv_phy_powergate_ch(dev_priv, DPIO_PHY0, DPIO_CH1, true);
3092
3093	chv_phy_powergate_lanes(encoder, true, lane_mask);
3094
3095	mutex_lock(&dev_priv->sb_lock);
3096
3097	/* Assert data lane reset */
3098	chv_data_lane_soft_reset(encoder, true);
3099
3100	/* program left/right clock distribution */
3101	if (pipe != PIPE_B) {
3102		val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW5_CH0);
3103		val &= ~(CHV_BUFLEFTENA1_MASK | CHV_BUFRIGHTENA1_MASK);
3104		if (ch == DPIO_CH0)
3105			val |= CHV_BUFLEFTENA1_FORCE;
3106		if (ch == DPIO_CH1)
3107			val |= CHV_BUFRIGHTENA1_FORCE;
3108		vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW5_CH0, val);
3109	} else {
3110		val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW1_CH1);
3111		val &= ~(CHV_BUFLEFTENA2_MASK | CHV_BUFRIGHTENA2_MASK);
3112		if (ch == DPIO_CH0)
3113			val |= CHV_BUFLEFTENA2_FORCE;
3114		if (ch == DPIO_CH1)
3115			val |= CHV_BUFRIGHTENA2_FORCE;
3116		vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW1_CH1, val);
3117	}
3118
3119	/* program clock channel usage */
3120	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW8(ch));
3121	val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
3122	if (pipe != PIPE_B)
3123		val &= ~CHV_PCS_USEDCLKCHANNEL;
3124	else
3125		val |= CHV_PCS_USEDCLKCHANNEL;
3126	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW8(ch), val);
3127
3128	if (intel_crtc->config->lane_count > 2) {
3129		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW8(ch));
3130		val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
3131		if (pipe != PIPE_B)
3132			val &= ~CHV_PCS_USEDCLKCHANNEL;
3133		else
3134			val |= CHV_PCS_USEDCLKCHANNEL;
3135		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW8(ch), val);
3136	}
3137
3138	/*
3139	 * This a a bit weird since generally CL
3140	 * matches the pipe, but here we need to
3141	 * pick the CL based on the port.
3142	 */
3143	val = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW19(ch));
3144	if (pipe != PIPE_B)
3145		val &= ~CHV_CMN_USEDCLKCHANNEL;
3146	else
3147		val |= CHV_CMN_USEDCLKCHANNEL;
3148	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW19(ch), val);
3149
3150	mutex_unlock(&dev_priv->sb_lock);
3151}
3152
3153static void chv_dp_post_pll_disable(struct intel_encoder *encoder)
3154{
3155	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
3156	enum pipe pipe = to_intel_crtc(encoder->base.crtc)->pipe;
3157	u32 val;
3158
3159	mutex_lock(&dev_priv->sb_lock);
3160
3161	/* disable left/right clock distribution */
3162	if (pipe != PIPE_B) {
3163		val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW5_CH0);
3164		val &= ~(CHV_BUFLEFTENA1_MASK | CHV_BUFRIGHTENA1_MASK);
3165		vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW5_CH0, val);
3166	} else {
3167		val = vlv_dpio_read(dev_priv, pipe, _CHV_CMN_DW1_CH1);
3168		val &= ~(CHV_BUFLEFTENA2_MASK | CHV_BUFRIGHTENA2_MASK);
3169		vlv_dpio_write(dev_priv, pipe, _CHV_CMN_DW1_CH1, val);
3170	}
3171
3172	mutex_unlock(&dev_priv->sb_lock);
3173
3174	/*
3175	 * Leave the power down bit cleared for at least one
3176	 * lane so that chv_powergate_phy_ch() will power
3177	 * on something when the channel is otherwise unused.
3178	 * When the port is off and the override is removed
3179	 * the lanes power down anyway, so otherwise it doesn't
3180	 * really matter what the state of power down bits is
3181	 * after this.
3182	 */
3183	chv_phy_powergate_lanes(encoder, false, 0x0);
3184}
3185
3186/*
3187 * Native read with retry for link status and receiver capability reads for
3188 * cases where the sink may still be asleep.
3189 *
3190 * Sinks are *supposed* to come up within 1ms from an off state, but we're also
3191 * supposed to retry 3 times per the spec.
3192 */
3193static ssize_t
3194intel_dp_dpcd_read_wake(struct drm_dp_aux *aux, unsigned int offset,
3195			void *buffer, size_t size)
3196{
3197	ssize_t ret;
3198	int i;
3199
3200	/*
3201	 * Sometime we just get the same incorrect byte repeated
3202	 * over the entire buffer. Doing just one throw away read
3203	 * initially seems to "solve" it.
3204	 */
3205	drm_dp_dpcd_read(aux, DP_DPCD_REV, buffer, 1);
3206
3207	for (i = 0; i < 3; i++) {
3208		ret = drm_dp_dpcd_read(aux, offset, buffer, size);
3209		if (ret == size)
3210			return ret;
3211		msleep(1);
3212	}
3213
3214	return ret;
3215}
3216
3217/*
3218 * Fetch AUX CH registers 0x202 - 0x207 which contain
3219 * link status information
3220 */
3221bool
3222intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE])
3223{
3224	return intel_dp_dpcd_read_wake(&intel_dp->aux,
3225				       DP_LANE0_1_STATUS,
3226				       link_status,
3227				       DP_LINK_STATUS_SIZE) == DP_LINK_STATUS_SIZE;
3228}
3229
3230/* These are source-specific values. */
3231uint8_t
3232intel_dp_voltage_max(struct intel_dp *intel_dp)
3233{
3234	struct drm_device *dev = intel_dp_to_dev(intel_dp);
3235	struct drm_i915_private *dev_priv = dev->dev_private;
3236	enum port port = dp_to_dig_port(intel_dp)->port;
3237
3238	if (IS_BROXTON(dev))
3239		return DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
3240	else if (INTEL_INFO(dev)->gen >= 9) {
3241		if (dev_priv->edp_low_vswing && port == PORT_A)
3242			return DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
3243		return DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
3244	} else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev))
3245		return DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
3246	else if (IS_GEN7(dev) && port == PORT_A)
3247		return DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
3248	else if (HAS_PCH_CPT(dev) && port != PORT_A)
3249		return DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
3250	else
3251		return DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
3252}
3253
3254uint8_t
3255intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)
3256{
3257	struct drm_device *dev = intel_dp_to_dev(intel_dp);
3258	enum port port = dp_to_dig_port(intel_dp)->port;
3259
3260	if (INTEL_INFO(dev)->gen >= 9) {
3261		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
3262		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3263			return DP_TRAIN_PRE_EMPH_LEVEL_3;
3264		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3265			return DP_TRAIN_PRE_EMPH_LEVEL_2;
3266		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3267			return DP_TRAIN_PRE_EMPH_LEVEL_1;
3268		case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
3269			return DP_TRAIN_PRE_EMPH_LEVEL_0;
3270		default:
3271			return DP_TRAIN_PRE_EMPH_LEVEL_0;
3272		}
3273	} else if (IS_HASWELL(dev) || IS_BROADWELL(dev)) {
3274		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
3275		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3276			return DP_TRAIN_PRE_EMPH_LEVEL_3;
3277		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3278			return DP_TRAIN_PRE_EMPH_LEVEL_2;
3279		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3280			return DP_TRAIN_PRE_EMPH_LEVEL_1;
3281		case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
3282		default:
3283			return DP_TRAIN_PRE_EMPH_LEVEL_0;
3284		}
3285	} else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
3286		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
3287		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3288			return DP_TRAIN_PRE_EMPH_LEVEL_3;
3289		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3290			return DP_TRAIN_PRE_EMPH_LEVEL_2;
3291		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3292			return DP_TRAIN_PRE_EMPH_LEVEL_1;
3293		case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
3294		default:
3295			return DP_TRAIN_PRE_EMPH_LEVEL_0;
3296		}
3297	} else if (IS_GEN7(dev) && port == PORT_A) {
3298		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
3299		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3300			return DP_TRAIN_PRE_EMPH_LEVEL_2;
3301		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3302		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3303			return DP_TRAIN_PRE_EMPH_LEVEL_1;
3304		default:
3305			return DP_TRAIN_PRE_EMPH_LEVEL_0;
3306		}
3307	} else {
3308		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
3309		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3310			return DP_TRAIN_PRE_EMPH_LEVEL_2;
3311		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3312			return DP_TRAIN_PRE_EMPH_LEVEL_2;
3313		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3314			return DP_TRAIN_PRE_EMPH_LEVEL_1;
3315		case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
3316		default:
3317			return DP_TRAIN_PRE_EMPH_LEVEL_0;
3318		}
3319	}
3320}
3321
3322static uint32_t vlv_signal_levels(struct intel_dp *intel_dp)
3323{
3324	struct drm_device *dev = intel_dp_to_dev(intel_dp);
3325	struct drm_i915_private *dev_priv = dev->dev_private;
3326	struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
3327	struct intel_crtc *intel_crtc =
3328		to_intel_crtc(dport->base.base.crtc);
3329	unsigned long demph_reg_value, preemph_reg_value,
3330		uniqtranscale_reg_value;
3331	uint8_t train_set = intel_dp->train_set[0];
3332	enum dpio_channel port = vlv_dport_to_channel(dport);
3333	int pipe = intel_crtc->pipe;
3334
3335	switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) {
3336	case DP_TRAIN_PRE_EMPH_LEVEL_0:
3337		preemph_reg_value = 0x0004000;
3338		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
3339		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3340			demph_reg_value = 0x2B405555;
3341			uniqtranscale_reg_value = 0x552AB83A;
3342			break;
3343		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3344			demph_reg_value = 0x2B404040;
3345			uniqtranscale_reg_value = 0x5548B83A;
3346			break;
3347		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3348			demph_reg_value = 0x2B245555;
3349			uniqtranscale_reg_value = 0x5560B83A;
3350			break;
3351		case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
3352			demph_reg_value = 0x2B405555;
3353			uniqtranscale_reg_value = 0x5598DA3A;
3354			break;
3355		default:
3356			return 0;
3357		}
3358		break;
3359	case DP_TRAIN_PRE_EMPH_LEVEL_1:
3360		preemph_reg_value = 0x0002000;
3361		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
3362		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3363			demph_reg_value = 0x2B404040;
3364			uniqtranscale_reg_value = 0x5552B83A;
3365			break;
3366		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3367			demph_reg_value = 0x2B404848;
3368			uniqtranscale_reg_value = 0x5580B83A;
3369			break;
3370		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3371			demph_reg_value = 0x2B404040;
3372			uniqtranscale_reg_value = 0x55ADDA3A;
3373			break;
3374		default:
3375			return 0;
3376		}
3377		break;
3378	case DP_TRAIN_PRE_EMPH_LEVEL_2:
3379		preemph_reg_value = 0x0000000;
3380		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
3381		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3382			demph_reg_value = 0x2B305555;
3383			uniqtranscale_reg_value = 0x5570B83A;
3384			break;
3385		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3386			demph_reg_value = 0x2B2B4040;
3387			uniqtranscale_reg_value = 0x55ADDA3A;
3388			break;
3389		default:
3390			return 0;
3391		}
3392		break;
3393	case DP_TRAIN_PRE_EMPH_LEVEL_3:
3394		preemph_reg_value = 0x0006000;
3395		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
3396		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3397			demph_reg_value = 0x1B405555;
3398			uniqtranscale_reg_value = 0x55ADDA3A;
3399			break;
3400		default:
3401			return 0;
3402		}
3403		break;
3404	default:
3405		return 0;
3406	}
3407
3408	mutex_lock(&dev_priv->sb_lock);
3409	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), 0x00000000);
3410	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW4(port), demph_reg_value);
3411	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW2(port),
3412			 uniqtranscale_reg_value);
3413	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW3(port), 0x0C782040);
3414	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW11(port), 0x00030000);
3415	vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW9(port), preemph_reg_value);
3416	vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), 0x80000000);
3417	mutex_unlock(&dev_priv->sb_lock);
3418
3419	return 0;
3420}
3421
3422static bool chv_need_uniq_trans_scale(uint8_t train_set)
3423{
3424	return (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) == DP_TRAIN_PRE_EMPH_LEVEL_0 &&
3425		(train_set & DP_TRAIN_VOLTAGE_SWING_MASK) == DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
3426}
3427
3428static uint32_t chv_signal_levels(struct intel_dp *intel_dp)
3429{
3430	struct drm_device *dev = intel_dp_to_dev(intel_dp);
3431	struct drm_i915_private *dev_priv = dev->dev_private;
3432	struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
3433	struct intel_crtc *intel_crtc = to_intel_crtc(dport->base.base.crtc);
3434	u32 deemph_reg_value, margin_reg_value, val;
3435	uint8_t train_set = intel_dp->train_set[0];
3436	enum dpio_channel ch = vlv_dport_to_channel(dport);
3437	enum pipe pipe = intel_crtc->pipe;
3438	int i;
3439
3440	switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) {
3441	case DP_TRAIN_PRE_EMPH_LEVEL_0:
3442		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
3443		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3444			deemph_reg_value = 128;
3445			margin_reg_value = 52;
3446			break;
3447		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3448			deemph_reg_value = 128;
3449			margin_reg_value = 77;
3450			break;
3451		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3452			deemph_reg_value = 128;
3453			margin_reg_value = 102;
3454			break;
3455		case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
3456			deemph_reg_value = 128;
3457			margin_reg_value = 154;
3458			/* FIXME extra to set for 1200 */
3459			break;
3460		default:
3461			return 0;
3462		}
3463		break;
3464	case DP_TRAIN_PRE_EMPH_LEVEL_1:
3465		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
3466		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3467			deemph_reg_value = 85;
3468			margin_reg_value = 78;
3469			break;
3470		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3471			deemph_reg_value = 85;
3472			margin_reg_value = 116;
3473			break;
3474		case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3475			deemph_reg_value = 85;
3476			margin_reg_value = 154;
3477			break;
3478		default:
3479			return 0;
3480		}
3481		break;
3482	case DP_TRAIN_PRE_EMPH_LEVEL_2:
3483		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
3484		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3485			deemph_reg_value = 64;
3486			margin_reg_value = 104;
3487			break;
3488		case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3489			deemph_reg_value = 64;
3490			margin_reg_value = 154;
3491			break;
3492		default:
3493			return 0;
3494		}
3495		break;
3496	case DP_TRAIN_PRE_EMPH_LEVEL_3:
3497		switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
3498		case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3499			deemph_reg_value = 43;
3500			margin_reg_value = 154;
3501			break;
3502		default:
3503			return 0;
3504		}
3505		break;
3506	default:
3507		return 0;
3508	}
3509
3510	mutex_lock(&dev_priv->sb_lock);
3511
3512	/* Clear calc init */
3513	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW10(ch));
3514	val &= ~(DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3);
3515	val &= ~(DPIO_PCS_TX1DEEMP_MASK | DPIO_PCS_TX2DEEMP_MASK);
3516	val |= DPIO_PCS_TX1DEEMP_9P5 | DPIO_PCS_TX2DEEMP_9P5;
3517	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW10(ch), val);
3518
3519	if (intel_crtc->config->lane_count > 2) {
3520		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW10(ch));
3521		val &= ~(DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3);
3522		val &= ~(DPIO_PCS_TX1DEEMP_MASK | DPIO_PCS_TX2DEEMP_MASK);
3523		val |= DPIO_PCS_TX1DEEMP_9P5 | DPIO_PCS_TX2DEEMP_9P5;
3524		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW10(ch), val);
3525	}
3526
3527	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW9(ch));
3528	val &= ~(DPIO_PCS_TX1MARGIN_MASK | DPIO_PCS_TX2MARGIN_MASK);
3529	val |= DPIO_PCS_TX1MARGIN_000 | DPIO_PCS_TX2MARGIN_000;
3530	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW9(ch), val);
3531
3532	if (intel_crtc->config->lane_count > 2) {
3533		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW9(ch));
3534		val &= ~(DPIO_PCS_TX1MARGIN_MASK | DPIO_PCS_TX2MARGIN_MASK);
3535		val |= DPIO_PCS_TX1MARGIN_000 | DPIO_PCS_TX2MARGIN_000;
3536		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW9(ch), val);
3537	}
3538
3539	/* Program swing deemph */
3540	for (i = 0; i < intel_crtc->config->lane_count; i++) {
3541		val = vlv_dpio_read(dev_priv, pipe, CHV_TX_DW4(ch, i));
3542		val &= ~DPIO_SWING_DEEMPH9P5_MASK;
3543		val |= deemph_reg_value << DPIO_SWING_DEEMPH9P5_SHIFT;
3544		vlv_dpio_write(dev_priv, pipe, CHV_TX_DW4(ch, i), val);
3545	}
3546
3547	/* Program swing margin */
3548	for (i = 0; i < intel_crtc->config->lane_count; i++) {
3549		val = vlv_dpio_read(dev_priv, pipe, CHV_TX_DW2(ch, i));
3550
3551		val &= ~DPIO_SWING_MARGIN000_MASK;
3552		val |= margin_reg_value << DPIO_SWING_MARGIN000_SHIFT;
3553
3554		/*
3555		 * Supposedly this value shouldn't matter when unique transition
3556		 * scale is disabled, but in fact it does matter. Let's just
3557		 * always program the same value and hope it's OK.
3558		 */
3559		val &= ~(0xff << DPIO_UNIQ_TRANS_SCALE_SHIFT);
3560		val |= 0x9a << DPIO_UNIQ_TRANS_SCALE_SHIFT;
3561
3562		vlv_dpio_write(dev_priv, pipe, CHV_TX_DW2(ch, i), val);
3563	}
3564
3565	/*
3566	 * The document said it needs to set bit 27 for ch0 and bit 26
3567	 * for ch1. Might be a typo in the doc.
3568	 * For now, for this unique transition scale selection, set bit
3569	 * 27 for ch0 and ch1.
3570	 */
3571	for (i = 0; i < intel_crtc->config->lane_count; i++) {
3572		val = vlv_dpio_read(dev_priv, pipe, CHV_TX_DW3(ch, i));
3573		if (chv_need_uniq_trans_scale(train_set))
3574			val |= DPIO_TX_UNIQ_TRANS_SCALE_EN;
3575		else
3576			val &= ~DPIO_TX_UNIQ_TRANS_SCALE_EN;
3577		vlv_dpio_write(dev_priv, pipe, CHV_TX_DW3(ch, i), val);
3578	}
3579
3580	/* Start swing calculation */
3581	val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW10(ch));
3582	val |= DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3;
3583	vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW10(ch), val);
3584
3585	if (intel_crtc->config->lane_count > 2) {
3586		val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW10(ch));
3587		val |= DPIO_PCS_SWING_CALC_TX0_TX2 | DPIO_PCS_SWING_CALC_TX1_TX3;
3588		vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW10(ch), val);
3589	}
3590
3591	mutex_unlock(&dev_priv->sb_lock);
3592
3593	return 0;
3594}
3595
3596static uint32_t
3597gen4_signal_levels(uint8_t train_set)
3598{
3599	uint32_t	signal_levels = 0;
3600
3601	switch (train_set & DP_TRAIN_VOLTAGE_SWING_MASK) {
3602	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0:
3603	default:
3604		signal_levels |= DP_VOLTAGE_0_4;
3605		break;
3606	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1:
3607		signal_levels |= DP_VOLTAGE_0_6;
3608		break;
3609	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2:
3610		signal_levels |= DP_VOLTAGE_0_8;
3611		break;
3612	case DP_TRAIN_VOLTAGE_SWING_LEVEL_3:
3613		signal_levels |= DP_VOLTAGE_1_2;
3614		break;
3615	}
3616	switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) {
3617	case DP_TRAIN_PRE_EMPH_LEVEL_0:
3618	default:
3619		signal_levels |= DP_PRE_EMPHASIS_0;
3620		break;
3621	case DP_TRAIN_PRE_EMPH_LEVEL_1:
3622		signal_levels |= DP_PRE_EMPHASIS_3_5;
3623		break;
3624	case DP_TRAIN_PRE_EMPH_LEVEL_2:
3625		signal_levels |= DP_PRE_EMPHASIS_6;
3626		break;
3627	case DP_TRAIN_PRE_EMPH_LEVEL_3:
3628		signal_levels |= DP_PRE_EMPHASIS_9_5;
3629		break;
3630	}
3631	return signal_levels;
3632}
3633
3634/* Gen6's DP voltage swing and pre-emphasis control */
3635static uint32_t
3636gen6_edp_signal_levels(uint8_t train_set)
3637{
3638	int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
3639					 DP_TRAIN_PRE_EMPHASIS_MASK);
3640	switch (signal_levels) {
3641	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_0:
3642	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_0:
3643		return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
3644	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_1:
3645		return EDP_LINK_TRAIN_400MV_3_5DB_SNB_B;
3646	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_2:
3647	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_2:
3648		return EDP_LINK_TRAIN_400_600MV_6DB_SNB_B;
3649	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_1:
3650	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_1:
3651		return EDP_LINK_TRAIN_600_800MV_3_5DB_SNB_B;
3652	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_0:
3653	case DP_TRAIN_VOLTAGE_SWING_LEVEL_3 | DP_TRAIN_PRE_EMPH_LEVEL_0:
3654		return EDP_LINK_TRAIN_800_1200MV_0DB_SNB_B;
3655	default:
3656		DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level:"
3657			      "0x%x\n", signal_levels);
3658		return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
3659	}
3660}
3661
3662/* Gen7's DP voltage swing and pre-emphasis control */
3663static uint32_t
3664gen7_edp_signal_levels(uint8_t train_set)
3665{
3666	int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
3667					 DP_TRAIN_PRE_EMPHASIS_MASK);
3668	switch (signal_levels) {
3669	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_0:
3670		return EDP_LINK_TRAIN_400MV_0DB_IVB;
3671	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_1:
3672		return EDP_LINK_TRAIN_400MV_3_5DB_IVB;
3673	case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_2:
3674		return EDP_LINK_TRAIN_400MV_6DB_IVB;
3675
3676	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_0:
3677		return EDP_LINK_TRAIN_600MV_0DB_IVB;
3678	case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_1:
3679		return EDP_LINK_TRAIN_600MV_3_5DB_IVB;
3680
3681	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_0:
3682		return EDP_LINK_TRAIN_800MV_0DB_IVB;
3683	case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_1:
3684		return EDP_LINK_TRAIN_800MV_3_5DB_IVB;
3685
3686	default:
3687		DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level:"
3688			      "0x%x\n", signal_levels);
3689		return EDP_LINK_TRAIN_500MV_0DB_IVB;
3690	}
3691}
3692
3693void
3694intel_dp_set_signal_levels(struct intel_dp *intel_dp)
3695{
3696	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
3697	enum port port = intel_dig_port->port;
3698	struct drm_device *dev = intel_dig_port->base.base.dev;
3699	struct drm_i915_private *dev_priv = to_i915(dev);
3700	uint32_t signal_levels, mask = 0;
3701	uint8_t train_set = intel_dp->train_set[0];
3702
3703	if (HAS_DDI(dev)) {
3704		signal_levels = ddi_signal_levels(intel_dp);
3705
3706		if (IS_BROXTON(dev))
3707			signal_levels = 0;
3708		else
3709			mask = DDI_BUF_EMP_MASK;
3710	} else if (IS_CHERRYVIEW(dev)) {
3711		signal_levels = chv_signal_levels(intel_dp);
3712	} else if (IS_VALLEYVIEW(dev)) {
3713		signal_levels = vlv_signal_levels(intel_dp);
3714	} else if (IS_GEN7(dev) && port == PORT_A) {
3715		signal_levels = gen7_edp_signal_levels(train_set);
3716		mask = EDP_LINK_TRAIN_VOL_EMP_MASK_IVB;
3717	} else if (IS_GEN6(dev) && port == PORT_A) {
3718		signal_levels = gen6_edp_signal_levels(train_set);
3719		mask = EDP_LINK_TRAIN_VOL_EMP_MASK_SNB;
3720	} else {
3721		signal_levels = gen4_signal_levels(train_set);
3722		mask = DP_VOLTAGE_MASK | DP_PRE_EMPHASIS_MASK;
3723	}
3724
3725	if (mask)
3726		DRM_DEBUG_KMS("Using signal levels %08x\n", signal_levels);
3727
3728	DRM_DEBUG_KMS("Using vswing level %d\n",
3729		train_set & DP_TRAIN_VOLTAGE_SWING_MASK);
3730	DRM_DEBUG_KMS("Using pre-emphasis level %d\n",
3731		(train_set & DP_TRAIN_PRE_EMPHASIS_MASK) >>
3732			DP_TRAIN_PRE_EMPHASIS_SHIFT);
3733
3734	intel_dp->DP = (intel_dp->DP & ~mask) | signal_levels;
3735
3736	I915_WRITE(intel_dp->output_reg, intel_dp->DP);
3737	POSTING_READ(intel_dp->output_reg);
3738}
3739
3740void
3741intel_dp_program_link_training_pattern(struct intel_dp *intel_dp,
3742				       uint8_t dp_train_pat)
3743{
3744	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
3745	struct drm_i915_private *dev_priv =
3746		to_i915(intel_dig_port->base.base.dev);
3747
3748	_intel_dp_set_link_train(intel_dp, &intel_dp->DP, dp_train_pat);
3749
3750	I915_WRITE(intel_dp->output_reg, intel_dp->DP);
3751	POSTING_READ(intel_dp->output_reg);
3752}
3753
3754void intel_dp_set_idle_link_train(struct intel_dp *intel_dp)
3755{
3756	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
3757	struct drm_device *dev = intel_dig_port->base.base.dev;
3758	struct drm_i915_private *dev_priv = dev->dev_private;
3759	enum port port = intel_dig_port->port;
3760	uint32_t val;
3761
3762	if (!HAS_DDI(dev))
3763		return;
3764
3765	val = I915_READ(DP_TP_CTL(port));
3766	val &= ~DP_TP_CTL_LINK_TRAIN_MASK;
3767	val |= DP_TP_CTL_LINK_TRAIN_IDLE;
3768	I915_WRITE(DP_TP_CTL(port), val);
3769
3770	/*
3771	 * On PORT_A we can have only eDP in SST mode. There the only reason
3772	 * we need to set idle transmission mode is to work around a HW issue
3773	 * where we enable the pipe while not in idle link-training mode.
3774	 * In this case there is requirement to wait for a minimum number of
3775	 * idle patterns to be sent.
3776	 */
3777	if (port == PORT_A)
3778		return;
3779
3780	if (wait_for((I915_READ(DP_TP_STATUS(port)) & DP_TP_STATUS_IDLE_DONE),
3781		     1))
3782		DRM_ERROR("Timed out waiting for DP idle patterns\n");
3783}
3784
3785static void
3786intel_dp_link_down(struct intel_dp *intel_dp)
3787{
3788	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
3789	struct intel_crtc *crtc = to_intel_crtc(intel_dig_port->base.base.crtc);
3790	enum port port = intel_dig_port->port;
3791	struct drm_device *dev = intel_dig_port->base.base.dev;
3792	struct drm_i915_private *dev_priv = dev->dev_private;
3793	uint32_t DP = intel_dp->DP;
3794
3795	if (WARN_ON(HAS_DDI(dev)))
3796		return;
3797
3798	if (WARN_ON((I915_READ(intel_dp->output_reg) & DP_PORT_EN) == 0))
3799		return;
3800
3801	DRM_DEBUG_KMS("\n");
3802
3803	if ((IS_GEN7(dev) && port == PORT_A) ||
3804	    (HAS_PCH_CPT(dev) && port != PORT_A)) {
3805		DP &= ~DP_LINK_TRAIN_MASK_CPT;
3806		DP |= DP_LINK_TRAIN_PAT_IDLE_CPT;
3807	} else {
3808		if (IS_CHERRYVIEW(dev))
3809			DP &= ~DP_LINK_TRAIN_MASK_CHV;
3810		else
3811			DP &= ~DP_LINK_TRAIN_MASK;
3812		DP |= DP_LINK_TRAIN_PAT_IDLE;
3813	}
3814	I915_WRITE(intel_dp->output_reg, DP);
3815	POSTING_READ(intel_dp->output_reg);
3816
3817	DP &= ~(DP_PORT_EN | DP_AUDIO_OUTPUT_ENABLE);
3818	I915_WRITE(intel_dp->output_reg, DP);
3819	POSTING_READ(intel_dp->output_reg);
3820
3821	/*
3822	 * HW workaround for IBX, we need to move the port
3823	 * to transcoder A after disabling it to allow the
3824	 * matching HDMI port to be enabled on transcoder A.
3825	 */
3826	if (HAS_PCH_IBX(dev) && crtc->pipe == PIPE_B && port != PORT_A) {
3827		/*
3828		 * We get CPU/PCH FIFO underruns on the other pipe when
3829		 * doing the workaround. Sweep them under the rug.
3830		 */
3831		intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, false);
3832		intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, false);
3833
3834		/* always enable with pattern 1 (as per spec) */
3835		DP &= ~(DP_PIPEB_SELECT | DP_LINK_TRAIN_MASK);
3836		DP |= DP_PORT_EN | DP_LINK_TRAIN_PAT_1;
3837		I915_WRITE(intel_dp->output_reg, DP);
3838		POSTING_READ(intel_dp->output_reg);
3839
3840		DP &= ~DP_PORT_EN;
3841		I915_WRITE(intel_dp->output_reg, DP);
3842		POSTING_READ(intel_dp->output_reg);
3843
3844		intel_wait_for_vblank_if_active(dev_priv->dev, PIPE_A);
3845		intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true);
3846		intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
3847	}
3848
3849	msleep(intel_dp->panel_power_down_delay);
3850
3851	intel_dp->DP = DP;
3852}
3853
3854static bool
3855intel_dp_get_dpcd(struct intel_dp *intel_dp)
3856{
3857	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3858	struct drm_device *dev = dig_port->base.base.dev;
3859	struct drm_i915_private *dev_priv = dev->dev_private;
3860	uint8_t rev;
3861
3862	if (intel_dp_dpcd_read_wake(&intel_dp->aux, 0x000, intel_dp->dpcd,
3863				    sizeof(intel_dp->dpcd)) < 0)
3864		return false; /* aux transfer failed */
3865
3866	DRM_DEBUG_KMS("DPCD: %*ph\n", (int) sizeof(intel_dp->dpcd), intel_dp->dpcd);
3867
3868	if (intel_dp->dpcd[DP_DPCD_REV] == 0)
3869		return false; /* DPCD not present */
3870
3871	/* Check if the panel supports PSR */
3872	memset(intel_dp->psr_dpcd, 0, sizeof(intel_dp->psr_dpcd));
3873	if (is_edp(intel_dp)) {
3874		intel_dp_dpcd_read_wake(&intel_dp->aux, DP_PSR_SUPPORT,
3875					intel_dp->psr_dpcd,
3876					sizeof(intel_dp->psr_dpcd));
3877		if (intel_dp->psr_dpcd[0] & DP_PSR_IS_SUPPORTED) {
3878			dev_priv->psr.sink_support = true;
3879			DRM_DEBUG_KMS("Detected EDP PSR Panel.\n");
3880		}
3881
3882		if (INTEL_INFO(dev)->gen >= 9 &&
3883			(intel_dp->psr_dpcd[0] & DP_PSR2_IS_SUPPORTED)) {
3884			uint8_t frame_sync_cap;
3885
3886			dev_priv->psr.sink_support = true;
3887			intel_dp_dpcd_read_wake(&intel_dp->aux,
3888					DP_SINK_DEVICE_AUX_FRAME_SYNC_CAP,
3889					&frame_sync_cap, 1);
3890			dev_priv->psr.aux_frame_sync = frame_sync_cap ? true : false;
3891			/* PSR2 needs frame sync as well */
3892			dev_priv->psr.psr2_support = dev_priv->psr.aux_frame_sync;
3893			DRM_DEBUG_KMS("PSR2 %s on sink",
3894				dev_priv->psr.psr2_support ? "supported" : "not supported");
3895		}
3896	}
3897
3898	DRM_DEBUG_KMS("Display Port TPS3 support: source %s, sink %s\n",
3899		      yesno(intel_dp_source_supports_hbr2(intel_dp)),
3900		      yesno(drm_dp_tps3_supported(intel_dp->dpcd)));
3901
3902	/* Intermediate frequency support */
3903	if (is_edp(intel_dp) &&
3904	    (intel_dp->dpcd[DP_EDP_CONFIGURATION_CAP] &	DP_DPCD_DISPLAY_CONTROL_CAPABLE) &&
3905	    (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_EDP_DPCD_REV, &rev, 1) == 1) &&
3906	    (rev >= 0x03)) { /* eDp v1.4 or higher */
3907		__le16 sink_rates[DP_MAX_SUPPORTED_RATES];
3908		int i;
3909
3910		intel_dp_dpcd_read_wake(&intel_dp->aux,
3911				DP_SUPPORTED_LINK_RATES,
3912				sink_rates,
3913				sizeof(sink_rates));
3914
3915		for (i = 0; i < ARRAY_SIZE(sink_rates); i++) {
3916			int val = le16_to_cpu(sink_rates[i]);
3917
3918			if (val == 0)
3919				break;
3920
3921			/* Value read is in kHz while drm clock is saved in deca-kHz */
3922			intel_dp->sink_rates[i] = (val * 200) / 10;
3923		}
3924		intel_dp->num_sink_rates = i;
3925	}
3926
3927	intel_dp_print_rates(intel_dp);
3928
3929	if (!(intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] &
3930	      DP_DWN_STRM_PORT_PRESENT))
3931		return true; /* native DP sink */
3932
3933	if (intel_dp->dpcd[DP_DPCD_REV] == 0x10)
3934		return true; /* no per-port downstream info */
3935
3936	if (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_DOWNSTREAM_PORT_0,
3937				    intel_dp->downstream_ports,
3938				    DP_MAX_DOWNSTREAM_PORTS) < 0)
3939		return false; /* downstream port status fetch failed */
3940
3941	return true;
3942}
3943
3944static void
3945intel_dp_probe_oui(struct intel_dp *intel_dp)
3946{
3947	u8 buf[3];
3948
3949	if (!(intel_dp->dpcd[DP_DOWN_STREAM_PORT_COUNT] & DP_OUI_SUPPORT))
3950		return;
3951
3952	if (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_SINK_OUI, buf, 3) == 3)
3953		DRM_DEBUG_KMS("Sink OUI: %02hx%02hx%02hx\n",
3954			      buf[0], buf[1], buf[2]);
3955
3956	if (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_BRANCH_OUI, buf, 3) == 3)
3957		DRM_DEBUG_KMS("Branch OUI: %02hx%02hx%02hx\n",
3958			      buf[0], buf[1], buf[2]);
3959}
3960
3961static bool
3962intel_dp_probe_mst(struct intel_dp *intel_dp)
3963{
3964	u8 buf[1];
3965
3966	if (!intel_dp->can_mst)
3967		return false;
3968
3969	if (intel_dp->dpcd[DP_DPCD_REV] < 0x12)
3970		return false;
3971
3972	if (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_MSTM_CAP, buf, 1)) {
3973		if (buf[0] & DP_MST_CAP) {
3974			DRM_DEBUG_KMS("Sink is MST capable\n");
3975			intel_dp->is_mst = true;
3976		} else {
3977			DRM_DEBUG_KMS("Sink is not MST capable\n");
3978			intel_dp->is_mst = false;
3979		}
3980	}
3981
3982	drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr, intel_dp->is_mst);
3983	return intel_dp->is_mst;
3984}
3985
3986static int intel_dp_sink_crc_stop(struct intel_dp *intel_dp)
3987{
3988	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3989	struct drm_device *dev = dig_port->base.base.dev;
3990	struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc);
3991	u8 buf;
3992	int ret = 0;
3993	int count = 0;
3994	int attempts = 10;
3995
3996	if (drm_dp_dpcd_readb(&intel_dp->aux, DP_TEST_SINK, &buf) < 0) {
3997		DRM_DEBUG_KMS("Sink CRC couldn't be stopped properly\n");
3998		ret = -EIO;
3999		goto out;
4000	}
4001
4002	if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_TEST_SINK,
4003			       buf & ~DP_TEST_SINK_START) < 0) {
4004		DRM_DEBUG_KMS("Sink CRC couldn't be stopped properly\n");
4005		ret = -EIO;
4006		goto out;
4007	}
4008
4009	do {
4010		intel_wait_for_vblank(dev, intel_crtc->pipe);
4011
4012		if (drm_dp_dpcd_readb(&intel_dp->aux,
4013				      DP_TEST_SINK_MISC, &buf) < 0) {
4014			ret = -EIO;
4015			goto out;
4016		}
4017		count = buf & DP_TEST_COUNT_MASK;
4018	} while (--attempts && count);
4019
4020	if (attempts == 0) {
4021		DRM_DEBUG_KMS("TIMEOUT: Sink CRC counter is not zeroed after calculation is stopped\n");
4022		ret = -ETIMEDOUT;
4023	}
4024
4025 out:
4026	hsw_enable_ips(intel_crtc);
4027	return ret;
4028}
4029
4030static int intel_dp_sink_crc_start(struct intel_dp *intel_dp)
4031{
4032	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
4033	struct drm_device *dev = dig_port->base.base.dev;
4034	struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc);
4035	u8 buf;
4036	int ret;
4037
4038	if (drm_dp_dpcd_readb(&intel_dp->aux, DP_TEST_SINK_MISC, &buf) < 0)
4039		return -EIO;
4040
4041	if (!(buf & DP_TEST_CRC_SUPPORTED))
4042		return -ENOTTY;
4043
4044	if (drm_dp_dpcd_readb(&intel_dp->aux, DP_TEST_SINK, &buf) < 0)
4045		return -EIO;
4046
4047	if (buf & DP_TEST_SINK_START) {
4048		ret = intel_dp_sink_crc_stop(intel_dp);
4049		if (ret)
4050			return ret;
4051	}
4052
4053	hsw_disable_ips(intel_crtc);
4054
4055	if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_TEST_SINK,
4056			       buf | DP_TEST_SINK_START) < 0) {
4057		hsw_enable_ips(intel_crtc);
4058		return -EIO;
4059	}
4060
4061	intel_wait_for_vblank(dev, intel_crtc->pipe);
4062	return 0;
4063}
4064
4065int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
4066{
4067	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
4068	struct drm_device *dev = dig_port->base.base.dev;
4069	struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc);
4070	u8 buf;
4071	int count, ret;
4072	int attempts = 6;
4073
4074	ret = intel_dp_sink_crc_start(intel_dp);
4075	if (ret)
4076		return ret;
4077
4078	do {
4079		intel_wait_for_vblank(dev, intel_crtc->pipe);
4080
4081		if (drm_dp_dpcd_readb(&intel_dp->aux,
4082				      DP_TEST_SINK_MISC, &buf) < 0) {
4083			ret = -EIO;
4084			goto stop;
4085		}
4086		count = buf & DP_TEST_COUNT_MASK;
4087
4088	} while (--attempts && count == 0);
4089
4090	if (attempts == 0) {
4091		DRM_ERROR("Panel is unable to calculate any CRC after 6 vblanks\n");
4092		ret = -ETIMEDOUT;
4093		goto stop;
4094	}
4095
4096	if (drm_dp_dpcd_read(&intel_dp->aux, DP_TEST_CRC_R_CR, crc, 6) < 0) {
4097		ret = -EIO;
4098		goto stop;
4099	}
4100
4101stop:
4102	intel_dp_sink_crc_stop(intel_dp);
4103	return ret;
4104}
4105
4106static bool
4107intel_dp_get_sink_irq(struct intel_dp *intel_dp, u8 *sink_irq_vector)
4108{
4109	return intel_dp_dpcd_read_wake(&intel_dp->aux,
4110				       DP_DEVICE_SERVICE_IRQ_VECTOR,
4111				       sink_irq_vector, 1) == 1;
4112}
4113
4114static bool
4115intel_dp_get_sink_irq_esi(struct intel_dp *intel_dp, u8 *sink_irq_vector)
4116{
4117	int ret;
4118
4119	ret = intel_dp_dpcd_read_wake(&intel_dp->aux,
4120					     DP_SINK_COUNT_ESI,
4121					     sink_irq_vector, 14);
4122	if (ret != 14)
4123		return false;
4124
4125	return true;
4126}
4127
4128static uint8_t intel_dp_autotest_link_training(struct intel_dp *intel_dp)
4129{
4130	uint8_t test_result = DP_TEST_ACK;
4131	return test_result;
4132}
4133
4134static uint8_t intel_dp_autotest_video_pattern(struct intel_dp *intel_dp)
4135{
4136	uint8_t test_result = DP_TEST_NAK;
4137	return test_result;
4138}
4139
4140static uint8_t intel_dp_autotest_edid(struct intel_dp *intel_dp)
4141{
4142	uint8_t test_result = DP_TEST_NAK;
4143	struct intel_connector *intel_connector = intel_dp->attached_connector;
4144	struct drm_connector *connector = &intel_connector->base;
4145
4146	if (intel_connector->detect_edid == NULL ||
4147	    connector->edid_corrupt ||
4148	    intel_dp->aux.i2c_defer_count > 6) {
4149		/* Check EDID read for NACKs, DEFERs and corruption
4150		 * (DP CTS 1.2 Core r1.1)
4151		 *    4.2.2.4 : Failed EDID read, I2C_NAK
4152		 *    4.2.2.5 : Failed EDID read, I2C_DEFER
4153		 *    4.2.2.6 : EDID corruption detected
4154		 * Use failsafe mode for all cases
4155		 */
4156		if (intel_dp->aux.i2c_nack_count > 0 ||
4157			intel_dp->aux.i2c_defer_count > 0)
4158			DRM_DEBUG_KMS("EDID read had %d NACKs, %d DEFERs\n",
4159				      intel_dp->aux.i2c_nack_count,
4160				      intel_dp->aux.i2c_defer_count);
4161		intel_dp->compliance_test_data = INTEL_DP_RESOLUTION_FAILSAFE;
4162	} else {
4163		struct edid *block = intel_connector->detect_edid;
4164
4165		/* We have to write the checksum
4166		 * of the last block read
4167		 */
4168		block += intel_connector->detect_edid->extensions;
4169
4170		if (!drm_dp_dpcd_write(&intel_dp->aux,
4171					DP_TEST_EDID_CHECKSUM,
4172					&block->checksum,
4173					1))
4174			DRM_DEBUG_KMS("Failed to write EDID checksum\n");
4175
4176		test_result = DP_TEST_ACK | DP_TEST_EDID_CHECKSUM_WRITE;
4177		intel_dp->compliance_test_data = INTEL_DP_RESOLUTION_STANDARD;
4178	}
4179
4180	/* Set test active flag here so userspace doesn't interrupt things */
4181	intel_dp->compliance_test_active = 1;
4182
4183	return test_result;
4184}
4185
4186static uint8_t intel_dp_autotest_phy_pattern(struct intel_dp *intel_dp)
4187{
4188	uint8_t test_result = DP_TEST_NAK;
4189	return test_result;
4190}
4191
4192static void intel_dp_handle_test_request(struct intel_dp *intel_dp)
4193{
4194	uint8_t response = DP_TEST_NAK;
4195	uint8_t rxdata = 0;
4196	int status = 0;
4197
4198	status = drm_dp_dpcd_read(&intel_dp->aux, DP_TEST_REQUEST, &rxdata, 1);
4199	if (status <= 0) {
4200		DRM_DEBUG_KMS("Could not read test request from sink\n");
4201		goto update_status;
4202	}
4203
4204	switch (rxdata) {
4205	case DP_TEST_LINK_TRAINING:
4206		DRM_DEBUG_KMS("LINK_TRAINING test requested\n");
4207		intel_dp->compliance_test_type = DP_TEST_LINK_TRAINING;
4208		response = intel_dp_autotest_link_training(intel_dp);
4209		break;
4210	case DP_TEST_LINK_VIDEO_PATTERN:
4211		DRM_DEBUG_KMS("TEST_PATTERN test requested\n");
4212		intel_dp->compliance_test_type = DP_TEST_LINK_VIDEO_PATTERN;
4213		response = intel_dp_autotest_video_pattern(intel_dp);
4214		break;
4215	case DP_TEST_LINK_EDID_READ:
4216		DRM_DEBUG_KMS("EDID test requested\n");
4217		intel_dp->compliance_test_type = DP_TEST_LINK_EDID_READ;
4218		response = intel_dp_autotest_edid(intel_dp);
4219		break;
4220	case DP_TEST_LINK_PHY_TEST_PATTERN:
4221		DRM_DEBUG_KMS("PHY_PATTERN test requested\n");
4222		intel_dp->compliance_test_type = DP_TEST_LINK_PHY_TEST_PATTERN;
4223		response = intel_dp_autotest_phy_pattern(intel_dp);
4224		break;
4225	default:
4226		DRM_DEBUG_KMS("Invalid test request '%02x'\n", rxdata);
4227		break;
4228	}
4229
4230update_status:
4231	status = drm_dp_dpcd_write(&intel_dp->aux,
4232				   DP_TEST_RESPONSE,
4233				   &response, 1);
4234	if (status <= 0)
4235		DRM_DEBUG_KMS("Could not write test response to sink\n");
4236}
4237
4238static int
4239intel_dp_check_mst_status(struct intel_dp *intel_dp)
4240{
4241	bool bret;
4242
4243	if (intel_dp->is_mst) {
4244		u8 esi[16] = { 0 };
4245		int ret = 0;
4246		int retry;
4247		bool handled;
4248		bret = intel_dp_get_sink_irq_esi(intel_dp, esi);
4249go_again:
4250		if (bret == true) {
4251
4252			/* check link status - esi[10] = 0x200c */
4253			if (intel_dp->active_mst_links &&
4254			    !drm_dp_channel_eq_ok(&esi[10], intel_dp->lane_count)) {
4255				DRM_DEBUG_KMS("channel EQ not ok, retraining\n");
4256				intel_dp_start_link_train(intel_dp);
4257				intel_dp_stop_link_train(intel_dp);
4258			}
4259
4260			DRM_DEBUG_KMS("got esi %3ph\n", esi);
4261			ret = drm_dp_mst_hpd_irq(&intel_dp->mst_mgr, esi, &handled);
4262
4263			if (handled) {
4264				for (retry = 0; retry < 3; retry++) {
4265					int wret;
4266					wret = drm_dp_dpcd_write(&intel_dp->aux,
4267								 DP_SINK_COUNT_ESI+1,
4268								 &esi[1], 3);
4269					if (wret == 3) {
4270						break;
4271					}
4272				}
4273
4274				bret = intel_dp_get_sink_irq_esi(intel_dp, esi);
4275				if (bret == true) {
4276					DRM_DEBUG_KMS("got esi2 %3ph\n", esi);
4277					goto go_again;
4278				}
4279			} else
4280				ret = 0;
4281
4282			return ret;
4283		} else {
4284			struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
4285			DRM_DEBUG_KMS("failed to get ESI - device may have failed\n");
4286			intel_dp->is_mst = false;
4287			drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr, intel_dp->is_mst);
4288			/* send a hotplug event */
4289			drm_kms_helper_hotplug_event(intel_dig_port->base.base.dev);
4290		}
4291	}
4292	return -EINVAL;
4293}
4294
4295/*
4296 * According to DP spec
4297 * 5.1.2:
4298 *  1. Read DPCD
4299 *  2. Configure link according to Receiver Capabilities
4300 *  3. Use Link Training from 2.5.3.3 and 3.5.1.3
4301 *  4. Check link status on receipt of hot-plug interrupt
4302 */
4303static void
4304intel_dp_check_link_status(struct intel_dp *intel_dp)
4305{
4306	struct drm_device *dev = intel_dp_to_dev(intel_dp);
4307	struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
4308	u8 sink_irq_vector;
4309	u8 link_status[DP_LINK_STATUS_SIZE];
4310
4311	WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex));
4312
4313	/*
4314	 * Clearing compliance test variables to allow capturing
4315	 * of values for next automated test request.
4316	 */
4317	intel_dp->compliance_test_active = 0;
4318	intel_dp->compliance_test_type = 0;
4319	intel_dp->compliance_test_data = 0;
4320
4321	if (!intel_encoder->base.crtc)
4322		return;
4323
4324	if (!to_intel_crtc(intel_encoder->base.crtc)->active)
4325		return;
4326
4327	/* Try to read receiver status if the link appears to be up */
4328	if (!intel_dp_get_link_status(intel_dp, link_status)) {
4329		return;
4330	}
4331
4332	/* Now read the DPCD to see if it's actually running */
4333	if (!intel_dp_get_dpcd(intel_dp)) {
4334		return;
4335	}
4336
4337	/* Try to read the source of the interrupt */
4338	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
4339	    intel_dp_get_sink_irq(intel_dp, &sink_irq_vector)) {
4340		/* Clear interrupt source */
4341		drm_dp_dpcd_writeb(&intel_dp->aux,
4342				   DP_DEVICE_SERVICE_IRQ_VECTOR,
4343				   sink_irq_vector);
4344
4345		if (sink_irq_vector & DP_AUTOMATED_TEST_REQUEST)
4346			DRM_DEBUG_DRIVER("Test request in short pulse not handled\n");
4347		if (sink_irq_vector & (DP_CP_IRQ | DP_SINK_SPECIFIC_IRQ))
4348			DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n");
4349	}
4350
4351	/* if link training is requested we should perform it always */
4352	if ((intel_dp->compliance_test_type == DP_TEST_LINK_TRAINING) ||
4353		(!drm_dp_channel_eq_ok(link_status, intel_dp->lane_count))) {
4354		DRM_DEBUG_KMS("%s: channel EQ not ok, retraining\n",
4355			      intel_encoder->base.name);
4356		intel_dp_start_link_train(intel_dp);
4357		intel_dp_stop_link_train(intel_dp);
4358	}
4359}
4360
4361/* XXX this is probably wrong for multiple downstream ports */
4362static enum drm_connector_status
4363intel_dp_detect_dpcd(struct intel_dp *intel_dp)
4364{
4365	uint8_t *dpcd = intel_dp->dpcd;
4366	uint8_t type;
4367
4368	if (!intel_dp_get_dpcd(intel_dp))
4369		return connector_status_disconnected;
4370
4371	/* if there's no downstream port, we're done */
4372	if (!(dpcd[DP_DOWNSTREAMPORT_PRESENT] & DP_DWN_STRM_PORT_PRESENT))
4373		return connector_status_connected;
4374
4375	/* If we're HPD-aware, SINK_COUNT changes dynamically */
4376	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
4377	    intel_dp->downstream_ports[0] & DP_DS_PORT_HPD) {
4378		uint8_t reg;
4379
4380		if (intel_dp_dpcd_read_wake(&intel_dp->aux, DP_SINK_COUNT,
4381					    &reg, 1) < 0)
4382			return connector_status_unknown;
4383
4384		return DP_GET_SINK_COUNT(reg) ? connector_status_connected
4385					      : connector_status_disconnected;
4386	}
4387
4388	/* If no HPD, poke DDC gently */
4389	if (drm_probe_ddc(&intel_dp->aux.ddc))
4390		return connector_status_connected;
4391
4392	/* Well we tried, say unknown for unreliable port types */
4393	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11) {
4394		type = intel_dp->downstream_ports[0] & DP_DS_PORT_TYPE_MASK;
4395		if (type == DP_DS_PORT_TYPE_VGA ||
4396		    type == DP_DS_PORT_TYPE_NON_EDID)
4397			return connector_status_unknown;
4398	} else {
4399		type = intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] &
4400			DP_DWN_STRM_PORT_TYPE_MASK;
4401		if (type == DP_DWN_STRM_PORT_TYPE_ANALOG ||
4402		    type == DP_DWN_STRM_PORT_TYPE_OTHER)
4403			return connector_status_unknown;
4404	}
4405
4406	/* Anything else is out of spec, warn and ignore */
4407	DRM_DEBUG_KMS("Broken DP branch device, ignoring\n");
4408	return connector_status_disconnected;
4409}
4410
4411static enum drm_connector_status
4412edp_detect(struct intel_dp *intel_dp)
4413{
4414	struct drm_device *dev = intel_dp_to_dev(intel_dp);
4415	enum drm_connector_status status;
4416
4417	status = intel_panel_detect(dev);
4418	if (status == connector_status_unknown)
4419		status = connector_status_connected;
4420
4421	return status;
4422}
4423
4424static bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
4425				       struct intel_digital_port *port)
4426{
4427	u32 bit;
4428
4429	switch (port->port) {
4430	case PORT_A:
4431		return true;
4432	case PORT_B:
4433		bit = SDE_PORTB_HOTPLUG;
4434		break;
4435	case PORT_C:
4436		bit = SDE_PORTC_HOTPLUG;
4437		break;
4438	case PORT_D:
4439		bit = SDE_PORTD_HOTPLUG;
4440		break;
4441	default:
4442		MISSING_CASE(port->port);
4443		return false;
4444	}
4445
4446	return I915_READ(SDEISR) & bit;
4447}
4448
4449static bool cpt_digital_port_connected(struct drm_i915_private *dev_priv,
4450				       struct intel_digital_port *port)
4451{
4452	u32 bit;
4453
4454	switch (port->port) {
4455	case PORT_A:
4456		return true;
4457	case PORT_B:
4458		bit = SDE_PORTB_HOTPLUG_CPT;
4459		break;
4460	case PORT_C:
4461		bit = SDE_PORTC_HOTPLUG_CPT;
4462		break;
4463	case PORT_D:
4464		bit = SDE_PORTD_HOTPLUG_CPT;
4465		break;
4466	case PORT_E:
4467		bit = SDE_PORTE_HOTPLUG_SPT;
4468		break;
4469	default:
4470		MISSING_CASE(port->port);
4471		return false;
4472	}
4473
4474	return I915_READ(SDEISR) & bit;
4475}
4476
4477static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv,
4478				       struct intel_digital_port *port)
4479{
4480	u32 bit;
4481
4482	switch (port->port) {
4483	case PORT_B:
4484		bit = PORTB_HOTPLUG_LIVE_STATUS_G4X;
4485		break;
4486	case PORT_C:
4487		bit = PORTC_HOTPLUG_LIVE_STATUS_G4X;
4488		break;
4489	case PORT_D:
4490		bit = PORTD_HOTPLUG_LIVE_STATUS_G4X;
4491		break;
4492	default:
4493		MISSING_CASE(port->port);
4494		return false;
4495	}
4496
4497	return I915_READ(PORT_HOTPLUG_STAT) & bit;
4498}
4499
4500static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
4501					struct intel_digital_port *port)
4502{
4503	u32 bit;
4504
4505	switch (port->port) {
4506	case PORT_B:
4507		bit = PORTB_HOTPLUG_LIVE_STATUS_GM45;
4508		break;
4509	case PORT_C:
4510		bit = PORTC_HOTPLUG_LIVE_STATUS_GM45;
4511		break;
4512	case PORT_D:
4513		bit = PORTD_HOTPLUG_LIVE_STATUS_GM45;
4514		break;
4515	default:
4516		MISSING_CASE(port->port);
4517		return false;
4518	}
4519
4520	return I915_READ(PORT_HOTPLUG_STAT) & bit;
4521}
4522
4523static bool bxt_digital_port_connected(struct drm_i915_private *dev_priv,
4524				       struct intel_digital_port *intel_dig_port)
4525{
4526	struct intel_encoder *intel_encoder = &intel_dig_port->base;
4527	enum port port;
4528	u32 bit;
4529
4530	intel_hpd_pin_to_port(intel_encoder->hpd_pin, &port);
4531	switch (port) {
4532	case PORT_A:
4533		bit = BXT_DE_PORT_HP_DDIA;
4534		break;
4535	case PORT_B:
4536		bit = BXT_DE_PORT_HP_DDIB;
4537		break;
4538	case PORT_C:
4539		bit = BXT_DE_PORT_HP_DDIC;
4540		break;
4541	default:
4542		MISSING_CASE(port);
4543		return false;
4544	}
4545
4546	return I915_READ(GEN8_DE_PORT_ISR) & bit;
4547}
4548
4549/*
4550 * intel_digital_port_connected - is the specified port connected?
4551 * @dev_priv: i915 private structure
4552 * @port: the port to test
4553 *
4554 * Return %true if @port is connected, %false otherwise.
4555 */
4556bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
4557					 struct intel_digital_port *port)
4558{
4559	if (HAS_PCH_IBX(dev_priv))
4560		return ibx_digital_port_connected(dev_priv, port);
4561	else if (HAS_PCH_SPLIT(dev_priv))
4562		return cpt_digital_port_connected(dev_priv, port);
4563	else if (IS_BROXTON(dev_priv))
4564		return bxt_digital_port_connected(dev_priv, port);
4565	else if (IS_GM45(dev_priv))
4566		return gm45_digital_port_connected(dev_priv, port);
4567	else
4568		return g4x_digital_port_connected(dev_priv, port);
4569}
4570
4571static struct edid *
4572intel_dp_get_edid(struct intel_dp *intel_dp)
4573{
4574	struct intel_connector *intel_connector = intel_dp->attached_connector;
4575
4576	/* use cached edid if we have one */
4577	if (intel_connector->edid) {
4578		/* invalid edid */
4579		if (IS_ERR(intel_connector->edid))
4580			return NULL;
4581
4582		return drm_edid_duplicate(intel_connector->edid);
4583	} else
4584		return drm_get_edid(&intel_connector->base,
4585				    &intel_dp->aux.ddc);
4586}
4587
4588static void
4589intel_dp_set_edid(struct intel_dp *intel_dp)
4590{
4591	struct intel_connector *intel_connector = intel_dp->attached_connector;
4592	struct edid *edid;
4593
4594	edid = intel_dp_get_edid(intel_dp);
4595	intel_connector->detect_edid = edid;
4596
4597	if (intel_dp->force_audio != HDMI_AUDIO_AUTO)
4598		intel_dp->has_audio = intel_dp->force_audio == HDMI_AUDIO_ON;
4599	else
4600		intel_dp->has_audio = drm_detect_monitor_audio(edid);
4601}
4602
4603static void
4604intel_dp_unset_edid(struct intel_dp *intel_dp)
4605{
4606	struct intel_connector *intel_connector = intel_dp->attached_connector;
4607
4608	kfree(intel_connector->detect_edid);
4609	intel_connector->detect_edid = NULL;
4610
4611	intel_dp->has_audio = false;
4612}
4613
4614static enum drm_connector_status
4615intel_dp_detect(struct drm_connector *connector, bool force)
4616{
4617	struct intel_dp *intel_dp = intel_attached_dp(connector);
4618	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
4619	struct intel_encoder *intel_encoder = &intel_dig_port->base;
4620	struct drm_device *dev = connector->dev;
4621	enum drm_connector_status status;
4622	enum intel_display_power_domain power_domain;
4623	bool ret;
4624	u8 sink_irq_vector;
4625
4626	DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
4627		      connector->base.id, connector->name);
4628	intel_dp_unset_edid(intel_dp);
4629
4630	if (intel_dp->is_mst) {
4631		/* MST devices are disconnected from a monitor POV */
4632		if (intel_encoder->type != INTEL_OUTPUT_EDP)
4633			intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
4634		return connector_status_disconnected;
4635	}
4636
4637	power_domain = intel_display_port_aux_power_domain(intel_encoder);
4638	intel_display_power_get(to_i915(dev), power_domain);
4639
4640	/* Can't disconnect eDP, but you can close the lid... */
4641	if (is_edp(intel_dp))
4642		status = edp_detect(intel_dp);
4643	else if (intel_digital_port_connected(to_i915(dev),
4644					      dp_to_dig_port(intel_dp)))
4645		status = intel_dp_detect_dpcd(intel_dp);
4646	else
4647		status = connector_status_disconnected;
4648
4649	if (status != connector_status_connected) {
4650		intel_dp->compliance_test_active = 0;
4651		intel_dp->compliance_test_type = 0;
4652		intel_dp->compliance_test_data = 0;
4653
4654		goto out;
4655	}
4656
4657	intel_dp_probe_oui(intel_dp);
4658
4659	ret = intel_dp_probe_mst(intel_dp);
4660	if (ret) {
4661		/* if we are in MST mode then this connector
4662		   won't appear connected or have anything with EDID on it */
4663		if (intel_encoder->type != INTEL_OUTPUT_EDP)
4664			intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
4665		status = connector_status_disconnected;
4666		goto out;
4667	}
4668
4669	/*
4670	 * Clearing NACK and defer counts to get their exact values
4671	 * while reading EDID which are required by Compliance tests
4672	 * 4.2.2.4 and 4.2.2.5
4673	 */
4674	intel_dp->aux.i2c_nack_count = 0;
4675	intel_dp->aux.i2c_defer_count = 0;
4676
4677	intel_dp_set_edid(intel_dp);
4678
4679	if (intel_encoder->type != INTEL_OUTPUT_EDP)
4680		intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
4681	status = connector_status_connected;
4682
4683	/* Try to read the source of the interrupt */
4684	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
4685	    intel_dp_get_sink_irq(intel_dp, &sink_irq_vector)) {
4686		/* Clear interrupt source */
4687		drm_dp_dpcd_writeb(&intel_dp->aux,
4688				   DP_DEVICE_SERVICE_IRQ_VECTOR,
4689				   sink_irq_vector);
4690
4691		if (sink_irq_vector & DP_AUTOMATED_TEST_REQUEST)
4692			intel_dp_handle_test_request(intel_dp);
4693		if (sink_irq_vector & (DP_CP_IRQ | DP_SINK_SPECIFIC_IRQ))
4694			DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n");
4695	}
4696
4697out:
4698	intel_display_power_put(to_i915(dev), power_domain);
4699	return status;
4700}
4701
4702static void
4703intel_dp_force(struct drm_connector *connector)
4704{
4705	struct intel_dp *intel_dp = intel_attached_dp(connector);
4706	struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
4707	struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
4708	enum intel_display_power_domain power_domain;
4709
4710	DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
4711		      connector->base.id, connector->name);
4712	intel_dp_unset_edid(intel_dp);
4713
4714	if (connector->status != connector_status_connected)
4715		return;
4716
4717	power_domain = intel_display_port_aux_power_domain(intel_encoder);
4718	intel_display_power_get(dev_priv, power_domain);
4719
4720	intel_dp_set_edid(intel_dp);
4721
4722	intel_display_power_put(dev_priv, power_domain);
4723
4724	if (intel_encoder->type != INTEL_OUTPUT_EDP)
4725		intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
4726}
4727
4728static int intel_dp_get_modes(struct drm_connector *connector)
4729{
4730	struct intel_connector *intel_connector = to_intel_connector(connector);
4731	struct edid *edid;
4732
4733	edid = intel_connector->detect_edid;
4734	if (edid) {
4735		int ret = intel_connector_update_modes(connector, edid);
4736		if (ret)
4737			return ret;
4738	}
4739
4740	/* if eDP has no EDID, fall back to fixed mode */
4741	if (is_edp(intel_attached_dp(connector)) &&
4742	    intel_connector->panel.fixed_mode) {
4743		struct drm_display_mode *mode;
4744
4745		mode = drm_mode_duplicate(connector->dev,
4746					  intel_connector->panel.fixed_mode);
4747		if (mode) {
4748			drm_mode_probed_add(connector, mode);
4749			return 1;
4750		}
4751	}
4752
4753	return 0;
4754}
4755
4756static bool
4757intel_dp_detect_audio(struct drm_connector *connector)
4758{
4759	bool has_audio = false;
4760	struct edid *edid;
4761
4762	edid = to_intel_connector(connector)->detect_edid;
4763	if (edid)
4764		has_audio = drm_detect_monitor_audio(edid);
4765
4766	return has_audio;
4767}
4768
4769static int
4770intel_dp_set_property(struct drm_connector *connector,
4771		      struct drm_property *property,
4772		      uint64_t val)
4773{
4774	struct drm_i915_private *dev_priv = connector->dev->dev_private;
4775	struct intel_connector *intel_connector = to_intel_connector(connector);
4776	struct intel_encoder *intel_encoder = intel_attached_encoder(connector);
4777	struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
4778	int ret;
4779
4780	ret = drm_object_property_set_value(&connector->base, property, val);
4781	if (ret)
4782		return ret;
4783
4784	if (property == dev_priv->force_audio_property) {
4785		int i = val;
4786		bool has_audio;
4787
4788		if (i == intel_dp->force_audio)
4789			return 0;
4790
4791		intel_dp->force_audio = i;
4792
4793		if (i == HDMI_AUDIO_AUTO)
4794			has_audio = intel_dp_detect_audio(connector);
4795		else
4796			has_audio = (i == HDMI_AUDIO_ON);
4797
4798		if (has_audio == intel_dp->has_audio)
4799			return 0;
4800
4801		intel_dp->has_audio = has_audio;
4802		goto done;
4803	}
4804
4805	if (property == dev_priv->broadcast_rgb_property) {
4806		bool old_auto = intel_dp->color_range_auto;
4807		bool old_range = intel_dp->limited_color_range;
4808
4809		switch (val) {
4810		case INTEL_BROADCAST_RGB_AUTO:
4811			intel_dp->color_range_auto = true;
4812			break;
4813		case INTEL_BROADCAST_RGB_FULL:
4814			intel_dp->color_range_auto = false;
4815			intel_dp->limited_color_range = false;
4816			break;
4817		case INTEL_BROADCAST_RGB_LIMITED:
4818			intel_dp->color_range_auto = false;
4819			intel_dp->limited_color_range = true;
4820			break;
4821		default:
4822			return -EINVAL;
4823		}
4824
4825		if (old_auto == intel_dp->color_range_auto &&
4826		    old_range == intel_dp->limited_color_range)
4827			return 0;
4828
4829		goto done;
4830	}
4831
4832	if (is_edp(intel_dp) &&
4833	    property == connector->dev->mode_config.scaling_mode_property) {
4834		if (val == DRM_MODE_SCALE_NONE) {
4835			DRM_DEBUG_KMS("no scaling not supported\n");
4836			return -EINVAL;
4837		}
4838
4839		if (intel_connector->panel.fitting_mode == val) {
4840			/* the eDP scaling property is not changed */
4841			return 0;
4842		}
4843		intel_connector->panel.fitting_mode = val;
4844
4845		goto done;
4846	}
4847
4848	return -EINVAL;
4849
4850done:
4851	if (intel_encoder->base.crtc)
4852		intel_crtc_restore_mode(intel_encoder->base.crtc);
4853
4854	return 0;
4855}
4856
4857static void
4858intel_dp_connector_destroy(struct drm_connector *connector)
4859{
4860	struct intel_connector *intel_connector = to_intel_connector(connector);
4861
4862	kfree(intel_connector->detect_edid);
4863
4864	if (!IS_ERR_OR_NULL(intel_connector->edid))
4865		kfree(intel_connector->edid);
4866
4867	/* Can't call is_edp() since the encoder may have been destroyed
4868	 * already. */
4869	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
4870		intel_panel_fini(&intel_connector->panel);
4871
4872	drm_connector_cleanup(connector);
4873	kfree(connector);
4874}
4875
4876void intel_dp_encoder_destroy(struct drm_encoder *encoder)
4877{
4878	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
4879	struct intel_dp *intel_dp = &intel_dig_port->dp;
4880
4881	intel_dp_mst_encoder_cleanup(intel_dig_port);
4882	if (is_edp(intel_dp)) {
4883		cancel_delayed_work_sync(&intel_dp->panel_vdd_work);
4884		/*
4885		 * vdd might still be enabled do to the delayed vdd off.
4886		 * Make sure vdd is actually turned off here.
4887		 */
4888		pps_lock(intel_dp);
4889		edp_panel_vdd_off_sync(intel_dp);
4890		pps_unlock(intel_dp);
4891
4892		if (intel_dp->edp_notifier.notifier_call) {
4893			unregister_reboot_notifier(&intel_dp->edp_notifier);
4894			intel_dp->edp_notifier.notifier_call = NULL;
4895		}
4896	}
4897	drm_encoder_cleanup(encoder);
4898	kfree(intel_dig_port);
4899}
4900
4901void intel_dp_encoder_suspend(struct intel_encoder *intel_encoder)
4902{
4903	struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
4904
4905	if (!is_edp(intel_dp))
4906		return;
4907
4908	/*
4909	 * vdd might still be enabled do to the delayed vdd off.
4910	 * Make sure vdd is actually turned off here.
4911	 */
4912	cancel_delayed_work_sync(&intel_dp->panel_vdd_work);
4913	pps_lock(intel_dp);
4914	edp_panel_vdd_off_sync(intel_dp);
4915	pps_unlock(intel_dp);
4916}
4917
4918static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
4919{
4920	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
4921	struct drm_device *dev = intel_dig_port->base.base.dev;
4922	struct drm_i915_private *dev_priv = dev->dev_private;
4923	enum intel_display_power_domain power_domain;
4924
4925	lockdep_assert_held(&dev_priv->pps_mutex);
4926
4927	if (!edp_have_panel_vdd(intel_dp))
4928		return;
4929
4930	/*
4931	 * The VDD bit needs a power domain reference, so if the bit is
4932	 * already enabled when we boot or resume, grab this reference and
4933	 * schedule a vdd off, so we don't hold on to the reference
4934	 * indefinitely.
4935	 */
4936	DRM_DEBUG_KMS("VDD left on by BIOS, adjusting state tracking\n");
4937	power_domain = intel_display_port_aux_power_domain(&intel_dig_port->base);
4938	intel_display_power_get(dev_priv, power_domain);
4939
4940	edp_panel_vdd_schedule_off(intel_dp);
4941}
4942
4943void intel_dp_encoder_reset(struct drm_encoder *encoder)
4944{
4945	struct intel_dp *intel_dp;
4946
4947	if (to_intel_encoder(encoder)->type != INTEL_OUTPUT_EDP)
4948		return;
4949
4950	intel_dp = enc_to_intel_dp(encoder);
4951
4952	pps_lock(intel_dp);
4953
4954	/*
4955	 * Read out the current power sequencer assignment,
4956	 * in case the BIOS did something with it.
4957	 */
4958	if (IS_VALLEYVIEW(encoder->dev) || IS_CHERRYVIEW(encoder->dev))
4959		vlv_initial_power_sequencer_setup(intel_dp);
4960
4961	intel_edp_panel_vdd_sanitize(intel_dp);
4962
4963	pps_unlock(intel_dp);
4964}
4965
4966static const struct drm_connector_funcs intel_dp_connector_funcs = {
4967	.dpms = drm_atomic_helper_connector_dpms,
4968	.detect = intel_dp_detect,
4969	.force = intel_dp_force,
4970	.fill_modes = drm_helper_probe_single_connector_modes,
4971	.set_property = intel_dp_set_property,
4972	.atomic_get_property = intel_connector_atomic_get_property,
4973	.destroy = intel_dp_connector_destroy,
4974	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
4975	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
4976};
4977
4978static const struct drm_connector_helper_funcs intel_dp_connector_helper_funcs = {
4979	.get_modes = intel_dp_get_modes,
4980	.mode_valid = intel_dp_mode_valid,
4981	.best_encoder = intel_best_encoder,
4982};
4983
4984static const struct drm_encoder_funcs intel_dp_enc_funcs = {
4985	.reset = intel_dp_encoder_reset,
4986	.destroy = intel_dp_encoder_destroy,
4987};
4988
4989enum irqreturn
4990intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
4991{
4992	struct intel_dp *intel_dp = &intel_dig_port->dp;
4993	struct intel_encoder *intel_encoder = &intel_dig_port->base;
4994	struct drm_device *dev = intel_dig_port->base.base.dev;
4995	struct drm_i915_private *dev_priv = dev->dev_private;
4996	enum intel_display_power_domain power_domain;
4997	enum irqreturn ret = IRQ_NONE;
4998
4999	if (intel_dig_port->base.type != INTEL_OUTPUT_EDP &&
5000	    intel_dig_port->base.type != INTEL_OUTPUT_HDMI)
5001		intel_dig_port->base.type = INTEL_OUTPUT_DISPLAYPORT;
5002
5003	if (long_hpd && intel_dig_port->base.type == INTEL_OUTPUT_EDP) {
5004		/*
5005		 * vdd off can generate a long pulse on eDP which
5006		 * would require vdd on to handle it, and thus we
5007		 * would end up in an endless cycle of
5008		 * "vdd off -> long hpd -> vdd on -> detect -> vdd off -> ..."
5009		 */
5010		DRM_DEBUG_KMS("ignoring long hpd on eDP port %c\n",
5011			      port_name(intel_dig_port->port));
5012		return IRQ_HANDLED;
5013	}
5014
5015	DRM_DEBUG_KMS("got hpd irq on port %c - %s\n",
5016		      port_name(intel_dig_port->port),
5017		      long_hpd ? "long" : "short");
5018
5019	power_domain = intel_display_port_aux_power_domain(intel_encoder);
5020	intel_display_power_get(dev_priv, power_domain);
5021
5022	if (long_hpd) {
5023		/* indicate that we need to restart link training */
5024		intel_dp->train_set_valid = false;
5025
5026		if (!intel_digital_port_connected(dev_priv, intel_dig_port))
5027			goto mst_fail;
5028
5029		if (!intel_dp_get_dpcd(intel_dp)) {
5030			goto mst_fail;
5031		}
5032
5033		intel_dp_probe_oui(intel_dp);
5034
5035		if (!intel_dp_probe_mst(intel_dp)) {
5036			drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
5037			intel_dp_check_link_status(intel_dp);
5038			drm_modeset_unlock(&dev->mode_config.connection_mutex);
5039			goto mst_fail;
5040		}
5041	} else {
5042		if (intel_dp->is_mst) {
5043			if (intel_dp_check_mst_status(intel_dp) == -EINVAL)
5044				goto mst_fail;
5045		}
5046
5047		if (!intel_dp->is_mst) {
5048			drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
5049			intel_dp_check_link_status(intel_dp);
5050			drm_modeset_unlock(&dev->mode_config.connection_mutex);
5051		}
5052	}
5053
5054	ret = IRQ_HANDLED;
5055
5056	goto put_power;
5057mst_fail:
5058	/* if we were in MST mode, and device is not there get out of MST mode */
5059	if (intel_dp->is_mst) {
5060		DRM_DEBUG_KMS("MST device may have disappeared %d vs %d\n", intel_dp->is_mst, intel_dp->mst_mgr.mst_state);
5061		intel_dp->is_mst = false;
5062		drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr, intel_dp->is_mst);
5063	}
5064put_power:
5065	intel_display_power_put(dev_priv, power_domain);
5066
5067	return ret;
5068}
5069
5070/* check the VBT to see whether the eDP is on another port */
5071bool intel_dp_is_edp(struct drm_device *dev, enum port port)
5072{
5073	struct drm_i915_private *dev_priv = dev->dev_private;
5074	union child_device_config *p_child;
5075	int i;
5076	static const short port_mapping[] = {
5077		[PORT_B] = DVO_PORT_DPB,
5078		[PORT_C] = DVO_PORT_DPC,
5079		[PORT_D] = DVO_PORT_DPD,
5080		[PORT_E] = DVO_PORT_DPE,
5081	};
5082
5083	/*
5084	 * eDP not supported on g4x. so bail out early just
5085	 * for a bit extra safety in case the VBT is bonkers.
5086	 */
5087	if (INTEL_INFO(dev)->gen < 5)
5088		return false;
5089
5090	if (port == PORT_A)
5091		return true;
5092
5093	if (!dev_priv->vbt.child_dev_num)
5094		return false;
5095
5096	for (i = 0; i < dev_priv->vbt.child_dev_num; i++) {
5097		p_child = dev_priv->vbt.child_dev + i;
5098
5099		if (p_child->common.dvo_port == port_mapping[port] &&
5100		    (p_child->common.device_type & DEVICE_TYPE_eDP_BITS) ==
5101		    (DEVICE_TYPE_eDP & DEVICE_TYPE_eDP_BITS))
5102			return true;
5103	}
5104	return false;
5105}
5106
5107void
5108intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connector)
5109{
5110	struct intel_connector *intel_connector = to_intel_connector(connector);
5111
5112	intel_attach_force_audio_property(connector);
5113	intel_attach_broadcast_rgb_property(connector);
5114	intel_dp->color_range_auto = true;
5115
5116	if (is_edp(intel_dp)) {
5117		drm_mode_create_scaling_mode_property(connector->dev);
5118		drm_object_attach_property(
5119			&connector->base,
5120			connector->dev->mode_config.scaling_mode_property,
5121			DRM_MODE_SCALE_ASPECT);
5122		intel_connector->panel.fitting_mode = DRM_MODE_SCALE_ASPECT;
5123	}
5124}
5125
5126static void intel_dp_init_panel_power_timestamps(struct intel_dp *intel_dp)
5127{
5128	intel_dp->panel_power_off_time = ktime_get_boottime();
5129	intel_dp->last_power_on = jiffies;
5130	intel_dp->last_backlight_off = jiffies;
5131}
5132
5133static void
5134intel_dp_init_panel_power_sequencer(struct drm_device *dev,
5135				    struct intel_dp *intel_dp)
5136{
5137	struct drm_i915_private *dev_priv = dev->dev_private;
5138	struct edp_power_seq cur, vbt, spec,
5139		*final = &intel_dp->pps_delays;
5140	u32 pp_on, pp_off, pp_div = 0, pp_ctl = 0;
5141	i915_reg_t pp_ctrl_reg, pp_on_reg, pp_off_reg, pp_div_reg;
5142
5143	lockdep_assert_held(&dev_priv->pps_mutex);
5144
5145	/* already initialized? */
5146	if (final->t11_t12 != 0)
5147		return;
5148
5149	if (IS_BROXTON(dev)) {
5150		/*
5151		 * TODO: BXT has 2 sets of PPS registers.
5152		 * Correct Register for Broxton need to be identified
5153		 * using VBT. hardcoding for now
5154		 */
5155		pp_ctrl_reg = BXT_PP_CONTROL(0);
5156		pp_on_reg = BXT_PP_ON_DELAYS(0);
5157		pp_off_reg = BXT_PP_OFF_DELAYS(0);
5158	} else if (HAS_PCH_SPLIT(dev)) {
5159		pp_ctrl_reg = PCH_PP_CONTROL;
5160		pp_on_reg = PCH_PP_ON_DELAYS;
5161		pp_off_reg = PCH_PP_OFF_DELAYS;
5162		pp_div_reg = PCH_PP_DIVISOR;
5163	} else {
5164		enum pipe pipe = vlv_power_sequencer_pipe(intel_dp);
5165
5166		pp_ctrl_reg = VLV_PIPE_PP_CONTROL(pipe);
5167		pp_on_reg = VLV_PIPE_PP_ON_DELAYS(pipe);
5168		pp_off_reg = VLV_PIPE_PP_OFF_DELAYS(pipe);
5169		pp_div_reg = VLV_PIPE_PP_DIVISOR(pipe);
5170	}
5171
5172	/* Workaround: Need to write PP_CONTROL with the unlock key as
5173	 * the very first thing. */
5174	pp_ctl = ironlake_get_pp_control(intel_dp);
5175
5176	pp_on = I915_READ(pp_on_reg);
5177	pp_off = I915_READ(pp_off_reg);
5178	if (!IS_BROXTON(dev)) {
5179		I915_WRITE(pp_ctrl_reg, pp_ctl);
5180		pp_div = I915_READ(pp_div_reg);
5181	}
5182
5183	/* Pull timing values out of registers */
5184	cur.t1_t3 = (pp_on & PANEL_POWER_UP_DELAY_MASK) >>
5185		PANEL_POWER_UP_DELAY_SHIFT;
5186
5187	cur.t8 = (pp_on & PANEL_LIGHT_ON_DELAY_MASK) >>
5188		PANEL_LIGHT_ON_DELAY_SHIFT;
5189
5190	cur.t9 = (pp_off & PANEL_LIGHT_OFF_DELAY_MASK) >>
5191		PANEL_LIGHT_OFF_DELAY_SHIFT;
5192
5193	cur.t10 = (pp_off & PANEL_POWER_DOWN_DELAY_MASK) >>
5194		PANEL_POWER_DOWN_DELAY_SHIFT;
5195
5196	if (IS_BROXTON(dev)) {
5197		u16 tmp = (pp_ctl & BXT_POWER_CYCLE_DELAY_MASK) >>
5198			BXT_POWER_CYCLE_DELAY_SHIFT;
5199		if (tmp > 0)
5200			cur.t11_t12 = (tmp - 1) * 1000;
5201		else
5202			cur.t11_t12 = 0;
5203	} else {
5204		cur.t11_t12 = ((pp_div & PANEL_POWER_CYCLE_DELAY_MASK) >>
5205		       PANEL_POWER_CYCLE_DELAY_SHIFT) * 1000;
5206	}
5207
5208	DRM_DEBUG_KMS("cur t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
5209		      cur.t1_t3, cur.t8, cur.t9, cur.t10, cur.t11_t12);
5210
5211	vbt = dev_priv->vbt.edp_pps;
5212
5213	/* Upper limits from eDP 1.3 spec. Note that we use the clunky units of
5214	 * our hw here, which are all in 100usec. */
5215	spec.t1_t3 = 210 * 10;
5216	spec.t8 = 50 * 10; /* no limit for t8, use t7 instead */
5217	spec.t9 = 50 * 10; /* no limit for t9, make it symmetric with t8 */
5218	spec.t10 = 500 * 10;
5219	/* This one is special and actually in units of 100ms, but zero
5220	 * based in the hw (so we need to add 100 ms). But the sw vbt
5221	 * table multiplies it with 1000 to make it in units of 100usec,
5222	 * too. */
5223	spec.t11_t12 = (510 + 100) * 10;
5224
5225	DRM_DEBUG_KMS("vbt t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
5226		      vbt.t1_t3, vbt.t8, vbt.t9, vbt.t10, vbt.t11_t12);
5227
5228	/* Use the max of the register settings and vbt. If both are
5229	 * unset, fall back to the spec limits. */
5230#define assign_final(field)	final->field = (max(cur.field, vbt.field) == 0 ? \
5231				       spec.field : \
5232				       max(cur.field, vbt.field))
5233	assign_final(t1_t3);
5234	assign_final(t8);
5235	assign_final(t9);
5236	assign_final(t10);
5237	assign_final(t11_t12);
5238#undef assign_final
5239
5240#define get_delay(field)	(DIV_ROUND_UP(final->field, 10))
5241	intel_dp->panel_power_up_delay = get_delay(t1_t3);
5242	intel_dp->backlight_on_delay = get_delay(t8);
5243	intel_dp->backlight_off_delay = get_delay(t9);
5244	intel_dp->panel_power_down_delay = get_delay(t10);
5245	intel_dp->panel_power_cycle_delay = get_delay(t11_t12);
5246#undef get_delay
5247
5248	DRM_DEBUG_KMS("panel power up delay %d, power down delay %d, power cycle delay %d\n",
5249		      intel_dp->panel_power_up_delay, intel_dp->panel_power_down_delay,
5250		      intel_dp->panel_power_cycle_delay);
5251
5252	DRM_DEBUG_KMS("backlight on delay %d, off delay %d\n",
5253		      intel_dp->backlight_on_delay, intel_dp->backlight_off_delay);
5254}
5255
5256static void
5257intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
5258					      struct intel_dp *intel_dp)
5259{
5260	struct drm_i915_private *dev_priv = dev->dev_private;
5261	u32 pp_on, pp_off, pp_div, port_sel = 0;
5262	int div = HAS_PCH_SPLIT(dev) ? intel_pch_rawclk(dev) : intel_hrawclk(dev);
5263	i915_reg_t pp_on_reg, pp_off_reg, pp_div_reg, pp_ctrl_reg;
5264	enum port port = dp_to_dig_port(intel_dp)->port;
5265	const struct edp_power_seq *seq = &intel_dp->pps_delays;
5266
5267	lockdep_assert_held(&dev_priv->pps_mutex);
5268
5269	if (IS_BROXTON(dev)) {
5270		/*
5271		 * TODO: BXT has 2 sets of PPS registers.
5272		 * Correct Register for Broxton need to be identified
5273		 * using VBT. hardcoding for now
5274		 */
5275		pp_ctrl_reg = BXT_PP_CONTROL(0);
5276		pp_on_reg = BXT_PP_ON_DELAYS(0);
5277		pp_off_reg = BXT_PP_OFF_DELAYS(0);
5278
5279	} else if (HAS_PCH_SPLIT(dev)) {
5280		pp_on_reg = PCH_PP_ON_DELAYS;
5281		pp_off_reg = PCH_PP_OFF_DELAYS;
5282		pp_div_reg = PCH_PP_DIVISOR;
5283	} else {
5284		enum pipe pipe = vlv_power_sequencer_pipe(intel_dp);
5285
5286		pp_on_reg = VLV_PIPE_PP_ON_DELAYS(pipe);
5287		pp_off_reg = VLV_PIPE_PP_OFF_DELAYS(pipe);
5288		pp_div_reg = VLV_PIPE_PP_DIVISOR(pipe);
5289	}
5290
5291	/*
5292	 * And finally store the new values in the power sequencer. The
5293	 * backlight delays are set to 1 because we do manual waits on them. For
5294	 * T8, even BSpec recommends doing it. For T9, if we don't do this,
5295	 * we'll end up waiting for the backlight off delay twice: once when we
5296	 * do the manual sleep, and once when we disable the panel and wait for
5297	 * the PP_STATUS bit to become zero.
5298	 */
5299	pp_on = (seq->t1_t3 << PANEL_POWER_UP_DELAY_SHIFT) |
5300		(1 << PANEL_LIGHT_ON_DELAY_SHIFT);
5301	pp_off = (1 << PANEL_LIGHT_OFF_DELAY_SHIFT) |
5302		 (seq->t10 << PANEL_POWER_DOWN_DELAY_SHIFT);
5303	/* Compute the divisor for the pp clock, simply match the Bspec
5304	 * formula. */
5305	if (IS_BROXTON(dev)) {
5306		pp_div = I915_READ(pp_ctrl_reg);
5307		pp_div &= ~BXT_POWER_CYCLE_DELAY_MASK;
5308		pp_div |= (DIV_ROUND_UP((seq->t11_t12 + 1), 1000)
5309				<< BXT_POWER_CYCLE_DELAY_SHIFT);
5310	} else {
5311		pp_div = ((100 * div)/2 - 1) << PP_REFERENCE_DIVIDER_SHIFT;
5312		pp_div |= (DIV_ROUND_UP(seq->t11_t12, 1000)
5313				<< PANEL_POWER_CYCLE_DELAY_SHIFT);
5314	}
5315
5316	/* Haswell doesn't have any port selection bits for the panel
5317	 * power sequencer any more. */
5318	if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
5319		port_sel = PANEL_PORT_SELECT_VLV(port);
5320	} else if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) {
5321		if (port == PORT_A)
5322			port_sel = PANEL_PORT_SELECT_DPA;
5323		else
5324			port_sel = PANEL_PORT_SELECT_DPD;
5325	}
5326
5327	pp_on |= port_sel;
5328
5329	I915_WRITE(pp_on_reg, pp_on);
5330	I915_WRITE(pp_off_reg, pp_off);
5331	if (IS_BROXTON(dev))
5332		I915_WRITE(pp_ctrl_reg, pp_div);
5333	else
5334		I915_WRITE(pp_div_reg, pp_div);
5335
5336	DRM_DEBUG_KMS("panel power sequencer register settings: PP_ON %#x, PP_OFF %#x, PP_DIV %#x\n",
5337		      I915_READ(pp_on_reg),
5338		      I915_READ(pp_off_reg),
5339		      IS_BROXTON(dev) ?
5340		      (I915_READ(pp_ctrl_reg) & BXT_POWER_CYCLE_DELAY_MASK) :
5341		      I915_READ(pp_div_reg));
5342}
5343
5344/**
5345 * intel_dp_set_drrs_state - program registers for RR switch to take effect
5346 * @dev: DRM device
5347 * @refresh_rate: RR to be programmed
5348 *
5349 * This function gets called when refresh rate (RR) has to be changed from
5350 * one frequency to another. Switches can be between high and low RR
5351 * supported by the panel or to any other RR based on media playback (in
5352 * this case, RR value needs to be passed from user space).
5353 *
5354 * The caller of this function needs to take a lock on dev_priv->drrs.
5355 */
5356static void intel_dp_set_drrs_state(struct drm_device *dev, int refresh_rate)
5357{
5358	struct drm_i915_private *dev_priv = dev->dev_private;
5359	struct intel_encoder *encoder;
5360	struct intel_digital_port *dig_port = NULL;
5361	struct intel_dp *intel_dp = dev_priv->drrs.dp;
5362	struct intel_crtc_state *config = NULL;
5363	struct intel_crtc *intel_crtc = NULL;
5364	enum drrs_refresh_rate_type index = DRRS_HIGH_RR;
5365
5366	if (refresh_rate <= 0) {
5367		DRM_DEBUG_KMS("Refresh rate should be positive non-zero.\n");
5368		return;
5369	}
5370
5371	if (intel_dp == NULL) {
5372		DRM_DEBUG_KMS("DRRS not supported.\n");
5373		return;
5374	}
5375
5376	/*
5377	 * FIXME: This needs proper synchronization with psr state for some
5378	 * platforms that cannot have PSR and DRRS enabled at the same time.
5379	 */
5380
5381	dig_port = dp_to_dig_port(intel_dp);
5382	encoder = &dig_port->base;
5383	intel_crtc = to_intel_crtc(encoder->base.crtc);
5384
5385	if (!intel_crtc) {
5386		DRM_DEBUG_KMS("DRRS: intel_crtc not initialized\n");
5387		return;
5388	}
5389
5390	config = intel_crtc->config;
5391
5392	if (dev_priv->drrs.type < SEAMLESS_DRRS_SUPPORT) {
5393		DRM_DEBUG_KMS("Only Seamless DRRS supported.\n");
5394		return;
5395	}
5396
5397	if (intel_dp->attached_connector->panel.downclock_mode->vrefresh ==
5398			refresh_rate)
5399		index = DRRS_LOW_RR;
5400
5401	if (index == dev_priv->drrs.refresh_rate_type) {
5402		DRM_DEBUG_KMS(
5403			"DRRS requested for previously set RR...ignoring\n");
5404		return;
5405	}
5406
5407	if (!intel_crtc->active) {
5408		DRM_DEBUG_KMS("eDP encoder disabled. CRTC not Active\n");
5409		return;
5410	}
5411
5412	if (INTEL_INFO(dev)->gen >= 8 && !IS_CHERRYVIEW(dev)) {
5413		switch (index) {
5414		case DRRS_HIGH_RR:
5415			intel_dp_set_m_n(intel_crtc, M1_N1);
5416			break;
5417		case DRRS_LOW_RR:
5418			intel_dp_set_m_n(intel_crtc, M2_N2);
5419			break;
5420		case DRRS_MAX_RR:
5421		default:
5422			DRM_ERROR("Unsupported refreshrate type\n");
5423		}
5424	} else if (INTEL_INFO(dev)->gen > 6) {
5425		i915_reg_t reg = PIPECONF(intel_crtc->config->cpu_transcoder);
5426		u32 val;
5427
5428		val = I915_READ(reg);
5429		if (index > DRRS_HIGH_RR) {
5430			if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev))
5431				val |= PIPECONF_EDP_RR_MODE_SWITCH_VLV;
5432			else
5433				val |= PIPECONF_EDP_RR_MODE_SWITCH;
5434		} else {
5435			if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev))
5436				val &= ~PIPECONF_EDP_RR_MODE_SWITCH_VLV;
5437			else
5438				val &= ~PIPECONF_EDP_RR_MODE_SWITCH;
5439		}
5440		I915_WRITE(reg, val);
5441	}
5442
5443	dev_priv->drrs.refresh_rate_type = index;
5444
5445	DRM_DEBUG_KMS("eDP Refresh Rate set to : %dHz\n", refresh_rate);
5446}
5447
5448/**
5449 * intel_edp_drrs_enable - init drrs struct if supported
5450 * @intel_dp: DP struct
5451 *
5452 * Initializes frontbuffer_bits and drrs.dp
5453 */
5454void intel_edp_drrs_enable(struct intel_dp *intel_dp)
5455{
5456	struct drm_device *dev = intel_dp_to_dev(intel_dp);
5457	struct drm_i915_private *dev_priv = dev->dev_private;
5458	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
5459	struct drm_crtc *crtc = dig_port->base.base.crtc;
5460	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
5461
5462	if (!intel_crtc->config->has_drrs) {
5463		DRM_DEBUG_KMS("Panel doesn't support DRRS\n");
5464		return;
5465	}
5466
5467	mutex_lock(&dev_priv->drrs.mutex);
5468	if (WARN_ON(dev_priv->drrs.dp)) {
5469		DRM_ERROR("DRRS already enabled\n");
5470		goto unlock;
5471	}
5472
5473	dev_priv->drrs.busy_frontbuffer_bits = 0;
5474
5475	dev_priv->drrs.dp = intel_dp;
5476
5477unlock:
5478	mutex_unlock(&dev_priv->drrs.mutex);
5479}
5480
5481/**
5482 * intel_edp_drrs_disable - Disable DRRS
5483 * @intel_dp: DP struct
5484 *
5485 */
5486void intel_edp_drrs_disable(struct intel_dp *intel_dp)
5487{
5488	struct drm_device *dev = intel_dp_to_dev(intel_dp);
5489	struct drm_i915_private *dev_priv = dev->dev_private;
5490	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
5491	struct drm_crtc *crtc = dig_port->base.base.crtc;
5492	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
5493
5494	if (!intel_crtc->config->has_drrs)
5495		return;
5496
5497	mutex_lock(&dev_priv->drrs.mutex);
5498	if (!dev_priv->drrs.dp) {
5499		mutex_unlock(&dev_priv->drrs.mutex);
5500		return;
5501	}
5502
5503	if (dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
5504		intel_dp_set_drrs_state(dev_priv->dev,
5505			intel_dp->attached_connector->panel.
5506			fixed_mode->vrefresh);
5507
5508	dev_priv->drrs.dp = NULL;
5509	mutex_unlock(&dev_priv->drrs.mutex);
5510
5511	cancel_delayed_work_sync(&dev_priv->drrs.work);
5512}
5513
5514static void intel_edp_drrs_downclock_work(struct work_struct *work)
5515{
5516	struct drm_i915_private *dev_priv =
5517		container_of(work, typeof(*dev_priv), drrs.work.work);
5518	struct intel_dp *intel_dp;
5519
5520	mutex_lock(&dev_priv->drrs.mutex);
5521
5522	intel_dp = dev_priv->drrs.dp;
5523
5524	if (!intel_dp)
5525		goto unlock;
5526
5527	/*
5528	 * The delayed work can race with an invalidate hence we need to
5529	 * recheck.
5530	 */
5531
5532	if (dev_priv->drrs.busy_frontbuffer_bits)
5533		goto unlock;
5534
5535	if (dev_priv->drrs.refresh_rate_type != DRRS_LOW_RR)
5536		intel_dp_set_drrs_state(dev_priv->dev,
5537			intel_dp->attached_connector->panel.
5538			downclock_mode->vrefresh);
5539
5540unlock:
5541	mutex_unlock(&dev_priv->drrs.mutex);
5542}
5543
5544/**
5545 * intel_edp_drrs_invalidate - Disable Idleness DRRS
5546 * @dev: DRM device
5547 * @frontbuffer_bits: frontbuffer plane tracking bits
5548 *
5549 * This function gets called everytime rendering on the given planes start.
5550 * Hence DRRS needs to be Upclocked, i.e. (LOW_RR -> HIGH_RR).
5551 *
5552 * Dirty frontbuffers relevant to DRRS are tracked in busy_frontbuffer_bits.
5553 */
5554void intel_edp_drrs_invalidate(struct drm_device *dev,
5555		unsigned frontbuffer_bits)
5556{
5557	struct drm_i915_private *dev_priv = dev->dev_private;
5558	struct drm_crtc *crtc;
5559	enum pipe pipe;
5560
5561	if (dev_priv->drrs.type == DRRS_NOT_SUPPORTED)
5562		return;
5563
5564	cancel_delayed_work(&dev_priv->drrs.work);
5565
5566	mutex_lock(&dev_priv->drrs.mutex);
5567	if (!dev_priv->drrs.dp) {
5568		mutex_unlock(&dev_priv->drrs.mutex);
5569		return;
5570	}
5571
5572	crtc = dp_to_dig_port(dev_priv->drrs.dp)->base.base.crtc;
5573	pipe = to_intel_crtc(crtc)->pipe;
5574
5575	frontbuffer_bits &= INTEL_FRONTBUFFER_ALL_MASK(pipe);
5576	dev_priv->drrs.busy_frontbuffer_bits |= frontbuffer_bits;
5577
5578	/* invalidate means busy screen hence upclock */
5579	if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
5580		intel_dp_set_drrs_state(dev_priv->dev,
5581				dev_priv->drrs.dp->attached_connector->panel.
5582				fixed_mode->vrefresh);
5583
5584	mutex_unlock(&dev_priv->drrs.mutex);
5585}
5586
5587/**
5588 * intel_edp_drrs_flush - Restart Idleness DRRS
5589 * @dev: DRM device
5590 * @frontbuffer_bits: frontbuffer plane tracking bits
5591 *
5592 * This function gets called every time rendering on the given planes has
5593 * completed or flip on a crtc is completed. So DRRS should be upclocked
5594 * (LOW_RR -> HIGH_RR). And also Idleness detection should be started again,
5595 * if no other planes are dirty.
5596 *
5597 * Dirty frontbuffers relevant to DRRS are tracked in busy_frontbuffer_bits.
5598 */
5599void intel_edp_drrs_flush(struct drm_device *dev,
5600		unsigned frontbuffer_bits)
5601{
5602	struct drm_i915_private *dev_priv = dev->dev_private;
5603	struct drm_crtc *crtc;
5604	enum pipe pipe;
5605
5606	if (dev_priv->drrs.type == DRRS_NOT_SUPPORTED)
5607		return;
5608
5609	cancel_delayed_work(&dev_priv->drrs.work);
5610
5611	mutex_lock(&dev_priv->drrs.mutex);
5612	if (!dev_priv->drrs.dp) {
5613		mutex_unlock(&dev_priv->drrs.mutex);
5614		return;
5615	}
5616
5617	crtc = dp_to_dig_port(dev_priv->drrs.dp)->base.base.crtc;
5618	pipe = to_intel_crtc(crtc)->pipe;
5619
5620	frontbuffer_bits &= INTEL_FRONTBUFFER_ALL_MASK(pipe);
5621	dev_priv->drrs.busy_frontbuffer_bits &= ~frontbuffer_bits;
5622
5623	/* flush means busy screen hence upclock */
5624	if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
5625		intel_dp_set_drrs_state(dev_priv->dev,
5626				dev_priv->drrs.dp->attached_connector->panel.
5627				fixed_mode->vrefresh);
5628
5629	/*
5630	 * flush also means no more activity hence schedule downclock, if all
5631	 * other fbs are quiescent too
5632	 */
5633	if (!dev_priv->drrs.busy_frontbuffer_bits)
5634		schedule_delayed_work(&dev_priv->drrs.work,
5635				msecs_to_jiffies(1000));
5636	mutex_unlock(&dev_priv->drrs.mutex);
5637}
5638
5639/**
5640 * DOC: Display Refresh Rate Switching (DRRS)
5641 *
5642 * Display Refresh Rate Switching (DRRS) is a power conservation feature
5643 * which enables swtching between low and high refresh rates,
5644 * dynamically, based on the usage scenario. This feature is applicable
5645 * for internal panels.
5646 *
5647 * Indication that the panel supports DRRS is given by the panel EDID, which
5648 * would list multiple refresh rates for one resolution.
5649 *
5650 * DRRS is of 2 types - static and seamless.
5651 * Static DRRS involves changing refresh rate (RR) by doing a full modeset
5652 * (may appear as a blink on screen) and is used in dock-undock scenario.
5653 * Seamless DRRS involves changing RR without any visual effect to the user
5654 * and can be used during normal system usage. This is done by programming
5655 * certain registers.
5656 *
5657 * Support for static/seamless DRRS may be indicated in the VBT based on
5658 * inputs from the panel spec.
5659 *
5660 * DRRS saves power by switching to low RR based on usage scenarios.
5661 *
5662 * eDP DRRS:-
5663 *        The implementation is based on frontbuffer tracking implementation.
5664 * When there is a disturbance on the screen triggered by user activity or a
5665 * periodic system activity, DRRS is disabled (RR is changed to high RR).
5666 * When there is no movement on screen, after a timeout of 1 second, a switch
5667 * to low RR is made.
5668 *        For integration with frontbuffer tracking code,
5669 * intel_edp_drrs_invalidate() and intel_edp_drrs_flush() are called.
5670 *
5671 * DRRS can be further extended to support other internal panels and also
5672 * the scenario of video playback wherein RR is set based on the rate
5673 * requested by userspace.
5674 */
5675
5676/**
5677 * intel_dp_drrs_init - Init basic DRRS work and mutex.
5678 * @intel_connector: eDP connector
5679 * @fixed_mode: preferred mode of panel
5680 *
5681 * This function is  called only once at driver load to initialize basic
5682 * DRRS stuff.
5683 *
5684 * Returns:
5685 * Downclock mode if panel supports it, else return NULL.
5686 * DRRS support is determined by the presence of downclock mode (apart
5687 * from VBT setting).
5688 */
5689static struct drm_display_mode *
5690intel_dp_drrs_init(struct intel_connector *intel_connector,
5691		struct drm_display_mode *fixed_mode)
5692{
5693	struct drm_connector *connector = &intel_connector->base;
5694	struct drm_device *dev = connector->dev;
5695	struct drm_i915_private *dev_priv = dev->dev_private;
5696	struct drm_display_mode *downclock_mode = NULL;
5697
5698	INIT_DELAYED_WORK(&dev_priv->drrs.work, intel_edp_drrs_downclock_work);
5699	mutex_init(&dev_priv->drrs.mutex);
5700
5701	if (INTEL_INFO(dev)->gen <= 6) {
5702		DRM_DEBUG_KMS("DRRS supported for Gen7 and above\n");
5703		return NULL;
5704	}
5705
5706	if (dev_priv->vbt.drrs_type != SEAMLESS_DRRS_SUPPORT) {
5707		DRM_DEBUG_KMS("VBT doesn't support DRRS\n");
5708		return NULL;
5709	}
5710
5711	downclock_mode = intel_find_panel_downclock
5712					(dev, fixed_mode, connector);
5713
5714	if (!downclock_mode) {
5715		DRM_DEBUG_KMS("Downclock mode is not found. DRRS not supported\n");
5716		return NULL;
5717	}
5718
5719	dev_priv->drrs.type = dev_priv->vbt.drrs_type;
5720
5721	dev_priv->drrs.refresh_rate_type = DRRS_HIGH_RR;
5722	DRM_DEBUG_KMS("seamless DRRS supported for eDP panel.\n");
5723	return downclock_mode;
5724}
5725
5726static bool intel_edp_init_connector(struct intel_dp *intel_dp,
5727				     struct intel_connector *intel_connector)
5728{
5729	struct drm_connector *connector = &intel_connector->base;
5730	struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
5731	struct intel_encoder *intel_encoder = &intel_dig_port->base;
5732	struct drm_device *dev = intel_encoder->base.dev;
5733	struct drm_i915_private *dev_priv = dev->dev_private;
5734	struct drm_display_mode *fixed_mode = NULL;
5735	struct drm_display_mode *downclock_mode = NULL;
5736	bool has_dpcd;
5737	struct drm_display_mode *scan;
5738	struct edid *edid;
5739	enum pipe pipe = INVALID_PIPE;
5740
5741	if (!is_edp(intel_dp))
5742		return true;
5743
5744	pps_lock(intel_dp);
5745	intel_edp_panel_vdd_sanitize(intel_dp);
5746	pps_unlock(intel_dp);
5747
5748	/* Cache DPCD and EDID for edp. */
5749	has_dpcd = intel_dp_get_dpcd(intel_dp);
5750
5751	if (has_dpcd) {
5752		if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11)
5753			dev_priv->no_aux_handshake =
5754				intel_dp->dpcd[DP_MAX_DOWNSPREAD] &
5755				DP_NO_AUX_HANDSHAKE_LINK_TRAINING;
5756	} else {
5757		/* if this fails, presume the device is a ghost */
5758		DRM_INFO("failed to retrieve link info, disabling eDP\n");
5759		return false;
5760	}
5761
5762	/* We now know it's not a ghost, init power sequence regs. */
5763	pps_lock(intel_dp);
5764	intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
5765	pps_unlock(intel_dp);
5766
5767	mutex_lock(&dev->mode_config.mutex);
5768	edid = drm_get_edid(connector, &intel_dp->aux.ddc);
5769	if (edid) {
5770		if (drm_add_edid_modes(connector, edid)) {
5771			drm_mode_connector_update_edid_property(connector,
5772								edid);
5773			drm_edid_to_eld(connector, edid);
5774		} else {
5775			kfree(edid);
5776			edid = ERR_PTR(-EINVAL);
5777		}
5778	} else {
5779		edid = ERR_PTR(-ENOENT);
5780	}
5781	intel_connector->edid = edid;
5782
5783	/* prefer fixed mode from EDID if available */
5784	list_for_each_entry(scan, &connector->probed_modes, head) {
5785		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
5786			fixed_mode = drm_mode_duplicate(dev, scan);
5787			downclock_mode = intel_dp_drrs_init(
5788						intel_connector, fixed_mode);
5789			break;
5790		}
5791	}
5792
5793	/* fallback to VBT if available for eDP */
5794	if (!fixed_mode && dev_priv->vbt.lfp_lvds_vbt_mode) {
5795		fixed_mode = drm_mode_duplicate(dev,
5796					dev_priv->vbt.lfp_lvds_vbt_mode);
5797		if (fixed_mode)
5798			fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
5799	}
5800	mutex_unlock(&dev->mode_config.mutex);
5801
5802	if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
5803		intel_dp->edp_notifier.notifier_call = edp_notify_handler;
5804		register_reboot_notifier(&intel_dp->edp_notifier);
5805
5806		/*
5807		 * Figure out the current pipe for the initial backlight setup.
5808		 * If the current pipe isn't valid, try the PPS pipe, and if that
5809		 * fails just assume pipe A.
5810		 */
5811		if (IS_CHERRYVIEW(dev))
5812			pipe = DP_PORT_TO_PIPE_CHV(intel_dp->DP);
5813		else
5814			pipe = PORT_TO_PIPE(intel_dp->DP);
5815
5816		if (pipe != PIPE_A && pipe != PIPE_B)
5817			pipe = intel_dp->pps_pipe;
5818
5819		if (pipe != PIPE_A && pipe != PIPE_B)
5820			pipe = PIPE_A;
5821
5822		DRM_DEBUG_KMS("using pipe %c for initial backlight setup\n",
5823			      pipe_name(pipe));
5824	}
5825
5826	intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode);
5827	intel_connector->panel.backlight.power = intel_edp_backlight_power;
5828	intel_panel_setup_backlight(connector, pipe);
5829
5830	return true;
5831}
5832
5833bool
5834intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
5835			struct intel_connector *intel_connector)
5836{
5837	struct drm_connector *connector = &intel_connector->base;
5838	struct intel_dp *intel_dp = &intel_dig_port->dp;
5839	struct intel_encoder *intel_encoder = &intel_dig_port->base;
5840	struct drm_device *dev = intel_encoder->base.dev;
5841	struct drm_i915_private *dev_priv = dev->dev_private;
5842	enum port port = intel_dig_port->port;
5843	int type, ret;
5844
5845	if (WARN(intel_dig_port->max_lanes < 1,
5846		 "Not enough lanes (%d) for DP on port %c\n",
5847		 intel_dig_port->max_lanes, port_name(port)))
5848		return false;
5849
5850	intel_dp->pps_pipe = INVALID_PIPE;
5851
5852	/* intel_dp vfuncs */
5853	if (INTEL_INFO(dev)->gen >= 9)
5854		intel_dp->get_aux_clock_divider = skl_get_aux_clock_divider;
5855	else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev))
5856		intel_dp->get_aux_clock_divider = vlv_get_aux_clock_divider;
5857	else if (IS_HASWELL(dev) || IS_BROADWELL(dev))
5858		intel_dp->get_aux_clock_divider = hsw_get_aux_clock_divider;
5859	else if (HAS_PCH_SPLIT(dev))
5860		intel_dp->get_aux_clock_divider = ilk_get_aux_clock_divider;
5861	else
5862		intel_dp->get_aux_clock_divider = i9xx_get_aux_clock_divider;
5863
5864	if (INTEL_INFO(dev)->gen >= 9)
5865		intel_dp->get_aux_send_ctl = skl_get_aux_send_ctl;
5866	else
5867		intel_dp->get_aux_send_ctl = i9xx_get_aux_send_ctl;
5868
5869	if (HAS_DDI(dev))
5870		intel_dp->prepare_link_retrain = intel_ddi_prepare_link_retrain;
5871
5872	/* Preserve the current hw state. */
5873	intel_dp->DP = I915_READ(intel_dp->output_reg);
5874	intel_dp->attached_connector = intel_connector;
5875
5876	if (intel_dp_is_edp(dev, port))
5877		type = DRM_MODE_CONNECTOR_eDP;
5878	else
5879		type = DRM_MODE_CONNECTOR_DisplayPort;
5880
5881	/*
5882	 * For eDP we always set the encoder type to INTEL_OUTPUT_EDP, but
5883	 * for DP the encoder type can be set by the caller to
5884	 * INTEL_OUTPUT_UNKNOWN for DDI, so don't rewrite it.
5885	 */
5886	if (type == DRM_MODE_CONNECTOR_eDP)
5887		intel_encoder->type = INTEL_OUTPUT_EDP;
5888
5889	/* eDP only on port B and/or C on vlv/chv */
5890	if (WARN_ON((IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) &&
5891		    is_edp(intel_dp) && port != PORT_B && port != PORT_C))
5892		return false;
5893
5894	DRM_DEBUG_KMS("Adding %s connector on port %c\n",
5895			type == DRM_MODE_CONNECTOR_eDP ? "eDP" : "DP",
5896			port_name(port));
5897
5898	drm_connector_init(dev, connector, &intel_dp_connector_funcs, type);
5899	drm_connector_helper_add(connector, &intel_dp_connector_helper_funcs);
5900
5901	connector->interlace_allowed = true;
5902	connector->doublescan_allowed = 0;
5903
5904	INIT_DELAYED_WORK(&intel_dp->panel_vdd_work,
5905			  edp_panel_vdd_work);
5906
5907	intel_connector_attach_encoder(intel_connector, intel_encoder);
5908	drm_connector_register(connector);
5909
5910	if (HAS_DDI(dev))
5911		intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
5912	else
5913		intel_connector->get_hw_state = intel_connector_get_hw_state;
5914	intel_connector->unregister = intel_dp_connector_unregister;
5915
5916	/* Set up the hotplug pin. */
5917	switch (port) {
5918	case PORT_A:
5919		intel_encoder->hpd_pin = HPD_PORT_A;
5920		break;
5921	case PORT_B:
5922		intel_encoder->hpd_pin = HPD_PORT_B;
5923		if (IS_BXT_REVID(dev, 0, BXT_REVID_A1))
5924			intel_encoder->hpd_pin = HPD_PORT_A;
5925		break;
5926	case PORT_C:
5927		intel_encoder->hpd_pin = HPD_PORT_C;
5928		break;
5929	case PORT_D:
5930		intel_encoder->hpd_pin = HPD_PORT_D;
5931		break;
5932	case PORT_E:
5933		intel_encoder->hpd_pin = HPD_PORT_E;
5934		break;
5935	default:
5936		BUG();
5937	}
5938
5939	if (is_edp(intel_dp)) {
5940		pps_lock(intel_dp);
5941		intel_dp_init_panel_power_timestamps(intel_dp);
5942		if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev))
5943			vlv_initial_power_sequencer_setup(intel_dp);
5944		else
5945			intel_dp_init_panel_power_sequencer(dev, intel_dp);
5946		pps_unlock(intel_dp);
5947	}
5948
5949	ret = intel_dp_aux_init(intel_dp, intel_connector);
5950	if (ret)
5951		goto fail;
5952
5953	/* init MST on ports that can support it */
5954	if (HAS_DP_MST(dev) &&
5955	    (port == PORT_B || port == PORT_C || port == PORT_D))
5956		intel_dp_mst_encoder_init(intel_dig_port,
5957					  intel_connector->base.base.id);
5958
5959	if (!intel_edp_init_connector(intel_dp, intel_connector)) {
5960		intel_dp_aux_fini(intel_dp);
5961		intel_dp_mst_encoder_cleanup(intel_dig_port);
5962		goto fail;
5963	}
5964
5965	intel_dp_add_properties(intel_dp, connector);
5966
5967	/* For G4X desktop chip, PEG_BAND_GAP_DATA 3:0 must first be written
5968	 * 0xd.  Failure to do so will result in spurious interrupts being
5969	 * generated on the port when a cable is not attached.
5970	 */
5971	if (IS_G4X(dev) && !IS_GM45(dev)) {
5972		u32 temp = I915_READ(PEG_BAND_GAP_DATA);
5973		I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
5974	}
5975
5976	i915_debugfs_connector_add(connector);
5977
5978	return true;
5979
5980fail:
5981	if (is_edp(intel_dp)) {
5982		cancel_delayed_work_sync(&intel_dp->panel_vdd_work);
5983		/*
5984		 * vdd might still be enabled do to the delayed vdd off.
5985		 * Make sure vdd is actually turned off here.
5986		 */
5987		pps_lock(intel_dp);
5988		edp_panel_vdd_off_sync(intel_dp);
5989		pps_unlock(intel_dp);
5990	}
5991	drm_connector_unregister(connector);
5992	drm_connector_cleanup(connector);
5993
5994	return false;
5995}
5996
5997void
5998intel_dp_init(struct drm_device *dev,
5999	      i915_reg_t output_reg, enum port port)
6000{
6001	struct drm_i915_private *dev_priv = dev->dev_private;
6002	struct intel_digital_port *intel_dig_port;
6003	struct intel_encoder *intel_encoder;
6004	struct drm_encoder *encoder;
6005	struct intel_connector *intel_connector;
6006
6007	intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL);
6008	if (!intel_dig_port)
6009		return;
6010
6011	intel_connector = intel_connector_alloc();
6012	if (!intel_connector)
6013		goto err_connector_alloc;
6014
6015	intel_encoder = &intel_dig_port->base;
6016	encoder = &intel_encoder->base;
6017
6018	if (drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs,
6019			     DRM_MODE_ENCODER_TMDS, NULL))
6020		goto err_encoder_init;
6021
6022	intel_encoder->compute_config = intel_dp_compute_config;
6023	intel_encoder->disable = intel_disable_dp;
6024	intel_encoder->get_hw_state = intel_dp_get_hw_state;
6025	intel_encoder->get_config = intel_dp_get_config;
6026	intel_encoder->suspend = intel_dp_encoder_suspend;
6027	if (IS_CHERRYVIEW(dev)) {
6028		intel_encoder->pre_pll_enable = chv_dp_pre_pll_enable;
6029		intel_encoder->pre_enable = chv_pre_enable_dp;
6030		intel_encoder->enable = vlv_enable_dp;
6031		intel_encoder->post_disable = chv_post_disable_dp;
6032		intel_encoder->post_pll_disable = chv_dp_post_pll_disable;
6033	} else if (IS_VALLEYVIEW(dev)) {
6034		intel_encoder->pre_pll_enable = vlv_dp_pre_pll_enable;
6035		intel_encoder->pre_enable = vlv_pre_enable_dp;
6036		intel_encoder->enable = vlv_enable_dp;
6037		intel_encoder->post_disable = vlv_post_disable_dp;
6038	} else {
6039		intel_encoder->pre_enable = g4x_pre_enable_dp;
6040		intel_encoder->enable = g4x_enable_dp;
6041		if (INTEL_INFO(dev)->gen >= 5)
6042			intel_encoder->post_disable = ilk_post_disable_dp;
6043	}
6044
6045	intel_dig_port->port = port;
6046	intel_dig_port->dp.output_reg = output_reg;
6047	intel_dig_port->max_lanes = 4;
6048
6049	intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
6050	if (IS_CHERRYVIEW(dev)) {
6051		if (port == PORT_D)
6052			intel_encoder->crtc_mask = 1 << 2;
6053		else
6054			intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
6055	} else {
6056		intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
6057	}
6058	intel_encoder->cloneable = 0;
6059
6060	intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
6061	dev_priv->hotplug.irq_port[port] = intel_dig_port;
6062
6063	if (!intel_dp_init_connector(intel_dig_port, intel_connector))
6064		goto err_init_connector;
6065
6066	return;
6067
6068err_init_connector:
6069	drm_encoder_cleanup(encoder);
6070err_encoder_init:
6071	kfree(intel_connector);
6072err_connector_alloc:
6073	kfree(intel_dig_port);
6074
6075	return;
6076}
6077
6078void intel_dp_mst_suspend(struct drm_device *dev)
6079{
6080	struct drm_i915_private *dev_priv = dev->dev_private;
6081	int i;
6082
6083	/* disable MST */
6084	for (i = 0; i < I915_MAX_PORTS; i++) {
6085		struct intel_digital_port *intel_dig_port = dev_priv->hotplug.irq_port[i];
6086		if (!intel_dig_port)
6087			continue;
6088
6089		if (intel_dig_port->base.type == INTEL_OUTPUT_DISPLAYPORT) {
6090			if (!intel_dig_port->dp.can_mst)
6091				continue;
6092			if (intel_dig_port->dp.is_mst)
6093				drm_dp_mst_topology_mgr_suspend(&intel_dig_port->dp.mst_mgr);
6094		}
6095	}
6096}
6097
6098void intel_dp_mst_resume(struct drm_device *dev)
6099{
6100	struct drm_i915_private *dev_priv = dev->dev_private;
6101	int i;
6102
6103	for (i = 0; i < I915_MAX_PORTS; i++) {
6104		struct intel_digital_port *intel_dig_port = dev_priv->hotplug.irq_port[i];
6105		if (!intel_dig_port)
6106			continue;
6107		if (intel_dig_port->base.type == INTEL_OUTPUT_DISPLAYPORT) {
6108			int ret;
6109
6110			if (!intel_dig_port->dp.can_mst)
6111				continue;
6112
6113			ret = drm_dp_mst_topology_mgr_resume(&intel_dig_port->dp.mst_mgr);
6114			if (ret != 0) {
6115				intel_dp_check_mst_status(&intel_dig_port->dp);
6116			}
6117		}
6118	}
6119}