2 * Copyright © 2006-2017 Intel Corporation
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:
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
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.
24 #include "intel_drv.h"
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.
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.
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.
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.
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.
54 static int fixed_133mhz_get_cdclk(struct drm_i915_private *dev_priv)
59 static int fixed_200mhz_get_cdclk(struct drm_i915_private *dev_priv)
64 static int fixed_266mhz_get_cdclk(struct drm_i915_private *dev_priv)
69 static int fixed_333mhz_get_cdclk(struct drm_i915_private *dev_priv)
74 static int fixed_400mhz_get_cdclk(struct drm_i915_private *dev_priv)
79 static int fixed_450mhz_get_cdclk(struct drm_i915_private *dev_priv)
84 static int i85x_get_cdclk(struct drm_i915_private *dev_priv)
86 struct pci_dev *pdev = dev_priv->drm.pdev;
90 * 852GM/852GMV only supports 133 MHz and the HPLLCC
91 * encoding is different :(
92 * FIXME is this the right way to detect 852GM/852GMV?
94 if (pdev->revision == 0x1)
97 pci_bus_read_config_word(pdev->bus,
98 PCI_DEVFN(0, 3), HPLLCC, &hpllcc);
100 /* Assume that the hardware is in the high speed state. This
101 * should be the default.
103 switch (hpllcc & GC_CLOCK_CONTROL_MASK) {
104 case GC_CLOCK_133_200:
105 case GC_CLOCK_133_200_2:
106 case GC_CLOCK_100_200:
108 case GC_CLOCK_166_250:
110 case GC_CLOCK_100_133:
112 case GC_CLOCK_133_266:
113 case GC_CLOCK_133_266_2:
114 case GC_CLOCK_166_266:
118 /* Shouldn't happen */
122 static int i915gm_get_cdclk(struct drm_i915_private *dev_priv)
124 struct pci_dev *pdev = dev_priv->drm.pdev;
127 pci_read_config_word(pdev, GCFGC, &gcfgc);
129 if (gcfgc & GC_LOW_FREQUENCY_ENABLE)
132 switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
133 case GC_DISPLAY_CLOCK_333_320_MHZ:
136 case GC_DISPLAY_CLOCK_190_200_MHZ:
141 static int i945gm_get_cdclk(struct drm_i915_private *dev_priv)
143 struct pci_dev *pdev = dev_priv->drm.pdev;
146 pci_read_config_word(pdev, GCFGC, &gcfgc);
148 if (gcfgc & GC_LOW_FREQUENCY_ENABLE)
151 switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
152 case GC_DISPLAY_CLOCK_333_320_MHZ:
155 case GC_DISPLAY_CLOCK_190_200_MHZ:
160 static unsigned int intel_hpll_vco(struct drm_i915_private *dev_priv)
162 static const unsigned int blb_vco[8] = {
169 static const unsigned int pnv_vco[8] = {
176 static const unsigned int cl_vco[8] = {
185 static const unsigned int elk_vco[8] = {
191 static const unsigned int ctg_vco[8] = {
199 const unsigned int *vco_table;
203 /* FIXME other chipsets? */
204 if (IS_GM45(dev_priv))
206 else if (IS_G4X(dev_priv))
208 else if (IS_I965GM(dev_priv))
210 else if (IS_PINEVIEW(dev_priv))
212 else if (IS_G33(dev_priv))
217 tmp = I915_READ(IS_MOBILE(dev_priv) ? HPLLVCO_MOBILE : HPLLVCO);
219 vco = vco_table[tmp & 0x7];
221 DRM_ERROR("Bad HPLL VCO (HPLLVCO=0x%02x)\n", tmp);
223 DRM_DEBUG_KMS("HPLL VCO %u kHz\n", vco);
228 static int g33_get_cdclk(struct drm_i915_private *dev_priv)
230 struct pci_dev *pdev = dev_priv->drm.pdev;
231 static const uint8_t div_3200[] = { 12, 10, 8, 7, 5, 16 };
232 static const uint8_t div_4000[] = { 14, 12, 10, 8, 6, 20 };
233 static const uint8_t div_4800[] = { 20, 14, 12, 10, 8, 24 };
234 static const uint8_t div_5333[] = { 20, 16, 12, 12, 8, 28 };
235 const uint8_t *div_table;
236 unsigned int cdclk_sel, vco = intel_hpll_vco(dev_priv);
239 pci_read_config_word(pdev, GCFGC, &tmp);
241 cdclk_sel = (tmp >> 4) & 0x7;
243 if (cdclk_sel >= ARRAY_SIZE(div_3200))
248 div_table = div_3200;
251 div_table = div_4000;
254 div_table = div_4800;
257 div_table = div_5333;
263 return DIV_ROUND_CLOSEST(vco, div_table[cdclk_sel]);
266 DRM_ERROR("Unable to determine CDCLK. HPLL VCO=%u kHz, CFGC=0x%08x\n",
271 static int pnv_get_cdclk(struct drm_i915_private *dev_priv)
273 struct pci_dev *pdev = dev_priv->drm.pdev;
276 pci_read_config_word(pdev, GCFGC, &gcfgc);
278 switch (gcfgc & GC_DISPLAY_CLOCK_MASK) {
279 case GC_DISPLAY_CLOCK_267_MHZ_PNV:
281 case GC_DISPLAY_CLOCK_333_MHZ_PNV:
283 case GC_DISPLAY_CLOCK_444_MHZ_PNV:
285 case GC_DISPLAY_CLOCK_200_MHZ_PNV:
288 DRM_ERROR("Unknown pnv display core clock 0x%04x\n", gcfgc);
289 case GC_DISPLAY_CLOCK_133_MHZ_PNV:
291 case GC_DISPLAY_CLOCK_167_MHZ_PNV:
296 static int i965gm_get_cdclk(struct drm_i915_private *dev_priv)
298 struct pci_dev *pdev = dev_priv->drm.pdev;
299 static const uint8_t div_3200[] = { 16, 10, 8 };
300 static const uint8_t div_4000[] = { 20, 12, 10 };
301 static const uint8_t div_5333[] = { 24, 16, 14 };
302 const uint8_t *div_table;
303 unsigned int cdclk_sel, vco = intel_hpll_vco(dev_priv);
306 pci_read_config_word(pdev, GCFGC, &tmp);
308 cdclk_sel = ((tmp >> 8) & 0x1f) - 1;
310 if (cdclk_sel >= ARRAY_SIZE(div_3200))
315 div_table = div_3200;
318 div_table = div_4000;
321 div_table = div_5333;
327 return DIV_ROUND_CLOSEST(vco, div_table[cdclk_sel]);
330 DRM_ERROR("Unable to determine CDCLK. HPLL VCO=%u kHz, CFGC=0x%04x\n",
335 static int gm45_get_cdclk(struct drm_i915_private *dev_priv)
337 struct pci_dev *pdev = dev_priv->drm.pdev;
338 unsigned int cdclk_sel, vco = intel_hpll_vco(dev_priv);
341 pci_read_config_word(pdev, GCFGC, &tmp);
343 cdclk_sel = (tmp >> 12) & 0x1;
349 return cdclk_sel ? 333333 : 222222;
351 return cdclk_sel ? 320000 : 228571;
353 DRM_ERROR("Unable to determine CDCLK. HPLL VCO=%u, CFGC=0x%04x\n",
359 static int hsw_get_cdclk(struct drm_i915_private *dev_priv)
361 uint32_t lcpll = I915_READ(LCPLL_CTL);
362 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK;
364 if (lcpll & LCPLL_CD_SOURCE_FCLK)
366 else if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT)
368 else if (freq == LCPLL_CLK_FREQ_450)
370 else if (IS_HSW_ULT(dev_priv))
376 static int vlv_calc_cdclk(struct drm_i915_private *dev_priv,
379 int freq_320 = (dev_priv->hpll_freq << 1) % 320000 != 0 ?
381 int limit = IS_CHERRYVIEW(dev_priv) ? 95 : 90;
384 * We seem to get an unstable or solid color picture at 200MHz.
385 * Not sure what's wrong. For now use 200MHz only when all pipes
388 if (!IS_CHERRYVIEW(dev_priv) &&
389 max_pixclk > freq_320*limit/100)
391 else if (max_pixclk > 266667*limit/100)
393 else if (max_pixclk > 0)
399 static int vlv_get_cdclk(struct drm_i915_private *dev_priv)
401 return vlv_get_cck_clock_hpll(dev_priv, "cdclk",
402 CCK_DISPLAY_CLOCK_CONTROL);
405 static void vlv_program_pfi_credits(struct drm_i915_private *dev_priv)
407 unsigned int credits, default_credits;
409 if (IS_CHERRYVIEW(dev_priv))
410 default_credits = PFI_CREDIT(12);
412 default_credits = PFI_CREDIT(8);
414 if (dev_priv->cdclk_freq >= dev_priv->czclk_freq) {
415 /* CHV suggested value is 31 or 63 */
416 if (IS_CHERRYVIEW(dev_priv))
417 credits = PFI_CREDIT_63;
419 credits = PFI_CREDIT(15);
421 credits = default_credits;
425 * WA - write default credits before re-programming
426 * FIXME: should we also set the resend bit here?
428 I915_WRITE(GCI_CONTROL, VGA_FAST_MODE_DISABLE |
431 I915_WRITE(GCI_CONTROL, VGA_FAST_MODE_DISABLE |
432 credits | PFI_CREDIT_RESEND);
435 * FIXME is this guaranteed to clear
436 * immediately or should we poll for it?
438 WARN_ON(I915_READ(GCI_CONTROL) & PFI_CREDIT_RESEND);
441 static void vlv_set_cdclk(struct drm_device *dev, int cdclk)
443 struct drm_i915_private *dev_priv = to_i915(dev);
446 WARN_ON(dev_priv->display.get_cdclk(dev_priv) != dev_priv->cdclk_freq);
448 if (cdclk >= 320000) /* jump to highest voltage for 400MHz too */
450 else if (cdclk == 266667)
455 mutex_lock(&dev_priv->rps.hw_lock);
456 val = vlv_punit_read(dev_priv, PUNIT_REG_DSPFREQ);
457 val &= ~DSPFREQGUAR_MASK;
458 val |= (cmd << DSPFREQGUAR_SHIFT);
459 vlv_punit_write(dev_priv, PUNIT_REG_DSPFREQ, val);
460 if (wait_for((vlv_punit_read(dev_priv, PUNIT_REG_DSPFREQ) &
461 DSPFREQSTAT_MASK) == (cmd << DSPFREQSTAT_SHIFT),
463 DRM_ERROR("timed out waiting for CDclk change\n");
465 mutex_unlock(&dev_priv->rps.hw_lock);
467 mutex_lock(&dev_priv->sb_lock);
469 if (cdclk == 400000) {
472 divider = DIV_ROUND_CLOSEST(dev_priv->hpll_freq << 1,
475 /* adjust cdclk divider */
476 val = vlv_cck_read(dev_priv, CCK_DISPLAY_CLOCK_CONTROL);
477 val &= ~CCK_FREQUENCY_VALUES;
479 vlv_cck_write(dev_priv, CCK_DISPLAY_CLOCK_CONTROL, val);
481 if (wait_for((vlv_cck_read(dev_priv, CCK_DISPLAY_CLOCK_CONTROL) &
482 CCK_FREQUENCY_STATUS) == (divider << CCK_FREQUENCY_STATUS_SHIFT),
484 DRM_ERROR("timed out waiting for CDclk change\n");
487 /* adjust self-refresh exit latency value */
488 val = vlv_bunit_read(dev_priv, BUNIT_REG_BISOC);
492 * For high bandwidth configs, we set a higher latency in the bunit
493 * so that the core display fetch happens in time to avoid underruns.
496 val |= 4500 / 250; /* 4.5 usec */
498 val |= 3000 / 250; /* 3.0 usec */
499 vlv_bunit_write(dev_priv, BUNIT_REG_BISOC, val);
501 mutex_unlock(&dev_priv->sb_lock);
503 intel_update_cdclk(dev_priv);
506 static void chv_set_cdclk(struct drm_device *dev, int cdclk)
508 struct drm_i915_private *dev_priv = to_i915(dev);
511 WARN_ON(dev_priv->display.get_cdclk(dev_priv) != dev_priv->cdclk_freq);
525 * Specs are full of misinformation, but testing on actual
526 * hardware has shown that we just need to write the desired
527 * CCK divider into the Punit register.
529 cmd = DIV_ROUND_CLOSEST(dev_priv->hpll_freq << 1, cdclk) - 1;
531 mutex_lock(&dev_priv->rps.hw_lock);
532 val = vlv_punit_read(dev_priv, PUNIT_REG_DSPFREQ);
533 val &= ~DSPFREQGUAR_MASK_CHV;
534 val |= (cmd << DSPFREQGUAR_SHIFT_CHV);
535 vlv_punit_write(dev_priv, PUNIT_REG_DSPFREQ, val);
536 if (wait_for((vlv_punit_read(dev_priv, PUNIT_REG_DSPFREQ) &
537 DSPFREQSTAT_MASK_CHV) == (cmd << DSPFREQSTAT_SHIFT_CHV),
539 DRM_ERROR("timed out waiting for CDclk change\n");
541 mutex_unlock(&dev_priv->rps.hw_lock);
543 intel_update_cdclk(dev_priv);
546 static int bdw_calc_cdclk(int max_pixclk)
548 if (max_pixclk > 540000)
550 else if (max_pixclk > 450000)
552 else if (max_pixclk > 337500)
558 static int bdw_get_cdclk(struct drm_i915_private *dev_priv)
560 uint32_t lcpll = I915_READ(LCPLL_CTL);
561 uint32_t freq = lcpll & LCPLL_CLK_FREQ_MASK;
563 if (lcpll & LCPLL_CD_SOURCE_FCLK)
565 else if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT)
567 else if (freq == LCPLL_CLK_FREQ_450)
569 else if (freq == LCPLL_CLK_FREQ_54O_BDW)
571 else if (freq == LCPLL_CLK_FREQ_337_5_BDW)
577 static void bdw_set_cdclk(struct drm_device *dev, int cdclk)
579 struct drm_i915_private *dev_priv = to_i915(dev);
583 if (WARN((I915_READ(LCPLL_CTL) &
584 (LCPLL_PLL_DISABLE | LCPLL_PLL_LOCK |
585 LCPLL_CD_CLOCK_DISABLE | LCPLL_ROOT_CD_CLOCK_DISABLE |
586 LCPLL_CD2X_CLOCK_DISABLE | LCPLL_POWER_DOWN_ALLOW |
587 LCPLL_CD_SOURCE_FCLK)) != LCPLL_PLL_LOCK,
588 "trying to change cdclk frequency with cdclk not enabled\n"))
591 mutex_lock(&dev_priv->rps.hw_lock);
592 ret = sandybridge_pcode_write(dev_priv,
593 BDW_PCODE_DISPLAY_FREQ_CHANGE_REQ, 0x0);
594 mutex_unlock(&dev_priv->rps.hw_lock);
596 DRM_ERROR("failed to inform pcode about cdclk change\n");
600 val = I915_READ(LCPLL_CTL);
601 val |= LCPLL_CD_SOURCE_FCLK;
602 I915_WRITE(LCPLL_CTL, val);
604 if (wait_for_us(I915_READ(LCPLL_CTL) &
605 LCPLL_CD_SOURCE_FCLK_DONE, 1))
606 DRM_ERROR("Switching to FCLK failed\n");
608 val = I915_READ(LCPLL_CTL);
609 val &= ~LCPLL_CLK_FREQ_MASK;
613 val |= LCPLL_CLK_FREQ_450;
617 val |= LCPLL_CLK_FREQ_54O_BDW;
621 val |= LCPLL_CLK_FREQ_337_5_BDW;
625 val |= LCPLL_CLK_FREQ_675_BDW;
629 WARN(1, "invalid cdclk frequency\n");
633 I915_WRITE(LCPLL_CTL, val);
635 val = I915_READ(LCPLL_CTL);
636 val &= ~LCPLL_CD_SOURCE_FCLK;
637 I915_WRITE(LCPLL_CTL, val);
639 if (wait_for_us((I915_READ(LCPLL_CTL) &
640 LCPLL_CD_SOURCE_FCLK_DONE) == 0, 1))
641 DRM_ERROR("Switching back to LCPLL failed\n");
643 mutex_lock(&dev_priv->rps.hw_lock);
644 sandybridge_pcode_write(dev_priv, HSW_PCODE_DE_WRITE_FREQ_REQ, data);
645 mutex_unlock(&dev_priv->rps.hw_lock);
647 I915_WRITE(CDCLK_FREQ, DIV_ROUND_CLOSEST(cdclk, 1000) - 1);
649 intel_update_cdclk(dev_priv);
651 WARN(cdclk != dev_priv->cdclk_freq,
652 "cdclk requested %d kHz but got %d kHz\n",
653 cdclk, dev_priv->cdclk_freq);
656 static int skl_calc_cdclk(int max_pixclk, int vco)
658 if (vco == 8640000) {
659 if (max_pixclk > 540000)
661 else if (max_pixclk > 432000)
663 else if (max_pixclk > 308571)
668 if (max_pixclk > 540000)
670 else if (max_pixclk > 450000)
672 else if (max_pixclk > 337500)
679 static void skl_dpll0_update(struct drm_i915_private *dev_priv)
683 dev_priv->cdclk_pll.ref = 24000;
684 dev_priv->cdclk_pll.vco = 0;
686 val = I915_READ(LCPLL1_CTL);
687 if ((val & LCPLL_PLL_ENABLE) == 0)
690 if (WARN_ON((val & LCPLL_PLL_LOCK) == 0))
693 val = I915_READ(DPLL_CTRL1);
695 if (WARN_ON((val & (DPLL_CTRL1_HDMI_MODE(SKL_DPLL0) |
696 DPLL_CTRL1_SSC(SKL_DPLL0) |
697 DPLL_CTRL1_OVERRIDE(SKL_DPLL0))) !=
698 DPLL_CTRL1_OVERRIDE(SKL_DPLL0)))
701 switch (val & DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0)) {
702 case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_810, SKL_DPLL0):
703 case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1350, SKL_DPLL0):
704 case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1620, SKL_DPLL0):
705 case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_2700, SKL_DPLL0):
706 dev_priv->cdclk_pll.vco = 8100000;
708 case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1080, SKL_DPLL0):
709 case DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_2160, SKL_DPLL0):
710 dev_priv->cdclk_pll.vco = 8640000;
713 MISSING_CASE(val & DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0));
718 static int skl_get_cdclk(struct drm_i915_private *dev_priv)
722 skl_dpll0_update(dev_priv);
724 if (dev_priv->cdclk_pll.vco == 0)
725 return dev_priv->cdclk_pll.ref;
727 cdctl = I915_READ(CDCLK_CTL);
729 if (dev_priv->cdclk_pll.vco == 8640000) {
730 switch (cdctl & CDCLK_FREQ_SEL_MASK) {
731 case CDCLK_FREQ_450_432:
733 case CDCLK_FREQ_337_308:
737 case CDCLK_FREQ_675_617:
740 MISSING_CASE(cdctl & CDCLK_FREQ_SEL_MASK);
743 switch (cdctl & CDCLK_FREQ_SEL_MASK) {
744 case CDCLK_FREQ_450_432:
746 case CDCLK_FREQ_337_308:
750 case CDCLK_FREQ_675_617:
753 MISSING_CASE(cdctl & CDCLK_FREQ_SEL_MASK);
757 return dev_priv->cdclk_pll.ref;
760 /* convert from kHz to .1 fixpoint MHz with -1MHz offset */
761 static int skl_cdclk_decimal(int cdclk)
763 return DIV_ROUND_CLOSEST(cdclk - 1000, 500);
766 static void skl_set_preferred_cdclk_vco(struct drm_i915_private *dev_priv,
769 bool changed = dev_priv->skl_preferred_vco_freq != vco;
771 dev_priv->skl_preferred_vco_freq = vco;
774 intel_update_max_cdclk(dev_priv);
777 static void skl_dpll0_enable(struct drm_i915_private *dev_priv, int vco)
779 int min_cdclk = skl_calc_cdclk(0, vco);
782 WARN_ON(vco != 8100000 && vco != 8640000);
784 /* select the minimum CDCLK before enabling DPLL 0 */
785 val = CDCLK_FREQ_337_308 | skl_cdclk_decimal(min_cdclk);
786 I915_WRITE(CDCLK_CTL, val);
787 POSTING_READ(CDCLK_CTL);
790 * We always enable DPLL0 with the lowest link rate possible, but still
791 * taking into account the VCO required to operate the eDP panel at the
792 * desired frequency. The usual DP link rates operate with a VCO of
793 * 8100 while the eDP 1.4 alternate link rates need a VCO of 8640.
794 * The modeset code is responsible for the selection of the exact link
795 * rate later on, with the constraint of choosing a frequency that
798 val = I915_READ(DPLL_CTRL1);
800 val &= ~(DPLL_CTRL1_HDMI_MODE(SKL_DPLL0) | DPLL_CTRL1_SSC(SKL_DPLL0) |
801 DPLL_CTRL1_LINK_RATE_MASK(SKL_DPLL0));
802 val |= DPLL_CTRL1_OVERRIDE(SKL_DPLL0);
804 val |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_1080,
807 val |= DPLL_CTRL1_LINK_RATE(DPLL_CTRL1_LINK_RATE_810,
810 I915_WRITE(DPLL_CTRL1, val);
811 POSTING_READ(DPLL_CTRL1);
813 I915_WRITE(LCPLL1_CTL, I915_READ(LCPLL1_CTL) | LCPLL_PLL_ENABLE);
815 if (intel_wait_for_register(dev_priv,
816 LCPLL1_CTL, LCPLL_PLL_LOCK, LCPLL_PLL_LOCK,
818 DRM_ERROR("DPLL0 not locked\n");
820 dev_priv->cdclk_pll.vco = vco;
822 /* We'll want to keep using the current vco from now on. */
823 skl_set_preferred_cdclk_vco(dev_priv, vco);
826 static void skl_dpll0_disable(struct drm_i915_private *dev_priv)
828 I915_WRITE(LCPLL1_CTL, I915_READ(LCPLL1_CTL) & ~LCPLL_PLL_ENABLE);
829 if (intel_wait_for_register(dev_priv,
830 LCPLL1_CTL, LCPLL_PLL_LOCK, 0,
832 DRM_ERROR("Couldn't disable DPLL0\n");
834 dev_priv->cdclk_pll.vco = 0;
837 static void skl_set_cdclk(struct drm_i915_private *dev_priv,
840 u32 freq_select, pcu_ack;
843 WARN_ON((cdclk == 24000) != (vco == 0));
845 DRM_DEBUG_DRIVER("Changing CDCLK to %d kHz (VCO %d kHz)\n",
848 mutex_lock(&dev_priv->rps.hw_lock);
849 ret = skl_pcode_request(dev_priv, SKL_PCODE_CDCLK_CONTROL,
850 SKL_CDCLK_PREPARE_FOR_CHANGE,
851 SKL_CDCLK_READY_FOR_CHANGE,
852 SKL_CDCLK_READY_FOR_CHANGE, 3);
853 mutex_unlock(&dev_priv->rps.hw_lock);
855 DRM_ERROR("Failed to inform PCU about cdclk change (%d)\n",
864 freq_select = CDCLK_FREQ_450_432;
868 freq_select = CDCLK_FREQ_540;
874 freq_select = CDCLK_FREQ_337_308;
879 freq_select = CDCLK_FREQ_675_617;
884 if (dev_priv->cdclk_pll.vco != 0 &&
885 dev_priv->cdclk_pll.vco != vco)
886 skl_dpll0_disable(dev_priv);
888 if (dev_priv->cdclk_pll.vco != vco)
889 skl_dpll0_enable(dev_priv, vco);
891 I915_WRITE(CDCLK_CTL, freq_select | skl_cdclk_decimal(cdclk));
892 POSTING_READ(CDCLK_CTL);
894 /* inform PCU of the change */
895 mutex_lock(&dev_priv->rps.hw_lock);
896 sandybridge_pcode_write(dev_priv, SKL_PCODE_CDCLK_CONTROL, pcu_ack);
897 mutex_unlock(&dev_priv->rps.hw_lock);
899 intel_update_cdclk(dev_priv);
902 static void skl_sanitize_cdclk(struct drm_i915_private *dev_priv)
904 uint32_t cdctl, expected;
907 * check if the pre-os initialized the display
908 * There is SWF18 scratchpad register defined which is set by the
909 * pre-os which can be used by the OS drivers to check the status
911 if ((I915_READ(SWF_ILK(0x18)) & 0x00FFFFFF) == 0)
914 intel_update_cdclk(dev_priv);
915 /* Is PLL enabled and locked ? */
916 if (dev_priv->cdclk_pll.vco == 0 ||
917 dev_priv->cdclk_freq == dev_priv->cdclk_pll.ref)
920 /* DPLL okay; verify the cdclock
922 * Noticed in some instances that the freq selection is correct but
923 * decimal part is programmed wrong from BIOS where pre-os does not
924 * enable display. Verify the same as well.
926 cdctl = I915_READ(CDCLK_CTL);
927 expected = (cdctl & CDCLK_FREQ_SEL_MASK) |
928 skl_cdclk_decimal(dev_priv->cdclk_freq);
929 if (cdctl == expected)
930 /* All well; nothing to sanitize */
934 DRM_DEBUG_KMS("Sanitizing cdclk programmed by pre-os\n");
936 /* force cdclk programming */
937 dev_priv->cdclk_freq = 0;
938 /* force full PLL disable + enable */
939 dev_priv->cdclk_pll.vco = -1;
943 * skl_init_cdclk - Initialize CDCLK on SKL
944 * @dev_priv: i915 device
946 * Initialize CDCLK for SKL and derivatives. This is generally
947 * done only during the display core initialization sequence,
948 * after which the DMC will take care of turning CDCLK off/on
951 void skl_init_cdclk(struct drm_i915_private *dev_priv)
955 skl_sanitize_cdclk(dev_priv);
957 if (dev_priv->cdclk_freq != 0 && dev_priv->cdclk_pll.vco != 0) {
959 * Use the current vco as our initial
960 * guess as to what the preferred vco is.
962 if (dev_priv->skl_preferred_vco_freq == 0)
963 skl_set_preferred_cdclk_vco(dev_priv,
964 dev_priv->cdclk_pll.vco);
968 vco = dev_priv->skl_preferred_vco_freq;
971 cdclk = skl_calc_cdclk(0, vco);
973 skl_set_cdclk(dev_priv, cdclk, vco);
977 * skl_uninit_cdclk - Uninitialize CDCLK on SKL
978 * @dev_priv: i915 device
980 * Uninitialize CDCLK for SKL and derivatives. This is done only
981 * during the display core uninitialization sequence.
983 void skl_uninit_cdclk(struct drm_i915_private *dev_priv)
985 skl_set_cdclk(dev_priv, dev_priv->cdclk_pll.ref, 0);
988 static int bxt_calc_cdclk(int max_pixclk)
990 if (max_pixclk > 576000)
992 else if (max_pixclk > 384000)
994 else if (max_pixclk > 288000)
996 else if (max_pixclk > 144000)
1002 static int glk_calc_cdclk(int max_pixclk)
1004 if (max_pixclk > 2 * 158400)
1006 else if (max_pixclk > 2 * 79200)
1012 static int bxt_de_pll_vco(struct drm_i915_private *dev_priv, int cdclk)
1016 if (cdclk == dev_priv->cdclk_pll.ref)
1021 MISSING_CASE(cdclk);
1033 return dev_priv->cdclk_pll.ref * ratio;
1036 static int glk_de_pll_vco(struct drm_i915_private *dev_priv, int cdclk)
1040 if (cdclk == dev_priv->cdclk_pll.ref)
1045 MISSING_CASE(cdclk);
1053 return dev_priv->cdclk_pll.ref * ratio;
1056 static void bxt_de_pll_update(struct drm_i915_private *dev_priv)
1060 dev_priv->cdclk_pll.ref = 19200;
1061 dev_priv->cdclk_pll.vco = 0;
1063 val = I915_READ(BXT_DE_PLL_ENABLE);
1064 if ((val & BXT_DE_PLL_PLL_ENABLE) == 0)
1067 if (WARN_ON((val & BXT_DE_PLL_LOCK) == 0))
1070 val = I915_READ(BXT_DE_PLL_CTL);
1071 dev_priv->cdclk_pll.vco = (val & BXT_DE_PLL_RATIO_MASK) *
1072 dev_priv->cdclk_pll.ref;
1075 static int bxt_get_cdclk(struct drm_i915_private *dev_priv)
1080 bxt_de_pll_update(dev_priv);
1082 vco = dev_priv->cdclk_pll.vco;
1084 return dev_priv->cdclk_pll.ref;
1086 divider = I915_READ(CDCLK_CTL) & BXT_CDCLK_CD2X_DIV_SEL_MASK;
1089 case BXT_CDCLK_CD2X_DIV_SEL_1:
1092 case BXT_CDCLK_CD2X_DIV_SEL_1_5:
1093 WARN(IS_GEMINILAKE(dev_priv), "Unsupported divider\n");
1096 case BXT_CDCLK_CD2X_DIV_SEL_2:
1099 case BXT_CDCLK_CD2X_DIV_SEL_4:
1103 MISSING_CASE(divider);
1104 return dev_priv->cdclk_pll.ref;
1107 return DIV_ROUND_CLOSEST(vco, div);
1110 static void bxt_de_pll_disable(struct drm_i915_private *dev_priv)
1112 I915_WRITE(BXT_DE_PLL_ENABLE, 0);
1115 if (intel_wait_for_register(dev_priv,
1116 BXT_DE_PLL_ENABLE, BXT_DE_PLL_LOCK, 0,
1118 DRM_ERROR("timeout waiting for DE PLL unlock\n");
1120 dev_priv->cdclk_pll.vco = 0;
1123 static void bxt_de_pll_enable(struct drm_i915_private *dev_priv, int vco)
1125 int ratio = DIV_ROUND_CLOSEST(vco, dev_priv->cdclk_pll.ref);
1128 val = I915_READ(BXT_DE_PLL_CTL);
1129 val &= ~BXT_DE_PLL_RATIO_MASK;
1130 val |= BXT_DE_PLL_RATIO(ratio);
1131 I915_WRITE(BXT_DE_PLL_CTL, val);
1133 I915_WRITE(BXT_DE_PLL_ENABLE, BXT_DE_PLL_PLL_ENABLE);
1136 if (intel_wait_for_register(dev_priv,
1141 DRM_ERROR("timeout waiting for DE PLL lock\n");
1143 dev_priv->cdclk_pll.vco = vco;
1146 static void bxt_set_cdclk(struct drm_i915_private *dev_priv,
1152 DRM_DEBUG_DRIVER("Changing CDCLK to %d kHz (VCO %d kHz)\n",
1155 /* cdclk = vco / 2 / div{1,1.5,2,4} */
1156 switch (DIV_ROUND_CLOSEST(vco, cdclk)) {
1158 divider = BXT_CDCLK_CD2X_DIV_SEL_4;
1161 divider = BXT_CDCLK_CD2X_DIV_SEL_2;
1164 WARN(IS_GEMINILAKE(dev_priv), "Unsupported divider\n");
1165 divider = BXT_CDCLK_CD2X_DIV_SEL_1_5;
1168 divider = BXT_CDCLK_CD2X_DIV_SEL_1;
1171 WARN_ON(cdclk != dev_priv->cdclk_pll.ref);
1174 divider = BXT_CDCLK_CD2X_DIV_SEL_1;
1178 /* Inform power controller of upcoming frequency change */
1179 mutex_lock(&dev_priv->rps.hw_lock);
1180 ret = sandybridge_pcode_write(dev_priv, HSW_PCODE_DE_WRITE_FREQ_REQ,
1182 mutex_unlock(&dev_priv->rps.hw_lock);
1185 DRM_ERROR("PCode CDCLK freq change notify failed (err %d, freq %d)\n",
1190 if (dev_priv->cdclk_pll.vco != 0 &&
1191 dev_priv->cdclk_pll.vco != vco)
1192 bxt_de_pll_disable(dev_priv);
1194 if (dev_priv->cdclk_pll.vco != vco)
1195 bxt_de_pll_enable(dev_priv, vco);
1197 val = divider | skl_cdclk_decimal(cdclk);
1199 * FIXME if only the cd2x divider needs changing, it could be done
1200 * without shutting off the pipe (if only one pipe is active).
1202 val |= BXT_CDCLK_CD2X_PIPE_NONE;
1204 * Disable SSA Precharge when CD clock frequency < 500 MHz,
1207 if (cdclk >= 500000)
1208 val |= BXT_CDCLK_SSA_PRECHARGE_ENABLE;
1209 I915_WRITE(CDCLK_CTL, val);
1211 mutex_lock(&dev_priv->rps.hw_lock);
1212 ret = sandybridge_pcode_write(dev_priv, HSW_PCODE_DE_WRITE_FREQ_REQ,
1213 DIV_ROUND_UP(cdclk, 25000));
1214 mutex_unlock(&dev_priv->rps.hw_lock);
1217 DRM_ERROR("PCode CDCLK freq set failed, (err %d, freq %d)\n",
1222 intel_update_cdclk(dev_priv);
1225 static void bxt_sanitize_cdclk(struct drm_i915_private *dev_priv)
1227 u32 cdctl, expected;
1229 intel_update_cdclk(dev_priv);
1231 if (dev_priv->cdclk_pll.vco == 0 ||
1232 dev_priv->cdclk_freq == dev_priv->cdclk_pll.ref)
1235 /* DPLL okay; verify the cdclock
1237 * Some BIOS versions leave an incorrect decimal frequency value and
1238 * set reserved MBZ bits in CDCLK_CTL at least during exiting from S4,
1239 * so sanitize this register.
1241 cdctl = I915_READ(CDCLK_CTL);
1243 * Let's ignore the pipe field, since BIOS could have configured the
1244 * dividers both synching to an active pipe, or asynchronously
1247 cdctl &= ~BXT_CDCLK_CD2X_PIPE_NONE;
1249 expected = (cdctl & BXT_CDCLK_CD2X_DIV_SEL_MASK) |
1250 skl_cdclk_decimal(dev_priv->cdclk_freq);
1252 * Disable SSA Precharge when CD clock frequency < 500 MHz,
1255 if (dev_priv->cdclk_freq >= 500000)
1256 expected |= BXT_CDCLK_SSA_PRECHARGE_ENABLE;
1258 if (cdctl == expected)
1259 /* All well; nothing to sanitize */
1263 DRM_DEBUG_KMS("Sanitizing cdclk programmed by pre-os\n");
1265 /* force cdclk programming */
1266 dev_priv->cdclk_freq = 0;
1268 /* force full PLL disable + enable */
1269 dev_priv->cdclk_pll.vco = -1;
1273 * bxt_init_cdclk - Initialize CDCLK on BXT
1274 * @dev_priv: i915 device
1276 * Initialize CDCLK for BXT and derivatives. This is generally
1277 * done only during the display core initialization sequence,
1278 * after which the DMC will take care of turning CDCLK off/on
1281 void bxt_init_cdclk(struct drm_i915_private *dev_priv)
1285 bxt_sanitize_cdclk(dev_priv);
1287 if (dev_priv->cdclk_freq != 0 && dev_priv->cdclk_pll.vco != 0)
1292 * - The initial CDCLK needs to be read from VBT.
1293 * Need to make this change after VBT has changes for BXT.
1295 if (IS_GEMINILAKE(dev_priv)) {
1296 cdclk = glk_calc_cdclk(0);
1297 vco = glk_de_pll_vco(dev_priv, cdclk);
1299 cdclk = bxt_calc_cdclk(0);
1300 vco = bxt_de_pll_vco(dev_priv, cdclk);
1303 bxt_set_cdclk(dev_priv, cdclk, vco);
1307 * bxt_uninit_cdclk - Uninitialize CDCLK on BXT
1308 * @dev_priv: i915 device
1310 * Uninitialize CDCLK for BXT and derivatives. This is done only
1311 * during the display core uninitialization sequence.
1313 void bxt_uninit_cdclk(struct drm_i915_private *dev_priv)
1315 bxt_set_cdclk(dev_priv, dev_priv->cdclk_pll.ref, 0);
1318 static int bdw_adjust_min_pipe_pixel_rate(struct intel_crtc_state *crtc_state,
1321 struct drm_i915_private *dev_priv =
1322 to_i915(crtc_state->base.crtc->dev);
1324 /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
1325 if (IS_BROADWELL(dev_priv) && crtc_state->ips_enabled)
1326 pixel_rate = DIV_ROUND_UP(pixel_rate * 100, 95);
1328 /* BSpec says "Do not use DisplayPort with CDCLK less than
1329 * 432 MHz, audio enabled, port width x4, and link rate
1330 * HBR2 (5.4 GHz), or else there may be audio corruption or
1331 * screen corruption."
1333 if (intel_crtc_has_dp_encoder(crtc_state) &&
1334 crtc_state->has_audio &&
1335 crtc_state->port_clock >= 540000 &&
1336 crtc_state->lane_count == 4)
1337 pixel_rate = max(432000, pixel_rate);
1342 /* compute the max rate for new configuration */
1343 static int intel_max_pixel_rate(struct drm_atomic_state *state)
1345 struct intel_atomic_state *intel_state = to_intel_atomic_state(state);
1346 struct drm_i915_private *dev_priv = to_i915(state->dev);
1347 struct drm_crtc *crtc;
1348 struct drm_crtc_state *cstate;
1349 struct intel_crtc_state *crtc_state;
1350 unsigned int max_pixel_rate = 0, i;
1353 memcpy(intel_state->min_pixclk, dev_priv->min_pixclk,
1354 sizeof(intel_state->min_pixclk));
1356 for_each_crtc_in_state(state, crtc, cstate, i) {
1359 crtc_state = to_intel_crtc_state(cstate);
1360 if (!crtc_state->base.enable) {
1361 intel_state->min_pixclk[i] = 0;
1365 pixel_rate = crtc_state->pixel_rate;
1367 if (IS_BROADWELL(dev_priv) || IS_GEN9(dev_priv))
1369 bdw_adjust_min_pipe_pixel_rate(crtc_state,
1372 intel_state->min_pixclk[i] = pixel_rate;
1375 for_each_pipe(dev_priv, pipe)
1376 max_pixel_rate = max(intel_state->min_pixclk[pipe],
1379 return max_pixel_rate;
1382 static int vlv_modeset_calc_cdclk(struct drm_atomic_state *state)
1384 struct drm_device *dev = state->dev;
1385 struct drm_i915_private *dev_priv = to_i915(dev);
1386 int max_pixclk = intel_max_pixel_rate(state);
1387 struct intel_atomic_state *intel_state =
1388 to_intel_atomic_state(state);
1390 intel_state->cdclk = intel_state->dev_cdclk =
1391 vlv_calc_cdclk(dev_priv, max_pixclk);
1393 if (!intel_state->active_crtcs)
1394 intel_state->dev_cdclk = vlv_calc_cdclk(dev_priv, 0);
1399 static void vlv_modeset_commit_cdclk(struct drm_atomic_state *old_state)
1401 struct drm_device *dev = old_state->dev;
1402 struct drm_i915_private *dev_priv = to_i915(dev);
1403 struct intel_atomic_state *old_intel_state =
1404 to_intel_atomic_state(old_state);
1405 unsigned int req_cdclk = old_intel_state->dev_cdclk;
1408 * FIXME: We can end up here with all power domains off, yet
1409 * with a CDCLK frequency other than the minimum. To account
1410 * for this take the PIPE-A power domain, which covers the HW
1411 * blocks needed for the following programming. This can be
1412 * removed once it's guaranteed that we get here either with
1413 * the minimum CDCLK set, or the required power domains
1416 intel_display_power_get(dev_priv, POWER_DOMAIN_PIPE_A);
1418 if (IS_CHERRYVIEW(dev_priv))
1419 chv_set_cdclk(dev, req_cdclk);
1421 vlv_set_cdclk(dev, req_cdclk);
1423 vlv_program_pfi_credits(dev_priv);
1425 intel_display_power_put(dev_priv, POWER_DOMAIN_PIPE_A);
1428 static int bdw_modeset_calc_cdclk(struct drm_atomic_state *state)
1430 struct drm_i915_private *dev_priv = to_i915(state->dev);
1431 struct intel_atomic_state *intel_state = to_intel_atomic_state(state);
1432 int max_pixclk = intel_max_pixel_rate(state);
1436 * FIXME should also account for plane ratio
1437 * once 64bpp pixel formats are supported.
1439 cdclk = bdw_calc_cdclk(max_pixclk);
1441 if (cdclk > dev_priv->max_cdclk_freq) {
1442 DRM_DEBUG_KMS("requested cdclk (%d kHz) exceeds max (%d kHz)\n",
1443 cdclk, dev_priv->max_cdclk_freq);
1447 intel_state->cdclk = intel_state->dev_cdclk = cdclk;
1448 if (!intel_state->active_crtcs)
1449 intel_state->dev_cdclk = bdw_calc_cdclk(0);
1454 static void bdw_modeset_commit_cdclk(struct drm_atomic_state *old_state)
1456 struct drm_device *dev = old_state->dev;
1457 struct intel_atomic_state *old_intel_state =
1458 to_intel_atomic_state(old_state);
1459 unsigned int req_cdclk = old_intel_state->dev_cdclk;
1461 bdw_set_cdclk(dev, req_cdclk);
1464 static int skl_modeset_calc_cdclk(struct drm_atomic_state *state)
1466 struct intel_atomic_state *intel_state = to_intel_atomic_state(state);
1467 struct drm_i915_private *dev_priv = to_i915(state->dev);
1468 const int max_pixclk = intel_max_pixel_rate(state);
1469 int vco = intel_state->cdclk_pll_vco;
1473 * FIXME should also account for plane ratio
1474 * once 64bpp pixel formats are supported.
1476 cdclk = skl_calc_cdclk(max_pixclk, vco);
1479 * FIXME move the cdclk caclulation to
1480 * compute_config() so we can fail gracegully.
1482 if (cdclk > dev_priv->max_cdclk_freq) {
1483 DRM_ERROR("requested cdclk (%d kHz) exceeds max (%d kHz)\n",
1484 cdclk, dev_priv->max_cdclk_freq);
1485 cdclk = dev_priv->max_cdclk_freq;
1488 intel_state->cdclk = intel_state->dev_cdclk = cdclk;
1489 if (!intel_state->active_crtcs)
1490 intel_state->dev_cdclk = skl_calc_cdclk(0, vco);
1495 static void skl_modeset_commit_cdclk(struct drm_atomic_state *old_state)
1497 struct drm_i915_private *dev_priv = to_i915(old_state->dev);
1498 struct intel_atomic_state *intel_state =
1499 to_intel_atomic_state(old_state);
1500 unsigned int req_cdclk = intel_state->dev_cdclk;
1501 unsigned int req_vco = intel_state->cdclk_pll_vco;
1503 skl_set_cdclk(dev_priv, req_cdclk, req_vco);
1506 static int bxt_modeset_calc_cdclk(struct drm_atomic_state *state)
1508 struct drm_i915_private *dev_priv = to_i915(state->dev);
1509 int max_pixclk = intel_max_pixel_rate(state);
1510 struct intel_atomic_state *intel_state =
1511 to_intel_atomic_state(state);
1514 if (IS_GEMINILAKE(dev_priv))
1515 cdclk = glk_calc_cdclk(max_pixclk);
1517 cdclk = bxt_calc_cdclk(max_pixclk);
1519 intel_state->cdclk = intel_state->dev_cdclk = cdclk;
1521 if (!intel_state->active_crtcs) {
1522 if (IS_GEMINILAKE(dev_priv))
1523 cdclk = glk_calc_cdclk(0);
1525 cdclk = bxt_calc_cdclk(0);
1527 intel_state->dev_cdclk = cdclk;
1533 static void bxt_modeset_commit_cdclk(struct drm_atomic_state *old_state)
1535 struct drm_i915_private *dev_priv = to_i915(old_state->dev);
1536 struct intel_atomic_state *old_intel_state =
1537 to_intel_atomic_state(old_state);
1538 unsigned int req_cdclk = old_intel_state->dev_cdclk;
1539 unsigned int req_vco;
1541 if (IS_GEMINILAKE(dev_priv))
1542 req_vco = glk_de_pll_vco(dev_priv, req_cdclk);
1544 req_vco = bxt_de_pll_vco(dev_priv, req_cdclk);
1546 bxt_set_cdclk(dev_priv, req_cdclk, req_vco);
1549 static int intel_compute_max_dotclk(struct drm_i915_private *dev_priv)
1551 int max_cdclk_freq = dev_priv->max_cdclk_freq;
1553 if (IS_GEMINILAKE(dev_priv))
1554 return 2 * max_cdclk_freq;
1555 else if (INTEL_INFO(dev_priv)->gen >= 9 ||
1556 IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
1557 return max_cdclk_freq;
1558 else if (IS_CHERRYVIEW(dev_priv))
1559 return max_cdclk_freq*95/100;
1560 else if (INTEL_INFO(dev_priv)->gen < 4)
1561 return 2*max_cdclk_freq*90/100;
1563 return max_cdclk_freq*90/100;
1567 * intel_update_max_cdclk - Determine the maximum support CDCLK frequency
1568 * @dev_priv: i915 device
1570 * Determine the maximum CDCLK frequency the platform supports, and also
1571 * derive the maximum dot clock frequency the maximum CDCLK frequency
1574 void intel_update_max_cdclk(struct drm_i915_private *dev_priv)
1576 if (IS_GEN9_BC(dev_priv)) {
1577 u32 limit = I915_READ(SKL_DFSM) & SKL_DFSM_CDCLK_LIMIT_MASK;
1580 vco = dev_priv->skl_preferred_vco_freq;
1581 WARN_ON(vco != 8100000 && vco != 8640000);
1584 * Use the lower (vco 8640) cdclk values as a
1585 * first guess. skl_calc_cdclk() will correct it
1586 * if the preferred vco is 8100 instead.
1588 if (limit == SKL_DFSM_CDCLK_LIMIT_675)
1590 else if (limit == SKL_DFSM_CDCLK_LIMIT_540)
1592 else if (limit == SKL_DFSM_CDCLK_LIMIT_450)
1597 dev_priv->max_cdclk_freq = skl_calc_cdclk(max_cdclk, vco);
1598 } else if (IS_GEMINILAKE(dev_priv)) {
1599 dev_priv->max_cdclk_freq = 316800;
1600 } else if (IS_BROXTON(dev_priv)) {
1601 dev_priv->max_cdclk_freq = 624000;
1602 } else if (IS_BROADWELL(dev_priv)) {
1604 * FIXME with extra cooling we can allow
1605 * 540 MHz for ULX and 675 Mhz for ULT.
1606 * How can we know if extra cooling is
1607 * available? PCI ID, VTB, something else?
1609 if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT)
1610 dev_priv->max_cdclk_freq = 450000;
1611 else if (IS_BDW_ULX(dev_priv))
1612 dev_priv->max_cdclk_freq = 450000;
1613 else if (IS_BDW_ULT(dev_priv))
1614 dev_priv->max_cdclk_freq = 540000;
1616 dev_priv->max_cdclk_freq = 675000;
1617 } else if (IS_CHERRYVIEW(dev_priv)) {
1618 dev_priv->max_cdclk_freq = 320000;
1619 } else if (IS_VALLEYVIEW(dev_priv)) {
1620 dev_priv->max_cdclk_freq = 400000;
1622 /* otherwise assume cdclk is fixed */
1623 dev_priv->max_cdclk_freq = dev_priv->cdclk_freq;
1626 dev_priv->max_dotclk_freq = intel_compute_max_dotclk(dev_priv);
1628 DRM_DEBUG_DRIVER("Max CD clock rate: %d kHz\n",
1629 dev_priv->max_cdclk_freq);
1631 DRM_DEBUG_DRIVER("Max dotclock rate: %d kHz\n",
1632 dev_priv->max_dotclk_freq);
1636 * intel_update_cdclk - Determine the current CDCLK frequency
1637 * @dev_priv: i915 device
1639 * Determine the current CDCLK frequency.
1641 void intel_update_cdclk(struct drm_i915_private *dev_priv)
1643 dev_priv->cdclk_freq = dev_priv->display.get_cdclk(dev_priv);
1645 if (INTEL_GEN(dev_priv) >= 9)
1646 DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz, VCO: %d kHz, ref: %d kHz\n",
1647 dev_priv->cdclk_freq, dev_priv->cdclk_pll.vco,
1648 dev_priv->cdclk_pll.ref);
1650 DRM_DEBUG_DRIVER("Current CD clock rate: %d kHz\n",
1651 dev_priv->cdclk_freq);
1654 * 9:0 CMBUS [sic] CDCLK frequency (cdfreq):
1655 * Programmng [sic] note: bit[9:2] should be programmed to the number
1656 * of cdclk that generates 4MHz reference clock freq which is used to
1657 * generate GMBus clock. This will vary with the cdclk freq.
1659 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1660 I915_WRITE(GMBUSFREQ_VLV,
1661 DIV_ROUND_UP(dev_priv->cdclk_freq, 1000));
1664 static int pch_rawclk(struct drm_i915_private *dev_priv)
1666 return (I915_READ(PCH_RAWCLK_FREQ) & RAWCLK_FREQ_MASK) * 1000;
1669 static int vlv_hrawclk(struct drm_i915_private *dev_priv)
1671 /* RAWCLK_FREQ_VLV register updated from power well code */
1672 return vlv_get_cck_clock_hpll(dev_priv, "hrawclk",
1673 CCK_DISPLAY_REF_CLOCK_CONTROL);
1676 static int g4x_hrawclk(struct drm_i915_private *dev_priv)
1680 /* hrawclock is 1/4 the FSB frequency */
1681 clkcfg = I915_READ(CLKCFG);
1682 switch (clkcfg & CLKCFG_FSB_MASK) {
1683 case CLKCFG_FSB_400:
1685 case CLKCFG_FSB_533:
1687 case CLKCFG_FSB_667:
1689 case CLKCFG_FSB_800:
1691 case CLKCFG_FSB_1067:
1693 case CLKCFG_FSB_1333:
1695 /* these two are just a guess; one of them might be right */
1696 case CLKCFG_FSB_1600:
1697 case CLKCFG_FSB_1600_ALT:
1705 * intel_update_rawclk - Determine the current RAWCLK frequency
1706 * @dev_priv: i915 device
1708 * Determine the current RAWCLK frequency. RAWCLK is a fixed
1709 * frequency clock so this needs to done only once.
1711 void intel_update_rawclk(struct drm_i915_private *dev_priv)
1713 if (HAS_PCH_SPLIT(dev_priv))
1714 dev_priv->rawclk_freq = pch_rawclk(dev_priv);
1715 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1716 dev_priv->rawclk_freq = vlv_hrawclk(dev_priv);
1717 else if (IS_G4X(dev_priv) || IS_PINEVIEW(dev_priv))
1718 dev_priv->rawclk_freq = g4x_hrawclk(dev_priv);
1720 /* no rawclk on other platforms, or no need to know it */
1723 DRM_DEBUG_DRIVER("rawclk rate: %d kHz\n", dev_priv->rawclk_freq);
1727 * intel_init_cdclk_hooks - Initialize CDCLK related modesetting hooks
1728 * @dev_priv: i915 device
1730 void intel_init_cdclk_hooks(struct drm_i915_private *dev_priv)
1732 if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
1733 dev_priv->display.modeset_commit_cdclk =
1734 vlv_modeset_commit_cdclk;
1735 dev_priv->display.modeset_calc_cdclk =
1736 vlv_modeset_calc_cdclk;
1737 } else if (IS_BROADWELL(dev_priv)) {
1738 dev_priv->display.modeset_commit_cdclk =
1739 bdw_modeset_commit_cdclk;
1740 dev_priv->display.modeset_calc_cdclk =
1741 bdw_modeset_calc_cdclk;
1742 } else if (IS_GEN9_LP(dev_priv)) {
1743 dev_priv->display.modeset_commit_cdclk =
1744 bxt_modeset_commit_cdclk;
1745 dev_priv->display.modeset_calc_cdclk =
1746 bxt_modeset_calc_cdclk;
1747 } else if (IS_GEN9_BC(dev_priv)) {
1748 dev_priv->display.modeset_commit_cdclk =
1749 skl_modeset_commit_cdclk;
1750 dev_priv->display.modeset_calc_cdclk =
1751 skl_modeset_calc_cdclk;
1754 if (IS_GEN9_BC(dev_priv))
1755 dev_priv->display.get_cdclk = skl_get_cdclk;
1756 else if (IS_GEN9_LP(dev_priv))
1757 dev_priv->display.get_cdclk = bxt_get_cdclk;
1758 else if (IS_BROADWELL(dev_priv))
1759 dev_priv->display.get_cdclk = bdw_get_cdclk;
1760 else if (IS_HASWELL(dev_priv))
1761 dev_priv->display.get_cdclk = hsw_get_cdclk;
1762 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1763 dev_priv->display.get_cdclk = vlv_get_cdclk;
1764 else if (IS_GEN6(dev_priv) || IS_IVYBRIDGE(dev_priv))
1765 dev_priv->display.get_cdclk = fixed_400mhz_get_cdclk;
1766 else if (IS_GEN5(dev_priv))
1767 dev_priv->display.get_cdclk = fixed_450mhz_get_cdclk;
1768 else if (IS_GM45(dev_priv))
1769 dev_priv->display.get_cdclk = gm45_get_cdclk;
1770 else if (IS_G4X(dev_priv))
1771 dev_priv->display.get_cdclk = g33_get_cdclk;
1772 else if (IS_I965GM(dev_priv))
1773 dev_priv->display.get_cdclk = i965gm_get_cdclk;
1774 else if (IS_I965G(dev_priv))
1775 dev_priv->display.get_cdclk = fixed_400mhz_get_cdclk;
1776 else if (IS_PINEVIEW(dev_priv))
1777 dev_priv->display.get_cdclk = pnv_get_cdclk;
1778 else if (IS_G33(dev_priv))
1779 dev_priv->display.get_cdclk = g33_get_cdclk;
1780 else if (IS_I945GM(dev_priv))
1781 dev_priv->display.get_cdclk = i945gm_get_cdclk;
1782 else if (IS_I945G(dev_priv))
1783 dev_priv->display.get_cdclk = fixed_400mhz_get_cdclk;
1784 else if (IS_I915GM(dev_priv))
1785 dev_priv->display.get_cdclk = i915gm_get_cdclk;
1786 else if (IS_I915G(dev_priv))
1787 dev_priv->display.get_cdclk = fixed_333mhz_get_cdclk;
1788 else if (IS_I865G(dev_priv))
1789 dev_priv->display.get_cdclk = fixed_266mhz_get_cdclk;
1790 else if (IS_I85X(dev_priv))
1791 dev_priv->display.get_cdclk = i85x_get_cdclk;
1792 else if (IS_I845G(dev_priv))
1793 dev_priv->display.get_cdclk = fixed_200mhz_get_cdclk;
1795 WARN(!IS_I830(dev_priv),
1796 "Unknown platform. Assuming 133 MHz CDCLK\n");
1797 dev_priv->display.get_cdclk = fixed_133mhz_get_cdclk;