[Intel-gfx] [PATCH v2] drm/i915/skl: Only use the 800mV+2bB HDMI translation entry

Jindal, Sonika sonika.jindal at intel.com
Mon Mar 2 21:01:02 PST 2015



On 3/2/2015 9:49 PM, Damien Lespiau wrote:
> This translation entry was updated after electrical validation by the hw
> team. The other entries are removed from existence as they aren't
> validated and because the sole use of a certain type of level shifter
> for SKL products is anticipated.
>
> v2: Remove all the other entries and force the use of the 800mv+2dB
>      config (Sonika)
>
> Suggested-by: Sonika Jindal <sonika.jindal at intel.com>
> Cc: Sonika Jindal <sonika.jindal at intel.com>
> Signed-off-by: Damien Lespiau <damien.lespiau at intel.com>
> ---
>   drivers/gpu/drm/i915/intel_ddi.c | 30 ++++++++++++++----------------
>   1 file changed, 14 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 985d531..834820b 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -156,16 +156,7 @@ static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
>
>   static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>   					/* Idx	NT mV   T mV    db  */
> -	{ 0x00000018, 0x000000a0 },	/* 0:	400	400	0   */
> -	{ 0x00004014, 0x00000098 },	/* 1:	400	600	3.5 */
> -	{ 0x00006012, 0x00000088 },	/* 2:	400	800	6   */
> -	{ 0x00000018, 0x0000003c },	/* 3:	450	450	0   */
> -	{ 0x00000018, 0x00000098 },	/* 4:	600	600	0   */
> -	{ 0x00003015, 0x00000088 },	/* 5:	600	800	2.5 */
> -	{ 0x00005013, 0x00000080 },	/* 6:	600	1000	4.5 */
> -	{ 0x00000018, 0x00000088 },	/* 7:	800	800	0   */
> -	{ 0x00000096, 0x00000080 },	/* 8:	800	1000	2   */
> -	{ 0x00000018, 0x00000080 },	/* 9:	1200	1200	0   */
> +	{ 0x00004014, 0x00000087 },	/* 0:	800	1000	2   */
>   };
>
>   enum port intel_ddi_get_encoder_port(struct intel_encoder *intel_encoder)
> @@ -202,7 +193,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port)
>   {
>   	struct drm_i915_private *dev_priv = dev->dev_private;
>   	u32 reg;
> -	int i, n_hdmi_entries, n_dp_entries, n_edp_entries, hdmi_800mV_0dB,
> +	int i, n_hdmi_entries, n_dp_entries, n_edp_entries, hdmi_default_entry,
>   	    size;
>   	int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
>   	const struct ddi_buf_trans *ddi_translations_fdi;
> @@ -223,9 +214,16 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port)
>   			n_edp_entries = ARRAY_SIZE(skl_ddi_translations_dp);
>   		}
>
> +		/*
> +		 * On SKL, the recommendation from the hw team is to always use
> +		 * a certain type of level shifter (and thus the corresponding
> +		 * 800mV+2dB entry). Given that's the only validated entry, we
> +		 * override what is in the VBT, at least until further notice.
> +		 */
> +		hdmi_level = 0;
>   		ddi_translations_hdmi = skl_ddi_translations_hdmi;
>   		n_hdmi_entries = ARRAY_SIZE(skl_ddi_translations_hdmi);
> -		hdmi_800mV_0dB = 7;
> +		hdmi_default_entry = 0;
>   	} else if (IS_BROADWELL(dev)) {
>   		ddi_translations_fdi = bdw_ddi_translations_fdi;
>   		ddi_translations_dp = bdw_ddi_translations_dp;
> @@ -234,7 +232,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port)
>   		n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
>   		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
>   		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
> -		hdmi_800mV_0dB = 7;
> +		hdmi_default_entry = 7;
>   	} else if (IS_HASWELL(dev)) {
>   		ddi_translations_fdi = hsw_ddi_translations_fdi;
>   		ddi_translations_dp = hsw_ddi_translations_dp;
> @@ -242,7 +240,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port)
>   		ddi_translations_hdmi = hsw_ddi_translations_hdmi;
>   		n_dp_entries = n_edp_entries = ARRAY_SIZE(hsw_ddi_translations_dp);
>   		n_hdmi_entries = ARRAY_SIZE(hsw_ddi_translations_hdmi);
> -		hdmi_800mV_0dB = 6;
> +		hdmi_default_entry = 6;
>   	} else {
>   		WARN(1, "ddi translation table missing\n");
>   		ddi_translations_edp = bdw_ddi_translations_dp;
> @@ -252,7 +250,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port)
>   		n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
>   		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
>   		n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
> -		hdmi_800mV_0dB = 7;
> +		hdmi_default_entry = 7;
>   	}
>
>   	switch (port) {
> @@ -295,7 +293,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port)
>   	/* Choose a good default if VBT is badly populated */
>   	if (hdmi_level == HDMI_LEVEL_SHIFT_UNKNOWN ||
>   	    hdmi_level >= n_hdmi_entries)
> -		hdmi_level = hdmi_800mV_0dB;
> +		hdmi_level = hdmi_default_entry;
>
>   	/* Entry 9 is for HDMI: */
>   	I915_WRITE(reg, ddi_translations_hdmi[hdmi_level].trans1);
>
Reviewed-by: Sonika Jindal <sonika.jindal at intel.com>



More information about the Intel-gfx mailing list