|
@@ -1628,6 +1628,14 @@ static void chv_hdmi_pre_pll_enable(struct intel_encoder *encoder)
|
|
|
|
|
|
intel_hdmi_prepare(encoder);
|
|
intel_hdmi_prepare(encoder);
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Must trick the second common lane into life.
|
|
|
|
+ * Otherwise we can't even access the PLL.
|
|
|
|
+ */
|
|
|
|
+ if (ch == DPIO_CH0 && pipe == PIPE_B)
|
|
|
|
+ dport->release_cl2_override =
|
|
|
|
+ !chv_phy_powergate_ch(dev_priv, DPIO_PHY0, DPIO_CH1, true);
|
|
|
|
+
|
|
chv_phy_powergate_lanes(encoder, true, 0x0);
|
|
chv_phy_powergate_lanes(encoder, true, 0x0);
|
|
|
|
|
|
mutex_lock(&dev_priv->sb_lock);
|
|
mutex_lock(&dev_priv->sb_lock);
|
|
@@ -1704,6 +1712,15 @@ static void chv_hdmi_post_pll_disable(struct intel_encoder *encoder)
|
|
|
|
|
|
mutex_unlock(&dev_priv->sb_lock);
|
|
mutex_unlock(&dev_priv->sb_lock);
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Leave the power down bit cleared for at least one
|
|
|
|
+ * lane so that chv_powergate_phy_ch() will power
|
|
|
|
+ * on something when the channel is otherwise unused.
|
|
|
|
+ * When the port is off and the override is removed
|
|
|
|
+ * the lanes power down anyway, so otherwise it doesn't
|
|
|
|
+ * really matter what the state of power down bits is
|
|
|
|
+ * after this.
|
|
|
|
+ */
|
|
chv_phy_powergate_lanes(encoder, false, 0x0);
|
|
chv_phy_powergate_lanes(encoder, false, 0x0);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1925,6 +1942,12 @@ static void chv_hdmi_pre_enable(struct intel_encoder *encoder)
|
|
g4x_enable_hdmi(encoder);
|
|
g4x_enable_hdmi(encoder);
|
|
|
|
|
|
vlv_wait_port_ready(dev_priv, dport, 0x0);
|
|
vlv_wait_port_ready(dev_priv, dport, 0x0);
|
|
|
|
+
|
|
|
|
+ /* Second common lane will stay alive on its own now */
|
|
|
|
+ if (dport->release_cl2_override) {
|
|
|
|
+ chv_phy_powergate_ch(dev_priv, DPIO_PHY0, DPIO_CH1, false);
|
|
|
|
+ dport->release_cl2_override = false;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
static void intel_hdmi_destroy(struct drm_connector *connector)
|
|
static void intel_hdmi_destroy(struct drm_connector *connector)
|