diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index c192dbb8a36c..d6eba380ee2e 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -1746,16 +1746,16 @@ static void vlv_pre_enable_dp(struct intel_encoder *encoder) | |||
1746 | 1746 | ||
1747 | mutex_lock(&dev_priv->dpio_lock); | 1747 | mutex_lock(&dev_priv->dpio_lock); |
1748 | 1748 | ||
1749 | val = vlv_dpio_read(dev_priv, DPIO_DATA_LANE_A(port)); | 1749 | val = vlv_dpio_read(dev_priv, pipe, DPIO_DATA_LANE_A(port)); |
1750 | val = 0; | 1750 | val = 0; |
1751 | if (pipe) | 1751 | if (pipe) |
1752 | val |= (1<<21); | 1752 | val |= (1<<21); |
1753 | else | 1753 | else |
1754 | val &= ~(1<<21); | 1754 | val &= ~(1<<21); |
1755 | val |= 0x001000c4; | 1755 | val |= 0x001000c4; |
1756 | vlv_dpio_write(dev_priv, DPIO_DATA_CHANNEL(port), val); | 1756 | vlv_dpio_write(dev_priv, pipe, DPIO_DATA_CHANNEL(port), val); |
1757 | vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF0(port), 0x00760018); | 1757 | vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CLOCKBUF0(port), 0x00760018); |
1758 | vlv_dpio_write(dev_priv, DPIO_PCS_CLOCKBUF8(port), 0x00400888); | 1758 | vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CLOCKBUF8(port), 0x00400888); |
1759 | 1759 | ||
1760 | mutex_unlock(&dev_priv->dpio_lock); | 1760 | mutex_unlock(&dev_priv->dpio_lock); |
1761 | 1761 | ||
@@ -1769,26 +1769,29 @@ static void intel_dp_pre_pll_enable(struct intel_encoder *encoder) | |||
1769 | struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); | 1769 | struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); |
1770 | struct drm_device *dev = encoder->base.dev; | 1770 | struct drm_device *dev = encoder->base.dev; |
1771 | struct drm_i915_private *dev_priv = dev->dev_private; | 1771 | struct drm_i915_private *dev_priv = dev->dev_private; |
1772 | struct intel_crtc *intel_crtc = | ||
1773 | to_intel_crtc(encoder->base.crtc); | ||
1772 | int port = vlv_dport_to_channel(dport); | 1774 | int port = vlv_dport_to_channel(dport); |
1775 | int pipe = intel_crtc->pipe; | ||
1773 | 1776 | ||
1774 | if (!IS_VALLEYVIEW(dev)) | 1777 | if (!IS_VALLEYVIEW(dev)) |
1775 | return; | 1778 | return; |
1776 | 1779 | ||
1777 | /* Program Tx lane resets to default */ | 1780 | /* Program Tx lane resets to default */ |
1778 | mutex_lock(&dev_priv->dpio_lock); | 1781 | mutex_lock(&dev_priv->dpio_lock); |
1779 | vlv_dpio_write(dev_priv, DPIO_PCS_TX(port), | 1782 | vlv_dpio_write(dev_priv, pipe, DPIO_PCS_TX(port), |
1780 | DPIO_PCS_TX_LANE2_RESET | | 1783 | DPIO_PCS_TX_LANE2_RESET | |
1781 | DPIO_PCS_TX_LANE1_RESET); | 1784 | DPIO_PCS_TX_LANE1_RESET); |
1782 | vlv_dpio_write(dev_priv, DPIO_PCS_CLK(port), | 1785 | vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CLK(port), |
1783 | DPIO_PCS_CLK_CRI_RXEB_EIOS_EN | | 1786 | DPIO_PCS_CLK_CRI_RXEB_EIOS_EN | |
1784 | DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN | | 1787 | DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN | |
1785 | (1<<DPIO_PCS_CLK_DATAWIDTH_SHIFT) | | 1788 | (1<<DPIO_PCS_CLK_DATAWIDTH_SHIFT) | |
1786 | DPIO_PCS_CLK_SOFT_RESET); | 1789 | DPIO_PCS_CLK_SOFT_RESET); |
1787 | 1790 | ||
1788 | /* Fix up inter-pair skew failure */ | 1791 | /* Fix up inter-pair skew failure */ |
1789 | vlv_dpio_write(dev_priv, DPIO_PCS_STAGGER1(port), 0x00750f00); | 1792 | vlv_dpio_write(dev_priv, pipe, DPIO_PCS_STAGGER1(port), 0x00750f00); |
1790 | vlv_dpio_write(dev_priv, DPIO_TX_CTL(port), 0x00001500); | 1793 | vlv_dpio_write(dev_priv, pipe, DPIO_TX_CTL(port), 0x00001500); |
1791 | vlv_dpio_write(dev_priv, DPIO_TX_LANE(port), 0x40400000); | 1794 | vlv_dpio_write(dev_priv, pipe, DPIO_TX_LANE(port), 0x40400000); |
1792 | mutex_unlock(&dev_priv->dpio_lock); | 1795 | mutex_unlock(&dev_priv->dpio_lock); |
1793 | } | 1796 | } |
1794 | 1797 | ||
@@ -1923,10 +1926,13 @@ static uint32_t intel_vlv_signal_levels(struct intel_dp *intel_dp) | |||
1923 | struct drm_device *dev = intel_dp_to_dev(intel_dp); | 1926 | struct drm_device *dev = intel_dp_to_dev(intel_dp); |
1924 | struct drm_i915_private *dev_priv = dev->dev_private; | 1927 | struct drm_i915_private *dev_priv = dev->dev_private; |
1925 | struct intel_digital_port *dport = dp_to_dig_port(intel_dp); | 1928 | struct intel_digital_port *dport = dp_to_dig_port(intel_dp); |
1929 | struct intel_crtc *intel_crtc = | ||
1930 | to_intel_crtc(dport->base.base.crtc); | ||
1926 | unsigned long demph_reg_value, preemph_reg_value, | 1931 | unsigned long demph_reg_value, preemph_reg_value, |
1927 | uniqtranscale_reg_value; | 1932 | uniqtranscale_reg_value; |
1928 | uint8_t train_set = intel_dp->train_set[0]; | 1933 | uint8_t train_set = intel_dp->train_set[0]; |
1929 | int port = vlv_dport_to_channel(dport); | 1934 | int port = vlv_dport_to_channel(dport); |
1935 | int pipe = intel_crtc->pipe; | ||
1930 | 1936 | ||
1931 | switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) { | 1937 | switch (train_set & DP_TRAIN_PRE_EMPHASIS_MASK) { |
1932 | case DP_TRAIN_PRE_EMPHASIS_0: | 1938 | case DP_TRAIN_PRE_EMPHASIS_0: |
@@ -2002,14 +2008,14 @@ static uint32_t intel_vlv_signal_levels(struct intel_dp *intel_dp) | |||
2002 | } | 2008 | } |
2003 | 2009 | ||
2004 | mutex_lock(&dev_priv->dpio_lock); | 2010 | mutex_lock(&dev_priv->dpio_lock); |
2005 | vlv_dpio_write(dev_priv, DPIO_TX_OCALINIT(port), 0x00000000); | 2011 | vlv_dpio_write(dev_priv, pipe, DPIO_TX_OCALINIT(port), 0x00000000); |
2006 | vlv_dpio_write(dev_priv, DPIO_TX_SWING_CTL4(port), demph_reg_value); | 2012 | vlv_dpio_write(dev_priv, pipe, DPIO_TX_SWING_CTL4(port), demph_reg_value); |
2007 | vlv_dpio_write(dev_priv, DPIO_TX_SWING_CTL2(port), | 2013 | vlv_dpio_write(dev_priv, pipe, DPIO_TX_SWING_CTL2(port), |
2008 | uniqtranscale_reg_value); | 2014 | uniqtranscale_reg_value); |
2009 | vlv_dpio_write(dev_priv, DPIO_TX_SWING_CTL3(port), 0x0C782040); | 2015 | vlv_dpio_write(dev_priv, pipe, DPIO_TX_SWING_CTL3(port), 0x0C782040); |
2010 | vlv_dpio_write(dev_priv, DPIO_PCS_STAGGER0(port), 0x00030000); | 2016 | vlv_dpio_write(dev_priv, pipe, DPIO_PCS_STAGGER0(port), 0x00030000); |
2011 | vlv_dpio_write(dev_priv, DPIO_PCS_CTL_OVER1(port), preemph_reg_value); | 2017 | vlv_dpio_write(dev_priv, pipe, DPIO_PCS_CTL_OVER1(port), preemph_reg_value); |
2012 | vlv_dpio_write(dev_priv, DPIO_TX_OCALINIT(port), 0x80000000); | 2018 | vlv_dpio_write(dev_priv, pipe, DPIO_TX_OCALINIT(port), 0x80000000); |
2013 | mutex_unlock(&dev_priv->dpio_lock); | 2019 | mutex_unlock(&dev_priv->dpio_lock); |
2014 | 2020 | ||
2015 | return 0; | 2021 | return 0; |