1 // SPDX-License-Identifier: MIT
3 * Copyright © 2022 Intel Corporation
5 * Read out the current hardware modeset state, and sanitize it to the current
9 #include <drm/drm_atomic_uapi.h>
10 #include <drm/drm_atomic_state_helper.h>
15 #include "intel_atomic.h"
17 #include "intel_color.h"
18 #include "intel_crtc.h"
19 #include "intel_crtc_state_dump.h"
20 #include "intel_ddi.h"
22 #include "intel_display.h"
23 #include "intel_display_power.h"
24 #include "intel_display_types.h"
25 #include "intel_dmc.h"
26 #include "intel_fifo_underrun.h"
27 #include "intel_modeset_setup.h"
28 #include "intel_pch_display.h"
30 #include "intel_vblank.h"
32 #include "skl_watermark.h"
34 static void intel_crtc_disable_noatomic_begin(struct intel_crtc *crtc,
35 struct drm_modeset_acquire_ctx *ctx)
37 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
38 struct intel_crtc_state *crtc_state =
39 to_intel_crtc_state(crtc->base.state);
40 struct intel_plane *plane;
41 struct drm_atomic_state *state;
42 struct intel_crtc *temp_crtc;
43 enum pipe pipe = crtc->pipe;
45 if (!crtc_state->hw.active)
48 for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) {
49 const struct intel_plane_state *plane_state =
50 to_intel_plane_state(plane->base.state);
52 if (plane_state->uapi.visible)
53 intel_plane_disable_noatomic(crtc, plane);
56 state = drm_atomic_state_alloc(&i915->drm);
58 drm_dbg_kms(&i915->drm,
59 "failed to disable [CRTC:%d:%s], out of memory",
60 crtc->base.base.id, crtc->base.name);
64 state->acquire_ctx = ctx;
65 to_intel_atomic_state(state)->internal = true;
67 /* Everything's already locked, -EDEADLK can't happen. */
68 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc,
70 intel_crtc_bigjoiner_slave_pipes(crtc_state)) {
71 struct intel_crtc_state *temp_crtc_state =
72 intel_atomic_get_crtc_state(state, temp_crtc);
75 ret = drm_atomic_add_affected_connectors(state, &temp_crtc->base);
77 drm_WARN_ON(&i915->drm, IS_ERR(temp_crtc_state) || ret);
80 i915->display.funcs.display->crtc_disable(to_intel_atomic_state(state), crtc);
82 drm_atomic_state_put(state);
84 drm_dbg_kms(&i915->drm,
85 "[CRTC:%d:%s] hw state adjusted, was enabled, now disabled\n",
86 crtc->base.base.id, crtc->base.name);
89 crtc->base.enabled = false;
91 if (crtc_state->shared_dpll)
92 intel_unreference_shared_dpll_crtc(crtc,
93 crtc_state->shared_dpll,
94 &crtc_state->shared_dpll->state);
97 static void set_encoder_for_connector(struct intel_connector *connector,
98 struct intel_encoder *encoder)
100 struct drm_connector_state *conn_state = connector->base.state;
102 if (conn_state->crtc)
103 drm_connector_put(&connector->base);
106 conn_state->best_encoder = &encoder->base;
107 conn_state->crtc = encoder->base.crtc;
108 drm_connector_get(&connector->base);
110 conn_state->best_encoder = NULL;
111 conn_state->crtc = NULL;
115 static void reset_encoder_connector_state(struct intel_encoder *encoder)
117 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
118 struct intel_connector *connector;
119 struct drm_connector_list_iter conn_iter;
121 drm_connector_list_iter_begin(&i915->drm, &conn_iter);
122 for_each_intel_connector_iter(connector, &conn_iter) {
123 if (connector->base.encoder != &encoder->base)
126 set_encoder_for_connector(connector, NULL);
128 connector->base.dpms = DRM_MODE_DPMS_OFF;
129 connector->base.encoder = NULL;
131 drm_connector_list_iter_end(&conn_iter);
134 static void reset_crtc_encoder_state(struct intel_crtc *crtc)
136 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
137 struct intel_encoder *encoder;
139 for_each_encoder_on_crtc(&i915->drm, &crtc->base, encoder) {
140 reset_encoder_connector_state(encoder);
141 encoder->base.crtc = NULL;
145 static void intel_crtc_disable_noatomic_complete(struct intel_crtc *crtc)
147 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
148 struct intel_bw_state *bw_state =
149 to_intel_bw_state(i915->display.bw.obj.state);
150 struct intel_cdclk_state *cdclk_state =
151 to_intel_cdclk_state(i915->display.cdclk.obj.state);
152 struct intel_dbuf_state *dbuf_state =
153 to_intel_dbuf_state(i915->display.dbuf.obj.state);
154 struct intel_crtc_state *crtc_state =
155 to_intel_crtc_state(crtc->base.state);
156 enum pipe pipe = crtc->pipe;
158 __drm_atomic_helper_crtc_destroy_state(&crtc_state->uapi);
159 intel_crtc_free_hw_state(crtc_state);
160 intel_crtc_state_reset(crtc_state, crtc);
162 reset_crtc_encoder_state(crtc);
164 intel_fbc_disable(crtc);
165 intel_update_watermarks(i915);
167 intel_display_power_put_all_in_set(i915, &crtc->enabled_power_domains);
169 cdclk_state->min_cdclk[pipe] = 0;
170 cdclk_state->min_voltage_level[pipe] = 0;
171 cdclk_state->active_pipes &= ~BIT(pipe);
173 dbuf_state->active_pipes &= ~BIT(pipe);
175 bw_state->data_rate[pipe] = 0;
176 bw_state->num_active_planes[pipe] = 0;
180 * Return all the pipes using a transcoder in @transcoder_mask.
181 * For bigjoiner configs return only the bigjoiner master.
183 static u8 get_transcoder_pipes(struct drm_i915_private *i915,
186 struct intel_crtc *temp_crtc;
189 for_each_intel_crtc(&i915->drm, temp_crtc) {
190 struct intel_crtc_state *temp_crtc_state =
191 to_intel_crtc_state(temp_crtc->base.state);
193 if (temp_crtc_state->cpu_transcoder == INVALID_TRANSCODER)
196 if (intel_crtc_is_bigjoiner_slave(temp_crtc_state))
199 if (transcoder_mask & BIT(temp_crtc_state->cpu_transcoder))
200 pipes |= BIT(temp_crtc->pipe);
207 * Return the port sync master and slave pipes linked to @crtc.
208 * For bigjoiner configs return only the bigjoiner master pipes.
210 static void get_portsync_pipes(struct intel_crtc *crtc,
211 u8 *master_pipe_mask, u8 *slave_pipes_mask)
213 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
214 struct intel_crtc_state *crtc_state =
215 to_intel_crtc_state(crtc->base.state);
216 struct intel_crtc *master_crtc;
217 struct intel_crtc_state *master_crtc_state;
218 enum transcoder master_transcoder;
220 if (!is_trans_port_sync_mode(crtc_state)) {
221 *master_pipe_mask = BIT(crtc->pipe);
222 *slave_pipes_mask = 0;
227 if (is_trans_port_sync_master(crtc_state))
228 master_transcoder = crtc_state->cpu_transcoder;
230 master_transcoder = crtc_state->master_transcoder;
232 *master_pipe_mask = get_transcoder_pipes(i915, BIT(master_transcoder));
233 drm_WARN_ON(&i915->drm, !is_power_of_2(*master_pipe_mask));
235 master_crtc = intel_crtc_for_pipe(i915, ffs(*master_pipe_mask) - 1);
236 master_crtc_state = to_intel_crtc_state(master_crtc->base.state);
237 *slave_pipes_mask = get_transcoder_pipes(i915, master_crtc_state->sync_mode_slaves_mask);
240 static u8 get_bigjoiner_slave_pipes(struct drm_i915_private *i915, u8 master_pipes_mask)
242 struct intel_crtc *master_crtc;
245 for_each_intel_crtc_in_pipe_mask(&i915->drm, master_crtc, master_pipes_mask) {
246 struct intel_crtc_state *master_crtc_state =
247 to_intel_crtc_state(master_crtc->base.state);
249 pipes |= intel_crtc_bigjoiner_slave_pipes(master_crtc_state);
255 static void intel_crtc_disable_noatomic(struct intel_crtc *crtc,
256 struct drm_modeset_acquire_ctx *ctx)
258 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
259 u8 portsync_master_mask;
260 u8 portsync_slaves_mask;
261 u8 bigjoiner_slaves_mask;
262 struct intel_crtc *temp_crtc;
264 /* TODO: Add support for MST */
265 get_portsync_pipes(crtc, &portsync_master_mask, &portsync_slaves_mask);
266 bigjoiner_slaves_mask = get_bigjoiner_slave_pipes(i915,
267 portsync_master_mask |
268 portsync_slaves_mask);
270 drm_WARN_ON(&i915->drm,
271 portsync_master_mask & portsync_slaves_mask ||
272 portsync_master_mask & bigjoiner_slaves_mask ||
273 portsync_slaves_mask & bigjoiner_slaves_mask);
275 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, bigjoiner_slaves_mask)
276 intel_crtc_disable_noatomic_begin(temp_crtc, ctx);
278 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, portsync_slaves_mask)
279 intel_crtc_disable_noatomic_begin(temp_crtc, ctx);
281 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, portsync_master_mask)
282 intel_crtc_disable_noatomic_begin(temp_crtc, ctx);
284 for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc,
285 bigjoiner_slaves_mask |
286 portsync_slaves_mask |
287 portsync_master_mask)
288 intel_crtc_disable_noatomic_complete(temp_crtc);
291 static void intel_modeset_update_connector_atomic_state(struct drm_i915_private *i915)
293 struct intel_connector *connector;
294 struct drm_connector_list_iter conn_iter;
296 drm_connector_list_iter_begin(&i915->drm, &conn_iter);
297 for_each_intel_connector_iter(connector, &conn_iter) {
298 struct drm_connector_state *conn_state = connector->base.state;
299 struct intel_encoder *encoder =
300 to_intel_encoder(connector->base.encoder);
302 set_encoder_for_connector(connector, encoder);
305 struct intel_crtc *crtc =
306 to_intel_crtc(encoder->base.crtc);
307 const struct intel_crtc_state *crtc_state =
308 to_intel_crtc_state(crtc->base.state);
310 conn_state->max_bpc = (crtc_state->pipe_bpp ?: 24) / 3;
313 drm_connector_list_iter_end(&conn_iter);
316 static void intel_crtc_copy_hw_to_uapi_state(struct intel_crtc_state *crtc_state)
318 if (intel_crtc_is_bigjoiner_slave(crtc_state))
321 crtc_state->uapi.enable = crtc_state->hw.enable;
322 crtc_state->uapi.active = crtc_state->hw.active;
323 drm_WARN_ON(crtc_state->uapi.crtc->dev,
324 drm_atomic_set_mode_for_crtc(&crtc_state->uapi, &crtc_state->hw.mode) < 0);
326 crtc_state->uapi.adjusted_mode = crtc_state->hw.adjusted_mode;
327 crtc_state->uapi.scaling_filter = crtc_state->hw.scaling_filter;
329 /* assume 1:1 mapping */
330 drm_property_replace_blob(&crtc_state->hw.degamma_lut,
331 crtc_state->pre_csc_lut);
332 drm_property_replace_blob(&crtc_state->hw.gamma_lut,
333 crtc_state->post_csc_lut);
335 drm_property_replace_blob(&crtc_state->uapi.degamma_lut,
336 crtc_state->hw.degamma_lut);
337 drm_property_replace_blob(&crtc_state->uapi.gamma_lut,
338 crtc_state->hw.gamma_lut);
339 drm_property_replace_blob(&crtc_state->uapi.ctm,
344 intel_sanitize_plane_mapping(struct drm_i915_private *i915)
346 struct intel_crtc *crtc;
348 if (DISPLAY_VER(i915) >= 4)
351 for_each_intel_crtc(&i915->drm, crtc) {
352 struct intel_plane *plane =
353 to_intel_plane(crtc->base.primary);
354 struct intel_crtc *plane_crtc;
357 if (!plane->get_hw_state(plane, &pipe))
360 if (pipe == crtc->pipe)
363 drm_dbg_kms(&i915->drm,
364 "[PLANE:%d:%s] attached to the wrong pipe, disabling plane\n",
365 plane->base.base.id, plane->base.name);
367 plane_crtc = intel_crtc_for_pipe(i915, pipe);
368 intel_plane_disable_noatomic(plane_crtc, plane);
372 static bool intel_crtc_has_encoders(struct intel_crtc *crtc)
374 struct drm_device *dev = crtc->base.dev;
375 struct intel_encoder *encoder;
377 for_each_encoder_on_crtc(dev, &crtc->base, encoder)
383 static bool intel_crtc_needs_link_reset(struct intel_crtc *crtc)
385 struct drm_device *dev = crtc->base.dev;
386 struct intel_encoder *encoder;
388 for_each_encoder_on_crtc(dev, &crtc->base, encoder) {
389 struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
391 if (dig_port && intel_tc_port_link_needs_reset(dig_port))
398 static struct intel_connector *intel_encoder_find_connector(struct intel_encoder *encoder)
400 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
401 struct drm_connector_list_iter conn_iter;
402 struct intel_connector *connector;
403 struct intel_connector *found_connector = NULL;
405 drm_connector_list_iter_begin(&i915->drm, &conn_iter);
406 for_each_intel_connector_iter(connector, &conn_iter) {
407 if (&encoder->base == connector->base.encoder) {
408 found_connector = connector;
412 drm_connector_list_iter_end(&conn_iter);
414 return found_connector;
417 static void intel_sanitize_fifo_underrun_reporting(const struct intel_crtc_state *crtc_state)
419 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
420 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
423 * We start out with underrun reporting disabled on active
424 * pipes to avoid races.
426 * Also on gmch platforms we dont have any hardware bits to
427 * disable the underrun reporting. Which means we need to start
428 * out with underrun reporting disabled also on inactive pipes,
429 * since otherwise we'll complain about the garbage we read when
430 * e.g. coming up after runtime pm.
432 * No protection against concurrent access is required - at
433 * worst a fifo underrun happens which also sets this to false.
435 intel_init_fifo_underrun_reporting(i915, crtc,
436 !crtc_state->hw.active &&
440 static bool intel_sanitize_crtc(struct intel_crtc *crtc,
441 struct drm_modeset_acquire_ctx *ctx)
443 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
444 struct intel_crtc_state *crtc_state = to_intel_crtc_state(crtc->base.state);
445 bool needs_link_reset;
447 if (crtc_state->hw.active) {
448 struct intel_plane *plane;
450 /* Disable everything but the primary plane */
451 for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) {
452 const struct intel_plane_state *plane_state =
453 to_intel_plane_state(plane->base.state);
455 if (plane_state->uapi.visible &&
456 plane->base.type != DRM_PLANE_TYPE_PRIMARY)
457 intel_plane_disable_noatomic(crtc, plane);
460 /* Disable any background color/etc. set by the BIOS */
461 intel_color_commit_noarm(crtc_state);
462 intel_color_commit_arm(crtc_state);
465 if (!crtc_state->hw.active ||
466 intel_crtc_is_bigjoiner_slave(crtc_state))
469 needs_link_reset = intel_crtc_needs_link_reset(crtc);
472 * Adjust the state of the output pipe according to whether we have
473 * active connectors/encoders.
475 if (!needs_link_reset && intel_crtc_has_encoders(crtc))
478 intel_crtc_disable_noatomic(crtc, ctx);
481 * The HPD state on other active/disconnected TC ports may be stuck in
482 * the connected state until this port is disabled and a ~10ms delay has
483 * passed, wait here for that so that sanitizing other CRTCs will see the
484 * up-to-date HPD state.
486 if (needs_link_reset)
492 static void intel_sanitize_all_crtcs(struct drm_i915_private *i915,
493 struct drm_modeset_acquire_ctx *ctx)
495 struct intel_crtc *crtc;
496 u32 crtcs_forced_off = 0;
499 * An active and disconnected TypeC port prevents the HPD live state
500 * to get updated on other active/disconnected TypeC ports, so after
501 * a port gets disabled the CRTCs using other TypeC ports must be
502 * rechecked wrt. their link status.
505 u32 old_mask = crtcs_forced_off;
507 for_each_intel_crtc(&i915->drm, crtc) {
508 u32 crtc_mask = drm_crtc_mask(&crtc->base);
510 if (crtcs_forced_off & crtc_mask)
513 if (intel_sanitize_crtc(crtc, ctx))
514 crtcs_forced_off |= crtc_mask;
516 if (crtcs_forced_off == old_mask)
520 for_each_intel_crtc(&i915->drm, crtc) {
521 struct intel_crtc_state *crtc_state =
522 to_intel_crtc_state(crtc->base.state);
524 intel_crtc_state_dump(crtc_state, NULL, "setup_hw_state");
528 static bool has_bogus_dpll_config(const struct intel_crtc_state *crtc_state)
530 struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
533 * Some SNB BIOSen (eg. ASUS K53SV) are known to misprogram
534 * the hardware when a high res displays plugged in. DPLL P
535 * divider is zero, and the pipe timings are bonkers. We'll
536 * try to disable everything in that case.
538 * FIXME would be nice to be able to sanitize this state
539 * without several WARNs, but for now let's take the easy
542 return IS_SANDYBRIDGE(i915) &&
543 crtc_state->hw.active &&
544 crtc_state->shared_dpll &&
545 crtc_state->port_clock == 0;
548 static void intel_sanitize_encoder(struct intel_encoder *encoder)
550 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
551 struct intel_connector *connector;
552 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
553 struct intel_crtc_state *crtc_state = crtc ?
554 to_intel_crtc_state(crtc->base.state) : NULL;
557 * We need to check both for a crtc link (meaning that the encoder is
558 * active and trying to read from a pipe) and the pipe itself being
561 bool has_active_crtc = crtc_state &&
562 crtc_state->hw.active;
564 if (crtc_state && has_bogus_dpll_config(crtc_state)) {
565 drm_dbg_kms(&i915->drm,
566 "BIOS has misprogrammed the hardware. Disabling pipe %c\n",
567 pipe_name(crtc->pipe));
568 has_active_crtc = false;
571 connector = intel_encoder_find_connector(encoder);
572 if (connector && !has_active_crtc) {
573 drm_dbg_kms(&i915->drm,
574 "[ENCODER:%d:%s] has active connectors but no active pipe!\n",
575 encoder->base.base.id,
579 * Connector is active, but has no active pipe. This is fallout
580 * from our resume register restoring. Disable the encoder
584 struct drm_encoder *best_encoder;
586 drm_dbg_kms(&i915->drm,
587 "[ENCODER:%d:%s] manually disabled\n",
588 encoder->base.base.id,
591 /* avoid oopsing in case the hooks consult best_encoder */
592 best_encoder = connector->base.state->best_encoder;
593 connector->base.state->best_encoder = &encoder->base;
595 /* FIXME NULL atomic state passed! */
596 if (encoder->disable)
597 encoder->disable(NULL, encoder, crtc_state,
598 connector->base.state);
599 if (encoder->post_disable)
600 encoder->post_disable(NULL, encoder, crtc_state,
601 connector->base.state);
603 connector->base.state->best_encoder = best_encoder;
605 encoder->base.crtc = NULL;
608 * Inconsistent output/port/pipe state happens presumably due to
609 * a bug in one of the get_hw_state functions. Or someplace else
610 * in our code, like the register restore mess on resume. Clamp
611 * things to off as a safer default.
613 connector->base.dpms = DRM_MODE_DPMS_OFF;
614 connector->base.encoder = NULL;
617 /* notify opregion of the sanitized encoder state */
618 intel_opregion_notify_encoder(encoder, connector && has_active_crtc);
621 intel_ddi_sanitize_encoder_pll_mapping(encoder);
624 /* FIXME read out full plane state for all planes */
625 static void readout_plane_state(struct drm_i915_private *i915)
627 struct intel_plane *plane;
628 struct intel_crtc *crtc;
630 for_each_intel_plane(&i915->drm, plane) {
631 struct intel_plane_state *plane_state =
632 to_intel_plane_state(plane->base.state);
633 struct intel_crtc_state *crtc_state;
634 enum pipe pipe = PIPE_A;
637 visible = plane->get_hw_state(plane, &pipe);
639 crtc = intel_crtc_for_pipe(i915, pipe);
640 crtc_state = to_intel_crtc_state(crtc->base.state);
642 intel_set_plane_visible(crtc_state, plane_state, visible);
644 drm_dbg_kms(&i915->drm,
645 "[PLANE:%d:%s] hw state readout: %s, pipe %c\n",
646 plane->base.base.id, plane->base.name,
647 str_enabled_disabled(visible), pipe_name(pipe));
650 for_each_intel_crtc(&i915->drm, crtc) {
651 struct intel_crtc_state *crtc_state =
652 to_intel_crtc_state(crtc->base.state);
654 intel_plane_fixup_bitmasks(crtc_state);
658 static void intel_modeset_readout_hw_state(struct drm_i915_private *i915)
660 struct intel_cdclk_state *cdclk_state =
661 to_intel_cdclk_state(i915->display.cdclk.obj.state);
662 struct intel_dbuf_state *dbuf_state =
663 to_intel_dbuf_state(i915->display.dbuf.obj.state);
665 struct intel_crtc *crtc;
666 struct intel_encoder *encoder;
667 struct intel_connector *connector;
668 struct drm_connector_list_iter conn_iter;
671 for_each_intel_crtc(&i915->drm, crtc) {
672 struct intel_crtc_state *crtc_state =
673 to_intel_crtc_state(crtc->base.state);
675 __drm_atomic_helper_crtc_destroy_state(&crtc_state->uapi);
676 intel_crtc_free_hw_state(crtc_state);
677 intel_crtc_state_reset(crtc_state, crtc);
679 intel_crtc_get_pipe_config(crtc_state);
681 crtc_state->hw.enable = crtc_state->hw.active;
683 crtc->base.enabled = crtc_state->hw.enable;
684 crtc->active = crtc_state->hw.active;
686 if (crtc_state->hw.active)
687 active_pipes |= BIT(crtc->pipe);
689 drm_dbg_kms(&i915->drm,
690 "[CRTC:%d:%s] hw state readout: %s\n",
691 crtc->base.base.id, crtc->base.name,
692 str_enabled_disabled(crtc_state->hw.active));
695 cdclk_state->active_pipes = active_pipes;
696 dbuf_state->active_pipes = active_pipes;
698 readout_plane_state(i915);
700 for_each_intel_encoder(&i915->drm, encoder) {
701 struct intel_crtc_state *crtc_state = NULL;
705 if (encoder->get_hw_state(encoder, &pipe)) {
706 crtc = intel_crtc_for_pipe(i915, pipe);
707 crtc_state = to_intel_crtc_state(crtc->base.state);
709 encoder->base.crtc = &crtc->base;
710 intel_encoder_get_config(encoder, crtc_state);
712 /* read out to slave crtc as well for bigjoiner */
713 if (crtc_state->bigjoiner_pipes) {
714 struct intel_crtc *slave_crtc;
716 /* encoder should read be linked to bigjoiner master */
717 WARN_ON(intel_crtc_is_bigjoiner_slave(crtc_state));
719 for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc,
720 intel_crtc_bigjoiner_slave_pipes(crtc_state)) {
721 struct intel_crtc_state *slave_crtc_state;
723 slave_crtc_state = to_intel_crtc_state(slave_crtc->base.state);
724 intel_encoder_get_config(encoder, slave_crtc_state);
728 encoder->base.crtc = NULL;
731 if (encoder->sync_state)
732 encoder->sync_state(encoder, crtc_state);
734 drm_dbg_kms(&i915->drm,
735 "[ENCODER:%d:%s] hw state readout: %s, pipe %c\n",
736 encoder->base.base.id, encoder->base.name,
737 str_enabled_disabled(encoder->base.crtc),
741 intel_dpll_readout_hw_state(i915);
743 drm_connector_list_iter_begin(&i915->drm, &conn_iter);
744 for_each_intel_connector_iter(connector, &conn_iter) {
745 if (connector->get_hw_state(connector)) {
746 struct intel_crtc_state *crtc_state;
747 struct intel_crtc *crtc;
749 connector->base.dpms = DRM_MODE_DPMS_ON;
751 encoder = intel_attached_encoder(connector);
752 connector->base.encoder = &encoder->base;
754 crtc = to_intel_crtc(encoder->base.crtc);
755 crtc_state = crtc ? to_intel_crtc_state(crtc->base.state) : NULL;
757 if (crtc_state && crtc_state->hw.active) {
759 * This has to be done during hardware readout
760 * because anything calling .crtc_disable may
761 * rely on the connector_mask being accurate.
763 crtc_state->uapi.connector_mask |=
764 drm_connector_mask(&connector->base);
765 crtc_state->uapi.encoder_mask |=
766 drm_encoder_mask(&encoder->base);
769 connector->base.dpms = DRM_MODE_DPMS_OFF;
770 connector->base.encoder = NULL;
772 drm_dbg_kms(&i915->drm,
773 "[CONNECTOR:%d:%s] hw state readout: %s\n",
774 connector->base.base.id, connector->base.name,
775 str_enabled_disabled(connector->base.encoder));
777 drm_connector_list_iter_end(&conn_iter);
779 for_each_intel_crtc(&i915->drm, crtc) {
780 struct intel_bw_state *bw_state =
781 to_intel_bw_state(i915->display.bw.obj.state);
782 struct intel_crtc_state *crtc_state =
783 to_intel_crtc_state(crtc->base.state);
784 struct intel_plane *plane;
787 if (crtc_state->hw.active) {
789 * The initial mode needs to be set in order to keep
790 * the atomic core happy. It wants a valid mode if the
791 * crtc's enabled, so we do the above call.
793 * But we don't set all the derived state fully, hence
794 * set a flag to indicate that a full recalculation is
795 * needed on the next commit.
797 crtc_state->inherited = true;
799 intel_crtc_update_active_timings(crtc_state,
800 crtc_state->vrr.enable);
802 intel_crtc_copy_hw_to_uapi_state(crtc_state);
805 for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) {
806 const struct intel_plane_state *plane_state =
807 to_intel_plane_state(plane->base.state);
810 * FIXME don't have the fb yet, so can't
811 * use intel_plane_data_rate() :(
813 if (plane_state->uapi.visible)
814 crtc_state->data_rate[plane->id] =
815 4 * crtc_state->pixel_rate;
817 * FIXME don't have the fb yet, so can't
818 * use plane->min_cdclk() :(
820 if (plane_state->uapi.visible && plane->min_cdclk) {
821 if (crtc_state->double_wide || DISPLAY_VER(i915) >= 10)
822 crtc_state->min_cdclk[plane->id] =
823 DIV_ROUND_UP(crtc_state->pixel_rate, 2);
825 crtc_state->min_cdclk[plane->id] =
826 crtc_state->pixel_rate;
828 drm_dbg_kms(&i915->drm,
829 "[PLANE:%d:%s] min_cdclk %d kHz\n",
830 plane->base.base.id, plane->base.name,
831 crtc_state->min_cdclk[plane->id]);
834 if (crtc_state->hw.active) {
835 min_cdclk = intel_crtc_compute_min_cdclk(crtc_state);
836 if (drm_WARN_ON(&i915->drm, min_cdclk < 0))
840 cdclk_state->min_cdclk[crtc->pipe] = min_cdclk;
841 cdclk_state->min_voltage_level[crtc->pipe] =
842 crtc_state->min_voltage_level;
844 intel_bw_crtc_update(bw_state, crtc_state);
849 get_encoder_power_domains(struct drm_i915_private *i915)
851 struct intel_encoder *encoder;
853 for_each_intel_encoder(&i915->drm, encoder) {
854 struct intel_crtc_state *crtc_state;
856 if (!encoder->get_power_domains)
860 * MST-primary and inactive encoders don't have a crtc state
861 * and neither of these require any power domain references.
863 if (!encoder->base.crtc)
866 crtc_state = to_intel_crtc_state(encoder->base.crtc->state);
867 encoder->get_power_domains(encoder, crtc_state);
871 static void intel_early_display_was(struct drm_i915_private *i915)
874 * Display WA #1185 WaDisableDARBFClkGating:glk,icl,ehl,tgl
875 * Also known as Wa_14010480278.
877 if (IS_DISPLAY_VER(i915, 10, 12))
878 intel_de_rmw(i915, GEN9_CLKGATE_DIS_0, 0, DARBF_GATING_DIS);
881 * WaRsPkgCStateDisplayPMReq:hsw
882 * System hang if this isn't done before disabling all planes!
884 if (IS_HASWELL(i915))
885 intel_de_rmw(i915, CHICKEN_PAR1_1, 0, FORCE_ARB_IDLE_PLANES);
887 if (IS_KABYLAKE(i915) || IS_COFFEELAKE(i915) || IS_COMETLAKE(i915)) {
888 /* Display WA #1142:kbl,cfl,cml */
889 intel_de_rmw(i915, CHICKEN_PAR1_1,
890 KBL_ARB_FILL_SPARE_22, KBL_ARB_FILL_SPARE_22);
891 intel_de_rmw(i915, CHICKEN_MISC_2,
892 KBL_ARB_FILL_SPARE_13 | KBL_ARB_FILL_SPARE_14,
893 KBL_ARB_FILL_SPARE_14);
897 void intel_modeset_setup_hw_state(struct drm_i915_private *i915,
898 struct drm_modeset_acquire_ctx *ctx)
900 struct intel_encoder *encoder;
901 struct intel_crtc *crtc;
902 intel_wakeref_t wakeref;
904 wakeref = intel_display_power_get(i915, POWER_DOMAIN_INIT);
906 intel_early_display_was(i915);
907 intel_modeset_readout_hw_state(i915);
909 /* HW state is read out, now we need to sanitize this mess. */
910 get_encoder_power_domains(i915);
912 intel_pch_sanitize(i915);
915 * intel_sanitize_plane_mapping() may need to do vblank
916 * waits, so we need vblank interrupts restored beforehand.
918 for_each_intel_crtc(&i915->drm, crtc) {
919 struct intel_crtc_state *crtc_state =
920 to_intel_crtc_state(crtc->base.state);
922 intel_sanitize_fifo_underrun_reporting(crtc_state);
924 drm_crtc_vblank_reset(&crtc->base);
926 if (crtc_state->hw.active) {
927 intel_dmc_enable_pipe(i915, crtc->pipe);
928 intel_crtc_vblank_on(crtc_state);
932 intel_fbc_sanitize(i915);
934 intel_sanitize_plane_mapping(i915);
936 for_each_intel_encoder(&i915->drm, encoder)
937 intel_sanitize_encoder(encoder);
940 * Sanitizing CRTCs needs their connector atomic state to be
941 * up-to-date, so ensure that already here.
943 intel_modeset_update_connector_atomic_state(i915);
945 intel_sanitize_all_crtcs(i915, ctx);
947 intel_dpll_sanitize_state(i915);
949 intel_wm_get_hw_state(i915);
951 for_each_intel_crtc(&i915->drm, crtc) {
952 struct intel_crtc_state *crtc_state =
953 to_intel_crtc_state(crtc->base.state);
954 struct intel_power_domain_mask put_domains;
956 intel_modeset_get_crtc_power_domains(crtc_state, &put_domains);
957 if (drm_WARN_ON(&i915->drm, !bitmap_empty(put_domains.bits, POWER_DOMAIN_NUM)))
958 intel_modeset_put_crtc_power_domains(crtc, &put_domains);
961 intel_display_power_put(i915, POWER_DOMAIN_INIT, wakeref);
963 intel_power_domains_sanitize_state(i915);