aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2014-04-28 07:15:24 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-05-20 09:43:18 -0400
commitd2152b2524a96e6cb71097ea26c2e7c3f9e3ee12 (patch)
treeecd005705a3389ff03ae2510283e0c37b837306b
parent580d3811f4465feee9d5cacdc88b6aa6b345eff5 (diff)
drm/i915/chv: Set soft reset override bit for data lane resets
The bits we've been setting so far only progagate the reset singal to the data lanes. To actaully force the reset signal we need to set another override bit. v2: Fix mispalced ';' (Mika) Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h1
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c8
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c8
3 files changed, 17 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 1ae55fc35e4f..5d1d287f1e38 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -661,6 +661,7 @@ enum punit_power_well {
661 661
662#define _VLV_PCS_DW1_CH0 0x8204 662#define _VLV_PCS_DW1_CH0 0x8204
663#define _VLV_PCS_DW1_CH1 0x8404 663#define _VLV_PCS_DW1_CH1 0x8404
664#define CHV_PCS_REQ_SOFTRESET_EN (1<<23)
664#define DPIO_PCS_CLK_CRI_RXEB_EIOS_EN (1<<22) 665#define DPIO_PCS_CLK_CRI_RXEB_EIOS_EN (1<<22)
665#define DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN (1<<21) 666#define DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN (1<<21)
666#define DPIO_PCS_CLK_DATAWIDTH_SHIFT (6) 667#define DPIO_PCS_CLK_DATAWIDTH_SHIFT (6)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 7235ffb58a18..37638f8e2265 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1882,6 +1882,10 @@ 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));
1886 val |= CHV_PCS_REQ_SOFTRESET_EN;
1887 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(ch), val);
1888
1885 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch)); 1889 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch));
1886 val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET); 1890 val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
1887 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val); 1891 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val);
@@ -2023,6 +2027,10 @@ static void chv_pre_enable_dp(struct intel_encoder *encoder)
2023 mutex_lock(&dev_priv->dpio_lock); 2027 mutex_lock(&dev_priv->dpio_lock);
2024 2028
2025 /* Deassert soft data lane reset*/ 2029 /* Deassert soft data lane reset*/
2030 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW1(ch));
2031 val |= CHV_PCS_REQ_SOFTRESET_EN;
2032 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(ch), val);
2033
2026 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch)); 2034 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch));
2027 val |= (DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET); 2035 val |= (DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
2028 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val); 2036 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val);
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 9ea494a2a32e..f66c7a2ebd9a 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1259,6 +1259,10 @@ static void chv_hdmi_post_disable(struct intel_encoder *encoder)
1259 mutex_lock(&dev_priv->dpio_lock); 1259 mutex_lock(&dev_priv->dpio_lock);
1260 1260
1261 /* Propagate soft reset to data lane reset */ 1261 /* Propagate soft reset to data lane reset */
1262 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW1(ch));
1263 val |= CHV_PCS_REQ_SOFTRESET_EN;
1264 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(ch), val);
1265
1262 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch)); 1266 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch));
1263 val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET); 1267 val &= ~(DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
1264 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val); 1268 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val);
@@ -1281,6 +1285,10 @@ static void chv_hdmi_pre_enable(struct intel_encoder *encoder)
1281 mutex_lock(&dev_priv->dpio_lock); 1285 mutex_lock(&dev_priv->dpio_lock);
1282 1286
1283 /* Deassert soft data lane reset*/ 1287 /* Deassert soft data lane reset*/
1288 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW1(ch));
1289 val |= CHV_PCS_REQ_SOFTRESET_EN;
1290 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW1(ch), val);
1291
1284 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch)); 1292 val = vlv_dpio_read(dev_priv, pipe, VLV_PCS_DW0(ch));
1285 val |= (DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET); 1293 val |= (DPIO_PCS_TX_LANE2_RESET | DPIO_PCS_TX_LANE1_RESET);
1286 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val); 1294 vlv_dpio_write(dev_priv, pipe, VLV_PCS_DW0(ch), val);