[Intel-gfx] [PATCH 38/67] drm/i915/cnl: Add DDI Buffer translation tables for Cannonlake.
Manasi Navare
manasi.d.navare at intel.com
Thu May 18 01:01:11 UTC 2017
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 at intel.com>
> Cc: Manasi Navare <manasi.d.navare at intel.com>
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> ---
> 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
>
More information about the Intel-gfx
mailing list