[Intel-gfx] [PATCH v2 17/25] drm/i915/tgl: select correct bit for port select

Lucas De Marchi lucas.demarchi at intel.com
Wed Jul 10 22:52:42 UTC 2019


On Wed, Jul 10, 2019 at 09:40:05PM +0300, Ville Syrjälä wrote:
>On Mon, Jul 08, 2019 at 04:16:21PM -0700, Lucas De Marchi wrote:
>> From: Mahesh Kumar <mahesh1.kumar at intel.com>
>>
>> Bit definitions for port-select got changed for TRANS_CLK_SEL &
>> TRANS_DDI_FUNC_CTL registers in TGL.
>>
>> Signed-off-by: Mahesh Kumar <mahesh1.kumar at intel.com>
>> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>> ---
>>  drivers/gpu/drm/i915/display/intel_ddi.c | 48 +++++++++++++++++++-----
>>  drivers/gpu/drm/i915/i915_reg.h          |  5 +++
>>  2 files changed, 43 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
>> index e72cf0bb48a7..5125c31af6aa 100644
>> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
>> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
>> @@ -1771,7 +1771,10 @@ void intel_ddi_enable_transcoder_func(const struct intel_crtc_state *crtc_state)
>>
>>  	/* Enable TRANS_DDI_FUNC_CTL for the pipe to work in HDMI mode */
>>  	temp = TRANS_DDI_FUNC_ENABLE;
>> -	temp |= TRANS_DDI_SELECT_PORT(port);
>> +	if (INTEL_GEN(dev_priv) >= 12)
>> +		temp |= TGL_TRANS_DDI_SELECT_PORT(port);
>> +	else
>> +		temp |= TRANS_DDI_SELECT_PORT(port);
>>
>>  	switch (crtc_state->pipe_bpp) {
>>  	case 18:
>> @@ -1851,8 +1854,14 @@ void intel_ddi_disable_transcoder_func(const struct intel_crtc_state *crtc_state
>>  	i915_reg_t reg = TRANS_DDI_FUNC_CTL(cpu_transcoder);
>>  	u32 val = I915_READ(reg);
>>
>> -	val &= ~(TRANS_DDI_FUNC_ENABLE | TRANS_DDI_PORT_MASK | TRANS_DDI_DP_VC_PAYLOAD_ALLOC);
>> -	val |= TRANS_DDI_PORT_NONE;
>> +	if (INTEL_GEN(dev_priv) >= 12) {
>> +		val &= ~(TRANS_DDI_FUNC_ENABLE | TGL_TRANS_DDI_PORT_MASK |
>> +			 TRANS_DDI_DP_VC_PAYLOAD_ALLOC);
>> +	} else {
>> +		val &= ~(TRANS_DDI_FUNC_ENABLE | TRANS_DDI_PORT_MASK |
>> +			 TRANS_DDI_DP_VC_PAYLOAD_ALLOC);
>> +		val |= TRANS_DDI_PORT_NONE;
>
>A bit incosistent leaving the NONE thing here. Maybe just nuke that
>entirely?

I can, but the diff is actually

-TRANS_DDI_PORT_MASK
+TGL_TRANS_DDI_PORT_MASK

Lucas De Marchi

>
>Patch is
>Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
>> +	}
>>  	I915_WRITE(reg, val);
>>
>>  	if (dev_priv->quirks & QUIRK_INCREASE_DDI_DISABLED_TIME &&
>> @@ -2004,10 +2013,19 @@ static void intel_ddi_get_encoder_pipes(struct intel_encoder *encoder,
>>  	mst_pipe_mask = 0;
>>  	for_each_pipe(dev_priv, p) {
>>  		enum transcoder cpu_transcoder = (enum transcoder)p;
>> +		unsigned int port_mask, ddi_select;
>> +
>> +		if (INTEL_GEN(dev_priv) >= 12) {
>> +			port_mask = TGL_TRANS_DDI_PORT_MASK;
>> +			ddi_select = TGL_TRANS_DDI_SELECT_PORT(port);
>> +		} else {
>> +			port_mask = TRANS_DDI_PORT_MASK;
>> +			ddi_select = TRANS_DDI_SELECT_PORT(port);
>> +		}
>>
>>  		tmp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
>>
>> -		if ((tmp & TRANS_DDI_PORT_MASK) != TRANS_DDI_SELECT_PORT(port))
>> +		if ((tmp & port_mask) != ddi_select)
>>  			continue;
>>
>>  		if ((tmp & TRANS_DDI_MODE_SELECT_MASK) ==
>> @@ -2123,9 +2141,14 @@ void intel_ddi_enable_pipe_clock(const struct intel_crtc_state *crtc_state)
>>  	enum port port = encoder->port;
>>  	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>>
>> -	if (cpu_transcoder != TRANSCODER_EDP)
>> -		I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
>> -			   TRANS_CLK_SEL_PORT(port));
>> +	if (cpu_transcoder != TRANSCODER_EDP) {
>> +		if (INTEL_GEN(dev_priv) >= 12)
>> +			I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
>> +				   TGL_TRANS_CLK_SEL_PORT(port));
>> +		else
>> +			I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
>> +				   TRANS_CLK_SEL_PORT(port));
>> +	}
>>  }
>>
>>  void intel_ddi_disable_pipe_clock(const struct intel_crtc_state *crtc_state)
>> @@ -2133,9 +2156,14 @@ void intel_ddi_disable_pipe_clock(const struct intel_crtc_state *crtc_state)
>>  	struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev);
>>  	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
>>
>> -	if (cpu_transcoder != TRANSCODER_EDP)
>> -		I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
>> -			   TRANS_CLK_SEL_DISABLED);
>> +	if (cpu_transcoder != TRANSCODER_EDP) {
>> +		if (INTEL_GEN(dev_priv) >= 12)
>> +			I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
>> +				   TGL_TRANS_CLK_SEL_DISABLED);
>> +		else
>> +			I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
>> +				   TRANS_CLK_SEL_DISABLED);
>> +	}
>>  }
>>
>>  static void _skl_ddi_set_iboost(struct drm_i915_private *dev_priv,
>> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
>> index c554df69f289..ccfb95e2aa03 100644
>> --- a/drivers/gpu/drm/i915/i915_reg.h
>> +++ b/drivers/gpu/drm/i915/i915_reg.h
>> @@ -9379,8 +9379,10 @@ enum skl_power_gate {
>>  #define  TRANS_DDI_FUNC_ENABLE		(1 << 31)
>>  /* Those bits are ignored by pipe EDP since it can only connect to DDI A */
>>  #define  TRANS_DDI_PORT_MASK		(7 << 28)
>> +#define  TGL_TRANS_DDI_PORT_MASK	(0xf << 27)
>>  #define  TRANS_DDI_PORT_SHIFT		28
>>  #define  TRANS_DDI_SELECT_PORT(x)	((x) << 28)
>> +#define  TGL_TRANS_DDI_SELECT_PORT(x)	(((x) + 1) << 27)
>>  #define  TRANS_DDI_PORT_NONE		(0 << 28)
>>  #define  TRANS_DDI_MODE_SELECT_MASK	(7 << 24)
>>  #define  TRANS_DDI_MODE_SELECT_HDMI	(0 << 24)
>> @@ -9591,6 +9593,9 @@ enum skl_power_gate {
>>  /* For each transcoder, we need to select the corresponding port clock */
>>  #define  TRANS_CLK_SEL_DISABLED		(0x0 << 29)
>>  #define  TRANS_CLK_SEL_PORT(x)		(((x) + 1) << 29)
>> +#define  TGL_TRANS_CLK_SEL_DISABLED	(0x0 << 28)
>> +#define  TGL_TRANS_CLK_SEL_PORT(x)	(((x) + 1) << 28)
>> +
>>
>>  #define CDCLK_FREQ			_MMIO(0x46200)
>>
>> --
>> 2.21.0
>
>-- 
>Ville Syrjälä
>Intel


More information about the Intel-gfx mailing list