<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Wed, Aug 5, 2015 at 6:47 PM Zhang, Xiong Y <<a href="mailto:xiong.y.zhang@intel.com">xiong.y.zhang@intel.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi, Vivi:<br>
Do you think this patch could resolve the following two issues ?<br>
<a href="https://bugs.freedesktop.org/show_bug.cgi?id=91050" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=91050</a><br>
<a href="https://bugs.freedesktop.org/show_bug.cgi?id=91269" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=91269</a></blockquote><div><br></div><div>I'm not sure honestly... I was just following latest spec updates. But I believe it has potential..</div><div>at least to avoid this vswig parameters on our SDPs.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
thanks<br>
> -----Original Message-----<br>
> From: Intel-gfx [mailto:<a href="mailto:intel-gfx-bounces@lists.freedesktop.org" target="_blank">intel-gfx-bounces@lists.freedesktop.org</a>] On Behalf Of<br>
> Rodrigo Vivi<br>
> Sent: Thursday, August 6, 2015 5:59 AM<br>
> To: <a href="mailto:intel-gfx@lists.freedesktop.org" target="_blank">intel-gfx@lists.freedesktop.org</a><br>
> Cc: Runyan, Arthur J; Vivi, Rodrigo<br>
> Subject: [Intel-gfx] [PATCH] drm/i915/skl: Update DDI buffer translation<br>
> programming.<br>
><br>
> SKL-Y can now use the same programming for all VccIO values after an<br>
> adjustment to I_boost.<br>
> SKL-U DP table adjustments.<br>
> 1. Remove SKL Y 0.95V from "SKL H and S" columns in all tables. The<br>
> other SKL Y column removes the "0.85V VccIO" so it now applies to all<br>
> voltages.<br>
> 2. DP table changes SKL U 400mV+0db dword 0 value from 2016h to<br>
> 201Bh.<br>
> 3. DP table changes SKL U 600mv+0db dword 0 value from 2016h to<br>
> 201Bh.<br>
> 4. DP table increases I_boost to level 3 for SKL Y 400mv+9.5db.<br>
><br>
> Reference: Graphics Spec Change r97962<br>
> Cc: Arthur Runyan <<a href="mailto:arthur.j.runyan@intel.com" target="_blank">arthur.j.runyan@intel.com</a>><br>
> Signed-off-by: Rodrigo Vivi <<a href="mailto:rodrigo.vivi@intel.com" target="_blank">rodrigo.vivi@intel.com</a>><br>
> ---<br>
> drivers/gpu/drm/i915/intel_ddi.c | 73 ++++++++++++++--------------------------<br>
> 1 file changed, 25 insertions(+), 48 deletions(-)<br>
><br>
> diff --git a/drivers/gpu/drm/i915/intel_ddi.c<br>
> b/drivers/gpu/drm/i915/intel_ddi.c<br>
> index 9a40bfb..9e5a21b 100644<br>
> --- a/drivers/gpu/drm/i915/intel_ddi.c<br>
> +++ b/drivers/gpu/drm/i915/intel_ddi.c<br>
> @@ -128,7 +128,7 @@ static const struct ddi_buf_trans<br>
> bdw_ddi_translations_hdmi[] = {<br>
> { 0x80FFFFFF, 0x001B0002, 0x0 },/* 9: 1000 1000 0 */<br>
> };<br>
><br>
> -/* Skylake H, S, and Skylake Y with 0.95V VccIO */<br>
> +/* Skylake H and S */<br>
> static const struct ddi_buf_trans skl_ddi_translations_dp[] = {<br>
> { 0x00002016, 0x000000A0, 0x0 },<br>
> { 0x00005012, 0x0000009B, 0x0 },<br>
> @@ -143,23 +143,23 @@ static const struct ddi_buf_trans<br>
> skl_ddi_translations_dp[] = {<br>
><br>
> /* Skylake U */<br>
> static const struct ddi_buf_trans skl_u_ddi_translations_dp[] = {<br>
> - { 0x00002016, 0x000000A2, 0x0 },<br>
> + { 0x0000201B, 0x000000A2, 0x0 },<br>
> { 0x00005012, 0x00000088, 0x0 },<br>
> { 0x00007011, 0x00000087, 0x0 },<br>
> - { 0x80009010, 0x000000C7, 0x1 }, /* Uses I_boost */<br>
> - { 0x00002016, 0x0000009D, 0x0 },<br>
> + { 0x80009010, 0x000000C7, 0x1 }, /* Uses I_boost level 0x1 */<br>
> + { 0x0000201B, 0x0000009D, 0x0 },<br>
> { 0x00005012, 0x000000C7, 0x0 },<br>
> { 0x00007011, 0x000000C7, 0x0 },<br>
> { 0x00002016, 0x00000088, 0x0 },<br>
> { 0x00005012, 0x000000C7, 0x0 },<br>
> };<br>
><br>
> -/* Skylake Y with 0.85V VccIO */<br>
> -static const struct ddi_buf_trans skl_y_085v_ddi_translations_dp[] = {<br>
> +/* Skylake Y */<br>
> +static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {<br>
> { 0x00000018, 0x000000A2, 0x0 },<br>
> { 0x00005012, 0x00000088, 0x0 },<br>
> { 0x00007011, 0x00000087, 0x0 },<br>
> - { 0x80009010, 0x000000C7, 0x1 }, /* Uses I_boost */<br>
> + { 0x80009010, 0x000000C7, 0x3 }, /* Uses I_boost level 0x3 */<br>
> { 0x00000018, 0x0000009D, 0x0 },<br>
> { 0x00005012, 0x000000C7, 0x0 },<br>
> { 0x00007011, 0x000000C7, 0x0 },<br>
> @@ -168,7 +168,7 @@ static const struct ddi_buf_trans<br>
> skl_y_085v_ddi_translations_dp[] = { };<br>
><br>
> /*<br>
> - * Skylake H and S, and Skylake Y with 0.95V VccIO<br>
> + * Skylake H and S<br>
> * eDP 1.4 low vswing translation parameters<br>
> */<br>
> static const struct ddi_buf_trans skl_ddi_translations_edp[] = { @@ -202,10<br>
> +202,10 @@ static const struct ddi_buf_trans skl_u_ddi_translations_edp[] =<br>
> { };<br>
><br>
> /*<br>
> - * Skylake Y with 0.95V VccIO<br>
> + * Skylake Y<br>
> * eDP 1.4 low vswing translation parameters<br>
> */<br>
> -static const struct ddi_buf_trans skl_y_085v_ddi_translations_edp[] = {<br>
> +static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {<br>
> { 0x00000018, 0x000000A8, 0x0 },<br>
> { 0x00004013, 0x000000AB, 0x0 },<br>
> { 0x00007011, 0x000000A4, 0x0 },<br>
> @@ -218,7 +218,7 @@ static const struct ddi_buf_trans<br>
> skl_y_085v_ddi_translations_edp[] = {<br>
> { 0x00000018, 0x0000008A, 0x0 },<br>
> };<br>
><br>
> -/* Skylake H, S and U, and Skylake Y with 0.95V VccIO */<br>
> +/* Skylake U, H and S */<br>
> static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {<br>
> { 0x00000018, 0x000000AC, 0x0 },<br>
> { 0x00005012, 0x0000009D, 0x0 },<br>
> @@ -233,8 +233,8 @@ static const struct ddi_buf_trans<br>
> skl_ddi_translations_hdmi[] = {<br>
> { 0x00000018, 0x000000C7, 0x0 },<br>
> };<br>
><br>
> -/* Skylake Y with 0.85V VccIO */<br>
> -static const struct ddi_buf_trans skl_y_085v_ddi_translations_hdmi[] = {<br>
> +/* Skylake Y */<br>
> +static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {<br>
> { 0x00000018, 0x000000A1, 0x0 },<br>
> { 0x00005012, 0x000000DF, 0x0 },<br>
> { 0x00007011, 0x00000084, 0x0 },<br>
> @@ -244,7 +244,7 @@ static const struct ddi_buf_trans<br>
> skl_y_085v_ddi_translations_hdmi[] = {<br>
> { 0x00006013, 0x000000C7, 0x0 },<br>
> { 0x00000018, 0x0000008A, 0x0 },<br>
> { 0x00003015, 0x000000C7, 0x0 }, /* Default */<br>
> - { 0x80003015, 0x000000C7, 0x7 }, /* Uses I_boost */<br>
> + { 0x80003015, 0x000000C7, 0x7 }, /* Uses I_boost level 0x7 */<br>
> { 0x00000018, 0x000000C7, 0x0 },<br>
> };<br>
><br>
> @@ -337,17 +337,10 @@ static const struct ddi_buf_trans<br>
> *skl_get_buf_trans_dp(struct drm_device *dev, {<br>
> struct drm_i915_private *dev_priv = dev->dev_private;<br>
> const struct ddi_buf_trans *ddi_translations;<br>
> - static int is_095v = -1;<br>
><br>
> - if (is_095v == -1) {<br>
> - u32 spr1 = I915_READ(UAIMI_SPR1);<br>
> -<br>
> - is_095v = spr1 & SKL_VCCIO_MASK;<br>
> - }<br>
> -<br>
> - if (IS_SKL_ULX(dev) && !is_095v) {<br>
> - ddi_translations = skl_y_085v_ddi_translations_dp;<br>
> - *n_entries = ARRAY_SIZE(skl_y_085v_ddi_translations_dp);<br>
> + if (IS_SKL_ULX(dev)) {<br>
> + ddi_translations = skl_y_ddi_translations_dp;<br>
> + *n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);<br>
> } else if (IS_SKL_ULT(dev)) {<br>
> ddi_translations = skl_u_ddi_translations_dp;<br>
> *n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);<br>
> @@ -364,23 +357,14 @@ static const struct ddi_buf_trans<br>
> *skl_get_buf_trans_edp(struct drm_device *dev, {<br>
> struct drm_i915_private *dev_priv = dev->dev_private;<br>
> const struct ddi_buf_trans *ddi_translations;<br>
> - static int is_095v = -1;<br>
><br>
> - if (is_095v == -1) {<br>
> - u32 spr1 = I915_READ(UAIMI_SPR1);<br>
> -<br>
> - is_095v = spr1 & SKL_VCCIO_MASK;<br>
> - }<br>
> -<br>
> - if (IS_SKL_ULX(dev) && !is_095v) {<br>
> + if (IS_SKL_ULX(dev)) {<br>
> if (dev_priv->edp_low_vswing) {<br>
> - ddi_translations = skl_y_085v_ddi_translations_edp;<br>
> - *n_entries =<br>
> - ARRAY_SIZE(skl_y_085v_ddi_translations_edp);<br>
> + ddi_translations = skl_y_ddi_translations_edp;<br>
> + *n_entries = ARRAY_SIZE(skl_y_ddi_translations_edp);<br>
> } else {<br>
> - ddi_translations = skl_y_085v_ddi_translations_dp;<br>
> - *n_entries =<br>
> - ARRAY_SIZE(skl_y_085v_ddi_translations_dp);<br>
> + ddi_translations = skl_y_ddi_translations_dp;<br>
> + *n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);<br>
> }<br>
> } else if (IS_SKL_ULT(dev)) {<br>
> if (dev_priv->edp_low_vswing) {<br>
> @@ -409,17 +393,10 @@ skl_get_buf_trans_hdmi(struct drm_device *dev, {<br>
> struct drm_i915_private *dev_priv = dev->dev_private;<br>
> const struct ddi_buf_trans *ddi_translations;<br>
> - static int is_095v = -1;<br>
> -<br>
> - if (is_095v == -1) {<br>
> - u32 spr1 = I915_READ(UAIMI_SPR1);<br>
> -<br>
> - is_095v = spr1 & SKL_VCCIO_MASK;<br>
> - }<br>
><br>
> - if (IS_SKL_ULX(dev) && !is_095v) {<br>
> - ddi_translations = skl_y_085v_ddi_translations_hdmi;<br>
> - *n_entries = ARRAY_SIZE(skl_y_085v_ddi_translations_hdmi);<br>
> + if (IS_SKL_ULX(dev)) {<br>
> + ddi_translations = skl_y_ddi_translations_hdmi;<br>
> + *n_entries = ARRAY_SIZE(skl_y_ddi_translations_hdmi);<br>
> } else {<br>
> ddi_translations = skl_ddi_translations_hdmi;<br>
> *n_entries = ARRAY_SIZE(skl_ddi_translations_hdmi);<br>
> --<br>
> 2.1.0<br>
><br>
> _______________________________________________<br>
> Intel-gfx mailing list<br>
> <a href="mailto:Intel-gfx@lists.freedesktop.org" target="_blank">Intel-gfx@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/intel-gfx" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/intel-gfx</a><br>
_______________________________________________<br>
Intel-gfx mailing list<br>
<a href="mailto:Intel-gfx@lists.freedesktop.org" target="_blank">Intel-gfx@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/intel-gfx" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/intel-gfx</a><br>
</blockquote></div></div>