b25e99a432fbd3af325770b0a669d27ede78952b
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / i915 / intel_ddi.c
1 /*
2  * Copyright © 2012 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21  * IN THE SOFTWARE.
22  *
23  * Authors:
24  *    Eugeni Dodonov <eugeni.dodonov@intel.com>
25  *
26  */
27
28 #include "i915_drv.h"
29 #include "intel_drv.h"
30
31 struct ddi_buf_trans {
32         u32 trans1;     /* balance leg enable, de-emph level */
33         u32 trans2;     /* vref sel, vswing */
34         u8 i_boost;     /* SKL: I_boost; valid: 0x0, 0x1, 0x3, 0x7 */
35 };
36
37 /* HDMI/DVI modes ignore everything but the last 2 items. So we share
38  * them for both DP and FDI transports, allowing those ports to
39  * automatically adapt to HDMI connections as well
40  */
41 static const struct ddi_buf_trans hsw_ddi_translations_dp[] = {
42         { 0x00FFFFFF, 0x0006000E, 0x0 },
43         { 0x00D75FFF, 0x0005000A, 0x0 },
44         { 0x00C30FFF, 0x00040006, 0x0 },
45         { 0x80AAAFFF, 0x000B0000, 0x0 },
46         { 0x00FFFFFF, 0x0005000A, 0x0 },
47         { 0x00D75FFF, 0x000C0004, 0x0 },
48         { 0x80C30FFF, 0x000B0000, 0x0 },
49         { 0x00FFFFFF, 0x00040006, 0x0 },
50         { 0x80D75FFF, 0x000B0000, 0x0 },
51 };
52
53 static const struct ddi_buf_trans hsw_ddi_translations_fdi[] = {
54         { 0x00FFFFFF, 0x0007000E, 0x0 },
55         { 0x00D75FFF, 0x000F000A, 0x0 },
56         { 0x00C30FFF, 0x00060006, 0x0 },
57         { 0x00AAAFFF, 0x001E0000, 0x0 },
58         { 0x00FFFFFF, 0x000F000A, 0x0 },
59         { 0x00D75FFF, 0x00160004, 0x0 },
60         { 0x00C30FFF, 0x001E0000, 0x0 },
61         { 0x00FFFFFF, 0x00060006, 0x0 },
62         { 0x00D75FFF, 0x001E0000, 0x0 },
63 };
64
65 static const struct ddi_buf_trans hsw_ddi_translations_hdmi[] = {
66                                         /* Idx  NT mV d T mV d  db      */
67         { 0x00FFFFFF, 0x0006000E, 0x0 },/* 0:   400     400     0       */
68         { 0x00E79FFF, 0x000E000C, 0x0 },/* 1:   400     500     2       */
69         { 0x00D75FFF, 0x0005000A, 0x0 },/* 2:   400     600     3.5     */
70         { 0x00FFFFFF, 0x0005000A, 0x0 },/* 3:   600     600     0       */
71         { 0x00E79FFF, 0x001D0007, 0x0 },/* 4:   600     750     2       */
72         { 0x00D75FFF, 0x000C0004, 0x0 },/* 5:   600     900     3.5     */
73         { 0x00FFFFFF, 0x00040006, 0x0 },/* 6:   800     800     0       */
74         { 0x80E79FFF, 0x00030002, 0x0 },/* 7:   800     1000    2       */
75         { 0x00FFFFFF, 0x00140005, 0x0 },/* 8:   850     850     0       */
76         { 0x00FFFFFF, 0x000C0004, 0x0 },/* 9:   900     900     0       */
77         { 0x00FFFFFF, 0x001C0003, 0x0 },/* 10:  950     950     0       */
78         { 0x80FFFFFF, 0x00030002, 0x0 },/* 11:  1000    1000    0       */
79 };
80
81 static const struct ddi_buf_trans bdw_ddi_translations_edp[] = {
82         { 0x00FFFFFF, 0x00000012, 0x0 },
83         { 0x00EBAFFF, 0x00020011, 0x0 },
84         { 0x00C71FFF, 0x0006000F, 0x0 },
85         { 0x00AAAFFF, 0x000E000A, 0x0 },
86         { 0x00FFFFFF, 0x00020011, 0x0 },
87         { 0x00DB6FFF, 0x0005000F, 0x0 },
88         { 0x00BEEFFF, 0x000A000C, 0x0 },
89         { 0x00FFFFFF, 0x0005000F, 0x0 },
90         { 0x00DB6FFF, 0x000A000C, 0x0 },
91 };
92
93 static const struct ddi_buf_trans bdw_ddi_translations_dp[] = {
94         { 0x00FFFFFF, 0x0007000E, 0x0 },
95         { 0x00D75FFF, 0x000E000A, 0x0 },
96         { 0x00BEFFFF, 0x00140006, 0x0 },
97         { 0x80B2CFFF, 0x001B0002, 0x0 },
98         { 0x00FFFFFF, 0x000E000A, 0x0 },
99         { 0x00DB6FFF, 0x00160005, 0x0 },
100         { 0x80C71FFF, 0x001A0002, 0x0 },
101         { 0x00F7DFFF, 0x00180004, 0x0 },
102         { 0x80D75FFF, 0x001B0002, 0x0 },
103 };
104
105 static const struct ddi_buf_trans bdw_ddi_translations_fdi[] = {
106         { 0x00FFFFFF, 0x0001000E, 0x0 },
107         { 0x00D75FFF, 0x0004000A, 0x0 },
108         { 0x00C30FFF, 0x00070006, 0x0 },
109         { 0x00AAAFFF, 0x000C0000, 0x0 },
110         { 0x00FFFFFF, 0x0004000A, 0x0 },
111         { 0x00D75FFF, 0x00090004, 0x0 },
112         { 0x00C30FFF, 0x000C0000, 0x0 },
113         { 0x00FFFFFF, 0x00070006, 0x0 },
114         { 0x00D75FFF, 0x000C0000, 0x0 },
115 };
116
117 static const struct ddi_buf_trans bdw_ddi_translations_hdmi[] = {
118                                         /* Idx  NT mV d T mV df db      */
119         { 0x00FFFFFF, 0x0007000E, 0x0 },/* 0:   400     400     0       */
120         { 0x00D75FFF, 0x000E000A, 0x0 },/* 1:   400     600     3.5     */
121         { 0x00BEFFFF, 0x00140006, 0x0 },/* 2:   400     800     6       */
122         { 0x00FFFFFF, 0x0009000D, 0x0 },/* 3:   450     450     0       */
123         { 0x00FFFFFF, 0x000E000A, 0x0 },/* 4:   600     600     0       */
124         { 0x00D7FFFF, 0x00140006, 0x0 },/* 5:   600     800     2.5     */
125         { 0x80CB2FFF, 0x001B0002, 0x0 },/* 6:   600     1000    4.5     */
126         { 0x00FFFFFF, 0x00140006, 0x0 },/* 7:   800     800     0       */
127         { 0x80E79FFF, 0x001B0002, 0x0 },/* 8:   800     1000    2       */
128         { 0x80FFFFFF, 0x001B0002, 0x0 },/* 9:   1000    1000    0       */
129 };
130
131 /* Skylake H and S */
132 static const struct ddi_buf_trans skl_ddi_translations_dp[] = {
133         { 0x00002016, 0x000000A0, 0x0 },
134         { 0x00005012, 0x0000009B, 0x0 },
135         { 0x00007011, 0x00000088, 0x0 },
136         { 0x00009010, 0x000000C7, 0x0 },
137         { 0x00002016, 0x0000009B, 0x0 },
138         { 0x00005012, 0x00000088, 0x0 },
139         { 0x00007011, 0x000000C7, 0x0 },
140         { 0x00002016, 0x000000DF, 0x0 },
141         { 0x00005012, 0x000000C7, 0x0 },
142 };
143
144 /* Skylake U */
145 static const struct ddi_buf_trans skl_u_ddi_translations_dp[] = {
146         { 0x0000201B, 0x000000A2, 0x0 },
147         { 0x00005012, 0x00000088, 0x0 },
148         { 0x00007011, 0x00000087, 0x0 },
149         { 0x80009010, 0x000000C7, 0x1 },        /* Uses I_boost level 0x1 */
150         { 0x0000201B, 0x0000009D, 0x0 },
151         { 0x00005012, 0x000000C7, 0x0 },
152         { 0x00007011, 0x000000C7, 0x0 },
153         { 0x00002016, 0x00000088, 0x0 },
154         { 0x00005012, 0x000000C7, 0x0 },
155 };
156
157 /* Skylake Y */
158 static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
159         { 0x00000018, 0x000000A2, 0x0 },
160         { 0x00005012, 0x00000088, 0x0 },
161         { 0x00007011, 0x00000087, 0x0 },
162         { 0x80009010, 0x000000C7, 0x3 },        /* Uses I_boost level 0x3 */
163         { 0x00000018, 0x0000009D, 0x0 },
164         { 0x00005012, 0x000000C7, 0x0 },
165         { 0x00007011, 0x000000C7, 0x0 },
166         { 0x00000018, 0x00000088, 0x0 },
167         { 0x00005012, 0x000000C7, 0x0 },
168 };
169
170 /*
171  * Skylake H and S
172  * eDP 1.4 low vswing translation parameters
173  */
174 static const struct ddi_buf_trans skl_ddi_translations_edp[] = {
175         { 0x00000018, 0x000000A8, 0x0 },
176         { 0x00004013, 0x000000A9, 0x0 },
177         { 0x00007011, 0x000000A2, 0x0 },
178         { 0x00009010, 0x0000009C, 0x0 },
179         { 0x00000018, 0x000000A9, 0x0 },
180         { 0x00006013, 0x000000A2, 0x0 },
181         { 0x00007011, 0x000000A6, 0x0 },
182         { 0x00000018, 0x000000AB, 0x0 },
183         { 0x00007013, 0x0000009F, 0x0 },
184         { 0x00000018, 0x000000DF, 0x0 },
185 };
186
187 /*
188  * Skylake U
189  * eDP 1.4 low vswing translation parameters
190  */
191 static const struct ddi_buf_trans skl_u_ddi_translations_edp[] = {
192         { 0x00000018, 0x000000A8, 0x0 },
193         { 0x00004013, 0x000000A9, 0x0 },
194         { 0x00007011, 0x000000A2, 0x0 },
195         { 0x00009010, 0x0000009C, 0x0 },
196         { 0x00000018, 0x000000A9, 0x0 },
197         { 0x00006013, 0x000000A2, 0x0 },
198         { 0x00007011, 0x000000A6, 0x0 },
199         { 0x00002016, 0x000000AB, 0x0 },
200         { 0x00005013, 0x0000009F, 0x0 },
201         { 0x00000018, 0x000000DF, 0x0 },
202 };
203
204 /*
205  * Skylake Y
206  * eDP 1.4 low vswing translation parameters
207  */
208 static const struct ddi_buf_trans skl_y_ddi_translations_edp[] = {
209         { 0x00000018, 0x000000A8, 0x0 },
210         { 0x00004013, 0x000000AB, 0x0 },
211         { 0x00007011, 0x000000A4, 0x0 },
212         { 0x00009010, 0x000000DF, 0x0 },
213         { 0x00000018, 0x000000AA, 0x0 },
214         { 0x00006013, 0x000000A4, 0x0 },
215         { 0x00007011, 0x0000009D, 0x0 },
216         { 0x00000018, 0x000000A0, 0x0 },
217         { 0x00006012, 0x000000DF, 0x0 },
218         { 0x00000018, 0x0000008A, 0x0 },
219 };
220
221 /* Skylake U, H and S */
222 static const struct ddi_buf_trans skl_ddi_translations_hdmi[] = {
223         { 0x00000018, 0x000000AC, 0x0 },
224         { 0x00005012, 0x0000009D, 0x0 },
225         { 0x00007011, 0x00000088, 0x0 },
226         { 0x00000018, 0x000000A1, 0x0 },
227         { 0x00000018, 0x00000098, 0x0 },
228         { 0x00004013, 0x00000088, 0x0 },
229         { 0x00006012, 0x00000087, 0x0 },
230         { 0x00000018, 0x000000DF, 0x0 },
231         { 0x00003015, 0x00000087, 0x0 },        /* Default */
232         { 0x00003015, 0x000000C7, 0x0 },
233         { 0x00000018, 0x000000C7, 0x0 },
234 };
235
236 /* Skylake Y */
237 static const struct ddi_buf_trans skl_y_ddi_translations_hdmi[] = {
238         { 0x00000018, 0x000000A1, 0x0 },
239         { 0x00005012, 0x000000DF, 0x0 },
240         { 0x00007011, 0x00000084, 0x0 },
241         { 0x00000018, 0x000000A4, 0x0 },
242         { 0x00000018, 0x0000009D, 0x0 },
243         { 0x00004013, 0x00000080, 0x0 },
244         { 0x00006013, 0x000000C7, 0x0 },
245         { 0x00000018, 0x0000008A, 0x0 },
246         { 0x00003015, 0x000000C7, 0x0 },        /* Default */
247         { 0x80003015, 0x000000C7, 0x7 },        /* Uses I_boost level 0x7 */
248         { 0x00000018, 0x000000C7, 0x0 },
249 };
250
251 struct bxt_ddi_buf_trans {
252         u32 margin;     /* swing value */
253         u32 scale;      /* scale value */
254         u32 enable;     /* scale enable */
255         u32 deemphasis;
256         bool default_index; /* true if the entry represents default value */
257 };
258
259 static const struct bxt_ddi_buf_trans bxt_ddi_translations_dp[] = {
260                                         /* Idx  NT mV diff      db  */
261         { 52,  0x9A, 0, 128, true  },   /* 0:   400             0   */
262         { 78,  0x9A, 0, 85,  false },   /* 1:   400             3.5 */
263         { 104, 0x9A, 0, 64,  false },   /* 2:   400             6   */
264         { 154, 0x9A, 0, 43,  false },   /* 3:   400             9.5 */
265         { 77,  0x9A, 0, 128, false },   /* 4:   600             0   */
266         { 116, 0x9A, 0, 85,  false },   /* 5:   600             3.5 */
267         { 154, 0x9A, 0, 64,  false },   /* 6:   600             6   */
268         { 102, 0x9A, 0, 128, false },   /* 7:   800             0   */
269         { 154, 0x9A, 0, 85,  false },   /* 8:   800             3.5 */
270         { 154, 0x9A, 1, 128, false },   /* 9:   1200            0   */
271 };
272
273 static const struct bxt_ddi_buf_trans bxt_ddi_translations_edp[] = {
274                                         /* Idx  NT mV diff      db  */
275         { 26, 0, 0, 128, false },       /* 0:   200             0   */
276         { 38, 0, 0, 112, false },       /* 1:   200             1.5 */
277         { 48, 0, 0, 96,  false },       /* 2:   200             4   */
278         { 54, 0, 0, 69,  false },       /* 3:   200             6   */
279         { 32, 0, 0, 128, false },       /* 4:   250             0   */
280         { 48, 0, 0, 104, false },       /* 5:   250             1.5 */
281         { 54, 0, 0, 85,  false },       /* 6:   250             4   */
282         { 43, 0, 0, 128, false },       /* 7:   300             0   */
283         { 54, 0, 0, 101, false },       /* 8:   300             1.5 */
284         { 48, 0, 0, 128, false },       /* 9:   300             0   */
285 };
286
287 /* BSpec has 2 recommended values - entries 0 and 8.
288  * Using the entry with higher vswing.
289  */
290 static const struct bxt_ddi_buf_trans bxt_ddi_translations_hdmi[] = {
291                                         /* Idx  NT mV diff      db  */
292         { 52,  0x9A, 0, 128, false },   /* 0:   400             0   */
293         { 52,  0x9A, 0, 85,  false },   /* 1:   400             3.5 */
294         { 52,  0x9A, 0, 64,  false },   /* 2:   400             6   */
295         { 42,  0x9A, 0, 43,  false },   /* 3:   400             9.5 */
296         { 77,  0x9A, 0, 128, false },   /* 4:   600             0   */
297         { 77,  0x9A, 0, 85,  false },   /* 5:   600             3.5 */
298         { 77,  0x9A, 0, 64,  false },   /* 6:   600             6   */
299         { 102, 0x9A, 0, 128, false },   /* 7:   800             0   */
300         { 102, 0x9A, 0, 85,  false },   /* 8:   800             3.5 */
301         { 154, 0x9A, 1, 128, true },    /* 9:   1200            0   */
302 };
303
304 static void bxt_ddi_vswing_sequence(struct drm_device *dev, u32 level,
305                                     enum port port, int type);
306
307 static void ddi_get_encoder_port(struct intel_encoder *intel_encoder,
308                                  struct intel_digital_port **dig_port,
309                                  enum port *port)
310 {
311         struct drm_encoder *encoder = &intel_encoder->base;
312
313         switch (intel_encoder->type) {
314         case INTEL_OUTPUT_DP_MST:
315                 *dig_port = enc_to_mst(encoder)->primary;
316                 *port = (*dig_port)->port;
317                 break;
318         case INTEL_OUTPUT_DISPLAYPORT:
319         case INTEL_OUTPUT_EDP:
320         case INTEL_OUTPUT_HDMI:
321         case INTEL_OUTPUT_UNKNOWN:
322                 *dig_port = enc_to_dig_port(encoder);
323                 *port = (*dig_port)->port;
324                 break;
325         case INTEL_OUTPUT_ANALOG:
326                 *dig_port = NULL;
327                 *port = PORT_E;
328                 break;
329         default:
330                 WARN(1, "Invalid DDI encoder type %d\n", intel_encoder->type);
331                 break;
332         }
333 }
334
335 enum port intel_ddi_get_encoder_port(struct intel_encoder *intel_encoder)
336 {
337         struct intel_digital_port *dig_port;
338         enum port port;
339
340         ddi_get_encoder_port(intel_encoder, &dig_port, &port);
341
342         return port;
343 }
344
345 static bool
346 intel_dig_port_supports_hdmi(const struct intel_digital_port *intel_dig_port)
347 {
348         return intel_dig_port->hdmi.hdmi_reg;
349 }
350
351 static const struct ddi_buf_trans *skl_get_buf_trans_dp(struct drm_device *dev,
352                                                         int *n_entries)
353 {
354         const struct ddi_buf_trans *ddi_translations;
355
356         if (IS_SKL_ULX(dev)) {
357                 ddi_translations = skl_y_ddi_translations_dp;
358                 *n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
359         } else if (IS_SKL_ULT(dev)) {
360                 ddi_translations = skl_u_ddi_translations_dp;
361                 *n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
362         } else {
363                 ddi_translations = skl_ddi_translations_dp;
364                 *n_entries = ARRAY_SIZE(skl_ddi_translations_dp);
365         }
366
367         return ddi_translations;
368 }
369
370 static const struct ddi_buf_trans *skl_get_buf_trans_edp(struct drm_device *dev,
371                                                          int *n_entries)
372 {
373         struct drm_i915_private *dev_priv = dev->dev_private;
374         const struct ddi_buf_trans *ddi_translations;
375
376         if (IS_SKL_ULX(dev)) {
377                 if (dev_priv->edp_low_vswing) {
378                         ddi_translations = skl_y_ddi_translations_edp;
379                         *n_entries = ARRAY_SIZE(skl_y_ddi_translations_edp);
380                 } else {
381                         ddi_translations = skl_y_ddi_translations_dp;
382                         *n_entries = ARRAY_SIZE(skl_y_ddi_translations_dp);
383                 }
384         } else if (IS_SKL_ULT(dev)) {
385                 if (dev_priv->edp_low_vswing) {
386                         ddi_translations = skl_u_ddi_translations_edp;
387                         *n_entries = ARRAY_SIZE(skl_u_ddi_translations_edp);
388                 } else {
389                         ddi_translations = skl_u_ddi_translations_dp;
390                         *n_entries = ARRAY_SIZE(skl_u_ddi_translations_dp);
391                 }
392         } else {
393                 if (dev_priv->edp_low_vswing) {
394                         ddi_translations = skl_ddi_translations_edp;
395                         *n_entries = ARRAY_SIZE(skl_ddi_translations_edp);
396                 } else {
397                         ddi_translations = skl_ddi_translations_dp;
398                         *n_entries = ARRAY_SIZE(skl_ddi_translations_dp);
399                 }
400         }
401
402         return ddi_translations;
403 }
404
405 static const struct ddi_buf_trans *
406 skl_get_buf_trans_hdmi(struct drm_device *dev,
407                        int *n_entries)
408 {
409         const struct ddi_buf_trans *ddi_translations;
410
411         if (IS_SKL_ULX(dev)) {
412                 ddi_translations = skl_y_ddi_translations_hdmi;
413                 *n_entries = ARRAY_SIZE(skl_y_ddi_translations_hdmi);
414         } else {
415                 ddi_translations = skl_ddi_translations_hdmi;
416                 *n_entries = ARRAY_SIZE(skl_ddi_translations_hdmi);
417         }
418
419         return ddi_translations;
420 }
421
422 /*
423  * Starting with Haswell, DDI port buffers must be programmed with correct
424  * values in advance. The buffer values are different for FDI and DP modes,
425  * but the HDMI/DVI fields are shared among those. So we program the DDI
426  * in either FDI or DP modes only, as HDMI connections will work with both
427  * of those
428  */
429 static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port,
430                                       bool supports_hdmi)
431 {
432         struct drm_i915_private *dev_priv = dev->dev_private;
433         u32 iboost_bit = 0;
434         int i, n_hdmi_entries, n_dp_entries, n_edp_entries, hdmi_default_entry,
435             size;
436         int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift;
437         const struct ddi_buf_trans *ddi_translations_fdi;
438         const struct ddi_buf_trans *ddi_translations_dp;
439         const struct ddi_buf_trans *ddi_translations_edp;
440         const struct ddi_buf_trans *ddi_translations_hdmi;
441         const struct ddi_buf_trans *ddi_translations;
442
443         if (IS_BROXTON(dev)) {
444                 if (!supports_hdmi)
445                         return;
446
447                 /* Vswing programming for HDMI */
448                 bxt_ddi_vswing_sequence(dev, hdmi_level, port,
449                                         INTEL_OUTPUT_HDMI);
450                 return;
451         } else if (IS_SKYLAKE(dev)) {
452                 ddi_translations_fdi = NULL;
453                 ddi_translations_dp =
454                                 skl_get_buf_trans_dp(dev, &n_dp_entries);
455                 ddi_translations_edp =
456                                 skl_get_buf_trans_edp(dev, &n_edp_entries);
457                 ddi_translations_hdmi =
458                                 skl_get_buf_trans_hdmi(dev, &n_hdmi_entries);
459                 hdmi_default_entry = 8;
460                 /* If we're boosting the current, set bit 31 of trans1 */
461                 if (dev_priv->vbt.ddi_port_info[port].hdmi_boost_level ||
462                     dev_priv->vbt.ddi_port_info[port].dp_boost_level)
463                         iboost_bit = 1<<31;
464         } else if (IS_BROADWELL(dev)) {
465                 ddi_translations_fdi = bdw_ddi_translations_fdi;
466                 ddi_translations_dp = bdw_ddi_translations_dp;
467                 ddi_translations_edp = bdw_ddi_translations_edp;
468                 ddi_translations_hdmi = bdw_ddi_translations_hdmi;
469                 n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
470                 n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
471                 n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
472                 hdmi_default_entry = 7;
473         } else if (IS_HASWELL(dev)) {
474                 ddi_translations_fdi = hsw_ddi_translations_fdi;
475                 ddi_translations_dp = hsw_ddi_translations_dp;
476                 ddi_translations_edp = hsw_ddi_translations_dp;
477                 ddi_translations_hdmi = hsw_ddi_translations_hdmi;
478                 n_dp_entries = n_edp_entries = ARRAY_SIZE(hsw_ddi_translations_dp);
479                 n_hdmi_entries = ARRAY_SIZE(hsw_ddi_translations_hdmi);
480                 hdmi_default_entry = 6;
481         } else {
482                 WARN(1, "ddi translation table missing\n");
483                 ddi_translations_edp = bdw_ddi_translations_dp;
484                 ddi_translations_fdi = bdw_ddi_translations_fdi;
485                 ddi_translations_dp = bdw_ddi_translations_dp;
486                 ddi_translations_hdmi = bdw_ddi_translations_hdmi;
487                 n_edp_entries = ARRAY_SIZE(bdw_ddi_translations_edp);
488                 n_dp_entries = ARRAY_SIZE(bdw_ddi_translations_dp);
489                 n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi);
490                 hdmi_default_entry = 7;
491         }
492
493         switch (port) {
494         case PORT_A:
495                 ddi_translations = ddi_translations_edp;
496                 size = n_edp_entries;
497                 break;
498         case PORT_B:
499         case PORT_C:
500                 ddi_translations = ddi_translations_dp;
501                 size = n_dp_entries;
502                 break;
503         case PORT_D:
504                 if (intel_dp_is_edp(dev, PORT_D)) {
505                         ddi_translations = ddi_translations_edp;
506                         size = n_edp_entries;
507                 } else {
508                         ddi_translations = ddi_translations_dp;
509                         size = n_dp_entries;
510                 }
511                 break;
512         case PORT_E:
513                 if (ddi_translations_fdi)
514                         ddi_translations = ddi_translations_fdi;
515                 else
516                         ddi_translations = ddi_translations_dp;
517                 size = n_dp_entries;
518                 break;
519         default:
520                 BUG();
521         }
522
523         for (i = 0; i < size; i++) {
524                 I915_WRITE(DDI_BUF_TRANS_LO(port, i),
525                            ddi_translations[i].trans1 | iboost_bit);
526                 I915_WRITE(DDI_BUF_TRANS_HI(port, i),
527                            ddi_translations[i].trans2);
528         }
529
530         if (!supports_hdmi)
531                 return;
532
533         /* Choose a good default if VBT is badly populated */
534         if (hdmi_level == HDMI_LEVEL_SHIFT_UNKNOWN ||
535             hdmi_level >= n_hdmi_entries)
536                 hdmi_level = hdmi_default_entry;
537
538         /* Entry 9 is for HDMI: */
539         I915_WRITE(DDI_BUF_TRANS_LO(port, i),
540                    ddi_translations_hdmi[hdmi_level].trans1 | iboost_bit);
541         I915_WRITE(DDI_BUF_TRANS_HI(port, i),
542                    ddi_translations_hdmi[hdmi_level].trans2);
543 }
544
545 /* Program DDI buffers translations for DP. By default, program ports A-D in DP
546  * mode and port E for FDI.
547  */
548 void intel_prepare_ddi(struct drm_device *dev)
549 {
550         struct intel_encoder *intel_encoder;
551         bool visited[I915_MAX_PORTS] = { 0, };
552
553         if (!HAS_DDI(dev))
554                 return;
555
556         for_each_intel_encoder(dev, intel_encoder) {
557                 struct intel_digital_port *intel_dig_port;
558                 enum port port;
559                 bool supports_hdmi;
560
561                 if (intel_encoder->type == INTEL_OUTPUT_DSI)
562                         continue;
563
564                 ddi_get_encoder_port(intel_encoder, &intel_dig_port, &port);
565                 if (visited[port])
566                         continue;
567
568                 supports_hdmi = intel_dig_port &&
569                                 intel_dig_port_supports_hdmi(intel_dig_port);
570
571                 intel_prepare_ddi_buffers(dev, port, supports_hdmi);
572                 visited[port] = true;
573         }
574 }
575
576 static void intel_wait_ddi_buf_idle(struct drm_i915_private *dev_priv,
577                                     enum port port)
578 {
579         uint32_t reg = DDI_BUF_CTL(port);
580         int i;
581
582         for (i = 0; i < 16; i++) {
583                 udelay(1);
584                 if (I915_READ(reg) & DDI_BUF_IS_IDLE)
585                         return;
586         }
587         DRM_ERROR("Timeout waiting for DDI BUF %c idle bit\n", port_name(port));
588 }
589
590 /* Starting with Haswell, different DDI ports can work in FDI mode for
591  * connection to the PCH-located connectors. For this, it is necessary to train
592  * both the DDI port and PCH receiver for the desired DDI buffer settings.
593  *
594  * The recommended port to work in FDI mode is DDI E, which we use here. Also,
595  * please note that when FDI mode is active on DDI E, it shares 2 lines with
596  * DDI A (which is used for eDP)
597  */
598
599 void hsw_fdi_link_train(struct drm_crtc *crtc)
600 {
601         struct drm_device *dev = crtc->dev;
602         struct drm_i915_private *dev_priv = dev->dev_private;
603         struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
604         u32 temp, i, rx_ctl_val;
605
606         /* Set the FDI_RX_MISC pwrdn lanes and the 2 workarounds listed at the
607          * mode set "sequence for CRT port" document:
608          * - TP1 to TP2 time with the default value
609          * - FDI delay to 90h
610          *
611          * WaFDIAutoLinkSetTimingOverrride:hsw
612          */
613         I915_WRITE(FDI_RX_MISC(PIPE_A), FDI_RX_PWRDN_LANE1_VAL(2) |
614                                   FDI_RX_PWRDN_LANE0_VAL(2) |
615                                   FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
616
617         /* Enable the PCH Receiver FDI PLL */
618         rx_ctl_val = dev_priv->fdi_rx_config | FDI_RX_ENHANCE_FRAME_ENABLE |
619                      FDI_RX_PLL_ENABLE |
620                      FDI_DP_PORT_WIDTH(intel_crtc->config->fdi_lanes);
621         I915_WRITE(FDI_RX_CTL(PIPE_A), rx_ctl_val);
622         POSTING_READ(FDI_RX_CTL(PIPE_A));
623         udelay(220);
624
625         /* Switch from Rawclk to PCDclk */
626         rx_ctl_val |= FDI_PCDCLK;
627         I915_WRITE(FDI_RX_CTL(PIPE_A), rx_ctl_val);
628
629         /* Configure Port Clock Select */
630         I915_WRITE(PORT_CLK_SEL(PORT_E), intel_crtc->config->ddi_pll_sel);
631         WARN_ON(intel_crtc->config->ddi_pll_sel != PORT_CLK_SEL_SPLL);
632
633         /* Start the training iterating through available voltages and emphasis,
634          * testing each value twice. */
635         for (i = 0; i < ARRAY_SIZE(hsw_ddi_translations_fdi) * 2; i++) {
636                 /* Configure DP_TP_CTL with auto-training */
637                 I915_WRITE(DP_TP_CTL(PORT_E),
638                                         DP_TP_CTL_FDI_AUTOTRAIN |
639                                         DP_TP_CTL_ENHANCED_FRAME_ENABLE |
640                                         DP_TP_CTL_LINK_TRAIN_PAT1 |
641                                         DP_TP_CTL_ENABLE);
642
643                 /* Configure and enable DDI_BUF_CTL for DDI E with next voltage.
644                  * DDI E does not support port reversal, the functionality is
645                  * achieved on the PCH side in FDI_RX_CTL, so no need to set the
646                  * port reversal bit */
647                 I915_WRITE(DDI_BUF_CTL(PORT_E),
648                            DDI_BUF_CTL_ENABLE |
649                            ((intel_crtc->config->fdi_lanes - 1) << 1) |
650                            DDI_BUF_TRANS_SELECT(i / 2));
651                 POSTING_READ(DDI_BUF_CTL(PORT_E));
652
653                 udelay(600);
654
655                 /* Program PCH FDI Receiver TU */
656                 I915_WRITE(FDI_RX_TUSIZE1(PIPE_A), TU_SIZE(64));
657
658                 /* Enable PCH FDI Receiver with auto-training */
659                 rx_ctl_val |= FDI_RX_ENABLE | FDI_LINK_TRAIN_AUTO;
660                 I915_WRITE(FDI_RX_CTL(PIPE_A), rx_ctl_val);
661                 POSTING_READ(FDI_RX_CTL(PIPE_A));
662
663                 /* Wait for FDI receiver lane calibration */
664                 udelay(30);
665
666                 /* Unset FDI_RX_MISC pwrdn lanes */
667                 temp = I915_READ(FDI_RX_MISC(PIPE_A));
668                 temp &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
669                 I915_WRITE(FDI_RX_MISC(PIPE_A), temp);
670                 POSTING_READ(FDI_RX_MISC(PIPE_A));
671
672                 /* Wait for FDI auto training time */
673                 udelay(5);
674
675                 temp = I915_READ(DP_TP_STATUS(PORT_E));
676                 if (temp & DP_TP_STATUS_AUTOTRAIN_DONE) {
677                         DRM_DEBUG_KMS("FDI link training done on step %d\n", i);
678
679                         /* Enable normal pixel sending for FDI */
680                         I915_WRITE(DP_TP_CTL(PORT_E),
681                                    DP_TP_CTL_FDI_AUTOTRAIN |
682                                    DP_TP_CTL_LINK_TRAIN_NORMAL |
683                                    DP_TP_CTL_ENHANCED_FRAME_ENABLE |
684                                    DP_TP_CTL_ENABLE);
685
686                         return;
687                 }
688
689                 temp = I915_READ(DDI_BUF_CTL(PORT_E));
690                 temp &= ~DDI_BUF_CTL_ENABLE;
691                 I915_WRITE(DDI_BUF_CTL(PORT_E), temp);
692                 POSTING_READ(DDI_BUF_CTL(PORT_E));
693
694                 /* Disable DP_TP_CTL and FDI_RX_CTL and retry */
695                 temp = I915_READ(DP_TP_CTL(PORT_E));
696                 temp &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
697                 temp |= DP_TP_CTL_LINK_TRAIN_PAT1;
698                 I915_WRITE(DP_TP_CTL(PORT_E), temp);
699                 POSTING_READ(DP_TP_CTL(PORT_E));
700
701                 intel_wait_ddi_buf_idle(dev_priv, PORT_E);
702
703                 rx_ctl_val &= ~FDI_RX_ENABLE;
704                 I915_WRITE(FDI_RX_CTL(PIPE_A), rx_ctl_val);
705                 POSTING_READ(FDI_RX_CTL(PIPE_A));
706
707                 /* Reset FDI_RX_MISC pwrdn lanes */
708                 temp = I915_READ(FDI_RX_MISC(PIPE_A));
709                 temp &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
710                 temp |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
711                 I915_WRITE(FDI_RX_MISC(PIPE_A), temp);
712                 POSTING_READ(FDI_RX_MISC(PIPE_A));
713         }
714
715         DRM_ERROR("FDI link training failed!\n");
716 }
717
718 void intel_ddi_init_dp_buf_reg(struct intel_encoder *encoder)
719 {
720         struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
721         struct intel_digital_port *intel_dig_port =
722                 enc_to_dig_port(&encoder->base);
723
724         intel_dp->DP = intel_dig_port->saved_port_bits |
725                 DDI_BUF_CTL_ENABLE | DDI_BUF_TRANS_SELECT(0);
726         intel_dp->DP |= DDI_PORT_WIDTH(intel_dp->lane_count);
727 }
728
729 static struct intel_encoder *
730 intel_ddi_get_crtc_encoder(struct drm_crtc *crtc)
731 {
732         struct drm_device *dev = crtc->dev;
733         struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
734         struct intel_encoder *intel_encoder, *ret = NULL;
735         int num_encoders = 0;
736
737         for_each_encoder_on_crtc(dev, crtc, intel_encoder) {
738                 ret = intel_encoder;
739                 num_encoders++;
740         }
741
742         if (num_encoders != 1)
743                 WARN(1, "%d encoders on crtc for pipe %c\n", num_encoders,
744                      pipe_name(intel_crtc->pipe));
745
746         BUG_ON(ret == NULL);
747         return ret;
748 }
749
750 struct intel_encoder *
751 intel_ddi_get_crtc_new_encoder(struct intel_crtc_state *crtc_state)
752 {
753         struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc);
754         struct intel_encoder *ret = NULL;
755         struct drm_atomic_state *state;
756         struct drm_connector *connector;
757         struct drm_connector_state *connector_state;
758         int num_encoders = 0;
759         int i;
760
761         state = crtc_state->base.state;
762
763         for_each_connector_in_state(state, connector, connector_state, i) {
764                 if (connector_state->crtc != crtc_state->base.crtc)
765                         continue;
766
767                 ret = to_intel_encoder(connector_state->best_encoder);
768                 num_encoders++;
769         }
770
771         WARN(num_encoders != 1, "%d encoders on crtc for pipe %c\n", num_encoders,
772              pipe_name(crtc->pipe));
773
774         BUG_ON(ret == NULL);
775         return ret;
776 }
777
778 #define LC_FREQ 2700
779 #define LC_FREQ_2K U64_C(LC_FREQ * 2000)
780
781 #define P_MIN 2
782 #define P_MAX 64
783 #define P_INC 2
784
785 /* Constraints for PLL good behavior */
786 #define REF_MIN 48
787 #define REF_MAX 400
788 #define VCO_MIN 2400
789 #define VCO_MAX 4800
790
791 #define abs_diff(a, b) ({                       \
792         typeof(a) __a = (a);                    \
793         typeof(b) __b = (b);                    \
794         (void) (&__a == &__b);                  \
795         __a > __b ? (__a - __b) : (__b - __a); })
796
797 struct hsw_wrpll_rnp {
798         unsigned p, n2, r2;
799 };
800
801 static unsigned hsw_wrpll_get_budget_for_freq(int clock)
802 {
803         unsigned budget;
804
805         switch (clock) {
806         case 25175000:
807         case 25200000:
808         case 27000000:
809         case 27027000:
810         case 37762500:
811         case 37800000:
812         case 40500000:
813         case 40541000:
814         case 54000000:
815         case 54054000:
816         case 59341000:
817         case 59400000:
818         case 72000000:
819         case 74176000:
820         case 74250000:
821         case 81000000:
822         case 81081000:
823         case 89012000:
824         case 89100000:
825         case 108000000:
826         case 108108000:
827         case 111264000:
828         case 111375000:
829         case 148352000:
830         case 148500000:
831         case 162000000:
832         case 162162000:
833         case 222525000:
834         case 222750000:
835         case 296703000:
836         case 297000000:
837                 budget = 0;
838                 break;
839         case 233500000:
840         case 245250000:
841         case 247750000:
842         case 253250000:
843         case 298000000:
844                 budget = 1500;
845                 break;
846         case 169128000:
847         case 169500000:
848         case 179500000:
849         case 202000000:
850                 budget = 2000;
851                 break;
852         case 256250000:
853         case 262500000:
854         case 270000000:
855         case 272500000:
856         case 273750000:
857         case 280750000:
858         case 281250000:
859         case 286000000:
860         case 291750000:
861                 budget = 4000;
862                 break;
863         case 267250000:
864         case 268500000:
865                 budget = 5000;
866                 break;
867         default:
868                 budget = 1000;
869                 break;
870         }
871
872         return budget;
873 }
874
875 static void hsw_wrpll_update_rnp(uint64_t freq2k, unsigned budget,
876                                  unsigned r2, unsigned n2, unsigned p,
877                                  struct hsw_wrpll_rnp *best)
878 {
879         uint64_t a, b, c, d, diff, diff_best;
880
881         /* No best (r,n,p) yet */
882         if (best->p == 0) {
883                 best->p = p;
884                 best->n2 = n2;
885                 best->r2 = r2;
886                 return;
887         }
888
889         /*
890          * Output clock is (LC_FREQ_2K / 2000) * N / (P * R), which compares to
891          * freq2k.
892          *
893          * delta = 1e6 *
894          *         abs(freq2k - (LC_FREQ_2K * n2/(p * r2))) /
895          *         freq2k;
896          *
897          * and we would like delta <= budget.
898          *
899          * If the discrepancy is above the PPM-based budget, always prefer to
900          * improve upon the previous solution.  However, if you're within the
901          * budget, try to maximize Ref * VCO, that is N / (P * R^2).
902          */
903         a = freq2k * budget * p * r2;
904         b = freq2k * budget * best->p * best->r2;
905         diff = abs_diff(freq2k * p * r2, LC_FREQ_2K * n2);
906         diff_best = abs_diff(freq2k * best->p * best->r2,
907                              LC_FREQ_2K * best->n2);
908         c = 1000000 * diff;
909         d = 1000000 * diff_best;
910
911         if (a < c && b < d) {
912                 /* If both are above the budget, pick the closer */
913                 if (best->p * best->r2 * diff < p * r2 * diff_best) {
914                         best->p = p;
915                         best->n2 = n2;
916                         best->r2 = r2;
917                 }
918         } else if (a >= c && b < d) {
919                 /* If A is below the threshold but B is above it?  Update. */
920                 best->p = p;
921                 best->n2 = n2;
922                 best->r2 = r2;
923         } else if (a >= c && b >= d) {
924                 /* Both are below the limit, so pick the higher n2/(r2*r2) */
925                 if (n2 * best->r2 * best->r2 > best->n2 * r2 * r2) {
926                         best->p = p;
927                         best->n2 = n2;
928                         best->r2 = r2;
929                 }
930         }
931         /* Otherwise a < c && b >= d, do nothing */
932 }
933
934 static int hsw_ddi_calc_wrpll_link(struct drm_i915_private *dev_priv, int reg)
935 {
936         int refclk = LC_FREQ;
937         int n, p, r;
938         u32 wrpll;
939
940         wrpll = I915_READ(reg);
941         switch (wrpll & WRPLL_PLL_REF_MASK) {
942         case WRPLL_PLL_SSC:
943         case WRPLL_PLL_NON_SSC:
944                 /*
945                  * We could calculate spread here, but our checking
946                  * code only cares about 5% accuracy, and spread is a max of
947                  * 0.5% downspread.
948                  */
949                 refclk = 135;
950                 break;
951         case WRPLL_PLL_LCPLL:
952                 refclk = LC_FREQ;
953                 break;
954         default:
955                 WARN(1, "bad wrpll refclk\n");
956                 return 0;
957         }
958
959         r = wrpll & WRPLL_DIVIDER_REF_MASK;
960         p = (wrpll & WRPLL_DIVIDER_POST_MASK) >> WRPLL_DIVIDER_POST_SHIFT;
961         n = (wrpll & WRPLL_DIVIDER_FB_MASK) >> WRPLL_DIVIDER_FB_SHIFT;
962
963         /* Convert to KHz, p & r have a fixed point portion */
964         return (refclk * n * 100) / (p * r);
965 }
966
967 static int skl_calc_wrpll_link(struct drm_i915_private *dev_priv,
968                                uint32_t dpll)
969 {
970         uint32_t cfgcr1_reg, cfgcr2_reg;
971         uint32_t cfgcr1_val, cfgcr2_val;
972         uint32_t p0, p1, p2, dco_freq;
973
974         cfgcr1_reg = DPLL_CFGCR1(dpll);
975         cfgcr2_reg = DPLL_CFGCR2(dpll);
976
977         cfgcr1_val = I915_READ(cfgcr1_reg);
978         cfgcr2_val = I915_READ(cfgcr2_reg);
979
980         p0 = cfgcr2_val & DPLL_CFGCR2_PDIV_MASK;
981         p2 = cfgcr2_val & DPLL_CFGCR2_KDIV_MASK;
982
983         if (cfgcr2_val &  DPLL_CFGCR2_QDIV_MODE(1))
984                 p1 = (cfgcr2_val & DPLL_CFGCR2_QDIV_RATIO_MASK) >> 8;
985         else
986                 p1 = 1;
987
988
989         switch (p0) {
990         case DPLL_CFGCR2_PDIV_1:
991                 p0 = 1;
992                 break;
993         case DPLL_CFGCR2_PDIV_2:
994                 p0 = 2;
995                 break;
996         case DPLL_CFGCR2_PDIV_3:
997                 p0 = 3;
998                 break;
999         case DPLL_CFGCR2_PDIV_7:
1000                 p0 = 7;
1001                 break;
1002         }
1003
1004         switch (p2) {
1005         case DPLL_CFGCR2_KDIV_5:
1006                 p2 = 5;
1007                 break;
1008         case DPLL_CFGCR2_KDIV_2:
1009                 p2 = 2;
1010                 break;
1011         case DPLL_CFGCR2_KDIV_3:
1012                 p2 = 3;
1013                 break;
1014         case DPLL_CFGCR2_KDIV_1:
1015                 p2 = 1;
1016                 break;
1017         }
1018
1019         dco_freq = (cfgcr1_val & DPLL_CFGCR1_DCO_INTEGER_MASK) * 24 * 1000;
1020
1021         dco_freq += (((cfgcr1_val & DPLL_CFGCR1_DCO_FRACTION_MASK) >> 9) * 24 *
1022                 1000) / 0x8000;
1023
1024         return dco_freq / (p0 * p1 * p2 * 5);
1025 }
1026
1027 static void ddi_dotclock_get(struct intel_crtc_state *pipe_config)
1028 {
1029         int dotclock;
1030
1031         if (pipe_config->has_pch_encoder)
1032                 dotclock = intel_dotclock_calculate(pipe_config->port_clock,
1033                                                     &pipe_config->fdi_m_n);
1034         else if (pipe_config->has_dp_encoder)
1035                 dotclock = intel_dotclock_calculate(pipe_config->port_clock,
1036                                                     &pipe_config->dp_m_n);
1037         else if (pipe_config->has_hdmi_sink && pipe_config->pipe_bpp == 36)
1038                 dotclock = pipe_config->port_clock * 2 / 3;
1039         else
1040                 dotclock = pipe_config->port_clock;
1041
1042         if (pipe_config->pixel_multiplier)
1043                 dotclock /= pipe_config->pixel_multiplier;
1044
1045         pipe_config->base.adjusted_mode.crtc_clock = dotclock;
1046 }
1047
1048 static void skl_ddi_clock_get(struct intel_encoder *encoder,
1049                                 struct intel_crtc_state *pipe_config)
1050 {
1051         struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
1052         int link_clock = 0;
1053         uint32_t dpll_ctl1, dpll;
1054
1055         dpll = pipe_config->ddi_pll_sel;
1056
1057         dpll_ctl1 = I915_READ(DPLL_CTRL1);
1058
1059         if (dpll_ctl1 & DPLL_CTRL1_HDMI_MODE(dpll)) {
1060                 link_clock = skl_calc_wrpll_link(dev_priv, dpll);
1061         } else {
1062                 link_clock = dpll_ctl1 & DPLL_CTRL1_LINK_RATE_MASK(dpll);
1063                 link_clock >>= DPLL_CTRL1_LINK_RATE_SHIFT(dpll);
1064
1065                 switch (link_clock) {
1066                 case DPLL_CTRL1_LINK_RATE_810:
1067                         link_clock = 81000;
1068                         break;
1069                 case DPLL_CTRL1_LINK_RATE_1080:
1070                         link_clock = 108000;
1071                         break;
1072                 case DPLL_CTRL1_LINK_RATE_1350:
1073                         link_clock = 135000;
1074                         break;
1075                 case DPLL_CTRL1_LINK_RATE_1620:
1076                         link_clock = 162000;
1077                         break;
1078                 case DPLL_CTRL1_LINK_RATE_2160:
1079                         link_clock = 216000;
1080                         break;
1081                 case DPLL_CTRL1_LINK_RATE_2700:
1082                         link_clock = 270000;
1083                         break;
1084                 default:
1085                         WARN(1, "Unsupported link rate\n");
1086                         break;
1087                 }
1088                 link_clock *= 2;
1089         }
1090
1091         pipe_config->port_clock = link_clock;
1092
1093         ddi_dotclock_get(pipe_config);
1094 }
1095
1096 static void hsw_ddi_clock_get(struct intel_encoder *encoder,
1097                               struct intel_crtc_state *pipe_config)
1098 {
1099         struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
1100         int link_clock = 0;
1101         u32 val, pll;
1102
1103         val = pipe_config->ddi_pll_sel;
1104         switch (val & PORT_CLK_SEL_MASK) {
1105         case PORT_CLK_SEL_LCPLL_810:
1106                 link_clock = 81000;
1107                 break;
1108         case PORT_CLK_SEL_LCPLL_1350:
1109                 link_clock = 135000;
1110                 break;
1111         case PORT_CLK_SEL_LCPLL_2700:
1112                 link_clock = 270000;
1113                 break;
1114         case PORT_CLK_SEL_WRPLL1:
1115                 link_clock = hsw_ddi_calc_wrpll_link(dev_priv, WRPLL_CTL1);
1116                 break;
1117         case PORT_CLK_SEL_WRPLL2:
1118                 link_clock = hsw_ddi_calc_wrpll_link(dev_priv, WRPLL_CTL2);
1119                 break;
1120         case PORT_CLK_SEL_SPLL:
1121                 pll = I915_READ(SPLL_CTL) & SPLL_PLL_FREQ_MASK;
1122                 if (pll == SPLL_PLL_FREQ_810MHz)
1123                         link_clock = 81000;
1124                 else if (pll == SPLL_PLL_FREQ_1350MHz)
1125                         link_clock = 135000;
1126                 else if (pll == SPLL_PLL_FREQ_2700MHz)
1127                         link_clock = 270000;
1128                 else {
1129                         WARN(1, "bad spll freq\n");
1130                         return;
1131                 }
1132                 break;
1133         default:
1134                 WARN(1, "bad port clock sel\n");
1135                 return;
1136         }
1137
1138         pipe_config->port_clock = link_clock * 2;
1139
1140         ddi_dotclock_get(pipe_config);
1141 }
1142
1143 static int bxt_calc_pll_link(struct drm_i915_private *dev_priv,
1144                                 enum intel_dpll_id dpll)
1145 {
1146         struct intel_shared_dpll *pll;
1147         struct intel_dpll_hw_state *state;
1148         intel_clock_t clock;
1149
1150         /* For DDI ports we always use a shared PLL. */
1151         if (WARN_ON(dpll == DPLL_ID_PRIVATE))
1152                 return 0;
1153
1154         pll = &dev_priv->shared_dplls[dpll];
1155         state = &pll->config.hw_state;
1156
1157         clock.m1 = 2;
1158         clock.m2 = (state->pll0 & PORT_PLL_M2_MASK) << 22;
1159         if (state->pll3 & PORT_PLL_M2_FRAC_ENABLE)
1160                 clock.m2 |= state->pll2 & PORT_PLL_M2_FRAC_MASK;
1161         clock.n = (state->pll1 & PORT_PLL_N_MASK) >> PORT_PLL_N_SHIFT;
1162         clock.p1 = (state->ebb0 & PORT_PLL_P1_MASK) >> PORT_PLL_P1_SHIFT;
1163         clock.p2 = (state->ebb0 & PORT_PLL_P2_MASK) >> PORT_PLL_P2_SHIFT;
1164
1165         return chv_calc_dpll_params(100000, &clock);
1166 }
1167
1168 static void bxt_ddi_clock_get(struct intel_encoder *encoder,
1169                                 struct intel_crtc_state *pipe_config)
1170 {
1171         struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
1172         enum port port = intel_ddi_get_encoder_port(encoder);
1173         uint32_t dpll = port;
1174
1175         pipe_config->port_clock = bxt_calc_pll_link(dev_priv, dpll);
1176
1177         ddi_dotclock_get(pipe_config);
1178 }
1179
1180 void intel_ddi_clock_get(struct intel_encoder *encoder,
1181                          struct intel_crtc_state *pipe_config)
1182 {
1183         struct drm_device *dev = encoder->base.dev;
1184
1185         if (INTEL_INFO(dev)->gen <= 8)
1186                 hsw_ddi_clock_get(encoder, pipe_config);
1187         else if (IS_SKYLAKE(dev))
1188                 skl_ddi_clock_get(encoder, pipe_config);
1189         else if (IS_BROXTON(dev))
1190                 bxt_ddi_clock_get(encoder, pipe_config);
1191 }
1192
1193 static void
1194 hsw_ddi_calculate_wrpll(int clock /* in Hz */,
1195                         unsigned *r2_out, unsigned *n2_out, unsigned *p_out)
1196 {
1197         uint64_t freq2k;
1198         unsigned p, n2, r2;
1199         struct hsw_wrpll_rnp best = { 0, 0, 0 };
1200         unsigned budget;
1201
1202         freq2k = clock / 100;
1203
1204         budget = hsw_wrpll_get_budget_for_freq(clock);
1205
1206         /* Special case handling for 540 pixel clock: bypass WR PLL entirely
1207          * and directly pass the LC PLL to it. */
1208         if (freq2k == 5400000) {
1209                 *n2_out = 2;
1210                 *p_out = 1;
1211                 *r2_out = 2;
1212                 return;
1213         }
1214
1215         /*
1216          * Ref = LC_FREQ / R, where Ref is the actual reference input seen by
1217          * the WR PLL.
1218          *
1219          * We want R so that REF_MIN <= Ref <= REF_MAX.
1220          * Injecting R2 = 2 * R gives:
1221          *   REF_MAX * r2 > LC_FREQ * 2 and
1222          *   REF_MIN * r2 < LC_FREQ * 2
1223          *
1224          * Which means the desired boundaries for r2 are:
1225          *  LC_FREQ * 2 / REF_MAX < r2 < LC_FREQ * 2 / REF_MIN
1226          *
1227          */
1228         for (r2 = LC_FREQ * 2 / REF_MAX + 1;
1229              r2 <= LC_FREQ * 2 / REF_MIN;
1230              r2++) {
1231
1232                 /*
1233                  * VCO = N * Ref, that is: VCO = N * LC_FREQ / R
1234                  *
1235                  * Once again we want VCO_MIN <= VCO <= VCO_MAX.
1236                  * Injecting R2 = 2 * R and N2 = 2 * N, we get:
1237                  *   VCO_MAX * r2 > n2 * LC_FREQ and
1238                  *   VCO_MIN * r2 < n2 * LC_FREQ)
1239                  *
1240                  * Which means the desired boundaries for n2 are:
1241                  * VCO_MIN * r2 / LC_FREQ < n2 < VCO_MAX * r2 / LC_FREQ
1242                  */
1243                 for (n2 = VCO_MIN * r2 / LC_FREQ + 1;
1244                      n2 <= VCO_MAX * r2 / LC_FREQ;
1245                      n2++) {
1246
1247                         for (p = P_MIN; p <= P_MAX; p += P_INC)
1248                                 hsw_wrpll_update_rnp(freq2k, budget,
1249                                                      r2, n2, p, &best);
1250                 }
1251         }
1252
1253         *n2_out = best.n2;
1254         *p_out = best.p;
1255         *r2_out = best.r2;
1256 }
1257
1258 static bool
1259 hsw_ddi_pll_select(struct intel_crtc *intel_crtc,
1260                    struct intel_crtc_state *crtc_state,
1261                    struct intel_encoder *intel_encoder)
1262 {
1263         int clock = crtc_state->port_clock;
1264
1265         if (intel_encoder->type == INTEL_OUTPUT_HDMI) {
1266                 struct intel_shared_dpll *pll;
1267                 uint32_t val;
1268                 unsigned p, n2, r2;
1269
1270                 hsw_ddi_calculate_wrpll(clock * 1000, &r2, &n2, &p);
1271
1272                 val = WRPLL_PLL_ENABLE | WRPLL_PLL_LCPLL |
1273                       WRPLL_DIVIDER_REFERENCE(r2) | WRPLL_DIVIDER_FEEDBACK(n2) |
1274                       WRPLL_DIVIDER_POST(p);
1275
1276                 memset(&crtc_state->dpll_hw_state, 0,
1277                        sizeof(crtc_state->dpll_hw_state));
1278
1279                 crtc_state->dpll_hw_state.wrpll = val;
1280
1281                 pll = intel_get_shared_dpll(intel_crtc, crtc_state);
1282                 if (pll == NULL) {
1283                         DRM_DEBUG_DRIVER("failed to find PLL for pipe %c\n",
1284                                          pipe_name(intel_crtc->pipe));
1285                         return false;
1286                 }
1287
1288                 crtc_state->ddi_pll_sel = PORT_CLK_SEL_WRPLL(pll->id);
1289         }
1290
1291         return true;
1292 }
1293
1294 struct skl_wrpll_context {
1295         uint64_t min_deviation;         /* current minimal deviation */
1296         uint64_t central_freq;          /* chosen central freq */
1297         uint64_t dco_freq;              /* chosen dco freq */
1298         unsigned int p;                 /* chosen divider */
1299 };
1300
1301 static void skl_wrpll_context_init(struct skl_wrpll_context *ctx)
1302 {
1303         memset(ctx, 0, sizeof(*ctx));
1304
1305         ctx->min_deviation = U64_MAX;
1306 }
1307
1308 /* DCO freq must be within +1%/-6%  of the DCO central freq */
1309 #define SKL_DCO_MAX_PDEVIATION  100
1310 #define SKL_DCO_MAX_NDEVIATION  600
1311
1312 static void skl_wrpll_try_divider(struct skl_wrpll_context *ctx,
1313                                   uint64_t central_freq,
1314                                   uint64_t dco_freq,
1315                                   unsigned int divider)
1316 {
1317         uint64_t deviation;
1318
1319         deviation = div64_u64(10000 * abs_diff(dco_freq, central_freq),
1320                               central_freq);
1321
1322         /* positive deviation */
1323         if (dco_freq >= central_freq) {
1324                 if (deviation < SKL_DCO_MAX_PDEVIATION &&
1325                     deviation < ctx->min_deviation) {
1326                         ctx->min_deviation = deviation;
1327                         ctx->central_freq = central_freq;
1328                         ctx->dco_freq = dco_freq;
1329                         ctx->p = divider;
1330                 }
1331         /* negative deviation */
1332         } else if (deviation < SKL_DCO_MAX_NDEVIATION &&
1333                    deviation < ctx->min_deviation) {
1334                 ctx->min_deviation = deviation;
1335                 ctx->central_freq = central_freq;
1336                 ctx->dco_freq = dco_freq;
1337                 ctx->p = divider;
1338         }
1339 }
1340
1341 static void skl_wrpll_get_multipliers(unsigned int p,
1342                                       unsigned int *p0 /* out */,
1343                                       unsigned int *p1 /* out */,
1344                                       unsigned int *p2 /* out */)
1345 {
1346         /* even dividers */
1347         if (p % 2 == 0) {
1348                 unsigned int half = p / 2;
1349
1350                 if (half == 1 || half == 2 || half == 3 || half == 5) {
1351                         *p0 = 2;
1352                         *p1 = 1;
1353                         *p2 = half;
1354                 } else if (half % 2 == 0) {
1355                         *p0 = 2;
1356                         *p1 = half / 2;
1357                         *p2 = 2;
1358                 } else if (half % 3 == 0) {
1359                         *p0 = 3;
1360                         *p1 = half / 3;
1361                         *p2 = 2;
1362                 } else if (half % 7 == 0) {
1363                         *p0 = 7;
1364                         *p1 = half / 7;
1365                         *p2 = 2;
1366                 }
1367         } else if (p == 3 || p == 9) {  /* 3, 5, 7, 9, 15, 21, 35 */
1368                 *p0 = 3;
1369                 *p1 = 1;
1370                 *p2 = p / 3;
1371         } else if (p == 5 || p == 7) {
1372                 *p0 = p;
1373                 *p1 = 1;
1374                 *p2 = 1;
1375         } else if (p == 15) {
1376                 *p0 = 3;
1377                 *p1 = 1;
1378                 *p2 = 5;
1379         } else if (p == 21) {
1380                 *p0 = 7;
1381                 *p1 = 1;
1382                 *p2 = 3;
1383         } else if (p == 35) {
1384                 *p0 = 7;
1385                 *p1 = 1;
1386                 *p2 = 5;
1387         }
1388 }
1389
1390 struct skl_wrpll_params {
1391         uint32_t        dco_fraction;
1392         uint32_t        dco_integer;
1393         uint32_t        qdiv_ratio;
1394         uint32_t        qdiv_mode;
1395         uint32_t        kdiv;
1396         uint32_t        pdiv;
1397         uint32_t        central_freq;
1398 };
1399
1400 static void skl_wrpll_params_populate(struct skl_wrpll_params *params,
1401                                       uint64_t afe_clock,
1402                                       uint64_t central_freq,
1403                                       uint32_t p0, uint32_t p1, uint32_t p2)
1404 {
1405         uint64_t dco_freq;
1406
1407         switch (central_freq) {
1408         case 9600000000ULL:
1409                 params->central_freq = 0;
1410                 break;
1411         case 9000000000ULL:
1412                 params->central_freq = 1;
1413                 break;
1414         case 8400000000ULL:
1415                 params->central_freq = 3;
1416         }
1417
1418         switch (p0) {
1419         case 1:
1420                 params->pdiv = 0;
1421                 break;
1422         case 2:
1423                 params->pdiv = 1;
1424                 break;
1425         case 3:
1426                 params->pdiv = 2;
1427                 break;
1428         case 7:
1429                 params->pdiv = 4;
1430                 break;
1431         default:
1432                 WARN(1, "Incorrect PDiv\n");
1433         }
1434
1435         switch (p2) {
1436         case 5:
1437                 params->kdiv = 0;
1438                 break;
1439         case 2:
1440                 params->kdiv = 1;
1441                 break;
1442         case 3:
1443                 params->kdiv = 2;
1444                 break;
1445         case 1:
1446                 params->kdiv = 3;
1447                 break;
1448         default:
1449                 WARN(1, "Incorrect KDiv\n");
1450         }
1451
1452         params->qdiv_ratio = p1;
1453         params->qdiv_mode = (params->qdiv_ratio == 1) ? 0 : 1;
1454
1455         dco_freq = p0 * p1 * p2 * afe_clock;
1456
1457         /*
1458          * Intermediate values are in Hz.
1459          * Divide by MHz to match bsepc
1460          */
1461         params->dco_integer = div_u64(dco_freq, 24 * MHz(1));
1462         params->dco_fraction =
1463                 div_u64((div_u64(dco_freq, 24) -
1464                          params->dco_integer * MHz(1)) * 0x8000, MHz(1));
1465 }
1466
1467 static bool
1468 skl_ddi_calculate_wrpll(int clock /* in Hz */,
1469                         struct skl_wrpll_params *wrpll_params)
1470 {
1471         uint64_t afe_clock = clock * 5; /* AFE Clock is 5x Pixel clock */
1472         uint64_t dco_central_freq[3] = {8400000000ULL,
1473                                         9000000000ULL,
1474                                         9600000000ULL};
1475         static const int even_dividers[] = {  4,  6,  8, 10, 12, 14, 16, 18, 20,
1476                                              24, 28, 30, 32, 36, 40, 42, 44,
1477                                              48, 52, 54, 56, 60, 64, 66, 68,
1478                                              70, 72, 76, 78, 80, 84, 88, 90,
1479                                              92, 96, 98 };
1480         static const int odd_dividers[] = { 3, 5, 7, 9, 15, 21, 35 };
1481         static const struct {
1482                 const int *list;
1483                 int n_dividers;
1484         } dividers[] = {
1485                 { even_dividers, ARRAY_SIZE(even_dividers) },
1486                 { odd_dividers, ARRAY_SIZE(odd_dividers) },
1487         };
1488         struct skl_wrpll_context ctx;
1489         unsigned int dco, d, i;
1490         unsigned int p0, p1, p2;
1491
1492         skl_wrpll_context_init(&ctx);
1493
1494         for (d = 0; d < ARRAY_SIZE(dividers); d++) {
1495                 for (dco = 0; dco < ARRAY_SIZE(dco_central_freq); dco++) {
1496                         for (i = 0; i < dividers[d].n_dividers; i++) {
1497                                 unsigned int p = dividers[d].list[i];
1498                                 uint64_t dco_freq = p * afe_clock;
1499
1500                                 skl_wrpll_try_divider(&ctx,
1501                                                       dco_central_freq[dco],
1502                                                       dco_freq,
1503                                                       p);
1504                                 /*
1505                                  * Skip the remaining dividers if we're sure to
1506                                  * have found the definitive divider, we can't
1507                                  * improve a 0 deviation.
1508                                  */
1509                                 if (ctx.min_deviation == 0)
1510                                         goto skip_remaining_dividers;
1511                         }
1512                 }
1513
1514 skip_remaining_dividers:
1515                 /*
1516                  * If a solution is found with an even divider, prefer
1517                  * this one.
1518                  */
1519                 if (d == 0 && ctx.p)
1520                         break;
1521         }
1522
1523         if (!ctx.p) {
1524                 DRM_DEBUG_DRIVER("No valid divider found for %dHz\n", clock);
1525                 return false;
1526         }
1527
1528         /*
1529          * gcc incorrectly analyses that these can be used without being
1530          * initialized. To be fair, it's hard to guess.
1531          */
1532         p0 = p1 = p2 = 0;
1533         skl_wrpll_get_multipliers(ctx.p, &p0, &p1, &p2);
1534         skl_wrpll_params_populate(wrpll_params, afe_clock, ctx.central_freq,
1535                                   p0, p1, p2);
1536
1537         return true;
1538 }
1539
1540 static bool
1541 skl_ddi_pll_select(struct intel_crtc *intel_crtc,
1542                    struct intel_crtc_state *crtc_state,
1543                    struct intel_encoder *intel_encoder)
1544 {
1545         struct intel_shared_dpll *pll;
1546         uint32_t ctrl1, cfgcr1, cfgcr2;
1547         int clock = crtc_state->port_clock;
1548
1549         /*
1550          * See comment in intel_dpll_hw_state to understand why we always use 0
1551          * as the DPLL id in this function.
1552          */
1553
1554         ctrl1 = DPLL_CTRL1_OVERRIDE(0);
1555
1556         if (intel_encoder->type == INTEL_OUTPUT_HDMI) {
1557                 struct skl_wrpll_params wrpll_params = { 0, };
1558
1559                 ctrl1 |= DPLL_CTRL1_HDMI_MODE(0);
1560
1561                 if (!skl_ddi_calculate_wrpll(clock * 1000, &wrpll_params))
1562                         return false;
1563
1564                 cfgcr1 = DPLL_CFGCR1_FREQ_ENABLE |
1565                          DPLL_CFGCR1_DCO_FRACTION(wrpll_params.dco_fraction) |
1566                          wrpll_params.dco_integer;
1567
1568                 cfgcr2 = DPLL_CFGCR2_QDIV_RATIO(wrpll_params.qdiv_ratio) |
1569                          DPLL_CFGCR2_QDIV_MODE(wrpll_params.qdiv_mode) |
1570                          DPLL_CFGCR2_KDIV(wrpll_params.kdiv) |
1571                          DPLL_CFGCR2_PDIV(wrpll_params.pdiv) |
1572                          wrpll_params.central_freq;
1573         } else if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT) {
1574                 switch (crtc_state->port_clock / 2) {
1575                 case 81000:
1576                         ctrl1 |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_810, 0);
1577                         break;
1578                 case 135000:
1579                         ctrl1 |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1350, 0);
1580                         break;
1581                 case 270000:
1582                         ctrl1 |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_2700, 0);
1583                         break;
1584                 }
1585
1586                 cfgcr1 = cfgcr2 = 0;
1587         } else /* eDP */
1588                 return true;
1589
1590         memset(&crtc_state->dpll_hw_state, 0,
1591                sizeof(crtc_state->dpll_hw_state));
1592
1593         crtc_state->dpll_hw_state.ctrl1 = ctrl1;
1594         crtc_state->dpll_hw_state.cfgcr1 = cfgcr1;
1595         crtc_state->dpll_hw_state.cfgcr2 = cfgcr2;
1596
1597         pll = intel_get_shared_dpll(intel_crtc, crtc_state);
1598         if (pll == NULL) {
1599                 DRM_DEBUG_DRIVER("failed to find PLL for pipe %c\n",
1600                                  pipe_name(intel_crtc->pipe));
1601                 return false;
1602         }
1603
1604         /* shared DPLL id 0 is DPLL 1 */
1605         crtc_state->ddi_pll_sel = pll->id + 1;
1606
1607         return true;
1608 }
1609
1610 /* bxt clock parameters */
1611 struct bxt_clk_div {
1612         int clock;
1613         uint32_t p1;
1614         uint32_t p2;
1615         uint32_t m2_int;
1616         uint32_t m2_frac;
1617         bool m2_frac_en;
1618         uint32_t n;
1619 };
1620
1621 /* pre-calculated values for DP linkrates */
1622 static const struct bxt_clk_div bxt_dp_clk_val[] = {
1623         {162000, 4, 2, 32, 1677722, 1, 1},
1624         {270000, 4, 1, 27,       0, 0, 1},
1625         {540000, 2, 1, 27,       0, 0, 1},
1626         {216000, 3, 2, 32, 1677722, 1, 1},
1627         {243000, 4, 1, 24, 1258291, 1, 1},
1628         {324000, 4, 1, 32, 1677722, 1, 1},
1629         {432000, 3, 1, 32, 1677722, 1, 1}
1630 };
1631
1632 static bool
1633 bxt_ddi_pll_select(struct intel_crtc *intel_crtc,
1634                    struct intel_crtc_state *crtc_state,
1635                    struct intel_encoder *intel_encoder)
1636 {
1637         struct intel_shared_dpll *pll;
1638         struct bxt_clk_div clk_div = {0};
1639         int vco = 0;
1640         uint32_t prop_coef, int_coef, gain_ctl, targ_cnt;
1641         uint32_t lanestagger;
1642         int clock = crtc_state->port_clock;
1643
1644         if (intel_encoder->type == INTEL_OUTPUT_HDMI) {
1645                 intel_clock_t best_clock;
1646
1647                 /* Calculate HDMI div */
1648                 /*
1649                  * FIXME: tie the following calculation into
1650                  * i9xx_crtc_compute_clock
1651                  */
1652                 if (!bxt_find_best_dpll(crtc_state, clock, &best_clock)) {
1653                         DRM_DEBUG_DRIVER("no PLL dividers found for clock %d pipe %c\n",
1654                                          clock, pipe_name(intel_crtc->pipe));
1655                         return false;
1656                 }
1657
1658                 clk_div.p1 = best_clock.p1;
1659                 clk_div.p2 = best_clock.p2;
1660                 WARN_ON(best_clock.m1 != 2);
1661                 clk_div.n = best_clock.n;
1662                 clk_div.m2_int = best_clock.m2 >> 22;
1663                 clk_div.m2_frac = best_clock.m2 & ((1 << 22) - 1);
1664                 clk_div.m2_frac_en = clk_div.m2_frac != 0;
1665
1666                 vco = best_clock.vco;
1667         } else if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT ||
1668                         intel_encoder->type == INTEL_OUTPUT_EDP) {
1669                 int i;
1670
1671                 clk_div = bxt_dp_clk_val[0];
1672                 for (i = 0; i < ARRAY_SIZE(bxt_dp_clk_val); ++i) {
1673                         if (bxt_dp_clk_val[i].clock == clock) {
1674                                 clk_div = bxt_dp_clk_val[i];
1675                                 break;
1676                         }
1677                 }
1678                 vco = clock * 10 / 2 * clk_div.p1 * clk_div.p2;
1679         }
1680
1681         if (vco >= 6200000 && vco <= 6700000) {
1682                 prop_coef = 4;
1683                 int_coef = 9;
1684                 gain_ctl = 3;
1685                 targ_cnt = 8;
1686         } else if ((vco > 5400000 && vco < 6200000) ||
1687                         (vco >= 4800000 && vco < 5400000)) {
1688                 prop_coef = 5;
1689                 int_coef = 11;
1690                 gain_ctl = 3;
1691                 targ_cnt = 9;
1692         } else if (vco == 5400000) {
1693                 prop_coef = 3;
1694                 int_coef = 8;
1695                 gain_ctl = 1;
1696                 targ_cnt = 9;
1697         } else {
1698                 DRM_ERROR("Invalid VCO\n");
1699                 return false;
1700         }
1701
1702         memset(&crtc_state->dpll_hw_state, 0,
1703                sizeof(crtc_state->dpll_hw_state));
1704
1705         if (clock > 270000)
1706                 lanestagger = 0x18;
1707         else if (clock > 135000)
1708                 lanestagger = 0x0d;
1709         else if (clock > 67000)
1710                 lanestagger = 0x07;
1711         else if (clock > 33000)
1712                 lanestagger = 0x04;
1713         else
1714                 lanestagger = 0x02;
1715
1716         crtc_state->dpll_hw_state.ebb0 =
1717                 PORT_PLL_P1(clk_div.p1) | PORT_PLL_P2(clk_div.p2);
1718         crtc_state->dpll_hw_state.pll0 = clk_div.m2_int;
1719         crtc_state->dpll_hw_state.pll1 = PORT_PLL_N(clk_div.n);
1720         crtc_state->dpll_hw_state.pll2 = clk_div.m2_frac;
1721
1722         if (clk_div.m2_frac_en)
1723                 crtc_state->dpll_hw_state.pll3 =
1724                         PORT_PLL_M2_FRAC_ENABLE;
1725
1726         crtc_state->dpll_hw_state.pll6 =
1727                 prop_coef | PORT_PLL_INT_COEFF(int_coef);
1728         crtc_state->dpll_hw_state.pll6 |=
1729                 PORT_PLL_GAIN_CTL(gain_ctl);
1730
1731         crtc_state->dpll_hw_state.pll8 = targ_cnt;
1732
1733         crtc_state->dpll_hw_state.pll9 = 5 << PORT_PLL_LOCK_THRESHOLD_SHIFT;
1734
1735         crtc_state->dpll_hw_state.pll10 =
1736                 PORT_PLL_DCO_AMP(PORT_PLL_DCO_AMP_DEFAULT)
1737                 | PORT_PLL_DCO_AMP_OVR_EN_H;
1738
1739         crtc_state->dpll_hw_state.ebb4 = PORT_PLL_10BIT_CLK_ENABLE;
1740
1741         crtc_state->dpll_hw_state.pcsdw12 =
1742                 LANESTAGGER_STRAP_OVRD | lanestagger;
1743
1744         pll = intel_get_shared_dpll(intel_crtc, crtc_state);
1745         if (pll == NULL) {
1746                 DRM_DEBUG_DRIVER("failed to find PLL for pipe %c\n",
1747                         pipe_name(intel_crtc->pipe));
1748                 return false;
1749         }
1750
1751         /* shared DPLL id 0 is DPLL A */
1752         crtc_state->ddi_pll_sel = pll->id;
1753
1754         return true;
1755 }
1756
1757 /*
1758  * Tries to find a *shared* PLL for the CRTC and store it in
1759  * intel_crtc->ddi_pll_sel.
1760  *
1761  * For private DPLLs, compute_config() should do the selection for us. This
1762  * function should be folded into compute_config() eventually.
1763  */
1764 bool intel_ddi_pll_select(struct intel_crtc *intel_crtc,
1765                           struct intel_crtc_state *crtc_state)
1766 {
1767         struct drm_device *dev = intel_crtc->base.dev;
1768         struct intel_encoder *intel_encoder =
1769                 intel_ddi_get_crtc_new_encoder(crtc_state);
1770
1771         if (IS_SKYLAKE(dev))
1772                 return skl_ddi_pll_select(intel_crtc, crtc_state,
1773                                           intel_encoder);
1774         else if (IS_BROXTON(dev))
1775                 return bxt_ddi_pll_select(intel_crtc, crtc_state,
1776                                           intel_encoder);
1777         else
1778                 return hsw_ddi_pll_select(intel_crtc, crtc_state,
1779                                           intel_encoder);
1780 }
1781
1782 void intel_ddi_set_pipe_settings(struct drm_crtc *crtc)
1783 {
1784         struct drm_i915_private *dev_priv = crtc->dev->dev_private;
1785         struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1786         struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
1787         enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
1788         int type = intel_encoder->type;
1789         uint32_t temp;
1790
1791         if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP || type == INTEL_OUTPUT_DP_MST) {
1792                 temp = TRANS_MSA_SYNC_CLK;
1793                 switch (intel_crtc->config->pipe_bpp) {
1794                 case 18:
1795                         temp |= TRANS_MSA_6_BPC;
1796                         break;
1797                 case 24:
1798                         temp |= TRANS_MSA_8_BPC;
1799                         break;
1800                 case 30:
1801                         temp |= TRANS_MSA_10_BPC;
1802                         break;
1803                 case 36:
1804                         temp |= TRANS_MSA_12_BPC;
1805                         break;
1806                 default:
1807                         BUG();
1808                 }
1809                 I915_WRITE(TRANS_MSA_MISC(cpu_transcoder), temp);
1810         }
1811 }
1812
1813 void intel_ddi_set_vc_payload_alloc(struct drm_crtc *crtc, bool state)
1814 {
1815         struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1816         struct drm_device *dev = crtc->dev;
1817         struct drm_i915_private *dev_priv = dev->dev_private;
1818         enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
1819         uint32_t temp;
1820         temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
1821         if (state == true)
1822                 temp |= TRANS_DDI_DP_VC_PAYLOAD_ALLOC;
1823         else
1824                 temp &= ~TRANS_DDI_DP_VC_PAYLOAD_ALLOC;
1825         I915_WRITE(TRANS_DDI_FUNC_CTL(cpu_transcoder), temp);
1826 }
1827
1828 void intel_ddi_enable_transcoder_func(struct drm_crtc *crtc)
1829 {
1830         struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1831         struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
1832         struct drm_encoder *encoder = &intel_encoder->base;
1833         struct drm_device *dev = crtc->dev;
1834         struct drm_i915_private *dev_priv = dev->dev_private;
1835         enum pipe pipe = intel_crtc->pipe;
1836         enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
1837         enum port port = intel_ddi_get_encoder_port(intel_encoder);
1838         int type = intel_encoder->type;
1839         uint32_t temp;
1840
1841         /* Enable TRANS_DDI_FUNC_CTL for the pipe to work in HDMI mode */
1842         temp = TRANS_DDI_FUNC_ENABLE;
1843         temp |= TRANS_DDI_SELECT_PORT(port);
1844
1845         switch (intel_crtc->config->pipe_bpp) {
1846         case 18:
1847                 temp |= TRANS_DDI_BPC_6;
1848                 break;
1849         case 24:
1850                 temp |= TRANS_DDI_BPC_8;
1851                 break;
1852         case 30:
1853                 temp |= TRANS_DDI_BPC_10;
1854                 break;
1855         case 36:
1856                 temp |= TRANS_DDI_BPC_12;
1857                 break;
1858         default:
1859                 BUG();
1860         }
1861
1862         if (intel_crtc->config->base.adjusted_mode.flags & DRM_MODE_FLAG_PVSYNC)
1863                 temp |= TRANS_DDI_PVSYNC;
1864         if (intel_crtc->config->base.adjusted_mode.flags & DRM_MODE_FLAG_PHSYNC)
1865                 temp |= TRANS_DDI_PHSYNC;
1866
1867         if (cpu_transcoder == TRANSCODER_EDP) {
1868                 switch (pipe) {
1869                 case PIPE_A:
1870                         /* On Haswell, can only use the always-on power well for
1871                          * eDP when not using the panel fitter, and when not
1872                          * using motion blur mitigation (which we don't
1873                          * support). */
1874                         if (IS_HASWELL(dev) &&
1875                             (intel_crtc->config->pch_pfit.enabled ||
1876                              intel_crtc->config->pch_pfit.force_thru))
1877                                 temp |= TRANS_DDI_EDP_INPUT_A_ONOFF;
1878                         else
1879                                 temp |= TRANS_DDI_EDP_INPUT_A_ON;
1880                         break;
1881                 case PIPE_B:
1882                         temp |= TRANS_DDI_EDP_INPUT_B_ONOFF;
1883                         break;
1884                 case PIPE_C:
1885                         temp |= TRANS_DDI_EDP_INPUT_C_ONOFF;
1886                         break;
1887                 default:
1888                         BUG();
1889                         break;
1890                 }
1891         }
1892
1893         if (type == INTEL_OUTPUT_HDMI) {
1894                 if (intel_crtc->config->has_hdmi_sink)
1895                         temp |= TRANS_DDI_MODE_SELECT_HDMI;
1896                 else
1897                         temp |= TRANS_DDI_MODE_SELECT_DVI;
1898
1899         } else if (type == INTEL_OUTPUT_ANALOG) {
1900                 temp |= TRANS_DDI_MODE_SELECT_FDI;
1901                 temp |= (intel_crtc->config->fdi_lanes - 1) << 1;
1902
1903         } else if (type == INTEL_OUTPUT_DISPLAYPORT ||
1904                    type == INTEL_OUTPUT_EDP) {
1905                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1906
1907                 if (intel_dp->is_mst) {
1908                         temp |= TRANS_DDI_MODE_SELECT_DP_MST;
1909                 } else
1910                         temp |= TRANS_DDI_MODE_SELECT_DP_SST;
1911
1912                 temp |= DDI_PORT_WIDTH(intel_crtc->config->lane_count);
1913         } else if (type == INTEL_OUTPUT_DP_MST) {
1914                 struct intel_dp *intel_dp = &enc_to_mst(encoder)->primary->dp;
1915
1916                 if (intel_dp->is_mst) {
1917                         temp |= TRANS_DDI_MODE_SELECT_DP_MST;
1918                 } else
1919                         temp |= TRANS_DDI_MODE_SELECT_DP_SST;
1920
1921                 temp |= DDI_PORT_WIDTH(intel_crtc->config->lane_count);
1922         } else {
1923                 WARN(1, "Invalid encoder type %d for pipe %c\n",
1924                      intel_encoder->type, pipe_name(pipe));
1925         }
1926
1927         I915_WRITE(TRANS_DDI_FUNC_CTL(cpu_transcoder), temp);
1928 }
1929
1930 void intel_ddi_disable_transcoder_func(struct drm_i915_private *dev_priv,
1931                                        enum transcoder cpu_transcoder)
1932 {
1933         uint32_t reg = TRANS_DDI_FUNC_CTL(cpu_transcoder);
1934         uint32_t val = I915_READ(reg);
1935
1936         val &= ~(TRANS_DDI_FUNC_ENABLE | TRANS_DDI_PORT_MASK | TRANS_DDI_DP_VC_PAYLOAD_ALLOC);
1937         val |= TRANS_DDI_PORT_NONE;
1938         I915_WRITE(reg, val);
1939 }
1940
1941 bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector)
1942 {
1943         struct drm_device *dev = intel_connector->base.dev;
1944         struct drm_i915_private *dev_priv = dev->dev_private;
1945         struct intel_encoder *intel_encoder = intel_connector->encoder;
1946         int type = intel_connector->base.connector_type;
1947         enum port port = intel_ddi_get_encoder_port(intel_encoder);
1948         enum pipe pipe = 0;
1949         enum transcoder cpu_transcoder;
1950         enum intel_display_power_domain power_domain;
1951         uint32_t tmp;
1952
1953         power_domain = intel_display_port_power_domain(intel_encoder);
1954         if (!intel_display_power_is_enabled(dev_priv, power_domain))
1955                 return false;
1956
1957         if (!intel_encoder->get_hw_state(intel_encoder, &pipe))
1958                 return false;
1959
1960         if (port == PORT_A)
1961                 cpu_transcoder = TRANSCODER_EDP;
1962         else
1963                 cpu_transcoder = (enum transcoder) pipe;
1964
1965         tmp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
1966
1967         switch (tmp & TRANS_DDI_MODE_SELECT_MASK) {
1968         case TRANS_DDI_MODE_SELECT_HDMI:
1969         case TRANS_DDI_MODE_SELECT_DVI:
1970                 return (type == DRM_MODE_CONNECTOR_HDMIA);
1971
1972         case TRANS_DDI_MODE_SELECT_DP_SST:
1973                 if (type == DRM_MODE_CONNECTOR_eDP)
1974                         return true;
1975                 return (type == DRM_MODE_CONNECTOR_DisplayPort);
1976         case TRANS_DDI_MODE_SELECT_DP_MST:
1977                 /* if the transcoder is in MST state then
1978                  * connector isn't connected */
1979                 return false;
1980
1981         case TRANS_DDI_MODE_SELECT_FDI:
1982                 return (type == DRM_MODE_CONNECTOR_VGA);
1983
1984         default:
1985                 return false;
1986         }
1987 }
1988
1989 bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
1990                             enum pipe *pipe)
1991 {
1992         struct drm_device *dev = encoder->base.dev;
1993         struct drm_i915_private *dev_priv = dev->dev_private;
1994         enum port port = intel_ddi_get_encoder_port(encoder);
1995         enum intel_display_power_domain power_domain;
1996         u32 tmp;
1997         int i;
1998
1999         power_domain = intel_display_port_power_domain(encoder);
2000         if (!intel_display_power_is_enabled(dev_priv, power_domain))
2001                 return false;
2002
2003         tmp = I915_READ(DDI_BUF_CTL(port));
2004
2005         if (!(tmp & DDI_BUF_CTL_ENABLE))
2006                 return false;
2007
2008         if (port == PORT_A) {
2009                 tmp = I915_READ(TRANS_DDI_FUNC_CTL(TRANSCODER_EDP));
2010
2011                 switch (tmp & TRANS_DDI_EDP_INPUT_MASK) {
2012                 case TRANS_DDI_EDP_INPUT_A_ON:
2013                 case TRANS_DDI_EDP_INPUT_A_ONOFF:
2014                         *pipe = PIPE_A;
2015                         break;
2016                 case TRANS_DDI_EDP_INPUT_B_ONOFF:
2017                         *pipe = PIPE_B;
2018                         break;
2019                 case TRANS_DDI_EDP_INPUT_C_ONOFF:
2020                         *pipe = PIPE_C;
2021                         break;
2022                 }
2023
2024                 return true;
2025         } else {
2026                 for (i = TRANSCODER_A; i <= TRANSCODER_C; i++) {
2027                         tmp = I915_READ(TRANS_DDI_FUNC_CTL(i));
2028
2029                         if ((tmp & TRANS_DDI_PORT_MASK)
2030                             == TRANS_DDI_SELECT_PORT(port)) {
2031                                 if ((tmp & TRANS_DDI_MODE_SELECT_MASK) == TRANS_DDI_MODE_SELECT_DP_MST)
2032                                         return false;
2033
2034                                 *pipe = i;
2035                                 return true;
2036                         }
2037                 }
2038         }
2039
2040         DRM_DEBUG_KMS("No pipe for ddi port %c found\n", port_name(port));
2041
2042         return false;
2043 }
2044
2045 void intel_ddi_enable_pipe_clock(struct intel_crtc *intel_crtc)
2046 {
2047         struct drm_crtc *crtc = &intel_crtc->base;
2048         struct drm_device *dev = crtc->dev;
2049         struct drm_i915_private *dev_priv = dev->dev_private;
2050         struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
2051         enum port port = intel_ddi_get_encoder_port(intel_encoder);
2052         enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
2053
2054         if (cpu_transcoder != TRANSCODER_EDP)
2055                 I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
2056                            TRANS_CLK_SEL_PORT(port));
2057 }
2058
2059 void intel_ddi_disable_pipe_clock(struct intel_crtc *intel_crtc)
2060 {
2061         struct drm_i915_private *dev_priv = intel_crtc->base.dev->dev_private;
2062         enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;
2063
2064         if (cpu_transcoder != TRANSCODER_EDP)
2065                 I915_WRITE(TRANS_CLK_SEL(cpu_transcoder),
2066                            TRANS_CLK_SEL_DISABLED);
2067 }
2068
2069 static void skl_ddi_set_iboost(struct drm_device *dev, u32 level,
2070                                enum port port, int type)
2071 {
2072         struct drm_i915_private *dev_priv = dev->dev_private;
2073         const struct ddi_buf_trans *ddi_translations;
2074         uint8_t iboost;
2075         uint8_t dp_iboost, hdmi_iboost;
2076         int n_entries;
2077         u32 reg;
2078
2079         /* VBT may override standard boost values */
2080         dp_iboost = dev_priv->vbt.ddi_port_info[port].dp_boost_level;
2081         hdmi_iboost = dev_priv->vbt.ddi_port_info[port].hdmi_boost_level;
2082
2083         if (type == INTEL_OUTPUT_DISPLAYPORT) {
2084                 if (dp_iboost) {
2085                         iboost = dp_iboost;
2086                 } else {
2087                         ddi_translations = skl_get_buf_trans_dp(dev, &n_entries);
2088                         iboost = ddi_translations[port].i_boost;
2089                 }
2090         } else if (type == INTEL_OUTPUT_EDP) {
2091                 if (dp_iboost) {
2092                         iboost = dp_iboost;
2093                 } else {
2094                         ddi_translations = skl_get_buf_trans_edp(dev, &n_entries);
2095                         iboost = ddi_translations[port].i_boost;
2096                 }
2097         } else if (type == INTEL_OUTPUT_HDMI) {
2098                 if (hdmi_iboost) {
2099                         iboost = hdmi_iboost;
2100                 } else {
2101                         ddi_translations = skl_get_buf_trans_hdmi(dev, &n_entries);
2102                         iboost = ddi_translations[port].i_boost;
2103                 }
2104         } else {
2105                 return;
2106         }
2107
2108         /* Make sure that the requested I_boost is valid */
2109         if (iboost && iboost != 0x1 && iboost != 0x3 && iboost != 0x7) {
2110                 DRM_ERROR("Invalid I_boost value %u\n", iboost);
2111                 return;
2112         }
2113
2114         reg = I915_READ(DISPIO_CR_TX_BMU_CR0);
2115         reg &= ~BALANCE_LEG_MASK(port);
2116         reg &= ~(1 << (BALANCE_LEG_DISABLE_SHIFT + port));
2117
2118         if (iboost)
2119                 reg |= iboost << BALANCE_LEG_SHIFT(port);
2120         else
2121                 reg |= 1 << (BALANCE_LEG_DISABLE_SHIFT + port);
2122
2123         I915_WRITE(DISPIO_CR_TX_BMU_CR0, reg);
2124 }
2125
2126 static void bxt_ddi_vswing_sequence(struct drm_device *dev, u32 level,
2127                                     enum port port, int type)
2128 {
2129         struct drm_i915_private *dev_priv = dev->dev_private;
2130         const struct bxt_ddi_buf_trans *ddi_translations;
2131         u32 n_entries, i;
2132         uint32_t val;
2133
2134         if (type == INTEL_OUTPUT_EDP && dev_priv->edp_low_vswing) {
2135                 n_entries = ARRAY_SIZE(bxt_ddi_translations_edp);
2136                 ddi_translations = bxt_ddi_translations_edp;
2137         } else if (type == INTEL_OUTPUT_DISPLAYPORT
2138                         || type == INTEL_OUTPUT_EDP) {
2139                 n_entries = ARRAY_SIZE(bxt_ddi_translations_dp);
2140                 ddi_translations = bxt_ddi_translations_dp;
2141         } else if (type == INTEL_OUTPUT_HDMI) {
2142                 n_entries = ARRAY_SIZE(bxt_ddi_translations_hdmi);
2143                 ddi_translations = bxt_ddi_translations_hdmi;
2144         } else {
2145                 DRM_DEBUG_KMS("Vswing programming not done for encoder %d\n",
2146                                 type);
2147                 return;
2148         }
2149
2150         /* Check if default value has to be used */
2151         if (level >= n_entries ||
2152             (type == INTEL_OUTPUT_HDMI && level == HDMI_LEVEL_SHIFT_UNKNOWN)) {
2153                 for (i = 0; i < n_entries; i++) {
2154                         if (ddi_translations[i].default_index) {
2155                                 level = i;
2156                                 break;
2157                         }
2158                 }
2159         }
2160
2161         /*
2162          * While we write to the group register to program all lanes at once we
2163          * can read only lane registers and we pick lanes 0/1 for that.
2164          */
2165         val = I915_READ(BXT_PORT_PCS_DW10_LN01(port));
2166         val &= ~(TX2_SWING_CALC_INIT | TX1_SWING_CALC_INIT);
2167         I915_WRITE(BXT_PORT_PCS_DW10_GRP(port), val);
2168
2169         val = I915_READ(BXT_PORT_TX_DW2_LN0(port));
2170         val &= ~(MARGIN_000 | UNIQ_TRANS_SCALE);
2171         val |= ddi_translations[level].margin << MARGIN_000_SHIFT |
2172                ddi_translations[level].scale << UNIQ_TRANS_SCALE_SHIFT;
2173         I915_WRITE(BXT_PORT_TX_DW2_GRP(port), val);
2174
2175         val = I915_READ(BXT_PORT_TX_DW3_LN0(port));
2176         val &= ~SCALE_DCOMP_METHOD;
2177         if (ddi_translations[level].enable)
2178                 val |= SCALE_DCOMP_METHOD;
2179
2180         if ((val & UNIQUE_TRANGE_EN_METHOD) && !(val & SCALE_DCOMP_METHOD))
2181                 DRM_ERROR("Disabled scaling while ouniqetrangenmethod was set");
2182
2183         I915_WRITE(BXT_PORT_TX_DW3_GRP(port), val);
2184
2185         val = I915_READ(BXT_PORT_TX_DW4_LN0(port));
2186         val &= ~DE_EMPHASIS;
2187         val |= ddi_translations[level].deemphasis << DEEMPH_SHIFT;
2188         I915_WRITE(BXT_PORT_TX_DW4_GRP(port), val);
2189
2190         val = I915_READ(BXT_PORT_PCS_DW10_LN01(port));
2191         val |= TX2_SWING_CALC_INIT | TX1_SWING_CALC_INIT;
2192         I915_WRITE(BXT_PORT_PCS_DW10_GRP(port), val);
2193 }
2194
2195 static uint32_t translate_signal_level(int signal_levels)
2196 {
2197         uint32_t level;
2198
2199         switch (signal_levels) {
2200         default:
2201                 DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level: 0x%x\n",
2202                               signal_levels);
2203         case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_0:
2204                 level = 0;
2205                 break;
2206         case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_1:
2207                 level = 1;
2208                 break;
2209         case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_2:
2210                 level = 2;
2211                 break;
2212         case DP_TRAIN_VOLTAGE_SWING_LEVEL_0 | DP_TRAIN_PRE_EMPH_LEVEL_3:
2213                 level = 3;
2214                 break;
2215
2216         case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_0:
2217                 level = 4;
2218                 break;
2219         case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_1:
2220                 level = 5;
2221                 break;
2222         case DP_TRAIN_VOLTAGE_SWING_LEVEL_1 | DP_TRAIN_PRE_EMPH_LEVEL_2:
2223                 level = 6;
2224                 break;
2225
2226         case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_0:
2227                 level = 7;
2228                 break;
2229         case DP_TRAIN_VOLTAGE_SWING_LEVEL_2 | DP_TRAIN_PRE_EMPH_LEVEL_1:
2230                 level = 8;
2231                 break;
2232
2233         case DP_TRAIN_VOLTAGE_SWING_LEVEL_3 | DP_TRAIN_PRE_EMPH_LEVEL_0:
2234                 level = 9;
2235                 break;
2236         }
2237
2238         return level;
2239 }
2240
2241 uint32_t ddi_signal_levels(struct intel_dp *intel_dp)
2242 {
2243         struct intel_digital_port *dport = dp_to_dig_port(intel_dp);
2244         struct drm_device *dev = dport->base.base.dev;
2245         struct intel_encoder *encoder = &dport->base;
2246         uint8_t train_set = intel_dp->train_set[0];
2247         int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
2248                                          DP_TRAIN_PRE_EMPHASIS_MASK);
2249         enum port port = dport->port;
2250         uint32_t level;
2251
2252         level = translate_signal_level(signal_levels);
2253
2254         if (IS_SKYLAKE(dev))
2255                 skl_ddi_set_iboost(dev, level, port, encoder->type);
2256         else if (IS_BROXTON(dev))
2257                 bxt_ddi_vswing_sequence(dev, level, port, encoder->type);
2258
2259         return DDI_BUF_TRANS_SELECT(level);
2260 }
2261
2262 static void intel_ddi_pre_enable(struct intel_encoder *intel_encoder)
2263 {
2264         struct drm_encoder *encoder = &intel_encoder->base;
2265         struct drm_device *dev = encoder->dev;
2266         struct drm_i915_private *dev_priv = dev->dev_private;
2267         struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
2268         enum port port = intel_ddi_get_encoder_port(intel_encoder);
2269         int type = intel_encoder->type;
2270         int hdmi_level;
2271
2272         if (type == INTEL_OUTPUT_EDP) {
2273                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2274                 intel_edp_panel_on(intel_dp);
2275         }
2276
2277         if (IS_SKYLAKE(dev)) {
2278                 uint32_t dpll = crtc->config->ddi_pll_sel;
2279                 uint32_t val;
2280
2281                 /*
2282                  * DPLL0 is used for eDP and is the only "private" DPLL (as
2283                  * opposed to shared) on SKL
2284                  */
2285                 if (type == INTEL_OUTPUT_EDP) {
2286                         WARN_ON(dpll != SKL_DPLL0);
2287
2288                         val = I915_READ(DPLL_CTRL1);
2289
2290                         val &= ~(DPLL_CTRL1_HDMI_MODE(dpll) |
2291                                  DPLL_CTRL1_SSC(dpll) |
2292                                  DPLL_CTRL1_LINK_RATE_MASK(dpll));
2293                         val |= crtc->config->dpll_hw_state.ctrl1 << (dpll * 6);
2294
2295                         I915_WRITE(DPLL_CTRL1, val);
2296                         POSTING_READ(DPLL_CTRL1);
2297                 }
2298
2299                 /* DDI -> PLL mapping  */
2300                 val = I915_READ(DPLL_CTRL2);
2301
2302                 val &= ~(DPLL_CTRL2_DDI_CLK_OFF(port) |
2303                         DPLL_CTRL2_DDI_CLK_SEL_MASK(port));
2304                 val |= (DPLL_CTRL2_DDI_CLK_SEL(dpll, port) |
2305                         DPLL_CTRL2_DDI_SEL_OVERRIDE(port));
2306
2307                 I915_WRITE(DPLL_CTRL2, val);
2308
2309         } else if (INTEL_INFO(dev)->gen < 9) {
2310                 WARN_ON(crtc->config->ddi_pll_sel == PORT_CLK_SEL_NONE);
2311                 I915_WRITE(PORT_CLK_SEL(port), crtc->config->ddi_pll_sel);
2312         }
2313
2314         if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
2315                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2316
2317                 intel_dp_set_link_params(intel_dp, crtc->config);
2318
2319                 intel_ddi_init_dp_buf_reg(intel_encoder);
2320
2321                 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
2322                 intel_dp_start_link_train(intel_dp);
2323                 if (port != PORT_A || INTEL_INFO(dev)->gen >= 9)
2324                         intel_dp_stop_link_train(intel_dp);
2325         } else if (type == INTEL_OUTPUT_HDMI) {
2326                 struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
2327
2328                 if (IS_BROXTON(dev)) {
2329                         hdmi_level = dev_priv->vbt.
2330                                 ddi_port_info[port].hdmi_level_shift;
2331                         bxt_ddi_vswing_sequence(dev, hdmi_level, port,
2332                                         INTEL_OUTPUT_HDMI);
2333                 }
2334                 intel_hdmi->set_infoframes(encoder,
2335                                            crtc->config->has_hdmi_sink,
2336                                            &crtc->config->base.adjusted_mode);
2337         }
2338 }
2339
2340 static void intel_ddi_post_disable(struct intel_encoder *intel_encoder)
2341 {
2342         struct drm_encoder *encoder = &intel_encoder->base;
2343         struct drm_device *dev = encoder->dev;
2344         struct drm_i915_private *dev_priv = dev->dev_private;
2345         enum port port = intel_ddi_get_encoder_port(intel_encoder);
2346         int type = intel_encoder->type;
2347         uint32_t val;
2348         bool wait = false;
2349
2350         val = I915_READ(DDI_BUF_CTL(port));
2351         if (val & DDI_BUF_CTL_ENABLE) {
2352                 val &= ~DDI_BUF_CTL_ENABLE;
2353                 I915_WRITE(DDI_BUF_CTL(port), val);
2354                 wait = true;
2355         }
2356
2357         val = I915_READ(DP_TP_CTL(port));
2358         val &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
2359         val |= DP_TP_CTL_LINK_TRAIN_PAT1;
2360         I915_WRITE(DP_TP_CTL(port), val);
2361
2362         if (wait)
2363                 intel_wait_ddi_buf_idle(dev_priv, port);
2364
2365         if (type == INTEL_OUTPUT_DISPLAYPORT || type == INTEL_OUTPUT_EDP) {
2366                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2367                 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
2368                 intel_edp_panel_vdd_on(intel_dp);
2369                 intel_edp_panel_off(intel_dp);
2370         }
2371
2372         if (IS_SKYLAKE(dev))
2373                 I915_WRITE(DPLL_CTRL2, (I915_READ(DPLL_CTRL2) |
2374                                         DPLL_CTRL2_DDI_CLK_OFF(port)));
2375         else if (INTEL_INFO(dev)->gen < 9)
2376                 I915_WRITE(PORT_CLK_SEL(port), PORT_CLK_SEL_NONE);
2377 }
2378
2379 static void intel_enable_ddi(struct intel_encoder *intel_encoder)
2380 {
2381         struct drm_encoder *encoder = &intel_encoder->base;
2382         struct drm_crtc *crtc = encoder->crtc;
2383         struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2384         struct drm_device *dev = encoder->dev;
2385         struct drm_i915_private *dev_priv = dev->dev_private;
2386         enum port port = intel_ddi_get_encoder_port(intel_encoder);
2387         int type = intel_encoder->type;
2388
2389         if (type == INTEL_OUTPUT_HDMI) {
2390                 struct intel_digital_port *intel_dig_port =
2391                         enc_to_dig_port(encoder);
2392
2393                 /* In HDMI/DVI mode, the port width, and swing/emphasis values
2394                  * are ignored so nothing special needs to be done besides
2395                  * enabling the port.
2396                  */
2397                 I915_WRITE(DDI_BUF_CTL(port),
2398                            intel_dig_port->saved_port_bits |
2399                            DDI_BUF_CTL_ENABLE);
2400         } else if (type == INTEL_OUTPUT_EDP) {
2401                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2402
2403                 if (port == PORT_A && INTEL_INFO(dev)->gen < 9)
2404                         intel_dp_stop_link_train(intel_dp);
2405
2406                 intel_edp_backlight_on(intel_dp);
2407                 intel_psr_enable(intel_dp);
2408                 intel_edp_drrs_enable(intel_dp);
2409         }
2410
2411         if (intel_crtc->config->has_audio) {
2412                 intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO);
2413                 intel_audio_codec_enable(intel_encoder);
2414         }
2415 }
2416
2417 static void intel_disable_ddi(struct intel_encoder *intel_encoder)
2418 {
2419         struct drm_encoder *encoder = &intel_encoder->base;
2420         struct drm_crtc *crtc = encoder->crtc;
2421         struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
2422         int type = intel_encoder->type;
2423         struct drm_device *dev = encoder->dev;
2424         struct drm_i915_private *dev_priv = dev->dev_private;
2425
2426         if (intel_crtc->config->has_audio) {
2427                 intel_audio_codec_disable(intel_encoder);
2428                 intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO);
2429         }
2430
2431         if (type == INTEL_OUTPUT_EDP) {
2432                 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2433
2434                 intel_edp_drrs_disable(intel_dp);
2435                 intel_psr_disable(intel_dp);
2436                 intel_edp_backlight_off(intel_dp);
2437         }
2438 }
2439
2440 static void hsw_ddi_pll_enable(struct drm_i915_private *dev_priv,
2441                                struct intel_shared_dpll *pll)
2442 {
2443         I915_WRITE(WRPLL_CTL(pll->id), pll->config.hw_state.wrpll);
2444         POSTING_READ(WRPLL_CTL(pll->id));
2445         udelay(20);
2446 }
2447
2448 static void hsw_ddi_pll_disable(struct drm_i915_private *dev_priv,
2449                                 struct intel_shared_dpll *pll)
2450 {
2451         uint32_t val;
2452
2453         val = I915_READ(WRPLL_CTL(pll->id));
2454         I915_WRITE(WRPLL_CTL(pll->id), val & ~WRPLL_PLL_ENABLE);
2455         POSTING_READ(WRPLL_CTL(pll->id));
2456 }
2457
2458 static bool hsw_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
2459                                      struct intel_shared_dpll *pll,
2460                                      struct intel_dpll_hw_state *hw_state)
2461 {
2462         uint32_t val;
2463
2464         if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS))
2465                 return false;
2466
2467         val = I915_READ(WRPLL_CTL(pll->id));
2468         hw_state->wrpll = val;
2469
2470         return val & WRPLL_PLL_ENABLE;
2471 }
2472
2473 static const char * const hsw_ddi_pll_names[] = {
2474         "WRPLL 1",
2475         "WRPLL 2",
2476 };
2477
2478 static void hsw_shared_dplls_init(struct drm_i915_private *dev_priv)
2479 {
2480         int i;
2481
2482         dev_priv->num_shared_dpll = 2;
2483
2484         for (i = 0; i < dev_priv->num_shared_dpll; i++) {
2485                 dev_priv->shared_dplls[i].id = i;
2486                 dev_priv->shared_dplls[i].name = hsw_ddi_pll_names[i];
2487                 dev_priv->shared_dplls[i].disable = hsw_ddi_pll_disable;
2488                 dev_priv->shared_dplls[i].enable = hsw_ddi_pll_enable;
2489                 dev_priv->shared_dplls[i].get_hw_state =
2490                         hsw_ddi_pll_get_hw_state;
2491         }
2492 }
2493
2494 static const char * const skl_ddi_pll_names[] = {
2495         "DPLL 1",
2496         "DPLL 2",
2497         "DPLL 3",
2498 };
2499
2500 struct skl_dpll_regs {
2501         u32 ctl, cfgcr1, cfgcr2;
2502 };
2503
2504 /* this array is indexed by the *shared* pll id */
2505 static const struct skl_dpll_regs skl_dpll_regs[3] = {
2506         {
2507                 /* DPLL 1 */
2508                 .ctl = LCPLL2_CTL,
2509                 .cfgcr1 = DPLL_CFGCR1(SKL_DPLL1),
2510                 .cfgcr2 = DPLL_CFGCR2(SKL_DPLL1),
2511         },
2512         {
2513                 /* DPLL 2 */
2514                 .ctl = WRPLL_CTL1,
2515                 .cfgcr1 = DPLL_CFGCR1(SKL_DPLL2),
2516                 .cfgcr2 = DPLL_CFGCR2(SKL_DPLL2),
2517         },
2518         {
2519                 /* DPLL 3 */
2520                 .ctl = WRPLL_CTL2,
2521                 .cfgcr1 = DPLL_CFGCR1(SKL_DPLL3),
2522                 .cfgcr2 = DPLL_CFGCR2(SKL_DPLL3),
2523         },
2524 };
2525
2526 static void skl_ddi_pll_enable(struct drm_i915_private *dev_priv,
2527                                struct intel_shared_dpll *pll)
2528 {
2529         uint32_t val;
2530         unsigned int dpll;
2531         const struct skl_dpll_regs *regs = skl_dpll_regs;
2532
2533         /* DPLL0 is not part of the shared DPLLs, so pll->id is 0 for DPLL1 */
2534         dpll = pll->id + 1;
2535
2536         val = I915_READ(DPLL_CTRL1);
2537
2538         val &= ~(DPLL_CTRL1_HDMI_MODE(dpll) | DPLL_CTRL1_SSC(dpll) |
2539                  DPLL_CTRL1_LINK_RATE_MASK(dpll));
2540         val |= pll->config.hw_state.ctrl1 << (dpll * 6);
2541
2542         I915_WRITE(DPLL_CTRL1, val);
2543         POSTING_READ(DPLL_CTRL1);
2544
2545         I915_WRITE(regs[pll->id].cfgcr1, pll->config.hw_state.cfgcr1);
2546         I915_WRITE(regs[pll->id].cfgcr2, pll->config.hw_state.cfgcr2);
2547         POSTING_READ(regs[pll->id].cfgcr1);
2548         POSTING_READ(regs[pll->id].cfgcr2);
2549
2550         /* the enable bit is always bit 31 */
2551         I915_WRITE(regs[pll->id].ctl,
2552                    I915_READ(regs[pll->id].ctl) | LCPLL_PLL_ENABLE);
2553
2554         if (wait_for(I915_READ(DPLL_STATUS) & DPLL_LOCK(dpll), 5))
2555                 DRM_ERROR("DPLL %d not locked\n", dpll);
2556 }
2557
2558 static void skl_ddi_pll_disable(struct drm_i915_private *dev_priv,
2559                                 struct intel_shared_dpll *pll)
2560 {
2561         const struct skl_dpll_regs *regs = skl_dpll_regs;
2562
2563         /* the enable bit is always bit 31 */
2564         I915_WRITE(regs[pll->id].ctl,
2565                    I915_READ(regs[pll->id].ctl) & ~LCPLL_PLL_ENABLE);
2566         POSTING_READ(regs[pll->id].ctl);
2567 }
2568
2569 static bool skl_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
2570                                      struct intel_shared_dpll *pll,
2571                                      struct intel_dpll_hw_state *hw_state)
2572 {
2573         uint32_t val;
2574         unsigned int dpll;
2575         const struct skl_dpll_regs *regs = skl_dpll_regs;
2576
2577         if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS))
2578                 return false;
2579
2580         /* DPLL0 is not part of the shared DPLLs, so pll->id is 0 for DPLL1 */
2581         dpll = pll->id + 1;
2582
2583         val = I915_READ(regs[pll->id].ctl);
2584         if (!(val & LCPLL_PLL_ENABLE))
2585                 return false;
2586
2587         val = I915_READ(DPLL_CTRL1);
2588         hw_state->ctrl1 = (val >> (dpll * 6)) & 0x3f;
2589
2590         /* avoid reading back stale values if HDMI mode is not enabled */
2591         if (val & DPLL_CTRL1_HDMI_MODE(dpll)) {
2592                 hw_state->cfgcr1 = I915_READ(regs[pll->id].cfgcr1);
2593                 hw_state->cfgcr2 = I915_READ(regs[pll->id].cfgcr2);
2594         }
2595
2596         return true;
2597 }
2598
2599 static void skl_shared_dplls_init(struct drm_i915_private *dev_priv)
2600 {
2601         int i;
2602
2603         dev_priv->num_shared_dpll = 3;
2604
2605         for (i = 0; i < dev_priv->num_shared_dpll; i++) {
2606                 dev_priv->shared_dplls[i].id = i;
2607                 dev_priv->shared_dplls[i].name = skl_ddi_pll_names[i];
2608                 dev_priv->shared_dplls[i].disable = skl_ddi_pll_disable;
2609                 dev_priv->shared_dplls[i].enable = skl_ddi_pll_enable;
2610                 dev_priv->shared_dplls[i].get_hw_state =
2611                         skl_ddi_pll_get_hw_state;
2612         }
2613 }
2614
2615 static void broxton_phy_init(struct drm_i915_private *dev_priv,
2616                              enum dpio_phy phy)
2617 {
2618         enum port port;
2619         uint32_t val;
2620
2621         val = I915_READ(BXT_P_CR_GT_DISP_PWRON);
2622         val |= GT_DISPLAY_POWER_ON(phy);
2623         I915_WRITE(BXT_P_CR_GT_DISP_PWRON, val);
2624
2625         /* Considering 10ms timeout until BSpec is updated */
2626         if (wait_for(I915_READ(BXT_PORT_CL1CM_DW0(phy)) & PHY_POWER_GOOD, 10))
2627                 DRM_ERROR("timeout during PHY%d power on\n", phy);
2628
2629         for (port =  (phy == DPIO_PHY0 ? PORT_B : PORT_A);
2630              port <= (phy == DPIO_PHY0 ? PORT_C : PORT_A); port++) {
2631                 int lane;
2632
2633                 for (lane = 0; lane < 4; lane++) {
2634                         val = I915_READ(BXT_PORT_TX_DW14_LN(port, lane));
2635                         /*
2636                          * Note that on CHV this flag is called UPAR, but has
2637                          * the same function.
2638                          */
2639                         val &= ~LATENCY_OPTIM;
2640                         if (lane != 1)
2641                                 val |= LATENCY_OPTIM;
2642
2643                         I915_WRITE(BXT_PORT_TX_DW14_LN(port, lane), val);
2644                 }
2645         }
2646
2647         /* Program PLL Rcomp code offset */
2648         val = I915_READ(BXT_PORT_CL1CM_DW9(phy));
2649         val &= ~IREF0RC_OFFSET_MASK;
2650         val |= 0xE4 << IREF0RC_OFFSET_SHIFT;
2651         I915_WRITE(BXT_PORT_CL1CM_DW9(phy), val);
2652
2653         val = I915_READ(BXT_PORT_CL1CM_DW10(phy));
2654         val &= ~IREF1RC_OFFSET_MASK;
2655         val |= 0xE4 << IREF1RC_OFFSET_SHIFT;
2656         I915_WRITE(BXT_PORT_CL1CM_DW10(phy), val);
2657
2658         /* Program power gating */
2659         val = I915_READ(BXT_PORT_CL1CM_DW28(phy));
2660         val |= OCL1_POWER_DOWN_EN | DW28_OLDO_DYN_PWR_DOWN_EN |
2661                 SUS_CLK_CONFIG;
2662         I915_WRITE(BXT_PORT_CL1CM_DW28(phy), val);
2663
2664         if (phy == DPIO_PHY0) {
2665                 val = I915_READ(BXT_PORT_CL2CM_DW6_BC);
2666                 val |= DW6_OLDO_DYN_PWR_DOWN_EN;
2667                 I915_WRITE(BXT_PORT_CL2CM_DW6_BC, val);
2668         }
2669
2670         val = I915_READ(BXT_PORT_CL1CM_DW30(phy));
2671         val &= ~OCL2_LDOFUSE_PWR_DIS;
2672         /*
2673          * On PHY1 disable power on the second channel, since no port is
2674          * connected there. On PHY0 both channels have a port, so leave it
2675          * enabled.
2676          * TODO: port C is only connected on BXT-P, so on BXT0/1 we should
2677          * power down the second channel on PHY0 as well.
2678          */
2679         if (phy == DPIO_PHY1)
2680                 val |= OCL2_LDOFUSE_PWR_DIS;
2681         I915_WRITE(BXT_PORT_CL1CM_DW30(phy), val);
2682
2683         if (phy == DPIO_PHY0) {
2684                 uint32_t grc_code;
2685                 /*
2686                  * PHY0 isn't connected to an RCOMP resistor so copy over
2687                  * the corresponding calibrated value from PHY1, and disable
2688                  * the automatic calibration on PHY0.
2689                  */
2690                 if (wait_for(I915_READ(BXT_PORT_REF_DW3(DPIO_PHY1)) & GRC_DONE,
2691                              10))
2692                         DRM_ERROR("timeout waiting for PHY1 GRC\n");
2693
2694                 val = I915_READ(BXT_PORT_REF_DW6(DPIO_PHY1));
2695                 val = (val & GRC_CODE_MASK) >> GRC_CODE_SHIFT;
2696                 grc_code = val << GRC_CODE_FAST_SHIFT |
2697                            val << GRC_CODE_SLOW_SHIFT |
2698                            val;
2699                 I915_WRITE(BXT_PORT_REF_DW6(DPIO_PHY0), grc_code);
2700
2701                 val = I915_READ(BXT_PORT_REF_DW8(DPIO_PHY0));
2702                 val |= GRC_DIS | GRC_RDY_OVRD;
2703                 I915_WRITE(BXT_PORT_REF_DW8(DPIO_PHY0), val);
2704         }
2705
2706         val = I915_READ(BXT_PHY_CTL_FAMILY(phy));
2707         val |= COMMON_RESET_DIS;
2708         I915_WRITE(BXT_PHY_CTL_FAMILY(phy), val);
2709 }
2710
2711 void broxton_ddi_phy_init(struct drm_device *dev)
2712 {
2713         /* Enable PHY1 first since it provides Rcomp for PHY0 */
2714         broxton_phy_init(dev->dev_private, DPIO_PHY1);
2715         broxton_phy_init(dev->dev_private, DPIO_PHY0);
2716 }
2717
2718 static void broxton_phy_uninit(struct drm_i915_private *dev_priv,
2719                                enum dpio_phy phy)
2720 {
2721         uint32_t val;
2722
2723         val = I915_READ(BXT_PHY_CTL_FAMILY(phy));
2724         val &= ~COMMON_RESET_DIS;
2725         I915_WRITE(BXT_PHY_CTL_FAMILY(phy), val);
2726 }
2727
2728 void broxton_ddi_phy_uninit(struct drm_device *dev)
2729 {
2730         struct drm_i915_private *dev_priv = dev->dev_private;
2731
2732         broxton_phy_uninit(dev_priv, DPIO_PHY1);
2733         broxton_phy_uninit(dev_priv, DPIO_PHY0);
2734
2735         /* FIXME: do this in broxton_phy_uninit per phy */
2736         I915_WRITE(BXT_P_CR_GT_DISP_PWRON, 0);
2737 }
2738
2739 static const char * const bxt_ddi_pll_names[] = {
2740         "PORT PLL A",
2741         "PORT PLL B",
2742         "PORT PLL C",
2743 };
2744
2745 static void bxt_ddi_pll_enable(struct drm_i915_private *dev_priv,
2746                                 struct intel_shared_dpll *pll)
2747 {
2748         uint32_t temp;
2749         enum port port = (enum port)pll->id;    /* 1:1 port->PLL mapping */
2750
2751         temp = I915_READ(BXT_PORT_PLL_ENABLE(port));
2752         temp &= ~PORT_PLL_REF_SEL;
2753         /* Non-SSC reference */
2754         I915_WRITE(BXT_PORT_PLL_ENABLE(port), temp);
2755
2756         /* Disable 10 bit clock */
2757         temp = I915_READ(BXT_PORT_PLL_EBB_4(port));
2758         temp &= ~PORT_PLL_10BIT_CLK_ENABLE;
2759         I915_WRITE(BXT_PORT_PLL_EBB_4(port), temp);
2760
2761         /* Write P1 & P2 */
2762         temp = I915_READ(BXT_PORT_PLL_EBB_0(port));
2763         temp &= ~(PORT_PLL_P1_MASK | PORT_PLL_P2_MASK);
2764         temp |= pll->config.hw_state.ebb0;
2765         I915_WRITE(BXT_PORT_PLL_EBB_0(port), temp);
2766
2767         /* Write M2 integer */
2768         temp = I915_READ(BXT_PORT_PLL(port, 0));
2769         temp &= ~PORT_PLL_M2_MASK;
2770         temp |= pll->config.hw_state.pll0;
2771         I915_WRITE(BXT_PORT_PLL(port, 0), temp);
2772
2773         /* Write N */
2774         temp = I915_READ(BXT_PORT_PLL(port, 1));
2775         temp &= ~PORT_PLL_N_MASK;
2776         temp |= pll->config.hw_state.pll1;
2777         I915_WRITE(BXT_PORT_PLL(port, 1), temp);
2778
2779         /* Write M2 fraction */
2780         temp = I915_READ(BXT_PORT_PLL(port, 2));
2781         temp &= ~PORT_PLL_M2_FRAC_MASK;
2782         temp |= pll->config.hw_state.pll2;
2783         I915_WRITE(BXT_PORT_PLL(port, 2), temp);
2784
2785         /* Write M2 fraction enable */
2786         temp = I915_READ(BXT_PORT_PLL(port, 3));
2787         temp &= ~PORT_PLL_M2_FRAC_ENABLE;
2788         temp |= pll->config.hw_state.pll3;
2789         I915_WRITE(BXT_PORT_PLL(port, 3), temp);
2790
2791         /* Write coeff */
2792         temp = I915_READ(BXT_PORT_PLL(port, 6));
2793         temp &= ~PORT_PLL_PROP_COEFF_MASK;
2794         temp &= ~PORT_PLL_INT_COEFF_MASK;
2795         temp &= ~PORT_PLL_GAIN_CTL_MASK;
2796         temp |= pll->config.hw_state.pll6;
2797         I915_WRITE(BXT_PORT_PLL(port, 6), temp);
2798
2799         /* Write calibration val */
2800         temp = I915_READ(BXT_PORT_PLL(port, 8));
2801         temp &= ~PORT_PLL_TARGET_CNT_MASK;
2802         temp |= pll->config.hw_state.pll8;
2803         I915_WRITE(BXT_PORT_PLL(port, 8), temp);
2804
2805         temp = I915_READ(BXT_PORT_PLL(port, 9));
2806         temp &= ~PORT_PLL_LOCK_THRESHOLD_MASK;
2807         temp |= pll->config.hw_state.pll9;
2808         I915_WRITE(BXT_PORT_PLL(port, 9), temp);
2809
2810         temp = I915_READ(BXT_PORT_PLL(port, 10));
2811         temp &= ~PORT_PLL_DCO_AMP_OVR_EN_H;
2812         temp &= ~PORT_PLL_DCO_AMP_MASK;
2813         temp |= pll->config.hw_state.pll10;
2814         I915_WRITE(BXT_PORT_PLL(port, 10), temp);
2815
2816         /* Recalibrate with new settings */
2817         temp = I915_READ(BXT_PORT_PLL_EBB_4(port));
2818         temp |= PORT_PLL_RECALIBRATE;
2819         I915_WRITE(BXT_PORT_PLL_EBB_4(port), temp);
2820         temp &= ~PORT_PLL_10BIT_CLK_ENABLE;
2821         temp |= pll->config.hw_state.ebb4;
2822         I915_WRITE(BXT_PORT_PLL_EBB_4(port), temp);
2823
2824         /* Enable PLL */
2825         temp = I915_READ(BXT_PORT_PLL_ENABLE(port));
2826         temp |= PORT_PLL_ENABLE;
2827         I915_WRITE(BXT_PORT_PLL_ENABLE(port), temp);
2828         POSTING_READ(BXT_PORT_PLL_ENABLE(port));
2829
2830         if (wait_for_atomic_us((I915_READ(BXT_PORT_PLL_ENABLE(port)) &
2831                         PORT_PLL_LOCK), 200))
2832                 DRM_ERROR("PLL %d not locked\n", port);
2833
2834         /*
2835          * While we write to the group register to program all lanes at once we
2836          * can read only lane registers and we pick lanes 0/1 for that.
2837          */
2838         temp = I915_READ(BXT_PORT_PCS_DW12_LN01(port));
2839         temp &= ~LANE_STAGGER_MASK;
2840         temp &= ~LANESTAGGER_STRAP_OVRD;
2841         temp |= pll->config.hw_state.pcsdw12;
2842         I915_WRITE(BXT_PORT_PCS_DW12_GRP(port), temp);
2843 }
2844
2845 static void bxt_ddi_pll_disable(struct drm_i915_private *dev_priv,
2846                                         struct intel_shared_dpll *pll)
2847 {
2848         enum port port = (enum port)pll->id;    /* 1:1 port->PLL mapping */
2849         uint32_t temp;
2850
2851         temp = I915_READ(BXT_PORT_PLL_ENABLE(port));
2852         temp &= ~PORT_PLL_ENABLE;
2853         I915_WRITE(BXT_PORT_PLL_ENABLE(port), temp);
2854         POSTING_READ(BXT_PORT_PLL_ENABLE(port));
2855 }
2856
2857 static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
2858                                         struct intel_shared_dpll *pll,
2859                                         struct intel_dpll_hw_state *hw_state)
2860 {
2861         enum port port = (enum port)pll->id;    /* 1:1 port->PLL mapping */
2862         uint32_t val;
2863
2864         if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS))
2865                 return false;
2866
2867         val = I915_READ(BXT_PORT_PLL_ENABLE(port));
2868         if (!(val & PORT_PLL_ENABLE))
2869                 return false;
2870
2871         hw_state->ebb0 = I915_READ(BXT_PORT_PLL_EBB_0(port));
2872         hw_state->ebb0 &= PORT_PLL_P1_MASK | PORT_PLL_P2_MASK;
2873
2874         hw_state->ebb4 = I915_READ(BXT_PORT_PLL_EBB_4(port));
2875         hw_state->ebb4 &= PORT_PLL_10BIT_CLK_ENABLE;
2876
2877         hw_state->pll0 = I915_READ(BXT_PORT_PLL(port, 0));
2878         hw_state->pll0 &= PORT_PLL_M2_MASK;
2879
2880         hw_state->pll1 = I915_READ(BXT_PORT_PLL(port, 1));
2881         hw_state->pll1 &= PORT_PLL_N_MASK;
2882
2883         hw_state->pll2 = I915_READ(BXT_PORT_PLL(port, 2));
2884         hw_state->pll2 &= PORT_PLL_M2_FRAC_MASK;
2885
2886         hw_state->pll3 = I915_READ(BXT_PORT_PLL(port, 3));
2887         hw_state->pll3 &= PORT_PLL_M2_FRAC_ENABLE;
2888
2889         hw_state->pll6 = I915_READ(BXT_PORT_PLL(port, 6));
2890         hw_state->pll6 &= PORT_PLL_PROP_COEFF_MASK |
2891                           PORT_PLL_INT_COEFF_MASK |
2892                           PORT_PLL_GAIN_CTL_MASK;
2893
2894         hw_state->pll8 = I915_READ(BXT_PORT_PLL(port, 8));
2895         hw_state->pll8 &= PORT_PLL_TARGET_CNT_MASK;
2896
2897         hw_state->pll9 = I915_READ(BXT_PORT_PLL(port, 9));
2898         hw_state->pll9 &= PORT_PLL_LOCK_THRESHOLD_MASK;
2899
2900         hw_state->pll10 = I915_READ(BXT_PORT_PLL(port, 10));
2901         hw_state->pll10 &= PORT_PLL_DCO_AMP_OVR_EN_H |
2902                            PORT_PLL_DCO_AMP_MASK;
2903
2904         /*
2905          * While we write to the group register to program all lanes at once we
2906          * can read only lane registers. We configure all lanes the same way, so
2907          * here just read out lanes 0/1 and output a note if lanes 2/3 differ.
2908          */
2909         hw_state->pcsdw12 = I915_READ(BXT_PORT_PCS_DW12_LN01(port));
2910         if (I915_READ(BXT_PORT_PCS_DW12_LN23(port)) != hw_state->pcsdw12)
2911                 DRM_DEBUG_DRIVER("lane stagger config different for lane 01 (%08x) and 23 (%08x)\n",
2912                                  hw_state->pcsdw12,
2913                                  I915_READ(BXT_PORT_PCS_DW12_LN23(port)));
2914         hw_state->pcsdw12 &= LANE_STAGGER_MASK | LANESTAGGER_STRAP_OVRD;
2915
2916         return true;
2917 }
2918
2919 static void bxt_shared_dplls_init(struct drm_i915_private *dev_priv)
2920 {
2921         int i;
2922
2923         dev_priv->num_shared_dpll = 3;
2924
2925         for (i = 0; i < dev_priv->num_shared_dpll; i++) {
2926                 dev_priv->shared_dplls[i].id = i;
2927                 dev_priv->shared_dplls[i].name = bxt_ddi_pll_names[i];
2928                 dev_priv->shared_dplls[i].disable = bxt_ddi_pll_disable;
2929                 dev_priv->shared_dplls[i].enable = bxt_ddi_pll_enable;
2930                 dev_priv->shared_dplls[i].get_hw_state =
2931                         bxt_ddi_pll_get_hw_state;
2932         }
2933 }
2934
2935 void intel_ddi_pll_init(struct drm_device *dev)
2936 {
2937         struct drm_i915_private *dev_priv = dev->dev_private;
2938         uint32_t val = I915_READ(LCPLL_CTL);
2939
2940         if (IS_SKYLAKE(dev))
2941                 skl_shared_dplls_init(dev_priv);
2942         else if (IS_BROXTON(dev))
2943                 bxt_shared_dplls_init(dev_priv);
2944         else
2945                 hsw_shared_dplls_init(dev_priv);
2946
2947         if (IS_SKYLAKE(dev)) {
2948                 int cdclk_freq;
2949
2950                 cdclk_freq = dev_priv->display.get_display_clock_speed(dev);
2951                 dev_priv->skl_boot_cdclk = cdclk_freq;
2952                 if (!(I915_READ(LCPLL1_CTL) & LCPLL_PLL_ENABLE))
2953                         DRM_ERROR("LCPLL1 is disabled\n");
2954                 else
2955                         intel_display_power_get(dev_priv, POWER_DOMAIN_PLLS);
2956         } else if (IS_BROXTON(dev)) {
2957                 broxton_init_cdclk(dev);
2958                 broxton_ddi_phy_init(dev);
2959         } else {
2960                 /*
2961                  * The LCPLL register should be turned on by the BIOS. For now
2962                  * let's just check its state and print errors in case
2963                  * something is wrong.  Don't even try to turn it on.
2964                  */
2965
2966                 if (val & LCPLL_CD_SOURCE_FCLK)
2967                         DRM_ERROR("CDCLK source is not LCPLL\n");
2968
2969                 if (val & LCPLL_PLL_DISABLE)
2970                         DRM_ERROR("LCPLL is disabled\n");
2971         }
2972 }
2973
2974 void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder)
2975 {
2976         struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
2977         struct intel_dp *intel_dp = &intel_dig_port->dp;
2978         struct drm_i915_private *dev_priv = encoder->dev->dev_private;
2979         enum port port = intel_dig_port->port;
2980         uint32_t val;
2981         bool wait = false;
2982
2983         if (I915_READ(DP_TP_CTL(port)) & DP_TP_CTL_ENABLE) {
2984                 val = I915_READ(DDI_BUF_CTL(port));
2985                 if (val & DDI_BUF_CTL_ENABLE) {
2986                         val &= ~DDI_BUF_CTL_ENABLE;
2987                         I915_WRITE(DDI_BUF_CTL(port), val);
2988                         wait = true;
2989                 }
2990
2991                 val = I915_READ(DP_TP_CTL(port));
2992                 val &= ~(DP_TP_CTL_ENABLE | DP_TP_CTL_LINK_TRAIN_MASK);
2993                 val |= DP_TP_CTL_LINK_TRAIN_PAT1;
2994                 I915_WRITE(DP_TP_CTL(port), val);
2995                 POSTING_READ(DP_TP_CTL(port));
2996
2997                 if (wait)
2998                         intel_wait_ddi_buf_idle(dev_priv, port);
2999         }
3000
3001         val = DP_TP_CTL_ENABLE |
3002               DP_TP_CTL_LINK_TRAIN_PAT1 | DP_TP_CTL_SCRAMBLE_DISABLE;
3003         if (intel_dp->is_mst)
3004                 val |= DP_TP_CTL_MODE_MST;
3005         else {
3006                 val |= DP_TP_CTL_MODE_SST;
3007                 if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
3008                         val |= DP_TP_CTL_ENHANCED_FRAME_ENABLE;
3009         }
3010         I915_WRITE(DP_TP_CTL(port), val);
3011         POSTING_READ(DP_TP_CTL(port));
3012
3013         intel_dp->DP |= DDI_BUF_CTL_ENABLE;
3014         I915_WRITE(DDI_BUF_CTL(port), intel_dp->DP);
3015         POSTING_READ(DDI_BUF_CTL(port));
3016
3017         udelay(600);
3018 }
3019
3020 void intel_ddi_fdi_disable(struct drm_crtc *crtc)
3021 {
3022         struct drm_i915_private *dev_priv = crtc->dev->dev_private;
3023         struct intel_encoder *intel_encoder = intel_ddi_get_crtc_encoder(crtc);
3024         uint32_t val;
3025
3026         intel_ddi_post_disable(intel_encoder);
3027
3028         val = I915_READ(FDI_RX_CTL(PIPE_A));
3029         val &= ~FDI_RX_ENABLE;
3030         I915_WRITE(FDI_RX_CTL(PIPE_A), val);
3031
3032         val = I915_READ(FDI_RX_MISC(PIPE_A));
3033         val &= ~(FDI_RX_PWRDN_LANE1_MASK | FDI_RX_PWRDN_LANE0_MASK);
3034         val |= FDI_RX_PWRDN_LANE1_VAL(2) | FDI_RX_PWRDN_LANE0_VAL(2);
3035         I915_WRITE(FDI_RX_MISC(PIPE_A), val);
3036
3037         val = I915_READ(FDI_RX_CTL(PIPE_A));
3038         val &= ~FDI_PCDCLK;
3039         I915_WRITE(FDI_RX_CTL(PIPE_A), val);
3040
3041         val = I915_READ(FDI_RX_CTL(PIPE_A));
3042         val &= ~FDI_RX_PLL_ENABLE;
3043         I915_WRITE(FDI_RX_CTL(PIPE_A), val);
3044 }
3045
3046 void intel_ddi_get_config(struct intel_encoder *encoder,
3047                           struct intel_crtc_state *pipe_config)
3048 {
3049         struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
3050         struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
3051         enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
3052         struct intel_hdmi *intel_hdmi;
3053         u32 temp, flags = 0;
3054
3055         temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder));
3056         if (temp & TRANS_DDI_PHSYNC)
3057                 flags |= DRM_MODE_FLAG_PHSYNC;
3058         else
3059                 flags |= DRM_MODE_FLAG_NHSYNC;
3060         if (temp & TRANS_DDI_PVSYNC)
3061                 flags |= DRM_MODE_FLAG_PVSYNC;
3062         else
3063                 flags |= DRM_MODE_FLAG_NVSYNC;
3064
3065         pipe_config->base.adjusted_mode.flags |= flags;
3066
3067         switch (temp & TRANS_DDI_BPC_MASK) {
3068         case TRANS_DDI_BPC_6:
3069                 pipe_config->pipe_bpp = 18;
3070                 break;
3071         case TRANS_DDI_BPC_8:
3072                 pipe_config->pipe_bpp = 24;
3073                 break;
3074         case TRANS_DDI_BPC_10:
3075                 pipe_config->pipe_bpp = 30;
3076                 break;
3077         case TRANS_DDI_BPC_12:
3078                 pipe_config->pipe_bpp = 36;
3079                 break;
3080         default:
3081                 break;
3082         }
3083
3084         switch (temp & TRANS_DDI_MODE_SELECT_MASK) {
3085         case TRANS_DDI_MODE_SELECT_HDMI:
3086                 pipe_config->has_hdmi_sink = true;
3087                 intel_hdmi = enc_to_intel_hdmi(&encoder->base);
3088
3089                 if (intel_hdmi->infoframe_enabled(&encoder->base))
3090                         pipe_config->has_infoframe = true;
3091                 break;
3092         case TRANS_DDI_MODE_SELECT_DVI:
3093         case TRANS_DDI_MODE_SELECT_FDI:
3094                 break;
3095         case TRANS_DDI_MODE_SELECT_DP_SST:
3096         case TRANS_DDI_MODE_SELECT_DP_MST:
3097                 pipe_config->has_dp_encoder = true;
3098                 pipe_config->lane_count =
3099                         ((temp & DDI_PORT_WIDTH_MASK) >> DDI_PORT_WIDTH_SHIFT) + 1;
3100                 intel_dp_get_m_n(intel_crtc, pipe_config);
3101                 break;
3102         default:
3103                 break;
3104         }
3105
3106         if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) {
3107                 temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
3108                 if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe))
3109                         pipe_config->has_audio = true;
3110         }
3111
3112         if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp_bpp &&
3113             pipe_config->pipe_bpp > dev_priv->vbt.edp_bpp) {
3114                 /*
3115                  * This is a big fat ugly hack.
3116                  *
3117                  * Some machines in UEFI boot mode provide us a VBT that has 18
3118                  * bpp and 1.62 GHz link bandwidth for eDP, which for reasons
3119                  * unknown we fail to light up. Yet the same BIOS boots up with
3120                  * 24 bpp and 2.7 GHz link. Use the same bpp as the BIOS uses as
3121                  * max, not what it tells us to use.
3122                  *
3123                  * Note: This will still be broken if the eDP panel is not lit
3124                  * up by the BIOS, and thus we can't get the mode at module
3125                  * load.
3126                  */
3127                 DRM_DEBUG_KMS("pipe has %d bpp for eDP panel, overriding BIOS-provided max %d bpp\n",
3128                               pipe_config->pipe_bpp, dev_priv->vbt.edp_bpp);
3129                 dev_priv->vbt.edp_bpp = pipe_config->pipe_bpp;
3130         }
3131
3132         intel_ddi_clock_get(encoder, pipe_config);
3133 }
3134
3135 static void intel_ddi_destroy(struct drm_encoder *encoder)
3136 {
3137         /* HDMI has nothing special to destroy, so we can go with this. */
3138         intel_dp_encoder_destroy(encoder);
3139 }
3140
3141 static bool intel_ddi_compute_config(struct intel_encoder *encoder,
3142                                      struct intel_crtc_state *pipe_config)
3143 {
3144         int type = encoder->type;
3145         int port = intel_ddi_get_encoder_port(encoder);
3146
3147         WARN(type == INTEL_OUTPUT_UNKNOWN, "compute_config() on unknown output!\n");
3148
3149         if (port == PORT_A)
3150                 pipe_config->cpu_transcoder = TRANSCODER_EDP;
3151
3152         if (type == INTEL_OUTPUT_HDMI)
3153                 return intel_hdmi_compute_config(encoder, pipe_config);
3154         else
3155                 return intel_dp_compute_config(encoder, pipe_config);
3156 }
3157
3158 static const struct drm_encoder_funcs intel_ddi_funcs = {
3159         .destroy = intel_ddi_destroy,
3160 };
3161
3162 static struct intel_connector *
3163 intel_ddi_init_dp_connector(struct intel_digital_port *intel_dig_port)
3164 {
3165         struct intel_connector *connector;
3166         enum port port = intel_dig_port->port;
3167
3168         connector = intel_connector_alloc();
3169         if (!connector)
3170                 return NULL;
3171
3172         intel_dig_port->dp.output_reg = DDI_BUF_CTL(port);
3173         if (!intel_dp_init_connector(intel_dig_port, connector)) {
3174                 kfree(connector);
3175                 return NULL;
3176         }
3177
3178         return connector;
3179 }
3180
3181 static struct intel_connector *
3182 intel_ddi_init_hdmi_connector(struct intel_digital_port *intel_dig_port)
3183 {
3184         struct intel_connector *connector;
3185         enum port port = intel_dig_port->port;
3186
3187         connector = intel_connector_alloc();
3188         if (!connector)
3189                 return NULL;
3190
3191         intel_dig_port->hdmi.hdmi_reg = DDI_BUF_CTL(port);
3192         intel_hdmi_init_connector(intel_dig_port, connector);
3193
3194         return connector;
3195 }
3196
3197 void intel_ddi_init(struct drm_device *dev, enum port port)
3198 {
3199         struct drm_i915_private *dev_priv = dev->dev_private;
3200         struct intel_digital_port *intel_dig_port;
3201         struct intel_encoder *intel_encoder;
3202         struct drm_encoder *encoder;
3203         bool init_hdmi, init_dp;
3204
3205         init_hdmi = (dev_priv->vbt.ddi_port_info[port].supports_dvi ||
3206                      dev_priv->vbt.ddi_port_info[port].supports_hdmi);
3207         init_dp = dev_priv->vbt.ddi_port_info[port].supports_dp;
3208         if (!init_dp && !init_hdmi) {
3209                 DRM_DEBUG_KMS("VBT says port %c is not DVI/HDMI/DP compatible, respect it\n",
3210                               port_name(port));
3211                 return;
3212         }
3213
3214         intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL);
3215         if (!intel_dig_port)
3216                 return;
3217
3218         intel_encoder = &intel_dig_port->base;
3219         encoder = &intel_encoder->base;
3220
3221         drm_encoder_init(dev, encoder, &intel_ddi_funcs,
3222                          DRM_MODE_ENCODER_TMDS);
3223
3224         intel_encoder->compute_config = intel_ddi_compute_config;
3225         intel_encoder->enable = intel_enable_ddi;
3226         intel_encoder->pre_enable = intel_ddi_pre_enable;
3227         intel_encoder->disable = intel_disable_ddi;
3228         intel_encoder->post_disable = intel_ddi_post_disable;
3229         intel_encoder->get_hw_state = intel_ddi_get_hw_state;
3230         intel_encoder->get_config = intel_ddi_get_config;
3231
3232         intel_dig_port->port = port;
3233         intel_dig_port->saved_port_bits = I915_READ(DDI_BUF_CTL(port)) &
3234                                           (DDI_BUF_PORT_REVERSAL |
3235                                            DDI_A_4_LANES);
3236
3237         intel_encoder->type = INTEL_OUTPUT_UNKNOWN;
3238         intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
3239         intel_encoder->cloneable = 0;
3240
3241         if (init_dp) {
3242                 if (!intel_ddi_init_dp_connector(intel_dig_port))
3243                         goto err;
3244
3245                 intel_dig_port->hpd_pulse = intel_dp_hpd_pulse;
3246                 /*
3247                  * On BXT A0/A1, sw needs to activate DDIA HPD logic and
3248                  * interrupts to check the external panel connection.
3249                  */
3250                 if (IS_BROXTON(dev_priv) && (INTEL_REVID(dev) < BXT_REVID_B0)
3251                                          && port == PORT_B)
3252                         dev_priv->hotplug.irq_port[PORT_A] = intel_dig_port;
3253                 else
3254                         dev_priv->hotplug.irq_port[port] = intel_dig_port;
3255         }
3256
3257         /* In theory we don't need the encoder->type check, but leave it just in
3258          * case we have some really bad VBTs... */
3259         if (intel_encoder->type != INTEL_OUTPUT_EDP && init_hdmi) {
3260                 if (!intel_ddi_init_hdmi_connector(intel_dig_port))
3261                         goto err;
3262         }
3263
3264         return;
3265
3266 err:
3267         drm_encoder_cleanup(encoder);
3268         kfree(intel_dig_port);
3269 }