1 /* 2 * Copyright © 2006-2007 Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 * 23 * Authors: 24 * Eric Anholt <eric@anholt.net> 25 */ 26 27 #include <linux/dma-resv.h> 28 #include <linux/i2c.h> 29 #include <linux/input.h> 30 #include <linux/kernel.h> 31 #include <linux/module.h> 32 #include <linux/slab.h> 33 #include <linux/string_helpers.h> 34 35 #include <drm/display/drm_dp_helper.h> 36 #include <drm/display/drm_dp_tunnel.h> 37 #include <drm/drm_atomic.h> 38 #include <drm/drm_atomic_helper.h> 39 #include <drm/drm_atomic_uapi.h> 40 #include <drm/drm_damage_helper.h> 41 #include <drm/drm_edid.h> 42 #include <drm/drm_fixed.h> 43 #include <drm/drm_fourcc.h> 44 #include <drm/drm_probe_helper.h> 45 #include <drm/drm_rect.h> 46 #include <drm/drm_vblank.h> 47 48 #include "g4x_dp.h" 49 #include "g4x_hdmi.h" 50 #include "hsw_ips.h" 51 #include "i915_config.h" 52 #include "i915_drv.h" 53 #include "i915_reg.h" 54 #include "i915_utils.h" 55 #include "i9xx_plane.h" 56 #include "i9xx_plane_regs.h" 57 #include "i9xx_wm.h" 58 #include "intel_alpm.h" 59 #include "intel_atomic.h" 60 #include "intel_audio.h" 61 #include "intel_bo.h" 62 #include "intel_bw.h" 63 #include "intel_cdclk.h" 64 #include "intel_clock_gating.h" 65 #include "intel_color.h" 66 #include "intel_crt.h" 67 #include "intel_crtc.h" 68 #include "intel_crtc_state_dump.h" 69 #include "intel_cursor.h" 70 #include "intel_cursor_regs.h" 71 #include "intel_cx0_phy.h" 72 #include "intel_ddi.h" 73 #include "intel_de.h" 74 #include "intel_display_driver.h" 75 #include "intel_display_power.h" 76 #include "intel_display_regs.h" 77 #include "intel_display_rpm.h" 78 #include "intel_display_types.h" 79 #include "intel_display_wa.h" 80 #include "intel_dmc.h" 81 #include "intel_dp.h" 82 #include "intel_dp_link_training.h" 83 #include "intel_dp_mst.h" 84 #include "intel_dp_tunnel.h" 85 #include "intel_dpll.h" 86 #include "intel_dpll_mgr.h" 87 #include "intel_dpt.h" 88 #include "intel_dpt_common.h" 89 #include "intel_drrs.h" 90 #include "intel_dsb.h" 91 #include "intel_dsi.h" 92 #include "intel_dvo.h" 93 #include "intel_fb.h" 94 #include "intel_fbc.h" 95 #include "intel_fdi.h" 96 #include "intel_fifo_underrun.h" 97 #include "intel_flipq.h" 98 #include "intel_frontbuffer.h" 99 #include "intel_hdmi.h" 100 #include "intel_hotplug.h" 101 #include "intel_link_bw.h" 102 #include "intel_lvds.h" 103 #include "intel_lvds_regs.h" 104 #include "intel_modeset_setup.h" 105 #include "intel_modeset_verify.h" 106 #include "intel_overlay.h" 107 #include "intel_panel.h" 108 #include "intel_pch_display.h" 109 #include "intel_pch_refclk.h" 110 #include "intel_pfit.h" 111 #include "intel_pipe_crc.h" 112 #include "intel_plane.h" 113 #include "intel_plane_initial.h" 114 #include "intel_pmdemand.h" 115 #include "intel_pps.h" 116 #include "intel_psr.h" 117 #include "intel_psr_regs.h" 118 #include "intel_sdvo.h" 119 #include "intel_snps_phy.h" 120 #include "intel_tc.h" 121 #include "intel_tdf.h" 122 #include "intel_tv.h" 123 #include "intel_vblank.h" 124 #include "intel_vdsc.h" 125 #include "intel_vdsc_regs.h" 126 #include "intel_vga.h" 127 #include "intel_vrr.h" 128 #include "intel_wm.h" 129 #include "skl_scaler.h" 130 #include "skl_universal_plane.h" 131 #include "skl_watermark.h" 132 #include "vlv_dpio_phy_regs.h" 133 #include "vlv_dsi.h" 134 #include "vlv_dsi_pll.h" 135 #include "vlv_dsi_regs.h" 136 #include "vlv_sideband.h" 137 138 static void intel_set_transcoder_timings(const struct intel_crtc_state *crtc_state); 139 static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state); 140 static void hsw_set_transconf(const struct intel_crtc_state *crtc_state); 141 static void bdw_set_pipe_misc(struct intel_dsb *dsb, 142 const struct intel_crtc_state *crtc_state); 143 144 /* returns HPLL frequency in kHz */ 145 int vlv_get_hpll_vco(struct drm_device *drm) 146 { 147 int hpll_freq, vco_freq[] = { 800, 1600, 2000, 2400 }; 148 149 /* Obtain SKU information */ 150 hpll_freq = vlv_cck_read(drm, CCK_FUSE_REG) & 151 CCK_FUSE_HPLL_FREQ_MASK; 152 153 return vco_freq[hpll_freq] * 1000; 154 } 155 156 int vlv_get_cck_clock(struct drm_device *drm, 157 const char *name, u32 reg, int ref_freq) 158 { 159 u32 val; 160 int divider; 161 162 val = vlv_cck_read(drm, reg); 163 divider = val & CCK_FREQUENCY_VALUES; 164 165 drm_WARN(drm, (val & CCK_FREQUENCY_STATUS) != 166 (divider << CCK_FREQUENCY_STATUS_SHIFT), 167 "%s change in progress\n", name); 168 169 return DIV_ROUND_CLOSEST(ref_freq << 1, divider + 1); 170 } 171 172 int vlv_get_cck_clock_hpll(struct drm_device *drm, 173 const char *name, u32 reg) 174 { 175 struct drm_i915_private *dev_priv = to_i915(drm); 176 int hpll; 177 178 vlv_cck_get(drm); 179 180 if (dev_priv->hpll_freq == 0) 181 dev_priv->hpll_freq = vlv_get_hpll_vco(drm); 182 183 hpll = vlv_get_cck_clock(drm, name, reg, dev_priv->hpll_freq); 184 185 vlv_cck_put(drm); 186 187 return hpll; 188 } 189 190 void intel_update_czclk(struct intel_display *display) 191 { 192 struct drm_i915_private *dev_priv = to_i915(display->drm); 193 194 if (!display->platform.valleyview && !display->platform.cherryview) 195 return; 196 197 dev_priv->czclk_freq = vlv_get_cck_clock_hpll(display->drm, "czclk", 198 CCK_CZ_CLOCK_CONTROL); 199 200 drm_dbg_kms(display->drm, "CZ clock rate: %d kHz\n", dev_priv->czclk_freq); 201 } 202 203 static bool is_hdr_mode(const struct intel_crtc_state *crtc_state) 204 { 205 return (crtc_state->active_planes & 206 ~(icl_hdr_plane_mask() | BIT(PLANE_CURSOR))) == 0; 207 } 208 209 /* WA Display #0827: Gen9:all */ 210 static void 211 skl_wa_827(struct intel_display *display, enum pipe pipe, bool enable) 212 { 213 intel_de_rmw(display, CLKGATE_DIS_PSL(pipe), 214 DUPS1_GATING_DIS | DUPS2_GATING_DIS, 215 enable ? DUPS1_GATING_DIS | DUPS2_GATING_DIS : 0); 216 } 217 218 /* Wa_2006604312:icl,ehl */ 219 static void 220 icl_wa_scalerclkgating(struct intel_display *display, enum pipe pipe, 221 bool enable) 222 { 223 intel_de_rmw(display, CLKGATE_DIS_PSL(pipe), 224 DPFR_GATING_DIS, 225 enable ? DPFR_GATING_DIS : 0); 226 } 227 228 /* Wa_1604331009:icl,jsl,ehl */ 229 static void 230 icl_wa_cursorclkgating(struct intel_display *display, enum pipe pipe, 231 bool enable) 232 { 233 intel_de_rmw(display, CLKGATE_DIS_PSL(pipe), 234 CURSOR_GATING_DIS, 235 enable ? CURSOR_GATING_DIS : 0); 236 } 237 238 static bool 239 is_trans_port_sync_slave(const struct intel_crtc_state *crtc_state) 240 { 241 return crtc_state->master_transcoder != INVALID_TRANSCODER; 242 } 243 244 bool 245 is_trans_port_sync_master(const struct intel_crtc_state *crtc_state) 246 { 247 return crtc_state->sync_mode_slaves_mask != 0; 248 } 249 250 bool 251 is_trans_port_sync_mode(const struct intel_crtc_state *crtc_state) 252 { 253 return is_trans_port_sync_master(crtc_state) || 254 is_trans_port_sync_slave(crtc_state); 255 } 256 257 static enum pipe joiner_primary_pipe(const struct intel_crtc_state *crtc_state) 258 { 259 return ffs(crtc_state->joiner_pipes) - 1; 260 } 261 262 /* 263 * The following helper functions, despite being named for bigjoiner, 264 * are applicable to both bigjoiner and uncompressed joiner configurations. 265 */ 266 static bool is_bigjoiner(const struct intel_crtc_state *crtc_state) 267 { 268 return hweight8(crtc_state->joiner_pipes) >= 2; 269 } 270 271 static u8 bigjoiner_primary_pipes(const struct intel_crtc_state *crtc_state) 272 { 273 if (!is_bigjoiner(crtc_state)) 274 return 0; 275 276 return crtc_state->joiner_pipes & (0b01010101 << joiner_primary_pipe(crtc_state)); 277 } 278 279 static unsigned int bigjoiner_secondary_pipes(const struct intel_crtc_state *crtc_state) 280 { 281 if (!is_bigjoiner(crtc_state)) 282 return 0; 283 284 return crtc_state->joiner_pipes & (0b10101010 << joiner_primary_pipe(crtc_state)); 285 } 286 287 bool intel_crtc_is_bigjoiner_primary(const struct intel_crtc_state *crtc_state) 288 { 289 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 290 291 if (!is_bigjoiner(crtc_state)) 292 return false; 293 294 return BIT(crtc->pipe) & bigjoiner_primary_pipes(crtc_state); 295 } 296 297 bool intel_crtc_is_bigjoiner_secondary(const struct intel_crtc_state *crtc_state) 298 { 299 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 300 301 if (!is_bigjoiner(crtc_state)) 302 return false; 303 304 return BIT(crtc->pipe) & bigjoiner_secondary_pipes(crtc_state); 305 } 306 307 u8 _intel_modeset_primary_pipes(const struct intel_crtc_state *crtc_state) 308 { 309 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 310 311 if (!is_bigjoiner(crtc_state)) 312 return BIT(crtc->pipe); 313 314 return bigjoiner_primary_pipes(crtc_state); 315 } 316 317 u8 _intel_modeset_secondary_pipes(const struct intel_crtc_state *crtc_state) 318 { 319 return bigjoiner_secondary_pipes(crtc_state); 320 } 321 322 bool intel_crtc_is_ultrajoiner(const struct intel_crtc_state *crtc_state) 323 { 324 return intel_crtc_num_joined_pipes(crtc_state) >= 4; 325 } 326 327 static u8 ultrajoiner_primary_pipes(const struct intel_crtc_state *crtc_state) 328 { 329 if (!intel_crtc_is_ultrajoiner(crtc_state)) 330 return 0; 331 332 return crtc_state->joiner_pipes & (0b00010001 << joiner_primary_pipe(crtc_state)); 333 } 334 335 bool intel_crtc_is_ultrajoiner_primary(const struct intel_crtc_state *crtc_state) 336 { 337 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 338 339 return intel_crtc_is_ultrajoiner(crtc_state) && 340 BIT(crtc->pipe) & ultrajoiner_primary_pipes(crtc_state); 341 } 342 343 /* 344 * The ultrajoiner enable bit doesn't seem to follow primary/secondary logic or 345 * any other logic, so lets just add helper function to 346 * at least hide this hassle.. 347 */ 348 static u8 ultrajoiner_enable_pipes(const struct intel_crtc_state *crtc_state) 349 { 350 if (!intel_crtc_is_ultrajoiner(crtc_state)) 351 return 0; 352 353 return crtc_state->joiner_pipes & (0b01110111 << joiner_primary_pipe(crtc_state)); 354 } 355 356 bool intel_crtc_ultrajoiner_enable_needed(const struct intel_crtc_state *crtc_state) 357 { 358 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 359 360 return intel_crtc_is_ultrajoiner(crtc_state) && 361 BIT(crtc->pipe) & ultrajoiner_enable_pipes(crtc_state); 362 } 363 364 u8 intel_crtc_joiner_secondary_pipes(const struct intel_crtc_state *crtc_state) 365 { 366 if (crtc_state->joiner_pipes) 367 return crtc_state->joiner_pipes & ~BIT(joiner_primary_pipe(crtc_state)); 368 else 369 return 0; 370 } 371 372 bool intel_crtc_is_joiner_secondary(const struct intel_crtc_state *crtc_state) 373 { 374 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 375 376 return crtc_state->joiner_pipes && 377 crtc->pipe != joiner_primary_pipe(crtc_state); 378 } 379 380 bool intel_crtc_is_joiner_primary(const struct intel_crtc_state *crtc_state) 381 { 382 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 383 384 return crtc_state->joiner_pipes && 385 crtc->pipe == joiner_primary_pipe(crtc_state); 386 } 387 388 int intel_crtc_num_joined_pipes(const struct intel_crtc_state *crtc_state) 389 { 390 return hweight8(intel_crtc_joined_pipe_mask(crtc_state)); 391 } 392 393 u8 intel_crtc_joined_pipe_mask(const struct intel_crtc_state *crtc_state) 394 { 395 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 396 397 return BIT(crtc->pipe) | crtc_state->joiner_pipes; 398 } 399 400 struct intel_crtc *intel_primary_crtc(const struct intel_crtc_state *crtc_state) 401 { 402 struct intel_display *display = to_intel_display(crtc_state); 403 404 if (intel_crtc_is_joiner_secondary(crtc_state)) 405 return intel_crtc_for_pipe(display, joiner_primary_pipe(crtc_state)); 406 else 407 return to_intel_crtc(crtc_state->uapi.crtc); 408 } 409 410 static void 411 intel_wait_for_pipe_off(const struct intel_crtc_state *old_crtc_state) 412 { 413 struct intel_display *display = to_intel_display(old_crtc_state); 414 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc); 415 416 if (DISPLAY_VER(display) >= 4) { 417 enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder; 418 419 /* Wait for the Pipe State to go off */ 420 if (intel_de_wait_for_clear(display, TRANSCONF(display, cpu_transcoder), 421 TRANSCONF_STATE_ENABLE, 100)) 422 drm_WARN(display->drm, 1, "pipe_off wait timed out\n"); 423 } else { 424 intel_wait_for_pipe_scanline_stopped(crtc); 425 } 426 } 427 428 void assert_transcoder(struct intel_display *display, 429 enum transcoder cpu_transcoder, bool state) 430 { 431 bool cur_state; 432 enum intel_display_power_domain power_domain; 433 intel_wakeref_t wakeref; 434 435 /* we keep both pipes enabled on 830 */ 436 if (display->platform.i830) 437 state = true; 438 439 power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder); 440 wakeref = intel_display_power_get_if_enabled(display, power_domain); 441 if (wakeref) { 442 u32 val = intel_de_read(display, 443 TRANSCONF(display, cpu_transcoder)); 444 cur_state = !!(val & TRANSCONF_ENABLE); 445 446 intel_display_power_put(display, power_domain, wakeref); 447 } else { 448 cur_state = false; 449 } 450 451 INTEL_DISPLAY_STATE_WARN(display, cur_state != state, 452 "transcoder %s assertion failure (expected %s, current %s)\n", 453 transcoder_name(cpu_transcoder), str_on_off(state), 454 str_on_off(cur_state)); 455 } 456 457 static void assert_plane(struct intel_plane *plane, bool state) 458 { 459 struct intel_display *display = to_intel_display(plane->base.dev); 460 enum pipe pipe; 461 bool cur_state; 462 463 cur_state = plane->get_hw_state(plane, &pipe); 464 465 INTEL_DISPLAY_STATE_WARN(display, cur_state != state, 466 "%s assertion failure (expected %s, current %s)\n", 467 plane->base.name, str_on_off(state), 468 str_on_off(cur_state)); 469 } 470 471 #define assert_plane_enabled(p) assert_plane(p, true) 472 #define assert_plane_disabled(p) assert_plane(p, false) 473 474 static void assert_planes_disabled(struct intel_crtc *crtc) 475 { 476 struct intel_display *display = to_intel_display(crtc); 477 struct intel_plane *plane; 478 479 for_each_intel_plane_on_crtc(display->drm, crtc, plane) 480 assert_plane_disabled(plane); 481 } 482 483 void intel_enable_transcoder(const struct intel_crtc_state *new_crtc_state) 484 { 485 struct intel_display *display = to_intel_display(new_crtc_state); 486 struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc); 487 enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; 488 enum pipe pipe = crtc->pipe; 489 u32 val; 490 491 drm_dbg_kms(display->drm, "enabling pipe %c\n", pipe_name(pipe)); 492 493 assert_planes_disabled(crtc); 494 495 /* 496 * A pipe without a PLL won't actually be able to drive bits from 497 * a plane. On ILK+ the pipe PLLs are integrated, so we don't 498 * need the check. 499 */ 500 if (HAS_GMCH(display)) { 501 if (intel_crtc_has_type(new_crtc_state, INTEL_OUTPUT_DSI)) 502 assert_dsi_pll_enabled(display); 503 else 504 assert_pll_enabled(display, pipe); 505 } else { 506 if (new_crtc_state->has_pch_encoder) { 507 /* if driving the PCH, we need FDI enabled */ 508 assert_fdi_rx_pll_enabled(display, 509 intel_crtc_pch_transcoder(crtc)); 510 assert_fdi_tx_pll_enabled(display, 511 (enum pipe) cpu_transcoder); 512 } 513 /* FIXME: assert CPU port conditions for SNB+ */ 514 } 515 516 /* Wa_22012358565:adl-p */ 517 if (DISPLAY_VER(display) == 13) 518 intel_de_rmw(display, PIPE_ARB_CTL(display, pipe), 519 0, PIPE_ARB_USE_PROG_SLOTS); 520 521 if (DISPLAY_VER(display) >= 14) { 522 u32 clear = DP_DSC_INSERT_SF_AT_EOL_WA; 523 u32 set = 0; 524 525 if (DISPLAY_VER(display) == 14) 526 set |= DP_FEC_BS_JITTER_WA; 527 528 intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder), 529 clear, set); 530 } 531 532 val = intel_de_read(display, TRANSCONF(display, cpu_transcoder)); 533 if (val & TRANSCONF_ENABLE) { 534 /* we keep both pipes enabled on 830 */ 535 drm_WARN_ON(display->drm, !display->platform.i830); 536 return; 537 } 538 539 /* Wa_1409098942:adlp+ */ 540 if (DISPLAY_VER(display) >= 13 && 541 new_crtc_state->dsc.compression_enable) { 542 val &= ~TRANSCONF_PIXEL_COUNT_SCALING_MASK; 543 val |= REG_FIELD_PREP(TRANSCONF_PIXEL_COUNT_SCALING_MASK, 544 TRANSCONF_PIXEL_COUNT_SCALING_X4); 545 } 546 547 intel_de_write(display, TRANSCONF(display, cpu_transcoder), 548 val | TRANSCONF_ENABLE); 549 intel_de_posting_read(display, TRANSCONF(display, cpu_transcoder)); 550 551 /* 552 * Until the pipe starts PIPEDSL reads will return a stale value, 553 * which causes an apparent vblank timestamp jump when PIPEDSL 554 * resets to its proper value. That also messes up the frame count 555 * when it's derived from the timestamps. So let's wait for the 556 * pipe to start properly before we call drm_crtc_vblank_on() 557 */ 558 if (intel_crtc_max_vblank_count(new_crtc_state) == 0) 559 intel_wait_for_pipe_scanline_moving(crtc); 560 } 561 562 void intel_disable_transcoder(const struct intel_crtc_state *old_crtc_state) 563 { 564 struct intel_display *display = to_intel_display(old_crtc_state); 565 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc); 566 enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder; 567 enum pipe pipe = crtc->pipe; 568 u32 val; 569 570 drm_dbg_kms(display->drm, "disabling pipe %c\n", pipe_name(pipe)); 571 572 /* 573 * Make sure planes won't keep trying to pump pixels to us, 574 * or we might hang the display. 575 */ 576 assert_planes_disabled(crtc); 577 578 val = intel_de_read(display, TRANSCONF(display, cpu_transcoder)); 579 if ((val & TRANSCONF_ENABLE) == 0) 580 return; 581 582 /* 583 * Double wide has implications for planes 584 * so best keep it disabled when not needed. 585 */ 586 if (old_crtc_state->double_wide) 587 val &= ~TRANSCONF_DOUBLE_WIDE; 588 589 /* Don't disable pipe or pipe PLLs if needed */ 590 if (!display->platform.i830) 591 val &= ~TRANSCONF_ENABLE; 592 593 /* Wa_1409098942:adlp+ */ 594 if (DISPLAY_VER(display) >= 13 && 595 old_crtc_state->dsc.compression_enable) 596 val &= ~TRANSCONF_PIXEL_COUNT_SCALING_MASK; 597 598 intel_de_write(display, TRANSCONF(display, cpu_transcoder), val); 599 600 if (DISPLAY_VER(display) >= 12) 601 intel_de_rmw(display, CHICKEN_TRANS(display, cpu_transcoder), 602 FECSTALL_DIS_DPTSTREAM_DPTTG, 0); 603 604 if ((val & TRANSCONF_ENABLE) == 0) 605 intel_wait_for_pipe_off(old_crtc_state); 606 } 607 608 u32 intel_plane_fb_max_stride(struct drm_device *drm, 609 u32 pixel_format, u64 modifier) 610 { 611 struct intel_display *display = to_intel_display(drm); 612 struct intel_crtc *crtc; 613 struct intel_plane *plane; 614 615 if (!HAS_DISPLAY(display)) 616 return 0; 617 618 /* 619 * We assume the primary plane for pipe A has 620 * the highest stride limits of them all, 621 * if in case pipe A is disabled, use the first pipe from pipe_mask. 622 */ 623 crtc = intel_first_crtc(display); 624 if (!crtc) 625 return 0; 626 627 plane = to_intel_plane(crtc->base.primary); 628 629 return plane->max_stride(plane, pixel_format, modifier, 630 DRM_MODE_ROTATE_0); 631 } 632 633 void intel_set_plane_visible(struct intel_crtc_state *crtc_state, 634 struct intel_plane_state *plane_state, 635 bool visible) 636 { 637 struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane); 638 639 plane_state->uapi.visible = visible; 640 641 if (visible) 642 crtc_state->uapi.plane_mask |= drm_plane_mask(&plane->base); 643 else 644 crtc_state->uapi.plane_mask &= ~drm_plane_mask(&plane->base); 645 } 646 647 void intel_plane_fixup_bitmasks(struct intel_crtc_state *crtc_state) 648 { 649 struct intel_display *display = to_intel_display(crtc_state); 650 struct drm_plane *plane; 651 652 /* 653 * Active_planes aliases if multiple "primary" or cursor planes 654 * have been used on the same (or wrong) pipe. plane_mask uses 655 * unique ids, hence we can use that to reconstruct active_planes. 656 */ 657 crtc_state->enabled_planes = 0; 658 crtc_state->active_planes = 0; 659 660 drm_for_each_plane_mask(plane, display->drm, 661 crtc_state->uapi.plane_mask) { 662 crtc_state->enabled_planes |= BIT(to_intel_plane(plane)->id); 663 crtc_state->active_planes |= BIT(to_intel_plane(plane)->id); 664 } 665 } 666 667 void intel_plane_disable_noatomic(struct intel_crtc *crtc, 668 struct intel_plane *plane) 669 { 670 struct intel_display *display = to_intel_display(crtc); 671 struct intel_crtc_state *crtc_state = 672 to_intel_crtc_state(crtc->base.state); 673 struct intel_plane_state *plane_state = 674 to_intel_plane_state(plane->base.state); 675 676 drm_dbg_kms(display->drm, 677 "Disabling [PLANE:%d:%s] on [CRTC:%d:%s]\n", 678 plane->base.base.id, plane->base.name, 679 crtc->base.base.id, crtc->base.name); 680 681 intel_plane_set_invisible(crtc_state, plane_state); 682 intel_set_plane_visible(crtc_state, plane_state, false); 683 intel_plane_fixup_bitmasks(crtc_state); 684 685 skl_wm_plane_disable_noatomic(crtc, plane); 686 687 if ((crtc_state->active_planes & ~BIT(PLANE_CURSOR)) == 0 && 688 hsw_ips_disable(crtc_state)) { 689 crtc_state->ips_enabled = false; 690 intel_plane_initial_vblank_wait(crtc); 691 } 692 693 /* 694 * Vblank time updates from the shadow to live plane control register 695 * are blocked if the memory self-refresh mode is active at that 696 * moment. So to make sure the plane gets truly disabled, disable 697 * first the self-refresh mode. The self-refresh enable bit in turn 698 * will be checked/applied by the HW only at the next frame start 699 * event which is after the vblank start event, so we need to have a 700 * wait-for-vblank between disabling the plane and the pipe. 701 */ 702 if (HAS_GMCH(display) && 703 intel_set_memory_cxsr(display, false)) 704 intel_plane_initial_vblank_wait(crtc); 705 706 /* 707 * Gen2 reports pipe underruns whenever all planes are disabled. 708 * So disable underrun reporting before all the planes get disabled. 709 */ 710 if (DISPLAY_VER(display) == 2 && !crtc_state->active_planes) 711 intel_set_cpu_fifo_underrun_reporting(display, crtc->pipe, false); 712 713 intel_plane_disable_arm(NULL, plane, crtc_state); 714 intel_plane_initial_vblank_wait(crtc); 715 } 716 717 unsigned int 718 intel_plane_fence_y_offset(const struct intel_plane_state *plane_state) 719 { 720 int x = 0, y = 0; 721 722 intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0, 723 plane_state->view.color_plane[0].offset, 0); 724 725 return y; 726 } 727 728 static void icl_set_pipe_chicken(const struct intel_crtc_state *crtc_state) 729 { 730 struct intel_display *display = to_intel_display(crtc_state); 731 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 732 enum pipe pipe = crtc->pipe; 733 u32 tmp; 734 735 tmp = intel_de_read(display, PIPE_CHICKEN(pipe)); 736 737 /* 738 * Display WA #1153: icl 739 * enable hardware to bypass the alpha math 740 * and rounding for per-pixel values 00 and 0xff 741 */ 742 tmp |= PER_PIXEL_ALPHA_BYPASS_EN; 743 /* 744 * Display WA # 1605353570: icl 745 * Set the pixel rounding bit to 1 for allowing 746 * passthrough of Frame buffer pixels unmodified 747 * across pipe 748 */ 749 tmp |= PIXEL_ROUNDING_TRUNC_FB_PASSTHRU; 750 751 /* 752 * Underrun recovery must always be disabled on display 13+. 753 * DG2 chicken bit meaning is inverted compared to other platforms. 754 */ 755 if (display->platform.dg2) 756 tmp &= ~UNDERRUN_RECOVERY_ENABLE_DG2; 757 else if ((DISPLAY_VER(display) >= 13) && (DISPLAY_VER(display) < 30)) 758 tmp |= UNDERRUN_RECOVERY_DISABLE_ADLP; 759 760 /* Wa_14010547955:dg2 */ 761 if (display->platform.dg2) 762 tmp |= DG2_RENDER_CCSTAG_4_3_EN; 763 764 intel_de_write(display, PIPE_CHICKEN(pipe), tmp); 765 } 766 767 bool intel_has_pending_fb_unpin(struct intel_display *display) 768 { 769 struct drm_crtc *crtc; 770 bool cleanup_done; 771 772 drm_for_each_crtc(crtc, display->drm) { 773 struct drm_crtc_commit *commit; 774 spin_lock(&crtc->commit_lock); 775 commit = list_first_entry_or_null(&crtc->commit_list, 776 struct drm_crtc_commit, commit_entry); 777 cleanup_done = commit ? 778 try_wait_for_completion(&commit->cleanup_done) : true; 779 spin_unlock(&crtc->commit_lock); 780 781 if (cleanup_done) 782 continue; 783 784 intel_crtc_wait_for_next_vblank(to_intel_crtc(crtc)); 785 786 return true; 787 } 788 789 return false; 790 } 791 792 /* 793 * Finds the encoder associated with the given CRTC. This can only be 794 * used when we know that the CRTC isn't feeding multiple encoders! 795 */ 796 struct intel_encoder * 797 intel_get_crtc_new_encoder(const struct intel_atomic_state *state, 798 const struct intel_crtc_state *crtc_state) 799 { 800 const struct drm_connector_state *connector_state; 801 const struct drm_connector *connector; 802 struct intel_encoder *encoder = NULL; 803 struct intel_crtc *primary_crtc; 804 int num_encoders = 0; 805 int i; 806 807 primary_crtc = intel_primary_crtc(crtc_state); 808 809 for_each_new_connector_in_state(&state->base, connector, connector_state, i) { 810 if (connector_state->crtc != &primary_crtc->base) 811 continue; 812 813 encoder = to_intel_encoder(connector_state->best_encoder); 814 num_encoders++; 815 } 816 817 drm_WARN(state->base.dev, num_encoders != 1, 818 "%d encoders for pipe %c\n", 819 num_encoders, pipe_name(primary_crtc->pipe)); 820 821 return encoder; 822 } 823 824 static void intel_crtc_dpms_overlay_disable(struct intel_crtc *crtc) 825 { 826 if (crtc->overlay) 827 (void) intel_overlay_switch_off(crtc->overlay); 828 829 /* Let userspace switch the overlay on again. In most cases userspace 830 * has to recompute where to put it anyway. 831 */ 832 } 833 834 static bool needs_nv12_wa(const struct intel_crtc_state *crtc_state) 835 { 836 struct intel_display *display = to_intel_display(crtc_state); 837 838 if (!crtc_state->nv12_planes) 839 return false; 840 841 /* WA Display #0827: Gen9:all */ 842 if (DISPLAY_VER(display) == 9) 843 return true; 844 845 return false; 846 } 847 848 static bool needs_scalerclk_wa(const struct intel_crtc_state *crtc_state) 849 { 850 struct intel_display *display = to_intel_display(crtc_state); 851 852 /* Wa_2006604312:icl,ehl */ 853 if (crtc_state->scaler_state.scaler_users > 0 && DISPLAY_VER(display) == 11) 854 return true; 855 856 return false; 857 } 858 859 static bool needs_cursorclk_wa(const struct intel_crtc_state *crtc_state) 860 { 861 struct intel_display *display = to_intel_display(crtc_state); 862 863 /* Wa_1604331009:icl,jsl,ehl */ 864 if (is_hdr_mode(crtc_state) && 865 crtc_state->active_planes & BIT(PLANE_CURSOR) && 866 DISPLAY_VER(display) == 11) 867 return true; 868 869 return false; 870 } 871 872 static void intel_async_flip_vtd_wa(struct intel_display *display, 873 enum pipe pipe, bool enable) 874 { 875 if (DISPLAY_VER(display) == 9) { 876 /* 877 * "Plane N stretch max must be programmed to 11b (x1) 878 * when Async flips are enabled on that plane." 879 */ 880 intel_de_rmw(display, CHICKEN_PIPESL_1(pipe), 881 SKL_PLANE1_STRETCH_MAX_MASK, 882 enable ? SKL_PLANE1_STRETCH_MAX_X1 : SKL_PLANE1_STRETCH_MAX_X8); 883 } else { 884 /* Also needed on HSW/BDW albeit undocumented */ 885 intel_de_rmw(display, CHICKEN_PIPESL_1(pipe), 886 HSW_PRI_STRETCH_MAX_MASK, 887 enable ? HSW_PRI_STRETCH_MAX_X1 : HSW_PRI_STRETCH_MAX_X8); 888 } 889 } 890 891 static bool needs_async_flip_vtd_wa(const struct intel_crtc_state *crtc_state) 892 { 893 struct intel_display *display = to_intel_display(crtc_state); 894 struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev); 895 896 return crtc_state->uapi.async_flip && i915_vtd_active(i915) && 897 (DISPLAY_VER(display) == 9 || display->platform.broadwell || 898 display->platform.haswell); 899 } 900 901 static void intel_encoders_audio_enable(struct intel_atomic_state *state, 902 struct intel_crtc *crtc) 903 { 904 const struct intel_crtc_state *crtc_state = 905 intel_atomic_get_new_crtc_state(state, crtc); 906 const struct drm_connector_state *conn_state; 907 struct drm_connector *conn; 908 int i; 909 910 for_each_new_connector_in_state(&state->base, conn, conn_state, i) { 911 struct intel_encoder *encoder = 912 to_intel_encoder(conn_state->best_encoder); 913 914 if (conn_state->crtc != &crtc->base) 915 continue; 916 917 if (encoder->audio_enable) 918 encoder->audio_enable(encoder, crtc_state, conn_state); 919 } 920 } 921 922 static void intel_encoders_audio_disable(struct intel_atomic_state *state, 923 struct intel_crtc *crtc) 924 { 925 const struct intel_crtc_state *old_crtc_state = 926 intel_atomic_get_old_crtc_state(state, crtc); 927 const struct drm_connector_state *old_conn_state; 928 struct drm_connector *conn; 929 int i; 930 931 for_each_old_connector_in_state(&state->base, conn, old_conn_state, i) { 932 struct intel_encoder *encoder = 933 to_intel_encoder(old_conn_state->best_encoder); 934 935 if (old_conn_state->crtc != &crtc->base) 936 continue; 937 938 if (encoder->audio_disable) 939 encoder->audio_disable(encoder, old_crtc_state, old_conn_state); 940 } 941 } 942 943 #define is_enabling(feature, old_crtc_state, new_crtc_state) \ 944 ((!(old_crtc_state)->feature || intel_crtc_needs_modeset(new_crtc_state)) && \ 945 (new_crtc_state)->feature) 946 #define is_disabling(feature, old_crtc_state, new_crtc_state) \ 947 ((old_crtc_state)->feature && \ 948 (!(new_crtc_state)->feature || intel_crtc_needs_modeset(new_crtc_state))) 949 950 static bool planes_enabling(const struct intel_crtc_state *old_crtc_state, 951 const struct intel_crtc_state *new_crtc_state) 952 { 953 if (!new_crtc_state->hw.active) 954 return false; 955 956 return is_enabling(active_planes, old_crtc_state, new_crtc_state); 957 } 958 959 static bool planes_disabling(const struct intel_crtc_state *old_crtc_state, 960 const struct intel_crtc_state *new_crtc_state) 961 { 962 if (!old_crtc_state->hw.active) 963 return false; 964 965 return is_disabling(active_planes, old_crtc_state, new_crtc_state); 966 } 967 968 static bool vrr_params_changed(const struct intel_crtc_state *old_crtc_state, 969 const struct intel_crtc_state *new_crtc_state) 970 { 971 return old_crtc_state->vrr.flipline != new_crtc_state->vrr.flipline || 972 old_crtc_state->vrr.vmin != new_crtc_state->vrr.vmin || 973 old_crtc_state->vrr.vmax != new_crtc_state->vrr.vmax || 974 old_crtc_state->vrr.guardband != new_crtc_state->vrr.guardband || 975 old_crtc_state->vrr.pipeline_full != new_crtc_state->vrr.pipeline_full || 976 old_crtc_state->vrr.vsync_start != new_crtc_state->vrr.vsync_start || 977 old_crtc_state->vrr.vsync_end != new_crtc_state->vrr.vsync_end; 978 } 979 980 static bool cmrr_params_changed(const struct intel_crtc_state *old_crtc_state, 981 const struct intel_crtc_state *new_crtc_state) 982 { 983 return old_crtc_state->cmrr.cmrr_m != new_crtc_state->cmrr.cmrr_m || 984 old_crtc_state->cmrr.cmrr_n != new_crtc_state->cmrr.cmrr_n; 985 } 986 987 static bool intel_crtc_vrr_enabling(struct intel_atomic_state *state, 988 struct intel_crtc *crtc) 989 { 990 const struct intel_crtc_state *old_crtc_state = 991 intel_atomic_get_old_crtc_state(state, crtc); 992 const struct intel_crtc_state *new_crtc_state = 993 intel_atomic_get_new_crtc_state(state, crtc); 994 995 if (!new_crtc_state->hw.active) 996 return false; 997 998 return is_enabling(vrr.enable, old_crtc_state, new_crtc_state) || 999 (new_crtc_state->vrr.enable && 1000 (new_crtc_state->update_m_n || new_crtc_state->update_lrr || 1001 vrr_params_changed(old_crtc_state, new_crtc_state))); 1002 } 1003 1004 bool intel_crtc_vrr_disabling(struct intel_atomic_state *state, 1005 struct intel_crtc *crtc) 1006 { 1007 const struct intel_crtc_state *old_crtc_state = 1008 intel_atomic_get_old_crtc_state(state, crtc); 1009 const struct intel_crtc_state *new_crtc_state = 1010 intel_atomic_get_new_crtc_state(state, crtc); 1011 1012 if (!old_crtc_state->hw.active) 1013 return false; 1014 1015 return is_disabling(vrr.enable, old_crtc_state, new_crtc_state) || 1016 (old_crtc_state->vrr.enable && 1017 (new_crtc_state->update_m_n || new_crtc_state->update_lrr || 1018 vrr_params_changed(old_crtc_state, new_crtc_state))); 1019 } 1020 1021 static bool audio_enabling(const struct intel_crtc_state *old_crtc_state, 1022 const struct intel_crtc_state *new_crtc_state) 1023 { 1024 if (!new_crtc_state->hw.active) 1025 return false; 1026 1027 return is_enabling(has_audio, old_crtc_state, new_crtc_state) || 1028 (new_crtc_state->has_audio && 1029 memcmp(old_crtc_state->eld, new_crtc_state->eld, MAX_ELD_BYTES) != 0); 1030 } 1031 1032 static bool audio_disabling(const struct intel_crtc_state *old_crtc_state, 1033 const struct intel_crtc_state *new_crtc_state) 1034 { 1035 if (!old_crtc_state->hw.active) 1036 return false; 1037 1038 return is_disabling(has_audio, old_crtc_state, new_crtc_state) || 1039 (old_crtc_state->has_audio && 1040 memcmp(old_crtc_state->eld, new_crtc_state->eld, MAX_ELD_BYTES) != 0); 1041 } 1042 1043 #undef is_disabling 1044 #undef is_enabling 1045 1046 static void intel_post_plane_update(struct intel_atomic_state *state, 1047 struct intel_crtc *crtc) 1048 { 1049 struct intel_display *display = to_intel_display(state); 1050 const struct intel_crtc_state *old_crtc_state = 1051 intel_atomic_get_old_crtc_state(state, crtc); 1052 const struct intel_crtc_state *new_crtc_state = 1053 intel_atomic_get_new_crtc_state(state, crtc); 1054 enum pipe pipe = crtc->pipe; 1055 1056 intel_frontbuffer_flip(display, new_crtc_state->fb_bits); 1057 1058 if (new_crtc_state->update_wm_post && new_crtc_state->hw.active) 1059 intel_update_watermarks(display); 1060 1061 intel_fbc_post_update(state, crtc); 1062 1063 if (needs_async_flip_vtd_wa(old_crtc_state) && 1064 !needs_async_flip_vtd_wa(new_crtc_state)) 1065 intel_async_flip_vtd_wa(display, pipe, false); 1066 1067 if (needs_nv12_wa(old_crtc_state) && 1068 !needs_nv12_wa(new_crtc_state)) 1069 skl_wa_827(display, pipe, false); 1070 1071 if (needs_scalerclk_wa(old_crtc_state) && 1072 !needs_scalerclk_wa(new_crtc_state)) 1073 icl_wa_scalerclkgating(display, pipe, false); 1074 1075 if (needs_cursorclk_wa(old_crtc_state) && 1076 !needs_cursorclk_wa(new_crtc_state)) 1077 icl_wa_cursorclkgating(display, pipe, false); 1078 1079 if (intel_crtc_needs_color_update(new_crtc_state)) 1080 intel_color_post_update(new_crtc_state); 1081 1082 if (audio_enabling(old_crtc_state, new_crtc_state)) 1083 intel_encoders_audio_enable(state, crtc); 1084 1085 if (intel_display_wa(display, 14011503117)) { 1086 if (old_crtc_state->pch_pfit.enabled != new_crtc_state->pch_pfit.enabled) 1087 adl_scaler_ecc_unmask(new_crtc_state); 1088 } 1089 1090 intel_alpm_post_plane_update(state, crtc); 1091 1092 intel_psr_post_plane_update(state, crtc); 1093 } 1094 1095 static void intel_post_plane_update_after_readout(struct intel_atomic_state *state, 1096 struct intel_crtc *crtc) 1097 { 1098 const struct intel_crtc_state *new_crtc_state = 1099 intel_atomic_get_new_crtc_state(state, crtc); 1100 1101 /* Must be done after gamma readout due to HSW split gamma vs. IPS w/a */ 1102 hsw_ips_post_update(state, crtc); 1103 1104 /* 1105 * Activate DRRS after state readout to avoid 1106 * dp_m_n vs. dp_m2_n2 confusion on BDW+. 1107 */ 1108 intel_drrs_activate(new_crtc_state); 1109 } 1110 1111 static void intel_crtc_enable_flip_done(struct intel_atomic_state *state, 1112 struct intel_crtc *crtc) 1113 { 1114 const struct intel_crtc_state *crtc_state = 1115 intel_atomic_get_new_crtc_state(state, crtc); 1116 u8 update_planes = crtc_state->update_planes; 1117 const struct intel_plane_state __maybe_unused *plane_state; 1118 struct intel_plane *plane; 1119 int i; 1120 1121 for_each_new_intel_plane_in_state(state, plane, plane_state, i) { 1122 if (plane->pipe == crtc->pipe && 1123 update_planes & BIT(plane->id)) 1124 plane->enable_flip_done(plane); 1125 } 1126 } 1127 1128 static void intel_crtc_disable_flip_done(struct intel_atomic_state *state, 1129 struct intel_crtc *crtc) 1130 { 1131 const struct intel_crtc_state *crtc_state = 1132 intel_atomic_get_new_crtc_state(state, crtc); 1133 u8 update_planes = crtc_state->update_planes; 1134 const struct intel_plane_state __maybe_unused *plane_state; 1135 struct intel_plane *plane; 1136 int i; 1137 1138 for_each_new_intel_plane_in_state(state, plane, plane_state, i) { 1139 if (plane->pipe == crtc->pipe && 1140 update_planes & BIT(plane->id)) 1141 plane->disable_flip_done(plane); 1142 } 1143 } 1144 1145 static void intel_crtc_async_flip_disable_wa(struct intel_atomic_state *state, 1146 struct intel_crtc *crtc) 1147 { 1148 const struct intel_crtc_state *old_crtc_state = 1149 intel_atomic_get_old_crtc_state(state, crtc); 1150 const struct intel_crtc_state *new_crtc_state = 1151 intel_atomic_get_new_crtc_state(state, crtc); 1152 u8 disable_async_flip_planes = old_crtc_state->async_flip_planes & 1153 ~new_crtc_state->async_flip_planes; 1154 const struct intel_plane_state *old_plane_state; 1155 struct intel_plane *plane; 1156 bool need_vbl_wait = false; 1157 int i; 1158 1159 for_each_old_intel_plane_in_state(state, plane, old_plane_state, i) { 1160 if (plane->need_async_flip_toggle_wa && 1161 plane->pipe == crtc->pipe && 1162 disable_async_flip_planes & BIT(plane->id)) { 1163 /* 1164 * Apart from the async flip bit we want to 1165 * preserve the old state for the plane. 1166 */ 1167 intel_plane_async_flip(NULL, plane, 1168 old_crtc_state, old_plane_state, false); 1169 need_vbl_wait = true; 1170 } 1171 } 1172 1173 if (need_vbl_wait) 1174 intel_crtc_wait_for_next_vblank(crtc); 1175 } 1176 1177 static void intel_pre_plane_update(struct intel_atomic_state *state, 1178 struct intel_crtc *crtc) 1179 { 1180 struct intel_display *display = to_intel_display(state); 1181 const struct intel_crtc_state *old_crtc_state = 1182 intel_atomic_get_old_crtc_state(state, crtc); 1183 const struct intel_crtc_state *new_crtc_state = 1184 intel_atomic_get_new_crtc_state(state, crtc); 1185 enum pipe pipe = crtc->pipe; 1186 1187 intel_alpm_pre_plane_update(state, crtc); 1188 intel_psr_pre_plane_update(state, crtc); 1189 1190 if (intel_crtc_vrr_disabling(state, crtc)) { 1191 intel_vrr_disable(old_crtc_state); 1192 intel_crtc_update_active_timings(old_crtc_state, false); 1193 } 1194 1195 if (audio_disabling(old_crtc_state, new_crtc_state)) 1196 intel_encoders_audio_disable(state, crtc); 1197 1198 intel_drrs_deactivate(old_crtc_state); 1199 1200 if (hsw_ips_pre_update(state, crtc)) 1201 intel_crtc_wait_for_next_vblank(crtc); 1202 1203 if (intel_fbc_pre_update(state, crtc)) 1204 intel_crtc_wait_for_next_vblank(crtc); 1205 1206 if (!needs_async_flip_vtd_wa(old_crtc_state) && 1207 needs_async_flip_vtd_wa(new_crtc_state)) 1208 intel_async_flip_vtd_wa(display, pipe, true); 1209 1210 /* Display WA 827 */ 1211 if (!needs_nv12_wa(old_crtc_state) && 1212 needs_nv12_wa(new_crtc_state)) 1213 skl_wa_827(display, pipe, true); 1214 1215 /* Wa_2006604312:icl,ehl */ 1216 if (!needs_scalerclk_wa(old_crtc_state) && 1217 needs_scalerclk_wa(new_crtc_state)) 1218 icl_wa_scalerclkgating(display, pipe, true); 1219 1220 /* Wa_1604331009:icl,jsl,ehl */ 1221 if (!needs_cursorclk_wa(old_crtc_state) && 1222 needs_cursorclk_wa(new_crtc_state)) 1223 icl_wa_cursorclkgating(display, pipe, true); 1224 1225 /* 1226 * Vblank time updates from the shadow to live plane control register 1227 * are blocked if the memory self-refresh mode is active at that 1228 * moment. So to make sure the plane gets truly disabled, disable 1229 * first the self-refresh mode. The self-refresh enable bit in turn 1230 * will be checked/applied by the HW only at the next frame start 1231 * event which is after the vblank start event, so we need to have a 1232 * wait-for-vblank between disabling the plane and the pipe. 1233 */ 1234 if (HAS_GMCH(display) && old_crtc_state->hw.active && 1235 new_crtc_state->disable_cxsr && intel_set_memory_cxsr(display, false)) 1236 intel_crtc_wait_for_next_vblank(crtc); 1237 1238 /* 1239 * IVB workaround: must disable low power watermarks for at least 1240 * one frame before enabling scaling. LP watermarks can be re-enabled 1241 * when scaling is disabled. 1242 * 1243 * WaCxSRDisabledForSpriteScaling:ivb 1244 */ 1245 if (!HAS_GMCH(display) && old_crtc_state->hw.active && 1246 new_crtc_state->disable_cxsr && ilk_disable_cxsr(display)) 1247 intel_crtc_wait_for_next_vblank(crtc); 1248 1249 /* 1250 * If we're doing a modeset we don't need to do any 1251 * pre-vblank watermark programming here. 1252 */ 1253 if (!intel_crtc_needs_modeset(new_crtc_state)) { 1254 /* 1255 * For platforms that support atomic watermarks, program the 1256 * 'intermediate' watermarks immediately. On pre-gen9 platforms, these 1257 * will be the intermediate values that are safe for both pre- and 1258 * post- vblank; when vblank happens, the 'active' values will be set 1259 * to the final 'target' values and we'll do this again to get the 1260 * optimal watermarks. For gen9+ platforms, the values we program here 1261 * will be the final target values which will get automatically latched 1262 * at vblank time; no further programming will be necessary. 1263 * 1264 * If a platform hasn't been transitioned to atomic watermarks yet, 1265 * we'll continue to update watermarks the old way, if flags tell 1266 * us to. 1267 */ 1268 if (!intel_initial_watermarks(state, crtc)) 1269 if (new_crtc_state->update_wm_pre) 1270 intel_update_watermarks(display); 1271 } 1272 1273 /* 1274 * Gen2 reports pipe underruns whenever all planes are disabled. 1275 * So disable underrun reporting before all the planes get disabled. 1276 * 1277 * We do this after .initial_watermarks() so that we have a 1278 * chance of catching underruns with the intermediate watermarks 1279 * vs. the old plane configuration. 1280 */ 1281 if (DISPLAY_VER(display) == 2 && planes_disabling(old_crtc_state, new_crtc_state)) 1282 intel_set_cpu_fifo_underrun_reporting(display, pipe, false); 1283 1284 /* 1285 * WA for platforms where async address update enable bit 1286 * is double buffered and only latched at start of vblank. 1287 */ 1288 if (old_crtc_state->async_flip_planes & ~new_crtc_state->async_flip_planes) 1289 intel_crtc_async_flip_disable_wa(state, crtc); 1290 } 1291 1292 static void intel_crtc_disable_planes(struct intel_atomic_state *state, 1293 struct intel_crtc *crtc) 1294 { 1295 struct intel_display *display = to_intel_display(state); 1296 const struct intel_crtc_state *new_crtc_state = 1297 intel_atomic_get_new_crtc_state(state, crtc); 1298 unsigned int update_mask = new_crtc_state->update_planes; 1299 const struct intel_plane_state *old_plane_state; 1300 struct intel_plane *plane; 1301 unsigned fb_bits = 0; 1302 int i; 1303 1304 intel_crtc_dpms_overlay_disable(crtc); 1305 1306 for_each_old_intel_plane_in_state(state, plane, old_plane_state, i) { 1307 if (crtc->pipe != plane->pipe || 1308 !(update_mask & BIT(plane->id))) 1309 continue; 1310 1311 intel_plane_disable_arm(NULL, plane, new_crtc_state); 1312 1313 if (old_plane_state->uapi.visible) 1314 fb_bits |= plane->frontbuffer_bit; 1315 } 1316 1317 intel_frontbuffer_flip(display, fb_bits); 1318 } 1319 1320 static void intel_encoders_update_prepare(struct intel_atomic_state *state) 1321 { 1322 struct intel_display *display = to_intel_display(state); 1323 struct intel_crtc_state *new_crtc_state, *old_crtc_state; 1324 struct intel_crtc *crtc; 1325 int i; 1326 1327 /* 1328 * Make sure the DPLL state is up-to-date for fastset TypeC ports after non-blocking commits. 1329 * TODO: Update the DPLL state for all cases in the encoder->update_prepare() hook. 1330 */ 1331 if (display->dpll.mgr) { 1332 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { 1333 if (intel_crtc_needs_modeset(new_crtc_state)) 1334 continue; 1335 1336 new_crtc_state->intel_dpll = old_crtc_state->intel_dpll; 1337 new_crtc_state->dpll_hw_state = old_crtc_state->dpll_hw_state; 1338 } 1339 } 1340 } 1341 1342 static void intel_encoders_pre_pll_enable(struct intel_atomic_state *state, 1343 struct intel_crtc *crtc) 1344 { 1345 const struct intel_crtc_state *crtc_state = 1346 intel_atomic_get_new_crtc_state(state, crtc); 1347 const struct drm_connector_state *conn_state; 1348 struct drm_connector *conn; 1349 int i; 1350 1351 for_each_new_connector_in_state(&state->base, conn, conn_state, i) { 1352 struct intel_encoder *encoder = 1353 to_intel_encoder(conn_state->best_encoder); 1354 1355 if (conn_state->crtc != &crtc->base) 1356 continue; 1357 1358 if (encoder->pre_pll_enable) 1359 encoder->pre_pll_enable(state, encoder, 1360 crtc_state, conn_state); 1361 } 1362 } 1363 1364 static void intel_encoders_pre_enable(struct intel_atomic_state *state, 1365 struct intel_crtc *crtc) 1366 { 1367 const struct intel_crtc_state *crtc_state = 1368 intel_atomic_get_new_crtc_state(state, crtc); 1369 const struct drm_connector_state *conn_state; 1370 struct drm_connector *conn; 1371 int i; 1372 1373 for_each_new_connector_in_state(&state->base, conn, conn_state, i) { 1374 struct intel_encoder *encoder = 1375 to_intel_encoder(conn_state->best_encoder); 1376 1377 if (conn_state->crtc != &crtc->base) 1378 continue; 1379 1380 if (encoder->pre_enable) 1381 encoder->pre_enable(state, encoder, 1382 crtc_state, conn_state); 1383 } 1384 } 1385 1386 static void intel_encoders_enable(struct intel_atomic_state *state, 1387 struct intel_crtc *crtc) 1388 { 1389 const struct intel_crtc_state *crtc_state = 1390 intel_atomic_get_new_crtc_state(state, crtc); 1391 const struct drm_connector_state *conn_state; 1392 struct drm_connector *conn; 1393 int i; 1394 1395 for_each_new_connector_in_state(&state->base, conn, conn_state, i) { 1396 struct intel_encoder *encoder = 1397 to_intel_encoder(conn_state->best_encoder); 1398 1399 if (conn_state->crtc != &crtc->base) 1400 continue; 1401 1402 if (encoder->enable) 1403 encoder->enable(state, encoder, 1404 crtc_state, conn_state); 1405 intel_opregion_notify_encoder(encoder, true); 1406 } 1407 } 1408 1409 static void intel_encoders_disable(struct intel_atomic_state *state, 1410 struct intel_crtc *crtc) 1411 { 1412 const struct intel_crtc_state *old_crtc_state = 1413 intel_atomic_get_old_crtc_state(state, crtc); 1414 const struct drm_connector_state *old_conn_state; 1415 struct drm_connector *conn; 1416 int i; 1417 1418 for_each_old_connector_in_state(&state->base, conn, old_conn_state, i) { 1419 struct intel_encoder *encoder = 1420 to_intel_encoder(old_conn_state->best_encoder); 1421 1422 if (old_conn_state->crtc != &crtc->base) 1423 continue; 1424 1425 intel_opregion_notify_encoder(encoder, false); 1426 if (encoder->disable) 1427 encoder->disable(state, encoder, 1428 old_crtc_state, old_conn_state); 1429 } 1430 } 1431 1432 static void intel_encoders_post_disable(struct intel_atomic_state *state, 1433 struct intel_crtc *crtc) 1434 { 1435 const struct intel_crtc_state *old_crtc_state = 1436 intel_atomic_get_old_crtc_state(state, crtc); 1437 const struct drm_connector_state *old_conn_state; 1438 struct drm_connector *conn; 1439 int i; 1440 1441 for_each_old_connector_in_state(&state->base, conn, old_conn_state, i) { 1442 struct intel_encoder *encoder = 1443 to_intel_encoder(old_conn_state->best_encoder); 1444 1445 if (old_conn_state->crtc != &crtc->base) 1446 continue; 1447 1448 if (encoder->post_disable) 1449 encoder->post_disable(state, encoder, 1450 old_crtc_state, old_conn_state); 1451 } 1452 } 1453 1454 static void intel_encoders_post_pll_disable(struct intel_atomic_state *state, 1455 struct intel_crtc *crtc) 1456 { 1457 const struct intel_crtc_state *old_crtc_state = 1458 intel_atomic_get_old_crtc_state(state, crtc); 1459 const struct drm_connector_state *old_conn_state; 1460 struct drm_connector *conn; 1461 int i; 1462 1463 for_each_old_connector_in_state(&state->base, conn, old_conn_state, i) { 1464 struct intel_encoder *encoder = 1465 to_intel_encoder(old_conn_state->best_encoder); 1466 1467 if (old_conn_state->crtc != &crtc->base) 1468 continue; 1469 1470 if (encoder->post_pll_disable) 1471 encoder->post_pll_disable(state, encoder, 1472 old_crtc_state, old_conn_state); 1473 } 1474 } 1475 1476 static void intel_encoders_update_pipe(struct intel_atomic_state *state, 1477 struct intel_crtc *crtc) 1478 { 1479 const struct intel_crtc_state *crtc_state = 1480 intel_atomic_get_new_crtc_state(state, crtc); 1481 const struct drm_connector_state *conn_state; 1482 struct drm_connector *conn; 1483 int i; 1484 1485 for_each_new_connector_in_state(&state->base, conn, conn_state, i) { 1486 struct intel_encoder *encoder = 1487 to_intel_encoder(conn_state->best_encoder); 1488 1489 if (conn_state->crtc != &crtc->base) 1490 continue; 1491 1492 if (encoder->update_pipe) 1493 encoder->update_pipe(state, encoder, 1494 crtc_state, conn_state); 1495 } 1496 } 1497 1498 static void ilk_configure_cpu_transcoder(const struct intel_crtc_state *crtc_state) 1499 { 1500 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 1501 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 1502 1503 if (crtc_state->has_pch_encoder) { 1504 intel_cpu_transcoder_set_m1_n1(crtc, cpu_transcoder, 1505 &crtc_state->fdi_m_n); 1506 } else if (intel_crtc_has_dp_encoder(crtc_state)) { 1507 intel_cpu_transcoder_set_m1_n1(crtc, cpu_transcoder, 1508 &crtc_state->dp_m_n); 1509 intel_cpu_transcoder_set_m2_n2(crtc, cpu_transcoder, 1510 &crtc_state->dp_m2_n2); 1511 } 1512 1513 intel_set_transcoder_timings(crtc_state); 1514 1515 ilk_set_pipeconf(crtc_state); 1516 } 1517 1518 static void ilk_crtc_enable(struct intel_atomic_state *state, 1519 struct intel_crtc *crtc) 1520 { 1521 struct intel_display *display = to_intel_display(crtc); 1522 const struct intel_crtc_state *new_crtc_state = 1523 intel_atomic_get_new_crtc_state(state, crtc); 1524 enum pipe pipe = crtc->pipe; 1525 1526 if (drm_WARN_ON(display->drm, crtc->active)) 1527 return; 1528 1529 /* 1530 * Sometimes spurious CPU pipe underruns happen during FDI 1531 * training, at least with VGA+HDMI cloning. Suppress them. 1532 * 1533 * On ILK we get an occasional spurious CPU pipe underruns 1534 * between eDP port A enable and vdd enable. Also PCH port 1535 * enable seems to result in the occasional CPU pipe underrun. 1536 * 1537 * Spurious PCH underruns also occur during PCH enabling. 1538 */ 1539 intel_set_cpu_fifo_underrun_reporting(display, pipe, false); 1540 intel_set_pch_fifo_underrun_reporting(display, pipe, false); 1541 1542 ilk_configure_cpu_transcoder(new_crtc_state); 1543 1544 intel_set_pipe_src_size(new_crtc_state); 1545 1546 crtc->active = true; 1547 1548 intel_encoders_pre_enable(state, crtc); 1549 1550 if (new_crtc_state->has_pch_encoder) { 1551 ilk_pch_pre_enable(state, crtc); 1552 } else { 1553 assert_fdi_tx_disabled(display, pipe); 1554 assert_fdi_rx_disabled(display, pipe); 1555 } 1556 1557 ilk_pfit_enable(new_crtc_state); 1558 1559 /* 1560 * On ILK+ LUT must be loaded before the pipe is running but with 1561 * clocks enabled 1562 */ 1563 intel_color_modeset(new_crtc_state); 1564 1565 intel_initial_watermarks(state, crtc); 1566 intel_enable_transcoder(new_crtc_state); 1567 1568 if (new_crtc_state->has_pch_encoder) 1569 ilk_pch_enable(state, crtc); 1570 1571 intel_crtc_vblank_on(new_crtc_state); 1572 1573 intel_encoders_enable(state, crtc); 1574 1575 if (HAS_PCH_CPT(display)) 1576 intel_wait_for_pipe_scanline_moving(crtc); 1577 1578 /* 1579 * Must wait for vblank to avoid spurious PCH FIFO underruns. 1580 * And a second vblank wait is needed at least on ILK with 1581 * some interlaced HDMI modes. Let's do the double wait always 1582 * in case there are more corner cases we don't know about. 1583 */ 1584 if (new_crtc_state->has_pch_encoder) { 1585 intel_crtc_wait_for_next_vblank(crtc); 1586 intel_crtc_wait_for_next_vblank(crtc); 1587 } 1588 intel_set_cpu_fifo_underrun_reporting(display, pipe, true); 1589 intel_set_pch_fifo_underrun_reporting(display, pipe, true); 1590 } 1591 1592 /* Display WA #1180: WaDisableScalarClockGating: glk */ 1593 static bool glk_need_scaler_clock_gating_wa(const struct intel_crtc_state *crtc_state) 1594 { 1595 struct intel_display *display = to_intel_display(crtc_state); 1596 1597 return DISPLAY_VER(display) == 10 && crtc_state->pch_pfit.enabled; 1598 } 1599 1600 static void glk_pipe_scaler_clock_gating_wa(struct intel_crtc *crtc, bool enable) 1601 { 1602 struct intel_display *display = to_intel_display(crtc); 1603 u32 mask = DPF_GATING_DIS | DPF_RAM_GATING_DIS | DPFR_GATING_DIS; 1604 1605 intel_de_rmw(display, CLKGATE_DIS_PSL(crtc->pipe), 1606 mask, enable ? mask : 0); 1607 } 1608 1609 static void hsw_set_linetime_wm(const struct intel_crtc_state *crtc_state) 1610 { 1611 struct intel_display *display = to_intel_display(crtc_state); 1612 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 1613 1614 intel_de_write(display, WM_LINETIME(crtc->pipe), 1615 HSW_LINETIME(crtc_state->linetime) | 1616 HSW_IPS_LINETIME(crtc_state->ips_linetime)); 1617 } 1618 1619 static void hsw_set_frame_start_delay(const struct intel_crtc_state *crtc_state) 1620 { 1621 struct intel_display *display = to_intel_display(crtc_state); 1622 1623 intel_de_rmw(display, CHICKEN_TRANS(display, crtc_state->cpu_transcoder), 1624 HSW_FRAME_START_DELAY_MASK, 1625 HSW_FRAME_START_DELAY(crtc_state->framestart_delay - 1)); 1626 } 1627 1628 static void hsw_configure_cpu_transcoder(const struct intel_crtc_state *crtc_state) 1629 { 1630 struct intel_display *display = to_intel_display(crtc_state); 1631 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 1632 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 1633 1634 if (crtc_state->has_pch_encoder) { 1635 intel_cpu_transcoder_set_m1_n1(crtc, cpu_transcoder, 1636 &crtc_state->fdi_m_n); 1637 } else if (intel_crtc_has_dp_encoder(crtc_state)) { 1638 intel_cpu_transcoder_set_m1_n1(crtc, cpu_transcoder, 1639 &crtc_state->dp_m_n); 1640 intel_cpu_transcoder_set_m2_n2(crtc, cpu_transcoder, 1641 &crtc_state->dp_m2_n2); 1642 } 1643 1644 intel_set_transcoder_timings(crtc_state); 1645 if (HAS_VRR(display)) 1646 intel_vrr_set_transcoder_timings(crtc_state); 1647 1648 if (cpu_transcoder != TRANSCODER_EDP) 1649 intel_de_write(display, TRANS_MULT(display, cpu_transcoder), 1650 crtc_state->pixel_multiplier - 1); 1651 1652 hsw_set_frame_start_delay(crtc_state); 1653 1654 hsw_set_transconf(crtc_state); 1655 } 1656 1657 static void hsw_crtc_enable(struct intel_atomic_state *state, 1658 struct intel_crtc *crtc) 1659 { 1660 struct intel_display *display = to_intel_display(state); 1661 const struct intel_crtc_state *new_crtc_state = 1662 intel_atomic_get_new_crtc_state(state, crtc); 1663 enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder; 1664 struct intel_crtc *pipe_crtc; 1665 int i; 1666 1667 if (drm_WARN_ON(display->drm, crtc->active)) 1668 return; 1669 for_each_pipe_crtc_modeset_enable(display, pipe_crtc, new_crtc_state, i) { 1670 const struct intel_crtc_state *new_pipe_crtc_state = 1671 intel_atomic_get_new_crtc_state(state, pipe_crtc); 1672 1673 intel_dmc_enable_pipe(new_pipe_crtc_state); 1674 } 1675 1676 intel_encoders_pre_pll_enable(state, crtc); 1677 1678 if (new_crtc_state->intel_dpll) 1679 intel_dpll_enable(new_crtc_state); 1680 1681 intel_encoders_pre_enable(state, crtc); 1682 1683 for_each_pipe_crtc_modeset_enable(display, pipe_crtc, new_crtc_state, i) { 1684 const struct intel_crtc_state *pipe_crtc_state = 1685 intel_atomic_get_new_crtc_state(state, pipe_crtc); 1686 1687 intel_dsc_enable(pipe_crtc_state); 1688 1689 if (HAS_UNCOMPRESSED_JOINER(display)) 1690 intel_uncompressed_joiner_enable(pipe_crtc_state); 1691 1692 intel_set_pipe_src_size(pipe_crtc_state); 1693 1694 if (DISPLAY_VER(display) >= 9 || display->platform.broadwell) 1695 bdw_set_pipe_misc(NULL, pipe_crtc_state); 1696 } 1697 1698 if (!transcoder_is_dsi(cpu_transcoder)) 1699 hsw_configure_cpu_transcoder(new_crtc_state); 1700 1701 for_each_pipe_crtc_modeset_enable(display, pipe_crtc, new_crtc_state, i) { 1702 const struct intel_crtc_state *pipe_crtc_state = 1703 intel_atomic_get_new_crtc_state(state, pipe_crtc); 1704 1705 pipe_crtc->active = true; 1706 1707 if (glk_need_scaler_clock_gating_wa(pipe_crtc_state)) 1708 glk_pipe_scaler_clock_gating_wa(pipe_crtc, true); 1709 1710 if (DISPLAY_VER(display) >= 9) 1711 skl_pfit_enable(pipe_crtc_state); 1712 else 1713 ilk_pfit_enable(pipe_crtc_state); 1714 1715 /* 1716 * On ILK+ LUT must be loaded before the pipe is running but with 1717 * clocks enabled 1718 */ 1719 intel_color_modeset(pipe_crtc_state); 1720 1721 hsw_set_linetime_wm(pipe_crtc_state); 1722 1723 if (DISPLAY_VER(display) >= 11) 1724 icl_set_pipe_chicken(pipe_crtc_state); 1725 1726 intel_initial_watermarks(state, pipe_crtc); 1727 } 1728 1729 intel_encoders_enable(state, crtc); 1730 1731 for_each_pipe_crtc_modeset_enable(display, pipe_crtc, new_crtc_state, i) { 1732 const struct intel_crtc_state *pipe_crtc_state = 1733 intel_atomic_get_new_crtc_state(state, pipe_crtc); 1734 enum pipe hsw_workaround_pipe; 1735 1736 if (glk_need_scaler_clock_gating_wa(pipe_crtc_state)) { 1737 intel_crtc_wait_for_next_vblank(pipe_crtc); 1738 glk_pipe_scaler_clock_gating_wa(pipe_crtc, false); 1739 } 1740 1741 /* 1742 * If we change the relative order between pipe/planes 1743 * enabling, we need to change the workaround. 1744 */ 1745 hsw_workaround_pipe = pipe_crtc_state->hsw_workaround_pipe; 1746 if (display->platform.haswell && hsw_workaround_pipe != INVALID_PIPE) { 1747 struct intel_crtc *wa_crtc = 1748 intel_crtc_for_pipe(display, hsw_workaround_pipe); 1749 1750 intel_crtc_wait_for_next_vblank(wa_crtc); 1751 intel_crtc_wait_for_next_vblank(wa_crtc); 1752 } 1753 } 1754 } 1755 1756 static void ilk_crtc_disable(struct intel_atomic_state *state, 1757 struct intel_crtc *crtc) 1758 { 1759 struct intel_display *display = to_intel_display(crtc); 1760 const struct intel_crtc_state *old_crtc_state = 1761 intel_atomic_get_old_crtc_state(state, crtc); 1762 enum pipe pipe = crtc->pipe; 1763 1764 /* 1765 * Sometimes spurious CPU pipe underruns happen when the 1766 * pipe is already disabled, but FDI RX/TX is still enabled. 1767 * Happens at least with VGA+HDMI cloning. Suppress them. 1768 */ 1769 intel_set_cpu_fifo_underrun_reporting(display, pipe, false); 1770 intel_set_pch_fifo_underrun_reporting(display, pipe, false); 1771 1772 intel_encoders_disable(state, crtc); 1773 1774 intel_crtc_vblank_off(old_crtc_state); 1775 1776 intel_disable_transcoder(old_crtc_state); 1777 1778 ilk_pfit_disable(old_crtc_state); 1779 1780 if (old_crtc_state->has_pch_encoder) 1781 ilk_pch_disable(state, crtc); 1782 1783 intel_encoders_post_disable(state, crtc); 1784 1785 if (old_crtc_state->has_pch_encoder) 1786 ilk_pch_post_disable(state, crtc); 1787 1788 intel_set_cpu_fifo_underrun_reporting(display, pipe, true); 1789 intel_set_pch_fifo_underrun_reporting(display, pipe, true); 1790 } 1791 1792 static void hsw_crtc_disable(struct intel_atomic_state *state, 1793 struct intel_crtc *crtc) 1794 { 1795 struct intel_display *display = to_intel_display(state); 1796 const struct intel_crtc_state *old_crtc_state = 1797 intel_atomic_get_old_crtc_state(state, crtc); 1798 struct intel_crtc *pipe_crtc; 1799 int i; 1800 1801 /* 1802 * FIXME collapse everything to one hook. 1803 * Need care with mst->ddi interactions. 1804 */ 1805 intel_encoders_disable(state, crtc); 1806 intel_encoders_post_disable(state, crtc); 1807 1808 intel_dpll_disable(old_crtc_state); 1809 1810 intel_encoders_post_pll_disable(state, crtc); 1811 1812 for_each_pipe_crtc_modeset_disable(display, pipe_crtc, old_crtc_state, i) { 1813 const struct intel_crtc_state *old_pipe_crtc_state = 1814 intel_atomic_get_old_crtc_state(state, pipe_crtc); 1815 1816 intel_dmc_disable_pipe(old_pipe_crtc_state); 1817 } 1818 } 1819 1820 /* Prefer intel_encoder_is_combo() */ 1821 bool intel_phy_is_combo(struct intel_display *display, enum phy phy) 1822 { 1823 if (phy == PHY_NONE) 1824 return false; 1825 else if (display->platform.alderlake_s) 1826 return phy <= PHY_E; 1827 else if (display->platform.dg1 || display->platform.rocketlake) 1828 return phy <= PHY_D; 1829 else if (display->platform.jasperlake || display->platform.elkhartlake) 1830 return phy <= PHY_C; 1831 else if (display->platform.alderlake_p || IS_DISPLAY_VER(display, 11, 12)) 1832 return phy <= PHY_B; 1833 else 1834 /* 1835 * DG2 outputs labelled as "combo PHY" in the bspec use 1836 * SNPS PHYs with completely different programming, 1837 * hence we always return false here. 1838 */ 1839 return false; 1840 } 1841 1842 /* Prefer intel_encoder_is_tc() */ 1843 bool intel_phy_is_tc(struct intel_display *display, enum phy phy) 1844 { 1845 /* 1846 * Discrete GPU phy's are not attached to FIA's to support TC 1847 * subsystem Legacy or non-legacy, and only support native DP/HDMI 1848 */ 1849 if (display->platform.dgfx) 1850 return false; 1851 1852 if (DISPLAY_VER(display) >= 13) 1853 return phy >= PHY_F && phy <= PHY_I; 1854 else if (display->platform.tigerlake) 1855 return phy >= PHY_D && phy <= PHY_I; 1856 else if (display->platform.icelake) 1857 return phy >= PHY_C && phy <= PHY_F; 1858 1859 return false; 1860 } 1861 1862 /* Prefer intel_encoder_is_snps() */ 1863 bool intel_phy_is_snps(struct intel_display *display, enum phy phy) 1864 { 1865 /* 1866 * For DG2, and for DG2 only, all four "combo" ports and the TC1 port 1867 * (PHY E) use Synopsis PHYs. See intel_phy_is_tc(). 1868 */ 1869 return display->platform.dg2 && phy > PHY_NONE && phy <= PHY_E; 1870 } 1871 1872 /* Prefer intel_encoder_to_phy() */ 1873 enum phy intel_port_to_phy(struct intel_display *display, enum port port) 1874 { 1875 if (DISPLAY_VER(display) >= 13 && port >= PORT_D_XELPD) 1876 return PHY_D + port - PORT_D_XELPD; 1877 else if (DISPLAY_VER(display) >= 13 && port >= PORT_TC1) 1878 return PHY_F + port - PORT_TC1; 1879 else if (display->platform.alderlake_s && port >= PORT_TC1) 1880 return PHY_B + port - PORT_TC1; 1881 else if ((display->platform.dg1 || display->platform.rocketlake) && port >= PORT_TC1) 1882 return PHY_C + port - PORT_TC1; 1883 else if ((display->platform.jasperlake || display->platform.elkhartlake) && 1884 port == PORT_D) 1885 return PHY_A; 1886 1887 return PHY_A + port - PORT_A; 1888 } 1889 1890 /* Prefer intel_encoder_to_tc() */ 1891 enum tc_port intel_port_to_tc(struct intel_display *display, enum port port) 1892 { 1893 if (!intel_phy_is_tc(display, intel_port_to_phy(display, port))) 1894 return TC_PORT_NONE; 1895 1896 if (DISPLAY_VER(display) >= 12) 1897 return TC_PORT_1 + port - PORT_TC1; 1898 else 1899 return TC_PORT_1 + port - PORT_C; 1900 } 1901 1902 enum phy intel_encoder_to_phy(struct intel_encoder *encoder) 1903 { 1904 struct intel_display *display = to_intel_display(encoder); 1905 1906 return intel_port_to_phy(display, encoder->port); 1907 } 1908 1909 bool intel_encoder_is_combo(struct intel_encoder *encoder) 1910 { 1911 struct intel_display *display = to_intel_display(encoder); 1912 1913 return intel_phy_is_combo(display, intel_encoder_to_phy(encoder)); 1914 } 1915 1916 bool intel_encoder_is_snps(struct intel_encoder *encoder) 1917 { 1918 struct intel_display *display = to_intel_display(encoder); 1919 1920 return intel_phy_is_snps(display, intel_encoder_to_phy(encoder)); 1921 } 1922 1923 bool intel_encoder_is_tc(struct intel_encoder *encoder) 1924 { 1925 struct intel_display *display = to_intel_display(encoder); 1926 1927 return intel_phy_is_tc(display, intel_encoder_to_phy(encoder)); 1928 } 1929 1930 enum tc_port intel_encoder_to_tc(struct intel_encoder *encoder) 1931 { 1932 struct intel_display *display = to_intel_display(encoder); 1933 1934 return intel_port_to_tc(display, encoder->port); 1935 } 1936 1937 enum intel_display_power_domain 1938 intel_aux_power_domain(struct intel_digital_port *dig_port) 1939 { 1940 struct intel_display *display = to_intel_display(dig_port); 1941 1942 if (intel_tc_port_in_tbt_alt_mode(dig_port)) 1943 return intel_display_power_tbt_aux_domain(display, dig_port->aux_ch); 1944 1945 return intel_display_power_legacy_aux_domain(display, dig_port->aux_ch); 1946 } 1947 1948 static void get_crtc_power_domains(struct intel_crtc_state *crtc_state, 1949 struct intel_power_domain_mask *mask) 1950 { 1951 struct intel_display *display = to_intel_display(crtc_state); 1952 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 1953 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 1954 struct drm_encoder *encoder; 1955 enum pipe pipe = crtc->pipe; 1956 1957 bitmap_zero(mask->bits, POWER_DOMAIN_NUM); 1958 1959 if (!crtc_state->hw.active) 1960 return; 1961 1962 set_bit(POWER_DOMAIN_PIPE(pipe), mask->bits); 1963 set_bit(POWER_DOMAIN_TRANSCODER(cpu_transcoder), mask->bits); 1964 if (crtc_state->pch_pfit.enabled || 1965 crtc_state->pch_pfit.force_thru) 1966 set_bit(POWER_DOMAIN_PIPE_PANEL_FITTER(pipe), mask->bits); 1967 1968 drm_for_each_encoder_mask(encoder, display->drm, 1969 crtc_state->uapi.encoder_mask) { 1970 struct intel_encoder *intel_encoder = to_intel_encoder(encoder); 1971 1972 set_bit(intel_encoder->power_domain, mask->bits); 1973 } 1974 1975 if (HAS_DDI(display) && crtc_state->has_audio) 1976 set_bit(POWER_DOMAIN_AUDIO_MMIO, mask->bits); 1977 1978 if (crtc_state->intel_dpll) 1979 set_bit(POWER_DOMAIN_DISPLAY_CORE, mask->bits); 1980 1981 if (crtc_state->dsc.compression_enable) 1982 set_bit(intel_dsc_power_domain(crtc, cpu_transcoder), mask->bits); 1983 } 1984 1985 void intel_modeset_get_crtc_power_domains(struct intel_crtc_state *crtc_state, 1986 struct intel_power_domain_mask *old_domains) 1987 { 1988 struct intel_display *display = to_intel_display(crtc_state); 1989 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 1990 enum intel_display_power_domain domain; 1991 struct intel_power_domain_mask domains, new_domains; 1992 1993 get_crtc_power_domains(crtc_state, &domains); 1994 1995 bitmap_andnot(new_domains.bits, 1996 domains.bits, 1997 crtc->enabled_power_domains.mask.bits, 1998 POWER_DOMAIN_NUM); 1999 bitmap_andnot(old_domains->bits, 2000 crtc->enabled_power_domains.mask.bits, 2001 domains.bits, 2002 POWER_DOMAIN_NUM); 2003 2004 for_each_power_domain(domain, &new_domains) 2005 intel_display_power_get_in_set(display, 2006 &crtc->enabled_power_domains, 2007 domain); 2008 } 2009 2010 void intel_modeset_put_crtc_power_domains(struct intel_crtc *crtc, 2011 struct intel_power_domain_mask *domains) 2012 { 2013 struct intel_display *display = to_intel_display(crtc); 2014 2015 intel_display_power_put_mask_in_set(display, 2016 &crtc->enabled_power_domains, 2017 domains); 2018 } 2019 2020 static void i9xx_configure_cpu_transcoder(const struct intel_crtc_state *crtc_state) 2021 { 2022 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 2023 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 2024 2025 if (intel_crtc_has_dp_encoder(crtc_state)) { 2026 intel_cpu_transcoder_set_m1_n1(crtc, cpu_transcoder, 2027 &crtc_state->dp_m_n); 2028 intel_cpu_transcoder_set_m2_n2(crtc, cpu_transcoder, 2029 &crtc_state->dp_m2_n2); 2030 } 2031 2032 intel_set_transcoder_timings(crtc_state); 2033 2034 i9xx_set_pipeconf(crtc_state); 2035 } 2036 2037 static void valleyview_crtc_enable(struct intel_atomic_state *state, 2038 struct intel_crtc *crtc) 2039 { 2040 struct intel_display *display = to_intel_display(crtc); 2041 const struct intel_crtc_state *new_crtc_state = 2042 intel_atomic_get_new_crtc_state(state, crtc); 2043 enum pipe pipe = crtc->pipe; 2044 2045 if (drm_WARN_ON(display->drm, crtc->active)) 2046 return; 2047 2048 i9xx_configure_cpu_transcoder(new_crtc_state); 2049 2050 intel_set_pipe_src_size(new_crtc_state); 2051 2052 intel_de_write(display, VLV_PIPE_MSA_MISC(display, pipe), 0); 2053 2054 if (display->platform.cherryview && pipe == PIPE_B) { 2055 intel_de_write(display, CHV_BLEND(display, pipe), 2056 CHV_BLEND_LEGACY); 2057 intel_de_write(display, CHV_CANVAS(display, pipe), 0); 2058 } 2059 2060 crtc->active = true; 2061 2062 intel_set_cpu_fifo_underrun_reporting(display, pipe, true); 2063 2064 intel_encoders_pre_pll_enable(state, crtc); 2065 2066 if (display->platform.cherryview) 2067 chv_enable_pll(new_crtc_state); 2068 else 2069 vlv_enable_pll(new_crtc_state); 2070 2071 intel_encoders_pre_enable(state, crtc); 2072 2073 i9xx_pfit_enable(new_crtc_state); 2074 2075 intel_color_modeset(new_crtc_state); 2076 2077 intel_initial_watermarks(state, crtc); 2078 intel_enable_transcoder(new_crtc_state); 2079 2080 intel_crtc_vblank_on(new_crtc_state); 2081 2082 intel_encoders_enable(state, crtc); 2083 } 2084 2085 static void i9xx_crtc_enable(struct intel_atomic_state *state, 2086 struct intel_crtc *crtc) 2087 { 2088 struct intel_display *display = to_intel_display(crtc); 2089 const struct intel_crtc_state *new_crtc_state = 2090 intel_atomic_get_new_crtc_state(state, crtc); 2091 enum pipe pipe = crtc->pipe; 2092 2093 if (drm_WARN_ON(display->drm, crtc->active)) 2094 return; 2095 2096 i9xx_configure_cpu_transcoder(new_crtc_state); 2097 2098 intel_set_pipe_src_size(new_crtc_state); 2099 2100 crtc->active = true; 2101 2102 if (DISPLAY_VER(display) != 2) 2103 intel_set_cpu_fifo_underrun_reporting(display, pipe, true); 2104 2105 intel_encoders_pre_enable(state, crtc); 2106 2107 i9xx_enable_pll(new_crtc_state); 2108 2109 i9xx_pfit_enable(new_crtc_state); 2110 2111 intel_color_modeset(new_crtc_state); 2112 2113 if (!intel_initial_watermarks(state, crtc)) 2114 intel_update_watermarks(display); 2115 intel_enable_transcoder(new_crtc_state); 2116 2117 intel_crtc_vblank_on(new_crtc_state); 2118 2119 intel_encoders_enable(state, crtc); 2120 2121 /* prevents spurious underruns */ 2122 if (DISPLAY_VER(display) == 2) 2123 intel_crtc_wait_for_next_vblank(crtc); 2124 } 2125 2126 static void i9xx_crtc_disable(struct intel_atomic_state *state, 2127 struct intel_crtc *crtc) 2128 { 2129 struct intel_display *display = to_intel_display(state); 2130 struct intel_crtc_state *old_crtc_state = 2131 intel_atomic_get_old_crtc_state(state, crtc); 2132 enum pipe pipe = crtc->pipe; 2133 2134 /* 2135 * On gen2 planes are double buffered but the pipe isn't, so we must 2136 * wait for planes to fully turn off before disabling the pipe. 2137 */ 2138 if (DISPLAY_VER(display) == 2) 2139 intel_crtc_wait_for_next_vblank(crtc); 2140 2141 intel_encoders_disable(state, crtc); 2142 2143 intel_crtc_vblank_off(old_crtc_state); 2144 2145 intel_disable_transcoder(old_crtc_state); 2146 2147 i9xx_pfit_disable(old_crtc_state); 2148 2149 intel_encoders_post_disable(state, crtc); 2150 2151 if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI)) { 2152 if (display->platform.cherryview) 2153 chv_disable_pll(display, pipe); 2154 else if (display->platform.valleyview) 2155 vlv_disable_pll(display, pipe); 2156 else 2157 i9xx_disable_pll(old_crtc_state); 2158 } 2159 2160 intel_encoders_post_pll_disable(state, crtc); 2161 2162 if (DISPLAY_VER(display) != 2) 2163 intel_set_cpu_fifo_underrun_reporting(display, pipe, false); 2164 2165 if (!display->funcs.wm->initial_watermarks) 2166 intel_update_watermarks(display); 2167 2168 /* clock the pipe down to 640x480@60 to potentially save power */ 2169 if (display->platform.i830) 2170 i830_enable_pipe(display, pipe); 2171 } 2172 2173 void intel_encoder_destroy(struct drm_encoder *encoder) 2174 { 2175 struct intel_encoder *intel_encoder = to_intel_encoder(encoder); 2176 2177 drm_encoder_cleanup(encoder); 2178 kfree(intel_encoder); 2179 } 2180 2181 static bool intel_crtc_supports_double_wide(const struct intel_crtc *crtc) 2182 { 2183 struct intel_display *display = to_intel_display(crtc); 2184 2185 /* GDG double wide on either pipe, otherwise pipe A only */ 2186 return HAS_DOUBLE_WIDE(display) && 2187 (crtc->pipe == PIPE_A || display->platform.i915g); 2188 } 2189 2190 static u32 ilk_pipe_pixel_rate(const struct intel_crtc_state *crtc_state) 2191 { 2192 u32 pixel_rate = crtc_state->hw.pipe_mode.crtc_clock; 2193 struct drm_rect src; 2194 2195 /* 2196 * We only use IF-ID interlacing. If we ever use 2197 * PF-ID we'll need to adjust the pixel_rate here. 2198 */ 2199 2200 if (!crtc_state->pch_pfit.enabled) 2201 return pixel_rate; 2202 2203 drm_rect_init(&src, 0, 0, 2204 drm_rect_width(&crtc_state->pipe_src) << 16, 2205 drm_rect_height(&crtc_state->pipe_src) << 16); 2206 2207 return intel_adjusted_rate(&src, &crtc_state->pch_pfit.dst, 2208 pixel_rate); 2209 } 2210 2211 static void intel_mode_from_crtc_timings(struct drm_display_mode *mode, 2212 const struct drm_display_mode *timings) 2213 { 2214 mode->hdisplay = timings->crtc_hdisplay; 2215 mode->htotal = timings->crtc_htotal; 2216 mode->hsync_start = timings->crtc_hsync_start; 2217 mode->hsync_end = timings->crtc_hsync_end; 2218 2219 mode->vdisplay = timings->crtc_vdisplay; 2220 mode->vtotal = timings->crtc_vtotal; 2221 mode->vsync_start = timings->crtc_vsync_start; 2222 mode->vsync_end = timings->crtc_vsync_end; 2223 2224 mode->flags = timings->flags; 2225 mode->type = DRM_MODE_TYPE_DRIVER; 2226 2227 mode->clock = timings->crtc_clock; 2228 2229 drm_mode_set_name(mode); 2230 } 2231 2232 static void intel_crtc_compute_pixel_rate(struct intel_crtc_state *crtc_state) 2233 { 2234 struct intel_display *display = to_intel_display(crtc_state); 2235 2236 if (HAS_GMCH(display)) 2237 /* FIXME calculate proper pipe pixel rate for GMCH pfit */ 2238 crtc_state->pixel_rate = 2239 crtc_state->hw.pipe_mode.crtc_clock; 2240 else 2241 crtc_state->pixel_rate = 2242 ilk_pipe_pixel_rate(crtc_state); 2243 } 2244 2245 static void intel_joiner_adjust_timings(const struct intel_crtc_state *crtc_state, 2246 struct drm_display_mode *mode) 2247 { 2248 int num_pipes = intel_crtc_num_joined_pipes(crtc_state); 2249 2250 if (num_pipes == 1) 2251 return; 2252 2253 mode->crtc_clock /= num_pipes; 2254 mode->crtc_hdisplay /= num_pipes; 2255 mode->crtc_hblank_start /= num_pipes; 2256 mode->crtc_hblank_end /= num_pipes; 2257 mode->crtc_hsync_start /= num_pipes; 2258 mode->crtc_hsync_end /= num_pipes; 2259 mode->crtc_htotal /= num_pipes; 2260 } 2261 2262 static void intel_splitter_adjust_timings(const struct intel_crtc_state *crtc_state, 2263 struct drm_display_mode *mode) 2264 { 2265 int overlap = crtc_state->splitter.pixel_overlap; 2266 int n = crtc_state->splitter.link_count; 2267 2268 if (!crtc_state->splitter.enable) 2269 return; 2270 2271 /* 2272 * eDP MSO uses segment timings from EDID for transcoder 2273 * timings, but full mode for everything else. 2274 * 2275 * h_full = (h_segment - pixel_overlap) * link_count 2276 */ 2277 mode->crtc_hdisplay = (mode->crtc_hdisplay - overlap) * n; 2278 mode->crtc_hblank_start = (mode->crtc_hblank_start - overlap) * n; 2279 mode->crtc_hblank_end = (mode->crtc_hblank_end - overlap) * n; 2280 mode->crtc_hsync_start = (mode->crtc_hsync_start - overlap) * n; 2281 mode->crtc_hsync_end = (mode->crtc_hsync_end - overlap) * n; 2282 mode->crtc_htotal = (mode->crtc_htotal - overlap) * n; 2283 mode->crtc_clock *= n; 2284 } 2285 2286 static void intel_crtc_readout_derived_state(struct intel_crtc_state *crtc_state) 2287 { 2288 struct drm_display_mode *mode = &crtc_state->hw.mode; 2289 struct drm_display_mode *pipe_mode = &crtc_state->hw.pipe_mode; 2290 struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode; 2291 2292 /* 2293 * Start with the adjusted_mode crtc timings, which 2294 * have been filled with the transcoder timings. 2295 */ 2296 drm_mode_copy(pipe_mode, adjusted_mode); 2297 2298 /* Expand MSO per-segment transcoder timings to full */ 2299 intel_splitter_adjust_timings(crtc_state, pipe_mode); 2300 2301 /* 2302 * We want the full numbers in adjusted_mode normal timings, 2303 * adjusted_mode crtc timings are left with the raw transcoder 2304 * timings. 2305 */ 2306 intel_mode_from_crtc_timings(adjusted_mode, pipe_mode); 2307 2308 /* Populate the "user" mode with full numbers */ 2309 drm_mode_copy(mode, pipe_mode); 2310 intel_mode_from_crtc_timings(mode, mode); 2311 mode->hdisplay = drm_rect_width(&crtc_state->pipe_src) * 2312 intel_crtc_num_joined_pipes(crtc_state); 2313 mode->vdisplay = drm_rect_height(&crtc_state->pipe_src); 2314 2315 /* Derive per-pipe timings in case joiner is used */ 2316 intel_joiner_adjust_timings(crtc_state, pipe_mode); 2317 intel_mode_from_crtc_timings(pipe_mode, pipe_mode); 2318 2319 intel_crtc_compute_pixel_rate(crtc_state); 2320 } 2321 2322 void intel_encoder_get_config(struct intel_encoder *encoder, 2323 struct intel_crtc_state *crtc_state) 2324 { 2325 encoder->get_config(encoder, crtc_state); 2326 2327 intel_crtc_readout_derived_state(crtc_state); 2328 } 2329 2330 static void intel_joiner_compute_pipe_src(struct intel_crtc_state *crtc_state) 2331 { 2332 int num_pipes = intel_crtc_num_joined_pipes(crtc_state); 2333 int width, height; 2334 2335 if (num_pipes == 1) 2336 return; 2337 2338 width = drm_rect_width(&crtc_state->pipe_src); 2339 height = drm_rect_height(&crtc_state->pipe_src); 2340 2341 drm_rect_init(&crtc_state->pipe_src, 0, 0, 2342 width / num_pipes, height); 2343 } 2344 2345 static int intel_crtc_compute_pipe_src(struct intel_crtc_state *crtc_state) 2346 { 2347 struct intel_display *display = to_intel_display(crtc_state); 2348 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 2349 2350 intel_joiner_compute_pipe_src(crtc_state); 2351 2352 /* 2353 * Pipe horizontal size must be even in: 2354 * - DVO ganged mode 2355 * - LVDS dual channel mode 2356 * - Double wide pipe 2357 */ 2358 if (drm_rect_width(&crtc_state->pipe_src) & 1) { 2359 if (crtc_state->double_wide) { 2360 drm_dbg_kms(display->drm, 2361 "[CRTC:%d:%s] Odd pipe source width not supported with double wide pipe\n", 2362 crtc->base.base.id, crtc->base.name); 2363 return -EINVAL; 2364 } 2365 2366 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS) && 2367 intel_is_dual_link_lvds(display)) { 2368 drm_dbg_kms(display->drm, 2369 "[CRTC:%d:%s] Odd pipe source width not supported with dual link LVDS\n", 2370 crtc->base.base.id, crtc->base.name); 2371 return -EINVAL; 2372 } 2373 } 2374 2375 return 0; 2376 } 2377 2378 static int intel_crtc_compute_pipe_mode(struct intel_crtc_state *crtc_state) 2379 { 2380 struct intel_display *display = to_intel_display(crtc_state); 2381 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 2382 struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode; 2383 struct drm_display_mode *pipe_mode = &crtc_state->hw.pipe_mode; 2384 int clock_limit = display->cdclk.max_dotclk_freq; 2385 2386 /* 2387 * Start with the adjusted_mode crtc timings, which 2388 * have been filled with the transcoder timings. 2389 */ 2390 drm_mode_copy(pipe_mode, adjusted_mode); 2391 2392 /* Expand MSO per-segment transcoder timings to full */ 2393 intel_splitter_adjust_timings(crtc_state, pipe_mode); 2394 2395 /* Derive per-pipe timings in case joiner is used */ 2396 intel_joiner_adjust_timings(crtc_state, pipe_mode); 2397 intel_mode_from_crtc_timings(pipe_mode, pipe_mode); 2398 2399 if (DISPLAY_VER(display) < 4) { 2400 clock_limit = display->cdclk.max_cdclk_freq * 9 / 10; 2401 2402 /* 2403 * Enable double wide mode when the dot clock 2404 * is > 90% of the (display) core speed. 2405 */ 2406 if (intel_crtc_supports_double_wide(crtc) && 2407 pipe_mode->crtc_clock > clock_limit) { 2408 clock_limit = display->cdclk.max_dotclk_freq; 2409 crtc_state->double_wide = true; 2410 } 2411 } 2412 2413 if (pipe_mode->crtc_clock > clock_limit) { 2414 drm_dbg_kms(display->drm, 2415 "[CRTC:%d:%s] requested pixel clock (%d kHz) too high (max: %d kHz, double wide: %s)\n", 2416 crtc->base.base.id, crtc->base.name, 2417 pipe_mode->crtc_clock, clock_limit, 2418 str_yes_no(crtc_state->double_wide)); 2419 return -EINVAL; 2420 } 2421 2422 return 0; 2423 } 2424 2425 static int intel_crtc_vblank_delay(const struct intel_crtc_state *crtc_state) 2426 { 2427 struct intel_display *display = to_intel_display(crtc_state); 2428 int vblank_delay = 0; 2429 2430 if (!HAS_DSB(display)) 2431 return 0; 2432 2433 vblank_delay = max(vblank_delay, intel_psr_min_vblank_delay(crtc_state)); 2434 2435 return vblank_delay; 2436 } 2437 2438 static int intel_crtc_compute_vblank_delay(struct intel_atomic_state *state, 2439 struct intel_crtc *crtc) 2440 { 2441 struct intel_display *display = to_intel_display(state); 2442 struct intel_crtc_state *crtc_state = 2443 intel_atomic_get_new_crtc_state(state, crtc); 2444 struct drm_display_mode *adjusted_mode = 2445 &crtc_state->hw.adjusted_mode; 2446 int vblank_delay, max_vblank_delay; 2447 2448 vblank_delay = intel_crtc_vblank_delay(crtc_state); 2449 max_vblank_delay = adjusted_mode->crtc_vblank_end - adjusted_mode->crtc_vblank_start - 1; 2450 2451 if (vblank_delay > max_vblank_delay) { 2452 drm_dbg_kms(display->drm, "[CRTC:%d:%s] vblank delay (%d) exceeds max (%d)\n", 2453 crtc->base.base.id, crtc->base.name, vblank_delay, max_vblank_delay); 2454 return -EINVAL; 2455 } 2456 2457 adjusted_mode->crtc_vblank_start += vblank_delay; 2458 2459 return 0; 2460 } 2461 2462 static int intel_crtc_compute_config(struct intel_atomic_state *state, 2463 struct intel_crtc *crtc) 2464 { 2465 struct intel_crtc_state *crtc_state = 2466 intel_atomic_get_new_crtc_state(state, crtc); 2467 int ret; 2468 2469 ret = intel_crtc_compute_vblank_delay(state, crtc); 2470 if (ret) 2471 return ret; 2472 2473 ret = intel_dpll_crtc_compute_clock(state, crtc); 2474 if (ret) 2475 return ret; 2476 2477 ret = intel_crtc_compute_pipe_src(crtc_state); 2478 if (ret) 2479 return ret; 2480 2481 ret = intel_crtc_compute_pipe_mode(crtc_state); 2482 if (ret) 2483 return ret; 2484 2485 intel_crtc_compute_pixel_rate(crtc_state); 2486 2487 if (crtc_state->has_pch_encoder) 2488 return ilk_fdi_compute_config(crtc, crtc_state); 2489 2490 return 0; 2491 } 2492 2493 static void 2494 intel_reduce_m_n_ratio(u32 *num, u32 *den) 2495 { 2496 while (*num > DATA_LINK_M_N_MASK || 2497 *den > DATA_LINK_M_N_MASK) { 2498 *num >>= 1; 2499 *den >>= 1; 2500 } 2501 } 2502 2503 static void compute_m_n(u32 *ret_m, u32 *ret_n, 2504 u32 m, u32 n, u32 constant_n) 2505 { 2506 if (constant_n) 2507 *ret_n = constant_n; 2508 else 2509 *ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX); 2510 2511 *ret_m = div_u64(mul_u32_u32(m, *ret_n), n); 2512 intel_reduce_m_n_ratio(ret_m, ret_n); 2513 } 2514 2515 void 2516 intel_link_compute_m_n(u16 bits_per_pixel_x16, int nlanes, 2517 int pixel_clock, int link_clock, 2518 int bw_overhead, 2519 struct intel_link_m_n *m_n) 2520 { 2521 u32 link_symbol_clock = intel_dp_link_symbol_clock(link_clock); 2522 u32 data_m = intel_dp_effective_data_rate(pixel_clock, bits_per_pixel_x16, 2523 bw_overhead); 2524 u32 data_n = drm_dp_max_dprx_data_rate(link_clock, nlanes); 2525 2526 /* 2527 * Windows/BIOS uses fixed M/N values always. Follow suit. 2528 * 2529 * Also several DP dongles in particular seem to be fussy 2530 * about too large link M/N values. Presumably the 20bit 2531 * value used by Windows/BIOS is acceptable to everyone. 2532 */ 2533 m_n->tu = 64; 2534 compute_m_n(&m_n->data_m, &m_n->data_n, 2535 data_m, data_n, 2536 0x8000000); 2537 2538 compute_m_n(&m_n->link_m, &m_n->link_n, 2539 pixel_clock, link_symbol_clock, 2540 0x80000); 2541 } 2542 2543 void intel_panel_sanitize_ssc(struct intel_display *display) 2544 { 2545 /* 2546 * There may be no VBT; and if the BIOS enabled SSC we can 2547 * just keep using it to avoid unnecessary flicker. Whereas if the 2548 * BIOS isn't using it, don't assume it will work even if the VBT 2549 * indicates as much. 2550 */ 2551 if (HAS_PCH_IBX(display) || HAS_PCH_CPT(display)) { 2552 bool bios_lvds_use_ssc = intel_de_read(display, 2553 PCH_DREF_CONTROL) & 2554 DREF_SSC1_ENABLE; 2555 2556 if (display->vbt.lvds_use_ssc != bios_lvds_use_ssc) { 2557 drm_dbg_kms(display->drm, 2558 "SSC %s by BIOS, overriding VBT which says %s\n", 2559 str_enabled_disabled(bios_lvds_use_ssc), 2560 str_enabled_disabled(display->vbt.lvds_use_ssc)); 2561 display->vbt.lvds_use_ssc = bios_lvds_use_ssc; 2562 } 2563 } 2564 } 2565 2566 void intel_zero_m_n(struct intel_link_m_n *m_n) 2567 { 2568 /* corresponds to 0 register value */ 2569 memset(m_n, 0, sizeof(*m_n)); 2570 m_n->tu = 1; 2571 } 2572 2573 void intel_set_m_n(struct intel_display *display, 2574 const struct intel_link_m_n *m_n, 2575 i915_reg_t data_m_reg, i915_reg_t data_n_reg, 2576 i915_reg_t link_m_reg, i915_reg_t link_n_reg) 2577 { 2578 intel_de_write(display, data_m_reg, TU_SIZE(m_n->tu) | m_n->data_m); 2579 intel_de_write(display, data_n_reg, m_n->data_n); 2580 intel_de_write(display, link_m_reg, m_n->link_m); 2581 /* 2582 * On BDW+ writing LINK_N arms the double buffered update 2583 * of all the M/N registers, so it must be written last. 2584 */ 2585 intel_de_write(display, link_n_reg, m_n->link_n); 2586 } 2587 2588 bool intel_cpu_transcoder_has_m2_n2(struct intel_display *display, 2589 enum transcoder transcoder) 2590 { 2591 if (display->platform.haswell) 2592 return transcoder == TRANSCODER_EDP; 2593 2594 return IS_DISPLAY_VER(display, 5, 7) || display->platform.cherryview; 2595 } 2596 2597 void intel_cpu_transcoder_set_m1_n1(struct intel_crtc *crtc, 2598 enum transcoder transcoder, 2599 const struct intel_link_m_n *m_n) 2600 { 2601 struct intel_display *display = to_intel_display(crtc); 2602 enum pipe pipe = crtc->pipe; 2603 2604 if (DISPLAY_VER(display) >= 5) 2605 intel_set_m_n(display, m_n, 2606 PIPE_DATA_M1(display, transcoder), 2607 PIPE_DATA_N1(display, transcoder), 2608 PIPE_LINK_M1(display, transcoder), 2609 PIPE_LINK_N1(display, transcoder)); 2610 else 2611 intel_set_m_n(display, m_n, 2612 PIPE_DATA_M_G4X(pipe), PIPE_DATA_N_G4X(pipe), 2613 PIPE_LINK_M_G4X(pipe), PIPE_LINK_N_G4X(pipe)); 2614 } 2615 2616 void intel_cpu_transcoder_set_m2_n2(struct intel_crtc *crtc, 2617 enum transcoder transcoder, 2618 const struct intel_link_m_n *m_n) 2619 { 2620 struct intel_display *display = to_intel_display(crtc); 2621 2622 if (!intel_cpu_transcoder_has_m2_n2(display, transcoder)) 2623 return; 2624 2625 intel_set_m_n(display, m_n, 2626 PIPE_DATA_M2(display, transcoder), 2627 PIPE_DATA_N2(display, transcoder), 2628 PIPE_LINK_M2(display, transcoder), 2629 PIPE_LINK_N2(display, transcoder)); 2630 } 2631 2632 static bool 2633 transcoder_has_vrr(const struct intel_crtc_state *crtc_state) 2634 { 2635 struct intel_display *display = to_intel_display(crtc_state); 2636 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 2637 2638 return HAS_VRR(display) && !transcoder_is_dsi(cpu_transcoder); 2639 } 2640 2641 static void intel_set_transcoder_timings(const struct intel_crtc_state *crtc_state) 2642 { 2643 struct intel_display *display = to_intel_display(crtc_state); 2644 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 2645 enum pipe pipe = crtc->pipe; 2646 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 2647 const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode; 2648 u32 crtc_vdisplay, crtc_vtotal, crtc_vblank_start, crtc_vblank_end; 2649 int vsyncshift = 0; 2650 2651 drm_WARN_ON(display->drm, transcoder_is_dsi(cpu_transcoder)); 2652 2653 /* We need to be careful not to changed the adjusted mode, for otherwise 2654 * the hw state checker will get angry at the mismatch. */ 2655 crtc_vdisplay = adjusted_mode->crtc_vdisplay; 2656 crtc_vtotal = adjusted_mode->crtc_vtotal; 2657 crtc_vblank_start = adjusted_mode->crtc_vblank_start; 2658 crtc_vblank_end = adjusted_mode->crtc_vblank_end; 2659 2660 if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) { 2661 /* the chip adds 2 halflines automatically */ 2662 crtc_vtotal -= 1; 2663 crtc_vblank_end -= 1; 2664 2665 if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO)) 2666 vsyncshift = (adjusted_mode->crtc_htotal - 1) / 2; 2667 else 2668 vsyncshift = adjusted_mode->crtc_hsync_start - 2669 adjusted_mode->crtc_htotal / 2; 2670 if (vsyncshift < 0) 2671 vsyncshift += adjusted_mode->crtc_htotal; 2672 } 2673 2674 /* 2675 * VBLANK_START no longer works on ADL+, instead we must use 2676 * TRANS_SET_CONTEXT_LATENCY to configure the pipe vblank start. 2677 */ 2678 if (DISPLAY_VER(display) >= 13) { 2679 intel_de_write(display, 2680 TRANS_SET_CONTEXT_LATENCY(display, cpu_transcoder), 2681 crtc_vblank_start - crtc_vdisplay); 2682 2683 /* 2684 * VBLANK_START not used by hw, just clear it 2685 * to make it stand out in register dumps. 2686 */ 2687 crtc_vblank_start = 1; 2688 } 2689 2690 if (DISPLAY_VER(display) >= 4) 2691 intel_de_write(display, 2692 TRANS_VSYNCSHIFT(display, cpu_transcoder), 2693 vsyncshift); 2694 2695 intel_de_write(display, TRANS_HTOTAL(display, cpu_transcoder), 2696 HACTIVE(adjusted_mode->crtc_hdisplay - 1) | 2697 HTOTAL(adjusted_mode->crtc_htotal - 1)); 2698 intel_de_write(display, TRANS_HBLANK(display, cpu_transcoder), 2699 HBLANK_START(adjusted_mode->crtc_hblank_start - 1) | 2700 HBLANK_END(adjusted_mode->crtc_hblank_end - 1)); 2701 intel_de_write(display, TRANS_HSYNC(display, cpu_transcoder), 2702 HSYNC_START(adjusted_mode->crtc_hsync_start - 1) | 2703 HSYNC_END(adjusted_mode->crtc_hsync_end - 1)); 2704 2705 /* 2706 * For platforms that always use VRR Timing Generator, the VTOTAL.Vtotal 2707 * bits are not required. Since the support for these bits is going to 2708 * be deprecated in upcoming platforms, avoid writing these bits for the 2709 * platforms that do not use legacy Timing Generator. 2710 */ 2711 if (intel_vrr_always_use_vrr_tg(display)) 2712 crtc_vtotal = 1; 2713 2714 intel_de_write(display, TRANS_VTOTAL(display, cpu_transcoder), 2715 VACTIVE(crtc_vdisplay - 1) | 2716 VTOTAL(crtc_vtotal - 1)); 2717 intel_de_write(display, TRANS_VBLANK(display, cpu_transcoder), 2718 VBLANK_START(crtc_vblank_start - 1) | 2719 VBLANK_END(crtc_vblank_end - 1)); 2720 intel_de_write(display, TRANS_VSYNC(display, cpu_transcoder), 2721 VSYNC_START(adjusted_mode->crtc_vsync_start - 1) | 2722 VSYNC_END(adjusted_mode->crtc_vsync_end - 1)); 2723 2724 /* Workaround: when the EDP input selection is B, the VTOTAL_B must be 2725 * programmed with the VTOTAL_EDP value. Same for VTOTAL_C. This is 2726 * documented on the DDI_FUNC_CTL register description, EDP Input Select 2727 * bits. */ 2728 if (display->platform.haswell && cpu_transcoder == TRANSCODER_EDP && 2729 (pipe == PIPE_B || pipe == PIPE_C)) 2730 intel_de_write(display, TRANS_VTOTAL(display, pipe), 2731 VACTIVE(crtc_vdisplay - 1) | 2732 VTOTAL(crtc_vtotal - 1)); 2733 2734 if (DISPLAY_VER(display) >= 30) { 2735 /* 2736 * Address issues for resolutions with high refresh rate that 2737 * have small Hblank, specifically where Hblank is smaller than 2738 * one MTP. Simulations indicate this will address the 2739 * jitter issues that currently causes BS to be immediately 2740 * followed by BE which DPRX devices are unable to handle. 2741 * https://groups.vesa.org/wg/DP/document/20494 2742 */ 2743 intel_de_write(display, DP_MIN_HBLANK_CTL(cpu_transcoder), 2744 crtc_state->min_hblank); 2745 } 2746 } 2747 2748 static void intel_set_transcoder_timings_lrr(const struct intel_crtc_state *crtc_state) 2749 { 2750 struct intel_display *display = to_intel_display(crtc_state); 2751 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 2752 const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode; 2753 u32 crtc_vdisplay, crtc_vtotal, crtc_vblank_start, crtc_vblank_end; 2754 2755 drm_WARN_ON(display->drm, transcoder_is_dsi(cpu_transcoder)); 2756 2757 crtc_vdisplay = adjusted_mode->crtc_vdisplay; 2758 crtc_vtotal = adjusted_mode->crtc_vtotal; 2759 crtc_vblank_start = adjusted_mode->crtc_vblank_start; 2760 crtc_vblank_end = adjusted_mode->crtc_vblank_end; 2761 2762 if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) { 2763 /* the chip adds 2 halflines automatically */ 2764 crtc_vtotal -= 1; 2765 crtc_vblank_end -= 1; 2766 } 2767 2768 if (DISPLAY_VER(display) >= 13) { 2769 intel_de_write(display, 2770 TRANS_SET_CONTEXT_LATENCY(display, cpu_transcoder), 2771 crtc_vblank_start - crtc_vdisplay); 2772 2773 /* 2774 * VBLANK_START not used by hw, just clear it 2775 * to make it stand out in register dumps. 2776 */ 2777 crtc_vblank_start = 1; 2778 } 2779 2780 /* 2781 * The hardware actually ignores TRANS_VBLANK.VBLANK_END in DP mode. 2782 * But let's write it anyway to keep the state checker happy. 2783 */ 2784 intel_de_write(display, TRANS_VBLANK(display, cpu_transcoder), 2785 VBLANK_START(crtc_vblank_start - 1) | 2786 VBLANK_END(crtc_vblank_end - 1)); 2787 /* 2788 * For platforms that always use VRR Timing Generator, the VTOTAL.Vtotal 2789 * bits are not required. Since the support for these bits is going to 2790 * be deprecated in upcoming platforms, avoid writing these bits for the 2791 * platforms that do not use legacy Timing Generator. 2792 */ 2793 if (intel_vrr_always_use_vrr_tg(display)) 2794 crtc_vtotal = 1; 2795 2796 /* 2797 * The double buffer latch point for TRANS_VTOTAL 2798 * is the transcoder's undelayed vblank. 2799 */ 2800 intel_de_write(display, TRANS_VTOTAL(display, cpu_transcoder), 2801 VACTIVE(crtc_vdisplay - 1) | 2802 VTOTAL(crtc_vtotal - 1)); 2803 2804 intel_vrr_set_fixed_rr_timings(crtc_state); 2805 intel_vrr_transcoder_enable(crtc_state); 2806 } 2807 2808 static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state) 2809 { 2810 struct intel_display *display = to_intel_display(crtc_state); 2811 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 2812 int width = drm_rect_width(&crtc_state->pipe_src); 2813 int height = drm_rect_height(&crtc_state->pipe_src); 2814 enum pipe pipe = crtc->pipe; 2815 2816 /* pipesrc controls the size that is scaled from, which should 2817 * always be the user's requested size. 2818 */ 2819 intel_de_write(display, PIPESRC(display, pipe), 2820 PIPESRC_WIDTH(width - 1) | PIPESRC_HEIGHT(height - 1)); 2821 } 2822 2823 static bool intel_pipe_is_interlaced(const struct intel_crtc_state *crtc_state) 2824 { 2825 struct intel_display *display = to_intel_display(crtc_state); 2826 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 2827 2828 if (DISPLAY_VER(display) == 2) 2829 return false; 2830 2831 if (DISPLAY_VER(display) >= 9 || 2832 display->platform.broadwell || display->platform.haswell) 2833 return intel_de_read(display, 2834 TRANSCONF(display, cpu_transcoder)) & TRANSCONF_INTERLACE_MASK_HSW; 2835 else 2836 return intel_de_read(display, 2837 TRANSCONF(display, cpu_transcoder)) & TRANSCONF_INTERLACE_MASK; 2838 } 2839 2840 static void intel_get_transcoder_timings(struct intel_crtc *crtc, 2841 struct intel_crtc_state *pipe_config) 2842 { 2843 struct intel_display *display = to_intel_display(crtc); 2844 enum transcoder cpu_transcoder = pipe_config->cpu_transcoder; 2845 struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode; 2846 u32 tmp; 2847 2848 tmp = intel_de_read(display, TRANS_HTOTAL(display, cpu_transcoder)); 2849 adjusted_mode->crtc_hdisplay = REG_FIELD_GET(HACTIVE_MASK, tmp) + 1; 2850 adjusted_mode->crtc_htotal = REG_FIELD_GET(HTOTAL_MASK, tmp) + 1; 2851 2852 if (!transcoder_is_dsi(cpu_transcoder)) { 2853 tmp = intel_de_read(display, 2854 TRANS_HBLANK(display, cpu_transcoder)); 2855 adjusted_mode->crtc_hblank_start = REG_FIELD_GET(HBLANK_START_MASK, tmp) + 1; 2856 adjusted_mode->crtc_hblank_end = REG_FIELD_GET(HBLANK_END_MASK, tmp) + 1; 2857 } 2858 2859 tmp = intel_de_read(display, TRANS_HSYNC(display, cpu_transcoder)); 2860 adjusted_mode->crtc_hsync_start = REG_FIELD_GET(HSYNC_START_MASK, tmp) + 1; 2861 adjusted_mode->crtc_hsync_end = REG_FIELD_GET(HSYNC_END_MASK, tmp) + 1; 2862 2863 tmp = intel_de_read(display, TRANS_VTOTAL(display, cpu_transcoder)); 2864 adjusted_mode->crtc_vdisplay = REG_FIELD_GET(VACTIVE_MASK, tmp) + 1; 2865 adjusted_mode->crtc_vtotal = REG_FIELD_GET(VTOTAL_MASK, tmp) + 1; 2866 2867 /* FIXME TGL+ DSI transcoders have this! */ 2868 if (!transcoder_is_dsi(cpu_transcoder)) { 2869 tmp = intel_de_read(display, 2870 TRANS_VBLANK(display, cpu_transcoder)); 2871 adjusted_mode->crtc_vblank_start = REG_FIELD_GET(VBLANK_START_MASK, tmp) + 1; 2872 adjusted_mode->crtc_vblank_end = REG_FIELD_GET(VBLANK_END_MASK, tmp) + 1; 2873 } 2874 tmp = intel_de_read(display, TRANS_VSYNC(display, cpu_transcoder)); 2875 adjusted_mode->crtc_vsync_start = REG_FIELD_GET(VSYNC_START_MASK, tmp) + 1; 2876 adjusted_mode->crtc_vsync_end = REG_FIELD_GET(VSYNC_END_MASK, tmp) + 1; 2877 2878 if (intel_pipe_is_interlaced(pipe_config)) { 2879 adjusted_mode->flags |= DRM_MODE_FLAG_INTERLACE; 2880 adjusted_mode->crtc_vtotal += 1; 2881 adjusted_mode->crtc_vblank_end += 1; 2882 } 2883 2884 if (DISPLAY_VER(display) >= 13 && !transcoder_is_dsi(cpu_transcoder)) 2885 adjusted_mode->crtc_vblank_start = 2886 adjusted_mode->crtc_vdisplay + 2887 intel_de_read(display, 2888 TRANS_SET_CONTEXT_LATENCY(display, cpu_transcoder)); 2889 2890 if (DISPLAY_VER(display) >= 30) 2891 pipe_config->min_hblank = intel_de_read(display, 2892 DP_MIN_HBLANK_CTL(cpu_transcoder)); 2893 } 2894 2895 static void intel_joiner_adjust_pipe_src(struct intel_crtc_state *crtc_state) 2896 { 2897 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 2898 int num_pipes = intel_crtc_num_joined_pipes(crtc_state); 2899 enum pipe primary_pipe, pipe = crtc->pipe; 2900 int width; 2901 2902 if (num_pipes == 1) 2903 return; 2904 2905 primary_pipe = joiner_primary_pipe(crtc_state); 2906 width = drm_rect_width(&crtc_state->pipe_src); 2907 2908 drm_rect_translate_to(&crtc_state->pipe_src, 2909 (pipe - primary_pipe) * width, 0); 2910 } 2911 2912 static void intel_get_pipe_src_size(struct intel_crtc *crtc, 2913 struct intel_crtc_state *pipe_config) 2914 { 2915 struct intel_display *display = to_intel_display(crtc); 2916 u32 tmp; 2917 2918 tmp = intel_de_read(display, PIPESRC(display, crtc->pipe)); 2919 2920 drm_rect_init(&pipe_config->pipe_src, 0, 0, 2921 REG_FIELD_GET(PIPESRC_WIDTH_MASK, tmp) + 1, 2922 REG_FIELD_GET(PIPESRC_HEIGHT_MASK, tmp) + 1); 2923 2924 intel_joiner_adjust_pipe_src(pipe_config); 2925 } 2926 2927 void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state) 2928 { 2929 struct intel_display *display = to_intel_display(crtc_state); 2930 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 2931 u32 val = 0; 2932 2933 /* 2934 * - We keep both pipes enabled on 830 2935 * - During modeset the pipe is still disabled and must remain so 2936 * - During fastset the pipe is already enabled and must remain so 2937 */ 2938 if (display->platform.i830 || !intel_crtc_needs_modeset(crtc_state)) 2939 val |= TRANSCONF_ENABLE; 2940 2941 if (crtc_state->double_wide) 2942 val |= TRANSCONF_DOUBLE_WIDE; 2943 2944 /* only g4x and later have fancy bpc/dither controls */ 2945 if (display->platform.g4x || display->platform.valleyview || 2946 display->platform.cherryview) { 2947 /* Bspec claims that we can't use dithering for 30bpp pipes. */ 2948 if (crtc_state->dither && crtc_state->pipe_bpp != 30) 2949 val |= TRANSCONF_DITHER_EN | 2950 TRANSCONF_DITHER_TYPE_SP; 2951 2952 switch (crtc_state->pipe_bpp) { 2953 default: 2954 /* Case prevented by intel_choose_pipe_bpp_dither. */ 2955 MISSING_CASE(crtc_state->pipe_bpp); 2956 fallthrough; 2957 case 18: 2958 val |= TRANSCONF_BPC_6; 2959 break; 2960 case 24: 2961 val |= TRANSCONF_BPC_8; 2962 break; 2963 case 30: 2964 val |= TRANSCONF_BPC_10; 2965 break; 2966 } 2967 } 2968 2969 if (crtc_state->hw.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) { 2970 if (DISPLAY_VER(display) < 4 || 2971 intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO)) 2972 val |= TRANSCONF_INTERLACE_W_FIELD_INDICATION; 2973 else 2974 val |= TRANSCONF_INTERLACE_W_SYNC_SHIFT; 2975 } else { 2976 val |= TRANSCONF_INTERLACE_PROGRESSIVE; 2977 } 2978 2979 if ((display->platform.valleyview || display->platform.cherryview) && 2980 crtc_state->limited_color_range) 2981 val |= TRANSCONF_COLOR_RANGE_SELECT; 2982 2983 val |= TRANSCONF_GAMMA_MODE(crtc_state->gamma_mode); 2984 2985 if (crtc_state->wgc_enable) 2986 val |= TRANSCONF_WGC_ENABLE; 2987 2988 val |= TRANSCONF_FRAME_START_DELAY(crtc_state->framestart_delay - 1); 2989 2990 intel_de_write(display, TRANSCONF(display, cpu_transcoder), val); 2991 intel_de_posting_read(display, TRANSCONF(display, cpu_transcoder)); 2992 } 2993 2994 static enum intel_output_format 2995 bdw_get_pipe_misc_output_format(struct intel_crtc *crtc) 2996 { 2997 struct intel_display *display = to_intel_display(crtc); 2998 u32 tmp; 2999 3000 tmp = intel_de_read(display, PIPE_MISC(crtc->pipe)); 3001 3002 if (tmp & PIPE_MISC_YUV420_ENABLE) { 3003 /* 3004 * We support 4:2:0 in full blend mode only. 3005 * For xe3_lpd+ this is implied in YUV420 Enable bit. 3006 * Ensure the same for prior platforms in YUV420 Mode bit. 3007 */ 3008 if (DISPLAY_VER(display) < 30) 3009 drm_WARN_ON(display->drm, 3010 (tmp & PIPE_MISC_YUV420_MODE_FULL_BLEND) == 0); 3011 3012 return INTEL_OUTPUT_FORMAT_YCBCR420; 3013 } else if (tmp & PIPE_MISC_OUTPUT_COLORSPACE_YUV) { 3014 return INTEL_OUTPUT_FORMAT_YCBCR444; 3015 } else { 3016 return INTEL_OUTPUT_FORMAT_RGB; 3017 } 3018 } 3019 3020 static bool i9xx_get_pipe_config(struct intel_crtc *crtc, 3021 struct intel_crtc_state *pipe_config) 3022 { 3023 struct intel_display *display = to_intel_display(crtc); 3024 enum intel_display_power_domain power_domain; 3025 enum transcoder cpu_transcoder = (enum transcoder)crtc->pipe; 3026 intel_wakeref_t wakeref; 3027 bool ret = false; 3028 u32 tmp; 3029 3030 power_domain = POWER_DOMAIN_PIPE(crtc->pipe); 3031 wakeref = intel_display_power_get_if_enabled(display, power_domain); 3032 if (!wakeref) 3033 return false; 3034 3035 tmp = intel_de_read(display, TRANSCONF(display, cpu_transcoder)); 3036 if (!(tmp & TRANSCONF_ENABLE)) 3037 goto out; 3038 3039 pipe_config->cpu_transcoder = cpu_transcoder; 3040 3041 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; 3042 pipe_config->sink_format = pipe_config->output_format; 3043 3044 if (display->platform.g4x || display->platform.valleyview || 3045 display->platform.cherryview) { 3046 switch (tmp & TRANSCONF_BPC_MASK) { 3047 case TRANSCONF_BPC_6: 3048 pipe_config->pipe_bpp = 18; 3049 break; 3050 case TRANSCONF_BPC_8: 3051 pipe_config->pipe_bpp = 24; 3052 break; 3053 case TRANSCONF_BPC_10: 3054 pipe_config->pipe_bpp = 30; 3055 break; 3056 default: 3057 MISSING_CASE(tmp); 3058 break; 3059 } 3060 } 3061 3062 if ((display->platform.valleyview || display->platform.cherryview) && 3063 (tmp & TRANSCONF_COLOR_RANGE_SELECT)) 3064 pipe_config->limited_color_range = true; 3065 3066 pipe_config->gamma_mode = REG_FIELD_GET(TRANSCONF_GAMMA_MODE_MASK_I9XX, tmp); 3067 3068 pipe_config->framestart_delay = REG_FIELD_GET(TRANSCONF_FRAME_START_DELAY_MASK, tmp) + 1; 3069 3070 if ((display->platform.valleyview || display->platform.cherryview) && 3071 (tmp & TRANSCONF_WGC_ENABLE)) 3072 pipe_config->wgc_enable = true; 3073 3074 intel_color_get_config(pipe_config); 3075 3076 if (HAS_DOUBLE_WIDE(display)) 3077 pipe_config->double_wide = tmp & TRANSCONF_DOUBLE_WIDE; 3078 3079 intel_get_transcoder_timings(crtc, pipe_config); 3080 intel_get_pipe_src_size(crtc, pipe_config); 3081 3082 i9xx_pfit_get_config(pipe_config); 3083 3084 i9xx_dpll_get_hw_state(crtc, &pipe_config->dpll_hw_state); 3085 3086 if (DISPLAY_VER(display) >= 4) { 3087 tmp = pipe_config->dpll_hw_state.i9xx.dpll_md; 3088 pipe_config->pixel_multiplier = 3089 ((tmp & DPLL_MD_UDI_MULTIPLIER_MASK) 3090 >> DPLL_MD_UDI_MULTIPLIER_SHIFT) + 1; 3091 } else if (display->platform.i945g || display->platform.i945gm || 3092 display->platform.g33 || display->platform.pineview) { 3093 tmp = pipe_config->dpll_hw_state.i9xx.dpll; 3094 pipe_config->pixel_multiplier = 3095 ((tmp & SDVO_MULTIPLIER_MASK) 3096 >> SDVO_MULTIPLIER_SHIFT_HIRES) + 1; 3097 } else { 3098 /* Note that on i915G/GM the pixel multiplier is in the sdvo 3099 * port and will be fixed up in the encoder->get_config 3100 * function. */ 3101 pipe_config->pixel_multiplier = 1; 3102 } 3103 3104 if (display->platform.cherryview) 3105 chv_crtc_clock_get(pipe_config); 3106 else if (display->platform.valleyview) 3107 vlv_crtc_clock_get(pipe_config); 3108 else 3109 i9xx_crtc_clock_get(pipe_config); 3110 3111 /* 3112 * Normally the dotclock is filled in by the encoder .get_config() 3113 * but in case the pipe is enabled w/o any ports we need a sane 3114 * default. 3115 */ 3116 pipe_config->hw.adjusted_mode.crtc_clock = 3117 pipe_config->port_clock / pipe_config->pixel_multiplier; 3118 3119 ret = true; 3120 3121 out: 3122 intel_display_power_put(display, power_domain, wakeref); 3123 3124 return ret; 3125 } 3126 3127 void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state) 3128 { 3129 struct intel_display *display = to_intel_display(crtc_state); 3130 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 3131 u32 val = 0; 3132 3133 /* 3134 * - During modeset the pipe is still disabled and must remain so 3135 * - During fastset the pipe is already enabled and must remain so 3136 */ 3137 if (!intel_crtc_needs_modeset(crtc_state)) 3138 val |= TRANSCONF_ENABLE; 3139 3140 switch (crtc_state->pipe_bpp) { 3141 default: 3142 /* Case prevented by intel_choose_pipe_bpp_dither. */ 3143 MISSING_CASE(crtc_state->pipe_bpp); 3144 fallthrough; 3145 case 18: 3146 val |= TRANSCONF_BPC_6; 3147 break; 3148 case 24: 3149 val |= TRANSCONF_BPC_8; 3150 break; 3151 case 30: 3152 val |= TRANSCONF_BPC_10; 3153 break; 3154 case 36: 3155 val |= TRANSCONF_BPC_12; 3156 break; 3157 } 3158 3159 if (crtc_state->dither) 3160 val |= TRANSCONF_DITHER_EN | TRANSCONF_DITHER_TYPE_SP; 3161 3162 if (crtc_state->hw.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) 3163 val |= TRANSCONF_INTERLACE_IF_ID_ILK; 3164 else 3165 val |= TRANSCONF_INTERLACE_PF_PD_ILK; 3166 3167 /* 3168 * This would end up with an odd purple hue over 3169 * the entire display. Make sure we don't do it. 3170 */ 3171 drm_WARN_ON(display->drm, crtc_state->limited_color_range && 3172 crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB); 3173 3174 if (crtc_state->limited_color_range && 3175 !intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO)) 3176 val |= TRANSCONF_COLOR_RANGE_SELECT; 3177 3178 if (crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB) 3179 val |= TRANSCONF_OUTPUT_COLORSPACE_YUV709; 3180 3181 val |= TRANSCONF_GAMMA_MODE(crtc_state->gamma_mode); 3182 3183 val |= TRANSCONF_FRAME_START_DELAY(crtc_state->framestart_delay - 1); 3184 val |= TRANSCONF_MSA_TIMING_DELAY(crtc_state->msa_timing_delay); 3185 3186 intel_de_write(display, TRANSCONF(display, cpu_transcoder), val); 3187 intel_de_posting_read(display, TRANSCONF(display, cpu_transcoder)); 3188 } 3189 3190 static void hsw_set_transconf(const struct intel_crtc_state *crtc_state) 3191 { 3192 struct intel_display *display = to_intel_display(crtc_state); 3193 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; 3194 u32 val = 0; 3195 3196 /* 3197 * - During modeset the pipe is still disabled and must remain so 3198 * - During fastset the pipe is already enabled and must remain so 3199 */ 3200 if (!intel_crtc_needs_modeset(crtc_state)) 3201 val |= TRANSCONF_ENABLE; 3202 3203 if (display->platform.haswell && crtc_state->dither) 3204 val |= TRANSCONF_DITHER_EN | TRANSCONF_DITHER_TYPE_SP; 3205 3206 if (crtc_state->hw.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) 3207 val |= TRANSCONF_INTERLACE_IF_ID_ILK; 3208 else 3209 val |= TRANSCONF_INTERLACE_PF_PD_ILK; 3210 3211 if (display->platform.haswell && 3212 crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB) 3213 val |= TRANSCONF_OUTPUT_COLORSPACE_YUV_HSW; 3214 3215 intel_de_write(display, TRANSCONF(display, cpu_transcoder), val); 3216 intel_de_posting_read(display, TRANSCONF(display, cpu_transcoder)); 3217 } 3218 3219 static void bdw_set_pipe_misc(struct intel_dsb *dsb, 3220 const struct intel_crtc_state *crtc_state) 3221 { 3222 struct intel_display *display = to_intel_display(crtc_state); 3223 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 3224 u32 val = 0; 3225 3226 switch (crtc_state->pipe_bpp) { 3227 case 18: 3228 val |= PIPE_MISC_BPC_6; 3229 break; 3230 case 24: 3231 val |= PIPE_MISC_BPC_8; 3232 break; 3233 case 30: 3234 val |= PIPE_MISC_BPC_10; 3235 break; 3236 case 36: 3237 /* Port output 12BPC defined for ADLP+ */ 3238 if (DISPLAY_VER(display) >= 13) 3239 val |= PIPE_MISC_BPC_12_ADLP; 3240 break; 3241 default: 3242 MISSING_CASE(crtc_state->pipe_bpp); 3243 break; 3244 } 3245 3246 if (crtc_state->dither) 3247 val |= PIPE_MISC_DITHER_ENABLE | PIPE_MISC_DITHER_TYPE_SP; 3248 3249 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 || 3250 crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR444) 3251 val |= PIPE_MISC_OUTPUT_COLORSPACE_YUV; 3252 3253 if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420) 3254 val |= DISPLAY_VER(display) >= 30 ? PIPE_MISC_YUV420_ENABLE : 3255 PIPE_MISC_YUV420_ENABLE | PIPE_MISC_YUV420_MODE_FULL_BLEND; 3256 3257 if (DISPLAY_VER(display) >= 11 && is_hdr_mode(crtc_state)) 3258 val |= PIPE_MISC_HDR_MODE_PRECISION; 3259 3260 if (DISPLAY_VER(display) >= 12) 3261 val |= PIPE_MISC_PIXEL_ROUNDING_TRUNC; 3262 3263 /* allow PSR with sprite enabled */ 3264 if (display->platform.broadwell) 3265 val |= PIPE_MISC_PSR_MASK_SPRITE_ENABLE; 3266 3267 intel_de_write_dsb(display, dsb, PIPE_MISC(crtc->pipe), val); 3268 } 3269 3270 int bdw_get_pipe_misc_bpp(struct intel_crtc *crtc) 3271 { 3272 struct intel_display *display = to_intel_display(crtc); 3273 u32 tmp; 3274 3275 tmp = intel_de_read(display, PIPE_MISC(crtc->pipe)); 3276 3277 switch (tmp & PIPE_MISC_BPC_MASK) { 3278 case PIPE_MISC_BPC_6: 3279 return 18; 3280 case PIPE_MISC_BPC_8: 3281 return 24; 3282 case PIPE_MISC_BPC_10: 3283 return 30; 3284 /* 3285 * PORT OUTPUT 12 BPC defined for ADLP+. 3286 * 3287 * TODO: 3288 * For previous platforms with DSI interface, bits 5:7 3289 * are used for storing pipe_bpp irrespective of dithering. 3290 * Since the value of 12 BPC is not defined for these bits 3291 * on older platforms, need to find a workaround for 12 BPC 3292 * MIPI DSI HW readout. 3293 */ 3294 case PIPE_MISC_BPC_12_ADLP: 3295 if (DISPLAY_VER(display) >= 13) 3296 return 36; 3297 fallthrough; 3298 default: 3299 MISSING_CASE(tmp); 3300 return 0; 3301 } 3302 } 3303 3304 int ilk_get_lanes_required(int target_clock, int link_bw, int bpp) 3305 { 3306 /* 3307 * Account for spread spectrum to avoid 3308 * oversubscribing the link. Max center spread 3309 * is 2.5%; use 5% for safety's sake. 3310 */ 3311 u32 bps = target_clock * bpp * 21 / 20; 3312 return DIV_ROUND_UP(bps, link_bw * 8); 3313 } 3314 3315 void intel_get_m_n(struct intel_display *display, 3316 struct intel_link_m_n *m_n, 3317 i915_reg_t data_m_reg, i915_reg_t data_n_reg, 3318 i915_reg_t link_m_reg, i915_reg_t link_n_reg) 3319 { 3320 m_n->link_m = intel_de_read(display, link_m_reg) & DATA_LINK_M_N_MASK; 3321 m_n->link_n = intel_de_read(display, link_n_reg) & DATA_LINK_M_N_MASK; 3322 m_n->data_m = intel_de_read(display, data_m_reg) & DATA_LINK_M_N_MASK; 3323 m_n->data_n = intel_de_read(display, data_n_reg) & DATA_LINK_M_N_MASK; 3324 m_n->tu = REG_FIELD_GET(TU_SIZE_MASK, intel_de_read(display, data_m_reg)) + 1; 3325 } 3326 3327 void intel_cpu_transcoder_get_m1_n1(struct intel_crtc *crtc, 3328 enum transcoder transcoder, 3329 struct intel_link_m_n *m_n) 3330 { 3331 struct intel_display *display = to_intel_display(crtc); 3332 enum pipe pipe = crtc->pipe; 3333 3334 if (DISPLAY_VER(display) >= 5) 3335 intel_get_m_n(display, m_n, 3336 PIPE_DATA_M1(display, transcoder), 3337 PIPE_DATA_N1(display, transcoder), 3338 PIPE_LINK_M1(display, transcoder), 3339 PIPE_LINK_N1(display, transcoder)); 3340 else 3341 intel_get_m_n(display, m_n, 3342 PIPE_DATA_M_G4X(pipe), PIPE_DATA_N_G4X(pipe), 3343 PIPE_LINK_M_G4X(pipe), PIPE_LINK_N_G4X(pipe)); 3344 } 3345 3346 void intel_cpu_transcoder_get_m2_n2(struct intel_crtc *crtc, 3347 enum transcoder transcoder, 3348 struct intel_link_m_n *m_n) 3349 { 3350 struct intel_display *display = to_intel_display(crtc); 3351 3352 if (!intel_cpu_transcoder_has_m2_n2(display, transcoder)) 3353 return; 3354 3355 intel_get_m_n(display, m_n, 3356 PIPE_DATA_M2(display, transcoder), 3357 PIPE_DATA_N2(display, transcoder), 3358 PIPE_LINK_M2(display, transcoder), 3359 PIPE_LINK_N2(display, transcoder)); 3360 } 3361 3362 static bool ilk_get_pipe_config(struct intel_crtc *crtc, 3363 struct intel_crtc_state *pipe_config) 3364 { 3365 struct intel_display *display = to_intel_display(crtc); 3366 enum intel_display_power_domain power_domain; 3367 enum transcoder cpu_transcoder = (enum transcoder)crtc->pipe; 3368 intel_wakeref_t wakeref; 3369 bool ret = false; 3370 u32 tmp; 3371 3372 power_domain = POWER_DOMAIN_PIPE(crtc->pipe); 3373 wakeref = intel_display_power_get_if_enabled(display, power_domain); 3374 if (!wakeref) 3375 return false; 3376 3377 tmp = intel_de_read(display, TRANSCONF(display, cpu_transcoder)); 3378 if (!(tmp & TRANSCONF_ENABLE)) 3379 goto out; 3380 3381 pipe_config->cpu_transcoder = cpu_transcoder; 3382 3383 switch (tmp & TRANSCONF_BPC_MASK) { 3384 case TRANSCONF_BPC_6: 3385 pipe_config->pipe_bpp = 18; 3386 break; 3387 case TRANSCONF_BPC_8: 3388 pipe_config->pipe_bpp = 24; 3389 break; 3390 case TRANSCONF_BPC_10: 3391 pipe_config->pipe_bpp = 30; 3392 break; 3393 case TRANSCONF_BPC_12: 3394 pipe_config->pipe_bpp = 36; 3395 break; 3396 default: 3397 break; 3398 } 3399 3400 if (tmp & TRANSCONF_COLOR_RANGE_SELECT) 3401 pipe_config->limited_color_range = true; 3402 3403 switch (tmp & TRANSCONF_OUTPUT_COLORSPACE_MASK) { 3404 case TRANSCONF_OUTPUT_COLORSPACE_YUV601: 3405 case TRANSCONF_OUTPUT_COLORSPACE_YUV709: 3406 pipe_config->output_format = INTEL_OUTPUT_FORMAT_YCBCR444; 3407 break; 3408 default: 3409 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; 3410 break; 3411 } 3412 3413 pipe_config->sink_format = pipe_config->output_format; 3414 3415 pipe_config->gamma_mode = REG_FIELD_GET(TRANSCONF_GAMMA_MODE_MASK_ILK, tmp); 3416 3417 pipe_config->framestart_delay = REG_FIELD_GET(TRANSCONF_FRAME_START_DELAY_MASK, tmp) + 1; 3418 3419 pipe_config->msa_timing_delay = REG_FIELD_GET(TRANSCONF_MSA_TIMING_DELAY_MASK, tmp); 3420 3421 intel_color_get_config(pipe_config); 3422 3423 pipe_config->pixel_multiplier = 1; 3424 3425 ilk_pch_get_config(pipe_config); 3426 3427 intel_get_transcoder_timings(crtc, pipe_config); 3428 intel_get_pipe_src_size(crtc, pipe_config); 3429 3430 ilk_pfit_get_config(pipe_config); 3431 3432 ret = true; 3433 3434 out: 3435 intel_display_power_put(display, power_domain, wakeref); 3436 3437 return ret; 3438 } 3439 3440 static u8 joiner_pipes(struct intel_display *display) 3441 { 3442 u8 pipes; 3443 3444 if (DISPLAY_VER(display) >= 12) 3445 pipes = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D); 3446 else if (DISPLAY_VER(display) >= 11) 3447 pipes = BIT(PIPE_B) | BIT(PIPE_C); 3448 else 3449 pipes = 0; 3450 3451 return pipes & DISPLAY_RUNTIME_INFO(display)->pipe_mask; 3452 } 3453 3454 static bool transcoder_ddi_func_is_enabled(struct intel_display *display, 3455 enum transcoder cpu_transcoder) 3456 { 3457 enum intel_display_power_domain power_domain; 3458 intel_wakeref_t wakeref; 3459 u32 tmp = 0; 3460 3461 power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder); 3462 3463 with_intel_display_power_if_enabled(display, power_domain, wakeref) 3464 tmp = intel_de_read(display, 3465 TRANS_DDI_FUNC_CTL(display, cpu_transcoder)); 3466 3467 return tmp & TRANS_DDI_FUNC_ENABLE; 3468 } 3469 3470 static void enabled_uncompressed_joiner_pipes(struct intel_display *display, 3471 u8 *primary_pipes, u8 *secondary_pipes) 3472 { 3473 struct intel_crtc *crtc; 3474 3475 *primary_pipes = 0; 3476 *secondary_pipes = 0; 3477 3478 if (!HAS_UNCOMPRESSED_JOINER(display)) 3479 return; 3480 3481 for_each_intel_crtc_in_pipe_mask(display->drm, crtc, 3482 joiner_pipes(display)) { 3483 enum intel_display_power_domain power_domain; 3484 enum pipe pipe = crtc->pipe; 3485 intel_wakeref_t wakeref; 3486 3487 power_domain = POWER_DOMAIN_PIPE(pipe); 3488 with_intel_display_power_if_enabled(display, power_domain, wakeref) { 3489 u32 tmp = intel_de_read(display, ICL_PIPE_DSS_CTL1(pipe)); 3490 3491 if (tmp & UNCOMPRESSED_JOINER_PRIMARY) 3492 *primary_pipes |= BIT(pipe); 3493 if (tmp & UNCOMPRESSED_JOINER_SECONDARY) 3494 *secondary_pipes |= BIT(pipe); 3495 } 3496 } 3497 } 3498 3499 static void enabled_bigjoiner_pipes(struct intel_display *display, 3500 u8 *primary_pipes, u8 *secondary_pipes) 3501 { 3502 struct intel_crtc *crtc; 3503 3504 *primary_pipes = 0; 3505 *secondary_pipes = 0; 3506 3507 if (!HAS_BIGJOINER(display)) 3508 return; 3509 3510 for_each_intel_crtc_in_pipe_mask(display->drm, crtc, 3511 joiner_pipes(display)) { 3512 enum intel_display_power_domain power_domain; 3513 enum pipe pipe = crtc->pipe; 3514 intel_wakeref_t wakeref; 3515 3516 power_domain = intel_dsc_power_domain(crtc, (enum transcoder)pipe); 3517 with_intel_display_power_if_enabled(display, power_domain, wakeref) { 3518 u32 tmp = intel_de_read(display, ICL_PIPE_DSS_CTL1(pipe)); 3519 3520 if (!(tmp & BIG_JOINER_ENABLE)) 3521 continue; 3522 3523 if (tmp & PRIMARY_BIG_JOINER_ENABLE) 3524 *primary_pipes |= BIT(pipe); 3525 else 3526 *secondary_pipes |= BIT(pipe); 3527 } 3528 } 3529 } 3530 3531 static u8 expected_secondary_pipes(u8 primary_pipes, int num_pipes) 3532 { 3533 u8 secondary_pipes = 0; 3534 3535 for (int i = 1; i < num_pipes; i++) 3536 secondary_pipes |= primary_pipes << i; 3537 3538 return secondary_pipes; 3539 } 3540 3541 static u8 expected_uncompressed_joiner_secondary_pipes(u8 uncompjoiner_primary_pipes) 3542 { 3543 return expected_secondary_pipes(uncompjoiner_primary_pipes, 2); 3544 } 3545 3546 static u8 expected_bigjoiner_secondary_pipes(u8 bigjoiner_primary_pipes) 3547 { 3548 return expected_secondary_pipes(bigjoiner_primary_pipes, 2); 3549 } 3550 3551 static u8 get_joiner_primary_pipe(enum pipe pipe, u8 primary_pipes) 3552 { 3553 primary_pipes &= GENMASK(pipe, 0); 3554 3555 return primary_pipes ? BIT(fls(primary_pipes) - 1) : 0; 3556 } 3557 3558 static u8 expected_ultrajoiner_secondary_pipes(u8 ultrajoiner_primary_pipes) 3559 { 3560 return expected_secondary_pipes(ultrajoiner_primary_pipes, 4); 3561 } 3562 3563 static u8 fixup_ultrajoiner_secondary_pipes(u8 ultrajoiner_primary_pipes, 3564 u8 ultrajoiner_secondary_pipes) 3565 { 3566 return ultrajoiner_secondary_pipes | ultrajoiner_primary_pipes << 3; 3567 } 3568 3569 static void enabled_ultrajoiner_pipes(struct intel_display *display, 3570 u8 *primary_pipes, u8 *secondary_pipes) 3571 { 3572 struct intel_crtc *crtc; 3573 3574 *primary_pipes = 0; 3575 *secondary_pipes = 0; 3576 3577 if (!HAS_ULTRAJOINER(display)) 3578 return; 3579 3580 for_each_intel_crtc_in_pipe_mask(display->drm, crtc, 3581 joiner_pipes(display)) { 3582 enum intel_display_power_domain power_domain; 3583 enum pipe pipe = crtc->pipe; 3584 intel_wakeref_t wakeref; 3585 3586 power_domain = intel_dsc_power_domain(crtc, (enum transcoder)pipe); 3587 with_intel_display_power_if_enabled(display, power_domain, wakeref) { 3588 u32 tmp = intel_de_read(display, ICL_PIPE_DSS_CTL1(pipe)); 3589 3590 if (!(tmp & ULTRA_JOINER_ENABLE)) 3591 continue; 3592 3593 if (tmp & PRIMARY_ULTRA_JOINER_ENABLE) 3594 *primary_pipes |= BIT(pipe); 3595 else 3596 *secondary_pipes |= BIT(pipe); 3597 } 3598 } 3599 } 3600 3601 static void enabled_joiner_pipes(struct intel_display *display, 3602 enum pipe pipe, 3603 u8 *primary_pipe, u8 *secondary_pipes) 3604 { 3605 u8 primary_ultrajoiner_pipes; 3606 u8 primary_uncompressed_joiner_pipes, primary_bigjoiner_pipes; 3607 u8 secondary_ultrajoiner_pipes; 3608 u8 secondary_uncompressed_joiner_pipes, secondary_bigjoiner_pipes; 3609 u8 ultrajoiner_pipes; 3610 u8 uncompressed_joiner_pipes, bigjoiner_pipes; 3611 3612 enabled_ultrajoiner_pipes(display, &primary_ultrajoiner_pipes, 3613 &secondary_ultrajoiner_pipes); 3614 /* 3615 * For some strange reason the last pipe in the set of four 3616 * shouldn't have ultrajoiner enable bit set in hardware. 3617 * Set the bit anyway to make life easier. 3618 */ 3619 drm_WARN_ON(display->drm, 3620 expected_secondary_pipes(primary_ultrajoiner_pipes, 3) != 3621 secondary_ultrajoiner_pipes); 3622 secondary_ultrajoiner_pipes = 3623 fixup_ultrajoiner_secondary_pipes(primary_ultrajoiner_pipes, 3624 secondary_ultrajoiner_pipes); 3625 3626 drm_WARN_ON(display->drm, (primary_ultrajoiner_pipes & secondary_ultrajoiner_pipes) != 0); 3627 3628 enabled_uncompressed_joiner_pipes(display, &primary_uncompressed_joiner_pipes, 3629 &secondary_uncompressed_joiner_pipes); 3630 3631 drm_WARN_ON(display->drm, 3632 (primary_uncompressed_joiner_pipes & secondary_uncompressed_joiner_pipes) != 0); 3633 3634 enabled_bigjoiner_pipes(display, &primary_bigjoiner_pipes, 3635 &secondary_bigjoiner_pipes); 3636 3637 drm_WARN_ON(display->drm, 3638 (primary_bigjoiner_pipes & secondary_bigjoiner_pipes) != 0); 3639 3640 ultrajoiner_pipes = primary_ultrajoiner_pipes | secondary_ultrajoiner_pipes; 3641 uncompressed_joiner_pipes = primary_uncompressed_joiner_pipes | 3642 secondary_uncompressed_joiner_pipes; 3643 bigjoiner_pipes = primary_bigjoiner_pipes | secondary_bigjoiner_pipes; 3644 3645 drm_WARN(display->drm, (ultrajoiner_pipes & bigjoiner_pipes) != ultrajoiner_pipes, 3646 "Ultrajoiner pipes(%#x) should be bigjoiner pipes(%#x)\n", 3647 ultrajoiner_pipes, bigjoiner_pipes); 3648 3649 drm_WARN(display->drm, secondary_ultrajoiner_pipes != 3650 expected_ultrajoiner_secondary_pipes(primary_ultrajoiner_pipes), 3651 "Wrong secondary ultrajoiner pipes(expected %#x, current %#x)\n", 3652 expected_ultrajoiner_secondary_pipes(primary_ultrajoiner_pipes), 3653 secondary_ultrajoiner_pipes); 3654 3655 drm_WARN(display->drm, (uncompressed_joiner_pipes & bigjoiner_pipes) != 0, 3656 "Uncompressed joiner pipes(%#x) and bigjoiner pipes(%#x) can't intersect\n", 3657 uncompressed_joiner_pipes, bigjoiner_pipes); 3658 3659 drm_WARN(display->drm, secondary_bigjoiner_pipes != 3660 expected_bigjoiner_secondary_pipes(primary_bigjoiner_pipes), 3661 "Wrong secondary bigjoiner pipes(expected %#x, current %#x)\n", 3662 expected_bigjoiner_secondary_pipes(primary_bigjoiner_pipes), 3663 secondary_bigjoiner_pipes); 3664 3665 drm_WARN(display->drm, secondary_uncompressed_joiner_pipes != 3666 expected_uncompressed_joiner_secondary_pipes(primary_uncompressed_joiner_pipes), 3667 "Wrong secondary uncompressed joiner pipes(expected %#x, current %#x)\n", 3668 expected_uncompressed_joiner_secondary_pipes(primary_uncompressed_joiner_pipes), 3669 secondary_uncompressed_joiner_pipes); 3670 3671 *primary_pipe = 0; 3672 *secondary_pipes = 0; 3673 3674 if (ultrajoiner_pipes & BIT(pipe)) { 3675 *primary_pipe = get_joiner_primary_pipe(pipe, primary_ultrajoiner_pipes); 3676 *secondary_pipes = secondary_ultrajoiner_pipes & 3677 expected_ultrajoiner_secondary_pipes(*primary_pipe); 3678 3679 drm_WARN(display->drm, 3680 expected_ultrajoiner_secondary_pipes(*primary_pipe) != 3681 *secondary_pipes, 3682 "Wrong ultrajoiner secondary pipes for primary_pipe %#x (expected %#x, current %#x)\n", 3683 *primary_pipe, 3684 expected_ultrajoiner_secondary_pipes(*primary_pipe), 3685 *secondary_pipes); 3686 return; 3687 } 3688 3689 if (uncompressed_joiner_pipes & BIT(pipe)) { 3690 *primary_pipe = get_joiner_primary_pipe(pipe, primary_uncompressed_joiner_pipes); 3691 *secondary_pipes = secondary_uncompressed_joiner_pipes & 3692 expected_uncompressed_joiner_secondary_pipes(*primary_pipe); 3693 3694 drm_WARN(display->drm, 3695 expected_uncompressed_joiner_secondary_pipes(*primary_pipe) != 3696 *secondary_pipes, 3697 "Wrong uncompressed joiner secondary pipes for primary_pipe %#x (expected %#x, current %#x)\n", 3698 *primary_pipe, 3699 expected_uncompressed_joiner_secondary_pipes(*primary_pipe), 3700 *secondary_pipes); 3701 return; 3702 } 3703 3704 if (bigjoiner_pipes & BIT(pipe)) { 3705 *primary_pipe = get_joiner_primary_pipe(pipe, primary_bigjoiner_pipes); 3706 *secondary_pipes = secondary_bigjoiner_pipes & 3707 expected_bigjoiner_secondary_pipes(*primary_pipe); 3708 3709 drm_WARN(display->drm, 3710 expected_bigjoiner_secondary_pipes(*primary_pipe) != 3711 *secondary_pipes, 3712 "Wrong bigjoiner secondary pipes for primary_pipe %#x (expected %#x, current %#x)\n", 3713 *primary_pipe, 3714 expected_bigjoiner_secondary_pipes(*primary_pipe), 3715 *secondary_pipes); 3716 return; 3717 } 3718 } 3719 3720 static u8 hsw_panel_transcoders(struct intel_display *display) 3721 { 3722 u8 panel_transcoder_mask = BIT(TRANSCODER_EDP); 3723 3724 if (DISPLAY_VER(display) >= 11) 3725 panel_transcoder_mask |= BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1); 3726 3727 return panel_transcoder_mask; 3728 } 3729 3730 static u8 hsw_enabled_transcoders(struct intel_crtc *crtc) 3731 { 3732 struct intel_display *display = to_intel_display(crtc); 3733 u8 panel_transcoder_mask = hsw_panel_transcoders(display); 3734 enum transcoder cpu_transcoder; 3735 u8 primary_pipe, secondary_pipes; 3736 u8 enabled_transcoders = 0; 3737 3738 /* 3739 * XXX: Do intel_display_power_get_if_enabled before reading this (for 3740 * consistency and less surprising code; it's in always on power). 3741 */ 3742 for_each_cpu_transcoder_masked(display, cpu_transcoder, 3743 panel_transcoder_mask) { 3744 enum intel_display_power_domain power_domain; 3745 intel_wakeref_t wakeref; 3746 enum pipe trans_pipe; 3747 u32 tmp = 0; 3748 3749 power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder); 3750 with_intel_display_power_if_enabled(display, power_domain, wakeref) 3751 tmp = intel_de_read(display, 3752 TRANS_DDI_FUNC_CTL(display, cpu_transcoder)); 3753 3754 if (!(tmp & TRANS_DDI_FUNC_ENABLE)) 3755 continue; 3756 3757 switch (tmp & TRANS_DDI_EDP_INPUT_MASK) { 3758 default: 3759 drm_WARN(display->drm, 1, 3760 "unknown pipe linked to transcoder %s\n", 3761 transcoder_name(cpu_transcoder)); 3762 fallthrough; 3763 case TRANS_DDI_EDP_INPUT_A_ONOFF: 3764 case TRANS_DDI_EDP_INPUT_A_ON: 3765 trans_pipe = PIPE_A; 3766 break; 3767 case TRANS_DDI_EDP_INPUT_B_ONOFF: 3768 trans_pipe = PIPE_B; 3769 break; 3770 case TRANS_DDI_EDP_INPUT_C_ONOFF: 3771 trans_pipe = PIPE_C; 3772 break; 3773 case TRANS_DDI_EDP_INPUT_D_ONOFF: 3774 trans_pipe = PIPE_D; 3775 break; 3776 } 3777 3778 if (trans_pipe == crtc->pipe) 3779 enabled_transcoders |= BIT(cpu_transcoder); 3780 } 3781 3782 /* single pipe or joiner primary */ 3783 cpu_transcoder = (enum transcoder) crtc->pipe; 3784 if (transcoder_ddi_func_is_enabled(display, cpu_transcoder)) 3785 enabled_transcoders |= BIT(cpu_transcoder); 3786 3787 /* joiner secondary -> consider the primary pipe's transcoder as well */ 3788 enabled_joiner_pipes(display, crtc->pipe, &primary_pipe, &secondary_pipes); 3789 if (secondary_pipes & BIT(crtc->pipe)) { 3790 cpu_transcoder = (enum transcoder)ffs(primary_pipe) - 1; 3791 if (transcoder_ddi_func_is_enabled(display, cpu_transcoder)) 3792 enabled_transcoders |= BIT(cpu_transcoder); 3793 } 3794 3795 return enabled_transcoders; 3796 } 3797 3798 static bool has_edp_transcoders(u8 enabled_transcoders) 3799 { 3800 return enabled_transcoders & BIT(TRANSCODER_EDP); 3801 } 3802 3803 static bool has_dsi_transcoders(u8 enabled_transcoders) 3804 { 3805 return enabled_transcoders & (BIT(TRANSCODER_DSI_0) | 3806 BIT(TRANSCODER_DSI_1)); 3807 } 3808 3809 static bool has_pipe_transcoders(u8 enabled_transcoders) 3810 { 3811 return enabled_transcoders & ~(BIT(TRANSCODER_EDP) | 3812 BIT(TRANSCODER_DSI_0) | 3813 BIT(TRANSCODER_DSI_1)); 3814 } 3815 3816 static void assert_enabled_transcoders(struct intel_display *display, 3817 u8 enabled_transcoders) 3818 { 3819 /* Only one type of transcoder please */ 3820 drm_WARN_ON(display->drm, 3821 has_edp_transcoders(enabled_transcoders) + 3822 has_dsi_transcoders(enabled_transcoders) + 3823 has_pipe_transcoders(enabled_transcoders) > 1); 3824 3825 /* Only DSI transcoders can be ganged */ 3826 drm_WARN_ON(display->drm, 3827 !has_dsi_transcoders(enabled_transcoders) && 3828 !is_power_of_2(enabled_transcoders)); 3829 } 3830 3831 static bool hsw_get_transcoder_state(struct intel_crtc *crtc, 3832 struct intel_crtc_state *pipe_config, 3833 struct intel_display_power_domain_set *power_domain_set) 3834 { 3835 struct intel_display *display = to_intel_display(crtc); 3836 unsigned long enabled_transcoders; 3837 u32 tmp; 3838 3839 enabled_transcoders = hsw_enabled_transcoders(crtc); 3840 if (!enabled_transcoders) 3841 return false; 3842 3843 assert_enabled_transcoders(display, enabled_transcoders); 3844 3845 /* 3846 * With the exception of DSI we should only ever have 3847 * a single enabled transcoder. With DSI let's just 3848 * pick the first one. 3849 */ 3850 pipe_config->cpu_transcoder = ffs(enabled_transcoders) - 1; 3851 3852 if (!intel_display_power_get_in_set_if_enabled(display, power_domain_set, 3853 POWER_DOMAIN_TRANSCODER(pipe_config->cpu_transcoder))) 3854 return false; 3855 3856 if (hsw_panel_transcoders(display) & BIT(pipe_config->cpu_transcoder)) { 3857 tmp = intel_de_read(display, 3858 TRANS_DDI_FUNC_CTL(display, pipe_config->cpu_transcoder)); 3859 3860 if ((tmp & TRANS_DDI_EDP_INPUT_MASK) == TRANS_DDI_EDP_INPUT_A_ONOFF) 3861 pipe_config->pch_pfit.force_thru = true; 3862 } 3863 3864 tmp = intel_de_read(display, 3865 TRANSCONF(display, pipe_config->cpu_transcoder)); 3866 3867 return tmp & TRANSCONF_ENABLE; 3868 } 3869 3870 static bool bxt_get_dsi_transcoder_state(struct intel_crtc *crtc, 3871 struct intel_crtc_state *pipe_config, 3872 struct intel_display_power_domain_set *power_domain_set) 3873 { 3874 struct intel_display *display = to_intel_display(crtc); 3875 enum transcoder cpu_transcoder; 3876 enum port port; 3877 u32 tmp; 3878 3879 for_each_port_masked(port, BIT(PORT_A) | BIT(PORT_C)) { 3880 if (port == PORT_A) 3881 cpu_transcoder = TRANSCODER_DSI_A; 3882 else 3883 cpu_transcoder = TRANSCODER_DSI_C; 3884 3885 if (!intel_display_power_get_in_set_if_enabled(display, power_domain_set, 3886 POWER_DOMAIN_TRANSCODER(cpu_transcoder))) 3887 continue; 3888 3889 /* 3890 * The PLL needs to be enabled with a valid divider 3891 * configuration, otherwise accessing DSI registers will hang 3892 * the machine. See BSpec North Display Engine 3893 * registers/MIPI[BXT]. We can break out here early, since we 3894 * need the same DSI PLL to be enabled for both DSI ports. 3895 */ 3896 if (!bxt_dsi_pll_is_enabled(display)) 3897 break; 3898 3899 /* XXX: this works for video mode only */ 3900 tmp = intel_de_read(display, BXT_MIPI_PORT_CTRL(port)); 3901 if (!(tmp & DPI_ENABLE)) 3902 continue; 3903 3904 tmp = intel_de_read(display, MIPI_CTRL(display, port)); 3905 if ((tmp & BXT_PIPE_SELECT_MASK) != BXT_PIPE_SELECT(crtc->pipe)) 3906 continue; 3907 3908 pipe_config->cpu_transcoder = cpu_transcoder; 3909 break; 3910 } 3911 3912 return transcoder_is_dsi(pipe_config->cpu_transcoder); 3913 } 3914 3915 static void intel_joiner_get_config(struct intel_crtc_state *crtc_state) 3916 { 3917 struct intel_display *display = to_intel_display(crtc_state); 3918 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 3919 u8 primary_pipe, secondary_pipes; 3920 enum pipe pipe = crtc->pipe; 3921 3922 enabled_joiner_pipes(display, pipe, &primary_pipe, &secondary_pipes); 3923 3924 if (((primary_pipe | secondary_pipes) & BIT(pipe)) == 0) 3925 return; 3926 3927 crtc_state->joiner_pipes = primary_pipe | secondary_pipes; 3928 } 3929 3930 static bool hsw_get_pipe_config(struct intel_crtc *crtc, 3931 struct intel_crtc_state *pipe_config) 3932 { 3933 struct intel_display *display = to_intel_display(crtc); 3934 bool active; 3935 u32 tmp; 3936 3937 if (!intel_display_power_get_in_set_if_enabled(display, &crtc->hw_readout_power_domains, 3938 POWER_DOMAIN_PIPE(crtc->pipe))) 3939 return false; 3940 3941 active = hsw_get_transcoder_state(crtc, pipe_config, &crtc->hw_readout_power_domains); 3942 3943 if ((display->platform.geminilake || display->platform.broxton) && 3944 bxt_get_dsi_transcoder_state(crtc, pipe_config, &crtc->hw_readout_power_domains)) { 3945 drm_WARN_ON(display->drm, active); 3946 active = true; 3947 } 3948 3949 if (!active) 3950 goto out; 3951 3952 intel_joiner_get_config(pipe_config); 3953 intel_dsc_get_config(pipe_config); 3954 3955 if (!transcoder_is_dsi(pipe_config->cpu_transcoder) || 3956 DISPLAY_VER(display) >= 11) 3957 intel_get_transcoder_timings(crtc, pipe_config); 3958 3959 if (transcoder_has_vrr(pipe_config)) 3960 intel_vrr_get_config(pipe_config); 3961 3962 intel_get_pipe_src_size(crtc, pipe_config); 3963 3964 if (display->platform.haswell) { 3965 u32 tmp = intel_de_read(display, 3966 TRANSCONF(display, pipe_config->cpu_transcoder)); 3967 3968 if (tmp & TRANSCONF_OUTPUT_COLORSPACE_YUV_HSW) 3969 pipe_config->output_format = INTEL_OUTPUT_FORMAT_YCBCR444; 3970 else 3971 pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB; 3972 } else { 3973 pipe_config->output_format = 3974 bdw_get_pipe_misc_output_format(crtc); 3975 } 3976 3977 pipe_config->sink_format = pipe_config->output_format; 3978 3979 intel_color_get_config(pipe_config); 3980 3981 tmp = intel_de_read(display, WM_LINETIME(crtc->pipe)); 3982 pipe_config->linetime = REG_FIELD_GET(HSW_LINETIME_MASK, tmp); 3983 if (display->platform.broadwell || display->platform.haswell) 3984 pipe_config->ips_linetime = 3985 REG_FIELD_GET(HSW_IPS_LINETIME_MASK, tmp); 3986 3987 if (intel_display_power_get_in_set_if_enabled(display, &crtc->hw_readout_power_domains, 3988 POWER_DOMAIN_PIPE_PANEL_FITTER(crtc->pipe))) { 3989 if (DISPLAY_VER(display) >= 9) 3990 skl_scaler_get_config(pipe_config); 3991 else 3992 ilk_pfit_get_config(pipe_config); 3993 } 3994 3995 hsw_ips_get_config(pipe_config); 3996 3997 if (pipe_config->cpu_transcoder != TRANSCODER_EDP && 3998 !transcoder_is_dsi(pipe_config->cpu_transcoder)) { 3999 pipe_config->pixel_multiplier = 4000 intel_de_read(display, 4001 TRANS_MULT(display, pipe_config->cpu_transcoder)) + 1; 4002 } else { 4003 pipe_config->pixel_multiplier = 1; 4004 } 4005 4006 if (!transcoder_is_dsi(pipe_config->cpu_transcoder)) { 4007 tmp = intel_de_read(display, CHICKEN_TRANS(display, pipe_config->cpu_transcoder)); 4008 4009 pipe_config->framestart_delay = REG_FIELD_GET(HSW_FRAME_START_DELAY_MASK, tmp) + 1; 4010 } else { 4011 /* no idea if this is correct */ 4012 pipe_config->framestart_delay = 1; 4013 } 4014 4015 out: 4016 intel_display_power_put_all_in_set(display, &crtc->hw_readout_power_domains); 4017 4018 return active; 4019 } 4020 4021 bool intel_crtc_get_pipe_config(struct intel_crtc_state *crtc_state) 4022 { 4023 struct intel_display *display = to_intel_display(crtc_state); 4024 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 4025 4026 if (!display->funcs.display->get_pipe_config(crtc, crtc_state)) 4027 return false; 4028 4029 crtc_state->hw.active = true; 4030 4031 intel_crtc_readout_derived_state(crtc_state); 4032 4033 return true; 4034 } 4035 4036 int intel_dotclock_calculate(int link_freq, 4037 const struct intel_link_m_n *m_n) 4038 { 4039 /* 4040 * The calculation for the data clock -> pixel clock is: 4041 * pixel_clock = ((m/n)*(link_clock * nr_lanes))/bpp 4042 * But we want to avoid losing precision if possible, so: 4043 * pixel_clock = ((m * link_clock * nr_lanes)/(n*bpp)) 4044 * 4045 * and for link freq (10kbs units) -> pixel clock it is: 4046 * link_symbol_clock = link_freq * 10 / link_symbol_size 4047 * pixel_clock = (m * link_symbol_clock) / n 4048 * or for more precision: 4049 * pixel_clock = (m * link_freq * 10) / (n * link_symbol_size) 4050 */ 4051 4052 if (!m_n->link_n) 4053 return 0; 4054 4055 return DIV_ROUND_UP_ULL(mul_u32_u32(m_n->link_m, link_freq * 10), 4056 m_n->link_n * intel_dp_link_symbol_size(link_freq)); 4057 } 4058 4059 int intel_crtc_dotclock(const struct intel_crtc_state *pipe_config) 4060 { 4061 int dotclock; 4062 4063 if (intel_crtc_has_dp_encoder(pipe_config)) 4064 dotclock = intel_dotclock_calculate(pipe_config->port_clock, 4065 &pipe_config->dp_m_n); 4066 else if (pipe_config->has_hdmi_sink && pipe_config->pipe_bpp > 24) 4067 dotclock = DIV_ROUND_CLOSEST(pipe_config->port_clock * 24, 4068 pipe_config->pipe_bpp); 4069 else 4070 dotclock = pipe_config->port_clock; 4071 4072 if (pipe_config->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 && 4073 !intel_crtc_has_dp_encoder(pipe_config)) 4074 dotclock *= 2; 4075 4076 if (pipe_config->pixel_multiplier) 4077 dotclock /= pipe_config->pixel_multiplier; 4078 4079 return dotclock; 4080 } 4081 4082 /* Returns the currently programmed mode of the given encoder. */ 4083 struct drm_display_mode * 4084 intel_encoder_current_mode(struct intel_encoder *encoder) 4085 { 4086 struct intel_display *display = to_intel_display(encoder); 4087 struct intel_crtc_state *crtc_state; 4088 struct drm_display_mode *mode; 4089 struct intel_crtc *crtc; 4090 enum pipe pipe; 4091 4092 if (!encoder->get_hw_state(encoder, &pipe)) 4093 return NULL; 4094 4095 crtc = intel_crtc_for_pipe(display, pipe); 4096 4097 mode = kzalloc(sizeof(*mode), GFP_KERNEL); 4098 if (!mode) 4099 return NULL; 4100 4101 crtc_state = intel_crtc_state_alloc(crtc); 4102 if (!crtc_state) { 4103 kfree(mode); 4104 return NULL; 4105 } 4106 4107 if (!intel_crtc_get_pipe_config(crtc_state)) { 4108 intel_crtc_destroy_state(&crtc->base, &crtc_state->uapi); 4109 kfree(mode); 4110 return NULL; 4111 } 4112 4113 intel_encoder_get_config(encoder, crtc_state); 4114 4115 intel_mode_from_crtc_timings(mode, &crtc_state->hw.adjusted_mode); 4116 4117 intel_crtc_destroy_state(&crtc->base, &crtc_state->uapi); 4118 4119 return mode; 4120 } 4121 4122 static bool encoders_cloneable(const struct intel_encoder *a, 4123 const struct intel_encoder *b) 4124 { 4125 /* masks could be asymmetric, so check both ways */ 4126 return a == b || (a->cloneable & BIT(b->type) && 4127 b->cloneable & BIT(a->type)); 4128 } 4129 4130 static bool check_single_encoder_cloning(struct intel_atomic_state *state, 4131 struct intel_crtc *crtc, 4132 struct intel_encoder *encoder) 4133 { 4134 struct intel_encoder *source_encoder; 4135 struct drm_connector *connector; 4136 struct drm_connector_state *connector_state; 4137 int i; 4138 4139 for_each_new_connector_in_state(&state->base, connector, connector_state, i) { 4140 if (connector_state->crtc != &crtc->base) 4141 continue; 4142 4143 source_encoder = 4144 to_intel_encoder(connector_state->best_encoder); 4145 if (!encoders_cloneable(encoder, source_encoder)) 4146 return false; 4147 } 4148 4149 return true; 4150 } 4151 4152 static u16 hsw_linetime_wm(const struct intel_crtc_state *crtc_state) 4153 { 4154 const struct drm_display_mode *pipe_mode = 4155 &crtc_state->hw.pipe_mode; 4156 int linetime_wm; 4157 4158 if (!crtc_state->hw.enable) 4159 return 0; 4160 4161 linetime_wm = DIV_ROUND_CLOSEST(pipe_mode->crtc_htotal * 1000 * 8, 4162 pipe_mode->crtc_clock); 4163 4164 return min(linetime_wm, 0x1ff); 4165 } 4166 4167 static u16 hsw_ips_linetime_wm(const struct intel_crtc_state *crtc_state, 4168 const struct intel_cdclk_state *cdclk_state) 4169 { 4170 const struct drm_display_mode *pipe_mode = 4171 &crtc_state->hw.pipe_mode; 4172 int linetime_wm; 4173 4174 if (!crtc_state->hw.enable) 4175 return 0; 4176 4177 linetime_wm = DIV_ROUND_CLOSEST(pipe_mode->crtc_htotal * 1000 * 8, 4178 intel_cdclk_logical(cdclk_state)); 4179 4180 return min(linetime_wm, 0x1ff); 4181 } 4182 4183 static u16 skl_linetime_wm(const struct intel_crtc_state *crtc_state) 4184 { 4185 struct intel_display *display = to_intel_display(crtc_state); 4186 const struct drm_display_mode *pipe_mode = 4187 &crtc_state->hw.pipe_mode; 4188 int linetime_wm; 4189 4190 if (!crtc_state->hw.enable) 4191 return 0; 4192 4193 linetime_wm = DIV_ROUND_UP(pipe_mode->crtc_htotal * 1000 * 8, 4194 crtc_state->pixel_rate); 4195 4196 /* Display WA #1135: BXT:ALL GLK:ALL */ 4197 if ((display->platform.geminilake || display->platform.broxton) && 4198 skl_watermark_ipc_enabled(display)) 4199 linetime_wm /= 2; 4200 4201 return min(linetime_wm, 0x1ff); 4202 } 4203 4204 static int hsw_compute_linetime_wm(struct intel_atomic_state *state, 4205 struct intel_crtc *crtc) 4206 { 4207 struct intel_display *display = to_intel_display(state); 4208 struct intel_crtc_state *crtc_state = 4209 intel_atomic_get_new_crtc_state(state, crtc); 4210 const struct intel_cdclk_state *cdclk_state; 4211 4212 if (DISPLAY_VER(display) >= 9) 4213 crtc_state->linetime = skl_linetime_wm(crtc_state); 4214 else 4215 crtc_state->linetime = hsw_linetime_wm(crtc_state); 4216 4217 if (!hsw_crtc_supports_ips(crtc)) 4218 return 0; 4219 4220 cdclk_state = intel_atomic_get_cdclk_state(state); 4221 if (IS_ERR(cdclk_state)) 4222 return PTR_ERR(cdclk_state); 4223 4224 crtc_state->ips_linetime = hsw_ips_linetime_wm(crtc_state, 4225 cdclk_state); 4226 4227 return 0; 4228 } 4229 4230 static int intel_crtc_atomic_check(struct intel_atomic_state *state, 4231 struct intel_crtc *crtc) 4232 { 4233 struct intel_display *display = to_intel_display(crtc); 4234 struct intel_crtc_state *crtc_state = 4235 intel_atomic_get_new_crtc_state(state, crtc); 4236 int ret; 4237 4238 if (DISPLAY_VER(display) < 5 && !display->platform.g4x && 4239 intel_crtc_needs_modeset(crtc_state) && 4240 !crtc_state->hw.active) 4241 crtc_state->update_wm_post = true; 4242 4243 if (intel_crtc_needs_modeset(crtc_state)) { 4244 ret = intel_dpll_crtc_get_dpll(state, crtc); 4245 if (ret) 4246 return ret; 4247 } 4248 4249 ret = intel_color_check(state, crtc); 4250 if (ret) 4251 return ret; 4252 4253 ret = intel_wm_compute(state, crtc); 4254 if (ret) { 4255 drm_dbg_kms(display->drm, 4256 "[CRTC:%d:%s] watermarks are invalid\n", 4257 crtc->base.base.id, crtc->base.name); 4258 return ret; 4259 } 4260 4261 if (DISPLAY_VER(display) >= 9) { 4262 if (intel_crtc_needs_modeset(crtc_state) || 4263 intel_crtc_needs_fastset(crtc_state)) { 4264 ret = skl_update_scaler_crtc(crtc_state); 4265 if (ret) 4266 return ret; 4267 } 4268 4269 ret = intel_atomic_setup_scalers(state, crtc); 4270 if (ret) 4271 return ret; 4272 } 4273 4274 if (HAS_IPS(display)) { 4275 ret = hsw_ips_compute_config(state, crtc); 4276 if (ret) 4277 return ret; 4278 } 4279 4280 if (DISPLAY_VER(display) >= 9 || 4281 display->platform.broadwell || display->platform.haswell) { 4282 ret = hsw_compute_linetime_wm(state, crtc); 4283 if (ret) 4284 return ret; 4285 4286 } 4287 4288 ret = intel_psr2_sel_fetch_update(state, crtc); 4289 if (ret) 4290 return ret; 4291 4292 return 0; 4293 } 4294 4295 static int 4296 compute_sink_pipe_bpp(const struct drm_connector_state *conn_state, 4297 struct intel_crtc_state *crtc_state) 4298 { 4299 struct intel_display *display = to_intel_display(crtc_state); 4300 struct drm_connector *connector = conn_state->connector; 4301 const struct drm_display_info *info = &connector->display_info; 4302 int bpp; 4303 4304 switch (conn_state->max_bpc) { 4305 case 6 ... 7: 4306 bpp = 6 * 3; 4307 break; 4308 case 8 ... 9: 4309 bpp = 8 * 3; 4310 break; 4311 case 10 ... 11: 4312 bpp = 10 * 3; 4313 break; 4314 case 12 ... 16: 4315 bpp = 12 * 3; 4316 break; 4317 default: 4318 MISSING_CASE(conn_state->max_bpc); 4319 return -EINVAL; 4320 } 4321 4322 if (bpp < crtc_state->pipe_bpp) { 4323 drm_dbg_kms(display->drm, 4324 "[CONNECTOR:%d:%s] Limiting display bpp to %d " 4325 "(EDID bpp %d, max requested bpp %d, max platform bpp %d)\n", 4326 connector->base.id, connector->name, 4327 bpp, 3 * info->bpc, 4328 3 * conn_state->max_requested_bpc, 4329 crtc_state->pipe_bpp); 4330 4331 crtc_state->pipe_bpp = bpp; 4332 } 4333 4334 return 0; 4335 } 4336 4337 int intel_display_min_pipe_bpp(void) 4338 { 4339 return 6 * 3; 4340 } 4341 4342 int intel_display_max_pipe_bpp(struct intel_display *display) 4343 { 4344 if (display->platform.g4x || display->platform.valleyview || 4345 display->platform.cherryview) 4346 return 10*3; 4347 else if (DISPLAY_VER(display) >= 5) 4348 return 12*3; 4349 else 4350 return 8*3; 4351 } 4352 4353 static int 4354 compute_baseline_pipe_bpp(struct intel_atomic_state *state, 4355 struct intel_crtc *crtc) 4356 { 4357 struct intel_display *display = to_intel_display(crtc); 4358 struct intel_crtc_state *crtc_state = 4359 intel_atomic_get_new_crtc_state(state, crtc); 4360 struct drm_connector *connector; 4361 struct drm_connector_state *connector_state; 4362 int i; 4363 4364 crtc_state->pipe_bpp = intel_display_max_pipe_bpp(display); 4365 4366 /* Clamp display bpp to connector max bpp */ 4367 for_each_new_connector_in_state(&state->base, connector, connector_state, i) { 4368 int ret; 4369 4370 if (connector_state->crtc != &crtc->base) 4371 continue; 4372 4373 ret = compute_sink_pipe_bpp(connector_state, crtc_state); 4374 if (ret) 4375 return ret; 4376 } 4377 4378 return 0; 4379 } 4380 4381 static bool check_digital_port_conflicts(struct intel_atomic_state *state) 4382 { 4383 struct intel_display *display = to_intel_display(state); 4384 struct drm_connector *connector; 4385 struct drm_connector_list_iter conn_iter; 4386 unsigned int used_ports = 0; 4387 unsigned int used_mst_ports = 0; 4388 bool ret = true; 4389 4390 /* 4391 * We're going to peek into connector->state, 4392 * hence connection_mutex must be held. 4393 */ 4394 drm_modeset_lock_assert_held(&display->drm->mode_config.connection_mutex); 4395 4396 /* 4397 * Walk the connector list instead of the encoder 4398 * list to detect the problem on ddi platforms 4399 * where there's just one encoder per digital port. 4400 */ 4401 drm_connector_list_iter_begin(display->drm, &conn_iter); 4402 drm_for_each_connector_iter(connector, &conn_iter) { 4403 struct drm_connector_state *connector_state; 4404 struct intel_encoder *encoder; 4405 4406 connector_state = 4407 drm_atomic_get_new_connector_state(&state->base, 4408 connector); 4409 if (!connector_state) 4410 connector_state = connector->state; 4411 4412 if (!connector_state->best_encoder) 4413 continue; 4414 4415 encoder = to_intel_encoder(connector_state->best_encoder); 4416 4417 drm_WARN_ON(display->drm, !connector_state->crtc); 4418 4419 switch (encoder->type) { 4420 case INTEL_OUTPUT_DDI: 4421 if (drm_WARN_ON(display->drm, !HAS_DDI(display))) 4422 break; 4423 fallthrough; 4424 case INTEL_OUTPUT_DP: 4425 case INTEL_OUTPUT_HDMI: 4426 case INTEL_OUTPUT_EDP: 4427 /* the same port mustn't appear more than once */ 4428 if (used_ports & BIT(encoder->port)) 4429 ret = false; 4430 4431 used_ports |= BIT(encoder->port); 4432 break; 4433 case INTEL_OUTPUT_DP_MST: 4434 used_mst_ports |= 4435 1 << encoder->port; 4436 break; 4437 default: 4438 break; 4439 } 4440 } 4441 drm_connector_list_iter_end(&conn_iter); 4442 4443 /* can't mix MST and SST/HDMI on the same port */ 4444 if (used_ports & used_mst_ports) 4445 return false; 4446 4447 return ret; 4448 } 4449 4450 static void 4451 intel_crtc_copy_uapi_to_hw_state_nomodeset(struct intel_atomic_state *state, 4452 struct intel_crtc *crtc) 4453 { 4454 struct intel_crtc_state *crtc_state = 4455 intel_atomic_get_new_crtc_state(state, crtc); 4456 4457 WARN_ON(intel_crtc_is_joiner_secondary(crtc_state)); 4458 4459 drm_property_replace_blob(&crtc_state->hw.degamma_lut, 4460 crtc_state->uapi.degamma_lut); 4461 drm_property_replace_blob(&crtc_state->hw.gamma_lut, 4462 crtc_state->uapi.gamma_lut); 4463 drm_property_replace_blob(&crtc_state->hw.ctm, 4464 crtc_state->uapi.ctm); 4465 } 4466 4467 static void 4468 intel_crtc_copy_uapi_to_hw_state_modeset(struct intel_atomic_state *state, 4469 struct intel_crtc *crtc) 4470 { 4471 struct intel_crtc_state *crtc_state = 4472 intel_atomic_get_new_crtc_state(state, crtc); 4473 4474 WARN_ON(intel_crtc_is_joiner_secondary(crtc_state)); 4475 4476 crtc_state->hw.enable = crtc_state->uapi.enable; 4477 crtc_state->hw.active = crtc_state->uapi.active; 4478 drm_mode_copy(&crtc_state->hw.mode, 4479 &crtc_state->uapi.mode); 4480 drm_mode_copy(&crtc_state->hw.adjusted_mode, 4481 &crtc_state->uapi.adjusted_mode); 4482 crtc_state->hw.scaling_filter = crtc_state->uapi.scaling_filter; 4483 4484 intel_crtc_copy_uapi_to_hw_state_nomodeset(state, crtc); 4485 } 4486 4487 static void 4488 copy_joiner_crtc_state_nomodeset(struct intel_atomic_state *state, 4489 struct intel_crtc *secondary_crtc) 4490 { 4491 struct intel_crtc_state *secondary_crtc_state = 4492 intel_atomic_get_new_crtc_state(state, secondary_crtc); 4493 struct intel_crtc *primary_crtc = intel_primary_crtc(secondary_crtc_state); 4494 const struct intel_crtc_state *primary_crtc_state = 4495 intel_atomic_get_new_crtc_state(state, primary_crtc); 4496 4497 drm_property_replace_blob(&secondary_crtc_state->hw.degamma_lut, 4498 primary_crtc_state->hw.degamma_lut); 4499 drm_property_replace_blob(&secondary_crtc_state->hw.gamma_lut, 4500 primary_crtc_state->hw.gamma_lut); 4501 drm_property_replace_blob(&secondary_crtc_state->hw.ctm, 4502 primary_crtc_state->hw.ctm); 4503 4504 secondary_crtc_state->uapi.color_mgmt_changed = primary_crtc_state->uapi.color_mgmt_changed; 4505 } 4506 4507 static int 4508 copy_joiner_crtc_state_modeset(struct intel_atomic_state *state, 4509 struct intel_crtc *secondary_crtc) 4510 { 4511 struct intel_crtc_state *secondary_crtc_state = 4512 intel_atomic_get_new_crtc_state(state, secondary_crtc); 4513 struct intel_crtc *primary_crtc = intel_primary_crtc(secondary_crtc_state); 4514 const struct intel_crtc_state *primary_crtc_state = 4515 intel_atomic_get_new_crtc_state(state, primary_crtc); 4516 struct intel_crtc_state *saved_state; 4517 4518 WARN_ON(primary_crtc_state->joiner_pipes != 4519 secondary_crtc_state->joiner_pipes); 4520 4521 saved_state = kmemdup(primary_crtc_state, sizeof(*saved_state), GFP_KERNEL); 4522 if (!saved_state) 4523 return -ENOMEM; 4524 4525 /* preserve some things from the slave's original crtc state */ 4526 saved_state->uapi = secondary_crtc_state->uapi; 4527 saved_state->scaler_state = secondary_crtc_state->scaler_state; 4528 saved_state->intel_dpll = secondary_crtc_state->intel_dpll; 4529 saved_state->crc_enabled = secondary_crtc_state->crc_enabled; 4530 4531 intel_crtc_free_hw_state(secondary_crtc_state); 4532 if (secondary_crtc_state->dp_tunnel_ref.tunnel) 4533 drm_dp_tunnel_ref_put(&secondary_crtc_state->dp_tunnel_ref); 4534 memcpy(secondary_crtc_state, saved_state, sizeof(*secondary_crtc_state)); 4535 kfree(saved_state); 4536 4537 /* Re-init hw state */ 4538 memset(&secondary_crtc_state->hw, 0, sizeof(secondary_crtc_state->hw)); 4539 secondary_crtc_state->hw.enable = primary_crtc_state->hw.enable; 4540 secondary_crtc_state->hw.active = primary_crtc_state->hw.active; 4541 drm_mode_copy(&secondary_crtc_state->hw.mode, 4542 &primary_crtc_state->hw.mode); 4543 drm_mode_copy(&secondary_crtc_state->hw.pipe_mode, 4544 &primary_crtc_state->hw.pipe_mode); 4545 drm_mode_copy(&secondary_crtc_state->hw.adjusted_mode, 4546 &primary_crtc_state->hw.adjusted_mode); 4547 secondary_crtc_state->hw.scaling_filter = primary_crtc_state->hw.scaling_filter; 4548 4549 if (primary_crtc_state->dp_tunnel_ref.tunnel) 4550 drm_dp_tunnel_ref_get(primary_crtc_state->dp_tunnel_ref.tunnel, 4551 &secondary_crtc_state->dp_tunnel_ref); 4552 4553 copy_joiner_crtc_state_nomodeset(state, secondary_crtc); 4554 4555 secondary_crtc_state->uapi.mode_changed = primary_crtc_state->uapi.mode_changed; 4556 secondary_crtc_state->uapi.connectors_changed = primary_crtc_state->uapi.connectors_changed; 4557 secondary_crtc_state->uapi.active_changed = primary_crtc_state->uapi.active_changed; 4558 4559 WARN_ON(primary_crtc_state->joiner_pipes != 4560 secondary_crtc_state->joiner_pipes); 4561 4562 return 0; 4563 } 4564 4565 static int 4566 intel_crtc_prepare_cleared_state(struct intel_atomic_state *state, 4567 struct intel_crtc *crtc) 4568 { 4569 struct intel_display *display = to_intel_display(state); 4570 struct intel_crtc_state *crtc_state = 4571 intel_atomic_get_new_crtc_state(state, crtc); 4572 struct intel_crtc_state *saved_state; 4573 4574 saved_state = intel_crtc_state_alloc(crtc); 4575 if (!saved_state) 4576 return -ENOMEM; 4577 4578 /* free the old crtc_state->hw members */ 4579 intel_crtc_free_hw_state(crtc_state); 4580 4581 intel_dp_tunnel_atomic_clear_stream_bw(state, crtc_state); 4582 4583 /* FIXME: before the switch to atomic started, a new pipe_config was 4584 * kzalloc'd. Code that depends on any field being zero should be 4585 * fixed, so that the crtc_state can be safely duplicated. For now, 4586 * only fields that are know to not cause problems are preserved. */ 4587 4588 saved_state->uapi = crtc_state->uapi; 4589 saved_state->inherited = crtc_state->inherited; 4590 saved_state->scaler_state = crtc_state->scaler_state; 4591 saved_state->intel_dpll = crtc_state->intel_dpll; 4592 saved_state->dpll_hw_state = crtc_state->dpll_hw_state; 4593 memcpy(saved_state->icl_port_dplls, crtc_state->icl_port_dplls, 4594 sizeof(saved_state->icl_port_dplls)); 4595 saved_state->crc_enabled = crtc_state->crc_enabled; 4596 if (display->platform.g4x || 4597 display->platform.valleyview || display->platform.cherryview) 4598 saved_state->wm = crtc_state->wm; 4599 4600 memcpy(crtc_state, saved_state, sizeof(*crtc_state)); 4601 kfree(saved_state); 4602 4603 intel_crtc_copy_uapi_to_hw_state_modeset(state, crtc); 4604 4605 return 0; 4606 } 4607 4608 static int 4609 intel_modeset_pipe_config(struct intel_atomic_state *state, 4610 struct intel_crtc *crtc, 4611 const struct intel_link_bw_limits *limits) 4612 { 4613 struct intel_display *display = to_intel_display(crtc); 4614 struct intel_crtc_state *crtc_state = 4615 intel_atomic_get_new_crtc_state(state, crtc); 4616 struct drm_connector *connector; 4617 struct drm_connector_state *connector_state; 4618 int pipe_src_w, pipe_src_h; 4619 int base_bpp, ret, i; 4620 4621 crtc_state->cpu_transcoder = (enum transcoder) crtc->pipe; 4622 4623 crtc_state->framestart_delay = 1; 4624 4625 /* 4626 * Sanitize sync polarity flags based on requested ones. If neither 4627 * positive or negative polarity is requested, treat this as meaning 4628 * negative polarity. 4629 */ 4630 if (!(crtc_state->hw.adjusted_mode.flags & 4631 (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NHSYNC))) 4632 crtc_state->hw.adjusted_mode.flags |= DRM_MODE_FLAG_NHSYNC; 4633 4634 if (!(crtc_state->hw.adjusted_mode.flags & 4635 (DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC))) 4636 crtc_state->hw.adjusted_mode.flags |= DRM_MODE_FLAG_NVSYNC; 4637 4638 ret = compute_baseline_pipe_bpp(state, crtc); 4639 if (ret) 4640 return ret; 4641 4642 crtc_state->fec_enable = limits->force_fec_pipes & BIT(crtc->pipe); 4643 crtc_state->max_link_bpp_x16 = limits->max_bpp_x16[crtc->pipe]; 4644 4645 if (crtc_state->pipe_bpp > fxp_q4_to_int(crtc_state->max_link_bpp_x16)) { 4646 drm_dbg_kms(display->drm, 4647 "[CRTC:%d:%s] Link bpp limited to " FXP_Q4_FMT "\n", 4648 crtc->base.base.id, crtc->base.name, 4649 FXP_Q4_ARGS(crtc_state->max_link_bpp_x16)); 4650 crtc_state->bw_constrained = true; 4651 } 4652 4653 base_bpp = crtc_state->pipe_bpp; 4654 4655 /* 4656 * Determine the real pipe dimensions. Note that stereo modes can 4657 * increase the actual pipe size due to the frame doubling and 4658 * insertion of additional space for blanks between the frame. This 4659 * is stored in the crtc timings. We use the requested mode to do this 4660 * computation to clearly distinguish it from the adjusted mode, which 4661 * can be changed by the connectors in the below retry loop. 4662 */ 4663 drm_mode_get_hv_timing(&crtc_state->hw.mode, 4664 &pipe_src_w, &pipe_src_h); 4665 drm_rect_init(&crtc_state->pipe_src, 0, 0, 4666 pipe_src_w, pipe_src_h); 4667 4668 for_each_new_connector_in_state(&state->base, connector, connector_state, i) { 4669 struct intel_encoder *encoder = 4670 to_intel_encoder(connector_state->best_encoder); 4671 4672 if (connector_state->crtc != &crtc->base) 4673 continue; 4674 4675 if (!check_single_encoder_cloning(state, crtc, encoder)) { 4676 drm_dbg_kms(display->drm, 4677 "[ENCODER:%d:%s] rejecting invalid cloning configuration\n", 4678 encoder->base.base.id, encoder->base.name); 4679 return -EINVAL; 4680 } 4681 4682 /* 4683 * Determine output_types before calling the .compute_config() 4684 * hooks so that the hooks can use this information safely. 4685 */ 4686 if (encoder->compute_output_type) 4687 crtc_state->output_types |= 4688 BIT(encoder->compute_output_type(encoder, crtc_state, 4689 connector_state)); 4690 else 4691 crtc_state->output_types |= BIT(encoder->type); 4692 } 4693 4694 /* Ensure the port clock defaults are reset when retrying. */ 4695 crtc_state->port_clock = 0; 4696 crtc_state->pixel_multiplier = 1; 4697 4698 /* Fill in default crtc timings, allow encoders to overwrite them. */ 4699 drm_mode_set_crtcinfo(&crtc_state->hw.adjusted_mode, 4700 CRTC_STEREO_DOUBLE); 4701 4702 /* Pass our mode to the connectors and the CRTC to give them a chance to 4703 * adjust it according to limitations or connector properties, and also 4704 * a chance to reject the mode entirely. 4705 */ 4706 for_each_new_connector_in_state(&state->base, connector, connector_state, i) { 4707 struct intel_encoder *encoder = 4708 to_intel_encoder(connector_state->best_encoder); 4709 4710 if (connector_state->crtc != &crtc->base) 4711 continue; 4712 4713 ret = encoder->compute_config(encoder, crtc_state, 4714 connector_state); 4715 if (ret == -EDEADLK) 4716 return ret; 4717 if (ret < 0) { 4718 drm_dbg_kms(display->drm, "[ENCODER:%d:%s] config failure: %d\n", 4719 encoder->base.base.id, encoder->base.name, ret); 4720 return ret; 4721 } 4722 } 4723 4724 /* Set default port clock if not overwritten by the encoder. Needs to be 4725 * done afterwards in case the encoder adjusts the mode. */ 4726 if (!crtc_state->port_clock) 4727 crtc_state->port_clock = crtc_state->hw.adjusted_mode.crtc_clock 4728 * crtc_state->pixel_multiplier; 4729 4730 ret = intel_crtc_compute_config(state, crtc); 4731 if (ret == -EDEADLK) 4732 return ret; 4733 if (ret < 0) { 4734 drm_dbg_kms(display->drm, "[CRTC:%d:%s] config failure: %d\n", 4735 crtc->base.base.id, crtc->base.name, ret); 4736 return ret; 4737 } 4738 4739 /* Dithering seems to not pass-through bits correctly when it should, so 4740 * only enable it on 6bpc panels and when its not a compliance 4741 * test requesting 6bpc video pattern. 4742 */ 4743 crtc_state->dither = (crtc_state->pipe_bpp == 6*3) && 4744 !crtc_state->dither_force_disable; 4745 drm_dbg_kms(display->drm, 4746 "[CRTC:%d:%s] hw max bpp: %i, pipe bpp: %i, dithering: %i\n", 4747 crtc->base.base.id, crtc->base.name, 4748 base_bpp, crtc_state->pipe_bpp, crtc_state->dither); 4749 4750 return 0; 4751 } 4752 4753 static int 4754 intel_modeset_pipe_config_late(struct intel_atomic_state *state, 4755 struct intel_crtc *crtc) 4756 { 4757 struct intel_crtc_state *crtc_state = 4758 intel_atomic_get_new_crtc_state(state, crtc); 4759 struct drm_connector_state *conn_state; 4760 struct drm_connector *connector; 4761 int i; 4762 4763 intel_vrr_compute_config_late(crtc_state); 4764 4765 for_each_new_connector_in_state(&state->base, connector, 4766 conn_state, i) { 4767 struct intel_encoder *encoder = 4768 to_intel_encoder(conn_state->best_encoder); 4769 int ret; 4770 4771 if (conn_state->crtc != &crtc->base || 4772 !encoder->compute_config_late) 4773 continue; 4774 4775 ret = encoder->compute_config_late(encoder, crtc_state, 4776 conn_state); 4777 if (ret) 4778 return ret; 4779 } 4780 4781 return 0; 4782 } 4783 4784 bool intel_fuzzy_clock_check(int clock1, int clock2) 4785 { 4786 int diff; 4787 4788 if (clock1 == clock2) 4789 return true; 4790 4791 if (!clock1 || !clock2) 4792 return false; 4793 4794 diff = abs(clock1 - clock2); 4795 4796 if (((((diff + clock1 + clock2) * 100)) / (clock1 + clock2)) < 105) 4797 return true; 4798 4799 return false; 4800 } 4801 4802 static bool 4803 intel_compare_link_m_n(const struct intel_link_m_n *m_n, 4804 const struct intel_link_m_n *m2_n2) 4805 { 4806 return m_n->tu == m2_n2->tu && 4807 m_n->data_m == m2_n2->data_m && 4808 m_n->data_n == m2_n2->data_n && 4809 m_n->link_m == m2_n2->link_m && 4810 m_n->link_n == m2_n2->link_n; 4811 } 4812 4813 static bool 4814 intel_compare_infoframe(const union hdmi_infoframe *a, 4815 const union hdmi_infoframe *b) 4816 { 4817 return memcmp(a, b, sizeof(*a)) == 0; 4818 } 4819 4820 static bool 4821 intel_compare_dp_vsc_sdp(const struct drm_dp_vsc_sdp *a, 4822 const struct drm_dp_vsc_sdp *b) 4823 { 4824 return a->pixelformat == b->pixelformat && 4825 a->colorimetry == b->colorimetry && 4826 a->bpc == b->bpc && 4827 a->dynamic_range == b->dynamic_range && 4828 a->content_type == b->content_type; 4829 } 4830 4831 static bool 4832 intel_compare_dp_as_sdp(const struct drm_dp_as_sdp *a, 4833 const struct drm_dp_as_sdp *b) 4834 { 4835 return a->vtotal == b->vtotal && 4836 a->target_rr == b->target_rr && 4837 a->duration_incr_ms == b->duration_incr_ms && 4838 a->duration_decr_ms == b->duration_decr_ms && 4839 a->mode == b->mode; 4840 } 4841 4842 static bool 4843 intel_compare_buffer(const u8 *a, const u8 *b, size_t len) 4844 { 4845 return memcmp(a, b, len) == 0; 4846 } 4847 4848 static void __printf(5, 6) 4849 pipe_config_mismatch(struct drm_printer *p, bool fastset, 4850 const struct intel_crtc *crtc, 4851 const char *name, const char *format, ...) 4852 { 4853 struct va_format vaf; 4854 va_list args; 4855 4856 va_start(args, format); 4857 vaf.fmt = format; 4858 vaf.va = &args; 4859 4860 if (fastset) 4861 drm_printf(p, "[CRTC:%d:%s] fastset requirement not met in %s %pV\n", 4862 crtc->base.base.id, crtc->base.name, name, &vaf); 4863 else 4864 drm_printf(p, "[CRTC:%d:%s] mismatch in %s %pV\n", 4865 crtc->base.base.id, crtc->base.name, name, &vaf); 4866 4867 va_end(args); 4868 } 4869 4870 static void 4871 pipe_config_infoframe_mismatch(struct drm_printer *p, bool fastset, 4872 const struct intel_crtc *crtc, 4873 const char *name, 4874 const union hdmi_infoframe *a, 4875 const union hdmi_infoframe *b) 4876 { 4877 struct intel_display *display = to_intel_display(crtc); 4878 const char *loglevel; 4879 4880 if (fastset) { 4881 if (!drm_debug_enabled(DRM_UT_KMS)) 4882 return; 4883 4884 loglevel = KERN_DEBUG; 4885 } else { 4886 loglevel = KERN_ERR; 4887 } 4888 4889 pipe_config_mismatch(p, fastset, crtc, name, "infoframe"); 4890 4891 drm_printf(p, "expected:\n"); 4892 hdmi_infoframe_log(loglevel, display->drm->dev, a); 4893 drm_printf(p, "found:\n"); 4894 hdmi_infoframe_log(loglevel, display->drm->dev, b); 4895 } 4896 4897 static void 4898 pipe_config_dp_vsc_sdp_mismatch(struct drm_printer *p, bool fastset, 4899 const struct intel_crtc *crtc, 4900 const char *name, 4901 const struct drm_dp_vsc_sdp *a, 4902 const struct drm_dp_vsc_sdp *b) 4903 { 4904 pipe_config_mismatch(p, fastset, crtc, name, "dp vsc sdp"); 4905 4906 drm_printf(p, "expected:\n"); 4907 drm_dp_vsc_sdp_log(p, a); 4908 drm_printf(p, "found:\n"); 4909 drm_dp_vsc_sdp_log(p, b); 4910 } 4911 4912 static void 4913 pipe_config_dp_as_sdp_mismatch(struct drm_printer *p, bool fastset, 4914 const struct intel_crtc *crtc, 4915 const char *name, 4916 const struct drm_dp_as_sdp *a, 4917 const struct drm_dp_as_sdp *b) 4918 { 4919 pipe_config_mismatch(p, fastset, crtc, name, "dp as sdp"); 4920 4921 drm_printf(p, "expected:\n"); 4922 drm_dp_as_sdp_log(p, a); 4923 drm_printf(p, "found:\n"); 4924 drm_dp_as_sdp_log(p, b); 4925 } 4926 4927 /* Returns the length up to and including the last differing byte */ 4928 static size_t 4929 memcmp_diff_len(const u8 *a, const u8 *b, size_t len) 4930 { 4931 int i; 4932 4933 for (i = len - 1; i >= 0; i--) { 4934 if (a[i] != b[i]) 4935 return i + 1; 4936 } 4937 4938 return 0; 4939 } 4940 4941 static void 4942 pipe_config_buffer_mismatch(struct drm_printer *p, bool fastset, 4943 const struct intel_crtc *crtc, 4944 const char *name, 4945 const u8 *a, const u8 *b, size_t len) 4946 { 4947 pipe_config_mismatch(p, fastset, crtc, name, "buffer"); 4948 4949 /* only dump up to the last difference */ 4950 len = memcmp_diff_len(a, b, len); 4951 4952 drm_print_hex_dump(p, "expected: ", a, len); 4953 drm_print_hex_dump(p, "found: ", b, len); 4954 } 4955 4956 static void 4957 pipe_config_pll_mismatch(struct drm_printer *p, bool fastset, 4958 const struct intel_crtc *crtc, 4959 const char *name, 4960 const struct intel_dpll_hw_state *a, 4961 const struct intel_dpll_hw_state *b) 4962 { 4963 struct intel_display *display = to_intel_display(crtc); 4964 4965 pipe_config_mismatch(p, fastset, crtc, name, " "); /* stupid -Werror=format-zero-length */ 4966 4967 drm_printf(p, "expected:\n"); 4968 intel_dpll_dump_hw_state(display, p, a); 4969 drm_printf(p, "found:\n"); 4970 intel_dpll_dump_hw_state(display, p, b); 4971 } 4972 4973 static void 4974 pipe_config_cx0pll_mismatch(struct drm_printer *p, bool fastset, 4975 const struct intel_crtc *crtc, 4976 const char *name, 4977 const struct intel_cx0pll_state *a, 4978 const struct intel_cx0pll_state *b) 4979 { 4980 struct intel_display *display = to_intel_display(crtc); 4981 char *chipname = a->use_c10 ? "C10" : "C20"; 4982 4983 pipe_config_mismatch(p, fastset, crtc, name, chipname); 4984 4985 drm_printf(p, "expected:\n"); 4986 intel_cx0pll_dump_hw_state(display, a); 4987 drm_printf(p, "found:\n"); 4988 intel_cx0pll_dump_hw_state(display, b); 4989 } 4990 4991 static bool allow_vblank_delay_fastset(const struct intel_crtc_state *old_crtc_state) 4992 { 4993 struct intel_display *display = to_intel_display(old_crtc_state); 4994 4995 /* 4996 * Allow fastboot to fix up vblank delay (handled via LRR 4997 * codepaths), a bit dodgy as the registers aren't 4998 * double buffered but seems to be working more or less... 4999 */ 5000 return HAS_LRR(display) && old_crtc_state->inherited && 5001 !intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI); 5002 } 5003 5004 bool 5005 intel_pipe_config_compare(const struct intel_crtc_state *current_config, 5006 const struct intel_crtc_state *pipe_config, 5007 bool fastset) 5008 { 5009 struct intel_display *display = to_intel_display(current_config); 5010 struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); 5011 struct drm_printer p; 5012 u32 exclude_infoframes = 0; 5013 bool ret = true; 5014 5015 if (fastset) 5016 p = drm_dbg_printer(display->drm, DRM_UT_KMS, NULL); 5017 else 5018 p = drm_err_printer(display->drm, NULL); 5019 5020 #define PIPE_CONF_CHECK_X(name) do { \ 5021 if (current_config->name != pipe_config->name) { \ 5022 BUILD_BUG_ON_MSG(__same_type(current_config->name, bool), \ 5023 __stringify(name) " is bool"); \ 5024 pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \ 5025 "(expected 0x%08x, found 0x%08x)", \ 5026 current_config->name, \ 5027 pipe_config->name); \ 5028 ret = false; \ 5029 } \ 5030 } while (0) 5031 5032 #define PIPE_CONF_CHECK_X_WITH_MASK(name, mask) do { \ 5033 if ((current_config->name & (mask)) != (pipe_config->name & (mask))) { \ 5034 BUILD_BUG_ON_MSG(__same_type(current_config->name, bool), \ 5035 __stringify(name) " is bool"); \ 5036 pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \ 5037 "(expected 0x%08x, found 0x%08x)", \ 5038 current_config->name & (mask), \ 5039 pipe_config->name & (mask)); \ 5040 ret = false; \ 5041 } \ 5042 } while (0) 5043 5044 #define PIPE_CONF_CHECK_I(name) do { \ 5045 if (current_config->name != pipe_config->name) { \ 5046 BUILD_BUG_ON_MSG(__same_type(current_config->name, bool), \ 5047 __stringify(name) " is bool"); \ 5048 pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \ 5049 "(expected %i, found %i)", \ 5050 current_config->name, \ 5051 pipe_config->name); \ 5052 ret = false; \ 5053 } \ 5054 } while (0) 5055 5056 #define PIPE_CONF_CHECK_LLI(name) do { \ 5057 if (current_config->name != pipe_config->name) { \ 5058 pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \ 5059 "(expected %lli, found %lli)", \ 5060 current_config->name, \ 5061 pipe_config->name); \ 5062 ret = false; \ 5063 } \ 5064 } while (0) 5065 5066 #define PIPE_CONF_CHECK_BOOL(name) do { \ 5067 if (current_config->name != pipe_config->name) { \ 5068 BUILD_BUG_ON_MSG(!__same_type(current_config->name, bool), \ 5069 __stringify(name) " is not bool"); \ 5070 pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \ 5071 "(expected %s, found %s)", \ 5072 str_yes_no(current_config->name), \ 5073 str_yes_no(pipe_config->name)); \ 5074 ret = false; \ 5075 } \ 5076 } while (0) 5077 5078 #define PIPE_CONF_CHECK_P(name) do { \ 5079 if (current_config->name != pipe_config->name) { \ 5080 pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \ 5081 "(expected %p, found %p)", \ 5082 current_config->name, \ 5083 pipe_config->name); \ 5084 ret = false; \ 5085 } \ 5086 } while (0) 5087 5088 #define PIPE_CONF_CHECK_M_N(name) do { \ 5089 if (!intel_compare_link_m_n(¤t_config->name, \ 5090 &pipe_config->name)) { \ 5091 pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \ 5092 "(expected tu %i data %i/%i link %i/%i, " \ 5093 "found tu %i, data %i/%i link %i/%i)", \ 5094 current_config->name.tu, \ 5095 current_config->name.data_m, \ 5096 current_config->name.data_n, \ 5097 current_config->name.link_m, \ 5098 current_config->name.link_n, \ 5099 pipe_config->name.tu, \ 5100 pipe_config->name.data_m, \ 5101 pipe_config->name.data_n, \ 5102 pipe_config->name.link_m, \ 5103 pipe_config->name.link_n); \ 5104 ret = false; \ 5105 } \ 5106 } while (0) 5107 5108 #define PIPE_CONF_CHECK_PLL(name) do { \ 5109 if (!intel_dpll_compare_hw_state(display, ¤t_config->name, \ 5110 &pipe_config->name)) { \ 5111 pipe_config_pll_mismatch(&p, fastset, crtc, __stringify(name), \ 5112 ¤t_config->name, \ 5113 &pipe_config->name); \ 5114 ret = false; \ 5115 } \ 5116 } while (0) 5117 5118 #define PIPE_CONF_CHECK_PLL_CX0(name) do { \ 5119 if (!intel_cx0pll_compare_hw_state(¤t_config->name, \ 5120 &pipe_config->name)) { \ 5121 pipe_config_cx0pll_mismatch(&p, fastset, crtc, __stringify(name), \ 5122 ¤t_config->name, \ 5123 &pipe_config->name); \ 5124 ret = false; \ 5125 } \ 5126 } while (0) 5127 5128 #define PIPE_CONF_CHECK_TIMINGS(name) do { \ 5129 PIPE_CONF_CHECK_I(name.crtc_hdisplay); \ 5130 PIPE_CONF_CHECK_I(name.crtc_htotal); \ 5131 PIPE_CONF_CHECK_I(name.crtc_hblank_start); \ 5132 PIPE_CONF_CHECK_I(name.crtc_hblank_end); \ 5133 PIPE_CONF_CHECK_I(name.crtc_hsync_start); \ 5134 PIPE_CONF_CHECK_I(name.crtc_hsync_end); \ 5135 PIPE_CONF_CHECK_I(name.crtc_vdisplay); \ 5136 if (!fastset || !allow_vblank_delay_fastset(current_config)) \ 5137 PIPE_CONF_CHECK_I(name.crtc_vblank_start); \ 5138 PIPE_CONF_CHECK_I(name.crtc_vsync_start); \ 5139 PIPE_CONF_CHECK_I(name.crtc_vsync_end); \ 5140 if (!fastset || !pipe_config->update_lrr) { \ 5141 PIPE_CONF_CHECK_I(name.crtc_vtotal); \ 5142 PIPE_CONF_CHECK_I(name.crtc_vblank_end); \ 5143 } \ 5144 } while (0) 5145 5146 #define PIPE_CONF_CHECK_RECT(name) do { \ 5147 PIPE_CONF_CHECK_I(name.x1); \ 5148 PIPE_CONF_CHECK_I(name.x2); \ 5149 PIPE_CONF_CHECK_I(name.y1); \ 5150 PIPE_CONF_CHECK_I(name.y2); \ 5151 } while (0) 5152 5153 #define PIPE_CONF_CHECK_FLAGS(name, mask) do { \ 5154 if ((current_config->name ^ pipe_config->name) & (mask)) { \ 5155 pipe_config_mismatch(&p, fastset, crtc, __stringify(name), \ 5156 "(%x) (expected %i, found %i)", \ 5157 (mask), \ 5158 current_config->name & (mask), \ 5159 pipe_config->name & (mask)); \ 5160 ret = false; \ 5161 } \ 5162 } while (0) 5163 5164 #define PIPE_CONF_CHECK_INFOFRAME(name) do { \ 5165 if (!intel_compare_infoframe(¤t_config->infoframes.name, \ 5166 &pipe_config->infoframes.name)) { \ 5167 pipe_config_infoframe_mismatch(&p, fastset, crtc, __stringify(name), \ 5168 ¤t_config->infoframes.name, \ 5169 &pipe_config->infoframes.name); \ 5170 ret = false; \ 5171 } \ 5172 } while (0) 5173 5174 #define PIPE_CONF_CHECK_DP_VSC_SDP(name) do { \ 5175 if (!intel_compare_dp_vsc_sdp(¤t_config->infoframes.name, \ 5176 &pipe_config->infoframes.name)) { \ 5177 pipe_config_dp_vsc_sdp_mismatch(&p, fastset, crtc, __stringify(name), \ 5178 ¤t_config->infoframes.name, \ 5179 &pipe_config->infoframes.name); \ 5180 ret = false; \ 5181 } \ 5182 } while (0) 5183 5184 #define PIPE_CONF_CHECK_DP_AS_SDP(name) do { \ 5185 if (!intel_compare_dp_as_sdp(¤t_config->infoframes.name, \ 5186 &pipe_config->infoframes.name)) { \ 5187 pipe_config_dp_as_sdp_mismatch(&p, fastset, crtc, __stringify(name), \ 5188 ¤t_config->infoframes.name, \ 5189 &pipe_config->infoframes.name); \ 5190 ret = false; \ 5191 } \ 5192 } while (0) 5193 5194 #define PIPE_CONF_CHECK_BUFFER(name, len) do { \ 5195 BUILD_BUG_ON(sizeof(current_config->name) != (len)); \ 5196 BUILD_BUG_ON(sizeof(pipe_config->name) != (len)); \ 5197 if (!intel_compare_buffer(current_config->name, pipe_config->name, (len))) { \ 5198 pipe_config_buffer_mismatch(&p, fastset, crtc, __stringify(name), \ 5199 current_config->name, \ 5200 pipe_config->name, \ 5201 (len)); \ 5202 ret = false; \ 5203 } \ 5204 } while (0) 5205 5206 #define PIPE_CONF_CHECK_COLOR_LUT(lut, is_pre_csc_lut) do { \ 5207 if (current_config->gamma_mode == pipe_config->gamma_mode && \ 5208 !intel_color_lut_equal(current_config, \ 5209 current_config->lut, pipe_config->lut, \ 5210 is_pre_csc_lut)) { \ 5211 pipe_config_mismatch(&p, fastset, crtc, __stringify(lut), \ 5212 "hw_state doesn't match sw_state"); \ 5213 ret = false; \ 5214 } \ 5215 } while (0) 5216 5217 #define PIPE_CONF_CHECK_CSC(name) do { \ 5218 PIPE_CONF_CHECK_X(name.preoff[0]); \ 5219 PIPE_CONF_CHECK_X(name.preoff[1]); \ 5220 PIPE_CONF_CHECK_X(name.preoff[2]); \ 5221 PIPE_CONF_CHECK_X(name.coeff[0]); \ 5222 PIPE_CONF_CHECK_X(name.coeff[1]); \ 5223 PIPE_CONF_CHECK_X(name.coeff[2]); \ 5224 PIPE_CONF_CHECK_X(name.coeff[3]); \ 5225 PIPE_CONF_CHECK_X(name.coeff[4]); \ 5226 PIPE_CONF_CHECK_X(name.coeff[5]); \ 5227 PIPE_CONF_CHECK_X(name.coeff[6]); \ 5228 PIPE_CONF_CHECK_X(name.coeff[7]); \ 5229 PIPE_CONF_CHECK_X(name.coeff[8]); \ 5230 PIPE_CONF_CHECK_X(name.postoff[0]); \ 5231 PIPE_CONF_CHECK_X(name.postoff[1]); \ 5232 PIPE_CONF_CHECK_X(name.postoff[2]); \ 5233 } while (0) 5234 5235 #define PIPE_CONF_QUIRK(quirk) \ 5236 ((current_config->quirks | pipe_config->quirks) & (quirk)) 5237 5238 PIPE_CONF_CHECK_BOOL(hw.enable); 5239 PIPE_CONF_CHECK_BOOL(hw.active); 5240 5241 PIPE_CONF_CHECK_I(cpu_transcoder); 5242 PIPE_CONF_CHECK_I(mst_master_transcoder); 5243 5244 PIPE_CONF_CHECK_BOOL(has_pch_encoder); 5245 PIPE_CONF_CHECK_I(fdi_lanes); 5246 PIPE_CONF_CHECK_M_N(fdi_m_n); 5247 5248 PIPE_CONF_CHECK_I(lane_count); 5249 PIPE_CONF_CHECK_X(lane_lat_optim_mask); 5250 5251 PIPE_CONF_CHECK_I(min_hblank); 5252 5253 if (HAS_DOUBLE_BUFFERED_M_N(display)) { 5254 if (!fastset || !pipe_config->update_m_n) 5255 PIPE_CONF_CHECK_M_N(dp_m_n); 5256 } else { 5257 PIPE_CONF_CHECK_M_N(dp_m_n); 5258 PIPE_CONF_CHECK_M_N(dp_m2_n2); 5259 } 5260 5261 PIPE_CONF_CHECK_X(output_types); 5262 5263 PIPE_CONF_CHECK_I(framestart_delay); 5264 PIPE_CONF_CHECK_I(msa_timing_delay); 5265 5266 PIPE_CONF_CHECK_TIMINGS(hw.pipe_mode); 5267 PIPE_CONF_CHECK_TIMINGS(hw.adjusted_mode); 5268 5269 PIPE_CONF_CHECK_I(pixel_multiplier); 5270 5271 PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags, 5272 DRM_MODE_FLAG_INTERLACE); 5273 5274 if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_MODE_SYNC_FLAGS)) { 5275 PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags, 5276 DRM_MODE_FLAG_PHSYNC); 5277 PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags, 5278 DRM_MODE_FLAG_NHSYNC); 5279 PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags, 5280 DRM_MODE_FLAG_PVSYNC); 5281 PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags, 5282 DRM_MODE_FLAG_NVSYNC); 5283 } 5284 5285 PIPE_CONF_CHECK_I(output_format); 5286 PIPE_CONF_CHECK_BOOL(has_hdmi_sink); 5287 if ((DISPLAY_VER(display) < 8 && !display->platform.haswell) || 5288 display->platform.valleyview || display->platform.cherryview) 5289 PIPE_CONF_CHECK_BOOL(limited_color_range); 5290 5291 PIPE_CONF_CHECK_BOOL(hdmi_scrambling); 5292 PIPE_CONF_CHECK_BOOL(hdmi_high_tmds_clock_ratio); 5293 PIPE_CONF_CHECK_BOOL(has_infoframe); 5294 PIPE_CONF_CHECK_BOOL(enhanced_framing); 5295 PIPE_CONF_CHECK_BOOL(fec_enable); 5296 5297 if (!fastset) { 5298 PIPE_CONF_CHECK_BOOL(has_audio); 5299 PIPE_CONF_CHECK_BUFFER(eld, MAX_ELD_BYTES); 5300 } 5301 5302 PIPE_CONF_CHECK_X(gmch_pfit.control); 5303 /* pfit ratios are autocomputed by the hw on gen4+ */ 5304 if (DISPLAY_VER(display) < 4) 5305 PIPE_CONF_CHECK_X(gmch_pfit.pgm_ratios); 5306 PIPE_CONF_CHECK_X(gmch_pfit.lvds_border_bits); 5307 5308 /* 5309 * Changing the EDP transcoder input mux 5310 * (A_ONOFF vs. A_ON) requires a full modeset. 5311 */ 5312 PIPE_CONF_CHECK_BOOL(pch_pfit.force_thru); 5313 5314 if (!fastset) { 5315 PIPE_CONF_CHECK_RECT(pipe_src); 5316 5317 PIPE_CONF_CHECK_BOOL(pch_pfit.enabled); 5318 PIPE_CONF_CHECK_RECT(pch_pfit.dst); 5319 5320 PIPE_CONF_CHECK_I(scaler_state.scaler_id); 5321 PIPE_CONF_CHECK_I(pixel_rate); 5322 5323 PIPE_CONF_CHECK_X(gamma_mode); 5324 if (display->platform.cherryview) 5325 PIPE_CONF_CHECK_X(cgm_mode); 5326 else 5327 PIPE_CONF_CHECK_X(csc_mode); 5328 PIPE_CONF_CHECK_BOOL(gamma_enable); 5329 PIPE_CONF_CHECK_BOOL(csc_enable); 5330 PIPE_CONF_CHECK_BOOL(wgc_enable); 5331 5332 PIPE_CONF_CHECK_I(linetime); 5333 PIPE_CONF_CHECK_I(ips_linetime); 5334 5335 PIPE_CONF_CHECK_COLOR_LUT(pre_csc_lut, true); 5336 PIPE_CONF_CHECK_COLOR_LUT(post_csc_lut, false); 5337 5338 PIPE_CONF_CHECK_CSC(csc); 5339 PIPE_CONF_CHECK_CSC(output_csc); 5340 } 5341 5342 PIPE_CONF_CHECK_BOOL(double_wide); 5343 5344 if (display->dpll.mgr) 5345 PIPE_CONF_CHECK_P(intel_dpll); 5346 5347 /* FIXME convert everything over the dpll_mgr */ 5348 if (display->dpll.mgr || HAS_GMCH(display)) 5349 PIPE_CONF_CHECK_PLL(dpll_hw_state); 5350 5351 /* FIXME convert MTL+ platforms over to dpll_mgr */ 5352 if (DISPLAY_VER(display) >= 14) 5353 PIPE_CONF_CHECK_PLL_CX0(dpll_hw_state.cx0pll); 5354 5355 PIPE_CONF_CHECK_X(dsi_pll.ctrl); 5356 PIPE_CONF_CHECK_X(dsi_pll.div); 5357 5358 if (display->platform.g4x || DISPLAY_VER(display) >= 5) 5359 PIPE_CONF_CHECK_I(pipe_bpp); 5360 5361 if (!fastset || !pipe_config->update_m_n) { 5362 PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_clock); 5363 PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_clock); 5364 } 5365 PIPE_CONF_CHECK_I(port_clock); 5366 5367 PIPE_CONF_CHECK_I(min_voltage_level); 5368 5369 if (current_config->has_psr || pipe_config->has_psr) 5370 exclude_infoframes |= intel_hdmi_infoframe_enable(DP_SDP_VSC); 5371 5372 if (current_config->vrr.enable || pipe_config->vrr.enable) 5373 exclude_infoframes |= intel_hdmi_infoframe_enable(DP_SDP_ADAPTIVE_SYNC); 5374 5375 PIPE_CONF_CHECK_X_WITH_MASK(infoframes.enable, ~exclude_infoframes); 5376 PIPE_CONF_CHECK_X(infoframes.gcp); 5377 PIPE_CONF_CHECK_INFOFRAME(avi); 5378 PIPE_CONF_CHECK_INFOFRAME(spd); 5379 PIPE_CONF_CHECK_INFOFRAME(hdmi); 5380 if (!fastset) { 5381 PIPE_CONF_CHECK_INFOFRAME(drm); 5382 PIPE_CONF_CHECK_DP_AS_SDP(as_sdp); 5383 } 5384 PIPE_CONF_CHECK_DP_VSC_SDP(vsc); 5385 5386 PIPE_CONF_CHECK_X(sync_mode_slaves_mask); 5387 PIPE_CONF_CHECK_I(master_transcoder); 5388 PIPE_CONF_CHECK_X(joiner_pipes); 5389 5390 PIPE_CONF_CHECK_BOOL(dsc.config.block_pred_enable); 5391 PIPE_CONF_CHECK_BOOL(dsc.config.convert_rgb); 5392 PIPE_CONF_CHECK_BOOL(dsc.config.simple_422); 5393 PIPE_CONF_CHECK_BOOL(dsc.config.native_422); 5394 PIPE_CONF_CHECK_BOOL(dsc.config.native_420); 5395 PIPE_CONF_CHECK_BOOL(dsc.config.vbr_enable); 5396 PIPE_CONF_CHECK_I(dsc.config.line_buf_depth); 5397 PIPE_CONF_CHECK_I(dsc.config.bits_per_component); 5398 PIPE_CONF_CHECK_I(dsc.config.pic_width); 5399 PIPE_CONF_CHECK_I(dsc.config.pic_height); 5400 PIPE_CONF_CHECK_I(dsc.config.slice_width); 5401 PIPE_CONF_CHECK_I(dsc.config.slice_height); 5402 PIPE_CONF_CHECK_I(dsc.config.initial_dec_delay); 5403 PIPE_CONF_CHECK_I(dsc.config.initial_xmit_delay); 5404 PIPE_CONF_CHECK_I(dsc.config.scale_decrement_interval); 5405 PIPE_CONF_CHECK_I(dsc.config.scale_increment_interval); 5406 PIPE_CONF_CHECK_I(dsc.config.initial_scale_value); 5407 PIPE_CONF_CHECK_I(dsc.config.first_line_bpg_offset); 5408 PIPE_CONF_CHECK_I(dsc.config.flatness_min_qp); 5409 PIPE_CONF_CHECK_I(dsc.config.flatness_max_qp); 5410 PIPE_CONF_CHECK_I(dsc.config.slice_bpg_offset); 5411 PIPE_CONF_CHECK_I(dsc.config.nfl_bpg_offset); 5412 PIPE_CONF_CHECK_I(dsc.config.initial_offset); 5413 PIPE_CONF_CHECK_I(dsc.config.final_offset); 5414 PIPE_CONF_CHECK_I(dsc.config.rc_model_size); 5415 PIPE_CONF_CHECK_I(dsc.config.rc_quant_incr_limit0); 5416 PIPE_CONF_CHECK_I(dsc.config.rc_quant_incr_limit1); 5417 PIPE_CONF_CHECK_I(dsc.config.slice_chunk_size); 5418 PIPE_CONF_CHECK_I(dsc.config.second_line_bpg_offset); 5419 PIPE_CONF_CHECK_I(dsc.config.nsl_bpg_offset); 5420 5421 PIPE_CONF_CHECK_BOOL(dsc.compression_enable); 5422 PIPE_CONF_CHECK_I(dsc.num_streams); 5423 PIPE_CONF_CHECK_I(dsc.compressed_bpp_x16); 5424 5425 PIPE_CONF_CHECK_BOOL(splitter.enable); 5426 PIPE_CONF_CHECK_I(splitter.link_count); 5427 PIPE_CONF_CHECK_I(splitter.pixel_overlap); 5428 5429 if (!fastset) { 5430 PIPE_CONF_CHECK_BOOL(vrr.enable); 5431 PIPE_CONF_CHECK_I(vrr.vmin); 5432 PIPE_CONF_CHECK_I(vrr.vmax); 5433 PIPE_CONF_CHECK_I(vrr.flipline); 5434 PIPE_CONF_CHECK_I(vrr.vsync_start); 5435 PIPE_CONF_CHECK_I(vrr.vsync_end); 5436 PIPE_CONF_CHECK_LLI(cmrr.cmrr_m); 5437 PIPE_CONF_CHECK_LLI(cmrr.cmrr_n); 5438 PIPE_CONF_CHECK_BOOL(cmrr.enable); 5439 } 5440 5441 if (!fastset || intel_vrr_always_use_vrr_tg(display)) { 5442 PIPE_CONF_CHECK_I(vrr.pipeline_full); 5443 PIPE_CONF_CHECK_I(vrr.guardband); 5444 } 5445 5446 #undef PIPE_CONF_CHECK_X 5447 #undef PIPE_CONF_CHECK_I 5448 #undef PIPE_CONF_CHECK_LLI 5449 #undef PIPE_CONF_CHECK_BOOL 5450 #undef PIPE_CONF_CHECK_P 5451 #undef PIPE_CONF_CHECK_FLAGS 5452 #undef PIPE_CONF_CHECK_COLOR_LUT 5453 #undef PIPE_CONF_CHECK_TIMINGS 5454 #undef PIPE_CONF_CHECK_RECT 5455 #undef PIPE_CONF_QUIRK 5456 5457 return ret; 5458 } 5459 5460 static void 5461 intel_verify_planes(struct intel_atomic_state *state) 5462 { 5463 struct intel_plane *plane; 5464 const struct intel_plane_state *plane_state; 5465 int i; 5466 5467 for_each_new_intel_plane_in_state(state, plane, 5468 plane_state, i) 5469 assert_plane(plane, plane_state->is_y_plane || 5470 plane_state->uapi.visible); 5471 } 5472 5473 static int intel_modeset_pipe(struct intel_atomic_state *state, 5474 struct intel_crtc_state *crtc_state, 5475 const char *reason) 5476 { 5477 struct intel_display *display = to_intel_display(state); 5478 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 5479 int ret; 5480 5481 drm_dbg_kms(display->drm, "[CRTC:%d:%s] Full modeset due to %s\n", 5482 crtc->base.base.id, crtc->base.name, reason); 5483 5484 ret = drm_atomic_add_affected_connectors(&state->base, 5485 &crtc->base); 5486 if (ret) 5487 return ret; 5488 5489 ret = intel_dp_tunnel_atomic_add_state_for_crtc(state, crtc); 5490 if (ret) 5491 return ret; 5492 5493 ret = intel_dp_mst_add_topology_state_for_crtc(state, crtc); 5494 if (ret) 5495 return ret; 5496 5497 ret = intel_plane_add_affected(state, crtc); 5498 if (ret) 5499 return ret; 5500 5501 crtc_state->uapi.mode_changed = true; 5502 5503 return 0; 5504 } 5505 5506 /** 5507 * intel_modeset_pipes_in_mask_early - force a full modeset on a set of pipes 5508 * @state: intel atomic state 5509 * @reason: the reason for the full modeset 5510 * @mask: mask of pipes to modeset 5511 * 5512 * Add pipes in @mask to @state and force a full modeset on the enabled ones 5513 * due to the description in @reason. 5514 * This function can be called only before new plane states are computed. 5515 * 5516 * Returns 0 in case of success, negative error code otherwise. 5517 */ 5518 int intel_modeset_pipes_in_mask_early(struct intel_atomic_state *state, 5519 const char *reason, u8 mask) 5520 { 5521 struct intel_display *display = to_intel_display(state); 5522 struct intel_crtc *crtc; 5523 5524 for_each_intel_crtc_in_pipe_mask(display->drm, crtc, mask) { 5525 struct intel_crtc_state *crtc_state; 5526 int ret; 5527 5528 crtc_state = intel_atomic_get_crtc_state(&state->base, crtc); 5529 if (IS_ERR(crtc_state)) 5530 return PTR_ERR(crtc_state); 5531 5532 if (!crtc_state->hw.enable || 5533 intel_crtc_needs_modeset(crtc_state)) 5534 continue; 5535 5536 ret = intel_modeset_pipe(state, crtc_state, reason); 5537 if (ret) 5538 return ret; 5539 } 5540 5541 return 0; 5542 } 5543 5544 static void 5545 intel_crtc_flag_modeset(struct intel_crtc_state *crtc_state) 5546 { 5547 crtc_state->uapi.mode_changed = true; 5548 5549 crtc_state->update_pipe = false; 5550 crtc_state->update_m_n = false; 5551 crtc_state->update_lrr = false; 5552 } 5553 5554 /** 5555 * intel_modeset_all_pipes_late - force a full modeset on all pipes 5556 * @state: intel atomic state 5557 * @reason: the reason for the full modeset 5558 * 5559 * Add all pipes to @state and force a full modeset on the active ones due to 5560 * the description in @reason. 5561 * This function can be called only after new plane states are computed already. 5562 * 5563 * Returns 0 in case of success, negative error code otherwise. 5564 */ 5565 int intel_modeset_all_pipes_late(struct intel_atomic_state *state, 5566 const char *reason) 5567 { 5568 struct intel_display *display = to_intel_display(state); 5569 struct intel_crtc *crtc; 5570 5571 for_each_intel_crtc(display->drm, crtc) { 5572 struct intel_crtc_state *crtc_state; 5573 int ret; 5574 5575 crtc_state = intel_atomic_get_crtc_state(&state->base, crtc); 5576 if (IS_ERR(crtc_state)) 5577 return PTR_ERR(crtc_state); 5578 5579 if (!crtc_state->hw.active || 5580 intel_crtc_needs_modeset(crtc_state)) 5581 continue; 5582 5583 ret = intel_modeset_pipe(state, crtc_state, reason); 5584 if (ret) 5585 return ret; 5586 5587 intel_crtc_flag_modeset(crtc_state); 5588 5589 crtc_state->update_planes |= crtc_state->active_planes; 5590 crtc_state->async_flip_planes = 0; 5591 crtc_state->do_async_flip = false; 5592 } 5593 5594 return 0; 5595 } 5596 5597 int intel_modeset_commit_pipes(struct intel_display *display, 5598 u8 pipe_mask, 5599 struct drm_modeset_acquire_ctx *ctx) 5600 { 5601 struct drm_atomic_state *state; 5602 struct intel_crtc *crtc; 5603 int ret; 5604 5605 state = drm_atomic_state_alloc(display->drm); 5606 if (!state) 5607 return -ENOMEM; 5608 5609 state->acquire_ctx = ctx; 5610 to_intel_atomic_state(state)->internal = true; 5611 5612 for_each_intel_crtc_in_pipe_mask(display->drm, crtc, pipe_mask) { 5613 struct intel_crtc_state *crtc_state = 5614 intel_atomic_get_crtc_state(state, crtc); 5615 5616 if (IS_ERR(crtc_state)) { 5617 ret = PTR_ERR(crtc_state); 5618 goto out; 5619 } 5620 5621 crtc_state->uapi.connectors_changed = true; 5622 } 5623 5624 ret = drm_atomic_commit(state); 5625 out: 5626 drm_atomic_state_put(state); 5627 5628 return ret; 5629 } 5630 5631 /* 5632 * This implements the workaround described in the "notes" section of the mode 5633 * set sequence documentation. When going from no pipes or single pipe to 5634 * multiple pipes, and planes are enabled after the pipe, we need to wait at 5635 * least 2 vblanks on the first pipe before enabling planes on the second pipe. 5636 */ 5637 static int hsw_mode_set_planes_workaround(struct intel_atomic_state *state) 5638 { 5639 struct intel_crtc_state *crtc_state; 5640 struct intel_crtc *crtc; 5641 struct intel_crtc_state *first_crtc_state = NULL; 5642 struct intel_crtc_state *other_crtc_state = NULL; 5643 enum pipe first_pipe = INVALID_PIPE, enabled_pipe = INVALID_PIPE; 5644 int i; 5645 5646 /* look at all crtc's that are going to be enabled in during modeset */ 5647 for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) { 5648 if (!crtc_state->hw.active || 5649 !intel_crtc_needs_modeset(crtc_state)) 5650 continue; 5651 5652 if (first_crtc_state) { 5653 other_crtc_state = crtc_state; 5654 break; 5655 } else { 5656 first_crtc_state = crtc_state; 5657 first_pipe = crtc->pipe; 5658 } 5659 } 5660 5661 /* No workaround needed? */ 5662 if (!first_crtc_state) 5663 return 0; 5664 5665 /* w/a possibly needed, check how many crtc's are already enabled. */ 5666 for_each_intel_crtc(state->base.dev, crtc) { 5667 crtc_state = intel_atomic_get_crtc_state(&state->base, crtc); 5668 if (IS_ERR(crtc_state)) 5669 return PTR_ERR(crtc_state); 5670 5671 crtc_state->hsw_workaround_pipe = INVALID_PIPE; 5672 5673 if (!crtc_state->hw.active || 5674 intel_crtc_needs_modeset(crtc_state)) 5675 continue; 5676 5677 /* 2 or more enabled crtcs means no need for w/a */ 5678 if (enabled_pipe != INVALID_PIPE) 5679 return 0; 5680 5681 enabled_pipe = crtc->pipe; 5682 } 5683 5684 if (enabled_pipe != INVALID_PIPE) 5685 first_crtc_state->hsw_workaround_pipe = enabled_pipe; 5686 else if (other_crtc_state) 5687 other_crtc_state->hsw_workaround_pipe = first_pipe; 5688 5689 return 0; 5690 } 5691 5692 u8 intel_calc_active_pipes(struct intel_atomic_state *state, 5693 u8 active_pipes) 5694 { 5695 const struct intel_crtc_state *crtc_state; 5696 struct intel_crtc *crtc; 5697 int i; 5698 5699 for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) { 5700 if (crtc_state->hw.active) 5701 active_pipes |= BIT(crtc->pipe); 5702 else 5703 active_pipes &= ~BIT(crtc->pipe); 5704 } 5705 5706 return active_pipes; 5707 } 5708 5709 static int intel_modeset_checks(struct intel_atomic_state *state) 5710 { 5711 struct intel_display *display = to_intel_display(state); 5712 5713 state->modeset = true; 5714 5715 if (display->platform.haswell) 5716 return hsw_mode_set_planes_workaround(state); 5717 5718 return 0; 5719 } 5720 5721 static bool lrr_params_changed(const struct drm_display_mode *old_adjusted_mode, 5722 const struct drm_display_mode *new_adjusted_mode) 5723 { 5724 return old_adjusted_mode->crtc_vblank_start != new_adjusted_mode->crtc_vblank_start || 5725 old_adjusted_mode->crtc_vblank_end != new_adjusted_mode->crtc_vblank_end || 5726 old_adjusted_mode->crtc_vtotal != new_adjusted_mode->crtc_vtotal; 5727 } 5728 5729 static void intel_crtc_check_fastset(const struct intel_crtc_state *old_crtc_state, 5730 struct intel_crtc_state *new_crtc_state) 5731 { 5732 struct intel_display *display = to_intel_display(new_crtc_state); 5733 struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc); 5734 5735 /* only allow LRR when the timings stay within the VRR range */ 5736 if (old_crtc_state->vrr.in_range != new_crtc_state->vrr.in_range) 5737 new_crtc_state->update_lrr = false; 5738 5739 if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state, true)) { 5740 drm_dbg_kms(display->drm, "[CRTC:%d:%s] fastset requirement not met, forcing full modeset\n", 5741 crtc->base.base.id, crtc->base.name); 5742 } else { 5743 if (allow_vblank_delay_fastset(old_crtc_state)) 5744 new_crtc_state->update_lrr = true; 5745 new_crtc_state->uapi.mode_changed = false; 5746 } 5747 5748 if (intel_compare_link_m_n(&old_crtc_state->dp_m_n, 5749 &new_crtc_state->dp_m_n)) 5750 new_crtc_state->update_m_n = false; 5751 5752 if (!lrr_params_changed(&old_crtc_state->hw.adjusted_mode, 5753 &new_crtc_state->hw.adjusted_mode)) 5754 new_crtc_state->update_lrr = false; 5755 5756 if (intel_crtc_needs_modeset(new_crtc_state)) 5757 intel_crtc_flag_modeset(new_crtc_state); 5758 else 5759 new_crtc_state->update_pipe = true; 5760 } 5761 5762 static int intel_atomic_check_crtcs(struct intel_atomic_state *state) 5763 { 5764 struct intel_display *display = to_intel_display(state); 5765 struct intel_crtc_state __maybe_unused *crtc_state; 5766 struct intel_crtc *crtc; 5767 int i; 5768 5769 for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) { 5770 int ret; 5771 5772 ret = intel_crtc_atomic_check(state, crtc); 5773 if (ret) { 5774 drm_dbg_atomic(display->drm, 5775 "[CRTC:%d:%s] atomic driver check failed\n", 5776 crtc->base.base.id, crtc->base.name); 5777 return ret; 5778 } 5779 } 5780 5781 return 0; 5782 } 5783 5784 static bool intel_cpu_transcoders_need_modeset(struct intel_atomic_state *state, 5785 u8 transcoders) 5786 { 5787 const struct intel_crtc_state *new_crtc_state; 5788 struct intel_crtc *crtc; 5789 int i; 5790 5791 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 5792 if (new_crtc_state->hw.enable && 5793 transcoders & BIT(new_crtc_state->cpu_transcoder) && 5794 intel_crtc_needs_modeset(new_crtc_state)) 5795 return true; 5796 } 5797 5798 return false; 5799 } 5800 5801 static bool intel_pipes_need_modeset(struct intel_atomic_state *state, 5802 u8 pipes) 5803 { 5804 const struct intel_crtc_state *new_crtc_state; 5805 struct intel_crtc *crtc; 5806 int i; 5807 5808 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 5809 if (new_crtc_state->hw.enable && 5810 pipes & BIT(crtc->pipe) && 5811 intel_crtc_needs_modeset(new_crtc_state)) 5812 return true; 5813 } 5814 5815 return false; 5816 } 5817 5818 static int intel_atomic_check_joiner(struct intel_atomic_state *state, 5819 struct intel_crtc *primary_crtc) 5820 { 5821 struct intel_display *display = to_intel_display(state); 5822 struct intel_crtc_state *primary_crtc_state = 5823 intel_atomic_get_new_crtc_state(state, primary_crtc); 5824 struct intel_crtc *secondary_crtc; 5825 5826 if (!primary_crtc_state->joiner_pipes) 5827 return 0; 5828 5829 /* sanity check */ 5830 if (drm_WARN_ON(display->drm, 5831 primary_crtc->pipe != joiner_primary_pipe(primary_crtc_state))) 5832 return -EINVAL; 5833 5834 if (primary_crtc_state->joiner_pipes & ~joiner_pipes(display)) { 5835 drm_dbg_kms(display->drm, 5836 "[CRTC:%d:%s] Cannot act as joiner primary " 5837 "(need 0x%x as pipes, only 0x%x possible)\n", 5838 primary_crtc->base.base.id, primary_crtc->base.name, 5839 primary_crtc_state->joiner_pipes, joiner_pipes(display)); 5840 return -EINVAL; 5841 } 5842 5843 for_each_intel_crtc_in_pipe_mask(display->drm, secondary_crtc, 5844 intel_crtc_joiner_secondary_pipes(primary_crtc_state)) { 5845 struct intel_crtc_state *secondary_crtc_state; 5846 int ret; 5847 5848 secondary_crtc_state = intel_atomic_get_crtc_state(&state->base, secondary_crtc); 5849 if (IS_ERR(secondary_crtc_state)) 5850 return PTR_ERR(secondary_crtc_state); 5851 5852 /* primary being enabled, secondary was already configured? */ 5853 if (secondary_crtc_state->uapi.enable) { 5854 drm_dbg_kms(display->drm, 5855 "[CRTC:%d:%s] secondary is enabled as normal CRTC, but " 5856 "[CRTC:%d:%s] claiming this CRTC for joiner.\n", 5857 secondary_crtc->base.base.id, secondary_crtc->base.name, 5858 primary_crtc->base.base.id, primary_crtc->base.name); 5859 return -EINVAL; 5860 } 5861 5862 /* 5863 * The state copy logic assumes the primary crtc gets processed 5864 * before the secondary crtc during the main compute_config loop. 5865 * This works because the crtcs are created in pipe order, 5866 * and the hardware requires primary pipe < secondary pipe as well. 5867 * Should that change we need to rethink the logic. 5868 */ 5869 if (WARN_ON(drm_crtc_index(&primary_crtc->base) > 5870 drm_crtc_index(&secondary_crtc->base))) 5871 return -EINVAL; 5872 5873 drm_dbg_kms(display->drm, 5874 "[CRTC:%d:%s] Used as secondary for joiner primary [CRTC:%d:%s]\n", 5875 secondary_crtc->base.base.id, secondary_crtc->base.name, 5876 primary_crtc->base.base.id, primary_crtc->base.name); 5877 5878 secondary_crtc_state->joiner_pipes = 5879 primary_crtc_state->joiner_pipes; 5880 5881 ret = copy_joiner_crtc_state_modeset(state, secondary_crtc); 5882 if (ret) 5883 return ret; 5884 } 5885 5886 return 0; 5887 } 5888 5889 static void kill_joiner_secondaries(struct intel_atomic_state *state, 5890 struct intel_crtc *primary_crtc) 5891 { 5892 struct intel_display *display = to_intel_display(state); 5893 struct intel_crtc_state *primary_crtc_state = 5894 intel_atomic_get_new_crtc_state(state, primary_crtc); 5895 struct intel_crtc *secondary_crtc; 5896 5897 for_each_intel_crtc_in_pipe_mask(display->drm, secondary_crtc, 5898 intel_crtc_joiner_secondary_pipes(primary_crtc_state)) { 5899 struct intel_crtc_state *secondary_crtc_state = 5900 intel_atomic_get_new_crtc_state(state, secondary_crtc); 5901 5902 secondary_crtc_state->joiner_pipes = 0; 5903 5904 intel_crtc_copy_uapi_to_hw_state_modeset(state, secondary_crtc); 5905 } 5906 5907 primary_crtc_state->joiner_pipes = 0; 5908 } 5909 5910 /** 5911 * DOC: asynchronous flip implementation 5912 * 5913 * Asynchronous page flip is the implementation for the DRM_MODE_PAGE_FLIP_ASYNC 5914 * flag. Currently async flip is only supported via the drmModePageFlip IOCTL. 5915 * Correspondingly, support is currently added for primary plane only. 5916 * 5917 * Async flip can only change the plane surface address, so anything else 5918 * changing is rejected from the intel_async_flip_check_hw() function. 5919 * Once this check is cleared, flip done interrupt is enabled using 5920 * the intel_crtc_enable_flip_done() function. 5921 * 5922 * As soon as the surface address register is written, flip done interrupt is 5923 * generated and the requested events are sent to the userspace in the interrupt 5924 * handler itself. The timestamp and sequence sent during the flip done event 5925 * correspond to the last vblank and have no relation to the actual time when 5926 * the flip done event was sent. 5927 */ 5928 static int intel_async_flip_check_uapi(struct intel_atomic_state *state, 5929 struct intel_crtc *crtc) 5930 { 5931 struct intel_display *display = to_intel_display(state); 5932 const struct intel_crtc_state *new_crtc_state = 5933 intel_atomic_get_new_crtc_state(state, crtc); 5934 const struct intel_plane_state *old_plane_state; 5935 struct intel_plane_state *new_plane_state; 5936 struct intel_plane *plane; 5937 int i; 5938 5939 if (!new_crtc_state->uapi.async_flip) 5940 return 0; 5941 5942 if (!new_crtc_state->uapi.active) { 5943 drm_dbg_kms(display->drm, 5944 "[CRTC:%d:%s] not active\n", 5945 crtc->base.base.id, crtc->base.name); 5946 return -EINVAL; 5947 } 5948 5949 if (intel_crtc_needs_modeset(new_crtc_state)) { 5950 drm_dbg_kms(display->drm, 5951 "[CRTC:%d:%s] modeset required\n", 5952 crtc->base.base.id, crtc->base.name); 5953 return -EINVAL; 5954 } 5955 5956 /* 5957 * FIXME: joiner+async flip is busted currently. 5958 * Remove this check once the issues are fixed. 5959 */ 5960 if (new_crtc_state->joiner_pipes) { 5961 drm_dbg_kms(display->drm, 5962 "[CRTC:%d:%s] async flip disallowed with joiner\n", 5963 crtc->base.base.id, crtc->base.name); 5964 return -EINVAL; 5965 } 5966 5967 /* FIXME: selective fetch should be disabled for async flips */ 5968 if (new_crtc_state->enable_psr2_sel_fetch) { 5969 drm_dbg_kms(display->drm, 5970 "[CRTC:%d:%s] async flip disallowed with PSR2 selective fetch\n", 5971 crtc->base.base.id, crtc->base.name); 5972 return -EINVAL; 5973 } 5974 5975 for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state, 5976 new_plane_state, i) { 5977 if (plane->pipe != crtc->pipe) 5978 continue; 5979 5980 /* 5981 * TODO: Async flip is only supported through the page flip IOCTL 5982 * as of now. So support currently added for primary plane only. 5983 * Support for other planes on platforms on which supports 5984 * this(vlv/chv and icl+) should be added when async flip is 5985 * enabled in the atomic IOCTL path. 5986 */ 5987 if (!plane->async_flip) { 5988 drm_dbg_kms(display->drm, 5989 "[PLANE:%d:%s] async flip not supported\n", 5990 plane->base.base.id, plane->base.name); 5991 return -EINVAL; 5992 } 5993 5994 if (!old_plane_state->uapi.fb || !new_plane_state->uapi.fb) { 5995 drm_dbg_kms(display->drm, 5996 "[PLANE:%d:%s] no old or new framebuffer\n", 5997 plane->base.base.id, plane->base.name); 5998 return -EINVAL; 5999 } 6000 } 6001 6002 return 0; 6003 } 6004 6005 static int intel_async_flip_check_hw(struct intel_atomic_state *state, struct intel_crtc *crtc) 6006 { 6007 struct intel_display *display = to_intel_display(state); 6008 const struct intel_crtc_state *old_crtc_state, *new_crtc_state; 6009 const struct intel_plane_state *new_plane_state, *old_plane_state; 6010 struct intel_plane *plane; 6011 int i; 6012 6013 old_crtc_state = intel_atomic_get_old_crtc_state(state, crtc); 6014 new_crtc_state = intel_atomic_get_new_crtc_state(state, crtc); 6015 6016 if (!new_crtc_state->uapi.async_flip) 6017 return 0; 6018 6019 if (!new_crtc_state->hw.active) { 6020 drm_dbg_kms(display->drm, 6021 "[CRTC:%d:%s] not active\n", 6022 crtc->base.base.id, crtc->base.name); 6023 return -EINVAL; 6024 } 6025 6026 if (intel_crtc_needs_modeset(new_crtc_state)) { 6027 drm_dbg_kms(display->drm, 6028 "[CRTC:%d:%s] modeset required\n", 6029 crtc->base.base.id, crtc->base.name); 6030 return -EINVAL; 6031 } 6032 6033 if (old_crtc_state->active_planes != new_crtc_state->active_planes) { 6034 drm_dbg_kms(display->drm, 6035 "[CRTC:%d:%s] Active planes cannot be in async flip\n", 6036 crtc->base.base.id, crtc->base.name); 6037 return -EINVAL; 6038 } 6039 6040 for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state, 6041 new_plane_state, i) { 6042 if (plane->pipe != crtc->pipe) 6043 continue; 6044 6045 /* 6046 * Only async flip capable planes should be in the state 6047 * if we're really about to ask the hardware to perform 6048 * an async flip. We should never get this far otherwise. 6049 */ 6050 if (drm_WARN_ON(display->drm, 6051 new_crtc_state->do_async_flip && !plane->async_flip)) 6052 return -EINVAL; 6053 6054 /* 6055 * Only check async flip capable planes other planes 6056 * may be involved in the initial commit due to 6057 * the wm0/ddb optimization. 6058 * 6059 * TODO maybe should track which planes actually 6060 * were requested to do the async flip... 6061 */ 6062 if (!plane->async_flip) 6063 continue; 6064 6065 if (!intel_plane_can_async_flip(plane, new_plane_state->hw.fb->format->format, 6066 new_plane_state->hw.fb->modifier)) { 6067 drm_dbg_kms(display->drm, 6068 "[PLANE:%d:%s] pixel format %p4cc / modifier 0x%llx does not support async flip\n", 6069 plane->base.base.id, plane->base.name, 6070 &new_plane_state->hw.fb->format->format, 6071 new_plane_state->hw.fb->modifier); 6072 return -EINVAL; 6073 } 6074 6075 /* 6076 * We turn the first async flip request into a sync flip 6077 * so that we can reconfigure the plane (eg. change modifier). 6078 */ 6079 if (!new_crtc_state->do_async_flip) 6080 continue; 6081 6082 if (old_plane_state->view.color_plane[0].mapping_stride != 6083 new_plane_state->view.color_plane[0].mapping_stride) { 6084 drm_dbg_kms(display->drm, 6085 "[PLANE:%d:%s] Stride cannot be changed in async flip\n", 6086 plane->base.base.id, plane->base.name); 6087 return -EINVAL; 6088 } 6089 6090 if (old_plane_state->hw.fb->modifier != 6091 new_plane_state->hw.fb->modifier) { 6092 drm_dbg_kms(display->drm, 6093 "[PLANE:%d:%s] Modifier cannot be changed in async flip\n", 6094 plane->base.base.id, plane->base.name); 6095 return -EINVAL; 6096 } 6097 6098 if (old_plane_state->hw.fb->format != 6099 new_plane_state->hw.fb->format) { 6100 drm_dbg_kms(display->drm, 6101 "[PLANE:%d:%s] Pixel format cannot be changed in async flip\n", 6102 plane->base.base.id, plane->base.name); 6103 return -EINVAL; 6104 } 6105 6106 if (old_plane_state->hw.rotation != 6107 new_plane_state->hw.rotation) { 6108 drm_dbg_kms(display->drm, 6109 "[PLANE:%d:%s] Rotation cannot be changed in async flip\n", 6110 plane->base.base.id, plane->base.name); 6111 return -EINVAL; 6112 } 6113 6114 if (skl_plane_aux_dist(old_plane_state, 0) != 6115 skl_plane_aux_dist(new_plane_state, 0)) { 6116 drm_dbg_kms(display->drm, 6117 "[PLANE:%d:%s] AUX_DIST cannot be changed in async flip\n", 6118 plane->base.base.id, plane->base.name); 6119 return -EINVAL; 6120 } 6121 6122 if (!drm_rect_equals(&old_plane_state->uapi.src, &new_plane_state->uapi.src) || 6123 !drm_rect_equals(&old_plane_state->uapi.dst, &new_plane_state->uapi.dst)) { 6124 drm_dbg_kms(display->drm, 6125 "[PLANE:%d:%s] Size/co-ordinates cannot be changed in async flip\n", 6126 plane->base.base.id, plane->base.name); 6127 return -EINVAL; 6128 } 6129 6130 if (old_plane_state->hw.alpha != new_plane_state->hw.alpha) { 6131 drm_dbg_kms(display->drm, 6132 "[PLANES:%d:%s] Alpha value cannot be changed in async flip\n", 6133 plane->base.base.id, plane->base.name); 6134 return -EINVAL; 6135 } 6136 6137 if (old_plane_state->hw.pixel_blend_mode != 6138 new_plane_state->hw.pixel_blend_mode) { 6139 drm_dbg_kms(display->drm, 6140 "[PLANE:%d:%s] Pixel blend mode cannot be changed in async flip\n", 6141 plane->base.base.id, plane->base.name); 6142 return -EINVAL; 6143 } 6144 6145 if (old_plane_state->hw.color_encoding != new_plane_state->hw.color_encoding) { 6146 drm_dbg_kms(display->drm, 6147 "[PLANE:%d:%s] Color encoding cannot be changed in async flip\n", 6148 plane->base.base.id, plane->base.name); 6149 return -EINVAL; 6150 } 6151 6152 if (old_plane_state->hw.color_range != new_plane_state->hw.color_range) { 6153 drm_dbg_kms(display->drm, 6154 "[PLANE:%d:%s] Color range cannot be changed in async flip\n", 6155 plane->base.base.id, plane->base.name); 6156 return -EINVAL; 6157 } 6158 6159 /* plane decryption is allow to change only in synchronous flips */ 6160 if (old_plane_state->decrypt != new_plane_state->decrypt) { 6161 drm_dbg_kms(display->drm, 6162 "[PLANE:%d:%s] Decryption cannot be changed in async flip\n", 6163 plane->base.base.id, plane->base.name); 6164 return -EINVAL; 6165 } 6166 } 6167 6168 return 0; 6169 } 6170 6171 static int intel_joiner_add_affected_crtcs(struct intel_atomic_state *state) 6172 { 6173 struct intel_display *display = to_intel_display(state); 6174 const struct intel_plane_state *plane_state; 6175 struct intel_crtc_state *crtc_state; 6176 struct intel_plane *plane; 6177 struct intel_crtc *crtc; 6178 u8 affected_pipes = 0; 6179 u8 modeset_pipes = 0; 6180 int i; 6181 6182 /* 6183 * Any plane which is in use by the joiner needs its crtc. 6184 * Pull those in first as this will not have happened yet 6185 * if the plane remains disabled according to uapi. 6186 */ 6187 for_each_new_intel_plane_in_state(state, plane, plane_state, i) { 6188 crtc = to_intel_crtc(plane_state->hw.crtc); 6189 if (!crtc) 6190 continue; 6191 6192 crtc_state = intel_atomic_get_crtc_state(&state->base, crtc); 6193 if (IS_ERR(crtc_state)) 6194 return PTR_ERR(crtc_state); 6195 } 6196 6197 /* Now pull in all joined crtcs */ 6198 for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) { 6199 affected_pipes |= crtc_state->joiner_pipes; 6200 if (intel_crtc_needs_modeset(crtc_state)) 6201 modeset_pipes |= crtc_state->joiner_pipes; 6202 } 6203 6204 for_each_intel_crtc_in_pipe_mask(display->drm, crtc, affected_pipes) { 6205 crtc_state = intel_atomic_get_crtc_state(&state->base, crtc); 6206 if (IS_ERR(crtc_state)) 6207 return PTR_ERR(crtc_state); 6208 } 6209 6210 for_each_intel_crtc_in_pipe_mask(display->drm, crtc, modeset_pipes) { 6211 int ret; 6212 6213 crtc_state = intel_atomic_get_new_crtc_state(state, crtc); 6214 6215 crtc_state->uapi.mode_changed = true; 6216 6217 ret = drm_atomic_add_affected_connectors(&state->base, &crtc->base); 6218 if (ret) 6219 return ret; 6220 6221 ret = intel_plane_add_affected(state, crtc); 6222 if (ret) 6223 return ret; 6224 } 6225 6226 for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) { 6227 /* Kill old joiner link, we may re-establish afterwards */ 6228 if (intel_crtc_needs_modeset(crtc_state) && 6229 intel_crtc_is_joiner_primary(crtc_state)) 6230 kill_joiner_secondaries(state, crtc); 6231 } 6232 6233 return 0; 6234 } 6235 6236 static int intel_atomic_check_config(struct intel_atomic_state *state, 6237 struct intel_link_bw_limits *limits, 6238 enum pipe *failed_pipe) 6239 { 6240 struct intel_display *display = to_intel_display(state); 6241 struct intel_crtc_state *new_crtc_state; 6242 struct intel_crtc *crtc; 6243 int ret; 6244 int i; 6245 6246 *failed_pipe = INVALID_PIPE; 6247 6248 ret = intel_joiner_add_affected_crtcs(state); 6249 if (ret) 6250 return ret; 6251 6252 ret = intel_fdi_add_affected_crtcs(state); 6253 if (ret) 6254 return ret; 6255 6256 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 6257 if (!intel_crtc_needs_modeset(new_crtc_state)) { 6258 if (intel_crtc_is_joiner_secondary(new_crtc_state)) 6259 copy_joiner_crtc_state_nomodeset(state, crtc); 6260 else 6261 intel_crtc_copy_uapi_to_hw_state_nomodeset(state, crtc); 6262 continue; 6263 } 6264 6265 if (drm_WARN_ON(display->drm, intel_crtc_is_joiner_secondary(new_crtc_state))) 6266 continue; 6267 6268 ret = intel_crtc_prepare_cleared_state(state, crtc); 6269 if (ret) 6270 goto fail; 6271 6272 if (!new_crtc_state->hw.enable) 6273 continue; 6274 6275 ret = intel_modeset_pipe_config(state, crtc, limits); 6276 if (ret) 6277 goto fail; 6278 } 6279 6280 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 6281 if (!intel_crtc_needs_modeset(new_crtc_state)) 6282 continue; 6283 6284 if (drm_WARN_ON(display->drm, intel_crtc_is_joiner_secondary(new_crtc_state))) 6285 continue; 6286 6287 if (!new_crtc_state->hw.enable) 6288 continue; 6289 6290 ret = intel_modeset_pipe_config_late(state, crtc); 6291 if (ret) 6292 goto fail; 6293 } 6294 6295 fail: 6296 if (ret) 6297 *failed_pipe = crtc->pipe; 6298 6299 return ret; 6300 } 6301 6302 static int intel_atomic_check_config_and_link(struct intel_atomic_state *state) 6303 { 6304 struct intel_link_bw_limits new_limits; 6305 struct intel_link_bw_limits old_limits; 6306 int ret; 6307 6308 intel_link_bw_init_limits(state, &new_limits); 6309 old_limits = new_limits; 6310 6311 while (true) { 6312 enum pipe failed_pipe; 6313 6314 ret = intel_atomic_check_config(state, &new_limits, 6315 &failed_pipe); 6316 if (ret) { 6317 /* 6318 * The bpp limit for a pipe is below the minimum it supports, set the 6319 * limit to the minimum and recalculate the config. 6320 */ 6321 if (ret == -EINVAL && 6322 intel_link_bw_set_bpp_limit_for_pipe(state, 6323 &old_limits, 6324 &new_limits, 6325 failed_pipe)) 6326 continue; 6327 6328 break; 6329 } 6330 6331 old_limits = new_limits; 6332 6333 ret = intel_link_bw_atomic_check(state, &new_limits); 6334 if (ret != -EAGAIN) 6335 break; 6336 } 6337 6338 return ret; 6339 } 6340 /** 6341 * intel_atomic_check - validate state object 6342 * @dev: drm device 6343 * @_state: state to validate 6344 */ 6345 int intel_atomic_check(struct drm_device *dev, 6346 struct drm_atomic_state *_state) 6347 { 6348 struct intel_display *display = to_intel_display(dev); 6349 struct intel_atomic_state *state = to_intel_atomic_state(_state); 6350 struct intel_crtc_state *old_crtc_state, *new_crtc_state; 6351 struct intel_crtc *crtc; 6352 int ret, i; 6353 bool any_ms = false; 6354 6355 if (!intel_display_driver_check_access(display)) 6356 return -ENODEV; 6357 6358 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 6359 new_crtc_state, i) { 6360 /* 6361 * crtc's state no longer considered to be inherited 6362 * after the first userspace/client initiated commit. 6363 */ 6364 if (!state->internal) 6365 new_crtc_state->inherited = false; 6366 6367 if (new_crtc_state->inherited != old_crtc_state->inherited) 6368 new_crtc_state->uapi.mode_changed = true; 6369 6370 if (new_crtc_state->uapi.scaling_filter != 6371 old_crtc_state->uapi.scaling_filter) 6372 new_crtc_state->uapi.mode_changed = true; 6373 } 6374 6375 intel_vrr_check_modeset(state); 6376 6377 ret = drm_atomic_helper_check_modeset(dev, &state->base); 6378 if (ret) 6379 goto fail; 6380 6381 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 6382 ret = intel_async_flip_check_uapi(state, crtc); 6383 if (ret) 6384 return ret; 6385 } 6386 6387 ret = intel_atomic_check_config_and_link(state); 6388 if (ret) 6389 goto fail; 6390 6391 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 6392 if (!intel_crtc_needs_modeset(new_crtc_state)) 6393 continue; 6394 6395 if (intel_crtc_is_joiner_secondary(new_crtc_state)) { 6396 drm_WARN_ON(display->drm, new_crtc_state->uapi.enable); 6397 continue; 6398 } 6399 6400 ret = intel_atomic_check_joiner(state, crtc); 6401 if (ret) 6402 goto fail; 6403 } 6404 6405 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 6406 new_crtc_state, i) { 6407 if (!intel_crtc_needs_modeset(new_crtc_state)) 6408 continue; 6409 6410 intel_joiner_adjust_pipe_src(new_crtc_state); 6411 6412 intel_crtc_check_fastset(old_crtc_state, new_crtc_state); 6413 } 6414 6415 /** 6416 * Check if fastset is allowed by external dependencies like other 6417 * pipes and transcoders. 6418 * 6419 * Right now it only forces a fullmodeset when the MST master 6420 * transcoder did not changed but the pipe of the master transcoder 6421 * needs a fullmodeset so all slaves also needs to do a fullmodeset or 6422 * in case of port synced crtcs, if one of the synced crtcs 6423 * needs a full modeset, all other synced crtcs should be 6424 * forced a full modeset. 6425 */ 6426 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 6427 if (!new_crtc_state->hw.enable || intel_crtc_needs_modeset(new_crtc_state)) 6428 continue; 6429 6430 if (intel_dp_mst_crtc_needs_modeset(state, crtc)) 6431 intel_crtc_flag_modeset(new_crtc_state); 6432 6433 if (intel_dp_mst_is_slave_trans(new_crtc_state)) { 6434 enum transcoder master = new_crtc_state->mst_master_transcoder; 6435 6436 if (intel_cpu_transcoders_need_modeset(state, BIT(master))) 6437 intel_crtc_flag_modeset(new_crtc_state); 6438 } 6439 6440 if (is_trans_port_sync_mode(new_crtc_state)) { 6441 u8 trans = new_crtc_state->sync_mode_slaves_mask; 6442 6443 if (new_crtc_state->master_transcoder != INVALID_TRANSCODER) 6444 trans |= BIT(new_crtc_state->master_transcoder); 6445 6446 if (intel_cpu_transcoders_need_modeset(state, trans)) 6447 intel_crtc_flag_modeset(new_crtc_state); 6448 } 6449 6450 if (new_crtc_state->joiner_pipes) { 6451 if (intel_pipes_need_modeset(state, new_crtc_state->joiner_pipes)) 6452 intel_crtc_flag_modeset(new_crtc_state); 6453 } 6454 } 6455 6456 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 6457 new_crtc_state, i) { 6458 if (!intel_crtc_needs_modeset(new_crtc_state)) 6459 continue; 6460 6461 any_ms = true; 6462 6463 intel_dpll_release(state, crtc); 6464 } 6465 6466 if (any_ms && !check_digital_port_conflicts(state)) { 6467 drm_dbg_kms(display->drm, 6468 "rejecting conflicting digital port configuration\n"); 6469 ret = -EINVAL; 6470 goto fail; 6471 } 6472 6473 ret = intel_plane_atomic_check(state); 6474 if (ret) 6475 goto fail; 6476 6477 ret = intel_compute_global_watermarks(state); 6478 if (ret) 6479 goto fail; 6480 6481 ret = intel_bw_atomic_check(state, any_ms); 6482 if (ret) 6483 goto fail; 6484 6485 ret = intel_cdclk_atomic_check(state, &any_ms); 6486 if (ret) 6487 goto fail; 6488 6489 if (intel_any_crtc_needs_modeset(state)) 6490 any_ms = true; 6491 6492 if (any_ms) { 6493 ret = intel_modeset_checks(state); 6494 if (ret) 6495 goto fail; 6496 6497 ret = intel_modeset_calc_cdclk(state); 6498 if (ret) 6499 return ret; 6500 } 6501 6502 ret = intel_pmdemand_atomic_check(state); 6503 if (ret) 6504 goto fail; 6505 6506 ret = intel_atomic_check_crtcs(state); 6507 if (ret) 6508 goto fail; 6509 6510 ret = intel_fbc_atomic_check(state); 6511 if (ret) 6512 goto fail; 6513 6514 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 6515 new_crtc_state, i) { 6516 intel_color_assert_luts(new_crtc_state); 6517 6518 ret = intel_async_flip_check_hw(state, crtc); 6519 if (ret) 6520 goto fail; 6521 6522 /* Either full modeset or fastset (or neither), never both */ 6523 drm_WARN_ON(display->drm, 6524 intel_crtc_needs_modeset(new_crtc_state) && 6525 intel_crtc_needs_fastset(new_crtc_state)); 6526 6527 if (!intel_crtc_needs_modeset(new_crtc_state) && 6528 !intel_crtc_needs_fastset(new_crtc_state)) 6529 continue; 6530 6531 intel_crtc_state_dump(new_crtc_state, state, 6532 intel_crtc_needs_modeset(new_crtc_state) ? 6533 "modeset" : "fastset"); 6534 } 6535 6536 return 0; 6537 6538 fail: 6539 if (ret == -EDEADLK) 6540 return ret; 6541 6542 /* 6543 * FIXME would probably be nice to know which crtc specifically 6544 * caused the failure, in cases where we can pinpoint it. 6545 */ 6546 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 6547 new_crtc_state, i) 6548 intel_crtc_state_dump(new_crtc_state, state, "failed"); 6549 6550 return ret; 6551 } 6552 6553 static int intel_atomic_prepare_commit(struct intel_atomic_state *state) 6554 { 6555 int ret; 6556 6557 ret = drm_atomic_helper_prepare_planes(state->base.dev, &state->base); 6558 if (ret < 0) 6559 return ret; 6560 6561 return 0; 6562 } 6563 6564 void intel_crtc_arm_fifo_underrun(struct intel_crtc *crtc, 6565 struct intel_crtc_state *crtc_state) 6566 { 6567 struct intel_display *display = to_intel_display(crtc); 6568 6569 if (DISPLAY_VER(display) != 2 || crtc_state->active_planes) 6570 intel_set_cpu_fifo_underrun_reporting(display, crtc->pipe, true); 6571 6572 if (crtc_state->has_pch_encoder) { 6573 enum pipe pch_transcoder = 6574 intel_crtc_pch_transcoder(crtc); 6575 6576 intel_set_pch_fifo_underrun_reporting(display, pch_transcoder, true); 6577 } 6578 } 6579 6580 static void intel_pipe_fastset(const struct intel_crtc_state *old_crtc_state, 6581 const struct intel_crtc_state *new_crtc_state) 6582 { 6583 struct intel_display *display = to_intel_display(new_crtc_state); 6584 struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc); 6585 6586 /* 6587 * Update pipe size and adjust fitter if needed: the reason for this is 6588 * that in compute_mode_changes we check the native mode (not the pfit 6589 * mode) to see if we can flip rather than do a full mode set. In the 6590 * fastboot case, we'll flip, but if we don't update the pipesrc and 6591 * pfit state, we'll end up with a big fb scanned out into the wrong 6592 * sized surface. 6593 */ 6594 intel_set_pipe_src_size(new_crtc_state); 6595 6596 /* on skylake this is done by detaching scalers */ 6597 if (DISPLAY_VER(display) >= 9) { 6598 if (new_crtc_state->pch_pfit.enabled) 6599 skl_pfit_enable(new_crtc_state); 6600 } else if (HAS_PCH_SPLIT(display)) { 6601 if (new_crtc_state->pch_pfit.enabled) 6602 ilk_pfit_enable(new_crtc_state); 6603 else if (old_crtc_state->pch_pfit.enabled) 6604 ilk_pfit_disable(old_crtc_state); 6605 } 6606 6607 /* 6608 * The register is supposedly single buffered so perhaps 6609 * not 100% correct to do this here. But SKL+ calculate 6610 * this based on the adjust pixel rate so pfit changes do 6611 * affect it and so it must be updated for fastsets. 6612 * HSW/BDW only really need this here for fastboot, after 6613 * that the value should not change without a full modeset. 6614 */ 6615 if (DISPLAY_VER(display) >= 9 || 6616 display->platform.broadwell || display->platform.haswell) 6617 hsw_set_linetime_wm(new_crtc_state); 6618 6619 if (new_crtc_state->update_m_n) 6620 intel_cpu_transcoder_set_m1_n1(crtc, new_crtc_state->cpu_transcoder, 6621 &new_crtc_state->dp_m_n); 6622 6623 if (new_crtc_state->update_lrr) 6624 intel_set_transcoder_timings_lrr(new_crtc_state); 6625 } 6626 6627 static void commit_pipe_pre_planes(struct intel_atomic_state *state, 6628 struct intel_crtc *crtc) 6629 { 6630 struct intel_display *display = to_intel_display(state); 6631 const struct intel_crtc_state *old_crtc_state = 6632 intel_atomic_get_old_crtc_state(state, crtc); 6633 const struct intel_crtc_state *new_crtc_state = 6634 intel_atomic_get_new_crtc_state(state, crtc); 6635 bool modeset = intel_crtc_needs_modeset(new_crtc_state); 6636 6637 drm_WARN_ON(display->drm, new_crtc_state->use_dsb || new_crtc_state->use_flipq); 6638 6639 /* 6640 * During modesets pipe configuration was programmed as the 6641 * CRTC was enabled. 6642 */ 6643 if (!modeset) { 6644 if (intel_crtc_needs_color_update(new_crtc_state)) 6645 intel_color_commit_arm(NULL, new_crtc_state); 6646 6647 if (DISPLAY_VER(display) >= 9 || display->platform.broadwell) 6648 bdw_set_pipe_misc(NULL, new_crtc_state); 6649 6650 if (intel_crtc_needs_fastset(new_crtc_state)) 6651 intel_pipe_fastset(old_crtc_state, new_crtc_state); 6652 } 6653 6654 intel_psr2_program_trans_man_trk_ctl(NULL, new_crtc_state); 6655 6656 intel_atomic_update_watermarks(state, crtc); 6657 } 6658 6659 static void commit_pipe_post_planes(struct intel_atomic_state *state, 6660 struct intel_crtc *crtc) 6661 { 6662 struct intel_display *display = to_intel_display(state); 6663 const struct intel_crtc_state *new_crtc_state = 6664 intel_atomic_get_new_crtc_state(state, crtc); 6665 bool modeset = intel_crtc_needs_modeset(new_crtc_state); 6666 6667 drm_WARN_ON(display->drm, new_crtc_state->use_dsb || new_crtc_state->use_flipq); 6668 6669 /* 6670 * Disable the scaler(s) after the plane(s) so that we don't 6671 * get a catastrophic underrun even if the two operations 6672 * end up happening in two different frames. 6673 */ 6674 if (DISPLAY_VER(display) >= 9 && !modeset) 6675 skl_detach_scalers(NULL, new_crtc_state); 6676 6677 if (!modeset && 6678 intel_crtc_needs_color_update(new_crtc_state) && 6679 !intel_color_uses_dsb(new_crtc_state) && 6680 HAS_DOUBLE_BUFFERED_LUT(display)) 6681 intel_color_load_luts(new_crtc_state); 6682 6683 if (intel_crtc_vrr_enabling(state, crtc)) 6684 intel_vrr_enable(new_crtc_state); 6685 } 6686 6687 static void intel_enable_crtc(struct intel_atomic_state *state, 6688 struct intel_crtc *crtc) 6689 { 6690 struct intel_display *display = to_intel_display(state); 6691 const struct intel_crtc_state *new_crtc_state = 6692 intel_atomic_get_new_crtc_state(state, crtc); 6693 struct intel_crtc *pipe_crtc; 6694 6695 if (!intel_crtc_needs_modeset(new_crtc_state)) 6696 return; 6697 6698 for_each_intel_crtc_in_pipe_mask_reverse(display->drm, pipe_crtc, 6699 intel_crtc_joined_pipe_mask(new_crtc_state)) { 6700 const struct intel_crtc_state *pipe_crtc_state = 6701 intel_atomic_get_new_crtc_state(state, pipe_crtc); 6702 6703 /* VRR will be enable later, if required */ 6704 intel_crtc_update_active_timings(pipe_crtc_state, false); 6705 } 6706 6707 intel_psr_notify_pipe_change(state, crtc, true); 6708 6709 display->funcs.display->crtc_enable(state, crtc); 6710 6711 /* vblanks work again, re-enable pipe CRC. */ 6712 intel_crtc_enable_pipe_crc(crtc); 6713 } 6714 6715 static void intel_pre_update_crtc(struct intel_atomic_state *state, 6716 struct intel_crtc *crtc) 6717 { 6718 struct intel_display *display = to_intel_display(state); 6719 const struct intel_crtc_state *old_crtc_state = 6720 intel_atomic_get_old_crtc_state(state, crtc); 6721 struct intel_crtc_state *new_crtc_state = 6722 intel_atomic_get_new_crtc_state(state, crtc); 6723 bool modeset = intel_crtc_needs_modeset(new_crtc_state); 6724 6725 if (old_crtc_state->inherited || 6726 intel_crtc_needs_modeset(new_crtc_state)) { 6727 if (HAS_DPT(display)) 6728 intel_dpt_configure(crtc); 6729 } 6730 6731 if (!modeset) { 6732 if (new_crtc_state->preload_luts && 6733 intel_crtc_needs_color_update(new_crtc_state)) 6734 intel_color_load_luts(new_crtc_state); 6735 6736 intel_pre_plane_update(state, crtc); 6737 6738 if (intel_crtc_needs_fastset(new_crtc_state)) 6739 intel_encoders_update_pipe(state, crtc); 6740 6741 if (DISPLAY_VER(display) >= 11 && 6742 intel_crtc_needs_fastset(new_crtc_state)) 6743 icl_set_pipe_chicken(new_crtc_state); 6744 6745 if (vrr_params_changed(old_crtc_state, new_crtc_state) || 6746 cmrr_params_changed(old_crtc_state, new_crtc_state)) 6747 intel_vrr_set_transcoder_timings(new_crtc_state); 6748 } 6749 6750 intel_fbc_update(state, crtc); 6751 6752 drm_WARN_ON(display->drm, !intel_display_power_is_enabled(display, POWER_DOMAIN_DC_OFF)); 6753 6754 if (!modeset && 6755 intel_crtc_needs_color_update(new_crtc_state) && 6756 !new_crtc_state->use_dsb && !new_crtc_state->use_flipq) 6757 intel_color_commit_noarm(NULL, new_crtc_state); 6758 6759 if (!new_crtc_state->use_dsb && !new_crtc_state->use_flipq) 6760 intel_crtc_planes_update_noarm(NULL, state, crtc); 6761 } 6762 6763 static void intel_update_crtc(struct intel_atomic_state *state, 6764 struct intel_crtc *crtc) 6765 { 6766 const struct intel_crtc_state *old_crtc_state = 6767 intel_atomic_get_old_crtc_state(state, crtc); 6768 struct intel_crtc_state *new_crtc_state = 6769 intel_atomic_get_new_crtc_state(state, crtc); 6770 6771 if (new_crtc_state->use_flipq) { 6772 intel_flipq_enable(new_crtc_state); 6773 6774 intel_crtc_prepare_vblank_event(new_crtc_state, &crtc->flipq_event); 6775 6776 intel_flipq_add(crtc, INTEL_FLIPQ_PLANE_1, 0, INTEL_DSB_0, 6777 new_crtc_state->dsb_commit); 6778 } else if (new_crtc_state->use_dsb) { 6779 intel_crtc_prepare_vblank_event(new_crtc_state, &crtc->dsb_event); 6780 6781 intel_dsb_commit(new_crtc_state->dsb_commit); 6782 } else { 6783 /* Perform vblank evasion around commit operation */ 6784 intel_pipe_update_start(state, crtc); 6785 6786 if (new_crtc_state->dsb_commit) 6787 intel_dsb_commit(new_crtc_state->dsb_commit); 6788 6789 commit_pipe_pre_planes(state, crtc); 6790 6791 intel_crtc_planes_update_arm(NULL, state, crtc); 6792 6793 commit_pipe_post_planes(state, crtc); 6794 6795 intel_pipe_update_end(state, crtc); 6796 } 6797 6798 /* 6799 * VRR/Seamless M/N update may need to update frame timings. 6800 * 6801 * FIXME Should be synchronized with the start of vblank somehow... 6802 */ 6803 if (intel_crtc_vrr_enabling(state, crtc) || 6804 new_crtc_state->update_m_n || new_crtc_state->update_lrr) 6805 intel_crtc_update_active_timings(new_crtc_state, 6806 new_crtc_state->vrr.enable); 6807 6808 /* 6809 * We usually enable FIFO underrun interrupts as part of the 6810 * CRTC enable sequence during modesets. But when we inherit a 6811 * valid pipe configuration from the BIOS we need to take care 6812 * of enabling them on the CRTC's first fastset. 6813 */ 6814 if (intel_crtc_needs_fastset(new_crtc_state) && 6815 old_crtc_state->inherited) 6816 intel_crtc_arm_fifo_underrun(crtc, new_crtc_state); 6817 } 6818 6819 static void intel_old_crtc_state_disables(struct intel_atomic_state *state, 6820 struct intel_crtc *crtc) 6821 { 6822 struct intel_display *display = to_intel_display(state); 6823 const struct intel_crtc_state *old_crtc_state = 6824 intel_atomic_get_old_crtc_state(state, crtc); 6825 struct intel_crtc *pipe_crtc; 6826 6827 /* 6828 * We need to disable pipe CRC before disabling the pipe, 6829 * or we race against vblank off. 6830 */ 6831 for_each_intel_crtc_in_pipe_mask(display->drm, pipe_crtc, 6832 intel_crtc_joined_pipe_mask(old_crtc_state)) 6833 intel_crtc_disable_pipe_crc(pipe_crtc); 6834 6835 intel_psr_notify_pipe_change(state, crtc, false); 6836 6837 display->funcs.display->crtc_disable(state, crtc); 6838 6839 for_each_intel_crtc_in_pipe_mask(display->drm, pipe_crtc, 6840 intel_crtc_joined_pipe_mask(old_crtc_state)) { 6841 const struct intel_crtc_state *new_pipe_crtc_state = 6842 intel_atomic_get_new_crtc_state(state, pipe_crtc); 6843 6844 pipe_crtc->active = false; 6845 intel_fbc_disable(pipe_crtc); 6846 6847 if (!new_pipe_crtc_state->hw.active) 6848 intel_initial_watermarks(state, pipe_crtc); 6849 } 6850 } 6851 6852 static void intel_commit_modeset_disables(struct intel_atomic_state *state) 6853 { 6854 struct intel_display *display = to_intel_display(state); 6855 const struct intel_crtc_state *new_crtc_state, *old_crtc_state; 6856 struct intel_crtc *crtc; 6857 u8 disable_pipes = 0; 6858 int i; 6859 6860 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 6861 new_crtc_state, i) { 6862 if (!intel_crtc_needs_modeset(new_crtc_state)) 6863 continue; 6864 6865 /* 6866 * Needs to be done even for pipes 6867 * that weren't enabled previously. 6868 */ 6869 intel_pre_plane_update(state, crtc); 6870 6871 if (!old_crtc_state->hw.active) 6872 continue; 6873 6874 disable_pipes |= BIT(crtc->pipe); 6875 } 6876 6877 for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i) { 6878 if ((disable_pipes & BIT(crtc->pipe)) == 0) 6879 continue; 6880 6881 intel_crtc_disable_planes(state, crtc); 6882 6883 drm_vblank_work_flush_all(&crtc->base); 6884 } 6885 6886 /* Only disable port sync and MST slaves */ 6887 for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i) { 6888 if ((disable_pipes & BIT(crtc->pipe)) == 0) 6889 continue; 6890 6891 if (intel_crtc_is_joiner_secondary(old_crtc_state)) 6892 continue; 6893 6894 /* In case of Transcoder port Sync master slave CRTCs can be 6895 * assigned in any order and we need to make sure that 6896 * slave CRTCs are disabled first and then master CRTC since 6897 * Slave vblanks are masked till Master Vblanks. 6898 */ 6899 if (!is_trans_port_sync_slave(old_crtc_state) && 6900 !intel_dp_mst_is_slave_trans(old_crtc_state)) 6901 continue; 6902 6903 intel_old_crtc_state_disables(state, crtc); 6904 6905 disable_pipes &= ~intel_crtc_joined_pipe_mask(old_crtc_state); 6906 } 6907 6908 /* Disable everything else left on */ 6909 for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i) { 6910 if ((disable_pipes & BIT(crtc->pipe)) == 0) 6911 continue; 6912 6913 if (intel_crtc_is_joiner_secondary(old_crtc_state)) 6914 continue; 6915 6916 intel_old_crtc_state_disables(state, crtc); 6917 6918 disable_pipes &= ~intel_crtc_joined_pipe_mask(old_crtc_state); 6919 } 6920 6921 drm_WARN_ON(display->drm, disable_pipes); 6922 } 6923 6924 static void intel_commit_modeset_enables(struct intel_atomic_state *state) 6925 { 6926 struct intel_crtc_state *new_crtc_state; 6927 struct intel_crtc *crtc; 6928 int i; 6929 6930 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 6931 if (!new_crtc_state->hw.active) 6932 continue; 6933 6934 intel_enable_crtc(state, crtc); 6935 intel_pre_update_crtc(state, crtc); 6936 } 6937 6938 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 6939 if (!new_crtc_state->hw.active) 6940 continue; 6941 6942 intel_update_crtc(state, crtc); 6943 } 6944 } 6945 6946 static void skl_commit_modeset_enables(struct intel_atomic_state *state) 6947 { 6948 struct intel_display *display = to_intel_display(state); 6949 struct intel_crtc *crtc; 6950 struct intel_crtc_state *old_crtc_state, *new_crtc_state; 6951 struct skl_ddb_entry entries[I915_MAX_PIPES] = {}; 6952 u8 update_pipes = 0, modeset_pipes = 0; 6953 int i; 6954 6955 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { 6956 enum pipe pipe = crtc->pipe; 6957 6958 if (!new_crtc_state->hw.active) 6959 continue; 6960 6961 /* ignore allocations for crtc's that have been turned off. */ 6962 if (!intel_crtc_needs_modeset(new_crtc_state)) { 6963 entries[pipe] = old_crtc_state->wm.skl.ddb; 6964 update_pipes |= BIT(pipe); 6965 } else { 6966 modeset_pipes |= BIT(pipe); 6967 } 6968 } 6969 6970 /* 6971 * Whenever the number of active pipes changes, we need to make sure we 6972 * update the pipes in the right order so that their ddb allocations 6973 * never overlap with each other between CRTC updates. Otherwise we'll 6974 * cause pipe underruns and other bad stuff. 6975 * 6976 * So first lets enable all pipes that do not need a fullmodeset as 6977 * those don't have any external dependency. 6978 */ 6979 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 6980 enum pipe pipe = crtc->pipe; 6981 6982 if ((update_pipes & BIT(pipe)) == 0) 6983 continue; 6984 6985 intel_pre_update_crtc(state, crtc); 6986 } 6987 6988 intel_dbuf_mbus_pre_ddb_update(state); 6989 6990 while (update_pipes) { 6991 /* 6992 * Commit in reverse order to make joiner primary 6993 * send the uapi events after secondaries are done. 6994 */ 6995 for_each_oldnew_intel_crtc_in_state_reverse(state, crtc, old_crtc_state, 6996 new_crtc_state, i) { 6997 enum pipe pipe = crtc->pipe; 6998 6999 if ((update_pipes & BIT(pipe)) == 0) 7000 continue; 7001 7002 if (skl_ddb_allocation_overlaps(&new_crtc_state->wm.skl.ddb, 7003 entries, I915_MAX_PIPES, pipe)) 7004 continue; 7005 7006 entries[pipe] = new_crtc_state->wm.skl.ddb; 7007 update_pipes &= ~BIT(pipe); 7008 7009 intel_update_crtc(state, crtc); 7010 7011 /* 7012 * If this is an already active pipe, it's DDB changed, 7013 * and this isn't the last pipe that needs updating 7014 * then we need to wait for a vblank to pass for the 7015 * new ddb allocation to take effect. 7016 */ 7017 if (!skl_ddb_entry_equal(&new_crtc_state->wm.skl.ddb, 7018 &old_crtc_state->wm.skl.ddb) && 7019 (update_pipes | modeset_pipes)) 7020 intel_crtc_wait_for_next_vblank(crtc); 7021 } 7022 } 7023 7024 intel_dbuf_mbus_post_ddb_update(state); 7025 7026 update_pipes = modeset_pipes; 7027 7028 /* 7029 * Enable all pipes that needs a modeset and do not depends on other 7030 * pipes 7031 */ 7032 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 7033 enum pipe pipe = crtc->pipe; 7034 7035 if ((modeset_pipes & BIT(pipe)) == 0) 7036 continue; 7037 7038 if (intel_crtc_is_joiner_secondary(new_crtc_state)) 7039 continue; 7040 7041 if (intel_dp_mst_is_slave_trans(new_crtc_state) || 7042 is_trans_port_sync_master(new_crtc_state)) 7043 continue; 7044 7045 modeset_pipes &= ~intel_crtc_joined_pipe_mask(new_crtc_state); 7046 7047 intel_enable_crtc(state, crtc); 7048 } 7049 7050 /* 7051 * Then we enable all remaining pipes that depend on other 7052 * pipes: MST slaves and port sync masters 7053 */ 7054 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 7055 enum pipe pipe = crtc->pipe; 7056 7057 if ((modeset_pipes & BIT(pipe)) == 0) 7058 continue; 7059 7060 if (intel_crtc_is_joiner_secondary(new_crtc_state)) 7061 continue; 7062 7063 modeset_pipes &= ~intel_crtc_joined_pipe_mask(new_crtc_state); 7064 7065 intel_enable_crtc(state, crtc); 7066 } 7067 7068 /* 7069 * Finally we do the plane updates/etc. for all pipes that got enabled. 7070 */ 7071 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 7072 enum pipe pipe = crtc->pipe; 7073 7074 if ((update_pipes & BIT(pipe)) == 0) 7075 continue; 7076 7077 intel_pre_update_crtc(state, crtc); 7078 } 7079 7080 /* 7081 * Commit in reverse order to make joiner primary 7082 * send the uapi events after secondaries are done. 7083 */ 7084 for_each_new_intel_crtc_in_state_reverse(state, crtc, new_crtc_state, i) { 7085 enum pipe pipe = crtc->pipe; 7086 7087 if ((update_pipes & BIT(pipe)) == 0) 7088 continue; 7089 7090 drm_WARN_ON(display->drm, 7091 skl_ddb_allocation_overlaps(&new_crtc_state->wm.skl.ddb, 7092 entries, I915_MAX_PIPES, pipe)); 7093 7094 entries[pipe] = new_crtc_state->wm.skl.ddb; 7095 update_pipes &= ~BIT(pipe); 7096 7097 intel_update_crtc(state, crtc); 7098 } 7099 7100 drm_WARN_ON(display->drm, modeset_pipes); 7101 drm_WARN_ON(display->drm, update_pipes); 7102 } 7103 7104 static void intel_atomic_commit_fence_wait(struct intel_atomic_state *intel_state) 7105 { 7106 struct drm_i915_private *i915 = to_i915(intel_state->base.dev); 7107 struct drm_plane *plane; 7108 struct drm_plane_state *new_plane_state; 7109 long ret; 7110 int i; 7111 7112 for_each_new_plane_in_state(&intel_state->base, plane, new_plane_state, i) { 7113 if (new_plane_state->fence) { 7114 ret = dma_fence_wait_timeout(new_plane_state->fence, false, 7115 i915_fence_timeout(i915)); 7116 if (ret <= 0) 7117 break; 7118 7119 dma_fence_put(new_plane_state->fence); 7120 new_plane_state->fence = NULL; 7121 } 7122 } 7123 } 7124 7125 static void intel_atomic_dsb_wait_commit(struct intel_crtc_state *crtc_state) 7126 { 7127 if (crtc_state->dsb_commit) 7128 intel_dsb_wait(crtc_state->dsb_commit); 7129 7130 intel_color_wait_commit(crtc_state); 7131 } 7132 7133 static void intel_atomic_dsb_cleanup(struct intel_crtc_state *crtc_state) 7134 { 7135 if (crtc_state->dsb_commit) { 7136 intel_dsb_cleanup(crtc_state->dsb_commit); 7137 crtc_state->dsb_commit = NULL; 7138 } 7139 7140 intel_color_cleanup_commit(crtc_state); 7141 } 7142 7143 static void intel_atomic_cleanup_work(struct work_struct *work) 7144 { 7145 struct intel_atomic_state *state = 7146 container_of(work, struct intel_atomic_state, cleanup_work); 7147 struct intel_display *display = to_intel_display(state); 7148 struct intel_crtc_state *old_crtc_state; 7149 struct intel_crtc *crtc; 7150 int i; 7151 7152 for_each_old_intel_crtc_in_state(state, crtc, old_crtc_state, i) 7153 intel_atomic_dsb_cleanup(old_crtc_state); 7154 7155 drm_atomic_helper_cleanup_planes(display->drm, &state->base); 7156 drm_atomic_helper_commit_cleanup_done(&state->base); 7157 drm_atomic_state_put(&state->base); 7158 } 7159 7160 static void intel_atomic_prepare_plane_clear_colors(struct intel_atomic_state *state) 7161 { 7162 struct intel_display *display = to_intel_display(state); 7163 struct intel_plane *plane; 7164 struct intel_plane_state *plane_state; 7165 int i; 7166 7167 for_each_new_intel_plane_in_state(state, plane, plane_state, i) { 7168 struct drm_framebuffer *fb = plane_state->hw.fb; 7169 int cc_plane; 7170 int ret; 7171 7172 if (!fb) 7173 continue; 7174 7175 cc_plane = intel_fb_rc_ccs_cc_plane(fb); 7176 if (cc_plane < 0) 7177 continue; 7178 7179 /* 7180 * The layout of the fast clear color value expected by HW 7181 * (the DRM ABI requiring this value to be located in fb at 7182 * offset 0 of cc plane, plane #2 previous generations or 7183 * plane #1 for flat ccs): 7184 * - 4 x 4 bytes per-channel value 7185 * (in surface type specific float/int format provided by the fb user) 7186 * - 8 bytes native color value used by the display 7187 * (converted/written by GPU during a fast clear operation using the 7188 * above per-channel values) 7189 * 7190 * The commit's FB prepare hook already ensured that FB obj is pinned and the 7191 * caller made sure that the object is synced wrt. the related color clear value 7192 * GPU write on it. 7193 */ 7194 ret = intel_bo_read_from_page(intel_fb_bo(fb), 7195 fb->offsets[cc_plane] + 16, 7196 &plane_state->ccval, 7197 sizeof(plane_state->ccval)); 7198 /* The above could only fail if the FB obj has an unexpected backing store type. */ 7199 drm_WARN_ON(display->drm, ret); 7200 } 7201 } 7202 7203 static void intel_atomic_dsb_prepare(struct intel_atomic_state *state, 7204 struct intel_crtc *crtc) 7205 { 7206 struct intel_display *display = to_intel_display(state); 7207 struct intel_crtc_state *new_crtc_state = 7208 intel_atomic_get_new_crtc_state(state, crtc); 7209 7210 if (!new_crtc_state->hw.active) 7211 return; 7212 7213 if (state->base.legacy_cursor_update) 7214 return; 7215 7216 /* FIXME deal with everything */ 7217 new_crtc_state->use_flipq = 7218 intel_flipq_supported(display) && 7219 !new_crtc_state->do_async_flip && 7220 !new_crtc_state->vrr.enable && 7221 !new_crtc_state->has_psr && 7222 !intel_crtc_needs_modeset(new_crtc_state) && 7223 !intel_crtc_needs_fastset(new_crtc_state) && 7224 !intel_crtc_needs_color_update(new_crtc_state); 7225 7226 new_crtc_state->use_dsb = 7227 !new_crtc_state->use_flipq && 7228 !new_crtc_state->do_async_flip && 7229 (DISPLAY_VER(display) >= 20 || !new_crtc_state->has_psr) && 7230 !intel_crtc_needs_modeset(new_crtc_state) && 7231 !intel_crtc_needs_fastset(new_crtc_state); 7232 7233 intel_color_prepare_commit(state, crtc); 7234 } 7235 7236 static void intel_atomic_dsb_finish(struct intel_atomic_state *state, 7237 struct intel_crtc *crtc) 7238 { 7239 struct intel_display *display = to_intel_display(state); 7240 struct intel_crtc_state *new_crtc_state = 7241 intel_atomic_get_new_crtc_state(state, crtc); 7242 7243 if (!new_crtc_state->use_flipq && 7244 !new_crtc_state->use_dsb && 7245 !new_crtc_state->dsb_color) 7246 return; 7247 7248 /* 7249 * Rough estimate: 7250 * ~64 registers per each plane * 8 planes = 512 7251 * Double that for pipe stuff and other overhead. 7252 */ 7253 new_crtc_state->dsb_commit = intel_dsb_prepare(state, crtc, INTEL_DSB_0, 7254 new_crtc_state->use_dsb || 7255 new_crtc_state->use_flipq ? 1024 : 16); 7256 if (!new_crtc_state->dsb_commit) { 7257 new_crtc_state->use_flipq = false; 7258 new_crtc_state->use_dsb = false; 7259 intel_color_cleanup_commit(new_crtc_state); 7260 return; 7261 } 7262 7263 if (new_crtc_state->use_flipq || new_crtc_state->use_dsb) { 7264 /* Wa_18034343758 */ 7265 if (new_crtc_state->use_flipq) 7266 intel_flipq_wait_dmc_halt(new_crtc_state->dsb_commit, crtc); 7267 7268 if (intel_crtc_needs_color_update(new_crtc_state)) 7269 intel_color_commit_noarm(new_crtc_state->dsb_commit, 7270 new_crtc_state); 7271 intel_crtc_planes_update_noarm(new_crtc_state->dsb_commit, 7272 state, crtc); 7273 7274 /* 7275 * Ensure we have "Frame Change" event when PSR state is 7276 * SRDENT(PSR1) or DEEP_SLEEP(PSR2). Otherwise DSB vblank 7277 * evasion hangs as PIPEDSL is reading as 0. 7278 */ 7279 intel_psr_trigger_frame_change_event(new_crtc_state->dsb_commit, 7280 state, crtc); 7281 7282 intel_psr_wait_for_idle_dsb(new_crtc_state->dsb_commit, 7283 new_crtc_state); 7284 7285 if (new_crtc_state->use_dsb) 7286 intel_dsb_vblank_evade(state, new_crtc_state->dsb_commit); 7287 7288 if (intel_crtc_needs_color_update(new_crtc_state)) 7289 intel_color_commit_arm(new_crtc_state->dsb_commit, 7290 new_crtc_state); 7291 bdw_set_pipe_misc(new_crtc_state->dsb_commit, 7292 new_crtc_state); 7293 intel_psr2_program_trans_man_trk_ctl(new_crtc_state->dsb_commit, 7294 new_crtc_state); 7295 intel_crtc_planes_update_arm(new_crtc_state->dsb_commit, 7296 state, crtc); 7297 7298 if (DISPLAY_VER(display) >= 9) 7299 skl_detach_scalers(new_crtc_state->dsb_commit, 7300 new_crtc_state); 7301 7302 /* Wa_18034343758 */ 7303 if (new_crtc_state->use_flipq) 7304 intel_flipq_unhalt_dmc(new_crtc_state->dsb_commit, crtc); 7305 } 7306 7307 if (intel_color_uses_chained_dsb(new_crtc_state)) 7308 intel_dsb_chain(state, new_crtc_state->dsb_commit, 7309 new_crtc_state->dsb_color, true); 7310 else if (intel_color_uses_gosub_dsb(new_crtc_state)) 7311 intel_dsb_gosub(new_crtc_state->dsb_commit, 7312 new_crtc_state->dsb_color); 7313 7314 if (new_crtc_state->use_dsb && !intel_color_uses_chained_dsb(new_crtc_state)) { 7315 intel_dsb_wait_vblanks(new_crtc_state->dsb_commit, 1); 7316 7317 intel_vrr_send_push(new_crtc_state->dsb_commit, new_crtc_state); 7318 intel_dsb_wait_vblank_delay(state, new_crtc_state->dsb_commit); 7319 intel_vrr_check_push_sent(new_crtc_state->dsb_commit, 7320 new_crtc_state); 7321 intel_dsb_interrupt(new_crtc_state->dsb_commit); 7322 } 7323 7324 intel_dsb_finish(new_crtc_state->dsb_commit); 7325 } 7326 7327 static void intel_atomic_commit_tail(struct intel_atomic_state *state) 7328 { 7329 struct intel_display *display = to_intel_display(state); 7330 struct drm_i915_private __maybe_unused *dev_priv = to_i915(display->drm); 7331 struct intel_crtc_state *new_crtc_state, *old_crtc_state; 7332 struct intel_crtc *crtc; 7333 struct intel_power_domain_mask put_domains[I915_MAX_PIPES] = {}; 7334 intel_wakeref_t wakeref = NULL; 7335 int i; 7336 7337 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) 7338 intel_atomic_dsb_prepare(state, crtc); 7339 7340 intel_atomic_commit_fence_wait(state); 7341 7342 intel_td_flush(display); 7343 7344 intel_atomic_prepare_plane_clear_colors(state); 7345 7346 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) 7347 intel_fbc_prepare_dirty_rect(state, crtc); 7348 7349 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) 7350 intel_atomic_dsb_finish(state, crtc); 7351 7352 drm_atomic_helper_wait_for_dependencies(&state->base); 7353 drm_dp_mst_atomic_wait_for_dependencies(&state->base); 7354 intel_atomic_global_state_wait_for_dependencies(state); 7355 7356 /* 7357 * During full modesets we write a lot of registers, wait 7358 * for PLLs, etc. Doing that while DC states are enabled 7359 * is not a good idea. 7360 * 7361 * During fastsets and other updates we also need to 7362 * disable DC states due to the following scenario: 7363 * 1. DC5 exit and PSR exit happen 7364 * 2. Some or all _noarm() registers are written 7365 * 3. Due to some long delay PSR is re-entered 7366 * 4. DC5 entry -> DMC saves the already written new 7367 * _noarm() registers and the old not yet written 7368 * _arm() registers 7369 * 5. DC5 exit -> DMC restores a mixture of old and 7370 * new register values and arms the update 7371 * 6. PSR exit -> hardware latches a mixture of old and 7372 * new register values -> corrupted frame, or worse 7373 * 7. New _arm() registers are finally written 7374 * 8. Hardware finally latches a complete set of new 7375 * register values, and subsequent frames will be OK again 7376 * 7377 * Also note that due to the pipe CSC hardware issues on 7378 * SKL/GLK DC states must remain off until the pipe CSC 7379 * state readout has happened. Otherwise we risk corrupting 7380 * the CSC latched register values with the readout (see 7381 * skl_read_csc() and skl_color_commit_noarm()). 7382 */ 7383 wakeref = intel_display_power_get(display, POWER_DOMAIN_DC_OFF); 7384 7385 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 7386 new_crtc_state, i) { 7387 if (intel_crtc_needs_modeset(new_crtc_state) || 7388 intel_crtc_needs_fastset(new_crtc_state)) 7389 intel_modeset_get_crtc_power_domains(new_crtc_state, &put_domains[crtc->pipe]); 7390 } 7391 7392 intel_commit_modeset_disables(state); 7393 7394 intel_dp_tunnel_atomic_alloc_bw(state); 7395 7396 /* FIXME: Eventually get rid of our crtc->config pointer */ 7397 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) 7398 crtc->config = new_crtc_state; 7399 7400 /* 7401 * In XE_LPD+ Pmdemand combines many parameters such as voltage index, 7402 * plls, cdclk frequency, QGV point selection parameter etc. Voltage 7403 * index, cdclk/ddiclk frequencies are supposed to be configured before 7404 * the cdclk config is set. 7405 */ 7406 intel_pmdemand_pre_plane_update(state); 7407 7408 if (state->modeset) { 7409 drm_atomic_helper_update_legacy_modeset_state(display->drm, &state->base); 7410 7411 intel_set_cdclk_pre_plane_update(state); 7412 7413 intel_modeset_verify_disabled(state); 7414 } 7415 7416 intel_sagv_pre_plane_update(state); 7417 7418 /* Complete the events for pipes that have now been disabled */ 7419 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 7420 bool modeset = intel_crtc_needs_modeset(new_crtc_state); 7421 7422 /* Complete events for now disable pipes here. */ 7423 if (modeset && !new_crtc_state->hw.active && new_crtc_state->uapi.event) { 7424 spin_lock_irq(&display->drm->event_lock); 7425 drm_crtc_send_vblank_event(&crtc->base, 7426 new_crtc_state->uapi.event); 7427 spin_unlock_irq(&display->drm->event_lock); 7428 7429 new_crtc_state->uapi.event = NULL; 7430 } 7431 } 7432 7433 intel_encoders_update_prepare(state); 7434 7435 intel_dbuf_pre_plane_update(state); 7436 7437 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 7438 if (new_crtc_state->do_async_flip) 7439 intel_crtc_enable_flip_done(state, crtc); 7440 } 7441 7442 /* Now enable the clocks, plane, pipe, and connectors that we set up. */ 7443 display->funcs.display->commit_modeset_enables(state); 7444 7445 /* FIXME probably need to sequence this properly */ 7446 intel_program_dpkgc_latency(state); 7447 7448 intel_wait_for_vblank_workers(state); 7449 7450 /* FIXME: We should call drm_atomic_helper_commit_hw_done() here 7451 * already, but still need the state for the delayed optimization. To 7452 * fix this: 7453 * - wrap the optimization/post_plane_update stuff into a per-crtc work. 7454 * - schedule that vblank worker _before_ calling hw_done 7455 * - at the start of commit_tail, cancel it _synchrously 7456 * - switch over to the vblank wait helper in the core after that since 7457 * we don't need out special handling any more. 7458 */ 7459 drm_atomic_helper_wait_for_flip_done(display->drm, &state->base); 7460 7461 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) { 7462 if (new_crtc_state->do_async_flip) 7463 intel_crtc_disable_flip_done(state, crtc); 7464 7465 intel_atomic_dsb_wait_commit(new_crtc_state); 7466 7467 if (!state->base.legacy_cursor_update && !new_crtc_state->use_dsb) 7468 intel_vrr_check_push_sent(NULL, new_crtc_state); 7469 7470 if (new_crtc_state->use_flipq) 7471 intel_flipq_disable(new_crtc_state); 7472 } 7473 7474 /* 7475 * Now that the vblank has passed, we can go ahead and program the 7476 * optimal watermarks on platforms that need two-step watermark 7477 * programming. 7478 * 7479 * TODO: Move this (and other cleanup) to an async worker eventually. 7480 */ 7481 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, 7482 new_crtc_state, i) { 7483 /* 7484 * Gen2 reports pipe underruns whenever all planes are disabled. 7485 * So re-enable underrun reporting after some planes get enabled. 7486 * 7487 * We do this before .optimize_watermarks() so that we have a 7488 * chance of catching underruns with the intermediate watermarks 7489 * vs. the new plane configuration. 7490 */ 7491 if (DISPLAY_VER(display) == 2 && planes_enabling(old_crtc_state, new_crtc_state)) 7492 intel_set_cpu_fifo_underrun_reporting(display, crtc->pipe, true); 7493 7494 intel_optimize_watermarks(state, crtc); 7495 } 7496 7497 intel_dbuf_post_plane_update(state); 7498 7499 for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) { 7500 intel_post_plane_update(state, crtc); 7501 7502 intel_modeset_put_crtc_power_domains(crtc, &put_domains[crtc->pipe]); 7503 7504 intel_modeset_verify_crtc(state, crtc); 7505 7506 intel_post_plane_update_after_readout(state, crtc); 7507 7508 /* 7509 * DSB cleanup is done in cleanup_work aligning with framebuffer 7510 * cleanup. So copy and reset the dsb structure to sync with 7511 * commit_done and later do dsb cleanup in cleanup_work. 7512 * 7513 * FIXME get rid of this funny new->old swapping 7514 */ 7515 old_crtc_state->dsb_color = fetch_and_zero(&new_crtc_state->dsb_color); 7516 old_crtc_state->dsb_commit = fetch_and_zero(&new_crtc_state->dsb_commit); 7517 } 7518 7519 /* Underruns don't always raise interrupts, so check manually */ 7520 intel_check_cpu_fifo_underruns(display); 7521 intel_check_pch_fifo_underruns(display); 7522 7523 if (state->modeset) 7524 intel_verify_planes(state); 7525 7526 intel_sagv_post_plane_update(state); 7527 if (state->modeset) 7528 intel_set_cdclk_post_plane_update(state); 7529 intel_pmdemand_post_plane_update(state); 7530 7531 drm_atomic_helper_commit_hw_done(&state->base); 7532 intel_atomic_global_state_commit_done(state); 7533 7534 if (state->modeset) { 7535 /* As one of the primary mmio accessors, KMS has a high 7536 * likelihood of triggering bugs in unclaimed access. After we 7537 * finish modesetting, see if an error has been flagged, and if 7538 * so enable debugging for the next modeset - and hope we catch 7539 * the culprit. 7540 */ 7541 intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore); 7542 } 7543 /* 7544 * Delay re-enabling DC states by 17 ms to avoid the off->on->off 7545 * toggling overhead at and above 60 FPS. 7546 */ 7547 intel_display_power_put_async_delay(display, POWER_DOMAIN_DC_OFF, wakeref, 17); 7548 intel_display_rpm_put(display, state->wakeref); 7549 7550 /* 7551 * Defer the cleanup of the old state to a separate worker to not 7552 * impede the current task (userspace for blocking modesets) that 7553 * are executed inline. For out-of-line asynchronous modesets/flips, 7554 * deferring to a new worker seems overkill, but we would place a 7555 * schedule point (cond_resched()) here anyway to keep latencies 7556 * down. 7557 */ 7558 INIT_WORK(&state->cleanup_work, intel_atomic_cleanup_work); 7559 queue_work(display->wq.cleanup, &state->cleanup_work); 7560 } 7561 7562 static void intel_atomic_commit_work(struct work_struct *work) 7563 { 7564 struct intel_atomic_state *state = 7565 container_of(work, struct intel_atomic_state, base.commit_work); 7566 7567 intel_atomic_commit_tail(state); 7568 } 7569 7570 static void intel_atomic_track_fbs(struct intel_atomic_state *state) 7571 { 7572 struct intel_plane_state *old_plane_state, *new_plane_state; 7573 struct intel_plane *plane; 7574 int i; 7575 7576 for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state, 7577 new_plane_state, i) 7578 intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb), 7579 to_intel_frontbuffer(new_plane_state->hw.fb), 7580 plane->frontbuffer_bit); 7581 } 7582 7583 static int intel_atomic_setup_commit(struct intel_atomic_state *state, bool nonblock) 7584 { 7585 int ret; 7586 7587 ret = drm_atomic_helper_setup_commit(&state->base, nonblock); 7588 if (ret) 7589 return ret; 7590 7591 ret = intel_atomic_global_state_setup_commit(state); 7592 if (ret) 7593 return ret; 7594 7595 return 0; 7596 } 7597 7598 static int intel_atomic_swap_state(struct intel_atomic_state *state) 7599 { 7600 int ret; 7601 7602 ret = drm_atomic_helper_swap_state(&state->base, true); 7603 if (ret) 7604 return ret; 7605 7606 intel_atomic_swap_global_state(state); 7607 7608 intel_dpll_swap_state(state); 7609 7610 intel_atomic_track_fbs(state); 7611 7612 return 0; 7613 } 7614 7615 int intel_atomic_commit(struct drm_device *dev, struct drm_atomic_state *_state, 7616 bool nonblock) 7617 { 7618 struct intel_display *display = to_intel_display(dev); 7619 struct intel_atomic_state *state = to_intel_atomic_state(_state); 7620 int ret = 0; 7621 7622 state->wakeref = intel_display_rpm_get(display); 7623 7624 /* 7625 * The intel_legacy_cursor_update() fast path takes care 7626 * of avoiding the vblank waits for simple cursor 7627 * movement and flips. For cursor on/off and size changes, 7628 * we want to perform the vblank waits so that watermark 7629 * updates happen during the correct frames. Gen9+ have 7630 * double buffered watermarks and so shouldn't need this. 7631 * 7632 * Unset state->legacy_cursor_update before the call to 7633 * drm_atomic_helper_setup_commit() because otherwise 7634 * drm_atomic_helper_wait_for_flip_done() is a noop and 7635 * we get FIFO underruns because we didn't wait 7636 * for vblank. 7637 * 7638 * FIXME doing watermarks and fb cleanup from a vblank worker 7639 * (assuming we had any) would solve these problems. 7640 */ 7641 if (DISPLAY_VER(display) < 9 && state->base.legacy_cursor_update) { 7642 struct intel_crtc_state *new_crtc_state; 7643 struct intel_crtc *crtc; 7644 int i; 7645 7646 for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) 7647 if (new_crtc_state->wm.need_postvbl_update || 7648 new_crtc_state->update_wm_post) 7649 state->base.legacy_cursor_update = false; 7650 } 7651 7652 ret = intel_atomic_prepare_commit(state); 7653 if (ret) { 7654 drm_dbg_atomic(display->drm, 7655 "Preparing state failed with %i\n", ret); 7656 intel_display_rpm_put(display, state->wakeref); 7657 return ret; 7658 } 7659 7660 ret = intel_atomic_setup_commit(state, nonblock); 7661 if (!ret) 7662 ret = intel_atomic_swap_state(state); 7663 7664 if (ret) { 7665 drm_atomic_helper_unprepare_planes(dev, &state->base); 7666 intel_display_rpm_put(display, state->wakeref); 7667 return ret; 7668 } 7669 7670 drm_atomic_state_get(&state->base); 7671 INIT_WORK(&state->base.commit_work, intel_atomic_commit_work); 7672 7673 if (nonblock && state->modeset) { 7674 queue_work(display->wq.modeset, &state->base.commit_work); 7675 } else if (nonblock) { 7676 queue_work(display->wq.flip, &state->base.commit_work); 7677 } else { 7678 if (state->modeset) 7679 flush_workqueue(display->wq.modeset); 7680 intel_atomic_commit_tail(state); 7681 } 7682 7683 return 0; 7684 } 7685 7686 static u32 intel_encoder_possible_clones(struct intel_encoder *encoder) 7687 { 7688 struct intel_display *display = to_intel_display(encoder); 7689 struct intel_encoder *source_encoder; 7690 u32 possible_clones = 0; 7691 7692 for_each_intel_encoder(display->drm, source_encoder) { 7693 if (encoders_cloneable(encoder, source_encoder)) 7694 possible_clones |= drm_encoder_mask(&source_encoder->base); 7695 } 7696 7697 return possible_clones; 7698 } 7699 7700 static u32 intel_encoder_possible_crtcs(struct intel_encoder *encoder) 7701 { 7702 struct intel_display *display = to_intel_display(encoder); 7703 struct intel_crtc *crtc; 7704 u32 possible_crtcs = 0; 7705 7706 for_each_intel_crtc_in_pipe_mask(display->drm, crtc, encoder->pipe_mask) 7707 possible_crtcs |= drm_crtc_mask(&crtc->base); 7708 7709 return possible_crtcs; 7710 } 7711 7712 static bool ilk_has_edp_a(struct intel_display *display) 7713 { 7714 if (!display->platform.mobile) 7715 return false; 7716 7717 if ((intel_de_read(display, DP_A) & DP_DETECTED) == 0) 7718 return false; 7719 7720 if (display->platform.ironlake && (intel_de_read(display, FUSE_STRAP) & ILK_eDP_A_DISABLE)) 7721 return false; 7722 7723 return true; 7724 } 7725 7726 static bool intel_ddi_crt_present(struct intel_display *display) 7727 { 7728 if (DISPLAY_VER(display) >= 9) 7729 return false; 7730 7731 if (display->platform.haswell_ult || display->platform.broadwell_ult) 7732 return false; 7733 7734 if (HAS_PCH_LPT_H(display) && 7735 intel_de_read(display, SFUSE_STRAP) & SFUSE_STRAP_CRT_DISABLED) 7736 return false; 7737 7738 /* DDI E can't be used if DDI A requires 4 lanes */ 7739 if (intel_de_read(display, DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES) 7740 return false; 7741 7742 if (!display->vbt.int_crt_support) 7743 return false; 7744 7745 return true; 7746 } 7747 7748 bool assert_port_valid(struct intel_display *display, enum port port) 7749 { 7750 return !drm_WARN(display->drm, !(DISPLAY_RUNTIME_INFO(display)->port_mask & BIT(port)), 7751 "Platform does not support port %c\n", port_name(port)); 7752 } 7753 7754 void intel_setup_outputs(struct intel_display *display) 7755 { 7756 struct intel_encoder *encoder; 7757 bool dpd_is_edp = false; 7758 7759 intel_pps_unlock_regs_wa(display); 7760 7761 if (!HAS_DISPLAY(display)) 7762 return; 7763 7764 if (HAS_DDI(display)) { 7765 if (intel_ddi_crt_present(display)) 7766 intel_crt_init(display); 7767 7768 intel_bios_for_each_encoder(display, intel_ddi_init); 7769 7770 if (display->platform.geminilake || display->platform.broxton) 7771 vlv_dsi_init(display); 7772 } else if (HAS_PCH_SPLIT(display)) { 7773 int found; 7774 7775 /* 7776 * intel_edp_init_connector() depends on this completing first, 7777 * to prevent the registration of both eDP and LVDS and the 7778 * incorrect sharing of the PPS. 7779 */ 7780 intel_lvds_init(display); 7781 intel_crt_init(display); 7782 7783 dpd_is_edp = intel_dp_is_port_edp(display, PORT_D); 7784 7785 if (ilk_has_edp_a(display)) 7786 g4x_dp_init(display, DP_A, PORT_A); 7787 7788 if (intel_de_read(display, PCH_HDMIB) & SDVO_DETECTED) { 7789 /* PCH SDVOB multiplex with HDMIB */ 7790 found = intel_sdvo_init(display, PCH_SDVOB, PORT_B); 7791 if (!found) 7792 g4x_hdmi_init(display, PCH_HDMIB, PORT_B); 7793 if (!found && (intel_de_read(display, PCH_DP_B) & DP_DETECTED)) 7794 g4x_dp_init(display, PCH_DP_B, PORT_B); 7795 } 7796 7797 if (intel_de_read(display, PCH_HDMIC) & SDVO_DETECTED) 7798 g4x_hdmi_init(display, PCH_HDMIC, PORT_C); 7799 7800 if (!dpd_is_edp && intel_de_read(display, PCH_HDMID) & SDVO_DETECTED) 7801 g4x_hdmi_init(display, PCH_HDMID, PORT_D); 7802 7803 if (intel_de_read(display, PCH_DP_C) & DP_DETECTED) 7804 g4x_dp_init(display, PCH_DP_C, PORT_C); 7805 7806 if (intel_de_read(display, PCH_DP_D) & DP_DETECTED) 7807 g4x_dp_init(display, PCH_DP_D, PORT_D); 7808 } else if (display->platform.valleyview || display->platform.cherryview) { 7809 bool has_edp, has_port; 7810 7811 if (display->platform.valleyview && display->vbt.int_crt_support) 7812 intel_crt_init(display); 7813 7814 /* 7815 * The DP_DETECTED bit is the latched state of the DDC 7816 * SDA pin at boot. However since eDP doesn't require DDC 7817 * (no way to plug in a DP->HDMI dongle) the DDC pins for 7818 * eDP ports may have been muxed to an alternate function. 7819 * Thus we can't rely on the DP_DETECTED bit alone to detect 7820 * eDP ports. Consult the VBT as well as DP_DETECTED to 7821 * detect eDP ports. 7822 * 7823 * Sadly the straps seem to be missing sometimes even for HDMI 7824 * ports (eg. on Voyo V3 - CHT x7-Z8700), so check both strap 7825 * and VBT for the presence of the port. Additionally we can't 7826 * trust the port type the VBT declares as we've seen at least 7827 * HDMI ports that the VBT claim are DP or eDP. 7828 */ 7829 has_edp = intel_dp_is_port_edp(display, PORT_B); 7830 has_port = intel_bios_is_port_present(display, PORT_B); 7831 if (intel_de_read(display, VLV_DP_B) & DP_DETECTED || has_port) 7832 has_edp &= g4x_dp_init(display, VLV_DP_B, PORT_B); 7833 if ((intel_de_read(display, VLV_HDMIB) & SDVO_DETECTED || has_port) && !has_edp) 7834 g4x_hdmi_init(display, VLV_HDMIB, PORT_B); 7835 7836 has_edp = intel_dp_is_port_edp(display, PORT_C); 7837 has_port = intel_bios_is_port_present(display, PORT_C); 7838 if (intel_de_read(display, VLV_DP_C) & DP_DETECTED || has_port) 7839 has_edp &= g4x_dp_init(display, VLV_DP_C, PORT_C); 7840 if ((intel_de_read(display, VLV_HDMIC) & SDVO_DETECTED || has_port) && !has_edp) 7841 g4x_hdmi_init(display, VLV_HDMIC, PORT_C); 7842 7843 if (display->platform.cherryview) { 7844 /* 7845 * eDP not supported on port D, 7846 * so no need to worry about it 7847 */ 7848 has_port = intel_bios_is_port_present(display, PORT_D); 7849 if (intel_de_read(display, CHV_DP_D) & DP_DETECTED || has_port) 7850 g4x_dp_init(display, CHV_DP_D, PORT_D); 7851 if (intel_de_read(display, CHV_HDMID) & SDVO_DETECTED || has_port) 7852 g4x_hdmi_init(display, CHV_HDMID, PORT_D); 7853 } 7854 7855 vlv_dsi_init(display); 7856 } else if (display->platform.pineview) { 7857 intel_lvds_init(display); 7858 intel_crt_init(display); 7859 } else if (IS_DISPLAY_VER(display, 3, 4)) { 7860 bool found = false; 7861 7862 if (display->platform.mobile) 7863 intel_lvds_init(display); 7864 7865 intel_crt_init(display); 7866 7867 if (intel_de_read(display, GEN3_SDVOB) & SDVO_DETECTED) { 7868 drm_dbg_kms(display->drm, "probing SDVOB\n"); 7869 found = intel_sdvo_init(display, GEN3_SDVOB, PORT_B); 7870 if (!found && display->platform.g4x) { 7871 drm_dbg_kms(display->drm, 7872 "probing HDMI on SDVOB\n"); 7873 g4x_hdmi_init(display, GEN4_HDMIB, PORT_B); 7874 } 7875 7876 if (!found && display->platform.g4x) 7877 g4x_dp_init(display, DP_B, PORT_B); 7878 } 7879 7880 /* Before G4X SDVOC doesn't have its own detect register */ 7881 7882 if (intel_de_read(display, GEN3_SDVOB) & SDVO_DETECTED) { 7883 drm_dbg_kms(display->drm, "probing SDVOC\n"); 7884 found = intel_sdvo_init(display, GEN3_SDVOC, PORT_C); 7885 } 7886 7887 if (!found && (intel_de_read(display, GEN3_SDVOC) & SDVO_DETECTED)) { 7888 7889 if (display->platform.g4x) { 7890 drm_dbg_kms(display->drm, 7891 "probing HDMI on SDVOC\n"); 7892 g4x_hdmi_init(display, GEN4_HDMIC, PORT_C); 7893 } 7894 if (display->platform.g4x) 7895 g4x_dp_init(display, DP_C, PORT_C); 7896 } 7897 7898 if (display->platform.g4x && (intel_de_read(display, DP_D) & DP_DETECTED)) 7899 g4x_dp_init(display, DP_D, PORT_D); 7900 7901 if (SUPPORTS_TV(display)) 7902 intel_tv_init(display); 7903 } else if (DISPLAY_VER(display) == 2) { 7904 if (display->platform.i85x) 7905 intel_lvds_init(display); 7906 7907 intel_crt_init(display); 7908 intel_dvo_init(display); 7909 } 7910 7911 for_each_intel_encoder(display->drm, encoder) { 7912 encoder->base.possible_crtcs = 7913 intel_encoder_possible_crtcs(encoder); 7914 encoder->base.possible_clones = 7915 intel_encoder_possible_clones(encoder); 7916 } 7917 7918 intel_init_pch_refclk(display); 7919 7920 drm_helper_move_panel_connectors_to_head(display->drm); 7921 } 7922 7923 static int max_dotclock(struct intel_display *display) 7924 { 7925 int max_dotclock = display->cdclk.max_dotclk_freq; 7926 7927 if (HAS_ULTRAJOINER(display)) 7928 max_dotclock *= 4; 7929 else if (HAS_UNCOMPRESSED_JOINER(display) || HAS_BIGJOINER(display)) 7930 max_dotclock *= 2; 7931 7932 return max_dotclock; 7933 } 7934 7935 enum drm_mode_status intel_mode_valid(struct drm_device *dev, 7936 const struct drm_display_mode *mode) 7937 { 7938 struct intel_display *display = to_intel_display(dev); 7939 int hdisplay_max, htotal_max; 7940 int vdisplay_max, vtotal_max; 7941 7942 /* 7943 * Can't reject DBLSCAN here because Xorg ddxen can add piles 7944 * of DBLSCAN modes to the output's mode list when they detect 7945 * the scaling mode property on the connector. And they don't 7946 * ask the kernel to validate those modes in any way until 7947 * modeset time at which point the client gets a protocol error. 7948 * So in order to not upset those clients we silently ignore the 7949 * DBLSCAN flag on such connectors. For other connectors we will 7950 * reject modes with the DBLSCAN flag in encoder->compute_config(). 7951 * And we always reject DBLSCAN modes in connector->mode_valid() 7952 * as we never want such modes on the connector's mode list. 7953 */ 7954 7955 if (mode->vscan > 1) 7956 return MODE_NO_VSCAN; 7957 7958 if (mode->flags & DRM_MODE_FLAG_HSKEW) 7959 return MODE_H_ILLEGAL; 7960 7961 if (mode->flags & (DRM_MODE_FLAG_CSYNC | 7962 DRM_MODE_FLAG_NCSYNC | 7963 DRM_MODE_FLAG_PCSYNC)) 7964 return MODE_HSYNC; 7965 7966 if (mode->flags & (DRM_MODE_FLAG_BCAST | 7967 DRM_MODE_FLAG_PIXMUX | 7968 DRM_MODE_FLAG_CLKDIV2)) 7969 return MODE_BAD; 7970 7971 /* 7972 * Reject clearly excessive dotclocks early to 7973 * avoid having to worry about huge integers later. 7974 */ 7975 if (mode->clock > max_dotclock(display)) 7976 return MODE_CLOCK_HIGH; 7977 7978 /* Transcoder timing limits */ 7979 if (DISPLAY_VER(display) >= 11) { 7980 hdisplay_max = 16384; 7981 vdisplay_max = 8192; 7982 htotal_max = 16384; 7983 vtotal_max = 8192; 7984 } else if (DISPLAY_VER(display) >= 9 || 7985 display->platform.broadwell || display->platform.haswell) { 7986 hdisplay_max = 8192; /* FDI max 4096 handled elsewhere */ 7987 vdisplay_max = 4096; 7988 htotal_max = 8192; 7989 vtotal_max = 8192; 7990 } else if (DISPLAY_VER(display) >= 3) { 7991 hdisplay_max = 4096; 7992 vdisplay_max = 4096; 7993 htotal_max = 8192; 7994 vtotal_max = 8192; 7995 } else { 7996 hdisplay_max = 2048; 7997 vdisplay_max = 2048; 7998 htotal_max = 4096; 7999 vtotal_max = 4096; 8000 } 8001 8002 if (mode->hdisplay > hdisplay_max || 8003 mode->hsync_start > htotal_max || 8004 mode->hsync_end > htotal_max || 8005 mode->htotal > htotal_max) 8006 return MODE_H_ILLEGAL; 8007 8008 if (mode->vdisplay > vdisplay_max || 8009 mode->vsync_start > vtotal_max || 8010 mode->vsync_end > vtotal_max || 8011 mode->vtotal > vtotal_max) 8012 return MODE_V_ILLEGAL; 8013 8014 return MODE_OK; 8015 } 8016 8017 enum drm_mode_status intel_cpu_transcoder_mode_valid(struct intel_display *display, 8018 const struct drm_display_mode *mode) 8019 { 8020 /* 8021 * Additional transcoder timing limits, 8022 * excluding BXT/GLK DSI transcoders. 8023 */ 8024 if (DISPLAY_VER(display) >= 5) { 8025 if (mode->hdisplay < 64 || 8026 mode->htotal - mode->hdisplay < 32) 8027 return MODE_H_ILLEGAL; 8028 8029 if (mode->vtotal - mode->vdisplay < 5) 8030 return MODE_V_ILLEGAL; 8031 } else { 8032 if (mode->htotal - mode->hdisplay < 32) 8033 return MODE_H_ILLEGAL; 8034 8035 if (mode->vtotal - mode->vdisplay < 3) 8036 return MODE_V_ILLEGAL; 8037 } 8038 8039 /* 8040 * Cantiga+ cannot handle modes with a hsync front porch of 0. 8041 * WaPruneModeWithIncorrectHsyncOffset:ctg,elk,ilk,snb,ivb,vlv,hsw. 8042 */ 8043 if ((DISPLAY_VER(display) >= 5 || display->platform.g4x) && 8044 mode->hsync_start == mode->hdisplay) 8045 return MODE_H_ILLEGAL; 8046 8047 return MODE_OK; 8048 } 8049 8050 enum drm_mode_status 8051 intel_mode_valid_max_plane_size(struct intel_display *display, 8052 const struct drm_display_mode *mode, 8053 int num_joined_pipes) 8054 { 8055 int plane_width_max, plane_height_max; 8056 8057 /* 8058 * intel_mode_valid() should be 8059 * sufficient on older platforms. 8060 */ 8061 if (DISPLAY_VER(display) < 9) 8062 return MODE_OK; 8063 8064 /* 8065 * Most people will probably want a fullscreen 8066 * plane so let's not advertize modes that are 8067 * too big for that. 8068 */ 8069 if (DISPLAY_VER(display) >= 30) { 8070 plane_width_max = 6144 * num_joined_pipes; 8071 plane_height_max = 4800; 8072 } else if (DISPLAY_VER(display) >= 11) { 8073 plane_width_max = 5120 * num_joined_pipes; 8074 plane_height_max = 4320; 8075 } else { 8076 plane_width_max = 5120; 8077 plane_height_max = 4096; 8078 } 8079 8080 if (mode->hdisplay > plane_width_max) 8081 return MODE_H_ILLEGAL; 8082 8083 if (mode->vdisplay > plane_height_max) 8084 return MODE_V_ILLEGAL; 8085 8086 return MODE_OK; 8087 } 8088 8089 static const struct intel_display_funcs skl_display_funcs = { 8090 .get_pipe_config = hsw_get_pipe_config, 8091 .crtc_enable = hsw_crtc_enable, 8092 .crtc_disable = hsw_crtc_disable, 8093 .commit_modeset_enables = skl_commit_modeset_enables, 8094 .get_initial_plane_config = skl_get_initial_plane_config, 8095 .fixup_initial_plane_config = skl_fixup_initial_plane_config, 8096 }; 8097 8098 static const struct intel_display_funcs ddi_display_funcs = { 8099 .get_pipe_config = hsw_get_pipe_config, 8100 .crtc_enable = hsw_crtc_enable, 8101 .crtc_disable = hsw_crtc_disable, 8102 .commit_modeset_enables = intel_commit_modeset_enables, 8103 .get_initial_plane_config = i9xx_get_initial_plane_config, 8104 .fixup_initial_plane_config = i9xx_fixup_initial_plane_config, 8105 }; 8106 8107 static const struct intel_display_funcs pch_split_display_funcs = { 8108 .get_pipe_config = ilk_get_pipe_config, 8109 .crtc_enable = ilk_crtc_enable, 8110 .crtc_disable = ilk_crtc_disable, 8111 .commit_modeset_enables = intel_commit_modeset_enables, 8112 .get_initial_plane_config = i9xx_get_initial_plane_config, 8113 .fixup_initial_plane_config = i9xx_fixup_initial_plane_config, 8114 }; 8115 8116 static const struct intel_display_funcs vlv_display_funcs = { 8117 .get_pipe_config = i9xx_get_pipe_config, 8118 .crtc_enable = valleyview_crtc_enable, 8119 .crtc_disable = i9xx_crtc_disable, 8120 .commit_modeset_enables = intel_commit_modeset_enables, 8121 .get_initial_plane_config = i9xx_get_initial_plane_config, 8122 .fixup_initial_plane_config = i9xx_fixup_initial_plane_config, 8123 }; 8124 8125 static const struct intel_display_funcs i9xx_display_funcs = { 8126 .get_pipe_config = i9xx_get_pipe_config, 8127 .crtc_enable = i9xx_crtc_enable, 8128 .crtc_disable = i9xx_crtc_disable, 8129 .commit_modeset_enables = intel_commit_modeset_enables, 8130 .get_initial_plane_config = i9xx_get_initial_plane_config, 8131 .fixup_initial_plane_config = i9xx_fixup_initial_plane_config, 8132 }; 8133 8134 /** 8135 * intel_init_display_hooks - initialize the display modesetting hooks 8136 * @display: display device private 8137 */ 8138 void intel_init_display_hooks(struct intel_display *display) 8139 { 8140 if (DISPLAY_VER(display) >= 9) { 8141 display->funcs.display = &skl_display_funcs; 8142 } else if (HAS_DDI(display)) { 8143 display->funcs.display = &ddi_display_funcs; 8144 } else if (HAS_PCH_SPLIT(display)) { 8145 display->funcs.display = &pch_split_display_funcs; 8146 } else if (display->platform.cherryview || 8147 display->platform.valleyview) { 8148 display->funcs.display = &vlv_display_funcs; 8149 } else { 8150 display->funcs.display = &i9xx_display_funcs; 8151 } 8152 } 8153 8154 int intel_initial_commit(struct intel_display *display) 8155 { 8156 struct drm_atomic_state *state = NULL; 8157 struct drm_modeset_acquire_ctx ctx; 8158 struct intel_crtc *crtc; 8159 int ret = 0; 8160 8161 state = drm_atomic_state_alloc(display->drm); 8162 if (!state) 8163 return -ENOMEM; 8164 8165 drm_modeset_acquire_init(&ctx, 0); 8166 8167 state->acquire_ctx = &ctx; 8168 to_intel_atomic_state(state)->internal = true; 8169 8170 retry: 8171 for_each_intel_crtc(display->drm, crtc) { 8172 struct intel_crtc_state *crtc_state = 8173 intel_atomic_get_crtc_state(state, crtc); 8174 8175 if (IS_ERR(crtc_state)) { 8176 ret = PTR_ERR(crtc_state); 8177 goto out; 8178 } 8179 8180 if (!crtc_state->hw.active) 8181 crtc_state->inherited = false; 8182 8183 if (crtc_state->hw.active) { 8184 struct intel_encoder *encoder; 8185 8186 ret = drm_atomic_add_affected_planes(state, &crtc->base); 8187 if (ret) 8188 goto out; 8189 8190 /* 8191 * FIXME hack to force a LUT update to avoid the 8192 * plane update forcing the pipe gamma on without 8193 * having a proper LUT loaded. Remove once we 8194 * have readout for pipe gamma enable. 8195 */ 8196 crtc_state->uapi.color_mgmt_changed = true; 8197 8198 for_each_intel_encoder_mask(display->drm, encoder, 8199 crtc_state->uapi.encoder_mask) { 8200 if (encoder->initial_fastset_check && 8201 !encoder->initial_fastset_check(encoder, crtc_state)) { 8202 ret = drm_atomic_add_affected_connectors(state, 8203 &crtc->base); 8204 if (ret) 8205 goto out; 8206 } 8207 } 8208 } 8209 } 8210 8211 ret = drm_atomic_commit(state); 8212 8213 out: 8214 if (ret == -EDEADLK) { 8215 drm_atomic_state_clear(state); 8216 drm_modeset_backoff(&ctx); 8217 goto retry; 8218 } 8219 8220 drm_atomic_state_put(state); 8221 8222 drm_modeset_drop_locks(&ctx); 8223 drm_modeset_acquire_fini(&ctx); 8224 8225 return ret; 8226 } 8227 8228 void i830_enable_pipe(struct intel_display *display, enum pipe pipe) 8229 { 8230 struct intel_crtc *crtc = intel_crtc_for_pipe(display, pipe); 8231 enum transcoder cpu_transcoder = (enum transcoder)pipe; 8232 /* 640x480@60Hz, ~25175 kHz */ 8233 struct dpll clock = { 8234 .m1 = 18, 8235 .m2 = 7, 8236 .p1 = 13, 8237 .p2 = 4, 8238 .n = 2, 8239 }; 8240 u32 dpll, fp; 8241 int i; 8242 8243 drm_WARN_ON(display->drm, 8244 i9xx_calc_dpll_params(48000, &clock) != 25154); 8245 8246 drm_dbg_kms(display->drm, 8247 "enabling pipe %c due to force quirk (vco=%d dot=%d)\n", 8248 pipe_name(pipe), clock.vco, clock.dot); 8249 8250 fp = i9xx_dpll_compute_fp(&clock); 8251 dpll = DPLL_DVO_2X_MODE | 8252 DPLL_VGA_MODE_DIS | 8253 ((clock.p1 - 2) << DPLL_FPA01_P1_POST_DIV_SHIFT) | 8254 PLL_P2_DIVIDE_BY_4 | 8255 PLL_REF_INPUT_DREFCLK | 8256 DPLL_VCO_ENABLE; 8257 8258 intel_de_write(display, TRANS_HTOTAL(display, cpu_transcoder), 8259 HACTIVE(640 - 1) | HTOTAL(800 - 1)); 8260 intel_de_write(display, TRANS_HBLANK(display, cpu_transcoder), 8261 HBLANK_START(640 - 1) | HBLANK_END(800 - 1)); 8262 intel_de_write(display, TRANS_HSYNC(display, cpu_transcoder), 8263 HSYNC_START(656 - 1) | HSYNC_END(752 - 1)); 8264 intel_de_write(display, TRANS_VTOTAL(display, cpu_transcoder), 8265 VACTIVE(480 - 1) | VTOTAL(525 - 1)); 8266 intel_de_write(display, TRANS_VBLANK(display, cpu_transcoder), 8267 VBLANK_START(480 - 1) | VBLANK_END(525 - 1)); 8268 intel_de_write(display, TRANS_VSYNC(display, cpu_transcoder), 8269 VSYNC_START(490 - 1) | VSYNC_END(492 - 1)); 8270 intel_de_write(display, PIPESRC(display, pipe), 8271 PIPESRC_WIDTH(640 - 1) | PIPESRC_HEIGHT(480 - 1)); 8272 8273 intel_de_write(display, FP0(pipe), fp); 8274 intel_de_write(display, FP1(pipe), fp); 8275 8276 /* 8277 * Apparently we need to have VGA mode enabled prior to changing 8278 * the P1/P2 dividers. Otherwise the DPLL will keep using the old 8279 * dividers, even though the register value does change. 8280 */ 8281 intel_de_write(display, DPLL(display, pipe), 8282 dpll & ~DPLL_VGA_MODE_DIS); 8283 intel_de_write(display, DPLL(display, pipe), dpll); 8284 8285 /* Wait for the clocks to stabilize. */ 8286 intel_de_posting_read(display, DPLL(display, pipe)); 8287 udelay(150); 8288 8289 /* The pixel multiplier can only be updated once the 8290 * DPLL is enabled and the clocks are stable. 8291 * 8292 * So write it again. 8293 */ 8294 intel_de_write(display, DPLL(display, pipe), dpll); 8295 8296 /* We do this three times for luck */ 8297 for (i = 0; i < 3 ; i++) { 8298 intel_de_write(display, DPLL(display, pipe), dpll); 8299 intel_de_posting_read(display, DPLL(display, pipe)); 8300 udelay(150); /* wait for warmup */ 8301 } 8302 8303 intel_de_write(display, TRANSCONF(display, pipe), TRANSCONF_ENABLE); 8304 intel_de_posting_read(display, TRANSCONF(display, pipe)); 8305 8306 intel_wait_for_pipe_scanline_moving(crtc); 8307 } 8308 8309 void i830_disable_pipe(struct intel_display *display, enum pipe pipe) 8310 { 8311 struct intel_crtc *crtc = intel_crtc_for_pipe(display, pipe); 8312 8313 drm_dbg_kms(display->drm, "disabling pipe %c due to force quirk\n", 8314 pipe_name(pipe)); 8315 8316 drm_WARN_ON(display->drm, 8317 intel_de_read(display, DSPCNTR(display, PLANE_A)) & DISP_ENABLE); 8318 drm_WARN_ON(display->drm, 8319 intel_de_read(display, DSPCNTR(display, PLANE_B)) & DISP_ENABLE); 8320 drm_WARN_ON(display->drm, 8321 intel_de_read(display, DSPCNTR(display, PLANE_C)) & DISP_ENABLE); 8322 drm_WARN_ON(display->drm, 8323 intel_de_read(display, CURCNTR(display, PIPE_A)) & MCURSOR_MODE_MASK); 8324 drm_WARN_ON(display->drm, 8325 intel_de_read(display, CURCNTR(display, PIPE_B)) & MCURSOR_MODE_MASK); 8326 8327 intel_de_write(display, TRANSCONF(display, pipe), 0); 8328 intel_de_posting_read(display, TRANSCONF(display, pipe)); 8329 8330 intel_wait_for_pipe_scanline_stopped(crtc); 8331 8332 intel_de_write(display, DPLL(display, pipe), DPLL_VGA_MODE_DIS); 8333 intel_de_posting_read(display, DPLL(display, pipe)); 8334 } 8335 8336 bool intel_scanout_needs_vtd_wa(struct intel_display *display) 8337 { 8338 struct drm_i915_private *i915 = to_i915(display->drm); 8339 8340 return IS_DISPLAY_VER(display, 6, 11) && i915_vtd_active(i915); 8341 } 8342