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