aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c607
1 files changed, 337 insertions, 270 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index ffa43eca14d3..0c5ba3410a1e 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -262,7 +262,7 @@ static void pps_lock(struct intel_dp *intel_dp)
262 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 262 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
263 struct intel_encoder *encoder = &intel_dig_port->base; 263 struct intel_encoder *encoder = &intel_dig_port->base;
264 struct drm_device *dev = encoder->base.dev; 264 struct drm_device *dev = encoder->base.dev;
265 struct drm_i915_private *dev_priv = dev->dev_private; 265 struct drm_i915_private *dev_priv = to_i915(dev);
266 enum intel_display_power_domain power_domain; 266 enum intel_display_power_domain power_domain;
267 267
268 /* 268 /*
@@ -280,7 +280,7 @@ static void pps_unlock(struct intel_dp *intel_dp)
280 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 280 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
281 struct intel_encoder *encoder = &intel_dig_port->base; 281 struct intel_encoder *encoder = &intel_dig_port->base;
282 struct drm_device *dev = encoder->base.dev; 282 struct drm_device *dev = encoder->base.dev;
283 struct drm_i915_private *dev_priv = dev->dev_private; 283 struct drm_i915_private *dev_priv = to_i915(dev);
284 enum intel_display_power_domain power_domain; 284 enum intel_display_power_domain power_domain;
285 285
286 mutex_unlock(&dev_priv->pps_mutex); 286 mutex_unlock(&dev_priv->pps_mutex);
@@ -294,7 +294,7 @@ vlv_power_sequencer_kick(struct intel_dp *intel_dp)
294{ 294{
295 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 295 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
296 struct drm_device *dev = intel_dig_port->base.base.dev; 296 struct drm_device *dev = intel_dig_port->base.base.dev;
297 struct drm_i915_private *dev_priv = dev->dev_private; 297 struct drm_i915_private *dev_priv = to_i915(dev);
298 enum pipe pipe = intel_dp->pps_pipe; 298 enum pipe pipe = intel_dp->pps_pipe;
299 bool pll_enabled, release_cl_override = false; 299 bool pll_enabled, release_cl_override = false;
300 enum dpio_phy phy = DPIO_PHY(pipe); 300 enum dpio_phy phy = DPIO_PHY(pipe);
@@ -368,7 +368,7 @@ vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
368{ 368{
369 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 369 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
370 struct drm_device *dev = intel_dig_port->base.base.dev; 370 struct drm_device *dev = intel_dig_port->base.base.dev;
371 struct drm_i915_private *dev_priv = dev->dev_private; 371 struct drm_i915_private *dev_priv = to_i915(dev);
372 struct intel_encoder *encoder; 372 struct intel_encoder *encoder;
373 unsigned int pipes = (1 << PIPE_A) | (1 << PIPE_B); 373 unsigned int pipes = (1 << PIPE_A) | (1 << PIPE_B);
374 enum pipe pipe; 374 enum pipe pipe;
@@ -426,6 +426,37 @@ vlv_power_sequencer_pipe(struct intel_dp *intel_dp)
426 return intel_dp->pps_pipe; 426 return intel_dp->pps_pipe;
427} 427}
428 428
429static int
430bxt_power_sequencer_idx(struct intel_dp *intel_dp)
431{
432 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
433 struct drm_device *dev = intel_dig_port->base.base.dev;
434 struct drm_i915_private *dev_priv = to_i915(dev);
435
436 lockdep_assert_held(&dev_priv->pps_mutex);
437
438 /* We should never land here with regular DP ports */
439 WARN_ON(!is_edp(intel_dp));
440
441 /*
442 * TODO: BXT has 2 PPS instances. The correct port->PPS instance
443 * mapping needs to be retrieved from VBT, for now just hard-code to
444 * use instance #0 always.
445 */
446 if (!intel_dp->pps_reset)
447 return 0;
448
449 intel_dp->pps_reset = false;
450
451 /*
452 * Only the HW needs to be reprogrammed, the SW state is fixed and
453 * has been setup during connector init.
454 */
455 intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
456
457 return 0;
458}
459
429typedef bool (*vlv_pipe_check)(struct drm_i915_private *dev_priv, 460typedef bool (*vlv_pipe_check)(struct drm_i915_private *dev_priv,
430 enum pipe pipe); 461 enum pipe pipe);
431 462
@@ -475,7 +506,7 @@ vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp)
475{ 506{
476 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 507 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
477 struct drm_device *dev = intel_dig_port->base.base.dev; 508 struct drm_device *dev = intel_dig_port->base.base.dev;
478 struct drm_i915_private *dev_priv = dev->dev_private; 509 struct drm_i915_private *dev_priv = to_i915(dev);
479 enum port port = intel_dig_port->port; 510 enum port port = intel_dig_port->port;
480 511
481 lockdep_assert_held(&dev_priv->pps_mutex); 512 lockdep_assert_held(&dev_priv->pps_mutex);
@@ -507,12 +538,13 @@ vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp)
507 intel_dp_init_panel_power_sequencer_registers(dev, intel_dp); 538 intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
508} 539}
509 540
510void vlv_power_sequencer_reset(struct drm_i915_private *dev_priv) 541void intel_power_sequencer_reset(struct drm_i915_private *dev_priv)
511{ 542{
512 struct drm_device *dev = dev_priv->dev; 543 struct drm_device *dev = &dev_priv->drm;
513 struct intel_encoder *encoder; 544 struct intel_encoder *encoder;
514 545
515 if (WARN_ON(!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev))) 546 if (WARN_ON(!IS_VALLEYVIEW(dev) && !IS_CHERRYVIEW(dev) &&
547 !IS_BROXTON(dev)))
516 return; 548 return;
517 549
518 /* 550 /*
@@ -532,34 +564,71 @@ void vlv_power_sequencer_reset(struct drm_i915_private *dev_priv)
532 continue; 564 continue;
533 565
534 intel_dp = enc_to_intel_dp(&encoder->base); 566 intel_dp = enc_to_intel_dp(&encoder->base);
535 intel_dp->pps_pipe = INVALID_PIPE; 567 if (IS_BROXTON(dev))
568 intel_dp->pps_reset = true;
569 else
570 intel_dp->pps_pipe = INVALID_PIPE;
571 }
572}
573
574struct pps_registers {
575 i915_reg_t pp_ctrl;
576 i915_reg_t pp_stat;
577 i915_reg_t pp_on;
578 i915_reg_t pp_off;
579 i915_reg_t pp_div;
580};
581
582static void intel_pps_get_registers(struct drm_i915_private *dev_priv,
583 struct intel_dp *intel_dp,
584 struct pps_registers *regs)
585{
586 memset(regs, 0, sizeof(*regs));
587
588 if (IS_BROXTON(dev_priv)) {
589 int idx = bxt_power_sequencer_idx(intel_dp);
590
591 regs->pp_ctrl = BXT_PP_CONTROL(idx);
592 regs->pp_stat = BXT_PP_STATUS(idx);
593 regs->pp_on = BXT_PP_ON_DELAYS(idx);
594 regs->pp_off = BXT_PP_OFF_DELAYS(idx);
595 } else if (HAS_PCH_SPLIT(dev_priv)) {
596 regs->pp_ctrl = PCH_PP_CONTROL;
597 regs->pp_stat = PCH_PP_STATUS;
598 regs->pp_on = PCH_PP_ON_DELAYS;
599 regs->pp_off = PCH_PP_OFF_DELAYS;
600 regs->pp_div = PCH_PP_DIVISOR;
601 } else {
602 enum pipe pipe = vlv_power_sequencer_pipe(intel_dp);
603
604 regs->pp_ctrl = VLV_PIPE_PP_CONTROL(pipe);
605 regs->pp_stat = VLV_PIPE_PP_STATUS(pipe);
606 regs->pp_on = VLV_PIPE_PP_ON_DELAYS(pipe);
607 regs->pp_off = VLV_PIPE_PP_OFF_DELAYS(pipe);
608 regs->pp_div = VLV_PIPE_PP_DIVISOR(pipe);
536 } 609 }
537} 610}
538 611
539static i915_reg_t 612static i915_reg_t
540_pp_ctrl_reg(struct intel_dp *intel_dp) 613_pp_ctrl_reg(struct intel_dp *intel_dp)
541{ 614{
542 struct drm_device *dev = intel_dp_to_dev(intel_dp); 615 struct pps_registers regs;
543 616
544 if (IS_BROXTON(dev)) 617 intel_pps_get_registers(to_i915(intel_dp_to_dev(intel_dp)), intel_dp,
545 return BXT_PP_CONTROL(0); 618 &regs);
546 else if (HAS_PCH_SPLIT(dev)) 619
547 return PCH_PP_CONTROL; 620 return regs.pp_ctrl;
548 else
549 return VLV_PIPE_PP_CONTROL(vlv_power_sequencer_pipe(intel_dp));
550} 621}
551 622
552static i915_reg_t 623static i915_reg_t
553_pp_stat_reg(struct intel_dp *intel_dp) 624_pp_stat_reg(struct intel_dp *intel_dp)
554{ 625{
555 struct drm_device *dev = intel_dp_to_dev(intel_dp); 626 struct pps_registers regs;
556 627
557 if (IS_BROXTON(dev)) 628 intel_pps_get_registers(to_i915(intel_dp_to_dev(intel_dp)), intel_dp,
558 return BXT_PP_STATUS(0); 629 &regs);
559 else if (HAS_PCH_SPLIT(dev)) 630
560 return PCH_PP_STATUS; 631 return regs.pp_stat;
561 else
562 return VLV_PIPE_PP_STATUS(vlv_power_sequencer_pipe(intel_dp));
563} 632}
564 633
565/* Reboot notifier handler to shutdown panel power to guarantee T12 timing 634/* Reboot notifier handler to shutdown panel power to guarantee T12 timing
@@ -570,7 +639,7 @@ static int edp_notify_handler(struct notifier_block *this, unsigned long code,
570 struct intel_dp *intel_dp = container_of(this, typeof(* intel_dp), 639 struct intel_dp *intel_dp = container_of(this, typeof(* intel_dp),
571 edp_notifier); 640 edp_notifier);
572 struct drm_device *dev = intel_dp_to_dev(intel_dp); 641 struct drm_device *dev = intel_dp_to_dev(intel_dp);
573 struct drm_i915_private *dev_priv = dev->dev_private; 642 struct drm_i915_private *dev_priv = to_i915(dev);
574 643
575 if (!is_edp(intel_dp) || code != SYS_RESTART) 644 if (!is_edp(intel_dp) || code != SYS_RESTART)
576 return 0; 645 return 0;
@@ -601,7 +670,7 @@ static int edp_notify_handler(struct notifier_block *this, unsigned long code,
601static bool edp_have_panel_power(struct intel_dp *intel_dp) 670static bool edp_have_panel_power(struct intel_dp *intel_dp)
602{ 671{
603 struct drm_device *dev = intel_dp_to_dev(intel_dp); 672 struct drm_device *dev = intel_dp_to_dev(intel_dp);
604 struct drm_i915_private *dev_priv = dev->dev_private; 673 struct drm_i915_private *dev_priv = to_i915(dev);
605 674
606 lockdep_assert_held(&dev_priv->pps_mutex); 675 lockdep_assert_held(&dev_priv->pps_mutex);
607 676
@@ -615,7 +684,7 @@ static bool edp_have_panel_power(struct intel_dp *intel_dp)
615static bool edp_have_panel_vdd(struct intel_dp *intel_dp) 684static bool edp_have_panel_vdd(struct intel_dp *intel_dp)
616{ 685{
617 struct drm_device *dev = intel_dp_to_dev(intel_dp); 686 struct drm_device *dev = intel_dp_to_dev(intel_dp);
618 struct drm_i915_private *dev_priv = dev->dev_private; 687 struct drm_i915_private *dev_priv = to_i915(dev);
619 688
620 lockdep_assert_held(&dev_priv->pps_mutex); 689 lockdep_assert_held(&dev_priv->pps_mutex);
621 690
@@ -630,7 +699,7 @@ static void
630intel_dp_check_edp(struct intel_dp *intel_dp) 699intel_dp_check_edp(struct intel_dp *intel_dp)
631{ 700{
632 struct drm_device *dev = intel_dp_to_dev(intel_dp); 701 struct drm_device *dev = intel_dp_to_dev(intel_dp);
633 struct drm_i915_private *dev_priv = dev->dev_private; 702 struct drm_i915_private *dev_priv = to_i915(dev);
634 703
635 if (!is_edp(intel_dp)) 704 if (!is_edp(intel_dp))
636 return; 705 return;
@@ -648,7 +717,7 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp, bool has_aux_irq)
648{ 717{
649 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 718 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
650 struct drm_device *dev = intel_dig_port->base.base.dev; 719 struct drm_device *dev = intel_dig_port->base.base.dev;
651 struct drm_i915_private *dev_priv = dev->dev_private; 720 struct drm_i915_private *dev_priv = to_i915(dev);
652 i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg; 721 i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg;
653 uint32_t status; 722 uint32_t status;
654 bool done; 723 bool done;
@@ -658,7 +727,7 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp, bool has_aux_irq)
658 done = wait_event_timeout(dev_priv->gmbus_wait_queue, C, 727 done = wait_event_timeout(dev_priv->gmbus_wait_queue, C,
659 msecs_to_jiffies_timeout(10)); 728 msecs_to_jiffies_timeout(10));
660 else 729 else
661 done = wait_for_atomic(C, 10) == 0; 730 done = wait_for(C, 10) == 0;
662 if (!done) 731 if (!done)
663 DRM_ERROR("dp aux hw did not signal timeout (has irq: %i)!\n", 732 DRM_ERROR("dp aux hw did not signal timeout (has irq: %i)!\n",
664 has_aux_irq); 733 has_aux_irq);
@@ -781,7 +850,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
781{ 850{
782 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 851 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
783 struct drm_device *dev = intel_dig_port->base.base.dev; 852 struct drm_device *dev = intel_dig_port->base.base.dev;
784 struct drm_i915_private *dev_priv = dev->dev_private; 853 struct drm_i915_private *dev_priv = to_i915(dev);
785 i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg; 854 i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg;
786 uint32_t aux_clock_divider; 855 uint32_t aux_clock_divider;
787 int i, ret, recv_bytes; 856 int i, ret, recv_bytes;
@@ -1180,35 +1249,18 @@ intel_dp_aux_fini(struct intel_dp *intel_dp)
1180 kfree(intel_dp->aux.name); 1249 kfree(intel_dp->aux.name);
1181} 1250}
1182 1251
1183static int 1252static void
1184intel_dp_aux_init(struct intel_dp *intel_dp, struct intel_connector *connector) 1253intel_dp_aux_init(struct intel_dp *intel_dp, struct intel_connector *connector)
1185{ 1254{
1186 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 1255 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
1187 enum port port = intel_dig_port->port; 1256 enum port port = intel_dig_port->port;
1188 int ret;
1189 1257
1190 intel_aux_reg_init(intel_dp); 1258 intel_aux_reg_init(intel_dp);
1259 drm_dp_aux_init(&intel_dp->aux);
1191 1260
1261 /* Failure to allocate our preferred name is not critical */
1192 intel_dp->aux.name = kasprintf(GFP_KERNEL, "DPDDC-%c", port_name(port)); 1262 intel_dp->aux.name = kasprintf(GFP_KERNEL, "DPDDC-%c", port_name(port));
1193 if (!intel_dp->aux.name)
1194 return -ENOMEM;
1195
1196 intel_dp->aux.dev = connector->base.kdev;
1197 intel_dp->aux.transfer = intel_dp_aux_transfer; 1263 intel_dp->aux.transfer = intel_dp_aux_transfer;
1198
1199 DRM_DEBUG_KMS("registering %s bus for %s\n",
1200 intel_dp->aux.name,
1201 connector->base.kdev->kobj.name);
1202
1203 ret = drm_dp_aux_register(&intel_dp->aux);
1204 if (ret < 0) {
1205 DRM_ERROR("drm_dp_aux_register() for %s failed (%d)\n",
1206 intel_dp->aux.name, ret);
1207 kfree(intel_dp->aux.name);
1208 return ret;
1209 }
1210
1211 return 0;
1212} 1264}
1213 1265
1214static int 1266static int
@@ -1421,7 +1473,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
1421 struct intel_crtc_state *pipe_config) 1473 struct intel_crtc_state *pipe_config)
1422{ 1474{
1423 struct drm_device *dev = encoder->base.dev; 1475 struct drm_device *dev = encoder->base.dev;
1424 struct drm_i915_private *dev_priv = dev->dev_private; 1476 struct drm_i915_private *dev_priv = to_i915(dev);
1425 struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; 1477 struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
1426 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 1478 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
1427 enum port port = dp_to_dig_port(intel_dp)->port; 1479 enum port port = dp_to_dig_port(intel_dp)->port;
@@ -1449,7 +1501,6 @@ intel_dp_compute_config(struct intel_encoder *encoder,
1449 if (HAS_PCH_SPLIT(dev) && !HAS_DDI(dev) && port != PORT_A) 1501 if (HAS_PCH_SPLIT(dev) && !HAS_DDI(dev) && port != PORT_A)
1450 pipe_config->has_pch_encoder = true; 1502 pipe_config->has_pch_encoder = true;
1451 1503
1452 pipe_config->has_dp_encoder = true;
1453 pipe_config->has_drrs = false; 1504 pipe_config->has_drrs = false;
1454 pipe_config->has_audio = intel_dp->has_audio && port != PORT_A; 1505 pipe_config->has_audio = intel_dp->has_audio && port != PORT_A;
1455 1506
@@ -1605,7 +1656,7 @@ void intel_dp_set_link_params(struct intel_dp *intel_dp,
1605static void intel_dp_prepare(struct intel_encoder *encoder) 1656static void intel_dp_prepare(struct intel_encoder *encoder)
1606{ 1657{
1607 struct drm_device *dev = encoder->base.dev; 1658 struct drm_device *dev = encoder->base.dev;
1608 struct drm_i915_private *dev_priv = dev->dev_private; 1659 struct drm_i915_private *dev_priv = to_i915(dev);
1609 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 1660 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
1610 enum port port = dp_to_dig_port(intel_dp)->port; 1661 enum port port = dp_to_dig_port(intel_dp)->port;
1611 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 1662 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
@@ -1693,16 +1744,21 @@ static void intel_dp_prepare(struct intel_encoder *encoder)
1693#define IDLE_CYCLE_MASK (PP_ON | PP_SEQUENCE_MASK | PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK) 1744#define IDLE_CYCLE_MASK (PP_ON | PP_SEQUENCE_MASK | PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK)
1694#define IDLE_CYCLE_VALUE (0 | PP_SEQUENCE_NONE | 0 | PP_SEQUENCE_STATE_OFF_IDLE) 1745#define IDLE_CYCLE_VALUE (0 | PP_SEQUENCE_NONE | 0 | PP_SEQUENCE_STATE_OFF_IDLE)
1695 1746
1747static void intel_pps_verify_state(struct drm_i915_private *dev_priv,
1748 struct intel_dp *intel_dp);
1749
1696static void wait_panel_status(struct intel_dp *intel_dp, 1750static void wait_panel_status(struct intel_dp *intel_dp,
1697 u32 mask, 1751 u32 mask,
1698 u32 value) 1752 u32 value)
1699{ 1753{
1700 struct drm_device *dev = intel_dp_to_dev(intel_dp); 1754 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1701 struct drm_i915_private *dev_priv = dev->dev_private; 1755 struct drm_i915_private *dev_priv = to_i915(dev);
1702 i915_reg_t pp_stat_reg, pp_ctrl_reg; 1756 i915_reg_t pp_stat_reg, pp_ctrl_reg;
1703 1757
1704 lockdep_assert_held(&dev_priv->pps_mutex); 1758 lockdep_assert_held(&dev_priv->pps_mutex);
1705 1759
1760 intel_pps_verify_state(dev_priv, intel_dp);
1761
1706 pp_stat_reg = _pp_stat_reg(intel_dp); 1762 pp_stat_reg = _pp_stat_reg(intel_dp);
1707 pp_ctrl_reg = _pp_ctrl_reg(intel_dp); 1763 pp_ctrl_reg = _pp_ctrl_reg(intel_dp);
1708 1764
@@ -1711,8 +1767,9 @@ static void wait_panel_status(struct intel_dp *intel_dp,
1711 I915_READ(pp_stat_reg), 1767 I915_READ(pp_stat_reg),
1712 I915_READ(pp_ctrl_reg)); 1768 I915_READ(pp_ctrl_reg));
1713 1769
1714 if (_wait_for((I915_READ(pp_stat_reg) & mask) == value, 1770 if (intel_wait_for_register(dev_priv,
1715 5 * USEC_PER_SEC, 10 * USEC_PER_MSEC)) 1771 pp_stat_reg, mask, value,
1772 5000))
1716 DRM_ERROR("Panel status timeout: status %08x control %08x\n", 1773 DRM_ERROR("Panel status timeout: status %08x control %08x\n",
1717 I915_READ(pp_stat_reg), 1774 I915_READ(pp_stat_reg),
1718 I915_READ(pp_ctrl_reg)); 1775 I915_READ(pp_ctrl_reg));
@@ -1772,7 +1829,7 @@ static void edp_wait_backlight_off(struct intel_dp *intel_dp)
1772static u32 ironlake_get_pp_control(struct intel_dp *intel_dp) 1829static u32 ironlake_get_pp_control(struct intel_dp *intel_dp)
1773{ 1830{
1774 struct drm_device *dev = intel_dp_to_dev(intel_dp); 1831 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1775 struct drm_i915_private *dev_priv = dev->dev_private; 1832 struct drm_i915_private *dev_priv = to_i915(dev);
1776 u32 control; 1833 u32 control;
1777 1834
1778 lockdep_assert_held(&dev_priv->pps_mutex); 1835 lockdep_assert_held(&dev_priv->pps_mutex);
@@ -1795,7 +1852,7 @@ static bool edp_panel_vdd_on(struct intel_dp *intel_dp)
1795 struct drm_device *dev = intel_dp_to_dev(intel_dp); 1852 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1796 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 1853 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
1797 struct intel_encoder *intel_encoder = &intel_dig_port->base; 1854 struct intel_encoder *intel_encoder = &intel_dig_port->base;
1798 struct drm_i915_private *dev_priv = dev->dev_private; 1855 struct drm_i915_private *dev_priv = to_i915(dev);
1799 enum intel_display_power_domain power_domain; 1856 enum intel_display_power_domain power_domain;
1800 u32 pp; 1857 u32 pp;
1801 i915_reg_t pp_stat_reg, pp_ctrl_reg; 1858 i915_reg_t pp_stat_reg, pp_ctrl_reg;
@@ -1868,7 +1925,7 @@ void intel_edp_panel_vdd_on(struct intel_dp *intel_dp)
1868static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp) 1925static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
1869{ 1926{
1870 struct drm_device *dev = intel_dp_to_dev(intel_dp); 1927 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1871 struct drm_i915_private *dev_priv = dev->dev_private; 1928 struct drm_i915_private *dev_priv = to_i915(dev);
1872 struct intel_digital_port *intel_dig_port = 1929 struct intel_digital_port *intel_dig_port =
1873 dp_to_dig_port(intel_dp); 1930 dp_to_dig_port(intel_dp);
1874 struct intel_encoder *intel_encoder = &intel_dig_port->base; 1931 struct intel_encoder *intel_encoder = &intel_dig_port->base;
@@ -1937,8 +1994,7 @@ static void edp_panel_vdd_schedule_off(struct intel_dp *intel_dp)
1937 */ 1994 */
1938static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync) 1995static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
1939{ 1996{
1940 struct drm_i915_private *dev_priv = 1997 struct drm_i915_private *dev_priv = to_i915(intel_dp_to_dev(intel_dp));
1941 intel_dp_to_dev(intel_dp)->dev_private;
1942 1998
1943 lockdep_assert_held(&dev_priv->pps_mutex); 1999 lockdep_assert_held(&dev_priv->pps_mutex);
1944 2000
@@ -1959,7 +2015,7 @@ static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
1959static void edp_panel_on(struct intel_dp *intel_dp) 2015static void edp_panel_on(struct intel_dp *intel_dp)
1960{ 2016{
1961 struct drm_device *dev = intel_dp_to_dev(intel_dp); 2017 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1962 struct drm_i915_private *dev_priv = dev->dev_private; 2018 struct drm_i915_private *dev_priv = to_i915(dev);
1963 u32 pp; 2019 u32 pp;
1964 i915_reg_t pp_ctrl_reg; 2020 i915_reg_t pp_ctrl_reg;
1965 2021
@@ -2020,7 +2076,7 @@ static void edp_panel_off(struct intel_dp *intel_dp)
2020 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 2076 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2021 struct intel_encoder *intel_encoder = &intel_dig_port->base; 2077 struct intel_encoder *intel_encoder = &intel_dig_port->base;
2022 struct drm_device *dev = intel_dp_to_dev(intel_dp); 2078 struct drm_device *dev = intel_dp_to_dev(intel_dp);
2023 struct drm_i915_private *dev_priv = dev->dev_private; 2079 struct drm_i915_private *dev_priv = to_i915(dev);
2024 enum intel_display_power_domain power_domain; 2080 enum intel_display_power_domain power_domain;
2025 u32 pp; 2081 u32 pp;
2026 i915_reg_t pp_ctrl_reg; 2082 i915_reg_t pp_ctrl_reg;
@@ -2072,7 +2128,7 @@ static void _intel_edp_backlight_on(struct intel_dp *intel_dp)
2072{ 2128{
2073 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 2129 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2074 struct drm_device *dev = intel_dig_port->base.base.dev; 2130 struct drm_device *dev = intel_dig_port->base.base.dev;
2075 struct drm_i915_private *dev_priv = dev->dev_private; 2131 struct drm_i915_private *dev_priv = to_i915(dev);
2076 u32 pp; 2132 u32 pp;
2077 i915_reg_t pp_ctrl_reg; 2133 i915_reg_t pp_ctrl_reg;
2078 2134
@@ -2113,7 +2169,7 @@ void intel_edp_backlight_on(struct intel_dp *intel_dp)
2113static void _intel_edp_backlight_off(struct intel_dp *intel_dp) 2169static void _intel_edp_backlight_off(struct intel_dp *intel_dp)
2114{ 2170{
2115 struct drm_device *dev = intel_dp_to_dev(intel_dp); 2171 struct drm_device *dev = intel_dp_to_dev(intel_dp);
2116 struct drm_i915_private *dev_priv = dev->dev_private; 2172 struct drm_i915_private *dev_priv = to_i915(dev);
2117 u32 pp; 2173 u32 pp;
2118 i915_reg_t pp_ctrl_reg; 2174 i915_reg_t pp_ctrl_reg;
2119 2175
@@ -2229,7 +2285,7 @@ static void ironlake_edp_pll_on(struct intel_dp *intel_dp)
2229 * 2. Program DP PLL enable 2285 * 2. Program DP PLL enable
2230 */ 2286 */
2231 if (IS_GEN5(dev_priv)) 2287 if (IS_GEN5(dev_priv))
2232 intel_wait_for_vblank_if_active(dev_priv->dev, !crtc->pipe); 2288 intel_wait_for_vblank_if_active(&dev_priv->drm, !crtc->pipe);
2233 2289
2234 intel_dp->DP |= DP_PLL_ENABLE; 2290 intel_dp->DP |= DP_PLL_ENABLE;
2235 2291
@@ -2294,7 +2350,7 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder,
2294 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 2350 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2295 enum port port = dp_to_dig_port(intel_dp)->port; 2351 enum port port = dp_to_dig_port(intel_dp)->port;
2296 struct drm_device *dev = encoder->base.dev; 2352 struct drm_device *dev = encoder->base.dev;
2297 struct drm_i915_private *dev_priv = dev->dev_private; 2353 struct drm_i915_private *dev_priv = to_i915(dev);
2298 enum intel_display_power_domain power_domain; 2354 enum intel_display_power_domain power_domain;
2299 u32 tmp; 2355 u32 tmp;
2300 bool ret; 2356 bool ret;
@@ -2347,7 +2403,7 @@ static void intel_dp_get_config(struct intel_encoder *encoder,
2347 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 2403 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2348 u32 tmp, flags = 0; 2404 u32 tmp, flags = 0;
2349 struct drm_device *dev = encoder->base.dev; 2405 struct drm_device *dev = encoder->base.dev;
2350 struct drm_i915_private *dev_priv = dev->dev_private; 2406 struct drm_i915_private *dev_priv = to_i915(dev);
2351 enum port port = dp_to_dig_port(intel_dp)->port; 2407 enum port port = dp_to_dig_port(intel_dp)->port;
2352 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 2408 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2353 2409
@@ -2385,8 +2441,6 @@ static void intel_dp_get_config(struct intel_encoder *encoder,
2385 !IS_CHERRYVIEW(dev) && tmp & DP_COLOR_RANGE_16_235) 2441 !IS_CHERRYVIEW(dev) && tmp & DP_COLOR_RANGE_16_235)
2386 pipe_config->limited_color_range = true; 2442 pipe_config->limited_color_range = true;
2387 2443
2388 pipe_config->has_dp_encoder = true;
2389
2390 pipe_config->lane_count = 2444 pipe_config->lane_count =
2391 ((tmp & DP_PORT_WIDTH_MASK) >> DP_PORT_WIDTH_SHIFT) + 1; 2445 ((tmp & DP_PORT_WIDTH_MASK) >> DP_PORT_WIDTH_SHIFT) + 1;
2392 2446
@@ -2471,7 +2525,7 @@ static void chv_post_disable_dp(struct intel_encoder *encoder)
2471{ 2525{
2472 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 2526 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2473 struct drm_device *dev = encoder->base.dev; 2527 struct drm_device *dev = encoder->base.dev;
2474 struct drm_i915_private *dev_priv = dev->dev_private; 2528 struct drm_i915_private *dev_priv = to_i915(dev);
2475 2529
2476 intel_dp_link_down(intel_dp); 2530 intel_dp_link_down(intel_dp);
2477 2531
@@ -2490,7 +2544,7 @@ _intel_dp_set_link_train(struct intel_dp *intel_dp,
2490{ 2544{
2491 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 2545 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2492 struct drm_device *dev = intel_dig_port->base.base.dev; 2546 struct drm_device *dev = intel_dig_port->base.base.dev;
2493 struct drm_i915_private *dev_priv = dev->dev_private; 2547 struct drm_i915_private *dev_priv = to_i915(dev);
2494 enum port port = intel_dig_port->port; 2548 enum port port = intel_dig_port->port;
2495 2549
2496 if (HAS_DDI(dev)) { 2550 if (HAS_DDI(dev)) {
@@ -2570,7 +2624,7 @@ _intel_dp_set_link_train(struct intel_dp *intel_dp,
2570static void intel_dp_enable_port(struct intel_dp *intel_dp) 2624static void intel_dp_enable_port(struct intel_dp *intel_dp)
2571{ 2625{
2572 struct drm_device *dev = intel_dp_to_dev(intel_dp); 2626 struct drm_device *dev = intel_dp_to_dev(intel_dp);
2573 struct drm_i915_private *dev_priv = dev->dev_private; 2627 struct drm_i915_private *dev_priv = to_i915(dev);
2574 struct intel_crtc *crtc = 2628 struct intel_crtc *crtc =
2575 to_intel_crtc(dp_to_dig_port(intel_dp)->base.base.crtc); 2629 to_intel_crtc(dp_to_dig_port(intel_dp)->base.base.crtc);
2576 2630
@@ -2599,7 +2653,7 @@ static void intel_enable_dp(struct intel_encoder *encoder)
2599{ 2653{
2600 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 2654 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2601 struct drm_device *dev = encoder->base.dev; 2655 struct drm_device *dev = encoder->base.dev;
2602 struct drm_i915_private *dev_priv = dev->dev_private; 2656 struct drm_i915_private *dev_priv = to_i915(dev);
2603 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 2657 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2604 uint32_t dp_reg = I915_READ(intel_dp->output_reg); 2658 uint32_t dp_reg = I915_READ(intel_dp->output_reg);
2605 enum pipe pipe = crtc->pipe; 2659 enum pipe pipe = crtc->pipe;
@@ -2672,7 +2726,7 @@ static void g4x_pre_enable_dp(struct intel_encoder *encoder)
2672static void vlv_detach_power_sequencer(struct intel_dp *intel_dp) 2726static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)
2673{ 2727{
2674 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 2728 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2675 struct drm_i915_private *dev_priv = intel_dig_port->base.base.dev->dev_private; 2729 struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
2676 enum pipe pipe = intel_dp->pps_pipe; 2730 enum pipe pipe = intel_dp->pps_pipe;
2677 i915_reg_t pp_on_reg = VLV_PIPE_PP_ON_DELAYS(pipe); 2731 i915_reg_t pp_on_reg = VLV_PIPE_PP_ON_DELAYS(pipe);
2678 2732
@@ -2698,7 +2752,7 @@ static void vlv_detach_power_sequencer(struct intel_dp *intel_dp)
2698static void vlv_steal_power_sequencer(struct drm_device *dev, 2752static void vlv_steal_power_sequencer(struct drm_device *dev,
2699 enum pipe pipe) 2753 enum pipe pipe)
2700{ 2754{
2701 struct drm_i915_private *dev_priv = dev->dev_private; 2755 struct drm_i915_private *dev_priv = to_i915(dev);
2702 struct intel_encoder *encoder; 2756 struct intel_encoder *encoder;
2703 2757
2704 lockdep_assert_held(&dev_priv->pps_mutex); 2758 lockdep_assert_held(&dev_priv->pps_mutex);
@@ -2736,7 +2790,7 @@ static void vlv_init_panel_power_sequencer(struct intel_dp *intel_dp)
2736 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 2790 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
2737 struct intel_encoder *encoder = &intel_dig_port->base; 2791 struct intel_encoder *encoder = &intel_dig_port->base;
2738 struct drm_device *dev = encoder->base.dev; 2792 struct drm_device *dev = encoder->base.dev;
2739 struct drm_i915_private *dev_priv = dev->dev_private; 2793 struct drm_i915_private *dev_priv = to_i915(dev);
2740 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 2794 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
2741 2795
2742 lockdep_assert_held(&dev_priv->pps_mutex); 2796 lockdep_assert_held(&dev_priv->pps_mutex);
@@ -2824,7 +2878,7 @@ uint8_t
2824intel_dp_voltage_max(struct intel_dp *intel_dp) 2878intel_dp_voltage_max(struct intel_dp *intel_dp)
2825{ 2879{
2826 struct drm_device *dev = intel_dp_to_dev(intel_dp); 2880 struct drm_device *dev = intel_dp_to_dev(intel_dp);
2827 struct drm_i915_private *dev_priv = dev->dev_private; 2881 struct drm_i915_private *dev_priv = to_i915(dev);
2828 enum port port = dp_to_dig_port(intel_dp)->port; 2882 enum port port = dp_to_dig_port(intel_dp)->port;
2829 2883
2830 if (IS_BROXTON(dev)) 2884 if (IS_BROXTON(dev))
@@ -3242,7 +3296,7 @@ void intel_dp_set_idle_link_train(struct intel_dp *intel_dp)
3242{ 3296{
3243 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 3297 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
3244 struct drm_device *dev = intel_dig_port->base.base.dev; 3298 struct drm_device *dev = intel_dig_port->base.base.dev;
3245 struct drm_i915_private *dev_priv = dev->dev_private; 3299 struct drm_i915_private *dev_priv = to_i915(dev);
3246 enum port port = intel_dig_port->port; 3300 enum port port = intel_dig_port->port;
3247 uint32_t val; 3301 uint32_t val;
3248 3302
@@ -3264,8 +3318,10 @@ void intel_dp_set_idle_link_train(struct intel_dp *intel_dp)
3264 if (port == PORT_A) 3318 if (port == PORT_A)
3265 return; 3319 return;
3266 3320
3267 if (wait_for((I915_READ(DP_TP_STATUS(port)) & DP_TP_STATUS_IDLE_DONE), 3321 if (intel_wait_for_register(dev_priv,DP_TP_STATUS(port),
3268 1)) 3322 DP_TP_STATUS_IDLE_DONE,
3323 DP_TP_STATUS_IDLE_DONE,
3324 1))
3269 DRM_ERROR("Timed out waiting for DP idle patterns\n"); 3325 DRM_ERROR("Timed out waiting for DP idle patterns\n");
3270} 3326}
3271 3327
@@ -3276,7 +3332,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
3276 struct intel_crtc *crtc = to_intel_crtc(intel_dig_port->base.base.crtc); 3332 struct intel_crtc *crtc = to_intel_crtc(intel_dig_port->base.base.crtc);
3277 enum port port = intel_dig_port->port; 3333 enum port port = intel_dig_port->port;
3278 struct drm_device *dev = intel_dig_port->base.base.dev; 3334 struct drm_device *dev = intel_dig_port->base.base.dev;
3279 struct drm_i915_private *dev_priv = dev->dev_private; 3335 struct drm_i915_private *dev_priv = to_i915(dev);
3280 uint32_t DP = intel_dp->DP; 3336 uint32_t DP = intel_dp->DP;
3281 3337
3282 if (WARN_ON(HAS_DDI(dev))) 3338 if (WARN_ON(HAS_DDI(dev)))
@@ -3328,7 +3384,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
3328 I915_WRITE(intel_dp->output_reg, DP); 3384 I915_WRITE(intel_dp->output_reg, DP);
3329 POSTING_READ(intel_dp->output_reg); 3385 POSTING_READ(intel_dp->output_reg);
3330 3386
3331 intel_wait_for_vblank_if_active(dev_priv->dev, PIPE_A); 3387 intel_wait_for_vblank_if_active(&dev_priv->drm, PIPE_A);
3332 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true); 3388 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true);
3333 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true); 3389 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
3334 } 3390 }
@@ -3343,7 +3399,7 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
3343{ 3399{
3344 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 3400 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3345 struct drm_device *dev = dig_port->base.base.dev; 3401 struct drm_device *dev = dig_port->base.base.dev;
3346 struct drm_i915_private *dev_priv = dev->dev_private; 3402 struct drm_i915_private *dev_priv = to_i915(dev);
3347 3403
3348 if (drm_dp_dpcd_read(&intel_dp->aux, 0x000, intel_dp->dpcd, 3404 if (drm_dp_dpcd_read(&intel_dp->aux, 0x000, intel_dp->dpcd,
3349 sizeof(intel_dp->dpcd)) < 0) 3405 sizeof(intel_dp->dpcd)) < 0)
@@ -4194,7 +4250,7 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
4194 } 4250 }
4195 4251
4196 if (intel_encoder->type != INTEL_OUTPUT_EDP) 4252 if (intel_encoder->type != INTEL_OUTPUT_EDP)
4197 intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT; 4253 intel_encoder->type = INTEL_OUTPUT_DP;
4198 4254
4199 intel_dp_probe_oui(intel_dp); 4255 intel_dp_probe_oui(intel_dp);
4200 4256
@@ -4270,7 +4326,7 @@ intel_dp_detect(struct drm_connector *connector, bool force)
4270 /* MST devices are disconnected from a monitor POV */ 4326 /* MST devices are disconnected from a monitor POV */
4271 intel_dp_unset_edid(intel_dp); 4327 intel_dp_unset_edid(intel_dp);
4272 if (intel_encoder->type != INTEL_OUTPUT_EDP) 4328 if (intel_encoder->type != INTEL_OUTPUT_EDP)
4273 intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT; 4329 intel_encoder->type = INTEL_OUTPUT_DP;
4274 return connector_status_disconnected; 4330 return connector_status_disconnected;
4275 } 4331 }
4276 4332
@@ -4309,7 +4365,7 @@ intel_dp_force(struct drm_connector *connector)
4309 intel_display_power_put(dev_priv, power_domain); 4365 intel_display_power_put(dev_priv, power_domain);
4310 4366
4311 if (intel_encoder->type != INTEL_OUTPUT_EDP) 4367 if (intel_encoder->type != INTEL_OUTPUT_EDP)
4312 intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT; 4368 intel_encoder->type = INTEL_OUTPUT_DP;
4313} 4369}
4314 4370
4315static int intel_dp_get_modes(struct drm_connector *connector) 4371static int intel_dp_get_modes(struct drm_connector *connector)
@@ -4358,7 +4414,7 @@ intel_dp_set_property(struct drm_connector *connector,
4358 struct drm_property *property, 4414 struct drm_property *property,
4359 uint64_t val) 4415 uint64_t val)
4360{ 4416{
4361 struct drm_i915_private *dev_priv = connector->dev->dev_private; 4417 struct drm_i915_private *dev_priv = to_i915(connector->dev);
4362 struct intel_connector *intel_connector = to_intel_connector(connector); 4418 struct intel_connector *intel_connector = to_intel_connector(connector);
4363 struct intel_encoder *intel_encoder = intel_attached_encoder(connector); 4419 struct intel_encoder *intel_encoder = intel_attached_encoder(connector);
4364 struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base); 4420 struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
@@ -4446,6 +4502,25 @@ done:
4446 return 0; 4502 return 0;
4447} 4503}
4448 4504
4505static int
4506intel_dp_connector_register(struct drm_connector *connector)
4507{
4508 struct intel_dp *intel_dp = intel_attached_dp(connector);
4509 int ret;
4510
4511 ret = intel_connector_register(connector);
4512 if (ret)
4513 return ret;
4514
4515 i915_debugfs_connector_add(connector);
4516
4517 DRM_DEBUG_KMS("registering %s bus for %s\n",
4518 intel_dp->aux.name, connector->kdev->kobj.name);
4519
4520 intel_dp->aux.dev = connector->kdev;
4521 return drm_dp_aux_register(&intel_dp->aux);
4522}
4523
4449static void 4524static void
4450intel_dp_connector_unregister(struct drm_connector *connector) 4525intel_dp_connector_unregister(struct drm_connector *connector)
4451{ 4526{
@@ -4521,7 +4596,7 @@ static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
4521{ 4596{
4522 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 4597 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
4523 struct drm_device *dev = intel_dig_port->base.base.dev; 4598 struct drm_device *dev = intel_dig_port->base.base.dev;
4524 struct drm_i915_private *dev_priv = dev->dev_private; 4599 struct drm_i915_private *dev_priv = to_i915(dev);
4525 enum intel_display_power_domain power_domain; 4600 enum intel_display_power_domain power_domain;
4526 4601
4527 lockdep_assert_held(&dev_priv->pps_mutex); 4602 lockdep_assert_held(&dev_priv->pps_mutex);
@@ -4544,13 +4619,15 @@ static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
4544 4619
4545void intel_dp_encoder_reset(struct drm_encoder *encoder) 4620void intel_dp_encoder_reset(struct drm_encoder *encoder)
4546{ 4621{
4547 struct intel_dp *intel_dp; 4622 struct drm_i915_private *dev_priv = to_i915(encoder->dev);
4623 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
4624
4625 if (!HAS_DDI(dev_priv))
4626 intel_dp->DP = I915_READ(intel_dp->output_reg);
4548 4627
4549 if (to_intel_encoder(encoder)->type != INTEL_OUTPUT_EDP) 4628 if (to_intel_encoder(encoder)->type != INTEL_OUTPUT_EDP)
4550 return; 4629 return;
4551 4630
4552 intel_dp = enc_to_intel_dp(encoder);
4553
4554 pps_lock(intel_dp); 4631 pps_lock(intel_dp);
4555 4632
4556 /* 4633 /*
@@ -4572,6 +4649,7 @@ static const struct drm_connector_funcs intel_dp_connector_funcs = {
4572 .fill_modes = drm_helper_probe_single_connector_modes, 4649 .fill_modes = drm_helper_probe_single_connector_modes,
4573 .set_property = intel_dp_set_property, 4650 .set_property = intel_dp_set_property,
4574 .atomic_get_property = intel_connector_atomic_get_property, 4651 .atomic_get_property = intel_connector_atomic_get_property,
4652 .late_register = intel_dp_connector_register,
4575 .early_unregister = intel_dp_connector_unregister, 4653 .early_unregister = intel_dp_connector_unregister,
4576 .destroy = intel_dp_connector_destroy, 4654 .destroy = intel_dp_connector_destroy,
4577 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 4655 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
@@ -4594,13 +4672,13 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd)
4594 struct intel_dp *intel_dp = &intel_dig_port->dp; 4672 struct intel_dp *intel_dp = &intel_dig_port->dp;
4595 struct intel_encoder *intel_encoder = &intel_dig_port->base; 4673 struct intel_encoder *intel_encoder = &intel_dig_port->base;
4596 struct drm_device *dev = intel_dig_port->base.base.dev; 4674 struct drm_device *dev = intel_dig_port->base.base.dev;
4597 struct drm_i915_private *dev_priv = dev->dev_private; 4675 struct drm_i915_private *dev_priv = to_i915(dev);
4598 enum intel_display_power_domain power_domain; 4676 enum intel_display_power_domain power_domain;
4599 enum irqreturn ret = IRQ_NONE; 4677 enum irqreturn ret = IRQ_NONE;
4600 4678
4601 if (intel_dig_port->base.type != INTEL_OUTPUT_EDP && 4679 if (intel_dig_port->base.type != INTEL_OUTPUT_EDP &&
4602 intel_dig_port->base.type != INTEL_OUTPUT_HDMI) 4680 intel_dig_port->base.type != INTEL_OUTPUT_HDMI)
4603 intel_dig_port->base.type = INTEL_OUTPUT_DISPLAYPORT; 4681 intel_dig_port->base.type = INTEL_OUTPUT_DP;
4604 4682
4605 if (long_hpd && intel_dig_port->base.type == INTEL_OUTPUT_EDP) { 4683 if (long_hpd && intel_dig_port->base.type == INTEL_OUTPUT_EDP) {
4606 /* 4684 /*
@@ -4662,7 +4740,7 @@ put_power:
4662/* check the VBT to see whether the eDP is on another port */ 4740/* check the VBT to see whether the eDP is on another port */
4663bool intel_dp_is_edp(struct drm_device *dev, enum port port) 4741bool intel_dp_is_edp(struct drm_device *dev, enum port port)
4664{ 4742{
4665 struct drm_i915_private *dev_priv = dev->dev_private; 4743 struct drm_i915_private *dev_priv = to_i915(dev);
4666 4744
4667 /* 4745 /*
4668 * eDP not supported on g4x. so bail out early just 4746 * eDP not supported on g4x. so bail out early just
@@ -4704,82 +4782,93 @@ static void intel_dp_init_panel_power_timestamps(struct intel_dp *intel_dp)
4704} 4782}
4705 4783
4706static void 4784static void
4707intel_dp_init_panel_power_sequencer(struct drm_device *dev, 4785intel_pps_readout_hw_state(struct drm_i915_private *dev_priv,
4708 struct intel_dp *intel_dp) 4786 struct intel_dp *intel_dp, struct edp_power_seq *seq)
4709{ 4787{
4710 struct drm_i915_private *dev_priv = dev->dev_private;
4711 struct edp_power_seq cur, vbt, spec,
4712 *final = &intel_dp->pps_delays;
4713 u32 pp_on, pp_off, pp_div = 0, pp_ctl = 0; 4788 u32 pp_on, pp_off, pp_div = 0, pp_ctl = 0;
4714 i915_reg_t pp_ctrl_reg, pp_on_reg, pp_off_reg, pp_div_reg; 4789 struct pps_registers regs;
4715 4790
4716 lockdep_assert_held(&dev_priv->pps_mutex); 4791 intel_pps_get_registers(dev_priv, intel_dp, &regs);
4717
4718 /* already initialized? */
4719 if (final->t11_t12 != 0)
4720 return;
4721
4722 if (IS_BROXTON(dev)) {
4723 /*
4724 * TODO: BXT has 2 sets of PPS registers.
4725 * Correct Register for Broxton need to be identified
4726 * using VBT. hardcoding for now
4727 */
4728 pp_ctrl_reg = BXT_PP_CONTROL(0);
4729 pp_on_reg = BXT_PP_ON_DELAYS(0);
4730 pp_off_reg = BXT_PP_OFF_DELAYS(0);
4731 } else if (HAS_PCH_SPLIT(dev)) {
4732 pp_ctrl_reg = PCH_PP_CONTROL;
4733 pp_on_reg = PCH_PP_ON_DELAYS;
4734 pp_off_reg = PCH_PP_OFF_DELAYS;
4735 pp_div_reg = PCH_PP_DIVISOR;
4736 } else {
4737 enum pipe pipe = vlv_power_sequencer_pipe(intel_dp);
4738
4739 pp_ctrl_reg = VLV_PIPE_PP_CONTROL(pipe);
4740 pp_on_reg = VLV_PIPE_PP_ON_DELAYS(pipe);
4741 pp_off_reg = VLV_PIPE_PP_OFF_DELAYS(pipe);
4742 pp_div_reg = VLV_PIPE_PP_DIVISOR(pipe);
4743 }
4744 4792
4745 /* Workaround: Need to write PP_CONTROL with the unlock key as 4793 /* Workaround: Need to write PP_CONTROL with the unlock key as
4746 * the very first thing. */ 4794 * the very first thing. */
4747 pp_ctl = ironlake_get_pp_control(intel_dp); 4795 pp_ctl = ironlake_get_pp_control(intel_dp);
4748 4796
4749 pp_on = I915_READ(pp_on_reg); 4797 pp_on = I915_READ(regs.pp_on);
4750 pp_off = I915_READ(pp_off_reg); 4798 pp_off = I915_READ(regs.pp_off);
4751 if (!IS_BROXTON(dev)) { 4799 if (!IS_BROXTON(dev_priv)) {
4752 I915_WRITE(pp_ctrl_reg, pp_ctl); 4800 I915_WRITE(regs.pp_ctrl, pp_ctl);
4753 pp_div = I915_READ(pp_div_reg); 4801 pp_div = I915_READ(regs.pp_div);
4754 } 4802 }
4755 4803
4756 /* Pull timing values out of registers */ 4804 /* Pull timing values out of registers */
4757 cur.t1_t3 = (pp_on & PANEL_POWER_UP_DELAY_MASK) >> 4805 seq->t1_t3 = (pp_on & PANEL_POWER_UP_DELAY_MASK) >>
4758 PANEL_POWER_UP_DELAY_SHIFT; 4806 PANEL_POWER_UP_DELAY_SHIFT;
4759 4807
4760 cur.t8 = (pp_on & PANEL_LIGHT_ON_DELAY_MASK) >> 4808 seq->t8 = (pp_on & PANEL_LIGHT_ON_DELAY_MASK) >>
4761 PANEL_LIGHT_ON_DELAY_SHIFT; 4809 PANEL_LIGHT_ON_DELAY_SHIFT;
4762 4810
4763 cur.t9 = (pp_off & PANEL_LIGHT_OFF_DELAY_MASK) >> 4811 seq->t9 = (pp_off & PANEL_LIGHT_OFF_DELAY_MASK) >>
4764 PANEL_LIGHT_OFF_DELAY_SHIFT; 4812 PANEL_LIGHT_OFF_DELAY_SHIFT;
4765 4813
4766 cur.t10 = (pp_off & PANEL_POWER_DOWN_DELAY_MASK) >> 4814 seq->t10 = (pp_off & PANEL_POWER_DOWN_DELAY_MASK) >>
4767 PANEL_POWER_DOWN_DELAY_SHIFT; 4815 PANEL_POWER_DOWN_DELAY_SHIFT;
4768 4816
4769 if (IS_BROXTON(dev)) { 4817 if (IS_BROXTON(dev_priv)) {
4770 u16 tmp = (pp_ctl & BXT_POWER_CYCLE_DELAY_MASK) >> 4818 u16 tmp = (pp_ctl & BXT_POWER_CYCLE_DELAY_MASK) >>
4771 BXT_POWER_CYCLE_DELAY_SHIFT; 4819 BXT_POWER_CYCLE_DELAY_SHIFT;
4772 if (tmp > 0) 4820 if (tmp > 0)
4773 cur.t11_t12 = (tmp - 1) * 1000; 4821 seq->t11_t12 = (tmp - 1) * 1000;
4774 else 4822 else
4775 cur.t11_t12 = 0; 4823 seq->t11_t12 = 0;
4776 } else { 4824 } else {
4777 cur.t11_t12 = ((pp_div & PANEL_POWER_CYCLE_DELAY_MASK) >> 4825 seq->t11_t12 = ((pp_div & PANEL_POWER_CYCLE_DELAY_MASK) >>
4778 PANEL_POWER_CYCLE_DELAY_SHIFT) * 1000; 4826 PANEL_POWER_CYCLE_DELAY_SHIFT) * 1000;
4779 } 4827 }
4828}
4829
4830static void
4831intel_pps_dump_state(const char *state_name, const struct edp_power_seq *seq)
4832{
4833 DRM_DEBUG_KMS("%s t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
4834 state_name,
4835 seq->t1_t3, seq->t8, seq->t9, seq->t10, seq->t11_t12);
4836}
4837
4838static void
4839intel_pps_verify_state(struct drm_i915_private *dev_priv,
4840 struct intel_dp *intel_dp)
4841{
4842 struct edp_power_seq hw;
4843 struct edp_power_seq *sw = &intel_dp->pps_delays;
4844
4845 intel_pps_readout_hw_state(dev_priv, intel_dp, &hw);
4846
4847 if (hw.t1_t3 != sw->t1_t3 || hw.t8 != sw->t8 || hw.t9 != sw->t9 ||
4848 hw.t10 != sw->t10 || hw.t11_t12 != sw->t11_t12) {
4849 DRM_ERROR("PPS state mismatch\n");
4850 intel_pps_dump_state("sw", sw);
4851 intel_pps_dump_state("hw", &hw);
4852 }
4853}
4854
4855static void
4856intel_dp_init_panel_power_sequencer(struct drm_device *dev,
4857 struct intel_dp *intel_dp)
4858{
4859 struct drm_i915_private *dev_priv = to_i915(dev);
4860 struct edp_power_seq cur, vbt, spec,
4861 *final = &intel_dp->pps_delays;
4862
4863 lockdep_assert_held(&dev_priv->pps_mutex);
4780 4864
4781 DRM_DEBUG_KMS("cur t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n", 4865 /* already initialized? */
4782 cur.t1_t3, cur.t8, cur.t9, cur.t10, cur.t11_t12); 4866 if (final->t11_t12 != 0)
4867 return;
4868
4869 intel_pps_readout_hw_state(dev_priv, intel_dp, &cur);
4870
4871 intel_pps_dump_state("cur", &cur);
4783 4872
4784 vbt = dev_priv->vbt.edp.pps; 4873 vbt = dev_priv->vbt.edp.pps;
4785 4874
@@ -4795,8 +4884,7 @@ intel_dp_init_panel_power_sequencer(struct drm_device *dev,
4795 * too. */ 4884 * too. */
4796 spec.t11_t12 = (510 + 100) * 10; 4885 spec.t11_t12 = (510 + 100) * 10;
4797 4886
4798 DRM_DEBUG_KMS("vbt t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n", 4887 intel_pps_dump_state("vbt", &vbt);
4799 vbt.t1_t3, vbt.t8, vbt.t9, vbt.t10, vbt.t11_t12);
4800 4888
4801 /* Use the max of the register settings and vbt. If both are 4889 /* Use the max of the register settings and vbt. If both are
4802 * unset, fall back to the spec limits. */ 4890 * unset, fall back to the spec limits. */
@@ -4824,59 +4912,41 @@ intel_dp_init_panel_power_sequencer(struct drm_device *dev,
4824 4912
4825 DRM_DEBUG_KMS("backlight on delay %d, off delay %d\n", 4913 DRM_DEBUG_KMS("backlight on delay %d, off delay %d\n",
4826 intel_dp->backlight_on_delay, intel_dp->backlight_off_delay); 4914 intel_dp->backlight_on_delay, intel_dp->backlight_off_delay);
4915
4916 /*
4917 * We override the HW backlight delays to 1 because we do manual waits
4918 * on them. For T8, even BSpec recommends doing it. For T9, if we
4919 * don't do this, we'll end up waiting for the backlight off delay
4920 * twice: once when we do the manual sleep, and once when we disable
4921 * the panel and wait for the PP_STATUS bit to become zero.
4922 */
4923 final->t8 = 1;
4924 final->t9 = 1;
4827} 4925}
4828 4926
4829static void 4927static void
4830intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev, 4928intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
4831 struct intel_dp *intel_dp) 4929 struct intel_dp *intel_dp)
4832{ 4930{
4833 struct drm_i915_private *dev_priv = dev->dev_private; 4931 struct drm_i915_private *dev_priv = to_i915(dev);
4834 u32 pp_on, pp_off, pp_div, port_sel = 0; 4932 u32 pp_on, pp_off, pp_div, port_sel = 0;
4835 int div = dev_priv->rawclk_freq / 1000; 4933 int div = dev_priv->rawclk_freq / 1000;
4836 i915_reg_t pp_on_reg, pp_off_reg, pp_div_reg, pp_ctrl_reg; 4934 struct pps_registers regs;
4837 enum port port = dp_to_dig_port(intel_dp)->port; 4935 enum port port = dp_to_dig_port(intel_dp)->port;
4838 const struct edp_power_seq *seq = &intel_dp->pps_delays; 4936 const struct edp_power_seq *seq = &intel_dp->pps_delays;
4839 4937
4840 lockdep_assert_held(&dev_priv->pps_mutex); 4938 lockdep_assert_held(&dev_priv->pps_mutex);
4841 4939
4842 if (IS_BROXTON(dev)) { 4940 intel_pps_get_registers(dev_priv, intel_dp, &regs);
4843 /*
4844 * TODO: BXT has 2 sets of PPS registers.
4845 * Correct Register for Broxton need to be identified
4846 * using VBT. hardcoding for now
4847 */
4848 pp_ctrl_reg = BXT_PP_CONTROL(0);
4849 pp_on_reg = BXT_PP_ON_DELAYS(0);
4850 pp_off_reg = BXT_PP_OFF_DELAYS(0);
4851
4852 } else if (HAS_PCH_SPLIT(dev)) {
4853 pp_on_reg = PCH_PP_ON_DELAYS;
4854 pp_off_reg = PCH_PP_OFF_DELAYS;
4855 pp_div_reg = PCH_PP_DIVISOR;
4856 } else {
4857 enum pipe pipe = vlv_power_sequencer_pipe(intel_dp);
4858 4941
4859 pp_on_reg = VLV_PIPE_PP_ON_DELAYS(pipe);
4860 pp_off_reg = VLV_PIPE_PP_OFF_DELAYS(pipe);
4861 pp_div_reg = VLV_PIPE_PP_DIVISOR(pipe);
4862 }
4863
4864 /*
4865 * And finally store the new values in the power sequencer. The
4866 * backlight delays are set to 1 because we do manual waits on them. For
4867 * T8, even BSpec recommends doing it. For T9, if we don't do this,
4868 * we'll end up waiting for the backlight off delay twice: once when we
4869 * do the manual sleep, and once when we disable the panel and wait for
4870 * the PP_STATUS bit to become zero.
4871 */
4872 pp_on = (seq->t1_t3 << PANEL_POWER_UP_DELAY_SHIFT) | 4942 pp_on = (seq->t1_t3 << PANEL_POWER_UP_DELAY_SHIFT) |
4873 (1 << PANEL_LIGHT_ON_DELAY_SHIFT); 4943 (seq->t8 << PANEL_LIGHT_ON_DELAY_SHIFT);
4874 pp_off = (1 << PANEL_LIGHT_OFF_DELAY_SHIFT) | 4944 pp_off = (seq->t9 << PANEL_LIGHT_OFF_DELAY_SHIFT) |
4875 (seq->t10 << PANEL_POWER_DOWN_DELAY_SHIFT); 4945 (seq->t10 << PANEL_POWER_DOWN_DELAY_SHIFT);
4876 /* Compute the divisor for the pp clock, simply match the Bspec 4946 /* Compute the divisor for the pp clock, simply match the Bspec
4877 * formula. */ 4947 * formula. */
4878 if (IS_BROXTON(dev)) { 4948 if (IS_BROXTON(dev)) {
4879 pp_div = I915_READ(pp_ctrl_reg); 4949 pp_div = I915_READ(regs.pp_ctrl);
4880 pp_div &= ~BXT_POWER_CYCLE_DELAY_MASK; 4950 pp_div &= ~BXT_POWER_CYCLE_DELAY_MASK;
4881 pp_div |= (DIV_ROUND_UP((seq->t11_t12 + 1), 1000) 4951 pp_div |= (DIV_ROUND_UP((seq->t11_t12 + 1), 1000)
4882 << BXT_POWER_CYCLE_DELAY_SHIFT); 4952 << BXT_POWER_CYCLE_DELAY_SHIFT);
@@ -4899,19 +4969,19 @@ intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
4899 4969
4900 pp_on |= port_sel; 4970 pp_on |= port_sel;
4901 4971
4902 I915_WRITE(pp_on_reg, pp_on); 4972 I915_WRITE(regs.pp_on, pp_on);
4903 I915_WRITE(pp_off_reg, pp_off); 4973 I915_WRITE(regs.pp_off, pp_off);
4904 if (IS_BROXTON(dev)) 4974 if (IS_BROXTON(dev))
4905 I915_WRITE(pp_ctrl_reg, pp_div); 4975 I915_WRITE(regs.pp_ctrl, pp_div);
4906 else 4976 else
4907 I915_WRITE(pp_div_reg, pp_div); 4977 I915_WRITE(regs.pp_div, pp_div);
4908 4978
4909 DRM_DEBUG_KMS("panel power sequencer register settings: PP_ON %#x, PP_OFF %#x, PP_DIV %#x\n", 4979 DRM_DEBUG_KMS("panel power sequencer register settings: PP_ON %#x, PP_OFF %#x, PP_DIV %#x\n",
4910 I915_READ(pp_on_reg), 4980 I915_READ(regs.pp_on),
4911 I915_READ(pp_off_reg), 4981 I915_READ(regs.pp_off),
4912 IS_BROXTON(dev) ? 4982 IS_BROXTON(dev) ?
4913 (I915_READ(pp_ctrl_reg) & BXT_POWER_CYCLE_DELAY_MASK) : 4983 (I915_READ(regs.pp_ctrl) & BXT_POWER_CYCLE_DELAY_MASK) :
4914 I915_READ(pp_div_reg)); 4984 I915_READ(regs.pp_div));
4915} 4985}
4916 4986
4917/** 4987/**
@@ -4928,7 +4998,7 @@ intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
4928 */ 4998 */
4929static void intel_dp_set_drrs_state(struct drm_device *dev, int refresh_rate) 4999static void intel_dp_set_drrs_state(struct drm_device *dev, int refresh_rate)
4930{ 5000{
4931 struct drm_i915_private *dev_priv = dev->dev_private; 5001 struct drm_i915_private *dev_priv = to_i915(dev);
4932 struct intel_encoder *encoder; 5002 struct intel_encoder *encoder;
4933 struct intel_digital_port *dig_port = NULL; 5003 struct intel_digital_port *dig_port = NULL;
4934 struct intel_dp *intel_dp = dev_priv->drrs.dp; 5004 struct intel_dp *intel_dp = dev_priv->drrs.dp;
@@ -5027,7 +5097,7 @@ static void intel_dp_set_drrs_state(struct drm_device *dev, int refresh_rate)
5027void intel_edp_drrs_enable(struct intel_dp *intel_dp) 5097void intel_edp_drrs_enable(struct intel_dp *intel_dp)
5028{ 5098{
5029 struct drm_device *dev = intel_dp_to_dev(intel_dp); 5099 struct drm_device *dev = intel_dp_to_dev(intel_dp);
5030 struct drm_i915_private *dev_priv = dev->dev_private; 5100 struct drm_i915_private *dev_priv = to_i915(dev);
5031 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 5101 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
5032 struct drm_crtc *crtc = dig_port->base.base.crtc; 5102 struct drm_crtc *crtc = dig_port->base.base.crtc;
5033 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 5103 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -5059,7 +5129,7 @@ unlock:
5059void intel_edp_drrs_disable(struct intel_dp *intel_dp) 5129void intel_edp_drrs_disable(struct intel_dp *intel_dp)
5060{ 5130{
5061 struct drm_device *dev = intel_dp_to_dev(intel_dp); 5131 struct drm_device *dev = intel_dp_to_dev(intel_dp);
5062 struct drm_i915_private *dev_priv = dev->dev_private; 5132 struct drm_i915_private *dev_priv = to_i915(dev);
5063 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 5133 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
5064 struct drm_crtc *crtc = dig_port->base.base.crtc; 5134 struct drm_crtc *crtc = dig_port->base.base.crtc;
5065 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 5135 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
@@ -5074,9 +5144,9 @@ void intel_edp_drrs_disable(struct intel_dp *intel_dp)
5074 } 5144 }
5075 5145
5076 if (dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR) 5146 if (dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
5077 intel_dp_set_drrs_state(dev_priv->dev, 5147 intel_dp_set_drrs_state(&dev_priv->drm,
5078 intel_dp->attached_connector->panel. 5148 intel_dp->attached_connector->panel.
5079 fixed_mode->vrefresh); 5149 fixed_mode->vrefresh);
5080 5150
5081 dev_priv->drrs.dp = NULL; 5151 dev_priv->drrs.dp = NULL;
5082 mutex_unlock(&dev_priv->drrs.mutex); 5152 mutex_unlock(&dev_priv->drrs.mutex);
@@ -5106,9 +5176,9 @@ static void intel_edp_drrs_downclock_work(struct work_struct *work)
5106 goto unlock; 5176 goto unlock;
5107 5177
5108 if (dev_priv->drrs.refresh_rate_type != DRRS_LOW_RR) 5178 if (dev_priv->drrs.refresh_rate_type != DRRS_LOW_RR)
5109 intel_dp_set_drrs_state(dev_priv->dev, 5179 intel_dp_set_drrs_state(&dev_priv->drm,
5110 intel_dp->attached_connector->panel. 5180 intel_dp->attached_connector->panel.
5111 downclock_mode->vrefresh); 5181 downclock_mode->vrefresh);
5112 5182
5113unlock: 5183unlock:
5114 mutex_unlock(&dev_priv->drrs.mutex); 5184 mutex_unlock(&dev_priv->drrs.mutex);
@@ -5127,7 +5197,7 @@ unlock:
5127void intel_edp_drrs_invalidate(struct drm_device *dev, 5197void intel_edp_drrs_invalidate(struct drm_device *dev,
5128 unsigned frontbuffer_bits) 5198 unsigned frontbuffer_bits)
5129{ 5199{
5130 struct drm_i915_private *dev_priv = dev->dev_private; 5200 struct drm_i915_private *dev_priv = to_i915(dev);
5131 struct drm_crtc *crtc; 5201 struct drm_crtc *crtc;
5132 enum pipe pipe; 5202 enum pipe pipe;
5133 5203
@@ -5150,9 +5220,9 @@ void intel_edp_drrs_invalidate(struct drm_device *dev,
5150 5220
5151 /* invalidate means busy screen hence upclock */ 5221 /* invalidate means busy screen hence upclock */
5152 if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR) 5222 if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
5153 intel_dp_set_drrs_state(dev_priv->dev, 5223 intel_dp_set_drrs_state(&dev_priv->drm,
5154 dev_priv->drrs.dp->attached_connector->panel. 5224 dev_priv->drrs.dp->attached_connector->panel.
5155 fixed_mode->vrefresh); 5225 fixed_mode->vrefresh);
5156 5226
5157 mutex_unlock(&dev_priv->drrs.mutex); 5227 mutex_unlock(&dev_priv->drrs.mutex);
5158} 5228}
@@ -5172,7 +5242,7 @@ void intel_edp_drrs_invalidate(struct drm_device *dev,
5172void intel_edp_drrs_flush(struct drm_device *dev, 5242void intel_edp_drrs_flush(struct drm_device *dev,
5173 unsigned frontbuffer_bits) 5243 unsigned frontbuffer_bits)
5174{ 5244{
5175 struct drm_i915_private *dev_priv = dev->dev_private; 5245 struct drm_i915_private *dev_priv = to_i915(dev);
5176 struct drm_crtc *crtc; 5246 struct drm_crtc *crtc;
5177 enum pipe pipe; 5247 enum pipe pipe;
5178 5248
@@ -5195,9 +5265,9 @@ void intel_edp_drrs_flush(struct drm_device *dev,
5195 5265
5196 /* flush means busy screen hence upclock */ 5266 /* flush means busy screen hence upclock */
5197 if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR) 5267 if (frontbuffer_bits && dev_priv->drrs.refresh_rate_type == DRRS_LOW_RR)
5198 intel_dp_set_drrs_state(dev_priv->dev, 5268 intel_dp_set_drrs_state(&dev_priv->drm,
5199 dev_priv->drrs.dp->attached_connector->panel. 5269 dev_priv->drrs.dp->attached_connector->panel.
5200 fixed_mode->vrefresh); 5270 fixed_mode->vrefresh);
5201 5271
5202 /* 5272 /*
5203 * flush also means no more activity hence schedule downclock, if all 5273 * flush also means no more activity hence schedule downclock, if all
@@ -5265,7 +5335,7 @@ intel_dp_drrs_init(struct intel_connector *intel_connector,
5265{ 5335{
5266 struct drm_connector *connector = &intel_connector->base; 5336 struct drm_connector *connector = &intel_connector->base;
5267 struct drm_device *dev = connector->dev; 5337 struct drm_device *dev = connector->dev;
5268 struct drm_i915_private *dev_priv = dev->dev_private; 5338 struct drm_i915_private *dev_priv = to_i915(dev);
5269 struct drm_display_mode *downclock_mode = NULL; 5339 struct drm_display_mode *downclock_mode = NULL;
5270 5340
5271 INIT_DELAYED_WORK(&dev_priv->drrs.work, intel_edp_drrs_downclock_work); 5341 INIT_DELAYED_WORK(&dev_priv->drrs.work, intel_edp_drrs_downclock_work);
@@ -5303,7 +5373,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
5303 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 5373 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
5304 struct intel_encoder *intel_encoder = &intel_dig_port->base; 5374 struct intel_encoder *intel_encoder = &intel_dig_port->base;
5305 struct drm_device *dev = intel_encoder->base.dev; 5375 struct drm_device *dev = intel_encoder->base.dev;
5306 struct drm_i915_private *dev_priv = dev->dev_private; 5376 struct drm_i915_private *dev_priv = to_i915(dev);
5307 struct drm_display_mode *fixed_mode = NULL; 5377 struct drm_display_mode *fixed_mode = NULL;
5308 struct drm_display_mode *downclock_mode = NULL; 5378 struct drm_display_mode *downclock_mode = NULL;
5309 bool has_dpcd; 5379 bool has_dpcd;
@@ -5314,8 +5384,32 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
5314 if (!is_edp(intel_dp)) 5384 if (!is_edp(intel_dp))
5315 return true; 5385 return true;
5316 5386
5387 /*
5388 * On IBX/CPT we may get here with LVDS already registered. Since the
5389 * driver uses the only internal power sequencer available for both
5390 * eDP and LVDS bail out early in this case to prevent interfering
5391 * with an already powered-on LVDS power sequencer.
5392 */
5393 if (intel_get_lvds_encoder(dev)) {
5394 WARN_ON(!(HAS_PCH_IBX(dev_priv) || HAS_PCH_CPT(dev_priv)));
5395 DRM_INFO("LVDS was detected, not registering eDP\n");
5396
5397 return false;
5398 }
5399
5317 pps_lock(intel_dp); 5400 pps_lock(intel_dp);
5401
5402 intel_dp_init_panel_power_timestamps(intel_dp);
5403
5404 if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
5405 vlv_initial_power_sequencer_setup(intel_dp);
5406 } else {
5407 intel_dp_init_panel_power_sequencer(dev, intel_dp);
5408 intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
5409 }
5410
5318 intel_edp_panel_vdd_sanitize(intel_dp); 5411 intel_edp_panel_vdd_sanitize(intel_dp);
5412
5319 pps_unlock(intel_dp); 5413 pps_unlock(intel_dp);
5320 5414
5321 /* Cache DPCD and EDID for edp. */ 5415 /* Cache DPCD and EDID for edp. */
@@ -5329,14 +5423,9 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
5329 } else { 5423 } else {
5330 /* if this fails, presume the device is a ghost */ 5424 /* if this fails, presume the device is a ghost */
5331 DRM_INFO("failed to retrieve link info, disabling eDP\n"); 5425 DRM_INFO("failed to retrieve link info, disabling eDP\n");
5332 return false; 5426 goto out_vdd_off;
5333 } 5427 }
5334 5428
5335 /* We now know it's not a ghost, init power sequence regs. */
5336 pps_lock(intel_dp);
5337 intel_dp_init_panel_power_sequencer_registers(dev, intel_dp);
5338 pps_unlock(intel_dp);
5339
5340 mutex_lock(&dev->mode_config.mutex); 5429 mutex_lock(&dev->mode_config.mutex);
5341 edid = drm_get_edid(connector, &intel_dp->aux.ddc); 5430 edid = drm_get_edid(connector, &intel_dp->aux.ddc);
5342 if (edid) { 5431 if (edid) {
@@ -5404,6 +5493,18 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
5404 intel_panel_setup_backlight(connector, pipe); 5493 intel_panel_setup_backlight(connector, pipe);
5405 5494
5406 return true; 5495 return true;
5496
5497out_vdd_off:
5498 cancel_delayed_work_sync(&intel_dp->panel_vdd_work);
5499 /*
5500 * vdd might still be enabled do to the delayed vdd off.
5501 * Make sure vdd is actually turned off here.
5502 */
5503 pps_lock(intel_dp);
5504 edp_panel_vdd_off_sync(intel_dp);
5505 pps_unlock(intel_dp);
5506
5507 return false;
5407} 5508}
5408 5509
5409bool 5510bool
@@ -5414,9 +5515,9 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
5414 struct intel_dp *intel_dp = &intel_dig_port->dp; 5515 struct intel_dp *intel_dp = &intel_dig_port->dp;
5415 struct intel_encoder *intel_encoder = &intel_dig_port->base; 5516 struct intel_encoder *intel_encoder = &intel_dig_port->base;
5416 struct drm_device *dev = intel_encoder->base.dev; 5517 struct drm_device *dev = intel_encoder->base.dev;
5417 struct drm_i915_private *dev_priv = dev->dev_private; 5518 struct drm_i915_private *dev_priv = to_i915(dev);
5418 enum port port = intel_dig_port->port; 5519 enum port port = intel_dig_port->port;
5419 int type, ret; 5520 int type;
5420 5521
5421 if (WARN(intel_dig_port->max_lanes < 1, 5522 if (WARN(intel_dig_port->max_lanes < 1,
5422 "Not enough lanes (%d) for DP on port %c\n", 5523 "Not enough lanes (%d) for DP on port %c\n",
@@ -5475,11 +5576,12 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
5475 connector->interlace_allowed = true; 5576 connector->interlace_allowed = true;
5476 connector->doublescan_allowed = 0; 5577 connector->doublescan_allowed = 0;
5477 5578
5579 intel_dp_aux_init(intel_dp, intel_connector);
5580
5478 INIT_DELAYED_WORK(&intel_dp->panel_vdd_work, 5581 INIT_DELAYED_WORK(&intel_dp->panel_vdd_work,
5479 edp_panel_vdd_work); 5582 edp_panel_vdd_work);
5480 5583
5481 intel_connector_attach_encoder(intel_connector, intel_encoder); 5584 intel_connector_attach_encoder(intel_connector, intel_encoder);
5482 drm_connector_register(connector);
5483 5585
5484 if (HAS_DDI(dev)) 5586 if (HAS_DDI(dev))
5485 intel_connector->get_hw_state = intel_ddi_connector_get_hw_state; 5587 intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
@@ -5509,22 +5611,8 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
5509 BUG(); 5611 BUG();
5510 } 5612 }
5511 5613
5512 if (is_edp(intel_dp)) {
5513 pps_lock(intel_dp);
5514 intel_dp_init_panel_power_timestamps(intel_dp);
5515 if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev))
5516 vlv_initial_power_sequencer_setup(intel_dp);
5517 else
5518 intel_dp_init_panel_power_sequencer(dev, intel_dp);
5519 pps_unlock(intel_dp);
5520 }
5521
5522 ret = intel_dp_aux_init(intel_dp, intel_connector);
5523 if (ret)
5524 goto fail;
5525
5526 /* init MST on ports that can support it */ 5614 /* init MST on ports that can support it */
5527 if (HAS_DP_MST(dev) && 5615 if (HAS_DP_MST(dev) && !is_edp(intel_dp) &&
5528 (port == PORT_B || port == PORT_C || port == PORT_D)) 5616 (port == PORT_B || port == PORT_C || port == PORT_D))
5529 intel_dp_mst_encoder_init(intel_dig_port, 5617 intel_dp_mst_encoder_init(intel_dig_port,
5530 intel_connector->base.base.id); 5618 intel_connector->base.base.id);
@@ -5546,22 +5634,9 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
5546 I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd); 5634 I915_WRITE(PEG_BAND_GAP_DATA, (temp & ~0xf) | 0xd);
5547 } 5635 }
5548 5636
5549 i915_debugfs_connector_add(connector);
5550
5551 return true; 5637 return true;
5552 5638
5553fail: 5639fail:
5554 if (is_edp(intel_dp)) {
5555 cancel_delayed_work_sync(&intel_dp->panel_vdd_work);
5556 /*
5557 * vdd might still be enabled do to the delayed vdd off.
5558 * Make sure vdd is actually turned off here.
5559 */
5560 pps_lock(intel_dp);
5561 edp_panel_vdd_off_sync(intel_dp);
5562 pps_unlock(intel_dp);
5563 }
5564 drm_connector_unregister(connector);
5565 drm_connector_cleanup(connector); 5640 drm_connector_cleanup(connector);
5566 5641
5567 return false; 5642 return false;
@@ -5571,7 +5646,7 @@ bool intel_dp_init(struct drm_device *dev,
5571 i915_reg_t output_reg, 5646 i915_reg_t output_reg,
5572 enum port port) 5647 enum port port)
5573{ 5648{
5574 struct drm_i915_private *dev_priv = dev->dev_private; 5649 struct drm_i915_private *dev_priv = to_i915(dev);
5575 struct intel_digital_port *intel_dig_port; 5650 struct intel_digital_port *intel_dig_port;
5576 struct intel_encoder *intel_encoder; 5651 struct intel_encoder *intel_encoder;
5577 struct drm_encoder *encoder; 5652 struct drm_encoder *encoder;
@@ -5619,7 +5694,7 @@ bool intel_dp_init(struct drm_device *dev,
5619 intel_dig_port->dp.output_reg = output_reg; 5694 intel_dig_port->dp.output_reg = output_reg;
5620 intel_dig_port->max_lanes = 4; 5695 intel_dig_port->max_lanes = 4;
5621 5696
5622 intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT; 5697 intel_encoder->type = INTEL_OUTPUT_DP;
5623 if (IS_CHERRYVIEW(dev)) { 5698 if (IS_CHERRYVIEW(dev)) {
5624 if (port == PORT_D) 5699 if (port == PORT_D)
5625 intel_encoder->crtc_mask = 1 << 2; 5700 intel_encoder->crtc_mask = 1 << 2;
@@ -5649,43 +5724,35 @@ err_connector_alloc:
5649 5724
5650void intel_dp_mst_suspend(struct drm_device *dev) 5725void intel_dp_mst_suspend(struct drm_device *dev)
5651{ 5726{
5652 struct drm_i915_private *dev_priv = dev->dev_private; 5727 struct drm_i915_private *dev_priv = to_i915(dev);
5653 int i; 5728 int i;
5654 5729
5655 /* disable MST */ 5730 /* disable MST */
5656 for (i = 0; i < I915_MAX_PORTS; i++) { 5731 for (i = 0; i < I915_MAX_PORTS; i++) {
5657 struct intel_digital_port *intel_dig_port = dev_priv->hotplug.irq_port[i]; 5732 struct intel_digital_port *intel_dig_port = dev_priv->hotplug.irq_port[i];
5658 if (!intel_dig_port) 5733
5734 if (!intel_dig_port || !intel_dig_port->dp.can_mst)
5659 continue; 5735 continue;
5660 5736
5661 if (intel_dig_port->base.type == INTEL_OUTPUT_DISPLAYPORT) { 5737 if (intel_dig_port->dp.is_mst)
5662 if (!intel_dig_port->dp.can_mst) 5738 drm_dp_mst_topology_mgr_suspend(&intel_dig_port->dp.mst_mgr);
5663 continue;
5664 if (intel_dig_port->dp.is_mst)
5665 drm_dp_mst_topology_mgr_suspend(&intel_dig_port->dp.mst_mgr);
5666 }
5667 } 5739 }
5668} 5740}
5669 5741
5670void intel_dp_mst_resume(struct drm_device *dev) 5742void intel_dp_mst_resume(struct drm_device *dev)
5671{ 5743{
5672 struct drm_i915_private *dev_priv = dev->dev_private; 5744 struct drm_i915_private *dev_priv = to_i915(dev);
5673 int i; 5745 int i;
5674 5746
5675 for (i = 0; i < I915_MAX_PORTS; i++) { 5747 for (i = 0; i < I915_MAX_PORTS; i++) {
5676 struct intel_digital_port *intel_dig_port = dev_priv->hotplug.irq_port[i]; 5748 struct intel_digital_port *intel_dig_port = dev_priv->hotplug.irq_port[i];
5677 if (!intel_dig_port) 5749 int ret;
5678 continue;
5679 if (intel_dig_port->base.type == INTEL_OUTPUT_DISPLAYPORT) {
5680 int ret;
5681 5750
5682 if (!intel_dig_port->dp.can_mst) 5751 if (!intel_dig_port || !intel_dig_port->dp.can_mst)
5683 continue; 5752 continue;
5684 5753
5685 ret = drm_dp_mst_topology_mgr_resume(&intel_dig_port->dp.mst_mgr); 5754 ret = drm_dp_mst_topology_mgr_resume(&intel_dig_port->dp.mst_mgr);
5686 if (ret != 0) { 5755 if (ret)
5687 intel_dp_check_mst_status(&intel_dig_port->dp); 5756 intel_dp_check_mst_status(&intel_dig_port->dp);
5688 }
5689 }
5690 } 5757 }
5691} 5758}