Re: [Intel-gfx] [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort

2016-10-06 Thread Jani Nikula
On Thu, 06 Oct 2016, "Vivi, Rodrigo"  wrote:
> On Tue, 2016-10-04 at 10:05 +0300, Jani Nikula wrote:
>> On Tue, 04 Oct 2016, "Vivi, Rodrigo"  wrote:
>> > On Mon, 2016-10-03 at 13:50 +0300, Jani Nikula wrote:
>> >> On Fri, 30 Sep 2016, 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.
>> >> >
>> >> > Cc: Manasi Navare 
>> >> > Cc: Arthur Runyan 
>> >> > Signed-off-by: Rodrigo Vivi 
>> >> > ---
>> >> >  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, 0x00C0, 0x3 },
>> >> >  };
>> >> >  
>> >> > +/* Kabylake H and S */
>> >> > +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
>> >> > +   { 0x2016, 0x00A0, 0x0 },
>> >> > +   { 0x5012, 0x009B, 0x0 },
>> >> > +   { 0x7011, 0x0088, 0x0 },
>> >> > +   { 0x80009010, 0x00C0, 0x1 },
>> >> > +   { 0x2016, 0x009B, 0x0 },
>> >> > +   { 0x5012, 0x0088, 0x0 },
>> >> > +   { 0x80007011, 0x00C0, 0x1 },
>> >> > +   { 0x2016, 0x009F, 0x0 },
>> >> > +   { 0x80005012, 0x00C0, 0x1 },
>> >> > +};
>> >> > +
>> >> > +/* Kabylake U */
>> >> > +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
>> >> > +   { 0x201B, 0x00A1, 0x0 },
>> >> > +   { 0x5012, 0x0088, 0x0 },
>> >> > +   { 0x80007011, 0x00CD, 0x3 },
>> >> > +   { 0x80009010, 0x00C0, 0x3 },
>> >> > +   { 0x201B, 0x009D, 0x0 },
>> >> > +   { 0x80005012, 0x00C0, 0x3 },
>> >> > +   { 0x80007011, 0x00C0, 0x3 },
>> >> > +   { 0x2016, 0x004F, 0x0 },
>> >> > +   { 0x80005012, 0x00C0, 0x3 },
>> >> > +};
>> >> > +
>> >> > +/* Kabylake Y */
>> >> > +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
>> >> > +   { 0x1017, 0x00A1, 0x0 },
>> >> > +   { 0x5012, 0x0088, 0x0 },
>> >> > +   { 0x80007011, 0x00CD, 0x3 },
>> >> > +   { 0x8000800F, 0x00C0, 0x3 },
>> >> > +   { 0x1017, 0x009D, 0x0 },
>> >> > +   { 0x80005012, 0x00C0, 0x3 },
>> >> > +   { 0x80007011, 0x00C0, 0x3 },
>> >> > +   { 0x1017, 0x004C, 0x0 },
>> >> > +   { 0x80005012, 0x00C0, 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[] = {
>> >> > { 0x0018, 0x008A, 0x0 },
>> >> >  };
>> >> >  
>> >> > -/* Skylake U, H and S */
>> >> > +/* Skylake/Kabylake U, H and S */
>> >> >  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>> >> > { 0x0018, 0x00AC, 0x0 },
>> >> > { 0x5012, 0x009D, 0x0 },
>> >> > @@ -233,7 +272,7 @@ static const struct ddi_buf_trans 
>> >> > skl_ddi_translations_hdmi[] = {
>> >> > { 0x8018, 0x00C0, 0x1 },
>> >> >  };
>> >> >  
>> >> > -/* Skylake Y */
>> >> > +/* Skylake/Kabylake Y */
>> >> >  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
>> >> > { 0x0018, 0x00A1, 0x0 },
>> >> > { 0x5012, 0x00DF, 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, 

Re: [Intel-gfx] [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort

2016-10-05 Thread Vivi, Rodrigo

On Tue, 2016-10-04 at 10:05 +0300, Jani Nikula wrote:
> On Tue, 04 Oct 2016, "Vivi, Rodrigo"  wrote:
> > On Mon, 2016-10-03 at 13:50 +0300, Jani Nikula wrote:
> >> On Fri, 30 Sep 2016, 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.
> >> >
> >> > Cc: Manasi Navare 
> >> > Cc: Arthur Runyan 
> >> > Signed-off-by: Rodrigo Vivi 
> >> > ---
> >> >  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, 0x00C0, 0x3 },
> >> >  };
> >> >  
> >> > +/* Kabylake H and S */
> >> > +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
> >> > +{ 0x2016, 0x00A0, 0x0 },
> >> > +{ 0x5012, 0x009B, 0x0 },
> >> > +{ 0x7011, 0x0088, 0x0 },
> >> > +{ 0x80009010, 0x00C0, 0x1 },
> >> > +{ 0x2016, 0x009B, 0x0 },
> >> > +{ 0x5012, 0x0088, 0x0 },
> >> > +{ 0x80007011, 0x00C0, 0x1 },
> >> > +{ 0x2016, 0x009F, 0x0 },
> >> > +{ 0x80005012, 0x00C0, 0x1 },
> >> > +};
> >> > +
> >> > +/* Kabylake U */
> >> > +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
> >> > +{ 0x201B, 0x00A1, 0x0 },
> >> > +{ 0x5012, 0x0088, 0x0 },
> >> > +{ 0x80007011, 0x00CD, 0x3 },
> >> > +{ 0x80009010, 0x00C0, 0x3 },
> >> > +{ 0x201B, 0x009D, 0x0 },
> >> > +{ 0x80005012, 0x00C0, 0x3 },
> >> > +{ 0x80007011, 0x00C0, 0x3 },
> >> > +{ 0x2016, 0x004F, 0x0 },
> >> > +{ 0x80005012, 0x00C0, 0x3 },
> >> > +};
> >> > +
> >> > +/* Kabylake Y */
> >> > +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
> >> > +{ 0x1017, 0x00A1, 0x0 },
> >> > +{ 0x5012, 0x0088, 0x0 },
> >> > +{ 0x80007011, 0x00CD, 0x3 },
> >> > +{ 0x8000800F, 0x00C0, 0x3 },
> >> > +{ 0x1017, 0x009D, 0x0 },
> >> > +{ 0x80005012, 0x00C0, 0x3 },
> >> > +{ 0x80007011, 0x00C0, 0x3 },
> >> > +{ 0x1017, 0x004C, 0x0 },
> >> > +{ 0x80005012, 0x00C0, 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[] = {
> >> >  { 0x0018, 0x008A, 0x0 },
> >> >  };
> >> >  
> >> > -/* Skylake U, H and S */
> >> > +/* Skylake/Kabylake U, H and S */
> >> >  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
> >> >  { 0x0018, 0x00AC, 0x0 },
> >> >  { 0x5012, 0x009D, 0x0 },
> >> > @@ -233,7 +272,7 @@ static const struct ddi_buf_trans 
> >> > skl_ddi_translations_hdmi[] = {
> >> >  { 0x8018, 0x00C0, 0x1 },
> >> >  };
> >> >  
> >> > -/* Skylake Y */
> >> > +/* Skylake/Kabylake Y */
> >> >  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
> >> >  { 0x0018, 0x00A1, 0x0 },
> >> >  { 0x5012, 0x00DF, 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)) {
> >> >  

Re: [Intel-gfx] [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort

2016-10-04 Thread Jani Nikula
On Tue, 04 Oct 2016, "Vivi, Rodrigo"  wrote:
> On Mon, 2016-10-03 at 13:50 +0300, Jani Nikula wrote:
>> On Fri, 30 Sep 2016, 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.
>> >
>> > Cc: Manasi Navare 
>> > Cc: Arthur Runyan 
>> > Signed-off-by: Rodrigo Vivi 
>> > ---
>> >  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, 0x00C0, 0x3 },
>> >  };
>> >  
>> > +/* Kabylake H and S */
>> > +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
>> > +  { 0x2016, 0x00A0, 0x0 },
>> > +  { 0x5012, 0x009B, 0x0 },
>> > +  { 0x7011, 0x0088, 0x0 },
>> > +  { 0x80009010, 0x00C0, 0x1 },
>> > +  { 0x2016, 0x009B, 0x0 },
>> > +  { 0x5012, 0x0088, 0x0 },
>> > +  { 0x80007011, 0x00C0, 0x1 },
>> > +  { 0x2016, 0x009F, 0x0 },
>> > +  { 0x80005012, 0x00C0, 0x1 },
>> > +};
>> > +
>> > +/* Kabylake U */
>> > +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
>> > +  { 0x201B, 0x00A1, 0x0 },
>> > +  { 0x5012, 0x0088, 0x0 },
>> > +  { 0x80007011, 0x00CD, 0x3 },
>> > +  { 0x80009010, 0x00C0, 0x3 },
>> > +  { 0x201B, 0x009D, 0x0 },
>> > +  { 0x80005012, 0x00C0, 0x3 },
>> > +  { 0x80007011, 0x00C0, 0x3 },
>> > +  { 0x2016, 0x004F, 0x0 },
>> > +  { 0x80005012, 0x00C0, 0x3 },
>> > +};
>> > +
>> > +/* Kabylake Y */
>> > +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
>> > +  { 0x1017, 0x00A1, 0x0 },
>> > +  { 0x5012, 0x0088, 0x0 },
>> > +  { 0x80007011, 0x00CD, 0x3 },
>> > +  { 0x8000800F, 0x00C0, 0x3 },
>> > +  { 0x1017, 0x009D, 0x0 },
>> > +  { 0x80005012, 0x00C0, 0x3 },
>> > +  { 0x80007011, 0x00C0, 0x3 },
>> > +  { 0x1017, 0x004C, 0x0 },
>> > +  { 0x80005012, 0x00C0, 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[] = {
>> >{ 0x0018, 0x008A, 0x0 },
>> >  };
>> >  
>> > -/* Skylake U, H and S */
>> > +/* Skylake/Kabylake U, H and S */
>> >  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>> >{ 0x0018, 0x00AC, 0x0 },
>> >{ 0x5012, 0x009D, 0x0 },
>> > @@ -233,7 +272,7 @@ static const struct ddi_buf_trans 
>> > skl_ddi_translations_hdmi[] = {
>> >{ 0x8018, 0x00C0, 0x1 },
>> >  };
>> >  
>> > -/* Skylake Y */
>> > +/* Skylake/Kabylake Y */
>> >  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
>> >{ 0x0018, 0x00A1, 0x0 },
>> >{ 0x5012, 0x00DF, 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 *
>> > 

Re: [Intel-gfx] [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort

2016-10-03 Thread Vivi, Rodrigo
On Mon, 2016-10-03 at 13:50 +0300, Jani Nikula wrote:
> On Fri, 30 Sep 2016, 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.
> >
> > Cc: Manasi Navare 
> > Cc: Arthur Runyan 
> > Signed-off-by: Rodrigo Vivi 
> > ---
> >  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, 0x00C0, 0x3 },
> >  };
> >  
> > +/* Kabylake H and S */
> > +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
> > +   { 0x2016, 0x00A0, 0x0 },
> > +   { 0x5012, 0x009B, 0x0 },
> > +   { 0x7011, 0x0088, 0x0 },
> > +   { 0x80009010, 0x00C0, 0x1 },
> > +   { 0x2016, 0x009B, 0x0 },
> > +   { 0x5012, 0x0088, 0x0 },
> > +   { 0x80007011, 0x00C0, 0x1 },
> > +   { 0x2016, 0x009F, 0x0 },
> > +   { 0x80005012, 0x00C0, 0x1 },
> > +};
> > +
> > +/* Kabylake U */
> > +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
> > +   { 0x201B, 0x00A1, 0x0 },
> > +   { 0x5012, 0x0088, 0x0 },
> > +   { 0x80007011, 0x00CD, 0x3 },
> > +   { 0x80009010, 0x00C0, 0x3 },
> > +   { 0x201B, 0x009D, 0x0 },
> > +   { 0x80005012, 0x00C0, 0x3 },
> > +   { 0x80007011, 0x00C0, 0x3 },
> > +   { 0x2016, 0x004F, 0x0 },
> > +   { 0x80005012, 0x00C0, 0x3 },
> > +};
> > +
> > +/* Kabylake Y */
> > +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
> > +   { 0x1017, 0x00A1, 0x0 },
> > +   { 0x5012, 0x0088, 0x0 },
> > +   { 0x80007011, 0x00CD, 0x3 },
> > +   { 0x8000800F, 0x00C0, 0x3 },
> > +   { 0x1017, 0x009D, 0x0 },
> > +   { 0x80005012, 0x00C0, 0x3 },
> > +   { 0x80007011, 0x00C0, 0x3 },
> > +   { 0x1017, 0x004C, 0x0 },
> > +   { 0x80005012, 0x00C0, 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[] = {
> > { 0x0018, 0x008A, 0x0 },
> >  };
> >  
> > -/* Skylake U, H and S */
> > +/* Skylake/Kabylake U, H and S */
> >  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
> > { 0x0018, 0x00AC, 0x0 },
> > { 0x5012, 0x009D, 0x0 },
> > @@ -233,7 +272,7 @@ static const struct ddi_buf_trans 
> > skl_ddi_translations_hdmi[] = {
> > { 0x8018, 0x00C0, 0x1 },
> >  };
> >  
> > -/* Skylake Y */
> > +/* Skylake/Kabylake Y */
> >  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
> > { 0x0018, 0x00A1, 0x0 },
> > { 0x5012, 0x00DF, 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 = 

Re: [Intel-gfx] [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort

2016-10-03 Thread Jani Nikula
On Fri, 30 Sep 2016, 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.
>
> Cc: Manasi Navare 
> Cc: Arthur Runyan 
> Signed-off-by: Rodrigo Vivi 
> ---
>  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, 0x00C0, 0x3 },
>  };
>  
> +/* Kabylake H and S */
> +static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
> + { 0x2016, 0x00A0, 0x0 },
> + { 0x5012, 0x009B, 0x0 },
> + { 0x7011, 0x0088, 0x0 },
> + { 0x80009010, 0x00C0, 0x1 },
> + { 0x2016, 0x009B, 0x0 },
> + { 0x5012, 0x0088, 0x0 },
> + { 0x80007011, 0x00C0, 0x1 },
> + { 0x2016, 0x009F, 0x0 },
> + { 0x80005012, 0x00C0, 0x1 },
> +};
> +
> +/* Kabylake U */
> +static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
> + { 0x201B, 0x00A1, 0x0 },
> + { 0x5012, 0x0088, 0x0 },
> + { 0x80007011, 0x00CD, 0x3 },
> + { 0x80009010, 0x00C0, 0x3 },
> + { 0x201B, 0x009D, 0x0 },
> + { 0x80005012, 0x00C0, 0x3 },
> + { 0x80007011, 0x00C0, 0x3 },
> + { 0x2016, 0x004F, 0x0 },
> + { 0x80005012, 0x00C0, 0x3 },
> +};
> +
> +/* Kabylake Y */
> +static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
> + { 0x1017, 0x00A1, 0x0 },
> + { 0x5012, 0x0088, 0x0 },
> + { 0x80007011, 0x00CD, 0x3 },
> + { 0x8000800F, 0x00C0, 0x3 },
> + { 0x1017, 0x009D, 0x0 },
> + { 0x80005012, 0x00C0, 0x3 },
> + { 0x80007011, 0x00C0, 0x3 },
> + { 0x1017, 0x004C, 0x0 },
> + { 0x80005012, 0x00C0, 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[] = {
>   { 0x0018, 0x008A, 0x0 },
>  };
>  
> -/* Skylake U, H and S */
> +/* Skylake/Kabylake U, H and S */
>  static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
>   { 0x0018, 0x00AC, 0x0 },
>   { 0x5012, 0x009D, 0x0 },
> @@ -233,7 +272,7 @@ static const struct ddi_buf_trans 
> skl_ddi_translations_hdmi[] = {
>   { 0x8018, 0x00C0, 0x1 },
>  };
>  
> -/* Skylake Y */
> +/* Skylake/Kabylake Y */
>  static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
>   { 0x0018, 0x00A1, 0x0 },
>   { 0x5012, 0x00DF, 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 

[Intel-gfx] [PATCH 2/2] drm/i915: KBL - Recommended buffer translation programming for DisplayPort

2016-09-30 Thread 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 
Cc: Arthur Runyan 
Signed-off-by: Rodrigo Vivi 
---
 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, 0x00C0, 0x3 },
 };
 
+/* Kabylake H and S */
+static const struct ddi_buf_trans kbl_ddi_translations_dp[] = {
+   { 0x2016, 0x00A0, 0x0 },
+   { 0x5012, 0x009B, 0x0 },
+   { 0x7011, 0x0088, 0x0 },
+   { 0x80009010, 0x00C0, 0x1 },
+   { 0x2016, 0x009B, 0x0 },
+   { 0x5012, 0x0088, 0x0 },
+   { 0x80007011, 0x00C0, 0x1 },
+   { 0x2016, 0x009F, 0x0 },
+   { 0x80005012, 0x00C0, 0x1 },
+};
+
+/* Kabylake U */
+static const struct ddi_buf_trans kbl_u_ddi_translations_dp[] = {
+   { 0x201B, 0x00A1, 0x0 },
+   { 0x5012, 0x0088, 0x0 },
+   { 0x80007011, 0x00CD, 0x3 },
+   { 0x80009010, 0x00C0, 0x3 },
+   { 0x201B, 0x009D, 0x0 },
+   { 0x80005012, 0x00C0, 0x3 },
+   { 0x80007011, 0x00C0, 0x3 },
+   { 0x2016, 0x004F, 0x0 },
+   { 0x80005012, 0x00C0, 0x3 },
+};
+
+/* Kabylake Y */
+static const struct ddi_buf_trans kbl_y_ddi_translations_dp[] = {
+   { 0x1017, 0x00A1, 0x0 },
+   { 0x5012, 0x0088, 0x0 },
+   { 0x80007011, 0x00CD, 0x3 },
+   { 0x8000800F, 0x00C0, 0x3 },
+   { 0x1017, 0x009D, 0x0 },
+   { 0x80005012, 0x00C0, 0x3 },
+   { 0x80007011, 0x00C0, 0x3 },
+   { 0x1017, 0x004C, 0x0 },
+   { 0x80005012, 0x00C0, 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[] = {
{ 0x0018, 0x008A, 0x0 },
 };
 
-/* Skylake U, H and S */
+/* Skylake/Kabylake U, H and S */
 static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
{ 0x0018, 0x00AC, 0x0 },
{ 0x5012, 0x009D, 0x0 },
@@ -233,7 +272,7 @@ static const struct ddi_buf_trans 
skl_ddi_translations_hdmi[] = {
{ 0x8018, 0x00C0, 0x1 },
 };
 
-/* Skylake Y */
+/* Skylake/Kabylake Y */
 static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
{ 0x0018, 0x00A1, 0x0 },
{ 0x5012, 0x00DF, 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