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