diff mbox series

[1/5] drm/i915: Skip vswing programming for TBT

Message ID 20210128155948.13678-1-ville.syrjala@linux.intel.com
State Accepted
Commit f8c6b615b921d8a1bcd74870f9105e62b0bceff3
Headers show
Series [1/5] drm/i915: Skip vswing programming for TBT | expand

Commit Message

Ville Syrjälä Jan. 28, 2021, 3:59 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

In thunderbolt mode the PHY is owned by the thunderbolt controller.
We are not supposed to touch it. So skip the vswing programming
as well (we already skipped the other steps not applicable to TBT).

Touching this stuff could supposedly interfere with the PHY
programming done by the thunderbolt controller.

Cc: stable@vger.kernel.org
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/i915/display/intel_ddi.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Imre Deak Jan. 29, 2021, 4:56 p.m. UTC | #1
On Thu, Jan 28, 2021 at 05:59:44PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>

> 

> In thunderbolt mode the PHY is owned by the thunderbolt controller.

> We are not supposed to touch it. So skip the vswing programming

> as well (we already skipped the other steps not applicable to TBT).

> 

> Touching this stuff could supposedly interfere with the PHY

> programming done by the thunderbolt controller.

> 

> Cc: stable@vger.kernel.org

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>


Matches the spec:
Reviewed-by: Imre Deak <imre.deak@intel.com>


> ---

>  drivers/gpu/drm/i915/display/intel_ddi.c | 6 ++++++

>  1 file changed, 6 insertions(+)

> 

> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c

> index 9506b8048530..c94650488dc1 100644

> --- a/drivers/gpu/drm/i915/display/intel_ddi.c

> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c

> @@ -2827,6 +2827,9 @@ static void icl_mg_phy_ddi_vswing_sequence(struct intel_encoder *encoder,

>  	int n_entries, ln;

>  	u32 val;

>  

> +	if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)

> +		return;

> +

>  	ddi_translations = icl_get_mg_buf_trans(encoder, crtc_state, &n_entries);

>  

>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))

> @@ -2962,6 +2965,9 @@ tgl_dkl_phy_ddi_vswing_sequence(struct intel_encoder *encoder,

>  	u32 val, dpcnt_mask, dpcnt_val;

>  	int n_entries, ln;

>  

> +	if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)

> +		return;

> +

>  	ddi_translations = tgl_get_dkl_buf_trans(encoder, crtc_state, &n_entries);

>  

>  	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))

> -- 

> 2.26.2

> 

> _______________________________________________

> Intel-gfx mailing list

> Intel-gfx@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Imre Deak Jan. 29, 2021, 4:57 p.m. UTC | #2
On Thu, Jan 28, 2021 at 05:59:45PM +0200, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>

> 

> Reduce the copypasta by pulling the combo PHY lane

> power up stuff into a helper. We'll have a third user soon.

> 

> Cc: stable@vger.kernel.org

> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>


Reviewed-by: Imre Deak <imre.deak@intel.com>


> ---

>  drivers/gpu/drm/i915/display/intel_ddi.c | 35 +++++++++++++-----------

>  1 file changed, 19 insertions(+), 16 deletions(-)

> 

> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c

> index c94650488dc1..88cc6e2fbe91 100644

> --- a/drivers/gpu/drm/i915/display/intel_ddi.c

> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c

> @@ -3641,6 +3641,23 @@ static void intel_ddi_disable_fec_state(struct intel_encoder *encoder,

>  	intel_de_posting_read(dev_priv, dp_tp_ctl_reg(encoder, crtc_state));

>  }

>  

> +static void intel_ddi_power_up_lanes(struct intel_encoder *encoder,

> +				     const struct intel_crtc_state *crtc_state)

> +{

> +	struct drm_i915_private *i915 = to_i915(encoder->base.dev);

> +	struct intel_digital_port *dig_port = enc_to_dig_port(encoder);

> +	enum phy phy = intel_port_to_phy(i915, encoder->port);

> +

> +	if (intel_phy_is_combo(i915, phy)) {

> +		bool lane_reversal =

> +			dig_port->saved_port_bits & DDI_BUF_PORT_REVERSAL;

> +

> +		intel_combo_phy_power_up_lanes(i915, phy, false,

> +					       crtc_state->lane_count,

> +					       lane_reversal);

> +	}

> +}

> +

>  static void tgl_ddi_pre_enable_dp(struct intel_atomic_state *state,

>  				  struct intel_encoder *encoder,

>  				  const struct intel_crtc_state *crtc_state,

> @@ -3732,14 +3749,7 @@ static void tgl_ddi_pre_enable_dp(struct intel_atomic_state *state,

>  	 * 7.f Combo PHY: Configure PORT_CL_DW10 Static Power Down to power up

>  	 * the used lanes of the DDI.

>  	 */

> -	if (intel_phy_is_combo(dev_priv, phy)) {

> -		bool lane_reversal =

> -			dig_port->saved_port_bits & DDI_BUF_PORT_REVERSAL;

> -

> -		intel_combo_phy_power_up_lanes(dev_priv, phy, false,

> -					       crtc_state->lane_count,

> -					       lane_reversal);

> -	}

> +	intel_ddi_power_up_lanes(encoder, crtc_state);

>  

>  	/*

>  	 * 7.g Configure and enable DDI_BUF_CTL

> @@ -3830,14 +3840,7 @@ static void hsw_ddi_pre_enable_dp(struct intel_atomic_state *state,

>  	else

>  		intel_prepare_dp_ddi_buffers(encoder, crtc_state);

>  

> -	if (intel_phy_is_combo(dev_priv, phy)) {

> -		bool lane_reversal =

> -			dig_port->saved_port_bits & DDI_BUF_PORT_REVERSAL;

> -

> -		intel_combo_phy_power_up_lanes(dev_priv, phy, false,

> -					       crtc_state->lane_count,

> -					       lane_reversal);

> -	}

> +	intel_ddi_power_up_lanes(encoder, crtc_state);

>  

>  	intel_ddi_init_dp_buf_reg(encoder, crtc_state);

>  	if (!is_mst)

> -- 

> 2.26.2

> 

> _______________________________________________

> Intel-gfx mailing list

> Intel-gfx@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
index 9506b8048530..c94650488dc1 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi.c
@@ -2827,6 +2827,9 @@  static void icl_mg_phy_ddi_vswing_sequence(struct intel_encoder *encoder,
 	int n_entries, ln;
 	u32 val;
 
+	if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)
+		return;
+
 	ddi_translations = icl_get_mg_buf_trans(encoder, crtc_state, &n_entries);
 
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))
@@ -2962,6 +2965,9 @@  tgl_dkl_phy_ddi_vswing_sequence(struct intel_encoder *encoder,
 	u32 val, dpcnt_mask, dpcnt_val;
 	int n_entries, ln;
 
+	if (enc_to_dig_port(encoder)->tc_mode == TC_PORT_TBT_ALT)
+		return;
+
 	ddi_translations = tgl_get_dkl_buf_trans(encoder, crtc_state, &n_entries);
 
 	if (drm_WARN_ON_ONCE(&dev_priv->drm, !ddi_translations))