intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup
@ 2016-09-30 18:05 Rodrigo Vivi
  2016-09-30 18:05 ` [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort Rodrigo Vivi
                   ` (3 more replies)
  0 siblings, 4 replies; 14+ messages in thread
From: Rodrigo Vivi @ 2016-09-30 18:05 UTC (permalink / raw)
  To: intel-gfx; +Cc: Rodrigo Vivi

No functional change.
Only moving this fixup block out of ddi_translation definitions
so we can split skl and kbl cleanly.

Cc: Manasi Navare <manasi.d.navare@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 35f0b7c..018964b 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -436,15 +436,6 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
 				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
 		ddi_translations_edp =
 				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
-
-		/* If we're boosting the current, set bit 31 of trans1 */
-		if (dev_priv->vbt.ddi_port_info[port].dp_boost_level)
-			iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
-
-		if (WARN_ON(encoder->type == INTEL_OUTPUT_EDP &&
-			    port != PORT_A && port != PORT_E &&
-			    n_edp_entries > 9))
-			n_edp_entries = 9;
 	} else if (IS_BROADWELL(dev_priv)) {
 		ddi_translations_fdi = bdw_ddi_translations_fdi;
 		ddi_translations_dp = bdw_ddi_translations_dp;
@@ -464,6 +455,18 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
 		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
 	}
 
+	/* Skylake/Kabylake iboost and edp_entries fixup */
+	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
+		/* If we're boosting the current, set bit 31 of trans1 */
+		if (dev_priv->vbt.ddi_port_info[port].dp_boost_level)
+			iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
+
+		if (WARN_ON(encoder->type == INTEL_OUTPUT_EDP &&
+			    port != PORT_A && port != PORT_E &&
+			    n_edp_entries > 9))
+			n_edp_entries = 9;
+	}
+
 	switch (encoder->type) {
 	case INTEL_OUTPUT_EDP:
 		ddi_translations = ddi_translations_edp;
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-09-30 18:05 [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Rodrigo Vivi
@ 2016-09-30 18:05 ` Rodrigo Vivi
  2016-10-03 10:50   ` Jani Nikula
  2016-09-30 19:19 ` ✗ Fi.CI.BAT: warning for series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Patchwork
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 14+ messages in thread
From: Rodrigo Vivi @ 2016-09-30 18:05 UTC (permalink / raw)
  To: intel-gfx; +Cc: Arthur Runyan, Rodrigo Vivi

According to spec: "KBL re-uses SKL values, except where
specific KBL values are listed."

And recently spec has changed adding different table for Display Port only.
But for all SKUs (H,S,U,Y) we have slightly different values.

Cc: Manasi Navare <manasi.d.navare@intel.com>
Cc: Arthur Runyan <arthur.j.runyan@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
 1 file changed, 78 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 018964b..1573360 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -167,8 +167,47 @@ static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
 	{ 0x80005012, 0x000000C0, 0x3 },
 };
 
+/* Kabylake H and S */
+static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
+	{ 0x00002016, 0x000000A0, 0x0 },
+	{ 0x00005012, 0x0000009B, 0x0 },
+	{ 0x00007011, 0x00000088, 0x0 },
+	{ 0x80009010, 0x000000C0, 0x1 },
+	{ 0x00002016, 0x0000009B, 0x0 },
+	{ 0x00005012, 0x00000088, 0x0 },
+	{ 0x80007011, 0x000000C0, 0x1 },
+	{ 0x00002016, 0x0000009F, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x1 },
+};
+
+/* Kabylake U */
+static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
+	{ 0x0000201B, 0x000000A1, 0x0 },
+	{ 0x00005012, 0x00000088, 0x0 },
+	{ 0x80007011, 0x000000CD, 0x3 },
+	{ 0x80009010, 0x000000C0, 0x3 },
+	{ 0x0000201B, 0x0000009D, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+	{ 0x80007011, 0x000000C0, 0x3 },
+	{ 0x00002016, 0x0000004F, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+};
+
+/* Kabylake Y */
+static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
+	{ 0x00001017, 0x000000A1, 0x0 },
+	{ 0x00005012, 0x00000088, 0x0 },
+	{ 0x80007011, 0x000000CD, 0x3 },
+	{ 0x8000800F, 0x000000C0, 0x3 },
+	{ 0x00001017, 0x0000009D, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+	{ 0x80007011, 0x000000C0, 0x3 },
+	{ 0x00001017, 0x0000004C, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+};
+
 /*
- * Skylake H and S
+ * Skylake/Kabylake H and S
  * eDP 1.4 low vswing translation parameters
  */
 static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
@@ -185,7 +224,7 @@ static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
 };
 
 /*
- * Skylake U
+ * Skylake/Kabylake U
  * eDP 1.4 low vswing translation parameters
  */
 static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
@@ -202,7 +241,7 @@ static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
 };
 
 /*
- * Skylake Y
+ * Skylake/Kabylake Y
  * eDP 1.4 low vswing translation parameters
  */
 static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
@@ -218,7 +257,7 @@ static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
 	{ 0x00000018, 0x0000008A, 0x0 },
 };
 
-/* Skylake U, H and S */
+/* Skylake/Kabylake U, H and S */
 static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
 	{ 0x00000018, 0x000000AC, 0x0 },
 	{ 0x00005012, 0x0000009D, 0x0 },
@@ -233,7 +272,7 @@ static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
 	{ 0x80000018, 0x000000C0, 0x1 },
 };
 
-/* Skylake Y */
+/* Skylake/Kabylake Y */
 static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
 	{ 0x00000018, 0x000000A1, 0x0 },
 	{ 0x00005012, 0x000000DF, 0x0 },
@@ -334,10 +373,10 @@ bdw_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
 static const struct ddi_buf_trans *
 skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
 {
-	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
+	if (IS_SKL_ULX(dev_priv)) {
 		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
 		return skl_y_ddi_translations_dp;
-	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
+	} else if (IS_SKL_ULT(dev_priv)) {
 		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
 		return skl_u_ddi_translations_dp;
 	} else {
@@ -347,6 +386,21 @@ skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
 }
 
 static const struct ddi_buf_trans *
+kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
+{
+	if (IS_KBL_ULX(dev_priv)) {
+		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
+		return kbl_y_ddi_translations_dp;
+	} else if (IS_KBL_ULT(dev_priv)) {
+		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
+		return kbl_u_ddi_translations_dp;
+	} else {
+		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
+		return kbl_ddi_translations_dp;
+	}
+}
+
+static const struct ddi_buf_trans *
 skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
 {
 	if (dev_priv->vbt.edp.low_vswing) {
@@ -362,7 +416,10 @@ skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
 		}
 	}
 
-	return skl_get_buf_trans_dp(dev_priv, n_entries);
+	if (dev_priv->vbt.edp.low_vswing)
+		return kbl_get_buf_trans_dp(dev_priv, n_entries);
+	else
+		return skl_get_buf_trans_dp(dev_priv, n_entries);
 }
 
 static const struct ddi_buf_trans *
@@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
 	if (IS_BROXTON(dev_priv))
 		return;
 
-	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
+	if (IS_KABYLAKE(dev_priv)) {
+		ddi_translations_fdi = NULL;
+		ddi_translations_dp =
+				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
+		ddi_translations_edp =
+				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
+	} else if (IS_SKYLAKE(dev_priv)) {
 		ddi_translations_fdi = NULL;
 		ddi_translations_dp =
 				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
@@ -1437,7 +1500,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
 		if (dp_iboost) {
 			iboost = dp_iboost;
 		} else {
-			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
+			if (IS_KABYLAKE(dev_priv))
+				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
+									&n_entries);
+			else
+				ddi_translations = skl_get_buf_trans_dp(dev_priv,
+									&n_entries);
 			iboost = ddi_translations[level].i_boost;
 		}
 	} else if (type == INTEL_OUTPUT_EDP) {
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* ✗ Fi.CI.BAT: warning for series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup
  2016-09-30 18:05 [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Rodrigo Vivi
  2016-09-30 18:05 ` [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort Rodrigo Vivi
@ 2016-09-30 19:19 ` Patchwork
  2016-10-06 18:20 ` ✗ Fi.CI.BAT: warning for series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup (rev2) Patchwork
  2016-10-20 20:28 ` [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Manasi Navare
  3 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2016-09-30 19:19 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup
URL   : https://patchwork.freedesktop.org/series/13171/
State : warning

== Summary ==

Series 13171v1 Series without cover letter
https://patchwork.freedesktop.org/api/1.0/series/13171/revisions/1/mbox/

Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-a:
                pass       -> DMESG-WARN (fi-byt-j1900)
        Subgroup suspend-read-crc-pipe-b:
                pass       -> DMESG-WARN (fi-ilk-650)
                pass       -> DMESG-WARN (fi-byt-j1900)

fi-bdw-5557u     total:244  pass:229  dwarn:0   dfail:0   fail:0   skip:15 
fi-bsw-n3050     total:244  pass:202  dwarn:0   dfail:0   fail:0   skip:42 
fi-bxt-t5700     total:244  pass:214  dwarn:0   dfail:0   fail:0   skip:30 
fi-byt-j1900     total:244  pass:210  dwarn:2   dfail:0   fail:1   skip:31 
fi-byt-n2820     total:244  pass:208  dwarn:0   dfail:0   fail:1   skip:35 
fi-hsw-4770      total:244  pass:222  dwarn:0   dfail:0   fail:0   skip:22 
fi-hsw-4770r     total:244  pass:222  dwarn:0   dfail:0   fail:0   skip:22 
fi-ilk-650       total:244  pass:181  dwarn:1   dfail:0   fail:2   skip:60 
fi-ivb-3520m     total:244  pass:219  dwarn:0   dfail:0   fail:0   skip:25 
fi-ivb-3770      total:244  pass:207  dwarn:0   dfail:0   fail:0   skip:37 
fi-skl-6260u     total:244  pass:230  dwarn:0   dfail:0   fail:0   skip:14 
fi-skl-6700hq    total:244  pass:221  dwarn:1   dfail:0   fail:0   skip:22 
fi-skl-6700k     total:244  pass:219  dwarn:1   dfail:0   fail:0   skip:24 
fi-skl-6770hq    total:244  pass:228  dwarn:1   dfail:0   fail:1   skip:14 
fi-snb-2520m     total:244  pass:208  dwarn:0   dfail:0   fail:0   skip:36 
fi-snb-2600      total:244  pass:207  dwarn:0   dfail:0   fail:0   skip:37 

Results at /archive/results/CI_IGT_test/Patchwork_2609/

d0534bd0217c83c083ba146b9c987e19b219e0e4 drm-intel-nightly: 2016y-09m-30d-10h-31m-00s UTC integration manifest
a35dc98 drm/i915: KBL - Recommended buffer translation programming for DisplayPort
f7ed533 drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-09-30 18:05 ` [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort Rodrigo Vivi
@ 2016-10-03 10:50   ` Jani Nikula
  2016-10-04  0:30     ` Vivi, Rodrigo
  0 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2016-10-03 10:50 UTC (permalink / raw)
  To: intel-gfx; +Cc: Arthur Runyan, Rodrigo Vivi

On Fri, 30 Sep 2016, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> According to spec: "KBL re-uses SKL values, except where
> specific KBL values are listed."
>
> And recently spec has changed adding different table for Display Port only.
> But for all SKUs (H,S,U,Y) we have slightly different values.
>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Cc: Arthur Runyan <arthur.j.runyan@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
>  1 file changed, 78 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 018964b..1573360 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -167,8 +167,47 @@ static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
>  	{ 0x80005012, 0x000000C0, 0x3 },
>  };
>  
> +/* Kabylake H and S */
> +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
> +	{ 0x00002016, 0x000000A0, 0x0 },
> +	{ 0x00005012, 0x0000009B, 0x0 },
> +	{ 0x00007011, 0x00000088, 0x0 },
> +	{ 0x80009010, 0x000000C0, 0x1 },
> +	{ 0x00002016, 0x0000009B, 0x0 },
> +	{ 0x00005012, 0x00000088, 0x0 },
> +	{ 0x80007011, 0x000000C0, 0x1 },
> +	{ 0x00002016, 0x0000009F, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x1 },
> +};
> +
> +/* Kabylake U */
> +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
> +	{ 0x0000201B, 0x000000A1, 0x0 },
> +	{ 0x00005012, 0x00000088, 0x0 },
> +	{ 0x80007011, 0x000000CD, 0x3 },
> +	{ 0x80009010, 0x000000C0, 0x3 },
> +	{ 0x0000201B, 0x0000009D, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +	{ 0x80007011, 0x000000C0, 0x3 },
> +	{ 0x00002016, 0x0000004F, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +};
> +
> +/* Kabylake Y */
> +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
> +	{ 0x00001017, 0x000000A1, 0x0 },
> +	{ 0x00005012, 0x00000088, 0x0 },
> +	{ 0x80007011, 0x000000CD, 0x3 },
> +	{ 0x8000800F, 0x000000C0, 0x3 },
> +	{ 0x00001017, 0x0000009D, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +	{ 0x80007011, 0x000000C0, 0x3 },
> +	{ 0x00001017, 0x0000004C, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +};
> +
>  /*
> - * Skylake H and S
> + * Skylake/Kabylake H and S
>   * eDP 1.4 low vswing translation parameters
>   */
>  static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
> @@ -185,7 +224,7 @@ static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
>  };
>  
>  /*
> - * Skylake U
> + * Skylake/Kabylake U
>   * eDP 1.4 low vswing translation parameters
>   */
>  static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
> @@ -202,7 +241,7 @@ static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
>  };
>  
>  /*
> - * Skylake Y
> + * Skylake/Kabylake Y
>   * eDP 1.4 low vswing translation parameters
>   */
>  static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
> @@ -218,7 +257,7 @@ static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
>  	{ 0x00000018, 0x0000008A, 0x0 },
>  };
>  
> -/* Skylake U, H and S */
> +/* Skylake/Kabylake U, H and S */
>  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>  	{ 0x00000018, 0x000000AC, 0x0 },
>  	{ 0x00005012, 0x0000009D, 0x0 },
> @@ -233,7 +272,7 @@ static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>  	{ 0x80000018, 0x000000C0, 0x1 },
>  };
>  
> -/* Skylake Y */
> +/* Skylake/Kabylake Y */
>  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
>  	{ 0x00000018, 0x000000A1, 0x0 },
>  	{ 0x00005012, 0x000000DF, 0x0 },
> @@ -334,10 +373,10 @@ bdw_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>  static const struct ddi_buf_trans *
>  skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>  {
> -	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
> +	if (IS_SKL_ULX(dev_priv)) {
>  		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
>  		return skl_y_ddi_translations_dp;
> -	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
> +	} else if (IS_SKL_ULT(dev_priv)) {
>  		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
>  		return skl_u_ddi_translations_dp;
>  	} else {
> @@ -347,6 +386,21 @@ skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>  }
>  
>  static const struct ddi_buf_trans *
> +kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> +{
> +	if (IS_KBL_ULX(dev_priv)) {
> +		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
> +		return kbl_y_ddi_translations_dp;
> +	} else if (IS_KBL_ULT(dev_priv)) {
> +		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
> +		return kbl_u_ddi_translations_dp;
> +	} else {
> +		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
> +		return kbl_ddi_translations_dp;
> +	}
> +}
> +
> +static const struct ddi_buf_trans *
>  skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>  {
>  	if (dev_priv->vbt.edp.low_vswing) {
> @@ -362,7 +416,10 @@ skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>  		}
>  	}
>  
> -	return skl_get_buf_trans_dp(dev_priv, n_entries);
> +	if (dev_priv->vbt.edp.low_vswing)
> +		return kbl_get_buf_trans_dp(dev_priv, n_entries);
> +	else
> +		return skl_get_buf_trans_dp(dev_priv, n_entries);

This seems really confusing.

BR,
Jani.


>  }
>  
>  static const struct ddi_buf_trans *
> @@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
>  	if (IS_BROXTON(dev_priv))
>  		return;
>  
> -	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
> +	if (IS_KABYLAKE(dev_priv)) {
> +		ddi_translations_fdi = NULL;
> +		ddi_translations_dp =
> +				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> +		ddi_translations_edp =
> +				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
> +	} else if (IS_SKYLAKE(dev_priv)) {
>  		ddi_translations_fdi = NULL;
>  		ddi_translations_dp =
>  				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> @@ -1437,7 +1500,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
>  		if (dp_iboost) {
>  			iboost = dp_iboost;
>  		} else {
> -			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
> +			if (IS_KABYLAKE(dev_priv))
> +				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
> +									&n_entries);
> +			else
> +				ddi_translations = skl_get_buf_trans_dp(dev_priv,
> +									&n_entries);
>  			iboost = ddi_translations[level].i_boost;
>  		}
>  	} else if (type == INTEL_OUTPUT_EDP) {

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-10-03 10:50   ` Jani Nikula
@ 2016-10-04  0:30     ` Vivi, Rodrigo
  2016-10-04  7:05       ` Jani Nikula
  0 siblings, 1 reply; 14+ messages in thread
From: Vivi, Rodrigo @ 2016-10-04  0:30 UTC (permalink / raw)
  To: jani.nikula@linux.intel.com
  Cc: intel-gfx@lists.freedesktop.org, Runyan, Arthur J

On Mon, 2016-10-03 at 13:50 +0300, Jani Nikula wrote:
> On Fri, 30 Sep 2016, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> > According to spec: "KBL re-uses SKL values, except where
> > specific KBL values are listed."
> >
> > And recently spec has changed adding different table for Display Port only.
> > But for all SKUs (H,S,U,Y) we have slightly different values.
> >
> > Cc: Manasi Navare <manasi.d.navare@intel.com>
> > Cc: Arthur Runyan <arthur.j.runyan@intel.com>
> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
> >  1 file changed, 78 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> > index 018964b..1573360 100644
> > --- a/drivers/gpu/drm/i915/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> > @@ -167,8 +167,47 @@ static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
> >  	{ 0x80005012, 0x000000C0, 0x3 },
> >  };
> >  
> > +/* Kabylake H and S */
> > +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
> > +	{ 0x00002016, 0x000000A0, 0x0 },
> > +	{ 0x00005012, 0x0000009B, 0x0 },
> > +	{ 0x00007011, 0x00000088, 0x0 },
> > +	{ 0x80009010, 0x000000C0, 0x1 },
> > +	{ 0x00002016, 0x0000009B, 0x0 },
> > +	{ 0x00005012, 0x00000088, 0x0 },
> > +	{ 0x80007011, 0x000000C0, 0x1 },
> > +	{ 0x00002016, 0x0000009F, 0x0 },
> > +	{ 0x80005012, 0x000000C0, 0x1 },
> > +};
> > +
> > +/* Kabylake U */
> > +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
> > +	{ 0x0000201B, 0x000000A1, 0x0 },
> > +	{ 0x00005012, 0x00000088, 0x0 },
> > +	{ 0x80007011, 0x000000CD, 0x3 },
> > +	{ 0x80009010, 0x000000C0, 0x3 },
> > +	{ 0x0000201B, 0x0000009D, 0x0 },
> > +	{ 0x80005012, 0x000000C0, 0x3 },
> > +	{ 0x80007011, 0x000000C0, 0x3 },
> > +	{ 0x00002016, 0x0000004F, 0x0 },
> > +	{ 0x80005012, 0x000000C0, 0x3 },
> > +};
> > +
> > +/* Kabylake Y */
> > +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
> > +	{ 0x00001017, 0x000000A1, 0x0 },
> > +	{ 0x00005012, 0x00000088, 0x0 },
> > +	{ 0x80007011, 0x000000CD, 0x3 },
> > +	{ 0x8000800F, 0x000000C0, 0x3 },
> > +	{ 0x00001017, 0x0000009D, 0x0 },
> > +	{ 0x80005012, 0x000000C0, 0x3 },
> > +	{ 0x80007011, 0x000000C0, 0x3 },
> > +	{ 0x00001017, 0x0000004C, 0x0 },
> > +	{ 0x80005012, 0x000000C0, 0x3 },
> > +};
> > +
> >  /*
> > - * Skylake H and S
> > + * Skylake/Kabylake H and S
> >   * eDP 1.4 low vswing translation parameters
> >   */
> >  static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
> > @@ -185,7 +224,7 @@ static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
> >  };
> >  
> >  /*
> > - * Skylake U
> > + * Skylake/Kabylake U
> >   * eDP 1.4 low vswing translation parameters
> >   */
> >  static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
> > @@ -202,7 +241,7 @@ static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
> >  };
> >  
> >  /*
> > - * Skylake Y
> > + * Skylake/Kabylake Y
> >   * eDP 1.4 low vswing translation parameters
> >   */
> >  static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
> > @@ -218,7 +257,7 @@ static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
> >  	{ 0x00000018, 0x0000008A, 0x0 },
> >  };
> >  
> > -/* Skylake U, H and S */
> > +/* Skylake/Kabylake U, H and S */
> >  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
> >  	{ 0x00000018, 0x000000AC, 0x0 },
> >  	{ 0x00005012, 0x0000009D, 0x0 },
> > @@ -233,7 +272,7 @@ static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
> >  	{ 0x80000018, 0x000000C0, 0x1 },
> >  };
> >  
> > -/* Skylake Y */
> > +/* Skylake/Kabylake Y */
> >  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
> >  	{ 0x00000018, 0x000000A1, 0x0 },
> >  	{ 0x00005012, 0x000000DF, 0x0 },
> > @@ -334,10 +373,10 @@ bdw_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
> >  static const struct ddi_buf_trans *
> >  skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> >  {
> > -	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
> > +	if (IS_SKL_ULX(dev_priv)) {
> >  		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
> >  		return skl_y_ddi_translations_dp;
> > -	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
> > +	} else if (IS_SKL_ULT(dev_priv)) {
> >  		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
> >  		return skl_u_ddi_translations_dp;
> >  	} else {
> > @@ -347,6 +386,21 @@ skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> >  }
> >  
> >  static const struct ddi_buf_trans *
> > +kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> > +{
> > +	if (IS_KBL_ULX(dev_priv)) {
> > +		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
> > +		return kbl_y_ddi_translations_dp;
> > +	} else if (IS_KBL_ULT(dev_priv)) {
> > +		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
> > +		return kbl_u_ddi_translations_dp;
> > +	} else {
> > +		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
> > +		return kbl_ddi_translations_dp;
> > +	}
> > +}
> > +
> > +static const struct ddi_buf_trans *
> >  skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
> >  {
> >  	if (dev_priv->vbt.edp.low_vswing) {
> > @@ -362,7 +416,10 @@ skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
> >  		}
> >  	}
> >  
> > -	return skl_get_buf_trans_dp(dev_priv, n_entries);
> > +	if (dev_priv->vbt.edp.low_vswing)
> > +		return kbl_get_buf_trans_dp(dev_priv, n_entries);
> > +	else
> > +		return skl_get_buf_trans_dp(dev_priv, n_entries);
> 
> This seems really confusing.

I agree, but I would like to avoid duplicating the identical tables...
those by spec are explicitly same table...

another option without duplicating the tables is duplicating the
function like below... what I believe it is still confusing with all
those skl and kbl inside this function...

what do you prefer?

static const struct ddi_buf_trans
*                                                                                            
kbl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int
*n_entries)                                                       
{                                                                                                                              
        if (dev_priv->vbt.edp.low_vswing)
{                                                                                    
                if (IS_KBL_ULX(dev_priv))
{                                                            
                        *n_entries =
ARRAY_SIZE(skl_y_ddi_translations_edp);                                                   
                        return
skl_y_ddi_translations_edp;                                                                     
                } else if (IS_KBL_ULT(dev_priv))
{                                                     
                        *n_entries =
ARRAY_SIZE(skl_u_ddi_translations_edp);                                                   
                        return
skl_u_ddi_translations_edp;                                                                     
                } else
{                                                                                                       
                        *n_entries =
ARRAY_SIZE(skl_ddi_translations_edp);                                                     
                        return
skl_ddi_translations_edp;                                                                       
                }                                                                                                              
        }                                                                                                                      
        return kbl_get_buf_trans_dp(dev_priv,
n_entries);                                                                      
}                                                              




> 
> BR,
> Jani.
> 
> 
> >  }
> >  
> >  static const struct ddi_buf_trans *
> > @@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
> >  	if (IS_BROXTON(dev_priv))
> >  		return;
> >  
> > -	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
> > +	if (IS_KABYLAKE(dev_priv)) {
> > +		ddi_translations_fdi = NULL;
> > +		ddi_translations_dp =
> > +				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> > +		ddi_translations_edp =
> > +				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
> > +	} else if (IS_SKYLAKE(dev_priv)) {
> >  		ddi_translations_fdi = NULL;
> >  		ddi_translations_dp =
> >  				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> > @@ -1437,7 +1500,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
> >  		if (dp_iboost) {
> >  			iboost = dp_iboost;
> >  		} else {
> > -			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
> > +			if (IS_KABYLAKE(dev_priv))
> > +				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
> > +									&n_entries);
> > +			else
> > +				ddi_translations = skl_get_buf_trans_dp(dev_priv,
> > +									&n_entries);
> >  			iboost = ddi_translations[level].i_boost;
> >  		}
> >  	} else if (type == INTEL_OUTPUT_EDP) {
> 

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-10-04  0:30     ` Vivi, Rodrigo
@ 2016-10-04  7:05       ` Jani Nikula
  2016-10-06  0:00         ` Vivi, Rodrigo
  0 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2016-10-04  7:05 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: intel-gfx@lists.freedesktop.org, Runyan, Arthur J

On Tue, 04 Oct 2016, "Vivi, Rodrigo" <rodrigo.vivi@intel.com> wrote:
> On Mon, 2016-10-03 at 13:50 +0300, Jani Nikula wrote:
>> On Fri, 30 Sep 2016, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
>> > According to spec: "KBL re-uses SKL values, except where
>> > specific KBL values are listed."
>> >
>> > And recently spec has changed adding different table for Display Port only.
>> > But for all SKUs (H,S,U,Y) we have slightly different values.
>> >
>> > Cc: Manasi Navare <manasi.d.navare@intel.com>
>> > Cc: Arthur Runyan <arthur.j.runyan@intel.com>
>> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> > ---
>> >  drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
>> >  1 file changed, 78 insertions(+), 10 deletions(-)
>> >
>> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
>> > index 018964b..1573360 100644
>> > --- a/drivers/gpu/drm/i915/intel_ddi.c
>> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
>> > @@ -167,8 +167,47 @@ static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
>> >  	{ 0x80005012, 0x000000C0, 0x3 },
>> >  };
>> >  
>> > +/* Kabylake H and S */
>> > +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
>> > +	{ 0x00002016, 0x000000A0, 0x0 },
>> > +	{ 0x00005012, 0x0000009B, 0x0 },
>> > +	{ 0x00007011, 0x00000088, 0x0 },
>> > +	{ 0x80009010, 0x000000C0, 0x1 },
>> > +	{ 0x00002016, 0x0000009B, 0x0 },
>> > +	{ 0x00005012, 0x00000088, 0x0 },
>> > +	{ 0x80007011, 0x000000C0, 0x1 },
>> > +	{ 0x00002016, 0x0000009F, 0x0 },
>> > +	{ 0x80005012, 0x000000C0, 0x1 },
>> > +};
>> > +
>> > +/* Kabylake U */
>> > +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
>> > +	{ 0x0000201B, 0x000000A1, 0x0 },
>> > +	{ 0x00005012, 0x00000088, 0x0 },
>> > +	{ 0x80007011, 0x000000CD, 0x3 },
>> > +	{ 0x80009010, 0x000000C0, 0x3 },
>> > +	{ 0x0000201B, 0x0000009D, 0x0 },
>> > +	{ 0x80005012, 0x000000C0, 0x3 },
>> > +	{ 0x80007011, 0x000000C0, 0x3 },
>> > +	{ 0x00002016, 0x0000004F, 0x0 },
>> > +	{ 0x80005012, 0x000000C0, 0x3 },
>> > +};
>> > +
>> > +/* Kabylake Y */
>> > +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
>> > +	{ 0x00001017, 0x000000A1, 0x0 },
>> > +	{ 0x00005012, 0x00000088, 0x0 },
>> > +	{ 0x80007011, 0x000000CD, 0x3 },
>> > +	{ 0x8000800F, 0x000000C0, 0x3 },
>> > +	{ 0x00001017, 0x0000009D, 0x0 },
>> > +	{ 0x80005012, 0x000000C0, 0x3 },
>> > +	{ 0x80007011, 0x000000C0, 0x3 },
>> > +	{ 0x00001017, 0x0000004C, 0x0 },
>> > +	{ 0x80005012, 0x000000C0, 0x3 },
>> > +};
>> > +
>> >  /*
>> > - * Skylake H and S
>> > + * Skylake/Kabylake H and S
>> >   * eDP 1.4 low vswing translation parameters
>> >   */
>> >  static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
>> > @@ -185,7 +224,7 @@ static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
>> >  };
>> >  
>> >  /*
>> > - * Skylake U
>> > + * Skylake/Kabylake U
>> >   * eDP 1.4 low vswing translation parameters
>> >   */
>> >  static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
>> > @@ -202,7 +241,7 @@ static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
>> >  };
>> >  
>> >  /*
>> > - * Skylake Y
>> > + * Skylake/Kabylake Y
>> >   * eDP 1.4 low vswing translation parameters
>> >   */
>> >  static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
>> > @@ -218,7 +257,7 @@ static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
>> >  	{ 0x00000018, 0x0000008A, 0x0 },
>> >  };
>> >  
>> > -/* Skylake U, H and S */
>> > +/* Skylake/Kabylake U, H and S */
>> >  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>> >  	{ 0x00000018, 0x000000AC, 0x0 },
>> >  	{ 0x00005012, 0x0000009D, 0x0 },
>> > @@ -233,7 +272,7 @@ static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>> >  	{ 0x80000018, 0x000000C0, 0x1 },
>> >  };
>> >  
>> > -/* Skylake Y */
>> > +/* Skylake/Kabylake Y */
>> >  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
>> >  	{ 0x00000018, 0x000000A1, 0x0 },
>> >  	{ 0x00005012, 0x000000DF, 0x0 },
>> > @@ -334,10 +373,10 @@ bdw_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>> >  static const struct ddi_buf_trans *
>> >  skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>> >  {
>> > -	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
>> > +	if (IS_SKL_ULX(dev_priv)) {
>> >  		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
>> >  		return skl_y_ddi_translations_dp;
>> > -	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
>> > +	} else if (IS_SKL_ULT(dev_priv)) {
>> >  		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
>> >  		return skl_u_ddi_translations_dp;
>> >  	} else {
>> > @@ -347,6 +386,21 @@ skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>> >  }
>> >  
>> >  static const struct ddi_buf_trans *
>> > +kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>> > +{
>> > +	if (IS_KBL_ULX(dev_priv)) {
>> > +		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
>> > +		return kbl_y_ddi_translations_dp;
>> > +	} else if (IS_KBL_ULT(dev_priv)) {
>> > +		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
>> > +		return kbl_u_ddi_translations_dp;
>> > +	} else {
>> > +		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
>> > +		return kbl_ddi_translations_dp;
>> > +	}
>> > +}
>> > +
>> > +static const struct ddi_buf_trans *
>> >  skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>> >  {
>> >  	if (dev_priv->vbt.edp.low_vswing) {
>> > @@ -362,7 +416,10 @@ skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>> >  		}
>> >  	}
>> >  
>> > -	return skl_get_buf_trans_dp(dev_priv, n_entries);
>> > +	if (dev_priv->vbt.edp.low_vswing)
>> > +		return kbl_get_buf_trans_dp(dev_priv, n_entries);
>> > +	else
>> > +		return skl_get_buf_trans_dp(dev_priv, n_entries);
>> 
>> This seems really confusing.
>
> I agree, but I would like to avoid duplicating the identical tables...
> those by spec are explicitly same table...
>
> another option without duplicating the tables is duplicating the
> function like below... what I believe it is still confusing with all
> those skl and kbl inside this function...
>
> what do you prefer?

The thing that bugs me here is that you may return klb_something on
skl. We reuse plenty of older gen stuff for newer gens, but this being
the other way round is the confusing part. So just call it
skl_something, and reuse in kbl?

BR,
Jani.


>
> static const struct ddi_buf_trans
> *                                                                                            
> kbl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int
> *n_entries)                                                       
> {                                                                                                                              
>         if (dev_priv->vbt.edp.low_vswing)
> {                                                                                    
>                 if (IS_KBL_ULX(dev_priv))
> {                                                            
>                         *n_entries =
> ARRAY_SIZE(skl_y_ddi_translations_edp);                                                   
>                         return
> skl_y_ddi_translations_edp;                                                                     
>                 } else if (IS_KBL_ULT(dev_priv))
> {                                                     
>                         *n_entries =
> ARRAY_SIZE(skl_u_ddi_translations_edp);                                                   
>                         return
> skl_u_ddi_translations_edp;                                                                     
>                 } else
> {                                                                                                       
>                         *n_entries =
> ARRAY_SIZE(skl_ddi_translations_edp);                                                     
>                         return
> skl_ddi_translations_edp;                                                                       
>                 }                                                                                                              
>         }                                                                                                                      
>         return kbl_get_buf_trans_dp(dev_priv,
> n_entries);                                                                      
> }                                                              
>
>
>
>
>> 
>> BR,
>> Jani.
>> 
>> 
>> >  }
>> >  
>> >  static const struct ddi_buf_trans *
>> > @@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
>> >  	if (IS_BROXTON(dev_priv))
>> >  		return;
>> >  
>> > -	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
>> > +	if (IS_KABYLAKE(dev_priv)) {
>> > +		ddi_translations_fdi = NULL;
>> > +		ddi_translations_dp =
>> > +				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
>> > +		ddi_translations_edp =
>> > +				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
>> > +	} else if (IS_SKYLAKE(dev_priv)) {
>> >  		ddi_translations_fdi = NULL;
>> >  		ddi_translations_dp =
>> >  				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
>> > @@ -1437,7 +1500,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
>> >  		if (dp_iboost) {
>> >  			iboost = dp_iboost;
>> >  		} else {
>> > -			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
>> > +			if (IS_KABYLAKE(dev_priv))
>> > +				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
>> > +									&n_entries);
>> > +			else
>> > +				ddi_translations = skl_get_buf_trans_dp(dev_priv,
>> > +									&n_entries);
>> >  			iboost = ddi_translations[level].i_boost;
>> >  		}
>> >  	} else if (type == INTEL_OUTPUT_EDP) {
>> 
>

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-10-04  7:05       ` Jani Nikula
@ 2016-10-06  0:00         ` Vivi, Rodrigo
  2016-10-06  7:14           ` Jani Nikula
  0 siblings, 1 reply; 14+ messages in thread
From: Vivi, Rodrigo @ 2016-10-06  0:00 UTC (permalink / raw)
  To: jani.nikula@linux.intel.com
  Cc: intel-gfx@lists.freedesktop.org, Runyan, Arthur J


On Tue, 2016-10-04 at 10:05 +0300, Jani Nikula wrote:
> On Tue, 04 Oct 2016, "Vivi, Rodrigo" <rodrigo.vivi@intel.com> wrote:
> > On Mon, 2016-10-03 at 13:50 +0300, Jani Nikula wrote:
> >> On Fri, 30 Sep 2016, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
> >> > According to spec: "KBL re-uses SKL values, except where
> >> > specific KBL values are listed."
> >> >
> >> > And recently spec has changed adding different table for Display Port only.
> >> > But for all SKUs (H,S,U,Y) we have slightly different values.
> >> >
> >> > Cc: Manasi Navare <manasi.d.navare@intel.com>
> >> > Cc: Arthur Runyan <arthur.j.runyan@intel.com>
> >> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> >> > ---
> >> >  drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
> >> >  1 file changed, 78 insertions(+), 10 deletions(-)
> >> >
> >> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> >> > index 018964b..1573360 100644
> >> > --- a/drivers/gpu/drm/i915/intel_ddi.c
> >> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
> >> > @@ -167,8 +167,47 @@ static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
> >> >  	{ 0x80005012, 0x000000C0, 0x3 },
> >> >  };
> >> >  
> >> > +/* Kabylake H and S */
> >> > +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
> >> > +	{ 0x00002016, 0x000000A0, 0x0 },
> >> > +	{ 0x00005012, 0x0000009B, 0x0 },
> >> > +	{ 0x00007011, 0x00000088, 0x0 },
> >> > +	{ 0x80009010, 0x000000C0, 0x1 },
> >> > +	{ 0x00002016, 0x0000009B, 0x0 },
> >> > +	{ 0x00005012, 0x00000088, 0x0 },
> >> > +	{ 0x80007011, 0x000000C0, 0x1 },
> >> > +	{ 0x00002016, 0x0000009F, 0x0 },
> >> > +	{ 0x80005012, 0x000000C0, 0x1 },
> >> > +};
> >> > +
> >> > +/* Kabylake U */
> >> > +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
> >> > +	{ 0x0000201B, 0x000000A1, 0x0 },
> >> > +	{ 0x00005012, 0x00000088, 0x0 },
> >> > +	{ 0x80007011, 0x000000CD, 0x3 },
> >> > +	{ 0x80009010, 0x000000C0, 0x3 },
> >> > +	{ 0x0000201B, 0x0000009D, 0x0 },
> >> > +	{ 0x80005012, 0x000000C0, 0x3 },
> >> > +	{ 0x80007011, 0x000000C0, 0x3 },
> >> > +	{ 0x00002016, 0x0000004F, 0x0 },
> >> > +	{ 0x80005012, 0x000000C0, 0x3 },
> >> > +};
> >> > +
> >> > +/* Kabylake Y */
> >> > +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
> >> > +	{ 0x00001017, 0x000000A1, 0x0 },
> >> > +	{ 0x00005012, 0x00000088, 0x0 },
> >> > +	{ 0x80007011, 0x000000CD, 0x3 },
> >> > +	{ 0x8000800F, 0x000000C0, 0x3 },
> >> > +	{ 0x00001017, 0x0000009D, 0x0 },
> >> > +	{ 0x80005012, 0x000000C0, 0x3 },
> >> > +	{ 0x80007011, 0x000000C0, 0x3 },
> >> > +	{ 0x00001017, 0x0000004C, 0x0 },
> >> > +	{ 0x80005012, 0x000000C0, 0x3 },
> >> > +};
> >> > +
> >> >  /*
> >> > - * Skylake H and S
> >> > + * Skylake/Kabylake H and S
> >> >   * eDP 1.4 low vswing translation parameters
> >> >   */
> >> >  static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
> >> > @@ -185,7 +224,7 @@ static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
> >> >  };
> >> >  
> >> >  /*
> >> > - * Skylake U
> >> > + * Skylake/Kabylake U
> >> >   * eDP 1.4 low vswing translation parameters
> >> >   */
> >> >  static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
> >> > @@ -202,7 +241,7 @@ static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
> >> >  };
> >> >  
> >> >  /*
> >> > - * Skylake Y
> >> > + * Skylake/Kabylake Y
> >> >   * eDP 1.4 low vswing translation parameters
> >> >   */
> >> >  static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
> >> > @@ -218,7 +257,7 @@ static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
> >> >  	{ 0x00000018, 0x0000008A, 0x0 },
> >> >  };
> >> >  
> >> > -/* Skylake U, H and S */
> >> > +/* Skylake/Kabylake U, H and S */
> >> >  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
> >> >  	{ 0x00000018, 0x000000AC, 0x0 },
> >> >  	{ 0x00005012, 0x0000009D, 0x0 },
> >> > @@ -233,7 +272,7 @@ static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
> >> >  	{ 0x80000018, 0x000000C0, 0x1 },
> >> >  };
> >> >  
> >> > -/* Skylake Y */
> >> > +/* Skylake/Kabylake Y */
> >> >  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
> >> >  	{ 0x00000018, 0x000000A1, 0x0 },
> >> >  	{ 0x00005012, 0x000000DF, 0x0 },
> >> > @@ -334,10 +373,10 @@ bdw_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
> >> >  static const struct ddi_buf_trans *
> >> >  skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> >> >  {
> >> > -	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
> >> > +	if (IS_SKL_ULX(dev_priv)) {
> >> >  		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
> >> >  		return skl_y_ddi_translations_dp;
> >> > -	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
> >> > +	} else if (IS_SKL_ULT(dev_priv)) {
> >> >  		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
> >> >  		return skl_u_ddi_translations_dp;
> >> >  	} else {
> >> > @@ -347,6 +386,21 @@ skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> >> >  }
> >> >  
> >> >  static const struct ddi_buf_trans *
> >> > +kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> >> > +{
> >> > +	if (IS_KBL_ULX(dev_priv)) {
> >> > +		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
> >> > +		return kbl_y_ddi_translations_dp;
> >> > +	} else if (IS_KBL_ULT(dev_priv)) {
> >> > +		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
> >> > +		return kbl_u_ddi_translations_dp;
> >> > +	} else {
> >> > +		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
> >> > +		return kbl_ddi_translations_dp;
> >> > +	}
> >> > +}
> >> > +
> >> > +static const struct ddi_buf_trans *
> >> >  skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
> >> >  {
> >> >  	if (dev_priv->vbt.edp.low_vswing) {
> >> > @@ -362,7 +416,10 @@ skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
> >> >  		}
> >> >  	}
> >> >  
> >> > -	return skl_get_buf_trans_dp(dev_priv, n_entries);
> >> > +	if (dev_priv->vbt.edp.low_vswing)
> >> > +		return kbl_get_buf_trans_dp(dev_priv, n_entries);
> >> > +	else
> >> > +		return skl_get_buf_trans_dp(dev_priv, n_entries);
> >> 
> >> This seems really confusing.
> >
> > I agree, but I would like to avoid duplicating the identical tables...
> > those by spec are explicitly same table...
> >
> > another option without duplicating the tables is duplicating the
> > function like below... what I believe it is still confusing with all
> > those skl and kbl inside this function...
> >
> > what do you prefer?
> 
> The thing that bugs me here is that you may return klb_something on
> skl. We reuse plenty of older gen stuff for newer gens, but this being
> the other way round is the confusing part.


No, it is not the other way around.

we have many cases of:
void old_function() {
IS_NEWER()
	do_something();
/*old colde*/
}

Other way around for me would be
a kbl function with IS_SKYLAKE inside...

But I understand what bugs you. I'm also not convinced this option here
is the best one, but this is the minimal duplication of code.

The second option is to have to different functions almost identical one
for skl and one for kbl and the third one duplicating even the tables.

We just need to decide what level of duplication would be ok.

>  So just call it
> skl_something, and reuse in kbl?
> 
> BR,
> Jani.
> 
> 
> >
> > static const struct ddi_buf_trans
> > *                                                                                            
> > kbl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int
> > *n_entries)                                                       
> > {                                                                                                                              
> >         if (dev_priv->vbt.edp.low_vswing)
> > {                                                                                    
> >                 if (IS_KBL_ULX(dev_priv))
> > {                                                            
> >                         *n_entries =
> > ARRAY_SIZE(skl_y_ddi_translations_edp);                                                   
> >                         return
> > skl_y_ddi_translations_edp;                                                                     
> >                 } else if (IS_KBL_ULT(dev_priv))
> > {                                                     
> >                         *n_entries =
> > ARRAY_SIZE(skl_u_ddi_translations_edp);                                                   
> >                         return
> > skl_u_ddi_translations_edp;                                                                     
> >                 } else
> > {                                                                                                       
> >                         *n_entries =
> > ARRAY_SIZE(skl_ddi_translations_edp);                                                     
> >                         return
> > skl_ddi_translations_edp;                                                                       
> >                 }                                                                                                              
> >         }                                                                                                                      
> >         return kbl_get_buf_trans_dp(dev_priv,
> > n_entries);                                                                      
> > }                                                              
> >
> >
> >
> >
> >> 
> >> BR,
> >> Jani.
> >> 
> >> 
> >> >  }
> >> >  
> >> >  static const struct ddi_buf_trans *
> >> > @@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
> >> >  	if (IS_BROXTON(dev_priv))
> >> >  		return;
> >> >  
> >> > -	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
> >> > +	if (IS_KABYLAKE(dev_priv)) {
> >> > +		ddi_translations_fdi = NULL;
> >> > +		ddi_translations_dp =
> >> > +				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> >> > +		ddi_translations_edp =
> >> > +				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
> >> > +	} else if (IS_SKYLAKE(dev_priv)) {
> >> >  		ddi_translations_fdi = NULL;
> >> >  		ddi_translations_dp =
> >> >  				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> >> > @@ -1437,7 +1500,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
> >> >  		if (dp_iboost) {
> >> >  			iboost = dp_iboost;
> >> >  		} else {
> >> > -			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
> >> > +			if (IS_KABYLAKE(dev_priv))
> >> > +				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
> >> > +									&n_entries);
> >> > +			else
> >> > +				ddi_translations = skl_get_buf_trans_dp(dev_priv,
> >> > +									&n_entries);
> >> >  			iboost = ddi_translations[level].i_boost;
> >> >  		}
> >> >  	} else if (type == INTEL_OUTPUT_EDP) {
> >> 
> >
> 

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-10-06  0:00         ` Vivi, Rodrigo
@ 2016-10-06  7:14           ` Jani Nikula
  2016-10-06 17:54             ` [PATCH] " Rodrigo Vivi
  0 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2016-10-06  7:14 UTC (permalink / raw)
  To: Vivi, Rodrigo; +Cc: intel-gfx@lists.freedesktop.org, Runyan, Arthur J

On Thu, 06 Oct 2016, "Vivi, Rodrigo" <rodrigo.vivi@intel.com> wrote:
> On Tue, 2016-10-04 at 10:05 +0300, Jani Nikula wrote:
>> On Tue, 04 Oct 2016, "Vivi, Rodrigo" <rodrigo.vivi@intel.com> wrote:
>> > On Mon, 2016-10-03 at 13:50 +0300, Jani Nikula wrote:
>> >> On Fri, 30 Sep 2016, Rodrigo Vivi <rodrigo.vivi@intel.com> wrote:
>> >> > According to spec: "KBL re-uses SKL values, except where
>> >> > specific KBL values are listed."
>> >> >
>> >> > And recently spec has changed adding different table for Display Port only.
>> >> > But for all SKUs (H,S,U,Y) we have slightly different values.
>> >> >
>> >> > Cc: Manasi Navare <manasi.d.navare@intel.com>
>> >> > Cc: Arthur Runyan <arthur.j.runyan@intel.com>
>> >> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> >> > ---
>> >> >  drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
>> >> >  1 file changed, 78 insertions(+), 10 deletions(-)
>> >> >
>> >> > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
>> >> > index 018964b..1573360 100644
>> >> > --- a/drivers/gpu/drm/i915/intel_ddi.c
>> >> > +++ b/drivers/gpu/drm/i915/intel_ddi.c
>> >> > @@ -167,8 +167,47 @@ static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
>> >> >  	{ 0x80005012, 0x000000C0, 0x3 },
>> >> >  };
>> >> >  
>> >> > +/* Kabylake H and S */
>> >> > +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
>> >> > +	{ 0x00002016, 0x000000A0, 0x0 },
>> >> > +	{ 0x00005012, 0x0000009B, 0x0 },
>> >> > +	{ 0x00007011, 0x00000088, 0x0 },
>> >> > +	{ 0x80009010, 0x000000C0, 0x1 },
>> >> > +	{ 0x00002016, 0x0000009B, 0x0 },
>> >> > +	{ 0x00005012, 0x00000088, 0x0 },
>> >> > +	{ 0x80007011, 0x000000C0, 0x1 },
>> >> > +	{ 0x00002016, 0x0000009F, 0x0 },
>> >> > +	{ 0x80005012, 0x000000C0, 0x1 },
>> >> > +};
>> >> > +
>> >> > +/* Kabylake U */
>> >> > +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
>> >> > +	{ 0x0000201B, 0x000000A1, 0x0 },
>> >> > +	{ 0x00005012, 0x00000088, 0x0 },
>> >> > +	{ 0x80007011, 0x000000CD, 0x3 },
>> >> > +	{ 0x80009010, 0x000000C0, 0x3 },
>> >> > +	{ 0x0000201B, 0x0000009D, 0x0 },
>> >> > +	{ 0x80005012, 0x000000C0, 0x3 },
>> >> > +	{ 0x80007011, 0x000000C0, 0x3 },
>> >> > +	{ 0x00002016, 0x0000004F, 0x0 },
>> >> > +	{ 0x80005012, 0x000000C0, 0x3 },
>> >> > +};
>> >> > +
>> >> > +/* Kabylake Y */
>> >> > +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
>> >> > +	{ 0x00001017, 0x000000A1, 0x0 },
>> >> > +	{ 0x00005012, 0x00000088, 0x0 },
>> >> > +	{ 0x80007011, 0x000000CD, 0x3 },
>> >> > +	{ 0x8000800F, 0x000000C0, 0x3 },
>> >> > +	{ 0x00001017, 0x0000009D, 0x0 },
>> >> > +	{ 0x80005012, 0x000000C0, 0x3 },
>> >> > +	{ 0x80007011, 0x000000C0, 0x3 },
>> >> > +	{ 0x00001017, 0x0000004C, 0x0 },
>> >> > +	{ 0x80005012, 0x000000C0, 0x3 },
>> >> > +};
>> >> > +
>> >> >  /*
>> >> > - * Skylake H and S
>> >> > + * Skylake/Kabylake H and S
>> >> >   * eDP 1.4 low vswing translation parameters
>> >> >   */
>> >> >  static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
>> >> > @@ -185,7 +224,7 @@ static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
>> >> >  };
>> >> >  
>> >> >  /*
>> >> > - * Skylake U
>> >> > + * Skylake/Kabylake U
>> >> >   * eDP 1.4 low vswing translation parameters
>> >> >   */
>> >> >  static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
>> >> > @@ -202,7 +241,7 @@ static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
>> >> >  };
>> >> >  
>> >> >  /*
>> >> > - * Skylake Y
>> >> > + * Skylake/Kabylake Y
>> >> >   * eDP 1.4 low vswing translation parameters
>> >> >   */
>> >> >  static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
>> >> > @@ -218,7 +257,7 @@ static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
>> >> >  	{ 0x00000018, 0x0000008A, 0x0 },
>> >> >  };
>> >> >  
>> >> > -/* Skylake U, H and S */
>> >> > +/* Skylake/Kabylake U, H and S */
>> >> >  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>> >> >  	{ 0x00000018, 0x000000AC, 0x0 },
>> >> >  	{ 0x00005012, 0x0000009D, 0x0 },
>> >> > @@ -233,7 +272,7 @@ static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>> >> >  	{ 0x80000018, 0x000000C0, 0x1 },
>> >> >  };
>> >> >  
>> >> > -/* Skylake Y */
>> >> > +/* Skylake/Kabylake Y */
>> >> >  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
>> >> >  	{ 0x00000018, 0x000000A1, 0x0 },
>> >> >  	{ 0x00005012, 0x000000DF, 0x0 },
>> >> > @@ -334,10 +373,10 @@ bdw_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>> >> >  static const struct ddi_buf_trans *
>> >> >  skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>> >> >  {
>> >> > -	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
>> >> > +	if (IS_SKL_ULX(dev_priv)) {
>> >> >  		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
>> >> >  		return skl_y_ddi_translations_dp;
>> >> > -	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
>> >> > +	} else if (IS_SKL_ULT(dev_priv)) {
>> >> >  		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
>> >> >  		return skl_u_ddi_translations_dp;
>> >> >  	} else {
>> >> > @@ -347,6 +386,21 @@ skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>> >> >  }
>> >> >  
>> >> >  static const struct ddi_buf_trans *
>> >> > +kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>> >> > +{
>> >> > +	if (IS_KBL_ULX(dev_priv)) {
>> >> > +		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
>> >> > +		return kbl_y_ddi_translations_dp;
>> >> > +	} else if (IS_KBL_ULT(dev_priv)) {
>> >> > +		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
>> >> > +		return kbl_u_ddi_translations_dp;
>> >> > +	} else {
>> >> > +		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
>> >> > +		return kbl_ddi_translations_dp;
>> >> > +	}
>> >> > +}
>> >> > +
>> >> > +static const struct ddi_buf_trans *
>> >> >  skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>> >> >  {
>> >> >  	if (dev_priv->vbt.edp.low_vswing) {
>> >> > @@ -362,7 +416,10 @@ skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>> >> >  		}
>> >> >  	}
>> >> >  
>> >> > -	return skl_get_buf_trans_dp(dev_priv, n_entries);
>> >> > +	if (dev_priv->vbt.edp.low_vswing)
>> >> > +		return kbl_get_buf_trans_dp(dev_priv, n_entries);
>> >> > +	else
>> >> > +		return skl_get_buf_trans_dp(dev_priv, n_entries);
>> >> 
>> >> This seems really confusing.
>> >
>> > I agree, but I would like to avoid duplicating the identical tables...
>> > those by spec are explicitly same table...
>> >
>> > another option without duplicating the tables is duplicating the
>> > function like below... what I believe it is still confusing with all
>> > those skl and kbl inside this function...
>> >
>> > what do you prefer?
>> 
>> The thing that bugs me here is that you may return klb_something on
>> skl. We reuse plenty of older gen stuff for newer gens, but this being
>> the other way round is the confusing part.
>
>
> No, it is not the other way around.
>
> we have many cases of:
> void old_function() {
> IS_NEWER()
> 	do_something();
> /*old colde*/
> }

It's okay if you explicitly do it like this, but in your patch the
condition is edp low_vswing, not platform.

BR,
Jani.


>
> Other way around for me would be
> a kbl function with IS_SKYLAKE inside...
>
> But I understand what bugs you. I'm also not convinced this option here
> is the best one, but this is the minimal duplication of code.
>
> The second option is to have to different functions almost identical one
> for skl and one for kbl and the third one duplicating even the tables.
>
> We just need to decide what level of duplication would be ok.
>
>>  So just call it
>> skl_something, and reuse in kbl?
>> 
>> BR,
>> Jani.
>> 
>> 
>> >
>> > static const struct ddi_buf_trans
>> > *                                                                                            
>> > kbl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int
>> > *n_entries)                                                       
>> > {                                                                                                                              
>> >         if (dev_priv->vbt.edp.low_vswing)
>> > {                                                                                    
>> >                 if (IS_KBL_ULX(dev_priv))
>> > {                                                            
>> >                         *n_entries =
>> > ARRAY_SIZE(skl_y_ddi_translations_edp);                                                   
>> >                         return
>> > skl_y_ddi_translations_edp;                                                                     
>> >                 } else if (IS_KBL_ULT(dev_priv))
>> > {                                                     
>> >                         *n_entries =
>> > ARRAY_SIZE(skl_u_ddi_translations_edp);                                                   
>> >                         return
>> > skl_u_ddi_translations_edp;                                                                     
>> >                 } else
>> > {                                                                                                       
>> >                         *n_entries =
>> > ARRAY_SIZE(skl_ddi_translations_edp);                                                     
>> >                         return
>> > skl_ddi_translations_edp;                                                                       
>> >                 }                                                                                                              
>> >         }                                                                                                                      
>> >         return kbl_get_buf_trans_dp(dev_priv,
>> > n_entries);                                                                      
>> > }                                                              
>> >
>> >
>> >
>> >
>> >> 
>> >> BR,
>> >> Jani.
>> >> 
>> >> 
>> >> >  }
>> >> >  
>> >> >  static const struct ddi_buf_trans *
>> >> > @@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
>> >> >  	if (IS_BROXTON(dev_priv))
>> >> >  		return;
>> >> >  
>> >> > -	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
>> >> > +	if (IS_KABYLAKE(dev_priv)) {
>> >> > +		ddi_translations_fdi = NULL;
>> >> > +		ddi_translations_dp =
>> >> > +				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
>> >> > +		ddi_translations_edp =
>> >> > +				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
>> >> > +	} else if (IS_SKYLAKE(dev_priv)) {
>> >> >  		ddi_translations_fdi = NULL;
>> >> >  		ddi_translations_dp =
>> >> >  				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
>> >> > @@ -1437,7 +1500,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
>> >> >  		if (dp_iboost) {
>> >> >  			iboost = dp_iboost;
>> >> >  		} else {
>> >> > -			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
>> >> > +			if (IS_KABYLAKE(dev_priv))
>> >> > +				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
>> >> > +									&n_entries);
>> >> > +			else
>> >> > +				ddi_translations = skl_get_buf_trans_dp(dev_priv,
>> >> > +									&n_entries);
>> >> >  			iboost = ddi_translations[level].i_boost;
>> >> >  		}
>> >> >  	} else if (type == INTEL_OUTPUT_EDP) {
>> >> 
>> >
>> 
>

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-10-06  7:14           ` Jani Nikula
@ 2016-10-06 17:54             ` Rodrigo Vivi
  2016-10-18  0:28               ` Manasi Navare
  0 siblings, 1 reply; 14+ messages in thread
From: Rodrigo Vivi @ 2016-10-06 17:54 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Rodrigo Vivi

According to spec: "KBL re-uses SKL values, except where
specific KBL values are listed."

And recently spec has changed adding different table for Display Port only.
But for all SKUs (H,S,U,Y) we have slightly different values.

v2: Fix wrong condition spotted by Jani.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Manasi Navare <manasi.d.navare@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
 1 file changed, 78 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 35f0b7c..195aa70 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -167,8 +167,47 @@ static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
 	{ 0x80005012, 0x000000C0, 0x3 },
 };
 
+/* Kabylake H and S */
+static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
+	{ 0x00002016, 0x000000A0, 0x0 },
+	{ 0x00005012, 0x0000009B, 0x0 },
+	{ 0x00007011, 0x00000088, 0x0 },
+	{ 0x80009010, 0x000000C0, 0x1 },
+	{ 0x00002016, 0x0000009B, 0x0 },
+	{ 0x00005012, 0x00000088, 0x0 },
+	{ 0x80007011, 0x000000C0, 0x1 },
+	{ 0x00002016, 0x0000009F, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x1 },
+};
+
+/* Kabylake U */
+static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
+	{ 0x0000201B, 0x000000A1, 0x0 },
+	{ 0x00005012, 0x00000088, 0x0 },
+	{ 0x80007011, 0x000000CD, 0x3 },
+	{ 0x80009010, 0x000000C0, 0x3 },
+	{ 0x0000201B, 0x0000009D, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+	{ 0x80007011, 0x000000C0, 0x3 },
+	{ 0x00002016, 0x0000004F, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+};
+
+/* Kabylake Y */
+static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
+	{ 0x00001017, 0x000000A1, 0x0 },
+	{ 0x00005012, 0x00000088, 0x0 },
+	{ 0x80007011, 0x000000CD, 0x3 },
+	{ 0x8000800F, 0x000000C0, 0x3 },
+	{ 0x00001017, 0x0000009D, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+	{ 0x80007011, 0x000000C0, 0x3 },
+	{ 0x00001017, 0x0000004C, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+};
+
 /*
- * Skylake H and S
+ * Skylake/Kabylake H and S
  * eDP 1.4 low vswing translation parameters
  */
 static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
@@ -185,7 +224,7 @@ static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
 };
 
 /*
- * Skylake U
+ * Skylake/Kabylake U
  * eDP 1.4 low vswing translation parameters
  */
 static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
@@ -202,7 +241,7 @@ static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
 };
 
 /*
- * Skylake Y
+ * Skylake/Kabylake Y
  * eDP 1.4 low vswing translation parameters
  */
 static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
@@ -218,7 +257,7 @@ static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
 	{ 0x00000018, 0x0000008A, 0x0 },
 };
 
-/* Skylake U, H and S */
+/* Skylake/Kabylake U, H and S */
 static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
 	{ 0x00000018, 0x000000AC, 0x0 },
 	{ 0x00005012, 0x0000009D, 0x0 },
@@ -233,7 +272,7 @@ static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
 	{ 0x80000018, 0x000000C0, 0x1 },
 };
 
-/* Skylake Y */
+/* Skylake/Kabylake Y */
 static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
 	{ 0x00000018, 0x000000A1, 0x0 },
 	{ 0x00005012, 0x000000DF, 0x0 },
@@ -334,10 +373,10 @@ bdw_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
 static const struct ddi_buf_trans *
 skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
 {
-	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
+	if (IS_SKL_ULX(dev_priv)) {
 		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
 		return skl_y_ddi_translations_dp;
-	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
+	} else if (IS_SKL_ULT(dev_priv)) {
 		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
 		return skl_u_ddi_translations_dp;
 	} else {
@@ -347,6 +386,21 @@ skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
 }
 
 static const struct ddi_buf_trans *
+kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
+{
+	if (IS_KBL_ULX(dev_priv)) {
+		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
+		return kbl_y_ddi_translations_dp;
+	} else if (IS_KBL_ULT(dev_priv)) {
+		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
+		return kbl_u_ddi_translations_dp;
+	} else {
+		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
+		return kbl_ddi_translations_dp;
+	}
+}
+
+static const struct ddi_buf_trans *
 skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
 {
 	if (dev_priv->vbt.edp.low_vswing) {
@@ -362,7 +416,10 @@ skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
 		}
 	}
 
-	return skl_get_buf_trans_dp(dev_priv, n_entries);
+	if (IS_KABYLAKE(dev_priv))
+		return kbl_get_buf_trans_dp(dev_priv, n_entries);
+	else
+		return skl_get_buf_trans_dp(dev_priv, n_entries);
 }
 
 static const struct ddi_buf_trans *
@@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
 	if (IS_BROXTON(dev_priv))
 		return;
 
-	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
+	if (IS_KABYLAKE(dev_priv)) {
+		ddi_translations_fdi = NULL;
+		ddi_translations_dp =
+				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
+		ddi_translations_edp =
+				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
+	} else if (IS_SKYLAKE(dev_priv)) {
 		ddi_translations_fdi = NULL;
 		ddi_translations_dp =
 				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
@@ -1434,7 +1497,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
 		if (dp_iboost) {
 			iboost = dp_iboost;
 		} else {
-			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
+			if (IS_KABYLAKE(dev_priv))
+				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
+									&n_entries);
+			else
+				ddi_translations = skl_get_buf_trans_dp(dev_priv,
+									&n_entries);
 			iboost = ddi_translations[level].i_boost;
 		}
 	} else if (type == INTEL_OUTPUT_EDP) {
-- 
2.5.5

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* ✗ Fi.CI.BAT: warning for series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup (rev2)
  2016-09-30 18:05 [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Rodrigo Vivi
  2016-09-30 18:05 ` [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort Rodrigo Vivi
  2016-09-30 19:19 ` ✗ Fi.CI.BAT: warning for series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Patchwork
@ 2016-10-06 18:20 ` Patchwork
  2016-10-20 20:28 ` [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Manasi Navare
  3 siblings, 0 replies; 14+ messages in thread
From: Patchwork @ 2016-10-06 18:20 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup (rev2)
URL   : https://patchwork.freedesktop.org/series/13171/
State : warning

== Summary ==

Series 13171v2 Series without cover letter
https://patchwork.freedesktop.org/api/1.0/series/13171/revisions/2/mbox/

Test kms_pipe_crc_basic:
        Subgroup suspend-read-crc-pipe-a:
                dmesg-warn -> PASS       (fi-byt-j1900)
Test kms_psr_sink_crc:
        Subgroup psr_basic:
                pass       -> DMESG-WARN (fi-skl-6700hq)

fi-bdw-5557u     total:248  pass:231  dwarn:0   dfail:0   fail:0   skip:17 
fi-bsw-n3050     total:248  pass:204  dwarn:0   dfail:0   fail:0   skip:44 
fi-bxt-t5700     total:248  pass:217  dwarn:0   dfail:0   fail:0   skip:31 
fi-byt-j1900     total:248  pass:214  dwarn:1   dfail:0   fail:1   skip:32 
fi-byt-n2820     total:248  pass:210  dwarn:0   dfail:0   fail:1   skip:37 
fi-hsw-4770      total:248  pass:225  dwarn:0   dfail:0   fail:0   skip:23 
fi-hsw-4770r     total:248  pass:224  dwarn:0   dfail:0   fail:0   skip:24 
fi-ilk-650       total:248  pass:184  dwarn:0   dfail:0   fail:2   skip:62 
fi-ivb-3520m     total:248  pass:221  dwarn:0   dfail:0   fail:0   skip:27 
fi-ivb-3770      total:248  pass:207  dwarn:0   dfail:0   fail:0   skip:41 
fi-kbl-7200u     total:248  pass:222  dwarn:0   dfail:0   fail:0   skip:26 
fi-skl-6260u     total:248  pass:232  dwarn:0   dfail:0   fail:0   skip:16 
fi-skl-6700hq    total:248  pass:224  dwarn:1   dfail:0   fail:0   skip:23 
fi-skl-6700k     total:248  pass:222  dwarn:1   dfail:0   fail:0   skip:25 
fi-skl-6770hq    total:248  pass:231  dwarn:1   dfail:0   fail:1   skip:15 
fi-snb-2520m     total:248  pass:211  dwarn:0   dfail:0   fail:0   skip:37 
fi-snb-2600      total:248  pass:209  dwarn:0   dfail:0   fail:0   skip:39 

Results at /archive/results/CI_IGT_test/Patchwork_2642/

2dff18acaa95a26b882a5f9910d7ded514f18415 drm-intel-nightly: 2016y-10m-05d-13h-58m-08s UTC integration manifest
e5be0d6 drm/i915: KBL - Recommended buffer translation programming for DisplayPort
0d4fd49 drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-10-06 17:54             ` [PATCH] " Rodrigo Vivi
@ 2016-10-18  0:28               ` Manasi Navare
  2016-10-18 15:57                 ` Rodrigo Vivi
  0 siblings, 1 reply; 14+ messages in thread
From: Manasi Navare @ 2016-10-18  0:28 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: Jani Nikula, intel-gfx

On Thu, Oct 06, 2016 at 10:54:01AM -0700, Rodrigo Vivi wrote:
> According to spec: "KBL re-uses SKL values, except where
> specific KBL values are listed."
> 
> And recently spec has changed adding different table for Display Port only.
> But for all SKUs (H,S,U,Y) we have slightly different values.
> 
> v2: Fix wrong condition spotted by Jani.
> 
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
>  1 file changed, 78 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 35f0b7c..195aa70 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -167,8 +167,47 @@ static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
>  	{ 0x80005012, 0x000000C0, 0x3 },
>  };
>  
> +/* Kabylake H and S */
> +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
> +	{ 0x00002016, 0x000000A0, 0x0 },
> +	{ 0x00005012, 0x0000009B, 0x0 },
> +	{ 0x00007011, 0x00000088, 0x0 },
> +	{ 0x80009010, 0x000000C0, 0x1 },
> +	{ 0x00002016, 0x0000009B, 0x0 },
> +	{ 0x00005012, 0x00000088, 0x0 },
> +	{ 0x80007011, 0x000000C0, 0x1 },
> +	{ 0x00002016, 0x0000009F, 0x0 },

This entry according to the Bspec should be 0x00002016, 0x00000097, 0x0

Manasi


> +	{ 0x80005012, 0x000000C0, 0x1 },
> +};
> +
> +/* Kabylake U */
> +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
> +	{ 0x0000201B, 0x000000A1, 0x0 },
> +	{ 0x00005012, 0x00000088, 0x0 },
> +	{ 0x80007011, 0x000000CD, 0x3 },
> +	{ 0x80009010, 0x000000C0, 0x3 },
> +	{ 0x0000201B, 0x0000009D, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +	{ 0x80007011, 0x000000C0, 0x3 },
> +	{ 0x00002016, 0x0000004F, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +};
> +
> +/* Kabylake Y */
> +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
> +	{ 0x00001017, 0x000000A1, 0x0 },
> +	{ 0x00005012, 0x00000088, 0x0 },
> +	{ 0x80007011, 0x000000CD, 0x3 },
> +	{ 0x8000800F, 0x000000C0, 0x3 },
> +	{ 0x00001017, 0x0000009D, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +	{ 0x80007011, 0x000000C0, 0x3 },
> +	{ 0x00001017, 0x0000004C, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +};
> +
>  /*
> - * Skylake H and S
> + * Skylake/Kabylake H and S
>   * eDP 1.4 low vswing translation parameters
>   */
>  static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
> @@ -185,7 +224,7 @@ static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
>  };
>  
>  /*
> - * Skylake U
> + * Skylake/Kabylake U
>   * eDP 1.4 low vswing translation parameters
>   */
>  static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
> @@ -202,7 +241,7 @@ static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
>  };
>  
>  /*
> - * Skylake Y
> + * Skylake/Kabylake Y
>   * eDP 1.4 low vswing translation parameters
>   */
>  static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
> @@ -218,7 +257,7 @@ static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
>  	{ 0x00000018, 0x0000008A, 0x0 },
>  };
>  
> -/* Skylake U, H and S */
> +/* Skylake/Kabylake U, H and S */
>  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>  	{ 0x00000018, 0x000000AC, 0x0 },
>  	{ 0x00005012, 0x0000009D, 0x0 },
> @@ -233,7 +272,7 @@ static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>  	{ 0x80000018, 0x000000C0, 0x1 },
>  };
>  
> -/* Skylake Y */
> +/* Skylake/Kabylake Y */
>  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
>  	{ 0x00000018, 0x000000A1, 0x0 },
>  	{ 0x00005012, 0x000000DF, 0x0 },
> @@ -334,10 +373,10 @@ bdw_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>  static const struct ddi_buf_trans *
>  skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>  {
> -	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
> +	if (IS_SKL_ULX(dev_priv)) {
>  		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
>  		return skl_y_ddi_translations_dp;
> -	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
> +	} else if (IS_SKL_ULT(dev_priv)) {
>  		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
>  		return skl_u_ddi_translations_dp;
>  	} else {
> @@ -347,6 +386,21 @@ skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>  }
>  
>  static const struct ddi_buf_trans *
> +kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> +{
> +	if (IS_KBL_ULX(dev_priv)) {
> +		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
> +		return kbl_y_ddi_translations_dp;
> +	} else if (IS_KBL_ULT(dev_priv)) {
> +		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
> +		return kbl_u_ddi_translations_dp;
> +	} else {
> +		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
> +		return kbl_ddi_translations_dp;
> +	}
> +}
> +
> +static const struct ddi_buf_trans *
>  skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>  {
>  	if (dev_priv->vbt.edp.low_vswing) {
> @@ -362,7 +416,10 @@ skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>  		}
>  	}
>  
> -	return skl_get_buf_trans_dp(dev_priv, n_entries);
> +	if (IS_KABYLAKE(dev_priv))
> +		return kbl_get_buf_trans_dp(dev_priv, n_entries);
> +	else
> +		return skl_get_buf_trans_dp(dev_priv, n_entries);
>  }
>  
>  static const struct ddi_buf_trans *
> @@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
>  	if (IS_BROXTON(dev_priv))
>  		return;
>  
> -	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
> +	if (IS_KABYLAKE(dev_priv)) {
> +		ddi_translations_fdi = NULL;
> +		ddi_translations_dp =
> +				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> +		ddi_translations_edp =
> +				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
> +	} else if (IS_SKYLAKE(dev_priv)) {
>  		ddi_translations_fdi = NULL;
>  		ddi_translations_dp =
>  				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> @@ -1434,7 +1497,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
>  		if (dp_iboost) {
>  			iboost = dp_iboost;
>  		} else {
> -			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
> +			if (IS_KABYLAKE(dev_priv))
> +				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
> +									&n_entries);
> +			else
> +				ddi_translations = skl_get_buf_trans_dp(dev_priv,
> +									&n_entries);
>  			iboost = ddi_translations[level].i_boost;
>  		}
>  	} else if (type == INTEL_OUTPUT_EDP) {
> -- 
> 2.5.5
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-10-18  0:28               ` Manasi Navare
@ 2016-10-18 15:57                 ` Rodrigo Vivi
  2016-10-18 21:42                   ` Manasi Navare
  0 siblings, 1 reply; 14+ messages in thread
From: Rodrigo Vivi @ 2016-10-18 15:57 UTC (permalink / raw)
  To: intel-gfx; +Cc: Jani Nikula, Rodrigo Vivi

According to spec: "KBL re-uses SKL values, except where
specific KBL values are listed."

And recently spec has changed adding different table for Display Port only.
But for all SKUs (H,S,U,Y) we have slightly different values.

v2: Fix wrong condition spotted by Jani.
v3: Fix 7th entry of KBL H and S table - by Manasi.

Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Manasi Navare <manasi.d.navare@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
 drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
 1 file changed, 78 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 0def25d..6f793e5 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -167,8 +167,47 @@ struct ddi_buf_trans {
 	{ 0x80005012, 0x000000C0, 0x3 },
 };
 
+/* Kabylake H and S */
+static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
+	{ 0x00002016, 0x000000A0, 0x0 },
+	{ 0x00005012, 0x0000009B, 0x0 },
+	{ 0x00007011, 0x00000088, 0x0 },
+	{ 0x80009010, 0x000000C0, 0x1 },
+	{ 0x00002016, 0x0000009B, 0x0 },
+	{ 0x00005012, 0x00000088, 0x0 },
+	{ 0x80007011, 0x000000C0, 0x1 },
+	{ 0x00002016, 0x00000097, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x1 },
+};
+
+/* Kabylake U */
+static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
+	{ 0x0000201B, 0x000000A1, 0x0 },
+	{ 0x00005012, 0x00000088, 0x0 },
+	{ 0x80007011, 0x000000CD, 0x3 },
+	{ 0x80009010, 0x000000C0, 0x3 },
+	{ 0x0000201B, 0x0000009D, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+	{ 0x80007011, 0x000000C0, 0x3 },
+	{ 0x00002016, 0x0000004F, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+};
+
+/* Kabylake Y */
+static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
+	{ 0x00001017, 0x000000A1, 0x0 },
+	{ 0x00005012, 0x00000088, 0x0 },
+	{ 0x80007011, 0x000000CD, 0x3 },
+	{ 0x8000800F, 0x000000C0, 0x3 },
+	{ 0x00001017, 0x0000009D, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+	{ 0x80007011, 0x000000C0, 0x3 },
+	{ 0x00001017, 0x0000004C, 0x0 },
+	{ 0x80005012, 0x000000C0, 0x3 },
+};
+
 /*
- * Skylake H and S
+ * Skylake/Kabylake H and S
  * eDP 1.4 low vswing translation parameters
  */
 static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
@@ -185,7 +224,7 @@ struct ddi_buf_trans {
 };
 
 /*
- * Skylake U
+ * Skylake/Kabylake U
  * eDP 1.4 low vswing translation parameters
  */
 static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
@@ -202,7 +241,7 @@ struct ddi_buf_trans {
 };
 
 /*
- * Skylake Y
+ * Skylake/Kabylake Y
  * eDP 1.4 low vswing translation parameters
  */
 static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
@@ -218,7 +257,7 @@ struct ddi_buf_trans {
 	{ 0x00000018, 0x0000008A, 0x0 },
 };
 
-/* Skylake U, H and S */
+/* Skylake/Kabylake U, H and S */
 static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
 	{ 0x00000018, 0x000000AC, 0x0 },
 	{ 0x00005012, 0x0000009D, 0x0 },
@@ -233,7 +272,7 @@ struct ddi_buf_trans {
 	{ 0x80000018, 0x000000C0, 0x1 },
 };
 
-/* Skylake Y */
+/* Skylake/Kabylake Y */
 static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
 	{ 0x00000018, 0x000000A1, 0x0 },
 	{ 0x00005012, 0x000000DF, 0x0 },
@@ -334,10 +373,10 @@ enum port intel_ddi_get_encoder_port(struct intel_encoder *encoder)
 static const struct ddi_buf_trans *
 skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
 {
-	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
+	if (IS_SKL_ULX(dev_priv)) {
 		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
 		return skl_y_ddi_translations_dp;
-	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
+	} else if (IS_SKL_ULT(dev_priv)) {
 		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
 		return skl_u_ddi_translations_dp;
 	} else {
@@ -347,6 +386,21 @@ enum port intel_ddi_get_encoder_port(struct intel_encoder *encoder)
 }
 
 static const struct ddi_buf_trans *
+kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
+{
+	if (IS_KBL_ULX(dev_priv)) {
+		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
+		return kbl_y_ddi_translations_dp;
+	} else if (IS_KBL_ULT(dev_priv)) {
+		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
+		return kbl_u_ddi_translations_dp;
+	} else {
+		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
+		return kbl_ddi_translations_dp;
+	}
+}
+
+static const struct ddi_buf_trans *
 skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
 {
 	if (dev_priv->vbt.edp.low_vswing) {
@@ -362,7 +416,10 @@ enum port intel_ddi_get_encoder_port(struct intel_encoder *encoder)
 		}
 	}
 
-	return skl_get_buf_trans_dp(dev_priv, n_entries);
+	if (IS_KABYLAKE(dev_priv))
+		return kbl_get_buf_trans_dp(dev_priv, n_entries);
+	else
+		return skl_get_buf_trans_dp(dev_priv, n_entries);
 }
 
 static const struct ddi_buf_trans *
@@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
 	if (IS_BROXTON(dev_priv))
 		return;
 
-	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
+	if (IS_KABYLAKE(dev_priv)) {
+		ddi_translations_fdi = NULL;
+		ddi_translations_dp =
+				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
+		ddi_translations_edp =
+				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
+	} else if (IS_SKYLAKE(dev_priv)) {
 		ddi_translations_fdi = NULL;
 		ddi_translations_dp =
 				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
@@ -1437,7 +1500,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
 		if (dp_iboost) {
 			iboost = dp_iboost;
 		} else {
-			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
+			if (IS_KABYLAKE(dev_priv))
+				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
+									&n_entries);
+			else
+				ddi_translations = skl_get_buf_trans_dp(dev_priv,
+									&n_entries);
 			iboost = ddi_translations[level].i_boost;
 		}
 	} else if (type == INTEL_OUTPUT_EDP) {
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH] drm/i915: KBL - Recommended buffer translation programming for DisplayPort
  2016-10-18 15:57                 ` Rodrigo Vivi
@ 2016-10-18 21:42                   ` Manasi Navare
  0 siblings, 0 replies; 14+ messages in thread
From: Manasi Navare @ 2016-10-18 21:42 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: Jani Nikula, intel-gfx

On Tue, Oct 18, 2016 at 08:57:36AM -0700, Rodrigo Vivi wrote:
> According to spec: "KBL re-uses SKL values, except where
> specific KBL values are listed."
> 
> And recently spec has changed adding different table for Display Port only.
> But for all SKUs (H,S,U,Y) we have slightly different values.
> 
> v2: Fix wrong condition spotted by Jani.
> v3: Fix 7th entry of KBL H and S table - by Manasi.
> 
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Manasi Navare <manasi.d.navare@intel.com>

> ---
>  drivers/gpu/drm/i915/intel_ddi.c | 88 +++++++++++++++++++++++++++++++++++-----
>  1 file changed, 78 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 0def25d..6f793e5 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -167,8 +167,47 @@ struct ddi_buf_trans {
>  	{ 0x80005012, 0x000000C0, 0x3 },
>  };
>  
> +/* Kabylake H and S */
> +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
> +	{ 0x00002016, 0x000000A0, 0x0 },
> +	{ 0x00005012, 0x0000009B, 0x0 },
> +	{ 0x00007011, 0x00000088, 0x0 },
> +	{ 0x80009010, 0x000000C0, 0x1 },
> +	{ 0x00002016, 0x0000009B, 0x0 },
> +	{ 0x00005012, 0x00000088, 0x0 },
> +	{ 0x80007011, 0x000000C0, 0x1 },
> +	{ 0x00002016, 0x00000097, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x1 },
> +};
> +
> +/* Kabylake U */
> +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
> +	{ 0x0000201B, 0x000000A1, 0x0 },
> +	{ 0x00005012, 0x00000088, 0x0 },
> +	{ 0x80007011, 0x000000CD, 0x3 },
> +	{ 0x80009010, 0x000000C0, 0x3 },
> +	{ 0x0000201B, 0x0000009D, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +	{ 0x80007011, 0x000000C0, 0x3 },
> +	{ 0x00002016, 0x0000004F, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +};
> +
> +/* Kabylake Y */
> +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
> +	{ 0x00001017, 0x000000A1, 0x0 },
> +	{ 0x00005012, 0x00000088, 0x0 },
> +	{ 0x80007011, 0x000000CD, 0x3 },
> +	{ 0x8000800F, 0x000000C0, 0x3 },
> +	{ 0x00001017, 0x0000009D, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +	{ 0x80007011, 0x000000C0, 0x3 },
> +	{ 0x00001017, 0x0000004C, 0x0 },
> +	{ 0x80005012, 0x000000C0, 0x3 },
> +};
> +
>  /*
> - * Skylake H and S
> + * Skylake/Kabylake H and S
>   * eDP 1.4 low vswing translation parameters
>   */
>  static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
> @@ -185,7 +224,7 @@ struct ddi_buf_trans {
>  };
>  
>  /*
> - * Skylake U
> + * Skylake/Kabylake U
>   * eDP 1.4 low vswing translation parameters
>   */
>  static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
> @@ -202,7 +241,7 @@ struct ddi_buf_trans {
>  };
>  
>  /*
> - * Skylake Y
> + * Skylake/Kabylake Y
>   * eDP 1.4 low vswing translation parameters
>   */
>  static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
> @@ -218,7 +257,7 @@ struct ddi_buf_trans {
>  	{ 0x00000018, 0x0000008A, 0x0 },
>  };
>  
> -/* Skylake U, H and S */
> +/* Skylake/Kabylake U, H and S */
>  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>  	{ 0x00000018, 0x000000AC, 0x0 },
>  	{ 0x00005012, 0x0000009D, 0x0 },
> @@ -233,7 +272,7 @@ struct ddi_buf_trans {
>  	{ 0x80000018, 0x000000C0, 0x1 },
>  };
>  
> -/* Skylake Y */
> +/* Skylake/Kabylake Y */
>  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
>  	{ 0x00000018, 0x000000A1, 0x0 },
>  	{ 0x00005012, 0x000000DF, 0x0 },
> @@ -334,10 +373,10 @@ enum port intel_ddi_get_encoder_port(struct intel_encoder *encoder)
>  static const struct ddi_buf_trans *
>  skl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
>  {
> -	if (IS_SKL_ULX(dev_priv) || IS_KBL_ULX(dev_priv)) {
> +	if (IS_SKL_ULX(dev_priv)) {
>  		*n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
>  		return skl_y_ddi_translations_dp;
> -	} else if (IS_SKL_ULT(dev_priv) || IS_KBL_ULT(dev_priv)) {
> +	} else if (IS_SKL_ULT(dev_priv)) {
>  		*n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
>  		return skl_u_ddi_translations_dp;
>  	} else {
> @@ -347,6 +386,21 @@ enum port intel_ddi_get_encoder_port(struct intel_encoder *encoder)
>  }
>  
>  static const struct ddi_buf_trans *
> +kbl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
> +{
> +	if (IS_KBL_ULX(dev_priv)) {
> +		*n_entries = ARRAY_SIZE(kbl_y_ddi_translations_dp);
> +		return kbl_y_ddi_translations_dp;
> +	} else if (IS_KBL_ULT(dev_priv)) {
> +		*n_entries = ARRAY_SIZE(kbl_u_ddi_translations_dp);
> +		return kbl_u_ddi_translations_dp;
> +	} else {
> +		*n_entries = ARRAY_SIZE(kbl_ddi_translations_dp);
> +		return kbl_ddi_translations_dp;
> +	}
> +}
> +
> +static const struct ddi_buf_trans *
>  skl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
>  {
>  	if (dev_priv->vbt.edp.low_vswing) {
> @@ -362,7 +416,10 @@ enum port intel_ddi_get_encoder_port(struct intel_encoder *encoder)
>  		}
>  	}
>  
> -	return skl_get_buf_trans_dp(dev_priv, n_entries);
> +	if (IS_KABYLAKE(dev_priv))
> +		return kbl_get_buf_trans_dp(dev_priv, n_entries);
> +	else
> +		return skl_get_buf_trans_dp(dev_priv, n_entries);
>  }
>  
>  static const struct ddi_buf_trans *
> @@ -430,7 +487,13 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
>  	if (IS_BROXTON(dev_priv))
>  		return;
>  
> -	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
> +	if (IS_KABYLAKE(dev_priv)) {
> +		ddi_translations_fdi = NULL;
> +		ddi_translations_dp =
> +				kbl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> +		ddi_translations_edp =
> +				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
> +	} else if (IS_SKYLAKE(dev_priv)) {
>  		ddi_translations_fdi = NULL;
>  		ddi_translations_dp =
>  				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
> @@ -1437,7 +1500,12 @@ static void skl_ddi_set_iboost(struct intel_encoder *encoder, u32 level)
>  		if (dp_iboost) {
>  			iboost = dp_iboost;
>  		} else {
> -			ddi_translations = skl_get_buf_trans_dp(dev_priv, &n_entries);
> +			if (IS_KABYLAKE(dev_priv))
> +				ddi_translations = kbl_get_buf_trans_dp(dev_priv,
> +									&n_entries);
> +			else
> +				ddi_translations = skl_get_buf_trans_dp(dev_priv,
> +									&n_entries);
>  			iboost = ddi_translations[level].i_boost;
>  		}
>  	} else if (type == INTEL_OUTPUT_EDP) {
> -- 
> 1.9.1
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup
  2016-09-30 18:05 [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Rodrigo Vivi
                   ` (2 preceding siblings ...)
  2016-10-06 18:20 ` ✗ Fi.CI.BAT: warning for series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup (rev2) Patchwork
@ 2016-10-20 20:28 ` Manasi Navare
  3 siblings, 0 replies; 14+ messages in thread
From: Manasi Navare @ 2016-10-20 20:28 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx

On Fri, Sep 30, 2016 at 11:05:56AM -0700, Rodrigo Vivi wrote:
> No functional change.
> Only moving this fixup block out of ddi_translation definitions
> so we can split skl and kbl cleanly.
> 
> Cc: Manasi Navare <manasi.d.navare@intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com
 Reviewed-by: Manasi Navare <manasi.d.navare@intel.com>
>
> ---
>  drivers/gpu/drm/i915/intel_ddi.c | 21 ++++++++++++---------
>  1 file changed, 12 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
> index 35f0b7c..018964b 100644
> --- a/drivers/gpu/drm/i915/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/intel_ddi.c
> @@ -436,15 +436,6 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
>  				skl_get_buf_trans_dp(dev_priv, &n_dp_entries);
>  		ddi_translations_edp =
>  				skl_get_buf_trans_edp(dev_priv, &n_edp_entries);
> -
> -		/* If we're boosting the current, set bit 31 of trans1 */
> -		if (dev_priv->vbt.ddi_port_info[port].dp_boost_level)
> -			iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
> -
> -		if (WARN_ON(encoder->type == INTEL_OUTPUT_EDP &&
> -			    port != PORT_A && port != PORT_E &&
> -			    n_edp_entries > 9))
> -			n_edp_entries = 9;
>  	} else if (IS_BROADWELL(dev_priv)) {
>  		ddi_translations_fdi = bdw_ddi_translations_fdi;
>  		ddi_translations_dp = bdw_ddi_translations_dp;
> @@ -464,6 +455,18 @@ void intel_prepare_dp_ddi_buffers(struct intel_encoder *encoder)
>  		n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
>  	}
>  
> +	/* Skylake/Kabylake iboost and edp_entries fixup */
> +	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
> +		/* If we're boosting the current, set bit 31 of trans1 */
> +		if (dev_priv->vbt.ddi_port_info[port].dp_boost_level)
> +			iboost_bit = DDI_BUF_BALANCE_LEG_ENABLE;
> +
> +		if (WARN_ON(encoder->type == INTEL_OUTPUT_EDP &&
> +			    port != PORT_A && port != PORT_E &&
> +			    n_edp_entries > 9))
> +			n_edp_entries = 9;
> +	}
> +
>  	switch (encoder->type) {
>  	case INTEL_OUTPUT_EDP:
>  		ddi_translations = ddi_translations_edp;
> -- 
> 1.9.1
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2016-10-20 20:27 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-30 18:05 [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Rodrigo Vivi
2016-09-30 18:05 ` [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort Rodrigo Vivi
2016-10-03 10:50   ` Jani Nikula
2016-10-04  0:30     ` Vivi, Rodrigo
2016-10-04  7:05       ` Jani Nikula
2016-10-06  0:00         ` Vivi, Rodrigo
2016-10-06  7:14           ` Jani Nikula
2016-10-06 17:54             ` [PATCH] " Rodrigo Vivi
2016-10-18  0:28               ` Manasi Navare
2016-10-18 15:57                 ` Rodrigo Vivi
2016-10-18 21:42                   ` Manasi Navare
2016-09-30 19:19 ` ✗ Fi.CI.BAT: warning for series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Patchwork
2016-10-06 18:20 ` ✗ Fi.CI.BAT: warning for series starting with [1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup (rev2) Patchwork
2016-10-20 20:28 ` [PATCH 1/2] drm/i915: Move down skl/kbl ddi iboost and n_edp_entires fixup Manasi Navare

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).