* [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).