Commit 162e68e1 authored by Imre Deak's avatar Imre Deak

drm/i915/ddi: Track power reference taken for encoder main lane AUX use

Add wakeref tracking for the DDI encoders' main lane AUX display power
domain references.

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20201130212200.2811939-6-imre.deak@intel.com
parent a4550977
...@@ -2296,9 +2296,12 @@ static void intel_ddi_get_power_domains(struct intel_encoder *encoder, ...@@ -2296,9 +2296,12 @@ static void intel_ddi_get_power_domains(struct intel_encoder *encoder,
* ports. * ports.
*/ */
if (intel_crtc_has_dp_encoder(crtc_state) || if (intel_crtc_has_dp_encoder(crtc_state) ||
intel_phy_is_tc(dev_priv, phy)) intel_phy_is_tc(dev_priv, phy)) {
intel_display_power_get(dev_priv, drm_WARN_ON(&dev_priv->drm, dig_port->aux_wakeref);
intel_ddi_main_link_aux_domain(dig_port)); dig_port->aux_wakeref =
intel_display_power_get(dev_priv,
intel_ddi_main_link_aux_domain(dig_port));
}
} }
void intel_ddi_enable_pipe_clock(struct intel_encoder *encoder, void intel_ddi_enable_pipe_clock(struct intel_encoder *encoder,
...@@ -4042,8 +4045,9 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state, ...@@ -4042,8 +4045,9 @@ static void intel_ddi_post_disable(struct intel_atomic_state *state,
icl_unmap_plls_to_ports(encoder); icl_unmap_plls_to_ports(encoder);
if (intel_crtc_has_dp_encoder(old_crtc_state) || is_tc_port) if (intel_crtc_has_dp_encoder(old_crtc_state) || is_tc_port)
intel_display_power_put_unchecked(dev_priv, intel_display_power_put(dev_priv,
intel_ddi_main_link_aux_domain(dig_port)); intel_ddi_main_link_aux_domain(dig_port),
fetch_and_zero(&dig_port->aux_wakeref));
if (is_tc_port) if (is_tc_port)
intel_tc_port_put_link(dig_port); intel_tc_port_put_link(dig_port);
...@@ -4382,9 +4386,12 @@ intel_ddi_pre_pll_enable(struct intel_atomic_state *state, ...@@ -4382,9 +4386,12 @@ intel_ddi_pre_pll_enable(struct intel_atomic_state *state,
if (is_tc_port) if (is_tc_port)
intel_tc_port_get_link(dig_port, crtc_state->lane_count); intel_tc_port_get_link(dig_port, crtc_state->lane_count);
if (intel_crtc_has_dp_encoder(crtc_state) || is_tc_port) if (intel_crtc_has_dp_encoder(crtc_state) || is_tc_port) {
intel_display_power_get(dev_priv, drm_WARN_ON(&dev_priv->drm, dig_port->aux_wakeref);
intel_ddi_main_link_aux_domain(dig_port)); dig_port->aux_wakeref =
intel_display_power_get(dev_priv,
intel_ddi_main_link_aux_domain(dig_port));
}
if (is_tc_port && dig_port->tc_mode != TC_PORT_TBT_ALT) if (is_tc_port && dig_port->tc_mode != TC_PORT_TBT_ALT)
/* /*
......
...@@ -1483,6 +1483,7 @@ struct intel_digital_port { ...@@ -1483,6 +1483,7 @@ struct intel_digital_port {
enum aux_ch aux_ch; enum aux_ch aux_ch;
enum intel_display_power_domain ddi_io_power_domain; enum intel_display_power_domain ddi_io_power_domain;
intel_wakeref_t ddi_io_wakeref; intel_wakeref_t ddi_io_wakeref;
intel_wakeref_t aux_wakeref;
struct mutex tc_lock; /* protects the TypeC port mode */ struct mutex tc_lock; /* protects the TypeC port mode */
intel_wakeref_t tc_lock_wakeref; intel_wakeref_t tc_lock_wakeref;
int tc_link_refcount; int tc_link_refcount;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment