1 /*
2  * Copyright © 2006-2017 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
21  * DEALINGS IN THE SOFTWARE.
22  */
23 
24 #include "intel_cdclk.h"
25 #include "intel_drv.h"
26 #include "intel_sideband.h"
27 
28 /**
29  * DOC: CDCLK / RAWCLK
30  *
31  * The display engine uses several different clocks to do its work. There
32  * are two main clocks involved that aren't directly related to the actual
33  * pixel clock or any symbol/bit clock of the actual output port. These
34  * are the core display clock (CDCLK) and RAWCLK.
35  *
36  * CDCLK clocks most of the display pipe logic, and thus its frequency
37  * must be high enough to support the rate at which pixels are flowing
38  * through the pipes. Downscaling must also be accounted as that increases
39  * the effective pixel rate.
40  *
41  * On several platforms the CDCLK frequency can be changed dynamically
42  * to minimize power consumption for a given display configuration.
43  * Typically changes to the CDCLK frequency require all the display pipes
44  * to be shut down while the frequency is being changed.
45  *
46  * On SKL+ the DMC will toggle the CDCLK off/on during DC5/6 entry/exit.
47  * DMC will not change the active CDCLK frequency however, so that part
48  * will still be performed by the driver directly.
49  *
50  * RAWCLK is a fixed frequency clock, often used by various auxiliary
51  * blocks such as AUX CH or backlight PWM. Hence the only thing we
52  * really need to know about RAWCLK is its frequency so that various
53  * dividers can be programmed correctly.
54  */
55 
56 static void fixed_133mhz_get_cdclk(struct drm_i915_private *dev_priv,
57 				   struct intel_cdclk_state *cdclk_state)
58 {
59 	cdclk_state->cdclk = 133333;
60 }
61 
62 static void fixed_200mhz_get_cdclk(struct drm_i915_private *dev_priv,
63 				   struct intel_cdclk_state *cdclk_state)
64 {
65 	cdclk_state->cdclk = 200000;
66 }
67 
68 static void fixed_266mhz_get_cdclk(struct drm_i915_private *dev_priv,
69 				   struct intel_cdclk_state *cdclk_state)
70 {
71 	cdclk_state->cdclk = 266667;
72 }
73 
74 static void fixed_333mhz_get_cdclk(struct drm_i915_private *dev_priv,
75 				   struct intel_cdclk_state *cdclk_state)
76 {
77 	cdclk_state->cdclk = 333333;
78 }
79 
80 static void fixed_400mhz_get_cdclk(struct drm_i915_private *dev_priv,
81 				   struct intel_cdclk_state *cdclk_state)
82 {
83 	cdclk_state->cdclk = 400000;
84 }
85 
86 static void fixed_450mhz_get_cdclk(struct drm_i915_private *dev_priv,
87 				   struct intel_cdclk_state *cdclk_state)
88 {
89 	cdclk_state->cdclk = 450000;
90 }
91 
92 static void i85x_get_cdclk(struct drm_i915_private *dev_priv,
93 			   struct intel_cdclk_state *cdclk_state)
94 {
95 	struct pci_dev *pdev = dev_priv->drm.pdev;
96 	u16 hpllcc = 0;
97 
98 	/*
99 	 * 852GM/852GMV only supports 133 MHz and the HPLLCC
100 	 * encoding is different :(
101 	 * FIXME is this the right way to detect 852GM/852GMV?
102 	 */
103 	if (pdev->revision == 0x1) {
104 		cdclk_state->cdclk = 133333;
105 		return;
106 	}
107 
108 	pci_bus_read_config_word(pdev->bus,
109 				 PCI_DEVFN(0, 3), HPLLCC, &hpllcc);
110 
111 	/* Assume that the hardware is in the high speed state.  This
112 	 * should be the default.
113 	 */
114 	switch (hpllcc & GC_CLOCK_CONTROL_MASK) {
115 	case GC_CLOCK_133_200:
116 	case GC_CLOCK_133_200_2:
117 	case GC_CLOCK_100_200:
118 		cdclk_state->cdclk = 200000;
119 		break;
120 	case GC_CLOCK_166_250:
121 		cdclk_state->cdclk = 250000;
122 		break;
123 	case GC_CLOCK_100_133:
124 		cdclk_state->cdclk = 133333;
125 		break;
126 	case GC_CLOCK_133_266:
127 	case GC_CLOCK_133_266_2:
128 	case GC_CLOCK_166_266:
129 		cdclk_state->cdclk = 266667;
130 		break;
131 	}
132 }
133 
134 static void i915gm_get_cdclk(struct drm_i915_private *dev_priv,
135 			     struct intel_cdclk_state *cdclk_state)
136 {
137 	struct pci_dev *pdev = dev_priv->drm.pdev;
138 	u16 gcfgc = 0;
139 
140 	pci_read_config_word(pdev, GCFGC, &gcfgc);
141 
142 	if (gcfgc & GC_LOW_FREQUENCY_ENABLE) {
143 		cdclk_state->cdclk = 133333;
144 		return;
145 	}
146 
147 	switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
148 	case GC_DISPLAY_CLOCK_333_320_MHZ:
149 		cdclk_state->cdclk = 333333;
150 		break;
151 	default:
152 	case GC_DISPLAY_CLOCK_190_200_MHZ:
153 		cdclk_state->cdclk = 190000;
154 		break;
155 	}
156 }
157 
158 static void i945gm_get_cdclk(struct drm_i915_private *dev_priv,
159 			     struct intel_cdclk_state *cdclk_state)
160 {
161 	struct pci_dev *pdev = dev_priv->drm.pdev;
162 	u16 gcfgc = 0;
163 
164 	pci_read_config_word(pdev, GCFGC, &gcfgc);
165 
166 	if (gcfgc & GC_LOW_FREQUENCY_ENABLE) {
167 		cdclk_state->cdclk = 133333;
168 		return;
169 	}
170 
171 	switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
172 	case GC_DISPLAY_CLOCK_333_320_MHZ:
173 		cdclk_state->cdclk = 320000;
174 		break;
175 	default:
176 	case GC_DISPLAY_CLOCK_190_200_MHZ:
177 		cdclk_state->cdclk = 200000;
178 		break;
179 	}
180 }
181 
182 static unsigned int intel_hpll_vco(struct drm_i915_private *dev_priv)
183 {
184 	static const unsigned int blb_vco[8] = {
185 		[0] = 3200000,
186 		[1] = 4000000,
187 		[2] = 5333333,
188 		[3] = 4800000,
189 		[4] = 6400000,
190 	};
191 	static const unsigned int pnv_vco[8] = {
192 		[0] = 3200000,
193 		[1] = 4000000,
194 		[2] = 5333333,
195 		[3] = 4800000,
196 		[4] = 2666667,
197 	};
198 	static const unsigned int cl_vco[8] = {
199 		[0] = 3200000,
200 		[1] = 4000000,
201 		[2] = 5333333,
202 		[3] = 6400000,
203 		[4] = 3333333,
204 		[5] = 3566667,
205 		[6] = 4266667,
206 	};
207 	static const unsigned int elk_vco[8] = {
208 		[0] = 3200000,
209 		[1] = 4000000,
210 		[2] = 5333333,
211 		[3] = 4800000,
212 	};
213 	static const unsigned int ctg_vco[8] = {
214 		[0] = 3200000,
215 		[1] = 4000000,
216 		[2] = 5333333,
217 		[3] = 6400000,
218 		[4] = 2666667,
219 		[5] = 4266667,
220 	};
221 	const unsigned int *vco_table;
222 	unsigned int vco;
223 	u8 tmp = 0;
224 
225 	/* FIXME other chipsets? */
226 	if (IS_GM45(dev_priv))
227 		vco_table = ctg_vco;
228 	else if (IS_G45(dev_priv))
229 		vco_table = elk_vco;
230 	else if (IS_I965GM(dev_priv))
231 		vco_table = cl_vco;
232 	else if (IS_PINEVIEW(dev_priv))
233 		vco_table = pnv_vco;
234 	else if (IS_G33(dev_priv))
235 		vco_table = blb_vco;
236 	else
237 		return 0;
238 
239 	tmp = I915_READ(IS_PINEVIEW(dev_priv) || IS_MOBILE(dev_priv) ?
240 			HPLLVCO_MOBILE : HPLLVCO);
241 
242 	vco = vco_table[tmp & 0x7];
243 	if (vco == 0)
244 		DRM_ERROR("Bad HPLL VCO (HPLLVCO=0x%02x)\n", tmp);
245 	else
246 		DRM_DEBUG_KMS("HPLL VCO %u kHz\n", vco);
247 
248 	return vco;
249 }
250 
251 static void g33_get_cdclk(struct drm_i915_private *dev_priv,
252 			  struct intel_cdclk_state *cdclk_state)
253 {
254 	struct pci_dev *pdev = dev_priv->drm.pdev;
255 	static const u8 div_3200[] = { 12, 10,  8,  7, 5, 16 };
256 	static const u8 div_4000[] = { 14, 12, 10,  8, 6, 20 };
257 	static const u8 div_4800[] = { 20, 14, 12, 10, 8, 24 };
258 	static const u8 div_5333[] = { 20, 16, 12, 12, 8, 28 };
259 	const u8 *div_table;
260 	unsigned int cdclk_sel;
261 	u16 tmp = 0;
262 
263 	cdclk_state->vco = intel_hpll_vco(dev_priv);
264 
265 	pci_read_config_word(pdev, GCFGC, &tmp);
266 
267 	cdclk_sel = (tmp >> 4) & 0x7;
268 
269 	if (cdclk_sel >= ARRAY_SIZE(div_3200))
270 		goto fail;
271 
272 	switch (cdclk_state->vco) {
273 	case 3200000:
274 		div_table = div_3200;
275 		break;
276 	case 4000000:
277 		div_table = div_4000;
278 		break;
279 	case 4800000:
280 		div_table = div_4800;
281 		break;
282 	case 5333333:
283 		div_table = div_5333;
284 		break;
285 	default:
286 		goto fail;
287 	}
288 
289 	cdclk_state->cdclk = DIV_ROUND_CLOSEST(cdclk_state->vco,
290 					       div_table[cdclk_sel]);
291 	return;
292 
293 fail:
294 	DRM_ERROR("Unable to determine CDCLK. HPLL VCO=%u kHz, CFGC=0x%08x\n",
295 		  cdclk_state->vco, tmp);
296 	cdclk_state->cdclk = 190476;
297 }
298 
299 static void pnv_get_cdclk(struct drm_i915_private *dev_priv,
300 			  struct intel_cdclk_state *cdclk_state)
301 {
302 	struct pci_dev *pdev = dev_priv->drm.pdev;
303 	u16 gcfgc = 0;
304 
305 	pci_read_config_word(pdev, GCFGC, &gcfgc);
306 
307 	switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
308 	case GC_DISPLAY_CLOCK_267_MHZ_PNV:
309 		cdclk_state->cdclk = 266667;
310 		break;
311 	case GC_DISPLAY_CLOCK_333_MHZ_PNV:
312 		cdclk_state->cdclk = 333333;
313 		break;
314 	case GC_DISPLAY_CLOCK_444_MHZ_PNV:
315 		cdclk_state->cdclk = 444444;
316 		break;
317 	case GC_DISPLAY_CLOCK_200_MHZ_PNV:
318 		cdclk_state->cdclk = 200000;
319 		break;
320 	default:
321 		DRM_ERROR("Unknown pnv display core clock 0x%04x\n", gcfgc);
322 		/* fall through */
323 	case GC_DISPLAY_CLOCK_133_MHZ_PNV:
324 		cdclk_state->cdclk = 133333;
325 		break;
326 	case GC_DISPLAY_CLOCK_167_MHZ_PNV:
327 		cdclk_state->cdclk = 166667;
328 		break;
329 	}
330 }
331 
332 static void i965gm_get_cdclk(struct drm_i915_private *dev_priv,
333 			     struct intel_cdclk_state *cdclk_state)
334 {
335 	struct pci_dev *pdev = dev_priv->drm.pdev;
336 	static const u8 div_3200[] = { 16, 10,  8 };
337 	static const u8 div_4000[] = { 20, 12, 10 };
338 	static const u8 div_5333[] = { 24, 16, 14 };
339 	const u8 *div_table;
340 	unsigned int cdclk_sel;
341 	u16 tmp = 0;
342 
343 	cdclk_state->vco = intel_hpll_vco(dev_priv);
344 
345 	pci_read_config_word(pdev, GCFGC, &tmp);
346 
347 	cdclk_sel = ((tmp >> 8) & 0x1f) - 1;
348 
349 	if (cdclk_sel >= ARRAY_SIZE(div_3200))
350 		goto fail;
351 
352 	switch (cdclk_state->vco) {
353 	case 3200000:
354 		div_table = div_3200;
355 		break;
356 	case 4000000:
357 		div_table = div_4000;
358 		break;
359 	case 5333333:
360 		div_table = div_5333;
361 		break;
362 	default:
363 		goto fail;
364 	}
365 
366 	cdclk_state->cdclk = DIV_ROUND_CLOSEST(cdclk_state->vco,
367 					       div_table[cdclk_sel]);
368 	return;
369 
370 fail:
371 	DRM_ERROR("Unable to determine CDCLK. HPLL VCO=%u kHz, CFGC=0x%04x\n",
372 		  cdclk_state->vco, tmp);
373 	cdclk_state->cdclk = 200000;
374 }
375 
376 static void gm45_get_cdclk(struct drm_i915_private *dev_priv,
377 			   struct intel_cdclk_state *cdclk_state)
378 {
379 	struct pci_dev *pdev = dev_priv->drm.pdev;
380 	unsigned int cdclk_sel;
381 	u16 tmp = 0;
382 
383 	cdclk_state->vco = intel_hpll_vco(dev_priv);
384 
385 	pci_read_config_word(pdev, GCFGC, &tmp);
386 
387 	cdclk_sel = (tmp >> 12) & 0x1;
388 
389 	switch (cdclk_state->vco) {
390 	case 2666667:
391 	case 4000000:
392 	case 5333333:
393 		cdclk_state->cdclk = cdclk_sel ? 333333 : 222222;
394 		break;
395 	case 3200000:
396 		cdclk_state->cdclk = cdclk_sel ? 320000 : 228571;
397 		break;
398 	default:
399 		DRM_ERROR("Unable to determine CDCLK. HPLL VCO=%u, CFGC=0x%04x\n",
400 			  cdclk_state->vco, tmp);
401 		cdclk_state->cdclk = 222222;
402 		break;
403 	}
404 }
405 
406 static void hsw_get_cdclk(struct drm_i915_private *dev_priv,
407 			  struct intel_cdclk_state *cdclk_state)
408 {
409 	u32 lcpll = I915_READ(LCPLL_CTL);
410 	u32 freq = lcpll & LCPLL_CLK_FREQ_MASK;
411 
412 	if (lcpll & LCPLL_CD_SOURCE_FCLK)
413 		cdclk_state->cdclk = 800000;
414 	else if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT)
415 		cdclk_state->cdclk = 450000;
416 	else if (freq == LCPLL_CLK_FREQ_450)
417 		cdclk_state->cdclk = 450000;
418 	else if (IS_HSW_ULT(dev_priv))
419 		cdclk_state->cdclk = 337500;
420 	else
421 		cdclk_state->cdclk = 540000;
422 }
423 
424 static int vlv_calc_cdclk(struct drm_i915_private *dev_priv, int min_cdclk)
425 {
426 	int freq_320 = (dev_priv->hpll_freq <<  1) % 320000 != 0 ?
427 		333333 : 320000;
428 
429 	/*
430 	 * We seem to get an unstable or solid color picture at 200MHz.
431 	 * Not sure what's wrong. For now use 200MHz only when all pipes
432 	 * are off.
433 	 */
434 	if (IS_VALLEYVIEW(dev_priv) && min_cdclk > freq_320)
435 		return 400000;
436 	else if (min_cdclk > 266667)
437 		return freq_320;
438 	else if (min_cdclk > 0)
439 		return 266667;
440 	else
441 		return 200000;
442 }
443 
444 static u8 vlv_calc_voltage_level(struct drm_i915_private *dev_priv, int cdclk)
445 {
446 	if (IS_VALLEYVIEW(dev_priv)) {
447 		if (cdclk >= 320000) /* jump to highest voltage for 400MHz too */
448 			return 2;
449 		else if (cdclk >= 266667)
450 			return 1;
451 		else
452 			return 0;
453 	} else {
454 		/*
455 		 * Specs are full of misinformation, but testing on actual
456 		 * hardware has shown that we just need to write the desired
457 		 * CCK divider into the Punit register.
458 		 */
459 		return DIV_ROUND_CLOSEST(dev_priv->hpll_freq << 1, cdclk) - 1;
460 	}
461 }
462 
463 static void vlv_get_cdclk(struct drm_i915_private *dev_priv,
464 			  struct intel_cdclk_state *cdclk_state)
465 {
466 	u32 val;
467 
468 	vlv_iosf_sb_get(dev_priv,
469 			BIT(VLV_IOSF_SB_CCK) | BIT(VLV_IOSF_SB_PUNIT));
470 
471 	cdclk_state->vco = vlv_get_hpll_vco(dev_priv);
472 	cdclk_state->cdclk = vlv_get_cck_clock(dev_priv, "cdclk",
473 					       CCK_DISPLAY_CLOCK_CONTROL,
474 					       cdclk_state->vco);
475 
476 	val = vlv_punit_read(dev_priv, PUNIT_REG_DSPSSPM);
477 
478 	vlv_iosf_sb_put(dev_priv,
479 			BIT(VLV_IOSF_SB_CCK) | BIT(VLV_IOSF_SB_PUNIT));
480 
481 	if (IS_VALLEYVIEW(dev_priv))
482 		cdclk_state->voltage_level = (val & DSPFREQGUAR_MASK) >>
483 			DSPFREQGUAR_SHIFT;
484 	else
485 		cdclk_state->voltage_level = (val & DSPFREQGUAR_MASK_CHV) >>
486 			DSPFREQGUAR_SHIFT_CHV;
487 }
488 
489 static void vlv_program_pfi_credits(struct drm_i915_private *dev_priv)
490 {
491 	unsigned int credits, default_credits;
492 
493 	if (IS_CHERRYVIEW(dev_priv))
494 		default_credits = PFI_CREDIT(12);
495 	else
496 		default_credits = PFI_CREDIT(8);
497 
498 	if (dev_priv->cdclk.hw.cdclk >= dev_priv->czclk_freq) {
499 		/* CHV suggested value is 31 or 63 */
500 		if (IS_CHERRYVIEW(dev_priv))
501 			credits = PFI_CREDIT_63;
502 		else
503 			credits = PFI_CREDIT(15);
504 	} else {
505 		credits = default_credits;
506 	}
507 
508 	/*
509 	 * WA - write default credits before re-programming
510 	 * FIXME: should we also set the resend bit here?
511 	 */
512 	I915_WRITE(GCI_CONTROL, VGA_FAST_MODE_DISABLE |
513 		   default_credits);
514 
515 	I915_WRITE(GCI_CONTROL, VGA_FAST_MODE_DISABLE |
516 		   credits | PFI_CREDIT_RESEND);
517 
518 	/*
519 	 * FIXME is this guaranteed to clear
520 	 * immediately or should we poll for it?
521 	 */
522 	WARN_ON(I915_READ(GCI_CONTROL) & PFI_CREDIT_RESEND);
523 }
524 
525 static void vlv_set_cdclk(struct drm_i915_private *dev_priv,
526 			  const struct intel_cdclk_state *cdclk_state,
527 			  enum pipe pipe)
528 {
529 	int cdclk = cdclk_state->cdclk;
530 	u32 val, cmd = cdclk_state->voltage_level;
531 	intel_wakeref_t wakeref;
532 
533 	switch (cdclk) {
534 	case 400000:
535 	case 333333:
536 	case 320000:
537 	case 266667:
538 	case 200000:
539 		break;
540 	default:
541 		MISSING_CASE(cdclk);
542 		return;
543 	}
544 
545 	/* There are cases where we can end up here with power domains
546 	 * off and a CDCLK frequency other than the minimum, like when
547 	 * issuing a modeset without actually changing any display after
548 	 * a system suspend.  So grab the PIPE-A domain, which covers
549 	 * the HW blocks needed for the following programming.
550 	 */
551 	wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_PIPE_A);
552 
553 	vlv_iosf_sb_get(dev_priv,
554 			BIT(VLV_IOSF_SB_CCK) |
555 			BIT(VLV_IOSF_SB_BUNIT) |
556 			BIT(VLV_IOSF_SB_PUNIT));
557 
558 	val = vlv_punit_read(dev_priv, PUNIT_REG_DSPSSPM);
559 	val &= ~DSPFREQGUAR_MASK;
560 	val |= (cmd << DSPFREQGUAR_SHIFT);
561 	vlv_punit_write(dev_priv, PUNIT_REG_DSPSSPM, val);
562 	if (wait_for((vlv_punit_read(dev_priv, PUNIT_REG_DSPSSPM) &
563 		      DSPFREQSTAT_MASK) == (cmd << DSPFREQSTAT_SHIFT),
564 		     50)) {
565 		DRM_ERROR("timed out waiting for CDclk change\n");
566 	}
567 
568 	if (cdclk == 400000) {
569 		u32 divider;
570 
571 		divider = DIV_ROUND_CLOSEST(dev_priv->hpll_freq << 1,
572 					    cdclk) - 1;
573 
574 		/* adjust cdclk divider */
575 		val = vlv_cck_read(dev_priv, CCK_DISPLAY_CLOCK_CONTROL);
576 		val &= ~CCK_FREQUENCY_VALUES;
577 		val |= divider;
578 		vlv_cck_write(dev_priv, CCK_DISPLAY_CLOCK_CONTROL, val);
579 
580 		if (wait_for((vlv_cck_read(dev_priv, CCK_DISPLAY_CLOCK_CONTROL) &
581 			      CCK_FREQUENCY_STATUS) == (divider << CCK_FREQUENCY_STATUS_SHIFT),
582 			     50))
583 			DRM_ERROR("timed out waiting for CDclk change\n");
584 	}
585 
586 	/* adjust self-refresh exit latency value */
587 	val = vlv_bunit_read(dev_priv, BUNIT_REG_BISOC);
588 	val &= ~0x7f;
589 
590 	/*
591 	 * For high bandwidth configs, we set a higher latency in the bunit
592 	 * so that the core display fetch happens in time to avoid underruns.
593 	 */
594 	if (cdclk == 400000)
595 		val |= 4500 / 250; /* 4.5 usec */
596 	else
597 		val |= 3000 / 250; /* 3.0 usec */
598 	vlv_bunit_write(dev_priv, BUNIT_REG_BISOC, val);
599 
600 	vlv_iosf_sb_put(dev_priv,
601 			BIT(VLV_IOSF_SB_CCK) |
602 			BIT(VLV_IOSF_SB_BUNIT) |
603 			BIT(VLV_IOSF_SB_PUNIT));
604 
605 	intel_update_cdclk(dev_priv);
606 
607 	vlv_program_pfi_credits(dev_priv);
608 
609 	intel_display_power_put(dev_priv, POWER_DOMAIN_PIPE_A, wakeref);
610 }
611 
612 static void chv_set_cdclk(struct drm_i915_private *dev_priv,
613 			  const struct intel_cdclk_state *cdclk_state,
614 			  enum pipe pipe)
615 {
616 	int cdclk = cdclk_state->cdclk;
617 	u32 val, cmd = cdclk_state->voltage_level;
618 	intel_wakeref_t wakeref;
619 
620 	switch (cdclk) {
621 	case 333333:
622 	case 320000:
623 	case 266667:
624 	case 200000:
625 		break;
626 	default:
627 		MISSING_CASE(cdclk);
628 		return;
629 	}
630 
631 	/* There are cases where we can end up here with power domains
632 	 * off and a CDCLK frequency other than the minimum, like when
633 	 * issuing a modeset without actually changing any display after
634 	 * a system suspend.  So grab the PIPE-A domain, which covers
635 	 * the HW blocks needed for the following programming.
636 	 */
637 	wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_PIPE_A);
638 
639 	vlv_punit_get(dev_priv);
640 	val = vlv_punit_read(dev_priv, PUNIT_REG_DSPSSPM);
641 	val &= ~DSPFREQGUAR_MASK_CHV;
642 	val |= (cmd << DSPFREQGUAR_SHIFT_CHV);
643 	vlv_punit_write(dev_priv, PUNIT_REG_DSPSSPM, val);
644 	if (wait_for((vlv_punit_read(dev_priv, PUNIT_REG_DSPSSPM) &
645 		      DSPFREQSTAT_MASK_CHV) == (cmd << DSPFREQSTAT_SHIFT_CHV),
646 		     50)) {
647 		DRM_ERROR("timed out waiting for CDclk change\n");
648 	}
649 
650 	vlv_punit_put(dev_priv);
651 
652 	intel_update_cdclk(dev_priv);
653 
654 	vlv_program_pfi_credits(dev_priv);
655 
656 	intel_display_power_put(dev_priv, POWER_DOMAIN_PIPE_A, wakeref);
657 }
658 
659 static int bdw_calc_cdclk(int min_cdclk)
660 {
661 	if (min_cdclk > 540000)
662 		return 675000;
663 	else if (min_cdclk > 450000)
664 		return 540000;
665 	else if (min_cdclk > 337500)
666 		return 450000;
667 	else
668 		return 337500;
669 }
670 
671 static u8 bdw_calc_voltage_level(int cdclk)
672 {
673 	switch (cdclk) {
674 	default:
675 	case 337500:
676 		return 2;
677 	case 450000:
678 		return 0;
679 	case 540000:
680 		return 1;
681 	case 675000:
682 		return 3;
683 	}
684 }
685 
686 static void bdw_get_cdclk(struct drm_i915_private *dev_priv,
687 			  struct intel_cdclk_state *cdclk_state)
688 {
689 	u32 lcpll = I915_READ(LCPLL_CTL);
690 	u32 freq = lcpll & LCPLL_CLK_FREQ_MASK;
691 
692 	if (lcpll & LCPLL_CD_SOURCE_FCLK)
693 		cdclk_state->cdclk = 800000;
694 	else if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT)
695 		cdclk_state->cdclk = 450000;
696 	else if (freq == LCPLL_CLK_FREQ_450)
697 		cdclk_state->cdclk = 450000;
698 	else if (freq == LCPLL_CLK_FREQ_54O_BDW)
699 		cdclk_state->cdclk = 540000;
700 	else if (freq == LCPLL_CLK_FREQ_337_5_BDW)
701 		cdclk_state->cdclk = 337500;
702 	else
703 		cdclk_state->cdclk = 675000;
704 
705 	/*
706 	 * Can't read this out :( Let's assume it's
707 	 * at least what the CDCLK frequency requires.
708 	 */
709 	cdclk_state->voltage_level =
710 		bdw_calc_voltage_level(cdclk_state->cdclk);
711 }
712 
713 static void bdw_set_cdclk(struct drm_i915_private *dev_priv,
714 			  const struct intel_cdclk_state *cdclk_state,
715 			  enum pipe pipe)
716 {
717 	int cdclk = cdclk_state->cdclk;
718 	u32 val;
719 	int ret;
720 
721 	if (WARN((I915_READ(LCPLL_CTL) &
722 		  (LCPLL_PLL_DISABLE | LCPLL_PLL_LOCK |
723 		   LCPLL_CD_CLOCK_DISABLE | LCPLL_ROOT_CD_CLOCK_DISABLE |
724 		   LCPLL_CD2X_CLOCK_DISABLE | LCPLL_POWER_DOWN_ALLOW |
725 		   LCPLL_CD_SOURCE_FCLK)) != LCPLL_PLL_LOCK,
726 		 "trying to change cdclk frequency with cdclk not enabled\n"))
727 		return;
728 
729 	ret = sandybridge_pcode_write(dev_priv,
730 				      BDW_PCODE_DISPLAY_FREQ_CHANGE_REQ, 0x0);
731 	if (ret) {
732 		DRM_ERROR("failed to inform pcode about cdclk change\n");
733 		return;
734 	}
735 
736 	val = I915_READ(LCPLL_CTL);
737 	val |= LCPLL_CD_SOURCE_FCLK;
738 	I915_WRITE(LCPLL_CTL, val);
739 
740 	/*
741 	 * According to the spec, it should be enough to poll for this 1 us.
742 	 * However, extensive testing shows that this can take longer.
743 	 */
744 	if (wait_for_us(I915_READ(LCPLL_CTL) &
745 			LCPLL_CD_SOURCE_FCLK_DONE, 100))
746 		DRM_ERROR("Switching to FCLK failed\n");
747 
748 	val = I915_READ(LCPLL_CTL);
749 	val &= ~LCPLL_CLK_FREQ_MASK;
750 
751 	switch (cdclk) {
752 	default:
753 		MISSING_CASE(cdclk);
754 		/* fall through */
755 	case 337500:
756 		val |= LCPLL_CLK_FREQ_337_5_BDW;
757 		break;
758 	case 450000:
759 		val |= LCPLL_CLK_FREQ_450;
760 		break;
761 	case 540000:
762 		val |= LCPLL_CLK_FREQ_54O_BDW;
763 		break;
764 	case 675000:
765 		val |= LCPLL_CLK_FREQ_675_BDW;
766 		break;
767 	}
768 
769 	I915_WRITE(LCPLL_CTL, val);
770 
771 	val = I915_READ(LCPLL_CTL);
772 	val &= ~LCPLL_CD_SOURCE_FCLK;
773 	I915_WRITE(LCPLL_CTL, val);
774 
775 	if (wait_for_us((I915_READ(LCPLL_CTL) &
776 			LCPLL_CD_SOURCE_FCLK_DONE) == 0, 1))
777 		DRM_ERROR("Switching back to LCPLL failed\n");
778 
779 	sandybridge_pcode_write(dev_priv, HSW_PCODE_DE_WRITE_FREQ_REQ,
780 				cdclk_state->voltage_level);
781 
782 	I915_WRITE(CDCLK_FREQ, DIV_ROUND_CLOSEST(cdclk, 1000) - 1);
783 
784 	intel_update_cdclk(dev_priv);
785 }
786 
787 static int skl_calc_cdclk(int min_cdclk, int vco)
788 {
789 	if (vco == 8640000) {
790 		if (min_cdclk > 540000)
791 			return 617143;
792 		else if (min_cdclk > 432000)
793 			return 540000;
794 		else if (min_cdclk > 308571)
795 			return 432000;
796 		else
797 			return 308571;
798 	} else {
799 		if (min_cdclk > 540000)
800 			return 675000;
801 		else if (min_cdclk > 450000)
802 			return 540000;
803 		else if (min_cdclk > 337500)
804 			return 450000;
805 		else
806 			return 337500;
807 	}
808 }
809 
810 static u8 skl_calc_voltage_level(int cdclk)
811 {
812 	if (cdclk > 540000)
813 		return 3;
814 	else if (cdclk > 450000)
815 		return 2;
816 	else if (cdclk > 337500)
817 		return 1;
818 	else
819 		return 0;
820 }
821 
822 static void skl_dpll0_update(struct drm_i915_private *dev_priv,
823 			     struct intel_cdclk_state *cdclk_state)
824 {
825 	u32 val;
826 
827 	cdclk_state->ref = 24000;
828 	cdclk_state->vco = 0;
829 
830 	val = I915_READ(LCPLL1_CTL);
831 	if ((val & LCPLL_PLL_ENABLE) == 0)
832 		return;
833 
834 	if (WARN_ON((val & LCPLL_PLL_LOCK) == 0))
835 		return;
836 
837 	val = I915_READ(DPLL_CTRL1);
838 
839 	if (WARN_ON((val & (DPLL_CTRL1_HDMI_MODE(SKL_DPLL0) |
840 			    DPLL_CTRL1_SSC(SKL_DPLL0) |
841 			    DPLL_CTRL1_OVERRIDE(SKL_DPLL0))) !=
842 		    DPLL_CTRL1_OVERRIDE(SKL_DPLL0)))
843 		return;
844 
845 	switch (val & DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0)) {
846 	case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_810, SKL_DPLL0):
847 	case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1350, SKL_DPLL0):
848 	case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1620, SKL_DPLL0):
849 	case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_2700, SKL_DPLL0):
850 		cdclk_state->vco = 8100000;
851 		break;
852 	case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1080, SKL_DPLL0):
853 	case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_2160, SKL_DPLL0):
854 		cdclk_state->vco = 8640000;
855 		break;
856 	default:
857 		MISSING_CASE(val & DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0));
858 		break;
859 	}
860 }
861 
862 static void skl_get_cdclk(struct drm_i915_private *dev_priv,
863 			  struct intel_cdclk_state *cdclk_state)
864 {
865 	u32 cdctl;
866 
867 	skl_dpll0_update(dev_priv, cdclk_state);
868 
869 	cdclk_state->cdclk = cdclk_state->bypass = cdclk_state->ref;
870 
871 	if (cdclk_state->vco == 0)
872 		goto out;
873 
874 	cdctl = I915_READ(CDCLK_CTL);
875 
876 	if (cdclk_state->vco == 8640000) {
877 		switch (cdctl & CDCLK_FREQ_SEL_MASK) {
878 		case CDCLK_FREQ_450_432:
879 			cdclk_state->cdclk = 432000;
880 			break;
881 		case CDCLK_FREQ_337_308:
882 			cdclk_state->cdclk = 308571;
883 			break;
884 		case CDCLK_FREQ_540:
885 			cdclk_state->cdclk = 540000;
886 			break;
887 		case CDCLK_FREQ_675_617:
888 			cdclk_state->cdclk = 617143;
889 			break;
890 		default:
891 			MISSING_CASE(cdctl & CDCLK_FREQ_SEL_MASK);
892 			break;
893 		}
894 	} else {
895 		switch (cdctl & CDCLK_FREQ_SEL_MASK) {
896 		case CDCLK_FREQ_450_432:
897 			cdclk_state->cdclk = 450000;
898 			break;
899 		case CDCLK_FREQ_337_308:
900 			cdclk_state->cdclk = 337500;
901 			break;
902 		case CDCLK_FREQ_540:
903 			cdclk_state->cdclk = 540000;
904 			break;
905 		case CDCLK_FREQ_675_617:
906 			cdclk_state->cdclk = 675000;
907 			break;
908 		default:
909 			MISSING_CASE(cdctl & CDCLK_FREQ_SEL_MASK);
910 			break;
911 		}
912 	}
913 
914  out:
915 	/*
916 	 * Can't read this out :( Let's assume it's
917 	 * at least what the CDCLK frequency requires.
918 	 */
919 	cdclk_state->voltage_level =
920 		skl_calc_voltage_level(cdclk_state->cdclk);
921 }
922 
923 /* convert from kHz to .1 fixpoint MHz with -1MHz offset */
924 static int skl_cdclk_decimal(int cdclk)
925 {
926 	return DIV_ROUND_CLOSEST(cdclk - 1000, 500);
927 }
928 
929 static void skl_set_preferred_cdclk_vco(struct drm_i915_private *dev_priv,
930 					int vco)
931 {
932 	bool changed = dev_priv->skl_preferred_vco_freq != vco;
933 
934 	dev_priv->skl_preferred_vco_freq = vco;
935 
936 	if (changed)
937 		intel_update_max_cdclk(dev_priv);
938 }
939 
940 static void skl_dpll0_enable(struct drm_i915_private *dev_priv, int vco)
941 {
942 	u32 val;
943 
944 	WARN_ON(vco != 8100000 && vco != 8640000);
945 
946 	/*
947 	 * We always enable DPLL0 with the lowest link rate possible, but still
948 	 * taking into account the VCO required to operate the eDP panel at the
949 	 * desired frequency. The usual DP link rates operate with a VCO of
950 	 * 8100 while the eDP 1.4 alternate link rates need a VCO of 8640.
951 	 * The modeset code is responsible for the selection of the exact link
952 	 * rate later on, with the constraint of choosing a frequency that
953 	 * works with vco.
954 	 */
955 	val = I915_READ(DPLL_CTRL1);
956 
957 	val &= ~(DPLL_CTRL1_HDMI_MODE(SKL_DPLL0) | DPLL_CTRL1_SSC(SKL_DPLL0) |
958 		 DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0));
959 	val |= DPLL_CTRL1_OVERRIDE(SKL_DPLL0);
960 	if (vco == 8640000)
961 		val |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1080,
962 					    SKL_DPLL0);
963 	else
964 		val |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_810,
965 					    SKL_DPLL0);
966 
967 	I915_WRITE(DPLL_CTRL1, val);
968 	POSTING_READ(DPLL_CTRL1);
969 
970 	I915_WRITE(LCPLL1_CTL, I915_READ(LCPLL1_CTL) | LCPLL_PLL_ENABLE);
971 
972 	if (intel_wait_for_register(&dev_priv->uncore,
973 				    LCPLL1_CTL, LCPLL_PLL_LOCK, LCPLL_PLL_LOCK,
974 				    5))
975 		DRM_ERROR("DPLL0 not locked\n");
976 
977 	dev_priv->cdclk.hw.vco = vco;
978 
979 	/* We'll want to keep using the current vco from now on. */
980 	skl_set_preferred_cdclk_vco(dev_priv, vco);
981 }
982 
983 static void skl_dpll0_disable(struct drm_i915_private *dev_priv)
984 {
985 	I915_WRITE(LCPLL1_CTL, I915_READ(LCPLL1_CTL) & ~LCPLL_PLL_ENABLE);
986 	if (intel_wait_for_register(&dev_priv->uncore,
987 				    LCPLL1_CTL, LCPLL_PLL_LOCK, 0,
988 				    1))
989 		DRM_ERROR("Couldn't disable DPLL0\n");
990 
991 	dev_priv->cdclk.hw.vco = 0;
992 }
993 
994 static void skl_set_cdclk(struct drm_i915_private *dev_priv,
995 			  const struct intel_cdclk_state *cdclk_state,
996 			  enum pipe pipe)
997 {
998 	int cdclk = cdclk_state->cdclk;
999 	int vco = cdclk_state->vco;
1000 	u32 freq_select, cdclk_ctl;
1001 	int ret;
1002 
1003 	/*
1004 	 * Based on WA#1183 CDCLK rates 308 and 617MHz CDCLK rates are
1005 	 * unsupported on SKL. In theory this should never happen since only
1006 	 * the eDP1.4 2.16 and 4.32Gbps rates require it, but eDP1.4 is not
1007 	 * supported on SKL either, see the above WA. WARN whenever trying to
1008 	 * use the corresponding VCO freq as that always leads to using the
1009 	 * minimum 308MHz CDCLK.
1010 	 */
1011 	WARN_ON_ONCE(IS_SKYLAKE(dev_priv) && vco == 8640000);
1012 
1013 	ret = skl_pcode_request(dev_priv, SKL_PCODE_CDCLK_CONTROL,
1014 				SKL_CDCLK_PREPARE_FOR_CHANGE,
1015 				SKL_CDCLK_READY_FOR_CHANGE,
1016 				SKL_CDCLK_READY_FOR_CHANGE, 3);
1017 	if (ret) {
1018 		DRM_ERROR("Failed to inform PCU about cdclk change (%d)\n",
1019 			  ret);
1020 		return;
1021 	}
1022 
1023 	/* Choose frequency for this cdclk */
1024 	switch (cdclk) {
1025 	default:
1026 		WARN_ON(cdclk != dev_priv->cdclk.hw.bypass);
1027 		WARN_ON(vco != 0);
1028 		/* fall through */
1029 	case 308571:
1030 	case 337500:
1031 		freq_select = CDCLK_FREQ_337_308;
1032 		break;
1033 	case 450000:
1034 	case 432000:
1035 		freq_select = CDCLK_FREQ_450_432;
1036 		break;
1037 	case 540000:
1038 		freq_select = CDCLK_FREQ_540;
1039 		break;
1040 	case 617143:
1041 	case 675000:
1042 		freq_select = CDCLK_FREQ_675_617;
1043 		break;
1044 	}
1045 
1046 	if (dev_priv->cdclk.hw.vco != 0 &&
1047 	    dev_priv->cdclk.hw.vco != vco)
1048 		skl_dpll0_disable(dev_priv);
1049 
1050 	cdclk_ctl = I915_READ(CDCLK_CTL);
1051 
1052 	if (dev_priv->cdclk.hw.vco != vco) {
1053 		/* Wa Display #1183: skl,kbl,cfl */
1054 		cdclk_ctl &= ~(CDCLK_FREQ_SEL_MASK | CDCLK_FREQ_DECIMAL_MASK);
1055 		cdclk_ctl |= freq_select | skl_cdclk_decimal(cdclk);
1056 		I915_WRITE(CDCLK_CTL, cdclk_ctl);
1057 	}
1058 
1059 	/* Wa Display #1183: skl,kbl,cfl */
1060 	cdclk_ctl |= CDCLK_DIVMUX_CD_OVERRIDE;
1061 	I915_WRITE(CDCLK_CTL, cdclk_ctl);
1062 	POSTING_READ(CDCLK_CTL);
1063 
1064 	if (dev_priv->cdclk.hw.vco != vco)
1065 		skl_dpll0_enable(dev_priv, vco);
1066 
1067 	/* Wa Display #1183: skl,kbl,cfl */
1068 	cdclk_ctl &= ~(CDCLK_FREQ_SEL_MASK | CDCLK_FREQ_DECIMAL_MASK);
1069 	I915_WRITE(CDCLK_CTL, cdclk_ctl);
1070 
1071 	cdclk_ctl |= freq_select | skl_cdclk_decimal(cdclk);
1072 	I915_WRITE(CDCLK_CTL, cdclk_ctl);
1073 
1074 	/* Wa Display #1183: skl,kbl,cfl */
1075 	cdclk_ctl &= ~CDCLK_DIVMUX_CD_OVERRIDE;
1076 	I915_WRITE(CDCLK_CTL, cdclk_ctl);
1077 	POSTING_READ(CDCLK_CTL);
1078 
1079 	/* inform PCU of the change */
1080 	sandybridge_pcode_write(dev_priv, SKL_PCODE_CDCLK_CONTROL,
1081 				cdclk_state->voltage_level);
1082 
1083 	intel_update_cdclk(dev_priv);
1084 }
1085 
1086 static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv)
1087 {
1088 	u32 cdctl, expected;
1089 
1090 	/*
1091 	 * check if the pre-os initialized the display
1092 	 * There is SWF18 scratchpad register defined which is set by the
1093 	 * pre-os which can be used by the OS drivers to check the status
1094 	 */
1095 	if ((I915_READ(SWF_ILK(0x18)) & 0x00FFFFFF) == 0)
1096 		goto sanitize;
1097 
1098 	intel_update_cdclk(dev_priv);
1099 	intel_dump_cdclk_state(&dev_priv->cdclk.hw, "Current CDCLK");
1100 
1101 	/* Is PLL enabled and locked ? */
1102 	if (dev_priv->cdclk.hw.vco == 0 ||
1103 	    dev_priv->cdclk.hw.cdclk == dev_priv->cdclk.hw.bypass)
1104 		goto sanitize;
1105 
1106 	/* DPLL okay; verify the cdclock
1107 	 *
1108 	 * Noticed in some instances that the freq selection is correct but
1109 	 * decimal part is programmed wrong from BIOS where pre-os does not
1110 	 * enable display. Verify the same as well.
1111 	 */
1112 	cdctl = I915_READ(CDCLK_CTL);
1113 	expected = (cdctl & CDCLK_FREQ_SEL_MASK) |
1114 		skl_cdclk_decimal(dev_priv->cdclk.hw.cdclk);
1115 	if (cdctl == expected)
1116 		/* All well; nothing to sanitize */
1117 		return;
1118 
1119 sanitize:
1120 	DRM_DEBUG_KMS("Sanitizing cdclk programmed by pre-os\n");
1121 
1122 	/* force cdclk programming */
1123 	dev_priv->cdclk.hw.cdclk = 0;
1124 	/* force full PLL disable + enable */
1125 	dev_priv->cdclk.hw.vco = -1;
1126 }
1127 
1128 static void skl_init_cdclk(struct drm_i915_private *dev_priv)
1129 {
1130 	struct intel_cdclk_state cdclk_state;
1131 
1132 	skl_sanitize_cdclk(dev_priv);
1133 
1134 	if (dev_priv->cdclk.hw.cdclk != 0 &&
1135 	    dev_priv->cdclk.hw.vco != 0) {
1136 		/*
1137 		 * Use the current vco as our initial
1138 		 * guess as to what the preferred vco is.
1139 		 */
1140 		if (dev_priv->skl_preferred_vco_freq == 0)
1141 			skl_set_preferred_cdclk_vco(dev_priv,
1142 						    dev_priv->cdclk.hw.vco);
1143 		return;
1144 	}
1145 
1146 	cdclk_state = dev_priv->cdclk.hw;
1147 
1148 	cdclk_state.vco = dev_priv->skl_preferred_vco_freq;
1149 	if (cdclk_state.vco == 0)
1150 		cdclk_state.vco = 8100000;
1151 	cdclk_state.cdclk = skl_calc_cdclk(0, cdclk_state.vco);
1152 	cdclk_state.voltage_level = skl_calc_voltage_level(cdclk_state.cdclk);
1153 
1154 	skl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE);
1155 }
1156 
1157 static void skl_uninit_cdclk(struct drm_i915_private *dev_priv)
1158 {
1159 	struct intel_cdclk_state cdclk_state = dev_priv->cdclk.hw;
1160 
1161 	cdclk_state.cdclk = cdclk_state.bypass;
1162 	cdclk_state.vco = 0;
1163 	cdclk_state.voltage_level = skl_calc_voltage_level(cdclk_state.cdclk);
1164 
1165 	skl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE);
1166 }
1167 
1168 static int bxt_calc_cdclk(int min_cdclk)
1169 {
1170 	if (min_cdclk > 576000)
1171 		return 624000;
1172 	else if (min_cdclk > 384000)
1173 		return 576000;
1174 	else if (min_cdclk > 288000)
1175 		return 384000;
1176 	else if (min_cdclk > 144000)
1177 		return 288000;
1178 	else
1179 		return 144000;
1180 }
1181 
1182 static int glk_calc_cdclk(int min_cdclk)
1183 {
1184 	if (min_cdclk > 158400)
1185 		return 316800;
1186 	else if (min_cdclk > 79200)
1187 		return 158400;
1188 	else
1189 		return 79200;
1190 }
1191 
1192 static u8 bxt_calc_voltage_level(int cdclk)
1193 {
1194 	return DIV_ROUND_UP(cdclk, 25000);
1195 }
1196 
1197 static int bxt_de_pll_vco(struct drm_i915_private *dev_priv, int cdclk)
1198 {
1199 	int ratio;
1200 
1201 	if (cdclk == dev_priv->cdclk.hw.bypass)
1202 		return 0;
1203 
1204 	switch (cdclk) {
1205 	default:
1206 		MISSING_CASE(cdclk);
1207 		/* fall through */
1208 	case 144000:
1209 	case 288000:
1210 	case 384000:
1211 	case 576000:
1212 		ratio = 60;
1213 		break;
1214 	case 624000:
1215 		ratio = 65;
1216 		break;
1217 	}
1218 
1219 	return dev_priv->cdclk.hw.ref * ratio;
1220 }
1221 
1222 static int glk_de_pll_vco(struct drm_i915_private *dev_priv, int cdclk)
1223 {
1224 	int ratio;
1225 
1226 	if (cdclk == dev_priv->cdclk.hw.bypass)
1227 		return 0;
1228 
1229 	switch (cdclk) {
1230 	default:
1231 		MISSING_CASE(cdclk);
1232 		/* fall through */
1233 	case  79200:
1234 	case 158400:
1235 	case 316800:
1236 		ratio = 33;
1237 		break;
1238 	}
1239 
1240 	return dev_priv->cdclk.hw.ref * ratio;
1241 }
1242 
1243 static void bxt_de_pll_update(struct drm_i915_private *dev_priv,
1244 			      struct intel_cdclk_state *cdclk_state)
1245 {
1246 	u32 val;
1247 
1248 	cdclk_state->ref = 19200;
1249 	cdclk_state->vco = 0;
1250 
1251 	val = I915_READ(BXT_DE_PLL_ENABLE);
1252 	if ((val & BXT_DE_PLL_PLL_ENABLE) == 0)
1253 		return;
1254 
1255 	if (WARN_ON((val & BXT_DE_PLL_LOCK) == 0))
1256 		return;
1257 
1258 	val = I915_READ(BXT_DE_PLL_CTL);
1259 	cdclk_state->vco = (val & BXT_DE_PLL_RATIO_MASK) * cdclk_state->ref;
1260 }
1261 
1262 static void bxt_get_cdclk(struct drm_i915_private *dev_priv,
1263 			  struct intel_cdclk_state *cdclk_state)
1264 {
1265 	u32 divider;
1266 	int div;
1267 
1268 	bxt_de_pll_update(dev_priv, cdclk_state);
1269 
1270 	cdclk_state->cdclk = cdclk_state->bypass = cdclk_state->ref;
1271 
1272 	if (cdclk_state->vco == 0)
1273 		goto out;
1274 
1275 	divider = I915_READ(CDCLK_CTL) & BXT_CDCLK_CD2X_DIV_SEL_MASK;
1276 
1277 	switch (divider) {
1278 	case BXT_CDCLK_CD2X_DIV_SEL_1:
1279 		div = 2;
1280 		break;
1281 	case BXT_CDCLK_CD2X_DIV_SEL_1_5:
1282 		WARN(IS_GEMINILAKE(dev_priv), "Unsupported divider\n");
1283 		div = 3;
1284 		break;
1285 	case BXT_CDCLK_CD2X_DIV_SEL_2:
1286 		div = 4;
1287 		break;
1288 	case BXT_CDCLK_CD2X_DIV_SEL_4:
1289 		div = 8;
1290 		break;
1291 	default:
1292 		MISSING_CASE(divider);
1293 		return;
1294 	}
1295 
1296 	cdclk_state->cdclk = DIV_ROUND_CLOSEST(cdclk_state->vco, div);
1297 
1298  out:
1299 	/*
1300 	 * Can't read this out :( Let's assume it's
1301 	 * at least what the CDCLK frequency requires.
1302 	 */
1303 	cdclk_state->voltage_level =
1304 		bxt_calc_voltage_level(cdclk_state->cdclk);
1305 }
1306 
1307 static void bxt_de_pll_disable(struct drm_i915_private *dev_priv)
1308 {
1309 	I915_WRITE(BXT_DE_PLL_ENABLE, 0);
1310 
1311 	/* Timeout 200us */
1312 	if (intel_wait_for_register(&dev_priv->uncore,
1313 				    BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 0,
1314 				    1))
1315 		DRM_ERROR("timeout waiting for DE PLL unlock\n");
1316 
1317 	dev_priv->cdclk.hw.vco = 0;
1318 }
1319 
1320 static void bxt_de_pll_enable(struct drm_i915_private *dev_priv, int vco)
1321 {
1322 	int ratio = DIV_ROUND_CLOSEST(vco, dev_priv->cdclk.hw.ref);
1323 	u32 val;
1324 
1325 	val = I915_READ(BXT_DE_PLL_CTL);
1326 	val &= ~BXT_DE_PLL_RATIO_MASK;
1327 	val |= BXT_DE_PLL_RATIO(ratio);
1328 	I915_WRITE(BXT_DE_PLL_CTL, val);
1329 
1330 	I915_WRITE(BXT_DE_PLL_ENABLE, BXT_DE_PLL_PLL_ENABLE);
1331 
1332 	/* Timeout 200us */
1333 	if (intel_wait_for_register(&dev_priv->uncore,
1334 				    BXT_DE_PLL_ENABLE,
1335 				    BXT_DE_PLL_LOCK,
1336 				    BXT_DE_PLL_LOCK,
1337 				    1))
1338 		DRM_ERROR("timeout waiting for DE PLL lock\n");
1339 
1340 	dev_priv->cdclk.hw.vco = vco;
1341 }
1342 
1343 static void bxt_set_cdclk(struct drm_i915_private *dev_priv,
1344 			  const struct intel_cdclk_state *cdclk_state,
1345 			  enum pipe pipe)
1346 {
1347 	int cdclk = cdclk_state->cdclk;
1348 	int vco = cdclk_state->vco;
1349 	u32 val, divider;
1350 	int ret;
1351 
1352 	/* cdclk = vco / 2 / div{1,1.5,2,4} */
1353 	switch (DIV_ROUND_CLOSEST(vco, cdclk)) {
1354 	default:
1355 		WARN_ON(cdclk != dev_priv->cdclk.hw.bypass);
1356 		WARN_ON(vco != 0);
1357 		/* fall through */
1358 	case 2:
1359 		divider = BXT_CDCLK_CD2X_DIV_SEL_1;
1360 		break;
1361 	case 3:
1362 		WARN(IS_GEMINILAKE(dev_priv), "Unsupported divider\n");
1363 		divider = BXT_CDCLK_CD2X_DIV_SEL_1_5;
1364 		break;
1365 	case 4:
1366 		divider = BXT_CDCLK_CD2X_DIV_SEL_2;
1367 		break;
1368 	case 8:
1369 		divider = BXT_CDCLK_CD2X_DIV_SEL_4;
1370 		break;
1371 	}
1372 
1373 	/*
1374 	 * Inform power controller of upcoming frequency change. BSpec
1375 	 * requires us to wait up to 150usec, but that leads to timeouts;
1376 	 * the 2ms used here is based on experiment.
1377 	 */
1378 	ret = sandybridge_pcode_write_timeout(dev_priv,
1379 					      HSW_PCODE_DE_WRITE_FREQ_REQ,
1380 					      0x80000000, 150, 2);
1381 	if (ret) {
1382 		DRM_ERROR("PCode CDCLK freq change notify failed (err %d, freq %d)\n",
1383 			  ret, cdclk);
1384 		return;
1385 	}
1386 
1387 	if (dev_priv->cdclk.hw.vco != 0 &&
1388 	    dev_priv->cdclk.hw.vco != vco)
1389 		bxt_de_pll_disable(dev_priv);
1390 
1391 	if (dev_priv->cdclk.hw.vco != vco)
1392 		bxt_de_pll_enable(dev_priv, vco);
1393 
1394 	val = divider | skl_cdclk_decimal(cdclk);
1395 	if (pipe == INVALID_PIPE)
1396 		val |= BXT_CDCLK_CD2X_PIPE_NONE;
1397 	else
1398 		val |= BXT_CDCLK_CD2X_PIPE(pipe);
1399 	/*
1400 	 * Disable SSA Precharge when CD clock frequency < 500 MHz,
1401 	 * enable otherwise.
1402 	 */
1403 	if (cdclk >= 500000)
1404 		val |= BXT_CDCLK_SSA_PRECHARGE_ENABLE;
1405 	I915_WRITE(CDCLK_CTL, val);
1406 
1407 	if (pipe != INVALID_PIPE)
1408 		intel_wait_for_vblank(dev_priv, pipe);
1409 
1410 	/*
1411 	 * The timeout isn't specified, the 2ms used here is based on
1412 	 * experiment.
1413 	 * FIXME: Waiting for the request completion could be delayed until
1414 	 * the next PCODE request based on BSpec.
1415 	 */
1416 	ret = sandybridge_pcode_write_timeout(dev_priv,
1417 					      HSW_PCODE_DE_WRITE_FREQ_REQ,
1418 					      cdclk_state->voltage_level, 150, 2);
1419 	if (ret) {
1420 		DRM_ERROR("PCode CDCLK freq set failed, (err %d, freq %d)\n",
1421 			  ret, cdclk);
1422 		return;
1423 	}
1424 
1425 	intel_update_cdclk(dev_priv);
1426 }
1427 
1428 static void bxt_sanitize_cdclk(struct drm_i915_private *dev_priv)
1429 {
1430 	u32 cdctl, expected;
1431 
1432 	intel_update_cdclk(dev_priv);
1433 	intel_dump_cdclk_state(&dev_priv->cdclk.hw, "Current CDCLK");
1434 
1435 	if (dev_priv->cdclk.hw.vco == 0 ||
1436 	    dev_priv->cdclk.hw.cdclk == dev_priv->cdclk.hw.bypass)
1437 		goto sanitize;
1438 
1439 	/* DPLL okay; verify the cdclock
1440 	 *
1441 	 * Some BIOS versions leave an incorrect decimal frequency value and
1442 	 * set reserved MBZ bits in CDCLK_CTL at least during exiting from S4,
1443 	 * so sanitize this register.
1444 	 */
1445 	cdctl = I915_READ(CDCLK_CTL);
1446 	/*
1447 	 * Let's ignore the pipe field, since BIOS could have configured the
1448 	 * dividers both synching to an active pipe, or asynchronously
1449 	 * (PIPE_NONE).
1450 	 */
1451 	cdctl &= ~BXT_CDCLK_CD2X_PIPE_NONE;
1452 
1453 	expected = (cdctl & BXT_CDCLK_CD2X_DIV_SEL_MASK) |
1454 		skl_cdclk_decimal(dev_priv->cdclk.hw.cdclk);
1455 	/*
1456 	 * Disable SSA Precharge when CD clock frequency < 500 MHz,
1457 	 * enable otherwise.
1458 	 */
1459 	if (dev_priv->cdclk.hw.cdclk >= 500000)
1460 		expected |= BXT_CDCLK_SSA_PRECHARGE_ENABLE;
1461 
1462 	if (cdctl == expected)
1463 		/* All well; nothing to sanitize */
1464 		return;
1465 
1466 sanitize:
1467 	DRM_DEBUG_KMS("Sanitizing cdclk programmed by pre-os\n");
1468 
1469 	/* force cdclk programming */
1470 	dev_priv->cdclk.hw.cdclk = 0;
1471 
1472 	/* force full PLL disable + enable */
1473 	dev_priv->cdclk.hw.vco = -1;
1474 }
1475 
1476 static void bxt_init_cdclk(struct drm_i915_private *dev_priv)
1477 {
1478 	struct intel_cdclk_state cdclk_state;
1479 
1480 	bxt_sanitize_cdclk(dev_priv);
1481 
1482 	if (dev_priv->cdclk.hw.cdclk != 0 &&
1483 	    dev_priv->cdclk.hw.vco != 0)
1484 		return;
1485 
1486 	cdclk_state = dev_priv->cdclk.hw;
1487 
1488 	/*
1489 	 * FIXME:
1490 	 * - The initial CDCLK needs to be read from VBT.
1491 	 *   Need to make this change after VBT has changes for BXT.
1492 	 */
1493 	if (IS_GEMINILAKE(dev_priv)) {
1494 		cdclk_state.cdclk = glk_calc_cdclk(0);
1495 		cdclk_state.vco = glk_de_pll_vco(dev_priv, cdclk_state.cdclk);
1496 	} else {
1497 		cdclk_state.cdclk = bxt_calc_cdclk(0);
1498 		cdclk_state.vco = bxt_de_pll_vco(dev_priv, cdclk_state.cdclk);
1499 	}
1500 	cdclk_state.voltage_level = bxt_calc_voltage_level(cdclk_state.cdclk);
1501 
1502 	bxt_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE);
1503 }
1504 
1505 static void bxt_uninit_cdclk(struct drm_i915_private *dev_priv)
1506 {
1507 	struct intel_cdclk_state cdclk_state = dev_priv->cdclk.hw;
1508 
1509 	cdclk_state.cdclk = cdclk_state.bypass;
1510 	cdclk_state.vco = 0;
1511 	cdclk_state.voltage_level = bxt_calc_voltage_level(cdclk_state.cdclk);
1512 
1513 	bxt_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE);
1514 }
1515 
1516 static int cnl_calc_cdclk(int min_cdclk)
1517 {
1518 	if (min_cdclk > 336000)
1519 		return 528000;
1520 	else if (min_cdclk > 168000)
1521 		return 336000;
1522 	else
1523 		return 168000;
1524 }
1525 
1526 static u8 cnl_calc_voltage_level(int cdclk)
1527 {
1528 	if (cdclk > 336000)
1529 		return 2;
1530 	else if (cdclk > 168000)
1531 		return 1;
1532 	else
1533 		return 0;
1534 }
1535 
1536 static void cnl_cdclk_pll_update(struct drm_i915_private *dev_priv,
1537 				 struct intel_cdclk_state *cdclk_state)
1538 {
1539 	u32 val;
1540 
1541 	if (I915_READ(SKL_DSSM) & CNL_DSSM_CDCLK_PLL_REFCLK_24MHz)
1542 		cdclk_state->ref = 24000;
1543 	else
1544 		cdclk_state->ref = 19200;
1545 
1546 	cdclk_state->vco = 0;
1547 
1548 	val = I915_READ(BXT_DE_PLL_ENABLE);
1549 	if ((val & BXT_DE_PLL_PLL_ENABLE) == 0)
1550 		return;
1551 
1552 	if (WARN_ON((val & BXT_DE_PLL_LOCK) == 0))
1553 		return;
1554 
1555 	cdclk_state->vco = (val & CNL_CDCLK_PLL_RATIO_MASK) * cdclk_state->ref;
1556 }
1557 
1558 static void cnl_get_cdclk(struct drm_i915_private *dev_priv,
1559 			 struct intel_cdclk_state *cdclk_state)
1560 {
1561 	u32 divider;
1562 	int div;
1563 
1564 	cnl_cdclk_pll_update(dev_priv, cdclk_state);
1565 
1566 	cdclk_state->cdclk = cdclk_state->bypass = cdclk_state->ref;
1567 
1568 	if (cdclk_state->vco == 0)
1569 		goto out;
1570 
1571 	divider = I915_READ(CDCLK_CTL) & BXT_CDCLK_CD2X_DIV_SEL_MASK;
1572 
1573 	switch (divider) {
1574 	case BXT_CDCLK_CD2X_DIV_SEL_1:
1575 		div = 2;
1576 		break;
1577 	case BXT_CDCLK_CD2X_DIV_SEL_2:
1578 		div = 4;
1579 		break;
1580 	default:
1581 		MISSING_CASE(divider);
1582 		return;
1583 	}
1584 
1585 	cdclk_state->cdclk = DIV_ROUND_CLOSEST(cdclk_state->vco, div);
1586 
1587  out:
1588 	/*
1589 	 * Can't read this out :( Let's assume it's
1590 	 * at least what the CDCLK frequency requires.
1591 	 */
1592 	cdclk_state->voltage_level =
1593 		cnl_calc_voltage_level(cdclk_state->cdclk);
1594 }
1595 
1596 static void cnl_cdclk_pll_disable(struct drm_i915_private *dev_priv)
1597 {
1598 	u32 val;
1599 
1600 	val = I915_READ(BXT_DE_PLL_ENABLE);
1601 	val &= ~BXT_DE_PLL_PLL_ENABLE;
1602 	I915_WRITE(BXT_DE_PLL_ENABLE, val);
1603 
1604 	/* Timeout 200us */
1605 	if (wait_for((I915_READ(BXT_DE_PLL_ENABLE) & BXT_DE_PLL_LOCK) == 0, 1))
1606 		DRM_ERROR("timeout waiting for CDCLK PLL unlock\n");
1607 
1608 	dev_priv->cdclk.hw.vco = 0;
1609 }
1610 
1611 static void cnl_cdclk_pll_enable(struct drm_i915_private *dev_priv, int vco)
1612 {
1613 	int ratio = DIV_ROUND_CLOSEST(vco, dev_priv->cdclk.hw.ref);
1614 	u32 val;
1615 
1616 	val = CNL_CDCLK_PLL_RATIO(ratio);
1617 	I915_WRITE(BXT_DE_PLL_ENABLE, val);
1618 
1619 	val |= BXT_DE_PLL_PLL_ENABLE;
1620 	I915_WRITE(BXT_DE_PLL_ENABLE, val);
1621 
1622 	/* Timeout 200us */
1623 	if (wait_for((I915_READ(BXT_DE_PLL_ENABLE) & BXT_DE_PLL_LOCK) != 0, 1))
1624 		DRM_ERROR("timeout waiting for CDCLK PLL lock\n");
1625 
1626 	dev_priv->cdclk.hw.vco = vco;
1627 }
1628 
1629 static void cnl_set_cdclk(struct drm_i915_private *dev_priv,
1630 			  const struct intel_cdclk_state *cdclk_state,
1631 			  enum pipe pipe)
1632 {
1633 	int cdclk = cdclk_state->cdclk;
1634 	int vco = cdclk_state->vco;
1635 	u32 val, divider;
1636 	int ret;
1637 
1638 	ret = skl_pcode_request(dev_priv, SKL_PCODE_CDCLK_CONTROL,
1639 				SKL_CDCLK_PREPARE_FOR_CHANGE,
1640 				SKL_CDCLK_READY_FOR_CHANGE,
1641 				SKL_CDCLK_READY_FOR_CHANGE, 3);
1642 	if (ret) {
1643 		DRM_ERROR("Failed to inform PCU about cdclk change (%d)\n",
1644 			  ret);
1645 		return;
1646 	}
1647 
1648 	/* cdclk = vco / 2 / div{1,2} */
1649 	switch (DIV_ROUND_CLOSEST(vco, cdclk)) {
1650 	default:
1651 		WARN_ON(cdclk != dev_priv->cdclk.hw.bypass);
1652 		WARN_ON(vco != 0);
1653 		/* fall through */
1654 	case 2:
1655 		divider = BXT_CDCLK_CD2X_DIV_SEL_1;
1656 		break;
1657 	case 4:
1658 		divider = BXT_CDCLK_CD2X_DIV_SEL_2;
1659 		break;
1660 	}
1661 
1662 	if (dev_priv->cdclk.hw.vco != 0 &&
1663 	    dev_priv->cdclk.hw.vco != vco)
1664 		cnl_cdclk_pll_disable(dev_priv);
1665 
1666 	if (dev_priv->cdclk.hw.vco != vco)
1667 		cnl_cdclk_pll_enable(dev_priv, vco);
1668 
1669 	val = divider | skl_cdclk_decimal(cdclk);
1670 	if (pipe == INVALID_PIPE)
1671 		val |= BXT_CDCLK_CD2X_PIPE_NONE;
1672 	else
1673 		val |= BXT_CDCLK_CD2X_PIPE(pipe);
1674 	I915_WRITE(CDCLK_CTL, val);
1675 
1676 	if (pipe != INVALID_PIPE)
1677 		intel_wait_for_vblank(dev_priv, pipe);
1678 
1679 	/* inform PCU of the change */
1680 	sandybridge_pcode_write(dev_priv, SKL_PCODE_CDCLK_CONTROL,
1681 				cdclk_state->voltage_level);
1682 
1683 	intel_update_cdclk(dev_priv);
1684 
1685 	/*
1686 	 * Can't read out the voltage level :(
1687 	 * Let's just assume everything is as expected.
1688 	 */
1689 	dev_priv->cdclk.hw.voltage_level = cdclk_state->voltage_level;
1690 }
1691 
1692 static int cnl_cdclk_pll_vco(struct drm_i915_private *dev_priv, int cdclk)
1693 {
1694 	int ratio;
1695 
1696 	if (cdclk == dev_priv->cdclk.hw.bypass)
1697 		return 0;
1698 
1699 	switch (cdclk) {
1700 	default:
1701 		MISSING_CASE(cdclk);
1702 		/* fall through */
1703 	case 168000:
1704 	case 336000:
1705 		ratio = dev_priv->cdclk.hw.ref == 19200 ? 35 : 28;
1706 		break;
1707 	case 528000:
1708 		ratio = dev_priv->cdclk.hw.ref == 19200 ? 55 : 44;
1709 		break;
1710 	}
1711 
1712 	return dev_priv->cdclk.hw.ref * ratio;
1713 }
1714 
1715 static void cnl_sanitize_cdclk(struct drm_i915_private *dev_priv)
1716 {
1717 	u32 cdctl, expected;
1718 
1719 	intel_update_cdclk(dev_priv);
1720 	intel_dump_cdclk_state(&dev_priv->cdclk.hw, "Current CDCLK");
1721 
1722 	if (dev_priv->cdclk.hw.vco == 0 ||
1723 	    dev_priv->cdclk.hw.cdclk == dev_priv->cdclk.hw.bypass)
1724 		goto sanitize;
1725 
1726 	/* DPLL okay; verify the cdclock
1727 	 *
1728 	 * Some BIOS versions leave an incorrect decimal frequency value and
1729 	 * set reserved MBZ bits in CDCLK_CTL at least during exiting from S4,
1730 	 * so sanitize this register.
1731 	 */
1732 	cdctl = I915_READ(CDCLK_CTL);
1733 	/*
1734 	 * Let's ignore the pipe field, since BIOS could have configured the
1735 	 * dividers both synching to an active pipe, or asynchronously
1736 	 * (PIPE_NONE).
1737 	 */
1738 	cdctl &= ~BXT_CDCLK_CD2X_PIPE_NONE;
1739 
1740 	expected = (cdctl & BXT_CDCLK_CD2X_DIV_SEL_MASK) |
1741 		   skl_cdclk_decimal(dev_priv->cdclk.hw.cdclk);
1742 
1743 	if (cdctl == expected)
1744 		/* All well; nothing to sanitize */
1745 		return;
1746 
1747 sanitize:
1748 	DRM_DEBUG_KMS("Sanitizing cdclk programmed by pre-os\n");
1749 
1750 	/* force cdclk programming */
1751 	dev_priv->cdclk.hw.cdclk = 0;
1752 
1753 	/* force full PLL disable + enable */
1754 	dev_priv->cdclk.hw.vco = -1;
1755 }
1756 
1757 static int icl_calc_cdclk(int min_cdclk, unsigned int ref)
1758 {
1759 	int ranges_24[] = { 312000, 552000, 648000 };
1760 	int ranges_19_38[] = { 307200, 556800, 652800 };
1761 	int *ranges;
1762 
1763 	switch (ref) {
1764 	default:
1765 		MISSING_CASE(ref);
1766 		/* fall through */
1767 	case 24000:
1768 		ranges = ranges_24;
1769 		break;
1770 	case 19200:
1771 	case 38400:
1772 		ranges = ranges_19_38;
1773 		break;
1774 	}
1775 
1776 	if (min_cdclk > ranges[1])
1777 		return ranges[2];
1778 	else if (min_cdclk > ranges[0])
1779 		return ranges[1];
1780 	else
1781 		return ranges[0];
1782 }
1783 
1784 static int icl_calc_cdclk_pll_vco(struct drm_i915_private *dev_priv, int cdclk)
1785 {
1786 	int ratio;
1787 
1788 	if (cdclk == dev_priv->cdclk.hw.bypass)
1789 		return 0;
1790 
1791 	switch (cdclk) {
1792 	default:
1793 		MISSING_CASE(cdclk);
1794 		/* fall through */
1795 	case 307200:
1796 	case 556800:
1797 	case 652800:
1798 		WARN_ON(dev_priv->cdclk.hw.ref != 19200 &&
1799 			dev_priv->cdclk.hw.ref != 38400);
1800 		break;
1801 	case 312000:
1802 	case 552000:
1803 	case 648000:
1804 		WARN_ON(dev_priv->cdclk.hw.ref != 24000);
1805 	}
1806 
1807 	ratio = cdclk / (dev_priv->cdclk.hw.ref / 2);
1808 
1809 	return dev_priv->cdclk.hw.ref * ratio;
1810 }
1811 
1812 static void icl_set_cdclk(struct drm_i915_private *dev_priv,
1813 			  const struct intel_cdclk_state *cdclk_state,
1814 			  enum pipe pipe)
1815 {
1816 	unsigned int cdclk = cdclk_state->cdclk;
1817 	unsigned int vco = cdclk_state->vco;
1818 	int ret;
1819 
1820 	ret = skl_pcode_request(dev_priv, SKL_PCODE_CDCLK_CONTROL,
1821 				SKL_CDCLK_PREPARE_FOR_CHANGE,
1822 				SKL_CDCLK_READY_FOR_CHANGE,
1823 				SKL_CDCLK_READY_FOR_CHANGE, 3);
1824 	if (ret) {
1825 		DRM_ERROR("Failed to inform PCU about cdclk change (%d)\n",
1826 			  ret);
1827 		return;
1828 	}
1829 
1830 	if (dev_priv->cdclk.hw.vco != 0 &&
1831 	    dev_priv->cdclk.hw.vco != vco)
1832 		cnl_cdclk_pll_disable(dev_priv);
1833 
1834 	if (dev_priv->cdclk.hw.vco != vco)
1835 		cnl_cdclk_pll_enable(dev_priv, vco);
1836 
1837 	/*
1838 	 * On ICL CD2X_DIV can only be 1, so we'll never end up changing the
1839 	 * divider here synchronized to a pipe while CDCLK is on, nor will we
1840 	 * need the corresponding vblank wait.
1841 	 */
1842 	I915_WRITE(CDCLK_CTL, ICL_CDCLK_CD2X_PIPE_NONE |
1843 			      skl_cdclk_decimal(cdclk));
1844 
1845 	sandybridge_pcode_write(dev_priv, SKL_PCODE_CDCLK_CONTROL,
1846 				cdclk_state->voltage_level);
1847 
1848 	intel_update_cdclk(dev_priv);
1849 
1850 	/*
1851 	 * Can't read out the voltage level :(
1852 	 * Let's just assume everything is as expected.
1853 	 */
1854 	dev_priv->cdclk.hw.voltage_level = cdclk_state->voltage_level;
1855 }
1856 
1857 static u8 icl_calc_voltage_level(int cdclk)
1858 {
1859 	if (cdclk > 556800)
1860 		return 2;
1861 	else if (cdclk > 312000)
1862 		return 1;
1863 	else
1864 		return 0;
1865 }
1866 
1867 static void icl_get_cdclk(struct drm_i915_private *dev_priv,
1868 			  struct intel_cdclk_state *cdclk_state)
1869 {
1870 	u32 val;
1871 
1872 	cdclk_state->bypass = 50000;
1873 
1874 	val = I915_READ(SKL_DSSM);
1875 	switch (val & ICL_DSSM_CDCLK_PLL_REFCLK_MASK) {
1876 	default:
1877 		MISSING_CASE(val);
1878 		/* fall through */
1879 	case ICL_DSSM_CDCLK_PLL_REFCLK_24MHz:
1880 		cdclk_state->ref = 24000;
1881 		break;
1882 	case ICL_DSSM_CDCLK_PLL_REFCLK_19_2MHz:
1883 		cdclk_state->ref = 19200;
1884 		break;
1885 	case ICL_DSSM_CDCLK_PLL_REFCLK_38_4MHz:
1886 		cdclk_state->ref = 38400;
1887 		break;
1888 	}
1889 
1890 	val = I915_READ(BXT_DE_PLL_ENABLE);
1891 	if ((val & BXT_DE_PLL_PLL_ENABLE) == 0 ||
1892 	    (val & BXT_DE_PLL_LOCK) == 0) {
1893 		/*
1894 		 * CDCLK PLL is disabled, the VCO/ratio doesn't matter, but
1895 		 * setting it to zero is a way to signal that.
1896 		 */
1897 		cdclk_state->vco = 0;
1898 		cdclk_state->cdclk = cdclk_state->bypass;
1899 		goto out;
1900 	}
1901 
1902 	cdclk_state->vco = (val & BXT_DE_PLL_RATIO_MASK) * cdclk_state->ref;
1903 
1904 	val = I915_READ(CDCLK_CTL);
1905 	WARN_ON((val & BXT_CDCLK_CD2X_DIV_SEL_MASK) != 0);
1906 
1907 	cdclk_state->cdclk = cdclk_state->vco / 2;
1908 
1909 out:
1910 	/*
1911 	 * Can't read this out :( Let's assume it's
1912 	 * at least what the CDCLK frequency requires.
1913 	 */
1914 	cdclk_state->voltage_level =
1915 		icl_calc_voltage_level(cdclk_state->cdclk);
1916 }
1917 
1918 static void icl_init_cdclk(struct drm_i915_private *dev_priv)
1919 {
1920 	struct intel_cdclk_state sanitized_state;
1921 	u32 val;
1922 
1923 	/* This sets dev_priv->cdclk.hw. */
1924 	intel_update_cdclk(dev_priv);
1925 	intel_dump_cdclk_state(&dev_priv->cdclk.hw, "Current CDCLK");
1926 
1927 	/* This means CDCLK disabled. */
1928 	if (dev_priv->cdclk.hw.cdclk == dev_priv->cdclk.hw.bypass)
1929 		goto sanitize;
1930 
1931 	val = I915_READ(CDCLK_CTL);
1932 
1933 	if ((val & BXT_CDCLK_CD2X_DIV_SEL_MASK) != 0)
1934 		goto sanitize;
1935 
1936 	if ((val & CDCLK_FREQ_DECIMAL_MASK) !=
1937 	    skl_cdclk_decimal(dev_priv->cdclk.hw.cdclk))
1938 		goto sanitize;
1939 
1940 	return;
1941 
1942 sanitize:
1943 	DRM_DEBUG_KMS("Sanitizing cdclk programmed by pre-os\n");
1944 
1945 	sanitized_state.ref = dev_priv->cdclk.hw.ref;
1946 	sanitized_state.cdclk = icl_calc_cdclk(0, sanitized_state.ref);
1947 	sanitized_state.vco = icl_calc_cdclk_pll_vco(dev_priv,
1948 						     sanitized_state.cdclk);
1949 	sanitized_state.voltage_level =
1950 				icl_calc_voltage_level(sanitized_state.cdclk);
1951 
1952 	icl_set_cdclk(dev_priv, &sanitized_state, INVALID_PIPE);
1953 }
1954 
1955 static void icl_uninit_cdclk(struct drm_i915_private *dev_priv)
1956 {
1957 	struct intel_cdclk_state cdclk_state = dev_priv->cdclk.hw;
1958 
1959 	cdclk_state.cdclk = cdclk_state.bypass;
1960 	cdclk_state.vco = 0;
1961 	cdclk_state.voltage_level = icl_calc_voltage_level(cdclk_state.cdclk);
1962 
1963 	icl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE);
1964 }
1965 
1966 static void cnl_init_cdclk(struct drm_i915_private *dev_priv)
1967 {
1968 	struct intel_cdclk_state cdclk_state;
1969 
1970 	cnl_sanitize_cdclk(dev_priv);
1971 
1972 	if (dev_priv->cdclk.hw.cdclk != 0 &&
1973 	    dev_priv->cdclk.hw.vco != 0)
1974 		return;
1975 
1976 	cdclk_state = dev_priv->cdclk.hw;
1977 
1978 	cdclk_state.cdclk = cnl_calc_cdclk(0);
1979 	cdclk_state.vco = cnl_cdclk_pll_vco(dev_priv, cdclk_state.cdclk);
1980 	cdclk_state.voltage_level = cnl_calc_voltage_level(cdclk_state.cdclk);
1981 
1982 	cnl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE);
1983 }
1984 
1985 static void cnl_uninit_cdclk(struct drm_i915_private *dev_priv)
1986 {
1987 	struct intel_cdclk_state cdclk_state = dev_priv->cdclk.hw;
1988 
1989 	cdclk_state.cdclk = cdclk_state.bypass;
1990 	cdclk_state.vco = 0;
1991 	cdclk_state.voltage_level = cnl_calc_voltage_level(cdclk_state.cdclk);
1992 
1993 	cnl_set_cdclk(dev_priv, &cdclk_state, INVALID_PIPE);
1994 }
1995 
1996 /**
1997  * intel_cdclk_init - Initialize CDCLK
1998  * @i915: i915 device
1999  *
2000  * Initialize CDCLK. This consists mainly of initializing dev_priv->cdclk.hw and
2001  * sanitizing the state of the hardware if needed. This is generally done only
2002  * during the display core initialization sequence, after which the DMC will
2003  * take care of turning CDCLK off/on as needed.
2004  */
2005 void intel_cdclk_init(struct drm_i915_private *i915)
2006 {
2007 	if (INTEL_GEN(i915) >= 11)
2008 		icl_init_cdclk(i915);
2009 	else if (IS_CANNONLAKE(i915))
2010 		cnl_init_cdclk(i915);
2011 	else if (IS_GEN9_BC(i915))
2012 		skl_init_cdclk(i915);
2013 	else if (IS_GEN9_LP(i915))
2014 		bxt_init_cdclk(i915);
2015 }
2016 
2017 /**
2018  * intel_cdclk_uninit - Uninitialize CDCLK
2019  * @i915: i915 device
2020  *
2021  * Uninitialize CDCLK. This is done only during the display core
2022  * uninitialization sequence.
2023  */
2024 void intel_cdclk_uninit(struct drm_i915_private *i915)
2025 {
2026 	if (INTEL_GEN(i915) >= 11)
2027 		icl_uninit_cdclk(i915);
2028 	else if (IS_CANNONLAKE(i915))
2029 		cnl_uninit_cdclk(i915);
2030 	else if (IS_GEN9_BC(i915))
2031 		skl_uninit_cdclk(i915);
2032 	else if (IS_GEN9_LP(i915))
2033 		bxt_uninit_cdclk(i915);
2034 }
2035 
2036 /**
2037  * intel_cdclk_needs_modeset - Determine if two CDCLK states require a modeset on all pipes
2038  * @a: first CDCLK state
2039  * @b: second CDCLK state
2040  *
2041  * Returns:
2042  * True if the CDCLK states require pipes to be off during reprogramming, false if not.
2043  */
2044 bool intel_cdclk_needs_modeset(const struct intel_cdclk_state *a,
2045 			       const struct intel_cdclk_state *b)
2046 {
2047 	return a->cdclk != b->cdclk ||
2048 		a->vco != b->vco ||
2049 		a->ref != b->ref;
2050 }
2051 
2052 /**
2053  * intel_cdclk_needs_cd2x_update - Determine if two CDCLK states require a cd2x divider update
2054  * @dev_priv: Not a CDCLK state, it's the drm_i915_private!
2055  * @a: first CDCLK state
2056  * @b: second CDCLK state
2057  *
2058  * Returns:
2059  * True if the CDCLK states require just a cd2x divider update, false if not.
2060  */
2061 bool intel_cdclk_needs_cd2x_update(struct drm_i915_private *dev_priv,
2062 				   const struct intel_cdclk_state *a,
2063 				   const struct intel_cdclk_state *b)
2064 {
2065 	/* Older hw doesn't have the capability */
2066 	if (INTEL_GEN(dev_priv) < 10 && !IS_GEN9_LP(dev_priv))
2067 		return false;
2068 
2069 	return a->cdclk != b->cdclk &&
2070 		a->vco == b->vco &&
2071 		a->ref == b->ref;
2072 }
2073 
2074 /**
2075  * intel_cdclk_changed - Determine if two CDCLK states are different
2076  * @a: first CDCLK state
2077  * @b: second CDCLK state
2078  *
2079  * Returns:
2080  * True if the CDCLK states don't match, false if they do.
2081  */
2082 bool intel_cdclk_changed(const struct intel_cdclk_state *a,
2083 			 const struct intel_cdclk_state *b)
2084 {
2085 	return intel_cdclk_needs_modeset(a, b) ||
2086 		a->voltage_level != b->voltage_level;
2087 }
2088 
2089 /**
2090  * intel_cdclk_swap_state - make atomic CDCLK configuration effective
2091  * @state: atomic state
2092  *
2093  * This is the CDCLK version of drm_atomic_helper_swap_state() since the
2094  * helper does not handle driver-specific global state.
2095  *
2096  * Similarly to the atomic helpers this function does a complete swap,
2097  * i.e. it also puts the old state into @state. This is used by the commit
2098  * code to determine how CDCLK has changed (for instance did it increase or
2099  * decrease).
2100  */
2101 void intel_cdclk_swap_state(struct intel_atomic_state *state)
2102 {
2103 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2104 
2105 	swap(state->cdclk.logical, dev_priv->cdclk.logical);
2106 	swap(state->cdclk.actual, dev_priv->cdclk.actual);
2107 }
2108 
2109 void intel_dump_cdclk_state(const struct intel_cdclk_state *cdclk_state,
2110 			    const char *context)
2111 {
2112 	DRM_DEBUG_DRIVER("%s %d kHz, VCO %d kHz, ref %d kHz, bypass %d kHz, voltage level %d\n",
2113 			 context, cdclk_state->cdclk, cdclk_state->vco,
2114 			 cdclk_state->ref, cdclk_state->bypass,
2115 			 cdclk_state->voltage_level);
2116 }
2117 
2118 /**
2119  * intel_set_cdclk - Push the CDCLK state to the hardware
2120  * @dev_priv: i915 device
2121  * @cdclk_state: new CDCLK state
2122  * @pipe: pipe with which to synchronize the update
2123  *
2124  * Program the hardware based on the passed in CDCLK state,
2125  * if necessary.
2126  */
2127 static void intel_set_cdclk(struct drm_i915_private *dev_priv,
2128 			    const struct intel_cdclk_state *cdclk_state,
2129 			    enum pipe pipe)
2130 {
2131 	if (!intel_cdclk_changed(&dev_priv->cdclk.hw, cdclk_state))
2132 		return;
2133 
2134 	if (WARN_ON_ONCE(!dev_priv->display.set_cdclk))
2135 		return;
2136 
2137 	intel_dump_cdclk_state(cdclk_state, "Changing CDCLK to");
2138 
2139 	dev_priv->display.set_cdclk(dev_priv, cdclk_state, pipe);
2140 
2141 	if (WARN(intel_cdclk_changed(&dev_priv->cdclk.hw, cdclk_state),
2142 		 "cdclk state doesn't match!\n")) {
2143 		intel_dump_cdclk_state(&dev_priv->cdclk.hw, "[hw state]");
2144 		intel_dump_cdclk_state(cdclk_state, "[sw state]");
2145 	}
2146 }
2147 
2148 /**
2149  * intel_set_cdclk_pre_plane_update - Push the CDCLK state to the hardware
2150  * @dev_priv: i915 device
2151  * @old_state: old CDCLK state
2152  * @new_state: new CDCLK state
2153  * @pipe: pipe with which to synchronize the update
2154  *
2155  * Program the hardware before updating the HW plane state based on the passed
2156  * in CDCLK state, if necessary.
2157  */
2158 void
2159 intel_set_cdclk_pre_plane_update(struct drm_i915_private *dev_priv,
2160 				 const struct intel_cdclk_state *old_state,
2161 				 const struct intel_cdclk_state *new_state,
2162 				 enum pipe pipe)
2163 {
2164 	if (pipe == INVALID_PIPE || old_state->cdclk <= new_state->cdclk)
2165 		intel_set_cdclk(dev_priv, new_state, pipe);
2166 }
2167 
2168 /**
2169  * intel_set_cdclk_post_plane_update - Push the CDCLK state to the hardware
2170  * @dev_priv: i915 device
2171  * @old_state: old CDCLK state
2172  * @new_state: new CDCLK state
2173  * @pipe: pipe with which to synchronize the update
2174  *
2175  * Program the hardware after updating the HW plane state based on the passed
2176  * in CDCLK state, if necessary.
2177  */
2178 void
2179 intel_set_cdclk_post_plane_update(struct drm_i915_private *dev_priv,
2180 				  const struct intel_cdclk_state *old_state,
2181 				  const struct intel_cdclk_state *new_state,
2182 				  enum pipe pipe)
2183 {
2184 	if (pipe != INVALID_PIPE && old_state->cdclk > new_state->cdclk)
2185 		intel_set_cdclk(dev_priv, new_state, pipe);
2186 }
2187 
2188 static int intel_pixel_rate_to_cdclk(struct drm_i915_private *dev_priv,
2189 				     int pixel_rate)
2190 {
2191 	if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))
2192 		return DIV_ROUND_UP(pixel_rate, 2);
2193 	else if (IS_GEN(dev_priv, 9) ||
2194 		 IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
2195 		return pixel_rate;
2196 	else if (IS_CHERRYVIEW(dev_priv))
2197 		return DIV_ROUND_UP(pixel_rate * 100, 95);
2198 	else
2199 		return DIV_ROUND_UP(pixel_rate * 100, 90);
2200 }
2201 
2202 int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state)
2203 {
2204 	struct drm_i915_private *dev_priv =
2205 		to_i915(crtc_state->base.crtc->dev);
2206 	int min_cdclk;
2207 
2208 	if (!crtc_state->base.enable)
2209 		return 0;
2210 
2211 	min_cdclk = intel_pixel_rate_to_cdclk(dev_priv, crtc_state->pixel_rate);
2212 
2213 	/* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
2214 	if (IS_BROADWELL(dev_priv) && hsw_crtc_state_ips_capable(crtc_state))
2215 		min_cdclk = DIV_ROUND_UP(min_cdclk * 100, 95);
2216 
2217 	/* BSpec says "Do not use DisplayPort with CDCLK less than 432 MHz,
2218 	 * audio enabled, port width x4, and link rate HBR2 (5.4 GHz), or else
2219 	 * there may be audio corruption or screen corruption." This cdclk
2220 	 * restriction for GLK is 316.8 MHz.
2221 	 */
2222 	if (intel_crtc_has_dp_encoder(crtc_state) &&
2223 	    crtc_state->has_audio &&
2224 	    crtc_state->port_clock >= 540000 &&
2225 	    crtc_state->lane_count == 4) {
2226 		if (IS_CANNONLAKE(dev_priv) || IS_GEMINILAKE(dev_priv)) {
2227 			/* Display WA #1145: glk,cnl */
2228 			min_cdclk = max(316800, min_cdclk);
2229 		} else if (IS_GEN(dev_priv, 9) || IS_BROADWELL(dev_priv)) {
2230 			/* Display WA #1144: skl,bxt */
2231 			min_cdclk = max(432000, min_cdclk);
2232 		}
2233 	}
2234 
2235 	/*
2236 	 * According to BSpec, "The CD clock frequency must be at least twice
2237 	 * the frequency of the Azalia BCLK." and BCLK is 96 MHz by default.
2238 	 */
2239 	if (crtc_state->has_audio && INTEL_GEN(dev_priv) >= 9)
2240 		min_cdclk = max(2 * 96000, min_cdclk);
2241 
2242 	/*
2243 	 * "For DP audio configuration, cdclk frequency shall be set to
2244 	 *  meet the following requirements:
2245 	 *  DP Link Frequency(MHz) | Cdclk frequency(MHz)
2246 	 *  270                    | 320 or higher
2247 	 *  162                    | 200 or higher"
2248 	 */
2249 	if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
2250 	    intel_crtc_has_dp_encoder(crtc_state) && crtc_state->has_audio)
2251 		min_cdclk = max(crtc_state->port_clock, min_cdclk);
2252 
2253 	/*
2254 	 * On Valleyview some DSI panels lose (v|h)sync when the clock is lower
2255 	 * than 320000KHz.
2256 	 */
2257 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI) &&
2258 	    IS_VALLEYVIEW(dev_priv))
2259 		min_cdclk = max(320000, min_cdclk);
2260 
2261 	/*
2262 	 * On Geminilake once the CDCLK gets as low as 79200
2263 	 * picture gets unstable, despite that values are
2264 	 * correct for DSI PLL and DE PLL.
2265 	 */
2266 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI) &&
2267 	    IS_GEMINILAKE(dev_priv))
2268 		min_cdclk = max(158400, min_cdclk);
2269 
2270 	if (min_cdclk > dev_priv->max_cdclk_freq) {
2271 		DRM_DEBUG_KMS("required cdclk (%d kHz) exceeds max (%d kHz)\n",
2272 			      min_cdclk, dev_priv->max_cdclk_freq);
2273 		return -EINVAL;
2274 	}
2275 
2276 	return min_cdclk;
2277 }
2278 
2279 static int intel_compute_min_cdclk(struct intel_atomic_state *state)
2280 {
2281 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2282 	struct intel_crtc *crtc;
2283 	struct intel_crtc_state *crtc_state;
2284 	int min_cdclk, i;
2285 	enum pipe pipe;
2286 
2287 	memcpy(state->min_cdclk, dev_priv->min_cdclk,
2288 	       sizeof(state->min_cdclk));
2289 
2290 	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
2291 		min_cdclk = intel_crtc_compute_min_cdclk(crtc_state);
2292 		if (min_cdclk < 0)
2293 			return min_cdclk;
2294 
2295 		state->min_cdclk[i] = min_cdclk;
2296 	}
2297 
2298 	min_cdclk = state->cdclk.force_min_cdclk;
2299 	for_each_pipe(dev_priv, pipe)
2300 		min_cdclk = max(state->min_cdclk[pipe], min_cdclk);
2301 
2302 	return min_cdclk;
2303 }
2304 
2305 /*
2306  * Note that this functions assumes that 0 is
2307  * the lowest voltage value, and higher values
2308  * correspond to increasingly higher voltages.
2309  *
2310  * Should that relationship no longer hold on
2311  * future platforms this code will need to be
2312  * adjusted.
2313  */
2314 static u8 cnl_compute_min_voltage_level(struct intel_atomic_state *state)
2315 {
2316 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2317 	struct intel_crtc *crtc;
2318 	struct intel_crtc_state *crtc_state;
2319 	u8 min_voltage_level;
2320 	int i;
2321 	enum pipe pipe;
2322 
2323 	memcpy(state->min_voltage_level, dev_priv->min_voltage_level,
2324 	       sizeof(state->min_voltage_level));
2325 
2326 	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
2327 		if (crtc_state->base.enable)
2328 			state->min_voltage_level[i] =
2329 				crtc_state->min_voltage_level;
2330 		else
2331 			state->min_voltage_level[i] = 0;
2332 	}
2333 
2334 	min_voltage_level = 0;
2335 	for_each_pipe(dev_priv, pipe)
2336 		min_voltage_level = max(state->min_voltage_level[pipe],
2337 					min_voltage_level);
2338 
2339 	return min_voltage_level;
2340 }
2341 
2342 static int vlv_modeset_calc_cdclk(struct intel_atomic_state *state)
2343 {
2344 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2345 	int min_cdclk, cdclk;
2346 
2347 	min_cdclk = intel_compute_min_cdclk(state);
2348 	if (min_cdclk < 0)
2349 		return min_cdclk;
2350 
2351 	cdclk = vlv_calc_cdclk(dev_priv, min_cdclk);
2352 
2353 	state->cdclk.logical.cdclk = cdclk;
2354 	state->cdclk.logical.voltage_level =
2355 		vlv_calc_voltage_level(dev_priv, cdclk);
2356 
2357 	if (!state->active_crtcs) {
2358 		cdclk = vlv_calc_cdclk(dev_priv, state->cdclk.force_min_cdclk);
2359 
2360 		state->cdclk.actual.cdclk = cdclk;
2361 		state->cdclk.actual.voltage_level =
2362 			vlv_calc_voltage_level(dev_priv, cdclk);
2363 	} else {
2364 		state->cdclk.actual = state->cdclk.logical;
2365 	}
2366 
2367 	return 0;
2368 }
2369 
2370 static int bdw_modeset_calc_cdclk(struct intel_atomic_state *state)
2371 {
2372 	int min_cdclk, cdclk;
2373 
2374 	min_cdclk = intel_compute_min_cdclk(state);
2375 	if (min_cdclk < 0)
2376 		return min_cdclk;
2377 
2378 	/*
2379 	 * FIXME should also account for plane ratio
2380 	 * once 64bpp pixel formats are supported.
2381 	 */
2382 	cdclk = bdw_calc_cdclk(min_cdclk);
2383 
2384 	state->cdclk.logical.cdclk = cdclk;
2385 	state->cdclk.logical.voltage_level =
2386 		bdw_calc_voltage_level(cdclk);
2387 
2388 	if (!state->active_crtcs) {
2389 		cdclk = bdw_calc_cdclk(state->cdclk.force_min_cdclk);
2390 
2391 		state->cdclk.actual.cdclk = cdclk;
2392 		state->cdclk.actual.voltage_level =
2393 			bdw_calc_voltage_level(cdclk);
2394 	} else {
2395 		state->cdclk.actual = state->cdclk.logical;
2396 	}
2397 
2398 	return 0;
2399 }
2400 
2401 static int skl_dpll0_vco(struct intel_atomic_state *state)
2402 {
2403 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2404 	struct intel_crtc *crtc;
2405 	struct intel_crtc_state *crtc_state;
2406 	int vco, i;
2407 
2408 	vco = state->cdclk.logical.vco;
2409 	if (!vco)
2410 		vco = dev_priv->skl_preferred_vco_freq;
2411 
2412 	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
2413 		if (!crtc_state->base.enable)
2414 			continue;
2415 
2416 		if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_EDP))
2417 			continue;
2418 
2419 		/*
2420 		 * DPLL0 VCO may need to be adjusted to get the correct
2421 		 * clock for eDP. This will affect cdclk as well.
2422 		 */
2423 		switch (crtc_state->port_clock / 2) {
2424 		case 108000:
2425 		case 216000:
2426 			vco = 8640000;
2427 			break;
2428 		default:
2429 			vco = 8100000;
2430 			break;
2431 		}
2432 	}
2433 
2434 	return vco;
2435 }
2436 
2437 static int skl_modeset_calc_cdclk(struct intel_atomic_state *state)
2438 {
2439 	int min_cdclk, cdclk, vco;
2440 
2441 	min_cdclk = intel_compute_min_cdclk(state);
2442 	if (min_cdclk < 0)
2443 		return min_cdclk;
2444 
2445 	vco = skl_dpll0_vco(state);
2446 
2447 	/*
2448 	 * FIXME should also account for plane ratio
2449 	 * once 64bpp pixel formats are supported.
2450 	 */
2451 	cdclk = skl_calc_cdclk(min_cdclk, vco);
2452 
2453 	state->cdclk.logical.vco = vco;
2454 	state->cdclk.logical.cdclk = cdclk;
2455 	state->cdclk.logical.voltage_level =
2456 		skl_calc_voltage_level(cdclk);
2457 
2458 	if (!state->active_crtcs) {
2459 		cdclk = skl_calc_cdclk(state->cdclk.force_min_cdclk, vco);
2460 
2461 		state->cdclk.actual.vco = vco;
2462 		state->cdclk.actual.cdclk = cdclk;
2463 		state->cdclk.actual.voltage_level =
2464 			skl_calc_voltage_level(cdclk);
2465 	} else {
2466 		state->cdclk.actual = state->cdclk.logical;
2467 	}
2468 
2469 	return 0;
2470 }
2471 
2472 static int bxt_modeset_calc_cdclk(struct intel_atomic_state *state)
2473 {
2474 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2475 	int min_cdclk, cdclk, vco;
2476 
2477 	min_cdclk = intel_compute_min_cdclk(state);
2478 	if (min_cdclk < 0)
2479 		return min_cdclk;
2480 
2481 	if (IS_GEMINILAKE(dev_priv)) {
2482 		cdclk = glk_calc_cdclk(min_cdclk);
2483 		vco = glk_de_pll_vco(dev_priv, cdclk);
2484 	} else {
2485 		cdclk = bxt_calc_cdclk(min_cdclk);
2486 		vco = bxt_de_pll_vco(dev_priv, cdclk);
2487 	}
2488 
2489 	state->cdclk.logical.vco = vco;
2490 	state->cdclk.logical.cdclk = cdclk;
2491 	state->cdclk.logical.voltage_level =
2492 		bxt_calc_voltage_level(cdclk);
2493 
2494 	if (!state->active_crtcs) {
2495 		if (IS_GEMINILAKE(dev_priv)) {
2496 			cdclk = glk_calc_cdclk(state->cdclk.force_min_cdclk);
2497 			vco = glk_de_pll_vco(dev_priv, cdclk);
2498 		} else {
2499 			cdclk = bxt_calc_cdclk(state->cdclk.force_min_cdclk);
2500 			vco = bxt_de_pll_vco(dev_priv, cdclk);
2501 		}
2502 
2503 		state->cdclk.actual.vco = vco;
2504 		state->cdclk.actual.cdclk = cdclk;
2505 		state->cdclk.actual.voltage_level =
2506 			bxt_calc_voltage_level(cdclk);
2507 	} else {
2508 		state->cdclk.actual = state->cdclk.logical;
2509 	}
2510 
2511 	return 0;
2512 }
2513 
2514 static int cnl_modeset_calc_cdclk(struct intel_atomic_state *state)
2515 {
2516 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2517 	int min_cdclk, cdclk, vco;
2518 
2519 	min_cdclk = intel_compute_min_cdclk(state);
2520 	if (min_cdclk < 0)
2521 		return min_cdclk;
2522 
2523 	cdclk = cnl_calc_cdclk(min_cdclk);
2524 	vco = cnl_cdclk_pll_vco(dev_priv, cdclk);
2525 
2526 	state->cdclk.logical.vco = vco;
2527 	state->cdclk.logical.cdclk = cdclk;
2528 	state->cdclk.logical.voltage_level =
2529 		max(cnl_calc_voltage_level(cdclk),
2530 		    cnl_compute_min_voltage_level(state));
2531 
2532 	if (!state->active_crtcs) {
2533 		cdclk = cnl_calc_cdclk(state->cdclk.force_min_cdclk);
2534 		vco = cnl_cdclk_pll_vco(dev_priv, cdclk);
2535 
2536 		state->cdclk.actual.vco = vco;
2537 		state->cdclk.actual.cdclk = cdclk;
2538 		state->cdclk.actual.voltage_level =
2539 			cnl_calc_voltage_level(cdclk);
2540 	} else {
2541 		state->cdclk.actual = state->cdclk.logical;
2542 	}
2543 
2544 	return 0;
2545 }
2546 
2547 static int icl_modeset_calc_cdclk(struct intel_atomic_state *state)
2548 {
2549 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
2550 	unsigned int ref = state->cdclk.logical.ref;
2551 	int min_cdclk, cdclk, vco;
2552 
2553 	min_cdclk = intel_compute_min_cdclk(state);
2554 	if (min_cdclk < 0)
2555 		return min_cdclk;
2556 
2557 	cdclk = icl_calc_cdclk(min_cdclk, ref);
2558 	vco = icl_calc_cdclk_pll_vco(dev_priv, cdclk);
2559 
2560 	state->cdclk.logical.vco = vco;
2561 	state->cdclk.logical.cdclk = cdclk;
2562 	state->cdclk.logical.voltage_level =
2563 		max(icl_calc_voltage_level(cdclk),
2564 		    cnl_compute_min_voltage_level(state));
2565 
2566 	if (!state->active_crtcs) {
2567 		cdclk = icl_calc_cdclk(state->cdclk.force_min_cdclk, ref);
2568 		vco = icl_calc_cdclk_pll_vco(dev_priv, cdclk);
2569 
2570 		state->cdclk.actual.vco = vco;
2571 		state->cdclk.actual.cdclk = cdclk;
2572 		state->cdclk.actual.voltage_level =
2573 			icl_calc_voltage_level(cdclk);
2574 	} else {
2575 		state->cdclk.actual = state->cdclk.logical;
2576 	}
2577 
2578 	return 0;
2579 }
2580 
2581 static int intel_compute_max_dotclk(struct drm_i915_private *dev_priv)
2582 {
2583 	int max_cdclk_freq = dev_priv->max_cdclk_freq;
2584 
2585 	if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))
2586 		return 2 * max_cdclk_freq;
2587 	else if (IS_GEN(dev_priv, 9) ||
2588 		 IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
2589 		return max_cdclk_freq;
2590 	else if (IS_CHERRYVIEW(dev_priv))
2591 		return max_cdclk_freq*95/100;
2592 	else if (INTEL_GEN(dev_priv) < 4)
2593 		return 2*max_cdclk_freq*90/100;
2594 	else
2595 		return max_cdclk_freq*90/100;
2596 }
2597 
2598 /**
2599  * intel_update_max_cdclk - Determine the maximum support CDCLK frequency
2600  * @dev_priv: i915 device
2601  *
2602  * Determine the maximum CDCLK frequency the platform supports, and also
2603  * derive the maximum dot clock frequency the maximum CDCLK frequency
2604  * allows.
2605  */
2606 void intel_update_max_cdclk(struct drm_i915_private *dev_priv)
2607 {
2608 	if (INTEL_GEN(dev_priv) >= 11) {
2609 		if (dev_priv->cdclk.hw.ref == 24000)
2610 			dev_priv->max_cdclk_freq = 648000;
2611 		else
2612 			dev_priv->max_cdclk_freq = 652800;
2613 	} else if (IS_CANNONLAKE(dev_priv)) {
2614 		dev_priv->max_cdclk_freq = 528000;
2615 	} else if (IS_GEN9_BC(dev_priv)) {
2616 		u32 limit = I915_READ(SKL_DFSM) & SKL_DFSM_CDCLK_LIMIT_MASK;
2617 		int max_cdclk, vco;
2618 
2619 		vco = dev_priv->skl_preferred_vco_freq;
2620 		WARN_ON(vco != 8100000 && vco != 8640000);
2621 
2622 		/*
2623 		 * Use the lower (vco 8640) cdclk values as a
2624 		 * first guess. skl_calc_cdclk() will correct it
2625 		 * if the preferred vco is 8100 instead.
2626 		 */
2627 		if (limit == SKL_DFSM_CDCLK_LIMIT_675)
2628 			max_cdclk = 617143;
2629 		else if (limit == SKL_DFSM_CDCLK_LIMIT_540)
2630 			max_cdclk = 540000;
2631 		else if (limit == SKL_DFSM_CDCLK_LIMIT_450)
2632 			max_cdclk = 432000;
2633 		else
2634 			max_cdclk = 308571;
2635 
2636 		dev_priv->max_cdclk_freq = skl_calc_cdclk(max_cdclk, vco);
2637 	} else if (IS_GEMINILAKE(dev_priv)) {
2638 		dev_priv->max_cdclk_freq = 316800;
2639 	} else if (IS_BROXTON(dev_priv)) {
2640 		dev_priv->max_cdclk_freq = 624000;
2641 	} else if (IS_BROADWELL(dev_priv))  {
2642 		/*
2643 		 * FIXME with extra cooling we can allow
2644 		 * 540 MHz for ULX and 675 Mhz for ULT.
2645 		 * How can we know if extra cooling is
2646 		 * available? PCI ID, VTB, something else?
2647 		 */
2648 		if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT)
2649 			dev_priv->max_cdclk_freq = 450000;
2650 		else if (IS_BDW_ULX(dev_priv))
2651 			dev_priv->max_cdclk_freq = 450000;
2652 		else if (IS_BDW_ULT(dev_priv))
2653 			dev_priv->max_cdclk_freq = 540000;
2654 		else
2655 			dev_priv->max_cdclk_freq = 675000;
2656 	} else if (IS_CHERRYVIEW(dev_priv)) {
2657 		dev_priv->max_cdclk_freq = 320000;
2658 	} else if (IS_VALLEYVIEW(dev_priv)) {
2659 		dev_priv->max_cdclk_freq = 400000;
2660 	} else {
2661 		/* otherwise assume cdclk is fixed */
2662 		dev_priv->max_cdclk_freq = dev_priv->cdclk.hw.cdclk;
2663 	}
2664 
2665 	dev_priv->max_dotclk_freq = intel_compute_max_dotclk(dev_priv);
2666 
2667 	DRM_DEBUG_DRIVER("Max CD clock rate: %d kHz\n",
2668 			 dev_priv->max_cdclk_freq);
2669 
2670 	DRM_DEBUG_DRIVER("Max dotclock rate: %d kHz\n",
2671 			 dev_priv->max_dotclk_freq);
2672 }
2673 
2674 /**
2675  * intel_update_cdclk - Determine the current CDCLK frequency
2676  * @dev_priv: i915 device
2677  *
2678  * Determine the current CDCLK frequency.
2679  */
2680 void intel_update_cdclk(struct drm_i915_private *dev_priv)
2681 {
2682 	dev_priv->display.get_cdclk(dev_priv, &dev_priv->cdclk.hw);
2683 
2684 	/*
2685 	 * 9:0 CMBUS [sic] CDCLK frequency (cdfreq):
2686 	 * Programmng [sic] note: bit[9:2] should be programmed to the number
2687 	 * of cdclk that generates 4MHz reference clock freq which is used to
2688 	 * generate GMBus clock. This will vary with the cdclk freq.
2689 	 */
2690 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
2691 		I915_WRITE(GMBUSFREQ_VLV,
2692 			   DIV_ROUND_UP(dev_priv->cdclk.hw.cdclk, 1000));
2693 }
2694 
2695 static int cnp_rawclk(struct drm_i915_private *dev_priv)
2696 {
2697 	u32 rawclk;
2698 	int divider, fraction;
2699 
2700 	if (I915_READ(SFUSE_STRAP) & SFUSE_STRAP_RAW_FREQUENCY) {
2701 		/* 24 MHz */
2702 		divider = 24000;
2703 		fraction = 0;
2704 	} else {
2705 		/* 19.2 MHz */
2706 		divider = 19000;
2707 		fraction = 200;
2708 	}
2709 
2710 	rawclk = CNP_RAWCLK_DIV(divider / 1000);
2711 	if (fraction) {
2712 		int numerator = 1;
2713 
2714 		rawclk |= CNP_RAWCLK_DEN(DIV_ROUND_CLOSEST(numerator * 1000,
2715 							   fraction) - 1);
2716 		if (INTEL_PCH_TYPE(dev_priv) >= PCH_ICP)
2717 			rawclk |= ICP_RAWCLK_NUM(numerator);
2718 	}
2719 
2720 	I915_WRITE(PCH_RAWCLK_FREQ, rawclk);
2721 	return divider + fraction;
2722 }
2723 
2724 static int pch_rawclk(struct drm_i915_private *dev_priv)
2725 {
2726 	return (I915_READ(PCH_RAWCLK_FREQ) & RAWCLK_FREQ_MASK) * 1000;
2727 }
2728 
2729 static int vlv_hrawclk(struct drm_i915_private *dev_priv)
2730 {
2731 	/* RAWCLK_FREQ_VLV register updated from power well code */
2732 	return vlv_get_cck_clock_hpll(dev_priv, "hrawclk",
2733 				      CCK_DISPLAY_REF_CLOCK_CONTROL);
2734 }
2735 
2736 static int g4x_hrawclk(struct drm_i915_private *dev_priv)
2737 {
2738 	u32 clkcfg;
2739 
2740 	/* hrawclock is 1/4 the FSB frequency */
2741 	clkcfg = I915_READ(CLKCFG);
2742 	switch (clkcfg & CLKCFG_FSB_MASK) {
2743 	case CLKCFG_FSB_400:
2744 		return 100000;
2745 	case CLKCFG_FSB_533:
2746 		return 133333;
2747 	case CLKCFG_FSB_667:
2748 		return 166667;
2749 	case CLKCFG_FSB_800:
2750 		return 200000;
2751 	case CLKCFG_FSB_1067:
2752 	case CLKCFG_FSB_1067_ALT:
2753 		return 266667;
2754 	case CLKCFG_FSB_1333:
2755 	case CLKCFG_FSB_1333_ALT:
2756 		return 333333;
2757 	default:
2758 		return 133333;
2759 	}
2760 }
2761 
2762 /**
2763  * intel_update_rawclk - Determine the current RAWCLK frequency
2764  * @dev_priv: i915 device
2765  *
2766  * Determine the current RAWCLK frequency. RAWCLK is a fixed
2767  * frequency clock so this needs to done only once.
2768  */
2769 void intel_update_rawclk(struct drm_i915_private *dev_priv)
2770 {
2771 	if (INTEL_PCH_TYPE(dev_priv) >= PCH_CNP)
2772 		dev_priv->rawclk_freq = cnp_rawclk(dev_priv);
2773 	else if (HAS_PCH_SPLIT(dev_priv))
2774 		dev_priv->rawclk_freq = pch_rawclk(dev_priv);
2775 	else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
2776 		dev_priv->rawclk_freq = vlv_hrawclk(dev_priv);
2777 	else if (IS_G4X(dev_priv) || IS_PINEVIEW(dev_priv))
2778 		dev_priv->rawclk_freq = g4x_hrawclk(dev_priv);
2779 	else
2780 		/* no rawclk on other platforms, or no need to know it */
2781 		return;
2782 
2783 	DRM_DEBUG_DRIVER("rawclk rate: %d kHz\n", dev_priv->rawclk_freq);
2784 }
2785 
2786 /**
2787  * intel_init_cdclk_hooks - Initialize CDCLK related modesetting hooks
2788  * @dev_priv: i915 device
2789  */
2790 void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv)
2791 {
2792 	if (INTEL_GEN(dev_priv) >= 11) {
2793 		dev_priv->display.set_cdclk = icl_set_cdclk;
2794 		dev_priv->display.modeset_calc_cdclk = icl_modeset_calc_cdclk;
2795 	} else if (IS_CANNONLAKE(dev_priv)) {
2796 		dev_priv->display.set_cdclk = cnl_set_cdclk;
2797 		dev_priv->display.modeset_calc_cdclk = cnl_modeset_calc_cdclk;
2798 	} else if (IS_GEN9_LP(dev_priv)) {
2799 		dev_priv->display.set_cdclk = bxt_set_cdclk;
2800 		dev_priv->display.modeset_calc_cdclk = bxt_modeset_calc_cdclk;
2801 	} else if (IS_GEN9_BC(dev_priv)) {
2802 		dev_priv->display.set_cdclk = skl_set_cdclk;
2803 		dev_priv->display.modeset_calc_cdclk = skl_modeset_calc_cdclk;
2804 	} else if (IS_BROADWELL(dev_priv)) {
2805 		dev_priv->display.set_cdclk = bdw_set_cdclk;
2806 		dev_priv->display.modeset_calc_cdclk = bdw_modeset_calc_cdclk;
2807 	} else if (IS_CHERRYVIEW(dev_priv)) {
2808 		dev_priv->display.set_cdclk = chv_set_cdclk;
2809 		dev_priv->display.modeset_calc_cdclk = vlv_modeset_calc_cdclk;
2810 	} else if (IS_VALLEYVIEW(dev_priv)) {
2811 		dev_priv->display.set_cdclk = vlv_set_cdclk;
2812 		dev_priv->display.modeset_calc_cdclk = vlv_modeset_calc_cdclk;
2813 	}
2814 
2815 	if (INTEL_GEN(dev_priv) >= 11)
2816 		dev_priv->display.get_cdclk = icl_get_cdclk;
2817 	else if (IS_CANNONLAKE(dev_priv))
2818 		dev_priv->display.get_cdclk = cnl_get_cdclk;
2819 	else if (IS_GEN9_LP(dev_priv))
2820 		dev_priv->display.get_cdclk = bxt_get_cdclk;
2821 	else if (IS_GEN9_BC(dev_priv))
2822 		dev_priv->display.get_cdclk = skl_get_cdclk;
2823 	else if (IS_BROADWELL(dev_priv))
2824 		dev_priv->display.get_cdclk = bdw_get_cdclk;
2825 	else if (IS_HASWELL(dev_priv))
2826 		dev_priv->display.get_cdclk = hsw_get_cdclk;
2827 	else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
2828 		dev_priv->display.get_cdclk = vlv_get_cdclk;
2829 	else if (IS_GEN(dev_priv, 6) || IS_IVYBRIDGE(dev_priv))
2830 		dev_priv->display.get_cdclk = fixed_400mhz_get_cdclk;
2831 	else if (IS_GEN(dev_priv, 5))
2832 		dev_priv->display.get_cdclk = fixed_450mhz_get_cdclk;
2833 	else if (IS_GM45(dev_priv))
2834 		dev_priv->display.get_cdclk = gm45_get_cdclk;
2835 	else if (IS_G45(dev_priv))
2836 		dev_priv->display.get_cdclk = g33_get_cdclk;
2837 	else if (IS_I965GM(dev_priv))
2838 		dev_priv->display.get_cdclk = i965gm_get_cdclk;
2839 	else if (IS_I965G(dev_priv))
2840 		dev_priv->display.get_cdclk = fixed_400mhz_get_cdclk;
2841 	else if (IS_PINEVIEW(dev_priv))
2842 		dev_priv->display.get_cdclk = pnv_get_cdclk;
2843 	else if (IS_G33(dev_priv))
2844 		dev_priv->display.get_cdclk = g33_get_cdclk;
2845 	else if (IS_I945GM(dev_priv))
2846 		dev_priv->display.get_cdclk = i945gm_get_cdclk;
2847 	else if (IS_I945G(dev_priv))
2848 		dev_priv->display.get_cdclk = fixed_400mhz_get_cdclk;
2849 	else if (IS_I915GM(dev_priv))
2850 		dev_priv->display.get_cdclk = i915gm_get_cdclk;
2851 	else if (IS_I915G(dev_priv))
2852 		dev_priv->display.get_cdclk = fixed_333mhz_get_cdclk;
2853 	else if (IS_I865G(dev_priv))
2854 		dev_priv->display.get_cdclk = fixed_266mhz_get_cdclk;
2855 	else if (IS_I85X(dev_priv))
2856 		dev_priv->display.get_cdclk = i85x_get_cdclk;
2857 	else if (IS_I845G(dev_priv))
2858 		dev_priv->display.get_cdclk = fixed_200mhz_get_cdclk;
2859 	else { /* 830 */
2860 		WARN(!IS_I830(dev_priv),
2861 		     "Unknown platform. Assuming 133 MHz CDCLK\n");
2862 		dev_priv->display.get_cdclk = fixed_133mhz_get_cdclk;
2863 	}
2864 }
2865