Commit f39194a7 authored by Imre Deak's avatar Imre Deak

drm/i915: Disable power asynchronously during DP AUX transfers

In a follow-up patch we will restrict holding the reference on the AUX
power domain to the AUX transfer function. To avoid the unnecessary
on-off-on power togglings drop the reference asynchronously.

There is no reason we couldn't do this in general and also put the
reference asynchronously in pps_unlock(); but that's a separate change
that can be done as a follow-up.

Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190509173446.31095-6-imre.deak@intel.com
parent e0da2d63
...@@ -1221,7 +1221,10 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp, ...@@ -1221,7 +1221,10 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
to_i915(intel_dig_port->base.base.dev); to_i915(intel_dig_port->base.base.dev);
i915_reg_t ch_ctl, ch_data[5]; i915_reg_t ch_ctl, ch_data[5];
u32 aux_clock_divider; u32 aux_clock_divider;
intel_wakeref_t wakeref; enum intel_display_power_domain aux_domain =
intel_aux_power_domain(intel_dig_port);
intel_wakeref_t aux_wakeref;
intel_wakeref_t pps_wakeref;
int i, ret, recv_bytes; int i, ret, recv_bytes;
int try, clock = 0; int try, clock = 0;
u32 status; u32 status;
...@@ -1231,7 +1234,8 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp, ...@@ -1231,7 +1234,8 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
for (i = 0; i < ARRAY_SIZE(ch_data); i++) for (i = 0; i < ARRAY_SIZE(ch_data); i++)
ch_data[i] = intel_dp->aux_ch_data_reg(intel_dp, i); ch_data[i] = intel_dp->aux_ch_data_reg(intel_dp, i);
wakeref = pps_lock(intel_dp); aux_wakeref = intel_display_power_get(dev_priv, aux_domain);
pps_wakeref = pps_lock(intel_dp);
/* /*
* We will be called with VDD already enabled for dpcd/edid/oui reads. * We will be called with VDD already enabled for dpcd/edid/oui reads.
...@@ -1377,7 +1381,8 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp, ...@@ -1377,7 +1381,8 @@ intel_dp_aux_xfer(struct intel_dp *intel_dp,
if (vdd) if (vdd)
edp_panel_vdd_off(intel_dp, false); edp_panel_vdd_off(intel_dp, false);
pps_unlock(intel_dp, wakeref); pps_unlock(intel_dp, pps_wakeref);
intel_display_power_put_async(dev_priv, aux_domain, aux_wakeref);
return ret; return ret;
} }
......
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