Commit 675d23c1 authored by Imre Deak's avatar Imre Deak

drm/i915/tc: Don't keep legacy TypeC ports in connected state w/o a sink

A follow-up patch will disconnect/reconnect PHYs around AUX transfers
and modeset enable/disables. To prepare for that and make things
consistent for all TypeC modes stop connecting the PHY in legacy mode
without a sink being connected. This was done before since in legacy
mode the PHY is dedicated to display usage, so there was no point in
disconnecting it. However after the follow-up changes the TC-cold
blocking power domains will be held as long as the PHY is in the
connected state, so we'll need to disconnect/re-connect the PHY in all
TypeC modes to allow for power saving.

Cc: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210921002313.1132357-7-imre.deak@intel.com
parent 11a89708
...@@ -527,8 +527,6 @@ static void icl_tc_phy_disconnect(struct intel_digital_port *dig_port) ...@@ -527,8 +527,6 @@ static void icl_tc_phy_disconnect(struct intel_digital_port *dig_port)
{ {
switch (dig_port->tc_mode) { switch (dig_port->tc_mode) {
case TC_PORT_LEGACY: case TC_PORT_LEGACY:
/* Nothing to do, we never disconnect from legacy mode */
break;
case TC_PORT_DP_ALT: case TC_PORT_DP_ALT:
tc_phy_take_ownership(dig_port, false); tc_phy_take_ownership(dig_port, false);
dig_port->tc_mode = TC_PORT_TBT_ALT; dig_port->tc_mode = TC_PORT_TBT_ALT;
...@@ -596,9 +594,7 @@ intel_tc_port_get_target_mode(struct intel_digital_port *dig_port) ...@@ -596,9 +594,7 @@ intel_tc_port_get_target_mode(struct intel_digital_port *dig_port)
if (live_status_mask) if (live_status_mask)
return fls(live_status_mask) - 1; return fls(live_status_mask) - 1;
return tc_phy_status_complete(dig_port) && return TC_PORT_TBT_ALT;
dig_port->tc_legacy_port ? TC_PORT_LEGACY :
TC_PORT_TBT_ALT;
} }
static void intel_tc_port_reset_mode(struct intel_digital_port *dig_port, static void intel_tc_port_reset_mode(struct intel_digital_port *dig_port,
...@@ -659,14 +655,8 @@ void intel_tc_port_sanitize(struct intel_digital_port *dig_port) ...@@ -659,14 +655,8 @@ void intel_tc_port_sanitize(struct intel_digital_port *dig_port)
"Port %s: PHY disconnected with %d active link(s)\n", "Port %s: PHY disconnected with %d active link(s)\n",
dig_port->tc_port_name, active_links); dig_port->tc_port_name, active_links);
intel_tc_port_link_init_refcount(dig_port, active_links); intel_tc_port_link_init_refcount(dig_port, active_links);
goto out;
} }
if (dig_port->tc_legacy_port)
icl_tc_phy_connect(dig_port, 1);
out:
drm_dbg_kms(&i915->drm, "Port %s: sanitize mode (%s)\n", drm_dbg_kms(&i915->drm, "Port %s: sanitize mode (%s)\n",
dig_port->tc_port_name, dig_port->tc_port_name,
tc_port_mode_name(dig_port->tc_mode)); tc_port_mode_name(dig_port->tc_mode));
......
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