diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2014-04-09 06:29:02 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-05-20 09:48:58 -0400 |
commit | 97fd4d5c81af7976b4ec9971a93bf3c361066c65 (patch) | |
tree | 0adbfae41574e1366b48f2e564eec85507d026c0 /drivers/gpu/drm/i915/intel_dp.c | |
parent | d2152b2524a96e6cb71097ea26c2e7c3f9e3ee12 (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.c | 32 |
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++) { |