cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

intel_ddi_buf_trans.c (68819B)


      1// SPDX-License-Identifier: MIT
      2/*
      3 * Copyright © 2020 Intel Corporation
      4 */
      5
      6#include "i915_drv.h"
      7#include "intel_ddi.h"
      8#include "intel_ddi_buf_trans.h"
      9#include "intel_de.h"
     10#include "intel_display_types.h"
     11#include "intel_dp.h"
     12
     13/* HDMI/DVI modes ignore everything but the last 2 items. So we share
     14 * them for both DP and FDI transports, allowing those ports to
     15 * automatically adapt to HDMI connections as well
     16 */
     17static const union intel_ddi_buf_trans_entry _hsw_trans_dp[] = {
     18	{ .hsw = { 0x00FFFFFF, 0x0006000E, 0x0 } },
     19	{ .hsw = { 0x00D75FFF, 0x0005000A, 0x0 } },
     20	{ .hsw = { 0x00C30FFF, 0x00040006, 0x0 } },
     21	{ .hsw = { 0x80AAAFFF, 0x000B0000, 0x0 } },
     22	{ .hsw = { 0x00FFFFFF, 0x0005000A, 0x0 } },
     23	{ .hsw = { 0x00D75FFF, 0x000C0004, 0x0 } },
     24	{ .hsw = { 0x80C30FFF, 0x000B0000, 0x0 } },
     25	{ .hsw = { 0x00FFFFFF, 0x00040006, 0x0 } },
     26	{ .hsw = { 0x80D75FFF, 0x000B0000, 0x0 } },
     27};
     28
     29static const struct intel_ddi_buf_trans hsw_trans_dp = {
     30	.entries = _hsw_trans_dp,
     31	.num_entries = ARRAY_SIZE(_hsw_trans_dp),
     32};
     33
     34static const union intel_ddi_buf_trans_entry _hsw_trans_fdi[] = {
     35	{ .hsw = { 0x00FFFFFF, 0x0007000E, 0x0 } },
     36	{ .hsw = { 0x00D75FFF, 0x000F000A, 0x0 } },
     37	{ .hsw = { 0x00C30FFF, 0x00060006, 0x0 } },
     38	{ .hsw = { 0x00AAAFFF, 0x001E0000, 0x0 } },
     39	{ .hsw = { 0x00FFFFFF, 0x000F000A, 0x0 } },
     40	{ .hsw = { 0x00D75FFF, 0x00160004, 0x0 } },
     41	{ .hsw = { 0x00C30FFF, 0x001E0000, 0x0 } },
     42	{ .hsw = { 0x00FFFFFF, 0x00060006, 0x0 } },
     43	{ .hsw = { 0x00D75FFF, 0x001E0000, 0x0 } },
     44};
     45
     46static const struct intel_ddi_buf_trans hsw_trans_fdi = {
     47	.entries = _hsw_trans_fdi,
     48	.num_entries = ARRAY_SIZE(_hsw_trans_fdi),
     49};
     50
     51static const union intel_ddi_buf_trans_entry _hsw_trans_hdmi[] = {
     52							/* Idx	NT mV d	T mV d	db	*/
     53	{ .hsw = { 0x00FFFFFF, 0x0006000E, 0x0 } },	/* 0:	400	400	0	*/
     54	{ .hsw = { 0x00E79FFF, 0x000E000C, 0x0 } },	/* 1:	400	500	2	*/
     55	{ .hsw = { 0x00D75FFF, 0x0005000A, 0x0 } },	/* 2:	400	600	3.5	*/
     56	{ .hsw = { 0x00FFFFFF, 0x0005000A, 0x0 } },	/* 3:	600	600	0	*/
     57	{ .hsw = { 0x00E79FFF, 0x001D0007, 0x0 } },	/* 4:	600	750	2	*/
     58	{ .hsw = { 0x00D75FFF, 0x000C0004, 0x0 } },	/* 5:	600	900	3.5	*/
     59	{ .hsw = { 0x00FFFFFF, 0x00040006, 0x0 } },	/* 6:	800	800	0	*/
     60	{ .hsw = { 0x80E79FFF, 0x00030002, 0x0 } },	/* 7:	800	1000	2	*/
     61	{ .hsw = { 0x00FFFFFF, 0x00140005, 0x0 } },	/* 8:	850	850	0	*/
     62	{ .hsw = { 0x00FFFFFF, 0x000C0004, 0x0 } },	/* 9:	900	900	0	*/
     63	{ .hsw = { 0x00FFFFFF, 0x001C0003, 0x0 } },	/* 10:	950	950	0	*/
     64	{ .hsw = { 0x80FFFFFF, 0x00030002, 0x0 } },	/* 11:	1000	1000	0	*/
     65};
     66
     67static const struct intel_ddi_buf_trans hsw_trans_hdmi = {
     68	.entries = _hsw_trans_hdmi,
     69	.num_entries = ARRAY_SIZE(_hsw_trans_hdmi),
     70	.hdmi_default_entry = 6,
     71};
     72
     73static const union intel_ddi_buf_trans_entry _bdw_trans_edp[] = {
     74	{ .hsw = { 0x00FFFFFF, 0x00000012, 0x0 } },
     75	{ .hsw = { 0x00EBAFFF, 0x00020011, 0x0 } },
     76	{ .hsw = { 0x00C71FFF, 0x0006000F, 0x0 } },
     77	{ .hsw = { 0x00AAAFFF, 0x000E000A, 0x0 } },
     78	{ .hsw = { 0x00FFFFFF, 0x00020011, 0x0 } },
     79	{ .hsw = { 0x00DB6FFF, 0x0005000F, 0x0 } },
     80	{ .hsw = { 0x00BEEFFF, 0x000A000C, 0x0 } },
     81	{ .hsw = { 0x00FFFFFF, 0x0005000F, 0x0 } },
     82	{ .hsw = { 0x00DB6FFF, 0x000A000C, 0x0 } },
     83};
     84
     85static const struct intel_ddi_buf_trans bdw_trans_edp = {
     86	.entries = _bdw_trans_edp,
     87	.num_entries = ARRAY_SIZE(_bdw_trans_edp),
     88};
     89
     90static const union intel_ddi_buf_trans_entry _bdw_trans_dp[] = {
     91	{ .hsw = { 0x00FFFFFF, 0x0007000E, 0x0 } },
     92	{ .hsw = { 0x00D75FFF, 0x000E000A, 0x0 } },
     93	{ .hsw = { 0x00BEFFFF, 0x00140006, 0x0 } },
     94	{ .hsw = { 0x80B2CFFF, 0x001B0002, 0x0 } },
     95	{ .hsw = { 0x00FFFFFF, 0x000E000A, 0x0 } },
     96	{ .hsw = { 0x00DB6FFF, 0x00160005, 0x0 } },
     97	{ .hsw = { 0x80C71FFF, 0x001A0002, 0x0 } },
     98	{ .hsw = { 0x00F7DFFF, 0x00180004, 0x0 } },
     99	{ .hsw = { 0x80D75FFF, 0x001B0002, 0x0 } },
    100};
    101
    102static const struct intel_ddi_buf_trans bdw_trans_dp = {
    103	.entries = _bdw_trans_dp,
    104	.num_entries = ARRAY_SIZE(_bdw_trans_dp),
    105};
    106
    107static const union intel_ddi_buf_trans_entry _bdw_trans_fdi[] = {
    108	{ .hsw = { 0x00FFFFFF, 0x0001000E, 0x0 } },
    109	{ .hsw = { 0x00D75FFF, 0x0004000A, 0x0 } },
    110	{ .hsw = { 0x00C30FFF, 0x00070006, 0x0 } },
    111	{ .hsw = { 0x00AAAFFF, 0x000C0000, 0x0 } },
    112	{ .hsw = { 0x00FFFFFF, 0x0004000A, 0x0 } },
    113	{ .hsw = { 0x00D75FFF, 0x00090004, 0x0 } },
    114	{ .hsw = { 0x00C30FFF, 0x000C0000, 0x0 } },
    115	{ .hsw = { 0x00FFFFFF, 0x00070006, 0x0 } },
    116	{ .hsw = { 0x00D75FFF, 0x000C0000, 0x0 } },
    117};
    118
    119static const struct intel_ddi_buf_trans bdw_trans_fdi = {
    120	.entries = _bdw_trans_fdi,
    121	.num_entries = ARRAY_SIZE(_bdw_trans_fdi),
    122};
    123
    124static const union intel_ddi_buf_trans_entry _bdw_trans_hdmi[] = {
    125							/* Idx	NT mV d	T mV df	db	*/
    126	{ .hsw = { 0x00FFFFFF, 0x0007000E, 0x0 } },	/* 0:	400	400	0	*/
    127	{ .hsw = { 0x00D75FFF, 0x000E000A, 0x0 } },	/* 1:	400	600	3.5	*/
    128	{ .hsw = { 0x00BEFFFF, 0x00140006, 0x0 } },	/* 2:	400	800	6	*/
    129	{ .hsw = { 0x00FFFFFF, 0x0009000D, 0x0 } },	/* 3:	450	450	0	*/
    130	{ .hsw = { 0x00FFFFFF, 0x000E000A, 0x0 } },	/* 4:	600	600	0	*/
    131	{ .hsw = { 0x00D7FFFF, 0x00140006, 0x0 } },	/* 5:	600	800	2.5	*/
    132	{ .hsw = { 0x80CB2FFF, 0x001B0002, 0x0 } },	/* 6:	600	1000	4.5	*/
    133	{ .hsw = { 0x00FFFFFF, 0x00140006, 0x0 } },	/* 7:	800	800	0	*/
    134	{ .hsw = { 0x80E79FFF, 0x001B0002, 0x0 } },	/* 8:	800	1000	2	*/
    135	{ .hsw = { 0x80FFFFFF, 0x001B0002, 0x0 } },	/* 9:	1000	1000	0	*/
    136};
    137
    138static const struct intel_ddi_buf_trans bdw_trans_hdmi = {
    139	.entries = _bdw_trans_hdmi,
    140	.num_entries = ARRAY_SIZE(_bdw_trans_hdmi),
    141	.hdmi_default_entry = 7,
    142};
    143
    144/* Skylake H and S */
    145static const union intel_ddi_buf_trans_entry _skl_trans_dp[] = {
    146	{ .hsw = { 0x00002016, 0x000000A0, 0x0 } },
    147	{ .hsw = { 0x00005012, 0x0000009B, 0x0 } },
    148	{ .hsw = { 0x00007011, 0x00000088, 0x0 } },
    149	{ .hsw = { 0x80009010, 0x000000C0, 0x1 } },
    150	{ .hsw = { 0x00002016, 0x0000009B, 0x0 } },
    151	{ .hsw = { 0x00005012, 0x00000088, 0x0 } },
    152	{ .hsw = { 0x80007011, 0x000000C0, 0x1 } },
    153	{ .hsw = { 0x00002016, 0x000000DF, 0x0 } },
    154	{ .hsw = { 0x80005012, 0x000000C0, 0x1 } },
    155};
    156
    157static const struct intel_ddi_buf_trans skl_trans_dp = {
    158	.entries = _skl_trans_dp,
    159	.num_entries = ARRAY_SIZE(_skl_trans_dp),
    160};
    161
    162/* Skylake U */
    163static const union intel_ddi_buf_trans_entry _skl_u_trans_dp[] = {
    164	{ .hsw = { 0x0000201B, 0x000000A2, 0x0 } },
    165	{ .hsw = { 0x00005012, 0x00000088, 0x0 } },
    166	{ .hsw = { 0x80007011, 0x000000CD, 0x1 } },
    167	{ .hsw = { 0x80009010, 0x000000C0, 0x1 } },
    168	{ .hsw = { 0x0000201B, 0x0000009D, 0x0 } },
    169	{ .hsw = { 0x80005012, 0x000000C0, 0x1 } },
    170	{ .hsw = { 0x80007011, 0x000000C0, 0x1 } },
    171	{ .hsw = { 0x00002016, 0x00000088, 0x0 } },
    172	{ .hsw = { 0x80005012, 0x000000C0, 0x1 } },
    173};
    174
    175static const struct intel_ddi_buf_trans skl_u_trans_dp = {
    176	.entries = _skl_u_trans_dp,
    177	.num_entries = ARRAY_SIZE(_skl_u_trans_dp),
    178};
    179
    180/* Skylake Y */
    181static const union intel_ddi_buf_trans_entry _skl_y_trans_dp[] = {
    182	{ .hsw = { 0x00000018, 0x000000A2, 0x0 } },
    183	{ .hsw = { 0x00005012, 0x00000088, 0x0 } },
    184	{ .hsw = { 0x80007011, 0x000000CD, 0x3 } },
    185	{ .hsw = { 0x80009010, 0x000000C0, 0x3 } },
    186	{ .hsw = { 0x00000018, 0x0000009D, 0x0 } },
    187	{ .hsw = { 0x80005012, 0x000000C0, 0x3 } },
    188	{ .hsw = { 0x80007011, 0x000000C0, 0x3 } },
    189	{ .hsw = { 0x00000018, 0x00000088, 0x0 } },
    190	{ .hsw = { 0x80005012, 0x000000C0, 0x3 } },
    191};
    192
    193static const struct intel_ddi_buf_trans skl_y_trans_dp = {
    194	.entries = _skl_y_trans_dp,
    195	.num_entries = ARRAY_SIZE(_skl_y_trans_dp),
    196};
    197
    198/* Kabylake H and S */
    199static const union intel_ddi_buf_trans_entry _kbl_trans_dp[] = {
    200	{ .hsw = { 0x00002016, 0x000000A0, 0x0 } },
    201	{ .hsw = { 0x00005012, 0x0000009B, 0x0 } },
    202	{ .hsw = { 0x00007011, 0x00000088, 0x0 } },
    203	{ .hsw = { 0x80009010, 0x000000C0, 0x1 } },
    204	{ .hsw = { 0x00002016, 0x0000009B, 0x0 } },
    205	{ .hsw = { 0x00005012, 0x00000088, 0x0 } },
    206	{ .hsw = { 0x80007011, 0x000000C0, 0x1 } },
    207	{ .hsw = { 0x00002016, 0x00000097, 0x0 } },
    208	{ .hsw = { 0x80005012, 0x000000C0, 0x1 } },
    209};
    210
    211static const struct intel_ddi_buf_trans kbl_trans_dp = {
    212	.entries = _kbl_trans_dp,
    213	.num_entries = ARRAY_SIZE(_kbl_trans_dp),
    214};
    215
    216/* Kabylake U */
    217static const union intel_ddi_buf_trans_entry _kbl_u_trans_dp[] = {
    218	{ .hsw = { 0x0000201B, 0x000000A1, 0x0 } },
    219	{ .hsw = { 0x00005012, 0x00000088, 0x0 } },
    220	{ .hsw = { 0x80007011, 0x000000CD, 0x3 } },
    221	{ .hsw = { 0x80009010, 0x000000C0, 0x3 } },
    222	{ .hsw = { 0x0000201B, 0x0000009D, 0x0 } },
    223	{ .hsw = { 0x80005012, 0x000000C0, 0x3 } },
    224	{ .hsw = { 0x80007011, 0x000000C0, 0x3 } },
    225	{ .hsw = { 0x00002016, 0x0000004F, 0x0 } },
    226	{ .hsw = { 0x80005012, 0x000000C0, 0x3 } },
    227};
    228
    229static const struct intel_ddi_buf_trans kbl_u_trans_dp = {
    230	.entries = _kbl_u_trans_dp,
    231	.num_entries = ARRAY_SIZE(_kbl_u_trans_dp),
    232};
    233
    234/* Kabylake Y */
    235static const union intel_ddi_buf_trans_entry _kbl_y_trans_dp[] = {
    236	{ .hsw = { 0x00001017, 0x000000A1, 0x0 } },
    237	{ .hsw = { 0x00005012, 0x00000088, 0x0 } },
    238	{ .hsw = { 0x80007011, 0x000000CD, 0x3 } },
    239	{ .hsw = { 0x8000800F, 0x000000C0, 0x3 } },
    240	{ .hsw = { 0x00001017, 0x0000009D, 0x0 } },
    241	{ .hsw = { 0x80005012, 0x000000C0, 0x3 } },
    242	{ .hsw = { 0x80007011, 0x000000C0, 0x3 } },
    243	{ .hsw = { 0x00001017, 0x0000004C, 0x0 } },
    244	{ .hsw = { 0x80005012, 0x000000C0, 0x3 } },
    245};
    246
    247static const struct intel_ddi_buf_trans kbl_y_trans_dp = {
    248	.entries = _kbl_y_trans_dp,
    249	.num_entries = ARRAY_SIZE(_kbl_y_trans_dp),
    250};
    251
    252/*
    253 * Skylake/Kabylake H and S
    254 * eDP 1.4 low vswing translation parameters
    255 */
    256static const union intel_ddi_buf_trans_entry _skl_trans_edp[] = {
    257	{ .hsw = { 0x00000018, 0x000000A8, 0x0 } },
    258	{ .hsw = { 0x00004013, 0x000000A9, 0x0 } },
    259	{ .hsw = { 0x00007011, 0x000000A2, 0x0 } },
    260	{ .hsw = { 0x00009010, 0x0000009C, 0x0 } },
    261	{ .hsw = { 0x00000018, 0x000000A9, 0x0 } },
    262	{ .hsw = { 0x00006013, 0x000000A2, 0x0 } },
    263	{ .hsw = { 0x00007011, 0x000000A6, 0x0 } },
    264	{ .hsw = { 0x00000018, 0x000000AB, 0x0 } },
    265	{ .hsw = { 0x00007013, 0x0000009F, 0x0 } },
    266	{ .hsw = { 0x00000018, 0x000000DF, 0x0 } },
    267};
    268
    269static const struct intel_ddi_buf_trans skl_trans_edp = {
    270	.entries = _skl_trans_edp,
    271	.num_entries = ARRAY_SIZE(_skl_trans_edp),
    272};
    273
    274/*
    275 * Skylake/Kabylake U
    276 * eDP 1.4 low vswing translation parameters
    277 */
    278static const union intel_ddi_buf_trans_entry _skl_u_trans_edp[] = {
    279	{ .hsw = { 0x00000018, 0x000000A8, 0x0 } },
    280	{ .hsw = { 0x00004013, 0x000000A9, 0x0 } },
    281	{ .hsw = { 0x00007011, 0x000000A2, 0x0 } },
    282	{ .hsw = { 0x00009010, 0x0000009C, 0x0 } },
    283	{ .hsw = { 0x00000018, 0x000000A9, 0x0 } },
    284	{ .hsw = { 0x00006013, 0x000000A2, 0x0 } },
    285	{ .hsw = { 0x00007011, 0x000000A6, 0x0 } },
    286	{ .hsw = { 0x00002016, 0x000000AB, 0x0 } },
    287	{ .hsw = { 0x00005013, 0x0000009F, 0x0 } },
    288	{ .hsw = { 0x00000018, 0x000000DF, 0x0 } },
    289};
    290
    291static const struct intel_ddi_buf_trans skl_u_trans_edp = {
    292	.entries = _skl_u_trans_edp,
    293	.num_entries = ARRAY_SIZE(_skl_u_trans_edp),
    294};
    295
    296/*
    297 * Skylake/Kabylake Y
    298 * eDP 1.4 low vswing translation parameters
    299 */
    300static const union intel_ddi_buf_trans_entry _skl_y_trans_edp[] = {
    301	{ .hsw = { 0x00000018, 0x000000A8, 0x0 } },
    302	{ .hsw = { 0x00004013, 0x000000AB, 0x0 } },
    303	{ .hsw = { 0x00007011, 0x000000A4, 0x0 } },
    304	{ .hsw = { 0x00009010, 0x000000DF, 0x0 } },
    305	{ .hsw = { 0x00000018, 0x000000AA, 0x0 } },
    306	{ .hsw = { 0x00006013, 0x000000A4, 0x0 } },
    307	{ .hsw = { 0x00007011, 0x0000009D, 0x0 } },
    308	{ .hsw = { 0x00000018, 0x000000A0, 0x0 } },
    309	{ .hsw = { 0x00006012, 0x000000DF, 0x0 } },
    310	{ .hsw = { 0x00000018, 0x0000008A, 0x0 } },
    311};
    312
    313static const struct intel_ddi_buf_trans skl_y_trans_edp = {
    314	.entries = _skl_y_trans_edp,
    315	.num_entries = ARRAY_SIZE(_skl_y_trans_edp),
    316};
    317
    318/* Skylake/Kabylake U, H and S */
    319static const union intel_ddi_buf_trans_entry _skl_trans_hdmi[] = {
    320	{ .hsw = { 0x00000018, 0x000000AC, 0x0 } },
    321	{ .hsw = { 0x00005012, 0x0000009D, 0x0 } },
    322	{ .hsw = { 0x00007011, 0x00000088, 0x0 } },
    323	{ .hsw = { 0x00000018, 0x000000A1, 0x0 } },
    324	{ .hsw = { 0x00000018, 0x00000098, 0x0 } },
    325	{ .hsw = { 0x00004013, 0x00000088, 0x0 } },
    326	{ .hsw = { 0x80006012, 0x000000CD, 0x1 } },
    327	{ .hsw = { 0x00000018, 0x000000DF, 0x0 } },
    328	{ .hsw = { 0x80003015, 0x000000CD, 0x1 } },	/* Default */
    329	{ .hsw = { 0x80003015, 0x000000C0, 0x1 } },
    330	{ .hsw = { 0x80000018, 0x000000C0, 0x1 } },
    331};
    332
    333static const struct intel_ddi_buf_trans skl_trans_hdmi = {
    334	.entries = _skl_trans_hdmi,
    335	.num_entries = ARRAY_SIZE(_skl_trans_hdmi),
    336	.hdmi_default_entry = 8,
    337};
    338
    339/* Skylake/Kabylake Y */
    340static const union intel_ddi_buf_trans_entry _skl_y_trans_hdmi[] = {
    341	{ .hsw = { 0x00000018, 0x000000A1, 0x0 } },
    342	{ .hsw = { 0x00005012, 0x000000DF, 0x0 } },
    343	{ .hsw = { 0x80007011, 0x000000CB, 0x3 } },
    344	{ .hsw = { 0x00000018, 0x000000A4, 0x0 } },
    345	{ .hsw = { 0x00000018, 0x0000009D, 0x0 } },
    346	{ .hsw = { 0x00004013, 0x00000080, 0x0 } },
    347	{ .hsw = { 0x80006013, 0x000000C0, 0x3 } },
    348	{ .hsw = { 0x00000018, 0x0000008A, 0x0 } },
    349	{ .hsw = { 0x80003015, 0x000000C0, 0x3 } },	/* Default */
    350	{ .hsw = { 0x80003015, 0x000000C0, 0x3 } },
    351	{ .hsw = { 0x80000018, 0x000000C0, 0x3 } },
    352};
    353
    354static const struct intel_ddi_buf_trans skl_y_trans_hdmi = {
    355	.entries = _skl_y_trans_hdmi,
    356	.num_entries = ARRAY_SIZE(_skl_y_trans_hdmi),
    357	.hdmi_default_entry = 8,
    358};
    359
    360static const union intel_ddi_buf_trans_entry _bxt_trans_dp[] = {
    361						/* Idx	NT mV diff	db  */
    362	{ .bxt = { 52,  0x9A, 0, 128, } },	/* 0:	400		0   */
    363	{ .bxt = { 78,  0x9A, 0, 85,  } },	/* 1:	400		3.5 */
    364	{ .bxt = { 104, 0x9A, 0, 64,  } },	/* 2:	400		6   */
    365	{ .bxt = { 154, 0x9A, 0, 43,  } },	/* 3:	400		9.5 */
    366	{ .bxt = { 77,  0x9A, 0, 128, } },	/* 4:	600		0   */
    367	{ .bxt = { 116, 0x9A, 0, 85,  } },	/* 5:	600		3.5 */
    368	{ .bxt = { 154, 0x9A, 0, 64,  } },	/* 6:	600		6   */
    369	{ .bxt = { 102, 0x9A, 0, 128, } },	/* 7:	800		0   */
    370	{ .bxt = { 154, 0x9A, 0, 85,  } },	/* 8:	800		3.5 */
    371	{ .bxt = { 154, 0x9A, 1, 128, } },	/* 9:	1200		0   */
    372};
    373
    374static const struct intel_ddi_buf_trans bxt_trans_dp = {
    375	.entries = _bxt_trans_dp,
    376	.num_entries = ARRAY_SIZE(_bxt_trans_dp),
    377};
    378
    379static const union intel_ddi_buf_trans_entry _bxt_trans_edp[] = {
    380					/* Idx	NT mV diff	db  */
    381	{ .bxt = { 26, 0, 0, 128, } },	/* 0:	200		0   */
    382	{ .bxt = { 38, 0, 0, 112, } },	/* 1:	200		1.5 */
    383	{ .bxt = { 48, 0, 0, 96,  } },	/* 2:	200		4   */
    384	{ .bxt = { 54, 0, 0, 69,  } },	/* 3:	200		6   */
    385	{ .bxt = { 32, 0, 0, 128, } },	/* 4:	250		0   */
    386	{ .bxt = { 48, 0, 0, 104, } },	/* 5:	250		1.5 */
    387	{ .bxt = { 54, 0, 0, 85,  } },	/* 6:	250		4   */
    388	{ .bxt = { 43, 0, 0, 128, } },	/* 7:	300		0   */
    389	{ .bxt = { 54, 0, 0, 101, } },	/* 8:	300		1.5 */
    390	{ .bxt = { 48, 0, 0, 128, } },	/* 9:	300		0   */
    391};
    392
    393static const struct intel_ddi_buf_trans bxt_trans_edp = {
    394	.entries = _bxt_trans_edp,
    395	.num_entries = ARRAY_SIZE(_bxt_trans_edp),
    396};
    397
    398/* BSpec has 2 recommended values - entries 0 and 8.
    399 * Using the entry with higher vswing.
    400 */
    401static const union intel_ddi_buf_trans_entry _bxt_trans_hdmi[] = {
    402						/* Idx	NT mV diff	db  */
    403	{ .bxt = { 52,  0x9A, 0, 128, } },	/* 0:	400		0   */
    404	{ .bxt = { 52,  0x9A, 0, 85,  } },	/* 1:	400		3.5 */
    405	{ .bxt = { 52,  0x9A, 0, 64,  } },	/* 2:	400		6   */
    406	{ .bxt = { 42,  0x9A, 0, 43,  } },	/* 3:	400		9.5 */
    407	{ .bxt = { 77,  0x9A, 0, 128, } },	/* 4:	600		0   */
    408	{ .bxt = { 77,  0x9A, 0, 85,  } },	/* 5:	600		3.5 */
    409	{ .bxt = { 77,  0x9A, 0, 64,  } },	/* 6:	600		6   */
    410	{ .bxt = { 102, 0x9A, 0, 128, } },	/* 7:	800		0   */
    411	{ .bxt = { 102, 0x9A, 0, 85,  } },	/* 8:	800		3.5 */
    412	{ .bxt = { 154, 0x9A, 1, 128, } },	/* 9:	1200		0   */
    413};
    414
    415static const struct intel_ddi_buf_trans bxt_trans_hdmi = {
    416	.entries = _bxt_trans_hdmi,
    417	.num_entries = ARRAY_SIZE(_bxt_trans_hdmi),
    418	.hdmi_default_entry = ARRAY_SIZE(_bxt_trans_hdmi) - 1,
    419};
    420
    421/* icl_combo_phy_trans */
    422static const union intel_ddi_buf_trans_entry _icl_combo_phy_trans_dp_hbr2_edp_hbr3[] = {
    423							/* NT mV Trans mV db    */
    424	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    425	{ .icl = { 0xA, 0x4F, 0x37, 0x00, 0x08 } },	/* 350   500      3.1   */
    426	{ .icl = { 0xC, 0x71, 0x2F, 0x00, 0x10 } },	/* 350   700      6.0   */
    427	{ .icl = { 0x6, 0x7F, 0x2B, 0x00, 0x14 } },	/* 350   900      8.2   */
    428	{ .icl = { 0xA, 0x4C, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    429	{ .icl = { 0xC, 0x73, 0x34, 0x00, 0x0B } },	/* 500   700      2.9   */
    430	{ .icl = { 0x6, 0x7F, 0x2F, 0x00, 0x10 } },	/* 500   900      5.1   */
    431	{ .icl = { 0xC, 0x6C, 0x3C, 0x00, 0x03 } },	/* 650   700      0.6   */
    432	{ .icl = { 0x6, 0x7F, 0x35, 0x00, 0x0A } },	/* 600   900      3.5   */
    433	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    434};
    435
    436static const struct intel_ddi_buf_trans icl_combo_phy_trans_dp_hbr2_edp_hbr3 = {
    437	.entries = _icl_combo_phy_trans_dp_hbr2_edp_hbr3,
    438	.num_entries = ARRAY_SIZE(_icl_combo_phy_trans_dp_hbr2_edp_hbr3),
    439};
    440
    441static const union intel_ddi_buf_trans_entry _icl_combo_phy_trans_edp_hbr2[] = {
    442							/* NT mV Trans mV db    */
    443	{ .icl = { 0x0, 0x7F, 0x3F, 0x00, 0x00 } },	/* 200   200      0.0   */
    444	{ .icl = { 0x8, 0x7F, 0x38, 0x00, 0x07 } },	/* 200   250      1.9   */
    445	{ .icl = { 0x1, 0x7F, 0x33, 0x00, 0x0C } },	/* 200   300      3.5   */
    446	{ .icl = { 0x9, 0x7F, 0x31, 0x00, 0x0E } },	/* 200   350      4.9   */
    447	{ .icl = { 0x8, 0x7F, 0x3F, 0x00, 0x00 } },	/* 250   250      0.0   */
    448	{ .icl = { 0x1, 0x7F, 0x38, 0x00, 0x07 } },	/* 250   300      1.6   */
    449	{ .icl = { 0x9, 0x7F, 0x35, 0x00, 0x0A } },	/* 250   350      2.9   */
    450	{ .icl = { 0x1, 0x7F, 0x3F, 0x00, 0x00 } },	/* 300   300      0.0   */
    451	{ .icl = { 0x9, 0x7F, 0x38, 0x00, 0x07 } },	/* 300   350      1.3   */
    452	{ .icl = { 0x9, 0x7F, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    453};
    454
    455static const struct intel_ddi_buf_trans icl_combo_phy_trans_edp_hbr2 = {
    456	.entries = _icl_combo_phy_trans_edp_hbr2,
    457	.num_entries = ARRAY_SIZE(_icl_combo_phy_trans_edp_hbr2),
    458};
    459
    460static const union intel_ddi_buf_trans_entry _icl_combo_phy_trans_hdmi[] = {
    461							/* NT mV Trans mV db    */
    462	{ .icl = { 0xA, 0x60, 0x3F, 0x00, 0x00 } },	/* 450   450      0.0   */
    463	{ .icl = { 0xB, 0x73, 0x36, 0x00, 0x09 } },	/* 450   650      3.2   */
    464	{ .icl = { 0x6, 0x7F, 0x31, 0x00, 0x0E } },	/* 450   850      5.5   */
    465	{ .icl = { 0xB, 0x73, 0x3F, 0x00, 0x00 } },	/* 650   650      0.0   ALS */
    466	{ .icl = { 0x6, 0x7F, 0x37, 0x00, 0x08 } },	/* 650   850      2.3   */
    467	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 850   850      0.0   */
    468	{ .icl = { 0x6, 0x7F, 0x35, 0x00, 0x0A } },	/* 600   850      3.0   */
    469};
    470
    471static const struct intel_ddi_buf_trans icl_combo_phy_trans_hdmi = {
    472	.entries = _icl_combo_phy_trans_hdmi,
    473	.num_entries = ARRAY_SIZE(_icl_combo_phy_trans_hdmi),
    474	.hdmi_default_entry = ARRAY_SIZE(_icl_combo_phy_trans_hdmi) - 1,
    475};
    476
    477static const union intel_ddi_buf_trans_entry _ehl_combo_phy_trans_dp[] = {
    478							/* NT mV Trans mV db    */
    479	{ .icl = { 0xA, 0x33, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    480	{ .icl = { 0xA, 0x47, 0x38, 0x00, 0x07 } },	/* 350   500      3.1   */
    481	{ .icl = { 0xC, 0x64, 0x33, 0x00, 0x0C } },	/* 350   700      6.0   */
    482	{ .icl = { 0x6, 0x7F, 0x2F, 0x00, 0x10 } },	/* 350   900      8.2   */
    483	{ .icl = { 0xA, 0x46, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    484	{ .icl = { 0xC, 0x64, 0x37, 0x00, 0x08 } },	/* 500   700      2.9   */
    485	{ .icl = { 0x6, 0x7F, 0x32, 0x00, 0x0D } },	/* 500   900      5.1   */
    486	{ .icl = { 0xC, 0x61, 0x3F, 0x00, 0x00 } },	/* 650   700      0.6   */
    487	{ .icl = { 0x6, 0x7F, 0x37, 0x00, 0x08 } },	/* 600   900      3.5   */
    488	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    489};
    490
    491static const struct intel_ddi_buf_trans ehl_combo_phy_trans_dp = {
    492	.entries = _ehl_combo_phy_trans_dp,
    493	.num_entries = ARRAY_SIZE(_ehl_combo_phy_trans_dp),
    494};
    495
    496static const union intel_ddi_buf_trans_entry _ehl_combo_phy_trans_edp_hbr2[] = {
    497							/* NT mV Trans mV db    */
    498	{ .icl = { 0x8, 0x7F, 0x3F, 0x00, 0x00 } },	/* 200   200      0.0   */
    499	{ .icl = { 0x8, 0x7F, 0x3F, 0x00, 0x00 } },	/* 200   250      1.9   */
    500	{ .icl = { 0x1, 0x7F, 0x3D, 0x00, 0x02 } },	/* 200   300      3.5   */
    501	{ .icl = { 0xA, 0x35, 0x39, 0x00, 0x06 } },	/* 200   350      4.9   */
    502	{ .icl = { 0x8, 0x7F, 0x3F, 0x00, 0x00 } },	/* 250   250      0.0   */
    503	{ .icl = { 0x1, 0x7F, 0x3C, 0x00, 0x03 } },	/* 250   300      1.6   */
    504	{ .icl = { 0xA, 0x35, 0x39, 0x00, 0x06 } },	/* 250   350      2.9   */
    505	{ .icl = { 0x1, 0x7F, 0x3F, 0x00, 0x00 } },	/* 300   300      0.0   */
    506	{ .icl = { 0xA, 0x35, 0x38, 0x00, 0x07 } },	/* 300   350      1.3   */
    507	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    508};
    509
    510static const struct intel_ddi_buf_trans ehl_combo_phy_trans_edp_hbr2 = {
    511	.entries = _ehl_combo_phy_trans_edp_hbr2,
    512	.num_entries = ARRAY_SIZE(_ehl_combo_phy_trans_edp_hbr2),
    513};
    514
    515static const union intel_ddi_buf_trans_entry _jsl_combo_phy_trans_edp_hbr[] = {
    516							/* NT mV Trans mV db    */
    517	{ .icl = { 0x8, 0x7F, 0x3F, 0x00, 0x00 } },	/* 200   200      0.0   */
    518	{ .icl = { 0x8, 0x7F, 0x38, 0x00, 0x07 } },	/* 200   250      1.9   */
    519	{ .icl = { 0x1, 0x7F, 0x33, 0x00, 0x0C } },	/* 200   300      3.5   */
    520	{ .icl = { 0xA, 0x35, 0x36, 0x00, 0x09 } },	/* 200   350      4.9   */
    521	{ .icl = { 0x8, 0x7F, 0x3F, 0x00, 0x00 } },	/* 250   250      0.0   */
    522	{ .icl = { 0x1, 0x7F, 0x38, 0x00, 0x07 } },	/* 250   300      1.6   */
    523	{ .icl = { 0xA, 0x35, 0x35, 0x00, 0x0A } },	/* 250   350      2.9   */
    524	{ .icl = { 0x1, 0x7F, 0x3F, 0x00, 0x00 } },	/* 300   300      0.0   */
    525	{ .icl = { 0xA, 0x35, 0x38, 0x00, 0x07 } },	/* 300   350      1.3   */
    526	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    527};
    528
    529static const struct intel_ddi_buf_trans jsl_combo_phy_trans_edp_hbr = {
    530	.entries = _jsl_combo_phy_trans_edp_hbr,
    531	.num_entries = ARRAY_SIZE(_jsl_combo_phy_trans_edp_hbr),
    532};
    533
    534static const union intel_ddi_buf_trans_entry _jsl_combo_phy_trans_edp_hbr2[] = {
    535							/* NT mV Trans mV db    */
    536	{ .icl = { 0x8, 0x7F, 0x3F, 0x00, 0x00 } },	/* 200   200      0.0   */
    537	{ .icl = { 0x8, 0x7F, 0x3F, 0x00, 0x00 } },	/* 200   250      1.9   */
    538	{ .icl = { 0x1, 0x7F, 0x3D, 0x00, 0x02 } },	/* 200   300      3.5   */
    539	{ .icl = { 0xA, 0x35, 0x38, 0x00, 0x07 } },	/* 200   350      4.9   */
    540	{ .icl = { 0x8, 0x7F, 0x3F, 0x00, 0x00 } },	/* 250   250      0.0   */
    541	{ .icl = { 0x1, 0x7F, 0x3F, 0x00, 0x00 } },	/* 250   300      1.6   */
    542	{ .icl = { 0xA, 0x35, 0x3A, 0x00, 0x05 } },	/* 250   350      2.9   */
    543	{ .icl = { 0x1, 0x7F, 0x3F, 0x00, 0x00 } },	/* 300   300      0.0   */
    544	{ .icl = { 0xA, 0x35, 0x38, 0x00, 0x07 } },	/* 300   350      1.3   */
    545	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    546};
    547
    548static const struct intel_ddi_buf_trans jsl_combo_phy_trans_edp_hbr2 = {
    549	.entries = _jsl_combo_phy_trans_edp_hbr2,
    550	.num_entries = ARRAY_SIZE(_jsl_combo_phy_trans_edp_hbr2),
    551};
    552
    553static const union intel_ddi_buf_trans_entry _dg1_combo_phy_trans_dp_rbr_hbr[] = {
    554							/* NT mV Trans mV db    */
    555	{ .icl = { 0xA, 0x32, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    556	{ .icl = { 0xA, 0x48, 0x35, 0x00, 0x0A } },	/* 350   500      3.1   */
    557	{ .icl = { 0xC, 0x63, 0x2F, 0x00, 0x10 } },	/* 350   700      6.0   */
    558	{ .icl = { 0x6, 0x7F, 0x2C, 0x00, 0x13 } },	/* 350   900      8.2   */
    559	{ .icl = { 0xA, 0x43, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    560	{ .icl = { 0xC, 0x60, 0x36, 0x00, 0x09 } },	/* 500   700      2.9   */
    561	{ .icl = { 0x6, 0x7F, 0x30, 0x00, 0x0F } },	/* 500   900      5.1   */
    562	{ .icl = { 0xC, 0x60, 0x3F, 0x00, 0x00 } },	/* 650   700      0.6   */
    563	{ .icl = { 0x6, 0x7F, 0x37, 0x00, 0x08 } },	/* 600   900      3.5   */
    564	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    565};
    566
    567static const struct intel_ddi_buf_trans dg1_combo_phy_trans_dp_rbr_hbr = {
    568	.entries = _dg1_combo_phy_trans_dp_rbr_hbr,
    569	.num_entries = ARRAY_SIZE(_dg1_combo_phy_trans_dp_rbr_hbr),
    570};
    571
    572static const union intel_ddi_buf_trans_entry _dg1_combo_phy_trans_dp_hbr2_hbr3[] = {
    573							/* NT mV Trans mV db    */
    574	{ .icl = { 0xA, 0x32, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    575	{ .icl = { 0xA, 0x48, 0x35, 0x00, 0x0A } },	/* 350   500      3.1   */
    576	{ .icl = { 0xC, 0x63, 0x2F, 0x00, 0x10 } },	/* 350   700      6.0   */
    577	{ .icl = { 0x6, 0x7F, 0x2C, 0x00, 0x13 } },	/* 350   900      8.2   */
    578	{ .icl = { 0xA, 0x43, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    579	{ .icl = { 0xC, 0x60, 0x36, 0x00, 0x09 } },	/* 500   700      2.9   */
    580	{ .icl = { 0x6, 0x7F, 0x30, 0x00, 0x0F } },	/* 500   900      5.1   */
    581	{ .icl = { 0xC, 0x58, 0x3F, 0x00, 0x00 } },	/* 650   700      0.6   */
    582	{ .icl = { 0x6, 0x7F, 0x35, 0x00, 0x0A } },	/* 600   900      3.5   */
    583	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    584};
    585
    586static const struct intel_ddi_buf_trans dg1_combo_phy_trans_dp_hbr2_hbr3 = {
    587	.entries = _dg1_combo_phy_trans_dp_hbr2_hbr3,
    588	.num_entries = ARRAY_SIZE(_dg1_combo_phy_trans_dp_hbr2_hbr3),
    589};
    590
    591static const union intel_ddi_buf_trans_entry _icl_mg_phy_trans_rbr_hbr[] = {
    592					/* Voltage swing  pre-emphasis */
    593	{ .mg = { 0x18, 0x00, 0x00 } },	/* 0              0   */
    594	{ .mg = { 0x1D, 0x00, 0x05 } },	/* 0              1   */
    595	{ .mg = { 0x24, 0x00, 0x0C } },	/* 0              2   */
    596	{ .mg = { 0x2B, 0x00, 0x14 } },	/* 0              3   */
    597	{ .mg = { 0x21, 0x00, 0x00 } },	/* 1              0   */
    598	{ .mg = { 0x2B, 0x00, 0x08 } },	/* 1              1   */
    599	{ .mg = { 0x30, 0x00, 0x0F } },	/* 1              2   */
    600	{ .mg = { 0x31, 0x00, 0x03 } },	/* 2              0   */
    601	{ .mg = { 0x34, 0x00, 0x0B } },	/* 2              1   */
    602	{ .mg = { 0x3F, 0x00, 0x00 } },	/* 3              0   */
    603};
    604
    605static const struct intel_ddi_buf_trans icl_mg_phy_trans_rbr_hbr = {
    606	.entries = _icl_mg_phy_trans_rbr_hbr,
    607	.num_entries = ARRAY_SIZE(_icl_mg_phy_trans_rbr_hbr),
    608};
    609
    610static const union intel_ddi_buf_trans_entry _icl_mg_phy_trans_hbr2_hbr3[] = {
    611					/* Voltage swing  pre-emphasis */
    612	{ .mg = { 0x18, 0x00, 0x00 } },	/* 0              0   */
    613	{ .mg = { 0x1D, 0x00, 0x05 } },	/* 0              1   */
    614	{ .mg = { 0x24, 0x00, 0x0C } },	/* 0              2   */
    615	{ .mg = { 0x2B, 0x00, 0x14 } },	/* 0              3   */
    616	{ .mg = { 0x26, 0x00, 0x00 } },	/* 1              0   */
    617	{ .mg = { 0x2C, 0x00, 0x07 } },	/* 1              1   */
    618	{ .mg = { 0x33, 0x00, 0x0C } },	/* 1              2   */
    619	{ .mg = { 0x2E, 0x00, 0x00 } },	/* 2              0   */
    620	{ .mg = { 0x36, 0x00, 0x09 } },	/* 2              1   */
    621	{ .mg = { 0x3F, 0x00, 0x00 } },	/* 3              0   */
    622};
    623
    624static const struct intel_ddi_buf_trans icl_mg_phy_trans_hbr2_hbr3 = {
    625	.entries = _icl_mg_phy_trans_hbr2_hbr3,
    626	.num_entries = ARRAY_SIZE(_icl_mg_phy_trans_hbr2_hbr3),
    627};
    628
    629static const union intel_ddi_buf_trans_entry _icl_mg_phy_trans_hdmi[] = {
    630					/* HDMI Preset	VS	Pre-emph */
    631	{ .mg = { 0x1A, 0x0, 0x0 } },	/* 1		400mV	0dB */
    632	{ .mg = { 0x20, 0x0, 0x0 } },	/* 2		500mV	0dB */
    633	{ .mg = { 0x29, 0x0, 0x0 } },	/* 3		650mV	0dB */
    634	{ .mg = { 0x32, 0x0, 0x0 } },	/* 4		800mV	0dB */
    635	{ .mg = { 0x3F, 0x0, 0x0 } },	/* 5		1000mV	0dB */
    636	{ .mg = { 0x3A, 0x0, 0x5 } },	/* 6		Full	-1.5 dB */
    637	{ .mg = { 0x39, 0x0, 0x6 } },	/* 7		Full	-1.8 dB */
    638	{ .mg = { 0x38, 0x0, 0x7 } },	/* 8		Full	-2 dB */
    639	{ .mg = { 0x37, 0x0, 0x8 } },	/* 9		Full	-2.5 dB */
    640	{ .mg = { 0x36, 0x0, 0x9 } },	/* 10		Full	-3 dB */
    641};
    642
    643static const struct intel_ddi_buf_trans icl_mg_phy_trans_hdmi = {
    644	.entries = _icl_mg_phy_trans_hdmi,
    645	.num_entries = ARRAY_SIZE(_icl_mg_phy_trans_hdmi),
    646	.hdmi_default_entry = ARRAY_SIZE(_icl_mg_phy_trans_hdmi) - 1,
    647};
    648
    649static const union intel_ddi_buf_trans_entry _tgl_dkl_phy_trans_dp_hbr[] = {
    650					/* VS	pre-emp	Non-trans mV	Pre-emph dB */
    651	{ .dkl = { 0x7, 0x0, 0x00 } },	/* 0	0	400mV		0 dB */
    652	{ .dkl = { 0x5, 0x0, 0x05 } },	/* 0	1	400mV		3.5 dB */
    653	{ .dkl = { 0x2, 0x0, 0x0B } },	/* 0	2	400mV		6 dB */
    654	{ .dkl = { 0x0, 0x0, 0x18 } },	/* 0	3	400mV		9.5 dB */
    655	{ .dkl = { 0x5, 0x0, 0x00 } },	/* 1	0	600mV		0 dB */
    656	{ .dkl = { 0x2, 0x0, 0x08 } },	/* 1	1	600mV		3.5 dB */
    657	{ .dkl = { 0x0, 0x0, 0x14 } },	/* 1	2	600mV		6 dB */
    658	{ .dkl = { 0x2, 0x0, 0x00 } },	/* 2	0	800mV		0 dB */
    659	{ .dkl = { 0x0, 0x0, 0x0B } },	/* 2	1	800mV		3.5 dB */
    660	{ .dkl = { 0x0, 0x0, 0x00 } },	/* 3	0	1200mV		0 dB HDMI default */
    661};
    662
    663static const struct intel_ddi_buf_trans tgl_dkl_phy_trans_dp_hbr = {
    664	.entries = _tgl_dkl_phy_trans_dp_hbr,
    665	.num_entries = ARRAY_SIZE(_tgl_dkl_phy_trans_dp_hbr),
    666};
    667
    668static const union intel_ddi_buf_trans_entry _tgl_dkl_phy_trans_dp_hbr2[] = {
    669					/* VS	pre-emp	Non-trans mV	Pre-emph dB */
    670	{ .dkl = { 0x7, 0x0, 0x00 } },	/* 0	0	400mV		0 dB */
    671	{ .dkl = { 0x5, 0x0, 0x05 } },	/* 0	1	400mV		3.5 dB */
    672	{ .dkl = { 0x2, 0x0, 0x0B } },	/* 0	2	400mV		6 dB */
    673	{ .dkl = { 0x0, 0x0, 0x19 } },	/* 0	3	400mV		9.5 dB */
    674	{ .dkl = { 0x5, 0x0, 0x00 } },	/* 1	0	600mV		0 dB */
    675	{ .dkl = { 0x2, 0x0, 0x08 } },	/* 1	1	600mV		3.5 dB */
    676	{ .dkl = { 0x0, 0x0, 0x14 } },	/* 1	2	600mV		6 dB */
    677	{ .dkl = { 0x2, 0x0, 0x00 } },	/* 2	0	800mV		0 dB */
    678	{ .dkl = { 0x0, 0x0, 0x0B } },	/* 2	1	800mV		3.5 dB */
    679	{ .dkl = { 0x0, 0x0, 0x00 } },	/* 3	0	1200mV		0 dB HDMI default */
    680};
    681
    682static const struct intel_ddi_buf_trans tgl_dkl_phy_trans_dp_hbr2 = {
    683	.entries = _tgl_dkl_phy_trans_dp_hbr2,
    684	.num_entries = ARRAY_SIZE(_tgl_dkl_phy_trans_dp_hbr2),
    685};
    686
    687static const union intel_ddi_buf_trans_entry _tgl_dkl_phy_trans_hdmi[] = {
    688					/* HDMI Preset	VS	Pre-emph */
    689	{ .dkl = { 0x7, 0x0, 0x0 } },	/* 1		400mV	0dB */
    690	{ .dkl = { 0x6, 0x0, 0x0 } },	/* 2		500mV	0dB */
    691	{ .dkl = { 0x4, 0x0, 0x0 } },	/* 3		650mV	0dB */
    692	{ .dkl = { 0x2, 0x0, 0x0 } },	/* 4		800mV	0dB */
    693	{ .dkl = { 0x0, 0x0, 0x0 } },	/* 5		1000mV	0dB */
    694	{ .dkl = { 0x0, 0x0, 0x5 } },	/* 6		Full	-1.5 dB */
    695	{ .dkl = { 0x0, 0x0, 0x6 } },	/* 7		Full	-1.8 dB */
    696	{ .dkl = { 0x0, 0x0, 0x7 } },	/* 8		Full	-2 dB */
    697	{ .dkl = { 0x0, 0x0, 0x8 } },	/* 9		Full	-2.5 dB */
    698	{ .dkl = { 0x0, 0x0, 0xA } },	/* 10		Full	-3 dB */
    699};
    700
    701static const struct intel_ddi_buf_trans tgl_dkl_phy_trans_hdmi = {
    702	.entries = _tgl_dkl_phy_trans_hdmi,
    703	.num_entries = ARRAY_SIZE(_tgl_dkl_phy_trans_hdmi),
    704	.hdmi_default_entry = ARRAY_SIZE(_tgl_dkl_phy_trans_hdmi) - 1,
    705};
    706
    707static const union intel_ddi_buf_trans_entry _tgl_combo_phy_trans_dp_hbr[] = {
    708							/* NT mV Trans mV db    */
    709	{ .icl = { 0xA, 0x32, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    710	{ .icl = { 0xA, 0x4F, 0x37, 0x00, 0x08 } },	/* 350   500      3.1   */
    711	{ .icl = { 0xC, 0x71, 0x2F, 0x00, 0x10 } },	/* 350   700      6.0   */
    712	{ .icl = { 0x6, 0x7D, 0x2B, 0x00, 0x14 } },	/* 350   900      8.2   */
    713	{ .icl = { 0xA, 0x4C, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    714	{ .icl = { 0xC, 0x73, 0x34, 0x00, 0x0B } },	/* 500   700      2.9   */
    715	{ .icl = { 0x6, 0x7F, 0x2F, 0x00, 0x10 } },	/* 500   900      5.1   */
    716	{ .icl = { 0xC, 0x6C, 0x3C, 0x00, 0x03 } },	/* 650   700      0.6   */
    717	{ .icl = { 0x6, 0x7F, 0x35, 0x00, 0x0A } },	/* 600   900      3.5   */
    718	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    719};
    720
    721static const struct intel_ddi_buf_trans tgl_combo_phy_trans_dp_hbr = {
    722	.entries = _tgl_combo_phy_trans_dp_hbr,
    723	.num_entries = ARRAY_SIZE(_tgl_combo_phy_trans_dp_hbr),
    724};
    725
    726static const union intel_ddi_buf_trans_entry _tgl_combo_phy_trans_dp_hbr2[] = {
    727							/* NT mV Trans mV db    */
    728	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    729	{ .icl = { 0xA, 0x4F, 0x37, 0x00, 0x08 } },	/* 350   500      3.1   */
    730	{ .icl = { 0xC, 0x63, 0x2F, 0x00, 0x10 } },	/* 350   700      6.0   */
    731	{ .icl = { 0x6, 0x7F, 0x2B, 0x00, 0x14 } },	/* 350   900      8.2   */
    732	{ .icl = { 0xA, 0x47, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    733	{ .icl = { 0xC, 0x63, 0x34, 0x00, 0x0B } },	/* 500   700      2.9   */
    734	{ .icl = { 0x6, 0x7F, 0x2F, 0x00, 0x10 } },	/* 500   900      5.1   */
    735	{ .icl = { 0xC, 0x61, 0x3C, 0x00, 0x03 } },	/* 650   700      0.6   */
    736	{ .icl = { 0x6, 0x7B, 0x35, 0x00, 0x0A } },	/* 600   900      3.5   */
    737	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    738};
    739
    740static const struct intel_ddi_buf_trans tgl_combo_phy_trans_dp_hbr2 = {
    741	.entries = _tgl_combo_phy_trans_dp_hbr2,
    742	.num_entries = ARRAY_SIZE(_tgl_combo_phy_trans_dp_hbr2),
    743};
    744
    745static const union intel_ddi_buf_trans_entry _tgl_uy_combo_phy_trans_dp_hbr2[] = {
    746							/* NT mV Trans mV db    */
    747	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    748	{ .icl = { 0xA, 0x4F, 0x36, 0x00, 0x09 } },	/* 350   500      3.1   */
    749	{ .icl = { 0xC, 0x60, 0x32, 0x00, 0x0D } },	/* 350   700      6.0   */
    750	{ .icl = { 0xC, 0x7F, 0x2D, 0x00, 0x12 } },	/* 350   900      8.2   */
    751	{ .icl = { 0xC, 0x47, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    752	{ .icl = { 0xC, 0x6F, 0x36, 0x00, 0x09 } },	/* 500   700      2.9   */
    753	{ .icl = { 0x6, 0x7D, 0x32, 0x00, 0x0D } },	/* 500   900      5.1   */
    754	{ .icl = { 0x6, 0x60, 0x3C, 0x00, 0x03 } },	/* 650   700      0.6   */
    755	{ .icl = { 0x6, 0x7F, 0x34, 0x00, 0x0B } },	/* 600   900      3.5   */
    756	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    757};
    758
    759static const struct intel_ddi_buf_trans tgl_uy_combo_phy_trans_dp_hbr2 = {
    760	.entries = _tgl_uy_combo_phy_trans_dp_hbr2,
    761	.num_entries = ARRAY_SIZE(_tgl_uy_combo_phy_trans_dp_hbr2),
    762};
    763
    764/*
    765 * Cloned the HOBL entry to comply with the voltage and pre-emphasis entries
    766 * that DisplayPort specification requires
    767 */
    768static const union intel_ddi_buf_trans_entry _tgl_combo_phy_trans_edp_hbr2_hobl[] = {
    769							/* VS	pre-emp	*/
    770	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 0	0	*/
    771	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 0	1	*/
    772	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 0	2	*/
    773	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 0	3	*/
    774	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 1	0	*/
    775	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 1	1	*/
    776	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 1	2	*/
    777	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 2	0	*/
    778	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 2	1	*/
    779};
    780
    781static const struct intel_ddi_buf_trans tgl_combo_phy_trans_edp_hbr2_hobl = {
    782	.entries = _tgl_combo_phy_trans_edp_hbr2_hobl,
    783	.num_entries = ARRAY_SIZE(_tgl_combo_phy_trans_edp_hbr2_hobl),
    784};
    785
    786static const union intel_ddi_buf_trans_entry _rkl_combo_phy_trans_dp_hbr[] = {
    787							/* NT mV Trans mV db    */
    788	{ .icl = { 0xA, 0x2F, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    789	{ .icl = { 0xA, 0x4F, 0x37, 0x00, 0x08 } },	/* 350   500      3.1   */
    790	{ .icl = { 0xC, 0x63, 0x2F, 0x00, 0x10 } },	/* 350   700      6.0   */
    791	{ .icl = { 0x6, 0x7D, 0x2A, 0x00, 0x15 } },	/* 350   900      8.2   */
    792	{ .icl = { 0xA, 0x4C, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    793	{ .icl = { 0xC, 0x73, 0x34, 0x00, 0x0B } },	/* 500   700      2.9   */
    794	{ .icl = { 0x6, 0x7F, 0x2F, 0x00, 0x10 } },	/* 500   900      5.1   */
    795	{ .icl = { 0xC, 0x6E, 0x3E, 0x00, 0x01 } },	/* 650   700      0.6   */
    796	{ .icl = { 0x6, 0x7F, 0x35, 0x00, 0x0A } },	/* 600   900      3.5   */
    797	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    798};
    799
    800static const struct intel_ddi_buf_trans rkl_combo_phy_trans_dp_hbr = {
    801	.entries = _rkl_combo_phy_trans_dp_hbr,
    802	.num_entries = ARRAY_SIZE(_rkl_combo_phy_trans_dp_hbr),
    803};
    804
    805static const union intel_ddi_buf_trans_entry _rkl_combo_phy_trans_dp_hbr2_hbr3[] = {
    806							/* NT mV Trans mV db    */
    807	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    808	{ .icl = { 0xA, 0x50, 0x38, 0x00, 0x07 } },	/* 350   500      3.1   */
    809	{ .icl = { 0xC, 0x61, 0x33, 0x00, 0x0C } },	/* 350   700      6.0   */
    810	{ .icl = { 0x6, 0x7F, 0x2E, 0x00, 0x11 } },	/* 350   900      8.2   */
    811	{ .icl = { 0xA, 0x47, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    812	{ .icl = { 0xC, 0x5F, 0x38, 0x00, 0x07 } },	/* 500   700      2.9   */
    813	{ .icl = { 0x6, 0x7F, 0x2F, 0x00, 0x10 } },	/* 500   900      5.1   */
    814	{ .icl = { 0xC, 0x5F, 0x3F, 0x00, 0x00 } },	/* 650   700      0.6   */
    815	{ .icl = { 0x6, 0x7E, 0x36, 0x00, 0x09 } },	/* 600   900      3.5   */
    816	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    817};
    818
    819static const struct intel_ddi_buf_trans rkl_combo_phy_trans_dp_hbr2_hbr3 = {
    820	.entries = _rkl_combo_phy_trans_dp_hbr2_hbr3,
    821	.num_entries = ARRAY_SIZE(_rkl_combo_phy_trans_dp_hbr2_hbr3),
    822};
    823
    824static const union intel_ddi_buf_trans_entry _adls_combo_phy_trans_dp_hbr2_hbr3[] = {
    825							/* NT mV Trans mV db    */
    826	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    827	{ .icl = { 0xA, 0x4F, 0x37, 0x00, 0x08 } },	/* 350   500      3.1   */
    828	{ .icl = { 0xC, 0x63, 0x31, 0x00, 0x0E } },	/* 350   700      6.0   */
    829	{ .icl = { 0x6, 0x7F, 0x2C, 0x00, 0x13 } },	/* 350   900      8.2   */
    830	{ .icl = { 0xA, 0x47, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    831	{ .icl = { 0xC, 0x63, 0x37, 0x00, 0x08 } },	/* 500   700      2.9   */
    832	{ .icl = { 0x6, 0x73, 0x32, 0x00, 0x0D } },	/* 500   900      5.1   */
    833	{ .icl = { 0xC, 0x58, 0x3F, 0x00, 0x00 } },	/* 650   700      0.6   */
    834	{ .icl = { 0x6, 0x7F, 0x35, 0x00, 0x0A } },	/* 600   900      3.5   */
    835	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    836};
    837
    838static const struct intel_ddi_buf_trans adls_combo_phy_trans_dp_hbr2_hbr3 = {
    839	.entries = _adls_combo_phy_trans_dp_hbr2_hbr3,
    840	.num_entries = ARRAY_SIZE(_adls_combo_phy_trans_dp_hbr2_hbr3),
    841};
    842
    843static const union intel_ddi_buf_trans_entry _adls_combo_phy_trans_edp_hbr2[] = {
    844							/* NT mV Trans mV db    */
    845	{ .icl = { 0x9, 0x73, 0x3D, 0x00, 0x02 } },	/* 200   200      0.0   */
    846	{ .icl = { 0x9, 0x7A, 0x3C, 0x00, 0x03 } },	/* 200   250      1.9   */
    847	{ .icl = { 0x9, 0x7F, 0x3B, 0x00, 0x04 } },	/* 200   300      3.5   */
    848	{ .icl = { 0x4, 0x6C, 0x33, 0x00, 0x0C } },	/* 200   350      4.9   */
    849	{ .icl = { 0x2, 0x73, 0x3A, 0x00, 0x05 } },	/* 250   250      0.0   */
    850	{ .icl = { 0x2, 0x7C, 0x38, 0x00, 0x07 } },	/* 250   300      1.6   */
    851	{ .icl = { 0x4, 0x5A, 0x36, 0x00, 0x09 } },	/* 250   350      2.9   */
    852	{ .icl = { 0x4, 0x57, 0x3D, 0x00, 0x02 } },	/* 300   300      0.0   */
    853	{ .icl = { 0x4, 0x65, 0x38, 0x00, 0x07 } },	/* 300   350      1.3   */
    854	{ .icl = { 0x4, 0x6C, 0x3A, 0x00, 0x05 } },	/* 350   350      0.0   */
    855};
    856
    857static const struct intel_ddi_buf_trans adls_combo_phy_trans_edp_hbr2 = {
    858	.entries = _adls_combo_phy_trans_edp_hbr2,
    859	.num_entries = ARRAY_SIZE(_adls_combo_phy_trans_edp_hbr2),
    860};
    861
    862static const union intel_ddi_buf_trans_entry _adls_combo_phy_trans_edp_hbr3[] = {
    863							/* NT mV Trans mV db    */
    864	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    865	{ .icl = { 0xA, 0x4F, 0x37, 0x00, 0x08 } },	/* 350   500      3.1   */
    866	{ .icl = { 0xC, 0x63, 0x31, 0x00, 0x0E } },	/* 350   700      6.0   */
    867	{ .icl = { 0x6, 0x7F, 0x2C, 0x00, 0x13 } },	/* 350   900      8.2   */
    868	{ .icl = { 0xA, 0x47, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    869	{ .icl = { 0xC, 0x63, 0x37, 0x00, 0x08 } },	/* 500   700      2.9   */
    870	{ .icl = { 0x6, 0x73, 0x32, 0x00, 0x0D } },	/* 500   900      5.1   */
    871	{ .icl = { 0xC, 0x58, 0x3F, 0x00, 0x00 } },	/* 650   700      0.6   */
    872	{ .icl = { 0x6, 0x7F, 0x35, 0x00, 0x0A } },	/* 600   900      3.5   */
    873	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    874};
    875
    876static const struct intel_ddi_buf_trans adls_combo_phy_trans_edp_hbr3 = {
    877	.entries = _adls_combo_phy_trans_edp_hbr3,
    878	.num_entries = ARRAY_SIZE(_adls_combo_phy_trans_edp_hbr3),
    879};
    880
    881static const union intel_ddi_buf_trans_entry _adlp_combo_phy_trans_hdmi[] = {
    882							/* NT mV Trans mV    db   */
    883	{ .icl = { 0x6, 0x60, 0x3F, 0x00, 0x00 } },	/*  400    400      0.0 */
    884	{ .icl = { 0x6, 0x68, 0x3F, 0x00, 0x00 } },	/*  500    500      0.0 */
    885	{ .icl = { 0xA, 0x73, 0x3F, 0x00, 0x00 } },	/*  650    650      0.0 ALS */
    886	{ .icl = { 0xA, 0x78, 0x3F, 0x00, 0x00 } },	/*  800    800      0.0 */
    887	{ .icl = { 0xB, 0x7F, 0x3F, 0x00, 0x00 } },	/* 1000   1000      0.0 Re-timer */
    888	{ .icl = { 0xB, 0x7F, 0x3B, 0x00, 0x04 } },	/* Full    Red     -1.5 */
    889	{ .icl = { 0xB, 0x7F, 0x39, 0x00, 0x06 } },	/* Full    Red     -1.8 */
    890	{ .icl = { 0xB, 0x7F, 0x37, 0x00, 0x08 } },	/* Full    Red     -2.0 CRLS */
    891	{ .icl = { 0xB, 0x7F, 0x35, 0x00, 0x0A } },	/* Full    Red     -2.5 */
    892	{ .icl = { 0xB, 0x7F, 0x33, 0x00, 0x0C } },	/* Full    Red     -3.0 */
    893};
    894
    895static const struct intel_ddi_buf_trans adlp_combo_phy_trans_hdmi = {
    896	.entries = _adlp_combo_phy_trans_hdmi,
    897	.num_entries = ARRAY_SIZE(_adlp_combo_phy_trans_hdmi),
    898	.hdmi_default_entry = ARRAY_SIZE(_adlp_combo_phy_trans_hdmi) - 1,
    899};
    900
    901static const union intel_ddi_buf_trans_entry _adlp_combo_phy_trans_dp_hbr[] = {
    902							/* NT mV Trans mV db    */
    903	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    904	{ .icl = { 0xA, 0x4F, 0x37, 0x00, 0x08 } },	/* 350   500      3.1   */
    905	{ .icl = { 0xC, 0x71, 0x31, 0x00, 0x0E } },	/* 350   700      6.0   */
    906	{ .icl = { 0x6, 0x7F, 0x2C, 0x00, 0x13 } },	/* 350   900      8.2   */
    907	{ .icl = { 0xA, 0x4C, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    908	{ .icl = { 0xC, 0x73, 0x34, 0x00, 0x0B } },	/* 500   700      2.9   */
    909	{ .icl = { 0x6, 0x7F, 0x2F, 0x00, 0x10 } },	/* 500   900      5.1   */
    910	{ .icl = { 0xC, 0x7C, 0x3C, 0x00, 0x03 } },	/* 650   700      0.6   */
    911	{ .icl = { 0x6, 0x7F, 0x35, 0x00, 0x0A } },	/* 600   900      3.5   */
    912	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    913};
    914
    915static const struct intel_ddi_buf_trans adlp_combo_phy_trans_dp_hbr = {
    916	.entries = _adlp_combo_phy_trans_dp_hbr,
    917	.num_entries = ARRAY_SIZE(_adlp_combo_phy_trans_dp_hbr),
    918};
    919
    920static const union intel_ddi_buf_trans_entry _adlp_combo_phy_trans_dp_hbr2_hbr3[] = {
    921							/* NT mV Trans mV db    */
    922	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    923	{ .icl = { 0xA, 0x4F, 0x37, 0x00, 0x08 } },	/* 350   500      3.1   */
    924	{ .icl = { 0xC, 0x71, 0x30, 0x00, 0x0F } },	/* 350   700      6.0   */
    925	{ .icl = { 0x6, 0x7F, 0x2B, 0x00, 0x14 } },	/* 350   900      8.2   */
    926	{ .icl = { 0xA, 0x4C, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    927	{ .icl = { 0xC, 0x73, 0x34, 0x00, 0x0B } },	/* 500   700      2.9   */
    928	{ .icl = { 0x6, 0x7F, 0x30, 0x00, 0x0F } },	/* 500   900      5.1   */
    929	{ .icl = { 0xC, 0x63, 0x3F, 0x00, 0x00 } },	/* 650   700      0.6   */
    930	{ .icl = { 0x6, 0x7F, 0x38, 0x00, 0x07 } },	/* 600   900      3.5   */
    931	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    932};
    933
    934static const union intel_ddi_buf_trans_entry _adlp_combo_phy_trans_edp_hbr2[] = {
    935							/* NT mV Trans mV db    */
    936	{ .icl = { 0x4, 0x50, 0x38, 0x00, 0x07 } },	/* 200   200      0.0   */
    937	{ .icl = { 0x4, 0x58, 0x35, 0x00, 0x0A } },	/* 200   250      1.9   */
    938	{ .icl = { 0x4, 0x60, 0x34, 0x00, 0x0B } },	/* 200   300      3.5   */
    939	{ .icl = { 0x4, 0x6A, 0x32, 0x00, 0x0D } },	/* 200   350      4.9   */
    940	{ .icl = { 0x4, 0x5E, 0x38, 0x00, 0x07 } },	/* 250   250      0.0   */
    941	{ .icl = { 0x4, 0x61, 0x36, 0x00, 0x09 } },	/* 250   300      1.6   */
    942	{ .icl = { 0x4, 0x6B, 0x34, 0x00, 0x0B } },	/* 250   350      2.9   */
    943	{ .icl = { 0x4, 0x69, 0x39, 0x00, 0x06 } },	/* 300   300      0.0   */
    944	{ .icl = { 0x4, 0x73, 0x37, 0x00, 0x08 } },	/* 300   350      1.3   */
    945	{ .icl = { 0x4, 0x7A, 0x38, 0x00, 0x07 } },	/* 350   350      0.0   */
    946};
    947
    948static const union intel_ddi_buf_trans_entry _adlp_combo_phy_trans_dp_hbr2_edp_hbr3[] = {
    949							/* NT mV Trans mV db    */
    950	{ .icl = { 0xA, 0x35, 0x3F, 0x00, 0x00 } },	/* 350   350      0.0   */
    951	{ .icl = { 0xA, 0x4F, 0x37, 0x00, 0x08 } },	/* 350   500      3.1   */
    952	{ .icl = { 0xC, 0x71, 0x30, 0x00, 0x0f } },	/* 350   700      6.0   */
    953	{ .icl = { 0x6, 0x7F, 0x2B, 0x00, 0x14 } },	/* 350   900      8.2   */
    954	{ .icl = { 0xA, 0x4C, 0x3F, 0x00, 0x00 } },	/* 500   500      0.0   */
    955	{ .icl = { 0xC, 0x73, 0x34, 0x00, 0x0B } },	/* 500   700      2.9   */
    956	{ .icl = { 0x6, 0x7F, 0x2F, 0x00, 0x10 } },	/* 500   900      5.1   */
    957	{ .icl = { 0xC, 0x6C, 0x3C, 0x00, 0x03 } },	/* 650   700      0.6   */
    958	{ .icl = { 0x6, 0x7F, 0x35, 0x00, 0x0A } },	/* 600   900      3.5   */
    959	{ .icl = { 0x6, 0x7F, 0x3F, 0x00, 0x00 } },	/* 900   900      0.0   */
    960};
    961
    962static const struct intel_ddi_buf_trans adlp_combo_phy_trans_dp_hbr2_hbr3 = {
    963	.entries = _adlp_combo_phy_trans_dp_hbr2_hbr3,
    964	.num_entries = ARRAY_SIZE(_adlp_combo_phy_trans_dp_hbr2_hbr3),
    965};
    966
    967static const struct intel_ddi_buf_trans adlp_combo_phy_trans_edp_hbr3 = {
    968	.entries = _adlp_combo_phy_trans_dp_hbr2_edp_hbr3,
    969	.num_entries = ARRAY_SIZE(_adlp_combo_phy_trans_dp_hbr2_edp_hbr3),
    970};
    971
    972static const struct intel_ddi_buf_trans adlp_combo_phy_trans_edp_up_to_hbr2 = {
    973	.entries = _adlp_combo_phy_trans_edp_hbr2,
    974	.num_entries = ARRAY_SIZE(_adlp_combo_phy_trans_edp_hbr2),
    975};
    976
    977static const union intel_ddi_buf_trans_entry _adlp_dkl_phy_trans_dp_hbr[] = {
    978					/* VS	pre-emp	Non-trans mV	Pre-emph dB */
    979	{ .dkl = { 0x7, 0x0, 0x01 } },	/* 0	0	400mV		0 dB */
    980	{ .dkl = { 0x5, 0x0, 0x06 } },	/* 0	1	400mV		3.5 dB */
    981	{ .dkl = { 0x2, 0x0, 0x0B } },	/* 0	2	400mV		6 dB */
    982	{ .dkl = { 0x0, 0x0, 0x17 } },	/* 0	3	400mV		9.5 dB */
    983	{ .dkl = { 0x5, 0x0, 0x00 } },	/* 1	0	600mV		0 dB */
    984	{ .dkl = { 0x2, 0x0, 0x08 } },	/* 1	1	600mV		3.5 dB */
    985	{ .dkl = { 0x0, 0x0, 0x14 } },	/* 1	2	600mV		6 dB */
    986	{ .dkl = { 0x2, 0x0, 0x00 } },	/* 2	0	800mV		0 dB */
    987	{ .dkl = { 0x0, 0x0, 0x0B } },	/* 2	1	800mV		3.5 dB */
    988	{ .dkl = { 0x0, 0x0, 0x00 } },	/* 3	0	1200mV		0 dB */
    989};
    990
    991static const struct intel_ddi_buf_trans adlp_dkl_phy_trans_dp_hbr = {
    992	.entries = _adlp_dkl_phy_trans_dp_hbr,
    993	.num_entries = ARRAY_SIZE(_adlp_dkl_phy_trans_dp_hbr),
    994};
    995
    996static const union intel_ddi_buf_trans_entry _adlp_dkl_phy_trans_dp_hbr2_hbr3[] = {
    997					/* VS	pre-emp	Non-trans mV	Pre-emph dB */
    998	{ .dkl = { 0x7, 0x0, 0x00 } },	/* 0	0	400mV		0 dB */
    999	{ .dkl = { 0x5, 0x0, 0x04 } },	/* 0	1	400mV		3.5 dB */
   1000	{ .dkl = { 0x2, 0x0, 0x0A } },	/* 0	2	400mV		6 dB */
   1001	{ .dkl = { 0x0, 0x0, 0x18 } },	/* 0	3	400mV		9.5 dB */
   1002	{ .dkl = { 0x5, 0x0, 0x00 } },	/* 1	0	600mV		0 dB */
   1003	{ .dkl = { 0x2, 0x0, 0x06 } },	/* 1	1	600mV		3.5 dB */
   1004	{ .dkl = { 0x0, 0x0, 0x14 } },	/* 1	2	600mV		6 dB */
   1005	{ .dkl = { 0x2, 0x0, 0x00 } },	/* 2	0	800mV		0 dB */
   1006	{ .dkl = { 0x0, 0x0, 0x09 } },	/* 2	1	800mV		3.5 dB */
   1007	{ .dkl = { 0x0, 0x0, 0x00 } },	/* 3	0	1200mV		0 dB */
   1008};
   1009
   1010static const struct intel_ddi_buf_trans adlp_dkl_phy_trans_dp_hbr2_hbr3 = {
   1011	.entries = _adlp_dkl_phy_trans_dp_hbr2_hbr3,
   1012	.num_entries = ARRAY_SIZE(_adlp_dkl_phy_trans_dp_hbr2_hbr3),
   1013};
   1014
   1015static const union intel_ddi_buf_trans_entry _dg2_snps_trans[] = {
   1016	{ .snps = { 25, 0, 0 } },	/* VS 0, pre-emph 0 */
   1017	{ .snps = { 32, 0, 6 } },	/* VS 0, pre-emph 1 */
   1018	{ .snps = { 35, 0, 10 } },	/* VS 0, pre-emph 2 */
   1019	{ .snps = { 43, 0, 17 } },	/* VS 0, pre-emph 3 */
   1020	{ .snps = { 35, 0, 0 } },	/* VS 1, pre-emph 0 */
   1021	{ .snps = { 45, 0, 8 } },	/* VS 1, pre-emph 1 */
   1022	{ .snps = { 48, 0, 14 } },	/* VS 1, pre-emph 2 */
   1023	{ .snps = { 47, 0, 0 } },	/* VS 2, pre-emph 0 */
   1024	{ .snps = { 55, 0, 7 } },	/* VS 2, pre-emph 1 */
   1025	{ .snps = { 62, 0, 0 } },	/* VS 3, pre-emph 0 */
   1026};
   1027
   1028static const struct intel_ddi_buf_trans dg2_snps_trans = {
   1029	.entries = _dg2_snps_trans,
   1030	.num_entries = ARRAY_SIZE(_dg2_snps_trans),
   1031	.hdmi_default_entry = ARRAY_SIZE(_dg2_snps_trans) - 1,
   1032};
   1033
   1034static const union intel_ddi_buf_trans_entry _dg2_snps_trans_uhbr[] = {
   1035	{ .snps = { 62, 0, 0 } },	/* preset 0 */
   1036	{ .snps = { 55, 0, 7 } },	/* preset 1 */
   1037	{ .snps = { 50, 0, 12 } },	/* preset 2 */
   1038	{ .snps = { 44, 0, 18 } },	/* preset 3 */
   1039	{ .snps = { 35, 0, 21 } },	/* preset 4 */
   1040	{ .snps = { 59, 3, 0 } },	/* preset 5 */
   1041	{ .snps = { 53, 3, 6 } },	/* preset 6 */
   1042	{ .snps = { 48, 3, 11 } },	/* preset 7 */
   1043	{ .snps = { 42, 5, 15 } },	/* preset 8 */
   1044	{ .snps = { 37, 5, 20 } },	/* preset 9 */
   1045	{ .snps = { 56, 6, 0 } },	/* preset 10 */
   1046	{ .snps = { 48, 7, 7 } },	/* preset 11 */
   1047	{ .snps = { 45, 7, 10 } },	/* preset 12 */
   1048	{ .snps = { 39, 8, 15 } },	/* preset 13 */
   1049	{ .snps = { 48, 14, 0 } },	/* preset 14 */
   1050	{ .snps = { 45, 4, 4 } },	/* preset 15 */
   1051};
   1052
   1053static const struct intel_ddi_buf_trans dg2_snps_trans_uhbr = {
   1054	.entries = _dg2_snps_trans_uhbr,
   1055	.num_entries = ARRAY_SIZE(_dg2_snps_trans_uhbr),
   1056};
   1057
   1058bool is_hobl_buf_trans(const struct intel_ddi_buf_trans *table)
   1059{
   1060	return table == &tgl_combo_phy_trans_edp_hbr2_hobl;
   1061}
   1062
   1063static bool use_edp_hobl(struct intel_encoder *encoder)
   1064{
   1065	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
   1066	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
   1067
   1068	return i915->vbt.edp.hobl && !intel_dp->hobl_failed;
   1069}
   1070
   1071static bool use_edp_low_vswing(struct intel_encoder *encoder)
   1072{
   1073	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
   1074
   1075	return i915->vbt.edp.low_vswing;
   1076}
   1077
   1078static const struct intel_ddi_buf_trans *
   1079intel_get_buf_trans(const struct intel_ddi_buf_trans *trans, int *num_entries)
   1080{
   1081	*num_entries = trans->num_entries;
   1082	return trans;
   1083}
   1084
   1085static const struct intel_ddi_buf_trans *
   1086hsw_get_buf_trans(struct intel_encoder *encoder,
   1087		  const struct intel_crtc_state *crtc_state,
   1088		  int *n_entries)
   1089{
   1090	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG))
   1091		return intel_get_buf_trans(&hsw_trans_fdi, n_entries);
   1092	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1093		return intel_get_buf_trans(&hsw_trans_hdmi, n_entries);
   1094	else
   1095		return intel_get_buf_trans(&hsw_trans_dp, n_entries);
   1096}
   1097
   1098static const struct intel_ddi_buf_trans *
   1099bdw_get_buf_trans(struct intel_encoder *encoder,
   1100		  const struct intel_crtc_state *crtc_state,
   1101		  int *n_entries)
   1102{
   1103	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG))
   1104		return intel_get_buf_trans(&bdw_trans_fdi, n_entries);
   1105	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1106		return intel_get_buf_trans(&bdw_trans_hdmi, n_entries);
   1107	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1108		 use_edp_low_vswing(encoder))
   1109		return intel_get_buf_trans(&bdw_trans_edp, n_entries);
   1110	else
   1111		return intel_get_buf_trans(&bdw_trans_dp, n_entries);
   1112}
   1113
   1114static int skl_buf_trans_num_entries(enum port port, int n_entries)
   1115{
   1116	/* Only DDIA and DDIE can select the 10th register with DP */
   1117	if (port == PORT_A || port == PORT_E)
   1118		return min(n_entries, 10);
   1119	else
   1120		return min(n_entries, 9);
   1121}
   1122
   1123static const struct intel_ddi_buf_trans *
   1124_skl_get_buf_trans_dp(struct intel_encoder *encoder,
   1125		      const struct intel_ddi_buf_trans *trans,
   1126		      int *n_entries)
   1127{
   1128	trans = intel_get_buf_trans(trans, n_entries);
   1129	*n_entries = skl_buf_trans_num_entries(encoder->port, *n_entries);
   1130	return trans;
   1131}
   1132
   1133static const struct intel_ddi_buf_trans *
   1134skl_y_get_buf_trans(struct intel_encoder *encoder,
   1135		    const struct intel_crtc_state *crtc_state,
   1136		    int *n_entries)
   1137{
   1138	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1139		return intel_get_buf_trans(&skl_y_trans_hdmi, n_entries);
   1140	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1141		 use_edp_low_vswing(encoder))
   1142		return _skl_get_buf_trans_dp(encoder, &skl_y_trans_edp, n_entries);
   1143	else
   1144		return _skl_get_buf_trans_dp(encoder, &skl_y_trans_dp, n_entries);
   1145}
   1146
   1147static const struct intel_ddi_buf_trans *
   1148skl_u_get_buf_trans(struct intel_encoder *encoder,
   1149		    const struct intel_crtc_state *crtc_state,
   1150		    int *n_entries)
   1151{
   1152	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1153		return intel_get_buf_trans(&skl_trans_hdmi, n_entries);
   1154	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1155		 use_edp_low_vswing(encoder))
   1156		return _skl_get_buf_trans_dp(encoder, &skl_u_trans_edp, n_entries);
   1157	else
   1158		return _skl_get_buf_trans_dp(encoder, &skl_u_trans_dp, n_entries);
   1159}
   1160
   1161static const struct intel_ddi_buf_trans *
   1162skl_get_buf_trans(struct intel_encoder *encoder,
   1163		  const struct intel_crtc_state *crtc_state,
   1164		  int *n_entries)
   1165{
   1166	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1167		return intel_get_buf_trans(&skl_trans_hdmi, n_entries);
   1168	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1169		 use_edp_low_vswing(encoder))
   1170		return _skl_get_buf_trans_dp(encoder, &skl_trans_edp, n_entries);
   1171	else
   1172		return _skl_get_buf_trans_dp(encoder, &skl_trans_dp, n_entries);
   1173}
   1174
   1175static const struct intel_ddi_buf_trans *
   1176kbl_y_get_buf_trans(struct intel_encoder *encoder,
   1177		    const struct intel_crtc_state *crtc_state,
   1178		    int *n_entries)
   1179{
   1180	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1181		return intel_get_buf_trans(&skl_y_trans_hdmi, n_entries);
   1182	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1183		 use_edp_low_vswing(encoder))
   1184		return _skl_get_buf_trans_dp(encoder, &skl_y_trans_edp, n_entries);
   1185	else
   1186		return _skl_get_buf_trans_dp(encoder, &kbl_y_trans_dp, n_entries);
   1187}
   1188
   1189static const struct intel_ddi_buf_trans *
   1190kbl_u_get_buf_trans(struct intel_encoder *encoder,
   1191		    const struct intel_crtc_state *crtc_state,
   1192		    int *n_entries)
   1193{
   1194	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1195		return intel_get_buf_trans(&skl_trans_hdmi, n_entries);
   1196	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1197		 use_edp_low_vswing(encoder))
   1198		return _skl_get_buf_trans_dp(encoder, &skl_u_trans_edp, n_entries);
   1199	else
   1200		return _skl_get_buf_trans_dp(encoder, &kbl_u_trans_dp, n_entries);
   1201}
   1202
   1203static const struct intel_ddi_buf_trans *
   1204kbl_get_buf_trans(struct intel_encoder *encoder,
   1205		  const struct intel_crtc_state *crtc_state,
   1206		  int *n_entries)
   1207{
   1208	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1209		return intel_get_buf_trans(&skl_trans_hdmi, n_entries);
   1210	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1211		 use_edp_low_vswing(encoder))
   1212		return _skl_get_buf_trans_dp(encoder, &skl_trans_edp, n_entries);
   1213	else
   1214		return _skl_get_buf_trans_dp(encoder, &kbl_trans_dp, n_entries);
   1215}
   1216
   1217static const struct intel_ddi_buf_trans *
   1218bxt_get_buf_trans(struct intel_encoder *encoder,
   1219		  const struct intel_crtc_state *crtc_state,
   1220		  int *n_entries)
   1221{
   1222	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1223		return intel_get_buf_trans(&bxt_trans_hdmi, n_entries);
   1224	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1225		 use_edp_low_vswing(encoder))
   1226		return intel_get_buf_trans(&bxt_trans_edp, n_entries);
   1227	else
   1228		return intel_get_buf_trans(&bxt_trans_dp, n_entries);
   1229}
   1230
   1231static const struct intel_ddi_buf_trans *
   1232icl_get_combo_buf_trans_dp(struct intel_encoder *encoder,
   1233			   const struct intel_crtc_state *crtc_state,
   1234			   int *n_entries)
   1235{
   1236	return intel_get_buf_trans(&icl_combo_phy_trans_dp_hbr2_edp_hbr3,
   1237				   n_entries);
   1238}
   1239
   1240static const struct intel_ddi_buf_trans *
   1241icl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
   1242			    const struct intel_crtc_state *crtc_state,
   1243			    int *n_entries)
   1244{
   1245	if (crtc_state->port_clock > 540000) {
   1246		return intel_get_buf_trans(&icl_combo_phy_trans_dp_hbr2_edp_hbr3,
   1247					   n_entries);
   1248	} else if (use_edp_low_vswing(encoder)) {
   1249		return intel_get_buf_trans(&icl_combo_phy_trans_edp_hbr2,
   1250					   n_entries);
   1251	}
   1252
   1253	return icl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1254}
   1255
   1256static const struct intel_ddi_buf_trans *
   1257icl_get_combo_buf_trans(struct intel_encoder *encoder,
   1258			const struct intel_crtc_state *crtc_state,
   1259			int *n_entries)
   1260{
   1261	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1262		return intel_get_buf_trans(&icl_combo_phy_trans_hdmi, n_entries);
   1263	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP))
   1264		return icl_get_combo_buf_trans_edp(encoder, crtc_state, n_entries);
   1265	else
   1266		return icl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1267}
   1268
   1269static const struct intel_ddi_buf_trans *
   1270icl_get_mg_buf_trans_dp(struct intel_encoder *encoder,
   1271			const struct intel_crtc_state *crtc_state,
   1272			int *n_entries)
   1273{
   1274	if (crtc_state->port_clock > 270000) {
   1275		return intel_get_buf_trans(&icl_mg_phy_trans_hbr2_hbr3,
   1276					   n_entries);
   1277	} else {
   1278		return intel_get_buf_trans(&icl_mg_phy_trans_rbr_hbr,
   1279					   n_entries);
   1280	}
   1281}
   1282
   1283static const struct intel_ddi_buf_trans *
   1284icl_get_mg_buf_trans(struct intel_encoder *encoder,
   1285		     const struct intel_crtc_state *crtc_state,
   1286		     int *n_entries)
   1287{
   1288	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1289		return intel_get_buf_trans(&icl_mg_phy_trans_hdmi, n_entries);
   1290	else
   1291		return icl_get_mg_buf_trans_dp(encoder, crtc_state, n_entries);
   1292}
   1293
   1294static const struct intel_ddi_buf_trans *
   1295ehl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
   1296			    const struct intel_crtc_state *crtc_state,
   1297			    int *n_entries)
   1298{
   1299	if (crtc_state->port_clock > 270000)
   1300		return intel_get_buf_trans(&ehl_combo_phy_trans_edp_hbr2, n_entries);
   1301	else
   1302		return intel_get_buf_trans(&icl_combo_phy_trans_edp_hbr2, n_entries);
   1303}
   1304
   1305static const struct intel_ddi_buf_trans *
   1306ehl_get_combo_buf_trans(struct intel_encoder *encoder,
   1307			const struct intel_crtc_state *crtc_state,
   1308			int *n_entries)
   1309{
   1310	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1311		return intel_get_buf_trans(&icl_combo_phy_trans_hdmi, n_entries);
   1312	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1313		 use_edp_low_vswing(encoder))
   1314		return ehl_get_combo_buf_trans_edp(encoder, crtc_state, n_entries);
   1315	else
   1316		return intel_get_buf_trans(&ehl_combo_phy_trans_dp, n_entries);
   1317}
   1318
   1319static const struct intel_ddi_buf_trans *
   1320jsl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
   1321			    const struct intel_crtc_state *crtc_state,
   1322			    int *n_entries)
   1323{
   1324	if (crtc_state->port_clock > 270000)
   1325		return intel_get_buf_trans(&jsl_combo_phy_trans_edp_hbr2, n_entries);
   1326	else
   1327		return intel_get_buf_trans(&jsl_combo_phy_trans_edp_hbr, n_entries);
   1328}
   1329
   1330static const struct intel_ddi_buf_trans *
   1331jsl_get_combo_buf_trans(struct intel_encoder *encoder,
   1332			const struct intel_crtc_state *crtc_state,
   1333			int *n_entries)
   1334{
   1335	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1336		return intel_get_buf_trans(&icl_combo_phy_trans_hdmi, n_entries);
   1337	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP) &&
   1338		 use_edp_low_vswing(encoder))
   1339		return jsl_get_combo_buf_trans_edp(encoder, crtc_state, n_entries);
   1340	else
   1341		return intel_get_buf_trans(&icl_combo_phy_trans_dp_hbr2_edp_hbr3, n_entries);
   1342}
   1343
   1344static const struct intel_ddi_buf_trans *
   1345tgl_get_combo_buf_trans_dp(struct intel_encoder *encoder,
   1346			   const struct intel_crtc_state *crtc_state,
   1347			   int *n_entries)
   1348{
   1349	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
   1350
   1351	if (crtc_state->port_clock > 270000) {
   1352		if (IS_TGL_UY(dev_priv)) {
   1353			return intel_get_buf_trans(&tgl_uy_combo_phy_trans_dp_hbr2,
   1354						   n_entries);
   1355		} else {
   1356			return intel_get_buf_trans(&tgl_combo_phy_trans_dp_hbr2,
   1357						   n_entries);
   1358		}
   1359	} else {
   1360		return intel_get_buf_trans(&tgl_combo_phy_trans_dp_hbr,
   1361					   n_entries);
   1362	}
   1363}
   1364
   1365static const struct intel_ddi_buf_trans *
   1366tgl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
   1367			    const struct intel_crtc_state *crtc_state,
   1368			    int *n_entries)
   1369{
   1370	if (crtc_state->port_clock > 540000) {
   1371		return intel_get_buf_trans(&icl_combo_phy_trans_dp_hbr2_edp_hbr3,
   1372					   n_entries);
   1373	} else if (use_edp_hobl(encoder)) {
   1374		return intel_get_buf_trans(&tgl_combo_phy_trans_edp_hbr2_hobl,
   1375					   n_entries);
   1376	} else if (use_edp_low_vswing(encoder)) {
   1377		return intel_get_buf_trans(&icl_combo_phy_trans_edp_hbr2,
   1378					   n_entries);
   1379	}
   1380
   1381	return tgl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1382}
   1383
   1384static const struct intel_ddi_buf_trans *
   1385tgl_get_combo_buf_trans(struct intel_encoder *encoder,
   1386			const struct intel_crtc_state *crtc_state,
   1387			int *n_entries)
   1388{
   1389	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1390		return intel_get_buf_trans(&icl_combo_phy_trans_hdmi, n_entries);
   1391	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP))
   1392		return tgl_get_combo_buf_trans_edp(encoder, crtc_state, n_entries);
   1393	else
   1394		return tgl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1395}
   1396
   1397static const struct intel_ddi_buf_trans *
   1398dg1_get_combo_buf_trans_dp(struct intel_encoder *encoder,
   1399			   const struct intel_crtc_state *crtc_state,
   1400			   int *n_entries)
   1401{
   1402	if (crtc_state->port_clock > 270000)
   1403		return intel_get_buf_trans(&dg1_combo_phy_trans_dp_hbr2_hbr3,
   1404					   n_entries);
   1405	else
   1406		return intel_get_buf_trans(&dg1_combo_phy_trans_dp_rbr_hbr,
   1407					   n_entries);
   1408}
   1409
   1410static const struct intel_ddi_buf_trans *
   1411dg1_get_combo_buf_trans_edp(struct intel_encoder *encoder,
   1412			    const struct intel_crtc_state *crtc_state,
   1413			    int *n_entries)
   1414{
   1415	if (crtc_state->port_clock > 540000)
   1416		return intel_get_buf_trans(&icl_combo_phy_trans_dp_hbr2_edp_hbr3,
   1417					   n_entries);
   1418	else if (use_edp_hobl(encoder))
   1419		return intel_get_buf_trans(&tgl_combo_phy_trans_edp_hbr2_hobl,
   1420					   n_entries);
   1421	else if (use_edp_low_vswing(encoder))
   1422		return intel_get_buf_trans(&icl_combo_phy_trans_edp_hbr2,
   1423					   n_entries);
   1424	else
   1425		return dg1_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1426}
   1427
   1428static const struct intel_ddi_buf_trans *
   1429dg1_get_combo_buf_trans(struct intel_encoder *encoder,
   1430			const struct intel_crtc_state *crtc_state,
   1431			int *n_entries)
   1432{
   1433	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1434		return intel_get_buf_trans(&icl_combo_phy_trans_hdmi, n_entries);
   1435	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP))
   1436		return dg1_get_combo_buf_trans_edp(encoder, crtc_state, n_entries);
   1437	else
   1438		return dg1_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1439}
   1440
   1441static const struct intel_ddi_buf_trans *
   1442rkl_get_combo_buf_trans_dp(struct intel_encoder *encoder,
   1443			   const struct intel_crtc_state *crtc_state,
   1444			   int *n_entries)
   1445{
   1446	if (crtc_state->port_clock > 270000)
   1447		return intel_get_buf_trans(&rkl_combo_phy_trans_dp_hbr2_hbr3, n_entries);
   1448	else
   1449		return intel_get_buf_trans(&rkl_combo_phy_trans_dp_hbr, n_entries);
   1450}
   1451
   1452static const struct intel_ddi_buf_trans *
   1453rkl_get_combo_buf_trans_edp(struct intel_encoder *encoder,
   1454			    const struct intel_crtc_state *crtc_state,
   1455			    int *n_entries)
   1456{
   1457	if (crtc_state->port_clock > 540000) {
   1458		return intel_get_buf_trans(&icl_combo_phy_trans_dp_hbr2_edp_hbr3,
   1459					   n_entries);
   1460	} else if (use_edp_hobl(encoder)) {
   1461		return intel_get_buf_trans(&tgl_combo_phy_trans_edp_hbr2_hobl,
   1462					   n_entries);
   1463	} else if (use_edp_low_vswing(encoder)) {
   1464		return intel_get_buf_trans(&icl_combo_phy_trans_edp_hbr2,
   1465					   n_entries);
   1466	}
   1467
   1468	return rkl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1469}
   1470
   1471static const struct intel_ddi_buf_trans *
   1472rkl_get_combo_buf_trans(struct intel_encoder *encoder,
   1473			const struct intel_crtc_state *crtc_state,
   1474			int *n_entries)
   1475{
   1476	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1477		return intel_get_buf_trans(&icl_combo_phy_trans_hdmi, n_entries);
   1478	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP))
   1479		return rkl_get_combo_buf_trans_edp(encoder, crtc_state, n_entries);
   1480	else
   1481		return rkl_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1482}
   1483
   1484static const struct intel_ddi_buf_trans *
   1485adls_get_combo_buf_trans_dp(struct intel_encoder *encoder,
   1486			    const struct intel_crtc_state *crtc_state,
   1487			    int *n_entries)
   1488{
   1489	if (crtc_state->port_clock > 270000)
   1490		return intel_get_buf_trans(&adls_combo_phy_trans_dp_hbr2_hbr3, n_entries);
   1491	else
   1492		return intel_get_buf_trans(&tgl_combo_phy_trans_dp_hbr, n_entries);
   1493}
   1494
   1495static const struct intel_ddi_buf_trans *
   1496adls_get_combo_buf_trans_edp(struct intel_encoder *encoder,
   1497			     const struct intel_crtc_state *crtc_state,
   1498			     int *n_entries)
   1499{
   1500	if (crtc_state->port_clock > 540000)
   1501		return intel_get_buf_trans(&adls_combo_phy_trans_edp_hbr3, n_entries);
   1502	else if (use_edp_hobl(encoder))
   1503		return intel_get_buf_trans(&tgl_combo_phy_trans_edp_hbr2_hobl, n_entries);
   1504	else if (use_edp_low_vswing(encoder))
   1505		return intel_get_buf_trans(&adls_combo_phy_trans_edp_hbr2, n_entries);
   1506	else
   1507		return adls_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1508}
   1509
   1510static const struct intel_ddi_buf_trans *
   1511adls_get_combo_buf_trans(struct intel_encoder *encoder,
   1512			 const struct intel_crtc_state *crtc_state,
   1513			 int *n_entries)
   1514{
   1515	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1516		return intel_get_buf_trans(&icl_combo_phy_trans_hdmi, n_entries);
   1517	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP))
   1518		return adls_get_combo_buf_trans_edp(encoder, crtc_state, n_entries);
   1519	else
   1520		return adls_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1521}
   1522
   1523static const struct intel_ddi_buf_trans *
   1524adlp_get_combo_buf_trans_dp(struct intel_encoder *encoder,
   1525			    const struct intel_crtc_state *crtc_state,
   1526			    int *n_entries)
   1527{
   1528	if (crtc_state->port_clock > 270000)
   1529		return intel_get_buf_trans(&adlp_combo_phy_trans_dp_hbr2_hbr3, n_entries);
   1530	else
   1531		return intel_get_buf_trans(&adlp_combo_phy_trans_dp_hbr, n_entries);
   1532}
   1533
   1534static const struct intel_ddi_buf_trans *
   1535adlp_get_combo_buf_trans_edp(struct intel_encoder *encoder,
   1536			     const struct intel_crtc_state *crtc_state,
   1537			     int *n_entries)
   1538{
   1539	if (crtc_state->port_clock > 540000) {
   1540		return intel_get_buf_trans(&adlp_combo_phy_trans_edp_hbr3,
   1541					   n_entries);
   1542	} else if (use_edp_hobl(encoder)) {
   1543		return intel_get_buf_trans(&tgl_combo_phy_trans_edp_hbr2_hobl,
   1544					   n_entries);
   1545	} else if (use_edp_low_vswing(encoder)) {
   1546		return intel_get_buf_trans(&adlp_combo_phy_trans_edp_up_to_hbr2,
   1547					   n_entries);
   1548	}
   1549
   1550	return adlp_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1551}
   1552
   1553static const struct intel_ddi_buf_trans *
   1554adlp_get_combo_buf_trans(struct intel_encoder *encoder,
   1555			 const struct intel_crtc_state *crtc_state,
   1556			 int *n_entries)
   1557{
   1558	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1559		return intel_get_buf_trans(&adlp_combo_phy_trans_hdmi, n_entries);
   1560	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP))
   1561		return adlp_get_combo_buf_trans_edp(encoder, crtc_state, n_entries);
   1562	else
   1563		return adlp_get_combo_buf_trans_dp(encoder, crtc_state, n_entries);
   1564}
   1565
   1566static const struct intel_ddi_buf_trans *
   1567tgl_get_dkl_buf_trans_dp(struct intel_encoder *encoder,
   1568			 const struct intel_crtc_state *crtc_state,
   1569			 int *n_entries)
   1570{
   1571	if (crtc_state->port_clock > 270000) {
   1572		return intel_get_buf_trans(&tgl_dkl_phy_trans_dp_hbr2,
   1573					   n_entries);
   1574	} else {
   1575		return intel_get_buf_trans(&tgl_dkl_phy_trans_dp_hbr,
   1576					   n_entries);
   1577	}
   1578}
   1579
   1580static const struct intel_ddi_buf_trans *
   1581tgl_get_dkl_buf_trans(struct intel_encoder *encoder,
   1582		      const struct intel_crtc_state *crtc_state,
   1583		      int *n_entries)
   1584{
   1585	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1586		return intel_get_buf_trans(&tgl_dkl_phy_trans_hdmi, n_entries);
   1587	else
   1588		return tgl_get_dkl_buf_trans_dp(encoder, crtc_state, n_entries);
   1589}
   1590
   1591static const struct intel_ddi_buf_trans *
   1592adlp_get_dkl_buf_trans_dp(struct intel_encoder *encoder,
   1593			  const struct intel_crtc_state *crtc_state,
   1594			  int *n_entries)
   1595{
   1596	if (crtc_state->port_clock > 270000) {
   1597		return intel_get_buf_trans(&adlp_dkl_phy_trans_dp_hbr2_hbr3,
   1598					   n_entries);
   1599	} else {
   1600		return intel_get_buf_trans(&adlp_dkl_phy_trans_dp_hbr,
   1601					   n_entries);
   1602	}
   1603}
   1604
   1605static const struct intel_ddi_buf_trans *
   1606adlp_get_dkl_buf_trans(struct intel_encoder *encoder,
   1607		       const struct intel_crtc_state *crtc_state,
   1608		       int *n_entries)
   1609{
   1610	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
   1611		return intel_get_buf_trans(&tgl_dkl_phy_trans_hdmi, n_entries);
   1612	else
   1613		return adlp_get_dkl_buf_trans_dp(encoder, crtc_state, n_entries);
   1614}
   1615
   1616static const struct intel_ddi_buf_trans *
   1617dg2_get_snps_buf_trans(struct intel_encoder *encoder,
   1618		       const struct intel_crtc_state *crtc_state,
   1619		       int *n_entries)
   1620{
   1621	if (intel_crtc_has_dp_encoder(crtc_state) &&
   1622	    intel_dp_is_uhbr(crtc_state))
   1623		return intel_get_buf_trans(&dg2_snps_trans_uhbr, n_entries);
   1624	else
   1625		return intel_get_buf_trans(&dg2_snps_trans, n_entries);
   1626}
   1627
   1628void intel_ddi_buf_trans_init(struct intel_encoder *encoder)
   1629{
   1630	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
   1631	enum phy phy = intel_port_to_phy(i915, encoder->port);
   1632
   1633	if (IS_DG2(i915)) {
   1634		encoder->get_buf_trans = dg2_get_snps_buf_trans;
   1635	} else if (IS_ALDERLAKE_P(i915)) {
   1636		if (intel_phy_is_combo(i915, phy))
   1637			encoder->get_buf_trans = adlp_get_combo_buf_trans;
   1638		else
   1639			encoder->get_buf_trans = adlp_get_dkl_buf_trans;
   1640	} else if (IS_ALDERLAKE_S(i915)) {
   1641		encoder->get_buf_trans = adls_get_combo_buf_trans;
   1642	} else if (IS_ROCKETLAKE(i915)) {
   1643		encoder->get_buf_trans = rkl_get_combo_buf_trans;
   1644	} else if (IS_DG1(i915)) {
   1645		encoder->get_buf_trans = dg1_get_combo_buf_trans;
   1646	} else if (DISPLAY_VER(i915) >= 12) {
   1647		if (intel_phy_is_combo(i915, phy))
   1648			encoder->get_buf_trans = tgl_get_combo_buf_trans;
   1649		else
   1650			encoder->get_buf_trans = tgl_get_dkl_buf_trans;
   1651	} else if (DISPLAY_VER(i915) == 11) {
   1652		if (IS_PLATFORM(i915, INTEL_JASPERLAKE))
   1653			encoder->get_buf_trans = jsl_get_combo_buf_trans;
   1654		else if (IS_PLATFORM(i915, INTEL_ELKHARTLAKE))
   1655			encoder->get_buf_trans = ehl_get_combo_buf_trans;
   1656		else if (intel_phy_is_combo(i915, phy))
   1657			encoder->get_buf_trans = icl_get_combo_buf_trans;
   1658		else
   1659			encoder->get_buf_trans = icl_get_mg_buf_trans;
   1660	} else if (IS_GEMINILAKE(i915) || IS_BROXTON(i915)) {
   1661		encoder->get_buf_trans = bxt_get_buf_trans;
   1662	} else if (IS_CML_ULX(i915) || IS_CFL_ULX(i915) || IS_KBL_ULX(i915)) {
   1663		encoder->get_buf_trans = kbl_y_get_buf_trans;
   1664	} else if (IS_CML_ULT(i915) || IS_CFL_ULT(i915) || IS_KBL_ULT(i915)) {
   1665		encoder->get_buf_trans = kbl_u_get_buf_trans;
   1666	} else if (IS_COMETLAKE(i915) || IS_COFFEELAKE(i915) || IS_KABYLAKE(i915)) {
   1667		encoder->get_buf_trans = kbl_get_buf_trans;
   1668	} else if (IS_SKL_ULX(i915)) {
   1669		encoder->get_buf_trans = skl_y_get_buf_trans;
   1670	} else if (IS_SKL_ULT(i915)) {
   1671		encoder->get_buf_trans = skl_u_get_buf_trans;
   1672	} else if (IS_SKYLAKE(i915)) {
   1673		encoder->get_buf_trans = skl_get_buf_trans;
   1674	} else if (IS_BROADWELL(i915)) {
   1675		encoder->get_buf_trans = bdw_get_buf_trans;
   1676	} else if (IS_HASWELL(i915)) {
   1677		encoder->get_buf_trans = hsw_get_buf_trans;
   1678	} else {
   1679		MISSING_CASE(INTEL_INFO(i915)->platform);
   1680	}
   1681}