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