xref: /linux/drivers/gpu/drm/i915/display/intel_modeset_setup.c (revision 5488bec96bccbd87335921338f8dc38b87db7d2c)
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