aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dpio_phy.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dpio_phy.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dpio_phy.c122
1 files changed, 59 insertions, 63 deletions
diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c b/drivers/gpu/drm/i915/intel_dpio_phy.c
index de38d014ed39..76473e9836c6 100644
--- a/drivers/gpu/drm/i915/intel_dpio_phy.c
+++ b/drivers/gpu/drm/i915/intel_dpio_phy.c
@@ -466,21 +466,21 @@ void bxt_ddi_phy_init(struct drm_i915_private *dev_priv, enum dpio_phy phy)
466 466
467 lockdep_assert_held(&dev_priv->power_domains.lock); 467 lockdep_assert_held(&dev_priv->power_domains.lock);
468 468
469 if (rcomp_phy != -1) { 469 was_enabled = true;
470 if (rcomp_phy != -1)
470 was_enabled = bxt_ddi_phy_is_enabled(dev_priv, rcomp_phy); 471 was_enabled = bxt_ddi_phy_is_enabled(dev_priv, rcomp_phy);
471 472
472 /* 473 /*
473 * We need to copy the GRC calibration value from rcomp_phy, 474 * We need to copy the GRC calibration value from rcomp_phy,
474 * so make sure it's powered up. 475 * so make sure it's powered up.
475 */ 476 */
476 if (!was_enabled) 477 if (!was_enabled)
477 _bxt_ddi_phy_init(dev_priv, rcomp_phy); 478 _bxt_ddi_phy_init(dev_priv, rcomp_phy);
478 }
479 479
480 _bxt_ddi_phy_init(dev_priv, phy); 480 _bxt_ddi_phy_init(dev_priv, phy);
481 481
482 if (rcomp_phy != -1 && !was_enabled) 482 if (!was_enabled)
483 bxt_ddi_phy_uninit(dev_priv, phy_info->rcomp_phy); 483 bxt_ddi_phy_uninit(dev_priv, rcomp_phy);
484} 484}
485 485
486static bool __printf(6, 7) 486static bool __printf(6, 7)
@@ -567,8 +567,7 @@ bool bxt_ddi_phy_verify_state(struct drm_i915_private *dev_priv,
567} 567}
568 568
569uint8_t 569uint8_t
570bxt_ddi_phy_calc_lane_lat_optim_mask(struct intel_encoder *encoder, 570bxt_ddi_phy_calc_lane_lat_optim_mask(uint8_t lane_count)
571 uint8_t lane_count)
572{ 571{
573 switch (lane_count) { 572 switch (lane_count) {
574 case 1: 573 case 1:
@@ -587,9 +586,8 @@ bxt_ddi_phy_calc_lane_lat_optim_mask(struct intel_encoder *encoder,
587void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder, 586void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
588 uint8_t lane_lat_optim_mask) 587 uint8_t lane_lat_optim_mask)
589{ 588{
590 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 589 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
591 struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev); 590 enum port port = encoder->port;
592 enum port port = dport->port;
593 enum dpio_phy phy; 591 enum dpio_phy phy;
594 enum dpio_channel ch; 592 enum dpio_channel ch;
595 int lane; 593 int lane;
@@ -614,9 +612,8 @@ void bxt_ddi_phy_set_lane_optim_mask(struct intel_encoder *encoder,
614uint8_t 612uint8_t
615bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder) 613bxt_ddi_phy_get_lane_lat_optim_mask(struct intel_encoder *encoder)
616{ 614{
617 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 615 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
618 struct drm_i915_private *dev_priv = to_i915(dport->base.base.dev); 616 enum port port = encoder->port;
619 enum port port = dport->port;
620 enum dpio_phy phy; 617 enum dpio_phy phy;
621 enum dpio_channel ch; 618 enum dpio_channel ch;
622 int lane; 619 int lane;
@@ -642,7 +639,7 @@ void chv_set_phy_signal_level(struct intel_encoder *encoder,
642{ 639{
643 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 640 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
644 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 641 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
645 struct intel_crtc *intel_crtc = to_intel_crtc(dport->base.base.crtc); 642 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
646 enum dpio_channel ch = vlv_dport_to_channel(dport); 643 enum dpio_channel ch = vlv_dport_to_channel(dport);
647 enum pipe pipe = intel_crtc->pipe; 644 enum pipe pipe = intel_crtc->pipe;
648 u32 val; 645 u32 val;
@@ -734,11 +731,12 @@ void chv_set_phy_signal_level(struct intel_encoder *encoder,
734} 731}
735 732
736void chv_data_lane_soft_reset(struct intel_encoder *encoder, 733void chv_data_lane_soft_reset(struct intel_encoder *encoder,
734 const struct intel_crtc_state *crtc_state,
737 bool reset) 735 bool reset)
738{ 736{
739 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 737 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
740 enum dpio_channel ch = vlv_dport_to_channel(enc_to_dig_port(&encoder->base)); 738 enum dpio_channel ch = vlv_dport_to_channel(enc_to_dig_port(&encoder->base));
741 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 739 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
742 enum pipe pipe = crtc->pipe; 740 enum pipe pipe = crtc->pipe;
743 uint32_t val; 741 uint32_t val;
744 742
@@ -777,17 +775,16 @@ void chv_data_lane_soft_reset(struct intel_encoder *encoder,
777 } 775 }
778} 776}
779 777
780void chv_phy_pre_pll_enable(struct intel_encoder *encoder) 778void chv_phy_pre_pll_enable(struct intel_encoder *encoder,
779 const struct intel_crtc_state *crtc_state)
781{ 780{
782 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 781 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
783 struct drm_device *dev = encoder->base.dev; 782 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
784 struct drm_i915_private *dev_priv = to_i915(dev); 783 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
785 struct intel_crtc *intel_crtc =
786 to_intel_crtc(encoder->base.crtc);
787 enum dpio_channel ch = vlv_dport_to_channel(dport); 784 enum dpio_channel ch = vlv_dport_to_channel(dport);
788 enum pipe pipe = intel_crtc->pipe; 785 enum pipe pipe = crtc->pipe;
789 unsigned int lane_mask = 786 unsigned int lane_mask =
790 intel_dp_unused_lane_mask(intel_crtc->config->lane_count); 787 intel_dp_unused_lane_mask(crtc_state->lane_count);
791 u32 val; 788 u32 val;
792 789
793 /* 790 /*
@@ -803,7 +800,7 @@ void chv_phy_pre_pll_enable(struct intel_encoder *encoder)
803 mutex_lock(&dev_priv->sb_lock); 800 mutex_lock(&dev_priv->sb_lock);
804 801
805 /* Assert data lane reset */ 802 /* Assert data lane reset */
806 chv_data_lane_soft_reset(encoder, true); 803 chv_data_lane_soft_reset(encoder, crtc_state, true);
807 804
808 /* program left/right clock distribution */ 805 /* program left/right clock distribution */
809 if (pipe != PIPE_B) { 806 if (pipe != PIPE_B) {
@@ -833,7 +830,7 @@ void chv_phy_pre_pll_enable(struct intel_encoder *encoder)
833 val |= CHV_PCS_USEDCLKCHANNEL; 830 val |= CHV_PCS_USEDCLKCHANNEL;
834 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW8(ch), val); 831 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW8(ch), val);
835 832
836 if (intel_crtc->config->lane_count > 2) { 833 if (crtc_state->lane_count > 2) {
837 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW8(ch)); 834 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW8(ch));
838 val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE; 835 val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
839 if (pipe != PIPE_B) 836 if (pipe != PIPE_B)
@@ -858,16 +855,15 @@ void chv_phy_pre_pll_enable(struct intel_encoder *encoder)
858 mutex_unlock(&dev_priv->sb_lock); 855 mutex_unlock(&dev_priv->sb_lock);
859} 856}
860 857
861void chv_phy_pre_encoder_enable(struct intel_encoder *encoder) 858void chv_phy_pre_encoder_enable(struct intel_encoder *encoder,
859 const struct intel_crtc_state *crtc_state)
862{ 860{
863 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 861 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
864 struct intel_digital_port *dport = dp_to_dig_port(intel_dp); 862 struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
865 struct drm_device *dev = encoder->base.dev; 863 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
866 struct drm_i915_private *dev_priv = to_i915(dev); 864 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
867 struct intel_crtc *intel_crtc =
868 to_intel_crtc(encoder->base.crtc);
869 enum dpio_channel ch = vlv_dport_to_channel(dport); 865 enum dpio_channel ch = vlv_dport_to_channel(dport);
870 int pipe = intel_crtc->pipe; 866 enum pipe pipe = crtc->pipe;
871 int data, i, stagger; 867 int data, i, stagger;
872 u32 val; 868 u32 val;
873 869
@@ -878,16 +874,16 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
878 val &= ~DPIO_LANEDESKEW_STRAP_OVRD; 874 val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
879 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val); 875 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
880 876
881 if (intel_crtc->config->lane_count > 2) { 877 if (crtc_state->lane_count > 2) {
882 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch)); 878 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
883 val &= ~DPIO_LANEDESKEW_STRAP_OVRD; 879 val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
884 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val); 880 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
885 } 881 }
886 882
887 /* Program Tx lane latency optimal setting*/ 883 /* Program Tx lane latency optimal setting*/
888 for (i = 0; i < intel_crtc->config->lane_count; i++) { 884 for (i = 0; i < crtc_state->lane_count; i++) {
889 /* Set the upar bit */ 885 /* Set the upar bit */
890 if (intel_crtc->config->lane_count == 1) 886 if (crtc_state->lane_count == 1)
891 data = 0x0; 887 data = 0x0;
892 else 888 else
893 data = (i == 1) ? 0x0 : 0x1; 889 data = (i == 1) ? 0x0 : 0x1;
@@ -896,13 +892,13 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
896 } 892 }
897 893
898 /* Data lane stagger programming */ 894 /* Data lane stagger programming */
899 if (intel_crtc->config->port_clock > 270000) 895 if (crtc_state->port_clock > 270000)
900 stagger = 0x18; 896 stagger = 0x18;
901 else if (intel_crtc->config->port_clock > 135000) 897 else if (crtc_state->port_clock > 135000)
902 stagger = 0xd; 898 stagger = 0xd;
903 else if (intel_crtc->config->port_clock > 67500) 899 else if (crtc_state->port_clock > 67500)
904 stagger = 0x7; 900 stagger = 0x7;
905 else if (intel_crtc->config->port_clock > 33750) 901 else if (crtc_state->port_clock > 33750)
906 stagger = 0x4; 902 stagger = 0x4;
907 else 903 else
908 stagger = 0x2; 904 stagger = 0x2;
@@ -911,7 +907,7 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
911 val |= DPIO_TX2_STAGGER_MASK(0x1f); 907 val |= DPIO_TX2_STAGGER_MASK(0x1f);
912 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val); 908 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
913 909
914 if (intel_crtc->config->lane_count > 2) { 910 if (crtc_state->lane_count > 2) {
915 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch)); 911 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
916 val |= DPIO_TX2_STAGGER_MASK(0x1f); 912 val |= DPIO_TX2_STAGGER_MASK(0x1f);
917 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val); 913 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
@@ -924,7 +920,7 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
924 DPIO_TX1_STAGGER_MULT(6) | 920 DPIO_TX1_STAGGER_MULT(6) |
925 DPIO_TX2_STAGGER_MULT(0)); 921 DPIO_TX2_STAGGER_MULT(0));
926 922
927 if (intel_crtc->config->lane_count > 2) { 923 if (crtc_state->lane_count > 2) {
928 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW12(ch), 924 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW12(ch),
929 DPIO_LANESTAGGER_STRAP(stagger) | 925 DPIO_LANESTAGGER_STRAP(stagger) |
930 DPIO_LANESTAGGER_STRAP_OVRD | 926 DPIO_LANESTAGGER_STRAP_OVRD |
@@ -934,7 +930,7 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
934 } 930 }
935 931
936 /* Deassert data lane reset */ 932 /* Deassert data lane reset */
937 chv_data_lane_soft_reset(encoder, false); 933 chv_data_lane_soft_reset(encoder, crtc_state, false);
938 934
939 mutex_unlock(&dev_priv->sb_lock); 935 mutex_unlock(&dev_priv->sb_lock);
940} 936}
@@ -950,10 +946,11 @@ void chv_phy_release_cl2_override(struct intel_encoder *encoder)
950 } 946 }
951} 947}
952 948
953void chv_phy_post_pll_disable(struct intel_encoder *encoder) 949void chv_phy_post_pll_disable(struct intel_encoder *encoder,
950 const struct intel_crtc_state *old_crtc_state)
954{ 951{
955 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 952 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
956 enum pipe pipe = to_intel_crtc(encoder->base.crtc)->pipe; 953 enum pipe pipe = to_intel_crtc(old_crtc_state->base.crtc)->pipe;
957 u32 val; 954 u32 val;
958 955
959 mutex_lock(&dev_priv->sb_lock); 956 mutex_lock(&dev_priv->sb_lock);
@@ -991,7 +988,7 @@ void vlv_set_phy_signal_level(struct intel_encoder *encoder,
991 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); 988 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
992 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 989 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
993 enum dpio_channel port = vlv_dport_to_channel(dport); 990 enum dpio_channel port = vlv_dport_to_channel(dport);
994 int pipe = intel_crtc->pipe; 991 enum pipe pipe = intel_crtc->pipe;
995 992
996 mutex_lock(&dev_priv->sb_lock); 993 mutex_lock(&dev_priv->sb_lock);
997 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), 0x00000000); 994 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), 0x00000000);
@@ -1009,15 +1006,14 @@ void vlv_set_phy_signal_level(struct intel_encoder *encoder,
1009 mutex_unlock(&dev_priv->sb_lock); 1006 mutex_unlock(&dev_priv->sb_lock);
1010} 1007}
1011 1008
1012void vlv_phy_pre_pll_enable(struct intel_encoder *encoder) 1009void vlv_phy_pre_pll_enable(struct intel_encoder *encoder,
1010 const struct intel_crtc_state *crtc_state)
1013{ 1011{
1014 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 1012 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
1015 struct drm_device *dev = encoder->base.dev; 1013 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1016 struct drm_i915_private *dev_priv = to_i915(dev); 1014 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
1017 struct intel_crtc *intel_crtc =
1018 to_intel_crtc(encoder->base.crtc);
1019 enum dpio_channel port = vlv_dport_to_channel(dport); 1015 enum dpio_channel port = vlv_dport_to_channel(dport);
1020 int pipe = intel_crtc->pipe; 1016 enum pipe pipe = crtc->pipe;
1021 1017
1022 /* Program Tx lane resets to default */ 1018 /* Program Tx lane resets to default */
1023 mutex_lock(&dev_priv->sb_lock); 1019 mutex_lock(&dev_priv->sb_lock);
@@ -1037,15 +1033,15 @@ void vlv_phy_pre_pll_enable(struct intel_encoder *encoder)
1037 mutex_unlock(&dev_priv->sb_lock); 1033 mutex_unlock(&dev_priv->sb_lock);
1038} 1034}
1039 1035
1040void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder) 1036void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder,
1037 const struct intel_crtc_state *crtc_state)
1041{ 1038{
1042 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 1039 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
1043 struct intel_digital_port *dport = dp_to_dig_port(intel_dp); 1040 struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
1044 struct drm_device *dev = encoder->base.dev; 1041 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1045 struct drm_i915_private *dev_priv = to_i915(dev); 1042 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
1046 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
1047 enum dpio_channel port = vlv_dport_to_channel(dport); 1043 enum dpio_channel port = vlv_dport_to_channel(dport);
1048 int pipe = intel_crtc->pipe; 1044 enum pipe pipe = crtc->pipe;
1049 u32 val; 1045 u32 val;
1050 1046
1051 mutex_lock(&dev_priv->sb_lock); 1047 mutex_lock(&dev_priv->sb_lock);
@@ -1067,14 +1063,14 @@ void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder)
1067 mutex_unlock(&dev_priv->sb_lock); 1063 mutex_unlock(&dev_priv->sb_lock);
1068} 1064}
1069 1065
1070void vlv_phy_reset_lanes(struct intel_encoder *encoder) 1066void vlv_phy_reset_lanes(struct intel_encoder *encoder,
1067 const struct intel_crtc_state *old_crtc_state)
1071{ 1068{
1072 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 1069 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
1073 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 1070 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1074 struct intel_crtc *intel_crtc = 1071 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc);
1075 to_intel_crtc(encoder->base.crtc);
1076 enum dpio_channel port = vlv_dport_to_channel(dport); 1072 enum dpio_channel port = vlv_dport_to_channel(dport);
1077 int pipe = intel_crtc->pipe; 1073 enum pipe pipe = crtc->pipe;
1078 1074
1079 mutex_lock(&dev_priv->sb_lock); 1075 mutex_lock(&dev_priv->sb_lock);
1080 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(port), 0x00000000); 1076 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(port), 0x00000000);