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