1 // SPDX-License-Identifier: MIT 2 /* 3 * Copyright © 2022 Intel Corporation 4 * 5 * Read out the current hardware modeset state, and sanitize it to the current 6 * state. 7 */ 8 9 #include <drm/drm_atomic_uapi.h> 10 #include <drm/drm_atomic_state_helper.h> 11 #include <drm/drm_vblank.h> 12 13 #include "i915_drv.h" 14 #include "i915_reg.h" 15 #include "i9xx_wm.h" 16 #include "intel_atomic.h" 17 #include "intel_bw.h" 18 #include "intel_cmtg.h" 19 #include "intel_color.h" 20 #include "intel_crtc.h" 21 #include "intel_crtc_state_dump.h" 22 #include "intel_ddi.h" 23 #include "intel_de.h" 24 #include "intel_display.h" 25 #include "intel_display_power.h" 26 #include "intel_display_types.h" 27 #include "intel_dmc.h" 28 #include "intel_fifo_underrun.h" 29 #include "intel_modeset_setup.h" 30 #include "intel_pch_display.h" 31 #include "intel_pmdemand.h" 32 #include "intel_tc.h" 33 #include "intel_vblank.h" 34 #include "intel_wm.h" 35 #include "skl_watermark.h" 36 37 static void intel_crtc_disable_noatomic_begin(struct intel_crtc *crtc, 38 struct drm_modeset_acquire_ctx *ctx) 39 { 40 struct drm_i915_private *i915 = to_i915(crtc->base.dev); 41 struct intel_crtc_state *crtc_state = 42 to_intel_crtc_state(crtc->base.state); 43 struct intel_plane *plane; 44 struct drm_atomic_state *state; 45 struct intel_crtc *temp_crtc; 46 enum pipe pipe = crtc->pipe; 47 48 if (!crtc_state->hw.active) 49 return; 50 51 for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) { 52 const struct intel_plane_state *plane_state = 53 to_intel_plane_state(plane->base.state); 54 55 if (plane_state->uapi.visible) 56 intel_plane_disable_noatomic(crtc, plane); 57 } 58 59 state = drm_atomic_state_alloc(&i915->drm); 60 if (!state) { 61 drm_dbg_kms(&i915->drm, 62 "failed to disable [CRTC:%d:%s], out of memory", 63 crtc->base.base.id, crtc->base.name); 64 return; 65 } 66 67 state->acquire_ctx = ctx; 68 to_intel_atomic_state(state)->internal = true; 69 70 /* Everything's already locked, -EDEADLK can't happen. */ 71 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, 72 BIT(pipe) | 73 intel_crtc_joiner_secondary_pipes(crtc_state)) { 74 struct intel_crtc_state *temp_crtc_state = 75 intel_atomic_get_crtc_state(state, temp_crtc); 76 int ret; 77 78 ret = drm_atomic_add_affected_connectors(state, &temp_crtc->base); 79 80 drm_WARN_ON(&i915->drm, IS_ERR(temp_crtc_state) || ret); 81 } 82 83 i915->display.funcs.display->crtc_disable(to_intel_atomic_state(state), crtc); 84 85 drm_atomic_state_put(state); 86 87 drm_dbg_kms(&i915->drm, 88 "[CRTC:%d:%s] hw state adjusted, was enabled, now disabled\n", 89 crtc->base.base.id, crtc->base.name); 90 91 crtc->active = false; 92 crtc->base.enabled = false; 93 94 if (crtc_state->shared_dpll) 95 intel_unreference_shared_dpll_crtc(crtc, 96 crtc_state->shared_dpll, 97 &crtc_state->shared_dpll->state); 98 } 99 100 static void set_encoder_for_connector(struct intel_connector *connector, 101 struct intel_encoder *encoder) 102 { 103 struct drm_connector_state *conn_state = connector->base.state; 104 105 if (conn_state->crtc) 106 drm_connector_put(&connector->base); 107 108 if (encoder) { 109 conn_state->best_encoder = &encoder->base; 110 conn_state->crtc = encoder->base.crtc; 111 drm_connector_get(&connector->base); 112 } else { 113 conn_state->best_encoder = NULL; 114 conn_state->crtc = NULL; 115 } 116 } 117 118 static void reset_encoder_connector_state(struct intel_encoder *encoder) 119 { 120 struct intel_display *display = to_intel_display(encoder); 121 struct drm_i915_private *i915 = to_i915(encoder->base.dev); 122 struct intel_pmdemand_state *pmdemand_state = 123 to_intel_pmdemand_state(i915->display.pmdemand.obj.state); 124 struct intel_connector *connector; 125 struct drm_connector_list_iter conn_iter; 126 127 drm_connector_list_iter_begin(&i915->drm, &conn_iter); 128 for_each_intel_connector_iter(connector, &conn_iter) { 129 if (connector->base.encoder != &encoder->base) 130 continue; 131 132 /* Clear the corresponding bit in pmdemand active phys mask */ 133 intel_pmdemand_update_phys_mask(display, encoder, 134 pmdemand_state, false); 135 136 set_encoder_for_connector(connector, NULL); 137 138 connector->base.dpms = DRM_MODE_DPMS_OFF; 139 connector->base.encoder = NULL; 140 } 141 drm_connector_list_iter_end(&conn_iter); 142 } 143 144 static void reset_crtc_encoder_state(struct intel_crtc *crtc) 145 { 146 struct drm_i915_private *i915 = to_i915(crtc->base.dev); 147 struct intel_encoder *encoder; 148 149 for_each_encoder_on_crtc(&i915->drm, &crtc->base, encoder) { 150 reset_encoder_connector_state(encoder); 151 encoder->base.crtc = NULL; 152 } 153 } 154 155 static void intel_crtc_disable_noatomic_complete(struct intel_crtc *crtc) 156 { 157 struct intel_display *display = to_intel_display(crtc); 158 struct drm_i915_private *i915 = to_i915(crtc->base.dev); 159 struct intel_bw_state *bw_state = 160 to_intel_bw_state(i915->display.bw.obj.state); 161 struct intel_cdclk_state *cdclk_state = 162 to_intel_cdclk_state(i915->display.cdclk.obj.state); 163 struct intel_dbuf_state *dbuf_state = 164 to_intel_dbuf_state(i915->display.dbuf.obj.state); 165 struct intel_pmdemand_state *pmdemand_state = 166 to_intel_pmdemand_state(i915->display.pmdemand.obj.state); 167 struct intel_crtc_state *crtc_state = 168 to_intel_crtc_state(crtc->base.state); 169 enum pipe pipe = crtc->pipe; 170 171 __drm_atomic_helper_crtc_destroy_state(&crtc_state->uapi); 172 intel_crtc_free_hw_state(crtc_state); 173 intel_crtc_state_reset(crtc_state, crtc); 174 175 reset_crtc_encoder_state(crtc); 176 177 intel_fbc_disable(crtc); 178 intel_update_watermarks(i915); 179 180 intel_display_power_put_all_in_set(display, &crtc->enabled_power_domains); 181 182 cdclk_state->min_cdclk[pipe] = 0; 183 cdclk_state->min_voltage_level[pipe] = 0; 184 cdclk_state->active_pipes &= ~BIT(pipe); 185 186 dbuf_state->active_pipes &= ~BIT(pipe); 187 188 bw_state->data_rate[pipe] = 0; 189 bw_state->num_active_planes[pipe] = 0; 190 191 intel_pmdemand_update_port_clock(display, pmdemand_state, pipe, 0); 192 } 193 194 /* 195 * Return all the pipes using a transcoder in @transcoder_mask. 196 * For joiner configs return only the joiner primary. 197 */ 198 static u8 get_transcoder_pipes(struct drm_i915_private *i915, 199 u8 transcoder_mask) 200 { 201 struct intel_crtc *temp_crtc; 202 u8 pipes = 0; 203 204 for_each_intel_crtc(&i915->drm, temp_crtc) { 205 struct intel_crtc_state *temp_crtc_state = 206 to_intel_crtc_state(temp_crtc->base.state); 207 208 if (temp_crtc_state->cpu_transcoder == INVALID_TRANSCODER) 209 continue; 210 211 if (intel_crtc_is_joiner_secondary(temp_crtc_state)) 212 continue; 213 214 if (transcoder_mask & BIT(temp_crtc_state->cpu_transcoder)) 215 pipes |= BIT(temp_crtc->pipe); 216 } 217 218 return pipes; 219 } 220 221 /* 222 * Return the port sync master and slave pipes linked to @crtc. 223 * For joiner configs return only the joiner primary pipes. 224 */ 225 static void get_portsync_pipes(struct intel_crtc *crtc, 226 u8 *master_pipe_mask, u8 *slave_pipes_mask) 227 { 228 struct intel_display *display = to_intel_display(crtc); 229 struct drm_i915_private *i915 = to_i915(crtc->base.dev); 230 struct intel_crtc_state *crtc_state = 231 to_intel_crtc_state(crtc->base.state); 232 struct intel_crtc *master_crtc; 233 struct intel_crtc_state *master_crtc_state; 234 enum transcoder master_transcoder; 235 236 if (!is_trans_port_sync_mode(crtc_state)) { 237 *master_pipe_mask = BIT(crtc->pipe); 238 *slave_pipes_mask = 0; 239 240 return; 241 } 242 243 if (is_trans_port_sync_master(crtc_state)) 244 master_transcoder = crtc_state->cpu_transcoder; 245 else 246 master_transcoder = crtc_state->master_transcoder; 247 248 *master_pipe_mask = get_transcoder_pipes(i915, BIT(master_transcoder)); 249 drm_WARN_ON(&i915->drm, !is_power_of_2(*master_pipe_mask)); 250 251 master_crtc = intel_crtc_for_pipe(display, ffs(*master_pipe_mask) - 1); 252 master_crtc_state = to_intel_crtc_state(master_crtc->base.state); 253 *slave_pipes_mask = get_transcoder_pipes(i915, master_crtc_state->sync_mode_slaves_mask); 254 } 255 256 static u8 get_joiner_secondary_pipes(struct drm_i915_private *i915, u8 primary_pipes_mask) 257 { 258 struct intel_crtc *primary_crtc; 259 u8 pipes = 0; 260 261 for_each_intel_crtc_in_pipe_mask(&i915->drm, primary_crtc, primary_pipes_mask) { 262 struct intel_crtc_state *primary_crtc_state = 263 to_intel_crtc_state(primary_crtc->base.state); 264 265 pipes |= intel_crtc_joiner_secondary_pipes(primary_crtc_state); 266 } 267 268 return pipes; 269 } 270 271 static void intel_crtc_disable_noatomic(struct intel_crtc *crtc, 272 struct drm_modeset_acquire_ctx *ctx) 273 { 274 struct drm_i915_private *i915 = to_i915(crtc->base.dev); 275 u8 portsync_master_mask; 276 u8 portsync_slaves_mask; 277 u8 joiner_secondaries_mask; 278 struct intel_crtc *temp_crtc; 279 280 /* TODO: Add support for MST */ 281 get_portsync_pipes(crtc, &portsync_master_mask, &portsync_slaves_mask); 282 joiner_secondaries_mask = get_joiner_secondary_pipes(i915, 283 portsync_master_mask | 284 portsync_slaves_mask); 285 286 drm_WARN_ON(&i915->drm, 287 portsync_master_mask & portsync_slaves_mask || 288 portsync_master_mask & joiner_secondaries_mask || 289 portsync_slaves_mask & joiner_secondaries_mask); 290 291 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, joiner_secondaries_mask) 292 intel_crtc_disable_noatomic_begin(temp_crtc, ctx); 293 294 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, portsync_slaves_mask) 295 intel_crtc_disable_noatomic_begin(temp_crtc, ctx); 296 297 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, portsync_master_mask) 298 intel_crtc_disable_noatomic_begin(temp_crtc, ctx); 299 300 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, 301 joiner_secondaries_mask | 302 portsync_slaves_mask | 303 portsync_master_mask) 304 intel_crtc_disable_noatomic_complete(temp_crtc); 305 } 306 307 static void intel_modeset_update_connector_atomic_state(struct drm_i915_private *i915) 308 { 309 struct intel_connector *connector; 310 struct drm_connector_list_iter conn_iter; 311 312 drm_connector_list_iter_begin(&i915->drm, &conn_iter); 313 for_each_intel_connector_iter(connector, &conn_iter) { 314 struct drm_connector_state *conn_state = connector->base.state; 315 struct intel_encoder *encoder = 316 to_intel_encoder(connector->base.encoder); 317 318 set_encoder_for_connector(connector, encoder); 319 320 if (encoder) { 321 struct intel_crtc *crtc = 322 to_intel_crtc(encoder->base.crtc); 323 const struct intel_crtc_state *crtc_state = 324 to_intel_crtc_state(crtc->base.state); 325 326 conn_state->max_bpc = (crtc_state->pipe_bpp ?: 24) / 3; 327 } 328 } 329 drm_connector_list_iter_end(&conn_iter); 330 } 331 332 static void intel_crtc_copy_hw_to_uapi_state(struct intel_crtc_state *crtc_state) 333 { 334 struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev); 335 336 if (intel_crtc_is_joiner_secondary(crtc_state)) 337 return; 338 339 crtc_state->uapi.enable = crtc_state->hw.enable; 340 crtc_state->uapi.active = crtc_state->hw.active; 341 drm_WARN_ON(crtc_state->uapi.crtc->dev, 342 drm_atomic_set_mode_for_crtc(&crtc_state->uapi, &crtc_state->hw.mode) < 0); 343 344 crtc_state->uapi.adjusted_mode = crtc_state->hw.adjusted_mode; 345 crtc_state->uapi.scaling_filter = crtc_state->hw.scaling_filter; 346 347 if (DISPLAY_INFO(i915)->color.degamma_lut_size) { 348 /* assume 1:1 mapping */ 349 drm_property_replace_blob(&crtc_state->hw.degamma_lut, 350 crtc_state->pre_csc_lut); 351 drm_property_replace_blob(&crtc_state->hw.gamma_lut, 352 crtc_state->post_csc_lut); 353 } else { 354 /* 355 * ilk/snb hw may be configured for either pre_csc_lut 356 * or post_csc_lut, but we don't advertise degamma_lut as 357 * being available in the uapi since there is only one 358 * hardware LUT. Always assign the result of the readout 359 * to gamma_lut as that is the only valid source of LUTs 360 * in the uapi. 361 */ 362 drm_WARN_ON(&i915->drm, crtc_state->post_csc_lut && 363 crtc_state->pre_csc_lut); 364 365 drm_property_replace_blob(&crtc_state->hw.degamma_lut, 366 NULL); 367 drm_property_replace_blob(&crtc_state->hw.gamma_lut, 368 crtc_state->post_csc_lut ?: 369 crtc_state->pre_csc_lut); 370 } 371 372 drm_property_replace_blob(&crtc_state->uapi.degamma_lut, 373 crtc_state->hw.degamma_lut); 374 drm_property_replace_blob(&crtc_state->uapi.gamma_lut, 375 crtc_state->hw.gamma_lut); 376 drm_property_replace_blob(&crtc_state->uapi.ctm, 377 crtc_state->hw.ctm); 378 } 379 380 static void 381 intel_sanitize_plane_mapping(struct drm_i915_private *i915) 382 { 383 struct intel_display *display = &i915->display; 384 struct intel_crtc *crtc; 385 386 if (DISPLAY_VER(i915) >= 4) 387 return; 388 389 for_each_intel_crtc(&i915->drm, crtc) { 390 struct intel_plane *plane = 391 to_intel_plane(crtc->base.primary); 392 struct intel_crtc *plane_crtc; 393 enum pipe pipe; 394 395 if (!plane->get_hw_state(plane, &pipe)) 396 continue; 397 398 if (pipe == crtc->pipe) 399 continue; 400 401 drm_dbg_kms(&i915->drm, 402 "[PLANE:%d:%s] attached to the wrong pipe, disabling plane\n", 403 plane->base.base.id, plane->base.name); 404 405 plane_crtc = intel_crtc_for_pipe(display, pipe); 406 intel_plane_disable_noatomic(plane_crtc, plane); 407 } 408 } 409 410 static bool intel_crtc_has_encoders(struct intel_crtc *crtc) 411 { 412 struct drm_device *dev = crtc->base.dev; 413 struct intel_encoder *encoder; 414 415 for_each_encoder_on_crtc(dev, &crtc->base, encoder) 416 return true; 417 418 return false; 419 } 420 421 static bool intel_crtc_needs_link_reset(struct intel_crtc *crtc) 422 { 423 struct drm_device *dev = crtc->base.dev; 424 struct intel_encoder *encoder; 425 426 for_each_encoder_on_crtc(dev, &crtc->base, encoder) { 427 struct intel_digital_port *dig_port = enc_to_dig_port(encoder); 428 429 if (dig_port && intel_tc_port_link_needs_reset(dig_port)) 430 return true; 431 } 432 433 return false; 434 } 435 436 static struct intel_connector *intel_encoder_find_connector(struct intel_encoder *encoder) 437 { 438 struct drm_i915_private *i915 = to_i915(encoder->base.dev); 439 struct drm_connector_list_iter conn_iter; 440 struct intel_connector *connector; 441 struct intel_connector *found_connector = NULL; 442 443 drm_connector_list_iter_begin(&i915->drm, &conn_iter); 444 for_each_intel_connector_iter(connector, &conn_iter) { 445 if (&encoder->base == connector->base.encoder) { 446 found_connector = connector; 447 break; 448 } 449 } 450 drm_connector_list_iter_end(&conn_iter); 451 452 return found_connector; 453 } 454 455 static void intel_sanitize_fifo_underrun_reporting(const struct intel_crtc_state *crtc_state) 456 { 457 struct intel_display *display = to_intel_display(crtc_state); 458 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); 459 460 /* 461 * We start out with underrun reporting disabled on active 462 * pipes to avoid races. 463 * 464 * Also on gmch platforms we dont have any hardware bits to 465 * disable the underrun reporting. Which means we need to start 466 * out with underrun reporting disabled also on inactive pipes, 467 * since otherwise we'll complain about the garbage we read when 468 * e.g. coming up after runtime pm. 469 * 470 * No protection against concurrent access is required - at 471 * worst a fifo underrun happens which also sets this to false. 472 */ 473 intel_init_fifo_underrun_reporting(display, crtc, 474 !crtc_state->hw.active && 475 !HAS_GMCH(display)); 476 } 477 478 static bool intel_sanitize_crtc(struct intel_crtc *crtc, 479 struct drm_modeset_acquire_ctx *ctx) 480 { 481 struct drm_i915_private *i915 = to_i915(crtc->base.dev); 482 struct intel_crtc_state *crtc_state = to_intel_crtc_state(crtc->base.state); 483 bool needs_link_reset; 484 485 if (crtc_state->hw.active) { 486 struct intel_plane *plane; 487 488 /* Disable everything but the primary plane */ 489 for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) { 490 const struct intel_plane_state *plane_state = 491 to_intel_plane_state(plane->base.state); 492 493 if (plane_state->uapi.visible && 494 plane->base.type != DRM_PLANE_TYPE_PRIMARY) 495 intel_plane_disable_noatomic(crtc, plane); 496 } 497 498 /* Disable any background color/etc. set by the BIOS */ 499 intel_color_commit_noarm(NULL, crtc_state); 500 intel_color_commit_arm(NULL, crtc_state); 501 } 502 503 if (!crtc_state->hw.active || 504 intel_crtc_is_joiner_secondary(crtc_state)) 505 return false; 506 507 needs_link_reset = intel_crtc_needs_link_reset(crtc); 508 509 /* 510 * Adjust the state of the output pipe according to whether we have 511 * active connectors/encoders. 512 */ 513 if (!needs_link_reset && intel_crtc_has_encoders(crtc)) 514 return false; 515 516 intel_crtc_disable_noatomic(crtc, ctx); 517 518 /* 519 * The HPD state on other active/disconnected TC ports may be stuck in 520 * the connected state until this port is disabled and a ~10ms delay has 521 * passed, wait here for that so that sanitizing other CRTCs will see the 522 * up-to-date HPD state. 523 */ 524 if (needs_link_reset) 525 msleep(20); 526 527 return true; 528 } 529 530 static void intel_sanitize_all_crtcs(struct drm_i915_private *i915, 531 struct drm_modeset_acquire_ctx *ctx) 532 { 533 struct intel_crtc *crtc; 534 u32 crtcs_forced_off = 0; 535 536 /* 537 * An active and disconnected TypeC port prevents the HPD live state 538 * to get updated on other active/disconnected TypeC ports, so after 539 * a port gets disabled the CRTCs using other TypeC ports must be 540 * rechecked wrt. their link status. 541 */ 542 for (;;) { 543 u32 old_mask = crtcs_forced_off; 544 545 for_each_intel_crtc(&i915->drm, crtc) { 546 u32 crtc_mask = drm_crtc_mask(&crtc->base); 547 548 if (crtcs_forced_off & crtc_mask) 549 continue; 550 551 if (intel_sanitize_crtc(crtc, ctx)) 552 crtcs_forced_off |= crtc_mask; 553 } 554 if (crtcs_forced_off == old_mask) 555 break; 556 } 557 558 for_each_intel_crtc(&i915->drm, crtc) { 559 struct intel_crtc_state *crtc_state = 560 to_intel_crtc_state(crtc->base.state); 561 562 intel_crtc_state_dump(crtc_state, NULL, "setup_hw_state"); 563 } 564 } 565 566 static bool has_bogus_dpll_config(const struct intel_crtc_state *crtc_state) 567 { 568 struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev); 569 570 /* 571 * Some SNB BIOSen (eg. ASUS K53SV) are known to misprogram 572 * the hardware when a high res displays plugged in. DPLL P 573 * divider is zero, and the pipe timings are bonkers. We'll 574 * try to disable everything in that case. 575 * 576 * FIXME would be nice to be able to sanitize this state 577 * without several WARNs, but for now let's take the easy 578 * road. 579 */ 580 return IS_SANDYBRIDGE(i915) && 581 crtc_state->hw.active && 582 crtc_state->shared_dpll && 583 crtc_state->port_clock == 0; 584 } 585 586 static void intel_sanitize_encoder(struct intel_encoder *encoder) 587 { 588 struct intel_display *display = to_intel_display(encoder); 589 struct drm_i915_private *i915 = to_i915(encoder->base.dev); 590 struct intel_connector *connector; 591 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 592 struct intel_crtc_state *crtc_state = crtc ? 593 to_intel_crtc_state(crtc->base.state) : NULL; 594 struct intel_pmdemand_state *pmdemand_state = 595 to_intel_pmdemand_state(i915->display.pmdemand.obj.state); 596 597 /* 598 * We need to check both for a crtc link (meaning that the encoder is 599 * active and trying to read from a pipe) and the pipe itself being 600 * active. 601 */ 602 bool has_active_crtc = crtc_state && 603 crtc_state->hw.active; 604 605 if (crtc_state && has_bogus_dpll_config(crtc_state)) { 606 drm_dbg_kms(&i915->drm, 607 "BIOS has misprogrammed the hardware. Disabling pipe %c\n", 608 pipe_name(crtc->pipe)); 609 has_active_crtc = false; 610 } 611 612 connector = intel_encoder_find_connector(encoder); 613 if (connector && !has_active_crtc) { 614 drm_dbg_kms(&i915->drm, 615 "[ENCODER:%d:%s] has active connectors but no active pipe!\n", 616 encoder->base.base.id, 617 encoder->base.name); 618 619 /* Clear the corresponding bit in pmdemand active phys mask */ 620 intel_pmdemand_update_phys_mask(display, encoder, 621 pmdemand_state, false); 622 623 /* 624 * Connector is active, but has no active pipe. This is fallout 625 * from our resume register restoring. Disable the encoder 626 * manually again. 627 */ 628 if (crtc_state) { 629 struct drm_encoder *best_encoder; 630 631 drm_dbg_kms(&i915->drm, 632 "[ENCODER:%d:%s] manually disabled\n", 633 encoder->base.base.id, 634 encoder->base.name); 635 636 /* avoid oopsing in case the hooks consult best_encoder */ 637 best_encoder = connector->base.state->best_encoder; 638 connector->base.state->best_encoder = &encoder->base; 639 640 /* FIXME NULL atomic state passed! */ 641 if (encoder->disable) 642 encoder->disable(NULL, encoder, crtc_state, 643 connector->base.state); 644 if (encoder->post_disable) 645 encoder->post_disable(NULL, encoder, crtc_state, 646 connector->base.state); 647 648 connector->base.state->best_encoder = best_encoder; 649 } 650 encoder->base.crtc = NULL; 651 652 /* 653 * Inconsistent output/port/pipe state happens presumably due to 654 * a bug in one of the get_hw_state functions. Or someplace else 655 * in our code, like the register restore mess on resume. Clamp 656 * things to off as a safer default. 657 */ 658 connector->base.dpms = DRM_MODE_DPMS_OFF; 659 connector->base.encoder = NULL; 660 } 661 662 /* notify opregion of the sanitized encoder state */ 663 intel_opregion_notify_encoder(encoder, connector && has_active_crtc); 664 665 if (HAS_DDI(i915)) 666 intel_ddi_sanitize_encoder_pll_mapping(encoder); 667 } 668 669 /* FIXME read out full plane state for all planes */ 670 static void readout_plane_state(struct drm_i915_private *i915) 671 { 672 struct intel_display *display = &i915->display; 673 struct intel_plane *plane; 674 struct intel_crtc *crtc; 675 676 for_each_intel_plane(&i915->drm, plane) { 677 struct intel_plane_state *plane_state = 678 to_intel_plane_state(plane->base.state); 679 struct intel_crtc_state *crtc_state; 680 enum pipe pipe = PIPE_A; 681 bool visible; 682 683 visible = plane->get_hw_state(plane, &pipe); 684 685 crtc = intel_crtc_for_pipe(display, pipe); 686 crtc_state = to_intel_crtc_state(crtc->base.state); 687 688 intel_set_plane_visible(crtc_state, plane_state, visible); 689 690 drm_dbg_kms(&i915->drm, 691 "[PLANE:%d:%s] hw state readout: %s, pipe %c\n", 692 plane->base.base.id, plane->base.name, 693 str_enabled_disabled(visible), pipe_name(pipe)); 694 } 695 696 for_each_intel_crtc(&i915->drm, crtc) { 697 struct intel_crtc_state *crtc_state = 698 to_intel_crtc_state(crtc->base.state); 699 700 intel_plane_fixup_bitmasks(crtc_state); 701 } 702 } 703 704 static void intel_modeset_readout_hw_state(struct drm_i915_private *i915) 705 { 706 struct intel_display *display = &i915->display; 707 struct intel_cdclk_state *cdclk_state = 708 to_intel_cdclk_state(i915->display.cdclk.obj.state); 709 struct intel_dbuf_state *dbuf_state = 710 to_intel_dbuf_state(i915->display.dbuf.obj.state); 711 struct intel_pmdemand_state *pmdemand_state = 712 to_intel_pmdemand_state(i915->display.pmdemand.obj.state); 713 enum pipe pipe; 714 struct intel_crtc *crtc; 715 struct intel_encoder *encoder; 716 struct intel_connector *connector; 717 struct drm_connector_list_iter conn_iter; 718 u8 active_pipes = 0; 719 720 for_each_intel_crtc(&i915->drm, crtc) { 721 struct intel_crtc_state *crtc_state = 722 to_intel_crtc_state(crtc->base.state); 723 724 __drm_atomic_helper_crtc_destroy_state(&crtc_state->uapi); 725 intel_crtc_free_hw_state(crtc_state); 726 intel_crtc_state_reset(crtc_state, crtc); 727 728 intel_crtc_get_pipe_config(crtc_state); 729 730 crtc_state->hw.enable = crtc_state->hw.active; 731 732 crtc->base.enabled = crtc_state->hw.enable; 733 crtc->active = crtc_state->hw.active; 734 735 if (crtc_state->hw.active) 736 active_pipes |= BIT(crtc->pipe); 737 738 drm_dbg_kms(&i915->drm, 739 "[CRTC:%d:%s] hw state readout: %s\n", 740 crtc->base.base.id, crtc->base.name, 741 str_enabled_disabled(crtc_state->hw.active)); 742 } 743 744 cdclk_state->active_pipes = active_pipes; 745 dbuf_state->active_pipes = active_pipes; 746 747 readout_plane_state(i915); 748 749 for_each_intel_encoder(&i915->drm, encoder) { 750 struct intel_crtc_state *crtc_state = NULL; 751 752 pipe = 0; 753 754 if (encoder->get_hw_state(encoder, &pipe)) { 755 crtc = intel_crtc_for_pipe(display, pipe); 756 crtc_state = to_intel_crtc_state(crtc->base.state); 757 758 encoder->base.crtc = &crtc->base; 759 intel_encoder_get_config(encoder, crtc_state); 760 761 /* read out to secondary crtc as well for joiner */ 762 if (crtc_state->joiner_pipes) { 763 struct intel_crtc *secondary_crtc; 764 765 /* encoder should read be linked to joiner primary */ 766 WARN_ON(intel_crtc_is_joiner_secondary(crtc_state)); 767 768 for_each_intel_crtc_in_pipe_mask(&i915->drm, secondary_crtc, 769 intel_crtc_joiner_secondary_pipes(crtc_state)) { 770 struct intel_crtc_state *secondary_crtc_state; 771 772 secondary_crtc_state = to_intel_crtc_state(secondary_crtc->base.state); 773 intel_encoder_get_config(encoder, secondary_crtc_state); 774 } 775 } 776 777 intel_pmdemand_update_phys_mask(display, encoder, 778 pmdemand_state, 779 true); 780 } else { 781 intel_pmdemand_update_phys_mask(display, encoder, 782 pmdemand_state, 783 false); 784 785 encoder->base.crtc = NULL; 786 } 787 788 if (encoder->sync_state) 789 encoder->sync_state(encoder, crtc_state); 790 791 drm_dbg_kms(&i915->drm, 792 "[ENCODER:%d:%s] hw state readout: %s, pipe %c\n", 793 encoder->base.base.id, encoder->base.name, 794 str_enabled_disabled(encoder->base.crtc), 795 pipe_name(pipe)); 796 } 797 798 intel_dpll_readout_hw_state(display); 799 800 drm_connector_list_iter_begin(&i915->drm, &conn_iter); 801 for_each_intel_connector_iter(connector, &conn_iter) { 802 struct intel_crtc_state *crtc_state = NULL; 803 804 if (connector->get_hw_state(connector)) { 805 struct intel_crtc *crtc; 806 807 connector->base.dpms = DRM_MODE_DPMS_ON; 808 809 encoder = intel_attached_encoder(connector); 810 connector->base.encoder = &encoder->base; 811 812 crtc = to_intel_crtc(encoder->base.crtc); 813 crtc_state = crtc ? to_intel_crtc_state(crtc->base.state) : NULL; 814 815 if (crtc_state && crtc_state->hw.active) { 816 /* 817 * This has to be done during hardware readout 818 * because anything calling .crtc_disable may 819 * rely on the connector_mask being accurate. 820 */ 821 crtc_state->uapi.connector_mask |= 822 drm_connector_mask(&connector->base); 823 crtc_state->uapi.encoder_mask |= 824 drm_encoder_mask(&encoder->base); 825 } 826 } else { 827 connector->base.dpms = DRM_MODE_DPMS_OFF; 828 connector->base.encoder = NULL; 829 } 830 831 if (connector->sync_state) 832 connector->sync_state(connector, crtc_state); 833 834 drm_dbg_kms(&i915->drm, 835 "[CONNECTOR:%d:%s] hw state readout: %s\n", 836 connector->base.base.id, connector->base.name, 837 str_enabled_disabled(connector->base.encoder)); 838 } 839 drm_connector_list_iter_end(&conn_iter); 840 841 for_each_intel_crtc(&i915->drm, crtc) { 842 struct intel_bw_state *bw_state = 843 to_intel_bw_state(i915->display.bw.obj.state); 844 struct intel_crtc_state *crtc_state = 845 to_intel_crtc_state(crtc->base.state); 846 struct intel_plane *plane; 847 int min_cdclk = 0; 848 849 if (crtc_state->hw.active) { 850 /* 851 * The initial mode needs to be set in order to keep 852 * the atomic core happy. It wants a valid mode if the 853 * crtc's enabled, so we do the above call. 854 * 855 * But we don't set all the derived state fully, hence 856 * set a flag to indicate that a full recalculation is 857 * needed on the next commit. 858 */ 859 crtc_state->inherited = true; 860 861 intel_crtc_update_active_timings(crtc_state, 862 crtc_state->vrr.enable); 863 864 intel_crtc_copy_hw_to_uapi_state(crtc_state); 865 } 866 867 for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) { 868 const struct intel_plane_state *plane_state = 869 to_intel_plane_state(plane->base.state); 870 871 /* 872 * FIXME don't have the fb yet, so can't 873 * use intel_plane_data_rate() :( 874 */ 875 if (plane_state->uapi.visible) 876 crtc_state->data_rate[plane->id] = 877 4 * crtc_state->pixel_rate; 878 /* 879 * FIXME don't have the fb yet, so can't 880 * use plane->min_cdclk() :( 881 */ 882 if (plane_state->uapi.visible && plane->min_cdclk) { 883 if (crtc_state->double_wide || DISPLAY_VER(i915) >= 10) 884 crtc_state->min_cdclk[plane->id] = 885 DIV_ROUND_UP(crtc_state->pixel_rate, 2); 886 else 887 crtc_state->min_cdclk[plane->id] = 888 crtc_state->pixel_rate; 889 } 890 drm_dbg_kms(&i915->drm, 891 "[PLANE:%d:%s] min_cdclk %d kHz\n", 892 plane->base.base.id, plane->base.name, 893 crtc_state->min_cdclk[plane->id]); 894 } 895 896 if (crtc_state->hw.active) { 897 min_cdclk = intel_crtc_compute_min_cdclk(crtc_state); 898 if (drm_WARN_ON(&i915->drm, min_cdclk < 0)) 899 min_cdclk = 0; 900 } 901 902 cdclk_state->min_cdclk[crtc->pipe] = min_cdclk; 903 cdclk_state->min_voltage_level[crtc->pipe] = 904 crtc_state->min_voltage_level; 905 906 intel_pmdemand_update_port_clock(display, pmdemand_state, pipe, 907 crtc_state->port_clock); 908 909 intel_bw_crtc_update(bw_state, crtc_state); 910 } 911 912 intel_pmdemand_init_pmdemand_params(display, pmdemand_state); 913 } 914 915 static void 916 get_encoder_power_domains(struct drm_i915_private *i915) 917 { 918 struct intel_encoder *encoder; 919 920 for_each_intel_encoder(&i915->drm, encoder) { 921 struct intel_crtc_state *crtc_state; 922 923 if (!encoder->get_power_domains) 924 continue; 925 926 /* 927 * MST-primary and inactive encoders don't have a crtc state 928 * and neither of these require any power domain references. 929 */ 930 if (!encoder->base.crtc) 931 continue; 932 933 crtc_state = to_intel_crtc_state(encoder->base.crtc->state); 934 encoder->get_power_domains(encoder, crtc_state); 935 } 936 } 937 938 static void intel_early_display_was(struct drm_i915_private *i915) 939 { 940 /* 941 * Display WA #1185 WaDisableDARBFClkGating:glk,icl,ehl,tgl 942 * Also known as Wa_14010480278. 943 */ 944 if (IS_DISPLAY_VER(i915, 10, 12)) 945 intel_de_rmw(i915, GEN9_CLKGATE_DIS_0, 0, DARBF_GATING_DIS); 946 947 /* 948 * WaRsPkgCStateDisplayPMReq:hsw 949 * System hang if this isn't done before disabling all planes! 950 */ 951 if (IS_HASWELL(i915)) 952 intel_de_rmw(i915, CHICKEN_PAR1_1, 0, FORCE_ARB_IDLE_PLANES); 953 954 if (IS_KABYLAKE(i915) || IS_COFFEELAKE(i915) || IS_COMETLAKE(i915)) { 955 /* Display WA #1142:kbl,cfl,cml */ 956 intel_de_rmw(i915, CHICKEN_PAR1_1, 957 KBL_ARB_FILL_SPARE_22, KBL_ARB_FILL_SPARE_22); 958 intel_de_rmw(i915, CHICKEN_MISC_2, 959 KBL_ARB_FILL_SPARE_13 | KBL_ARB_FILL_SPARE_14, 960 KBL_ARB_FILL_SPARE_14); 961 } 962 } 963 964 void intel_modeset_setup_hw_state(struct drm_i915_private *i915, 965 struct drm_modeset_acquire_ctx *ctx) 966 { 967 struct intel_display *display = &i915->display; 968 struct intel_encoder *encoder; 969 struct intel_crtc *crtc; 970 intel_wakeref_t wakeref; 971 972 wakeref = intel_display_power_get(display, POWER_DOMAIN_INIT); 973 974 intel_early_display_was(i915); 975 intel_modeset_readout_hw_state(i915); 976 977 /* HW state is read out, now we need to sanitize this mess. */ 978 get_encoder_power_domains(i915); 979 980 intel_pch_sanitize(i915); 981 982 intel_cmtg_sanitize(display); 983 984 /* 985 * intel_sanitize_plane_mapping() may need to do vblank 986 * waits, so we need vblank interrupts restored beforehand. 987 */ 988 for_each_intel_crtc(&i915->drm, crtc) { 989 struct intel_crtc_state *crtc_state = 990 to_intel_crtc_state(crtc->base.state); 991 992 intel_sanitize_fifo_underrun_reporting(crtc_state); 993 994 drm_crtc_vblank_reset(&crtc->base); 995 996 if (crtc_state->hw.active) { 997 intel_dmc_enable_pipe(display, crtc->pipe); 998 intel_crtc_vblank_on(crtc_state); 999 } 1000 } 1001 1002 intel_fbc_sanitize(&i915->display); 1003 1004 intel_sanitize_plane_mapping(i915); 1005 1006 for_each_intel_encoder(&i915->drm, encoder) 1007 intel_sanitize_encoder(encoder); 1008 1009 /* 1010 * Sanitizing CRTCs needs their connector atomic state to be 1011 * up-to-date, so ensure that already here. 1012 */ 1013 intel_modeset_update_connector_atomic_state(i915); 1014 1015 intel_sanitize_all_crtcs(i915, ctx); 1016 1017 intel_dpll_sanitize_state(display); 1018 1019 intel_wm_get_hw_state(i915); 1020 1021 for_each_intel_crtc(&i915->drm, crtc) { 1022 struct intel_crtc_state *crtc_state = 1023 to_intel_crtc_state(crtc->base.state); 1024 struct intel_power_domain_mask put_domains; 1025 1026 intel_modeset_get_crtc_power_domains(crtc_state, &put_domains); 1027 if (drm_WARN_ON(&i915->drm, !bitmap_empty(put_domains.bits, POWER_DOMAIN_NUM))) 1028 intel_modeset_put_crtc_power_domains(crtc, &put_domains); 1029 } 1030 1031 intel_display_power_put(display, POWER_DOMAIN_INIT, wakeref); 1032 1033 intel_power_domains_sanitize_state(display); 1034 } 1035