aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dpio_phy.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2017-10-31 16:51:18 -0400
committerVille Syrjälä <ville.syrjala@linux.intel.com>2017-11-09 13:05:01 -0500
commit2e1029c672c252ad5f34c0bcd0ebacf4a6412cd0 (patch)
tree493bca3a07d809e9b6b23bf7bcbbc014d7dd1a43 /drivers/gpu/drm/i915/intel_dpio_phy.c
parenta7f519ba706b3be9280c063e7e231da138c202de (diff)
drm/i915: Pass crtc state to DPIO PHY functions
Rather than digging through encoder->crtc and crtc->config in the DPIO PHY functions, pass down the correct crtc state from the caller. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20171031205123.13123-6-ville.syrjala@linux.intel.com Acked-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dpio_phy.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dpio_phy.c87
1 files changed, 43 insertions, 44 deletions
diff --git a/drivers/gpu/drm/i915/intel_dpio_phy.c b/drivers/gpu/drm/i915/intel_dpio_phy.c
index 490a42d9a3e8..5958d3d8b90e 100644
--- a/drivers/gpu/drm/i915/intel_dpio_phy.c
+++ b/drivers/gpu/drm/i915/intel_dpio_phy.c
@@ -733,11 +733,12 @@ void chv_set_phy_signal_level(struct intel_encoder *encoder,
733} 733}
734 734
735void chv_data_lane_soft_reset(struct intel_encoder *encoder, 735void chv_data_lane_soft_reset(struct intel_encoder *encoder,
736 const struct intel_crtc_state *crtc_state,
736 bool reset) 737 bool reset)
737{ 738{
738 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 739 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
739 enum dpio_channel ch = vlv_dport_to_channel(enc_to_dig_port(&encoder->base)); 740 enum dpio_channel ch = vlv_dport_to_channel(enc_to_dig_port(&encoder->base));
740 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 741 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
741 enum pipe pipe = crtc->pipe; 742 enum pipe pipe = crtc->pipe;
742 uint32_t val; 743 uint32_t val;
743 744
@@ -776,17 +777,16 @@ void chv_data_lane_soft_reset(struct intel_encoder *encoder,
776 } 777 }
777} 778}
778 779
779void chv_phy_pre_pll_enable(struct intel_encoder *encoder) 780void chv_phy_pre_pll_enable(struct intel_encoder *encoder,
781 const struct intel_crtc_state *crtc_state)
780{ 782{
781 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 783 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
782 struct drm_device *dev = encoder->base.dev; 784 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
783 struct drm_i915_private *dev_priv = to_i915(dev); 785 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
784 struct intel_crtc *intel_crtc =
785 to_intel_crtc(encoder->base.crtc);
786 enum dpio_channel ch = vlv_dport_to_channel(dport); 786 enum dpio_channel ch = vlv_dport_to_channel(dport);
787 enum pipe pipe = intel_crtc->pipe; 787 enum pipe pipe = crtc->pipe;
788 unsigned int lane_mask = 788 unsigned int lane_mask =
789 intel_dp_unused_lane_mask(intel_crtc->config->lane_count); 789 intel_dp_unused_lane_mask(crtc_state->lane_count);
790 u32 val; 790 u32 val;
791 791
792 /* 792 /*
@@ -802,7 +802,7 @@ void chv_phy_pre_pll_enable(struct intel_encoder *encoder)
802 mutex_lock(&dev_priv->sb_lock); 802 mutex_lock(&dev_priv->sb_lock);
803 803
804 /* Assert data lane reset */ 804 /* Assert data lane reset */
805 chv_data_lane_soft_reset(encoder, true); 805 chv_data_lane_soft_reset(encoder, crtc_state, true);
806 806
807 /* program left/right clock distribution */ 807 /* program left/right clock distribution */
808 if (pipe != PIPE_B) { 808 if (pipe != PIPE_B) {
@@ -832,7 +832,7 @@ void chv_phy_pre_pll_enable(struct intel_encoder *encoder)
832 val |= CHV_PCS_USEDCLKCHANNEL; 832 val |= CHV_PCS_USEDCLKCHANNEL;
833 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW8(ch), val); 833 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW8(ch), val);
834 834
835 if (intel_crtc->config->lane_count > 2) { 835 if (crtc_state->lane_count > 2) {
836 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW8(ch)); 836 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW8(ch));
837 val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE; 837 val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
838 if (pipe != PIPE_B) 838 if (pipe != PIPE_B)
@@ -857,16 +857,15 @@ void chv_phy_pre_pll_enable(struct intel_encoder *encoder)
857 mutex_unlock(&dev_priv->sb_lock); 857 mutex_unlock(&dev_priv->sb_lock);
858} 858}
859 859
860void chv_phy_pre_encoder_enable(struct intel_encoder *encoder) 860void chv_phy_pre_encoder_enable(struct intel_encoder *encoder,
861 const struct intel_crtc_state *crtc_state)
861{ 862{
862 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 863 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
863 struct intel_digital_port *dport = dp_to_dig_port(intel_dp); 864 struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
864 struct drm_device *dev = encoder->base.dev; 865 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
865 struct drm_i915_private *dev_priv = to_i915(dev); 866 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
866 struct intel_crtc *intel_crtc =
867 to_intel_crtc(encoder->base.crtc);
868 enum dpio_channel ch = vlv_dport_to_channel(dport); 867 enum dpio_channel ch = vlv_dport_to_channel(dport);
869 int pipe = intel_crtc->pipe; 868 enum pipe pipe = crtc->pipe;
870 int data, i, stagger; 869 int data, i, stagger;
871 u32 val; 870 u32 val;
872 871
@@ -877,16 +876,16 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
877 val &= ~DPIO_LANEDESKEW_STRAP_OVRD; 876 val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
878 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val); 877 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
879 878
880 if (intel_crtc->config->lane_count > 2) { 879 if (crtc_state->lane_count > 2) {
881 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch)); 880 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
882 val &= ~DPIO_LANEDESKEW_STRAP_OVRD; 881 val &= ~DPIO_LANEDESKEW_STRAP_OVRD;
883 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val); 882 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
884 } 883 }
885 884
886 /* Program Tx lane latency optimal setting*/ 885 /* Program Tx lane latency optimal setting*/
887 for (i = 0; i < intel_crtc->config->lane_count; i++) { 886 for (i = 0; i < crtc_state->lane_count; i++) {
888 /* Set the upar bit */ 887 /* Set the upar bit */
889 if (intel_crtc->config->lane_count == 1) 888 if (crtc_state->lane_count == 1)
890 data = 0x0; 889 data = 0x0;
891 else 890 else
892 data = (i == 1) ? 0x0 : 0x1; 891 data = (i == 1) ? 0x0 : 0x1;
@@ -895,13 +894,13 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
895 } 894 }
896 895
897 /* Data lane stagger programming */ 896 /* Data lane stagger programming */
898 if (intel_crtc->config->port_clock > 270000) 897 if (crtc_state->port_clock > 270000)
899 stagger = 0x18; 898 stagger = 0x18;
900 else if (intel_crtc->config->port_clock > 135000) 899 else if (crtc_state->port_clock > 135000)
901 stagger = 0xd; 900 stagger = 0xd;
902 else if (intel_crtc->config->port_clock > 67500) 901 else if (crtc_state->port_clock > 67500)
903 stagger = 0x7; 902 stagger = 0x7;
904 else if (intel_crtc->config->port_clock > 33750) 903 else if (crtc_state->port_clock > 33750)
905 stagger = 0x4; 904 stagger = 0x4;
906 else 905 else
907 stagger = 0x2; 906 stagger = 0x2;
@@ -910,7 +909,7 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
910 val |= DPIO_TX2_STAGGER_MASK(0x1f); 909 val |= DPIO_TX2_STAGGER_MASK(0x1f);
911 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val); 910 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW11(ch), val);
912 911
913 if (intel_crtc->config->lane_count > 2) { 912 if (crtc_state->lane_count > 2) {
914 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch)); 913 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW11(ch));
915 val |= DPIO_TX2_STAGGER_MASK(0x1f); 914 val |= DPIO_TX2_STAGGER_MASK(0x1f);
916 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val); 915 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW11(ch), val);
@@ -923,7 +922,7 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
923 DPIO_TX1_STAGGER_MULT(6) | 922 DPIO_TX1_STAGGER_MULT(6) |
924 DPIO_TX2_STAGGER_MULT(0)); 923 DPIO_TX2_STAGGER_MULT(0));
925 924
926 if (intel_crtc->config->lane_count > 2) { 925 if (crtc_state->lane_count > 2) {
927 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW12(ch), 926 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW12(ch),
928 DPIO_LANESTAGGER_STRAP(stagger) | 927 DPIO_LANESTAGGER_STRAP(stagger) |
929 DPIO_LANESTAGGER_STRAP_OVRD | 928 DPIO_LANESTAGGER_STRAP_OVRD |
@@ -933,7 +932,7 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder)
933 } 932 }
934 933
935 /* Deassert data lane reset */ 934 /* Deassert data lane reset */
936 chv_data_lane_soft_reset(encoder, false); 935 chv_data_lane_soft_reset(encoder, crtc_state, false);
937 936
938 mutex_unlock(&dev_priv->sb_lock); 937 mutex_unlock(&dev_priv->sb_lock);
939} 938}
@@ -949,10 +948,11 @@ void chv_phy_release_cl2_override(struct intel_encoder *encoder)
949 } 948 }
950} 949}
951 950
952void chv_phy_post_pll_disable(struct intel_encoder *encoder) 951void chv_phy_post_pll_disable(struct intel_encoder *encoder,
952 const struct intel_crtc_state *old_crtc_state)
953{ 953{
954 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 954 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
955 enum pipe pipe = to_intel_crtc(encoder->base.crtc)->pipe; 955 enum pipe pipe = to_intel_crtc(old_crtc_state->base.crtc)->pipe;
956 u32 val; 956 u32 val;
957 957
958 mutex_lock(&dev_priv->sb_lock); 958 mutex_lock(&dev_priv->sb_lock);
@@ -990,7 +990,7 @@ void vlv_set_phy_signal_level(struct intel_encoder *encoder,
990 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); 990 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
991 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 991 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
992 enum dpio_channel port = vlv_dport_to_channel(dport); 992 enum dpio_channel port = vlv_dport_to_channel(dport);
993 int pipe = intel_crtc->pipe; 993 enum pipe pipe = intel_crtc->pipe;
994 994
995 mutex_lock(&dev_priv->sb_lock); 995 mutex_lock(&dev_priv->sb_lock);
996 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), 0x00000000); 996 vlv_dpio_write(dev_priv, pipe, VLV_TX_DW5(port), 0x00000000);
@@ -1008,15 +1008,14 @@ void vlv_set_phy_signal_level(struct intel_encoder *encoder,
1008 mutex_unlock(&dev_priv->sb_lock); 1008 mutex_unlock(&dev_priv->sb_lock);
1009} 1009}
1010 1010
1011void vlv_phy_pre_pll_enable(struct intel_encoder *encoder) 1011void vlv_phy_pre_pll_enable(struct intel_encoder *encoder,
1012 const struct intel_crtc_state *crtc_state)
1012{ 1013{
1013 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 1014 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
1014 struct drm_device *dev = encoder->base.dev; 1015 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1015 struct drm_i915_private *dev_priv = to_i915(dev); 1016 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
1016 struct intel_crtc *intel_crtc =
1017 to_intel_crtc(encoder->base.crtc);
1018 enum dpio_channel port = vlv_dport_to_channel(dport); 1017 enum dpio_channel port = vlv_dport_to_channel(dport);
1019 int pipe = intel_crtc->pipe; 1018 enum pipe pipe = crtc->pipe;
1020 1019
1021 /* Program Tx lane resets to default */ 1020 /* Program Tx lane resets to default */
1022 mutex_lock(&dev_priv->sb_lock); 1021 mutex_lock(&dev_priv->sb_lock);
@@ -1036,15 +1035,15 @@ void vlv_phy_pre_pll_enable(struct intel_encoder *encoder)
1036 mutex_unlock(&dev_priv->sb_lock); 1035 mutex_unlock(&dev_priv->sb_lock);
1037} 1036}
1038 1037
1039void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder) 1038void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder,
1039 const struct intel_crtc_state *crtc_state)
1040{ 1040{
1041 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 1041 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
1042 struct intel_digital_port *dport = dp_to_dig_port(intel_dp); 1042 struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
1043 struct drm_device *dev = encoder->base.dev; 1043 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1044 struct drm_i915_private *dev_priv = to_i915(dev); 1044 struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
1045 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
1046 enum dpio_channel port = vlv_dport_to_channel(dport); 1045 enum dpio_channel port = vlv_dport_to_channel(dport);
1047 int pipe = intel_crtc->pipe; 1046 enum pipe pipe = crtc->pipe;
1048 u32 val; 1047 u32 val;
1049 1048
1050 mutex_lock(&dev_priv->sb_lock); 1049 mutex_lock(&dev_priv->sb_lock);
@@ -1066,14 +1065,14 @@ void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder)
1066 mutex_unlock(&dev_priv->sb_lock); 1065 mutex_unlock(&dev_priv->sb_lock);
1067} 1066}
1068 1067
1069void vlv_phy_reset_lanes(struct intel_encoder *encoder) 1068void vlv_phy_reset_lanes(struct intel_encoder *encoder,
1069 const struct intel_crtc_state *old_crtc_state)
1070{ 1070{
1071 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); 1071 struct intel_digital_port *dport = enc_to_dig_port(&encoder->base);
1072 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); 1072 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1073 struct intel_crtc *intel_crtc = 1073 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc);
1074 to_intel_crtc(encoder->base.crtc);
1075 enum dpio_channel port = vlv_dport_to_channel(dport); 1074 enum dpio_channel port = vlv_dport_to_channel(dport);
1076 int pipe = intel_crtc->pipe; 1075 enum pipe pipe = crtc->pipe;
1077 1076
1078 mutex_lock(&dev_priv->sb_lock); 1077 mutex_lock(&dev_priv->sb_lock);
1079 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(port), 0x00000000); 1078 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(port), 0x00000000);