diff options
| author | Dave Airlie <[email protected]> | 2022-02-25 05:51:04 +1000 | 
|---|---|---|
| committer | Dave Airlie <[email protected]> | 2022-02-25 05:51:04 +1000 | 
| commit | ecf8a99f4807c17fa310a83067a95964cedd9ac1 (patch) | |
| tree | 1a1107613cbefe9cd19352c297e558359be7f5af /drivers/gpu/drm/i915/display/intel_tc.c | |
| parent | 7c17b3d37f1fa1eb0498cdf63d43ce37b23eaae5 (diff) | |
| parent | 28adef861233c6fce47372ebd2070b55eaa8e899 (diff) | |
Merge tag 'drm-intel-fixes-2022-02-24' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes
- Fix QGV handling on ADL-P+ (Ville Syrjälä)
- Fix bw atomic check when switching between SAGV vs. no SAGV (Ville Syrjälä)
- Disconnect PHYs left connected by BIOS on disabled ports (Imre Deak)
- Fix SAVG to no SAGV transitions on TGL+ (Ville Syrjälä)
- Print PHY name properly on calibration error (DG2) (Matt Roper)
Signed-off-by: Dave Airlie <[email protected]>
From: Tvrtko Ursulin <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/YhdyHwRWkOTWwlqi@tursulin-mobl2
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_tc.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_tc.c | 26 | 
1 files changed, 20 insertions, 6 deletions
| diff --git a/drivers/gpu/drm/i915/display/intel_tc.c b/drivers/gpu/drm/i915/display/intel_tc.c index dbd7d0d83a14..7784c30fe893 100644 --- a/drivers/gpu/drm/i915/display/intel_tc.c +++ b/drivers/gpu/drm/i915/display/intel_tc.c @@ -691,6 +691,8 @@ void intel_tc_port_sanitize(struct intel_digital_port *dig_port)  {  	struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);  	struct intel_encoder *encoder = &dig_port->base; +	intel_wakeref_t tc_cold_wref; +	enum intel_display_power_domain domain;  	int active_links = 0;  	mutex_lock(&dig_port->tc_lock); @@ -702,12 +704,11 @@ void intel_tc_port_sanitize(struct intel_digital_port *dig_port)  	drm_WARN_ON(&i915->drm, dig_port->tc_mode != TC_PORT_DISCONNECTED);  	drm_WARN_ON(&i915->drm, dig_port->tc_lock_wakeref); -	if (active_links) { -		enum intel_display_power_domain domain; -		intel_wakeref_t tc_cold_wref = tc_cold_block(dig_port, &domain); -		dig_port->tc_mode = intel_tc_port_get_current_mode(dig_port); +	tc_cold_wref = tc_cold_block(dig_port, &domain); +	dig_port->tc_mode = intel_tc_port_get_current_mode(dig_port); +	if (active_links) {  		if (!icl_tc_phy_is_connected(dig_port))  			drm_dbg_kms(&i915->drm,  				    "Port %s: PHY disconnected with %d active link(s)\n", @@ -716,10 +717,23 @@ void intel_tc_port_sanitize(struct intel_digital_port *dig_port)  		dig_port->tc_lock_wakeref = tc_cold_block(dig_port,  							  &dig_port->tc_lock_power_domain); - -		tc_cold_unblock(dig_port, domain, tc_cold_wref); +	} else { +		/* +		 * TBT-alt is the default mode in any case the PHY ownership is not +		 * held (regardless of the sink's connected live state), so +		 * we'll just switch to disconnected mode from it here without +		 * a note. +		 */ +		if (dig_port->tc_mode != TC_PORT_TBT_ALT) +			drm_dbg_kms(&i915->drm, +				    "Port %s: PHY left in %s mode on disabled port, disconnecting it\n", +				    dig_port->tc_port_name, +				    tc_port_mode_name(dig_port->tc_mode)); +		icl_tc_phy_disconnect(dig_port);  	} +	tc_cold_unblock(dig_port, domain, tc_cold_wref); +  	drm_dbg_kms(&i915->drm, "Port %s: sanitize mode (%s)\n",  		    dig_port->tc_port_name,  		    tc_port_mode_name(dig_port->tc_mode)); |