aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2014-04-09 06:29:02 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-05-20 09:48:58 -0400
commit97fd4d5c81af7976b4ec9971a93bf3c361066c65 (patch)
tree0adbfae41574e1366b48f2e564eec85507d026c0 /drivers/gpu/drm/i915/intel_dp.c
parentd2152b2524a96e6cb71097ea26c2e7c3f9e3ee12 (diff)
drm/i915/chv: Don't use PCS group access reads
All PCS groups access reads return 0xffffffff, so we can't use group access for RMW cycles. Instead target each spline separately. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> [danvet: Fight conflict with misplaced ; .... ARGH!] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 37638f8e2265..d98de3c18621 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1882,13 +1882,21 @@ static void chv_post_disable_dp(struct intel_encoder *encoder)
1882 mutex_lock(&dev_priv->dpio_lock); 1882 mutex_lock(&dev_priv->dpio_lock);
1883 1883
1884 /* Propagate soft reset to data lane reset */ 1884 /* Propagate soft reset to data lane reset */
1885 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW1(ch)); 1885 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW1(ch));
1886 val |= CHV_PCS_REQ_SOFTRESET_EN; 1886 val |= CHV_PCS_REQ_SOFTRESET_EN;
1887 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(ch), val); 1887 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW1(ch), val);
1888 1888
1889 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch)); 1889 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW1(ch));
1890 val |= CHV_PCS_REQ_SOFTRESET_EN;
1891 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW1(ch), val);
1892
1893 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW0(ch));
1894 val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
1895 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW0(ch), val);
1896
1897 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW0(ch));
1890 val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET); 1898 val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
1891 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val); 1899 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW0(ch), val);
1892 1900
1893 mutex_unlock(&dev_priv->dpio_lock); 1901 mutex_unlock(&dev_priv->dpio_lock);
1894} 1902}
@@ -2027,13 +2035,21 @@ static void chv_pre_enable_dp(struct intel_encoder *encoder)
2027 mutex_lock(&dev_priv->dpio_lock); 2035 mutex_lock(&dev_priv->dpio_lock);
2028 2036
2029 /* Deassert soft data lane reset*/ 2037 /* Deassert soft data lane reset*/
2030 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW1(ch)); 2038 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW1(ch));
2031 val |= CHV_PCS_REQ_SOFTRESET_EN; 2039 val |= CHV_PCS_REQ_SOFTRESET_EN;
2032 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(ch), val); 2040 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW1(ch), val);
2041
2042 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW1(ch));
2043 val |= CHV_PCS_REQ_SOFTRESET_EN;
2044 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW1(ch), val);
2045
2046 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS01_DW0(ch));
2047 val |= (DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
2048 vlv_dpio_write(dev_priv, pipe, VLV_PCS01_DW0(ch), val);
2033 2049
2034 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch)); 2050 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS23_DW0(ch));
2035 val |= (DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET); 2051 val |= (DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
2036 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val); 2052 vlv_dpio_write(dev_priv, pipe, VLV_PCS23_DW0(ch), val);
2037 2053
2038 /* Program Tx lane latency optimal setting*/ 2054 /* Program Tx lane latency optimal setting*/
2039 for (i = 0; i < 4; i++) { 2055 for (i = 0; i < 4; i++) {