diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2014-04-28 07:15:24 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-05-20 09:43:18 -0400 |
commit | d2152b2524a96e6cb71097ea26c2e7c3f9e3ee12 (patch) | |
tree | ecd005705a3389ff03ae2510283e0c37b837306b | |
parent | 580d3811f4465feee9d5cacdc88b6aa6b345eff5 (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.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 8 |
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); |