uint32_t val = 0x0;
const uint32_t link_entry_time = EDP_PSR_MIN_LINK_ENTRY_TIME_8_LINES;
- if (dev_priv->psr.link_standby) {
+ if (dev_priv->psr.link_standby)
val |= EDP_PSR_LINK_STANDBY;
+
+ if (intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT) {
+ /* It doesn't mean we shouldn't send TPS patters, so let's
+ send the minimal TP1 possible and skip TP2. */
+ val |= EDP_PSR_TP1_TIME_100us;
val |= EDP_PSR_TP2_TP3_TIME_0us;
- val |= EDP_PSR_TP1_TIME_0us;
val |= EDP_PSR_SKIP_AUX_EXIT;
+ /* Sink should be able to train with the 5 or 6 idle patterns */
+ idle_frames += 4;
}
I915_WRITE(EDP_PSR_CTL(dev), val |
/* First we check VBT, but we must respect sink and source
* known restrictions */
dev_priv->psr.link_standby = dev_priv->vbt.psr.full_link;
- if ((intel_dp->psr_dpcd[1] & DP_PSR_NO_TRAIN_ON_EXIT) ||
- (IS_BROADWELL(dev) && intel_dig_port->port != PORT_A))
+ if (IS_BROADWELL(dev) && intel_dig_port->port != PORT_A)
dev_priv->psr.link_standby = true;
dev_priv->psr.busy_frontbuffer_bits = 0;