On Thu, Apr 06, 2017 at 12:15:34PM -0700, Rodrigo Vivi wrote: > These tables are used on voltage wswing sequence initialization > on Cannonlake. > > It is a complete new format now in use by the voltage swing team, > not following any other standard in use by any other platform. > Also the registers are different as well. So let's redefine > the translation table for Cannonlake. > > The table is huge. So we minimized with the fields that are > different or might be different anytime soon. The common > values will be hardcoded on the voltage swing sequence. > > v2: Merge the lower and the upper bits to match the spec table > and make review easier. This was possible with the good > idea for Manasi with a better way to handle it on the bit > macro definition presented on previous patch. > Credits-to: Manasi > The translation table values were verified against Bspec. So Reviewed-by: Manasi Navare <manasi.d.navare@xxxxxxxxx> > Cc: Manasi Navare <manasi.d.navare@xxxxxxxxx> > Signed-off-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_ddi.c | 140 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 140 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c > index 2a901bf..3c31a22 100644 > --- a/drivers/gpu/drm/i915/intel_ddi.c > +++ b/drivers/gpu/drm/i915/intel_ddi.c > @@ -353,6 +353,146 @@ struct bxt_ddi_buf_trans { > { 154, 0x9A, 1, 128, true }, /* 9: 1200 0 */ > }; > > +struct cnl_ddi_buf_trans { > + u32 dw2_swing_sel; > + u32 dw7_n_scalar; > + u32 dw4_cursor_coeff; > + u32 dw4_post_cursor_2; > + u32 dw4_post_cursor_1; > +}; > + > +/* Voltage Swing Programming for VccIO 0.85V for DP */ > +static const struct cnl_ddi_buf_trans cnl_ddi_translations_dp_0_85V[] = { > + /* NT mV Trans mV db */ > + { 0xA, 0x5D, 0x3F, 0x00, 0x00 }, /* 350 350 0.0 */ > + { 0xA, 0x6A, 0x38, 0x00, 0x07 }, /* 350 500 3.1 */ > + { 0xB, 0x7A, 0x32, 0x00, 0x0D }, /* 350 700 6.0 */ > + { 0x6, 0x7C, 0x2D, 0x00, 0x12 }, /* 350 900 8.2 */ > + { 0xA, 0x69, 0x3F, 0x00, 0x00 }, /* 500 500 0.0 */ > + { 0xB, 0x7A, 0x36, 0x00, 0x09 }, /* 500 700 2.9 */ > + { 0x6, 0x7C, 0x30, 0x00, 0x0F }, /* 500 900 5.1 */ > + { 0xB, 0x7D, 0x3C, 0x00, 0x03 }, /* 650 725 0.9 */ > + { 0x6, 0x7C, 0x34, 0x00, 0x0B }, /* 600 900 3.5 */ > + { 0x6, 0x7B, 0x3F, 0x00, 0x00 }, /* 900 900 0.0 */ > +}; > + > +/* Voltage Swing Programming for VccIO 0.85V for HDMI */ > +static const struct cnl_ddi_buf_trans cnl_ddi_translations_hdmi_0_85V[] = { > + /* NT mV Trans mV db */ > + { 0xA, 0x60, 0x3F, 0x00, 0x00 }, /* 450 450 0.0 */ > + { 0xB, 0x73, 0x36, 0x00, 0x09 }, /* 450 650 3.2 */ > + { 0x6, 0x7F, 0x31, 0x00, 0x0E }, /* 450 850 5.5 */ > + { 0xB, 0x73, 0x3F, 0x00, 0x00 }, /* 650 650 0.0 */ > + { 0x6, 0x7F, 0x37, 0x00, 0x08 }, /* 650 850 2.3 */ > + { 0x6, 0x7F, 0x3F, 0x00, 0x00 }, /* 850 850 0.0 */ > + { 0x6, 0x7F, 0x35, 0x00, 0x0A }, /* 600 850 3.0 */ > +}; > + > +/* Voltage Swing Programming for VccIO 0.85V for eDP */ > +static const struct cnl_ddi_buf_trans cnl_ddi_translations_edp_0_85V[] = { > + /* NT mV Trans mV db */ > + { 0xA, 0x66, 0x3A, 0x00, 0x05 }, /* 384 500 2.3 */ > + { 0x0, 0x7F, 0x38, 0x00, 0x07 }, /* 153 200 2.3 */ > + { 0x8, 0x7F, 0x38, 0x00, 0x07 }, /* 192 250 2.3 */ > + { 0x1, 0x7F, 0x38, 0x00, 0x07 }, /* 230 300 2.3 */ > + { 0x9, 0x7F, 0x38, 0x00, 0x07 }, /* 269 350 2.3 */ > + { 0xA, 0x66, 0x3C, 0x00, 0x03 }, /* 446 500 1.0 */ > + { 0xB, 0x70, 0x3C, 0x00, 0x03 }, /* 460 600 2.3 */ > + { 0xC, 0x75, 0x3C, 0x00, 0x03 }, /* 537 700 2.3 */ > + { 0x2, 0x7F, 0x3F, 0x00, 0x00 }, /* 400 400 0.0 */ > +}; > + > +/* Voltage Swing Programming for VccIO 0.95V for DP */ > +static const struct cnl_ddi_buf_trans cnl_ddi_translations_dp_0_95V[] = { > + /* NT mV Trans mV db */ > + { 0xA, 0x5D, 0x3F, 0x00, 0x00 }, /* 350 350 0.0 */ > + { 0xA, 0x6A, 0x38, 0x00, 0x07 }, /* 350 500 3.1 */ > + { 0xB, 0x7A, 0x32, 0x00, 0x0D }, /* 350 700 6.0 */ > + { 0x6, 0x7C, 0x2D, 0x00, 0x12 }, /* 350 900 8.2 */ > + { 0xA, 0x69, 0x3F, 0x00, 0x00 }, /* 500 500 0.0 */ > + { 0xB, 0x7A, 0x36, 0x00, 0x09 }, /* 500 700 2.9 */ > + { 0x6, 0x7C, 0x30, 0x00, 0x0F }, /* 500 900 5.1 */ > + { 0xB, 0x7D, 0x3C, 0x00, 0x03 }, /* 650 725 0.9 */ > + { 0x6, 0x7C, 0x34, 0x00, 0x0B }, /* 600 900 3.5 */ > + { 0x6, 0x7B, 0x3F, 0x00, 0x00 }, /* 900 900 0.0 */ > +}; > + > +/* Voltage Swing Programming for VccIO 0.95V for HDMI */ > +static const struct cnl_ddi_buf_trans cnl_ddi_translations_hdmi_0_95V[] = { > + /* NT mV Trans mV db */ > + { 0xA, 0x5C, 0x3F, 0x00, 0x00 }, /* 400 400 0.0 */ > + { 0xB, 0x69, 0x37, 0x00, 0x08 }, /* 400 600 3.5 */ > + { 0x5, 0x76, 0x31, 0x00, 0x0E }, /* 400 800 6.0 */ > + { 0xA, 0x5E, 0x3F, 0x00, 0x00 }, /* 450 450 0.0 */ > + { 0xB, 0x69, 0x3F, 0x00, 0x00 }, /* 600 600 0.0 */ > + { 0xB, 0x79, 0x35, 0x00, 0x0A }, /* 600 850 3.0 */ > + { 0x6, 0x7D, 0x32, 0x00, 0x0D }, /* 600 1000 4.4 */ > + { 0x5, 0x76, 0x3F, 0x00, 0x00 }, /* 800 800 0.0 */ > + { 0x6, 0x7D, 0x39, 0x00, 0x06 }, /* 800 1000 1.9 */ > + { 0x6, 0x7F, 0x39, 0x00, 0x06 }, /* 850 1050 1.8 */ > + { 0x6, 0x7F, 0x3F, 0x00, 0x00 }, /* 1050 1050 0.0 */ > +}; > + > +/* Voltage Swing Programming for VccIO 0.95V for eDP */ > +static const struct cnl_ddi_buf_trans cnl_ddi_translations_edp_0_95V[] = { > + /* NT mV Trans mV db */ > + { 0xA, 0x61, 0x3A, 0x00, 0x05 }, /* 384 500 2.3 */ > + { 0x0, 0x7F, 0x38, 0x00, 0x07 }, /* 153 200 2.3 */ > + { 0x8, 0x7F, 0x38, 0x00, 0x07 }, /* 192 250 2.3 */ > + { 0x1, 0x7F, 0x38, 0x00, 0x07 }, /* 230 300 2.3 */ > + { 0x9, 0x7F, 0x38, 0x00, 0x07 }, /* 269 350 2.3 */ > + { 0xA, 0x61, 0x3C, 0x00, 0x03 }, /* 446 500 1.0 */ > + { 0xB, 0x68, 0x39, 0x00, 0x06 }, /* 460 600 2.3 */ > + { 0xC, 0x6E, 0x39, 0x00, 0x06 }, /* 537 700 2.3 */ > + { 0x4, 0x7F, 0x3A, 0x00, 0x05 }, /* 460 600 2.3 */ > + { 0x2, 0x7F, 0x3F, 0x00, 0x00 }, /* 400 400 0.0 */ > +}; > + > +/* Voltage Swing Programming for VccIO 1.05V for DP */ > +static const struct cnl_ddi_buf_trans cnl_ddi_translations_dp_1_05V[] = { > + /* NT mV Trans mV db */ > + { 0xA, 0x58, 0x3F, 0x00, 0x00 }, /* 400 400 0.0 */ > + { 0xB, 0x64, 0x37, 0x00, 0x08 }, /* 400 600 3.5 */ > + { 0x5, 0x70, 0x31, 0x00, 0x0E }, /* 400 800 6.0 */ > + { 0x6, 0x7F, 0x2C, 0x00, 0x13 }, /* 400 1050 8.4 */ > + { 0xB, 0x64, 0x3F, 0x00, 0x00 }, /* 600 600 0.0 */ > + { 0x5, 0x73, 0x35, 0x00, 0x0A }, /* 600 850 3.0 */ > + { 0x6, 0x7F, 0x30, 0x00, 0x0F }, /* 550 1050 5.6 */ > + { 0x5, 0x76, 0x3E, 0x00, 0x01 }, /* 850 900 0.5 */ > + { 0x6, 0x7F, 0x36, 0x00, 0x09 }, /* 750 1050 2.9 */ > + { 0x6, 0x7F, 0x3F, 0x00, 0x00 }, /* 1050 1050 0.0 */ > +}; > + > +/* Voltage Swing Programming for VccIO 1.05V for HDMI */ > +static const struct cnl_ddi_buf_trans cnl_ddi_translations_hdmi_1_05V[] = { > + /* NT mV Trans mV db */ > + { 0xA, 0x58, 0x3F, 0x00, 0x00 }, /* 400 400 0.0 */ > + { 0xB, 0x64, 0x37, 0x00, 0x08 }, /* 400 600 3.5 */ > + { 0x5, 0x70, 0x31, 0x00, 0x0E }, /* 400 800 6.0 */ > + { 0xA, 0x5B, 0x3F, 0x00, 0x00 }, /* 450 450 0.0 */ > + { 0xB, 0x64, 0x3F, 0x00, 0x00 }, /* 600 600 0.0 */ > + { 0x5, 0x73, 0x35, 0x00, 0x0A }, /* 600 850 3.0 */ > + { 0x6, 0x7C, 0x32, 0x00, 0x0D }, /* 600 1000 4.4 */ > + { 0x5, 0x70, 0x3F, 0x00, 0x00 }, /* 800 800 0.0 */ > + { 0x6, 0x7C, 0x39, 0x00, 0x06 }, /* 800 1000 1.9 */ > + { 0x6, 0x7F, 0x39, 0x00, 0x06 }, /* 850 1050 1.8 */ > + { 0x6, 0x7F, 0x3F, 0x00, 0x00 }, /* 1050 1050 0.0 */ > +}; > + > +/* Voltage Swing Programming for VccIO 1.05V for eDP */ > +static const struct cnl_ddi_buf_trans cnl_ddi_translations_edp_1_05V[] = { > + /* NT mV Trans mV db */ > + { 0xA, 0x5E, 0x3A, 0x00, 0x05 }, /* 384 500 2.3 */ > + { 0x0, 0x7F, 0x38, 0x00, 0x07 }, /* 153 200 2.3 */ > + { 0x8, 0x7F, 0x38, 0x00, 0x07 }, /* 192 250 2.3 */ > + { 0x1, 0x7F, 0x38, 0x00, 0x07 }, /* 230 300 2.3 */ > + { 0x9, 0x7F, 0x38, 0x00, 0x07 }, /* 269 350 2.3 */ > + { 0xA, 0x5E, 0x3C, 0x00, 0x03 }, /* 446 500 1.0 */ > + { 0xB, 0x64, 0x39, 0x00, 0x06 }, /* 460 600 2.3 */ > + { 0xE, 0x6A, 0x39, 0x00, 0x06 }, /* 537 700 2.3 */ > + { 0x2, 0x7F, 0x3F, 0x00, 0x00 }, /* 400 400 0.0 */ > +}; > + > enum port intel_ddi_get_encoder_port(struct intel_encoder *encoder) > { > switch (encoder->type) { > -- > 1.9.1 > _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx