1 /*
2  * Copyright © 2006-2007 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  *
23  * Authors:
24  *	Eric Anholt <eric@anholt.net>
25  */
26 
27 #include <linux/i2c.h>
28 #include <linux/input.h>
29 #include <linux/intel-iommu.h>
30 #include <linux/kernel.h>
31 #include <linux/module.h>
32 #include <linux/dma-resv.h>
33 #include <linux/slab.h>
34 
35 #include <drm/drm_atomic.h>
36 #include <drm/drm_atomic_helper.h>
37 #include <drm/drm_atomic_uapi.h>
38 #include <drm/drm_damage_helper.h>
39 #include <drm/drm_dp_helper.h>
40 #include <drm/drm_edid.h>
41 #include <drm/drm_fourcc.h>
42 #include <drm/drm_plane_helper.h>
43 #include <drm/drm_probe_helper.h>
44 #include <drm/drm_rect.h>
45 
46 #include "display/intel_crt.h"
47 #include "display/intel_ddi.h"
48 #include "display/intel_dp.h"
49 #include "display/intel_dp_mst.h"
50 #include "display/intel_dpll_mgr.h"
51 #include "display/intel_dsi.h"
52 #include "display/intel_dvo.h"
53 #include "display/intel_gmbus.h"
54 #include "display/intel_hdmi.h"
55 #include "display/intel_lvds.h"
56 #include "display/intel_sdvo.h"
57 #include "display/intel_tv.h"
58 #include "display/intel_vdsc.h"
59 
60 #include "gt/intel_rps.h"
61 
62 #include "i915_drv.h"
63 #include "i915_trace.h"
64 #include "intel_acpi.h"
65 #include "intel_atomic.h"
66 #include "intel_atomic_plane.h"
67 #include "intel_bw.h"
68 #include "intel_cdclk.h"
69 #include "intel_color.h"
70 #include "intel_csr.h"
71 #include "intel_display_types.h"
72 #include "intel_dp_link_training.h"
73 #include "intel_fbc.h"
74 #include "intel_fbdev.h"
75 #include "intel_fifo_underrun.h"
76 #include "intel_frontbuffer.h"
77 #include "intel_hdcp.h"
78 #include "intel_hotplug.h"
79 #include "intel_overlay.h"
80 #include "intel_pipe_crc.h"
81 #include "intel_pm.h"
82 #include "intel_psr.h"
83 #include "intel_quirks.h"
84 #include "intel_sideband.h"
85 #include "intel_sprite.h"
86 #include "intel_tc.h"
87 #include "intel_vga.h"
88 
89 /* Primary plane formats for gen <= 3 */
90 static const u32 i8xx_primary_formats[] = {
91 	DRM_FORMAT_C8,
92 	DRM_FORMAT_XRGB1555,
93 	DRM_FORMAT_RGB565,
94 	DRM_FORMAT_XRGB8888,
95 };
96 
97 /* Primary plane formats for ivb (no fp16 due to hw issue) */
98 static const u32 ivb_primary_formats[] = {
99 	DRM_FORMAT_C8,
100 	DRM_FORMAT_RGB565,
101 	DRM_FORMAT_XRGB8888,
102 	DRM_FORMAT_XBGR8888,
103 	DRM_FORMAT_XRGB2101010,
104 	DRM_FORMAT_XBGR2101010,
105 };
106 
107 /* Primary plane formats for gen >= 4, except ivb */
108 static const u32 i965_primary_formats[] = {
109 	DRM_FORMAT_C8,
110 	DRM_FORMAT_RGB565,
111 	DRM_FORMAT_XRGB8888,
112 	DRM_FORMAT_XBGR8888,
113 	DRM_FORMAT_XRGB2101010,
114 	DRM_FORMAT_XBGR2101010,
115 	DRM_FORMAT_XBGR16161616F,
116 };
117 
118 /* Primary plane formats for vlv/chv */
119 static const u32 vlv_primary_formats[] = {
120 	DRM_FORMAT_C8,
121 	DRM_FORMAT_RGB565,
122 	DRM_FORMAT_XRGB8888,
123 	DRM_FORMAT_XBGR8888,
124 	DRM_FORMAT_ARGB8888,
125 	DRM_FORMAT_ABGR8888,
126 	DRM_FORMAT_XRGB2101010,
127 	DRM_FORMAT_XBGR2101010,
128 	DRM_FORMAT_ARGB2101010,
129 	DRM_FORMAT_ABGR2101010,
130 	DRM_FORMAT_XBGR16161616F,
131 };
132 
133 static const u64 i9xx_format_modifiers[] = {
134 	I915_FORMAT_MOD_X_TILED,
135 	DRM_FORMAT_MOD_LINEAR,
136 	DRM_FORMAT_MOD_INVALID
137 };
138 
139 /* Cursor formats */
140 static const u32 intel_cursor_formats[] = {
141 	DRM_FORMAT_ARGB8888,
142 };
143 
144 static const u64 cursor_format_modifiers[] = {
145 	DRM_FORMAT_MOD_LINEAR,
146 	DRM_FORMAT_MOD_INVALID
147 };
148 
149 static void i9xx_crtc_clock_get(struct intel_crtc *crtc,
150 				struct intel_crtc_state *pipe_config);
151 static void ilk_pch_clock_get(struct intel_crtc *crtc,
152 			      struct intel_crtc_state *pipe_config);
153 
154 static int intel_framebuffer_init(struct intel_framebuffer *ifb,
155 				  struct drm_i915_gem_object *obj,
156 				  struct drm_mode_fb_cmd2 *mode_cmd);
157 static void intel_set_transcoder_timings(const struct intel_crtc_state *crtc_state);
158 static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state);
159 static void intel_cpu_transcoder_set_m_n(const struct intel_crtc_state *crtc_state,
160 					 const struct intel_link_m_n *m_n,
161 					 const struct intel_link_m_n *m2_n2);
162 static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state);
163 static void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state);
164 static void hsw_set_pipeconf(const struct intel_crtc_state *crtc_state);
165 static void bdw_set_pipemisc(const struct intel_crtc_state *crtc_state);
166 static void vlv_prepare_pll(struct intel_crtc *crtc,
167 			    const struct intel_crtc_state *pipe_config);
168 static void chv_prepare_pll(struct intel_crtc *crtc,
169 			    const struct intel_crtc_state *pipe_config);
170 static void skl_pfit_enable(const struct intel_crtc_state *crtc_state);
171 static void ilk_pfit_enable(const struct intel_crtc_state *crtc_state);
172 static void intel_modeset_setup_hw_state(struct drm_device *dev,
173 					 struct drm_modeset_acquire_ctx *ctx);
174 static struct intel_crtc_state *intel_crtc_state_alloc(struct intel_crtc *crtc);
175 
176 struct intel_limit {
177 	struct {
178 		int min, max;
179 	} dot, vco, n, m, m1, m2, p, p1;
180 
181 	struct {
182 		int dot_limit;
183 		int p2_slow, p2_fast;
184 	} p2;
185 };
186 
187 /* returns HPLL frequency in kHz */
188 int vlv_get_hpll_vco(struct drm_i915_private *dev_priv)
189 {
190 	int hpll_freq, vco_freq[] = { 800, 1600, 2000, 2400 };
191 
192 	/* Obtain SKU information */
193 	hpll_freq = vlv_cck_read(dev_priv, CCK_FUSE_REG) &
194 		CCK_FUSE_HPLL_FREQ_MASK;
195 
196 	return vco_freq[hpll_freq] * 1000;
197 }
198 
199 int vlv_get_cck_clock(struct drm_i915_private *dev_priv,
200 		      const char *name, u32 reg, int ref_freq)
201 {
202 	u32 val;
203 	int divider;
204 
205 	val = vlv_cck_read(dev_priv, reg);
206 	divider = val & CCK_FREQUENCY_VALUES;
207 
208 	drm_WARN(&dev_priv->drm, (val & CCK_FREQUENCY_STATUS) !=
209 		 (divider << CCK_FREQUENCY_STATUS_SHIFT),
210 		 "%s change in progress\n", name);
211 
212 	return DIV_ROUND_CLOSEST(ref_freq << 1, divider + 1);
213 }
214 
215 int vlv_get_cck_clock_hpll(struct drm_i915_private *dev_priv,
216 			   const char *name, u32 reg)
217 {
218 	int hpll;
219 
220 	vlv_cck_get(dev_priv);
221 
222 	if (dev_priv->hpll_freq == 0)
223 		dev_priv->hpll_freq = vlv_get_hpll_vco(dev_priv);
224 
225 	hpll = vlv_get_cck_clock(dev_priv, name, reg, dev_priv->hpll_freq);
226 
227 	vlv_cck_put(dev_priv);
228 
229 	return hpll;
230 }
231 
232 static void intel_update_czclk(struct drm_i915_private *dev_priv)
233 {
234 	if (!(IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)))
235 		return;
236 
237 	dev_priv->czclk_freq = vlv_get_cck_clock_hpll(dev_priv, "czclk",
238 						      CCK_CZ_CLOCK_CONTROL);
239 
240 	drm_dbg(&dev_priv->drm, "CZ clock rate: %d kHz\n",
241 		dev_priv->czclk_freq);
242 }
243 
244 /* units of 100MHz */
245 static u32 intel_fdi_link_freq(struct drm_i915_private *dev_priv,
246 			       const struct intel_crtc_state *pipe_config)
247 {
248 	if (HAS_DDI(dev_priv))
249 		return pipe_config->port_clock; /* SPLL */
250 	else
251 		return dev_priv->fdi_pll_freq;
252 }
253 
254 static const struct intel_limit intel_limits_i8xx_dac = {
255 	.dot = { .min = 25000, .max = 350000 },
256 	.vco = { .min = 908000, .max = 1512000 },
257 	.n = { .min = 2, .max = 16 },
258 	.m = { .min = 96, .max = 140 },
259 	.m1 = { .min = 18, .max = 26 },
260 	.m2 = { .min = 6, .max = 16 },
261 	.p = { .min = 4, .max = 128 },
262 	.p1 = { .min = 2, .max = 33 },
263 	.p2 = { .dot_limit = 165000,
264 		.p2_slow = 4, .p2_fast = 2 },
265 };
266 
267 static const struct intel_limit intel_limits_i8xx_dvo = {
268 	.dot = { .min = 25000, .max = 350000 },
269 	.vco = { .min = 908000, .max = 1512000 },
270 	.n = { .min = 2, .max = 16 },
271 	.m = { .min = 96, .max = 140 },
272 	.m1 = { .min = 18, .max = 26 },
273 	.m2 = { .min = 6, .max = 16 },
274 	.p = { .min = 4, .max = 128 },
275 	.p1 = { .min = 2, .max = 33 },
276 	.p2 = { .dot_limit = 165000,
277 		.p2_slow = 4, .p2_fast = 4 },
278 };
279 
280 static const struct intel_limit intel_limits_i8xx_lvds = {
281 	.dot = { .min = 25000, .max = 350000 },
282 	.vco = { .min = 908000, .max = 1512000 },
283 	.n = { .min = 2, .max = 16 },
284 	.m = { .min = 96, .max = 140 },
285 	.m1 = { .min = 18, .max = 26 },
286 	.m2 = { .min = 6, .max = 16 },
287 	.p = { .min = 4, .max = 128 },
288 	.p1 = { .min = 1, .max = 6 },
289 	.p2 = { .dot_limit = 165000,
290 		.p2_slow = 14, .p2_fast = 7 },
291 };
292 
293 static const struct intel_limit intel_limits_i9xx_sdvo = {
294 	.dot = { .min = 20000, .max = 400000 },
295 	.vco = { .min = 1400000, .max = 2800000 },
296 	.n = { .min = 1, .max = 6 },
297 	.m = { .min = 70, .max = 120 },
298 	.m1 = { .min = 8, .max = 18 },
299 	.m2 = { .min = 3, .max = 7 },
300 	.p = { .min = 5, .max = 80 },
301 	.p1 = { .min = 1, .max = 8 },
302 	.p2 = { .dot_limit = 200000,
303 		.p2_slow = 10, .p2_fast = 5 },
304 };
305 
306 static const struct intel_limit intel_limits_i9xx_lvds = {
307 	.dot = { .min = 20000, .max = 400000 },
308 	.vco = { .min = 1400000, .max = 2800000 },
309 	.n = { .min = 1, .max = 6 },
310 	.m = { .min = 70, .max = 120 },
311 	.m1 = { .min = 8, .max = 18 },
312 	.m2 = { .min = 3, .max = 7 },
313 	.p = { .min = 7, .max = 98 },
314 	.p1 = { .min = 1, .max = 8 },
315 	.p2 = { .dot_limit = 112000,
316 		.p2_slow = 14, .p2_fast = 7 },
317 };
318 
319 
320 static const struct intel_limit intel_limits_g4x_sdvo = {
321 	.dot = { .min = 25000, .max = 270000 },
322 	.vco = { .min = 1750000, .max = 3500000},
323 	.n = { .min = 1, .max = 4 },
324 	.m = { .min = 104, .max = 138 },
325 	.m1 = { .min = 17, .max = 23 },
326 	.m2 = { .min = 5, .max = 11 },
327 	.p = { .min = 10, .max = 30 },
328 	.p1 = { .min = 1, .max = 3},
329 	.p2 = { .dot_limit = 270000,
330 		.p2_slow = 10,
331 		.p2_fast = 10
332 	},
333 };
334 
335 static const struct intel_limit intel_limits_g4x_hdmi = {
336 	.dot = { .min = 22000, .max = 400000 },
337 	.vco = { .min = 1750000, .max = 3500000},
338 	.n = { .min = 1, .max = 4 },
339 	.m = { .min = 104, .max = 138 },
340 	.m1 = { .min = 16, .max = 23 },
341 	.m2 = { .min = 5, .max = 11 },
342 	.p = { .min = 5, .max = 80 },
343 	.p1 = { .min = 1, .max = 8},
344 	.p2 = { .dot_limit = 165000,
345 		.p2_slow = 10, .p2_fast = 5 },
346 };
347 
348 static const struct intel_limit intel_limits_g4x_single_channel_lvds = {
349 	.dot = { .min = 20000, .max = 115000 },
350 	.vco = { .min = 1750000, .max = 3500000 },
351 	.n = { .min = 1, .max = 3 },
352 	.m = { .min = 104, .max = 138 },
353 	.m1 = { .min = 17, .max = 23 },
354 	.m2 = { .min = 5, .max = 11 },
355 	.p = { .min = 28, .max = 112 },
356 	.p1 = { .min = 2, .max = 8 },
357 	.p2 = { .dot_limit = 0,
358 		.p2_slow = 14, .p2_fast = 14
359 	},
360 };
361 
362 static const struct intel_limit intel_limits_g4x_dual_channel_lvds = {
363 	.dot = { .min = 80000, .max = 224000 },
364 	.vco = { .min = 1750000, .max = 3500000 },
365 	.n = { .min = 1, .max = 3 },
366 	.m = { .min = 104, .max = 138 },
367 	.m1 = { .min = 17, .max = 23 },
368 	.m2 = { .min = 5, .max = 11 },
369 	.p = { .min = 14, .max = 42 },
370 	.p1 = { .min = 2, .max = 6 },
371 	.p2 = { .dot_limit = 0,
372 		.p2_slow = 7, .p2_fast = 7
373 	},
374 };
375 
376 static const struct intel_limit pnv_limits_sdvo = {
377 	.dot = { .min = 20000, .max = 400000},
378 	.vco = { .min = 1700000, .max = 3500000 },
379 	/* Pineview's Ncounter is a ring counter */
380 	.n = { .min = 3, .max = 6 },
381 	.m = { .min = 2, .max = 256 },
382 	/* Pineview only has one combined m divider, which we treat as m2. */
383 	.m1 = { .min = 0, .max = 0 },
384 	.m2 = { .min = 0, .max = 254 },
385 	.p = { .min = 5, .max = 80 },
386 	.p1 = { .min = 1, .max = 8 },
387 	.p2 = { .dot_limit = 200000,
388 		.p2_slow = 10, .p2_fast = 5 },
389 };
390 
391 static const struct intel_limit pnv_limits_lvds = {
392 	.dot = { .min = 20000, .max = 400000 },
393 	.vco = { .min = 1700000, .max = 3500000 },
394 	.n = { .min = 3, .max = 6 },
395 	.m = { .min = 2, .max = 256 },
396 	.m1 = { .min = 0, .max = 0 },
397 	.m2 = { .min = 0, .max = 254 },
398 	.p = { .min = 7, .max = 112 },
399 	.p1 = { .min = 1, .max = 8 },
400 	.p2 = { .dot_limit = 112000,
401 		.p2_slow = 14, .p2_fast = 14 },
402 };
403 
404 /* Ironlake / Sandybridge
405  *
406  * We calculate clock using (register_value + 2) for N/M1/M2, so here
407  * the range value for them is (actual_value - 2).
408  */
409 static const struct intel_limit ilk_limits_dac = {
410 	.dot = { .min = 25000, .max = 350000 },
411 	.vco = { .min = 1760000, .max = 3510000 },
412 	.n = { .min = 1, .max = 5 },
413 	.m = { .min = 79, .max = 127 },
414 	.m1 = { .min = 12, .max = 22 },
415 	.m2 = { .min = 5, .max = 9 },
416 	.p = { .min = 5, .max = 80 },
417 	.p1 = { .min = 1, .max = 8 },
418 	.p2 = { .dot_limit = 225000,
419 		.p2_slow = 10, .p2_fast = 5 },
420 };
421 
422 static const struct intel_limit ilk_limits_single_lvds = {
423 	.dot = { .min = 25000, .max = 350000 },
424 	.vco = { .min = 1760000, .max = 3510000 },
425 	.n = { .min = 1, .max = 3 },
426 	.m = { .min = 79, .max = 118 },
427 	.m1 = { .min = 12, .max = 22 },
428 	.m2 = { .min = 5, .max = 9 },
429 	.p = { .min = 28, .max = 112 },
430 	.p1 = { .min = 2, .max = 8 },
431 	.p2 = { .dot_limit = 225000,
432 		.p2_slow = 14, .p2_fast = 14 },
433 };
434 
435 static const struct intel_limit ilk_limits_dual_lvds = {
436 	.dot = { .min = 25000, .max = 350000 },
437 	.vco = { .min = 1760000, .max = 3510000 },
438 	.n = { .min = 1, .max = 3 },
439 	.m = { .min = 79, .max = 127 },
440 	.m1 = { .min = 12, .max = 22 },
441 	.m2 = { .min = 5, .max = 9 },
442 	.p = { .min = 14, .max = 56 },
443 	.p1 = { .min = 2, .max = 8 },
444 	.p2 = { .dot_limit = 225000,
445 		.p2_slow = 7, .p2_fast = 7 },
446 };
447 
448 /* LVDS 100mhz refclk limits. */
449 static const struct intel_limit ilk_limits_single_lvds_100m = {
450 	.dot = { .min = 25000, .max = 350000 },
451 	.vco = { .min = 1760000, .max = 3510000 },
452 	.n = { .min = 1, .max = 2 },
453 	.m = { .min = 79, .max = 126 },
454 	.m1 = { .min = 12, .max = 22 },
455 	.m2 = { .min = 5, .max = 9 },
456 	.p = { .min = 28, .max = 112 },
457 	.p1 = { .min = 2, .max = 8 },
458 	.p2 = { .dot_limit = 225000,
459 		.p2_slow = 14, .p2_fast = 14 },
460 };
461 
462 static const struct intel_limit ilk_limits_dual_lvds_100m = {
463 	.dot = { .min = 25000, .max = 350000 },
464 	.vco = { .min = 1760000, .max = 3510000 },
465 	.n = { .min = 1, .max = 3 },
466 	.m = { .min = 79, .max = 126 },
467 	.m1 = { .min = 12, .max = 22 },
468 	.m2 = { .min = 5, .max = 9 },
469 	.p = { .min = 14, .max = 42 },
470 	.p1 = { .min = 2, .max = 6 },
471 	.p2 = { .dot_limit = 225000,
472 		.p2_slow = 7, .p2_fast = 7 },
473 };
474 
475 static const struct intel_limit intel_limits_vlv = {
476 	 /*
477 	  * These are the data rate limits (measured in fast clocks)
478 	  * since those are the strictest limits we have. The fast
479 	  * clock and actual rate limits are more relaxed, so checking
480 	  * them would make no difference.
481 	  */
482 	.dot = { .min = 25000 * 5, .max = 270000 * 5 },
483 	.vco = { .min = 4000000, .max = 6000000 },
484 	.n = { .min = 1, .max = 7 },
485 	.m1 = { .min = 2, .max = 3 },
486 	.m2 = { .min = 11, .max = 156 },
487 	.p1 = { .min = 2, .max = 3 },
488 	.p2 = { .p2_slow = 2, .p2_fast = 20 }, /* slow=min, fast=max */
489 };
490 
491 static const struct intel_limit intel_limits_chv = {
492 	/*
493 	 * These are the data rate limits (measured in fast clocks)
494 	 * since those are the strictest limits we have.  The fast
495 	 * clock and actual rate limits are more relaxed, so checking
496 	 * them would make no difference.
497 	 */
498 	.dot = { .min = 25000 * 5, .max = 540000 * 5},
499 	.vco = { .min = 4800000, .max = 6480000 },
500 	.n = { .min = 1, .max = 1 },
501 	.m1 = { .min = 2, .max = 2 },
502 	.m2 = { .min = 24 << 22, .max = 175 << 22 },
503 	.p1 = { .min = 2, .max = 4 },
504 	.p2 = {	.p2_slow = 1, .p2_fast = 14 },
505 };
506 
507 static const struct intel_limit intel_limits_bxt = {
508 	/* FIXME: find real dot limits */
509 	.dot = { .min = 0, .max = INT_MAX },
510 	.vco = { .min = 4800000, .max = 6700000 },
511 	.n = { .min = 1, .max = 1 },
512 	.m1 = { .min = 2, .max = 2 },
513 	/* FIXME: find real m2 limits */
514 	.m2 = { .min = 2 << 22, .max = 255 << 22 },
515 	.p1 = { .min = 2, .max = 4 },
516 	.p2 = { .p2_slow = 1, .p2_fast = 20 },
517 };
518 
519 /* WA Display #0827: Gen9:all */
520 static void
521 skl_wa_827(struct drm_i915_private *dev_priv, enum pipe pipe, bool enable)
522 {
523 	if (enable)
524 		intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe),
525 		               intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) | DUPS1_GATING_DIS | DUPS2_GATING_DIS);
526 	else
527 		intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe),
528 		               intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) & ~(DUPS1_GATING_DIS | DUPS2_GATING_DIS));
529 }
530 
531 /* Wa_2006604312:icl,ehl */
532 static void
533 icl_wa_scalerclkgating(struct drm_i915_private *dev_priv, enum pipe pipe,
534 		       bool enable)
535 {
536 	if (enable)
537 		intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe),
538 		               intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) | DPFR_GATING_DIS);
539 	else
540 		intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe),
541 		               intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe)) & ~DPFR_GATING_DIS);
542 }
543 
544 static bool
545 needs_modeset(const struct intel_crtc_state *state)
546 {
547 	return drm_atomic_crtc_needs_modeset(&state->uapi);
548 }
549 
550 static bool
551 is_trans_port_sync_slave(const struct intel_crtc_state *crtc_state)
552 {
553 	return crtc_state->master_transcoder != INVALID_TRANSCODER;
554 }
555 
556 static bool
557 is_trans_port_sync_master(const struct intel_crtc_state *crtc_state)
558 {
559 	return crtc_state->sync_mode_slaves_mask != 0;
560 }
561 
562 bool
563 is_trans_port_sync_mode(const struct intel_crtc_state *crtc_state)
564 {
565 	return is_trans_port_sync_master(crtc_state) ||
566 		is_trans_port_sync_slave(crtc_state);
567 }
568 
569 /*
570  * Platform specific helpers to calculate the port PLL loopback- (clock.m),
571  * and post-divider (clock.p) values, pre- (clock.vco) and post-divided fast
572  * (clock.dot) clock rates. This fast dot clock is fed to the port's IO logic.
573  * The helpers' return value is the rate of the clock that is fed to the
574  * display engine's pipe which can be the above fast dot clock rate or a
575  * divided-down version of it.
576  */
577 /* m1 is reserved as 0 in Pineview, n is a ring counter */
578 static int pnv_calc_dpll_params(int refclk, struct dpll *clock)
579 {
580 	clock->m = clock->m2 + 2;
581 	clock->p = clock->p1 * clock->p2;
582 	if (WARN_ON(clock->n == 0 || clock->p == 0))
583 		return 0;
584 	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
585 	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
586 
587 	return clock->dot;
588 }
589 
590 static u32 i9xx_dpll_compute_m(struct dpll *dpll)
591 {
592 	return 5 * (dpll->m1 + 2) + (dpll->m2 + 2);
593 }
594 
595 static int i9xx_calc_dpll_params(int refclk, struct dpll *clock)
596 {
597 	clock->m = i9xx_dpll_compute_m(clock);
598 	clock->p = clock->p1 * clock->p2;
599 	if (WARN_ON(clock->n + 2 == 0 || clock->p == 0))
600 		return 0;
601 	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n + 2);
602 	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
603 
604 	return clock->dot;
605 }
606 
607 static int vlv_calc_dpll_params(int refclk, struct dpll *clock)
608 {
609 	clock->m = clock->m1 * clock->m2;
610 	clock->p = clock->p1 * clock->p2;
611 	if (WARN_ON(clock->n == 0 || clock->p == 0))
612 		return 0;
613 	clock->vco = DIV_ROUND_CLOSEST(refclk * clock->m, clock->n);
614 	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
615 
616 	return clock->dot / 5;
617 }
618 
619 int chv_calc_dpll_params(int refclk, struct dpll *clock)
620 {
621 	clock->m = clock->m1 * clock->m2;
622 	clock->p = clock->p1 * clock->p2;
623 	if (WARN_ON(clock->n == 0 || clock->p == 0))
624 		return 0;
625 	clock->vco = DIV_ROUND_CLOSEST_ULL(mul_u32_u32(refclk, clock->m),
626 					   clock->n << 22);
627 	clock->dot = DIV_ROUND_CLOSEST(clock->vco, clock->p);
628 
629 	return clock->dot / 5;
630 }
631 
632 /*
633  * Returns whether the given set of divisors are valid for a given refclk with
634  * the given connectors.
635  */
636 static bool intel_pll_is_valid(struct drm_i915_private *dev_priv,
637 			       const struct intel_limit *limit,
638 			       const struct dpll *clock)
639 {
640 	if (clock->n < limit->n.min || limit->n.max < clock->n)
641 		return false;
642 	if (clock->p1 < limit->p1.min || limit->p1.max < clock->p1)
643 		return false;
644 	if (clock->m2 < limit->m2.min || limit->m2.max < clock->m2)
645 		return false;
646 	if (clock->m1 < limit->m1.min || limit->m1.max < clock->m1)
647 		return false;
648 
649 	if (!IS_PINEVIEW(dev_priv) && !IS_VALLEYVIEW(dev_priv) &&
650 	    !IS_CHERRYVIEW(dev_priv) && !IS_GEN9_LP(dev_priv))
651 		if (clock->m1 <= clock->m2)
652 			return false;
653 
654 	if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv) &&
655 	    !IS_GEN9_LP(dev_priv)) {
656 		if (clock->p < limit->p.min || limit->p.max < clock->p)
657 			return false;
658 		if (clock->m < limit->m.min || limit->m.max < clock->m)
659 			return false;
660 	}
661 
662 	if (clock->vco < limit->vco.min || limit->vco.max < clock->vco)
663 		return false;
664 	/* XXX: We may need to be checking "Dot clock" depending on the multiplier,
665 	 * connector, etc., rather than just a single range.
666 	 */
667 	if (clock->dot < limit->dot.min || limit->dot.max < clock->dot)
668 		return false;
669 
670 	return true;
671 }
672 
673 static int
674 i9xx_select_p2_div(const struct intel_limit *limit,
675 		   const struct intel_crtc_state *crtc_state,
676 		   int target)
677 {
678 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
679 
680 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) {
681 		/*
682 		 * For LVDS just rely on its current settings for dual-channel.
683 		 * We haven't figured out how to reliably set up different
684 		 * single/dual channel state, if we even can.
685 		 */
686 		if (intel_is_dual_link_lvds(dev_priv))
687 			return limit->p2.p2_fast;
688 		else
689 			return limit->p2.p2_slow;
690 	} else {
691 		if (target < limit->p2.dot_limit)
692 			return limit->p2.p2_slow;
693 		else
694 			return limit->p2.p2_fast;
695 	}
696 }
697 
698 /*
699  * Returns a set of divisors for the desired target clock with the given
700  * refclk, or FALSE.  The returned values represent the clock equation:
701  * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
702  *
703  * Target and reference clocks are specified in kHz.
704  *
705  * If match_clock is provided, then best_clock P divider must match the P
706  * divider from @match_clock used for LVDS downclocking.
707  */
708 static bool
709 i9xx_find_best_dpll(const struct intel_limit *limit,
710 		    struct intel_crtc_state *crtc_state,
711 		    int target, int refclk, struct dpll *match_clock,
712 		    struct dpll *best_clock)
713 {
714 	struct drm_device *dev = crtc_state->uapi.crtc->dev;
715 	struct dpll clock;
716 	int err = target;
717 
718 	memset(best_clock, 0, sizeof(*best_clock));
719 
720 	clock.p2 = i9xx_select_p2_div(limit, crtc_state, target);
721 
722 	for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max;
723 	     clock.m1++) {
724 		for (clock.m2 = limit->m2.min;
725 		     clock.m2 <= limit->m2.max; clock.m2++) {
726 			if (clock.m2 >= clock.m1)
727 				break;
728 			for (clock.n = limit->n.min;
729 			     clock.n <= limit->n.max; clock.n++) {
730 				for (clock.p1 = limit->p1.min;
731 					clock.p1 <= limit->p1.max; clock.p1++) {
732 					int this_err;
733 
734 					i9xx_calc_dpll_params(refclk, &clock);
735 					if (!intel_pll_is_valid(to_i915(dev),
736 								limit,
737 								&clock))
738 						continue;
739 					if (match_clock &&
740 					    clock.p != match_clock->p)
741 						continue;
742 
743 					this_err = abs(clock.dot - target);
744 					if (this_err < err) {
745 						*best_clock = clock;
746 						err = this_err;
747 					}
748 				}
749 			}
750 		}
751 	}
752 
753 	return (err != target);
754 }
755 
756 /*
757  * Returns a set of divisors for the desired target clock with the given
758  * refclk, or FALSE.  The returned values represent the clock equation:
759  * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
760  *
761  * Target and reference clocks are specified in kHz.
762  *
763  * If match_clock is provided, then best_clock P divider must match the P
764  * divider from @match_clock used for LVDS downclocking.
765  */
766 static bool
767 pnv_find_best_dpll(const struct intel_limit *limit,
768 		   struct intel_crtc_state *crtc_state,
769 		   int target, int refclk, struct dpll *match_clock,
770 		   struct dpll *best_clock)
771 {
772 	struct drm_device *dev = crtc_state->uapi.crtc->dev;
773 	struct dpll clock;
774 	int err = target;
775 
776 	memset(best_clock, 0, sizeof(*best_clock));
777 
778 	clock.p2 = i9xx_select_p2_div(limit, crtc_state, target);
779 
780 	for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max;
781 	     clock.m1++) {
782 		for (clock.m2 = limit->m2.min;
783 		     clock.m2 <= limit->m2.max; clock.m2++) {
784 			for (clock.n = limit->n.min;
785 			     clock.n <= limit->n.max; clock.n++) {
786 				for (clock.p1 = limit->p1.min;
787 					clock.p1 <= limit->p1.max; clock.p1++) {
788 					int this_err;
789 
790 					pnv_calc_dpll_params(refclk, &clock);
791 					if (!intel_pll_is_valid(to_i915(dev),
792 								limit,
793 								&clock))
794 						continue;
795 					if (match_clock &&
796 					    clock.p != match_clock->p)
797 						continue;
798 
799 					this_err = abs(clock.dot - target);
800 					if (this_err < err) {
801 						*best_clock = clock;
802 						err = this_err;
803 					}
804 				}
805 			}
806 		}
807 	}
808 
809 	return (err != target);
810 }
811 
812 /*
813  * Returns a set of divisors for the desired target clock with the given
814  * refclk, or FALSE.  The returned values represent the clock equation:
815  * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
816  *
817  * Target and reference clocks are specified in kHz.
818  *
819  * If match_clock is provided, then best_clock P divider must match the P
820  * divider from @match_clock used for LVDS downclocking.
821  */
822 static bool
823 g4x_find_best_dpll(const struct intel_limit *limit,
824 		   struct intel_crtc_state *crtc_state,
825 		   int target, int refclk, struct dpll *match_clock,
826 		   struct dpll *best_clock)
827 {
828 	struct drm_device *dev = crtc_state->uapi.crtc->dev;
829 	struct dpll clock;
830 	int max_n;
831 	bool found = false;
832 	/* approximately equals target * 0.00585 */
833 	int err_most = (target >> 8) + (target >> 9);
834 
835 	memset(best_clock, 0, sizeof(*best_clock));
836 
837 	clock.p2 = i9xx_select_p2_div(limit, crtc_state, target);
838 
839 	max_n = limit->n.max;
840 	/* based on hardware requirement, prefer smaller n to precision */
841 	for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
842 		/* based on hardware requirement, prefere larger m1,m2 */
843 		for (clock.m1 = limit->m1.max;
844 		     clock.m1 >= limit->m1.min; clock.m1--) {
845 			for (clock.m2 = limit->m2.max;
846 			     clock.m2 >= limit->m2.min; clock.m2--) {
847 				for (clock.p1 = limit->p1.max;
848 				     clock.p1 >= limit->p1.min; clock.p1--) {
849 					int this_err;
850 
851 					i9xx_calc_dpll_params(refclk, &clock);
852 					if (!intel_pll_is_valid(to_i915(dev),
853 								limit,
854 								&clock))
855 						continue;
856 
857 					this_err = abs(clock.dot - target);
858 					if (this_err < err_most) {
859 						*best_clock = clock;
860 						err_most = this_err;
861 						max_n = clock.n;
862 						found = true;
863 					}
864 				}
865 			}
866 		}
867 	}
868 	return found;
869 }
870 
871 /*
872  * Check if the calculated PLL configuration is more optimal compared to the
873  * best configuration and error found so far. Return the calculated error.
874  */
875 static bool vlv_PLL_is_optimal(struct drm_device *dev, int target_freq,
876 			       const struct dpll *calculated_clock,
877 			       const struct dpll *best_clock,
878 			       unsigned int best_error_ppm,
879 			       unsigned int *error_ppm)
880 {
881 	/*
882 	 * For CHV ignore the error and consider only the P value.
883 	 * Prefer a bigger P value based on HW requirements.
884 	 */
885 	if (IS_CHERRYVIEW(to_i915(dev))) {
886 		*error_ppm = 0;
887 
888 		return calculated_clock->p > best_clock->p;
889 	}
890 
891 	if (drm_WARN_ON_ONCE(dev, !target_freq))
892 		return false;
893 
894 	*error_ppm = div_u64(1000000ULL *
895 				abs(target_freq - calculated_clock->dot),
896 			     target_freq);
897 	/*
898 	 * Prefer a better P value over a better (smaller) error if the error
899 	 * is small. Ensure this preference for future configurations too by
900 	 * setting the error to 0.
901 	 */
902 	if (*error_ppm < 100 && calculated_clock->p > best_clock->p) {
903 		*error_ppm = 0;
904 
905 		return true;
906 	}
907 
908 	return *error_ppm + 10 < best_error_ppm;
909 }
910 
911 /*
912  * Returns a set of divisors for the desired target clock with the given
913  * refclk, or FALSE.  The returned values represent the clock equation:
914  * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
915  */
916 static bool
917 vlv_find_best_dpll(const struct intel_limit *limit,
918 		   struct intel_crtc_state *crtc_state,
919 		   int target, int refclk, struct dpll *match_clock,
920 		   struct dpll *best_clock)
921 {
922 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
923 	struct drm_device *dev = crtc->base.dev;
924 	struct dpll clock;
925 	unsigned int bestppm = 1000000;
926 	/* min update 19.2 MHz */
927 	int max_n = min(limit->n.max, refclk / 19200);
928 	bool found = false;
929 
930 	target *= 5; /* fast clock */
931 
932 	memset(best_clock, 0, sizeof(*best_clock));
933 
934 	/* based on hardware requirement, prefer smaller n to precision */
935 	for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
936 		for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) {
937 			for (clock.p2 = limit->p2.p2_fast; clock.p2 >= limit->p2.p2_slow;
938 			     clock.p2 -= clock.p2 > 10 ? 2 : 1) {
939 				clock.p = clock.p1 * clock.p2;
940 				/* based on hardware requirement, prefer bigger m1,m2 values */
941 				for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; clock.m1++) {
942 					unsigned int ppm;
943 
944 					clock.m2 = DIV_ROUND_CLOSEST(target * clock.p * clock.n,
945 								     refclk * clock.m1);
946 
947 					vlv_calc_dpll_params(refclk, &clock);
948 
949 					if (!intel_pll_is_valid(to_i915(dev),
950 								limit,
951 								&clock))
952 						continue;
953 
954 					if (!vlv_PLL_is_optimal(dev, target,
955 								&clock,
956 								best_clock,
957 								bestppm, &ppm))
958 						continue;
959 
960 					*best_clock = clock;
961 					bestppm = ppm;
962 					found = true;
963 				}
964 			}
965 		}
966 	}
967 
968 	return found;
969 }
970 
971 /*
972  * Returns a set of divisors for the desired target clock with the given
973  * refclk, or FALSE.  The returned values represent the clock equation:
974  * reflck * (5 * (m1 + 2) + (m2 + 2)) / (n + 2) / p1 / p2.
975  */
976 static bool
977 chv_find_best_dpll(const struct intel_limit *limit,
978 		   struct intel_crtc_state *crtc_state,
979 		   int target, int refclk, struct dpll *match_clock,
980 		   struct dpll *best_clock)
981 {
982 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
983 	struct drm_device *dev = crtc->base.dev;
984 	unsigned int best_error_ppm;
985 	struct dpll clock;
986 	u64 m2;
987 	int found = false;
988 
989 	memset(best_clock, 0, sizeof(*best_clock));
990 	best_error_ppm = 1000000;
991 
992 	/*
993 	 * Based on hardware doc, the n always set to 1, and m1 always
994 	 * set to 2.  If requires to support 200Mhz refclk, we need to
995 	 * revisit this because n may not 1 anymore.
996 	 */
997 	clock.n = 1, clock.m1 = 2;
998 	target *= 5;	/* fast clock */
999 
1000 	for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) {
1001 		for (clock.p2 = limit->p2.p2_fast;
1002 				clock.p2 >= limit->p2.p2_slow;
1003 				clock.p2 -= clock.p2 > 10 ? 2 : 1) {
1004 			unsigned int error_ppm;
1005 
1006 			clock.p = clock.p1 * clock.p2;
1007 
1008 			m2 = DIV_ROUND_CLOSEST_ULL(mul_u32_u32(target, clock.p * clock.n) << 22,
1009 						   refclk * clock.m1);
1010 
1011 			if (m2 > INT_MAX/clock.m1)
1012 				continue;
1013 
1014 			clock.m2 = m2;
1015 
1016 			chv_calc_dpll_params(refclk, &clock);
1017 
1018 			if (!intel_pll_is_valid(to_i915(dev), limit, &clock))
1019 				continue;
1020 
1021 			if (!vlv_PLL_is_optimal(dev, target, &clock, best_clock,
1022 						best_error_ppm, &error_ppm))
1023 				continue;
1024 
1025 			*best_clock = clock;
1026 			best_error_ppm = error_ppm;
1027 			found = true;
1028 		}
1029 	}
1030 
1031 	return found;
1032 }
1033 
1034 bool bxt_find_best_dpll(struct intel_crtc_state *crtc_state,
1035 			struct dpll *best_clock)
1036 {
1037 	int refclk = 100000;
1038 	const struct intel_limit *limit = &intel_limits_bxt;
1039 
1040 	return chv_find_best_dpll(limit, crtc_state,
1041 				  crtc_state->port_clock, refclk,
1042 				  NULL, best_clock);
1043 }
1044 
1045 static bool pipe_scanline_is_moving(struct drm_i915_private *dev_priv,
1046 				    enum pipe pipe)
1047 {
1048 	i915_reg_t reg = PIPEDSL(pipe);
1049 	u32 line1, line2;
1050 	u32 line_mask;
1051 
1052 	if (IS_GEN(dev_priv, 2))
1053 		line_mask = DSL_LINEMASK_GEN2;
1054 	else
1055 		line_mask = DSL_LINEMASK_GEN3;
1056 
1057 	line1 = intel_de_read(dev_priv, reg) & line_mask;
1058 	msleep(5);
1059 	line2 = intel_de_read(dev_priv, reg) & line_mask;
1060 
1061 	return line1 != line2;
1062 }
1063 
1064 static void wait_for_pipe_scanline_moving(struct intel_crtc *crtc, bool state)
1065 {
1066 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1067 	enum pipe pipe = crtc->pipe;
1068 
1069 	/* Wait for the display line to settle/start moving */
1070 	if (wait_for(pipe_scanline_is_moving(dev_priv, pipe) == state, 100))
1071 		drm_err(&dev_priv->drm,
1072 			"pipe %c scanline %s wait timed out\n",
1073 			pipe_name(pipe), onoff(state));
1074 }
1075 
1076 static void intel_wait_for_pipe_scanline_stopped(struct intel_crtc *crtc)
1077 {
1078 	wait_for_pipe_scanline_moving(crtc, false);
1079 }
1080 
1081 static void intel_wait_for_pipe_scanline_moving(struct intel_crtc *crtc)
1082 {
1083 	wait_for_pipe_scanline_moving(crtc, true);
1084 }
1085 
1086 static void
1087 intel_wait_for_pipe_off(const struct intel_crtc_state *old_crtc_state)
1088 {
1089 	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
1090 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1091 
1092 	if (INTEL_GEN(dev_priv) >= 4) {
1093 		enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
1094 		i915_reg_t reg = PIPECONF(cpu_transcoder);
1095 
1096 		/* Wait for the Pipe State to go off */
1097 		if (intel_de_wait_for_clear(dev_priv, reg,
1098 					    I965_PIPECONF_ACTIVE, 100))
1099 			drm_WARN(&dev_priv->drm, 1,
1100 				 "pipe_off wait timed out\n");
1101 	} else {
1102 		intel_wait_for_pipe_scanline_stopped(crtc);
1103 	}
1104 }
1105 
1106 /* Only for pre-ILK configs */
1107 void assert_pll(struct drm_i915_private *dev_priv,
1108 		enum pipe pipe, bool state)
1109 {
1110 	u32 val;
1111 	bool cur_state;
1112 
1113 	val = intel_de_read(dev_priv, DPLL(pipe));
1114 	cur_state = !!(val & DPLL_VCO_ENABLE);
1115 	I915_STATE_WARN(cur_state != state,
1116 	     "PLL state assertion failure (expected %s, current %s)\n",
1117 			onoff(state), onoff(cur_state));
1118 }
1119 
1120 /* XXX: the dsi pll is shared between MIPI DSI ports */
1121 void assert_dsi_pll(struct drm_i915_private *dev_priv, bool state)
1122 {
1123 	u32 val;
1124 	bool cur_state;
1125 
1126 	vlv_cck_get(dev_priv);
1127 	val = vlv_cck_read(dev_priv, CCK_REG_DSI_PLL_CONTROL);
1128 	vlv_cck_put(dev_priv);
1129 
1130 	cur_state = val & DSI_PLL_VCO_EN;
1131 	I915_STATE_WARN(cur_state != state,
1132 	     "DSI PLL state assertion failure (expected %s, current %s)\n",
1133 			onoff(state), onoff(cur_state));
1134 }
1135 
1136 static void assert_fdi_tx(struct drm_i915_private *dev_priv,
1137 			  enum pipe pipe, bool state)
1138 {
1139 	bool cur_state;
1140 
1141 	if (HAS_DDI(dev_priv)) {
1142 		/*
1143 		 * DDI does not have a specific FDI_TX register.
1144 		 *
1145 		 * FDI is never fed from EDP transcoder
1146 		 * so pipe->transcoder cast is fine here.
1147 		 */
1148 		enum transcoder cpu_transcoder = (enum transcoder)pipe;
1149 		u32 val = intel_de_read(dev_priv,
1150 					TRANS_DDI_FUNC_CTL(cpu_transcoder));
1151 		cur_state = !!(val & TRANS_DDI_FUNC_ENABLE);
1152 	} else {
1153 		u32 val = intel_de_read(dev_priv, FDI_TX_CTL(pipe));
1154 		cur_state = !!(val & FDI_TX_ENABLE);
1155 	}
1156 	I915_STATE_WARN(cur_state != state,
1157 	     "FDI TX state assertion failure (expected %s, current %s)\n",
1158 			onoff(state), onoff(cur_state));
1159 }
1160 #define assert_fdi_tx_enabled(d, p) assert_fdi_tx(d, p, true)
1161 #define assert_fdi_tx_disabled(d, p) assert_fdi_tx(d, p, false)
1162 
1163 static void assert_fdi_rx(struct drm_i915_private *dev_priv,
1164 			  enum pipe pipe, bool state)
1165 {
1166 	u32 val;
1167 	bool cur_state;
1168 
1169 	val = intel_de_read(dev_priv, FDI_RX_CTL(pipe));
1170 	cur_state = !!(val & FDI_RX_ENABLE);
1171 	I915_STATE_WARN(cur_state != state,
1172 	     "FDI RX state assertion failure (expected %s, current %s)\n",
1173 			onoff(state), onoff(cur_state));
1174 }
1175 #define assert_fdi_rx_enabled(d, p) assert_fdi_rx(d, p, true)
1176 #define assert_fdi_rx_disabled(d, p) assert_fdi_rx(d, p, false)
1177 
1178 static void assert_fdi_tx_pll_enabled(struct drm_i915_private *dev_priv,
1179 				      enum pipe pipe)
1180 {
1181 	u32 val;
1182 
1183 	/* ILK FDI PLL is always enabled */
1184 	if (IS_GEN(dev_priv, 5))
1185 		return;
1186 
1187 	/* On Haswell, DDI ports are responsible for the FDI PLL setup */
1188 	if (HAS_DDI(dev_priv))
1189 		return;
1190 
1191 	val = intel_de_read(dev_priv, FDI_TX_CTL(pipe));
1192 	I915_STATE_WARN(!(val & FDI_TX_PLL_ENABLE), "FDI TX PLL assertion failure, should be active but is disabled\n");
1193 }
1194 
1195 void assert_fdi_rx_pll(struct drm_i915_private *dev_priv,
1196 		       enum pipe pipe, bool state)
1197 {
1198 	u32 val;
1199 	bool cur_state;
1200 
1201 	val = intel_de_read(dev_priv, FDI_RX_CTL(pipe));
1202 	cur_state = !!(val & FDI_RX_PLL_ENABLE);
1203 	I915_STATE_WARN(cur_state != state,
1204 	     "FDI RX PLL assertion failure (expected %s, current %s)\n",
1205 			onoff(state), onoff(cur_state));
1206 }
1207 
1208 void assert_panel_unlocked(struct drm_i915_private *dev_priv, enum pipe pipe)
1209 {
1210 	i915_reg_t pp_reg;
1211 	u32 val;
1212 	enum pipe panel_pipe = INVALID_PIPE;
1213 	bool locked = true;
1214 
1215 	if (drm_WARN_ON(&dev_priv->drm, HAS_DDI(dev_priv)))
1216 		return;
1217 
1218 	if (HAS_PCH_SPLIT(dev_priv)) {
1219 		u32 port_sel;
1220 
1221 		pp_reg = PP_CONTROL(0);
1222 		port_sel = intel_de_read(dev_priv, PP_ON_DELAYS(0)) & PANEL_PORT_SELECT_MASK;
1223 
1224 		switch (port_sel) {
1225 		case PANEL_PORT_SELECT_LVDS:
1226 			intel_lvds_port_enabled(dev_priv, PCH_LVDS, &panel_pipe);
1227 			break;
1228 		case PANEL_PORT_SELECT_DPA:
1229 			intel_dp_port_enabled(dev_priv, DP_A, PORT_A, &panel_pipe);
1230 			break;
1231 		case PANEL_PORT_SELECT_DPC:
1232 			intel_dp_port_enabled(dev_priv, PCH_DP_C, PORT_C, &panel_pipe);
1233 			break;
1234 		case PANEL_PORT_SELECT_DPD:
1235 			intel_dp_port_enabled(dev_priv, PCH_DP_D, PORT_D, &panel_pipe);
1236 			break;
1237 		default:
1238 			MISSING_CASE(port_sel);
1239 			break;
1240 		}
1241 	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
1242 		/* presumably write lock depends on pipe, not port select */
1243 		pp_reg = PP_CONTROL(pipe);
1244 		panel_pipe = pipe;
1245 	} else {
1246 		u32 port_sel;
1247 
1248 		pp_reg = PP_CONTROL(0);
1249 		port_sel = intel_de_read(dev_priv, PP_ON_DELAYS(0)) & PANEL_PORT_SELECT_MASK;
1250 
1251 		drm_WARN_ON(&dev_priv->drm,
1252 			    port_sel != PANEL_PORT_SELECT_LVDS);
1253 		intel_lvds_port_enabled(dev_priv, LVDS, &panel_pipe);
1254 	}
1255 
1256 	val = intel_de_read(dev_priv, pp_reg);
1257 	if (!(val & PANEL_POWER_ON) ||
1258 	    ((val & PANEL_UNLOCK_MASK) == PANEL_UNLOCK_REGS))
1259 		locked = false;
1260 
1261 	I915_STATE_WARN(panel_pipe == pipe && locked,
1262 	     "panel assertion failure, pipe %c regs locked\n",
1263 	     pipe_name(pipe));
1264 }
1265 
1266 void assert_pipe(struct drm_i915_private *dev_priv,
1267 		 enum transcoder cpu_transcoder, bool state)
1268 {
1269 	bool cur_state;
1270 	enum intel_display_power_domain power_domain;
1271 	intel_wakeref_t wakeref;
1272 
1273 	/* we keep both pipes enabled on 830 */
1274 	if (IS_I830(dev_priv))
1275 		state = true;
1276 
1277 	power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
1278 	wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain);
1279 	if (wakeref) {
1280 		u32 val = intel_de_read(dev_priv, PIPECONF(cpu_transcoder));
1281 		cur_state = !!(val & PIPECONF_ENABLE);
1282 
1283 		intel_display_power_put(dev_priv, power_domain, wakeref);
1284 	} else {
1285 		cur_state = false;
1286 	}
1287 
1288 	I915_STATE_WARN(cur_state != state,
1289 			"transcoder %s assertion failure (expected %s, current %s)\n",
1290 			transcoder_name(cpu_transcoder),
1291 			onoff(state), onoff(cur_state));
1292 }
1293 
1294 static void assert_plane(struct intel_plane *plane, bool state)
1295 {
1296 	enum pipe pipe;
1297 	bool cur_state;
1298 
1299 	cur_state = plane->get_hw_state(plane, &pipe);
1300 
1301 	I915_STATE_WARN(cur_state != state,
1302 			"%s assertion failure (expected %s, current %s)\n",
1303 			plane->base.name, onoff(state), onoff(cur_state));
1304 }
1305 
1306 #define assert_plane_enabled(p) assert_plane(p, true)
1307 #define assert_plane_disabled(p) assert_plane(p, false)
1308 
1309 static void assert_planes_disabled(struct intel_crtc *crtc)
1310 {
1311 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1312 	struct intel_plane *plane;
1313 
1314 	for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, plane)
1315 		assert_plane_disabled(plane);
1316 }
1317 
1318 static void assert_vblank_disabled(struct drm_crtc *crtc)
1319 {
1320 	if (I915_STATE_WARN_ON(drm_crtc_vblank_get(crtc) == 0))
1321 		drm_crtc_vblank_put(crtc);
1322 }
1323 
1324 void assert_pch_transcoder_disabled(struct drm_i915_private *dev_priv,
1325 				    enum pipe pipe)
1326 {
1327 	u32 val;
1328 	bool enabled;
1329 
1330 	val = intel_de_read(dev_priv, PCH_TRANSCONF(pipe));
1331 	enabled = !!(val & TRANS_ENABLE);
1332 	I915_STATE_WARN(enabled,
1333 	     "transcoder assertion failed, should be off on pipe %c but is still active\n",
1334 	     pipe_name(pipe));
1335 }
1336 
1337 static void assert_pch_dp_disabled(struct drm_i915_private *dev_priv,
1338 				   enum pipe pipe, enum port port,
1339 				   i915_reg_t dp_reg)
1340 {
1341 	enum pipe port_pipe;
1342 	bool state;
1343 
1344 	state = intel_dp_port_enabled(dev_priv, dp_reg, port, &port_pipe);
1345 
1346 	I915_STATE_WARN(state && port_pipe == pipe,
1347 			"PCH DP %c enabled on transcoder %c, should be disabled\n",
1348 			port_name(port), pipe_name(pipe));
1349 
1350 	I915_STATE_WARN(HAS_PCH_IBX(dev_priv) && !state && port_pipe == PIPE_B,
1351 			"IBX PCH DP %c still using transcoder B\n",
1352 			port_name(port));
1353 }
1354 
1355 static void assert_pch_hdmi_disabled(struct drm_i915_private *dev_priv,
1356 				     enum pipe pipe, enum port port,
1357 				     i915_reg_t hdmi_reg)
1358 {
1359 	enum pipe port_pipe;
1360 	bool state;
1361 
1362 	state = intel_sdvo_port_enabled(dev_priv, hdmi_reg, &port_pipe);
1363 
1364 	I915_STATE_WARN(state && port_pipe == pipe,
1365 			"PCH HDMI %c enabled on transcoder %c, should be disabled\n",
1366 			port_name(port), pipe_name(pipe));
1367 
1368 	I915_STATE_WARN(HAS_PCH_IBX(dev_priv) && !state && port_pipe == PIPE_B,
1369 			"IBX PCH HDMI %c still using transcoder B\n",
1370 			port_name(port));
1371 }
1372 
1373 static void assert_pch_ports_disabled(struct drm_i915_private *dev_priv,
1374 				      enum pipe pipe)
1375 {
1376 	enum pipe port_pipe;
1377 
1378 	assert_pch_dp_disabled(dev_priv, pipe, PORT_B, PCH_DP_B);
1379 	assert_pch_dp_disabled(dev_priv, pipe, PORT_C, PCH_DP_C);
1380 	assert_pch_dp_disabled(dev_priv, pipe, PORT_D, PCH_DP_D);
1381 
1382 	I915_STATE_WARN(intel_crt_port_enabled(dev_priv, PCH_ADPA, &port_pipe) &&
1383 			port_pipe == pipe,
1384 			"PCH VGA enabled on transcoder %c, should be disabled\n",
1385 			pipe_name(pipe));
1386 
1387 	I915_STATE_WARN(intel_lvds_port_enabled(dev_priv, PCH_LVDS, &port_pipe) &&
1388 			port_pipe == pipe,
1389 			"PCH LVDS enabled on transcoder %c, should be disabled\n",
1390 			pipe_name(pipe));
1391 
1392 	/* PCH SDVOB multiplex with HDMIB */
1393 	assert_pch_hdmi_disabled(dev_priv, pipe, PORT_B, PCH_HDMIB);
1394 	assert_pch_hdmi_disabled(dev_priv, pipe, PORT_C, PCH_HDMIC);
1395 	assert_pch_hdmi_disabled(dev_priv, pipe, PORT_D, PCH_HDMID);
1396 }
1397 
1398 static void _vlv_enable_pll(struct intel_crtc *crtc,
1399 			    const struct intel_crtc_state *pipe_config)
1400 {
1401 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1402 	enum pipe pipe = crtc->pipe;
1403 
1404 	intel_de_write(dev_priv, DPLL(pipe), pipe_config->dpll_hw_state.dpll);
1405 	intel_de_posting_read(dev_priv, DPLL(pipe));
1406 	udelay(150);
1407 
1408 	if (intel_de_wait_for_set(dev_priv, DPLL(pipe), DPLL_LOCK_VLV, 1))
1409 		drm_err(&dev_priv->drm, "DPLL %d failed to lock\n", pipe);
1410 }
1411 
1412 static void vlv_enable_pll(struct intel_crtc *crtc,
1413 			   const struct intel_crtc_state *pipe_config)
1414 {
1415 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1416 	enum pipe pipe = crtc->pipe;
1417 
1418 	assert_pipe_disabled(dev_priv, pipe_config->cpu_transcoder);
1419 
1420 	/* PLL is protected by panel, make sure we can write it */
1421 	assert_panel_unlocked(dev_priv, pipe);
1422 
1423 	if (pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE)
1424 		_vlv_enable_pll(crtc, pipe_config);
1425 
1426 	intel_de_write(dev_priv, DPLL_MD(pipe),
1427 		       pipe_config->dpll_hw_state.dpll_md);
1428 	intel_de_posting_read(dev_priv, DPLL_MD(pipe));
1429 }
1430 
1431 
1432 static void _chv_enable_pll(struct intel_crtc *crtc,
1433 			    const struct intel_crtc_state *pipe_config)
1434 {
1435 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1436 	enum pipe pipe = crtc->pipe;
1437 	enum dpio_channel port = vlv_pipe_to_channel(pipe);
1438 	u32 tmp;
1439 
1440 	vlv_dpio_get(dev_priv);
1441 
1442 	/* Enable back the 10bit clock to display controller */
1443 	tmp = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW14(port));
1444 	tmp |= DPIO_DCLKP_EN;
1445 	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW14(port), tmp);
1446 
1447 	vlv_dpio_put(dev_priv);
1448 
1449 	/*
1450 	 * Need to wait > 100ns between dclkp clock enable bit and PLL enable.
1451 	 */
1452 	udelay(1);
1453 
1454 	/* Enable PLL */
1455 	intel_de_write(dev_priv, DPLL(pipe), pipe_config->dpll_hw_state.dpll);
1456 
1457 	/* Check PLL is locked */
1458 	if (intel_de_wait_for_set(dev_priv, DPLL(pipe), DPLL_LOCK_VLV, 1))
1459 		drm_err(&dev_priv->drm, "PLL %d failed to lock\n", pipe);
1460 }
1461 
1462 static void chv_enable_pll(struct intel_crtc *crtc,
1463 			   const struct intel_crtc_state *pipe_config)
1464 {
1465 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1466 	enum pipe pipe = crtc->pipe;
1467 
1468 	assert_pipe_disabled(dev_priv, pipe_config->cpu_transcoder);
1469 
1470 	/* PLL is protected by panel, make sure we can write it */
1471 	assert_panel_unlocked(dev_priv, pipe);
1472 
1473 	if (pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE)
1474 		_chv_enable_pll(crtc, pipe_config);
1475 
1476 	if (pipe != PIPE_A) {
1477 		/*
1478 		 * WaPixelRepeatModeFixForC0:chv
1479 		 *
1480 		 * DPLLCMD is AWOL. Use chicken bits to propagate
1481 		 * the value from DPLLBMD to either pipe B or C.
1482 		 */
1483 		intel_de_write(dev_priv, CBR4_VLV, CBR_DPLLBMD_PIPE(pipe));
1484 		intel_de_write(dev_priv, DPLL_MD(PIPE_B),
1485 			       pipe_config->dpll_hw_state.dpll_md);
1486 		intel_de_write(dev_priv, CBR4_VLV, 0);
1487 		dev_priv->chv_dpll_md[pipe] = pipe_config->dpll_hw_state.dpll_md;
1488 
1489 		/*
1490 		 * DPLLB VGA mode also seems to cause problems.
1491 		 * We should always have it disabled.
1492 		 */
1493 		drm_WARN_ON(&dev_priv->drm,
1494 			    (intel_de_read(dev_priv, DPLL(PIPE_B)) &
1495 			     DPLL_VGA_MODE_DIS) == 0);
1496 	} else {
1497 		intel_de_write(dev_priv, DPLL_MD(pipe),
1498 			       pipe_config->dpll_hw_state.dpll_md);
1499 		intel_de_posting_read(dev_priv, DPLL_MD(pipe));
1500 	}
1501 }
1502 
1503 static bool i9xx_has_pps(struct drm_i915_private *dev_priv)
1504 {
1505 	if (IS_I830(dev_priv))
1506 		return false;
1507 
1508 	return IS_PINEVIEW(dev_priv) || IS_MOBILE(dev_priv);
1509 }
1510 
1511 static void i9xx_enable_pll(struct intel_crtc *crtc,
1512 			    const struct intel_crtc_state *crtc_state)
1513 {
1514 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1515 	i915_reg_t reg = DPLL(crtc->pipe);
1516 	u32 dpll = crtc_state->dpll_hw_state.dpll;
1517 	int i;
1518 
1519 	assert_pipe_disabled(dev_priv, crtc_state->cpu_transcoder);
1520 
1521 	/* PLL is protected by panel, make sure we can write it */
1522 	if (i9xx_has_pps(dev_priv))
1523 		assert_panel_unlocked(dev_priv, crtc->pipe);
1524 
1525 	/*
1526 	 * Apparently we need to have VGA mode enabled prior to changing
1527 	 * the P1/P2 dividers. Otherwise the DPLL will keep using the old
1528 	 * dividers, even though the register value does change.
1529 	 */
1530 	intel_de_write(dev_priv, reg, dpll & ~DPLL_VGA_MODE_DIS);
1531 	intel_de_write(dev_priv, reg, dpll);
1532 
1533 	/* Wait for the clocks to stabilize. */
1534 	intel_de_posting_read(dev_priv, reg);
1535 	udelay(150);
1536 
1537 	if (INTEL_GEN(dev_priv) >= 4) {
1538 		intel_de_write(dev_priv, DPLL_MD(crtc->pipe),
1539 			       crtc_state->dpll_hw_state.dpll_md);
1540 	} else {
1541 		/* The pixel multiplier can only be updated once the
1542 		 * DPLL is enabled and the clocks are stable.
1543 		 *
1544 		 * So write it again.
1545 		 */
1546 		intel_de_write(dev_priv, reg, dpll);
1547 	}
1548 
1549 	/* We do this three times for luck */
1550 	for (i = 0; i < 3; i++) {
1551 		intel_de_write(dev_priv, reg, dpll);
1552 		intel_de_posting_read(dev_priv, reg);
1553 		udelay(150); /* wait for warmup */
1554 	}
1555 }
1556 
1557 static void i9xx_disable_pll(const struct intel_crtc_state *crtc_state)
1558 {
1559 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
1560 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1561 	enum pipe pipe = crtc->pipe;
1562 
1563 	/* Don't disable pipe or pipe PLLs if needed */
1564 	if (IS_I830(dev_priv))
1565 		return;
1566 
1567 	/* Make sure the pipe isn't still relying on us */
1568 	assert_pipe_disabled(dev_priv, crtc_state->cpu_transcoder);
1569 
1570 	intel_de_write(dev_priv, DPLL(pipe), DPLL_VGA_MODE_DIS);
1571 	intel_de_posting_read(dev_priv, DPLL(pipe));
1572 }
1573 
1574 static void vlv_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
1575 {
1576 	u32 val;
1577 
1578 	/* Make sure the pipe isn't still relying on us */
1579 	assert_pipe_disabled(dev_priv, (enum transcoder)pipe);
1580 
1581 	val = DPLL_INTEGRATED_REF_CLK_VLV |
1582 		DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS;
1583 	if (pipe != PIPE_A)
1584 		val |= DPLL_INTEGRATED_CRI_CLK_VLV;
1585 
1586 	intel_de_write(dev_priv, DPLL(pipe), val);
1587 	intel_de_posting_read(dev_priv, DPLL(pipe));
1588 }
1589 
1590 static void chv_disable_pll(struct drm_i915_private *dev_priv, enum pipe pipe)
1591 {
1592 	enum dpio_channel port = vlv_pipe_to_channel(pipe);
1593 	u32 val;
1594 
1595 	/* Make sure the pipe isn't still relying on us */
1596 	assert_pipe_disabled(dev_priv, (enum transcoder)pipe);
1597 
1598 	val = DPLL_SSC_REF_CLK_CHV |
1599 		DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS;
1600 	if (pipe != PIPE_A)
1601 		val |= DPLL_INTEGRATED_CRI_CLK_VLV;
1602 
1603 	intel_de_write(dev_priv, DPLL(pipe), val);
1604 	intel_de_posting_read(dev_priv, DPLL(pipe));
1605 
1606 	vlv_dpio_get(dev_priv);
1607 
1608 	/* Disable 10bit clock to display controller */
1609 	val = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW14(port));
1610 	val &= ~DPIO_DCLKP_EN;
1611 	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW14(port), val);
1612 
1613 	vlv_dpio_put(dev_priv);
1614 }
1615 
1616 void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
1617 			 struct intel_digital_port *dig_port,
1618 			 unsigned int expected_mask)
1619 {
1620 	u32 port_mask;
1621 	i915_reg_t dpll_reg;
1622 
1623 	switch (dig_port->base.port) {
1624 	case PORT_B:
1625 		port_mask = DPLL_PORTB_READY_MASK;
1626 		dpll_reg = DPLL(0);
1627 		break;
1628 	case PORT_C:
1629 		port_mask = DPLL_PORTC_READY_MASK;
1630 		dpll_reg = DPLL(0);
1631 		expected_mask <<= 4;
1632 		break;
1633 	case PORT_D:
1634 		port_mask = DPLL_PORTD_READY_MASK;
1635 		dpll_reg = DPIO_PHY_STATUS;
1636 		break;
1637 	default:
1638 		BUG();
1639 	}
1640 
1641 	if (intel_de_wait_for_register(dev_priv, dpll_reg,
1642 				       port_mask, expected_mask, 1000))
1643 		drm_WARN(&dev_priv->drm, 1,
1644 			 "timed out waiting for [ENCODER:%d:%s] port ready: got 0x%x, expected 0x%x\n",
1645 			 dig_port->base.base.base.id, dig_port->base.base.name,
1646 			 intel_de_read(dev_priv, dpll_reg) & port_mask,
1647 			 expected_mask);
1648 }
1649 
1650 static void ilk_enable_pch_transcoder(const struct intel_crtc_state *crtc_state)
1651 {
1652 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
1653 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1654 	enum pipe pipe = crtc->pipe;
1655 	i915_reg_t reg;
1656 	u32 val, pipeconf_val;
1657 
1658 	/* Make sure PCH DPLL is enabled */
1659 	assert_shared_dpll_enabled(dev_priv, crtc_state->shared_dpll);
1660 
1661 	/* FDI must be feeding us bits for PCH ports */
1662 	assert_fdi_tx_enabled(dev_priv, pipe);
1663 	assert_fdi_rx_enabled(dev_priv, pipe);
1664 
1665 	if (HAS_PCH_CPT(dev_priv)) {
1666 		reg = TRANS_CHICKEN2(pipe);
1667 		val = intel_de_read(dev_priv, reg);
1668 		/*
1669 		 * Workaround: Set the timing override bit
1670 		 * before enabling the pch transcoder.
1671 		 */
1672 		val |= TRANS_CHICKEN2_TIMING_OVERRIDE;
1673 		/* Configure frame start delay to match the CPU */
1674 		val &= ~TRANS_CHICKEN2_FRAME_START_DELAY_MASK;
1675 		val |= TRANS_CHICKEN2_FRAME_START_DELAY(0);
1676 		intel_de_write(dev_priv, reg, val);
1677 	}
1678 
1679 	reg = PCH_TRANSCONF(pipe);
1680 	val = intel_de_read(dev_priv, reg);
1681 	pipeconf_val = intel_de_read(dev_priv, PIPECONF(pipe));
1682 
1683 	if (HAS_PCH_IBX(dev_priv)) {
1684 		/* Configure frame start delay to match the CPU */
1685 		val &= ~TRANS_FRAME_START_DELAY_MASK;
1686 		val |= TRANS_FRAME_START_DELAY(0);
1687 
1688 		/*
1689 		 * Make the BPC in transcoder be consistent with
1690 		 * that in pipeconf reg. For HDMI we must use 8bpc
1691 		 * here for both 8bpc and 12bpc.
1692 		 */
1693 		val &= ~PIPECONF_BPC_MASK;
1694 		if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
1695 			val |= PIPECONF_8BPC;
1696 		else
1697 			val |= pipeconf_val & PIPECONF_BPC_MASK;
1698 	}
1699 
1700 	val &= ~TRANS_INTERLACE_MASK;
1701 	if ((pipeconf_val & PIPECONF_INTERLACE_MASK) == PIPECONF_INTERLACED_ILK) {
1702 		if (HAS_PCH_IBX(dev_priv) &&
1703 		    intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO))
1704 			val |= TRANS_LEGACY_INTERLACED_ILK;
1705 		else
1706 			val |= TRANS_INTERLACED;
1707 	} else {
1708 		val |= TRANS_PROGRESSIVE;
1709 	}
1710 
1711 	intel_de_write(dev_priv, reg, val | TRANS_ENABLE);
1712 	if (intel_de_wait_for_set(dev_priv, reg, TRANS_STATE_ENABLE, 100))
1713 		drm_err(&dev_priv->drm, "failed to enable transcoder %c\n",
1714 			pipe_name(pipe));
1715 }
1716 
1717 static void lpt_enable_pch_transcoder(struct drm_i915_private *dev_priv,
1718 				      enum transcoder cpu_transcoder)
1719 {
1720 	u32 val, pipeconf_val;
1721 
1722 	/* FDI must be feeding us bits for PCH ports */
1723 	assert_fdi_tx_enabled(dev_priv, (enum pipe) cpu_transcoder);
1724 	assert_fdi_rx_enabled(dev_priv, PIPE_A);
1725 
1726 	val = intel_de_read(dev_priv, TRANS_CHICKEN2(PIPE_A));
1727 	/* Workaround: set timing override bit. */
1728 	val |= TRANS_CHICKEN2_TIMING_OVERRIDE;
1729 	/* Configure frame start delay to match the CPU */
1730 	val &= ~TRANS_CHICKEN2_FRAME_START_DELAY_MASK;
1731 	val |= TRANS_CHICKEN2_FRAME_START_DELAY(0);
1732 	intel_de_write(dev_priv, TRANS_CHICKEN2(PIPE_A), val);
1733 
1734 	val = TRANS_ENABLE;
1735 	pipeconf_val = intel_de_read(dev_priv, PIPECONF(cpu_transcoder));
1736 
1737 	if ((pipeconf_val & PIPECONF_INTERLACE_MASK_HSW) ==
1738 	    PIPECONF_INTERLACED_ILK)
1739 		val |= TRANS_INTERLACED;
1740 	else
1741 		val |= TRANS_PROGRESSIVE;
1742 
1743 	intel_de_write(dev_priv, LPT_TRANSCONF, val);
1744 	if (intel_de_wait_for_set(dev_priv, LPT_TRANSCONF,
1745 				  TRANS_STATE_ENABLE, 100))
1746 		drm_err(&dev_priv->drm, "Failed to enable PCH transcoder\n");
1747 }
1748 
1749 static void ilk_disable_pch_transcoder(struct drm_i915_private *dev_priv,
1750 				       enum pipe pipe)
1751 {
1752 	i915_reg_t reg;
1753 	u32 val;
1754 
1755 	/* FDI relies on the transcoder */
1756 	assert_fdi_tx_disabled(dev_priv, pipe);
1757 	assert_fdi_rx_disabled(dev_priv, pipe);
1758 
1759 	/* Ports must be off as well */
1760 	assert_pch_ports_disabled(dev_priv, pipe);
1761 
1762 	reg = PCH_TRANSCONF(pipe);
1763 	val = intel_de_read(dev_priv, reg);
1764 	val &= ~TRANS_ENABLE;
1765 	intel_de_write(dev_priv, reg, val);
1766 	/* wait for PCH transcoder off, transcoder state */
1767 	if (intel_de_wait_for_clear(dev_priv, reg, TRANS_STATE_ENABLE, 50))
1768 		drm_err(&dev_priv->drm, "failed to disable transcoder %c\n",
1769 			pipe_name(pipe));
1770 
1771 	if (HAS_PCH_CPT(dev_priv)) {
1772 		/* Workaround: Clear the timing override chicken bit again. */
1773 		reg = TRANS_CHICKEN2(pipe);
1774 		val = intel_de_read(dev_priv, reg);
1775 		val &= ~TRANS_CHICKEN2_TIMING_OVERRIDE;
1776 		intel_de_write(dev_priv, reg, val);
1777 	}
1778 }
1779 
1780 void lpt_disable_pch_transcoder(struct drm_i915_private *dev_priv)
1781 {
1782 	u32 val;
1783 
1784 	val = intel_de_read(dev_priv, LPT_TRANSCONF);
1785 	val &= ~TRANS_ENABLE;
1786 	intel_de_write(dev_priv, LPT_TRANSCONF, val);
1787 	/* wait for PCH transcoder off, transcoder state */
1788 	if (intel_de_wait_for_clear(dev_priv, LPT_TRANSCONF,
1789 				    TRANS_STATE_ENABLE, 50))
1790 		drm_err(&dev_priv->drm, "Failed to disable PCH transcoder\n");
1791 
1792 	/* Workaround: clear timing override bit. */
1793 	val = intel_de_read(dev_priv, TRANS_CHICKEN2(PIPE_A));
1794 	val &= ~TRANS_CHICKEN2_TIMING_OVERRIDE;
1795 	intel_de_write(dev_priv, TRANS_CHICKEN2(PIPE_A), val);
1796 }
1797 
1798 enum pipe intel_crtc_pch_transcoder(struct intel_crtc *crtc)
1799 {
1800 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1801 
1802 	if (HAS_PCH_LPT(dev_priv))
1803 		return PIPE_A;
1804 	else
1805 		return crtc->pipe;
1806 }
1807 
1808 static u32 intel_crtc_max_vblank_count(const struct intel_crtc_state *crtc_state)
1809 {
1810 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
1811 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
1812 	u32 mode_flags = crtc->mode_flags;
1813 
1814 	/*
1815 	 * From Gen 11, In case of dsi cmd mode, frame counter wouldnt
1816 	 * have updated at the beginning of TE, if we want to use
1817 	 * the hw counter, then we would find it updated in only
1818 	 * the next TE, hence switching to sw counter.
1819 	 */
1820 	if (mode_flags & (I915_MODE_FLAG_DSI_USE_TE0 | I915_MODE_FLAG_DSI_USE_TE1))
1821 		return 0;
1822 
1823 	/*
1824 	 * On i965gm the hardware frame counter reads
1825 	 * zero when the TV encoder is enabled :(
1826 	 */
1827 	if (IS_I965GM(dev_priv) &&
1828 	    (crtc_state->output_types & BIT(INTEL_OUTPUT_TVOUT)))
1829 		return 0;
1830 
1831 	if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv))
1832 		return 0xffffffff; /* full 32 bit counter */
1833 	else if (INTEL_GEN(dev_priv) >= 3)
1834 		return 0xffffff; /* only 24 bits of frame count */
1835 	else
1836 		return 0; /* Gen2 doesn't have a hardware frame counter */
1837 }
1838 
1839 void intel_crtc_vblank_on(const struct intel_crtc_state *crtc_state)
1840 {
1841 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
1842 
1843 	assert_vblank_disabled(&crtc->base);
1844 	drm_crtc_set_max_vblank_count(&crtc->base,
1845 				      intel_crtc_max_vblank_count(crtc_state));
1846 	drm_crtc_vblank_on(&crtc->base);
1847 }
1848 
1849 void intel_crtc_vblank_off(const struct intel_crtc_state *crtc_state)
1850 {
1851 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
1852 
1853 	drm_crtc_vblank_off(&crtc->base);
1854 	assert_vblank_disabled(&crtc->base);
1855 }
1856 
1857 void intel_enable_pipe(const struct intel_crtc_state *new_crtc_state)
1858 {
1859 	struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
1860 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1861 	enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder;
1862 	enum pipe pipe = crtc->pipe;
1863 	i915_reg_t reg;
1864 	u32 val;
1865 
1866 	drm_dbg_kms(&dev_priv->drm, "enabling pipe %c\n", pipe_name(pipe));
1867 
1868 	assert_planes_disabled(crtc);
1869 
1870 	/*
1871 	 * A pipe without a PLL won't actually be able to drive bits from
1872 	 * a plane.  On ILK+ the pipe PLLs are integrated, so we don't
1873 	 * need the check.
1874 	 */
1875 	if (HAS_GMCH(dev_priv)) {
1876 		if (intel_crtc_has_type(new_crtc_state, INTEL_OUTPUT_DSI))
1877 			assert_dsi_pll_enabled(dev_priv);
1878 		else
1879 			assert_pll_enabled(dev_priv, pipe);
1880 	} else {
1881 		if (new_crtc_state->has_pch_encoder) {
1882 			/* if driving the PCH, we need FDI enabled */
1883 			assert_fdi_rx_pll_enabled(dev_priv,
1884 						  intel_crtc_pch_transcoder(crtc));
1885 			assert_fdi_tx_pll_enabled(dev_priv,
1886 						  (enum pipe) cpu_transcoder);
1887 		}
1888 		/* FIXME: assert CPU port conditions for SNB+ */
1889 	}
1890 
1891 	trace_intel_pipe_enable(crtc);
1892 
1893 	reg = PIPECONF(cpu_transcoder);
1894 	val = intel_de_read(dev_priv, reg);
1895 	if (val & PIPECONF_ENABLE) {
1896 		/* we keep both pipes enabled on 830 */
1897 		drm_WARN_ON(&dev_priv->drm, !IS_I830(dev_priv));
1898 		return;
1899 	}
1900 
1901 	intel_de_write(dev_priv, reg, val | PIPECONF_ENABLE);
1902 	intel_de_posting_read(dev_priv, reg);
1903 
1904 	/*
1905 	 * Until the pipe starts PIPEDSL reads will return a stale value,
1906 	 * which causes an apparent vblank timestamp jump when PIPEDSL
1907 	 * resets to its proper value. That also messes up the frame count
1908 	 * when it's derived from the timestamps. So let's wait for the
1909 	 * pipe to start properly before we call drm_crtc_vblank_on()
1910 	 */
1911 	if (intel_crtc_max_vblank_count(new_crtc_state) == 0)
1912 		intel_wait_for_pipe_scanline_moving(crtc);
1913 }
1914 
1915 void intel_disable_pipe(const struct intel_crtc_state *old_crtc_state)
1916 {
1917 	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
1918 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
1919 	enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder;
1920 	enum pipe pipe = crtc->pipe;
1921 	i915_reg_t reg;
1922 	u32 val;
1923 
1924 	drm_dbg_kms(&dev_priv->drm, "disabling pipe %c\n", pipe_name(pipe));
1925 
1926 	/*
1927 	 * Make sure planes won't keep trying to pump pixels to us,
1928 	 * or we might hang the display.
1929 	 */
1930 	assert_planes_disabled(crtc);
1931 
1932 	trace_intel_pipe_disable(crtc);
1933 
1934 	reg = PIPECONF(cpu_transcoder);
1935 	val = intel_de_read(dev_priv, reg);
1936 	if ((val & PIPECONF_ENABLE) == 0)
1937 		return;
1938 
1939 	/*
1940 	 * Double wide has implications for planes
1941 	 * so best keep it disabled when not needed.
1942 	 */
1943 	if (old_crtc_state->double_wide)
1944 		val &= ~PIPECONF_DOUBLE_WIDE;
1945 
1946 	/* Don't disable pipe or pipe PLLs if needed */
1947 	if (!IS_I830(dev_priv))
1948 		val &= ~PIPECONF_ENABLE;
1949 
1950 	intel_de_write(dev_priv, reg, val);
1951 	if ((val & PIPECONF_ENABLE) == 0)
1952 		intel_wait_for_pipe_off(old_crtc_state);
1953 }
1954 
1955 static unsigned int intel_tile_size(const struct drm_i915_private *dev_priv)
1956 {
1957 	return IS_GEN(dev_priv, 2) ? 2048 : 4096;
1958 }
1959 
1960 static bool is_ccs_plane(const struct drm_framebuffer *fb, int plane)
1961 {
1962 	if (!is_ccs_modifier(fb->modifier))
1963 		return false;
1964 
1965 	return plane >= fb->format->num_planes / 2;
1966 }
1967 
1968 static bool is_gen12_ccs_modifier(u64 modifier)
1969 {
1970 	return modifier == I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS ||
1971 	       modifier == I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS;
1972 
1973 }
1974 
1975 static bool is_gen12_ccs_plane(const struct drm_framebuffer *fb, int plane)
1976 {
1977 	return is_gen12_ccs_modifier(fb->modifier) && is_ccs_plane(fb, plane);
1978 }
1979 
1980 static bool is_aux_plane(const struct drm_framebuffer *fb, int plane)
1981 {
1982 	if (is_ccs_modifier(fb->modifier))
1983 		return is_ccs_plane(fb, plane);
1984 
1985 	return plane == 1;
1986 }
1987 
1988 static int main_to_ccs_plane(const struct drm_framebuffer *fb, int main_plane)
1989 {
1990 	drm_WARN_ON(fb->dev, !is_ccs_modifier(fb->modifier) ||
1991 		    (main_plane && main_plane >= fb->format->num_planes / 2));
1992 
1993 	return fb->format->num_planes / 2 + main_plane;
1994 }
1995 
1996 static int ccs_to_main_plane(const struct drm_framebuffer *fb, int ccs_plane)
1997 {
1998 	drm_WARN_ON(fb->dev, !is_ccs_modifier(fb->modifier) ||
1999 		    ccs_plane < fb->format->num_planes / 2);
2000 
2001 	return ccs_plane - fb->format->num_planes / 2;
2002 }
2003 
2004 int intel_main_to_aux_plane(const struct drm_framebuffer *fb, int main_plane)
2005 {
2006 	struct drm_i915_private *i915 = to_i915(fb->dev);
2007 
2008 	if (is_ccs_modifier(fb->modifier))
2009 		return main_to_ccs_plane(fb, main_plane);
2010 	else if (INTEL_GEN(i915) < 11 &&
2011 		 intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier))
2012 		return 1;
2013 	else
2014 		return 0;
2015 }
2016 
2017 bool
2018 intel_format_info_is_yuv_semiplanar(const struct drm_format_info *info,
2019 				    uint64_t modifier)
2020 {
2021 	return info->is_yuv &&
2022 	       info->num_planes == (is_ccs_modifier(modifier) ? 4 : 2);
2023 }
2024 
2025 static bool is_semiplanar_uv_plane(const struct drm_framebuffer *fb,
2026 				   int color_plane)
2027 {
2028 	return intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier) &&
2029 	       color_plane == 1;
2030 }
2031 
2032 static unsigned int
2033 intel_tile_width_bytes(const struct drm_framebuffer *fb, int color_plane)
2034 {
2035 	struct drm_i915_private *dev_priv = to_i915(fb->dev);
2036 	unsigned int cpp = fb->format->cpp[color_plane];
2037 
2038 	switch (fb->modifier) {
2039 	case DRM_FORMAT_MOD_LINEAR:
2040 		return intel_tile_size(dev_priv);
2041 	case I915_FORMAT_MOD_X_TILED:
2042 		if (IS_GEN(dev_priv, 2))
2043 			return 128;
2044 		else
2045 			return 512;
2046 	case I915_FORMAT_MOD_Y_TILED_CCS:
2047 		if (is_ccs_plane(fb, color_plane))
2048 			return 128;
2049 		fallthrough;
2050 	case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS:
2051 	case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS:
2052 		if (is_ccs_plane(fb, color_plane))
2053 			return 64;
2054 		fallthrough;
2055 	case I915_FORMAT_MOD_Y_TILED:
2056 		if (IS_GEN(dev_priv, 2) || HAS_128_BYTE_Y_TILING(dev_priv))
2057 			return 128;
2058 		else
2059 			return 512;
2060 	case I915_FORMAT_MOD_Yf_TILED_CCS:
2061 		if (is_ccs_plane(fb, color_plane))
2062 			return 128;
2063 		fallthrough;
2064 	case I915_FORMAT_MOD_Yf_TILED:
2065 		switch (cpp) {
2066 		case 1:
2067 			return 64;
2068 		case 2:
2069 		case 4:
2070 			return 128;
2071 		case 8:
2072 		case 16:
2073 			return 256;
2074 		default:
2075 			MISSING_CASE(cpp);
2076 			return cpp;
2077 		}
2078 		break;
2079 	default:
2080 		MISSING_CASE(fb->modifier);
2081 		return cpp;
2082 	}
2083 }
2084 
2085 static unsigned int
2086 intel_tile_height(const struct drm_framebuffer *fb, int color_plane)
2087 {
2088 	if (is_gen12_ccs_plane(fb, color_plane))
2089 		return 1;
2090 
2091 	return intel_tile_size(to_i915(fb->dev)) /
2092 		intel_tile_width_bytes(fb, color_plane);
2093 }
2094 
2095 /* Return the tile dimensions in pixel units */
2096 static void intel_tile_dims(const struct drm_framebuffer *fb, int color_plane,
2097 			    unsigned int *tile_width,
2098 			    unsigned int *tile_height)
2099 {
2100 	unsigned int tile_width_bytes = intel_tile_width_bytes(fb, color_plane);
2101 	unsigned int cpp = fb->format->cpp[color_plane];
2102 
2103 	*tile_width = tile_width_bytes / cpp;
2104 	*tile_height = intel_tile_height(fb, color_plane);
2105 }
2106 
2107 static unsigned int intel_tile_row_size(const struct drm_framebuffer *fb,
2108 					int color_plane)
2109 {
2110 	unsigned int tile_width, tile_height;
2111 
2112 	intel_tile_dims(fb, color_plane, &tile_width, &tile_height);
2113 
2114 	return fb->pitches[color_plane] * tile_height;
2115 }
2116 
2117 unsigned int
2118 intel_fb_align_height(const struct drm_framebuffer *fb,
2119 		      int color_plane, unsigned int height)
2120 {
2121 	unsigned int tile_height = intel_tile_height(fb, color_plane);
2122 
2123 	return ALIGN(height, tile_height);
2124 }
2125 
2126 unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info)
2127 {
2128 	unsigned int size = 0;
2129 	int i;
2130 
2131 	for (i = 0 ; i < ARRAY_SIZE(rot_info->plane); i++)
2132 		size += rot_info->plane[i].width * rot_info->plane[i].height;
2133 
2134 	return size;
2135 }
2136 
2137 unsigned int intel_remapped_info_size(const struct intel_remapped_info *rem_info)
2138 {
2139 	unsigned int size = 0;
2140 	int i;
2141 
2142 	for (i = 0 ; i < ARRAY_SIZE(rem_info->plane); i++)
2143 		size += rem_info->plane[i].width * rem_info->plane[i].height;
2144 
2145 	return size;
2146 }
2147 
2148 static void
2149 intel_fill_fb_ggtt_view(struct i915_ggtt_view *view,
2150 			const struct drm_framebuffer *fb,
2151 			unsigned int rotation)
2152 {
2153 	view->type = I915_GGTT_VIEW_NORMAL;
2154 	if (drm_rotation_90_or_270(rotation)) {
2155 		view->type = I915_GGTT_VIEW_ROTATED;
2156 		view->rotated = to_intel_framebuffer(fb)->rot_info;
2157 	}
2158 }
2159 
2160 static unsigned int intel_cursor_alignment(const struct drm_i915_private *dev_priv)
2161 {
2162 	if (IS_I830(dev_priv))
2163 		return 16 * 1024;
2164 	else if (IS_I85X(dev_priv))
2165 		return 256;
2166 	else if (IS_I845G(dev_priv) || IS_I865G(dev_priv))
2167 		return 32;
2168 	else
2169 		return 4 * 1024;
2170 }
2171 
2172 static unsigned int intel_linear_alignment(const struct drm_i915_private *dev_priv)
2173 {
2174 	if (INTEL_GEN(dev_priv) >= 9)
2175 		return 256 * 1024;
2176 	else if (IS_I965G(dev_priv) || IS_I965GM(dev_priv) ||
2177 		 IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
2178 		return 128 * 1024;
2179 	else if (INTEL_GEN(dev_priv) >= 4)
2180 		return 4 * 1024;
2181 	else
2182 		return 0;
2183 }
2184 
2185 static unsigned int intel_surf_alignment(const struct drm_framebuffer *fb,
2186 					 int color_plane)
2187 {
2188 	struct drm_i915_private *dev_priv = to_i915(fb->dev);
2189 
2190 	/* AUX_DIST needs only 4K alignment */
2191 	if ((INTEL_GEN(dev_priv) < 12 && is_aux_plane(fb, color_plane)) ||
2192 	    is_ccs_plane(fb, color_plane))
2193 		return 4096;
2194 
2195 	switch (fb->modifier) {
2196 	case DRM_FORMAT_MOD_LINEAR:
2197 		return intel_linear_alignment(dev_priv);
2198 	case I915_FORMAT_MOD_X_TILED:
2199 		if (INTEL_GEN(dev_priv) >= 9)
2200 			return 256 * 1024;
2201 		return 0;
2202 	case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS:
2203 		if (is_semiplanar_uv_plane(fb, color_plane))
2204 			return intel_tile_row_size(fb, color_plane);
2205 		fallthrough;
2206 	case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS:
2207 		return 16 * 1024;
2208 	case I915_FORMAT_MOD_Y_TILED_CCS:
2209 	case I915_FORMAT_MOD_Yf_TILED_CCS:
2210 	case I915_FORMAT_MOD_Y_TILED:
2211 		if (INTEL_GEN(dev_priv) >= 12 &&
2212 		    is_semiplanar_uv_plane(fb, color_plane))
2213 			return intel_tile_row_size(fb, color_plane);
2214 		fallthrough;
2215 	case I915_FORMAT_MOD_Yf_TILED:
2216 		return 1 * 1024 * 1024;
2217 	default:
2218 		MISSING_CASE(fb->modifier);
2219 		return 0;
2220 	}
2221 }
2222 
2223 static bool intel_plane_uses_fence(const struct intel_plane_state *plane_state)
2224 {
2225 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
2226 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
2227 
2228 	return INTEL_GEN(dev_priv) < 4 ||
2229 		(plane->has_fbc &&
2230 		 plane_state->view.type == I915_GGTT_VIEW_NORMAL);
2231 }
2232 
2233 struct i915_vma *
2234 intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb,
2235 			   const struct i915_ggtt_view *view,
2236 			   bool uses_fence,
2237 			   unsigned long *out_flags)
2238 {
2239 	struct drm_device *dev = fb->dev;
2240 	struct drm_i915_private *dev_priv = to_i915(dev);
2241 	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
2242 	intel_wakeref_t wakeref;
2243 	struct i915_vma *vma;
2244 	unsigned int pinctl;
2245 	u32 alignment;
2246 
2247 	if (drm_WARN_ON(dev, !i915_gem_object_is_framebuffer(obj)))
2248 		return ERR_PTR(-EINVAL);
2249 
2250 	alignment = intel_surf_alignment(fb, 0);
2251 	if (drm_WARN_ON(dev, alignment && !is_power_of_2(alignment)))
2252 		return ERR_PTR(-EINVAL);
2253 
2254 	/* Note that the w/a also requires 64 PTE of padding following the
2255 	 * bo. We currently fill all unused PTE with the shadow page and so
2256 	 * we should always have valid PTE following the scanout preventing
2257 	 * the VT-d warning.
2258 	 */
2259 	if (intel_scanout_needs_vtd_wa(dev_priv) && alignment < 256 * 1024)
2260 		alignment = 256 * 1024;
2261 
2262 	/*
2263 	 * Global gtt pte registers are special registers which actually forward
2264 	 * writes to a chunk of system memory. Which means that there is no risk
2265 	 * that the register values disappear as soon as we call
2266 	 * intel_runtime_pm_put(), so it is correct to wrap only the
2267 	 * pin/unpin/fence and not more.
2268 	 */
2269 	wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
2270 
2271 	atomic_inc(&dev_priv->gpu_error.pending_fb_pin);
2272 
2273 	/*
2274 	 * Valleyview is definitely limited to scanning out the first
2275 	 * 512MiB. Lets presume this behaviour was inherited from the
2276 	 * g4x display engine and that all earlier gen are similarly
2277 	 * limited. Testing suggests that it is a little more
2278 	 * complicated than this. For example, Cherryview appears quite
2279 	 * happy to scanout from anywhere within its global aperture.
2280 	 */
2281 	pinctl = 0;
2282 	if (HAS_GMCH(dev_priv))
2283 		pinctl |= PIN_MAPPABLE;
2284 
2285 	vma = i915_gem_object_pin_to_display_plane(obj,
2286 						   alignment, view, pinctl);
2287 	if (IS_ERR(vma))
2288 		goto err;
2289 
2290 	if (uses_fence && i915_vma_is_map_and_fenceable(vma)) {
2291 		int ret;
2292 
2293 		/*
2294 		 * Install a fence for tiled scan-out. Pre-i965 always needs a
2295 		 * fence, whereas 965+ only requires a fence if using
2296 		 * framebuffer compression.  For simplicity, we always, when
2297 		 * possible, install a fence as the cost is not that onerous.
2298 		 *
2299 		 * If we fail to fence the tiled scanout, then either the
2300 		 * modeset will reject the change (which is highly unlikely as
2301 		 * the affected systems, all but one, do not have unmappable
2302 		 * space) or we will not be able to enable full powersaving
2303 		 * techniques (also likely not to apply due to various limits
2304 		 * FBC and the like impose on the size of the buffer, which
2305 		 * presumably we violated anyway with this unmappable buffer).
2306 		 * Anyway, it is presumably better to stumble onwards with
2307 		 * something and try to run the system in a "less than optimal"
2308 		 * mode that matches the user configuration.
2309 		 */
2310 		ret = i915_vma_pin_fence(vma);
2311 		if (ret != 0 && INTEL_GEN(dev_priv) < 4) {
2312 			i915_gem_object_unpin_from_display_plane(vma);
2313 			vma = ERR_PTR(ret);
2314 			goto err;
2315 		}
2316 
2317 		if (ret == 0 && vma->fence)
2318 			*out_flags |= PLANE_HAS_FENCE;
2319 	}
2320 
2321 	i915_vma_get(vma);
2322 err:
2323 	atomic_dec(&dev_priv->gpu_error.pending_fb_pin);
2324 	intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
2325 	return vma;
2326 }
2327 
2328 void intel_unpin_fb_vma(struct i915_vma *vma, unsigned long flags)
2329 {
2330 	i915_gem_object_lock(vma->obj, NULL);
2331 	if (flags & PLANE_HAS_FENCE)
2332 		i915_vma_unpin_fence(vma);
2333 	i915_gem_object_unpin_from_display_plane(vma);
2334 	i915_gem_object_unlock(vma->obj);
2335 
2336 	i915_vma_put(vma);
2337 }
2338 
2339 static int intel_fb_pitch(const struct drm_framebuffer *fb, int color_plane,
2340 			  unsigned int rotation)
2341 {
2342 	if (drm_rotation_90_or_270(rotation))
2343 		return to_intel_framebuffer(fb)->rotated[color_plane].pitch;
2344 	else
2345 		return fb->pitches[color_plane];
2346 }
2347 
2348 /*
2349  * Convert the x/y offsets into a linear offset.
2350  * Only valid with 0/180 degree rotation, which is fine since linear
2351  * offset is only used with linear buffers on pre-hsw and tiled buffers
2352  * with gen2/3, and 90/270 degree rotations isn't supported on any of them.
2353  */
2354 u32 intel_fb_xy_to_linear(int x, int y,
2355 			  const struct intel_plane_state *state,
2356 			  int color_plane)
2357 {
2358 	const struct drm_framebuffer *fb = state->hw.fb;
2359 	unsigned int cpp = fb->format->cpp[color_plane];
2360 	unsigned int pitch = state->color_plane[color_plane].stride;
2361 
2362 	return y * pitch + x * cpp;
2363 }
2364 
2365 /*
2366  * Add the x/y offsets derived from fb->offsets[] to the user
2367  * specified plane src x/y offsets. The resulting x/y offsets
2368  * specify the start of scanout from the beginning of the gtt mapping.
2369  */
2370 void intel_add_fb_offsets(int *x, int *y,
2371 			  const struct intel_plane_state *state,
2372 			  int color_plane)
2373 
2374 {
2375 	*x += state->color_plane[color_plane].x;
2376 	*y += state->color_plane[color_plane].y;
2377 }
2378 
2379 static u32 intel_adjust_tile_offset(int *x, int *y,
2380 				    unsigned int tile_width,
2381 				    unsigned int tile_height,
2382 				    unsigned int tile_size,
2383 				    unsigned int pitch_tiles,
2384 				    u32 old_offset,
2385 				    u32 new_offset)
2386 {
2387 	unsigned int pitch_pixels = pitch_tiles * tile_width;
2388 	unsigned int tiles;
2389 
2390 	WARN_ON(old_offset & (tile_size - 1));
2391 	WARN_ON(new_offset & (tile_size - 1));
2392 	WARN_ON(new_offset > old_offset);
2393 
2394 	tiles = (old_offset - new_offset) / tile_size;
2395 
2396 	*y += tiles / pitch_tiles * tile_height;
2397 	*x += tiles % pitch_tiles * tile_width;
2398 
2399 	/* minimize x in case it got needlessly big */
2400 	*y += *x / pitch_pixels * tile_height;
2401 	*x %= pitch_pixels;
2402 
2403 	return new_offset;
2404 }
2405 
2406 static bool is_surface_linear(const struct drm_framebuffer *fb, int color_plane)
2407 {
2408 	return fb->modifier == DRM_FORMAT_MOD_LINEAR ||
2409 	       is_gen12_ccs_plane(fb, color_plane);
2410 }
2411 
2412 static u32 intel_adjust_aligned_offset(int *x, int *y,
2413 				       const struct drm_framebuffer *fb,
2414 				       int color_plane,
2415 				       unsigned int rotation,
2416 				       unsigned int pitch,
2417 				       u32 old_offset, u32 new_offset)
2418 {
2419 	struct drm_i915_private *dev_priv = to_i915(fb->dev);
2420 	unsigned int cpp = fb->format->cpp[color_plane];
2421 
2422 	drm_WARN_ON(&dev_priv->drm, new_offset > old_offset);
2423 
2424 	if (!is_surface_linear(fb, color_plane)) {
2425 		unsigned int tile_size, tile_width, tile_height;
2426 		unsigned int pitch_tiles;
2427 
2428 		tile_size = intel_tile_size(dev_priv);
2429 		intel_tile_dims(fb, color_plane, &tile_width, &tile_height);
2430 
2431 		if (drm_rotation_90_or_270(rotation)) {
2432 			pitch_tiles = pitch / tile_height;
2433 			swap(tile_width, tile_height);
2434 		} else {
2435 			pitch_tiles = pitch / (tile_width * cpp);
2436 		}
2437 
2438 		intel_adjust_tile_offset(x, y, tile_width, tile_height,
2439 					 tile_size, pitch_tiles,
2440 					 old_offset, new_offset);
2441 	} else {
2442 		old_offset += *y * pitch + *x * cpp;
2443 
2444 		*y = (old_offset - new_offset) / pitch;
2445 		*x = ((old_offset - new_offset) - *y * pitch) / cpp;
2446 	}
2447 
2448 	return new_offset;
2449 }
2450 
2451 /*
2452  * Adjust the tile offset by moving the difference into
2453  * the x/y offsets.
2454  */
2455 static u32 intel_plane_adjust_aligned_offset(int *x, int *y,
2456 					     const struct intel_plane_state *state,
2457 					     int color_plane,
2458 					     u32 old_offset, u32 new_offset)
2459 {
2460 	return intel_adjust_aligned_offset(x, y, state->hw.fb, color_plane,
2461 					   state->hw.rotation,
2462 					   state->color_plane[color_plane].stride,
2463 					   old_offset, new_offset);
2464 }
2465 
2466 /*
2467  * Computes the aligned offset to the base tile and adjusts
2468  * x, y. bytes per pixel is assumed to be a power-of-two.
2469  *
2470  * In the 90/270 rotated case, x and y are assumed
2471  * to be already rotated to match the rotated GTT view, and
2472  * pitch is the tile_height aligned framebuffer height.
2473  *
2474  * This function is used when computing the derived information
2475  * under intel_framebuffer, so using any of that information
2476  * here is not allowed. Anything under drm_framebuffer can be
2477  * used. This is why the user has to pass in the pitch since it
2478  * is specified in the rotated orientation.
2479  */
2480 static u32 intel_compute_aligned_offset(struct drm_i915_private *dev_priv,
2481 					int *x, int *y,
2482 					const struct drm_framebuffer *fb,
2483 					int color_plane,
2484 					unsigned int pitch,
2485 					unsigned int rotation,
2486 					u32 alignment)
2487 {
2488 	unsigned int cpp = fb->format->cpp[color_plane];
2489 	u32 offset, offset_aligned;
2490 
2491 	if (!is_surface_linear(fb, color_plane)) {
2492 		unsigned int tile_size, tile_width, tile_height;
2493 		unsigned int tile_rows, tiles, pitch_tiles;
2494 
2495 		tile_size = intel_tile_size(dev_priv);
2496 		intel_tile_dims(fb, color_plane, &tile_width, &tile_height);
2497 
2498 		if (drm_rotation_90_or_270(rotation)) {
2499 			pitch_tiles = pitch / tile_height;
2500 			swap(tile_width, tile_height);
2501 		} else {
2502 			pitch_tiles = pitch / (tile_width * cpp);
2503 		}
2504 
2505 		tile_rows = *y / tile_height;
2506 		*y %= tile_height;
2507 
2508 		tiles = *x / tile_width;
2509 		*x %= tile_width;
2510 
2511 		offset = (tile_rows * pitch_tiles + tiles) * tile_size;
2512 
2513 		offset_aligned = offset;
2514 		if (alignment)
2515 			offset_aligned = rounddown(offset_aligned, alignment);
2516 
2517 		intel_adjust_tile_offset(x, y, tile_width, tile_height,
2518 					 tile_size, pitch_tiles,
2519 					 offset, offset_aligned);
2520 	} else {
2521 		offset = *y * pitch + *x * cpp;
2522 		offset_aligned = offset;
2523 		if (alignment) {
2524 			offset_aligned = rounddown(offset_aligned, alignment);
2525 			*y = (offset % alignment) / pitch;
2526 			*x = ((offset % alignment) - *y * pitch) / cpp;
2527 		} else {
2528 			*y = *x = 0;
2529 		}
2530 	}
2531 
2532 	return offset_aligned;
2533 }
2534 
2535 static u32 intel_plane_compute_aligned_offset(int *x, int *y,
2536 					      const struct intel_plane_state *state,
2537 					      int color_plane)
2538 {
2539 	struct intel_plane *intel_plane = to_intel_plane(state->uapi.plane);
2540 	struct drm_i915_private *dev_priv = to_i915(intel_plane->base.dev);
2541 	const struct drm_framebuffer *fb = state->hw.fb;
2542 	unsigned int rotation = state->hw.rotation;
2543 	int pitch = state->color_plane[color_plane].stride;
2544 	u32 alignment;
2545 
2546 	if (intel_plane->id == PLANE_CURSOR)
2547 		alignment = intel_cursor_alignment(dev_priv);
2548 	else
2549 		alignment = intel_surf_alignment(fb, color_plane);
2550 
2551 	return intel_compute_aligned_offset(dev_priv, x, y, fb, color_plane,
2552 					    pitch, rotation, alignment);
2553 }
2554 
2555 /* Convert the fb->offset[] into x/y offsets */
2556 static int intel_fb_offset_to_xy(int *x, int *y,
2557 				 const struct drm_framebuffer *fb,
2558 				 int color_plane)
2559 {
2560 	struct drm_i915_private *dev_priv = to_i915(fb->dev);
2561 	unsigned int height;
2562 	u32 alignment;
2563 
2564 	if (INTEL_GEN(dev_priv) >= 12 &&
2565 	    is_semiplanar_uv_plane(fb, color_plane))
2566 		alignment = intel_tile_row_size(fb, color_plane);
2567 	else if (fb->modifier != DRM_FORMAT_MOD_LINEAR)
2568 		alignment = intel_tile_size(dev_priv);
2569 	else
2570 		alignment = 0;
2571 
2572 	if (alignment != 0 && fb->offsets[color_plane] % alignment) {
2573 		drm_dbg_kms(&dev_priv->drm,
2574 			    "Misaligned offset 0x%08x for color plane %d\n",
2575 			    fb->offsets[color_plane], color_plane);
2576 		return -EINVAL;
2577 	}
2578 
2579 	height = drm_framebuffer_plane_height(fb->height, fb, color_plane);
2580 	height = ALIGN(height, intel_tile_height(fb, color_plane));
2581 
2582 	/* Catch potential overflows early */
2583 	if (add_overflows_t(u32, mul_u32_u32(height, fb->pitches[color_plane]),
2584 			    fb->offsets[color_plane])) {
2585 		drm_dbg_kms(&dev_priv->drm,
2586 			    "Bad offset 0x%08x or pitch %d for color plane %d\n",
2587 			    fb->offsets[color_plane], fb->pitches[color_plane],
2588 			    color_plane);
2589 		return -ERANGE;
2590 	}
2591 
2592 	*x = 0;
2593 	*y = 0;
2594 
2595 	intel_adjust_aligned_offset(x, y,
2596 				    fb, color_plane, DRM_MODE_ROTATE_0,
2597 				    fb->pitches[color_plane],
2598 				    fb->offsets[color_plane], 0);
2599 
2600 	return 0;
2601 }
2602 
2603 static unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)
2604 {
2605 	switch (fb_modifier) {
2606 	case I915_FORMAT_MOD_X_TILED:
2607 		return I915_TILING_X;
2608 	case I915_FORMAT_MOD_Y_TILED:
2609 	case I915_FORMAT_MOD_Y_TILED_CCS:
2610 	case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS:
2611 	case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS:
2612 		return I915_TILING_Y;
2613 	default:
2614 		return I915_TILING_NONE;
2615 	}
2616 }
2617 
2618 /*
2619  * From the Sky Lake PRM:
2620  * "The Color Control Surface (CCS) contains the compression status of
2621  *  the cache-line pairs. The compression state of the cache-line pair
2622  *  is specified by 2 bits in the CCS. Each CCS cache-line represents
2623  *  an area on the main surface of 16 x16 sets of 128 byte Y-tiled
2624  *  cache-line-pairs. CCS is always Y tiled."
2625  *
2626  * Since cache line pairs refers to horizontally adjacent cache lines,
2627  * each cache line in the CCS corresponds to an area of 32x16 cache
2628  * lines on the main surface. Since each pixel is 4 bytes, this gives
2629  * us a ratio of one byte in the CCS for each 8x16 pixels in the
2630  * main surface.
2631  */
2632 static const struct drm_format_info skl_ccs_formats[] = {
2633 	{ .format = DRM_FORMAT_XRGB8888, .depth = 24, .num_planes = 2,
2634 	  .cpp = { 4, 1, }, .hsub = 8, .vsub = 16, },
2635 	{ .format = DRM_FORMAT_XBGR8888, .depth = 24, .num_planes = 2,
2636 	  .cpp = { 4, 1, }, .hsub = 8, .vsub = 16, },
2637 	{ .format = DRM_FORMAT_ARGB8888, .depth = 32, .num_planes = 2,
2638 	  .cpp = { 4, 1, }, .hsub = 8, .vsub = 16, .has_alpha = true, },
2639 	{ .format = DRM_FORMAT_ABGR8888, .depth = 32, .num_planes = 2,
2640 	  .cpp = { 4, 1, }, .hsub = 8, .vsub = 16, .has_alpha = true, },
2641 };
2642 
2643 /*
2644  * Gen-12 compression uses 4 bits of CCS data for each cache line pair in the
2645  * main surface. And each 64B CCS cache line represents an area of 4x1 Y-tiles
2646  * in the main surface. With 4 byte pixels and each Y-tile having dimensions of
2647  * 32x32 pixels, the ratio turns out to 1B in the CCS for every 2x32 pixels in
2648  * the main surface.
2649  */
2650 static const struct drm_format_info gen12_ccs_formats[] = {
2651 	{ .format = DRM_FORMAT_XRGB8888, .depth = 24, .num_planes = 2,
2652 	  .char_per_block = { 4, 1 }, .block_w = { 1, 2 }, .block_h = { 1, 1 },
2653 	  .hsub = 1, .vsub = 1, },
2654 	{ .format = DRM_FORMAT_XBGR8888, .depth = 24, .num_planes = 2,
2655 	  .char_per_block = { 4, 1 }, .block_w = { 1, 2 }, .block_h = { 1, 1 },
2656 	  .hsub = 1, .vsub = 1, },
2657 	{ .format = DRM_FORMAT_ARGB8888, .depth = 32, .num_planes = 2,
2658 	  .char_per_block = { 4, 1 }, .block_w = { 1, 2 }, .block_h = { 1, 1 },
2659 	  .hsub = 1, .vsub = 1, .has_alpha = true },
2660 	{ .format = DRM_FORMAT_ABGR8888, .depth = 32, .num_planes = 2,
2661 	  .char_per_block = { 4, 1 }, .block_w = { 1, 2 }, .block_h = { 1, 1 },
2662 	  .hsub = 1, .vsub = 1, .has_alpha = true },
2663 	{ .format = DRM_FORMAT_YUYV, .num_planes = 2,
2664 	  .char_per_block = { 2, 1 }, .block_w = { 1, 2 }, .block_h = { 1, 1 },
2665 	  .hsub = 2, .vsub = 1, .is_yuv = true },
2666 	{ .format = DRM_FORMAT_YVYU, .num_planes = 2,
2667 	  .char_per_block = { 2, 1 }, .block_w = { 1, 2 }, .block_h = { 1, 1 },
2668 	  .hsub = 2, .vsub = 1, .is_yuv = true },
2669 	{ .format = DRM_FORMAT_UYVY, .num_planes = 2,
2670 	  .char_per_block = { 2, 1 }, .block_w = { 1, 2 }, .block_h = { 1, 1 },
2671 	  .hsub = 2, .vsub = 1, .is_yuv = true },
2672 	{ .format = DRM_FORMAT_VYUY, .num_planes = 2,
2673 	  .char_per_block = { 2, 1 }, .block_w = { 1, 2 }, .block_h = { 1, 1 },
2674 	  .hsub = 2, .vsub = 1, .is_yuv = true },
2675 	{ .format = DRM_FORMAT_NV12, .num_planes = 4,
2676 	  .char_per_block = { 1, 2, 1, 1 }, .block_w = { 1, 1, 4, 4 }, .block_h = { 1, 1, 1, 1 },
2677 	  .hsub = 2, .vsub = 2, .is_yuv = true },
2678 	{ .format = DRM_FORMAT_P010, .num_planes = 4,
2679 	  .char_per_block = { 2, 4, 1, 1 }, .block_w = { 1, 1, 2, 2 }, .block_h = { 1, 1, 1, 1 },
2680 	  .hsub = 2, .vsub = 2, .is_yuv = true },
2681 	{ .format = DRM_FORMAT_P012, .num_planes = 4,
2682 	  .char_per_block = { 2, 4, 1, 1 }, .block_w = { 1, 1, 2, 2 }, .block_h = { 1, 1, 1, 1 },
2683 	  .hsub = 2, .vsub = 2, .is_yuv = true },
2684 	{ .format = DRM_FORMAT_P016, .num_planes = 4,
2685 	  .char_per_block = { 2, 4, 1, 1 }, .block_w = { 1, 1, 2, 2 }, .block_h = { 1, 1, 1, 1 },
2686 	  .hsub = 2, .vsub = 2, .is_yuv = true },
2687 };
2688 
2689 static const struct drm_format_info *
2690 lookup_format_info(const struct drm_format_info formats[],
2691 		   int num_formats, u32 format)
2692 {
2693 	int i;
2694 
2695 	for (i = 0; i < num_formats; i++) {
2696 		if (formats[i].format == format)
2697 			return &formats[i];
2698 	}
2699 
2700 	return NULL;
2701 }
2702 
2703 static const struct drm_format_info *
2704 intel_get_format_info(const struct drm_mode_fb_cmd2 *cmd)
2705 {
2706 	switch (cmd->modifier[0]) {
2707 	case I915_FORMAT_MOD_Y_TILED_CCS:
2708 	case I915_FORMAT_MOD_Yf_TILED_CCS:
2709 		return lookup_format_info(skl_ccs_formats,
2710 					  ARRAY_SIZE(skl_ccs_formats),
2711 					  cmd->pixel_format);
2712 	case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS:
2713 	case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS:
2714 		return lookup_format_info(gen12_ccs_formats,
2715 					  ARRAY_SIZE(gen12_ccs_formats),
2716 					  cmd->pixel_format);
2717 	default:
2718 		return NULL;
2719 	}
2720 }
2721 
2722 bool is_ccs_modifier(u64 modifier)
2723 {
2724 	return modifier == I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS ||
2725 	       modifier == I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS ||
2726 	       modifier == I915_FORMAT_MOD_Y_TILED_CCS ||
2727 	       modifier == I915_FORMAT_MOD_Yf_TILED_CCS;
2728 }
2729 
2730 static int gen12_ccs_aux_stride(struct drm_framebuffer *fb, int ccs_plane)
2731 {
2732 	return DIV_ROUND_UP(fb->pitches[ccs_to_main_plane(fb, ccs_plane)],
2733 			    512) * 64;
2734 }
2735 
2736 u32 intel_plane_fb_max_stride(struct drm_i915_private *dev_priv,
2737 			      u32 pixel_format, u64 modifier)
2738 {
2739 	struct intel_crtc *crtc;
2740 	struct intel_plane *plane;
2741 
2742 	/*
2743 	 * We assume the primary plane for pipe A has
2744 	 * the highest stride limits of them all,
2745 	 * if in case pipe A is disabled, use the first pipe from pipe_mask.
2746 	 */
2747 	crtc = intel_get_first_crtc(dev_priv);
2748 	if (!crtc)
2749 		return 0;
2750 
2751 	plane = to_intel_plane(crtc->base.primary);
2752 
2753 	return plane->max_stride(plane, pixel_format, modifier,
2754 				 DRM_MODE_ROTATE_0);
2755 }
2756 
2757 static
2758 u32 intel_fb_max_stride(struct drm_i915_private *dev_priv,
2759 			u32 pixel_format, u64 modifier)
2760 {
2761 	/*
2762 	 * Arbitrary limit for gen4+ chosen to match the
2763 	 * render engine max stride.
2764 	 *
2765 	 * The new CCS hash mode makes remapping impossible
2766 	 */
2767 	if (!is_ccs_modifier(modifier)) {
2768 		if (INTEL_GEN(dev_priv) >= 7)
2769 			return 256*1024;
2770 		else if (INTEL_GEN(dev_priv) >= 4)
2771 			return 128*1024;
2772 	}
2773 
2774 	return intel_plane_fb_max_stride(dev_priv, pixel_format, modifier);
2775 }
2776 
2777 static u32
2778 intel_fb_stride_alignment(const struct drm_framebuffer *fb, int color_plane)
2779 {
2780 	struct drm_i915_private *dev_priv = to_i915(fb->dev);
2781 	u32 tile_width;
2782 
2783 	if (is_surface_linear(fb, color_plane)) {
2784 		u32 max_stride = intel_plane_fb_max_stride(dev_priv,
2785 							   fb->format->format,
2786 							   fb->modifier);
2787 
2788 		/*
2789 		 * To make remapping with linear generally feasible
2790 		 * we need the stride to be page aligned.
2791 		 */
2792 		if (fb->pitches[color_plane] > max_stride &&
2793 		    !is_ccs_modifier(fb->modifier))
2794 			return intel_tile_size(dev_priv);
2795 		else
2796 			return 64;
2797 	}
2798 
2799 	tile_width = intel_tile_width_bytes(fb, color_plane);
2800 	if (is_ccs_modifier(fb->modifier)) {
2801 		/*
2802 		 * Display WA #0531: skl,bxt,kbl,glk
2803 		 *
2804 		 * Render decompression and plane width > 3840
2805 		 * combined with horizontal panning requires the
2806 		 * plane stride to be a multiple of 4. We'll just
2807 		 * require the entire fb to accommodate that to avoid
2808 		 * potential runtime errors at plane configuration time.
2809 		 */
2810 		if (IS_GEN(dev_priv, 9) && color_plane == 0 && fb->width > 3840)
2811 			tile_width *= 4;
2812 		/*
2813 		 * The main surface pitch must be padded to a multiple of four
2814 		 * tile widths.
2815 		 */
2816 		else if (INTEL_GEN(dev_priv) >= 12)
2817 			tile_width *= 4;
2818 	}
2819 	return tile_width;
2820 }
2821 
2822 bool intel_plane_can_remap(const struct intel_plane_state *plane_state)
2823 {
2824 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
2825 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
2826 	const struct drm_framebuffer *fb = plane_state->hw.fb;
2827 	int i;
2828 
2829 	/* We don't want to deal with remapping with cursors */
2830 	if (plane->id == PLANE_CURSOR)
2831 		return false;
2832 
2833 	/*
2834 	 * The display engine limits already match/exceed the
2835 	 * render engine limits, so not much point in remapping.
2836 	 * Would also need to deal with the fence POT alignment
2837 	 * and gen2 2KiB GTT tile size.
2838 	 */
2839 	if (INTEL_GEN(dev_priv) < 4)
2840 		return false;
2841 
2842 	/*
2843 	 * The new CCS hash mode isn't compatible with remapping as
2844 	 * the virtual address of the pages affects the compressed data.
2845 	 */
2846 	if (is_ccs_modifier(fb->modifier))
2847 		return false;
2848 
2849 	/* Linear needs a page aligned stride for remapping */
2850 	if (fb->modifier == DRM_FORMAT_MOD_LINEAR) {
2851 		unsigned int alignment = intel_tile_size(dev_priv) - 1;
2852 
2853 		for (i = 0; i < fb->format->num_planes; i++) {
2854 			if (fb->pitches[i] & alignment)
2855 				return false;
2856 		}
2857 	}
2858 
2859 	return true;
2860 }
2861 
2862 static bool intel_plane_needs_remap(const struct intel_plane_state *plane_state)
2863 {
2864 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
2865 	const struct drm_framebuffer *fb = plane_state->hw.fb;
2866 	unsigned int rotation = plane_state->hw.rotation;
2867 	u32 stride, max_stride;
2868 
2869 	/*
2870 	 * No remapping for invisible planes since we don't have
2871 	 * an actual source viewport to remap.
2872 	 */
2873 	if (!plane_state->uapi.visible)
2874 		return false;
2875 
2876 	if (!intel_plane_can_remap(plane_state))
2877 		return false;
2878 
2879 	/*
2880 	 * FIXME: aux plane limits on gen9+ are
2881 	 * unclear in Bspec, for now no checking.
2882 	 */
2883 	stride = intel_fb_pitch(fb, 0, rotation);
2884 	max_stride = plane->max_stride(plane, fb->format->format,
2885 				       fb->modifier, rotation);
2886 
2887 	return stride > max_stride;
2888 }
2889 
2890 static void
2891 intel_fb_plane_get_subsampling(int *hsub, int *vsub,
2892 			       const struct drm_framebuffer *fb,
2893 			       int color_plane)
2894 {
2895 	int main_plane;
2896 
2897 	if (color_plane == 0) {
2898 		*hsub = 1;
2899 		*vsub = 1;
2900 
2901 		return;
2902 	}
2903 
2904 	/*
2905 	 * TODO: Deduct the subsampling from the char block for all CCS
2906 	 * formats and planes.
2907 	 */
2908 	if (!is_gen12_ccs_plane(fb, color_plane)) {
2909 		*hsub = fb->format->hsub;
2910 		*vsub = fb->format->vsub;
2911 
2912 		return;
2913 	}
2914 
2915 	main_plane = ccs_to_main_plane(fb, color_plane);
2916 	*hsub = drm_format_info_block_width(fb->format, color_plane) /
2917 		drm_format_info_block_width(fb->format, main_plane);
2918 
2919 	/*
2920 	 * The min stride check in the core framebuffer_check() function
2921 	 * assumes that format->hsub applies to every plane except for the
2922 	 * first plane. That's incorrect for the CCS AUX plane of the first
2923 	 * plane, but for the above check to pass we must define the block
2924 	 * width with that subsampling applied to it. Adjust the width here
2925 	 * accordingly, so we can calculate the actual subsampling factor.
2926 	 */
2927 	if (main_plane == 0)
2928 		*hsub *= fb->format->hsub;
2929 
2930 	*vsub = 32;
2931 }
2932 static int
2933 intel_fb_check_ccs_xy(struct drm_framebuffer *fb, int ccs_plane, int x, int y)
2934 {
2935 	struct drm_i915_private *i915 = to_i915(fb->dev);
2936 	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
2937 	int main_plane;
2938 	int hsub, vsub;
2939 	int tile_width, tile_height;
2940 	int ccs_x, ccs_y;
2941 	int main_x, main_y;
2942 
2943 	if (!is_ccs_plane(fb, ccs_plane))
2944 		return 0;
2945 
2946 	intel_tile_dims(fb, ccs_plane, &tile_width, &tile_height);
2947 	intel_fb_plane_get_subsampling(&hsub, &vsub, fb, ccs_plane);
2948 
2949 	tile_width *= hsub;
2950 	tile_height *= vsub;
2951 
2952 	ccs_x = (x * hsub) % tile_width;
2953 	ccs_y = (y * vsub) % tile_height;
2954 
2955 	main_plane = ccs_to_main_plane(fb, ccs_plane);
2956 	main_x = intel_fb->normal[main_plane].x % tile_width;
2957 	main_y = intel_fb->normal[main_plane].y % tile_height;
2958 
2959 	/*
2960 	 * CCS doesn't have its own x/y offset register, so the intra CCS tile
2961 	 * x/y offsets must match between CCS and the main surface.
2962 	 */
2963 	if (main_x != ccs_x || main_y != ccs_y) {
2964 		drm_dbg_kms(&i915->drm,
2965 			      "Bad CCS x/y (main %d,%d ccs %d,%d) full (main %d,%d ccs %d,%d)\n",
2966 			      main_x, main_y,
2967 			      ccs_x, ccs_y,
2968 			      intel_fb->normal[main_plane].x,
2969 			      intel_fb->normal[main_plane].y,
2970 			      x, y);
2971 		return -EINVAL;
2972 	}
2973 
2974 	return 0;
2975 }
2976 
2977 static void
2978 intel_fb_plane_dims(int *w, int *h, struct drm_framebuffer *fb, int color_plane)
2979 {
2980 	int main_plane = is_ccs_plane(fb, color_plane) ?
2981 			 ccs_to_main_plane(fb, color_plane) : 0;
2982 	int main_hsub, main_vsub;
2983 	int hsub, vsub;
2984 
2985 	intel_fb_plane_get_subsampling(&main_hsub, &main_vsub, fb, main_plane);
2986 	intel_fb_plane_get_subsampling(&hsub, &vsub, fb, color_plane);
2987 	*w = fb->width / main_hsub / hsub;
2988 	*h = fb->height / main_vsub / vsub;
2989 }
2990 
2991 /*
2992  * Setup the rotated view for an FB plane and return the size the GTT mapping
2993  * requires for this view.
2994  */
2995 static u32
2996 setup_fb_rotation(int plane, const struct intel_remapped_plane_info *plane_info,
2997 		  u32 gtt_offset_rotated, int x, int y,
2998 		  unsigned int width, unsigned int height,
2999 		  unsigned int tile_size,
3000 		  unsigned int tile_width, unsigned int tile_height,
3001 		  struct drm_framebuffer *fb)
3002 {
3003 	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
3004 	struct intel_rotation_info *rot_info = &intel_fb->rot_info;
3005 	unsigned int pitch_tiles;
3006 	struct drm_rect r;
3007 
3008 	/* Y or Yf modifiers required for 90/270 rotation */
3009 	if (fb->modifier != I915_FORMAT_MOD_Y_TILED &&
3010 	    fb->modifier != I915_FORMAT_MOD_Yf_TILED)
3011 		return 0;
3012 
3013 	if (drm_WARN_ON(fb->dev, plane >= ARRAY_SIZE(rot_info->plane)))
3014 		return 0;
3015 
3016 	rot_info->plane[plane] = *plane_info;
3017 
3018 	intel_fb->rotated[plane].pitch = plane_info->height * tile_height;
3019 
3020 	/* rotate the x/y offsets to match the GTT view */
3021 	drm_rect_init(&r, x, y, width, height);
3022 	drm_rect_rotate(&r,
3023 			plane_info->width * tile_width,
3024 			plane_info->height * tile_height,
3025 			DRM_MODE_ROTATE_270);
3026 	x = r.x1;
3027 	y = r.y1;
3028 
3029 	/* rotate the tile dimensions to match the GTT view */
3030 	pitch_tiles = intel_fb->rotated[plane].pitch / tile_height;
3031 	swap(tile_width, tile_height);
3032 
3033 	/*
3034 	 * We only keep the x/y offsets, so push all of the
3035 	 * gtt offset into the x/y offsets.
3036 	 */
3037 	intel_adjust_tile_offset(&x, &y,
3038 				 tile_width, tile_height,
3039 				 tile_size, pitch_tiles,
3040 				 gtt_offset_rotated * tile_size, 0);
3041 
3042 	/*
3043 	 * First pixel of the framebuffer from
3044 	 * the start of the rotated gtt mapping.
3045 	 */
3046 	intel_fb->rotated[plane].x = x;
3047 	intel_fb->rotated[plane].y = y;
3048 
3049 	return plane_info->width * plane_info->height;
3050 }
3051 
3052 static int
3053 intel_fill_fb_info(struct drm_i915_private *dev_priv,
3054 		   struct drm_framebuffer *fb)
3055 {
3056 	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
3057 	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
3058 	u32 gtt_offset_rotated = 0;
3059 	unsigned int max_size = 0;
3060 	int i, num_planes = fb->format->num_planes;
3061 	unsigned int tile_size = intel_tile_size(dev_priv);
3062 
3063 	for (i = 0; i < num_planes; i++) {
3064 		unsigned int width, height;
3065 		unsigned int cpp, size;
3066 		u32 offset;
3067 		int x, y;
3068 		int ret;
3069 
3070 		cpp = fb->format->cpp[i];
3071 		intel_fb_plane_dims(&width, &height, fb, i);
3072 
3073 		ret = intel_fb_offset_to_xy(&x, &y, fb, i);
3074 		if (ret) {
3075 			drm_dbg_kms(&dev_priv->drm,
3076 				    "bad fb plane %d offset: 0x%x\n",
3077 				    i, fb->offsets[i]);
3078 			return ret;
3079 		}
3080 
3081 		ret = intel_fb_check_ccs_xy(fb, i, x, y);
3082 		if (ret)
3083 			return ret;
3084 
3085 		/*
3086 		 * The fence (if used) is aligned to the start of the object
3087 		 * so having the framebuffer wrap around across the edge of the
3088 		 * fenced region doesn't really work. We have no API to configure
3089 		 * the fence start offset within the object (nor could we probably
3090 		 * on gen2/3). So it's just easier if we just require that the
3091 		 * fb layout agrees with the fence layout. We already check that the
3092 		 * fb stride matches the fence stride elsewhere.
3093 		 */
3094 		if (i == 0 && i915_gem_object_is_tiled(obj) &&
3095 		    (x + width) * cpp > fb->pitches[i]) {
3096 			drm_dbg_kms(&dev_priv->drm,
3097 				    "bad fb plane %d offset: 0x%x\n",
3098 				     i, fb->offsets[i]);
3099 			return -EINVAL;
3100 		}
3101 
3102 		/*
3103 		 * First pixel of the framebuffer from
3104 		 * the start of the normal gtt mapping.
3105 		 */
3106 		intel_fb->normal[i].x = x;
3107 		intel_fb->normal[i].y = y;
3108 
3109 		offset = intel_compute_aligned_offset(dev_priv, &x, &y, fb, i,
3110 						      fb->pitches[i],
3111 						      DRM_MODE_ROTATE_0,
3112 						      tile_size);
3113 		offset /= tile_size;
3114 
3115 		if (!is_surface_linear(fb, i)) {
3116 			struct intel_remapped_plane_info plane_info;
3117 			unsigned int tile_width, tile_height;
3118 
3119 			intel_tile_dims(fb, i, &tile_width, &tile_height);
3120 
3121 			plane_info.offset = offset;
3122 			plane_info.stride = DIV_ROUND_UP(fb->pitches[i],
3123 							 tile_width * cpp);
3124 			plane_info.width = DIV_ROUND_UP(x + width, tile_width);
3125 			plane_info.height = DIV_ROUND_UP(y + height,
3126 							 tile_height);
3127 
3128 			/* how many tiles does this plane need */
3129 			size = plane_info.stride * plane_info.height;
3130 			/*
3131 			 * If the plane isn't horizontally tile aligned,
3132 			 * we need one more tile.
3133 			 */
3134 			if (x != 0)
3135 				size++;
3136 
3137 			gtt_offset_rotated +=
3138 				setup_fb_rotation(i, &plane_info,
3139 						  gtt_offset_rotated,
3140 						  x, y, width, height,
3141 						  tile_size,
3142 						  tile_width, tile_height,
3143 						  fb);
3144 		} else {
3145 			size = DIV_ROUND_UP((y + height) * fb->pitches[i] +
3146 					    x * cpp, tile_size);
3147 		}
3148 
3149 		/* how many tiles in total needed in the bo */
3150 		max_size = max(max_size, offset + size);
3151 	}
3152 
3153 	if (mul_u32_u32(max_size, tile_size) > obj->base.size) {
3154 		drm_dbg_kms(&dev_priv->drm,
3155 			    "fb too big for bo (need %llu bytes, have %zu bytes)\n",
3156 			    mul_u32_u32(max_size, tile_size), obj->base.size);
3157 		return -EINVAL;
3158 	}
3159 
3160 	return 0;
3161 }
3162 
3163 static void
3164 intel_plane_remap_gtt(struct intel_plane_state *plane_state)
3165 {
3166 	struct drm_i915_private *dev_priv =
3167 		to_i915(plane_state->uapi.plane->dev);
3168 	struct drm_framebuffer *fb = plane_state->hw.fb;
3169 	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
3170 	struct intel_rotation_info *info = &plane_state->view.rotated;
3171 	unsigned int rotation = plane_state->hw.rotation;
3172 	int i, num_planes = fb->format->num_planes;
3173 	unsigned int tile_size = intel_tile_size(dev_priv);
3174 	unsigned int src_x, src_y;
3175 	unsigned int src_w, src_h;
3176 	u32 gtt_offset = 0;
3177 
3178 	memset(&plane_state->view, 0, sizeof(plane_state->view));
3179 	plane_state->view.type = drm_rotation_90_or_270(rotation) ?
3180 		I915_GGTT_VIEW_ROTATED : I915_GGTT_VIEW_REMAPPED;
3181 
3182 	src_x = plane_state->uapi.src.x1 >> 16;
3183 	src_y = plane_state->uapi.src.y1 >> 16;
3184 	src_w = drm_rect_width(&plane_state->uapi.src) >> 16;
3185 	src_h = drm_rect_height(&plane_state->uapi.src) >> 16;
3186 
3187 	drm_WARN_ON(&dev_priv->drm, is_ccs_modifier(fb->modifier));
3188 
3189 	/* Make src coordinates relative to the viewport */
3190 	drm_rect_translate(&plane_state->uapi.src,
3191 			   -(src_x << 16), -(src_y << 16));
3192 
3193 	/* Rotate src coordinates to match rotated GTT view */
3194 	if (drm_rotation_90_or_270(rotation))
3195 		drm_rect_rotate(&plane_state->uapi.src,
3196 				src_w << 16, src_h << 16,
3197 				DRM_MODE_ROTATE_270);
3198 
3199 	for (i = 0; i < num_planes; i++) {
3200 		unsigned int hsub = i ? fb->format->hsub : 1;
3201 		unsigned int vsub = i ? fb->format->vsub : 1;
3202 		unsigned int cpp = fb->format->cpp[i];
3203 		unsigned int tile_width, tile_height;
3204 		unsigned int width, height;
3205 		unsigned int pitch_tiles;
3206 		unsigned int x, y;
3207 		u32 offset;
3208 
3209 		intel_tile_dims(fb, i, &tile_width, &tile_height);
3210 
3211 		x = src_x / hsub;
3212 		y = src_y / vsub;
3213 		width = src_w / hsub;
3214 		height = src_h / vsub;
3215 
3216 		/*
3217 		 * First pixel of the src viewport from the
3218 		 * start of the normal gtt mapping.
3219 		 */
3220 		x += intel_fb->normal[i].x;
3221 		y += intel_fb->normal[i].y;
3222 
3223 		offset = intel_compute_aligned_offset(dev_priv, &x, &y,
3224 						      fb, i, fb->pitches[i],
3225 						      DRM_MODE_ROTATE_0, tile_size);
3226 		offset /= tile_size;
3227 
3228 		drm_WARN_ON(&dev_priv->drm, i >= ARRAY_SIZE(info->plane));
3229 		info->plane[i].offset = offset;
3230 		info->plane[i].stride = DIV_ROUND_UP(fb->pitches[i],
3231 						     tile_width * cpp);
3232 		info->plane[i].width = DIV_ROUND_UP(x + width, tile_width);
3233 		info->plane[i].height = DIV_ROUND_UP(y + height, tile_height);
3234 
3235 		if (drm_rotation_90_or_270(rotation)) {
3236 			struct drm_rect r;
3237 
3238 			/* rotate the x/y offsets to match the GTT view */
3239 			drm_rect_init(&r, x, y, width, height);
3240 			drm_rect_rotate(&r,
3241 					info->plane[i].width * tile_width,
3242 					info->plane[i].height * tile_height,
3243 					DRM_MODE_ROTATE_270);
3244 			x = r.x1;
3245 			y = r.y1;
3246 
3247 			pitch_tiles = info->plane[i].height;
3248 			plane_state->color_plane[i].stride = pitch_tiles * tile_height;
3249 
3250 			/* rotate the tile dimensions to match the GTT view */
3251 			swap(tile_width, tile_height);
3252 		} else {
3253 			pitch_tiles = info->plane[i].width;
3254 			plane_state->color_plane[i].stride = pitch_tiles * tile_width * cpp;
3255 		}
3256 
3257 		/*
3258 		 * We only keep the x/y offsets, so push all of the
3259 		 * gtt offset into the x/y offsets.
3260 		 */
3261 		intel_adjust_tile_offset(&x, &y,
3262 					 tile_width, tile_height,
3263 					 tile_size, pitch_tiles,
3264 					 gtt_offset * tile_size, 0);
3265 
3266 		gtt_offset += info->plane[i].width * info->plane[i].height;
3267 
3268 		plane_state->color_plane[i].offset = 0;
3269 		plane_state->color_plane[i].x = x;
3270 		plane_state->color_plane[i].y = y;
3271 	}
3272 }
3273 
3274 static int
3275 intel_plane_compute_gtt(struct intel_plane_state *plane_state)
3276 {
3277 	const struct intel_framebuffer *fb =
3278 		to_intel_framebuffer(plane_state->hw.fb);
3279 	unsigned int rotation = plane_state->hw.rotation;
3280 	int i, num_planes;
3281 
3282 	if (!fb)
3283 		return 0;
3284 
3285 	num_planes = fb->base.format->num_planes;
3286 
3287 	if (intel_plane_needs_remap(plane_state)) {
3288 		intel_plane_remap_gtt(plane_state);
3289 
3290 		/*
3291 		 * Sometimes even remapping can't overcome
3292 		 * the stride limitations :( Can happen with
3293 		 * big plane sizes and suitably misaligned
3294 		 * offsets.
3295 		 */
3296 		return intel_plane_check_stride(plane_state);
3297 	}
3298 
3299 	intel_fill_fb_ggtt_view(&plane_state->view, &fb->base, rotation);
3300 
3301 	for (i = 0; i < num_planes; i++) {
3302 		plane_state->color_plane[i].stride = intel_fb_pitch(&fb->base, i, rotation);
3303 		plane_state->color_plane[i].offset = 0;
3304 
3305 		if (drm_rotation_90_or_270(rotation)) {
3306 			plane_state->color_plane[i].x = fb->rotated[i].x;
3307 			plane_state->color_plane[i].y = fb->rotated[i].y;
3308 		} else {
3309 			plane_state->color_plane[i].x = fb->normal[i].x;
3310 			plane_state->color_plane[i].y = fb->normal[i].y;
3311 		}
3312 	}
3313 
3314 	/* Rotate src coordinates to match rotated GTT view */
3315 	if (drm_rotation_90_or_270(rotation))
3316 		drm_rect_rotate(&plane_state->uapi.src,
3317 				fb->base.width << 16, fb->base.height << 16,
3318 				DRM_MODE_ROTATE_270);
3319 
3320 	return intel_plane_check_stride(plane_state);
3321 }
3322 
3323 static int i9xx_format_to_fourcc(int format)
3324 {
3325 	switch (format) {
3326 	case DISPPLANE_8BPP:
3327 		return DRM_FORMAT_C8;
3328 	case DISPPLANE_BGRA555:
3329 		return DRM_FORMAT_ARGB1555;
3330 	case DISPPLANE_BGRX555:
3331 		return DRM_FORMAT_XRGB1555;
3332 	case DISPPLANE_BGRX565:
3333 		return DRM_FORMAT_RGB565;
3334 	default:
3335 	case DISPPLANE_BGRX888:
3336 		return DRM_FORMAT_XRGB8888;
3337 	case DISPPLANE_RGBX888:
3338 		return DRM_FORMAT_XBGR8888;
3339 	case DISPPLANE_BGRA888:
3340 		return DRM_FORMAT_ARGB8888;
3341 	case DISPPLANE_RGBA888:
3342 		return DRM_FORMAT_ABGR8888;
3343 	case DISPPLANE_BGRX101010:
3344 		return DRM_FORMAT_XRGB2101010;
3345 	case DISPPLANE_RGBX101010:
3346 		return DRM_FORMAT_XBGR2101010;
3347 	case DISPPLANE_BGRA101010:
3348 		return DRM_FORMAT_ARGB2101010;
3349 	case DISPPLANE_RGBA101010:
3350 		return DRM_FORMAT_ABGR2101010;
3351 	case DISPPLANE_RGBX161616:
3352 		return DRM_FORMAT_XBGR16161616F;
3353 	}
3354 }
3355 
3356 int skl_format_to_fourcc(int format, bool rgb_order, bool alpha)
3357 {
3358 	switch (format) {
3359 	case PLANE_CTL_FORMAT_RGB_565:
3360 		return DRM_FORMAT_RGB565;
3361 	case PLANE_CTL_FORMAT_NV12:
3362 		return DRM_FORMAT_NV12;
3363 	case PLANE_CTL_FORMAT_XYUV:
3364 		return DRM_FORMAT_XYUV8888;
3365 	case PLANE_CTL_FORMAT_P010:
3366 		return DRM_FORMAT_P010;
3367 	case PLANE_CTL_FORMAT_P012:
3368 		return DRM_FORMAT_P012;
3369 	case PLANE_CTL_FORMAT_P016:
3370 		return DRM_FORMAT_P016;
3371 	case PLANE_CTL_FORMAT_Y210:
3372 		return DRM_FORMAT_Y210;
3373 	case PLANE_CTL_FORMAT_Y212:
3374 		return DRM_FORMAT_Y212;
3375 	case PLANE_CTL_FORMAT_Y216:
3376 		return DRM_FORMAT_Y216;
3377 	case PLANE_CTL_FORMAT_Y410:
3378 		return DRM_FORMAT_XVYU2101010;
3379 	case PLANE_CTL_FORMAT_Y412:
3380 		return DRM_FORMAT_XVYU12_16161616;
3381 	case PLANE_CTL_FORMAT_Y416:
3382 		return DRM_FORMAT_XVYU16161616;
3383 	default:
3384 	case PLANE_CTL_FORMAT_XRGB_8888:
3385 		if (rgb_order) {
3386 			if (alpha)
3387 				return DRM_FORMAT_ABGR8888;
3388 			else
3389 				return DRM_FORMAT_XBGR8888;
3390 		} else {
3391 			if (alpha)
3392 				return DRM_FORMAT_ARGB8888;
3393 			else
3394 				return DRM_FORMAT_XRGB8888;
3395 		}
3396 	case PLANE_CTL_FORMAT_XRGB_2101010:
3397 		if (rgb_order) {
3398 			if (alpha)
3399 				return DRM_FORMAT_ABGR2101010;
3400 			else
3401 				return DRM_FORMAT_XBGR2101010;
3402 		} else {
3403 			if (alpha)
3404 				return DRM_FORMAT_ARGB2101010;
3405 			else
3406 				return DRM_FORMAT_XRGB2101010;
3407 		}
3408 	case PLANE_CTL_FORMAT_XRGB_16161616F:
3409 		if (rgb_order) {
3410 			if (alpha)
3411 				return DRM_FORMAT_ABGR16161616F;
3412 			else
3413 				return DRM_FORMAT_XBGR16161616F;
3414 		} else {
3415 			if (alpha)
3416 				return DRM_FORMAT_ARGB16161616F;
3417 			else
3418 				return DRM_FORMAT_XRGB16161616F;
3419 		}
3420 	}
3421 }
3422 
3423 static struct i915_vma *
3424 initial_plane_vma(struct drm_i915_private *i915,
3425 		  struct intel_initial_plane_config *plane_config)
3426 {
3427 	struct drm_i915_gem_object *obj;
3428 	struct i915_vma *vma;
3429 	u32 base, size;
3430 
3431 	if (plane_config->size == 0)
3432 		return NULL;
3433 
3434 	base = round_down(plane_config->base,
3435 			  I915_GTT_MIN_ALIGNMENT);
3436 	size = round_up(plane_config->base + plane_config->size,
3437 			I915_GTT_MIN_ALIGNMENT);
3438 	size -= base;
3439 
3440 	/*
3441 	 * If the FB is too big, just don't use it since fbdev is not very
3442 	 * important and we should probably use that space with FBC or other
3443 	 * features.
3444 	 */
3445 	if (size * 2 > i915->stolen_usable_size)
3446 		return NULL;
3447 
3448 	obj = i915_gem_object_create_stolen_for_preallocated(i915, base, size);
3449 	if (IS_ERR(obj))
3450 		return NULL;
3451 
3452 	/*
3453 	 * Mark it WT ahead of time to avoid changing the
3454 	 * cache_level during fbdev initialization. The
3455 	 * unbind there would get stuck waiting for rcu.
3456 	 */
3457 	i915_gem_object_set_cache_coherency(obj, HAS_WT(i915) ?
3458 					    I915_CACHE_WT : I915_CACHE_NONE);
3459 
3460 	switch (plane_config->tiling) {
3461 	case I915_TILING_NONE:
3462 		break;
3463 	case I915_TILING_X:
3464 	case I915_TILING_Y:
3465 		obj->tiling_and_stride =
3466 			plane_config->fb->base.pitches[0] |
3467 			plane_config->tiling;
3468 		break;
3469 	default:
3470 		MISSING_CASE(plane_config->tiling);
3471 		goto err_obj;
3472 	}
3473 
3474 	vma = i915_vma_instance(obj, &i915->ggtt.vm, NULL);
3475 	if (IS_ERR(vma))
3476 		goto err_obj;
3477 
3478 	if (i915_ggtt_pin(vma, NULL, 0, PIN_MAPPABLE | PIN_OFFSET_FIXED | base))
3479 		goto err_obj;
3480 
3481 	if (i915_gem_object_is_tiled(obj) &&
3482 	    !i915_vma_is_map_and_fenceable(vma))
3483 		goto err_obj;
3484 
3485 	return vma;
3486 
3487 err_obj:
3488 	i915_gem_object_put(obj);
3489 	return NULL;
3490 }
3491 
3492 static bool
3493 intel_alloc_initial_plane_obj(struct intel_crtc *crtc,
3494 			      struct intel_initial_plane_config *plane_config)
3495 {
3496 	struct drm_device *dev = crtc->base.dev;
3497 	struct drm_i915_private *dev_priv = to_i915(dev);
3498 	struct drm_mode_fb_cmd2 mode_cmd = { 0 };
3499 	struct drm_framebuffer *fb = &plane_config->fb->base;
3500 	struct i915_vma *vma;
3501 
3502 	switch (fb->modifier) {
3503 	case DRM_FORMAT_MOD_LINEAR:
3504 	case I915_FORMAT_MOD_X_TILED:
3505 	case I915_FORMAT_MOD_Y_TILED:
3506 		break;
3507 	default:
3508 		drm_dbg(&dev_priv->drm,
3509 			"Unsupported modifier for initial FB: 0x%llx\n",
3510 			fb->modifier);
3511 		return false;
3512 	}
3513 
3514 	vma = initial_plane_vma(dev_priv, plane_config);
3515 	if (!vma)
3516 		return false;
3517 
3518 	mode_cmd.pixel_format = fb->format->format;
3519 	mode_cmd.width = fb->width;
3520 	mode_cmd.height = fb->height;
3521 	mode_cmd.pitches[0] = fb->pitches[0];
3522 	mode_cmd.modifier[0] = fb->modifier;
3523 	mode_cmd.flags = DRM_MODE_FB_MODIFIERS;
3524 
3525 	if (intel_framebuffer_init(to_intel_framebuffer(fb),
3526 				   vma->obj, &mode_cmd)) {
3527 		drm_dbg_kms(&dev_priv->drm, "intel fb init failed\n");
3528 		goto err_vma;
3529 	}
3530 
3531 	plane_config->vma = vma;
3532 	return true;
3533 
3534 err_vma:
3535 	i915_vma_put(vma);
3536 	return false;
3537 }
3538 
3539 static void
3540 intel_set_plane_visible(struct intel_crtc_state *crtc_state,
3541 			struct intel_plane_state *plane_state,
3542 			bool visible)
3543 {
3544 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
3545 
3546 	plane_state->uapi.visible = visible;
3547 
3548 	if (visible)
3549 		crtc_state->uapi.plane_mask |= drm_plane_mask(&plane->base);
3550 	else
3551 		crtc_state->uapi.plane_mask &= ~drm_plane_mask(&plane->base);
3552 }
3553 
3554 static void fixup_active_planes(struct intel_crtc_state *crtc_state)
3555 {
3556 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
3557 	struct drm_plane *plane;
3558 
3559 	/*
3560 	 * Active_planes aliases if multiple "primary" or cursor planes
3561 	 * have been used on the same (or wrong) pipe. plane_mask uses
3562 	 * unique ids, hence we can use that to reconstruct active_planes.
3563 	 */
3564 	crtc_state->active_planes = 0;
3565 
3566 	drm_for_each_plane_mask(plane, &dev_priv->drm,
3567 				crtc_state->uapi.plane_mask)
3568 		crtc_state->active_planes |= BIT(to_intel_plane(plane)->id);
3569 }
3570 
3571 static void intel_plane_disable_noatomic(struct intel_crtc *crtc,
3572 					 struct intel_plane *plane)
3573 {
3574 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
3575 	struct intel_crtc_state *crtc_state =
3576 		to_intel_crtc_state(crtc->base.state);
3577 	struct intel_plane_state *plane_state =
3578 		to_intel_plane_state(plane->base.state);
3579 
3580 	drm_dbg_kms(&dev_priv->drm,
3581 		    "Disabling [PLANE:%d:%s] on [CRTC:%d:%s]\n",
3582 		    plane->base.base.id, plane->base.name,
3583 		    crtc->base.base.id, crtc->base.name);
3584 
3585 	intel_set_plane_visible(crtc_state, plane_state, false);
3586 	fixup_active_planes(crtc_state);
3587 	crtc_state->data_rate[plane->id] = 0;
3588 	crtc_state->min_cdclk[plane->id] = 0;
3589 
3590 	if (plane->id == PLANE_PRIMARY)
3591 		hsw_disable_ips(crtc_state);
3592 
3593 	/*
3594 	 * Vblank time updates from the shadow to live plane control register
3595 	 * are blocked if the memory self-refresh mode is active at that
3596 	 * moment. So to make sure the plane gets truly disabled, disable
3597 	 * first the self-refresh mode. The self-refresh enable bit in turn
3598 	 * will be checked/applied by the HW only at the next frame start
3599 	 * event which is after the vblank start event, so we need to have a
3600 	 * wait-for-vblank between disabling the plane and the pipe.
3601 	 */
3602 	if (HAS_GMCH(dev_priv) &&
3603 	    intel_set_memory_cxsr(dev_priv, false))
3604 		intel_wait_for_vblank(dev_priv, crtc->pipe);
3605 
3606 	/*
3607 	 * Gen2 reports pipe underruns whenever all planes are disabled.
3608 	 * So disable underrun reporting before all the planes get disabled.
3609 	 */
3610 	if (IS_GEN(dev_priv, 2) && !crtc_state->active_planes)
3611 		intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, false);
3612 
3613 	intel_disable_plane(plane, crtc_state);
3614 }
3615 
3616 static struct intel_frontbuffer *
3617 to_intel_frontbuffer(struct drm_framebuffer *fb)
3618 {
3619 	return fb ? to_intel_framebuffer(fb)->frontbuffer : NULL;
3620 }
3621 
3622 static void
3623 intel_find_initial_plane_obj(struct intel_crtc *intel_crtc,
3624 			     struct intel_initial_plane_config *plane_config)
3625 {
3626 	struct drm_device *dev = intel_crtc->base.dev;
3627 	struct drm_i915_private *dev_priv = to_i915(dev);
3628 	struct drm_crtc *c;
3629 	struct drm_plane *primary = intel_crtc->base.primary;
3630 	struct drm_plane_state *plane_state = primary->state;
3631 	struct intel_plane *intel_plane = to_intel_plane(primary);
3632 	struct intel_plane_state *intel_state =
3633 		to_intel_plane_state(plane_state);
3634 	struct intel_crtc_state *crtc_state =
3635 		to_intel_crtc_state(intel_crtc->base.state);
3636 	struct drm_framebuffer *fb;
3637 	struct i915_vma *vma;
3638 
3639 	if (!plane_config->fb)
3640 		return;
3641 
3642 	if (intel_alloc_initial_plane_obj(intel_crtc, plane_config)) {
3643 		fb = &plane_config->fb->base;
3644 		vma = plane_config->vma;
3645 		goto valid_fb;
3646 	}
3647 
3648 	/*
3649 	 * Failed to alloc the obj, check to see if we should share
3650 	 * an fb with another CRTC instead
3651 	 */
3652 	for_each_crtc(dev, c) {
3653 		struct intel_plane_state *state;
3654 
3655 		if (c == &intel_crtc->base)
3656 			continue;
3657 
3658 		if (!to_intel_crtc_state(c->state)->uapi.active)
3659 			continue;
3660 
3661 		state = to_intel_plane_state(c->primary->state);
3662 		if (!state->vma)
3663 			continue;
3664 
3665 		if (intel_plane_ggtt_offset(state) == plane_config->base) {
3666 			fb = state->hw.fb;
3667 			vma = state->vma;
3668 			goto valid_fb;
3669 		}
3670 	}
3671 
3672 	/*
3673 	 * We've failed to reconstruct the BIOS FB.  Current display state
3674 	 * indicates that the primary plane is visible, but has a NULL FB,
3675 	 * which will lead to problems later if we don't fix it up.  The
3676 	 * simplest solution is to just disable the primary plane now and
3677 	 * pretend the BIOS never had it enabled.
3678 	 */
3679 	intel_plane_disable_noatomic(intel_crtc, intel_plane);
3680 	if (crtc_state->bigjoiner) {
3681 		struct intel_crtc *slave =
3682 			crtc_state->bigjoiner_linked_crtc;
3683 		intel_plane_disable_noatomic(slave, to_intel_plane(slave->base.primary));
3684 	}
3685 
3686 	return;
3687 
3688 valid_fb:
3689 	intel_state->hw.rotation = plane_config->rotation;
3690 	intel_fill_fb_ggtt_view(&intel_state->view, fb,
3691 				intel_state->hw.rotation);
3692 	intel_state->color_plane[0].stride =
3693 		intel_fb_pitch(fb, 0, intel_state->hw.rotation);
3694 
3695 	__i915_vma_pin(vma);
3696 	intel_state->vma = i915_vma_get(vma);
3697 	if (intel_plane_uses_fence(intel_state) && i915_vma_pin_fence(vma) == 0)
3698 		if (vma->fence)
3699 			intel_state->flags |= PLANE_HAS_FENCE;
3700 
3701 	plane_state->src_x = 0;
3702 	plane_state->src_y = 0;
3703 	plane_state->src_w = fb->width << 16;
3704 	plane_state->src_h = fb->height << 16;
3705 
3706 	plane_state->crtc_x = 0;
3707 	plane_state->crtc_y = 0;
3708 	plane_state->crtc_w = fb->width;
3709 	plane_state->crtc_h = fb->height;
3710 
3711 	intel_state->uapi.src = drm_plane_state_src(plane_state);
3712 	intel_state->uapi.dst = drm_plane_state_dest(plane_state);
3713 
3714 	if (plane_config->tiling)
3715 		dev_priv->preserve_bios_swizzle = true;
3716 
3717 	plane_state->fb = fb;
3718 	drm_framebuffer_get(fb);
3719 
3720 	plane_state->crtc = &intel_crtc->base;
3721 	intel_plane_copy_uapi_to_hw_state(intel_state, intel_state,
3722 					  intel_crtc);
3723 
3724 	intel_frontbuffer_flush(to_intel_frontbuffer(fb), ORIGIN_DIRTYFB);
3725 
3726 	atomic_or(to_intel_plane(primary)->frontbuffer_bit,
3727 		  &to_intel_frontbuffer(fb)->bits);
3728 }
3729 
3730 
3731 static bool
3732 skl_check_main_ccs_coordinates(struct intel_plane_state *plane_state,
3733 			       int main_x, int main_y, u32 main_offset,
3734 			       int ccs_plane)
3735 {
3736 	const struct drm_framebuffer *fb = plane_state->hw.fb;
3737 	int aux_x = plane_state->color_plane[ccs_plane].x;
3738 	int aux_y = plane_state->color_plane[ccs_plane].y;
3739 	u32 aux_offset = plane_state->color_plane[ccs_plane].offset;
3740 	u32 alignment = intel_surf_alignment(fb, ccs_plane);
3741 	int hsub;
3742 	int vsub;
3743 
3744 	intel_fb_plane_get_subsampling(&hsub, &vsub, fb, ccs_plane);
3745 	while (aux_offset >= main_offset && aux_y <= main_y) {
3746 		int x, y;
3747 
3748 		if (aux_x == main_x && aux_y == main_y)
3749 			break;
3750 
3751 		if (aux_offset == 0)
3752 			break;
3753 
3754 		x = aux_x / hsub;
3755 		y = aux_y / vsub;
3756 		aux_offset = intel_plane_adjust_aligned_offset(&x, &y,
3757 							       plane_state,
3758 							       ccs_plane,
3759 							       aux_offset,
3760 							       aux_offset -
3761 								alignment);
3762 		aux_x = x * hsub + aux_x % hsub;
3763 		aux_y = y * vsub + aux_y % vsub;
3764 	}
3765 
3766 	if (aux_x != main_x || aux_y != main_y)
3767 		return false;
3768 
3769 	plane_state->color_plane[ccs_plane].offset = aux_offset;
3770 	plane_state->color_plane[ccs_plane].x = aux_x;
3771 	plane_state->color_plane[ccs_plane].y = aux_y;
3772 
3773 	return true;
3774 }
3775 
3776 unsigned int
3777 intel_plane_fence_y_offset(const struct intel_plane_state *plane_state)
3778 {
3779 	int x = 0, y = 0;
3780 
3781 	intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0,
3782 					  plane_state->color_plane[0].offset, 0);
3783 
3784 	return y;
3785 }
3786 
3787 static int intel_plane_min_width(struct intel_plane *plane,
3788 				 const struct drm_framebuffer *fb,
3789 				 int color_plane,
3790 				 unsigned int rotation)
3791 {
3792 	if (plane->min_width)
3793 		return plane->min_width(fb, color_plane, rotation);
3794 	else
3795 		return 1;
3796 }
3797 
3798 static int intel_plane_max_width(struct intel_plane *plane,
3799 				 const struct drm_framebuffer *fb,
3800 				 int color_plane,
3801 				 unsigned int rotation)
3802 {
3803 	if (plane->max_width)
3804 		return plane->max_width(fb, color_plane, rotation);
3805 	else
3806 		return INT_MAX;
3807 }
3808 
3809 static int intel_plane_max_height(struct intel_plane *plane,
3810 				  const struct drm_framebuffer *fb,
3811 				  int color_plane,
3812 				  unsigned int rotation)
3813 {
3814 	if (plane->max_height)
3815 		return plane->max_height(fb, color_plane, rotation);
3816 	else
3817 		return INT_MAX;
3818 }
3819 
3820 static int skl_check_main_surface(struct intel_plane_state *plane_state)
3821 {
3822 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
3823 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
3824 	const struct drm_framebuffer *fb = plane_state->hw.fb;
3825 	unsigned int rotation = plane_state->hw.rotation;
3826 	int x = plane_state->uapi.src.x1 >> 16;
3827 	int y = plane_state->uapi.src.y1 >> 16;
3828 	int w = drm_rect_width(&plane_state->uapi.src) >> 16;
3829 	int h = drm_rect_height(&plane_state->uapi.src) >> 16;
3830 	int min_width = intel_plane_min_width(plane, fb, 0, rotation);
3831 	int max_width = intel_plane_max_width(plane, fb, 0, rotation);
3832 	int max_height = intel_plane_max_height(plane, fb, 0, rotation);
3833 	int aux_plane = intel_main_to_aux_plane(fb, 0);
3834 	u32 aux_offset = plane_state->color_plane[aux_plane].offset;
3835 	u32 alignment, offset;
3836 
3837 	if (w > max_width || w < min_width || h > max_height) {
3838 		drm_dbg_kms(&dev_priv->drm,
3839 			    "requested Y/RGB source size %dx%d outside limits (min: %dx1 max: %dx%d)\n",
3840 			    w, h, min_width, max_width, max_height);
3841 		return -EINVAL;
3842 	}
3843 
3844 	intel_add_fb_offsets(&x, &y, plane_state, 0);
3845 	offset = intel_plane_compute_aligned_offset(&x, &y, plane_state, 0);
3846 	alignment = intel_surf_alignment(fb, 0);
3847 	if (drm_WARN_ON(&dev_priv->drm, alignment && !is_power_of_2(alignment)))
3848 		return -EINVAL;
3849 
3850 	/*
3851 	 * AUX surface offset is specified as the distance from the
3852 	 * main surface offset, and it must be non-negative. Make
3853 	 * sure that is what we will get.
3854 	 */
3855 	if (aux_plane && offset > aux_offset)
3856 		offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0,
3857 							   offset, aux_offset & ~(alignment - 1));
3858 
3859 	/*
3860 	 * When using an X-tiled surface, the plane blows up
3861 	 * if the x offset + width exceed the stride.
3862 	 *
3863 	 * TODO: linear and Y-tiled seem fine, Yf untested,
3864 	 */
3865 	if (fb->modifier == I915_FORMAT_MOD_X_TILED) {
3866 		int cpp = fb->format->cpp[0];
3867 
3868 		while ((x + w) * cpp > plane_state->color_plane[0].stride) {
3869 			if (offset == 0) {
3870 				drm_dbg_kms(&dev_priv->drm,
3871 					    "Unable to find suitable display surface offset due to X-tiling\n");
3872 				return -EINVAL;
3873 			}
3874 
3875 			offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0,
3876 								   offset, offset - alignment);
3877 		}
3878 	}
3879 
3880 	/*
3881 	 * CCS AUX surface doesn't have its own x/y offsets, we must make sure
3882 	 * they match with the main surface x/y offsets.
3883 	 */
3884 	if (is_ccs_modifier(fb->modifier)) {
3885 		while (!skl_check_main_ccs_coordinates(plane_state, x, y,
3886 						       offset, aux_plane)) {
3887 			if (offset == 0)
3888 				break;
3889 
3890 			offset = intel_plane_adjust_aligned_offset(&x, &y, plane_state, 0,
3891 								   offset, offset - alignment);
3892 		}
3893 
3894 		if (x != plane_state->color_plane[aux_plane].x ||
3895 		    y != plane_state->color_plane[aux_plane].y) {
3896 			drm_dbg_kms(&dev_priv->drm,
3897 				    "Unable to find suitable display surface offset due to CCS\n");
3898 			return -EINVAL;
3899 		}
3900 	}
3901 
3902 	plane_state->color_plane[0].offset = offset;
3903 	plane_state->color_plane[0].x = x;
3904 	plane_state->color_plane[0].y = y;
3905 
3906 	/*
3907 	 * Put the final coordinates back so that the src
3908 	 * coordinate checks will see the right values.
3909 	 */
3910 	drm_rect_translate_to(&plane_state->uapi.src,
3911 			      x << 16, y << 16);
3912 
3913 	return 0;
3914 }
3915 
3916 static int skl_check_nv12_aux_surface(struct intel_plane_state *plane_state)
3917 {
3918 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
3919 	struct drm_i915_private *i915 = to_i915(plane->base.dev);
3920 	const struct drm_framebuffer *fb = plane_state->hw.fb;
3921 	unsigned int rotation = plane_state->hw.rotation;
3922 	int uv_plane = 1;
3923 	int max_width = intel_plane_max_width(plane, fb, uv_plane, rotation);
3924 	int max_height = intel_plane_max_height(plane, fb, uv_plane, rotation);
3925 	int x = plane_state->uapi.src.x1 >> 17;
3926 	int y = plane_state->uapi.src.y1 >> 17;
3927 	int w = drm_rect_width(&plane_state->uapi.src) >> 17;
3928 	int h = drm_rect_height(&plane_state->uapi.src) >> 17;
3929 	u32 offset;
3930 
3931 	/* FIXME not quite sure how/if these apply to the chroma plane */
3932 	if (w > max_width || h > max_height) {
3933 		drm_dbg_kms(&i915->drm,
3934 			    "CbCr source size %dx%d too big (limit %dx%d)\n",
3935 			    w, h, max_width, max_height);
3936 		return -EINVAL;
3937 	}
3938 
3939 	intel_add_fb_offsets(&x, &y, plane_state, uv_plane);
3940 	offset = intel_plane_compute_aligned_offset(&x, &y,
3941 						    plane_state, uv_plane);
3942 
3943 	if (is_ccs_modifier(fb->modifier)) {
3944 		int ccs_plane = main_to_ccs_plane(fb, uv_plane);
3945 		u32 aux_offset = plane_state->color_plane[ccs_plane].offset;
3946 		u32 alignment = intel_surf_alignment(fb, uv_plane);
3947 
3948 		if (offset > aux_offset)
3949 			offset = intel_plane_adjust_aligned_offset(&x, &y,
3950 								   plane_state,
3951 								   uv_plane,
3952 								   offset,
3953 								   aux_offset & ~(alignment - 1));
3954 
3955 		while (!skl_check_main_ccs_coordinates(plane_state, x, y,
3956 						       offset, ccs_plane)) {
3957 			if (offset == 0)
3958 				break;
3959 
3960 			offset = intel_plane_adjust_aligned_offset(&x, &y,
3961 								   plane_state,
3962 								   uv_plane,
3963 								   offset, offset - alignment);
3964 		}
3965 
3966 		if (x != plane_state->color_plane[ccs_plane].x ||
3967 		    y != plane_state->color_plane[ccs_plane].y) {
3968 			drm_dbg_kms(&i915->drm,
3969 				    "Unable to find suitable display surface offset due to CCS\n");
3970 			return -EINVAL;
3971 		}
3972 	}
3973 
3974 	plane_state->color_plane[uv_plane].offset = offset;
3975 	plane_state->color_plane[uv_plane].x = x;
3976 	plane_state->color_plane[uv_plane].y = y;
3977 
3978 	return 0;
3979 }
3980 
3981 static int skl_check_ccs_aux_surface(struct intel_plane_state *plane_state)
3982 {
3983 	const struct drm_framebuffer *fb = plane_state->hw.fb;
3984 	int src_x = plane_state->uapi.src.x1 >> 16;
3985 	int src_y = plane_state->uapi.src.y1 >> 16;
3986 	u32 offset;
3987 	int ccs_plane;
3988 
3989 	for (ccs_plane = 0; ccs_plane < fb->format->num_planes; ccs_plane++) {
3990 		int main_hsub, main_vsub;
3991 		int hsub, vsub;
3992 		int x, y;
3993 
3994 		if (!is_ccs_plane(fb, ccs_plane))
3995 			continue;
3996 
3997 		intel_fb_plane_get_subsampling(&main_hsub, &main_vsub, fb,
3998 					       ccs_to_main_plane(fb, ccs_plane));
3999 		intel_fb_plane_get_subsampling(&hsub, &vsub, fb, ccs_plane);
4000 
4001 		hsub *= main_hsub;
4002 		vsub *= main_vsub;
4003 		x = src_x / hsub;
4004 		y = src_y / vsub;
4005 
4006 		intel_add_fb_offsets(&x, &y, plane_state, ccs_plane);
4007 
4008 		offset = intel_plane_compute_aligned_offset(&x, &y,
4009 							    plane_state,
4010 							    ccs_plane);
4011 
4012 		plane_state->color_plane[ccs_plane].offset = offset;
4013 		plane_state->color_plane[ccs_plane].x = (x * hsub +
4014 							 src_x % hsub) /
4015 							main_hsub;
4016 		plane_state->color_plane[ccs_plane].y = (y * vsub +
4017 							 src_y % vsub) /
4018 							main_vsub;
4019 	}
4020 
4021 	return 0;
4022 }
4023 
4024 int skl_check_plane_surface(struct intel_plane_state *plane_state)
4025 {
4026 	const struct drm_framebuffer *fb = plane_state->hw.fb;
4027 	int ret, i;
4028 
4029 	ret = intel_plane_compute_gtt(plane_state);
4030 	if (ret)
4031 		return ret;
4032 
4033 	if (!plane_state->uapi.visible)
4034 		return 0;
4035 
4036 	/*
4037 	 * Handle the AUX surface first since the main surface setup depends on
4038 	 * it.
4039 	 */
4040 	if (is_ccs_modifier(fb->modifier)) {
4041 		ret = skl_check_ccs_aux_surface(plane_state);
4042 		if (ret)
4043 			return ret;
4044 	}
4045 
4046 	if (intel_format_info_is_yuv_semiplanar(fb->format,
4047 						fb->modifier)) {
4048 		ret = skl_check_nv12_aux_surface(plane_state);
4049 		if (ret)
4050 			return ret;
4051 	}
4052 
4053 	for (i = fb->format->num_planes; i < ARRAY_SIZE(plane_state->color_plane); i++) {
4054 		plane_state->color_plane[i].offset = 0;
4055 		plane_state->color_plane[i].x = 0;
4056 		plane_state->color_plane[i].y = 0;
4057 	}
4058 
4059 	ret = skl_check_main_surface(plane_state);
4060 	if (ret)
4061 		return ret;
4062 
4063 	return 0;
4064 }
4065 
4066 static void i9xx_plane_ratio(const struct intel_crtc_state *crtc_state,
4067 			     const struct intel_plane_state *plane_state,
4068 			     unsigned int *num, unsigned int *den)
4069 {
4070 	const struct drm_framebuffer *fb = plane_state->hw.fb;
4071 	unsigned int cpp = fb->format->cpp[0];
4072 
4073 	/*
4074 	 * g4x bspec says 64bpp pixel rate can't exceed 80%
4075 	 * of cdclk when the sprite plane is enabled on the
4076 	 * same pipe. ilk/snb bspec says 64bpp pixel rate is
4077 	 * never allowed to exceed 80% of cdclk. Let's just go
4078 	 * with the ilk/snb limit always.
4079 	 */
4080 	if (cpp == 8) {
4081 		*num = 10;
4082 		*den = 8;
4083 	} else {
4084 		*num = 1;
4085 		*den = 1;
4086 	}
4087 }
4088 
4089 static int i9xx_plane_min_cdclk(const struct intel_crtc_state *crtc_state,
4090 				const struct intel_plane_state *plane_state)
4091 {
4092 	unsigned int pixel_rate;
4093 	unsigned int num, den;
4094 
4095 	/*
4096 	 * Note that crtc_state->pixel_rate accounts for both
4097 	 * horizontal and vertical panel fitter downscaling factors.
4098 	 * Pre-HSW bspec tells us to only consider the horizontal
4099 	 * downscaling factor here. We ignore that and just consider
4100 	 * both for simplicity.
4101 	 */
4102 	pixel_rate = crtc_state->pixel_rate;
4103 
4104 	i9xx_plane_ratio(crtc_state, plane_state, &num, &den);
4105 
4106 	/* two pixels per clock with double wide pipe */
4107 	if (crtc_state->double_wide)
4108 		den *= 2;
4109 
4110 	return DIV_ROUND_UP(pixel_rate * num, den);
4111 }
4112 
4113 unsigned int
4114 i9xx_plane_max_stride(struct intel_plane *plane,
4115 		      u32 pixel_format, u64 modifier,
4116 		      unsigned int rotation)
4117 {
4118 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
4119 
4120 	if (!HAS_GMCH(dev_priv)) {
4121 		return 32*1024;
4122 	} else if (INTEL_GEN(dev_priv) >= 4) {
4123 		if (modifier == I915_FORMAT_MOD_X_TILED)
4124 			return 16*1024;
4125 		else
4126 			return 32*1024;
4127 	} else if (INTEL_GEN(dev_priv) >= 3) {
4128 		if (modifier == I915_FORMAT_MOD_X_TILED)
4129 			return 8*1024;
4130 		else
4131 			return 16*1024;
4132 	} else {
4133 		if (plane->i9xx_plane == PLANE_C)
4134 			return 4*1024;
4135 		else
4136 			return 8*1024;
4137 	}
4138 }
4139 
4140 static u32 i9xx_plane_ctl_crtc(const struct intel_crtc_state *crtc_state)
4141 {
4142 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
4143 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
4144 	u32 dspcntr = 0;
4145 
4146 	if (crtc_state->gamma_enable)
4147 		dspcntr |= DISPPLANE_GAMMA_ENABLE;
4148 
4149 	if (crtc_state->csc_enable)
4150 		dspcntr |= DISPPLANE_PIPE_CSC_ENABLE;
4151 
4152 	if (INTEL_GEN(dev_priv) < 5)
4153 		dspcntr |= DISPPLANE_SEL_PIPE(crtc->pipe);
4154 
4155 	return dspcntr;
4156 }
4157 
4158 static u32 i9xx_plane_ctl(const struct intel_crtc_state *crtc_state,
4159 			  const struct intel_plane_state *plane_state)
4160 {
4161 	struct drm_i915_private *dev_priv =
4162 		to_i915(plane_state->uapi.plane->dev);
4163 	const struct drm_framebuffer *fb = plane_state->hw.fb;
4164 	unsigned int rotation = plane_state->hw.rotation;
4165 	u32 dspcntr;
4166 
4167 	dspcntr = DISPLAY_PLANE_ENABLE;
4168 
4169 	if (IS_G4X(dev_priv) || IS_GEN(dev_priv, 5) ||
4170 	    IS_GEN(dev_priv, 6) || IS_IVYBRIDGE(dev_priv))
4171 		dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
4172 
4173 	switch (fb->format->format) {
4174 	case DRM_FORMAT_C8:
4175 		dspcntr |= DISPPLANE_8BPP;
4176 		break;
4177 	case DRM_FORMAT_XRGB1555:
4178 		dspcntr |= DISPPLANE_BGRX555;
4179 		break;
4180 	case DRM_FORMAT_ARGB1555:
4181 		dspcntr |= DISPPLANE_BGRA555;
4182 		break;
4183 	case DRM_FORMAT_RGB565:
4184 		dspcntr |= DISPPLANE_BGRX565;
4185 		break;
4186 	case DRM_FORMAT_XRGB8888:
4187 		dspcntr |= DISPPLANE_BGRX888;
4188 		break;
4189 	case DRM_FORMAT_XBGR8888:
4190 		dspcntr |= DISPPLANE_RGBX888;
4191 		break;
4192 	case DRM_FORMAT_ARGB8888:
4193 		dspcntr |= DISPPLANE_BGRA888;
4194 		break;
4195 	case DRM_FORMAT_ABGR8888:
4196 		dspcntr |= DISPPLANE_RGBA888;
4197 		break;
4198 	case DRM_FORMAT_XRGB2101010:
4199 		dspcntr |= DISPPLANE_BGRX101010;
4200 		break;
4201 	case DRM_FORMAT_XBGR2101010:
4202 		dspcntr |= DISPPLANE_RGBX101010;
4203 		break;
4204 	case DRM_FORMAT_ARGB2101010:
4205 		dspcntr |= DISPPLANE_BGRA101010;
4206 		break;
4207 	case DRM_FORMAT_ABGR2101010:
4208 		dspcntr |= DISPPLANE_RGBA101010;
4209 		break;
4210 	case DRM_FORMAT_XBGR16161616F:
4211 		dspcntr |= DISPPLANE_RGBX161616;
4212 		break;
4213 	default:
4214 		MISSING_CASE(fb->format->format);
4215 		return 0;
4216 	}
4217 
4218 	if (INTEL_GEN(dev_priv) >= 4 &&
4219 	    fb->modifier == I915_FORMAT_MOD_X_TILED)
4220 		dspcntr |= DISPPLANE_TILED;
4221 
4222 	if (rotation & DRM_MODE_ROTATE_180)
4223 		dspcntr |= DISPPLANE_ROTATE_180;
4224 
4225 	if (rotation & DRM_MODE_REFLECT_X)
4226 		dspcntr |= DISPPLANE_MIRROR;
4227 
4228 	return dspcntr;
4229 }
4230 
4231 int i9xx_check_plane_surface(struct intel_plane_state *plane_state)
4232 {
4233 	struct drm_i915_private *dev_priv =
4234 		to_i915(plane_state->uapi.plane->dev);
4235 	const struct drm_framebuffer *fb = plane_state->hw.fb;
4236 	int src_x, src_y, src_w;
4237 	u32 offset;
4238 	int ret;
4239 
4240 	ret = intel_plane_compute_gtt(plane_state);
4241 	if (ret)
4242 		return ret;
4243 
4244 	if (!plane_state->uapi.visible)
4245 		return 0;
4246 
4247 	src_w = drm_rect_width(&plane_state->uapi.src) >> 16;
4248 	src_x = plane_state->uapi.src.x1 >> 16;
4249 	src_y = plane_state->uapi.src.y1 >> 16;
4250 
4251 	/* Undocumented hardware limit on i965/g4x/vlv/chv */
4252 	if (HAS_GMCH(dev_priv) && fb->format->cpp[0] == 8 && src_w > 2048)
4253 		return -EINVAL;
4254 
4255 	intel_add_fb_offsets(&src_x, &src_y, plane_state, 0);
4256 
4257 	if (INTEL_GEN(dev_priv) >= 4)
4258 		offset = intel_plane_compute_aligned_offset(&src_x, &src_y,
4259 							    plane_state, 0);
4260 	else
4261 		offset = 0;
4262 
4263 	/*
4264 	 * Put the final coordinates back so that the src
4265 	 * coordinate checks will see the right values.
4266 	 */
4267 	drm_rect_translate_to(&plane_state->uapi.src,
4268 			      src_x << 16, src_y << 16);
4269 
4270 	/* HSW/BDW do this automagically in hardware */
4271 	if (!IS_HASWELL(dev_priv) && !IS_BROADWELL(dev_priv)) {
4272 		unsigned int rotation = plane_state->hw.rotation;
4273 		int src_w = drm_rect_width(&plane_state->uapi.src) >> 16;
4274 		int src_h = drm_rect_height(&plane_state->uapi.src) >> 16;
4275 
4276 		if (rotation & DRM_MODE_ROTATE_180) {
4277 			src_x += src_w - 1;
4278 			src_y += src_h - 1;
4279 		} else if (rotation & DRM_MODE_REFLECT_X) {
4280 			src_x += src_w - 1;
4281 		}
4282 	}
4283 
4284 	plane_state->color_plane[0].offset = offset;
4285 	plane_state->color_plane[0].x = src_x;
4286 	plane_state->color_plane[0].y = src_y;
4287 
4288 	return 0;
4289 }
4290 
4291 static bool i9xx_plane_has_windowing(struct intel_plane *plane)
4292 {
4293 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
4294 	enum i9xx_plane_id i9xx_plane = plane->i9xx_plane;
4295 
4296 	if (IS_CHERRYVIEW(dev_priv))
4297 		return i9xx_plane == PLANE_B;
4298 	else if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv))
4299 		return false;
4300 	else if (IS_GEN(dev_priv, 4))
4301 		return i9xx_plane == PLANE_C;
4302 	else
4303 		return i9xx_plane == PLANE_B ||
4304 			i9xx_plane == PLANE_C;
4305 }
4306 
4307 static int
4308 i9xx_plane_check(struct intel_crtc_state *crtc_state,
4309 		 struct intel_plane_state *plane_state)
4310 {
4311 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
4312 	int ret;
4313 
4314 	ret = chv_plane_check_rotation(plane_state);
4315 	if (ret)
4316 		return ret;
4317 
4318 	ret = intel_atomic_plane_check_clipping(plane_state, crtc_state,
4319 						DRM_PLANE_HELPER_NO_SCALING,
4320 						DRM_PLANE_HELPER_NO_SCALING,
4321 						i9xx_plane_has_windowing(plane));
4322 	if (ret)
4323 		return ret;
4324 
4325 	ret = i9xx_check_plane_surface(plane_state);
4326 	if (ret)
4327 		return ret;
4328 
4329 	if (!plane_state->uapi.visible)
4330 		return 0;
4331 
4332 	ret = intel_plane_check_src_coordinates(plane_state);
4333 	if (ret)
4334 		return ret;
4335 
4336 	plane_state->ctl = i9xx_plane_ctl(crtc_state, plane_state);
4337 
4338 	return 0;
4339 }
4340 
4341 static void i9xx_update_plane(struct intel_plane *plane,
4342 			      const struct intel_crtc_state *crtc_state,
4343 			      const struct intel_plane_state *plane_state)
4344 {
4345 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
4346 	enum i9xx_plane_id i9xx_plane = plane->i9xx_plane;
4347 	u32 linear_offset;
4348 	int x = plane_state->color_plane[0].x;
4349 	int y = plane_state->color_plane[0].y;
4350 	int crtc_x = plane_state->uapi.dst.x1;
4351 	int crtc_y = plane_state->uapi.dst.y1;
4352 	int crtc_w = drm_rect_width(&plane_state->uapi.dst);
4353 	int crtc_h = drm_rect_height(&plane_state->uapi.dst);
4354 	unsigned long irqflags;
4355 	u32 dspaddr_offset;
4356 	u32 dspcntr;
4357 
4358 	dspcntr = plane_state->ctl | i9xx_plane_ctl_crtc(crtc_state);
4359 
4360 	linear_offset = intel_fb_xy_to_linear(x, y, plane_state, 0);
4361 
4362 	if (INTEL_GEN(dev_priv) >= 4)
4363 		dspaddr_offset = plane_state->color_plane[0].offset;
4364 	else
4365 		dspaddr_offset = linear_offset;
4366 
4367 	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
4368 
4369 	intel_de_write_fw(dev_priv, DSPSTRIDE(i9xx_plane),
4370 			  plane_state->color_plane[0].stride);
4371 
4372 	if (INTEL_GEN(dev_priv) < 4) {
4373 		/*
4374 		 * PLANE_A doesn't actually have a full window
4375 		 * generator but let's assume we still need to
4376 		 * program whatever is there.
4377 		 */
4378 		intel_de_write_fw(dev_priv, DSPPOS(i9xx_plane),
4379 				  (crtc_y << 16) | crtc_x);
4380 		intel_de_write_fw(dev_priv, DSPSIZE(i9xx_plane),
4381 				  ((crtc_h - 1) << 16) | (crtc_w - 1));
4382 	} else if (IS_CHERRYVIEW(dev_priv) && i9xx_plane == PLANE_B) {
4383 		intel_de_write_fw(dev_priv, PRIMPOS(i9xx_plane),
4384 				  (crtc_y << 16) | crtc_x);
4385 		intel_de_write_fw(dev_priv, PRIMSIZE(i9xx_plane),
4386 				  ((crtc_h - 1) << 16) | (crtc_w - 1));
4387 		intel_de_write_fw(dev_priv, PRIMCNSTALPHA(i9xx_plane), 0);
4388 	}
4389 
4390 	if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
4391 		intel_de_write_fw(dev_priv, DSPOFFSET(i9xx_plane),
4392 				  (y << 16) | x);
4393 	} else if (INTEL_GEN(dev_priv) >= 4) {
4394 		intel_de_write_fw(dev_priv, DSPLINOFF(i9xx_plane),
4395 				  linear_offset);
4396 		intel_de_write_fw(dev_priv, DSPTILEOFF(i9xx_plane),
4397 				  (y << 16) | x);
4398 	}
4399 
4400 	/*
4401 	 * The control register self-arms if the plane was previously
4402 	 * disabled. Try to make the plane enable atomic by writing
4403 	 * the control register just before the surface register.
4404 	 */
4405 	intel_de_write_fw(dev_priv, DSPCNTR(i9xx_plane), dspcntr);
4406 	if (INTEL_GEN(dev_priv) >= 4)
4407 		intel_de_write_fw(dev_priv, DSPSURF(i9xx_plane),
4408 				  intel_plane_ggtt_offset(plane_state) + dspaddr_offset);
4409 	else
4410 		intel_de_write_fw(dev_priv, DSPADDR(i9xx_plane),
4411 				  intel_plane_ggtt_offset(plane_state) + dspaddr_offset);
4412 
4413 	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
4414 }
4415 
4416 static void i9xx_disable_plane(struct intel_plane *plane,
4417 			       const struct intel_crtc_state *crtc_state)
4418 {
4419 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
4420 	enum i9xx_plane_id i9xx_plane = plane->i9xx_plane;
4421 	unsigned long irqflags;
4422 	u32 dspcntr;
4423 
4424 	/*
4425 	 * DSPCNTR pipe gamma enable on g4x+ and pipe csc
4426 	 * enable on ilk+ affect the pipe bottom color as
4427 	 * well, so we must configure them even if the plane
4428 	 * is disabled.
4429 	 *
4430 	 * On pre-g4x there is no way to gamma correct the
4431 	 * pipe bottom color but we'll keep on doing this
4432 	 * anyway so that the crtc state readout works correctly.
4433 	 */
4434 	dspcntr = i9xx_plane_ctl_crtc(crtc_state);
4435 
4436 	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
4437 
4438 	intel_de_write_fw(dev_priv, DSPCNTR(i9xx_plane), dspcntr);
4439 	if (INTEL_GEN(dev_priv) >= 4)
4440 		intel_de_write_fw(dev_priv, DSPSURF(i9xx_plane), 0);
4441 	else
4442 		intel_de_write_fw(dev_priv, DSPADDR(i9xx_plane), 0);
4443 
4444 	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
4445 }
4446 
4447 static bool i9xx_plane_get_hw_state(struct intel_plane *plane,
4448 				    enum pipe *pipe)
4449 {
4450 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
4451 	enum intel_display_power_domain power_domain;
4452 	enum i9xx_plane_id i9xx_plane = plane->i9xx_plane;
4453 	intel_wakeref_t wakeref;
4454 	bool ret;
4455 	u32 val;
4456 
4457 	/*
4458 	 * Not 100% correct for planes that can move between pipes,
4459 	 * but that's only the case for gen2-4 which don't have any
4460 	 * display power wells.
4461 	 */
4462 	power_domain = POWER_DOMAIN_PIPE(plane->pipe);
4463 	wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain);
4464 	if (!wakeref)
4465 		return false;
4466 
4467 	val = intel_de_read(dev_priv, DSPCNTR(i9xx_plane));
4468 
4469 	ret = val & DISPLAY_PLANE_ENABLE;
4470 
4471 	if (INTEL_GEN(dev_priv) >= 5)
4472 		*pipe = plane->pipe;
4473 	else
4474 		*pipe = (val & DISPPLANE_SEL_PIPE_MASK) >>
4475 			DISPPLANE_SEL_PIPE_SHIFT;
4476 
4477 	intel_display_power_put(dev_priv, power_domain, wakeref);
4478 
4479 	return ret;
4480 }
4481 
4482 static void skl_detach_scaler(struct intel_crtc *intel_crtc, int id)
4483 {
4484 	struct drm_device *dev = intel_crtc->base.dev;
4485 	struct drm_i915_private *dev_priv = to_i915(dev);
4486 	unsigned long irqflags;
4487 
4488 	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
4489 
4490 	intel_de_write_fw(dev_priv, SKL_PS_CTRL(intel_crtc->pipe, id), 0);
4491 	intel_de_write_fw(dev_priv, SKL_PS_WIN_POS(intel_crtc->pipe, id), 0);
4492 	intel_de_write_fw(dev_priv, SKL_PS_WIN_SZ(intel_crtc->pipe, id), 0);
4493 
4494 	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
4495 }
4496 
4497 /*
4498  * This function detaches (aka. unbinds) unused scalers in hardware
4499  */
4500 static void skl_detach_scalers(const struct intel_crtc_state *crtc_state)
4501 {
4502 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc);
4503 	const struct intel_crtc_scaler_state *scaler_state =
4504 		&crtc_state->scaler_state;
4505 	int i;
4506 
4507 	/* loop through and disable scalers that aren't in use */
4508 	for (i = 0; i < intel_crtc->num_scalers; i++) {
4509 		if (!scaler_state->scalers[i].in_use)
4510 			skl_detach_scaler(intel_crtc, i);
4511 	}
4512 }
4513 
4514 static unsigned int skl_plane_stride_mult(const struct drm_framebuffer *fb,
4515 					  int color_plane, unsigned int rotation)
4516 {
4517 	/*
4518 	 * The stride is either expressed as a multiple of 64 bytes chunks for
4519 	 * linear buffers or in number of tiles for tiled buffers.
4520 	 */
4521 	if (is_surface_linear(fb, color_plane))
4522 		return 64;
4523 	else if (drm_rotation_90_or_270(rotation))
4524 		return intel_tile_height(fb, color_plane);
4525 	else
4526 		return intel_tile_width_bytes(fb, color_plane);
4527 }
4528 
4529 u32 skl_plane_stride(const struct intel_plane_state *plane_state,
4530 		     int color_plane)
4531 {
4532 	const struct drm_framebuffer *fb = plane_state->hw.fb;
4533 	unsigned int rotation = plane_state->hw.rotation;
4534 	u32 stride = plane_state->color_plane[color_plane].stride;
4535 
4536 	if (color_plane >= fb->format->num_planes)
4537 		return 0;
4538 
4539 	return stride / skl_plane_stride_mult(fb, color_plane, rotation);
4540 }
4541 
4542 static u32 skl_plane_ctl_format(u32 pixel_format)
4543 {
4544 	switch (pixel_format) {
4545 	case DRM_FORMAT_C8:
4546 		return PLANE_CTL_FORMAT_INDEXED;
4547 	case DRM_FORMAT_RGB565:
4548 		return PLANE_CTL_FORMAT_RGB_565;
4549 	case DRM_FORMAT_XBGR8888:
4550 	case DRM_FORMAT_ABGR8888:
4551 		return PLANE_CTL_FORMAT_XRGB_8888 | PLANE_CTL_ORDER_RGBX;
4552 	case DRM_FORMAT_XRGB8888:
4553 	case DRM_FORMAT_ARGB8888:
4554 		return PLANE_CTL_FORMAT_XRGB_8888;
4555 	case DRM_FORMAT_XBGR2101010:
4556 	case DRM_FORMAT_ABGR2101010:
4557 		return PLANE_CTL_FORMAT_XRGB_2101010 | PLANE_CTL_ORDER_RGBX;
4558 	case DRM_FORMAT_XRGB2101010:
4559 	case DRM_FORMAT_ARGB2101010:
4560 		return PLANE_CTL_FORMAT_XRGB_2101010;
4561 	case DRM_FORMAT_XBGR16161616F:
4562 	case DRM_FORMAT_ABGR16161616F:
4563 		return PLANE_CTL_FORMAT_XRGB_16161616F | PLANE_CTL_ORDER_RGBX;
4564 	case DRM_FORMAT_XRGB16161616F:
4565 	case DRM_FORMAT_ARGB16161616F:
4566 		return PLANE_CTL_FORMAT_XRGB_16161616F;
4567 	case DRM_FORMAT_XYUV8888:
4568 		return PLANE_CTL_FORMAT_XYUV;
4569 	case DRM_FORMAT_YUYV:
4570 		return PLANE_CTL_FORMAT_YUV422 | PLANE_CTL_YUV422_YUYV;
4571 	case DRM_FORMAT_YVYU:
4572 		return PLANE_CTL_FORMAT_YUV422 | PLANE_CTL_YUV422_YVYU;
4573 	case DRM_FORMAT_UYVY:
4574 		return PLANE_CTL_FORMAT_YUV422 | PLANE_CTL_YUV422_UYVY;
4575 	case DRM_FORMAT_VYUY:
4576 		return PLANE_CTL_FORMAT_YUV422 | PLANE_CTL_YUV422_VYUY;
4577 	case DRM_FORMAT_NV12:
4578 		return PLANE_CTL_FORMAT_NV12;
4579 	case DRM_FORMAT_P010:
4580 		return PLANE_CTL_FORMAT_P010;
4581 	case DRM_FORMAT_P012:
4582 		return PLANE_CTL_FORMAT_P012;
4583 	case DRM_FORMAT_P016:
4584 		return PLANE_CTL_FORMAT_P016;
4585 	case DRM_FORMAT_Y210:
4586 		return PLANE_CTL_FORMAT_Y210;
4587 	case DRM_FORMAT_Y212:
4588 		return PLANE_CTL_FORMAT_Y212;
4589 	case DRM_FORMAT_Y216:
4590 		return PLANE_CTL_FORMAT_Y216;
4591 	case DRM_FORMAT_XVYU2101010:
4592 		return PLANE_CTL_FORMAT_Y410;
4593 	case DRM_FORMAT_XVYU12_16161616:
4594 		return PLANE_CTL_FORMAT_Y412;
4595 	case DRM_FORMAT_XVYU16161616:
4596 		return PLANE_CTL_FORMAT_Y416;
4597 	default:
4598 		MISSING_CASE(pixel_format);
4599 	}
4600 
4601 	return 0;
4602 }
4603 
4604 static u32 skl_plane_ctl_alpha(const struct intel_plane_state *plane_state)
4605 {
4606 	if (!plane_state->hw.fb->format->has_alpha)
4607 		return PLANE_CTL_ALPHA_DISABLE;
4608 
4609 	switch (plane_state->hw.pixel_blend_mode) {
4610 	case DRM_MODE_BLEND_PIXEL_NONE:
4611 		return PLANE_CTL_ALPHA_DISABLE;
4612 	case DRM_MODE_BLEND_PREMULTI:
4613 		return PLANE_CTL_ALPHA_SW_PREMULTIPLY;
4614 	case DRM_MODE_BLEND_COVERAGE:
4615 		return PLANE_CTL_ALPHA_HW_PREMULTIPLY;
4616 	default:
4617 		MISSING_CASE(plane_state->hw.pixel_blend_mode);
4618 		return PLANE_CTL_ALPHA_DISABLE;
4619 	}
4620 }
4621 
4622 static u32 glk_plane_color_ctl_alpha(const struct intel_plane_state *plane_state)
4623 {
4624 	if (!plane_state->hw.fb->format->has_alpha)
4625 		return PLANE_COLOR_ALPHA_DISABLE;
4626 
4627 	switch (plane_state->hw.pixel_blend_mode) {
4628 	case DRM_MODE_BLEND_PIXEL_NONE:
4629 		return PLANE_COLOR_ALPHA_DISABLE;
4630 	case DRM_MODE_BLEND_PREMULTI:
4631 		return PLANE_COLOR_ALPHA_SW_PREMULTIPLY;
4632 	case DRM_MODE_BLEND_COVERAGE:
4633 		return PLANE_COLOR_ALPHA_HW_PREMULTIPLY;
4634 	default:
4635 		MISSING_CASE(plane_state->hw.pixel_blend_mode);
4636 		return PLANE_COLOR_ALPHA_DISABLE;
4637 	}
4638 }
4639 
4640 static u32 skl_plane_ctl_tiling(u64 fb_modifier)
4641 {
4642 	switch (fb_modifier) {
4643 	case DRM_FORMAT_MOD_LINEAR:
4644 		break;
4645 	case I915_FORMAT_MOD_X_TILED:
4646 		return PLANE_CTL_TILED_X;
4647 	case I915_FORMAT_MOD_Y_TILED:
4648 		return PLANE_CTL_TILED_Y;
4649 	case I915_FORMAT_MOD_Y_TILED_CCS:
4650 		return PLANE_CTL_TILED_Y | PLANE_CTL_RENDER_DECOMPRESSION_ENABLE;
4651 	case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS:
4652 		return PLANE_CTL_TILED_Y |
4653 		       PLANE_CTL_RENDER_DECOMPRESSION_ENABLE |
4654 		       PLANE_CTL_CLEAR_COLOR_DISABLE;
4655 	case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS:
4656 		return PLANE_CTL_TILED_Y | PLANE_CTL_MEDIA_DECOMPRESSION_ENABLE;
4657 	case I915_FORMAT_MOD_Yf_TILED:
4658 		return PLANE_CTL_TILED_YF;
4659 	case I915_FORMAT_MOD_Yf_TILED_CCS:
4660 		return PLANE_CTL_TILED_YF | PLANE_CTL_RENDER_DECOMPRESSION_ENABLE;
4661 	default:
4662 		MISSING_CASE(fb_modifier);
4663 	}
4664 
4665 	return 0;
4666 }
4667 
4668 static u32 skl_plane_ctl_rotate(unsigned int rotate)
4669 {
4670 	switch (rotate) {
4671 	case DRM_MODE_ROTATE_0:
4672 		break;
4673 	/*
4674 	 * DRM_MODE_ROTATE_ is counter clockwise to stay compatible with Xrandr
4675 	 * while i915 HW rotation is clockwise, thats why this swapping.
4676 	 */
4677 	case DRM_MODE_ROTATE_90:
4678 		return PLANE_CTL_ROTATE_270;
4679 	case DRM_MODE_ROTATE_180:
4680 		return PLANE_CTL_ROTATE_180;
4681 	case DRM_MODE_ROTATE_270:
4682 		return PLANE_CTL_ROTATE_90;
4683 	default:
4684 		MISSING_CASE(rotate);
4685 	}
4686 
4687 	return 0;
4688 }
4689 
4690 static u32 cnl_plane_ctl_flip(unsigned int reflect)
4691 {
4692 	switch (reflect) {
4693 	case 0:
4694 		break;
4695 	case DRM_MODE_REFLECT_X:
4696 		return PLANE_CTL_FLIP_HORIZONTAL;
4697 	case DRM_MODE_REFLECT_Y:
4698 	default:
4699 		MISSING_CASE(reflect);
4700 	}
4701 
4702 	return 0;
4703 }
4704 
4705 u32 skl_plane_ctl_crtc(const struct intel_crtc_state *crtc_state)
4706 {
4707 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
4708 	u32 plane_ctl = 0;
4709 
4710 	if (crtc_state->uapi.async_flip)
4711 		plane_ctl |= PLANE_CTL_ASYNC_FLIP;
4712 
4713 	if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))
4714 		return plane_ctl;
4715 
4716 	if (crtc_state->gamma_enable)
4717 		plane_ctl |= PLANE_CTL_PIPE_GAMMA_ENABLE;
4718 
4719 	if (crtc_state->csc_enable)
4720 		plane_ctl |= PLANE_CTL_PIPE_CSC_ENABLE;
4721 
4722 	return plane_ctl;
4723 }
4724 
4725 u32 skl_plane_ctl(const struct intel_crtc_state *crtc_state,
4726 		  const struct intel_plane_state *plane_state)
4727 {
4728 	struct drm_i915_private *dev_priv =
4729 		to_i915(plane_state->uapi.plane->dev);
4730 	const struct drm_framebuffer *fb = plane_state->hw.fb;
4731 	unsigned int rotation = plane_state->hw.rotation;
4732 	const struct drm_intel_sprite_colorkey *key = &plane_state->ckey;
4733 	u32 plane_ctl;
4734 
4735 	plane_ctl = PLANE_CTL_ENABLE;
4736 
4737 	if (INTEL_GEN(dev_priv) < 10 && !IS_GEMINILAKE(dev_priv)) {
4738 		plane_ctl |= skl_plane_ctl_alpha(plane_state);
4739 		plane_ctl |= PLANE_CTL_PLANE_GAMMA_DISABLE;
4740 
4741 		if (plane_state->hw.color_encoding == DRM_COLOR_YCBCR_BT709)
4742 			plane_ctl |= PLANE_CTL_YUV_TO_RGB_CSC_FORMAT_BT709;
4743 
4744 		if (plane_state->hw.color_range == DRM_COLOR_YCBCR_FULL_RANGE)
4745 			plane_ctl |= PLANE_CTL_YUV_RANGE_CORRECTION_DISABLE;
4746 	}
4747 
4748 	plane_ctl |= skl_plane_ctl_format(fb->format->format);
4749 	plane_ctl |= skl_plane_ctl_tiling(fb->modifier);
4750 	plane_ctl |= skl_plane_ctl_rotate(rotation & DRM_MODE_ROTATE_MASK);
4751 
4752 	if (INTEL_GEN(dev_priv) >= 10)
4753 		plane_ctl |= cnl_plane_ctl_flip(rotation &
4754 						DRM_MODE_REFLECT_MASK);
4755 
4756 	if (key->flags & I915_SET_COLORKEY_DESTINATION)
4757 		plane_ctl |= PLANE_CTL_KEY_ENABLE_DESTINATION;
4758 	else if (key->flags & I915_SET_COLORKEY_SOURCE)
4759 		plane_ctl |= PLANE_CTL_KEY_ENABLE_SOURCE;
4760 
4761 	return plane_ctl;
4762 }
4763 
4764 u32 glk_plane_color_ctl_crtc(const struct intel_crtc_state *crtc_state)
4765 {
4766 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
4767 	u32 plane_color_ctl = 0;
4768 
4769 	if (INTEL_GEN(dev_priv) >= 11)
4770 		return plane_color_ctl;
4771 
4772 	if (crtc_state->gamma_enable)
4773 		plane_color_ctl |= PLANE_COLOR_PIPE_GAMMA_ENABLE;
4774 
4775 	if (crtc_state->csc_enable)
4776 		plane_color_ctl |= PLANE_COLOR_PIPE_CSC_ENABLE;
4777 
4778 	return plane_color_ctl;
4779 }
4780 
4781 u32 glk_plane_color_ctl(const struct intel_crtc_state *crtc_state,
4782 			const struct intel_plane_state *plane_state)
4783 {
4784 	struct drm_i915_private *dev_priv =
4785 		to_i915(plane_state->uapi.plane->dev);
4786 	const struct drm_framebuffer *fb = plane_state->hw.fb;
4787 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
4788 	u32 plane_color_ctl = 0;
4789 
4790 	plane_color_ctl |= PLANE_COLOR_PLANE_GAMMA_DISABLE;
4791 	plane_color_ctl |= glk_plane_color_ctl_alpha(plane_state);
4792 
4793 	if (fb->format->is_yuv && !icl_is_hdr_plane(dev_priv, plane->id)) {
4794 		switch (plane_state->hw.color_encoding) {
4795 		case DRM_COLOR_YCBCR_BT709:
4796 			plane_color_ctl |= PLANE_COLOR_CSC_MODE_YUV709_TO_RGB709;
4797 			break;
4798 		case DRM_COLOR_YCBCR_BT2020:
4799 			plane_color_ctl |=
4800 				PLANE_COLOR_CSC_MODE_YUV2020_TO_RGB2020;
4801 			break;
4802 		default:
4803 			plane_color_ctl |=
4804 				PLANE_COLOR_CSC_MODE_YUV601_TO_RGB601;
4805 		}
4806 		if (plane_state->hw.color_range == DRM_COLOR_YCBCR_FULL_RANGE)
4807 			plane_color_ctl |= PLANE_COLOR_YUV_RANGE_CORRECTION_DISABLE;
4808 	} else if (fb->format->is_yuv) {
4809 		plane_color_ctl |= PLANE_COLOR_INPUT_CSC_ENABLE;
4810 	}
4811 
4812 	return plane_color_ctl;
4813 }
4814 
4815 static int
4816 __intel_display_resume(struct drm_device *dev,
4817 		       struct drm_atomic_state *state,
4818 		       struct drm_modeset_acquire_ctx *ctx)
4819 {
4820 	struct drm_crtc_state *crtc_state;
4821 	struct drm_crtc *crtc;
4822 	int i, ret;
4823 
4824 	intel_modeset_setup_hw_state(dev, ctx);
4825 	intel_vga_redisable(to_i915(dev));
4826 
4827 	if (!state)
4828 		return 0;
4829 
4830 	/*
4831 	 * We've duplicated the state, pointers to the old state are invalid.
4832 	 *
4833 	 * Don't attempt to use the old state until we commit the duplicated state.
4834 	 */
4835 	for_each_new_crtc_in_state(state, crtc, crtc_state, i) {
4836 		/*
4837 		 * Force recalculation even if we restore
4838 		 * current state. With fast modeset this may not result
4839 		 * in a modeset when the state is compatible.
4840 		 */
4841 		crtc_state->mode_changed = true;
4842 	}
4843 
4844 	/* ignore any reset values/BIOS leftovers in the WM registers */
4845 	if (!HAS_GMCH(to_i915(dev)))
4846 		to_intel_atomic_state(state)->skip_intermediate_wm = true;
4847 
4848 	ret = drm_atomic_helper_commit_duplicated_state(state, ctx);
4849 
4850 	drm_WARN_ON(dev, ret == -EDEADLK);
4851 	return ret;
4852 }
4853 
4854 static bool gpu_reset_clobbers_display(struct drm_i915_private *dev_priv)
4855 {
4856 	return (INTEL_INFO(dev_priv)->gpu_reset_clobbers_display &&
4857 		intel_has_gpu_reset(&dev_priv->gt));
4858 }
4859 
4860 void intel_display_prepare_reset(struct drm_i915_private *dev_priv)
4861 {
4862 	struct drm_device *dev = &dev_priv->drm;
4863 	struct drm_modeset_acquire_ctx *ctx = &dev_priv->reset_ctx;
4864 	struct drm_atomic_state *state;
4865 	int ret;
4866 
4867 	if (!HAS_DISPLAY(dev_priv))
4868 		return;
4869 
4870 	/* reset doesn't touch the display */
4871 	if (!dev_priv->params.force_reset_modeset_test &&
4872 	    !gpu_reset_clobbers_display(dev_priv))
4873 		return;
4874 
4875 	/* We have a modeset vs reset deadlock, defensively unbreak it. */
4876 	set_bit(I915_RESET_MODESET, &dev_priv->gt.reset.flags);
4877 	smp_mb__after_atomic();
4878 	wake_up_bit(&dev_priv->gt.reset.flags, I915_RESET_MODESET);
4879 
4880 	if (atomic_read(&dev_priv->gpu_error.pending_fb_pin)) {
4881 		drm_dbg_kms(&dev_priv->drm,
4882 			    "Modeset potentially stuck, unbreaking through wedging\n");
4883 		intel_gt_set_wedged(&dev_priv->gt);
4884 	}
4885 
4886 	/*
4887 	 * Need mode_config.mutex so that we don't
4888 	 * trample ongoing ->detect() and whatnot.
4889 	 */
4890 	mutex_lock(&dev->mode_config.mutex);
4891 	drm_modeset_acquire_init(ctx, 0);
4892 	while (1) {
4893 		ret = drm_modeset_lock_all_ctx(dev, ctx);
4894 		if (ret != -EDEADLK)
4895 			break;
4896 
4897 		drm_modeset_backoff(ctx);
4898 	}
4899 	/*
4900 	 * Disabling the crtcs gracefully seems nicer. Also the
4901 	 * g33 docs say we should at least disable all the planes.
4902 	 */
4903 	state = drm_atomic_helper_duplicate_state(dev, ctx);
4904 	if (IS_ERR(state)) {
4905 		ret = PTR_ERR(state);
4906 		drm_err(&dev_priv->drm, "Duplicating state failed with %i\n",
4907 			ret);
4908 		return;
4909 	}
4910 
4911 	ret = drm_atomic_helper_disable_all(dev, ctx);
4912 	if (ret) {
4913 		drm_err(&dev_priv->drm, "Suspending crtc's failed with %i\n",
4914 			ret);
4915 		drm_atomic_state_put(state);
4916 		return;
4917 	}
4918 
4919 	dev_priv->modeset_restore_state = state;
4920 	state->acquire_ctx = ctx;
4921 }
4922 
4923 void intel_display_finish_reset(struct drm_i915_private *dev_priv)
4924 {
4925 	struct drm_device *dev = &dev_priv->drm;
4926 	struct drm_modeset_acquire_ctx *ctx = &dev_priv->reset_ctx;
4927 	struct drm_atomic_state *state;
4928 	int ret;
4929 
4930 	if (!HAS_DISPLAY(dev_priv))
4931 		return;
4932 
4933 	/* reset doesn't touch the display */
4934 	if (!test_bit(I915_RESET_MODESET, &dev_priv->gt.reset.flags))
4935 		return;
4936 
4937 	state = fetch_and_zero(&dev_priv->modeset_restore_state);
4938 	if (!state)
4939 		goto unlock;
4940 
4941 	/* reset doesn't touch the display */
4942 	if (!gpu_reset_clobbers_display(dev_priv)) {
4943 		/* for testing only restore the display */
4944 		ret = __intel_display_resume(dev, state, ctx);
4945 		if (ret)
4946 			drm_err(&dev_priv->drm,
4947 				"Restoring old state failed with %i\n", ret);
4948 	} else {
4949 		/*
4950 		 * The display has been reset as well,
4951 		 * so need a full re-initialization.
4952 		 */
4953 		intel_pps_unlock_regs_wa(dev_priv);
4954 		intel_modeset_init_hw(dev_priv);
4955 		intel_init_clock_gating(dev_priv);
4956 		intel_hpd_init(dev_priv);
4957 
4958 		ret = __intel_display_resume(dev, state, ctx);
4959 		if (ret)
4960 			drm_err(&dev_priv->drm,
4961 				"Restoring old state failed with %i\n", ret);
4962 
4963 		intel_hpd_poll_disable(dev_priv);
4964 	}
4965 
4966 	drm_atomic_state_put(state);
4967 unlock:
4968 	drm_modeset_drop_locks(ctx);
4969 	drm_modeset_acquire_fini(ctx);
4970 	mutex_unlock(&dev->mode_config.mutex);
4971 
4972 	clear_bit_unlock(I915_RESET_MODESET, &dev_priv->gt.reset.flags);
4973 }
4974 
4975 static void icl_set_pipe_chicken(struct intel_crtc *crtc)
4976 {
4977 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
4978 	enum pipe pipe = crtc->pipe;
4979 	u32 tmp;
4980 
4981 	tmp = intel_de_read(dev_priv, PIPE_CHICKEN(pipe));
4982 
4983 	/*
4984 	 * Display WA #1153: icl
4985 	 * enable hardware to bypass the alpha math
4986 	 * and rounding for per-pixel values 00 and 0xff
4987 	 */
4988 	tmp |= PER_PIXEL_ALPHA_BYPASS_EN;
4989 	/*
4990 	 * Display WA # 1605353570: icl
4991 	 * Set the pixel rounding bit to 1 for allowing
4992 	 * passthrough of Frame buffer pixels unmodified
4993 	 * across pipe
4994 	 */
4995 	tmp |= PIXEL_ROUNDING_TRUNC_FB_PASSTHRU;
4996 	intel_de_write(dev_priv, PIPE_CHICKEN(pipe), tmp);
4997 }
4998 
4999 static void intel_fdi_normal_train(struct intel_crtc *crtc)
5000 {
5001 	struct drm_device *dev = crtc->base.dev;
5002 	struct drm_i915_private *dev_priv = to_i915(dev);
5003 	enum pipe pipe = crtc->pipe;
5004 	i915_reg_t reg;
5005 	u32 temp;
5006 
5007 	/* enable normal train */
5008 	reg = FDI_TX_CTL(pipe);
5009 	temp = intel_de_read(dev_priv, reg);
5010 	if (IS_IVYBRIDGE(dev_priv)) {
5011 		temp &= ~FDI_LINK_TRAIN_NONE_IVB;
5012 		temp |= FDI_LINK_TRAIN_NONE_IVB | FDI_TX_ENHANCE_FRAME_ENABLE;
5013 	} else {
5014 		temp &= ~FDI_LINK_TRAIN_NONE;
5015 		temp |= FDI_LINK_TRAIN_NONE | FDI_TX_ENHANCE_FRAME_ENABLE;
5016 	}
5017 	intel_de_write(dev_priv, reg, temp);
5018 
5019 	reg = FDI_RX_CTL(pipe);
5020 	temp = intel_de_read(dev_priv, reg);
5021 	if (HAS_PCH_CPT(dev_priv)) {
5022 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
5023 		temp |= FDI_LINK_TRAIN_NORMAL_CPT;
5024 	} else {
5025 		temp &= ~FDI_LINK_TRAIN_NONE;
5026 		temp |= FDI_LINK_TRAIN_NONE;
5027 	}
5028 	intel_de_write(dev_priv, reg, temp | FDI_RX_ENHANCE_FRAME_ENABLE);
5029 
5030 	/* wait one idle pattern time */
5031 	intel_de_posting_read(dev_priv, reg);
5032 	udelay(1000);
5033 
5034 	/* IVB wants error correction enabled */
5035 	if (IS_IVYBRIDGE(dev_priv))
5036 		intel_de_write(dev_priv, reg,
5037 		               intel_de_read(dev_priv, reg) | FDI_FS_ERRC_ENABLE | FDI_FE_ERRC_ENABLE);
5038 }
5039 
5040 /* The FDI link training functions for ILK/Ibexpeak. */
5041 static void ilk_fdi_link_train(struct intel_crtc *crtc,
5042 			       const struct intel_crtc_state *crtc_state)
5043 {
5044 	struct drm_device *dev = crtc->base.dev;
5045 	struct drm_i915_private *dev_priv = to_i915(dev);
5046 	enum pipe pipe = crtc->pipe;
5047 	i915_reg_t reg;
5048 	u32 temp, tries;
5049 
5050 	/* FDI needs bits from pipe first */
5051 	assert_pipe_enabled(dev_priv, crtc_state->cpu_transcoder);
5052 
5053 	/* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
5054 	   for train result */
5055 	reg = FDI_RX_IMR(pipe);
5056 	temp = intel_de_read(dev_priv, reg);
5057 	temp &= ~FDI_RX_SYMBOL_LOCK;
5058 	temp &= ~FDI_RX_BIT_LOCK;
5059 	intel_de_write(dev_priv, reg, temp);
5060 	intel_de_read(dev_priv, reg);
5061 	udelay(150);
5062 
5063 	/* enable CPU FDI TX and PCH FDI RX */
5064 	reg = FDI_TX_CTL(pipe);
5065 	temp = intel_de_read(dev_priv, reg);
5066 	temp &= ~FDI_DP_PORT_WIDTH_MASK;
5067 	temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes);
5068 	temp &= ~FDI_LINK_TRAIN_NONE;
5069 	temp |= FDI_LINK_TRAIN_PATTERN_1;
5070 	intel_de_write(dev_priv, reg, temp | FDI_TX_ENABLE);
5071 
5072 	reg = FDI_RX_CTL(pipe);
5073 	temp = intel_de_read(dev_priv, reg);
5074 	temp &= ~FDI_LINK_TRAIN_NONE;
5075 	temp |= FDI_LINK_TRAIN_PATTERN_1;
5076 	intel_de_write(dev_priv, reg, temp | FDI_RX_ENABLE);
5077 
5078 	intel_de_posting_read(dev_priv, reg);
5079 	udelay(150);
5080 
5081 	/* Ironlake workaround, enable clock pointer after FDI enable*/
5082 	intel_de_write(dev_priv, FDI_RX_CHICKEN(pipe),
5083 		       FDI_RX_PHASE_SYNC_POINTER_OVR);
5084 	intel_de_write(dev_priv, FDI_RX_CHICKEN(pipe),
5085 		       FDI_RX_PHASE_SYNC_POINTER_OVR | FDI_RX_PHASE_SYNC_POINTER_EN);
5086 
5087 	reg = FDI_RX_IIR(pipe);
5088 	for (tries = 0; tries < 5; tries++) {
5089 		temp = intel_de_read(dev_priv, reg);
5090 		drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp);
5091 
5092 		if ((temp & FDI_RX_BIT_LOCK)) {
5093 			drm_dbg_kms(&dev_priv->drm, "FDI train 1 done.\n");
5094 			intel_de_write(dev_priv, reg, temp | FDI_RX_BIT_LOCK);
5095 			break;
5096 		}
5097 	}
5098 	if (tries == 5)
5099 		drm_err(&dev_priv->drm, "FDI train 1 fail!\n");
5100 
5101 	/* Train 2 */
5102 	reg = FDI_TX_CTL(pipe);
5103 	temp = intel_de_read(dev_priv, reg);
5104 	temp &= ~FDI_LINK_TRAIN_NONE;
5105 	temp |= FDI_LINK_TRAIN_PATTERN_2;
5106 	intel_de_write(dev_priv, reg, temp);
5107 
5108 	reg = FDI_RX_CTL(pipe);
5109 	temp = intel_de_read(dev_priv, reg);
5110 	temp &= ~FDI_LINK_TRAIN_NONE;
5111 	temp |= FDI_LINK_TRAIN_PATTERN_2;
5112 	intel_de_write(dev_priv, reg, temp);
5113 
5114 	intel_de_posting_read(dev_priv, reg);
5115 	udelay(150);
5116 
5117 	reg = FDI_RX_IIR(pipe);
5118 	for (tries = 0; tries < 5; tries++) {
5119 		temp = intel_de_read(dev_priv, reg);
5120 		drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp);
5121 
5122 		if (temp & FDI_RX_SYMBOL_LOCK) {
5123 			intel_de_write(dev_priv, reg,
5124 				       temp | FDI_RX_SYMBOL_LOCK);
5125 			drm_dbg_kms(&dev_priv->drm, "FDI train 2 done.\n");
5126 			break;
5127 		}
5128 	}
5129 	if (tries == 5)
5130 		drm_err(&dev_priv->drm, "FDI train 2 fail!\n");
5131 
5132 	drm_dbg_kms(&dev_priv->drm, "FDI train done\n");
5133 
5134 }
5135 
5136 static const int snb_b_fdi_train_param[] = {
5137 	FDI_LINK_TRAIN_400MV_0DB_SNB_B,
5138 	FDI_LINK_TRAIN_400MV_6DB_SNB_B,
5139 	FDI_LINK_TRAIN_600MV_3_5DB_SNB_B,
5140 	FDI_LINK_TRAIN_800MV_0DB_SNB_B,
5141 };
5142 
5143 /* The FDI link training functions for SNB/Cougarpoint. */
5144 static void gen6_fdi_link_train(struct intel_crtc *crtc,
5145 				const struct intel_crtc_state *crtc_state)
5146 {
5147 	struct drm_device *dev = crtc->base.dev;
5148 	struct drm_i915_private *dev_priv = to_i915(dev);
5149 	enum pipe pipe = crtc->pipe;
5150 	i915_reg_t reg;
5151 	u32 temp, i, retry;
5152 
5153 	/* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
5154 	   for train result */
5155 	reg = FDI_RX_IMR(pipe);
5156 	temp = intel_de_read(dev_priv, reg);
5157 	temp &= ~FDI_RX_SYMBOL_LOCK;
5158 	temp &= ~FDI_RX_BIT_LOCK;
5159 	intel_de_write(dev_priv, reg, temp);
5160 
5161 	intel_de_posting_read(dev_priv, reg);
5162 	udelay(150);
5163 
5164 	/* enable CPU FDI TX and PCH FDI RX */
5165 	reg = FDI_TX_CTL(pipe);
5166 	temp = intel_de_read(dev_priv, reg);
5167 	temp &= ~FDI_DP_PORT_WIDTH_MASK;
5168 	temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes);
5169 	temp &= ~FDI_LINK_TRAIN_NONE;
5170 	temp |= FDI_LINK_TRAIN_PATTERN_1;
5171 	temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
5172 	/* SNB-B */
5173 	temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;
5174 	intel_de_write(dev_priv, reg, temp | FDI_TX_ENABLE);
5175 
5176 	intel_de_write(dev_priv, FDI_RX_MISC(pipe),
5177 		       FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
5178 
5179 	reg = FDI_RX_CTL(pipe);
5180 	temp = intel_de_read(dev_priv, reg);
5181 	if (HAS_PCH_CPT(dev_priv)) {
5182 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
5183 		temp |= FDI_LINK_TRAIN_PATTERN_1_CPT;
5184 	} else {
5185 		temp &= ~FDI_LINK_TRAIN_NONE;
5186 		temp |= FDI_LINK_TRAIN_PATTERN_1;
5187 	}
5188 	intel_de_write(dev_priv, reg, temp | FDI_RX_ENABLE);
5189 
5190 	intel_de_posting_read(dev_priv, reg);
5191 	udelay(150);
5192 
5193 	for (i = 0; i < 4; i++) {
5194 		reg = FDI_TX_CTL(pipe);
5195 		temp = intel_de_read(dev_priv, reg);
5196 		temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
5197 		temp |= snb_b_fdi_train_param[i];
5198 		intel_de_write(dev_priv, reg, temp);
5199 
5200 		intel_de_posting_read(dev_priv, reg);
5201 		udelay(500);
5202 
5203 		for (retry = 0; retry < 5; retry++) {
5204 			reg = FDI_RX_IIR(pipe);
5205 			temp = intel_de_read(dev_priv, reg);
5206 			drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp);
5207 			if (temp & FDI_RX_BIT_LOCK) {
5208 				intel_de_write(dev_priv, reg,
5209 					       temp | FDI_RX_BIT_LOCK);
5210 				drm_dbg_kms(&dev_priv->drm,
5211 					    "FDI train 1 done.\n");
5212 				break;
5213 			}
5214 			udelay(50);
5215 		}
5216 		if (retry < 5)
5217 			break;
5218 	}
5219 	if (i == 4)
5220 		drm_err(&dev_priv->drm, "FDI train 1 fail!\n");
5221 
5222 	/* Train 2 */
5223 	reg = FDI_TX_CTL(pipe);
5224 	temp = intel_de_read(dev_priv, reg);
5225 	temp &= ~FDI_LINK_TRAIN_NONE;
5226 	temp |= FDI_LINK_TRAIN_PATTERN_2;
5227 	if (IS_GEN(dev_priv, 6)) {
5228 		temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
5229 		/* SNB-B */
5230 		temp |= FDI_LINK_TRAIN_400MV_0DB_SNB_B;
5231 	}
5232 	intel_de_write(dev_priv, reg, temp);
5233 
5234 	reg = FDI_RX_CTL(pipe);
5235 	temp = intel_de_read(dev_priv, reg);
5236 	if (HAS_PCH_CPT(dev_priv)) {
5237 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
5238 		temp |= FDI_LINK_TRAIN_PATTERN_2_CPT;
5239 	} else {
5240 		temp &= ~FDI_LINK_TRAIN_NONE;
5241 		temp |= FDI_LINK_TRAIN_PATTERN_2;
5242 	}
5243 	intel_de_write(dev_priv, reg, temp);
5244 
5245 	intel_de_posting_read(dev_priv, reg);
5246 	udelay(150);
5247 
5248 	for (i = 0; i < 4; i++) {
5249 		reg = FDI_TX_CTL(pipe);
5250 		temp = intel_de_read(dev_priv, reg);
5251 		temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
5252 		temp |= snb_b_fdi_train_param[i];
5253 		intel_de_write(dev_priv, reg, temp);
5254 
5255 		intel_de_posting_read(dev_priv, reg);
5256 		udelay(500);
5257 
5258 		for (retry = 0; retry < 5; retry++) {
5259 			reg = FDI_RX_IIR(pipe);
5260 			temp = intel_de_read(dev_priv, reg);
5261 			drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp);
5262 			if (temp & FDI_RX_SYMBOL_LOCK) {
5263 				intel_de_write(dev_priv, reg,
5264 					       temp | FDI_RX_SYMBOL_LOCK);
5265 				drm_dbg_kms(&dev_priv->drm,
5266 					    "FDI train 2 done.\n");
5267 				break;
5268 			}
5269 			udelay(50);
5270 		}
5271 		if (retry < 5)
5272 			break;
5273 	}
5274 	if (i == 4)
5275 		drm_err(&dev_priv->drm, "FDI train 2 fail!\n");
5276 
5277 	drm_dbg_kms(&dev_priv->drm, "FDI train done.\n");
5278 }
5279 
5280 /* Manual link training for Ivy Bridge A0 parts */
5281 static void ivb_manual_fdi_link_train(struct intel_crtc *crtc,
5282 				      const struct intel_crtc_state *crtc_state)
5283 {
5284 	struct drm_device *dev = crtc->base.dev;
5285 	struct drm_i915_private *dev_priv = to_i915(dev);
5286 	enum pipe pipe = crtc->pipe;
5287 	i915_reg_t reg;
5288 	u32 temp, i, j;
5289 
5290 	/* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
5291 	   for train result */
5292 	reg = FDI_RX_IMR(pipe);
5293 	temp = intel_de_read(dev_priv, reg);
5294 	temp &= ~FDI_RX_SYMBOL_LOCK;
5295 	temp &= ~FDI_RX_BIT_LOCK;
5296 	intel_de_write(dev_priv, reg, temp);
5297 
5298 	intel_de_posting_read(dev_priv, reg);
5299 	udelay(150);
5300 
5301 	drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR before link train 0x%x\n",
5302 		    intel_de_read(dev_priv, FDI_RX_IIR(pipe)));
5303 
5304 	/* Try each vswing and preemphasis setting twice before moving on */
5305 	for (j = 0; j < ARRAY_SIZE(snb_b_fdi_train_param) * 2; j++) {
5306 		/* disable first in case we need to retry */
5307 		reg = FDI_TX_CTL(pipe);
5308 		temp = intel_de_read(dev_priv, reg);
5309 		temp &= ~(FDI_LINK_TRAIN_AUTO | FDI_LINK_TRAIN_NONE_IVB);
5310 		temp &= ~FDI_TX_ENABLE;
5311 		intel_de_write(dev_priv, reg, temp);
5312 
5313 		reg = FDI_RX_CTL(pipe);
5314 		temp = intel_de_read(dev_priv, reg);
5315 		temp &= ~FDI_LINK_TRAIN_AUTO;
5316 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
5317 		temp &= ~FDI_RX_ENABLE;
5318 		intel_de_write(dev_priv, reg, temp);
5319 
5320 		/* enable CPU FDI TX and PCH FDI RX */
5321 		reg = FDI_TX_CTL(pipe);
5322 		temp = intel_de_read(dev_priv, reg);
5323 		temp &= ~FDI_DP_PORT_WIDTH_MASK;
5324 		temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes);
5325 		temp |= FDI_LINK_TRAIN_PATTERN_1_IVB;
5326 		temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
5327 		temp |= snb_b_fdi_train_param[j/2];
5328 		temp |= FDI_COMPOSITE_SYNC;
5329 		intel_de_write(dev_priv, reg, temp | FDI_TX_ENABLE);
5330 
5331 		intel_de_write(dev_priv, FDI_RX_MISC(pipe),
5332 			       FDI_RX_TP1_TO_TP2_48 | FDI_RX_FDI_DELAY_90);
5333 
5334 		reg = FDI_RX_CTL(pipe);
5335 		temp = intel_de_read(dev_priv, reg);
5336 		temp |= FDI_LINK_TRAIN_PATTERN_1_CPT;
5337 		temp |= FDI_COMPOSITE_SYNC;
5338 		intel_de_write(dev_priv, reg, temp | FDI_RX_ENABLE);
5339 
5340 		intel_de_posting_read(dev_priv, reg);
5341 		udelay(1); /* should be 0.5us */
5342 
5343 		for (i = 0; i < 4; i++) {
5344 			reg = FDI_RX_IIR(pipe);
5345 			temp = intel_de_read(dev_priv, reg);
5346 			drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp);
5347 
5348 			if (temp & FDI_RX_BIT_LOCK ||
5349 			    (intel_de_read(dev_priv, reg) & FDI_RX_BIT_LOCK)) {
5350 				intel_de_write(dev_priv, reg,
5351 					       temp | FDI_RX_BIT_LOCK);
5352 				drm_dbg_kms(&dev_priv->drm,
5353 					    "FDI train 1 done, level %i.\n",
5354 					    i);
5355 				break;
5356 			}
5357 			udelay(1); /* should be 0.5us */
5358 		}
5359 		if (i == 4) {
5360 			drm_dbg_kms(&dev_priv->drm,
5361 				    "FDI train 1 fail on vswing %d\n", j / 2);
5362 			continue;
5363 		}
5364 
5365 		/* Train 2 */
5366 		reg = FDI_TX_CTL(pipe);
5367 		temp = intel_de_read(dev_priv, reg);
5368 		temp &= ~FDI_LINK_TRAIN_NONE_IVB;
5369 		temp |= FDI_LINK_TRAIN_PATTERN_2_IVB;
5370 		intel_de_write(dev_priv, reg, temp);
5371 
5372 		reg = FDI_RX_CTL(pipe);
5373 		temp = intel_de_read(dev_priv, reg);
5374 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
5375 		temp |= FDI_LINK_TRAIN_PATTERN_2_CPT;
5376 		intel_de_write(dev_priv, reg, temp);
5377 
5378 		intel_de_posting_read(dev_priv, reg);
5379 		udelay(2); /* should be 1.5us */
5380 
5381 		for (i = 0; i < 4; i++) {
5382 			reg = FDI_RX_IIR(pipe);
5383 			temp = intel_de_read(dev_priv, reg);
5384 			drm_dbg_kms(&dev_priv->drm, "FDI_RX_IIR 0x%x\n", temp);
5385 
5386 			if (temp & FDI_RX_SYMBOL_LOCK ||
5387 			    (intel_de_read(dev_priv, reg) & FDI_RX_SYMBOL_LOCK)) {
5388 				intel_de_write(dev_priv, reg,
5389 					       temp | FDI_RX_SYMBOL_LOCK);
5390 				drm_dbg_kms(&dev_priv->drm,
5391 					    "FDI train 2 done, level %i.\n",
5392 					    i);
5393 				goto train_done;
5394 			}
5395 			udelay(2); /* should be 1.5us */
5396 		}
5397 		if (i == 4)
5398 			drm_dbg_kms(&dev_priv->drm,
5399 				    "FDI train 2 fail on vswing %d\n", j / 2);
5400 	}
5401 
5402 train_done:
5403 	drm_dbg_kms(&dev_priv->drm, "FDI train done.\n");
5404 }
5405 
5406 static void ilk_fdi_pll_enable(const struct intel_crtc_state *crtc_state)
5407 {
5408 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc);
5409 	struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev);
5410 	enum pipe pipe = intel_crtc->pipe;
5411 	i915_reg_t reg;
5412 	u32 temp;
5413 
5414 	/* enable PCH FDI RX PLL, wait warmup plus DMI latency */
5415 	reg = FDI_RX_CTL(pipe);
5416 	temp = intel_de_read(dev_priv, reg);
5417 	temp &= ~(FDI_DP_PORT_WIDTH_MASK | (0x7 << 16));
5418 	temp |= FDI_DP_PORT_WIDTH(crtc_state->fdi_lanes);
5419 	temp |= (intel_de_read(dev_priv, PIPECONF(pipe)) & PIPECONF_BPC_MASK) << 11;
5420 	intel_de_write(dev_priv, reg, temp | FDI_RX_PLL_ENABLE);
5421 
5422 	intel_de_posting_read(dev_priv, reg);
5423 	udelay(200);
5424 
5425 	/* Switch from Rawclk to PCDclk */
5426 	temp = intel_de_read(dev_priv, reg);
5427 	intel_de_write(dev_priv, reg, temp | FDI_PCDCLK);
5428 
5429 	intel_de_posting_read(dev_priv, reg);
5430 	udelay(200);
5431 
5432 	/* Enable CPU FDI TX PLL, always on for Ironlake */
5433 	reg = FDI_TX_CTL(pipe);
5434 	temp = intel_de_read(dev_priv, reg);
5435 	if ((temp & FDI_TX_PLL_ENABLE) == 0) {
5436 		intel_de_write(dev_priv, reg, temp | FDI_TX_PLL_ENABLE);
5437 
5438 		intel_de_posting_read(dev_priv, reg);
5439 		udelay(100);
5440 	}
5441 }
5442 
5443 static void ilk_fdi_pll_disable(struct intel_crtc *intel_crtc)
5444 {
5445 	struct drm_device *dev = intel_crtc->base.dev;
5446 	struct drm_i915_private *dev_priv = to_i915(dev);
5447 	enum pipe pipe = intel_crtc->pipe;
5448 	i915_reg_t reg;
5449 	u32 temp;
5450 
5451 	/* Switch from PCDclk to Rawclk */
5452 	reg = FDI_RX_CTL(pipe);
5453 	temp = intel_de_read(dev_priv, reg);
5454 	intel_de_write(dev_priv, reg, temp & ~FDI_PCDCLK);
5455 
5456 	/* Disable CPU FDI TX PLL */
5457 	reg = FDI_TX_CTL(pipe);
5458 	temp = intel_de_read(dev_priv, reg);
5459 	intel_de_write(dev_priv, reg, temp & ~FDI_TX_PLL_ENABLE);
5460 
5461 	intel_de_posting_read(dev_priv, reg);
5462 	udelay(100);
5463 
5464 	reg = FDI_RX_CTL(pipe);
5465 	temp = intel_de_read(dev_priv, reg);
5466 	intel_de_write(dev_priv, reg, temp & ~FDI_RX_PLL_ENABLE);
5467 
5468 	/* Wait for the clocks to turn off. */
5469 	intel_de_posting_read(dev_priv, reg);
5470 	udelay(100);
5471 }
5472 
5473 static void ilk_fdi_disable(struct intel_crtc *crtc)
5474 {
5475 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
5476 	enum pipe pipe = crtc->pipe;
5477 	i915_reg_t reg;
5478 	u32 temp;
5479 
5480 	/* disable CPU FDI tx and PCH FDI rx */
5481 	reg = FDI_TX_CTL(pipe);
5482 	temp = intel_de_read(dev_priv, reg);
5483 	intel_de_write(dev_priv, reg, temp & ~FDI_TX_ENABLE);
5484 	intel_de_posting_read(dev_priv, reg);
5485 
5486 	reg = FDI_RX_CTL(pipe);
5487 	temp = intel_de_read(dev_priv, reg);
5488 	temp &= ~(0x7 << 16);
5489 	temp |= (intel_de_read(dev_priv, PIPECONF(pipe)) & PIPECONF_BPC_MASK) << 11;
5490 	intel_de_write(dev_priv, reg, temp & ~FDI_RX_ENABLE);
5491 
5492 	intel_de_posting_read(dev_priv, reg);
5493 	udelay(100);
5494 
5495 	/* Ironlake workaround, disable clock pointer after downing FDI */
5496 	if (HAS_PCH_IBX(dev_priv))
5497 		intel_de_write(dev_priv, FDI_RX_CHICKEN(pipe),
5498 			       FDI_RX_PHASE_SYNC_POINTER_OVR);
5499 
5500 	/* still set train pattern 1 */
5501 	reg = FDI_TX_CTL(pipe);
5502 	temp = intel_de_read(dev_priv, reg);
5503 	temp &= ~FDI_LINK_TRAIN_NONE;
5504 	temp |= FDI_LINK_TRAIN_PATTERN_1;
5505 	intel_de_write(dev_priv, reg, temp);
5506 
5507 	reg = FDI_RX_CTL(pipe);
5508 	temp = intel_de_read(dev_priv, reg);
5509 	if (HAS_PCH_CPT(dev_priv)) {
5510 		temp &= ~FDI_LINK_TRAIN_PATTERN_MASK_CPT;
5511 		temp |= FDI_LINK_TRAIN_PATTERN_1_CPT;
5512 	} else {
5513 		temp &= ~FDI_LINK_TRAIN_NONE;
5514 		temp |= FDI_LINK_TRAIN_PATTERN_1;
5515 	}
5516 	/* BPC in FDI rx is consistent with that in PIPECONF */
5517 	temp &= ~(0x07 << 16);
5518 	temp |= (intel_de_read(dev_priv, PIPECONF(pipe)) & PIPECONF_BPC_MASK) << 11;
5519 	intel_de_write(dev_priv, reg, temp);
5520 
5521 	intel_de_posting_read(dev_priv, reg);
5522 	udelay(100);
5523 }
5524 
5525 bool intel_has_pending_fb_unpin(struct drm_i915_private *dev_priv)
5526 {
5527 	struct drm_crtc *crtc;
5528 	bool cleanup_done;
5529 
5530 	drm_for_each_crtc(crtc, &dev_priv->drm) {
5531 		struct drm_crtc_commit *commit;
5532 		spin_lock(&crtc->commit_lock);
5533 		commit = list_first_entry_or_null(&crtc->commit_list,
5534 						  struct drm_crtc_commit, commit_entry);
5535 		cleanup_done = commit ?
5536 			try_wait_for_completion(&commit->cleanup_done) : true;
5537 		spin_unlock(&crtc->commit_lock);
5538 
5539 		if (cleanup_done)
5540 			continue;
5541 
5542 		drm_crtc_wait_one_vblank(crtc);
5543 
5544 		return true;
5545 	}
5546 
5547 	return false;
5548 }
5549 
5550 void lpt_disable_iclkip(struct drm_i915_private *dev_priv)
5551 {
5552 	u32 temp;
5553 
5554 	intel_de_write(dev_priv, PIXCLK_GATE, PIXCLK_GATE_GATE);
5555 
5556 	mutex_lock(&dev_priv->sb_lock);
5557 
5558 	temp = intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK);
5559 	temp |= SBI_SSCCTL_DISABLE;
5560 	intel_sbi_write(dev_priv, SBI_SSCCTL6, temp, SBI_ICLK);
5561 
5562 	mutex_unlock(&dev_priv->sb_lock);
5563 }
5564 
5565 /* Program iCLKIP clock to the desired frequency */
5566 static void lpt_program_iclkip(const struct intel_crtc_state *crtc_state)
5567 {
5568 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
5569 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
5570 	int clock = crtc_state->hw.adjusted_mode.crtc_clock;
5571 	u32 divsel, phaseinc, auxdiv, phasedir = 0;
5572 	u32 temp;
5573 
5574 	lpt_disable_iclkip(dev_priv);
5575 
5576 	/* The iCLK virtual clock root frequency is in MHz,
5577 	 * but the adjusted_mode->crtc_clock in in KHz. To get the
5578 	 * divisors, it is necessary to divide one by another, so we
5579 	 * convert the virtual clock precision to KHz here for higher
5580 	 * precision.
5581 	 */
5582 	for (auxdiv = 0; auxdiv < 2; auxdiv++) {
5583 		u32 iclk_virtual_root_freq = 172800 * 1000;
5584 		u32 iclk_pi_range = 64;
5585 		u32 desired_divisor;
5586 
5587 		desired_divisor = DIV_ROUND_CLOSEST(iclk_virtual_root_freq,
5588 						    clock << auxdiv);
5589 		divsel = (desired_divisor / iclk_pi_range) - 2;
5590 		phaseinc = desired_divisor % iclk_pi_range;
5591 
5592 		/*
5593 		 * Near 20MHz is a corner case which is
5594 		 * out of range for the 7-bit divisor
5595 		 */
5596 		if (divsel <= 0x7f)
5597 			break;
5598 	}
5599 
5600 	/* This should not happen with any sane values */
5601 	drm_WARN_ON(&dev_priv->drm, SBI_SSCDIVINTPHASE_DIVSEL(divsel) &
5602 		    ~SBI_SSCDIVINTPHASE_DIVSEL_MASK);
5603 	drm_WARN_ON(&dev_priv->drm, SBI_SSCDIVINTPHASE_DIR(phasedir) &
5604 		    ~SBI_SSCDIVINTPHASE_INCVAL_MASK);
5605 
5606 	drm_dbg_kms(&dev_priv->drm,
5607 		    "iCLKIP clock: found settings for %dKHz refresh rate: auxdiv=%x, divsel=%x, phasedir=%x, phaseinc=%x\n",
5608 		    clock, auxdiv, divsel, phasedir, phaseinc);
5609 
5610 	mutex_lock(&dev_priv->sb_lock);
5611 
5612 	/* Program SSCDIVINTPHASE6 */
5613 	temp = intel_sbi_read(dev_priv, SBI_SSCDIVINTPHASE6, SBI_ICLK);
5614 	temp &= ~SBI_SSCDIVINTPHASE_DIVSEL_MASK;
5615 	temp |= SBI_SSCDIVINTPHASE_DIVSEL(divsel);
5616 	temp &= ~SBI_SSCDIVINTPHASE_INCVAL_MASK;
5617 	temp |= SBI_SSCDIVINTPHASE_INCVAL(phaseinc);
5618 	temp |= SBI_SSCDIVINTPHASE_DIR(phasedir);
5619 	temp |= SBI_SSCDIVINTPHASE_PROPAGATE;
5620 	intel_sbi_write(dev_priv, SBI_SSCDIVINTPHASE6, temp, SBI_ICLK);
5621 
5622 	/* Program SSCAUXDIV */
5623 	temp = intel_sbi_read(dev_priv, SBI_SSCAUXDIV6, SBI_ICLK);
5624 	temp &= ~SBI_SSCAUXDIV_FINALDIV2SEL(1);
5625 	temp |= SBI_SSCAUXDIV_FINALDIV2SEL(auxdiv);
5626 	intel_sbi_write(dev_priv, SBI_SSCAUXDIV6, temp, SBI_ICLK);
5627 
5628 	/* Enable modulator and associated divider */
5629 	temp = intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK);
5630 	temp &= ~SBI_SSCCTL_DISABLE;
5631 	intel_sbi_write(dev_priv, SBI_SSCCTL6, temp, SBI_ICLK);
5632 
5633 	mutex_unlock(&dev_priv->sb_lock);
5634 
5635 	/* Wait for initialization time */
5636 	udelay(24);
5637 
5638 	intel_de_write(dev_priv, PIXCLK_GATE, PIXCLK_GATE_UNGATE);
5639 }
5640 
5641 int lpt_get_iclkip(struct drm_i915_private *dev_priv)
5642 {
5643 	u32 divsel, phaseinc, auxdiv;
5644 	u32 iclk_virtual_root_freq = 172800 * 1000;
5645 	u32 iclk_pi_range = 64;
5646 	u32 desired_divisor;
5647 	u32 temp;
5648 
5649 	if ((intel_de_read(dev_priv, PIXCLK_GATE) & PIXCLK_GATE_UNGATE) == 0)
5650 		return 0;
5651 
5652 	mutex_lock(&dev_priv->sb_lock);
5653 
5654 	temp = intel_sbi_read(dev_priv, SBI_SSCCTL6, SBI_ICLK);
5655 	if (temp & SBI_SSCCTL_DISABLE) {
5656 		mutex_unlock(&dev_priv->sb_lock);
5657 		return 0;
5658 	}
5659 
5660 	temp = intel_sbi_read(dev_priv, SBI_SSCDIVINTPHASE6, SBI_ICLK);
5661 	divsel = (temp & SBI_SSCDIVINTPHASE_DIVSEL_MASK) >>
5662 		SBI_SSCDIVINTPHASE_DIVSEL_SHIFT;
5663 	phaseinc = (temp & SBI_SSCDIVINTPHASE_INCVAL_MASK) >>
5664 		SBI_SSCDIVINTPHASE_INCVAL_SHIFT;
5665 
5666 	temp = intel_sbi_read(dev_priv, SBI_SSCAUXDIV6, SBI_ICLK);
5667 	auxdiv = (temp & SBI_SSCAUXDIV_FINALDIV2SEL_MASK) >>
5668 		SBI_SSCAUXDIV_FINALDIV2SEL_SHIFT;
5669 
5670 	mutex_unlock(&dev_priv->sb_lock);
5671 
5672 	desired_divisor = (divsel + 2) * iclk_pi_range + phaseinc;
5673 
5674 	return DIV_ROUND_CLOSEST(iclk_virtual_root_freq,
5675 				 desired_divisor << auxdiv);
5676 }
5677 
5678 static void ilk_pch_transcoder_set_timings(const struct intel_crtc_state *crtc_state,
5679 					   enum pipe pch_transcoder)
5680 {
5681 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
5682 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
5683 	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
5684 
5685 	intel_de_write(dev_priv, PCH_TRANS_HTOTAL(pch_transcoder),
5686 		       intel_de_read(dev_priv, HTOTAL(cpu_transcoder)));
5687 	intel_de_write(dev_priv, PCH_TRANS_HBLANK(pch_transcoder),
5688 		       intel_de_read(dev_priv, HBLANK(cpu_transcoder)));
5689 	intel_de_write(dev_priv, PCH_TRANS_HSYNC(pch_transcoder),
5690 		       intel_de_read(dev_priv, HSYNC(cpu_transcoder)));
5691 
5692 	intel_de_write(dev_priv, PCH_TRANS_VTOTAL(pch_transcoder),
5693 		       intel_de_read(dev_priv, VTOTAL(cpu_transcoder)));
5694 	intel_de_write(dev_priv, PCH_TRANS_VBLANK(pch_transcoder),
5695 		       intel_de_read(dev_priv, VBLANK(cpu_transcoder)));
5696 	intel_de_write(dev_priv, PCH_TRANS_VSYNC(pch_transcoder),
5697 		       intel_de_read(dev_priv, VSYNC(cpu_transcoder)));
5698 	intel_de_write(dev_priv, PCH_TRANS_VSYNCSHIFT(pch_transcoder),
5699 		       intel_de_read(dev_priv, VSYNCSHIFT(cpu_transcoder)));
5700 }
5701 
5702 static void cpt_set_fdi_bc_bifurcation(struct drm_i915_private *dev_priv, bool enable)
5703 {
5704 	u32 temp;
5705 
5706 	temp = intel_de_read(dev_priv, SOUTH_CHICKEN1);
5707 	if (!!(temp & FDI_BC_BIFURCATION_SELECT) == enable)
5708 		return;
5709 
5710 	drm_WARN_ON(&dev_priv->drm,
5711 		    intel_de_read(dev_priv, FDI_RX_CTL(PIPE_B)) &
5712 		    FDI_RX_ENABLE);
5713 	drm_WARN_ON(&dev_priv->drm,
5714 		    intel_de_read(dev_priv, FDI_RX_CTL(PIPE_C)) &
5715 		    FDI_RX_ENABLE);
5716 
5717 	temp &= ~FDI_BC_BIFURCATION_SELECT;
5718 	if (enable)
5719 		temp |= FDI_BC_BIFURCATION_SELECT;
5720 
5721 	drm_dbg_kms(&dev_priv->drm, "%sabling fdi C rx\n",
5722 		    enable ? "en" : "dis");
5723 	intel_de_write(dev_priv, SOUTH_CHICKEN1, temp);
5724 	intel_de_posting_read(dev_priv, SOUTH_CHICKEN1);
5725 }
5726 
5727 static void ivb_update_fdi_bc_bifurcation(const struct intel_crtc_state *crtc_state)
5728 {
5729 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
5730 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
5731 
5732 	switch (crtc->pipe) {
5733 	case PIPE_A:
5734 		break;
5735 	case PIPE_B:
5736 		if (crtc_state->fdi_lanes > 2)
5737 			cpt_set_fdi_bc_bifurcation(dev_priv, false);
5738 		else
5739 			cpt_set_fdi_bc_bifurcation(dev_priv, true);
5740 
5741 		break;
5742 	case PIPE_C:
5743 		cpt_set_fdi_bc_bifurcation(dev_priv, true);
5744 
5745 		break;
5746 	default:
5747 		BUG();
5748 	}
5749 }
5750 
5751 /*
5752  * Finds the encoder associated with the given CRTC. This can only be
5753  * used when we know that the CRTC isn't feeding multiple encoders!
5754  */
5755 static struct intel_encoder *
5756 intel_get_crtc_new_encoder(const struct intel_atomic_state *state,
5757 			   const struct intel_crtc_state *crtc_state)
5758 {
5759 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
5760 	const struct drm_connector_state *connector_state;
5761 	const struct drm_connector *connector;
5762 	struct intel_encoder *encoder = NULL;
5763 	int num_encoders = 0;
5764 	int i;
5765 
5766 	for_each_new_connector_in_state(&state->base, connector, connector_state, i) {
5767 		if (connector_state->crtc != &crtc->base)
5768 			continue;
5769 
5770 		encoder = to_intel_encoder(connector_state->best_encoder);
5771 		num_encoders++;
5772 	}
5773 
5774 	drm_WARN(encoder->base.dev, num_encoders != 1,
5775 		 "%d encoders for pipe %c\n",
5776 		 num_encoders, pipe_name(crtc->pipe));
5777 
5778 	return encoder;
5779 }
5780 
5781 /*
5782  * Enable PCH resources required for PCH ports:
5783  *   - PCH PLLs
5784  *   - FDI training & RX/TX
5785  *   - update transcoder timings
5786  *   - DP transcoding bits
5787  *   - transcoder
5788  */
5789 static void ilk_pch_enable(const struct intel_atomic_state *state,
5790 			   const struct intel_crtc_state *crtc_state)
5791 {
5792 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
5793 	struct drm_device *dev = crtc->base.dev;
5794 	struct drm_i915_private *dev_priv = to_i915(dev);
5795 	enum pipe pipe = crtc->pipe;
5796 	u32 temp;
5797 
5798 	assert_pch_transcoder_disabled(dev_priv, pipe);
5799 
5800 	if (IS_IVYBRIDGE(dev_priv))
5801 		ivb_update_fdi_bc_bifurcation(crtc_state);
5802 
5803 	/* Write the TU size bits before fdi link training, so that error
5804 	 * detection works. */
5805 	intel_de_write(dev_priv, FDI_RX_TUSIZE1(pipe),
5806 		       intel_de_read(dev_priv, PIPE_DATA_M1(pipe)) & TU_SIZE_MASK);
5807 
5808 	/* For PCH output, training FDI link */
5809 	dev_priv->display.fdi_link_train(crtc, crtc_state);
5810 
5811 	/* We need to program the right clock selection before writing the pixel
5812 	 * mutliplier into the DPLL. */
5813 	if (HAS_PCH_CPT(dev_priv)) {
5814 		u32 sel;
5815 
5816 		temp = intel_de_read(dev_priv, PCH_DPLL_SEL);
5817 		temp |= TRANS_DPLL_ENABLE(pipe);
5818 		sel = TRANS_DPLLB_SEL(pipe);
5819 		if (crtc_state->shared_dpll ==
5820 		    intel_get_shared_dpll_by_id(dev_priv, DPLL_ID_PCH_PLL_B))
5821 			temp |= sel;
5822 		else
5823 			temp &= ~sel;
5824 		intel_de_write(dev_priv, PCH_DPLL_SEL, temp);
5825 	}
5826 
5827 	/* XXX: pch pll's can be enabled any time before we enable the PCH
5828 	 * transcoder, and we actually should do this to not upset any PCH
5829 	 * transcoder that already use the clock when we share it.
5830 	 *
5831 	 * Note that enable_shared_dpll tries to do the right thing, but
5832 	 * get_shared_dpll unconditionally resets the pll - we need that to have
5833 	 * the right LVDS enable sequence. */
5834 	intel_enable_shared_dpll(crtc_state);
5835 
5836 	/* set transcoder timing, panel must allow it */
5837 	assert_panel_unlocked(dev_priv, pipe);
5838 	ilk_pch_transcoder_set_timings(crtc_state, pipe);
5839 
5840 	intel_fdi_normal_train(crtc);
5841 
5842 	/* For PCH DP, enable TRANS_DP_CTL */
5843 	if (HAS_PCH_CPT(dev_priv) &&
5844 	    intel_crtc_has_dp_encoder(crtc_state)) {
5845 		const struct drm_display_mode *adjusted_mode =
5846 			&crtc_state->hw.adjusted_mode;
5847 		u32 bpc = (intel_de_read(dev_priv, PIPECONF(pipe)) & PIPECONF_BPC_MASK) >> 5;
5848 		i915_reg_t reg = TRANS_DP_CTL(pipe);
5849 		enum port port;
5850 
5851 		temp = intel_de_read(dev_priv, reg);
5852 		temp &= ~(TRANS_DP_PORT_SEL_MASK |
5853 			  TRANS_DP_SYNC_MASK |
5854 			  TRANS_DP_BPC_MASK);
5855 		temp |= TRANS_DP_OUTPUT_ENABLE;
5856 		temp |= bpc << 9; /* same format but at 11:9 */
5857 
5858 		if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
5859 			temp |= TRANS_DP_HSYNC_ACTIVE_HIGH;
5860 		if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
5861 			temp |= TRANS_DP_VSYNC_ACTIVE_HIGH;
5862 
5863 		port = intel_get_crtc_new_encoder(state, crtc_state)->port;
5864 		drm_WARN_ON(dev, port < PORT_B || port > PORT_D);
5865 		temp |= TRANS_DP_PORT_SEL(port);
5866 
5867 		intel_de_write(dev_priv, reg, temp);
5868 	}
5869 
5870 	ilk_enable_pch_transcoder(crtc_state);
5871 }
5872 
5873 void lpt_pch_enable(const struct intel_crtc_state *crtc_state)
5874 {
5875 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
5876 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
5877 	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
5878 
5879 	assert_pch_transcoder_disabled(dev_priv, PIPE_A);
5880 
5881 	lpt_program_iclkip(crtc_state);
5882 
5883 	/* Set transcoder timing. */
5884 	ilk_pch_transcoder_set_timings(crtc_state, PIPE_A);
5885 
5886 	lpt_enable_pch_transcoder(dev_priv, cpu_transcoder);
5887 }
5888 
5889 static void cpt_verify_modeset(struct drm_i915_private *dev_priv,
5890 			       enum pipe pipe)
5891 {
5892 	i915_reg_t dslreg = PIPEDSL(pipe);
5893 	u32 temp;
5894 
5895 	temp = intel_de_read(dev_priv, dslreg);
5896 	udelay(500);
5897 	if (wait_for(intel_de_read(dev_priv, dslreg) != temp, 5)) {
5898 		if (wait_for(intel_de_read(dev_priv, dslreg) != temp, 5))
5899 			drm_err(&dev_priv->drm,
5900 				"mode set failed: pipe %c stuck\n",
5901 				pipe_name(pipe));
5902 	}
5903 }
5904 
5905 /*
5906  * The hardware phase 0.0 refers to the center of the pixel.
5907  * We want to start from the top/left edge which is phase
5908  * -0.5. That matches how the hardware calculates the scaling
5909  * factors (from top-left of the first pixel to bottom-right
5910  * of the last pixel, as opposed to the pixel centers).
5911  *
5912  * For 4:2:0 subsampled chroma planes we obviously have to
5913  * adjust that so that the chroma sample position lands in
5914  * the right spot.
5915  *
5916  * Note that for packed YCbCr 4:2:2 formats there is no way to
5917  * control chroma siting. The hardware simply replicates the
5918  * chroma samples for both of the luma samples, and thus we don't
5919  * actually get the expected MPEG2 chroma siting convention :(
5920  * The same behaviour is observed on pre-SKL platforms as well.
5921  *
5922  * Theory behind the formula (note that we ignore sub-pixel
5923  * source coordinates):
5924  * s = source sample position
5925  * d = destination sample position
5926  *
5927  * Downscaling 4:1:
5928  * -0.5
5929  * | 0.0
5930  * | |     1.5 (initial phase)
5931  * | |     |
5932  * v v     v
5933  * | s | s | s | s |
5934  * |       d       |
5935  *
5936  * Upscaling 1:4:
5937  * -0.5
5938  * | -0.375 (initial phase)
5939  * | |     0.0
5940  * | |     |
5941  * v v     v
5942  * |       s       |
5943  * | d | d | d | d |
5944  */
5945 u16 skl_scaler_calc_phase(int sub, int scale, bool chroma_cosited)
5946 {
5947 	int phase = -0x8000;
5948 	u16 trip = 0;
5949 
5950 	if (chroma_cosited)
5951 		phase += (sub - 1) * 0x8000 / sub;
5952 
5953 	phase += scale / (2 * sub);
5954 
5955 	/*
5956 	 * Hardware initial phase limited to [-0.5:1.5].
5957 	 * Since the max hardware scale factor is 3.0, we
5958 	 * should never actually excdeed 1.0 here.
5959 	 */
5960 	WARN_ON(phase < -0x8000 || phase > 0x18000);
5961 
5962 	if (phase < 0)
5963 		phase = 0x10000 + phase;
5964 	else
5965 		trip = PS_PHASE_TRIP;
5966 
5967 	return ((phase >> 2) & PS_PHASE_MASK) | trip;
5968 }
5969 
5970 #define SKL_MIN_SRC_W 8
5971 #define SKL_MAX_SRC_W 4096
5972 #define SKL_MIN_SRC_H 8
5973 #define SKL_MAX_SRC_H 4096
5974 #define SKL_MIN_DST_W 8
5975 #define SKL_MAX_DST_W 4096
5976 #define SKL_MIN_DST_H 8
5977 #define SKL_MAX_DST_H 4096
5978 #define ICL_MAX_SRC_W 5120
5979 #define ICL_MAX_SRC_H 4096
5980 #define ICL_MAX_DST_W 5120
5981 #define ICL_MAX_DST_H 4096
5982 #define SKL_MIN_YUV_420_SRC_W 16
5983 #define SKL_MIN_YUV_420_SRC_H 16
5984 
5985 static int
5986 skl_update_scaler(struct intel_crtc_state *crtc_state, bool force_detach,
5987 		  unsigned int scaler_user, int *scaler_id,
5988 		  int src_w, int src_h, int dst_w, int dst_h,
5989 		  const struct drm_format_info *format,
5990 		  u64 modifier, bool need_scaler)
5991 {
5992 	struct intel_crtc_scaler_state *scaler_state =
5993 		&crtc_state->scaler_state;
5994 	struct intel_crtc *intel_crtc =
5995 		to_intel_crtc(crtc_state->uapi.crtc);
5996 	struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev);
5997 	const struct drm_display_mode *adjusted_mode =
5998 		&crtc_state->hw.adjusted_mode;
5999 
6000 	/*
6001 	 * Src coordinates are already rotated by 270 degrees for
6002 	 * the 90/270 degree plane rotation cases (to match the
6003 	 * GTT mapping), hence no need to account for rotation here.
6004 	 */
6005 	if (src_w != dst_w || src_h != dst_h)
6006 		need_scaler = true;
6007 
6008 	/*
6009 	 * Scaling/fitting not supported in IF-ID mode in GEN9+
6010 	 * TODO: Interlace fetch mode doesn't support YUV420 planar formats.
6011 	 * Once NV12 is enabled, handle it here while allocating scaler
6012 	 * for NV12.
6013 	 */
6014 	if (INTEL_GEN(dev_priv) >= 9 && crtc_state->hw.enable &&
6015 	    need_scaler && adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
6016 		drm_dbg_kms(&dev_priv->drm,
6017 			    "Pipe/Plane scaling not supported with IF-ID mode\n");
6018 		return -EINVAL;
6019 	}
6020 
6021 	/*
6022 	 * if plane is being disabled or scaler is no more required or force detach
6023 	 *  - free scaler binded to this plane/crtc
6024 	 *  - in order to do this, update crtc->scaler_usage
6025 	 *
6026 	 * Here scaler state in crtc_state is set free so that
6027 	 * scaler can be assigned to other user. Actual register
6028 	 * update to free the scaler is done in plane/panel-fit programming.
6029 	 * For this purpose crtc/plane_state->scaler_id isn't reset here.
6030 	 */
6031 	if (force_detach || !need_scaler) {
6032 		if (*scaler_id >= 0) {
6033 			scaler_state->scaler_users &= ~(1 << scaler_user);
6034 			scaler_state->scalers[*scaler_id].in_use = 0;
6035 
6036 			drm_dbg_kms(&dev_priv->drm,
6037 				    "scaler_user index %u.%u: "
6038 				    "Staged freeing scaler id %d scaler_users = 0x%x\n",
6039 				    intel_crtc->pipe, scaler_user, *scaler_id,
6040 				    scaler_state->scaler_users);
6041 			*scaler_id = -1;
6042 		}
6043 		return 0;
6044 	}
6045 
6046 	if (format && intel_format_info_is_yuv_semiplanar(format, modifier) &&
6047 	    (src_h < SKL_MIN_YUV_420_SRC_H || src_w < SKL_MIN_YUV_420_SRC_W)) {
6048 		drm_dbg_kms(&dev_priv->drm,
6049 			    "Planar YUV: src dimensions not met\n");
6050 		return -EINVAL;
6051 	}
6052 
6053 	/* range checks */
6054 	if (src_w < SKL_MIN_SRC_W || src_h < SKL_MIN_SRC_H ||
6055 	    dst_w < SKL_MIN_DST_W || dst_h < SKL_MIN_DST_H ||
6056 	    (INTEL_GEN(dev_priv) >= 11 &&
6057 	     (src_w > ICL_MAX_SRC_W || src_h > ICL_MAX_SRC_H ||
6058 	      dst_w > ICL_MAX_DST_W || dst_h > ICL_MAX_DST_H)) ||
6059 	    (INTEL_GEN(dev_priv) < 11 &&
6060 	     (src_w > SKL_MAX_SRC_W || src_h > SKL_MAX_SRC_H ||
6061 	      dst_w > SKL_MAX_DST_W || dst_h > SKL_MAX_DST_H)))	{
6062 		drm_dbg_kms(&dev_priv->drm,
6063 			    "scaler_user index %u.%u: src %ux%u dst %ux%u "
6064 			    "size is out of scaler range\n",
6065 			    intel_crtc->pipe, scaler_user, src_w, src_h,
6066 			    dst_w, dst_h);
6067 		return -EINVAL;
6068 	}
6069 
6070 	/* mark this plane as a scaler user in crtc_state */
6071 	scaler_state->scaler_users |= (1 << scaler_user);
6072 	drm_dbg_kms(&dev_priv->drm, "scaler_user index %u.%u: "
6073 		    "staged scaling request for %ux%u->%ux%u scaler_users = 0x%x\n",
6074 		    intel_crtc->pipe, scaler_user, src_w, src_h, dst_w, dst_h,
6075 		    scaler_state->scaler_users);
6076 
6077 	return 0;
6078 }
6079 
6080 static int skl_update_scaler_crtc(struct intel_crtc_state *crtc_state)
6081 {
6082 	const struct drm_display_mode *pipe_mode = &crtc_state->hw.pipe_mode;
6083 	int width, height;
6084 
6085 	if (crtc_state->pch_pfit.enabled) {
6086 		width = drm_rect_width(&crtc_state->pch_pfit.dst);
6087 		height = drm_rect_height(&crtc_state->pch_pfit.dst);
6088 	} else {
6089 		width = pipe_mode->crtc_hdisplay;
6090 		height = pipe_mode->crtc_vdisplay;
6091 	}
6092 	return skl_update_scaler(crtc_state, !crtc_state->hw.active,
6093 				 SKL_CRTC_INDEX,
6094 				 &crtc_state->scaler_state.scaler_id,
6095 				 crtc_state->pipe_src_w, crtc_state->pipe_src_h,
6096 				 width, height, NULL, 0,
6097 				 crtc_state->pch_pfit.enabled);
6098 }
6099 
6100 /**
6101  * skl_update_scaler_plane - Stages update to scaler state for a given plane.
6102  * @crtc_state: crtc's scaler state
6103  * @plane_state: atomic plane state to update
6104  *
6105  * Return
6106  *     0 - scaler_usage updated successfully
6107  *    error - requested scaling cannot be supported or other error condition
6108  */
6109 static int skl_update_scaler_plane(struct intel_crtc_state *crtc_state,
6110 				   struct intel_plane_state *plane_state)
6111 {
6112 	struct intel_plane *intel_plane =
6113 		to_intel_plane(plane_state->uapi.plane);
6114 	struct drm_i915_private *dev_priv = to_i915(intel_plane->base.dev);
6115 	struct drm_framebuffer *fb = plane_state->hw.fb;
6116 	int ret;
6117 	bool force_detach = !fb || !plane_state->uapi.visible;
6118 	bool need_scaler = false;
6119 
6120 	/* Pre-gen11 and SDR planes always need a scaler for planar formats. */
6121 	if (!icl_is_hdr_plane(dev_priv, intel_plane->id) &&
6122 	    fb && intel_format_info_is_yuv_semiplanar(fb->format, fb->modifier))
6123 		need_scaler = true;
6124 
6125 	ret = skl_update_scaler(crtc_state, force_detach,
6126 				drm_plane_index(&intel_plane->base),
6127 				&plane_state->scaler_id,
6128 				drm_rect_width(&plane_state->uapi.src) >> 16,
6129 				drm_rect_height(&plane_state->uapi.src) >> 16,
6130 				drm_rect_width(&plane_state->uapi.dst),
6131 				drm_rect_height(&plane_state->uapi.dst),
6132 				fb ? fb->format : NULL,
6133 				fb ? fb->modifier : 0,
6134 				need_scaler);
6135 
6136 	if (ret || plane_state->scaler_id < 0)
6137 		return ret;
6138 
6139 	/* check colorkey */
6140 	if (plane_state->ckey.flags) {
6141 		drm_dbg_kms(&dev_priv->drm,
6142 			    "[PLANE:%d:%s] scaling with color key not allowed",
6143 			    intel_plane->base.base.id,
6144 			    intel_plane->base.name);
6145 		return -EINVAL;
6146 	}
6147 
6148 	/* Check src format */
6149 	switch (fb->format->format) {
6150 	case DRM_FORMAT_RGB565:
6151 	case DRM_FORMAT_XBGR8888:
6152 	case DRM_FORMAT_XRGB8888:
6153 	case DRM_FORMAT_ABGR8888:
6154 	case DRM_FORMAT_ARGB8888:
6155 	case DRM_FORMAT_XRGB2101010:
6156 	case DRM_FORMAT_XBGR2101010:
6157 	case DRM_FORMAT_ARGB2101010:
6158 	case DRM_FORMAT_ABGR2101010:
6159 	case DRM_FORMAT_YUYV:
6160 	case DRM_FORMAT_YVYU:
6161 	case DRM_FORMAT_UYVY:
6162 	case DRM_FORMAT_VYUY:
6163 	case DRM_FORMAT_NV12:
6164 	case DRM_FORMAT_XYUV8888:
6165 	case DRM_FORMAT_P010:
6166 	case DRM_FORMAT_P012:
6167 	case DRM_FORMAT_P016:
6168 	case DRM_FORMAT_Y210:
6169 	case DRM_FORMAT_Y212:
6170 	case DRM_FORMAT_Y216:
6171 	case DRM_FORMAT_XVYU2101010:
6172 	case DRM_FORMAT_XVYU12_16161616:
6173 	case DRM_FORMAT_XVYU16161616:
6174 		break;
6175 	case DRM_FORMAT_XBGR16161616F:
6176 	case DRM_FORMAT_ABGR16161616F:
6177 	case DRM_FORMAT_XRGB16161616F:
6178 	case DRM_FORMAT_ARGB16161616F:
6179 		if (INTEL_GEN(dev_priv) >= 11)
6180 			break;
6181 		fallthrough;
6182 	default:
6183 		drm_dbg_kms(&dev_priv->drm,
6184 			    "[PLANE:%d:%s] FB:%d unsupported scaling format 0x%x\n",
6185 			    intel_plane->base.base.id, intel_plane->base.name,
6186 			    fb->base.id, fb->format->format);
6187 		return -EINVAL;
6188 	}
6189 
6190 	return 0;
6191 }
6192 
6193 void skl_scaler_disable(const struct intel_crtc_state *old_crtc_state)
6194 {
6195 	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
6196 	int i;
6197 
6198 	for (i = 0; i < crtc->num_scalers; i++)
6199 		skl_detach_scaler(crtc, i);
6200 }
6201 
6202 static int cnl_coef_tap(int i)
6203 {
6204 	return i % 7;
6205 }
6206 
6207 static u16 cnl_nearest_filter_coef(int t)
6208 {
6209 	return t == 3 ? 0x0800 : 0x3000;
6210 }
6211 
6212 /*
6213  *  Theory behind setting nearest-neighbor integer scaling:
6214  *
6215  *  17 phase of 7 taps requires 119 coefficients in 60 dwords per set.
6216  *  The letter represents the filter tap (D is the center tap) and the number
6217  *  represents the coefficient set for a phase (0-16).
6218  *
6219  *         +------------+------------------------+------------------------+
6220  *         |Index value | Data value coeffient 1 | Data value coeffient 2 |
6221  *         +------------+------------------------+------------------------+
6222  *         |   00h      |          B0            |          A0            |
6223  *         +------------+------------------------+------------------------+
6224  *         |   01h      |          D0            |          C0            |
6225  *         +------------+------------------------+------------------------+
6226  *         |   02h      |          F0            |          E0            |
6227  *         +------------+------------------------+------------------------+
6228  *         |   03h      |          A1            |          G0            |
6229  *         +------------+------------------------+------------------------+
6230  *         |   04h      |          C1            |          B1            |
6231  *         +------------+------------------------+------------------------+
6232  *         |   ...      |          ...           |          ...           |
6233  *         +------------+------------------------+------------------------+
6234  *         |   38h      |          B16           |          A16           |
6235  *         +------------+------------------------+------------------------+
6236  *         |   39h      |          D16           |          C16           |
6237  *         +------------+------------------------+------------------------+
6238  *         |   3Ah      |          F16           |          C16           |
6239  *         +------------+------------------------+------------------------+
6240  *         |   3Bh      |        Reserved        |          G16           |
6241  *         +------------+------------------------+------------------------+
6242  *
6243  *  To enable nearest-neighbor scaling:  program scaler coefficents with
6244  *  the center tap (Dxx) values set to 1 and all other values set to 0 as per
6245  *  SCALER_COEFFICIENT_FORMAT
6246  *
6247  */
6248 
6249 static void cnl_program_nearest_filter_coefs(struct drm_i915_private *dev_priv,
6250 					     enum pipe pipe, int id, int set)
6251 {
6252 	int i;
6253 
6254 	intel_de_write_fw(dev_priv, CNL_PS_COEF_INDEX_SET(pipe, id, set),
6255 			  PS_COEE_INDEX_AUTO_INC);
6256 
6257 	for (i = 0; i < 17 * 7; i += 2) {
6258 		u32 tmp;
6259 		int t;
6260 
6261 		t = cnl_coef_tap(i);
6262 		tmp = cnl_nearest_filter_coef(t);
6263 
6264 		t = cnl_coef_tap(i + 1);
6265 		tmp |= cnl_nearest_filter_coef(t) << 16;
6266 
6267 		intel_de_write_fw(dev_priv, CNL_PS_COEF_DATA_SET(pipe, id, set),
6268 				  tmp);
6269 	}
6270 
6271 	intel_de_write_fw(dev_priv, CNL_PS_COEF_INDEX_SET(pipe, id, set), 0);
6272 }
6273 
6274 inline u32 skl_scaler_get_filter_select(enum drm_scaling_filter filter, int set)
6275 {
6276 	if (filter == DRM_SCALING_FILTER_NEAREST_NEIGHBOR) {
6277 		return (PS_FILTER_PROGRAMMED |
6278 			PS_Y_VERT_FILTER_SELECT(set) |
6279 			PS_Y_HORZ_FILTER_SELECT(set) |
6280 			PS_UV_VERT_FILTER_SELECT(set) |
6281 			PS_UV_HORZ_FILTER_SELECT(set));
6282 	}
6283 
6284 	return PS_FILTER_MEDIUM;
6285 }
6286 
6287 void skl_scaler_setup_filter(struct drm_i915_private *dev_priv, enum pipe pipe,
6288 			     int id, int set, enum drm_scaling_filter filter)
6289 {
6290 	switch (filter) {
6291 	case DRM_SCALING_FILTER_DEFAULT:
6292 		break;
6293 	case DRM_SCALING_FILTER_NEAREST_NEIGHBOR:
6294 		cnl_program_nearest_filter_coefs(dev_priv, pipe, id, set);
6295 		break;
6296 	default:
6297 		MISSING_CASE(filter);
6298 	}
6299 }
6300 
6301 static void skl_pfit_enable(const struct intel_crtc_state *crtc_state)
6302 {
6303 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
6304 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
6305 	const struct intel_crtc_scaler_state *scaler_state =
6306 		&crtc_state->scaler_state;
6307 	struct drm_rect src = {
6308 		.x2 = crtc_state->pipe_src_w << 16,
6309 		.y2 = crtc_state->pipe_src_h << 16,
6310 	};
6311 	const struct drm_rect *dst = &crtc_state->pch_pfit.dst;
6312 	u16 uv_rgb_hphase, uv_rgb_vphase;
6313 	enum pipe pipe = crtc->pipe;
6314 	int width = drm_rect_width(dst);
6315 	int height = drm_rect_height(dst);
6316 	int x = dst->x1;
6317 	int y = dst->y1;
6318 	int hscale, vscale;
6319 	unsigned long irqflags;
6320 	int id;
6321 	u32 ps_ctrl;
6322 
6323 	if (!crtc_state->pch_pfit.enabled)
6324 		return;
6325 
6326 	if (drm_WARN_ON(&dev_priv->drm,
6327 			crtc_state->scaler_state.scaler_id < 0))
6328 		return;
6329 
6330 	hscale = drm_rect_calc_hscale(&src, dst, 0, INT_MAX);
6331 	vscale = drm_rect_calc_vscale(&src, dst, 0, INT_MAX);
6332 
6333 	uv_rgb_hphase = skl_scaler_calc_phase(1, hscale, false);
6334 	uv_rgb_vphase = skl_scaler_calc_phase(1, vscale, false);
6335 
6336 	id = scaler_state->scaler_id;
6337 
6338 	ps_ctrl = skl_scaler_get_filter_select(crtc_state->hw.scaling_filter, 0);
6339 	ps_ctrl |=  PS_SCALER_EN | scaler_state->scalers[id].mode;
6340 
6341 	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
6342 
6343 	skl_scaler_setup_filter(dev_priv, pipe, id, 0,
6344 				crtc_state->hw.scaling_filter);
6345 
6346 	intel_de_write_fw(dev_priv, SKL_PS_CTRL(pipe, id), ps_ctrl);
6347 
6348 	intel_de_write_fw(dev_priv, SKL_PS_VPHASE(pipe, id),
6349 			  PS_Y_PHASE(0) | PS_UV_RGB_PHASE(uv_rgb_vphase));
6350 	intel_de_write_fw(dev_priv, SKL_PS_HPHASE(pipe, id),
6351 			  PS_Y_PHASE(0) | PS_UV_RGB_PHASE(uv_rgb_hphase));
6352 	intel_de_write_fw(dev_priv, SKL_PS_WIN_POS(pipe, id),
6353 			  x << 16 | y);
6354 	intel_de_write_fw(dev_priv, SKL_PS_WIN_SZ(pipe, id),
6355 			  width << 16 | height);
6356 
6357 	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
6358 }
6359 
6360 static void ilk_pfit_enable(const struct intel_crtc_state *crtc_state)
6361 {
6362 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
6363 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
6364 	const struct drm_rect *dst = &crtc_state->pch_pfit.dst;
6365 	enum pipe pipe = crtc->pipe;
6366 	int width = drm_rect_width(dst);
6367 	int height = drm_rect_height(dst);
6368 	int x = dst->x1;
6369 	int y = dst->y1;
6370 
6371 	if (!crtc_state->pch_pfit.enabled)
6372 		return;
6373 
6374 	/* Force use of hard-coded filter coefficients
6375 	 * as some pre-programmed values are broken,
6376 	 * e.g. x201.
6377 	 */
6378 	if (IS_IVYBRIDGE(dev_priv) || IS_HASWELL(dev_priv))
6379 		intel_de_write(dev_priv, PF_CTL(pipe), PF_ENABLE |
6380 			       PF_FILTER_MED_3x3 | PF_PIPE_SEL_IVB(pipe));
6381 	else
6382 		intel_de_write(dev_priv, PF_CTL(pipe), PF_ENABLE |
6383 			       PF_FILTER_MED_3x3);
6384 	intel_de_write(dev_priv, PF_WIN_POS(pipe), x << 16 | y);
6385 	intel_de_write(dev_priv, PF_WIN_SZ(pipe), width << 16 | height);
6386 }
6387 
6388 void hsw_enable_ips(const struct intel_crtc_state *crtc_state)
6389 {
6390 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
6391 	struct drm_device *dev = crtc->base.dev;
6392 	struct drm_i915_private *dev_priv = to_i915(dev);
6393 
6394 	if (!crtc_state->ips_enabled)
6395 		return;
6396 
6397 	/*
6398 	 * We can only enable IPS after we enable a plane and wait for a vblank
6399 	 * This function is called from post_plane_update, which is run after
6400 	 * a vblank wait.
6401 	 */
6402 	drm_WARN_ON(dev, !(crtc_state->active_planes & ~BIT(PLANE_CURSOR)));
6403 
6404 	if (IS_BROADWELL(dev_priv)) {
6405 		drm_WARN_ON(dev, sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL,
6406 							 IPS_ENABLE | IPS_PCODE_CONTROL));
6407 		/* Quoting Art Runyan: "its not safe to expect any particular
6408 		 * value in IPS_CTL bit 31 after enabling IPS through the
6409 		 * mailbox." Moreover, the mailbox may return a bogus state,
6410 		 * so we need to just enable it and continue on.
6411 		 */
6412 	} else {
6413 		intel_de_write(dev_priv, IPS_CTL, IPS_ENABLE);
6414 		/* The bit only becomes 1 in the next vblank, so this wait here
6415 		 * is essentially intel_wait_for_vblank. If we don't have this
6416 		 * and don't wait for vblanks until the end of crtc_enable, then
6417 		 * the HW state readout code will complain that the expected
6418 		 * IPS_CTL value is not the one we read. */
6419 		if (intel_de_wait_for_set(dev_priv, IPS_CTL, IPS_ENABLE, 50))
6420 			drm_err(&dev_priv->drm,
6421 				"Timed out waiting for IPS enable\n");
6422 	}
6423 }
6424 
6425 void hsw_disable_ips(const struct intel_crtc_state *crtc_state)
6426 {
6427 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
6428 	struct drm_device *dev = crtc->base.dev;
6429 	struct drm_i915_private *dev_priv = to_i915(dev);
6430 
6431 	if (!crtc_state->ips_enabled)
6432 		return;
6433 
6434 	if (IS_BROADWELL(dev_priv)) {
6435 		drm_WARN_ON(dev,
6436 			    sandybridge_pcode_write(dev_priv, DISPLAY_IPS_CONTROL, 0));
6437 		/*
6438 		 * Wait for PCODE to finish disabling IPS. The BSpec specified
6439 		 * 42ms timeout value leads to occasional timeouts so use 100ms
6440 		 * instead.
6441 		 */
6442 		if (intel_de_wait_for_clear(dev_priv, IPS_CTL, IPS_ENABLE, 100))
6443 			drm_err(&dev_priv->drm,
6444 				"Timed out waiting for IPS disable\n");
6445 	} else {
6446 		intel_de_write(dev_priv, IPS_CTL, 0);
6447 		intel_de_posting_read(dev_priv, IPS_CTL);
6448 	}
6449 
6450 	/* We need to wait for a vblank before we can disable the plane. */
6451 	intel_wait_for_vblank(dev_priv, crtc->pipe);
6452 }
6453 
6454 static void intel_crtc_dpms_overlay_disable(struct intel_crtc *intel_crtc)
6455 {
6456 	if (intel_crtc->overlay)
6457 		(void) intel_overlay_switch_off(intel_crtc->overlay);
6458 
6459 	/* Let userspace switch the overlay on again. In most cases userspace
6460 	 * has to recompute where to put it anyway.
6461 	 */
6462 }
6463 
6464 static bool hsw_pre_update_disable_ips(const struct intel_crtc_state *old_crtc_state,
6465 				       const struct intel_crtc_state *new_crtc_state)
6466 {
6467 	struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
6468 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
6469 
6470 	if (!old_crtc_state->ips_enabled)
6471 		return false;
6472 
6473 	if (needs_modeset(new_crtc_state))
6474 		return true;
6475 
6476 	/*
6477 	 * Workaround : Do not read or write the pipe palette/gamma data while
6478 	 * GAMMA_MODE is configured for split gamma and IPS_CTL has IPS enabled.
6479 	 *
6480 	 * Disable IPS before we program the LUT.
6481 	 */
6482 	if (IS_HASWELL(dev_priv) &&
6483 	    (new_crtc_state->uapi.color_mgmt_changed ||
6484 	     new_crtc_state->update_pipe) &&
6485 	    new_crtc_state->gamma_mode == GAMMA_MODE_MODE_SPLIT)
6486 		return true;
6487 
6488 	return !new_crtc_state->ips_enabled;
6489 }
6490 
6491 static bool hsw_post_update_enable_ips(const struct intel_crtc_state *old_crtc_state,
6492 				       const struct intel_crtc_state *new_crtc_state)
6493 {
6494 	struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
6495 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
6496 
6497 	if (!new_crtc_state->ips_enabled)
6498 		return false;
6499 
6500 	if (needs_modeset(new_crtc_state))
6501 		return true;
6502 
6503 	/*
6504 	 * Workaround : Do not read or write the pipe palette/gamma data while
6505 	 * GAMMA_MODE is configured for split gamma and IPS_CTL has IPS enabled.
6506 	 *
6507 	 * Re-enable IPS after the LUT has been programmed.
6508 	 */
6509 	if (IS_HASWELL(dev_priv) &&
6510 	    (new_crtc_state->uapi.color_mgmt_changed ||
6511 	     new_crtc_state->update_pipe) &&
6512 	    new_crtc_state->gamma_mode == GAMMA_MODE_MODE_SPLIT)
6513 		return true;
6514 
6515 	/*
6516 	 * We can't read out IPS on broadwell, assume the worst and
6517 	 * forcibly enable IPS on the first fastset.
6518 	 */
6519 	if (new_crtc_state->update_pipe && old_crtc_state->inherited)
6520 		return true;
6521 
6522 	return !old_crtc_state->ips_enabled;
6523 }
6524 
6525 static bool needs_nv12_wa(const struct intel_crtc_state *crtc_state)
6526 {
6527 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
6528 
6529 	if (!crtc_state->nv12_planes)
6530 		return false;
6531 
6532 	/* WA Display #0827: Gen9:all */
6533 	if (IS_GEN(dev_priv, 9) && !IS_GEMINILAKE(dev_priv))
6534 		return true;
6535 
6536 	return false;
6537 }
6538 
6539 static bool needs_scalerclk_wa(const struct intel_crtc_state *crtc_state)
6540 {
6541 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
6542 
6543 	/* Wa_2006604312:icl,ehl */
6544 	if (crtc_state->scaler_state.scaler_users > 0 && IS_GEN(dev_priv, 11))
6545 		return true;
6546 
6547 	return false;
6548 }
6549 
6550 static bool planes_enabling(const struct intel_crtc_state *old_crtc_state,
6551 			    const struct intel_crtc_state *new_crtc_state)
6552 {
6553 	return (!old_crtc_state->active_planes || needs_modeset(new_crtc_state)) &&
6554 		new_crtc_state->active_planes;
6555 }
6556 
6557 static bool planes_disabling(const struct intel_crtc_state *old_crtc_state,
6558 			     const struct intel_crtc_state *new_crtc_state)
6559 {
6560 	return old_crtc_state->active_planes &&
6561 		(!new_crtc_state->active_planes || needs_modeset(new_crtc_state));
6562 }
6563 
6564 static void intel_post_plane_update(struct intel_atomic_state *state,
6565 				    struct intel_crtc *crtc)
6566 {
6567 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
6568 	const struct intel_crtc_state *old_crtc_state =
6569 		intel_atomic_get_old_crtc_state(state, crtc);
6570 	const struct intel_crtc_state *new_crtc_state =
6571 		intel_atomic_get_new_crtc_state(state, crtc);
6572 	enum pipe pipe = crtc->pipe;
6573 
6574 	intel_frontbuffer_flip(dev_priv, new_crtc_state->fb_bits);
6575 
6576 	if (new_crtc_state->update_wm_post && new_crtc_state->hw.active)
6577 		intel_update_watermarks(crtc);
6578 
6579 	if (hsw_post_update_enable_ips(old_crtc_state, new_crtc_state))
6580 		hsw_enable_ips(new_crtc_state);
6581 
6582 	intel_fbc_post_update(state, crtc);
6583 
6584 	if (needs_nv12_wa(old_crtc_state) &&
6585 	    !needs_nv12_wa(new_crtc_state))
6586 		skl_wa_827(dev_priv, pipe, false);
6587 
6588 	if (needs_scalerclk_wa(old_crtc_state) &&
6589 	    !needs_scalerclk_wa(new_crtc_state))
6590 		icl_wa_scalerclkgating(dev_priv, pipe, false);
6591 }
6592 
6593 static void skl_disable_async_flip_wa(struct intel_atomic_state *state,
6594 				      struct intel_crtc *crtc,
6595 				      const struct intel_crtc_state *new_crtc_state)
6596 {
6597 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
6598 	struct intel_plane *plane;
6599 	struct intel_plane_state *new_plane_state;
6600 	int i;
6601 
6602 	for_each_new_intel_plane_in_state(state, plane, new_plane_state, i) {
6603 		u32 update_mask = new_crtc_state->update_planes;
6604 		u32 plane_ctl, surf_addr;
6605 		enum plane_id plane_id;
6606 		unsigned long irqflags;
6607 		enum pipe pipe;
6608 
6609 		if (crtc->pipe != plane->pipe ||
6610 		    !(update_mask & BIT(plane->id)))
6611 			continue;
6612 
6613 		plane_id = plane->id;
6614 		pipe = plane->pipe;
6615 
6616 		spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
6617 		plane_ctl = intel_de_read_fw(dev_priv, PLANE_CTL(pipe, plane_id));
6618 		surf_addr = intel_de_read_fw(dev_priv, PLANE_SURF(pipe, plane_id));
6619 
6620 		plane_ctl &= ~PLANE_CTL_ASYNC_FLIP;
6621 
6622 		intel_de_write_fw(dev_priv, PLANE_CTL(pipe, plane_id), plane_ctl);
6623 		intel_de_write_fw(dev_priv, PLANE_SURF(pipe, plane_id), surf_addr);
6624 		spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
6625 	}
6626 
6627 	intel_wait_for_vblank(dev_priv, crtc->pipe);
6628 }
6629 
6630 static void intel_pre_plane_update(struct intel_atomic_state *state,
6631 				   struct intel_crtc *crtc)
6632 {
6633 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
6634 	const struct intel_crtc_state *old_crtc_state =
6635 		intel_atomic_get_old_crtc_state(state, crtc);
6636 	const struct intel_crtc_state *new_crtc_state =
6637 		intel_atomic_get_new_crtc_state(state, crtc);
6638 	enum pipe pipe = crtc->pipe;
6639 
6640 	if (hsw_pre_update_disable_ips(old_crtc_state, new_crtc_state))
6641 		hsw_disable_ips(old_crtc_state);
6642 
6643 	if (intel_fbc_pre_update(state, crtc))
6644 		intel_wait_for_vblank(dev_priv, pipe);
6645 
6646 	/* Display WA 827 */
6647 	if (!needs_nv12_wa(old_crtc_state) &&
6648 	    needs_nv12_wa(new_crtc_state))
6649 		skl_wa_827(dev_priv, pipe, true);
6650 
6651 	/* Wa_2006604312:icl,ehl */
6652 	if (!needs_scalerclk_wa(old_crtc_state) &&
6653 	    needs_scalerclk_wa(new_crtc_state))
6654 		icl_wa_scalerclkgating(dev_priv, pipe, true);
6655 
6656 	/*
6657 	 * Vblank time updates from the shadow to live plane control register
6658 	 * are blocked if the memory self-refresh mode is active at that
6659 	 * moment. So to make sure the plane gets truly disabled, disable
6660 	 * first the self-refresh mode. The self-refresh enable bit in turn
6661 	 * will be checked/applied by the HW only at the next frame start
6662 	 * event which is after the vblank start event, so we need to have a
6663 	 * wait-for-vblank between disabling the plane and the pipe.
6664 	 */
6665 	if (HAS_GMCH(dev_priv) && old_crtc_state->hw.active &&
6666 	    new_crtc_state->disable_cxsr && intel_set_memory_cxsr(dev_priv, false))
6667 		intel_wait_for_vblank(dev_priv, pipe);
6668 
6669 	/*
6670 	 * IVB workaround: must disable low power watermarks for at least
6671 	 * one frame before enabling scaling.  LP watermarks can be re-enabled
6672 	 * when scaling is disabled.
6673 	 *
6674 	 * WaCxSRDisabledForSpriteScaling:ivb
6675 	 */
6676 	if (old_crtc_state->hw.active &&
6677 	    new_crtc_state->disable_lp_wm && ilk_disable_lp_wm(dev_priv))
6678 		intel_wait_for_vblank(dev_priv, pipe);
6679 
6680 	/*
6681 	 * If we're doing a modeset we don't need to do any
6682 	 * pre-vblank watermark programming here.
6683 	 */
6684 	if (!needs_modeset(new_crtc_state)) {
6685 		/*
6686 		 * For platforms that support atomic watermarks, program the
6687 		 * 'intermediate' watermarks immediately.  On pre-gen9 platforms, these
6688 		 * will be the intermediate values that are safe for both pre- and
6689 		 * post- vblank; when vblank happens, the 'active' values will be set
6690 		 * to the final 'target' values and we'll do this again to get the
6691 		 * optimal watermarks.  For gen9+ platforms, the values we program here
6692 		 * will be the final target values which will get automatically latched
6693 		 * at vblank time; no further programming will be necessary.
6694 		 *
6695 		 * If a platform hasn't been transitioned to atomic watermarks yet,
6696 		 * we'll continue to update watermarks the old way, if flags tell
6697 		 * us to.
6698 		 */
6699 		if (dev_priv->display.initial_watermarks)
6700 			dev_priv->display.initial_watermarks(state, crtc);
6701 		else if (new_crtc_state->update_wm_pre)
6702 			intel_update_watermarks(crtc);
6703 	}
6704 
6705 	/*
6706 	 * Gen2 reports pipe underruns whenever all planes are disabled.
6707 	 * So disable underrun reporting before all the planes get disabled.
6708 	 *
6709 	 * We do this after .initial_watermarks() so that we have a
6710 	 * chance of catching underruns with the intermediate watermarks
6711 	 * vs. the old plane configuration.
6712 	 */
6713 	if (IS_GEN(dev_priv, 2) && planes_disabling(old_crtc_state, new_crtc_state))
6714 		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
6715 
6716 	/*
6717 	 * WA for platforms where async address update enable bit
6718 	 * is double buffered and only latched at start of vblank.
6719 	 */
6720 	if (old_crtc_state->uapi.async_flip &&
6721 	    !new_crtc_state->uapi.async_flip &&
6722 	    IS_GEN_RANGE(dev_priv, 9, 10))
6723 		skl_disable_async_flip_wa(state, crtc, new_crtc_state);
6724 }
6725 
6726 static void intel_crtc_disable_planes(struct intel_atomic_state *state,
6727 				      struct intel_crtc *crtc)
6728 {
6729 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
6730 	const struct intel_crtc_state *new_crtc_state =
6731 		intel_atomic_get_new_crtc_state(state, crtc);
6732 	unsigned int update_mask = new_crtc_state->update_planes;
6733 	const struct intel_plane_state *old_plane_state;
6734 	struct intel_plane *plane;
6735 	unsigned fb_bits = 0;
6736 	int i;
6737 
6738 	intel_crtc_dpms_overlay_disable(crtc);
6739 
6740 	for_each_old_intel_plane_in_state(state, plane, old_plane_state, i) {
6741 		if (crtc->pipe != plane->pipe ||
6742 		    !(update_mask & BIT(plane->id)))
6743 			continue;
6744 
6745 		intel_disable_plane(plane, new_crtc_state);
6746 
6747 		if (old_plane_state->uapi.visible)
6748 			fb_bits |= plane->frontbuffer_bit;
6749 	}
6750 
6751 	intel_frontbuffer_flip(dev_priv, fb_bits);
6752 }
6753 
6754 /*
6755  * intel_connector_primary_encoder - get the primary encoder for a connector
6756  * @connector: connector for which to return the encoder
6757  *
6758  * Returns the primary encoder for a connector. There is a 1:1 mapping from
6759  * all connectors to their encoder, except for DP-MST connectors which have
6760  * both a virtual and a primary encoder. These DP-MST primary encoders can be
6761  * pointed to by as many DP-MST connectors as there are pipes.
6762  */
6763 static struct intel_encoder *
6764 intel_connector_primary_encoder(struct intel_connector *connector)
6765 {
6766 	struct intel_encoder *encoder;
6767 
6768 	if (connector->mst_port)
6769 		return &dp_to_dig_port(connector->mst_port)->base;
6770 
6771 	encoder = intel_attached_encoder(connector);
6772 	drm_WARN_ON(connector->base.dev, !encoder);
6773 
6774 	return encoder;
6775 }
6776 
6777 static void intel_encoders_update_prepare(struct intel_atomic_state *state)
6778 {
6779 	struct drm_connector_state *new_conn_state;
6780 	struct drm_connector *connector;
6781 	int i;
6782 
6783 	for_each_new_connector_in_state(&state->base, connector, new_conn_state,
6784 					i) {
6785 		struct intel_connector *intel_connector;
6786 		struct intel_encoder *encoder;
6787 		struct intel_crtc *crtc;
6788 
6789 		if (!intel_connector_needs_modeset(state, connector))
6790 			continue;
6791 
6792 		intel_connector = to_intel_connector(connector);
6793 		encoder = intel_connector_primary_encoder(intel_connector);
6794 		if (!encoder->update_prepare)
6795 			continue;
6796 
6797 		crtc = new_conn_state->crtc ?
6798 			to_intel_crtc(new_conn_state->crtc) : NULL;
6799 		encoder->update_prepare(state, encoder, crtc);
6800 	}
6801 }
6802 
6803 static void intel_encoders_update_complete(struct intel_atomic_state *state)
6804 {
6805 	struct drm_connector_state *new_conn_state;
6806 	struct drm_connector *connector;
6807 	int i;
6808 
6809 	for_each_new_connector_in_state(&state->base, connector, new_conn_state,
6810 					i) {
6811 		struct intel_connector *intel_connector;
6812 		struct intel_encoder *encoder;
6813 		struct intel_crtc *crtc;
6814 
6815 		if (!intel_connector_needs_modeset(state, connector))
6816 			continue;
6817 
6818 		intel_connector = to_intel_connector(connector);
6819 		encoder = intel_connector_primary_encoder(intel_connector);
6820 		if (!encoder->update_complete)
6821 			continue;
6822 
6823 		crtc = new_conn_state->crtc ?
6824 			to_intel_crtc(new_conn_state->crtc) : NULL;
6825 		encoder->update_complete(state, encoder, crtc);
6826 	}
6827 }
6828 
6829 static void intel_encoders_pre_pll_enable(struct intel_atomic_state *state,
6830 					  struct intel_crtc *crtc)
6831 {
6832 	const struct intel_crtc_state *crtc_state =
6833 		intel_atomic_get_new_crtc_state(state, crtc);
6834 	const struct drm_connector_state *conn_state;
6835 	struct drm_connector *conn;
6836 	int i;
6837 
6838 	for_each_new_connector_in_state(&state->base, conn, conn_state, i) {
6839 		struct intel_encoder *encoder =
6840 			to_intel_encoder(conn_state->best_encoder);
6841 
6842 		if (conn_state->crtc != &crtc->base)
6843 			continue;
6844 
6845 		if (encoder->pre_pll_enable)
6846 			encoder->pre_pll_enable(state, encoder,
6847 						crtc_state, conn_state);
6848 	}
6849 }
6850 
6851 static void intel_encoders_pre_enable(struct intel_atomic_state *state,
6852 				      struct intel_crtc *crtc)
6853 {
6854 	const struct intel_crtc_state *crtc_state =
6855 		intel_atomic_get_new_crtc_state(state, crtc);
6856 	const struct drm_connector_state *conn_state;
6857 	struct drm_connector *conn;
6858 	int i;
6859 
6860 	for_each_new_connector_in_state(&state->base, conn, conn_state, i) {
6861 		struct intel_encoder *encoder =
6862 			to_intel_encoder(conn_state->best_encoder);
6863 
6864 		if (conn_state->crtc != &crtc->base)
6865 			continue;
6866 
6867 		if (encoder->pre_enable)
6868 			encoder->pre_enable(state, encoder,
6869 					    crtc_state, conn_state);
6870 	}
6871 }
6872 
6873 static void intel_encoders_enable(struct intel_atomic_state *state,
6874 				  struct intel_crtc *crtc)
6875 {
6876 	const struct intel_crtc_state *crtc_state =
6877 		intel_atomic_get_new_crtc_state(state, crtc);
6878 	const struct drm_connector_state *conn_state;
6879 	struct drm_connector *conn;
6880 	int i;
6881 
6882 	for_each_new_connector_in_state(&state->base, conn, conn_state, i) {
6883 		struct intel_encoder *encoder =
6884 			to_intel_encoder(conn_state->best_encoder);
6885 
6886 		if (conn_state->crtc != &crtc->base)
6887 			continue;
6888 
6889 		if (encoder->enable)
6890 			encoder->enable(state, encoder,
6891 					crtc_state, conn_state);
6892 		intel_opregion_notify_encoder(encoder, true);
6893 	}
6894 }
6895 
6896 static void intel_encoders_disable(struct intel_atomic_state *state,
6897 				   struct intel_crtc *crtc)
6898 {
6899 	const struct intel_crtc_state *old_crtc_state =
6900 		intel_atomic_get_old_crtc_state(state, crtc);
6901 	const struct drm_connector_state *old_conn_state;
6902 	struct drm_connector *conn;
6903 	int i;
6904 
6905 	for_each_old_connector_in_state(&state->base, conn, old_conn_state, i) {
6906 		struct intel_encoder *encoder =
6907 			to_intel_encoder(old_conn_state->best_encoder);
6908 
6909 		if (old_conn_state->crtc != &crtc->base)
6910 			continue;
6911 
6912 		intel_opregion_notify_encoder(encoder, false);
6913 		if (encoder->disable)
6914 			encoder->disable(state, encoder,
6915 					 old_crtc_state, old_conn_state);
6916 	}
6917 }
6918 
6919 static void intel_encoders_post_disable(struct intel_atomic_state *state,
6920 					struct intel_crtc *crtc)
6921 {
6922 	const struct intel_crtc_state *old_crtc_state =
6923 		intel_atomic_get_old_crtc_state(state, crtc);
6924 	const struct drm_connector_state *old_conn_state;
6925 	struct drm_connector *conn;
6926 	int i;
6927 
6928 	for_each_old_connector_in_state(&state->base, conn, old_conn_state, i) {
6929 		struct intel_encoder *encoder =
6930 			to_intel_encoder(old_conn_state->best_encoder);
6931 
6932 		if (old_conn_state->crtc != &crtc->base)
6933 			continue;
6934 
6935 		if (encoder->post_disable)
6936 			encoder->post_disable(state, encoder,
6937 					      old_crtc_state, old_conn_state);
6938 	}
6939 }
6940 
6941 static void intel_encoders_post_pll_disable(struct intel_atomic_state *state,
6942 					    struct intel_crtc *crtc)
6943 {
6944 	const struct intel_crtc_state *old_crtc_state =
6945 		intel_atomic_get_old_crtc_state(state, crtc);
6946 	const struct drm_connector_state *old_conn_state;
6947 	struct drm_connector *conn;
6948 	int i;
6949 
6950 	for_each_old_connector_in_state(&state->base, conn, old_conn_state, i) {
6951 		struct intel_encoder *encoder =
6952 			to_intel_encoder(old_conn_state->best_encoder);
6953 
6954 		if (old_conn_state->crtc != &crtc->base)
6955 			continue;
6956 
6957 		if (encoder->post_pll_disable)
6958 			encoder->post_pll_disable(state, encoder,
6959 						  old_crtc_state, old_conn_state);
6960 	}
6961 }
6962 
6963 static void intel_encoders_update_pipe(struct intel_atomic_state *state,
6964 				       struct intel_crtc *crtc)
6965 {
6966 	const struct intel_crtc_state *crtc_state =
6967 		intel_atomic_get_new_crtc_state(state, crtc);
6968 	const struct drm_connector_state *conn_state;
6969 	struct drm_connector *conn;
6970 	int i;
6971 
6972 	for_each_new_connector_in_state(&state->base, conn, conn_state, i) {
6973 		struct intel_encoder *encoder =
6974 			to_intel_encoder(conn_state->best_encoder);
6975 
6976 		if (conn_state->crtc != &crtc->base)
6977 			continue;
6978 
6979 		if (encoder->update_pipe)
6980 			encoder->update_pipe(state, encoder,
6981 					     crtc_state, conn_state);
6982 	}
6983 }
6984 
6985 static void intel_disable_primary_plane(const struct intel_crtc_state *crtc_state)
6986 {
6987 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
6988 	struct intel_plane *plane = to_intel_plane(crtc->base.primary);
6989 
6990 	plane->disable_plane(plane, crtc_state);
6991 }
6992 
6993 static void ilk_crtc_enable(struct intel_atomic_state *state,
6994 			    struct intel_crtc *crtc)
6995 {
6996 	const struct intel_crtc_state *new_crtc_state =
6997 		intel_atomic_get_new_crtc_state(state, crtc);
6998 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
6999 	enum pipe pipe = crtc->pipe;
7000 
7001 	if (drm_WARN_ON(&dev_priv->drm, crtc->active))
7002 		return;
7003 
7004 	/*
7005 	 * Sometimes spurious CPU pipe underruns happen during FDI
7006 	 * training, at least with VGA+HDMI cloning. Suppress them.
7007 	 *
7008 	 * On ILK we get an occasional spurious CPU pipe underruns
7009 	 * between eDP port A enable and vdd enable. Also PCH port
7010 	 * enable seems to result in the occasional CPU pipe underrun.
7011 	 *
7012 	 * Spurious PCH underruns also occur during PCH enabling.
7013 	 */
7014 	intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
7015 	intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, false);
7016 
7017 	if (new_crtc_state->has_pch_encoder)
7018 		intel_prepare_shared_dpll(new_crtc_state);
7019 
7020 	if (intel_crtc_has_dp_encoder(new_crtc_state))
7021 		intel_dp_set_m_n(new_crtc_state, M1_N1);
7022 
7023 	intel_set_transcoder_timings(new_crtc_state);
7024 	intel_set_pipe_src_size(new_crtc_state);
7025 
7026 	if (new_crtc_state->has_pch_encoder)
7027 		intel_cpu_transcoder_set_m_n(new_crtc_state,
7028 					     &new_crtc_state->fdi_m_n, NULL);
7029 
7030 	ilk_set_pipeconf(new_crtc_state);
7031 
7032 	crtc->active = true;
7033 
7034 	intel_encoders_pre_enable(state, crtc);
7035 
7036 	if (new_crtc_state->has_pch_encoder) {
7037 		/* Note: FDI PLL enabling _must_ be done before we enable the
7038 		 * cpu pipes, hence this is separate from all the other fdi/pch
7039 		 * enabling. */
7040 		ilk_fdi_pll_enable(new_crtc_state);
7041 	} else {
7042 		assert_fdi_tx_disabled(dev_priv, pipe);
7043 		assert_fdi_rx_disabled(dev_priv, pipe);
7044 	}
7045 
7046 	ilk_pfit_enable(new_crtc_state);
7047 
7048 	/*
7049 	 * On ILK+ LUT must be loaded before the pipe is running but with
7050 	 * clocks enabled
7051 	 */
7052 	intel_color_load_luts(new_crtc_state);
7053 	intel_color_commit(new_crtc_state);
7054 	/* update DSPCNTR to configure gamma for pipe bottom color */
7055 	intel_disable_primary_plane(new_crtc_state);
7056 
7057 	if (dev_priv->display.initial_watermarks)
7058 		dev_priv->display.initial_watermarks(state, crtc);
7059 	intel_enable_pipe(new_crtc_state);
7060 
7061 	if (new_crtc_state->has_pch_encoder)
7062 		ilk_pch_enable(state, new_crtc_state);
7063 
7064 	intel_crtc_vblank_on(new_crtc_state);
7065 
7066 	intel_encoders_enable(state, crtc);
7067 
7068 	if (HAS_PCH_CPT(dev_priv))
7069 		cpt_verify_modeset(dev_priv, pipe);
7070 
7071 	/*
7072 	 * Must wait for vblank to avoid spurious PCH FIFO underruns.
7073 	 * And a second vblank wait is needed at least on ILK with
7074 	 * some interlaced HDMI modes. Let's do the double wait always
7075 	 * in case there are more corner cases we don't know about.
7076 	 */
7077 	if (new_crtc_state->has_pch_encoder) {
7078 		intel_wait_for_vblank(dev_priv, pipe);
7079 		intel_wait_for_vblank(dev_priv, pipe);
7080 	}
7081 	intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
7082 	intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true);
7083 }
7084 
7085 /* IPS only exists on ULT machines and is tied to pipe A. */
7086 static bool hsw_crtc_supports_ips(struct intel_crtc *crtc)
7087 {
7088 	return HAS_IPS(to_i915(crtc->base.dev)) && crtc->pipe == PIPE_A;
7089 }
7090 
7091 static void glk_pipe_scaler_clock_gating_wa(struct drm_i915_private *dev_priv,
7092 					    enum pipe pipe, bool apply)
7093 {
7094 	u32 val = intel_de_read(dev_priv, CLKGATE_DIS_PSL(pipe));
7095 	u32 mask = DPF_GATING_DIS | DPF_RAM_GATING_DIS | DPFR_GATING_DIS;
7096 
7097 	if (apply)
7098 		val |= mask;
7099 	else
7100 		val &= ~mask;
7101 
7102 	intel_de_write(dev_priv, CLKGATE_DIS_PSL(pipe), val);
7103 }
7104 
7105 static void icl_pipe_mbus_enable(struct intel_crtc *crtc)
7106 {
7107 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7108 	enum pipe pipe = crtc->pipe;
7109 	u32 val;
7110 
7111 	val = MBUS_DBOX_A_CREDIT(2);
7112 
7113 	if (INTEL_GEN(dev_priv) >= 12) {
7114 		val |= MBUS_DBOX_BW_CREDIT(2);
7115 		val |= MBUS_DBOX_B_CREDIT(12);
7116 	} else {
7117 		val |= MBUS_DBOX_BW_CREDIT(1);
7118 		val |= MBUS_DBOX_B_CREDIT(8);
7119 	}
7120 
7121 	intel_de_write(dev_priv, PIPE_MBUS_DBOX_CTL(pipe), val);
7122 }
7123 
7124 static void hsw_set_linetime_wm(const struct intel_crtc_state *crtc_state)
7125 {
7126 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
7127 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7128 
7129 	intel_de_write(dev_priv, WM_LINETIME(crtc->pipe),
7130 		       HSW_LINETIME(crtc_state->linetime) |
7131 		       HSW_IPS_LINETIME(crtc_state->ips_linetime));
7132 }
7133 
7134 static void hsw_set_frame_start_delay(const struct intel_crtc_state *crtc_state)
7135 {
7136 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
7137 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7138 	i915_reg_t reg = CHICKEN_TRANS(crtc_state->cpu_transcoder);
7139 	u32 val;
7140 
7141 	val = intel_de_read(dev_priv, reg);
7142 	val &= ~HSW_FRAME_START_DELAY_MASK;
7143 	val |= HSW_FRAME_START_DELAY(0);
7144 	intel_de_write(dev_priv, reg, val);
7145 }
7146 
7147 static void icl_ddi_bigjoiner_pre_enable(struct intel_atomic_state *state,
7148 					 const struct intel_crtc_state *crtc_state)
7149 {
7150 	struct intel_crtc *master = to_intel_crtc(crtc_state->uapi.crtc);
7151 	struct intel_crtc_state *master_crtc_state;
7152 	struct drm_connector_state *conn_state;
7153 	struct drm_connector *conn;
7154 	struct intel_encoder *encoder = NULL;
7155 	int i;
7156 
7157 	if (crtc_state->bigjoiner_slave)
7158 		master = crtc_state->bigjoiner_linked_crtc;
7159 
7160 	master_crtc_state = intel_atomic_get_new_crtc_state(state, master);
7161 
7162 	for_each_new_connector_in_state(&state->base, conn, conn_state, i) {
7163 		if (conn_state->crtc != &master->base)
7164 			continue;
7165 
7166 		encoder = to_intel_encoder(conn_state->best_encoder);
7167 		break;
7168 	}
7169 
7170 	if (!crtc_state->bigjoiner_slave) {
7171 		/* need to enable VDSC, which we skipped in pre-enable */
7172 		intel_dsc_enable(encoder, crtc_state);
7173 	} else {
7174 		/*
7175 		 * Enable sequence steps 1-7 on bigjoiner master
7176 		 */
7177 		intel_encoders_pre_pll_enable(state, master);
7178 		intel_enable_shared_dpll(master_crtc_state);
7179 		intel_encoders_pre_enable(state, master);
7180 
7181 		/* and DSC on slave */
7182 		intel_dsc_enable(NULL, crtc_state);
7183 	}
7184 }
7185 
7186 static void hsw_crtc_enable(struct intel_atomic_state *state,
7187 			    struct intel_crtc *crtc)
7188 {
7189 	const struct intel_crtc_state *new_crtc_state =
7190 		intel_atomic_get_new_crtc_state(state, crtc);
7191 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7192 	enum pipe pipe = crtc->pipe, hsw_workaround_pipe;
7193 	enum transcoder cpu_transcoder = new_crtc_state->cpu_transcoder;
7194 	bool psl_clkgate_wa;
7195 
7196 	if (drm_WARN_ON(&dev_priv->drm, crtc->active))
7197 		return;
7198 
7199 	if (!new_crtc_state->bigjoiner) {
7200 		intel_encoders_pre_pll_enable(state, crtc);
7201 
7202 		if (new_crtc_state->shared_dpll)
7203 			intel_enable_shared_dpll(new_crtc_state);
7204 
7205 		intel_encoders_pre_enable(state, crtc);
7206 	} else {
7207 		icl_ddi_bigjoiner_pre_enable(state, new_crtc_state);
7208 	}
7209 
7210 	intel_set_pipe_src_size(new_crtc_state);
7211 	if (INTEL_GEN(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
7212 		bdw_set_pipemisc(new_crtc_state);
7213 
7214 	if (!new_crtc_state->bigjoiner_slave && !transcoder_is_dsi(cpu_transcoder)) {
7215 		intel_set_transcoder_timings(new_crtc_state);
7216 
7217 		if (cpu_transcoder != TRANSCODER_EDP)
7218 			intel_de_write(dev_priv, PIPE_MULT(cpu_transcoder),
7219 				       new_crtc_state->pixel_multiplier - 1);
7220 
7221 		if (new_crtc_state->has_pch_encoder)
7222 			intel_cpu_transcoder_set_m_n(new_crtc_state,
7223 						     &new_crtc_state->fdi_m_n, NULL);
7224 
7225 		hsw_set_frame_start_delay(new_crtc_state);
7226 	}
7227 
7228 	if (!transcoder_is_dsi(cpu_transcoder))
7229 		hsw_set_pipeconf(new_crtc_state);
7230 
7231 	crtc->active = true;
7232 
7233 	/* Display WA #1180: WaDisableScalarClockGating: glk, cnl */
7234 	psl_clkgate_wa = (IS_GEMINILAKE(dev_priv) || IS_CANNONLAKE(dev_priv)) &&
7235 		new_crtc_state->pch_pfit.enabled;
7236 	if (psl_clkgate_wa)
7237 		glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, true);
7238 
7239 	if (INTEL_GEN(dev_priv) >= 9)
7240 		skl_pfit_enable(new_crtc_state);
7241 	else
7242 		ilk_pfit_enable(new_crtc_state);
7243 
7244 	/*
7245 	 * On ILK+ LUT must be loaded before the pipe is running but with
7246 	 * clocks enabled
7247 	 */
7248 	intel_color_load_luts(new_crtc_state);
7249 	intel_color_commit(new_crtc_state);
7250 	/* update DSPCNTR to configure gamma/csc for pipe bottom color */
7251 	if (INTEL_GEN(dev_priv) < 9)
7252 		intel_disable_primary_plane(new_crtc_state);
7253 
7254 	hsw_set_linetime_wm(new_crtc_state);
7255 
7256 	if (INTEL_GEN(dev_priv) >= 11)
7257 		icl_set_pipe_chicken(crtc);
7258 
7259 	if (dev_priv->display.initial_watermarks)
7260 		dev_priv->display.initial_watermarks(state, crtc);
7261 
7262 	if (INTEL_GEN(dev_priv) >= 11)
7263 		icl_pipe_mbus_enable(crtc);
7264 
7265 	if (new_crtc_state->bigjoiner_slave) {
7266 		trace_intel_pipe_enable(crtc);
7267 		intel_crtc_vblank_on(new_crtc_state);
7268 	}
7269 
7270 	intel_encoders_enable(state, crtc);
7271 
7272 	if (psl_clkgate_wa) {
7273 		intel_wait_for_vblank(dev_priv, pipe);
7274 		glk_pipe_scaler_clock_gating_wa(dev_priv, pipe, false);
7275 	}
7276 
7277 	/* If we change the relative order between pipe/planes enabling, we need
7278 	 * to change the workaround. */
7279 	hsw_workaround_pipe = new_crtc_state->hsw_workaround_pipe;
7280 	if (IS_HASWELL(dev_priv) && hsw_workaround_pipe != INVALID_PIPE) {
7281 		intel_wait_for_vblank(dev_priv, hsw_workaround_pipe);
7282 		intel_wait_for_vblank(dev_priv, hsw_workaround_pipe);
7283 	}
7284 }
7285 
7286 void ilk_pfit_disable(const struct intel_crtc_state *old_crtc_state)
7287 {
7288 	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
7289 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7290 	enum pipe pipe = crtc->pipe;
7291 
7292 	/* To avoid upsetting the power well on haswell only disable the pfit if
7293 	 * it's in use. The hw state code will make sure we get this right. */
7294 	if (!old_crtc_state->pch_pfit.enabled)
7295 		return;
7296 
7297 	intel_de_write(dev_priv, PF_CTL(pipe), 0);
7298 	intel_de_write(dev_priv, PF_WIN_POS(pipe), 0);
7299 	intel_de_write(dev_priv, PF_WIN_SZ(pipe), 0);
7300 }
7301 
7302 static void ilk_crtc_disable(struct intel_atomic_state *state,
7303 			     struct intel_crtc *crtc)
7304 {
7305 	const struct intel_crtc_state *old_crtc_state =
7306 		intel_atomic_get_old_crtc_state(state, crtc);
7307 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7308 	enum pipe pipe = crtc->pipe;
7309 
7310 	/*
7311 	 * Sometimes spurious CPU pipe underruns happen when the
7312 	 * pipe is already disabled, but FDI RX/TX is still enabled.
7313 	 * Happens at least with VGA+HDMI cloning. Suppress them.
7314 	 */
7315 	intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
7316 	intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, false);
7317 
7318 	intel_encoders_disable(state, crtc);
7319 
7320 	intel_crtc_vblank_off(old_crtc_state);
7321 
7322 	intel_disable_pipe(old_crtc_state);
7323 
7324 	ilk_pfit_disable(old_crtc_state);
7325 
7326 	if (old_crtc_state->has_pch_encoder)
7327 		ilk_fdi_disable(crtc);
7328 
7329 	intel_encoders_post_disable(state, crtc);
7330 
7331 	if (old_crtc_state->has_pch_encoder) {
7332 		ilk_disable_pch_transcoder(dev_priv, pipe);
7333 
7334 		if (HAS_PCH_CPT(dev_priv)) {
7335 			i915_reg_t reg;
7336 			u32 temp;
7337 
7338 			/* disable TRANS_DP_CTL */
7339 			reg = TRANS_DP_CTL(pipe);
7340 			temp = intel_de_read(dev_priv, reg);
7341 			temp &= ~(TRANS_DP_OUTPUT_ENABLE |
7342 				  TRANS_DP_PORT_SEL_MASK);
7343 			temp |= TRANS_DP_PORT_SEL_NONE;
7344 			intel_de_write(dev_priv, reg, temp);
7345 
7346 			/* disable DPLL_SEL */
7347 			temp = intel_de_read(dev_priv, PCH_DPLL_SEL);
7348 			temp &= ~(TRANS_DPLL_ENABLE(pipe) | TRANS_DPLLB_SEL(pipe));
7349 			intel_de_write(dev_priv, PCH_DPLL_SEL, temp);
7350 		}
7351 
7352 		ilk_fdi_pll_disable(crtc);
7353 	}
7354 
7355 	intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
7356 	intel_set_pch_fifo_underrun_reporting(dev_priv, pipe, true);
7357 }
7358 
7359 static void hsw_crtc_disable(struct intel_atomic_state *state,
7360 			     struct intel_crtc *crtc)
7361 {
7362 	/*
7363 	 * FIXME collapse everything to one hook.
7364 	 * Need care with mst->ddi interactions.
7365 	 */
7366 	intel_encoders_disable(state, crtc);
7367 	intel_encoders_post_disable(state, crtc);
7368 }
7369 
7370 static void i9xx_pfit_enable(const struct intel_crtc_state *crtc_state)
7371 {
7372 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
7373 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7374 
7375 	if (!crtc_state->gmch_pfit.control)
7376 		return;
7377 
7378 	/*
7379 	 * The panel fitter should only be adjusted whilst the pipe is disabled,
7380 	 * according to register description and PRM.
7381 	 */
7382 	drm_WARN_ON(&dev_priv->drm,
7383 		    intel_de_read(dev_priv, PFIT_CONTROL) & PFIT_ENABLE);
7384 	assert_pipe_disabled(dev_priv, crtc_state->cpu_transcoder);
7385 
7386 	intel_de_write(dev_priv, PFIT_PGM_RATIOS,
7387 		       crtc_state->gmch_pfit.pgm_ratios);
7388 	intel_de_write(dev_priv, PFIT_CONTROL, crtc_state->gmch_pfit.control);
7389 
7390 	/* Border color in case we don't scale up to the full screen. Black by
7391 	 * default, change to something else for debugging. */
7392 	intel_de_write(dev_priv, BCLRPAT(crtc->pipe), 0);
7393 }
7394 
7395 bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
7396 {
7397 	if (phy == PHY_NONE)
7398 		return false;
7399 	else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
7400 		return phy <= PHY_D;
7401 	else if (IS_JSL_EHL(dev_priv))
7402 		return phy <= PHY_C;
7403 	else if (INTEL_GEN(dev_priv) >= 11)
7404 		return phy <= PHY_B;
7405 	else
7406 		return false;
7407 }
7408 
7409 bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy)
7410 {
7411 	if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
7412 		return false;
7413 	else if (INTEL_GEN(dev_priv) >= 12)
7414 		return phy >= PHY_D && phy <= PHY_I;
7415 	else if (INTEL_GEN(dev_priv) >= 11 && !IS_JSL_EHL(dev_priv))
7416 		return phy >= PHY_C && phy <= PHY_F;
7417 	else
7418 		return false;
7419 }
7420 
7421 enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port)
7422 {
7423 	if ((IS_DG1(i915) || IS_ROCKETLAKE(i915)) && port >= PORT_TC1)
7424 		return PHY_C + port - PORT_TC1;
7425 	else if (IS_JSL_EHL(i915) && port == PORT_D)
7426 		return PHY_A;
7427 
7428 	return PHY_A + port - PORT_A;
7429 }
7430 
7431 enum tc_port intel_port_to_tc(struct drm_i915_private *dev_priv, enum port port)
7432 {
7433 	if (!intel_phy_is_tc(dev_priv, intel_port_to_phy(dev_priv, port)))
7434 		return TC_PORT_NONE;
7435 
7436 	if (INTEL_GEN(dev_priv) >= 12)
7437 		return TC_PORT_1 + port - PORT_TC1;
7438 	else
7439 		return TC_PORT_1 + port - PORT_C;
7440 }
7441 
7442 enum intel_display_power_domain intel_port_to_power_domain(enum port port)
7443 {
7444 	switch (port) {
7445 	case PORT_A:
7446 		return POWER_DOMAIN_PORT_DDI_A_LANES;
7447 	case PORT_B:
7448 		return POWER_DOMAIN_PORT_DDI_B_LANES;
7449 	case PORT_C:
7450 		return POWER_DOMAIN_PORT_DDI_C_LANES;
7451 	case PORT_D:
7452 		return POWER_DOMAIN_PORT_DDI_D_LANES;
7453 	case PORT_E:
7454 		return POWER_DOMAIN_PORT_DDI_E_LANES;
7455 	case PORT_F:
7456 		return POWER_DOMAIN_PORT_DDI_F_LANES;
7457 	case PORT_G:
7458 		return POWER_DOMAIN_PORT_DDI_G_LANES;
7459 	case PORT_H:
7460 		return POWER_DOMAIN_PORT_DDI_H_LANES;
7461 	case PORT_I:
7462 		return POWER_DOMAIN_PORT_DDI_I_LANES;
7463 	default:
7464 		MISSING_CASE(port);
7465 		return POWER_DOMAIN_PORT_OTHER;
7466 	}
7467 }
7468 
7469 enum intel_display_power_domain
7470 intel_aux_power_domain(struct intel_digital_port *dig_port)
7471 {
7472 	struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
7473 	enum phy phy = intel_port_to_phy(dev_priv, dig_port->base.port);
7474 
7475 	if (intel_phy_is_tc(dev_priv, phy) &&
7476 	    dig_port->tc_mode == TC_PORT_TBT_ALT) {
7477 		switch (dig_port->aux_ch) {
7478 		case AUX_CH_C:
7479 			return POWER_DOMAIN_AUX_C_TBT;
7480 		case AUX_CH_D:
7481 			return POWER_DOMAIN_AUX_D_TBT;
7482 		case AUX_CH_E:
7483 			return POWER_DOMAIN_AUX_E_TBT;
7484 		case AUX_CH_F:
7485 			return POWER_DOMAIN_AUX_F_TBT;
7486 		case AUX_CH_G:
7487 			return POWER_DOMAIN_AUX_G_TBT;
7488 		case AUX_CH_H:
7489 			return POWER_DOMAIN_AUX_H_TBT;
7490 		case AUX_CH_I:
7491 			return POWER_DOMAIN_AUX_I_TBT;
7492 		default:
7493 			MISSING_CASE(dig_port->aux_ch);
7494 			return POWER_DOMAIN_AUX_C_TBT;
7495 		}
7496 	}
7497 
7498 	return intel_legacy_aux_to_power_domain(dig_port->aux_ch);
7499 }
7500 
7501 /*
7502  * Converts aux_ch to power_domain without caring about TBT ports for that use
7503  * intel_aux_power_domain()
7504  */
7505 enum intel_display_power_domain
7506 intel_legacy_aux_to_power_domain(enum aux_ch aux_ch)
7507 {
7508 	switch (aux_ch) {
7509 	case AUX_CH_A:
7510 		return POWER_DOMAIN_AUX_A;
7511 	case AUX_CH_B:
7512 		return POWER_DOMAIN_AUX_B;
7513 	case AUX_CH_C:
7514 		return POWER_DOMAIN_AUX_C;
7515 	case AUX_CH_D:
7516 		return POWER_DOMAIN_AUX_D;
7517 	case AUX_CH_E:
7518 		return POWER_DOMAIN_AUX_E;
7519 	case AUX_CH_F:
7520 		return POWER_DOMAIN_AUX_F;
7521 	case AUX_CH_G:
7522 		return POWER_DOMAIN_AUX_G;
7523 	case AUX_CH_H:
7524 		return POWER_DOMAIN_AUX_H;
7525 	case AUX_CH_I:
7526 		return POWER_DOMAIN_AUX_I;
7527 	default:
7528 		MISSING_CASE(aux_ch);
7529 		return POWER_DOMAIN_AUX_A;
7530 	}
7531 }
7532 
7533 static u64 get_crtc_power_domains(struct intel_crtc_state *crtc_state)
7534 {
7535 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
7536 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7537 	struct drm_encoder *encoder;
7538 	enum pipe pipe = crtc->pipe;
7539 	u64 mask;
7540 	enum transcoder transcoder = crtc_state->cpu_transcoder;
7541 
7542 	if (!crtc_state->hw.active)
7543 		return 0;
7544 
7545 	mask = BIT_ULL(POWER_DOMAIN_PIPE(pipe));
7546 	mask |= BIT_ULL(POWER_DOMAIN_TRANSCODER(transcoder));
7547 	if (crtc_state->pch_pfit.enabled ||
7548 	    crtc_state->pch_pfit.force_thru)
7549 		mask |= BIT_ULL(POWER_DOMAIN_PIPE_PANEL_FITTER(pipe));
7550 
7551 	drm_for_each_encoder_mask(encoder, &dev_priv->drm,
7552 				  crtc_state->uapi.encoder_mask) {
7553 		struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
7554 
7555 		mask |= BIT_ULL(intel_encoder->power_domain);
7556 	}
7557 
7558 	if (HAS_DDI(dev_priv) && crtc_state->has_audio)
7559 		mask |= BIT_ULL(POWER_DOMAIN_AUDIO);
7560 
7561 	if (crtc_state->shared_dpll)
7562 		mask |= BIT_ULL(POWER_DOMAIN_DISPLAY_CORE);
7563 
7564 	if (crtc_state->dsc.compression_enable)
7565 		mask |= BIT_ULL(intel_dsc_power_domain(crtc_state));
7566 
7567 	return mask;
7568 }
7569 
7570 static u64
7571 modeset_get_crtc_power_domains(struct intel_crtc_state *crtc_state)
7572 {
7573 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
7574 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7575 	enum intel_display_power_domain domain;
7576 	u64 domains, new_domains, old_domains;
7577 
7578 	old_domains = crtc->enabled_power_domains;
7579 	crtc->enabled_power_domains = new_domains =
7580 		get_crtc_power_domains(crtc_state);
7581 
7582 	domains = new_domains & ~old_domains;
7583 
7584 	for_each_power_domain(domain, domains)
7585 		intel_display_power_get(dev_priv, domain);
7586 
7587 	return old_domains & ~new_domains;
7588 }
7589 
7590 static void modeset_put_power_domains(struct drm_i915_private *dev_priv,
7591 				      u64 domains)
7592 {
7593 	enum intel_display_power_domain domain;
7594 
7595 	for_each_power_domain(domain, domains)
7596 		intel_display_power_put_unchecked(dev_priv, domain);
7597 }
7598 
7599 static void valleyview_crtc_enable(struct intel_atomic_state *state,
7600 				   struct intel_crtc *crtc)
7601 {
7602 	const struct intel_crtc_state *new_crtc_state =
7603 		intel_atomic_get_new_crtc_state(state, crtc);
7604 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7605 	enum pipe pipe = crtc->pipe;
7606 
7607 	if (drm_WARN_ON(&dev_priv->drm, crtc->active))
7608 		return;
7609 
7610 	if (intel_crtc_has_dp_encoder(new_crtc_state))
7611 		intel_dp_set_m_n(new_crtc_state, M1_N1);
7612 
7613 	intel_set_transcoder_timings(new_crtc_state);
7614 	intel_set_pipe_src_size(new_crtc_state);
7615 
7616 	if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) {
7617 		intel_de_write(dev_priv, CHV_BLEND(pipe), CHV_BLEND_LEGACY);
7618 		intel_de_write(dev_priv, CHV_CANVAS(pipe), 0);
7619 	}
7620 
7621 	i9xx_set_pipeconf(new_crtc_state);
7622 
7623 	crtc->active = true;
7624 
7625 	intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
7626 
7627 	intel_encoders_pre_pll_enable(state, crtc);
7628 
7629 	if (IS_CHERRYVIEW(dev_priv)) {
7630 		chv_prepare_pll(crtc, new_crtc_state);
7631 		chv_enable_pll(crtc, new_crtc_state);
7632 	} else {
7633 		vlv_prepare_pll(crtc, new_crtc_state);
7634 		vlv_enable_pll(crtc, new_crtc_state);
7635 	}
7636 
7637 	intel_encoders_pre_enable(state, crtc);
7638 
7639 	i9xx_pfit_enable(new_crtc_state);
7640 
7641 	intel_color_load_luts(new_crtc_state);
7642 	intel_color_commit(new_crtc_state);
7643 	/* update DSPCNTR to configure gamma for pipe bottom color */
7644 	intel_disable_primary_plane(new_crtc_state);
7645 
7646 	dev_priv->display.initial_watermarks(state, crtc);
7647 	intel_enable_pipe(new_crtc_state);
7648 
7649 	intel_crtc_vblank_on(new_crtc_state);
7650 
7651 	intel_encoders_enable(state, crtc);
7652 }
7653 
7654 static void i9xx_set_pll_dividers(const struct intel_crtc_state *crtc_state)
7655 {
7656 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
7657 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7658 
7659 	intel_de_write(dev_priv, FP0(crtc->pipe),
7660 		       crtc_state->dpll_hw_state.fp0);
7661 	intel_de_write(dev_priv, FP1(crtc->pipe),
7662 		       crtc_state->dpll_hw_state.fp1);
7663 }
7664 
7665 static void i9xx_crtc_enable(struct intel_atomic_state *state,
7666 			     struct intel_crtc *crtc)
7667 {
7668 	const struct intel_crtc_state *new_crtc_state =
7669 		intel_atomic_get_new_crtc_state(state, crtc);
7670 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7671 	enum pipe pipe = crtc->pipe;
7672 
7673 	if (drm_WARN_ON(&dev_priv->drm, crtc->active))
7674 		return;
7675 
7676 	i9xx_set_pll_dividers(new_crtc_state);
7677 
7678 	if (intel_crtc_has_dp_encoder(new_crtc_state))
7679 		intel_dp_set_m_n(new_crtc_state, M1_N1);
7680 
7681 	intel_set_transcoder_timings(new_crtc_state);
7682 	intel_set_pipe_src_size(new_crtc_state);
7683 
7684 	i9xx_set_pipeconf(new_crtc_state);
7685 
7686 	crtc->active = true;
7687 
7688 	if (!IS_GEN(dev_priv, 2))
7689 		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, true);
7690 
7691 	intel_encoders_pre_enable(state, crtc);
7692 
7693 	i9xx_enable_pll(crtc, new_crtc_state);
7694 
7695 	i9xx_pfit_enable(new_crtc_state);
7696 
7697 	intel_color_load_luts(new_crtc_state);
7698 	intel_color_commit(new_crtc_state);
7699 	/* update DSPCNTR to configure gamma for pipe bottom color */
7700 	intel_disable_primary_plane(new_crtc_state);
7701 
7702 	if (dev_priv->display.initial_watermarks)
7703 		dev_priv->display.initial_watermarks(state, crtc);
7704 	else
7705 		intel_update_watermarks(crtc);
7706 	intel_enable_pipe(new_crtc_state);
7707 
7708 	intel_crtc_vblank_on(new_crtc_state);
7709 
7710 	intel_encoders_enable(state, crtc);
7711 
7712 	/* prevents spurious underruns */
7713 	if (IS_GEN(dev_priv, 2))
7714 		intel_wait_for_vblank(dev_priv, pipe);
7715 }
7716 
7717 static void i9xx_pfit_disable(const struct intel_crtc_state *old_crtc_state)
7718 {
7719 	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);
7720 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7721 
7722 	if (!old_crtc_state->gmch_pfit.control)
7723 		return;
7724 
7725 	assert_pipe_disabled(dev_priv, old_crtc_state->cpu_transcoder);
7726 
7727 	drm_dbg_kms(&dev_priv->drm, "disabling pfit, current: 0x%08x\n",
7728 		    intel_de_read(dev_priv, PFIT_CONTROL));
7729 	intel_de_write(dev_priv, PFIT_CONTROL, 0);
7730 }
7731 
7732 static void i9xx_crtc_disable(struct intel_atomic_state *state,
7733 			      struct intel_crtc *crtc)
7734 {
7735 	struct intel_crtc_state *old_crtc_state =
7736 		intel_atomic_get_old_crtc_state(state, crtc);
7737 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7738 	enum pipe pipe = crtc->pipe;
7739 
7740 	/*
7741 	 * On gen2 planes are double buffered but the pipe isn't, so we must
7742 	 * wait for planes to fully turn off before disabling the pipe.
7743 	 */
7744 	if (IS_GEN(dev_priv, 2))
7745 		intel_wait_for_vblank(dev_priv, pipe);
7746 
7747 	intel_encoders_disable(state, crtc);
7748 
7749 	intel_crtc_vblank_off(old_crtc_state);
7750 
7751 	intel_disable_pipe(old_crtc_state);
7752 
7753 	i9xx_pfit_disable(old_crtc_state);
7754 
7755 	intel_encoders_post_disable(state, crtc);
7756 
7757 	if (!intel_crtc_has_type(old_crtc_state, INTEL_OUTPUT_DSI)) {
7758 		if (IS_CHERRYVIEW(dev_priv))
7759 			chv_disable_pll(dev_priv, pipe);
7760 		else if (IS_VALLEYVIEW(dev_priv))
7761 			vlv_disable_pll(dev_priv, pipe);
7762 		else
7763 			i9xx_disable_pll(old_crtc_state);
7764 	}
7765 
7766 	intel_encoders_post_pll_disable(state, crtc);
7767 
7768 	if (!IS_GEN(dev_priv, 2))
7769 		intel_set_cpu_fifo_underrun_reporting(dev_priv, pipe, false);
7770 
7771 	if (!dev_priv->display.initial_watermarks)
7772 		intel_update_watermarks(crtc);
7773 
7774 	/* clock the pipe down to 640x480@60 to potentially save power */
7775 	if (IS_I830(dev_priv))
7776 		i830_enable_pipe(dev_priv, pipe);
7777 }
7778 
7779 static void intel_crtc_disable_noatomic(struct intel_crtc *crtc,
7780 					struct drm_modeset_acquire_ctx *ctx)
7781 {
7782 	struct intel_encoder *encoder;
7783 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
7784 	struct intel_bw_state *bw_state =
7785 		to_intel_bw_state(dev_priv->bw_obj.state);
7786 	struct intel_cdclk_state *cdclk_state =
7787 		to_intel_cdclk_state(dev_priv->cdclk.obj.state);
7788 	struct intel_dbuf_state *dbuf_state =
7789 		to_intel_dbuf_state(dev_priv->dbuf.obj.state);
7790 	struct intel_crtc_state *crtc_state =
7791 		to_intel_crtc_state(crtc->base.state);
7792 	enum intel_display_power_domain domain;
7793 	struct intel_plane *plane;
7794 	struct drm_atomic_state *state;
7795 	struct intel_crtc_state *temp_crtc_state;
7796 	enum pipe pipe = crtc->pipe;
7797 	u64 domains;
7798 	int ret;
7799 
7800 	if (!crtc_state->hw.active)
7801 		return;
7802 
7803 	for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, plane) {
7804 		const struct intel_plane_state *plane_state =
7805 			to_intel_plane_state(plane->base.state);
7806 
7807 		if (plane_state->uapi.visible)
7808 			intel_plane_disable_noatomic(crtc, plane);
7809 	}
7810 
7811 	state = drm_atomic_state_alloc(&dev_priv->drm);
7812 	if (!state) {
7813 		drm_dbg_kms(&dev_priv->drm,
7814 			    "failed to disable [CRTC:%d:%s], out of memory",
7815 			    crtc->base.base.id, crtc->base.name);
7816 		return;
7817 	}
7818 
7819 	state->acquire_ctx = ctx;
7820 
7821 	/* Everything's already locked, -EDEADLK can't happen. */
7822 	temp_crtc_state = intel_atomic_get_crtc_state(state, crtc);
7823 	ret = drm_atomic_add_affected_connectors(state, &crtc->base);
7824 
7825 	drm_WARN_ON(&dev_priv->drm, IS_ERR(temp_crtc_state) || ret);
7826 
7827 	dev_priv->display.crtc_disable(to_intel_atomic_state(state), crtc);
7828 
7829 	drm_atomic_state_put(state);
7830 
7831 	drm_dbg_kms(&dev_priv->drm,
7832 		    "[CRTC:%d:%s] hw state adjusted, was enabled, now disabled\n",
7833 		    crtc->base.base.id, crtc->base.name);
7834 
7835 	crtc->active = false;
7836 	crtc->base.enabled = false;
7837 
7838 	drm_WARN_ON(&dev_priv->drm,
7839 		    drm_atomic_set_mode_for_crtc(&crtc_state->uapi, NULL) < 0);
7840 	crtc_state->uapi.active = false;
7841 	crtc_state->uapi.connector_mask = 0;
7842 	crtc_state->uapi.encoder_mask = 0;
7843 	intel_crtc_free_hw_state(crtc_state);
7844 	memset(&crtc_state->hw, 0, sizeof(crtc_state->hw));
7845 
7846 	for_each_encoder_on_crtc(&dev_priv->drm, &crtc->base, encoder)
7847 		encoder->base.crtc = NULL;
7848 
7849 	intel_fbc_disable(crtc);
7850 	intel_update_watermarks(crtc);
7851 	intel_disable_shared_dpll(crtc_state);
7852 
7853 	domains = crtc->enabled_power_domains;
7854 	for_each_power_domain(domain, domains)
7855 		intel_display_power_put_unchecked(dev_priv, domain);
7856 	crtc->enabled_power_domains = 0;
7857 
7858 	dev_priv->active_pipes &= ~BIT(pipe);
7859 	cdclk_state->min_cdclk[pipe] = 0;
7860 	cdclk_state->min_voltage_level[pipe] = 0;
7861 	cdclk_state->active_pipes &= ~BIT(pipe);
7862 
7863 	dbuf_state->active_pipes &= ~BIT(pipe);
7864 
7865 	bw_state->data_rate[pipe] = 0;
7866 	bw_state->num_active_planes[pipe] = 0;
7867 }
7868 
7869 /*
7870  * turn all crtc's off, but do not adjust state
7871  * This has to be paired with a call to intel_modeset_setup_hw_state.
7872  */
7873 int intel_display_suspend(struct drm_device *dev)
7874 {
7875 	struct drm_i915_private *dev_priv = to_i915(dev);
7876 	struct drm_atomic_state *state;
7877 	int ret;
7878 
7879 	state = drm_atomic_helper_suspend(dev);
7880 	ret = PTR_ERR_OR_ZERO(state);
7881 	if (ret)
7882 		drm_err(&dev_priv->drm, "Suspending crtc's failed with %i\n",
7883 			ret);
7884 	else
7885 		dev_priv->modeset_restore_state = state;
7886 	return ret;
7887 }
7888 
7889 void intel_encoder_destroy(struct drm_encoder *encoder)
7890 {
7891 	struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
7892 
7893 	drm_encoder_cleanup(encoder);
7894 	kfree(intel_encoder);
7895 }
7896 
7897 /* Cross check the actual hw state with our own modeset state tracking (and it's
7898  * internal consistency). */
7899 static void intel_connector_verify_state(struct intel_crtc_state *crtc_state,
7900 					 struct drm_connector_state *conn_state)
7901 {
7902 	struct intel_connector *connector = to_intel_connector(conn_state->connector);
7903 	struct drm_i915_private *i915 = to_i915(connector->base.dev);
7904 
7905 	drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s]\n",
7906 		    connector->base.base.id, connector->base.name);
7907 
7908 	if (connector->get_hw_state(connector)) {
7909 		struct intel_encoder *encoder = intel_attached_encoder(connector);
7910 
7911 		I915_STATE_WARN(!crtc_state,
7912 			 "connector enabled without attached crtc\n");
7913 
7914 		if (!crtc_state)
7915 			return;
7916 
7917 		I915_STATE_WARN(!crtc_state->hw.active,
7918 				"connector is active, but attached crtc isn't\n");
7919 
7920 		if (!encoder || encoder->type == INTEL_OUTPUT_DP_MST)
7921 			return;
7922 
7923 		I915_STATE_WARN(conn_state->best_encoder != &encoder->base,
7924 			"atomic encoder doesn't match attached encoder\n");
7925 
7926 		I915_STATE_WARN(conn_state->crtc != encoder->base.crtc,
7927 			"attached encoder crtc differs from connector crtc\n");
7928 	} else {
7929 		I915_STATE_WARN(crtc_state && crtc_state->hw.active,
7930 				"attached crtc is active, but connector isn't\n");
7931 		I915_STATE_WARN(!crtc_state && conn_state->best_encoder,
7932 			"best encoder set without crtc!\n");
7933 	}
7934 }
7935 
7936 static int pipe_required_fdi_lanes(struct intel_crtc_state *crtc_state)
7937 {
7938 	if (crtc_state->hw.enable && crtc_state->has_pch_encoder)
7939 		return crtc_state->fdi_lanes;
7940 
7941 	return 0;
7942 }
7943 
7944 static int ilk_check_fdi_lanes(struct drm_device *dev, enum pipe pipe,
7945 			       struct intel_crtc_state *pipe_config)
7946 {
7947 	struct drm_i915_private *dev_priv = to_i915(dev);
7948 	struct drm_atomic_state *state = pipe_config->uapi.state;
7949 	struct intel_crtc *other_crtc;
7950 	struct intel_crtc_state *other_crtc_state;
7951 
7952 	drm_dbg_kms(&dev_priv->drm,
7953 		    "checking fdi config on pipe %c, lanes %i\n",
7954 		    pipe_name(pipe), pipe_config->fdi_lanes);
7955 	if (pipe_config->fdi_lanes > 4) {
7956 		drm_dbg_kms(&dev_priv->drm,
7957 			    "invalid fdi lane config on pipe %c: %i lanes\n",
7958 			    pipe_name(pipe), pipe_config->fdi_lanes);
7959 		return -EINVAL;
7960 	}
7961 
7962 	if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
7963 		if (pipe_config->fdi_lanes > 2) {
7964 			drm_dbg_kms(&dev_priv->drm,
7965 				    "only 2 lanes on haswell, required: %i lanes\n",
7966 				    pipe_config->fdi_lanes);
7967 			return -EINVAL;
7968 		} else {
7969 			return 0;
7970 		}
7971 	}
7972 
7973 	if (INTEL_NUM_PIPES(dev_priv) == 2)
7974 		return 0;
7975 
7976 	/* Ivybridge 3 pipe is really complicated */
7977 	switch (pipe) {
7978 	case PIPE_A:
7979 		return 0;
7980 	case PIPE_B:
7981 		if (pipe_config->fdi_lanes <= 2)
7982 			return 0;
7983 
7984 		other_crtc = intel_get_crtc_for_pipe(dev_priv, PIPE_C);
7985 		other_crtc_state =
7986 			intel_atomic_get_crtc_state(state, other_crtc);
7987 		if (IS_ERR(other_crtc_state))
7988 			return PTR_ERR(other_crtc_state);
7989 
7990 		if (pipe_required_fdi_lanes(other_crtc_state) > 0) {
7991 			drm_dbg_kms(&dev_priv->drm,
7992 				    "invalid shared fdi lane config on pipe %c: %i lanes\n",
7993 				    pipe_name(pipe), pipe_config->fdi_lanes);
7994 			return -EINVAL;
7995 		}
7996 		return 0;
7997 	case PIPE_C:
7998 		if (pipe_config->fdi_lanes > 2) {
7999 			drm_dbg_kms(&dev_priv->drm,
8000 				    "only 2 lanes on pipe %c: required %i lanes\n",
8001 				    pipe_name(pipe), pipe_config->fdi_lanes);
8002 			return -EINVAL;
8003 		}
8004 
8005 		other_crtc = intel_get_crtc_for_pipe(dev_priv, PIPE_B);
8006 		other_crtc_state =
8007 			intel_atomic_get_crtc_state(state, other_crtc);
8008 		if (IS_ERR(other_crtc_state))
8009 			return PTR_ERR(other_crtc_state);
8010 
8011 		if (pipe_required_fdi_lanes(other_crtc_state) > 2) {
8012 			drm_dbg_kms(&dev_priv->drm,
8013 				    "fdi link B uses too many lanes to enable link C\n");
8014 			return -EINVAL;
8015 		}
8016 		return 0;
8017 	default:
8018 		BUG();
8019 	}
8020 }
8021 
8022 #define RETRY 1
8023 static int ilk_fdi_compute_config(struct intel_crtc *intel_crtc,
8024 				  struct intel_crtc_state *pipe_config)
8025 {
8026 	struct drm_device *dev = intel_crtc->base.dev;
8027 	struct drm_i915_private *i915 = to_i915(dev);
8028 	const struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode;
8029 	int lane, link_bw, fdi_dotclock, ret;
8030 	bool needs_recompute = false;
8031 
8032 retry:
8033 	/* FDI is a binary signal running at ~2.7GHz, encoding
8034 	 * each output octet as 10 bits. The actual frequency
8035 	 * is stored as a divider into a 100MHz clock, and the
8036 	 * mode pixel clock is stored in units of 1KHz.
8037 	 * Hence the bw of each lane in terms of the mode signal
8038 	 * is:
8039 	 */
8040 	link_bw = intel_fdi_link_freq(i915, pipe_config);
8041 
8042 	fdi_dotclock = adjusted_mode->crtc_clock;
8043 
8044 	lane = ilk_get_lanes_required(fdi_dotclock, link_bw,
8045 				      pipe_config->pipe_bpp);
8046 
8047 	pipe_config->fdi_lanes = lane;
8048 
8049 	intel_link_compute_m_n(pipe_config->pipe_bpp, lane, fdi_dotclock,
8050 			       link_bw, &pipe_config->fdi_m_n, false, false);
8051 
8052 	ret = ilk_check_fdi_lanes(dev, intel_crtc->pipe, pipe_config);
8053 	if (ret == -EDEADLK)
8054 		return ret;
8055 
8056 	if (ret == -EINVAL && pipe_config->pipe_bpp > 6*3) {
8057 		pipe_config->pipe_bpp -= 2*3;
8058 		drm_dbg_kms(&i915->drm,
8059 			    "fdi link bw constraint, reducing pipe bpp to %i\n",
8060 			    pipe_config->pipe_bpp);
8061 		needs_recompute = true;
8062 		pipe_config->bw_constrained = true;
8063 
8064 		goto retry;
8065 	}
8066 
8067 	if (needs_recompute)
8068 		return RETRY;
8069 
8070 	return ret;
8071 }
8072 
8073 bool hsw_crtc_state_ips_capable(const struct intel_crtc_state *crtc_state)
8074 {
8075 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
8076 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
8077 
8078 	/* IPS only exists on ULT machines and is tied to pipe A. */
8079 	if (!hsw_crtc_supports_ips(crtc))
8080 		return false;
8081 
8082 	if (!dev_priv->params.enable_ips)
8083 		return false;
8084 
8085 	if (crtc_state->pipe_bpp > 24)
8086 		return false;
8087 
8088 	/*
8089 	 * We compare against max which means we must take
8090 	 * the increased cdclk requirement into account when
8091 	 * calculating the new cdclk.
8092 	 *
8093 	 * Should measure whether using a lower cdclk w/o IPS
8094 	 */
8095 	if (IS_BROADWELL(dev_priv) &&
8096 	    crtc_state->pixel_rate > dev_priv->max_cdclk_freq * 95 / 100)
8097 		return false;
8098 
8099 	return true;
8100 }
8101 
8102 static int hsw_compute_ips_config(struct intel_crtc_state *crtc_state)
8103 {
8104 	struct drm_i915_private *dev_priv =
8105 		to_i915(crtc_state->uapi.crtc->dev);
8106 	struct intel_atomic_state *state =
8107 		to_intel_atomic_state(crtc_state->uapi.state);
8108 
8109 	crtc_state->ips_enabled = false;
8110 
8111 	if (!hsw_crtc_state_ips_capable(crtc_state))
8112 		return 0;
8113 
8114 	/*
8115 	 * When IPS gets enabled, the pipe CRC changes. Since IPS gets
8116 	 * enabled and disabled dynamically based on package C states,
8117 	 * user space can't make reliable use of the CRCs, so let's just
8118 	 * completely disable it.
8119 	 */
8120 	if (crtc_state->crc_enabled)
8121 		return 0;
8122 
8123 	/* IPS should be fine as long as at least one plane is enabled. */
8124 	if (!(crtc_state->active_planes & ~BIT(PLANE_CURSOR)))
8125 		return 0;
8126 
8127 	if (IS_BROADWELL(dev_priv)) {
8128 		const struct intel_cdclk_state *cdclk_state;
8129 
8130 		cdclk_state = intel_atomic_get_cdclk_state(state);
8131 		if (IS_ERR(cdclk_state))
8132 			return PTR_ERR(cdclk_state);
8133 
8134 		/* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
8135 		if (crtc_state->pixel_rate > cdclk_state->logical.cdclk * 95 / 100)
8136 			return 0;
8137 	}
8138 
8139 	crtc_state->ips_enabled = true;
8140 
8141 	return 0;
8142 }
8143 
8144 static bool intel_crtc_supports_double_wide(const struct intel_crtc *crtc)
8145 {
8146 	const struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
8147 
8148 	/* GDG double wide on either pipe, otherwise pipe A only */
8149 	return INTEL_GEN(dev_priv) < 4 &&
8150 		(crtc->pipe == PIPE_A || IS_I915G(dev_priv));
8151 }
8152 
8153 static u32 ilk_pipe_pixel_rate(const struct intel_crtc_state *crtc_state)
8154 {
8155 	u32 pixel_rate = crtc_state->hw.pipe_mode.crtc_clock;
8156 	unsigned int pipe_w, pipe_h, pfit_w, pfit_h;
8157 
8158 	/*
8159 	 * We only use IF-ID interlacing. If we ever use
8160 	 * PF-ID we'll need to adjust the pixel_rate here.
8161 	 */
8162 
8163 	if (!crtc_state->pch_pfit.enabled)
8164 		return pixel_rate;
8165 
8166 	pipe_w = crtc_state->pipe_src_w;
8167 	pipe_h = crtc_state->pipe_src_h;
8168 
8169 	pfit_w = drm_rect_width(&crtc_state->pch_pfit.dst);
8170 	pfit_h = drm_rect_height(&crtc_state->pch_pfit.dst);
8171 
8172 	if (pipe_w < pfit_w)
8173 		pipe_w = pfit_w;
8174 	if (pipe_h < pfit_h)
8175 		pipe_h = pfit_h;
8176 
8177 	if (drm_WARN_ON(crtc_state->uapi.crtc->dev,
8178 			!pfit_w || !pfit_h))
8179 		return pixel_rate;
8180 
8181 	return div_u64(mul_u32_u32(pixel_rate, pipe_w * pipe_h),
8182 		       pfit_w * pfit_h);
8183 }
8184 
8185 static void intel_mode_from_crtc_timings(struct drm_display_mode *mode,
8186 					 const struct drm_display_mode *timings)
8187 {
8188 	mode->hdisplay = timings->crtc_hdisplay;
8189 	mode->htotal = timings->crtc_htotal;
8190 	mode->hsync_start = timings->crtc_hsync_start;
8191 	mode->hsync_end = timings->crtc_hsync_end;
8192 
8193 	mode->vdisplay = timings->crtc_vdisplay;
8194 	mode->vtotal = timings->crtc_vtotal;
8195 	mode->vsync_start = timings->crtc_vsync_start;
8196 	mode->vsync_end = timings->crtc_vsync_end;
8197 
8198 	mode->flags = timings->flags;
8199 	mode->type = DRM_MODE_TYPE_DRIVER;
8200 
8201 	mode->clock = timings->crtc_clock;
8202 
8203 	drm_mode_set_name(mode);
8204 }
8205 
8206 static void intel_crtc_compute_pixel_rate(struct intel_crtc_state *crtc_state)
8207 {
8208 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
8209 
8210 	if (HAS_GMCH(dev_priv))
8211 		/* FIXME calculate proper pipe pixel rate for GMCH pfit */
8212 		crtc_state->pixel_rate =
8213 			crtc_state->hw.pipe_mode.crtc_clock;
8214 	else
8215 		crtc_state->pixel_rate =
8216 			ilk_pipe_pixel_rate(crtc_state);
8217 }
8218 
8219 static void intel_crtc_readout_derived_state(struct intel_crtc_state *crtc_state)
8220 {
8221 	struct drm_display_mode *mode = &crtc_state->hw.mode;
8222 	struct drm_display_mode *pipe_mode = &crtc_state->hw.pipe_mode;
8223 	struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
8224 
8225 	drm_mode_copy(pipe_mode, adjusted_mode);
8226 
8227 	if (crtc_state->bigjoiner) {
8228 		/*
8229 		 * transcoder is programmed to the full mode,
8230 		 * but pipe timings are half of the transcoder mode
8231 		 */
8232 		pipe_mode->crtc_hdisplay /= 2;
8233 		pipe_mode->crtc_hblank_start /= 2;
8234 		pipe_mode->crtc_hblank_end /= 2;
8235 		pipe_mode->crtc_hsync_start /= 2;
8236 		pipe_mode->crtc_hsync_end /= 2;
8237 		pipe_mode->crtc_htotal /= 2;
8238 		pipe_mode->crtc_clock /= 2;
8239 	}
8240 
8241 	intel_mode_from_crtc_timings(pipe_mode, pipe_mode);
8242 	intel_mode_from_crtc_timings(adjusted_mode, adjusted_mode);
8243 
8244 	intel_crtc_compute_pixel_rate(crtc_state);
8245 
8246 	drm_mode_copy(mode, adjusted_mode);
8247 	mode->hdisplay = crtc_state->pipe_src_w << crtc_state->bigjoiner;
8248 	mode->vdisplay = crtc_state->pipe_src_h;
8249 }
8250 
8251 static void intel_encoder_get_config(struct intel_encoder *encoder,
8252 				     struct intel_crtc_state *crtc_state)
8253 {
8254 	encoder->get_config(encoder, crtc_state);
8255 
8256 	intel_crtc_readout_derived_state(crtc_state);
8257 }
8258 
8259 static int intel_crtc_compute_config(struct intel_crtc *crtc,
8260 				     struct intel_crtc_state *pipe_config)
8261 {
8262 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
8263 	struct drm_display_mode *pipe_mode = &pipe_config->hw.pipe_mode;
8264 	int clock_limit = dev_priv->max_dotclk_freq;
8265 
8266 	drm_mode_copy(pipe_mode, &pipe_config->hw.adjusted_mode);
8267 
8268 	/* Adjust pipe_mode for bigjoiner, with half the horizontal mode */
8269 	if (pipe_config->bigjoiner) {
8270 		pipe_mode->crtc_clock /= 2;
8271 		pipe_mode->crtc_hdisplay /= 2;
8272 		pipe_mode->crtc_hblank_start /= 2;
8273 		pipe_mode->crtc_hblank_end /= 2;
8274 		pipe_mode->crtc_hsync_start /= 2;
8275 		pipe_mode->crtc_hsync_end /= 2;
8276 		pipe_mode->crtc_htotal /= 2;
8277 		pipe_config->pipe_src_w /= 2;
8278 	}
8279 
8280 	intel_mode_from_crtc_timings(pipe_mode, pipe_mode);
8281 
8282 	if (INTEL_GEN(dev_priv) < 4) {
8283 		clock_limit = dev_priv->max_cdclk_freq * 9 / 10;
8284 
8285 		/*
8286 		 * Enable double wide mode when the dot clock
8287 		 * is > 90% of the (display) core speed.
8288 		 */
8289 		if (intel_crtc_supports_double_wide(crtc) &&
8290 		    pipe_mode->crtc_clock > clock_limit) {
8291 			clock_limit = dev_priv->max_dotclk_freq;
8292 			pipe_config->double_wide = true;
8293 		}
8294 	}
8295 
8296 	if (pipe_mode->crtc_clock > clock_limit) {
8297 		drm_dbg_kms(&dev_priv->drm,
8298 			    "requested pixel clock (%d kHz) too high (max: %d kHz, double wide: %s)\n",
8299 			    pipe_mode->crtc_clock, clock_limit,
8300 			    yesno(pipe_config->double_wide));
8301 		return -EINVAL;
8302 	}
8303 
8304 	if ((pipe_config->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
8305 	     pipe_config->output_format == INTEL_OUTPUT_FORMAT_YCBCR444) &&
8306 	     pipe_config->hw.ctm) {
8307 		/*
8308 		 * There is only one pipe CSC unit per pipe, and we need that
8309 		 * for output conversion from RGB->YCBCR. So if CTM is already
8310 		 * applied we can't support YCBCR420 output.
8311 		 */
8312 		drm_dbg_kms(&dev_priv->drm,
8313 			    "YCBCR420 and CTM together are not possible\n");
8314 		return -EINVAL;
8315 	}
8316 
8317 	/*
8318 	 * Pipe horizontal size must be even in:
8319 	 * - DVO ganged mode
8320 	 * - LVDS dual channel mode
8321 	 * - Double wide pipe
8322 	 */
8323 	if (pipe_config->pipe_src_w & 1) {
8324 		if (pipe_config->double_wide) {
8325 			drm_dbg_kms(&dev_priv->drm,
8326 				    "Odd pipe source width not supported with double wide pipe\n");
8327 			return -EINVAL;
8328 		}
8329 
8330 		if (intel_crtc_has_type(pipe_config, INTEL_OUTPUT_LVDS) &&
8331 		    intel_is_dual_link_lvds(dev_priv)) {
8332 			drm_dbg_kms(&dev_priv->drm,
8333 				    "Odd pipe source width not supported with dual link LVDS\n");
8334 			return -EINVAL;
8335 		}
8336 	}
8337 
8338 	/* Cantiga+ cannot handle modes with a hsync front porch of 0.
8339 	 * WaPruneModeWithIncorrectHsyncOffset:ctg,elk,ilk,snb,ivb,vlv,hsw.
8340 	 */
8341 	if ((INTEL_GEN(dev_priv) > 4 || IS_G4X(dev_priv)) &&
8342 	    pipe_mode->crtc_hsync_start == pipe_mode->crtc_hdisplay)
8343 		return -EINVAL;
8344 
8345 	intel_crtc_compute_pixel_rate(pipe_config);
8346 
8347 	if (pipe_config->has_pch_encoder)
8348 		return ilk_fdi_compute_config(crtc, pipe_config);
8349 
8350 	return 0;
8351 }
8352 
8353 static void
8354 intel_reduce_m_n_ratio(u32 *num, u32 *den)
8355 {
8356 	while (*num > DATA_LINK_M_N_MASK ||
8357 	       *den > DATA_LINK_M_N_MASK) {
8358 		*num >>= 1;
8359 		*den >>= 1;
8360 	}
8361 }
8362 
8363 static void compute_m_n(unsigned int m, unsigned int n,
8364 			u32 *ret_m, u32 *ret_n,
8365 			bool constant_n)
8366 {
8367 	/*
8368 	 * Several DP dongles in particular seem to be fussy about
8369 	 * too large link M/N values. Give N value as 0x8000 that
8370 	 * should be acceptable by specific devices. 0x8000 is the
8371 	 * specified fixed N value for asynchronous clock mode,
8372 	 * which the devices expect also in synchronous clock mode.
8373 	 */
8374 	if (constant_n)
8375 		*ret_n = DP_LINK_CONSTANT_N_VALUE;
8376 	else
8377 		*ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
8378 
8379 	*ret_m = div_u64(mul_u32_u32(m, *ret_n), n);
8380 	intel_reduce_m_n_ratio(ret_m, ret_n);
8381 }
8382 
8383 void
8384 intel_link_compute_m_n(u16 bits_per_pixel, int nlanes,
8385 		       int pixel_clock, int link_clock,
8386 		       struct intel_link_m_n *m_n,
8387 		       bool constant_n, bool fec_enable)
8388 {
8389 	u32 data_clock = bits_per_pixel * pixel_clock;
8390 
8391 	if (fec_enable)
8392 		data_clock = intel_dp_mode_to_fec_clock(data_clock);
8393 
8394 	m_n->tu = 64;
8395 	compute_m_n(data_clock,
8396 		    link_clock * nlanes * 8,
8397 		    &m_n->gmch_m, &m_n->gmch_n,
8398 		    constant_n);
8399 
8400 	compute_m_n(pixel_clock, link_clock,
8401 		    &m_n->link_m, &m_n->link_n,
8402 		    constant_n);
8403 }
8404 
8405 static void intel_panel_sanitize_ssc(struct drm_i915_private *dev_priv)
8406 {
8407 	/*
8408 	 * There may be no VBT; and if the BIOS enabled SSC we can
8409 	 * just keep using it to avoid unnecessary flicker.  Whereas if the
8410 	 * BIOS isn't using it, don't assume it will work even if the VBT
8411 	 * indicates as much.
8412 	 */
8413 	if (HAS_PCH_IBX(dev_priv) || HAS_PCH_CPT(dev_priv)) {
8414 		bool bios_lvds_use_ssc = intel_de_read(dev_priv,
8415 						       PCH_DREF_CONTROL) &
8416 			DREF_SSC1_ENABLE;
8417 
8418 		if (dev_priv->vbt.lvds_use_ssc != bios_lvds_use_ssc) {
8419 			drm_dbg_kms(&dev_priv->drm,
8420 				    "SSC %s by BIOS, overriding VBT which says %s\n",
8421 				    enableddisabled(bios_lvds_use_ssc),
8422 				    enableddisabled(dev_priv->vbt.lvds_use_ssc));
8423 			dev_priv->vbt.lvds_use_ssc = bios_lvds_use_ssc;
8424 		}
8425 	}
8426 }
8427 
8428 static bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
8429 {
8430 	if (dev_priv->params.panel_use_ssc >= 0)
8431 		return dev_priv->params.panel_use_ssc != 0;
8432 	return dev_priv->vbt.lvds_use_ssc
8433 		&& !(dev_priv->quirks & QUIRK_LVDS_SSC_DISABLE);
8434 }
8435 
8436 static u32 pnv_dpll_compute_fp(struct dpll *dpll)
8437 {
8438 	return (1 << dpll->n) << 16 | dpll->m2;
8439 }
8440 
8441 static u32 i9xx_dpll_compute_fp(struct dpll *dpll)
8442 {
8443 	return dpll->n << 16 | dpll->m1 << 8 | dpll->m2;
8444 }
8445 
8446 static void i9xx_update_pll_dividers(struct intel_crtc *crtc,
8447 				     struct intel_crtc_state *crtc_state,
8448 				     struct dpll *reduced_clock)
8449 {
8450 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
8451 	u32 fp, fp2 = 0;
8452 
8453 	if (IS_PINEVIEW(dev_priv)) {
8454 		fp = pnv_dpll_compute_fp(&crtc_state->dpll);
8455 		if (reduced_clock)
8456 			fp2 = pnv_dpll_compute_fp(reduced_clock);
8457 	} else {
8458 		fp = i9xx_dpll_compute_fp(&crtc_state->dpll);
8459 		if (reduced_clock)
8460 			fp2 = i9xx_dpll_compute_fp(reduced_clock);
8461 	}
8462 
8463 	crtc_state->dpll_hw_state.fp0 = fp;
8464 
8465 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS) &&
8466 	    reduced_clock) {
8467 		crtc_state->dpll_hw_state.fp1 = fp2;
8468 	} else {
8469 		crtc_state->dpll_hw_state.fp1 = fp;
8470 	}
8471 }
8472 
8473 static void vlv_pllb_recal_opamp(struct drm_i915_private *dev_priv, enum pipe
8474 		pipe)
8475 {
8476 	u32 reg_val;
8477 
8478 	/*
8479 	 * PLLB opamp always calibrates to max value of 0x3f, force enable it
8480 	 * and set it to a reasonable value instead.
8481 	 */
8482 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW9(1));
8483 	reg_val &= 0xffffff00;
8484 	reg_val |= 0x00000030;
8485 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW9(1), reg_val);
8486 
8487 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_REF_DW13);
8488 	reg_val &= 0x00ffffff;
8489 	reg_val |= 0x8c000000;
8490 	vlv_dpio_write(dev_priv, pipe, VLV_REF_DW13, reg_val);
8491 
8492 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW9(1));
8493 	reg_val &= 0xffffff00;
8494 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW9(1), reg_val);
8495 
8496 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_REF_DW13);
8497 	reg_val &= 0x00ffffff;
8498 	reg_val |= 0xb0000000;
8499 	vlv_dpio_write(dev_priv, pipe, VLV_REF_DW13, reg_val);
8500 }
8501 
8502 static void intel_pch_transcoder_set_m_n(const struct intel_crtc_state *crtc_state,
8503 					 const struct intel_link_m_n *m_n)
8504 {
8505 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
8506 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
8507 	enum pipe pipe = crtc->pipe;
8508 
8509 	intel_de_write(dev_priv, PCH_TRANS_DATA_M1(pipe),
8510 		       TU_SIZE(m_n->tu) | m_n->gmch_m);
8511 	intel_de_write(dev_priv, PCH_TRANS_DATA_N1(pipe), m_n->gmch_n);
8512 	intel_de_write(dev_priv, PCH_TRANS_LINK_M1(pipe), m_n->link_m);
8513 	intel_de_write(dev_priv, PCH_TRANS_LINK_N1(pipe), m_n->link_n);
8514 }
8515 
8516 static bool transcoder_has_m2_n2(struct drm_i915_private *dev_priv,
8517 				 enum transcoder transcoder)
8518 {
8519 	if (IS_HASWELL(dev_priv))
8520 		return transcoder == TRANSCODER_EDP;
8521 
8522 	/*
8523 	 * Strictly speaking some registers are available before
8524 	 * gen7, but we only support DRRS on gen7+
8525 	 */
8526 	return IS_GEN(dev_priv, 7) || IS_CHERRYVIEW(dev_priv);
8527 }
8528 
8529 static void intel_cpu_transcoder_set_m_n(const struct intel_crtc_state *crtc_state,
8530 					 const struct intel_link_m_n *m_n,
8531 					 const struct intel_link_m_n *m2_n2)
8532 {
8533 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
8534 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
8535 	enum pipe pipe = crtc->pipe;
8536 	enum transcoder transcoder = crtc_state->cpu_transcoder;
8537 
8538 	if (INTEL_GEN(dev_priv) >= 5) {
8539 		intel_de_write(dev_priv, PIPE_DATA_M1(transcoder),
8540 			       TU_SIZE(m_n->tu) | m_n->gmch_m);
8541 		intel_de_write(dev_priv, PIPE_DATA_N1(transcoder),
8542 			       m_n->gmch_n);
8543 		intel_de_write(dev_priv, PIPE_LINK_M1(transcoder),
8544 			       m_n->link_m);
8545 		intel_de_write(dev_priv, PIPE_LINK_N1(transcoder),
8546 			       m_n->link_n);
8547 		/*
8548 		 *  M2_N2 registers are set only if DRRS is supported
8549 		 * (to make sure the registers are not unnecessarily accessed).
8550 		 */
8551 		if (m2_n2 && crtc_state->has_drrs &&
8552 		    transcoder_has_m2_n2(dev_priv, transcoder)) {
8553 			intel_de_write(dev_priv, PIPE_DATA_M2(transcoder),
8554 				       TU_SIZE(m2_n2->tu) | m2_n2->gmch_m);
8555 			intel_de_write(dev_priv, PIPE_DATA_N2(transcoder),
8556 				       m2_n2->gmch_n);
8557 			intel_de_write(dev_priv, PIPE_LINK_M2(transcoder),
8558 				       m2_n2->link_m);
8559 			intel_de_write(dev_priv, PIPE_LINK_N2(transcoder),
8560 				       m2_n2->link_n);
8561 		}
8562 	} else {
8563 		intel_de_write(dev_priv, PIPE_DATA_M_G4X(pipe),
8564 			       TU_SIZE(m_n->tu) | m_n->gmch_m);
8565 		intel_de_write(dev_priv, PIPE_DATA_N_G4X(pipe), m_n->gmch_n);
8566 		intel_de_write(dev_priv, PIPE_LINK_M_G4X(pipe), m_n->link_m);
8567 		intel_de_write(dev_priv, PIPE_LINK_N_G4X(pipe), m_n->link_n);
8568 	}
8569 }
8570 
8571 void intel_dp_set_m_n(const struct intel_crtc_state *crtc_state, enum link_m_n_set m_n)
8572 {
8573 	const struct intel_link_m_n *dp_m_n, *dp_m2_n2 = NULL;
8574 	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
8575 
8576 	if (m_n == M1_N1) {
8577 		dp_m_n = &crtc_state->dp_m_n;
8578 		dp_m2_n2 = &crtc_state->dp_m2_n2;
8579 	} else if (m_n == M2_N2) {
8580 
8581 		/*
8582 		 * M2_N2 registers are not supported. Hence m2_n2 divider value
8583 		 * needs to be programmed into M1_N1.
8584 		 */
8585 		dp_m_n = &crtc_state->dp_m2_n2;
8586 	} else {
8587 		drm_err(&i915->drm, "Unsupported divider value\n");
8588 		return;
8589 	}
8590 
8591 	if (crtc_state->has_pch_encoder)
8592 		intel_pch_transcoder_set_m_n(crtc_state, &crtc_state->dp_m_n);
8593 	else
8594 		intel_cpu_transcoder_set_m_n(crtc_state, dp_m_n, dp_m2_n2);
8595 }
8596 
8597 static void vlv_compute_dpll(struct intel_crtc *crtc,
8598 			     struct intel_crtc_state *pipe_config)
8599 {
8600 	pipe_config->dpll_hw_state.dpll = DPLL_INTEGRATED_REF_CLK_VLV |
8601 		DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS;
8602 	if (crtc->pipe != PIPE_A)
8603 		pipe_config->dpll_hw_state.dpll |= DPLL_INTEGRATED_CRI_CLK_VLV;
8604 
8605 	/* DPLL not used with DSI, but still need the rest set up */
8606 	if (!intel_crtc_has_type(pipe_config, INTEL_OUTPUT_DSI))
8607 		pipe_config->dpll_hw_state.dpll |= DPLL_VCO_ENABLE |
8608 			DPLL_EXT_BUFFER_ENABLE_VLV;
8609 
8610 	pipe_config->dpll_hw_state.dpll_md =
8611 		(pipe_config->pixel_multiplier - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT;
8612 }
8613 
8614 static void chv_compute_dpll(struct intel_crtc *crtc,
8615 			     struct intel_crtc_state *pipe_config)
8616 {
8617 	pipe_config->dpll_hw_state.dpll = DPLL_SSC_REF_CLK_CHV |
8618 		DPLL_REF_CLK_ENABLE_VLV | DPLL_VGA_MODE_DIS;
8619 	if (crtc->pipe != PIPE_A)
8620 		pipe_config->dpll_hw_state.dpll |= DPLL_INTEGRATED_CRI_CLK_VLV;
8621 
8622 	/* DPLL not used with DSI, but still need the rest set up */
8623 	if (!intel_crtc_has_type(pipe_config, INTEL_OUTPUT_DSI))
8624 		pipe_config->dpll_hw_state.dpll |= DPLL_VCO_ENABLE;
8625 
8626 	pipe_config->dpll_hw_state.dpll_md =
8627 		(pipe_config->pixel_multiplier - 1) << DPLL_MD_UDI_MULTIPLIER_SHIFT;
8628 }
8629 
8630 static void vlv_prepare_pll(struct intel_crtc *crtc,
8631 			    const struct intel_crtc_state *pipe_config)
8632 {
8633 	struct drm_device *dev = crtc->base.dev;
8634 	struct drm_i915_private *dev_priv = to_i915(dev);
8635 	enum pipe pipe = crtc->pipe;
8636 	u32 mdiv;
8637 	u32 bestn, bestm1, bestm2, bestp1, bestp2;
8638 	u32 coreclk, reg_val;
8639 
8640 	/* Enable Refclk */
8641 	intel_de_write(dev_priv, DPLL(pipe),
8642 		       pipe_config->dpll_hw_state.dpll & ~(DPLL_VCO_ENABLE | DPLL_EXT_BUFFER_ENABLE_VLV));
8643 
8644 	/* No need to actually set up the DPLL with DSI */
8645 	if ((pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) == 0)
8646 		return;
8647 
8648 	vlv_dpio_get(dev_priv);
8649 
8650 	bestn = pipe_config->dpll.n;
8651 	bestm1 = pipe_config->dpll.m1;
8652 	bestm2 = pipe_config->dpll.m2;
8653 	bestp1 = pipe_config->dpll.p1;
8654 	bestp2 = pipe_config->dpll.p2;
8655 
8656 	/* See eDP HDMI DPIO driver vbios notes doc */
8657 
8658 	/* PLL B needs special handling */
8659 	if (pipe == PIPE_B)
8660 		vlv_pllb_recal_opamp(dev_priv, pipe);
8661 
8662 	/* Set up Tx target for periodic Rcomp update */
8663 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW9_BCAST, 0x0100000f);
8664 
8665 	/* Disable target IRef on PLL */
8666 	reg_val = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW8(pipe));
8667 	reg_val &= 0x00ffffff;
8668 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW8(pipe), reg_val);
8669 
8670 	/* Disable fast lock */
8671 	vlv_dpio_write(dev_priv, pipe, VLV_CMN_DW0, 0x610);
8672 
8673 	/* Set idtafcrecal before PLL is enabled */
8674 	mdiv = ((bestm1 << DPIO_M1DIV_SHIFT) | (bestm2 & DPIO_M2DIV_MASK));
8675 	mdiv |= ((bestp1 << DPIO_P1_SHIFT) | (bestp2 << DPIO_P2_SHIFT));
8676 	mdiv |= ((bestn << DPIO_N_SHIFT));
8677 	mdiv |= (1 << DPIO_K_SHIFT);
8678 
8679 	/*
8680 	 * Post divider depends on pixel clock rate, DAC vs digital (and LVDS,
8681 	 * but we don't support that).
8682 	 * Note: don't use the DAC post divider as it seems unstable.
8683 	 */
8684 	mdiv |= (DPIO_POST_DIV_HDMIDP << DPIO_POST_DIV_SHIFT);
8685 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW3(pipe), mdiv);
8686 
8687 	mdiv |= DPIO_ENABLE_CALIBRATION;
8688 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW3(pipe), mdiv);
8689 
8690 	/* Set HBR and RBR LPF coefficients */
8691 	if (pipe_config->port_clock == 162000 ||
8692 	    intel_crtc_has_type(pipe_config, INTEL_OUTPUT_ANALOG) ||
8693 	    intel_crtc_has_type(pipe_config, INTEL_OUTPUT_HDMI))
8694 		vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW10(pipe),
8695 				 0x009f0003);
8696 	else
8697 		vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW10(pipe),
8698 				 0x00d0000f);
8699 
8700 	if (intel_crtc_has_dp_encoder(pipe_config)) {
8701 		/* Use SSC source */
8702 		if (pipe == PIPE_A)
8703 			vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe),
8704 					 0x0df40000);
8705 		else
8706 			vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe),
8707 					 0x0df70000);
8708 	} else { /* HDMI or VGA */
8709 		/* Use bend source */
8710 		if (pipe == PIPE_A)
8711 			vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe),
8712 					 0x0df70000);
8713 		else
8714 			vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW5(pipe),
8715 					 0x0df40000);
8716 	}
8717 
8718 	coreclk = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW7(pipe));
8719 	coreclk = (coreclk & 0x0000ff00) | 0x01c00000;
8720 	if (intel_crtc_has_dp_encoder(pipe_config))
8721 		coreclk |= 0x01000000;
8722 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW7(pipe), coreclk);
8723 
8724 	vlv_dpio_write(dev_priv, pipe, VLV_PLL_DW11(pipe), 0x87871000);
8725 
8726 	vlv_dpio_put(dev_priv);
8727 }
8728 
8729 static void chv_prepare_pll(struct intel_crtc *crtc,
8730 			    const struct intel_crtc_state *pipe_config)
8731 {
8732 	struct drm_device *dev = crtc->base.dev;
8733 	struct drm_i915_private *dev_priv = to_i915(dev);
8734 	enum pipe pipe = crtc->pipe;
8735 	enum dpio_channel port = vlv_pipe_to_channel(pipe);
8736 	u32 loopfilter, tribuf_calcntr;
8737 	u32 bestn, bestm1, bestm2, bestp1, bestp2, bestm2_frac;
8738 	u32 dpio_val;
8739 	int vco;
8740 
8741 	/* Enable Refclk and SSC */
8742 	intel_de_write(dev_priv, DPLL(pipe),
8743 		       pipe_config->dpll_hw_state.dpll & ~DPLL_VCO_ENABLE);
8744 
8745 	/* No need to actually set up the DPLL with DSI */
8746 	if ((pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) == 0)
8747 		return;
8748 
8749 	bestn = pipe_config->dpll.n;
8750 	bestm2_frac = pipe_config->dpll.m2 & 0x3fffff;
8751 	bestm1 = pipe_config->dpll.m1;
8752 	bestm2 = pipe_config->dpll.m2 >> 22;
8753 	bestp1 = pipe_config->dpll.p1;
8754 	bestp2 = pipe_config->dpll.p2;
8755 	vco = pipe_config->dpll.vco;
8756 	dpio_val = 0;
8757 	loopfilter = 0;
8758 
8759 	vlv_dpio_get(dev_priv);
8760 
8761 	/* p1 and p2 divider */
8762 	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW13(port),
8763 			5 << DPIO_CHV_S1_DIV_SHIFT |
8764 			bestp1 << DPIO_CHV_P1_DIV_SHIFT |
8765 			bestp2 << DPIO_CHV_P2_DIV_SHIFT |
8766 			1 << DPIO_CHV_K_DIV_SHIFT);
8767 
8768 	/* Feedback post-divider - m2 */
8769 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW0(port), bestm2);
8770 
8771 	/* Feedback refclk divider - n and m1 */
8772 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW1(port),
8773 			DPIO_CHV_M1_DIV_BY_2 |
8774 			1 << DPIO_CHV_N_DIV_SHIFT);
8775 
8776 	/* M2 fraction division */
8777 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW2(port), bestm2_frac);
8778 
8779 	/* M2 fraction division enable */
8780 	dpio_val = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW3(port));
8781 	dpio_val &= ~(DPIO_CHV_FEEDFWD_GAIN_MASK | DPIO_CHV_FRAC_DIV_EN);
8782 	dpio_val |= (2 << DPIO_CHV_FEEDFWD_GAIN_SHIFT);
8783 	if (bestm2_frac)
8784 		dpio_val |= DPIO_CHV_FRAC_DIV_EN;
8785 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW3(port), dpio_val);
8786 
8787 	/* Program digital lock detect threshold */
8788 	dpio_val = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW9(port));
8789 	dpio_val &= ~(DPIO_CHV_INT_LOCK_THRESHOLD_MASK |
8790 					DPIO_CHV_INT_LOCK_THRESHOLD_SEL_COARSE);
8791 	dpio_val |= (0x5 << DPIO_CHV_INT_LOCK_THRESHOLD_SHIFT);
8792 	if (!bestm2_frac)
8793 		dpio_val |= DPIO_CHV_INT_LOCK_THRESHOLD_SEL_COARSE;
8794 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW9(port), dpio_val);
8795 
8796 	/* Loop filter */
8797 	if (vco == 5400000) {
8798 		loopfilter |= (0x3 << DPIO_CHV_PROP_COEFF_SHIFT);
8799 		loopfilter |= (0x8 << DPIO_CHV_INT_COEFF_SHIFT);
8800 		loopfilter |= (0x1 << DPIO_CHV_GAIN_CTRL_SHIFT);
8801 		tribuf_calcntr = 0x9;
8802 	} else if (vco <= 6200000) {
8803 		loopfilter |= (0x5 << DPIO_CHV_PROP_COEFF_SHIFT);
8804 		loopfilter |= (0xB << DPIO_CHV_INT_COEFF_SHIFT);
8805 		loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT);
8806 		tribuf_calcntr = 0x9;
8807 	} else if (vco <= 6480000) {
8808 		loopfilter |= (0x4 << DPIO_CHV_PROP_COEFF_SHIFT);
8809 		loopfilter |= (0x9 << DPIO_CHV_INT_COEFF_SHIFT);
8810 		loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT);
8811 		tribuf_calcntr = 0x8;
8812 	} else {
8813 		/* Not supported. Apply the same limits as in the max case */
8814 		loopfilter |= (0x4 << DPIO_CHV_PROP_COEFF_SHIFT);
8815 		loopfilter |= (0x9 << DPIO_CHV_INT_COEFF_SHIFT);
8816 		loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT);
8817 		tribuf_calcntr = 0;
8818 	}
8819 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW6(port), loopfilter);
8820 
8821 	dpio_val = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW8(port));
8822 	dpio_val &= ~DPIO_CHV_TDC_TARGET_CNT_MASK;
8823 	dpio_val |= (tribuf_calcntr << DPIO_CHV_TDC_TARGET_CNT_SHIFT);
8824 	vlv_dpio_write(dev_priv, pipe, CHV_PLL_DW8(port), dpio_val);
8825 
8826 	/* AFC Recal */
8827 	vlv_dpio_write(dev_priv, pipe, CHV_CMN_DW14(port),
8828 			vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW14(port)) |
8829 			DPIO_AFC_RECAL);
8830 
8831 	vlv_dpio_put(dev_priv);
8832 }
8833 
8834 /**
8835  * vlv_force_pll_on - forcibly enable just the PLL
8836  * @dev_priv: i915 private structure
8837  * @pipe: pipe PLL to enable
8838  * @dpll: PLL configuration
8839  *
8840  * Enable the PLL for @pipe using the supplied @dpll config. To be used
8841  * in cases where we need the PLL enabled even when @pipe is not going to
8842  * be enabled.
8843  */
8844 int vlv_force_pll_on(struct drm_i915_private *dev_priv, enum pipe pipe,
8845 		     const struct dpll *dpll)
8846 {
8847 	struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
8848 	struct intel_crtc_state *pipe_config;
8849 
8850 	pipe_config = intel_crtc_state_alloc(crtc);
8851 	if (!pipe_config)
8852 		return -ENOMEM;
8853 
8854 	pipe_config->cpu_transcoder = (enum transcoder)pipe;
8855 	pipe_config->pixel_multiplier = 1;
8856 	pipe_config->dpll = *dpll;
8857 
8858 	if (IS_CHERRYVIEW(dev_priv)) {
8859 		chv_compute_dpll(crtc, pipe_config);
8860 		chv_prepare_pll(crtc, pipe_config);
8861 		chv_enable_pll(crtc, pipe_config);
8862 	} else {
8863 		vlv_compute_dpll(crtc, pipe_config);
8864 		vlv_prepare_pll(crtc, pipe_config);
8865 		vlv_enable_pll(crtc, pipe_config);
8866 	}
8867 
8868 	kfree(pipe_config);
8869 
8870 	return 0;
8871 }
8872 
8873 /**
8874  * vlv_force_pll_off - forcibly disable just the PLL
8875  * @dev_priv: i915 private structure
8876  * @pipe: pipe PLL to disable
8877  *
8878  * Disable the PLL for @pipe. To be used in cases where we need
8879  * the PLL enabled even when @pipe is not going to be enabled.
8880  */
8881 void vlv_force_pll_off(struct drm_i915_private *dev_priv, enum pipe pipe)
8882 {
8883 	if (IS_CHERRYVIEW(dev_priv))
8884 		chv_disable_pll(dev_priv, pipe);
8885 	else
8886 		vlv_disable_pll(dev_priv, pipe);
8887 }
8888 
8889 static void i9xx_compute_dpll(struct intel_crtc *crtc,
8890 			      struct intel_crtc_state *crtc_state,
8891 			      struct dpll *reduced_clock)
8892 {
8893 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
8894 	u32 dpll;
8895 	struct dpll *clock = &crtc_state->dpll;
8896 
8897 	i9xx_update_pll_dividers(crtc, crtc_state, reduced_clock);
8898 
8899 	dpll = DPLL_VGA_MODE_DIS;
8900 
8901 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS))
8902 		dpll |= DPLLB_MODE_LVDS;
8903 	else
8904 		dpll |= DPLLB_MODE_DAC_SERIAL;
8905 
8906 	if (IS_I945G(dev_priv) || IS_I945GM(dev_priv) ||
8907 	    IS_G33(dev_priv) || IS_PINEVIEW(dev_priv)) {
8908 		dpll |= (crtc_state->pixel_multiplier - 1)
8909 			<< SDVO_MULTIPLIER_SHIFT_HIRES;
8910 	}
8911 
8912 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO) ||
8913 	    intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
8914 		dpll |= DPLL_SDVO_HIGH_SPEED;
8915 
8916 	if (intel_crtc_has_dp_encoder(crtc_state))
8917 		dpll |= DPLL_SDVO_HIGH_SPEED;
8918 
8919 	/* compute bitmask from p1 value */
8920 	if (IS_PINEVIEW(dev_priv))
8921 		dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW;
8922 	else {
8923 		dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
8924 		if (IS_G4X(dev_priv) && reduced_clock)
8925 			dpll |= (1 << (reduced_clock->p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
8926 	}
8927 	switch (clock->p2) {
8928 	case 5:
8929 		dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_5;
8930 		break;
8931 	case 7:
8932 		dpll |= DPLLB_LVDS_P2_CLOCK_DIV_7;
8933 		break;
8934 	case 10:
8935 		dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_10;
8936 		break;
8937 	case 14:
8938 		dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
8939 		break;
8940 	}
8941 	if (INTEL_GEN(dev_priv) >= 4)
8942 		dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT);
8943 
8944 	if (crtc_state->sdvo_tv_clock)
8945 		dpll |= PLL_REF_INPUT_TVCLKINBC;
8946 	else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS) &&
8947 		 intel_panel_use_ssc(dev_priv))
8948 		dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
8949 	else
8950 		dpll |= PLL_REF_INPUT_DREFCLK;
8951 
8952 	dpll |= DPLL_VCO_ENABLE;
8953 	crtc_state->dpll_hw_state.dpll = dpll;
8954 
8955 	if (INTEL_GEN(dev_priv) >= 4) {
8956 		u32 dpll_md = (crtc_state->pixel_multiplier - 1)
8957 			<< DPLL_MD_UDI_MULTIPLIER_SHIFT;
8958 		crtc_state->dpll_hw_state.dpll_md = dpll_md;
8959 	}
8960 }
8961 
8962 static void i8xx_compute_dpll(struct intel_crtc *crtc,
8963 			      struct intel_crtc_state *crtc_state,
8964 			      struct dpll *reduced_clock)
8965 {
8966 	struct drm_device *dev = crtc->base.dev;
8967 	struct drm_i915_private *dev_priv = to_i915(dev);
8968 	u32 dpll;
8969 	struct dpll *clock = &crtc_state->dpll;
8970 
8971 	i9xx_update_pll_dividers(crtc, crtc_state, reduced_clock);
8972 
8973 	dpll = DPLL_VGA_MODE_DIS;
8974 
8975 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) {
8976 		dpll |= (1 << (clock->p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
8977 	} else {
8978 		if (clock->p1 == 2)
8979 			dpll |= PLL_P1_DIVIDE_BY_TWO;
8980 		else
8981 			dpll |= (clock->p1 - 2) << DPLL_FPA01_P1_POST_DIV_SHIFT;
8982 		if (clock->p2 == 4)
8983 			dpll |= PLL_P2_DIVIDE_BY_4;
8984 	}
8985 
8986 	/*
8987 	 * Bspec:
8988 	 * "[Almador Errata}: For the correct operation of the muxed DVO pins
8989 	 *  (GDEVSELB/I2Cdata, GIRDBY/I2CClk) and (GFRAMEB/DVI_Data,
8990 	 *  GTRDYB/DVI_Clk): Bit 31 (DPLL VCO Enable) and Bit 30 (2X Clock
8991 	 *  Enable) must be set to “1” in both the DPLL A Control Register
8992 	 *  (06014h-06017h) and DPLL B Control Register (06018h-0601Bh)."
8993 	 *
8994 	 * For simplicity We simply keep both bits always enabled in
8995 	 * both DPLLS. The spec says we should disable the DVO 2X clock
8996 	 * when not needed, but this seems to work fine in practice.
8997 	 */
8998 	if (IS_I830(dev_priv) ||
8999 	    intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DVO))
9000 		dpll |= DPLL_DVO_2X_MODE;
9001 
9002 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS) &&
9003 	    intel_panel_use_ssc(dev_priv))
9004 		dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
9005 	else
9006 		dpll |= PLL_REF_INPUT_DREFCLK;
9007 
9008 	dpll |= DPLL_VCO_ENABLE;
9009 	crtc_state->dpll_hw_state.dpll = dpll;
9010 }
9011 
9012 static void intel_set_transcoder_timings(const struct intel_crtc_state *crtc_state)
9013 {
9014 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
9015 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
9016 	enum pipe pipe = crtc->pipe;
9017 	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
9018 	const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;
9019 	u32 crtc_vtotal, crtc_vblank_end;
9020 	int vsyncshift = 0;
9021 
9022 	/* We need to be careful not to changed the adjusted mode, for otherwise
9023 	 * the hw state checker will get angry at the mismatch. */
9024 	crtc_vtotal = adjusted_mode->crtc_vtotal;
9025 	crtc_vblank_end = adjusted_mode->crtc_vblank_end;
9026 
9027 	if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE) {
9028 		/* the chip adds 2 halflines automatically */
9029 		crtc_vtotal -= 1;
9030 		crtc_vblank_end -= 1;
9031 
9032 		if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO))
9033 			vsyncshift = (adjusted_mode->crtc_htotal - 1) / 2;
9034 		else
9035 			vsyncshift = adjusted_mode->crtc_hsync_start -
9036 				adjusted_mode->crtc_htotal / 2;
9037 		if (vsyncshift < 0)
9038 			vsyncshift += adjusted_mode->crtc_htotal;
9039 	}
9040 
9041 	if (INTEL_GEN(dev_priv) > 3)
9042 		intel_de_write(dev_priv, VSYNCSHIFT(cpu_transcoder),
9043 		               vsyncshift);
9044 
9045 	intel_de_write(dev_priv, HTOTAL(cpu_transcoder),
9046 		       (adjusted_mode->crtc_hdisplay - 1) | ((adjusted_mode->crtc_htotal - 1) << 16));
9047 	intel_de_write(dev_priv, HBLANK(cpu_transcoder),
9048 		       (adjusted_mode->crtc_hblank_start - 1) | ((adjusted_mode->crtc_hblank_end - 1) << 16));
9049 	intel_de_write(dev_priv, HSYNC(cpu_transcoder),
9050 		       (adjusted_mode->crtc_hsync_start - 1) | ((adjusted_mode->crtc_hsync_end - 1) << 16));
9051 
9052 	intel_de_write(dev_priv, VTOTAL(cpu_transcoder),
9053 		       (adjusted_mode->crtc_vdisplay - 1) | ((crtc_vtotal - 1) << 16));
9054 	intel_de_write(dev_priv, VBLANK(cpu_transcoder),
9055 		       (adjusted_mode->crtc_vblank_start - 1) | ((crtc_vblank_end - 1) << 16));
9056 	intel_de_write(dev_priv, VSYNC(cpu_transcoder),
9057 		       (adjusted_mode->crtc_vsync_start - 1) | ((adjusted_mode->crtc_vsync_end - 1) << 16));
9058 
9059 	/* Workaround: when the EDP input selection is B, the VTOTAL_B must be
9060 	 * programmed with the VTOTAL_EDP value. Same for VTOTAL_C. This is
9061 	 * documented on the DDI_FUNC_CTL register description, EDP Input Select
9062 	 * bits. */
9063 	if (IS_HASWELL(dev_priv) && cpu_transcoder == TRANSCODER_EDP &&
9064 	    (pipe == PIPE_B || pipe == PIPE_C))
9065 		intel_de_write(dev_priv, VTOTAL(pipe),
9066 		               intel_de_read(dev_priv, VTOTAL(cpu_transcoder)));
9067 
9068 }
9069 
9070 static void intel_set_pipe_src_size(const struct intel_crtc_state *crtc_state)
9071 {
9072 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
9073 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
9074 	enum pipe pipe = crtc->pipe;
9075 
9076 	/* pipesrc controls the size that is scaled from, which should
9077 	 * always be the user's requested size.
9078 	 */
9079 	intel_de_write(dev_priv, PIPESRC(pipe),
9080 		       ((crtc_state->pipe_src_w - 1) << 16) | (crtc_state->pipe_src_h - 1));
9081 }
9082 
9083 static bool intel_pipe_is_interlaced(const struct intel_crtc_state *crtc_state)
9084 {
9085 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
9086 	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
9087 
9088 	if (IS_GEN(dev_priv, 2))
9089 		return false;
9090 
9091 	if (INTEL_GEN(dev_priv) >= 9 ||
9092 	    IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
9093 		return intel_de_read(dev_priv, PIPECONF(cpu_transcoder)) & PIPECONF_INTERLACE_MASK_HSW;
9094 	else
9095 		return intel_de_read(dev_priv, PIPECONF(cpu_transcoder)) & PIPECONF_INTERLACE_MASK;
9096 }
9097 
9098 static void intel_get_transcoder_timings(struct intel_crtc *crtc,
9099 					 struct intel_crtc_state *pipe_config)
9100 {
9101 	struct drm_device *dev = crtc->base.dev;
9102 	struct drm_i915_private *dev_priv = to_i915(dev);
9103 	enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
9104 	u32 tmp;
9105 
9106 	tmp = intel_de_read(dev_priv, HTOTAL(cpu_transcoder));
9107 	pipe_config->hw.adjusted_mode.crtc_hdisplay = (tmp & 0xffff) + 1;
9108 	pipe_config->hw.adjusted_mode.crtc_htotal = ((tmp >> 16) & 0xffff) + 1;
9109 
9110 	if (!transcoder_is_dsi(cpu_transcoder)) {
9111 		tmp = intel_de_read(dev_priv, HBLANK(cpu_transcoder));
9112 		pipe_config->hw.adjusted_mode.crtc_hblank_start =
9113 							(tmp & 0xffff) + 1;
9114 		pipe_config->hw.adjusted_mode.crtc_hblank_end =
9115 						((tmp >> 16) & 0xffff) + 1;
9116 	}
9117 	tmp = intel_de_read(dev_priv, HSYNC(cpu_transcoder));
9118 	pipe_config->hw.adjusted_mode.crtc_hsync_start = (tmp & 0xffff) + 1;
9119 	pipe_config->hw.adjusted_mode.crtc_hsync_end = ((tmp >> 16) & 0xffff) + 1;
9120 
9121 	tmp = intel_de_read(dev_priv, VTOTAL(cpu_transcoder));
9122 	pipe_config->hw.adjusted_mode.crtc_vdisplay = (tmp & 0xffff) + 1;
9123 	pipe_config->hw.adjusted_mode.crtc_vtotal = ((tmp >> 16) & 0xffff) + 1;
9124 
9125 	if (!transcoder_is_dsi(cpu_transcoder)) {
9126 		tmp = intel_de_read(dev_priv, VBLANK(cpu_transcoder));
9127 		pipe_config->hw.adjusted_mode.crtc_vblank_start =
9128 							(tmp & 0xffff) + 1;
9129 		pipe_config->hw.adjusted_mode.crtc_vblank_end =
9130 						((tmp >> 16) & 0xffff) + 1;
9131 	}
9132 	tmp = intel_de_read(dev_priv, VSYNC(cpu_transcoder));
9133 	pipe_config->hw.adjusted_mode.crtc_vsync_start = (tmp & 0xffff) + 1;
9134 	pipe_config->hw.adjusted_mode.crtc_vsync_end = ((tmp >> 16) & 0xffff) + 1;
9135 
9136 	if (intel_pipe_is_interlaced(pipe_config)) {
9137 		pipe_config->hw.adjusted_mode.flags |= DRM_MODE_FLAG_INTERLACE;
9138 		pipe_config->hw.adjusted_mode.crtc_vtotal += 1;
9139 		pipe_config->hw.adjusted_mode.crtc_vblank_end += 1;
9140 	}
9141 }
9142 
9143 static void intel_get_pipe_src_size(struct intel_crtc *crtc,
9144 				    struct intel_crtc_state *pipe_config)
9145 {
9146 	struct drm_device *dev = crtc->base.dev;
9147 	struct drm_i915_private *dev_priv = to_i915(dev);
9148 	u32 tmp;
9149 
9150 	tmp = intel_de_read(dev_priv, PIPESRC(crtc->pipe));
9151 	pipe_config->pipe_src_h = (tmp & 0xffff) + 1;
9152 	pipe_config->pipe_src_w = ((tmp >> 16) & 0xffff) + 1;
9153 }
9154 
9155 static void i9xx_set_pipeconf(const struct intel_crtc_state *crtc_state)
9156 {
9157 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
9158 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
9159 	u32 pipeconf;
9160 
9161 	pipeconf = 0;
9162 
9163 	/* we keep both pipes enabled on 830 */
9164 	if (IS_I830(dev_priv))
9165 		pipeconf |= intel_de_read(dev_priv, PIPECONF(crtc->pipe)) & PIPECONF_ENABLE;
9166 
9167 	if (crtc_state->double_wide)
9168 		pipeconf |= PIPECONF_DOUBLE_WIDE;
9169 
9170 	/* only g4x and later have fancy bpc/dither controls */
9171 	if (IS_G4X(dev_priv) || IS_VALLEYVIEW(dev_priv) ||
9172 	    IS_CHERRYVIEW(dev_priv)) {
9173 		/* Bspec claims that we can't use dithering for 30bpp pipes. */
9174 		if (crtc_state->dither && crtc_state->pipe_bpp != 30)
9175 			pipeconf |= PIPECONF_DITHER_EN |
9176 				    PIPECONF_DITHER_TYPE_SP;
9177 
9178 		switch (crtc_state->pipe_bpp) {
9179 		case 18:
9180 			pipeconf |= PIPECONF_6BPC;
9181 			break;
9182 		case 24:
9183 			pipeconf |= PIPECONF_8BPC;
9184 			break;
9185 		case 30:
9186 			pipeconf |= PIPECONF_10BPC;
9187 			break;
9188 		default:
9189 			/* Case prevented by intel_choose_pipe_bpp_dither. */
9190 			BUG();
9191 		}
9192 	}
9193 
9194 	if (crtc_state->hw.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) {
9195 		if (INTEL_GEN(dev_priv) < 4 ||
9196 		    intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO))
9197 			pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION;
9198 		else
9199 			pipeconf |= PIPECONF_INTERLACE_W_SYNC_SHIFT;
9200 	} else {
9201 		pipeconf |= PIPECONF_PROGRESSIVE;
9202 	}
9203 
9204 	if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
9205 	     crtc_state->limited_color_range)
9206 		pipeconf |= PIPECONF_COLOR_RANGE_SELECT;
9207 
9208 	pipeconf |= PIPECONF_GAMMA_MODE(crtc_state->gamma_mode);
9209 
9210 	pipeconf |= PIPECONF_FRAME_START_DELAY(0);
9211 
9212 	intel_de_write(dev_priv, PIPECONF(crtc->pipe), pipeconf);
9213 	intel_de_posting_read(dev_priv, PIPECONF(crtc->pipe));
9214 }
9215 
9216 static int i8xx_crtc_compute_clock(struct intel_crtc *crtc,
9217 				   struct intel_crtc_state *crtc_state)
9218 {
9219 	struct drm_device *dev = crtc->base.dev;
9220 	struct drm_i915_private *dev_priv = to_i915(dev);
9221 	const struct intel_limit *limit;
9222 	int refclk = 48000;
9223 
9224 	memset(&crtc_state->dpll_hw_state, 0,
9225 	       sizeof(crtc_state->dpll_hw_state));
9226 
9227 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) {
9228 		if (intel_panel_use_ssc(dev_priv)) {
9229 			refclk = dev_priv->vbt.lvds_ssc_freq;
9230 			drm_dbg_kms(&dev_priv->drm,
9231 				    "using SSC reference clock of %d kHz\n",
9232 				    refclk);
9233 		}
9234 
9235 		limit = &intel_limits_i8xx_lvds;
9236 	} else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DVO)) {
9237 		limit = &intel_limits_i8xx_dvo;
9238 	} else {
9239 		limit = &intel_limits_i8xx_dac;
9240 	}
9241 
9242 	if (!crtc_state->clock_set &&
9243 	    !i9xx_find_best_dpll(limit, crtc_state, crtc_state->port_clock,
9244 				 refclk, NULL, &crtc_state->dpll)) {
9245 		drm_err(&dev_priv->drm,
9246 			"Couldn't find PLL settings for mode!\n");
9247 		return -EINVAL;
9248 	}
9249 
9250 	i8xx_compute_dpll(crtc, crtc_state, NULL);
9251 
9252 	return 0;
9253 }
9254 
9255 static int g4x_crtc_compute_clock(struct intel_crtc *crtc,
9256 				  struct intel_crtc_state *crtc_state)
9257 {
9258 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
9259 	const struct intel_limit *limit;
9260 	int refclk = 96000;
9261 
9262 	memset(&crtc_state->dpll_hw_state, 0,
9263 	       sizeof(crtc_state->dpll_hw_state));
9264 
9265 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) {
9266 		if (intel_panel_use_ssc(dev_priv)) {
9267 			refclk = dev_priv->vbt.lvds_ssc_freq;
9268 			drm_dbg_kms(&dev_priv->drm,
9269 				    "using SSC reference clock of %d kHz\n",
9270 				    refclk);
9271 		}
9272 
9273 		if (intel_is_dual_link_lvds(dev_priv))
9274 			limit = &intel_limits_g4x_dual_channel_lvds;
9275 		else
9276 			limit = &intel_limits_g4x_single_channel_lvds;
9277 	} else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI) ||
9278 		   intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG)) {
9279 		limit = &intel_limits_g4x_hdmi;
9280 	} else if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO)) {
9281 		limit = &intel_limits_g4x_sdvo;
9282 	} else {
9283 		/* The option is for other outputs */
9284 		limit = &intel_limits_i9xx_sdvo;
9285 	}
9286 
9287 	if (!crtc_state->clock_set &&
9288 	    !g4x_find_best_dpll(limit, crtc_state, crtc_state->port_clock,
9289 				refclk, NULL, &crtc_state->dpll)) {
9290 		drm_err(&dev_priv->drm,
9291 			"Couldn't find PLL settings for mode!\n");
9292 		return -EINVAL;
9293 	}
9294 
9295 	i9xx_compute_dpll(crtc, crtc_state, NULL);
9296 
9297 	return 0;
9298 }
9299 
9300 static int pnv_crtc_compute_clock(struct intel_crtc *crtc,
9301 				  struct intel_crtc_state *crtc_state)
9302 {
9303 	struct drm_device *dev = crtc->base.dev;
9304 	struct drm_i915_private *dev_priv = to_i915(dev);
9305 	const struct intel_limit *limit;
9306 	int refclk = 96000;
9307 
9308 	memset(&crtc_state->dpll_hw_state, 0,
9309 	       sizeof(crtc_state->dpll_hw_state));
9310 
9311 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) {
9312 		if (intel_panel_use_ssc(dev_priv)) {
9313 			refclk = dev_priv->vbt.lvds_ssc_freq;
9314 			drm_dbg_kms(&dev_priv->drm,
9315 				    "using SSC reference clock of %d kHz\n",
9316 				    refclk);
9317 		}
9318 
9319 		limit = &pnv_limits_lvds;
9320 	} else {
9321 		limit = &pnv_limits_sdvo;
9322 	}
9323 
9324 	if (!crtc_state->clock_set &&
9325 	    !pnv_find_best_dpll(limit, crtc_state, crtc_state->port_clock,
9326 				refclk, NULL, &crtc_state->dpll)) {
9327 		drm_err(&dev_priv->drm,
9328 			"Couldn't find PLL settings for mode!\n");
9329 		return -EINVAL;
9330 	}
9331 
9332 	i9xx_compute_dpll(crtc, crtc_state, NULL);
9333 
9334 	return 0;
9335 }
9336 
9337 static int i9xx_crtc_compute_clock(struct intel_crtc *crtc,
9338 				   struct intel_crtc_state *crtc_state)
9339 {
9340 	struct drm_device *dev = crtc->base.dev;
9341 	struct drm_i915_private *dev_priv = to_i915(dev);
9342 	const struct intel_limit *limit;
9343 	int refclk = 96000;
9344 
9345 	memset(&crtc_state->dpll_hw_state, 0,
9346 	       sizeof(crtc_state->dpll_hw_state));
9347 
9348 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) {
9349 		if (intel_panel_use_ssc(dev_priv)) {
9350 			refclk = dev_priv->vbt.lvds_ssc_freq;
9351 			drm_dbg_kms(&dev_priv->drm,
9352 				    "using SSC reference clock of %d kHz\n",
9353 				    refclk);
9354 		}
9355 
9356 		limit = &intel_limits_i9xx_lvds;
9357 	} else {
9358 		limit = &intel_limits_i9xx_sdvo;
9359 	}
9360 
9361 	if (!crtc_state->clock_set &&
9362 	    !i9xx_find_best_dpll(limit, crtc_state, crtc_state->port_clock,
9363 				 refclk, NULL, &crtc_state->dpll)) {
9364 		drm_err(&dev_priv->drm,
9365 			"Couldn't find PLL settings for mode!\n");
9366 		return -EINVAL;
9367 	}
9368 
9369 	i9xx_compute_dpll(crtc, crtc_state, NULL);
9370 
9371 	return 0;
9372 }
9373 
9374 static int chv_crtc_compute_clock(struct intel_crtc *crtc,
9375 				  struct intel_crtc_state *crtc_state)
9376 {
9377 	int refclk = 100000;
9378 	const struct intel_limit *limit = &intel_limits_chv;
9379 	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
9380 
9381 	memset(&crtc_state->dpll_hw_state, 0,
9382 	       sizeof(crtc_state->dpll_hw_state));
9383 
9384 	if (!crtc_state->clock_set &&
9385 	    !chv_find_best_dpll(limit, crtc_state, crtc_state->port_clock,
9386 				refclk, NULL, &crtc_state->dpll)) {
9387 		drm_err(&i915->drm, "Couldn't find PLL settings for mode!\n");
9388 		return -EINVAL;
9389 	}
9390 
9391 	chv_compute_dpll(crtc, crtc_state);
9392 
9393 	return 0;
9394 }
9395 
9396 static int vlv_crtc_compute_clock(struct intel_crtc *crtc,
9397 				  struct intel_crtc_state *crtc_state)
9398 {
9399 	int refclk = 100000;
9400 	const struct intel_limit *limit = &intel_limits_vlv;
9401 	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
9402 
9403 	memset(&crtc_state->dpll_hw_state, 0,
9404 	       sizeof(crtc_state->dpll_hw_state));
9405 
9406 	if (!crtc_state->clock_set &&
9407 	    !vlv_find_best_dpll(limit, crtc_state, crtc_state->port_clock,
9408 				refclk, NULL, &crtc_state->dpll)) {
9409 		drm_err(&i915->drm,  "Couldn't find PLL settings for mode!\n");
9410 		return -EINVAL;
9411 	}
9412 
9413 	vlv_compute_dpll(crtc, crtc_state);
9414 
9415 	return 0;
9416 }
9417 
9418 static bool i9xx_has_pfit(struct drm_i915_private *dev_priv)
9419 {
9420 	if (IS_I830(dev_priv))
9421 		return false;
9422 
9423 	return INTEL_GEN(dev_priv) >= 4 ||
9424 		IS_PINEVIEW(dev_priv) || IS_MOBILE(dev_priv);
9425 }
9426 
9427 static void i9xx_get_pfit_config(struct intel_crtc_state *crtc_state)
9428 {
9429 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
9430 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
9431 	u32 tmp;
9432 
9433 	if (!i9xx_has_pfit(dev_priv))
9434 		return;
9435 
9436 	tmp = intel_de_read(dev_priv, PFIT_CONTROL);
9437 	if (!(tmp & PFIT_ENABLE))
9438 		return;
9439 
9440 	/* Check whether the pfit is attached to our pipe. */
9441 	if (INTEL_GEN(dev_priv) < 4) {
9442 		if (crtc->pipe != PIPE_B)
9443 			return;
9444 	} else {
9445 		if ((tmp & PFIT_PIPE_MASK) != (crtc->pipe << PFIT_PIPE_SHIFT))
9446 			return;
9447 	}
9448 
9449 	crtc_state->gmch_pfit.control = tmp;
9450 	crtc_state->gmch_pfit.pgm_ratios =
9451 		intel_de_read(dev_priv, PFIT_PGM_RATIOS);
9452 }
9453 
9454 static void vlv_crtc_clock_get(struct intel_crtc *crtc,
9455 			       struct intel_crtc_state *pipe_config)
9456 {
9457 	struct drm_device *dev = crtc->base.dev;
9458 	struct drm_i915_private *dev_priv = to_i915(dev);
9459 	enum pipe pipe = crtc->pipe;
9460 	struct dpll clock;
9461 	u32 mdiv;
9462 	int refclk = 100000;
9463 
9464 	/* In case of DSI, DPLL will not be used */
9465 	if ((pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) == 0)
9466 		return;
9467 
9468 	vlv_dpio_get(dev_priv);
9469 	mdiv = vlv_dpio_read(dev_priv, pipe, VLV_PLL_DW3(pipe));
9470 	vlv_dpio_put(dev_priv);
9471 
9472 	clock.m1 = (mdiv >> DPIO_M1DIV_SHIFT) & 7;
9473 	clock.m2 = mdiv & DPIO_M2DIV_MASK;
9474 	clock.n = (mdiv >> DPIO_N_SHIFT) & 0xf;
9475 	clock.p1 = (mdiv >> DPIO_P1_SHIFT) & 7;
9476 	clock.p2 = (mdiv >> DPIO_P2_SHIFT) & 0x1f;
9477 
9478 	pipe_config->port_clock = vlv_calc_dpll_params(refclk, &clock);
9479 }
9480 
9481 static void
9482 i9xx_get_initial_plane_config(struct intel_crtc *crtc,
9483 			      struct intel_initial_plane_config *plane_config)
9484 {
9485 	struct drm_device *dev = crtc->base.dev;
9486 	struct drm_i915_private *dev_priv = to_i915(dev);
9487 	struct intel_plane *plane = to_intel_plane(crtc->base.primary);
9488 	enum i9xx_plane_id i9xx_plane = plane->i9xx_plane;
9489 	enum pipe pipe;
9490 	u32 val, base, offset;
9491 	int fourcc, pixel_format;
9492 	unsigned int aligned_height;
9493 	struct drm_framebuffer *fb;
9494 	struct intel_framebuffer *intel_fb;
9495 
9496 	if (!plane->get_hw_state(plane, &pipe))
9497 		return;
9498 
9499 	drm_WARN_ON(dev, pipe != crtc->pipe);
9500 
9501 	intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
9502 	if (!intel_fb) {
9503 		drm_dbg_kms(&dev_priv->drm, "failed to alloc fb\n");
9504 		return;
9505 	}
9506 
9507 	fb = &intel_fb->base;
9508 
9509 	fb->dev = dev;
9510 
9511 	val = intel_de_read(dev_priv, DSPCNTR(i9xx_plane));
9512 
9513 	if (INTEL_GEN(dev_priv) >= 4) {
9514 		if (val & DISPPLANE_TILED) {
9515 			plane_config->tiling = I915_TILING_X;
9516 			fb->modifier = I915_FORMAT_MOD_X_TILED;
9517 		}
9518 
9519 		if (val & DISPPLANE_ROTATE_180)
9520 			plane_config->rotation = DRM_MODE_ROTATE_180;
9521 	}
9522 
9523 	if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B &&
9524 	    val & DISPPLANE_MIRROR)
9525 		plane_config->rotation |= DRM_MODE_REFLECT_X;
9526 
9527 	pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
9528 	fourcc = i9xx_format_to_fourcc(pixel_format);
9529 	fb->format = drm_format_info(fourcc);
9530 
9531 	if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
9532 		offset = intel_de_read(dev_priv, DSPOFFSET(i9xx_plane));
9533 		base = intel_de_read(dev_priv, DSPSURF(i9xx_plane)) & 0xfffff000;
9534 	} else if (INTEL_GEN(dev_priv) >= 4) {
9535 		if (plane_config->tiling)
9536 			offset = intel_de_read(dev_priv,
9537 					       DSPTILEOFF(i9xx_plane));
9538 		else
9539 			offset = intel_de_read(dev_priv,
9540 					       DSPLINOFF(i9xx_plane));
9541 		base = intel_de_read(dev_priv, DSPSURF(i9xx_plane)) & 0xfffff000;
9542 	} else {
9543 		base = intel_de_read(dev_priv, DSPADDR(i9xx_plane));
9544 	}
9545 	plane_config->base = base;
9546 
9547 	val = intel_de_read(dev_priv, PIPESRC(pipe));
9548 	fb->width = ((val >> 16) & 0xfff) + 1;
9549 	fb->height = ((val >> 0) & 0xfff) + 1;
9550 
9551 	val = intel_de_read(dev_priv, DSPSTRIDE(i9xx_plane));
9552 	fb->pitches[0] = val & 0xffffffc0;
9553 
9554 	aligned_height = intel_fb_align_height(fb, 0, fb->height);
9555 
9556 	plane_config->size = fb->pitches[0] * aligned_height;
9557 
9558 	drm_dbg_kms(&dev_priv->drm,
9559 		    "%s/%s with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
9560 		    crtc->base.name, plane->base.name, fb->width, fb->height,
9561 		    fb->format->cpp[0] * 8, base, fb->pitches[0],
9562 		    plane_config->size);
9563 
9564 	plane_config->fb = intel_fb;
9565 }
9566 
9567 static void chv_crtc_clock_get(struct intel_crtc *crtc,
9568 			       struct intel_crtc_state *pipe_config)
9569 {
9570 	struct drm_device *dev = crtc->base.dev;
9571 	struct drm_i915_private *dev_priv = to_i915(dev);
9572 	enum pipe pipe = crtc->pipe;
9573 	enum dpio_channel port = vlv_pipe_to_channel(pipe);
9574 	struct dpll clock;
9575 	u32 cmn_dw13, pll_dw0, pll_dw1, pll_dw2, pll_dw3;
9576 	int refclk = 100000;
9577 
9578 	/* In case of DSI, DPLL will not be used */
9579 	if ((pipe_config->dpll_hw_state.dpll & DPLL_VCO_ENABLE) == 0)
9580 		return;
9581 
9582 	vlv_dpio_get(dev_priv);
9583 	cmn_dw13 = vlv_dpio_read(dev_priv, pipe, CHV_CMN_DW13(port));
9584 	pll_dw0 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW0(port));
9585 	pll_dw1 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW1(port));
9586 	pll_dw2 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW2(port));
9587 	pll_dw3 = vlv_dpio_read(dev_priv, pipe, CHV_PLL_DW3(port));
9588 	vlv_dpio_put(dev_priv);
9589 
9590 	clock.m1 = (pll_dw1 & 0x7) == DPIO_CHV_M1_DIV_BY_2 ? 2 : 0;
9591 	clock.m2 = (pll_dw0 & 0xff) << 22;
9592 	if (pll_dw3 & DPIO_CHV_FRAC_DIV_EN)
9593 		clock.m2 |= pll_dw2 & 0x3fffff;
9594 	clock.n = (pll_dw1 >> DPIO_CHV_N_DIV_SHIFT) & 0xf;
9595 	clock.p1 = (cmn_dw13 >> DPIO_CHV_P1_DIV_SHIFT) & 0x7;
9596 	clock.p2 = (cmn_dw13 >> DPIO_CHV_P2_DIV_SHIFT) & 0x1f;
9597 
9598 	pipe_config->port_clock = chv_calc_dpll_params(refclk, &clock);
9599 }
9600 
9601 static enum intel_output_format
9602 bdw_get_pipemisc_output_format(struct intel_crtc *crtc)
9603 {
9604 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
9605 	u32 tmp;
9606 
9607 	tmp = intel_de_read(dev_priv, PIPEMISC(crtc->pipe));
9608 
9609 	if (tmp & PIPEMISC_YUV420_ENABLE) {
9610 		/* We support 4:2:0 in full blend mode only */
9611 		drm_WARN_ON(&dev_priv->drm,
9612 			    (tmp & PIPEMISC_YUV420_MODE_FULL_BLEND) == 0);
9613 
9614 		return INTEL_OUTPUT_FORMAT_YCBCR420;
9615 	} else if (tmp & PIPEMISC_OUTPUT_COLORSPACE_YUV) {
9616 		return INTEL_OUTPUT_FORMAT_YCBCR444;
9617 	} else {
9618 		return INTEL_OUTPUT_FORMAT_RGB;
9619 	}
9620 }
9621 
9622 static void i9xx_get_pipe_color_config(struct intel_crtc_state *crtc_state)
9623 {
9624 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
9625 	struct intel_plane *plane = to_intel_plane(crtc->base.primary);
9626 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
9627 	enum i9xx_plane_id i9xx_plane = plane->i9xx_plane;
9628 	u32 tmp;
9629 
9630 	tmp = intel_de_read(dev_priv, DSPCNTR(i9xx_plane));
9631 
9632 	if (tmp & DISPPLANE_GAMMA_ENABLE)
9633 		crtc_state->gamma_enable = true;
9634 
9635 	if (!HAS_GMCH(dev_priv) &&
9636 	    tmp & DISPPLANE_PIPE_CSC_ENABLE)
9637 		crtc_state->csc_enable = true;
9638 }
9639 
9640 static bool i9xx_get_pipe_config(struct intel_crtc *crtc,
9641 				 struct intel_crtc_state *pipe_config)
9642 {
9643 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
9644 	enum intel_display_power_domain power_domain;
9645 	intel_wakeref_t wakeref;
9646 	u32 tmp;
9647 	bool ret;
9648 
9649 	power_domain = POWER_DOMAIN_PIPE(crtc->pipe);
9650 	wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain);
9651 	if (!wakeref)
9652 		return false;
9653 
9654 	pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
9655 	pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe;
9656 	pipe_config->shared_dpll = NULL;
9657 
9658 	ret = false;
9659 
9660 	tmp = intel_de_read(dev_priv, PIPECONF(crtc->pipe));
9661 	if (!(tmp & PIPECONF_ENABLE))
9662 		goto out;
9663 
9664 	if (IS_G4X(dev_priv) || IS_VALLEYVIEW(dev_priv) ||
9665 	    IS_CHERRYVIEW(dev_priv)) {
9666 		switch (tmp & PIPECONF_BPC_MASK) {
9667 		case PIPECONF_6BPC:
9668 			pipe_config->pipe_bpp = 18;
9669 			break;
9670 		case PIPECONF_8BPC:
9671 			pipe_config->pipe_bpp = 24;
9672 			break;
9673 		case PIPECONF_10BPC:
9674 			pipe_config->pipe_bpp = 30;
9675 			break;
9676 		default:
9677 			break;
9678 		}
9679 	}
9680 
9681 	if ((IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
9682 	    (tmp & PIPECONF_COLOR_RANGE_SELECT))
9683 		pipe_config->limited_color_range = true;
9684 
9685 	pipe_config->gamma_mode = (tmp & PIPECONF_GAMMA_MODE_MASK_I9XX) >>
9686 		PIPECONF_GAMMA_MODE_SHIFT;
9687 
9688 	if (IS_CHERRYVIEW(dev_priv))
9689 		pipe_config->cgm_mode = intel_de_read(dev_priv,
9690 						      CGM_PIPE_MODE(crtc->pipe));
9691 
9692 	i9xx_get_pipe_color_config(pipe_config);
9693 	intel_color_get_config(pipe_config);
9694 
9695 	if (INTEL_GEN(dev_priv) < 4)
9696 		pipe_config->double_wide = tmp & PIPECONF_DOUBLE_WIDE;
9697 
9698 	intel_get_transcoder_timings(crtc, pipe_config);
9699 	intel_get_pipe_src_size(crtc, pipe_config);
9700 
9701 	i9xx_get_pfit_config(pipe_config);
9702 
9703 	if (INTEL_GEN(dev_priv) >= 4) {
9704 		/* No way to read it out on pipes B and C */
9705 		if (IS_CHERRYVIEW(dev_priv) && crtc->pipe != PIPE_A)
9706 			tmp = dev_priv->chv_dpll_md[crtc->pipe];
9707 		else
9708 			tmp = intel_de_read(dev_priv, DPLL_MD(crtc->pipe));
9709 		pipe_config->pixel_multiplier =
9710 			((tmp & DPLL_MD_UDI_MULTIPLIER_MASK)
9711 			 >> DPLL_MD_UDI_MULTIPLIER_SHIFT) + 1;
9712 		pipe_config->dpll_hw_state.dpll_md = tmp;
9713 	} else if (IS_I945G(dev_priv) || IS_I945GM(dev_priv) ||
9714 		   IS_G33(dev_priv) || IS_PINEVIEW(dev_priv)) {
9715 		tmp = intel_de_read(dev_priv, DPLL(crtc->pipe));
9716 		pipe_config->pixel_multiplier =
9717 			((tmp & SDVO_MULTIPLIER_MASK)
9718 			 >> SDVO_MULTIPLIER_SHIFT_HIRES) + 1;
9719 	} else {
9720 		/* Note that on i915G/GM the pixel multiplier is in the sdvo
9721 		 * port and will be fixed up in the encoder->get_config
9722 		 * function. */
9723 		pipe_config->pixel_multiplier = 1;
9724 	}
9725 	pipe_config->dpll_hw_state.dpll = intel_de_read(dev_priv,
9726 							DPLL(crtc->pipe));
9727 	if (!IS_VALLEYVIEW(dev_priv) && !IS_CHERRYVIEW(dev_priv)) {
9728 		pipe_config->dpll_hw_state.fp0 = intel_de_read(dev_priv,
9729 							       FP0(crtc->pipe));
9730 		pipe_config->dpll_hw_state.fp1 = intel_de_read(dev_priv,
9731 							       FP1(crtc->pipe));
9732 	} else {
9733 		/* Mask out read-only status bits. */
9734 		pipe_config->dpll_hw_state.dpll &= ~(DPLL_LOCK_VLV |
9735 						     DPLL_PORTC_READY_MASK |
9736 						     DPLL_PORTB_READY_MASK);
9737 	}
9738 
9739 	if (IS_CHERRYVIEW(dev_priv))
9740 		chv_crtc_clock_get(crtc, pipe_config);
9741 	else if (IS_VALLEYVIEW(dev_priv))
9742 		vlv_crtc_clock_get(crtc, pipe_config);
9743 	else
9744 		i9xx_crtc_clock_get(crtc, pipe_config);
9745 
9746 	/*
9747 	 * Normally the dotclock is filled in by the encoder .get_config()
9748 	 * but in case the pipe is enabled w/o any ports we need a sane
9749 	 * default.
9750 	 */
9751 	pipe_config->hw.adjusted_mode.crtc_clock =
9752 		pipe_config->port_clock / pipe_config->pixel_multiplier;
9753 
9754 	ret = true;
9755 
9756 out:
9757 	intel_display_power_put(dev_priv, power_domain, wakeref);
9758 
9759 	return ret;
9760 }
9761 
9762 static void ilk_init_pch_refclk(struct drm_i915_private *dev_priv)
9763 {
9764 	struct intel_encoder *encoder;
9765 	int i;
9766 	u32 val, final;
9767 	bool has_lvds = false;
9768 	bool has_cpu_edp = false;
9769 	bool has_panel = false;
9770 	bool has_ck505 = false;
9771 	bool can_ssc = false;
9772 	bool using_ssc_source = false;
9773 
9774 	/* We need to take the global config into account */
9775 	for_each_intel_encoder(&dev_priv->drm, encoder) {
9776 		switch (encoder->type) {
9777 		case INTEL_OUTPUT_LVDS:
9778 			has_panel = true;
9779 			has_lvds = true;
9780 			break;
9781 		case INTEL_OUTPUT_EDP:
9782 			has_panel = true;
9783 			if (encoder->port == PORT_A)
9784 				has_cpu_edp = true;
9785 			break;
9786 		default:
9787 			break;
9788 		}
9789 	}
9790 
9791 	if (HAS_PCH_IBX(dev_priv)) {
9792 		has_ck505 = dev_priv->vbt.display_clock_mode;
9793 		can_ssc = has_ck505;
9794 	} else {
9795 		has_ck505 = false;
9796 		can_ssc = true;
9797 	}
9798 
9799 	/* Check if any DPLLs are using the SSC source */
9800 	for (i = 0; i < dev_priv->dpll.num_shared_dpll; i++) {
9801 		u32 temp = intel_de_read(dev_priv, PCH_DPLL(i));
9802 
9803 		if (!(temp & DPLL_VCO_ENABLE))
9804 			continue;
9805 
9806 		if ((temp & PLL_REF_INPUT_MASK) ==
9807 		    PLLB_REF_INPUT_SPREADSPECTRUMIN) {
9808 			using_ssc_source = true;
9809 			break;
9810 		}
9811 	}
9812 
9813 	drm_dbg_kms(&dev_priv->drm,
9814 		    "has_panel %d has_lvds %d has_ck505 %d using_ssc_source %d\n",
9815 		    has_panel, has_lvds, has_ck505, using_ssc_source);
9816 
9817 	/* Ironlake: try to setup display ref clock before DPLL
9818 	 * enabling. This is only under driver's control after
9819 	 * PCH B stepping, previous chipset stepping should be
9820 	 * ignoring this setting.
9821 	 */
9822 	val = intel_de_read(dev_priv, PCH_DREF_CONTROL);
9823 
9824 	/* As we must carefully and slowly disable/enable each source in turn,
9825 	 * compute the final state we want first and check if we need to
9826 	 * make any changes at all.
9827 	 */
9828 	final = val;
9829 	final &= ~DREF_NONSPREAD_SOURCE_MASK;
9830 	if (has_ck505)
9831 		final |= DREF_NONSPREAD_CK505_ENABLE;
9832 	else
9833 		final |= DREF_NONSPREAD_SOURCE_ENABLE;
9834 
9835 	final &= ~DREF_SSC_SOURCE_MASK;
9836 	final &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
9837 	final &= ~DREF_SSC1_ENABLE;
9838 
9839 	if (has_panel) {
9840 		final |= DREF_SSC_SOURCE_ENABLE;
9841 
9842 		if (intel_panel_use_ssc(dev_priv) && can_ssc)
9843 			final |= DREF_SSC1_ENABLE;
9844 
9845 		if (has_cpu_edp) {
9846 			if (intel_panel_use_ssc(dev_priv) && can_ssc)
9847 				final |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD;
9848 			else
9849 				final |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD;
9850 		} else
9851 			final |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
9852 	} else if (using_ssc_source) {
9853 		final |= DREF_SSC_SOURCE_ENABLE;
9854 		final |= DREF_SSC1_ENABLE;
9855 	}
9856 
9857 	if (final == val)
9858 		return;
9859 
9860 	/* Always enable nonspread source */
9861 	val &= ~DREF_NONSPREAD_SOURCE_MASK;
9862 
9863 	if (has_ck505)
9864 		val |= DREF_NONSPREAD_CK505_ENABLE;
9865 	else
9866 		val |= DREF_NONSPREAD_SOURCE_ENABLE;
9867 
9868 	if (has_panel) {
9869 		val &= ~DREF_SSC_SOURCE_MASK;
9870 		val |= DREF_SSC_SOURCE_ENABLE;
9871 
9872 		/* SSC must be turned on before enabling the CPU output  */
9873 		if (intel_panel_use_ssc(dev_priv) && can_ssc) {
9874 			drm_dbg_kms(&dev_priv->drm, "Using SSC on panel\n");
9875 			val |= DREF_SSC1_ENABLE;
9876 		} else
9877 			val &= ~DREF_SSC1_ENABLE;
9878 
9879 		/* Get SSC going before enabling the outputs */
9880 		intel_de_write(dev_priv, PCH_DREF_CONTROL, val);
9881 		intel_de_posting_read(dev_priv, PCH_DREF_CONTROL);
9882 		udelay(200);
9883 
9884 		val &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
9885 
9886 		/* Enable CPU source on CPU attached eDP */
9887 		if (has_cpu_edp) {
9888 			if (intel_panel_use_ssc(dev_priv) && can_ssc) {
9889 				drm_dbg_kms(&dev_priv->drm,
9890 					    "Using SSC on eDP\n");
9891 				val |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD;
9892 			} else
9893 				val |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD;
9894 		} else
9895 			val |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
9896 
9897 		intel_de_write(dev_priv, PCH_DREF_CONTROL, val);
9898 		intel_de_posting_read(dev_priv, PCH_DREF_CONTROL);
9899 		udelay(200);
9900 	} else {
9901 		drm_dbg_kms(&dev_priv->drm, "Disabling CPU source output\n");
9902 
9903 		val &= ~DREF_CPU_SOURCE_OUTPUT_MASK;
9904 
9905 		/* Turn off CPU output */
9906 		val |= DREF_CPU_SOURCE_OUTPUT_DISABLE;
9907 
9908 		intel_de_write(dev_priv, PCH_DREF_CONTROL, val);
9909 		intel_de_posting_read(dev_priv, PCH_DREF_CONTROL);
9910 		udelay(200);
9911 
9912 		if (!using_ssc_source) {
9913 			drm_dbg_kms(&dev_priv->drm, "Disabling SSC source\n");
9914 
9915 			/* Turn off the SSC source */
9916 			val &= ~DREF_SSC_SOURCE_MASK;
9917 			val |= DREF_SSC_SOURCE_DISABLE;
9918 
9919 			/* Turn off SSC1 */
9920 			val &= ~DREF_SSC1_ENABLE;
9921 
9922 			intel_de_write(dev_priv, PCH_DREF_CONTROL, val);
9923 			intel_de_posting_read(dev_priv, PCH_DREF_CONTROL);
9924 			udelay(200);
9925 		}
9926 	}
9927 
9928 	BUG_ON(val != final);
9929 }
9930 
9931 static void lpt_reset_fdi_mphy(struct drm_i915_private *dev_priv)
9932 {
9933 	u32 tmp;
9934 
9935 	tmp = intel_de_read(dev_priv, SOUTH_CHICKEN2);
9936 	tmp |= FDI_MPHY_IOSFSB_RESET_CTL;
9937 	intel_de_write(dev_priv, SOUTH_CHICKEN2, tmp);
9938 
9939 	if (wait_for_us(intel_de_read(dev_priv, SOUTH_CHICKEN2) &
9940 			FDI_MPHY_IOSFSB_RESET_STATUS, 100))
9941 		drm_err(&dev_priv->drm, "FDI mPHY reset assert timeout\n");
9942 
9943 	tmp = intel_de_read(dev_priv, SOUTH_CHICKEN2);
9944 	tmp &= ~FDI_MPHY_IOSFSB_RESET_CTL;
9945 	intel_de_write(dev_priv, SOUTH_CHICKEN2, tmp);
9946 
9947 	if (wait_for_us((intel_de_read(dev_priv, SOUTH_CHICKEN2) &
9948 			 FDI_MPHY_IOSFSB_RESET_STATUS) == 0, 100))
9949 		drm_err(&dev_priv->drm, "FDI mPHY reset de-assert timeout\n");
9950 }
9951 
9952 /* WaMPhyProgramming:hsw */
9953 static void lpt_program_fdi_mphy(struct drm_i915_private *dev_priv)
9954 {
9955 	u32 tmp;
9956 
9957 	tmp = intel_sbi_read(dev_priv, 0x8008, SBI_MPHY);
9958 	tmp &= ~(0xFF << 24);
9959 	tmp |= (0x12 << 24);
9960 	intel_sbi_write(dev_priv, 0x8008, tmp, SBI_MPHY);
9961 
9962 	tmp = intel_sbi_read(dev_priv, 0x2008, SBI_MPHY);
9963 	tmp |= (1 << 11);
9964 	intel_sbi_write(dev_priv, 0x2008, tmp, SBI_MPHY);
9965 
9966 	tmp = intel_sbi_read(dev_priv, 0x2108, SBI_MPHY);
9967 	tmp |= (1 << 11);
9968 	intel_sbi_write(dev_priv, 0x2108, tmp, SBI_MPHY);
9969 
9970 	tmp = intel_sbi_read(dev_priv, 0x206C, SBI_MPHY);
9971 	tmp |= (1 << 24) | (1 << 21) | (1 << 18);
9972 	intel_sbi_write(dev_priv, 0x206C, tmp, SBI_MPHY);
9973 
9974 	tmp = intel_sbi_read(dev_priv, 0x216C, SBI_MPHY);
9975 	tmp |= (1 << 24) | (1 << 21) | (1 << 18);
9976 	intel_sbi_write(dev_priv, 0x216C, tmp, SBI_MPHY);
9977 
9978 	tmp = intel_sbi_read(dev_priv, 0x2080, SBI_MPHY);
9979 	tmp &= ~(7 << 13);
9980 	tmp |= (5 << 13);
9981 	intel_sbi_write(dev_priv, 0x2080, tmp, SBI_MPHY);
9982 
9983 	tmp = intel_sbi_read(dev_priv, 0x2180, SBI_MPHY);
9984 	tmp &= ~(7 << 13);
9985 	tmp |= (5 << 13);
9986 	intel_sbi_write(dev_priv, 0x2180, tmp, SBI_MPHY);
9987 
9988 	tmp = intel_sbi_read(dev_priv, 0x208C, SBI_MPHY);
9989 	tmp &= ~0xFF;
9990 	tmp |= 0x1C;
9991 	intel_sbi_write(dev_priv, 0x208C, tmp, SBI_MPHY);
9992 
9993 	tmp = intel_sbi_read(dev_priv, 0x218C, SBI_MPHY);
9994 	tmp &= ~0xFF;
9995 	tmp |= 0x1C;
9996 	intel_sbi_write(dev_priv, 0x218C, tmp, SBI_MPHY);
9997 
9998 	tmp = intel_sbi_read(dev_priv, 0x2098, SBI_MPHY);
9999 	tmp &= ~(0xFF << 16);
10000 	tmp |= (0x1C << 16);
10001 	intel_sbi_write(dev_priv, 0x2098, tmp, SBI_MPHY);
10002 
10003 	tmp = intel_sbi_read(dev_priv, 0x2198, SBI_MPHY);
10004 	tmp &= ~(0xFF << 16);
10005 	tmp |= (0x1C << 16);
10006 	intel_sbi_write(dev_priv, 0x2198, tmp, SBI_MPHY);
10007 
10008 	tmp = intel_sbi_read(dev_priv, 0x20C4, SBI_MPHY);
10009 	tmp |= (1 << 27);
10010 	intel_sbi_write(dev_priv, 0x20C4, tmp, SBI_MPHY);
10011 
10012 	tmp = intel_sbi_read(dev_priv, 0x21C4, SBI_MPHY);
10013 	tmp |= (1 << 27);
10014 	intel_sbi_write(dev_priv, 0x21C4, tmp, SBI_MPHY);
10015 
10016 	tmp = intel_sbi_read(dev_priv, 0x20EC, SBI_MPHY);
10017 	tmp &= ~(0xF << 28);
10018 	tmp |= (4 << 28);
10019 	intel_sbi_write(dev_priv, 0x20EC, tmp, SBI_MPHY);
10020 
10021 	tmp = intel_sbi_read(dev_priv, 0x21EC, SBI_MPHY);
10022 	tmp &= ~(0xF << 28);
10023 	tmp |= (4 << 28);
10024 	intel_sbi_write(dev_priv, 0x21EC, tmp, SBI_MPHY);
10025 }
10026 
10027 /* Implements 3 different sequences from BSpec chapter "Display iCLK
10028  * Programming" based on the parameters passed:
10029  * - Sequence to enable CLKOUT_DP
10030  * - Sequence to enable CLKOUT_DP without spread
10031  * - Sequence to enable CLKOUT_DP for FDI usage and configure PCH FDI I/O
10032  */
10033 static void lpt_enable_clkout_dp(struct drm_i915_private *dev_priv,
10034 				 bool with_spread, bool with_fdi)
10035 {
10036 	u32 reg, tmp;
10037 
10038 	if (drm_WARN(&dev_priv->drm, with_fdi && !with_spread,
10039 		     "FDI requires downspread\n"))
10040 		with_spread = true;
10041 	if (drm_WARN(&dev_priv->drm, HAS_PCH_LPT_LP(dev_priv) &&
10042 		     with_fdi, "LP PCH doesn't have FDI\n"))
10043 		with_fdi = false;
10044 
10045 	mutex_lock(&dev_priv->sb_lock);
10046 
10047 	tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
10048 	tmp &= ~SBI_SSCCTL_DISABLE;
10049 	tmp |= SBI_SSCCTL_PATHALT;
10050 	intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
10051 
10052 	udelay(24);
10053 
10054 	if (with_spread) {
10055 		tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
10056 		tmp &= ~SBI_SSCCTL_PATHALT;
10057 		intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
10058 
10059 		if (with_fdi) {
10060 			lpt_reset_fdi_mphy(dev_priv);
10061 			lpt_program_fdi_mphy(dev_priv);
10062 		}
10063 	}
10064 
10065 	reg = HAS_PCH_LPT_LP(dev_priv) ? SBI_GEN0 : SBI_DBUFF0;
10066 	tmp = intel_sbi_read(dev_priv, reg, SBI_ICLK);
10067 	tmp |= SBI_GEN0_CFG_BUFFENABLE_DISABLE;
10068 	intel_sbi_write(dev_priv, reg, tmp, SBI_ICLK);
10069 
10070 	mutex_unlock(&dev_priv->sb_lock);
10071 }
10072 
10073 /* Sequence to disable CLKOUT_DP */
10074 void lpt_disable_clkout_dp(struct drm_i915_private *dev_priv)
10075 {
10076 	u32 reg, tmp;
10077 
10078 	mutex_lock(&dev_priv->sb_lock);
10079 
10080 	reg = HAS_PCH_LPT_LP(dev_priv) ? SBI_GEN0 : SBI_DBUFF0;
10081 	tmp = intel_sbi_read(dev_priv, reg, SBI_ICLK);
10082 	tmp &= ~SBI_GEN0_CFG_BUFFENABLE_DISABLE;
10083 	intel_sbi_write(dev_priv, reg, tmp, SBI_ICLK);
10084 
10085 	tmp = intel_sbi_read(dev_priv, SBI_SSCCTL, SBI_ICLK);
10086 	if (!(tmp & SBI_SSCCTL_DISABLE)) {
10087 		if (!(tmp & SBI_SSCCTL_PATHALT)) {
10088 			tmp |= SBI_SSCCTL_PATHALT;
10089 			intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
10090 			udelay(32);
10091 		}
10092 		tmp |= SBI_SSCCTL_DISABLE;
10093 		intel_sbi_write(dev_priv, SBI_SSCCTL, tmp, SBI_ICLK);
10094 	}
10095 
10096 	mutex_unlock(&dev_priv->sb_lock);
10097 }
10098 
10099 #define BEND_IDX(steps) ((50 + (steps)) / 5)
10100 
10101 static const u16 sscdivintphase[] = {
10102 	[BEND_IDX( 50)] = 0x3B23,
10103 	[BEND_IDX( 45)] = 0x3B23,
10104 	[BEND_IDX( 40)] = 0x3C23,
10105 	[BEND_IDX( 35)] = 0x3C23,
10106 	[BEND_IDX( 30)] = 0x3D23,
10107 	[BEND_IDX( 25)] = 0x3D23,
10108 	[BEND_IDX( 20)] = 0x3E23,
10109 	[BEND_IDX( 15)] = 0x3E23,
10110 	[BEND_IDX( 10)] = 0x3F23,
10111 	[BEND_IDX(  5)] = 0x3F23,
10112 	[BEND_IDX(  0)] = 0x0025,
10113 	[BEND_IDX( -5)] = 0x0025,
10114 	[BEND_IDX(-10)] = 0x0125,
10115 	[BEND_IDX(-15)] = 0x0125,
10116 	[BEND_IDX(-20)] = 0x0225,
10117 	[BEND_IDX(-25)] = 0x0225,
10118 	[BEND_IDX(-30)] = 0x0325,
10119 	[BEND_IDX(-35)] = 0x0325,
10120 	[BEND_IDX(-40)] = 0x0425,
10121 	[BEND_IDX(-45)] = 0x0425,
10122 	[BEND_IDX(-50)] = 0x0525,
10123 };
10124 
10125 /*
10126  * Bend CLKOUT_DP
10127  * steps -50 to 50 inclusive, in steps of 5
10128  * < 0 slow down the clock, > 0 speed up the clock, 0 == no bend (135MHz)
10129  * change in clock period = -(steps / 10) * 5.787 ps
10130  */
10131 static void lpt_bend_clkout_dp(struct drm_i915_private *dev_priv, int steps)
10132 {
10133 	u32 tmp;
10134 	int idx = BEND_IDX(steps);
10135 
10136 	if (drm_WARN_ON(&dev_priv->drm, steps % 5 != 0))
10137 		return;
10138 
10139 	if (drm_WARN_ON(&dev_priv->drm, idx >= ARRAY_SIZE(sscdivintphase)))
10140 		return;
10141 
10142 	mutex_lock(&dev_priv->sb_lock);
10143 
10144 	if (steps % 10 != 0)
10145 		tmp = 0xAAAAAAAB;
10146 	else
10147 		tmp = 0x00000000;
10148 	intel_sbi_write(dev_priv, SBI_SSCDITHPHASE, tmp, SBI_ICLK);
10149 
10150 	tmp = intel_sbi_read(dev_priv, SBI_SSCDIVINTPHASE, SBI_ICLK);
10151 	tmp &= 0xffff0000;
10152 	tmp |= sscdivintphase[idx];
10153 	intel_sbi_write(dev_priv, SBI_SSCDIVINTPHASE, tmp, SBI_ICLK);
10154 
10155 	mutex_unlock(&dev_priv->sb_lock);
10156 }
10157 
10158 #undef BEND_IDX
10159 
10160 static bool spll_uses_pch_ssc(struct drm_i915_private *dev_priv)
10161 {
10162 	u32 fuse_strap = intel_de_read(dev_priv, FUSE_STRAP);
10163 	u32 ctl = intel_de_read(dev_priv, SPLL_CTL);
10164 
10165 	if ((ctl & SPLL_PLL_ENABLE) == 0)
10166 		return false;
10167 
10168 	if ((ctl & SPLL_REF_MASK) == SPLL_REF_MUXED_SSC &&
10169 	    (fuse_strap & HSW_CPU_SSC_ENABLE) == 0)
10170 		return true;
10171 
10172 	if (IS_BROADWELL(dev_priv) &&
10173 	    (ctl & SPLL_REF_MASK) == SPLL_REF_PCH_SSC_BDW)
10174 		return true;
10175 
10176 	return false;
10177 }
10178 
10179 static bool wrpll_uses_pch_ssc(struct drm_i915_private *dev_priv,
10180 			       enum intel_dpll_id id)
10181 {
10182 	u32 fuse_strap = intel_de_read(dev_priv, FUSE_STRAP);
10183 	u32 ctl = intel_de_read(dev_priv, WRPLL_CTL(id));
10184 
10185 	if ((ctl & WRPLL_PLL_ENABLE) == 0)
10186 		return false;
10187 
10188 	if ((ctl & WRPLL_REF_MASK) == WRPLL_REF_PCH_SSC)
10189 		return true;
10190 
10191 	if ((IS_BROADWELL(dev_priv) || IS_HSW_ULT(dev_priv)) &&
10192 	    (ctl & WRPLL_REF_MASK) == WRPLL_REF_MUXED_SSC_BDW &&
10193 	    (fuse_strap & HSW_CPU_SSC_ENABLE) == 0)
10194 		return true;
10195 
10196 	return false;
10197 }
10198 
10199 static void lpt_init_pch_refclk(struct drm_i915_private *dev_priv)
10200 {
10201 	struct intel_encoder *encoder;
10202 	bool has_fdi = false;
10203 
10204 	for_each_intel_encoder(&dev_priv->drm, encoder) {
10205 		switch (encoder->type) {
10206 		case INTEL_OUTPUT_ANALOG:
10207 			has_fdi = true;
10208 			break;
10209 		default:
10210 			break;
10211 		}
10212 	}
10213 
10214 	/*
10215 	 * The BIOS may have decided to use the PCH SSC
10216 	 * reference so we must not disable it until the
10217 	 * relevant PLLs have stopped relying on it. We'll
10218 	 * just leave the PCH SSC reference enabled in case
10219 	 * any active PLL is using it. It will get disabled
10220 	 * after runtime suspend if we don't have FDI.
10221 	 *
10222 	 * TODO: Move the whole reference clock handling
10223 	 * to the modeset sequence proper so that we can
10224 	 * actually enable/disable/reconfigure these things
10225 	 * safely. To do that we need to introduce a real
10226 	 * clock hierarchy. That would also allow us to do
10227 	 * clock bending finally.
10228 	 */
10229 	dev_priv->pch_ssc_use = 0;
10230 
10231 	if (spll_uses_pch_ssc(dev_priv)) {
10232 		drm_dbg_kms(&dev_priv->drm, "SPLL using PCH SSC\n");
10233 		dev_priv->pch_ssc_use |= BIT(DPLL_ID_SPLL);
10234 	}
10235 
10236 	if (wrpll_uses_pch_ssc(dev_priv, DPLL_ID_WRPLL1)) {
10237 		drm_dbg_kms(&dev_priv->drm, "WRPLL1 using PCH SSC\n");
10238 		dev_priv->pch_ssc_use |= BIT(DPLL_ID_WRPLL1);
10239 	}
10240 
10241 	if (wrpll_uses_pch_ssc(dev_priv, DPLL_ID_WRPLL2)) {
10242 		drm_dbg_kms(&dev_priv->drm, "WRPLL2 using PCH SSC\n");
10243 		dev_priv->pch_ssc_use |= BIT(DPLL_ID_WRPLL2);
10244 	}
10245 
10246 	if (dev_priv->pch_ssc_use)
10247 		return;
10248 
10249 	if (has_fdi) {
10250 		lpt_bend_clkout_dp(dev_priv, 0);
10251 		lpt_enable_clkout_dp(dev_priv, true, true);
10252 	} else {
10253 		lpt_disable_clkout_dp(dev_priv);
10254 	}
10255 }
10256 
10257 /*
10258  * Initialize reference clocks when the driver loads
10259  */
10260 void intel_init_pch_refclk(struct drm_i915_private *dev_priv)
10261 {
10262 	if (HAS_PCH_IBX(dev_priv) || HAS_PCH_CPT(dev_priv))
10263 		ilk_init_pch_refclk(dev_priv);
10264 	else if (HAS_PCH_LPT(dev_priv))
10265 		lpt_init_pch_refclk(dev_priv);
10266 }
10267 
10268 static void ilk_set_pipeconf(const struct intel_crtc_state *crtc_state)
10269 {
10270 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
10271 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
10272 	enum pipe pipe = crtc->pipe;
10273 	u32 val;
10274 
10275 	val = 0;
10276 
10277 	switch (crtc_state->pipe_bpp) {
10278 	case 18:
10279 		val |= PIPECONF_6BPC;
10280 		break;
10281 	case 24:
10282 		val |= PIPECONF_8BPC;
10283 		break;
10284 	case 30:
10285 		val |= PIPECONF_10BPC;
10286 		break;
10287 	case 36:
10288 		val |= PIPECONF_12BPC;
10289 		break;
10290 	default:
10291 		/* Case prevented by intel_choose_pipe_bpp_dither. */
10292 		BUG();
10293 	}
10294 
10295 	if (crtc_state->dither)
10296 		val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP);
10297 
10298 	if (crtc_state->hw.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
10299 		val |= PIPECONF_INTERLACED_ILK;
10300 	else
10301 		val |= PIPECONF_PROGRESSIVE;
10302 
10303 	/*
10304 	 * This would end up with an odd purple hue over
10305 	 * the entire display. Make sure we don't do it.
10306 	 */
10307 	drm_WARN_ON(&dev_priv->drm, crtc_state->limited_color_range &&
10308 		    crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB);
10309 
10310 	if (crtc_state->limited_color_range &&
10311 	    !intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO))
10312 		val |= PIPECONF_COLOR_RANGE_SELECT;
10313 
10314 	if (crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB)
10315 		val |= PIPECONF_OUTPUT_COLORSPACE_YUV709;
10316 
10317 	val |= PIPECONF_GAMMA_MODE(crtc_state->gamma_mode);
10318 
10319 	val |= PIPECONF_FRAME_START_DELAY(0);
10320 
10321 	intel_de_write(dev_priv, PIPECONF(pipe), val);
10322 	intel_de_posting_read(dev_priv, PIPECONF(pipe));
10323 }
10324 
10325 static void hsw_set_pipeconf(const struct intel_crtc_state *crtc_state)
10326 {
10327 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
10328 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
10329 	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
10330 	u32 val = 0;
10331 
10332 	if (IS_HASWELL(dev_priv) && crtc_state->dither)
10333 		val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP);
10334 
10335 	if (crtc_state->hw.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
10336 		val |= PIPECONF_INTERLACED_ILK;
10337 	else
10338 		val |= PIPECONF_PROGRESSIVE;
10339 
10340 	if (IS_HASWELL(dev_priv) &&
10341 	    crtc_state->output_format != INTEL_OUTPUT_FORMAT_RGB)
10342 		val |= PIPECONF_OUTPUT_COLORSPACE_YUV_HSW;
10343 
10344 	intel_de_write(dev_priv, PIPECONF(cpu_transcoder), val);
10345 	intel_de_posting_read(dev_priv, PIPECONF(cpu_transcoder));
10346 }
10347 
10348 static void bdw_set_pipemisc(const struct intel_crtc_state *crtc_state)
10349 {
10350 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
10351 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
10352 	u32 val = 0;
10353 
10354 	switch (crtc_state->pipe_bpp) {
10355 	case 18:
10356 		val |= PIPEMISC_DITHER_6_BPC;
10357 		break;
10358 	case 24:
10359 		val |= PIPEMISC_DITHER_8_BPC;
10360 		break;
10361 	case 30:
10362 		val |= PIPEMISC_DITHER_10_BPC;
10363 		break;
10364 	case 36:
10365 		val |= PIPEMISC_DITHER_12_BPC;
10366 		break;
10367 	default:
10368 		MISSING_CASE(crtc_state->pipe_bpp);
10369 		break;
10370 	}
10371 
10372 	if (crtc_state->dither)
10373 		val |= PIPEMISC_DITHER_ENABLE | PIPEMISC_DITHER_TYPE_SP;
10374 
10375 	if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 ||
10376 	    crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR444)
10377 		val |= PIPEMISC_OUTPUT_COLORSPACE_YUV;
10378 
10379 	if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420)
10380 		val |= PIPEMISC_YUV420_ENABLE |
10381 			PIPEMISC_YUV420_MODE_FULL_BLEND;
10382 
10383 	if (INTEL_GEN(dev_priv) >= 11 &&
10384 	    (crtc_state->active_planes & ~(icl_hdr_plane_mask() |
10385 					   BIT(PLANE_CURSOR))) == 0)
10386 		val |= PIPEMISC_HDR_MODE_PRECISION;
10387 
10388 	if (INTEL_GEN(dev_priv) >= 12)
10389 		val |= PIPEMISC_PIXEL_ROUNDING_TRUNC;
10390 
10391 	intel_de_write(dev_priv, PIPEMISC(crtc->pipe), val);
10392 }
10393 
10394 int bdw_get_pipemisc_bpp(struct intel_crtc *crtc)
10395 {
10396 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
10397 	u32 tmp;
10398 
10399 	tmp = intel_de_read(dev_priv, PIPEMISC(crtc->pipe));
10400 
10401 	switch (tmp & PIPEMISC_DITHER_BPC_MASK) {
10402 	case PIPEMISC_DITHER_6_BPC:
10403 		return 18;
10404 	case PIPEMISC_DITHER_8_BPC:
10405 		return 24;
10406 	case PIPEMISC_DITHER_10_BPC:
10407 		return 30;
10408 	case PIPEMISC_DITHER_12_BPC:
10409 		return 36;
10410 	default:
10411 		MISSING_CASE(tmp);
10412 		return 0;
10413 	}
10414 }
10415 
10416 int ilk_get_lanes_required(int target_clock, int link_bw, int bpp)
10417 {
10418 	/*
10419 	 * Account for spread spectrum to avoid
10420 	 * oversubscribing the link. Max center spread
10421 	 * is 2.5%; use 5% for safety's sake.
10422 	 */
10423 	u32 bps = target_clock * bpp * 21 / 20;
10424 	return DIV_ROUND_UP(bps, link_bw * 8);
10425 }
10426 
10427 static bool ilk_needs_fb_cb_tune(struct dpll *dpll, int factor)
10428 {
10429 	return i9xx_dpll_compute_m(dpll) < factor * dpll->n;
10430 }
10431 
10432 static void ilk_compute_dpll(struct intel_crtc *crtc,
10433 			     struct intel_crtc_state *crtc_state,
10434 			     struct dpll *reduced_clock)
10435 {
10436 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
10437 	u32 dpll, fp, fp2;
10438 	int factor;
10439 
10440 	/* Enable autotuning of the PLL clock (if permissible) */
10441 	factor = 21;
10442 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) {
10443 		if ((intel_panel_use_ssc(dev_priv) &&
10444 		     dev_priv->vbt.lvds_ssc_freq == 100000) ||
10445 		    (HAS_PCH_IBX(dev_priv) &&
10446 		     intel_is_dual_link_lvds(dev_priv)))
10447 			factor = 25;
10448 	} else if (crtc_state->sdvo_tv_clock) {
10449 		factor = 20;
10450 	}
10451 
10452 	fp = i9xx_dpll_compute_fp(&crtc_state->dpll);
10453 
10454 	if (ilk_needs_fb_cb_tune(&crtc_state->dpll, factor))
10455 		fp |= FP_CB_TUNE;
10456 
10457 	if (reduced_clock) {
10458 		fp2 = i9xx_dpll_compute_fp(reduced_clock);
10459 
10460 		if (reduced_clock->m < factor * reduced_clock->n)
10461 			fp2 |= FP_CB_TUNE;
10462 	} else {
10463 		fp2 = fp;
10464 	}
10465 
10466 	dpll = 0;
10467 
10468 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS))
10469 		dpll |= DPLLB_MODE_LVDS;
10470 	else
10471 		dpll |= DPLLB_MODE_DAC_SERIAL;
10472 
10473 	dpll |= (crtc_state->pixel_multiplier - 1)
10474 		<< PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT;
10475 
10476 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_SDVO) ||
10477 	    intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
10478 		dpll |= DPLL_SDVO_HIGH_SPEED;
10479 
10480 	if (intel_crtc_has_dp_encoder(crtc_state))
10481 		dpll |= DPLL_SDVO_HIGH_SPEED;
10482 
10483 	/*
10484 	 * The high speed IO clock is only really required for
10485 	 * SDVO/HDMI/DP, but we also enable it for CRT to make it
10486 	 * possible to share the DPLL between CRT and HDMI. Enabling
10487 	 * the clock needlessly does no real harm, except use up a
10488 	 * bit of power potentially.
10489 	 *
10490 	 * We'll limit this to IVB with 3 pipes, since it has only two
10491 	 * DPLLs and so DPLL sharing is the only way to get three pipes
10492 	 * driving PCH ports at the same time. On SNB we could do this,
10493 	 * and potentially avoid enabling the second DPLL, but it's not
10494 	 * clear if it''s a win or loss power wise. No point in doing
10495 	 * this on ILK at all since it has a fixed DPLL<->pipe mapping.
10496 	 */
10497 	if (INTEL_NUM_PIPES(dev_priv) == 3 &&
10498 	    intel_crtc_has_type(crtc_state, INTEL_OUTPUT_ANALOG))
10499 		dpll |= DPLL_SDVO_HIGH_SPEED;
10500 
10501 	/* compute bitmask from p1 value */
10502 	dpll |= (1 << (crtc_state->dpll.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT;
10503 	/* also FPA1 */
10504 	dpll |= (1 << (crtc_state->dpll.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
10505 
10506 	switch (crtc_state->dpll.p2) {
10507 	case 5:
10508 		dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_5;
10509 		break;
10510 	case 7:
10511 		dpll |= DPLLB_LVDS_P2_CLOCK_DIV_7;
10512 		break;
10513 	case 10:
10514 		dpll |= DPLL_DAC_SERIAL_P2_CLOCK_DIV_10;
10515 		break;
10516 	case 14:
10517 		dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14;
10518 		break;
10519 	}
10520 
10521 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS) &&
10522 	    intel_panel_use_ssc(dev_priv))
10523 		dpll |= PLLB_REF_INPUT_SPREADSPECTRUMIN;
10524 	else
10525 		dpll |= PLL_REF_INPUT_DREFCLK;
10526 
10527 	dpll |= DPLL_VCO_ENABLE;
10528 
10529 	crtc_state->dpll_hw_state.dpll = dpll;
10530 	crtc_state->dpll_hw_state.fp0 = fp;
10531 	crtc_state->dpll_hw_state.fp1 = fp2;
10532 }
10533 
10534 static int ilk_crtc_compute_clock(struct intel_crtc *crtc,
10535 				  struct intel_crtc_state *crtc_state)
10536 {
10537 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
10538 	struct intel_atomic_state *state =
10539 		to_intel_atomic_state(crtc_state->uapi.state);
10540 	const struct intel_limit *limit;
10541 	int refclk = 120000;
10542 
10543 	memset(&crtc_state->dpll_hw_state, 0,
10544 	       sizeof(crtc_state->dpll_hw_state));
10545 
10546 	/* CPU eDP is the only output that doesn't need a PCH PLL of its own. */
10547 	if (!crtc_state->has_pch_encoder)
10548 		return 0;
10549 
10550 	if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_LVDS)) {
10551 		if (intel_panel_use_ssc(dev_priv)) {
10552 			drm_dbg_kms(&dev_priv->drm,
10553 				    "using SSC reference clock of %d kHz\n",
10554 				    dev_priv->vbt.lvds_ssc_freq);
10555 			refclk = dev_priv->vbt.lvds_ssc_freq;
10556 		}
10557 
10558 		if (intel_is_dual_link_lvds(dev_priv)) {
10559 			if (refclk == 100000)
10560 				limit = &ilk_limits_dual_lvds_100m;
10561 			else
10562 				limit = &ilk_limits_dual_lvds;
10563 		} else {
10564 			if (refclk == 100000)
10565 				limit = &ilk_limits_single_lvds_100m;
10566 			else
10567 				limit = &ilk_limits_single_lvds;
10568 		}
10569 	} else {
10570 		limit = &ilk_limits_dac;
10571 	}
10572 
10573 	if (!crtc_state->clock_set &&
10574 	    !g4x_find_best_dpll(limit, crtc_state, crtc_state->port_clock,
10575 				refclk, NULL, &crtc_state->dpll)) {
10576 		drm_err(&dev_priv->drm,
10577 			"Couldn't find PLL settings for mode!\n");
10578 		return -EINVAL;
10579 	}
10580 
10581 	ilk_compute_dpll(crtc, crtc_state, NULL);
10582 
10583 	if (!intel_reserve_shared_dplls(state, crtc, NULL)) {
10584 		drm_dbg_kms(&dev_priv->drm,
10585 			    "failed to find PLL for pipe %c\n",
10586 			    pipe_name(crtc->pipe));
10587 		return -EINVAL;
10588 	}
10589 
10590 	return 0;
10591 }
10592 
10593 static void intel_pch_transcoder_get_m_n(struct intel_crtc *crtc,
10594 					 struct intel_link_m_n *m_n)
10595 {
10596 	struct drm_device *dev = crtc->base.dev;
10597 	struct drm_i915_private *dev_priv = to_i915(dev);
10598 	enum pipe pipe = crtc->pipe;
10599 
10600 	m_n->link_m = intel_de_read(dev_priv, PCH_TRANS_LINK_M1(pipe));
10601 	m_n->link_n = intel_de_read(dev_priv, PCH_TRANS_LINK_N1(pipe));
10602 	m_n->gmch_m = intel_de_read(dev_priv, PCH_TRANS_DATA_M1(pipe))
10603 		& ~TU_SIZE_MASK;
10604 	m_n->gmch_n = intel_de_read(dev_priv, PCH_TRANS_DATA_N1(pipe));
10605 	m_n->tu = ((intel_de_read(dev_priv, PCH_TRANS_DATA_M1(pipe))
10606 		    & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
10607 }
10608 
10609 static void intel_cpu_transcoder_get_m_n(struct intel_crtc *crtc,
10610 					 enum transcoder transcoder,
10611 					 struct intel_link_m_n *m_n,
10612 					 struct intel_link_m_n *m2_n2)
10613 {
10614 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
10615 	enum pipe pipe = crtc->pipe;
10616 
10617 	if (INTEL_GEN(dev_priv) >= 5) {
10618 		m_n->link_m = intel_de_read(dev_priv,
10619 					    PIPE_LINK_M1(transcoder));
10620 		m_n->link_n = intel_de_read(dev_priv,
10621 					    PIPE_LINK_N1(transcoder));
10622 		m_n->gmch_m = intel_de_read(dev_priv,
10623 					    PIPE_DATA_M1(transcoder))
10624 			& ~TU_SIZE_MASK;
10625 		m_n->gmch_n = intel_de_read(dev_priv,
10626 					    PIPE_DATA_N1(transcoder));
10627 		m_n->tu = ((intel_de_read(dev_priv, PIPE_DATA_M1(transcoder))
10628 			    & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
10629 
10630 		if (m2_n2 && transcoder_has_m2_n2(dev_priv, transcoder)) {
10631 			m2_n2->link_m = intel_de_read(dev_priv,
10632 						      PIPE_LINK_M2(transcoder));
10633 			m2_n2->link_n =	intel_de_read(dev_priv,
10634 							     PIPE_LINK_N2(transcoder));
10635 			m2_n2->gmch_m =	intel_de_read(dev_priv,
10636 							     PIPE_DATA_M2(transcoder))
10637 					& ~TU_SIZE_MASK;
10638 			m2_n2->gmch_n =	intel_de_read(dev_priv,
10639 							     PIPE_DATA_N2(transcoder));
10640 			m2_n2->tu = ((intel_de_read(dev_priv, PIPE_DATA_M2(transcoder))
10641 					& TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
10642 		}
10643 	} else {
10644 		m_n->link_m = intel_de_read(dev_priv, PIPE_LINK_M_G4X(pipe));
10645 		m_n->link_n = intel_de_read(dev_priv, PIPE_LINK_N_G4X(pipe));
10646 		m_n->gmch_m = intel_de_read(dev_priv, PIPE_DATA_M_G4X(pipe))
10647 			& ~TU_SIZE_MASK;
10648 		m_n->gmch_n = intel_de_read(dev_priv, PIPE_DATA_N_G4X(pipe));
10649 		m_n->tu = ((intel_de_read(dev_priv, PIPE_DATA_M_G4X(pipe))
10650 			    & TU_SIZE_MASK) >> TU_SIZE_SHIFT) + 1;
10651 	}
10652 }
10653 
10654 void intel_dp_get_m_n(struct intel_crtc *crtc,
10655 		      struct intel_crtc_state *pipe_config)
10656 {
10657 	if (pipe_config->has_pch_encoder)
10658 		intel_pch_transcoder_get_m_n(crtc, &pipe_config->dp_m_n);
10659 	else
10660 		intel_cpu_transcoder_get_m_n(crtc, pipe_config->cpu_transcoder,
10661 					     &pipe_config->dp_m_n,
10662 					     &pipe_config->dp_m2_n2);
10663 }
10664 
10665 static void ilk_get_fdi_m_n_config(struct intel_crtc *crtc,
10666 				   struct intel_crtc_state *pipe_config)
10667 {
10668 	intel_cpu_transcoder_get_m_n(crtc, pipe_config->cpu_transcoder,
10669 				     &pipe_config->fdi_m_n, NULL);
10670 }
10671 
10672 static void ilk_get_pfit_pos_size(struct intel_crtc_state *crtc_state,
10673 				  u32 pos, u32 size)
10674 {
10675 	drm_rect_init(&crtc_state->pch_pfit.dst,
10676 		      pos >> 16, pos & 0xffff,
10677 		      size >> 16, size & 0xffff);
10678 }
10679 
10680 static void skl_get_pfit_config(struct intel_crtc_state *crtc_state)
10681 {
10682 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
10683 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
10684 	struct intel_crtc_scaler_state *scaler_state = &crtc_state->scaler_state;
10685 	int id = -1;
10686 	int i;
10687 
10688 	/* find scaler attached to this pipe */
10689 	for (i = 0; i < crtc->num_scalers; i++) {
10690 		u32 ctl, pos, size;
10691 
10692 		ctl = intel_de_read(dev_priv, SKL_PS_CTRL(crtc->pipe, i));
10693 		if ((ctl & (PS_SCALER_EN | PS_PLANE_SEL_MASK)) != PS_SCALER_EN)
10694 			continue;
10695 
10696 		id = i;
10697 		crtc_state->pch_pfit.enabled = true;
10698 
10699 		pos = intel_de_read(dev_priv, SKL_PS_WIN_POS(crtc->pipe, i));
10700 		size = intel_de_read(dev_priv, SKL_PS_WIN_SZ(crtc->pipe, i));
10701 
10702 		ilk_get_pfit_pos_size(crtc_state, pos, size);
10703 
10704 		scaler_state->scalers[i].in_use = true;
10705 		break;
10706 	}
10707 
10708 	scaler_state->scaler_id = id;
10709 	if (id >= 0)
10710 		scaler_state->scaler_users |= (1 << SKL_CRTC_INDEX);
10711 	else
10712 		scaler_state->scaler_users &= ~(1 << SKL_CRTC_INDEX);
10713 }
10714 
10715 static void
10716 skl_get_initial_plane_config(struct intel_crtc *crtc,
10717 			     struct intel_initial_plane_config *plane_config)
10718 {
10719 	struct intel_crtc_state *crtc_state = to_intel_crtc_state(crtc->base.state);
10720 	struct drm_device *dev = crtc->base.dev;
10721 	struct drm_i915_private *dev_priv = to_i915(dev);
10722 	struct intel_plane *plane = to_intel_plane(crtc->base.primary);
10723 	enum plane_id plane_id = plane->id;
10724 	enum pipe pipe;
10725 	u32 val, base, offset, stride_mult, tiling, alpha;
10726 	int fourcc, pixel_format;
10727 	unsigned int aligned_height;
10728 	struct drm_framebuffer *fb;
10729 	struct intel_framebuffer *intel_fb;
10730 
10731 	if (!plane->get_hw_state(plane, &pipe))
10732 		return;
10733 
10734 	drm_WARN_ON(dev, pipe != crtc->pipe);
10735 
10736 	if (crtc_state->bigjoiner) {
10737 		drm_dbg_kms(&dev_priv->drm,
10738 			    "Unsupported bigjoiner configuration for initial FB\n");
10739 		return;
10740 	}
10741 
10742 	intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
10743 	if (!intel_fb) {
10744 		drm_dbg_kms(&dev_priv->drm, "failed to alloc fb\n");
10745 		return;
10746 	}
10747 
10748 	fb = &intel_fb->base;
10749 
10750 	fb->dev = dev;
10751 
10752 	val = intel_de_read(dev_priv, PLANE_CTL(pipe, plane_id));
10753 
10754 	if (INTEL_GEN(dev_priv) >= 11)
10755 		pixel_format = val & ICL_PLANE_CTL_FORMAT_MASK;
10756 	else
10757 		pixel_format = val & PLANE_CTL_FORMAT_MASK;
10758 
10759 	if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) {
10760 		alpha = intel_de_read(dev_priv,
10761 				      PLANE_COLOR_CTL(pipe, plane_id));
10762 		alpha &= PLANE_COLOR_ALPHA_MASK;
10763 	} else {
10764 		alpha = val & PLANE_CTL_ALPHA_MASK;
10765 	}
10766 
10767 	fourcc = skl_format_to_fourcc(pixel_format,
10768 				      val & PLANE_CTL_ORDER_RGBX, alpha);
10769 	fb->format = drm_format_info(fourcc);
10770 
10771 	tiling = val & PLANE_CTL_TILED_MASK;
10772 	switch (tiling) {
10773 	case PLANE_CTL_TILED_LINEAR:
10774 		fb->modifier = DRM_FORMAT_MOD_LINEAR;
10775 		break;
10776 	case PLANE_CTL_TILED_X:
10777 		plane_config->tiling = I915_TILING_X;
10778 		fb->modifier = I915_FORMAT_MOD_X_TILED;
10779 		break;
10780 	case PLANE_CTL_TILED_Y:
10781 		plane_config->tiling = I915_TILING_Y;
10782 		if (val & PLANE_CTL_RENDER_DECOMPRESSION_ENABLE)
10783 			fb->modifier = INTEL_GEN(dev_priv) >= 12 ?
10784 				I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS :
10785 				I915_FORMAT_MOD_Y_TILED_CCS;
10786 		else if (val & PLANE_CTL_MEDIA_DECOMPRESSION_ENABLE)
10787 			fb->modifier = I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS;
10788 		else
10789 			fb->modifier = I915_FORMAT_MOD_Y_TILED;
10790 		break;
10791 	case PLANE_CTL_TILED_YF:
10792 		if (val & PLANE_CTL_RENDER_DECOMPRESSION_ENABLE)
10793 			fb->modifier = I915_FORMAT_MOD_Yf_TILED_CCS;
10794 		else
10795 			fb->modifier = I915_FORMAT_MOD_Yf_TILED;
10796 		break;
10797 	default:
10798 		MISSING_CASE(tiling);
10799 		goto error;
10800 	}
10801 
10802 	/*
10803 	 * DRM_MODE_ROTATE_ is counter clockwise to stay compatible with Xrandr
10804 	 * while i915 HW rotation is clockwise, thats why this swapping.
10805 	 */
10806 	switch (val & PLANE_CTL_ROTATE_MASK) {
10807 	case PLANE_CTL_ROTATE_0:
10808 		plane_config->rotation = DRM_MODE_ROTATE_0;
10809 		break;
10810 	case PLANE_CTL_ROTATE_90:
10811 		plane_config->rotation = DRM_MODE_ROTATE_270;
10812 		break;
10813 	case PLANE_CTL_ROTATE_180:
10814 		plane_config->rotation = DRM_MODE_ROTATE_180;
10815 		break;
10816 	case PLANE_CTL_ROTATE_270:
10817 		plane_config->rotation = DRM_MODE_ROTATE_90;
10818 		break;
10819 	}
10820 
10821 	if (INTEL_GEN(dev_priv) >= 10 &&
10822 	    val & PLANE_CTL_FLIP_HORIZONTAL)
10823 		plane_config->rotation |= DRM_MODE_REFLECT_X;
10824 
10825 	/* 90/270 degree rotation would require extra work */
10826 	if (drm_rotation_90_or_270(plane_config->rotation))
10827 		goto error;
10828 
10829 	base = intel_de_read(dev_priv, PLANE_SURF(pipe, plane_id)) & 0xfffff000;
10830 	plane_config->base = base;
10831 
10832 	offset = intel_de_read(dev_priv, PLANE_OFFSET(pipe, plane_id));
10833 
10834 	val = intel_de_read(dev_priv, PLANE_SIZE(pipe, plane_id));
10835 	fb->height = ((val >> 16) & 0xffff) + 1;
10836 	fb->width = ((val >> 0) & 0xffff) + 1;
10837 
10838 	val = intel_de_read(dev_priv, PLANE_STRIDE(pipe, plane_id));
10839 	stride_mult = skl_plane_stride_mult(fb, 0, DRM_MODE_ROTATE_0);
10840 	fb->pitches[0] = (val & 0x3ff) * stride_mult;
10841 
10842 	aligned_height = intel_fb_align_height(fb, 0, fb->height);
10843 
10844 	plane_config->size = fb->pitches[0] * aligned_height;
10845 
10846 	drm_dbg_kms(&dev_priv->drm,
10847 		    "%s/%s with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
10848 		    crtc->base.name, plane->base.name, fb->width, fb->height,
10849 		    fb->format->cpp[0] * 8, base, fb->pitches[0],
10850 		    plane_config->size);
10851 
10852 	plane_config->fb = intel_fb;
10853 	return;
10854 
10855 error:
10856 	kfree(intel_fb);
10857 }
10858 
10859 static void ilk_get_pfit_config(struct intel_crtc_state *crtc_state)
10860 {
10861 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
10862 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
10863 	u32 ctl, pos, size;
10864 
10865 	ctl = intel_de_read(dev_priv, PF_CTL(crtc->pipe));
10866 	if ((ctl & PF_ENABLE) == 0)
10867 		return;
10868 
10869 	crtc_state->pch_pfit.enabled = true;
10870 
10871 	pos = intel_de_read(dev_priv, PF_WIN_POS(crtc->pipe));
10872 	size = intel_de_read(dev_priv, PF_WIN_SZ(crtc->pipe));
10873 
10874 	ilk_get_pfit_pos_size(crtc_state, pos, size);
10875 
10876 	/*
10877 	 * We currently do not free assignements of panel fitters on
10878 	 * ivb/hsw (since we don't use the higher upscaling modes which
10879 	 * differentiates them) so just WARN about this case for now.
10880 	 */
10881 	drm_WARN_ON(&dev_priv->drm, IS_GEN(dev_priv, 7) &&
10882 		    (ctl & PF_PIPE_SEL_MASK_IVB) != PF_PIPE_SEL_IVB(crtc->pipe));
10883 }
10884 
10885 static bool ilk_get_pipe_config(struct intel_crtc *crtc,
10886 				struct intel_crtc_state *pipe_config)
10887 {
10888 	struct drm_device *dev = crtc->base.dev;
10889 	struct drm_i915_private *dev_priv = to_i915(dev);
10890 	enum intel_display_power_domain power_domain;
10891 	intel_wakeref_t wakeref;
10892 	u32 tmp;
10893 	bool ret;
10894 
10895 	power_domain = POWER_DOMAIN_PIPE(crtc->pipe);
10896 	wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain);
10897 	if (!wakeref)
10898 		return false;
10899 
10900 	pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe;
10901 	pipe_config->shared_dpll = NULL;
10902 
10903 	ret = false;
10904 	tmp = intel_de_read(dev_priv, PIPECONF(crtc->pipe));
10905 	if (!(tmp & PIPECONF_ENABLE))
10906 		goto out;
10907 
10908 	switch (tmp & PIPECONF_BPC_MASK) {
10909 	case PIPECONF_6BPC:
10910 		pipe_config->pipe_bpp = 18;
10911 		break;
10912 	case PIPECONF_8BPC:
10913 		pipe_config->pipe_bpp = 24;
10914 		break;
10915 	case PIPECONF_10BPC:
10916 		pipe_config->pipe_bpp = 30;
10917 		break;
10918 	case PIPECONF_12BPC:
10919 		pipe_config->pipe_bpp = 36;
10920 		break;
10921 	default:
10922 		break;
10923 	}
10924 
10925 	if (tmp & PIPECONF_COLOR_RANGE_SELECT)
10926 		pipe_config->limited_color_range = true;
10927 
10928 	switch (tmp & PIPECONF_OUTPUT_COLORSPACE_MASK) {
10929 	case PIPECONF_OUTPUT_COLORSPACE_YUV601:
10930 	case PIPECONF_OUTPUT_COLORSPACE_YUV709:
10931 		pipe_config->output_format = INTEL_OUTPUT_FORMAT_YCBCR444;
10932 		break;
10933 	default:
10934 		pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
10935 		break;
10936 	}
10937 
10938 	pipe_config->gamma_mode = (tmp & PIPECONF_GAMMA_MODE_MASK_ILK) >>
10939 		PIPECONF_GAMMA_MODE_SHIFT;
10940 
10941 	pipe_config->csc_mode = intel_de_read(dev_priv,
10942 					      PIPE_CSC_MODE(crtc->pipe));
10943 
10944 	i9xx_get_pipe_color_config(pipe_config);
10945 	intel_color_get_config(pipe_config);
10946 
10947 	if (intel_de_read(dev_priv, PCH_TRANSCONF(crtc->pipe)) & TRANS_ENABLE) {
10948 		struct intel_shared_dpll *pll;
10949 		enum intel_dpll_id pll_id;
10950 		bool pll_active;
10951 
10952 		pipe_config->has_pch_encoder = true;
10953 
10954 		tmp = intel_de_read(dev_priv, FDI_RX_CTL(crtc->pipe));
10955 		pipe_config->fdi_lanes = ((FDI_DP_PORT_WIDTH_MASK & tmp) >>
10956 					  FDI_DP_PORT_WIDTH_SHIFT) + 1;
10957 
10958 		ilk_get_fdi_m_n_config(crtc, pipe_config);
10959 
10960 		if (HAS_PCH_IBX(dev_priv)) {
10961 			/*
10962 			 * The pipe->pch transcoder and pch transcoder->pll
10963 			 * mapping is fixed.
10964 			 */
10965 			pll_id = (enum intel_dpll_id) crtc->pipe;
10966 		} else {
10967 			tmp = intel_de_read(dev_priv, PCH_DPLL_SEL);
10968 			if (tmp & TRANS_DPLLB_SEL(crtc->pipe))
10969 				pll_id = DPLL_ID_PCH_PLL_B;
10970 			else
10971 				pll_id= DPLL_ID_PCH_PLL_A;
10972 		}
10973 
10974 		pipe_config->shared_dpll =
10975 			intel_get_shared_dpll_by_id(dev_priv, pll_id);
10976 		pll = pipe_config->shared_dpll;
10977 
10978 		pll_active = intel_dpll_get_hw_state(dev_priv, pll,
10979 						     &pipe_config->dpll_hw_state);
10980 		drm_WARN_ON(dev, !pll_active);
10981 
10982 		tmp = pipe_config->dpll_hw_state.dpll;
10983 		pipe_config->pixel_multiplier =
10984 			((tmp & PLL_REF_SDVO_HDMI_MULTIPLIER_MASK)
10985 			 >> PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT) + 1;
10986 
10987 		ilk_pch_clock_get(crtc, pipe_config);
10988 	} else {
10989 		pipe_config->pixel_multiplier = 1;
10990 	}
10991 
10992 	intel_get_transcoder_timings(crtc, pipe_config);
10993 	intel_get_pipe_src_size(crtc, pipe_config);
10994 
10995 	ilk_get_pfit_config(pipe_config);
10996 
10997 	ret = true;
10998 
10999 out:
11000 	intel_display_power_put(dev_priv, power_domain, wakeref);
11001 
11002 	return ret;
11003 }
11004 
11005 static int hsw_crtc_compute_clock(struct intel_crtc *crtc,
11006 				  struct intel_crtc_state *crtc_state)
11007 {
11008 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
11009 	struct intel_atomic_state *state =
11010 		to_intel_atomic_state(crtc_state->uapi.state);
11011 
11012 	if (!intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DSI) ||
11013 	    INTEL_GEN(dev_priv) >= 11) {
11014 		struct intel_encoder *encoder =
11015 			intel_get_crtc_new_encoder(state, crtc_state);
11016 
11017 		if (!intel_reserve_shared_dplls(state, crtc, encoder)) {
11018 			drm_dbg_kms(&dev_priv->drm,
11019 				    "failed to find PLL for pipe %c\n",
11020 				    pipe_name(crtc->pipe));
11021 			return -EINVAL;
11022 		}
11023 	}
11024 
11025 	return 0;
11026 }
11027 
11028 static void dg1_get_ddi_pll(struct drm_i915_private *dev_priv, enum port port,
11029 			    struct intel_crtc_state *pipe_config)
11030 {
11031 	enum icl_port_dpll_id port_dpll_id = ICL_PORT_DPLL_DEFAULT;
11032 	enum phy phy = intel_port_to_phy(dev_priv, port);
11033 	struct icl_port_dpll *port_dpll;
11034 	struct intel_shared_dpll *pll;
11035 	enum intel_dpll_id id;
11036 	bool pll_active;
11037 	u32 clk_sel;
11038 
11039 	clk_sel = intel_de_read(dev_priv, DG1_DPCLKA_CFGCR0(phy)) & DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
11040 	id = DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_DPLL_MAP(clk_sel, phy);
11041 
11042 	if (WARN_ON(id > DPLL_ID_DG1_DPLL3))
11043 		return;
11044 
11045 	pll = intel_get_shared_dpll_by_id(dev_priv, id);
11046 	port_dpll = &pipe_config->icl_port_dplls[port_dpll_id];
11047 
11048 	port_dpll->pll = pll;
11049 	pll_active = intel_dpll_get_hw_state(dev_priv, pll,
11050 					     &port_dpll->hw_state);
11051 	drm_WARN_ON(&dev_priv->drm, !pll_active);
11052 
11053 	icl_set_active_port_dpll(pipe_config, port_dpll_id);
11054 }
11055 
11056 static void icl_get_ddi_pll(struct drm_i915_private *dev_priv, enum port port,
11057 			    struct intel_crtc_state *pipe_config)
11058 {
11059 	enum phy phy = intel_port_to_phy(dev_priv, port);
11060 	enum icl_port_dpll_id port_dpll_id;
11061 	struct icl_port_dpll *port_dpll;
11062 	struct intel_shared_dpll *pll;
11063 	enum intel_dpll_id id;
11064 	bool pll_active;
11065 	u32 temp;
11066 
11067 	if (intel_phy_is_combo(dev_priv, phy)) {
11068 		u32 mask, shift;
11069 
11070 		if (IS_ROCKETLAKE(dev_priv)) {
11071 			mask = RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
11072 			shift = RKL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy);
11073 		} else {
11074 			mask = ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
11075 			shift = ICL_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy);
11076 		}
11077 
11078 		temp = intel_de_read(dev_priv, ICL_DPCLKA_CFGCR0) & mask;
11079 		id = temp >> shift;
11080 		port_dpll_id = ICL_PORT_DPLL_DEFAULT;
11081 	} else if (intel_phy_is_tc(dev_priv, phy)) {
11082 		u32 clk_sel = intel_de_read(dev_priv, DDI_CLK_SEL(port)) & DDI_CLK_SEL_MASK;
11083 
11084 		if (clk_sel == DDI_CLK_SEL_MG) {
11085 			id = icl_tc_port_to_pll_id(intel_port_to_tc(dev_priv,
11086 								    port));
11087 			port_dpll_id = ICL_PORT_DPLL_MG_PHY;
11088 		} else {
11089 			drm_WARN_ON(&dev_priv->drm,
11090 				    clk_sel < DDI_CLK_SEL_TBT_162);
11091 			id = DPLL_ID_ICL_TBTPLL;
11092 			port_dpll_id = ICL_PORT_DPLL_DEFAULT;
11093 		}
11094 	} else {
11095 		drm_WARN(&dev_priv->drm, 1, "Invalid port %x\n", port);
11096 		return;
11097 	}
11098 
11099 	pll = intel_get_shared_dpll_by_id(dev_priv, id);
11100 	port_dpll = &pipe_config->icl_port_dplls[port_dpll_id];
11101 
11102 	port_dpll->pll = pll;
11103 	pll_active = intel_dpll_get_hw_state(dev_priv, pll,
11104 					     &port_dpll->hw_state);
11105 	drm_WARN_ON(&dev_priv->drm, !pll_active);
11106 
11107 	icl_set_active_port_dpll(pipe_config, port_dpll_id);
11108 }
11109 
11110 static void cnl_get_ddi_pll(struct drm_i915_private *dev_priv, enum port port,
11111 			    struct intel_crtc_state *pipe_config)
11112 {
11113 	struct intel_shared_dpll *pll;
11114 	enum intel_dpll_id id;
11115 	bool pll_active;
11116 	u32 temp;
11117 
11118 	temp = intel_de_read(dev_priv, DPCLKA_CFGCR0) & DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port);
11119 	id = temp >> DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port);
11120 
11121 	if (drm_WARN_ON(&dev_priv->drm, id < SKL_DPLL0 || id > SKL_DPLL2))
11122 		return;
11123 
11124 	pll = intel_get_shared_dpll_by_id(dev_priv, id);
11125 
11126 	pipe_config->shared_dpll = pll;
11127 	pll_active = intel_dpll_get_hw_state(dev_priv, pll,
11128 					     &pipe_config->dpll_hw_state);
11129 	drm_WARN_ON(&dev_priv->drm, !pll_active);
11130 }
11131 
11132 static void bxt_get_ddi_pll(struct drm_i915_private *dev_priv,
11133 				enum port port,
11134 				struct intel_crtc_state *pipe_config)
11135 {
11136 	struct intel_shared_dpll *pll;
11137 	enum intel_dpll_id id;
11138 	bool pll_active;
11139 
11140 	switch (port) {
11141 	case PORT_A:
11142 		id = DPLL_ID_SKL_DPLL0;
11143 		break;
11144 	case PORT_B:
11145 		id = DPLL_ID_SKL_DPLL1;
11146 		break;
11147 	case PORT_C:
11148 		id = DPLL_ID_SKL_DPLL2;
11149 		break;
11150 	default:
11151 		drm_err(&dev_priv->drm, "Incorrect port type\n");
11152 		return;
11153 	}
11154 
11155 	pll = intel_get_shared_dpll_by_id(dev_priv, id);
11156 
11157 	pipe_config->shared_dpll = pll;
11158 	pll_active = intel_dpll_get_hw_state(dev_priv, pll,
11159 					     &pipe_config->dpll_hw_state);
11160 	drm_WARN_ON(&dev_priv->drm, !pll_active);
11161 }
11162 
11163 static void skl_get_ddi_pll(struct drm_i915_private *dev_priv, enum port port,
11164 			    struct intel_crtc_state *pipe_config)
11165 {
11166 	struct intel_shared_dpll *pll;
11167 	enum intel_dpll_id id;
11168 	bool pll_active;
11169 	u32 temp;
11170 
11171 	temp = intel_de_read(dev_priv, DPLL_CTRL2) & DPLL_CTRL2_DDI_CLK_SEL_MASK(port);
11172 	id = temp >> (port * 3 + 1);
11173 
11174 	if (drm_WARN_ON(&dev_priv->drm, id < SKL_DPLL0 || id > SKL_DPLL3))
11175 		return;
11176 
11177 	pll = intel_get_shared_dpll_by_id(dev_priv, id);
11178 
11179 	pipe_config->shared_dpll = pll;
11180 	pll_active = intel_dpll_get_hw_state(dev_priv, pll,
11181 					     &pipe_config->dpll_hw_state);
11182 	drm_WARN_ON(&dev_priv->drm, !pll_active);
11183 }
11184 
11185 static void hsw_get_ddi_pll(struct drm_i915_private *dev_priv, enum port port,
11186 			    struct intel_crtc_state *pipe_config)
11187 {
11188 	struct intel_shared_dpll *pll;
11189 	enum intel_dpll_id id;
11190 	u32 ddi_pll_sel = intel_de_read(dev_priv, PORT_CLK_SEL(port));
11191 	bool pll_active;
11192 
11193 	switch (ddi_pll_sel) {
11194 	case PORT_CLK_SEL_WRPLL1:
11195 		id = DPLL_ID_WRPLL1;
11196 		break;
11197 	case PORT_CLK_SEL_WRPLL2:
11198 		id = DPLL_ID_WRPLL2;
11199 		break;
11200 	case PORT_CLK_SEL_SPLL:
11201 		id = DPLL_ID_SPLL;
11202 		break;
11203 	case PORT_CLK_SEL_LCPLL_810:
11204 		id = DPLL_ID_LCPLL_810;
11205 		break;
11206 	case PORT_CLK_SEL_LCPLL_1350:
11207 		id = DPLL_ID_LCPLL_1350;
11208 		break;
11209 	case PORT_CLK_SEL_LCPLL_2700:
11210 		id = DPLL_ID_LCPLL_2700;
11211 		break;
11212 	default:
11213 		MISSING_CASE(ddi_pll_sel);
11214 		fallthrough;
11215 	case PORT_CLK_SEL_NONE:
11216 		return;
11217 	}
11218 
11219 	pll = intel_get_shared_dpll_by_id(dev_priv, id);
11220 
11221 	pipe_config->shared_dpll = pll;
11222 	pll_active = intel_dpll_get_hw_state(dev_priv, pll,
11223 					     &pipe_config->dpll_hw_state);
11224 	drm_WARN_ON(&dev_priv->drm, !pll_active);
11225 }
11226 
11227 static bool hsw_get_transcoder_state(struct intel_crtc *crtc,
11228 				     struct intel_crtc_state *pipe_config,
11229 				     u64 *power_domain_mask,
11230 				     intel_wakeref_t *wakerefs)
11231 {
11232 	struct drm_device *dev = crtc->base.dev;
11233 	struct drm_i915_private *dev_priv = to_i915(dev);
11234 	enum intel_display_power_domain power_domain;
11235 	unsigned long panel_transcoder_mask = BIT(TRANSCODER_EDP);
11236 	unsigned long enabled_panel_transcoders = 0;
11237 	enum transcoder panel_transcoder;
11238 	intel_wakeref_t wf;
11239 	u32 tmp;
11240 
11241 	if (INTEL_GEN(dev_priv) >= 11)
11242 		panel_transcoder_mask |=
11243 			BIT(TRANSCODER_DSI_0) | BIT(TRANSCODER_DSI_1);
11244 
11245 	/*
11246 	 * The pipe->transcoder mapping is fixed with the exception of the eDP
11247 	 * and DSI transcoders handled below.
11248 	 */
11249 	pipe_config->cpu_transcoder = (enum transcoder) crtc->pipe;
11250 
11251 	/*
11252 	 * XXX: Do intel_display_power_get_if_enabled before reading this (for
11253 	 * consistency and less surprising code; it's in always on power).
11254 	 */
11255 	for_each_cpu_transcoder_masked(dev_priv, panel_transcoder,
11256 				       panel_transcoder_mask) {
11257 		bool force_thru = false;
11258 		enum pipe trans_pipe;
11259 
11260 		tmp = intel_de_read(dev_priv,
11261 				    TRANS_DDI_FUNC_CTL(panel_transcoder));
11262 		if (!(tmp & TRANS_DDI_FUNC_ENABLE))
11263 			continue;
11264 
11265 		/*
11266 		 * Log all enabled ones, only use the first one.
11267 		 *
11268 		 * FIXME: This won't work for two separate DSI displays.
11269 		 */
11270 		enabled_panel_transcoders |= BIT(panel_transcoder);
11271 		if (enabled_panel_transcoders != BIT(panel_transcoder))
11272 			continue;
11273 
11274 		switch (tmp & TRANS_DDI_EDP_INPUT_MASK) {
11275 		default:
11276 			drm_WARN(dev, 1,
11277 				 "unknown pipe linked to transcoder %s\n",
11278 				 transcoder_name(panel_transcoder));
11279 			fallthrough;
11280 		case TRANS_DDI_EDP_INPUT_A_ONOFF:
11281 			force_thru = true;
11282 			fallthrough;
11283 		case TRANS_DDI_EDP_INPUT_A_ON:
11284 			trans_pipe = PIPE_A;
11285 			break;
11286 		case TRANS_DDI_EDP_INPUT_B_ONOFF:
11287 			trans_pipe = PIPE_B;
11288 			break;
11289 		case TRANS_DDI_EDP_INPUT_C_ONOFF:
11290 			trans_pipe = PIPE_C;
11291 			break;
11292 		case TRANS_DDI_EDP_INPUT_D_ONOFF:
11293 			trans_pipe = PIPE_D;
11294 			break;
11295 		}
11296 
11297 		if (trans_pipe == crtc->pipe) {
11298 			pipe_config->cpu_transcoder = panel_transcoder;
11299 			pipe_config->pch_pfit.force_thru = force_thru;
11300 		}
11301 	}
11302 
11303 	/*
11304 	 * Valid combos: none, eDP, DSI0, DSI1, DSI0+DSI1
11305 	 */
11306 	drm_WARN_ON(dev, (enabled_panel_transcoders & BIT(TRANSCODER_EDP)) &&
11307 		    enabled_panel_transcoders != BIT(TRANSCODER_EDP));
11308 
11309 	power_domain = POWER_DOMAIN_TRANSCODER(pipe_config->cpu_transcoder);
11310 	drm_WARN_ON(dev, *power_domain_mask & BIT_ULL(power_domain));
11311 
11312 	wf = intel_display_power_get_if_enabled(dev_priv, power_domain);
11313 	if (!wf)
11314 		return false;
11315 
11316 	wakerefs[power_domain] = wf;
11317 	*power_domain_mask |= BIT_ULL(power_domain);
11318 
11319 	tmp = intel_de_read(dev_priv, PIPECONF(pipe_config->cpu_transcoder));
11320 
11321 	return tmp & PIPECONF_ENABLE;
11322 }
11323 
11324 static bool bxt_get_dsi_transcoder_state(struct intel_crtc *crtc,
11325 					 struct intel_crtc_state *pipe_config,
11326 					 u64 *power_domain_mask,
11327 					 intel_wakeref_t *wakerefs)
11328 {
11329 	struct drm_device *dev = crtc->base.dev;
11330 	struct drm_i915_private *dev_priv = to_i915(dev);
11331 	enum intel_display_power_domain power_domain;
11332 	enum transcoder cpu_transcoder;
11333 	intel_wakeref_t wf;
11334 	enum port port;
11335 	u32 tmp;
11336 
11337 	for_each_port_masked(port, BIT(PORT_A) | BIT(PORT_C)) {
11338 		if (port == PORT_A)
11339 			cpu_transcoder = TRANSCODER_DSI_A;
11340 		else
11341 			cpu_transcoder = TRANSCODER_DSI_C;
11342 
11343 		power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
11344 		drm_WARN_ON(dev, *power_domain_mask & BIT_ULL(power_domain));
11345 
11346 		wf = intel_display_power_get_if_enabled(dev_priv, power_domain);
11347 		if (!wf)
11348 			continue;
11349 
11350 		wakerefs[power_domain] = wf;
11351 		*power_domain_mask |= BIT_ULL(power_domain);
11352 
11353 		/*
11354 		 * The PLL needs to be enabled with a valid divider
11355 		 * configuration, otherwise accessing DSI registers will hang
11356 		 * the machine. See BSpec North Display Engine
11357 		 * registers/MIPI[BXT]. We can break out here early, since we
11358 		 * need the same DSI PLL to be enabled for both DSI ports.
11359 		 */
11360 		if (!bxt_dsi_pll_is_enabled(dev_priv))
11361 			break;
11362 
11363 		/* XXX: this works for video mode only */
11364 		tmp = intel_de_read(dev_priv, BXT_MIPI_PORT_CTRL(port));
11365 		if (!(tmp & DPI_ENABLE))
11366 			continue;
11367 
11368 		tmp = intel_de_read(dev_priv, MIPI_CTRL(port));
11369 		if ((tmp & BXT_PIPE_SELECT_MASK) != BXT_PIPE_SELECT(crtc->pipe))
11370 			continue;
11371 
11372 		pipe_config->cpu_transcoder = cpu_transcoder;
11373 		break;
11374 	}
11375 
11376 	return transcoder_is_dsi(pipe_config->cpu_transcoder);
11377 }
11378 
11379 static void hsw_get_ddi_port_state(struct intel_crtc *crtc,
11380 				   struct intel_crtc_state *pipe_config)
11381 {
11382 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
11383 	enum transcoder cpu_transcoder = pipe_config->cpu_transcoder;
11384 	enum port port;
11385 	u32 tmp;
11386 
11387 	if (transcoder_is_dsi(cpu_transcoder)) {
11388 		port = (cpu_transcoder == TRANSCODER_DSI_A) ?
11389 						PORT_A : PORT_B;
11390 	} else {
11391 		tmp = intel_de_read(dev_priv,
11392 				    TRANS_DDI_FUNC_CTL(cpu_transcoder));
11393 		if (!(tmp & TRANS_DDI_FUNC_ENABLE))
11394 			return;
11395 		if (INTEL_GEN(dev_priv) >= 12)
11396 			port = TGL_TRANS_DDI_FUNC_CTL_VAL_TO_PORT(tmp);
11397 		else
11398 			port = TRANS_DDI_FUNC_CTL_VAL_TO_PORT(tmp);
11399 	}
11400 
11401 	if (IS_DG1(dev_priv))
11402 		dg1_get_ddi_pll(dev_priv, port, pipe_config);
11403 	else if (INTEL_GEN(dev_priv) >= 11)
11404 		icl_get_ddi_pll(dev_priv, port, pipe_config);
11405 	else if (IS_CANNONLAKE(dev_priv))
11406 		cnl_get_ddi_pll(dev_priv, port, pipe_config);
11407 	else if (IS_GEN9_LP(dev_priv))
11408 		bxt_get_ddi_pll(dev_priv, port, pipe_config);
11409 	else if (IS_GEN9_BC(dev_priv))
11410 		skl_get_ddi_pll(dev_priv, port, pipe_config);
11411 	else
11412 		hsw_get_ddi_pll(dev_priv, port, pipe_config);
11413 
11414 	/*
11415 	 * Haswell has only FDI/PCH transcoder A. It is which is connected to
11416 	 * DDI E. So just check whether this pipe is wired to DDI E and whether
11417 	 * the PCH transcoder is on.
11418 	 */
11419 	if (INTEL_GEN(dev_priv) < 9 &&
11420 	    (port == PORT_E) && intel_de_read(dev_priv, LPT_TRANSCONF) & TRANS_ENABLE) {
11421 		pipe_config->has_pch_encoder = true;
11422 
11423 		tmp = intel_de_read(dev_priv, FDI_RX_CTL(PIPE_A));
11424 		pipe_config->fdi_lanes = ((FDI_DP_PORT_WIDTH_MASK & tmp) >>
11425 					  FDI_DP_PORT_WIDTH_SHIFT) + 1;
11426 
11427 		ilk_get_fdi_m_n_config(crtc, pipe_config);
11428 	}
11429 }
11430 
11431 static bool hsw_get_pipe_config(struct intel_crtc *crtc,
11432 				struct intel_crtc_state *pipe_config)
11433 {
11434 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
11435 	intel_wakeref_t wakerefs[POWER_DOMAIN_NUM], wf;
11436 	enum intel_display_power_domain power_domain;
11437 	u64 power_domain_mask;
11438 	bool active;
11439 	u32 tmp;
11440 
11441 	pipe_config->master_transcoder = INVALID_TRANSCODER;
11442 
11443 	power_domain = POWER_DOMAIN_PIPE(crtc->pipe);
11444 	wf = intel_display_power_get_if_enabled(dev_priv, power_domain);
11445 	if (!wf)
11446 		return false;
11447 
11448 	wakerefs[power_domain] = wf;
11449 	power_domain_mask = BIT_ULL(power_domain);
11450 
11451 	pipe_config->shared_dpll = NULL;
11452 
11453 	active = hsw_get_transcoder_state(crtc, pipe_config,
11454 					  &power_domain_mask, wakerefs);
11455 
11456 	if (IS_GEN9_LP(dev_priv) &&
11457 	    bxt_get_dsi_transcoder_state(crtc, pipe_config,
11458 					 &power_domain_mask, wakerefs)) {
11459 		drm_WARN_ON(&dev_priv->drm, active);
11460 		active = true;
11461 	}
11462 
11463 	intel_dsc_get_config(pipe_config);
11464 
11465 	if (!active) {
11466 		/* bigjoiner slave doesn't enable transcoder */
11467 		if (!pipe_config->bigjoiner_slave)
11468 			goto out;
11469 
11470 		active = true;
11471 		pipe_config->pixel_multiplier = 1;
11472 
11473 		/* we cannot read out most state, so don't bother.. */
11474 		pipe_config->quirks |= PIPE_CONFIG_QUIRK_BIGJOINER_SLAVE;
11475 	} else if (!transcoder_is_dsi(pipe_config->cpu_transcoder) ||
11476 	    INTEL_GEN(dev_priv) >= 11) {
11477 		hsw_get_ddi_port_state(crtc, pipe_config);
11478 		intel_get_transcoder_timings(crtc, pipe_config);
11479 	}
11480 
11481 	intel_get_pipe_src_size(crtc, pipe_config);
11482 
11483 	if (IS_HASWELL(dev_priv)) {
11484 		u32 tmp = intel_de_read(dev_priv,
11485 					PIPECONF(pipe_config->cpu_transcoder));
11486 
11487 		if (tmp & PIPECONF_OUTPUT_COLORSPACE_YUV_HSW)
11488 			pipe_config->output_format = INTEL_OUTPUT_FORMAT_YCBCR444;
11489 		else
11490 			pipe_config->output_format = INTEL_OUTPUT_FORMAT_RGB;
11491 	} else {
11492 		pipe_config->output_format =
11493 			bdw_get_pipemisc_output_format(crtc);
11494 	}
11495 
11496 	pipe_config->gamma_mode = intel_de_read(dev_priv,
11497 						GAMMA_MODE(crtc->pipe));
11498 
11499 	pipe_config->csc_mode = intel_de_read(dev_priv,
11500 					      PIPE_CSC_MODE(crtc->pipe));
11501 
11502 	if (INTEL_GEN(dev_priv) >= 9) {
11503 		tmp = intel_de_read(dev_priv, SKL_BOTTOM_COLOR(crtc->pipe));
11504 
11505 		if (tmp & SKL_BOTTOM_COLOR_GAMMA_ENABLE)
11506 			pipe_config->gamma_enable = true;
11507 
11508 		if (tmp & SKL_BOTTOM_COLOR_CSC_ENABLE)
11509 			pipe_config->csc_enable = true;
11510 	} else {
11511 		i9xx_get_pipe_color_config(pipe_config);
11512 	}
11513 
11514 	intel_color_get_config(pipe_config);
11515 
11516 	tmp = intel_de_read(dev_priv, WM_LINETIME(crtc->pipe));
11517 	pipe_config->linetime = REG_FIELD_GET(HSW_LINETIME_MASK, tmp);
11518 	if (IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
11519 		pipe_config->ips_linetime =
11520 			REG_FIELD_GET(HSW_IPS_LINETIME_MASK, tmp);
11521 
11522 	power_domain = POWER_DOMAIN_PIPE_PANEL_FITTER(crtc->pipe);
11523 	drm_WARN_ON(&dev_priv->drm, power_domain_mask & BIT_ULL(power_domain));
11524 
11525 	wf = intel_display_power_get_if_enabled(dev_priv, power_domain);
11526 	if (wf) {
11527 		wakerefs[power_domain] = wf;
11528 		power_domain_mask |= BIT_ULL(power_domain);
11529 
11530 		if (INTEL_GEN(dev_priv) >= 9)
11531 			skl_get_pfit_config(pipe_config);
11532 		else
11533 			ilk_get_pfit_config(pipe_config);
11534 	}
11535 
11536 	if (hsw_crtc_supports_ips(crtc)) {
11537 		if (IS_HASWELL(dev_priv))
11538 			pipe_config->ips_enabled = intel_de_read(dev_priv,
11539 								 IPS_CTL) & IPS_ENABLE;
11540 		else {
11541 			/*
11542 			 * We cannot readout IPS state on broadwell, set to
11543 			 * true so we can set it to a defined state on first
11544 			 * commit.
11545 			 */
11546 			pipe_config->ips_enabled = true;
11547 		}
11548 	}
11549 
11550 	if (pipe_config->bigjoiner_slave) {
11551 		/* Cannot be read out as a slave, set to 0. */
11552 		pipe_config->pixel_multiplier = 0;
11553 	} else if (pipe_config->cpu_transcoder != TRANSCODER_EDP &&
11554 	    !transcoder_is_dsi(pipe_config->cpu_transcoder)) {
11555 		pipe_config->pixel_multiplier =
11556 			intel_de_read(dev_priv,
11557 				      PIPE_MULT(pipe_config->cpu_transcoder)) + 1;
11558 	} else {
11559 		pipe_config->pixel_multiplier = 1;
11560 	}
11561 
11562 out:
11563 	for_each_power_domain(power_domain, power_domain_mask)
11564 		intel_display_power_put(dev_priv,
11565 					power_domain, wakerefs[power_domain]);
11566 
11567 	return active;
11568 }
11569 
11570 static bool intel_crtc_get_pipe_config(struct intel_crtc_state *crtc_state)
11571 {
11572 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
11573 	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
11574 
11575 	if (!i915->display.get_pipe_config(crtc, crtc_state))
11576 		return false;
11577 
11578 	crtc_state->hw.active = true;
11579 
11580 	intel_crtc_readout_derived_state(crtc_state);
11581 
11582 	return true;
11583 }
11584 
11585 static u32 intel_cursor_base(const struct intel_plane_state *plane_state)
11586 {
11587 	struct drm_i915_private *dev_priv =
11588 		to_i915(plane_state->uapi.plane->dev);
11589 	const struct drm_framebuffer *fb = plane_state->hw.fb;
11590 	const struct drm_i915_gem_object *obj = intel_fb_obj(fb);
11591 	u32 base;
11592 
11593 	if (INTEL_INFO(dev_priv)->display.cursor_needs_physical)
11594 		base = sg_dma_address(obj->mm.pages->sgl);
11595 	else
11596 		base = intel_plane_ggtt_offset(plane_state);
11597 
11598 	return base + plane_state->color_plane[0].offset;
11599 }
11600 
11601 static u32 intel_cursor_position(const struct intel_plane_state *plane_state)
11602 {
11603 	int x = plane_state->uapi.dst.x1;
11604 	int y = plane_state->uapi.dst.y1;
11605 	u32 pos = 0;
11606 
11607 	if (x < 0) {
11608 		pos |= CURSOR_POS_SIGN << CURSOR_X_SHIFT;
11609 		x = -x;
11610 	}
11611 	pos |= x << CURSOR_X_SHIFT;
11612 
11613 	if (y < 0) {
11614 		pos |= CURSOR_POS_SIGN << CURSOR_Y_SHIFT;
11615 		y = -y;
11616 	}
11617 	pos |= y << CURSOR_Y_SHIFT;
11618 
11619 	return pos;
11620 }
11621 
11622 static bool intel_cursor_size_ok(const struct intel_plane_state *plane_state)
11623 {
11624 	const struct drm_mode_config *config =
11625 		&plane_state->uapi.plane->dev->mode_config;
11626 	int width = drm_rect_width(&plane_state->uapi.dst);
11627 	int height = drm_rect_height(&plane_state->uapi.dst);
11628 
11629 	return width > 0 && width <= config->cursor_width &&
11630 		height > 0 && height <= config->cursor_height;
11631 }
11632 
11633 static int intel_cursor_check_surface(struct intel_plane_state *plane_state)
11634 {
11635 	struct drm_i915_private *dev_priv =
11636 		to_i915(plane_state->uapi.plane->dev);
11637 	unsigned int rotation = plane_state->hw.rotation;
11638 	int src_x, src_y;
11639 	u32 offset;
11640 	int ret;
11641 
11642 	ret = intel_plane_compute_gtt(plane_state);
11643 	if (ret)
11644 		return ret;
11645 
11646 	if (!plane_state->uapi.visible)
11647 		return 0;
11648 
11649 	src_x = plane_state->uapi.src.x1 >> 16;
11650 	src_y = plane_state->uapi.src.y1 >> 16;
11651 
11652 	intel_add_fb_offsets(&src_x, &src_y, plane_state, 0);
11653 	offset = intel_plane_compute_aligned_offset(&src_x, &src_y,
11654 						    plane_state, 0);
11655 
11656 	if (src_x != 0 || src_y != 0) {
11657 		drm_dbg_kms(&dev_priv->drm,
11658 			    "Arbitrary cursor panning not supported\n");
11659 		return -EINVAL;
11660 	}
11661 
11662 	/*
11663 	 * Put the final coordinates back so that the src
11664 	 * coordinate checks will see the right values.
11665 	 */
11666 	drm_rect_translate_to(&plane_state->uapi.src,
11667 			      src_x << 16, src_y << 16);
11668 
11669 	/* ILK+ do this automagically in hardware */
11670 	if (HAS_GMCH(dev_priv) && rotation & DRM_MODE_ROTATE_180) {
11671 		const struct drm_framebuffer *fb = plane_state->hw.fb;
11672 		int src_w = drm_rect_width(&plane_state->uapi.src) >> 16;
11673 		int src_h = drm_rect_height(&plane_state->uapi.src) >> 16;
11674 
11675 		offset += (src_h * src_w - 1) * fb->format->cpp[0];
11676 	}
11677 
11678 	plane_state->color_plane[0].offset = offset;
11679 	plane_state->color_plane[0].x = src_x;
11680 	plane_state->color_plane[0].y = src_y;
11681 
11682 	return 0;
11683 }
11684 
11685 static int intel_check_cursor(struct intel_crtc_state *crtc_state,
11686 			      struct intel_plane_state *plane_state)
11687 {
11688 	const struct drm_framebuffer *fb = plane_state->hw.fb;
11689 	struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev);
11690 	const struct drm_rect src = plane_state->uapi.src;
11691 	const struct drm_rect dst = plane_state->uapi.dst;
11692 	int ret;
11693 
11694 	if (fb && fb->modifier != DRM_FORMAT_MOD_LINEAR) {
11695 		drm_dbg_kms(&i915->drm, "cursor cannot be tiled\n");
11696 		return -EINVAL;
11697 	}
11698 
11699 	ret = intel_atomic_plane_check_clipping(plane_state, crtc_state,
11700 						DRM_PLANE_HELPER_NO_SCALING,
11701 						DRM_PLANE_HELPER_NO_SCALING,
11702 						true);
11703 	if (ret)
11704 		return ret;
11705 
11706 	/* Use the unclipped src/dst rectangles, which we program to hw */
11707 	plane_state->uapi.src = src;
11708 	plane_state->uapi.dst = dst;
11709 
11710 	ret = intel_cursor_check_surface(plane_state);
11711 	if (ret)
11712 		return ret;
11713 
11714 	if (!plane_state->uapi.visible)
11715 		return 0;
11716 
11717 	ret = intel_plane_check_src_coordinates(plane_state);
11718 	if (ret)
11719 		return ret;
11720 
11721 	return 0;
11722 }
11723 
11724 static unsigned int
11725 i845_cursor_max_stride(struct intel_plane *plane,
11726 		       u32 pixel_format, u64 modifier,
11727 		       unsigned int rotation)
11728 {
11729 	return 2048;
11730 }
11731 
11732 static u32 i845_cursor_ctl_crtc(const struct intel_crtc_state *crtc_state)
11733 {
11734 	u32 cntl = 0;
11735 
11736 	if (crtc_state->gamma_enable)
11737 		cntl |= CURSOR_GAMMA_ENABLE;
11738 
11739 	return cntl;
11740 }
11741 
11742 static u32 i845_cursor_ctl(const struct intel_crtc_state *crtc_state,
11743 			   const struct intel_plane_state *plane_state)
11744 {
11745 	return CURSOR_ENABLE |
11746 		CURSOR_FORMAT_ARGB |
11747 		CURSOR_STRIDE(plane_state->color_plane[0].stride);
11748 }
11749 
11750 static bool i845_cursor_size_ok(const struct intel_plane_state *plane_state)
11751 {
11752 	int width = drm_rect_width(&plane_state->uapi.dst);
11753 
11754 	/*
11755 	 * 845g/865g are only limited by the width of their cursors,
11756 	 * the height is arbitrary up to the precision of the register.
11757 	 */
11758 	return intel_cursor_size_ok(plane_state) && IS_ALIGNED(width, 64);
11759 }
11760 
11761 static int i845_check_cursor(struct intel_crtc_state *crtc_state,
11762 			     struct intel_plane_state *plane_state)
11763 {
11764 	const struct drm_framebuffer *fb = plane_state->hw.fb;
11765 	struct drm_i915_private *i915 = to_i915(plane_state->uapi.plane->dev);
11766 	int ret;
11767 
11768 	ret = intel_check_cursor(crtc_state, plane_state);
11769 	if (ret)
11770 		return ret;
11771 
11772 	/* if we want to turn off the cursor ignore width and height */
11773 	if (!fb)
11774 		return 0;
11775 
11776 	/* Check for which cursor types we support */
11777 	if (!i845_cursor_size_ok(plane_state)) {
11778 		drm_dbg_kms(&i915->drm,
11779 			    "Cursor dimension %dx%d not supported\n",
11780 			    drm_rect_width(&plane_state->uapi.dst),
11781 			    drm_rect_height(&plane_state->uapi.dst));
11782 		return -EINVAL;
11783 	}
11784 
11785 	drm_WARN_ON(&i915->drm, plane_state->uapi.visible &&
11786 		    plane_state->color_plane[0].stride != fb->pitches[0]);
11787 
11788 	switch (fb->pitches[0]) {
11789 	case 256:
11790 	case 512:
11791 	case 1024:
11792 	case 2048:
11793 		break;
11794 	default:
11795 		 drm_dbg_kms(&i915->drm, "Invalid cursor stride (%u)\n",
11796 			     fb->pitches[0]);
11797 		return -EINVAL;
11798 	}
11799 
11800 	plane_state->ctl = i845_cursor_ctl(crtc_state, plane_state);
11801 
11802 	return 0;
11803 }
11804 
11805 static void i845_update_cursor(struct intel_plane *plane,
11806 			       const struct intel_crtc_state *crtc_state,
11807 			       const struct intel_plane_state *plane_state)
11808 {
11809 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
11810 	u32 cntl = 0, base = 0, pos = 0, size = 0;
11811 	unsigned long irqflags;
11812 
11813 	if (plane_state && plane_state->uapi.visible) {
11814 		unsigned int width = drm_rect_width(&plane_state->uapi.dst);
11815 		unsigned int height = drm_rect_height(&plane_state->uapi.dst);
11816 
11817 		cntl = plane_state->ctl |
11818 			i845_cursor_ctl_crtc(crtc_state);
11819 
11820 		size = (height << 12) | width;
11821 
11822 		base = intel_cursor_base(plane_state);
11823 		pos = intel_cursor_position(plane_state);
11824 	}
11825 
11826 	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
11827 
11828 	/* On these chipsets we can only modify the base/size/stride
11829 	 * whilst the cursor is disabled.
11830 	 */
11831 	if (plane->cursor.base != base ||
11832 	    plane->cursor.size != size ||
11833 	    plane->cursor.cntl != cntl) {
11834 		intel_de_write_fw(dev_priv, CURCNTR(PIPE_A), 0);
11835 		intel_de_write_fw(dev_priv, CURBASE(PIPE_A), base);
11836 		intel_de_write_fw(dev_priv, CURSIZE, size);
11837 		intel_de_write_fw(dev_priv, CURPOS(PIPE_A), pos);
11838 		intel_de_write_fw(dev_priv, CURCNTR(PIPE_A), cntl);
11839 
11840 		plane->cursor.base = base;
11841 		plane->cursor.size = size;
11842 		plane->cursor.cntl = cntl;
11843 	} else {
11844 		intel_de_write_fw(dev_priv, CURPOS(PIPE_A), pos);
11845 	}
11846 
11847 	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
11848 }
11849 
11850 static void i845_disable_cursor(struct intel_plane *plane,
11851 				const struct intel_crtc_state *crtc_state)
11852 {
11853 	i845_update_cursor(plane, crtc_state, NULL);
11854 }
11855 
11856 static bool i845_cursor_get_hw_state(struct intel_plane *plane,
11857 				     enum pipe *pipe)
11858 {
11859 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
11860 	enum intel_display_power_domain power_domain;
11861 	intel_wakeref_t wakeref;
11862 	bool ret;
11863 
11864 	power_domain = POWER_DOMAIN_PIPE(PIPE_A);
11865 	wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain);
11866 	if (!wakeref)
11867 		return false;
11868 
11869 	ret = intel_de_read(dev_priv, CURCNTR(PIPE_A)) & CURSOR_ENABLE;
11870 
11871 	*pipe = PIPE_A;
11872 
11873 	intel_display_power_put(dev_priv, power_domain, wakeref);
11874 
11875 	return ret;
11876 }
11877 
11878 static unsigned int
11879 i9xx_cursor_max_stride(struct intel_plane *plane,
11880 		       u32 pixel_format, u64 modifier,
11881 		       unsigned int rotation)
11882 {
11883 	return plane->base.dev->mode_config.cursor_width * 4;
11884 }
11885 
11886 static u32 i9xx_cursor_ctl_crtc(const struct intel_crtc_state *crtc_state)
11887 {
11888 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
11889 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
11890 	u32 cntl = 0;
11891 
11892 	if (INTEL_GEN(dev_priv) >= 11)
11893 		return cntl;
11894 
11895 	if (crtc_state->gamma_enable)
11896 		cntl = MCURSOR_GAMMA_ENABLE;
11897 
11898 	if (crtc_state->csc_enable)
11899 		cntl |= MCURSOR_PIPE_CSC_ENABLE;
11900 
11901 	if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv))
11902 		cntl |= MCURSOR_PIPE_SELECT(crtc->pipe);
11903 
11904 	return cntl;
11905 }
11906 
11907 static u32 i9xx_cursor_ctl(const struct intel_crtc_state *crtc_state,
11908 			   const struct intel_plane_state *plane_state)
11909 {
11910 	struct drm_i915_private *dev_priv =
11911 		to_i915(plane_state->uapi.plane->dev);
11912 	u32 cntl = 0;
11913 
11914 	if (IS_GEN(dev_priv, 6) || IS_IVYBRIDGE(dev_priv))
11915 		cntl |= MCURSOR_TRICKLE_FEED_DISABLE;
11916 
11917 	switch (drm_rect_width(&plane_state->uapi.dst)) {
11918 	case 64:
11919 		cntl |= MCURSOR_MODE_64_ARGB_AX;
11920 		break;
11921 	case 128:
11922 		cntl |= MCURSOR_MODE_128_ARGB_AX;
11923 		break;
11924 	case 256:
11925 		cntl |= MCURSOR_MODE_256_ARGB_AX;
11926 		break;
11927 	default:
11928 		MISSING_CASE(drm_rect_width(&plane_state->uapi.dst));
11929 		return 0;
11930 	}
11931 
11932 	if (plane_state->hw.rotation & DRM_MODE_ROTATE_180)
11933 		cntl |= MCURSOR_ROTATE_180;
11934 
11935 	return cntl;
11936 }
11937 
11938 static bool i9xx_cursor_size_ok(const struct intel_plane_state *plane_state)
11939 {
11940 	struct drm_i915_private *dev_priv =
11941 		to_i915(plane_state->uapi.plane->dev);
11942 	int width = drm_rect_width(&plane_state->uapi.dst);
11943 	int height = drm_rect_height(&plane_state->uapi.dst);
11944 
11945 	if (!intel_cursor_size_ok(plane_state))
11946 		return false;
11947 
11948 	/* Cursor width is limited to a few power-of-two sizes */
11949 	switch (width) {
11950 	case 256:
11951 	case 128:
11952 	case 64:
11953 		break;
11954 	default:
11955 		return false;
11956 	}
11957 
11958 	/*
11959 	 * IVB+ have CUR_FBC_CTL which allows an arbitrary cursor
11960 	 * height from 8 lines up to the cursor width, when the
11961 	 * cursor is not rotated. Everything else requires square
11962 	 * cursors.
11963 	 */
11964 	if (HAS_CUR_FBC(dev_priv) &&
11965 	    plane_state->hw.rotation & DRM_MODE_ROTATE_0) {
11966 		if (height < 8 || height > width)
11967 			return false;
11968 	} else {
11969 		if (height != width)
11970 			return false;
11971 	}
11972 
11973 	return true;
11974 }
11975 
11976 static int i9xx_check_cursor(struct intel_crtc_state *crtc_state,
11977 			     struct intel_plane_state *plane_state)
11978 {
11979 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
11980 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
11981 	const struct drm_framebuffer *fb = plane_state->hw.fb;
11982 	enum pipe pipe = plane->pipe;
11983 	int ret;
11984 
11985 	ret = intel_check_cursor(crtc_state, plane_state);
11986 	if (ret)
11987 		return ret;
11988 
11989 	/* if we want to turn off the cursor ignore width and height */
11990 	if (!fb)
11991 		return 0;
11992 
11993 	/* Check for which cursor types we support */
11994 	if (!i9xx_cursor_size_ok(plane_state)) {
11995 		drm_dbg(&dev_priv->drm,
11996 			"Cursor dimension %dx%d not supported\n",
11997 			drm_rect_width(&plane_state->uapi.dst),
11998 			drm_rect_height(&plane_state->uapi.dst));
11999 		return -EINVAL;
12000 	}
12001 
12002 	drm_WARN_ON(&dev_priv->drm, plane_state->uapi.visible &&
12003 		    plane_state->color_plane[0].stride != fb->pitches[0]);
12004 
12005 	if (fb->pitches[0] !=
12006 	    drm_rect_width(&plane_state->uapi.dst) * fb->format->cpp[0]) {
12007 		drm_dbg_kms(&dev_priv->drm,
12008 			    "Invalid cursor stride (%u) (cursor width %d)\n",
12009 			    fb->pitches[0],
12010 			    drm_rect_width(&plane_state->uapi.dst));
12011 		return -EINVAL;
12012 	}
12013 
12014 	/*
12015 	 * There's something wrong with the cursor on CHV pipe C.
12016 	 * If it straddles the left edge of the screen then
12017 	 * moving it away from the edge or disabling it often
12018 	 * results in a pipe underrun, and often that can lead to
12019 	 * dead pipe (constant underrun reported, and it scans
12020 	 * out just a solid color). To recover from that, the
12021 	 * display power well must be turned off and on again.
12022 	 * Refuse the put the cursor into that compromised position.
12023 	 */
12024 	if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_C &&
12025 	    plane_state->uapi.visible && plane_state->uapi.dst.x1 < 0) {
12026 		drm_dbg_kms(&dev_priv->drm,
12027 			    "CHV cursor C not allowed to straddle the left screen edge\n");
12028 		return -EINVAL;
12029 	}
12030 
12031 	plane_state->ctl = i9xx_cursor_ctl(crtc_state, plane_state);
12032 
12033 	return 0;
12034 }
12035 
12036 static void i9xx_update_cursor(struct intel_plane *plane,
12037 			       const struct intel_crtc_state *crtc_state,
12038 			       const struct intel_plane_state *plane_state)
12039 {
12040 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
12041 	enum pipe pipe = plane->pipe;
12042 	u32 cntl = 0, base = 0, pos = 0, fbc_ctl = 0;
12043 	unsigned long irqflags;
12044 
12045 	if (plane_state && plane_state->uapi.visible) {
12046 		unsigned width = drm_rect_width(&plane_state->uapi.dst);
12047 		unsigned height = drm_rect_height(&plane_state->uapi.dst);
12048 
12049 		cntl = plane_state->ctl |
12050 			i9xx_cursor_ctl_crtc(crtc_state);
12051 
12052 		if (width != height)
12053 			fbc_ctl = CUR_FBC_CTL_EN | (height - 1);
12054 
12055 		base = intel_cursor_base(plane_state);
12056 		pos = intel_cursor_position(plane_state);
12057 	}
12058 
12059 	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);
12060 
12061 	/*
12062 	 * On some platforms writing CURCNTR first will also
12063 	 * cause CURPOS to be armed by the CURBASE write.
12064 	 * Without the CURCNTR write the CURPOS write would
12065 	 * arm itself. Thus we always update CURCNTR before
12066 	 * CURPOS.
12067 	 *
12068 	 * On other platforms CURPOS always requires the
12069 	 * CURBASE write to arm the update. Additonally
12070 	 * a write to any of the cursor register will cancel
12071 	 * an already armed cursor update. Thus leaving out
12072 	 * the CURBASE write after CURPOS could lead to a
12073 	 * cursor that doesn't appear to move, or even change
12074 	 * shape. Thus we always write CURBASE.
12075 	 *
12076 	 * The other registers are armed by by the CURBASE write
12077 	 * except when the plane is getting enabled at which time
12078 	 * the CURCNTR write arms the update.
12079 	 */
12080 
12081 	if (INTEL_GEN(dev_priv) >= 9)
12082 		skl_write_cursor_wm(plane, crtc_state);
12083 
12084 	if (!needs_modeset(crtc_state))
12085 		intel_psr2_program_plane_sel_fetch(plane, crtc_state, plane_state, 0);
12086 
12087 	if (plane->cursor.base != base ||
12088 	    plane->cursor.size != fbc_ctl ||
12089 	    plane->cursor.cntl != cntl) {
12090 		if (HAS_CUR_FBC(dev_priv))
12091 			intel_de_write_fw(dev_priv, CUR_FBC_CTL(pipe),
12092 					  fbc_ctl);
12093 		intel_de_write_fw(dev_priv, CURCNTR(pipe), cntl);
12094 		intel_de_write_fw(dev_priv, CURPOS(pipe), pos);
12095 		intel_de_write_fw(dev_priv, CURBASE(pipe), base);
12096 
12097 		plane->cursor.base = base;
12098 		plane->cursor.size = fbc_ctl;
12099 		plane->cursor.cntl = cntl;
12100 	} else {
12101 		intel_de_write_fw(dev_priv, CURPOS(pipe), pos);
12102 		intel_de_write_fw(dev_priv, CURBASE(pipe), base);
12103 	}
12104 
12105 	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
12106 }
12107 
12108 static void i9xx_disable_cursor(struct intel_plane *plane,
12109 				const struct intel_crtc_state *crtc_state)
12110 {
12111 	i9xx_update_cursor(plane, crtc_state, NULL);
12112 }
12113 
12114 static bool i9xx_cursor_get_hw_state(struct intel_plane *plane,
12115 				     enum pipe *pipe)
12116 {
12117 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
12118 	enum intel_display_power_domain power_domain;
12119 	intel_wakeref_t wakeref;
12120 	bool ret;
12121 	u32 val;
12122 
12123 	/*
12124 	 * Not 100% correct for planes that can move between pipes,
12125 	 * but that's only the case for gen2-3 which don't have any
12126 	 * display power wells.
12127 	 */
12128 	power_domain = POWER_DOMAIN_PIPE(plane->pipe);
12129 	wakeref = intel_display_power_get_if_enabled(dev_priv, power_domain);
12130 	if (!wakeref)
12131 		return false;
12132 
12133 	val = intel_de_read(dev_priv, CURCNTR(plane->pipe));
12134 
12135 	ret = val & MCURSOR_MODE;
12136 
12137 	if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv))
12138 		*pipe = plane->pipe;
12139 	else
12140 		*pipe = (val & MCURSOR_PIPE_SELECT_MASK) >>
12141 			MCURSOR_PIPE_SELECT_SHIFT;
12142 
12143 	intel_display_power_put(dev_priv, power_domain, wakeref);
12144 
12145 	return ret;
12146 }
12147 
12148 /* VESA 640x480x72Hz mode to set on the pipe */
12149 static const struct drm_display_mode load_detect_mode = {
12150 	DRM_MODE("640x480", DRM_MODE_TYPE_DEFAULT, 31500, 640, 664,
12151 		 704, 832, 0, 480, 489, 491, 520, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
12152 };
12153 
12154 struct drm_framebuffer *
12155 intel_framebuffer_create(struct drm_i915_gem_object *obj,
12156 			 struct drm_mode_fb_cmd2 *mode_cmd)
12157 {
12158 	struct intel_framebuffer *intel_fb;
12159 	int ret;
12160 
12161 	intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
12162 	if (!intel_fb)
12163 		return ERR_PTR(-ENOMEM);
12164 
12165 	ret = intel_framebuffer_init(intel_fb, obj, mode_cmd);
12166 	if (ret)
12167 		goto err;
12168 
12169 	return &intel_fb->base;
12170 
12171 err:
12172 	kfree(intel_fb);
12173 	return ERR_PTR(ret);
12174 }
12175 
12176 static int intel_modeset_disable_planes(struct drm_atomic_state *state,
12177 					struct drm_crtc *crtc)
12178 {
12179 	struct drm_plane *plane;
12180 	struct drm_plane_state *plane_state;
12181 	int ret, i;
12182 
12183 	ret = drm_atomic_add_affected_planes(state, crtc);
12184 	if (ret)
12185 		return ret;
12186 
12187 	for_each_new_plane_in_state(state, plane, plane_state, i) {
12188 		if (plane_state->crtc != crtc)
12189 			continue;
12190 
12191 		ret = drm_atomic_set_crtc_for_plane(plane_state, NULL);
12192 		if (ret)
12193 			return ret;
12194 
12195 		drm_atomic_set_fb_for_plane(plane_state, NULL);
12196 	}
12197 
12198 	return 0;
12199 }
12200 
12201 int intel_get_load_detect_pipe(struct drm_connector *connector,
12202 			       struct intel_load_detect_pipe *old,
12203 			       struct drm_modeset_acquire_ctx *ctx)
12204 {
12205 	struct intel_crtc *intel_crtc;
12206 	struct intel_encoder *intel_encoder =
12207 		intel_attached_encoder(to_intel_connector(connector));
12208 	struct drm_crtc *possible_crtc;
12209 	struct drm_encoder *encoder = &intel_encoder->base;
12210 	struct drm_crtc *crtc = NULL;
12211 	struct drm_device *dev = encoder->dev;
12212 	struct drm_i915_private *dev_priv = to_i915(dev);
12213 	struct drm_mode_config *config = &dev->mode_config;
12214 	struct drm_atomic_state *state = NULL, *restore_state = NULL;
12215 	struct drm_connector_state *connector_state;
12216 	struct intel_crtc_state *crtc_state;
12217 	int ret, i = -1;
12218 
12219 	drm_dbg_kms(&dev_priv->drm, "[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
12220 		    connector->base.id, connector->name,
12221 		    encoder->base.id, encoder->name);
12222 
12223 	old->restore_state = NULL;
12224 
12225 	drm_WARN_ON(dev, !drm_modeset_is_locked(&config->connection_mutex));
12226 
12227 	/*
12228 	 * Algorithm gets a little messy:
12229 	 *
12230 	 *   - if the connector already has an assigned crtc, use it (but make
12231 	 *     sure it's on first)
12232 	 *
12233 	 *   - try to find the first unused crtc that can drive this connector,
12234 	 *     and use that if we find one
12235 	 */
12236 
12237 	/* See if we already have a CRTC for this connector */
12238 	if (connector->state->crtc) {
12239 		crtc = connector->state->crtc;
12240 
12241 		ret = drm_modeset_lock(&crtc->mutex, ctx);
12242 		if (ret)
12243 			goto fail;
12244 
12245 		/* Make sure the crtc and connector are running */
12246 		goto found;
12247 	}
12248 
12249 	/* Find an unused one (if possible) */
12250 	for_each_crtc(dev, possible_crtc) {
12251 		i++;
12252 		if (!(encoder->possible_crtcs & (1 << i)))
12253 			continue;
12254 
12255 		ret = drm_modeset_lock(&possible_crtc->mutex, ctx);
12256 		if (ret)
12257 			goto fail;
12258 
12259 		if (possible_crtc->state->enable) {
12260 			drm_modeset_unlock(&possible_crtc->mutex);
12261 			continue;
12262 		}
12263 
12264 		crtc = possible_crtc;
12265 		break;
12266 	}
12267 
12268 	/*
12269 	 * If we didn't find an unused CRTC, don't use any.
12270 	 */
12271 	if (!crtc) {
12272 		drm_dbg_kms(&dev_priv->drm,
12273 			    "no pipe available for load-detect\n");
12274 		ret = -ENODEV;
12275 		goto fail;
12276 	}
12277 
12278 found:
12279 	intel_crtc = to_intel_crtc(crtc);
12280 
12281 	state = drm_atomic_state_alloc(dev);
12282 	restore_state = drm_atomic_state_alloc(dev);
12283 	if (!state || !restore_state) {
12284 		ret = -ENOMEM;
12285 		goto fail;
12286 	}
12287 
12288 	state->acquire_ctx = ctx;
12289 	restore_state->acquire_ctx = ctx;
12290 
12291 	connector_state = drm_atomic_get_connector_state(state, connector);
12292 	if (IS_ERR(connector_state)) {
12293 		ret = PTR_ERR(connector_state);
12294 		goto fail;
12295 	}
12296 
12297 	ret = drm_atomic_set_crtc_for_connector(connector_state, crtc);
12298 	if (ret)
12299 		goto fail;
12300 
12301 	crtc_state = intel_atomic_get_crtc_state(state, intel_crtc);
12302 	if (IS_ERR(crtc_state)) {
12303 		ret = PTR_ERR(crtc_state);
12304 		goto fail;
12305 	}
12306 
12307 	crtc_state->uapi.active = true;
12308 
12309 	ret = drm_atomic_set_mode_for_crtc(&crtc_state->uapi,
12310 					   &load_detect_mode);
12311 	if (ret)
12312 		goto fail;
12313 
12314 	ret = intel_modeset_disable_planes(state, crtc);
12315 	if (ret)
12316 		goto fail;
12317 
12318 	ret = PTR_ERR_OR_ZERO(drm_atomic_get_connector_state(restore_state, connector));
12319 	if (!ret)
12320 		ret = PTR_ERR_OR_ZERO(drm_atomic_get_crtc_state(restore_state, crtc));
12321 	if (!ret)
12322 		ret = drm_atomic_add_affected_planes(restore_state, crtc);
12323 	if (ret) {
12324 		drm_dbg_kms(&dev_priv->drm,
12325 			    "Failed to create a copy of old state to restore: %i\n",
12326 			    ret);
12327 		goto fail;
12328 	}
12329 
12330 	ret = drm_atomic_commit(state);
12331 	if (ret) {
12332 		drm_dbg_kms(&dev_priv->drm,
12333 			    "failed to set mode on load-detect pipe\n");
12334 		goto fail;
12335 	}
12336 
12337 	old->restore_state = restore_state;
12338 	drm_atomic_state_put(state);
12339 
12340 	/* let the connector get through one full cycle before testing */
12341 	intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
12342 	return true;
12343 
12344 fail:
12345 	if (state) {
12346 		drm_atomic_state_put(state);
12347 		state = NULL;
12348 	}
12349 	if (restore_state) {
12350 		drm_atomic_state_put(restore_state);
12351 		restore_state = NULL;
12352 	}
12353 
12354 	if (ret == -EDEADLK)
12355 		return ret;
12356 
12357 	return false;
12358 }
12359 
12360 void intel_release_load_detect_pipe(struct drm_connector *connector,
12361 				    struct intel_load_detect_pipe *old,
12362 				    struct drm_modeset_acquire_ctx *ctx)
12363 {
12364 	struct intel_encoder *intel_encoder =
12365 		intel_attached_encoder(to_intel_connector(connector));
12366 	struct drm_i915_private *i915 = to_i915(intel_encoder->base.dev);
12367 	struct drm_encoder *encoder = &intel_encoder->base;
12368 	struct drm_atomic_state *state = old->restore_state;
12369 	int ret;
12370 
12371 	drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
12372 		    connector->base.id, connector->name,
12373 		    encoder->base.id, encoder->name);
12374 
12375 	if (!state)
12376 		return;
12377 
12378 	ret = drm_atomic_helper_commit_duplicated_state(state, ctx);
12379 	if (ret)
12380 		drm_dbg_kms(&i915->drm,
12381 			    "Couldn't release load detect pipe: %i\n", ret);
12382 	drm_atomic_state_put(state);
12383 }
12384 
12385 static int i9xx_pll_refclk(struct drm_device *dev,
12386 			   const struct intel_crtc_state *pipe_config)
12387 {
12388 	struct drm_i915_private *dev_priv = to_i915(dev);
12389 	u32 dpll = pipe_config->dpll_hw_state.dpll;
12390 
12391 	if ((dpll & PLL_REF_INPUT_MASK) == PLLB_REF_INPUT_SPREADSPECTRUMIN)
12392 		return dev_priv->vbt.lvds_ssc_freq;
12393 	else if (HAS_PCH_SPLIT(dev_priv))
12394 		return 120000;
12395 	else if (!IS_GEN(dev_priv, 2))
12396 		return 96000;
12397 	else
12398 		return 48000;
12399 }
12400 
12401 /* Returns the clock of the currently programmed mode of the given pipe. */
12402 static void i9xx_crtc_clock_get(struct intel_crtc *crtc,
12403 				struct intel_crtc_state *pipe_config)
12404 {
12405 	struct drm_device *dev = crtc->base.dev;
12406 	struct drm_i915_private *dev_priv = to_i915(dev);
12407 	enum pipe pipe = crtc->pipe;
12408 	u32 dpll = pipe_config->dpll_hw_state.dpll;
12409 	u32 fp;
12410 	struct dpll clock;
12411 	int port_clock;
12412 	int refclk = i9xx_pll_refclk(dev, pipe_config);
12413 
12414 	if ((dpll & DISPLAY_RATE_SELECT_FPA1) == 0)
12415 		fp = pipe_config->dpll_hw_state.fp0;
12416 	else
12417 		fp = pipe_config->dpll_hw_state.fp1;
12418 
12419 	clock.m1 = (fp & FP_M1_DIV_MASK) >> FP_M1_DIV_SHIFT;
12420 	if (IS_PINEVIEW(dev_priv)) {
12421 		clock.n = ffs((fp & FP_N_PINEVIEW_DIV_MASK) >> FP_N_DIV_SHIFT) - 1;
12422 		clock.m2 = (fp & FP_M2_PINEVIEW_DIV_MASK) >> FP_M2_DIV_SHIFT;
12423 	} else {
12424 		clock.n = (fp & FP_N_DIV_MASK) >> FP_N_DIV_SHIFT;
12425 		clock.m2 = (fp & FP_M2_DIV_MASK) >> FP_M2_DIV_SHIFT;
12426 	}
12427 
12428 	if (!IS_GEN(dev_priv, 2)) {
12429 		if (IS_PINEVIEW(dev_priv))
12430 			clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_PINEVIEW) >>
12431 				DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW);
12432 		else
12433 			clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK) >>
12434 			       DPLL_FPA01_P1_POST_DIV_SHIFT);
12435 
12436 		switch (dpll & DPLL_MODE_MASK) {
12437 		case DPLLB_MODE_DAC_SERIAL:
12438 			clock.p2 = dpll & DPLL_DAC_SERIAL_P2_CLOCK_DIV_5 ?
12439 				5 : 10;
12440 			break;
12441 		case DPLLB_MODE_LVDS:
12442 			clock.p2 = dpll & DPLLB_LVDS_P2_CLOCK_DIV_7 ?
12443 				7 : 14;
12444 			break;
12445 		default:
12446 			drm_dbg_kms(&dev_priv->drm,
12447 				    "Unknown DPLL mode %08x in programmed "
12448 				    "mode\n", (int)(dpll & DPLL_MODE_MASK));
12449 			return;
12450 		}
12451 
12452 		if (IS_PINEVIEW(dev_priv))
12453 			port_clock = pnv_calc_dpll_params(refclk, &clock);
12454 		else
12455 			port_clock = i9xx_calc_dpll_params(refclk, &clock);
12456 	} else {
12457 		u32 lvds = IS_I830(dev_priv) ? 0 : intel_de_read(dev_priv,
12458 								 LVDS);
12459 		bool is_lvds = (pipe == 1) && (lvds & LVDS_PORT_EN);
12460 
12461 		if (is_lvds) {
12462 			clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS) >>
12463 				       DPLL_FPA01_P1_POST_DIV_SHIFT);
12464 
12465 			if (lvds & LVDS_CLKB_POWER_UP)
12466 				clock.p2 = 7;
12467 			else
12468 				clock.p2 = 14;
12469 		} else {
12470 			if (dpll & PLL_P1_DIVIDE_BY_TWO)
12471 				clock.p1 = 2;
12472 			else {
12473 				clock.p1 = ((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830) >>
12474 					    DPLL_FPA01_P1_POST_DIV_SHIFT) + 2;
12475 			}
12476 			if (dpll & PLL_P2_DIVIDE_BY_4)
12477 				clock.p2 = 4;
12478 			else
12479 				clock.p2 = 2;
12480 		}
12481 
12482 		port_clock = i9xx_calc_dpll_params(refclk, &clock);
12483 	}
12484 
12485 	/*
12486 	 * This value includes pixel_multiplier. We will use
12487 	 * port_clock to compute adjusted_mode.crtc_clock in the
12488 	 * encoder's get_config() function.
12489 	 */
12490 	pipe_config->port_clock = port_clock;
12491 }
12492 
12493 int intel_dotclock_calculate(int link_freq,
12494 			     const struct intel_link_m_n *m_n)
12495 {
12496 	/*
12497 	 * The calculation for the data clock is:
12498 	 * pixel_clock = ((m/n)*(link_clock * nr_lanes))/bpp
12499 	 * But we want to avoid losing precison if possible, so:
12500 	 * pixel_clock = ((m * link_clock * nr_lanes)/(n*bpp))
12501 	 *
12502 	 * and the link clock is simpler:
12503 	 * link_clock = (m * link_clock) / n
12504 	 */
12505 
12506 	if (!m_n->link_n)
12507 		return 0;
12508 
12509 	return div_u64(mul_u32_u32(m_n->link_m, link_freq), m_n->link_n);
12510 }
12511 
12512 static void ilk_pch_clock_get(struct intel_crtc *crtc,
12513 			      struct intel_crtc_state *pipe_config)
12514 {
12515 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
12516 
12517 	/* read out port_clock from the DPLL */
12518 	i9xx_crtc_clock_get(crtc, pipe_config);
12519 
12520 	/*
12521 	 * In case there is an active pipe without active ports,
12522 	 * we may need some idea for the dotclock anyway.
12523 	 * Calculate one based on the FDI configuration.
12524 	 */
12525 	pipe_config->hw.adjusted_mode.crtc_clock =
12526 		intel_dotclock_calculate(intel_fdi_link_freq(dev_priv, pipe_config),
12527 					 &pipe_config->fdi_m_n);
12528 }
12529 
12530 static void intel_crtc_state_reset(struct intel_crtc_state *crtc_state,
12531 				   struct intel_crtc *crtc)
12532 {
12533 	memset(crtc_state, 0, sizeof(*crtc_state));
12534 
12535 	__drm_atomic_helper_crtc_state_reset(&crtc_state->uapi, &crtc->base);
12536 
12537 	crtc_state->cpu_transcoder = INVALID_TRANSCODER;
12538 	crtc_state->master_transcoder = INVALID_TRANSCODER;
12539 	crtc_state->hsw_workaround_pipe = INVALID_PIPE;
12540 	crtc_state->output_format = INTEL_OUTPUT_FORMAT_INVALID;
12541 	crtc_state->scaler_state.scaler_id = -1;
12542 	crtc_state->mst_master_transcoder = INVALID_TRANSCODER;
12543 }
12544 
12545 static struct intel_crtc_state *intel_crtc_state_alloc(struct intel_crtc *crtc)
12546 {
12547 	struct intel_crtc_state *crtc_state;
12548 
12549 	crtc_state = kmalloc(sizeof(*crtc_state), GFP_KERNEL);
12550 
12551 	if (crtc_state)
12552 		intel_crtc_state_reset(crtc_state, crtc);
12553 
12554 	return crtc_state;
12555 }
12556 
12557 /* Returns the currently programmed mode of the given encoder. */
12558 struct drm_display_mode *
12559 intel_encoder_current_mode(struct intel_encoder *encoder)
12560 {
12561 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
12562 	struct intel_crtc_state *crtc_state;
12563 	struct drm_display_mode *mode;
12564 	struct intel_crtc *crtc;
12565 	enum pipe pipe;
12566 
12567 	if (!encoder->get_hw_state(encoder, &pipe))
12568 		return NULL;
12569 
12570 	crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
12571 
12572 	mode = kzalloc(sizeof(*mode), GFP_KERNEL);
12573 	if (!mode)
12574 		return NULL;
12575 
12576 	crtc_state = intel_crtc_state_alloc(crtc);
12577 	if (!crtc_state) {
12578 		kfree(mode);
12579 		return NULL;
12580 	}
12581 
12582 	if (!intel_crtc_get_pipe_config(crtc_state)) {
12583 		kfree(crtc_state);
12584 		kfree(mode);
12585 		return NULL;
12586 	}
12587 
12588 	intel_encoder_get_config(encoder, crtc_state);
12589 
12590 	intel_mode_from_crtc_timings(mode, &crtc_state->hw.adjusted_mode);
12591 
12592 	kfree(crtc_state);
12593 
12594 	return mode;
12595 }
12596 
12597 static void intel_crtc_destroy(struct drm_crtc *crtc)
12598 {
12599 	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
12600 
12601 	drm_crtc_cleanup(crtc);
12602 	kfree(intel_crtc);
12603 }
12604 
12605 /**
12606  * intel_wm_need_update - Check whether watermarks need updating
12607  * @cur: current plane state
12608  * @new: new plane state
12609  *
12610  * Check current plane state versus the new one to determine whether
12611  * watermarks need to be recalculated.
12612  *
12613  * Returns true or false.
12614  */
12615 static bool intel_wm_need_update(const struct intel_plane_state *cur,
12616 				 struct intel_plane_state *new)
12617 {
12618 	/* Update watermarks on tiling or size changes. */
12619 	if (new->uapi.visible != cur->uapi.visible)
12620 		return true;
12621 
12622 	if (!cur->hw.fb || !new->hw.fb)
12623 		return false;
12624 
12625 	if (cur->hw.fb->modifier != new->hw.fb->modifier ||
12626 	    cur->hw.rotation != new->hw.rotation ||
12627 	    drm_rect_width(&new->uapi.src) != drm_rect_width(&cur->uapi.src) ||
12628 	    drm_rect_height(&new->uapi.src) != drm_rect_height(&cur->uapi.src) ||
12629 	    drm_rect_width(&new->uapi.dst) != drm_rect_width(&cur->uapi.dst) ||
12630 	    drm_rect_height(&new->uapi.dst) != drm_rect_height(&cur->uapi.dst))
12631 		return true;
12632 
12633 	return false;
12634 }
12635 
12636 static bool needs_scaling(const struct intel_plane_state *state)
12637 {
12638 	int src_w = drm_rect_width(&state->uapi.src) >> 16;
12639 	int src_h = drm_rect_height(&state->uapi.src) >> 16;
12640 	int dst_w = drm_rect_width(&state->uapi.dst);
12641 	int dst_h = drm_rect_height(&state->uapi.dst);
12642 
12643 	return (src_w != dst_w || src_h != dst_h);
12644 }
12645 
12646 int intel_plane_atomic_calc_changes(const struct intel_crtc_state *old_crtc_state,
12647 				    struct intel_crtc_state *crtc_state,
12648 				    const struct intel_plane_state *old_plane_state,
12649 				    struct intel_plane_state *plane_state)
12650 {
12651 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
12652 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
12653 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
12654 	bool mode_changed = needs_modeset(crtc_state);
12655 	bool was_crtc_enabled = old_crtc_state->hw.active;
12656 	bool is_crtc_enabled = crtc_state->hw.active;
12657 	bool turn_off, turn_on, visible, was_visible;
12658 	int ret;
12659 
12660 	if (INTEL_GEN(dev_priv) >= 9 && plane->id != PLANE_CURSOR) {
12661 		ret = skl_update_scaler_plane(crtc_state, plane_state);
12662 		if (ret)
12663 			return ret;
12664 	}
12665 
12666 	was_visible = old_plane_state->uapi.visible;
12667 	visible = plane_state->uapi.visible;
12668 
12669 	if (!was_crtc_enabled && drm_WARN_ON(&dev_priv->drm, was_visible))
12670 		was_visible = false;
12671 
12672 	/*
12673 	 * Visibility is calculated as if the crtc was on, but
12674 	 * after scaler setup everything depends on it being off
12675 	 * when the crtc isn't active.
12676 	 *
12677 	 * FIXME this is wrong for watermarks. Watermarks should also
12678 	 * be computed as if the pipe would be active. Perhaps move
12679 	 * per-plane wm computation to the .check_plane() hook, and
12680 	 * only combine the results from all planes in the current place?
12681 	 */
12682 	if (!is_crtc_enabled) {
12683 		intel_plane_set_invisible(crtc_state, plane_state);
12684 		visible = false;
12685 	}
12686 
12687 	if (!was_visible && !visible)
12688 		return 0;
12689 
12690 	turn_off = was_visible && (!visible || mode_changed);
12691 	turn_on = visible && (!was_visible || mode_changed);
12692 
12693 	drm_dbg_atomic(&dev_priv->drm,
12694 		       "[CRTC:%d:%s] with [PLANE:%d:%s] visible %i -> %i, off %i, on %i, ms %i\n",
12695 		       crtc->base.base.id, crtc->base.name,
12696 		       plane->base.base.id, plane->base.name,
12697 		       was_visible, visible,
12698 		       turn_off, turn_on, mode_changed);
12699 
12700 	if (turn_on) {
12701 		if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv))
12702 			crtc_state->update_wm_pre = true;
12703 
12704 		/* must disable cxsr around plane enable/disable */
12705 		if (plane->id != PLANE_CURSOR)
12706 			crtc_state->disable_cxsr = true;
12707 	} else if (turn_off) {
12708 		if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv))
12709 			crtc_state->update_wm_post = true;
12710 
12711 		/* must disable cxsr around plane enable/disable */
12712 		if (plane->id != PLANE_CURSOR)
12713 			crtc_state->disable_cxsr = true;
12714 	} else if (intel_wm_need_update(old_plane_state, plane_state)) {
12715 		if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv)) {
12716 			/* FIXME bollocks */
12717 			crtc_state->update_wm_pre = true;
12718 			crtc_state->update_wm_post = true;
12719 		}
12720 	}
12721 
12722 	if (visible || was_visible)
12723 		crtc_state->fb_bits |= plane->frontbuffer_bit;
12724 
12725 	/*
12726 	 * ILK/SNB DVSACNTR/Sprite Enable
12727 	 * IVB SPR_CTL/Sprite Enable
12728 	 * "When in Self Refresh Big FIFO mode, a write to enable the
12729 	 *  plane will be internally buffered and delayed while Big FIFO
12730 	 *  mode is exiting."
12731 	 *
12732 	 * Which means that enabling the sprite can take an extra frame
12733 	 * when we start in big FIFO mode (LP1+). Thus we need to drop
12734 	 * down to LP0 and wait for vblank in order to make sure the
12735 	 * sprite gets enabled on the next vblank after the register write.
12736 	 * Doing otherwise would risk enabling the sprite one frame after
12737 	 * we've already signalled flip completion. We can resume LP1+
12738 	 * once the sprite has been enabled.
12739 	 *
12740 	 *
12741 	 * WaCxSRDisabledForSpriteScaling:ivb
12742 	 * IVB SPR_SCALE/Scaling Enable
12743 	 * "Low Power watermarks must be disabled for at least one
12744 	 *  frame before enabling sprite scaling, and kept disabled
12745 	 *  until sprite scaling is disabled."
12746 	 *
12747 	 * ILK/SNB DVSASCALE/Scaling Enable
12748 	 * "When in Self Refresh Big FIFO mode, scaling enable will be
12749 	 *  masked off while Big FIFO mode is exiting."
12750 	 *
12751 	 * Despite the w/a only being listed for IVB we assume that
12752 	 * the ILK/SNB note has similar ramifications, hence we apply
12753 	 * the w/a on all three platforms.
12754 	 *
12755 	 * With experimental results seems this is needed also for primary
12756 	 * plane, not only sprite plane.
12757 	 */
12758 	if (plane->id != PLANE_CURSOR &&
12759 	    (IS_GEN_RANGE(dev_priv, 5, 6) ||
12760 	     IS_IVYBRIDGE(dev_priv)) &&
12761 	    (turn_on || (!needs_scaling(old_plane_state) &&
12762 			 needs_scaling(plane_state))))
12763 		crtc_state->disable_lp_wm = true;
12764 
12765 	return 0;
12766 }
12767 
12768 static bool encoders_cloneable(const struct intel_encoder *a,
12769 			       const struct intel_encoder *b)
12770 {
12771 	/* masks could be asymmetric, so check both ways */
12772 	return a == b || (a->cloneable & (1 << b->type) &&
12773 			  b->cloneable & (1 << a->type));
12774 }
12775 
12776 static bool check_single_encoder_cloning(struct intel_atomic_state *state,
12777 					 struct intel_crtc *crtc,
12778 					 struct intel_encoder *encoder)
12779 {
12780 	struct intel_encoder *source_encoder;
12781 	struct drm_connector *connector;
12782 	struct drm_connector_state *connector_state;
12783 	int i;
12784 
12785 	for_each_new_connector_in_state(&state->base, connector, connector_state, i) {
12786 		if (connector_state->crtc != &crtc->base)
12787 			continue;
12788 
12789 		source_encoder =
12790 			to_intel_encoder(connector_state->best_encoder);
12791 		if (!encoders_cloneable(encoder, source_encoder))
12792 			return false;
12793 	}
12794 
12795 	return true;
12796 }
12797 
12798 static int icl_add_linked_planes(struct intel_atomic_state *state)
12799 {
12800 	struct intel_plane *plane, *linked;
12801 	struct intel_plane_state *plane_state, *linked_plane_state;
12802 	int i;
12803 
12804 	for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
12805 		linked = plane_state->planar_linked_plane;
12806 
12807 		if (!linked)
12808 			continue;
12809 
12810 		linked_plane_state = intel_atomic_get_plane_state(state, linked);
12811 		if (IS_ERR(linked_plane_state))
12812 			return PTR_ERR(linked_plane_state);
12813 
12814 		drm_WARN_ON(state->base.dev,
12815 			    linked_plane_state->planar_linked_plane != plane);
12816 		drm_WARN_ON(state->base.dev,
12817 			    linked_plane_state->planar_slave == plane_state->planar_slave);
12818 	}
12819 
12820 	return 0;
12821 }
12822 
12823 static int icl_check_nv12_planes(struct intel_crtc_state *crtc_state)
12824 {
12825 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
12826 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
12827 	struct intel_atomic_state *state = to_intel_atomic_state(crtc_state->uapi.state);
12828 	struct intel_plane *plane, *linked;
12829 	struct intel_plane_state *plane_state;
12830 	int i;
12831 
12832 	if (INTEL_GEN(dev_priv) < 11)
12833 		return 0;
12834 
12835 	/*
12836 	 * Destroy all old plane links and make the slave plane invisible
12837 	 * in the crtc_state->active_planes mask.
12838 	 */
12839 	for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
12840 		if (plane->pipe != crtc->pipe || !plane_state->planar_linked_plane)
12841 			continue;
12842 
12843 		plane_state->planar_linked_plane = NULL;
12844 		if (plane_state->planar_slave && !plane_state->uapi.visible) {
12845 			crtc_state->active_planes &= ~BIT(plane->id);
12846 			crtc_state->update_planes |= BIT(plane->id);
12847 		}
12848 
12849 		plane_state->planar_slave = false;
12850 	}
12851 
12852 	if (!crtc_state->nv12_planes)
12853 		return 0;
12854 
12855 	for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
12856 		struct intel_plane_state *linked_state = NULL;
12857 
12858 		if (plane->pipe != crtc->pipe ||
12859 		    !(crtc_state->nv12_planes & BIT(plane->id)))
12860 			continue;
12861 
12862 		for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, linked) {
12863 			if (!icl_is_nv12_y_plane(dev_priv, linked->id))
12864 				continue;
12865 
12866 			if (crtc_state->active_planes & BIT(linked->id))
12867 				continue;
12868 
12869 			linked_state = intel_atomic_get_plane_state(state, linked);
12870 			if (IS_ERR(linked_state))
12871 				return PTR_ERR(linked_state);
12872 
12873 			break;
12874 		}
12875 
12876 		if (!linked_state) {
12877 			drm_dbg_kms(&dev_priv->drm,
12878 				    "Need %d free Y planes for planar YUV\n",
12879 				    hweight8(crtc_state->nv12_planes));
12880 
12881 			return -EINVAL;
12882 		}
12883 
12884 		plane_state->planar_linked_plane = linked;
12885 
12886 		linked_state->planar_slave = true;
12887 		linked_state->planar_linked_plane = plane;
12888 		crtc_state->active_planes |= BIT(linked->id);
12889 		crtc_state->update_planes |= BIT(linked->id);
12890 		drm_dbg_kms(&dev_priv->drm, "Using %s as Y plane for %s\n",
12891 			    linked->base.name, plane->base.name);
12892 
12893 		/* Copy parameters to slave plane */
12894 		linked_state->ctl = plane_state->ctl | PLANE_CTL_YUV420_Y_PLANE;
12895 		linked_state->color_ctl = plane_state->color_ctl;
12896 		linked_state->view = plane_state->view;
12897 		memcpy(linked_state->color_plane, plane_state->color_plane,
12898 		       sizeof(linked_state->color_plane));
12899 
12900 		intel_plane_copy_hw_state(linked_state, plane_state);
12901 		linked_state->uapi.src = plane_state->uapi.src;
12902 		linked_state->uapi.dst = plane_state->uapi.dst;
12903 
12904 		if (icl_is_hdr_plane(dev_priv, plane->id)) {
12905 			if (linked->id == PLANE_SPRITE5)
12906 				plane_state->cus_ctl |= PLANE_CUS_PLANE_7;
12907 			else if (linked->id == PLANE_SPRITE4)
12908 				plane_state->cus_ctl |= PLANE_CUS_PLANE_6;
12909 			else if (linked->id == PLANE_SPRITE3)
12910 				plane_state->cus_ctl |= PLANE_CUS_PLANE_5_RKL;
12911 			else if (linked->id == PLANE_SPRITE2)
12912 				plane_state->cus_ctl |= PLANE_CUS_PLANE_4_RKL;
12913 			else
12914 				MISSING_CASE(linked->id);
12915 		}
12916 	}
12917 
12918 	return 0;
12919 }
12920 
12921 static bool c8_planes_changed(const struct intel_crtc_state *new_crtc_state)
12922 {
12923 	struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
12924 	struct intel_atomic_state *state =
12925 		to_intel_atomic_state(new_crtc_state->uapi.state);
12926 	const struct intel_crtc_state *old_crtc_state =
12927 		intel_atomic_get_old_crtc_state(state, crtc);
12928 
12929 	return !old_crtc_state->c8_planes != !new_crtc_state->c8_planes;
12930 }
12931 
12932 static u16 hsw_linetime_wm(const struct intel_crtc_state *crtc_state)
12933 {
12934 	const struct drm_display_mode *pipe_mode =
12935 		&crtc_state->hw.pipe_mode;
12936 	int linetime_wm;
12937 
12938 	if (!crtc_state->hw.enable)
12939 		return 0;
12940 
12941 	linetime_wm = DIV_ROUND_CLOSEST(pipe_mode->crtc_htotal * 1000 * 8,
12942 					pipe_mode->crtc_clock);
12943 
12944 	return min(linetime_wm, 0x1ff);
12945 }
12946 
12947 static u16 hsw_ips_linetime_wm(const struct intel_crtc_state *crtc_state,
12948 			       const struct intel_cdclk_state *cdclk_state)
12949 {
12950 	const struct drm_display_mode *pipe_mode =
12951 		&crtc_state->hw.pipe_mode;
12952 	int linetime_wm;
12953 
12954 	if (!crtc_state->hw.enable)
12955 		return 0;
12956 
12957 	linetime_wm = DIV_ROUND_CLOSEST(pipe_mode->crtc_htotal * 1000 * 8,
12958 					cdclk_state->logical.cdclk);
12959 
12960 	return min(linetime_wm, 0x1ff);
12961 }
12962 
12963 static u16 skl_linetime_wm(const struct intel_crtc_state *crtc_state)
12964 {
12965 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
12966 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
12967 	const struct drm_display_mode *pipe_mode =
12968 		&crtc_state->hw.pipe_mode;
12969 	int linetime_wm;
12970 
12971 	if (!crtc_state->hw.enable)
12972 		return 0;
12973 
12974 	linetime_wm = DIV_ROUND_UP(pipe_mode->crtc_htotal * 1000 * 8,
12975 				   crtc_state->pixel_rate);
12976 
12977 	/* Display WA #1135: BXT:ALL GLK:ALL */
12978 	if (IS_GEN9_LP(dev_priv) && dev_priv->ipc_enabled)
12979 		linetime_wm /= 2;
12980 
12981 	return min(linetime_wm, 0x1ff);
12982 }
12983 
12984 static int hsw_compute_linetime_wm(struct intel_atomic_state *state,
12985 				   struct intel_crtc *crtc)
12986 {
12987 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
12988 	struct intel_crtc_state *crtc_state =
12989 		intel_atomic_get_new_crtc_state(state, crtc);
12990 	const struct intel_cdclk_state *cdclk_state;
12991 
12992 	if (INTEL_GEN(dev_priv) >= 9)
12993 		crtc_state->linetime = skl_linetime_wm(crtc_state);
12994 	else
12995 		crtc_state->linetime = hsw_linetime_wm(crtc_state);
12996 
12997 	if (!hsw_crtc_supports_ips(crtc))
12998 		return 0;
12999 
13000 	cdclk_state = intel_atomic_get_cdclk_state(state);
13001 	if (IS_ERR(cdclk_state))
13002 		return PTR_ERR(cdclk_state);
13003 
13004 	crtc_state->ips_linetime = hsw_ips_linetime_wm(crtc_state,
13005 						       cdclk_state);
13006 
13007 	return 0;
13008 }
13009 
13010 static int intel_crtc_atomic_check(struct intel_atomic_state *state,
13011 				   struct intel_crtc *crtc)
13012 {
13013 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
13014 	struct intel_crtc_state *crtc_state =
13015 		intel_atomic_get_new_crtc_state(state, crtc);
13016 	bool mode_changed = needs_modeset(crtc_state);
13017 	int ret;
13018 
13019 	if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv) &&
13020 	    mode_changed && !crtc_state->hw.active)
13021 		crtc_state->update_wm_post = true;
13022 
13023 	if (mode_changed && crtc_state->hw.enable &&
13024 	    dev_priv->display.crtc_compute_clock &&
13025 	    !crtc_state->bigjoiner_slave &&
13026 	    !drm_WARN_ON(&dev_priv->drm, crtc_state->shared_dpll)) {
13027 		ret = dev_priv->display.crtc_compute_clock(crtc, crtc_state);
13028 		if (ret)
13029 			return ret;
13030 	}
13031 
13032 	/*
13033 	 * May need to update pipe gamma enable bits
13034 	 * when C8 planes are getting enabled/disabled.
13035 	 */
13036 	if (c8_planes_changed(crtc_state))
13037 		crtc_state->uapi.color_mgmt_changed = true;
13038 
13039 	if (mode_changed || crtc_state->update_pipe ||
13040 	    crtc_state->uapi.color_mgmt_changed) {
13041 		ret = intel_color_check(crtc_state);
13042 		if (ret)
13043 			return ret;
13044 	}
13045 
13046 	if (dev_priv->display.compute_pipe_wm) {
13047 		ret = dev_priv->display.compute_pipe_wm(crtc_state);
13048 		if (ret) {
13049 			drm_dbg_kms(&dev_priv->drm,
13050 				    "Target pipe watermarks are invalid\n");
13051 			return ret;
13052 		}
13053 	}
13054 
13055 	if (dev_priv->display.compute_intermediate_wm) {
13056 		if (drm_WARN_ON(&dev_priv->drm,
13057 				!dev_priv->display.compute_pipe_wm))
13058 			return 0;
13059 
13060 		/*
13061 		 * Calculate 'intermediate' watermarks that satisfy both the
13062 		 * old state and the new state.  We can program these
13063 		 * immediately.
13064 		 */
13065 		ret = dev_priv->display.compute_intermediate_wm(crtc_state);
13066 		if (ret) {
13067 			drm_dbg_kms(&dev_priv->drm,
13068 				    "No valid intermediate pipe watermarks are possible\n");
13069 			return ret;
13070 		}
13071 	}
13072 
13073 	if (INTEL_GEN(dev_priv) >= 9) {
13074 		if (mode_changed || crtc_state->update_pipe) {
13075 			ret = skl_update_scaler_crtc(crtc_state);
13076 			if (ret)
13077 				return ret;
13078 		}
13079 
13080 		ret = intel_atomic_setup_scalers(dev_priv, crtc, crtc_state);
13081 		if (ret)
13082 			return ret;
13083 	}
13084 
13085 	if (HAS_IPS(dev_priv)) {
13086 		ret = hsw_compute_ips_config(crtc_state);
13087 		if (ret)
13088 			return ret;
13089 	}
13090 
13091 	if (INTEL_GEN(dev_priv) >= 9 ||
13092 	    IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) {
13093 		ret = hsw_compute_linetime_wm(state, crtc);
13094 		if (ret)
13095 			return ret;
13096 
13097 	}
13098 
13099 	if (!mode_changed) {
13100 		ret = intel_psr2_sel_fetch_update(state, crtc);
13101 		if (ret)
13102 			return ret;
13103 	}
13104 
13105 	return 0;
13106 }
13107 
13108 static void intel_modeset_update_connector_atomic_state(struct drm_device *dev)
13109 {
13110 	struct intel_connector *connector;
13111 	struct drm_connector_list_iter conn_iter;
13112 
13113 	drm_connector_list_iter_begin(dev, &conn_iter);
13114 	for_each_intel_connector_iter(connector, &conn_iter) {
13115 		if (connector->base.state->crtc)
13116 			drm_connector_put(&connector->base);
13117 
13118 		if (connector->base.encoder) {
13119 			connector->base.state->best_encoder =
13120 				connector->base.encoder;
13121 			connector->base.state->crtc =
13122 				connector->base.encoder->crtc;
13123 
13124 			drm_connector_get(&connector->base);
13125 		} else {
13126 			connector->base.state->best_encoder = NULL;
13127 			connector->base.state->crtc = NULL;
13128 		}
13129 	}
13130 	drm_connector_list_iter_end(&conn_iter);
13131 }
13132 
13133 static int
13134 compute_sink_pipe_bpp(const struct drm_connector_state *conn_state,
13135 		      struct intel_crtc_state *pipe_config)
13136 {
13137 	struct drm_connector *connector = conn_state->connector;
13138 	struct drm_i915_private *i915 = to_i915(pipe_config->uapi.crtc->dev);
13139 	const struct drm_display_info *info = &connector->display_info;
13140 	int bpp;
13141 
13142 	switch (conn_state->max_bpc) {
13143 	case 6 ... 7:
13144 		bpp = 6 * 3;
13145 		break;
13146 	case 8 ... 9:
13147 		bpp = 8 * 3;
13148 		break;
13149 	case 10 ... 11:
13150 		bpp = 10 * 3;
13151 		break;
13152 	case 12 ... 16:
13153 		bpp = 12 * 3;
13154 		break;
13155 	default:
13156 		MISSING_CASE(conn_state->max_bpc);
13157 		return -EINVAL;
13158 	}
13159 
13160 	if (bpp < pipe_config->pipe_bpp) {
13161 		drm_dbg_kms(&i915->drm,
13162 			    "[CONNECTOR:%d:%s] Limiting display bpp to %d instead of "
13163 			    "EDID bpp %d, requested bpp %d, max platform bpp %d\n",
13164 			    connector->base.id, connector->name,
13165 			    bpp, 3 * info->bpc,
13166 			    3 * conn_state->max_requested_bpc,
13167 			    pipe_config->pipe_bpp);
13168 
13169 		pipe_config->pipe_bpp = bpp;
13170 	}
13171 
13172 	return 0;
13173 }
13174 
13175 static int
13176 compute_baseline_pipe_bpp(struct intel_crtc *crtc,
13177 			  struct intel_crtc_state *pipe_config)
13178 {
13179 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
13180 	struct drm_atomic_state *state = pipe_config->uapi.state;
13181 	struct drm_connector *connector;
13182 	struct drm_connector_state *connector_state;
13183 	int bpp, i;
13184 
13185 	if ((IS_G4X(dev_priv) || IS_VALLEYVIEW(dev_priv) ||
13186 	    IS_CHERRYVIEW(dev_priv)))
13187 		bpp = 10*3;
13188 	else if (INTEL_GEN(dev_priv) >= 5)
13189 		bpp = 12*3;
13190 	else
13191 		bpp = 8*3;
13192 
13193 	pipe_config->pipe_bpp = bpp;
13194 
13195 	/* Clamp display bpp to connector max bpp */
13196 	for_each_new_connector_in_state(state, connector, connector_state, i) {
13197 		int ret;
13198 
13199 		if (connector_state->crtc != &crtc->base)
13200 			continue;
13201 
13202 		ret = compute_sink_pipe_bpp(connector_state, pipe_config);
13203 		if (ret)
13204 			return ret;
13205 	}
13206 
13207 	return 0;
13208 }
13209 
13210 static void intel_dump_crtc_timings(struct drm_i915_private *i915,
13211 				    const struct drm_display_mode *mode)
13212 {
13213 	drm_dbg_kms(&i915->drm, "crtc timings: %d %d %d %d %d %d %d %d %d, "
13214 		    "type: 0x%x flags: 0x%x\n",
13215 		    mode->crtc_clock,
13216 		    mode->crtc_hdisplay, mode->crtc_hsync_start,
13217 		    mode->crtc_hsync_end, mode->crtc_htotal,
13218 		    mode->crtc_vdisplay, mode->crtc_vsync_start,
13219 		    mode->crtc_vsync_end, mode->crtc_vtotal,
13220 		    mode->type, mode->flags);
13221 }
13222 
13223 static void
13224 intel_dump_m_n_config(const struct intel_crtc_state *pipe_config,
13225 		      const char *id, unsigned int lane_count,
13226 		      const struct intel_link_m_n *m_n)
13227 {
13228 	struct drm_i915_private *i915 = to_i915(pipe_config->uapi.crtc->dev);
13229 
13230 	drm_dbg_kms(&i915->drm,
13231 		    "%s: lanes: %i; gmch_m: %u, gmch_n: %u, link_m: %u, link_n: %u, tu: %u\n",
13232 		    id, lane_count,
13233 		    m_n->gmch_m, m_n->gmch_n,
13234 		    m_n->link_m, m_n->link_n, m_n->tu);
13235 }
13236 
13237 static void
13238 intel_dump_infoframe(struct drm_i915_private *dev_priv,
13239 		     const union hdmi_infoframe *frame)
13240 {
13241 	if (!drm_debug_enabled(DRM_UT_KMS))
13242 		return;
13243 
13244 	hdmi_infoframe_log(KERN_DEBUG, dev_priv->drm.dev, frame);
13245 }
13246 
13247 static void
13248 intel_dump_dp_vsc_sdp(struct drm_i915_private *dev_priv,
13249 		      const struct drm_dp_vsc_sdp *vsc)
13250 {
13251 	if (!drm_debug_enabled(DRM_UT_KMS))
13252 		return;
13253 
13254 	drm_dp_vsc_sdp_log(KERN_DEBUG, dev_priv->drm.dev, vsc);
13255 }
13256 
13257 #define OUTPUT_TYPE(x) [INTEL_OUTPUT_ ## x] = #x
13258 
13259 static const char * const output_type_str[] = {
13260 	OUTPUT_TYPE(UNUSED),
13261 	OUTPUT_TYPE(ANALOG),
13262 	OUTPUT_TYPE(DVO),
13263 	OUTPUT_TYPE(SDVO),
13264 	OUTPUT_TYPE(LVDS),
13265 	OUTPUT_TYPE(TVOUT),
13266 	OUTPUT_TYPE(HDMI),
13267 	OUTPUT_TYPE(DP),
13268 	OUTPUT_TYPE(EDP),
13269 	OUTPUT_TYPE(DSI),
13270 	OUTPUT_TYPE(DDI),
13271 	OUTPUT_TYPE(DP_MST),
13272 };
13273 
13274 #undef OUTPUT_TYPE
13275 
13276 static void snprintf_output_types(char *buf, size_t len,
13277 				  unsigned int output_types)
13278 {
13279 	char *str = buf;
13280 	int i;
13281 
13282 	str[0] = '\0';
13283 
13284 	for (i = 0; i < ARRAY_SIZE(output_type_str); i++) {
13285 		int r;
13286 
13287 		if ((output_types & BIT(i)) == 0)
13288 			continue;
13289 
13290 		r = snprintf(str, len, "%s%s",
13291 			     str != buf ? "," : "", output_type_str[i]);
13292 		if (r >= len)
13293 			break;
13294 		str += r;
13295 		len -= r;
13296 
13297 		output_types &= ~BIT(i);
13298 	}
13299 
13300 	WARN_ON_ONCE(output_types != 0);
13301 }
13302 
13303 static const char * const output_format_str[] = {
13304 	[INTEL_OUTPUT_FORMAT_INVALID] = "Invalid",
13305 	[INTEL_OUTPUT_FORMAT_RGB] = "RGB",
13306 	[INTEL_OUTPUT_FORMAT_YCBCR420] = "YCBCR4:2:0",
13307 	[INTEL_OUTPUT_FORMAT_YCBCR444] = "YCBCR4:4:4",
13308 };
13309 
13310 static const char *output_formats(enum intel_output_format format)
13311 {
13312 	if (format >= ARRAY_SIZE(output_format_str))
13313 		format = INTEL_OUTPUT_FORMAT_INVALID;
13314 	return output_format_str[format];
13315 }
13316 
13317 static void intel_dump_plane_state(const struct intel_plane_state *plane_state)
13318 {
13319 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
13320 	struct drm_i915_private *i915 = to_i915(plane->base.dev);
13321 	const struct drm_framebuffer *fb = plane_state->hw.fb;
13322 	struct drm_format_name_buf format_name;
13323 
13324 	if (!fb) {
13325 		drm_dbg_kms(&i915->drm,
13326 			    "[PLANE:%d:%s] fb: [NOFB], visible: %s\n",
13327 			    plane->base.base.id, plane->base.name,
13328 			    yesno(plane_state->uapi.visible));
13329 		return;
13330 	}
13331 
13332 	drm_dbg_kms(&i915->drm,
13333 		    "[PLANE:%d:%s] fb: [FB:%d] %ux%u format = %s modifier = 0x%llx, visible: %s\n",
13334 		    plane->base.base.id, plane->base.name,
13335 		    fb->base.id, fb->width, fb->height,
13336 		    drm_get_format_name(fb->format->format, &format_name),
13337 		    fb->modifier, yesno(plane_state->uapi.visible));
13338 	drm_dbg_kms(&i915->drm, "\trotation: 0x%x, scaler: %d\n",
13339 		    plane_state->hw.rotation, plane_state->scaler_id);
13340 	if (plane_state->uapi.visible)
13341 		drm_dbg_kms(&i915->drm,
13342 			    "\tsrc: " DRM_RECT_FP_FMT " dst: " DRM_RECT_FMT "\n",
13343 			    DRM_RECT_FP_ARG(&plane_state->uapi.src),
13344 			    DRM_RECT_ARG(&plane_state->uapi.dst));
13345 }
13346 
13347 static void intel_dump_pipe_config(const struct intel_crtc_state *pipe_config,
13348 				   struct intel_atomic_state *state,
13349 				   const char *context)
13350 {
13351 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
13352 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
13353 	const struct intel_plane_state *plane_state;
13354 	struct intel_plane *plane;
13355 	char buf[64];
13356 	int i;
13357 
13358 	drm_dbg_kms(&dev_priv->drm, "[CRTC:%d:%s] enable: %s %s\n",
13359 		    crtc->base.base.id, crtc->base.name,
13360 		    yesno(pipe_config->hw.enable), context);
13361 
13362 	if (!pipe_config->hw.enable)
13363 		goto dump_planes;
13364 
13365 	snprintf_output_types(buf, sizeof(buf), pipe_config->output_types);
13366 	drm_dbg_kms(&dev_priv->drm,
13367 		    "active: %s, output_types: %s (0x%x), output format: %s\n",
13368 		    yesno(pipe_config->hw.active),
13369 		    buf, pipe_config->output_types,
13370 		    output_formats(pipe_config->output_format));
13371 
13372 	drm_dbg_kms(&dev_priv->drm,
13373 		    "cpu_transcoder: %s, pipe bpp: %i, dithering: %i\n",
13374 		    transcoder_name(pipe_config->cpu_transcoder),
13375 		    pipe_config->pipe_bpp, pipe_config->dither);
13376 
13377 	drm_dbg_kms(&dev_priv->drm, "MST master transcoder: %s\n",
13378 		    transcoder_name(pipe_config->mst_master_transcoder));
13379 
13380 	drm_dbg_kms(&dev_priv->drm,
13381 		    "port sync: master transcoder: %s, slave transcoder bitmask = 0x%x\n",
13382 		    transcoder_name(pipe_config->master_transcoder),
13383 		    pipe_config->sync_mode_slaves_mask);
13384 
13385 	drm_dbg_kms(&dev_priv->drm, "bigjoiner: %s\n",
13386 		    pipe_config->bigjoiner_slave ? "slave" :
13387 		    pipe_config->bigjoiner ? "master" : "no");
13388 
13389 	if (pipe_config->has_pch_encoder)
13390 		intel_dump_m_n_config(pipe_config, "fdi",
13391 				      pipe_config->fdi_lanes,
13392 				      &pipe_config->fdi_m_n);
13393 
13394 	if (intel_crtc_has_dp_encoder(pipe_config)) {
13395 		intel_dump_m_n_config(pipe_config, "dp m_n",
13396 				pipe_config->lane_count, &pipe_config->dp_m_n);
13397 		if (pipe_config->has_drrs)
13398 			intel_dump_m_n_config(pipe_config, "dp m2_n2",
13399 					      pipe_config->lane_count,
13400 					      &pipe_config->dp_m2_n2);
13401 	}
13402 
13403 	drm_dbg_kms(&dev_priv->drm,
13404 		    "audio: %i, infoframes: %i, infoframes enabled: 0x%x\n",
13405 		    pipe_config->has_audio, pipe_config->has_infoframe,
13406 		    pipe_config->infoframes.enable);
13407 
13408 	if (pipe_config->infoframes.enable &
13409 	    intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GENERAL_CONTROL))
13410 		drm_dbg_kms(&dev_priv->drm, "GCP: 0x%x\n",
13411 			    pipe_config->infoframes.gcp);
13412 	if (pipe_config->infoframes.enable &
13413 	    intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_AVI))
13414 		intel_dump_infoframe(dev_priv, &pipe_config->infoframes.avi);
13415 	if (pipe_config->infoframes.enable &
13416 	    intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_SPD))
13417 		intel_dump_infoframe(dev_priv, &pipe_config->infoframes.spd);
13418 	if (pipe_config->infoframes.enable &
13419 	    intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_VENDOR))
13420 		intel_dump_infoframe(dev_priv, &pipe_config->infoframes.hdmi);
13421 	if (pipe_config->infoframes.enable &
13422 	    intel_hdmi_infoframe_enable(HDMI_INFOFRAME_TYPE_DRM))
13423 		intel_dump_infoframe(dev_priv, &pipe_config->infoframes.drm);
13424 	if (pipe_config->infoframes.enable &
13425 	    intel_hdmi_infoframe_enable(HDMI_PACKET_TYPE_GAMUT_METADATA))
13426 		intel_dump_infoframe(dev_priv, &pipe_config->infoframes.drm);
13427 	if (pipe_config->infoframes.enable &
13428 	    intel_hdmi_infoframe_enable(DP_SDP_VSC))
13429 		intel_dump_dp_vsc_sdp(dev_priv, &pipe_config->infoframes.vsc);
13430 
13431 	drm_dbg_kms(&dev_priv->drm, "requested mode:\n");
13432 	drm_mode_debug_printmodeline(&pipe_config->hw.mode);
13433 	drm_dbg_kms(&dev_priv->drm, "adjusted mode:\n");
13434 	drm_mode_debug_printmodeline(&pipe_config->hw.adjusted_mode);
13435 	intel_dump_crtc_timings(dev_priv, &pipe_config->hw.adjusted_mode);
13436 	drm_dbg_kms(&dev_priv->drm, "pipe mode:\n");
13437 	drm_mode_debug_printmodeline(&pipe_config->hw.pipe_mode);
13438 	intel_dump_crtc_timings(dev_priv, &pipe_config->hw.pipe_mode);
13439 	drm_dbg_kms(&dev_priv->drm,
13440 		    "port clock: %d, pipe src size: %dx%d, pixel rate %d\n",
13441 		    pipe_config->port_clock,
13442 		    pipe_config->pipe_src_w, pipe_config->pipe_src_h,
13443 		    pipe_config->pixel_rate);
13444 
13445 	drm_dbg_kms(&dev_priv->drm, "linetime: %d, ips linetime: %d\n",
13446 		    pipe_config->linetime, pipe_config->ips_linetime);
13447 
13448 	if (INTEL_GEN(dev_priv) >= 9)
13449 		drm_dbg_kms(&dev_priv->drm,
13450 			    "num_scalers: %d, scaler_users: 0x%x, scaler_id: %d\n",
13451 			    crtc->num_scalers,
13452 			    pipe_config->scaler_state.scaler_users,
13453 			    pipe_config->scaler_state.scaler_id);
13454 
13455 	if (HAS_GMCH(dev_priv))
13456 		drm_dbg_kms(&dev_priv->drm,
13457 			    "gmch pfit: control: 0x%08x, ratios: 0x%08x, lvds border: 0x%08x\n",
13458 			    pipe_config->gmch_pfit.control,
13459 			    pipe_config->gmch_pfit.pgm_ratios,
13460 			    pipe_config->gmch_pfit.lvds_border_bits);
13461 	else
13462 		drm_dbg_kms(&dev_priv->drm,
13463 			    "pch pfit: " DRM_RECT_FMT ", %s, force thru: %s\n",
13464 			    DRM_RECT_ARG(&pipe_config->pch_pfit.dst),
13465 			    enableddisabled(pipe_config->pch_pfit.enabled),
13466 			    yesno(pipe_config->pch_pfit.force_thru));
13467 
13468 	drm_dbg_kms(&dev_priv->drm, "ips: %i, double wide: %i\n",
13469 		    pipe_config->ips_enabled, pipe_config->double_wide);
13470 
13471 	intel_dpll_dump_hw_state(dev_priv, &pipe_config->dpll_hw_state);
13472 
13473 	if (IS_CHERRYVIEW(dev_priv))
13474 		drm_dbg_kms(&dev_priv->drm,
13475 			    "cgm_mode: 0x%x gamma_mode: 0x%x gamma_enable: %d csc_enable: %d\n",
13476 			    pipe_config->cgm_mode, pipe_config->gamma_mode,
13477 			    pipe_config->gamma_enable, pipe_config->csc_enable);
13478 	else
13479 		drm_dbg_kms(&dev_priv->drm,
13480 			    "csc_mode: 0x%x gamma_mode: 0x%x gamma_enable: %d csc_enable: %d\n",
13481 			    pipe_config->csc_mode, pipe_config->gamma_mode,
13482 			    pipe_config->gamma_enable, pipe_config->csc_enable);
13483 
13484 	drm_dbg_kms(&dev_priv->drm, "degamma lut: %d entries, gamma lut: %d entries\n",
13485 		    pipe_config->hw.degamma_lut ?
13486 		    drm_color_lut_size(pipe_config->hw.degamma_lut) : 0,
13487 		    pipe_config->hw.gamma_lut ?
13488 		    drm_color_lut_size(pipe_config->hw.gamma_lut) : 0);
13489 
13490 dump_planes:
13491 	if (!state)
13492 		return;
13493 
13494 	for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
13495 		if (plane->pipe == crtc->pipe)
13496 			intel_dump_plane_state(plane_state);
13497 	}
13498 }
13499 
13500 static bool check_digital_port_conflicts(struct intel_atomic_state *state)
13501 {
13502 	struct drm_device *dev = state->base.dev;
13503 	struct drm_connector *connector;
13504 	struct drm_connector_list_iter conn_iter;
13505 	unsigned int used_ports = 0;
13506 	unsigned int used_mst_ports = 0;
13507 	bool ret = true;
13508 
13509 	/*
13510 	 * We're going to peek into connector->state,
13511 	 * hence connection_mutex must be held.
13512 	 */
13513 	drm_modeset_lock_assert_held(&dev->mode_config.connection_mutex);
13514 
13515 	/*
13516 	 * Walk the connector list instead of the encoder
13517 	 * list to detect the problem on ddi platforms
13518 	 * where there's just one encoder per digital port.
13519 	 */
13520 	drm_connector_list_iter_begin(dev, &conn_iter);
13521 	drm_for_each_connector_iter(connector, &conn_iter) {
13522 		struct drm_connector_state *connector_state;
13523 		struct intel_encoder *encoder;
13524 
13525 		connector_state =
13526 			drm_atomic_get_new_connector_state(&state->base,
13527 							   connector);
13528 		if (!connector_state)
13529 			connector_state = connector->state;
13530 
13531 		if (!connector_state->best_encoder)
13532 			continue;
13533 
13534 		encoder = to_intel_encoder(connector_state->best_encoder);
13535 
13536 		drm_WARN_ON(dev, !connector_state->crtc);
13537 
13538 		switch (encoder->type) {
13539 		case INTEL_OUTPUT_DDI:
13540 			if (drm_WARN_ON(dev, !HAS_DDI(to_i915(dev))))
13541 				break;
13542 			fallthrough;
13543 		case INTEL_OUTPUT_DP:
13544 		case INTEL_OUTPUT_HDMI:
13545 		case INTEL_OUTPUT_EDP:
13546 			/* the same port mustn't appear more than once */
13547 			if (used_ports & BIT(encoder->port))
13548 				ret = false;
13549 
13550 			used_ports |= BIT(encoder->port);
13551 			break;
13552 		case INTEL_OUTPUT_DP_MST:
13553 			used_mst_ports |=
13554 				1 << encoder->port;
13555 			break;
13556 		default:
13557 			break;
13558 		}
13559 	}
13560 	drm_connector_list_iter_end(&conn_iter);
13561 
13562 	/* can't mix MST and SST/HDMI on the same port */
13563 	if (used_ports & used_mst_ports)
13564 		return false;
13565 
13566 	return ret;
13567 }
13568 
13569 static void
13570 intel_crtc_copy_uapi_to_hw_state_nomodeset(struct intel_atomic_state *state,
13571 					   struct intel_crtc_state *crtc_state)
13572 {
13573 	const struct intel_crtc_state *from_crtc_state = crtc_state;
13574 
13575 	if (crtc_state->bigjoiner_slave) {
13576 		from_crtc_state = intel_atomic_get_new_crtc_state(state,
13577 								  crtc_state->bigjoiner_linked_crtc);
13578 
13579 		/* No need to copy state if the master state is unchanged */
13580 		if (!from_crtc_state)
13581 			return;
13582 	}
13583 
13584 	intel_crtc_copy_color_blobs(crtc_state, from_crtc_state);
13585 }
13586 
13587 static void
13588 intel_crtc_copy_uapi_to_hw_state(struct intel_atomic_state *state,
13589 				 struct intel_crtc_state *crtc_state)
13590 {
13591 	crtc_state->hw.enable = crtc_state->uapi.enable;
13592 	crtc_state->hw.active = crtc_state->uapi.active;
13593 	crtc_state->hw.mode = crtc_state->uapi.mode;
13594 	crtc_state->hw.adjusted_mode = crtc_state->uapi.adjusted_mode;
13595 	crtc_state->hw.scaling_filter = crtc_state->uapi.scaling_filter;
13596 
13597 	intel_crtc_copy_uapi_to_hw_state_nomodeset(state, crtc_state);
13598 }
13599 
13600 static void intel_crtc_copy_hw_to_uapi_state(struct intel_crtc_state *crtc_state)
13601 {
13602 	if (crtc_state->bigjoiner_slave)
13603 		return;
13604 
13605 	crtc_state->uapi.enable = crtc_state->hw.enable;
13606 	crtc_state->uapi.active = crtc_state->hw.active;
13607 	drm_WARN_ON(crtc_state->uapi.crtc->dev,
13608 		    drm_atomic_set_mode_for_crtc(&crtc_state->uapi, &crtc_state->hw.mode) < 0);
13609 
13610 	crtc_state->uapi.adjusted_mode = crtc_state->hw.adjusted_mode;
13611 	crtc_state->uapi.scaling_filter = crtc_state->hw.scaling_filter;
13612 
13613 	/* copy color blobs to uapi */
13614 	drm_property_replace_blob(&crtc_state->uapi.degamma_lut,
13615 				  crtc_state->hw.degamma_lut);
13616 	drm_property_replace_blob(&crtc_state->uapi.gamma_lut,
13617 				  crtc_state->hw.gamma_lut);
13618 	drm_property_replace_blob(&crtc_state->uapi.ctm,
13619 				  crtc_state->hw.ctm);
13620 }
13621 
13622 static int
13623 copy_bigjoiner_crtc_state(struct intel_crtc_state *crtc_state,
13624 			  const struct intel_crtc_state *from_crtc_state)
13625 {
13626 	struct intel_crtc_state *saved_state;
13627 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
13628 
13629 	saved_state = kmemdup(from_crtc_state, sizeof(*saved_state), GFP_KERNEL);
13630 	if (!saved_state)
13631 		return -ENOMEM;
13632 
13633 	saved_state->uapi = crtc_state->uapi;
13634 	saved_state->scaler_state = crtc_state->scaler_state;
13635 	saved_state->shared_dpll = crtc_state->shared_dpll;
13636 	saved_state->dpll_hw_state = crtc_state->dpll_hw_state;
13637 	saved_state->crc_enabled = crtc_state->crc_enabled;
13638 
13639 	intel_crtc_free_hw_state(crtc_state);
13640 	memcpy(crtc_state, saved_state, sizeof(*crtc_state));
13641 	kfree(saved_state);
13642 
13643 	/* Re-init hw state */
13644 	memset(&crtc_state->hw, 0, sizeof(saved_state->hw));
13645 	crtc_state->hw.enable = from_crtc_state->hw.enable;
13646 	crtc_state->hw.active = from_crtc_state->hw.active;
13647 	crtc_state->hw.pipe_mode = from_crtc_state->hw.pipe_mode;
13648 	crtc_state->hw.adjusted_mode = from_crtc_state->hw.adjusted_mode;
13649 
13650 	/* Some fixups */
13651 	crtc_state->uapi.mode_changed = from_crtc_state->uapi.mode_changed;
13652 	crtc_state->uapi.connectors_changed = from_crtc_state->uapi.connectors_changed;
13653 	crtc_state->uapi.active_changed = from_crtc_state->uapi.active_changed;
13654 	crtc_state->nv12_planes = crtc_state->c8_planes = crtc_state->update_planes = 0;
13655 	crtc_state->bigjoiner_linked_crtc = to_intel_crtc(from_crtc_state->uapi.crtc);
13656 	crtc_state->bigjoiner_slave = true;
13657 	crtc_state->cpu_transcoder = (enum transcoder)crtc->pipe;
13658 	crtc_state->has_audio = false;
13659 
13660 	return 0;
13661 }
13662 
13663 static int
13664 intel_crtc_prepare_cleared_state(struct intel_atomic_state *state,
13665 				 struct intel_crtc_state *crtc_state)
13666 {
13667 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
13668 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
13669 	struct intel_crtc_state *saved_state;
13670 
13671 	saved_state = intel_crtc_state_alloc(crtc);
13672 	if (!saved_state)
13673 		return -ENOMEM;
13674 
13675 	/* free the old crtc_state->hw members */
13676 	intel_crtc_free_hw_state(crtc_state);
13677 
13678 	/* FIXME: before the switch to atomic started, a new pipe_config was
13679 	 * kzalloc'd. Code that depends on any field being zero should be
13680 	 * fixed, so that the crtc_state can be safely duplicated. For now,
13681 	 * only fields that are know to not cause problems are preserved. */
13682 
13683 	saved_state->uapi = crtc_state->uapi;
13684 	saved_state->scaler_state = crtc_state->scaler_state;
13685 	saved_state->shared_dpll = crtc_state->shared_dpll;
13686 	saved_state->dpll_hw_state = crtc_state->dpll_hw_state;
13687 	memcpy(saved_state->icl_port_dplls, crtc_state->icl_port_dplls,
13688 	       sizeof(saved_state->icl_port_dplls));
13689 	saved_state->crc_enabled = crtc_state->crc_enabled;
13690 	if (IS_G4X(dev_priv) ||
13691 	    IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
13692 		saved_state->wm = crtc_state->wm;
13693 
13694 	memcpy(crtc_state, saved_state, sizeof(*crtc_state));
13695 	kfree(saved_state);
13696 
13697 	intel_crtc_copy_uapi_to_hw_state(state, crtc_state);
13698 
13699 	return 0;
13700 }
13701 
13702 static int
13703 intel_modeset_pipe_config(struct intel_atomic_state *state,
13704 			  struct intel_crtc_state *pipe_config)
13705 {
13706 	struct drm_crtc *crtc = pipe_config->uapi.crtc;
13707 	struct drm_i915_private *i915 = to_i915(pipe_config->uapi.crtc->dev);
13708 	struct drm_connector *connector;
13709 	struct drm_connector_state *connector_state;
13710 	int base_bpp, ret, i;
13711 	bool retry = true;
13712 
13713 	pipe_config->cpu_transcoder =
13714 		(enum transcoder) to_intel_crtc(crtc)->pipe;
13715 
13716 	/*
13717 	 * Sanitize sync polarity flags based on requested ones. If neither
13718 	 * positive or negative polarity is requested, treat this as meaning
13719 	 * negative polarity.
13720 	 */
13721 	if (!(pipe_config->hw.adjusted_mode.flags &
13722 	      (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NHSYNC)))
13723 		pipe_config->hw.adjusted_mode.flags |= DRM_MODE_FLAG_NHSYNC;
13724 
13725 	if (!(pipe_config->hw.adjusted_mode.flags &
13726 	      (DRM_MODE_FLAG_PVSYNC | DRM_MODE_FLAG_NVSYNC)))
13727 		pipe_config->hw.adjusted_mode.flags |= DRM_MODE_FLAG_NVSYNC;
13728 
13729 	ret = compute_baseline_pipe_bpp(to_intel_crtc(crtc),
13730 					pipe_config);
13731 	if (ret)
13732 		return ret;
13733 
13734 	base_bpp = pipe_config->pipe_bpp;
13735 
13736 	/*
13737 	 * Determine the real pipe dimensions. Note that stereo modes can
13738 	 * increase the actual pipe size due to the frame doubling and
13739 	 * insertion of additional space for blanks between the frame. This
13740 	 * is stored in the crtc timings. We use the requested mode to do this
13741 	 * computation to clearly distinguish it from the adjusted mode, which
13742 	 * can be changed by the connectors in the below retry loop.
13743 	 */
13744 	drm_mode_get_hv_timing(&pipe_config->hw.mode,
13745 			       &pipe_config->pipe_src_w,
13746 			       &pipe_config->pipe_src_h);
13747 
13748 	for_each_new_connector_in_state(&state->base, connector, connector_state, i) {
13749 		struct intel_encoder *encoder =
13750 			to_intel_encoder(connector_state->best_encoder);
13751 
13752 		if (connector_state->crtc != crtc)
13753 			continue;
13754 
13755 		if (!check_single_encoder_cloning(state, to_intel_crtc(crtc), encoder)) {
13756 			drm_dbg_kms(&i915->drm,
13757 				    "rejecting invalid cloning configuration\n");
13758 			return -EINVAL;
13759 		}
13760 
13761 		/*
13762 		 * Determine output_types before calling the .compute_config()
13763 		 * hooks so that the hooks can use this information safely.
13764 		 */
13765 		if (encoder->compute_output_type)
13766 			pipe_config->output_types |=
13767 				BIT(encoder->compute_output_type(encoder, pipe_config,
13768 								 connector_state));
13769 		else
13770 			pipe_config->output_types |= BIT(encoder->type);
13771 	}
13772 
13773 encoder_retry:
13774 	/* Ensure the port clock defaults are reset when retrying. */
13775 	pipe_config->port_clock = 0;
13776 	pipe_config->pixel_multiplier = 1;
13777 
13778 	/* Fill in default crtc timings, allow encoders to overwrite them. */
13779 	drm_mode_set_crtcinfo(&pipe_config->hw.adjusted_mode,
13780 			      CRTC_STEREO_DOUBLE);
13781 
13782 	/* Pass our mode to the connectors and the CRTC to give them a chance to
13783 	 * adjust it according to limitations or connector properties, and also
13784 	 * a chance to reject the mode entirely.
13785 	 */
13786 	for_each_new_connector_in_state(&state->base, connector, connector_state, i) {
13787 		struct intel_encoder *encoder =
13788 			to_intel_encoder(connector_state->best_encoder);
13789 
13790 		if (connector_state->crtc != crtc)
13791 			continue;
13792 
13793 		ret = encoder->compute_config(encoder, pipe_config,
13794 					      connector_state);
13795 		if (ret < 0) {
13796 			if (ret != -EDEADLK)
13797 				drm_dbg_kms(&i915->drm,
13798 					    "Encoder config failure: %d\n",
13799 					    ret);
13800 			return ret;
13801 		}
13802 	}
13803 
13804 	/* Set default port clock if not overwritten by the encoder. Needs to be
13805 	 * done afterwards in case the encoder adjusts the mode. */
13806 	if (!pipe_config->port_clock)
13807 		pipe_config->port_clock = pipe_config->hw.adjusted_mode.crtc_clock
13808 			* pipe_config->pixel_multiplier;
13809 
13810 	ret = intel_crtc_compute_config(to_intel_crtc(crtc), pipe_config);
13811 	if (ret == -EDEADLK)
13812 		return ret;
13813 	if (ret < 0) {
13814 		drm_dbg_kms(&i915->drm, "CRTC fixup failed\n");
13815 		return ret;
13816 	}
13817 
13818 	if (ret == RETRY) {
13819 		if (drm_WARN(&i915->drm, !retry,
13820 			     "loop in pipe configuration computation\n"))
13821 			return -EINVAL;
13822 
13823 		drm_dbg_kms(&i915->drm, "CRTC bw constrained, retrying\n");
13824 		retry = false;
13825 		goto encoder_retry;
13826 	}
13827 
13828 	/* Dithering seems to not pass-through bits correctly when it should, so
13829 	 * only enable it on 6bpc panels and when its not a compliance
13830 	 * test requesting 6bpc video pattern.
13831 	 */
13832 	pipe_config->dither = (pipe_config->pipe_bpp == 6*3) &&
13833 		!pipe_config->dither_force_disable;
13834 	drm_dbg_kms(&i915->drm,
13835 		    "hw max bpp: %i, pipe bpp: %i, dithering: %i\n",
13836 		    base_bpp, pipe_config->pipe_bpp, pipe_config->dither);
13837 
13838 	return 0;
13839 }
13840 
13841 static int
13842 intel_modeset_pipe_config_late(struct intel_crtc_state *crtc_state)
13843 {
13844 	struct intel_atomic_state *state =
13845 		to_intel_atomic_state(crtc_state->uapi.state);
13846 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
13847 	struct drm_connector_state *conn_state;
13848 	struct drm_connector *connector;
13849 	int i;
13850 
13851 	for_each_new_connector_in_state(&state->base, connector,
13852 					conn_state, i) {
13853 		struct intel_encoder *encoder =
13854 			to_intel_encoder(conn_state->best_encoder);
13855 		int ret;
13856 
13857 		if (conn_state->crtc != &crtc->base ||
13858 		    !encoder->compute_config_late)
13859 			continue;
13860 
13861 		ret = encoder->compute_config_late(encoder, crtc_state,
13862 						   conn_state);
13863 		if (ret)
13864 			return ret;
13865 	}
13866 
13867 	return 0;
13868 }
13869 
13870 bool intel_fuzzy_clock_check(int clock1, int clock2)
13871 {
13872 	int diff;
13873 
13874 	if (clock1 == clock2)
13875 		return true;
13876 
13877 	if (!clock1 || !clock2)
13878 		return false;
13879 
13880 	diff = abs(clock1 - clock2);
13881 
13882 	if (((((diff + clock1 + clock2) * 100)) / (clock1 + clock2)) < 105)
13883 		return true;
13884 
13885 	return false;
13886 }
13887 
13888 static bool
13889 intel_compare_m_n(unsigned int m, unsigned int n,
13890 		  unsigned int m2, unsigned int n2,
13891 		  bool exact)
13892 {
13893 	if (m == m2 && n == n2)
13894 		return true;
13895 
13896 	if (exact || !m || !n || !m2 || !n2)
13897 		return false;
13898 
13899 	BUILD_BUG_ON(DATA_LINK_M_N_MASK > INT_MAX);
13900 
13901 	if (n > n2) {
13902 		while (n > n2) {
13903 			m2 <<= 1;
13904 			n2 <<= 1;
13905 		}
13906 	} else if (n < n2) {
13907 		while (n < n2) {
13908 			m <<= 1;
13909 			n <<= 1;
13910 		}
13911 	}
13912 
13913 	if (n != n2)
13914 		return false;
13915 
13916 	return intel_fuzzy_clock_check(m, m2);
13917 }
13918 
13919 static bool
13920 intel_compare_link_m_n(const struct intel_link_m_n *m_n,
13921 		       const struct intel_link_m_n *m2_n2,
13922 		       bool exact)
13923 {
13924 	return m_n->tu == m2_n2->tu &&
13925 		intel_compare_m_n(m_n->gmch_m, m_n->gmch_n,
13926 				  m2_n2->gmch_m, m2_n2->gmch_n, exact) &&
13927 		intel_compare_m_n(m_n->link_m, m_n->link_n,
13928 				  m2_n2->link_m, m2_n2->link_n, exact);
13929 }
13930 
13931 static bool
13932 intel_compare_infoframe(const union hdmi_infoframe *a,
13933 			const union hdmi_infoframe *b)
13934 {
13935 	return memcmp(a, b, sizeof(*a)) == 0;
13936 }
13937 
13938 static bool
13939 intel_compare_dp_vsc_sdp(const struct drm_dp_vsc_sdp *a,
13940 			 const struct drm_dp_vsc_sdp *b)
13941 {
13942 	return memcmp(a, b, sizeof(*a)) == 0;
13943 }
13944 
13945 static void
13946 pipe_config_infoframe_mismatch(struct drm_i915_private *dev_priv,
13947 			       bool fastset, const char *name,
13948 			       const union hdmi_infoframe *a,
13949 			       const union hdmi_infoframe *b)
13950 {
13951 	if (fastset) {
13952 		if (!drm_debug_enabled(DRM_UT_KMS))
13953 			return;
13954 
13955 		drm_dbg_kms(&dev_priv->drm,
13956 			    "fastset mismatch in %s infoframe\n", name);
13957 		drm_dbg_kms(&dev_priv->drm, "expected:\n");
13958 		hdmi_infoframe_log(KERN_DEBUG, dev_priv->drm.dev, a);
13959 		drm_dbg_kms(&dev_priv->drm, "found:\n");
13960 		hdmi_infoframe_log(KERN_DEBUG, dev_priv->drm.dev, b);
13961 	} else {
13962 		drm_err(&dev_priv->drm, "mismatch in %s infoframe\n", name);
13963 		drm_err(&dev_priv->drm, "expected:\n");
13964 		hdmi_infoframe_log(KERN_ERR, dev_priv->drm.dev, a);
13965 		drm_err(&dev_priv->drm, "found:\n");
13966 		hdmi_infoframe_log(KERN_ERR, dev_priv->drm.dev, b);
13967 	}
13968 }
13969 
13970 static void
13971 pipe_config_dp_vsc_sdp_mismatch(struct drm_i915_private *dev_priv,
13972 				bool fastset, const char *name,
13973 				const struct drm_dp_vsc_sdp *a,
13974 				const struct drm_dp_vsc_sdp *b)
13975 {
13976 	if (fastset) {
13977 		if (!drm_debug_enabled(DRM_UT_KMS))
13978 			return;
13979 
13980 		drm_dbg_kms(&dev_priv->drm,
13981 			    "fastset mismatch in %s dp sdp\n", name);
13982 		drm_dbg_kms(&dev_priv->drm, "expected:\n");
13983 		drm_dp_vsc_sdp_log(KERN_DEBUG, dev_priv->drm.dev, a);
13984 		drm_dbg_kms(&dev_priv->drm, "found:\n");
13985 		drm_dp_vsc_sdp_log(KERN_DEBUG, dev_priv->drm.dev, b);
13986 	} else {
13987 		drm_err(&dev_priv->drm, "mismatch in %s dp sdp\n", name);
13988 		drm_err(&dev_priv->drm, "expected:\n");
13989 		drm_dp_vsc_sdp_log(KERN_ERR, dev_priv->drm.dev, a);
13990 		drm_err(&dev_priv->drm, "found:\n");
13991 		drm_dp_vsc_sdp_log(KERN_ERR, dev_priv->drm.dev, b);
13992 	}
13993 }
13994 
13995 static void __printf(4, 5)
13996 pipe_config_mismatch(bool fastset, const struct intel_crtc *crtc,
13997 		     const char *name, const char *format, ...)
13998 {
13999 	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
14000 	struct va_format vaf;
14001 	va_list args;
14002 
14003 	va_start(args, format);
14004 	vaf.fmt = format;
14005 	vaf.va = &args;
14006 
14007 	if (fastset)
14008 		drm_dbg_kms(&i915->drm,
14009 			    "[CRTC:%d:%s] fastset mismatch in %s %pV\n",
14010 			    crtc->base.base.id, crtc->base.name, name, &vaf);
14011 	else
14012 		drm_err(&i915->drm, "[CRTC:%d:%s] mismatch in %s %pV\n",
14013 			crtc->base.base.id, crtc->base.name, name, &vaf);
14014 
14015 	va_end(args);
14016 }
14017 
14018 static bool fastboot_enabled(struct drm_i915_private *dev_priv)
14019 {
14020 	if (dev_priv->params.fastboot != -1)
14021 		return dev_priv->params.fastboot;
14022 
14023 	/* Enable fastboot by default on Skylake and newer */
14024 	if (INTEL_GEN(dev_priv) >= 9)
14025 		return true;
14026 
14027 	/* Enable fastboot by default on VLV and CHV */
14028 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
14029 		return true;
14030 
14031 	/* Disabled by default on all others */
14032 	return false;
14033 }
14034 
14035 static bool
14036 intel_pipe_config_compare(const struct intel_crtc_state *current_config,
14037 			  const struct intel_crtc_state *pipe_config,
14038 			  bool fastset)
14039 {
14040 	struct drm_i915_private *dev_priv = to_i915(current_config->uapi.crtc->dev);
14041 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
14042 	bool ret = true;
14043 	u32 bp_gamma = 0;
14044 	bool fixup_inherited = fastset &&
14045 		current_config->inherited && !pipe_config->inherited;
14046 
14047 	if (fixup_inherited && !fastboot_enabled(dev_priv)) {
14048 		drm_dbg_kms(&dev_priv->drm,
14049 			    "initial modeset and fastboot not set\n");
14050 		ret = false;
14051 	}
14052 
14053 #define PIPE_CONF_CHECK_X(name) do { \
14054 	if (current_config->name != pipe_config->name) { \
14055 		pipe_config_mismatch(fastset, crtc, __stringify(name), \
14056 				     "(expected 0x%08x, found 0x%08x)", \
14057 				     current_config->name, \
14058 				     pipe_config->name); \
14059 		ret = false; \
14060 	} \
14061 } while (0)
14062 
14063 #define PIPE_CONF_CHECK_I(name) do { \
14064 	if (current_config->name != pipe_config->name) { \
14065 		pipe_config_mismatch(fastset, crtc, __stringify(name), \
14066 				     "(expected %i, found %i)", \
14067 				     current_config->name, \
14068 				     pipe_config->name); \
14069 		ret = false; \
14070 	} \
14071 } while (0)
14072 
14073 #define PIPE_CONF_CHECK_BOOL(name) do { \
14074 	if (current_config->name != pipe_config->name) { \
14075 		pipe_config_mismatch(fastset, crtc,  __stringify(name), \
14076 				     "(expected %s, found %s)", \
14077 				     yesno(current_config->name), \
14078 				     yesno(pipe_config->name)); \
14079 		ret = false; \
14080 	} \
14081 } while (0)
14082 
14083 /*
14084  * Checks state where we only read out the enabling, but not the entire
14085  * state itself (like full infoframes or ELD for audio). These states
14086  * require a full modeset on bootup to fix up.
14087  */
14088 #define PIPE_CONF_CHECK_BOOL_INCOMPLETE(name) do { \
14089 	if (!fixup_inherited || (!current_config->name && !pipe_config->name)) { \
14090 		PIPE_CONF_CHECK_BOOL(name); \
14091 	} else { \
14092 		pipe_config_mismatch(fastset, crtc, __stringify(name), \
14093 				     "unable to verify whether state matches exactly, forcing modeset (expected %s, found %s)", \
14094 				     yesno(current_config->name), \
14095 				     yesno(pipe_config->name)); \
14096 		ret = false; \
14097 	} \
14098 } while (0)
14099 
14100 #define PIPE_CONF_CHECK_P(name) do { \
14101 	if (current_config->name != pipe_config->name) { \
14102 		pipe_config_mismatch(fastset, crtc, __stringify(name), \
14103 				     "(expected %p, found %p)", \
14104 				     current_config->name, \
14105 				     pipe_config->name); \
14106 		ret = false; \
14107 	} \
14108 } while (0)
14109 
14110 #define PIPE_CONF_CHECK_M_N(name) do { \
14111 	if (!intel_compare_link_m_n(&current_config->name, \
14112 				    &pipe_config->name,\
14113 				    !fastset)) { \
14114 		pipe_config_mismatch(fastset, crtc, __stringify(name), \
14115 				     "(expected tu %i gmch %i/%i link %i/%i, " \
14116 				     "found tu %i, gmch %i/%i link %i/%i)", \
14117 				     current_config->name.tu, \
14118 				     current_config->name.gmch_m, \
14119 				     current_config->name.gmch_n, \
14120 				     current_config->name.link_m, \
14121 				     current_config->name.link_n, \
14122 				     pipe_config->name.tu, \
14123 				     pipe_config->name.gmch_m, \
14124 				     pipe_config->name.gmch_n, \
14125 				     pipe_config->name.link_m, \
14126 				     pipe_config->name.link_n); \
14127 		ret = false; \
14128 	} \
14129 } while (0)
14130 
14131 /* This is required for BDW+ where there is only one set of registers for
14132  * switching between high and low RR.
14133  * This macro can be used whenever a comparison has to be made between one
14134  * hw state and multiple sw state variables.
14135  */
14136 #define PIPE_CONF_CHECK_M_N_ALT(name, alt_name) do { \
14137 	if (!intel_compare_link_m_n(&current_config->name, \
14138 				    &pipe_config->name, !fastset) && \
14139 	    !intel_compare_link_m_n(&current_config->alt_name, \
14140 				    &pipe_config->name, !fastset)) { \
14141 		pipe_config_mismatch(fastset, crtc, __stringify(name), \
14142 				     "(expected tu %i gmch %i/%i link %i/%i, " \
14143 				     "or tu %i gmch %i/%i link %i/%i, " \
14144 				     "found tu %i, gmch %i/%i link %i/%i)", \
14145 				     current_config->name.tu, \
14146 				     current_config->name.gmch_m, \
14147 				     current_config->name.gmch_n, \
14148 				     current_config->name.link_m, \
14149 				     current_config->name.link_n, \
14150 				     current_config->alt_name.tu, \
14151 				     current_config->alt_name.gmch_m, \
14152 				     current_config->alt_name.gmch_n, \
14153 				     current_config->alt_name.link_m, \
14154 				     current_config->alt_name.link_n, \
14155 				     pipe_config->name.tu, \
14156 				     pipe_config->name.gmch_m, \
14157 				     pipe_config->name.gmch_n, \
14158 				     pipe_config->name.link_m, \
14159 				     pipe_config->name.link_n); \
14160 		ret = false; \
14161 	} \
14162 } while (0)
14163 
14164 #define PIPE_CONF_CHECK_FLAGS(name, mask) do { \
14165 	if ((current_config->name ^ pipe_config->name) & (mask)) { \
14166 		pipe_config_mismatch(fastset, crtc, __stringify(name), \
14167 				     "(%x) (expected %i, found %i)", \
14168 				     (mask), \
14169 				     current_config->name & (mask), \
14170 				     pipe_config->name & (mask)); \
14171 		ret = false; \
14172 	} \
14173 } while (0)
14174 
14175 #define PIPE_CONF_CHECK_CLOCK_FUZZY(name) do { \
14176 	if (!intel_fuzzy_clock_check(current_config->name, pipe_config->name)) { \
14177 		pipe_config_mismatch(fastset, crtc, __stringify(name), \
14178 				     "(expected %i, found %i)", \
14179 				     current_config->name, \
14180 				     pipe_config->name); \
14181 		ret = false; \
14182 	} \
14183 } while (0)
14184 
14185 #define PIPE_CONF_CHECK_INFOFRAME(name) do { \
14186 	if (!intel_compare_infoframe(&current_config->infoframes.name, \
14187 				     &pipe_config->infoframes.name)) { \
14188 		pipe_config_infoframe_mismatch(dev_priv, fastset, __stringify(name), \
14189 					       &current_config->infoframes.name, \
14190 					       &pipe_config->infoframes.name); \
14191 		ret = false; \
14192 	} \
14193 } while (0)
14194 
14195 #define PIPE_CONF_CHECK_DP_VSC_SDP(name) do { \
14196 	if (!current_config->has_psr && !pipe_config->has_psr && \
14197 	    !intel_compare_dp_vsc_sdp(&current_config->infoframes.name, \
14198 				      &pipe_config->infoframes.name)) { \
14199 		pipe_config_dp_vsc_sdp_mismatch(dev_priv, fastset, __stringify(name), \
14200 						&current_config->infoframes.name, \
14201 						&pipe_config->infoframes.name); \
14202 		ret = false; \
14203 	} \
14204 } while (0)
14205 
14206 #define PIPE_CONF_CHECK_COLOR_LUT(name1, name2, bit_precision) do { \
14207 	if (current_config->name1 != pipe_config->name1) { \
14208 		pipe_config_mismatch(fastset, crtc, __stringify(name1), \
14209 				"(expected %i, found %i, won't compare lut values)", \
14210 				current_config->name1, \
14211 				pipe_config->name1); \
14212 		ret = false;\
14213 	} else { \
14214 		if (!intel_color_lut_equal(current_config->name2, \
14215 					pipe_config->name2, pipe_config->name1, \
14216 					bit_precision)) { \
14217 			pipe_config_mismatch(fastset, crtc, __stringify(name2), \
14218 					"hw_state doesn't match sw_state"); \
14219 			ret = false; \
14220 		} \
14221 	} \
14222 } while (0)
14223 
14224 #define PIPE_CONF_QUIRK(quirk) \
14225 	((current_config->quirks | pipe_config->quirks) & (quirk))
14226 
14227 	PIPE_CONF_CHECK_I(cpu_transcoder);
14228 
14229 	PIPE_CONF_CHECK_BOOL(has_pch_encoder);
14230 	PIPE_CONF_CHECK_I(fdi_lanes);
14231 	PIPE_CONF_CHECK_M_N(fdi_m_n);
14232 
14233 	PIPE_CONF_CHECK_I(lane_count);
14234 	PIPE_CONF_CHECK_X(lane_lat_optim_mask);
14235 
14236 	if (INTEL_GEN(dev_priv) < 8) {
14237 		PIPE_CONF_CHECK_M_N(dp_m_n);
14238 
14239 		if (current_config->has_drrs)
14240 			PIPE_CONF_CHECK_M_N(dp_m2_n2);
14241 	} else
14242 		PIPE_CONF_CHECK_M_N_ALT(dp_m_n, dp_m2_n2);
14243 
14244 	PIPE_CONF_CHECK_X(output_types);
14245 
14246 	/* FIXME do the readout properly and get rid of this quirk */
14247 	if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_BIGJOINER_SLAVE)) {
14248 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_hdisplay);
14249 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_htotal);
14250 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_hblank_start);
14251 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_hblank_end);
14252 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_hsync_start);
14253 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_hsync_end);
14254 
14255 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_vdisplay);
14256 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_vtotal);
14257 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_vblank_start);
14258 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_vblank_end);
14259 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_vsync_start);
14260 		PIPE_CONF_CHECK_I(hw.pipe_mode.crtc_vsync_end);
14261 
14262 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_hdisplay);
14263 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_htotal);
14264 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_hblank_start);
14265 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_hblank_end);
14266 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_hsync_start);
14267 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_hsync_end);
14268 
14269 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_vdisplay);
14270 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_vtotal);
14271 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_vblank_start);
14272 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_vblank_end);
14273 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_vsync_start);
14274 		PIPE_CONF_CHECK_I(hw.adjusted_mode.crtc_vsync_end);
14275 
14276 		PIPE_CONF_CHECK_I(pixel_multiplier);
14277 
14278 		PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags,
14279 				      DRM_MODE_FLAG_INTERLACE);
14280 
14281 		if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_MODE_SYNC_FLAGS)) {
14282 			PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags,
14283 					      DRM_MODE_FLAG_PHSYNC);
14284 			PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags,
14285 					      DRM_MODE_FLAG_NHSYNC);
14286 			PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags,
14287 					      DRM_MODE_FLAG_PVSYNC);
14288 			PIPE_CONF_CHECK_FLAGS(hw.adjusted_mode.flags,
14289 					      DRM_MODE_FLAG_NVSYNC);
14290 		}
14291 	}
14292 
14293 	PIPE_CONF_CHECK_I(output_format);
14294 	PIPE_CONF_CHECK_BOOL(has_hdmi_sink);
14295 	if ((INTEL_GEN(dev_priv) < 8 && !IS_HASWELL(dev_priv)) ||
14296 	    IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
14297 		PIPE_CONF_CHECK_BOOL(limited_color_range);
14298 
14299 	PIPE_CONF_CHECK_BOOL(hdmi_scrambling);
14300 	PIPE_CONF_CHECK_BOOL(hdmi_high_tmds_clock_ratio);
14301 	PIPE_CONF_CHECK_BOOL(has_infoframe);
14302 	/* FIXME do the readout properly and get rid of this quirk */
14303 	if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_BIGJOINER_SLAVE))
14304 		PIPE_CONF_CHECK_BOOL(fec_enable);
14305 
14306 	PIPE_CONF_CHECK_BOOL_INCOMPLETE(has_audio);
14307 
14308 	PIPE_CONF_CHECK_X(gmch_pfit.control);
14309 	/* pfit ratios are autocomputed by the hw on gen4+ */
14310 	if (INTEL_GEN(dev_priv) < 4)
14311 		PIPE_CONF_CHECK_X(gmch_pfit.pgm_ratios);
14312 	PIPE_CONF_CHECK_X(gmch_pfit.lvds_border_bits);
14313 
14314 	/*
14315 	 * Changing the EDP transcoder input mux
14316 	 * (A_ONOFF vs. A_ON) requires a full modeset.
14317 	 */
14318 	PIPE_CONF_CHECK_BOOL(pch_pfit.force_thru);
14319 
14320 	if (!fastset) {
14321 		PIPE_CONF_CHECK_I(pipe_src_w);
14322 		PIPE_CONF_CHECK_I(pipe_src_h);
14323 
14324 		PIPE_CONF_CHECK_BOOL(pch_pfit.enabled);
14325 		if (current_config->pch_pfit.enabled) {
14326 			PIPE_CONF_CHECK_I(pch_pfit.dst.x1);
14327 			PIPE_CONF_CHECK_I(pch_pfit.dst.y1);
14328 			PIPE_CONF_CHECK_I(pch_pfit.dst.x2);
14329 			PIPE_CONF_CHECK_I(pch_pfit.dst.y2);
14330 		}
14331 
14332 		PIPE_CONF_CHECK_I(scaler_state.scaler_id);
14333 		/* FIXME do the readout properly and get rid of this quirk */
14334 		if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_BIGJOINER_SLAVE))
14335 			PIPE_CONF_CHECK_CLOCK_FUZZY(pixel_rate);
14336 
14337 		PIPE_CONF_CHECK_X(gamma_mode);
14338 		if (IS_CHERRYVIEW(dev_priv))
14339 			PIPE_CONF_CHECK_X(cgm_mode);
14340 		else
14341 			PIPE_CONF_CHECK_X(csc_mode);
14342 		PIPE_CONF_CHECK_BOOL(gamma_enable);
14343 		PIPE_CONF_CHECK_BOOL(csc_enable);
14344 
14345 		PIPE_CONF_CHECK_I(linetime);
14346 		PIPE_CONF_CHECK_I(ips_linetime);
14347 
14348 		bp_gamma = intel_color_get_gamma_bit_precision(pipe_config);
14349 		if (bp_gamma)
14350 			PIPE_CONF_CHECK_COLOR_LUT(gamma_mode, hw.gamma_lut, bp_gamma);
14351 	}
14352 
14353 	PIPE_CONF_CHECK_BOOL(double_wide);
14354 
14355 	PIPE_CONF_CHECK_P(shared_dpll);
14356 
14357 	/* FIXME do the readout properly and get rid of this quirk */
14358 	if (!PIPE_CONF_QUIRK(PIPE_CONFIG_QUIRK_BIGJOINER_SLAVE)) {
14359 		PIPE_CONF_CHECK_X(dpll_hw_state.dpll);
14360 		PIPE_CONF_CHECK_X(dpll_hw_state.dpll_md);
14361 		PIPE_CONF_CHECK_X(dpll_hw_state.fp0);
14362 		PIPE_CONF_CHECK_X(dpll_hw_state.fp1);
14363 		PIPE_CONF_CHECK_X(dpll_hw_state.wrpll);
14364 		PIPE_CONF_CHECK_X(dpll_hw_state.spll);
14365 		PIPE_CONF_CHECK_X(dpll_hw_state.ctrl1);
14366 		PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr1);
14367 		PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr2);
14368 		PIPE_CONF_CHECK_X(dpll_hw_state.cfgcr0);
14369 		PIPE_CONF_CHECK_X(dpll_hw_state.ebb0);
14370 		PIPE_CONF_CHECK_X(dpll_hw_state.ebb4);
14371 		PIPE_CONF_CHECK_X(dpll_hw_state.pll0);
14372 		PIPE_CONF_CHECK_X(dpll_hw_state.pll1);
14373 		PIPE_CONF_CHECK_X(dpll_hw_state.pll2);
14374 		PIPE_CONF_CHECK_X(dpll_hw_state.pll3);
14375 		PIPE_CONF_CHECK_X(dpll_hw_state.pll6);
14376 		PIPE_CONF_CHECK_X(dpll_hw_state.pll8);
14377 		PIPE_CONF_CHECK_X(dpll_hw_state.pll9);
14378 		PIPE_CONF_CHECK_X(dpll_hw_state.pll10);
14379 		PIPE_CONF_CHECK_X(dpll_hw_state.pcsdw12);
14380 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_refclkin_ctl);
14381 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_clktop2_coreclkctl1);
14382 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_clktop2_hsclkctl);
14383 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_div0);
14384 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_div1);
14385 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_lf);
14386 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_frac_lock);
14387 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_ssc);
14388 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_bias);
14389 		PIPE_CONF_CHECK_X(dpll_hw_state.mg_pll_tdc_coldst_bias);
14390 
14391 		PIPE_CONF_CHECK_X(dsi_pll.ctrl);
14392 		PIPE_CONF_CHECK_X(dsi_pll.div);
14393 
14394 		if (IS_G4X(dev_priv) || INTEL_GEN(dev_priv) >= 5)
14395 			PIPE_CONF_CHECK_I(pipe_bpp);
14396 
14397 		PIPE_CONF_CHECK_CLOCK_FUZZY(hw.pipe_mode.crtc_clock);
14398 		PIPE_CONF_CHECK_CLOCK_FUZZY(hw.adjusted_mode.crtc_clock);
14399 		PIPE_CONF_CHECK_CLOCK_FUZZY(port_clock);
14400 
14401 		PIPE_CONF_CHECK_I(min_voltage_level);
14402 	}
14403 
14404 	PIPE_CONF_CHECK_X(infoframes.enable);
14405 	PIPE_CONF_CHECK_X(infoframes.gcp);
14406 	PIPE_CONF_CHECK_INFOFRAME(avi);
14407 	PIPE_CONF_CHECK_INFOFRAME(spd);
14408 	PIPE_CONF_CHECK_INFOFRAME(hdmi);
14409 	PIPE_CONF_CHECK_INFOFRAME(drm);
14410 	PIPE_CONF_CHECK_DP_VSC_SDP(vsc);
14411 
14412 	PIPE_CONF_CHECK_X(sync_mode_slaves_mask);
14413 	PIPE_CONF_CHECK_I(master_transcoder);
14414 	PIPE_CONF_CHECK_BOOL(bigjoiner);
14415 	PIPE_CONF_CHECK_BOOL(bigjoiner_slave);
14416 	PIPE_CONF_CHECK_P(bigjoiner_linked_crtc);
14417 
14418 	PIPE_CONF_CHECK_I(dsc.compression_enable);
14419 	PIPE_CONF_CHECK_I(dsc.dsc_split);
14420 	PIPE_CONF_CHECK_I(dsc.compressed_bpp);
14421 
14422 	PIPE_CONF_CHECK_I(mst_master_transcoder);
14423 
14424 #undef PIPE_CONF_CHECK_X
14425 #undef PIPE_CONF_CHECK_I
14426 #undef PIPE_CONF_CHECK_BOOL
14427 #undef PIPE_CONF_CHECK_BOOL_INCOMPLETE
14428 #undef PIPE_CONF_CHECK_P
14429 #undef PIPE_CONF_CHECK_FLAGS
14430 #undef PIPE_CONF_CHECK_CLOCK_FUZZY
14431 #undef PIPE_CONF_CHECK_COLOR_LUT
14432 #undef PIPE_CONF_QUIRK
14433 
14434 	return ret;
14435 }
14436 
14437 static void intel_pipe_config_sanity_check(struct drm_i915_private *dev_priv,
14438 					   const struct intel_crtc_state *pipe_config)
14439 {
14440 	if (pipe_config->has_pch_encoder) {
14441 		int fdi_dotclock = intel_dotclock_calculate(intel_fdi_link_freq(dev_priv, pipe_config),
14442 							    &pipe_config->fdi_m_n);
14443 		int dotclock = pipe_config->hw.adjusted_mode.crtc_clock;
14444 
14445 		/*
14446 		 * FDI already provided one idea for the dotclock.
14447 		 * Yell if the encoder disagrees.
14448 		 */
14449 		drm_WARN(&dev_priv->drm,
14450 			 !intel_fuzzy_clock_check(fdi_dotclock, dotclock),
14451 			 "FDI dotclock and encoder dotclock mismatch, fdi: %i, encoder: %i\n",
14452 			 fdi_dotclock, dotclock);
14453 	}
14454 }
14455 
14456 static void verify_wm_state(struct intel_crtc *crtc,
14457 			    struct intel_crtc_state *new_crtc_state)
14458 {
14459 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
14460 	struct skl_hw_state {
14461 		struct skl_ddb_entry ddb_y[I915_MAX_PLANES];
14462 		struct skl_ddb_entry ddb_uv[I915_MAX_PLANES];
14463 		struct skl_pipe_wm wm;
14464 	} *hw;
14465 	struct skl_pipe_wm *sw_wm;
14466 	struct skl_ddb_entry *hw_ddb_entry, *sw_ddb_entry;
14467 	u8 hw_enabled_slices;
14468 	const enum pipe pipe = crtc->pipe;
14469 	int plane, level, max_level = ilk_wm_max_level(dev_priv);
14470 
14471 	if (INTEL_GEN(dev_priv) < 9 || !new_crtc_state->hw.active)
14472 		return;
14473 
14474 	hw = kzalloc(sizeof(*hw), GFP_KERNEL);
14475 	if (!hw)
14476 		return;
14477 
14478 	skl_pipe_wm_get_hw_state(crtc, &hw->wm);
14479 	sw_wm = &new_crtc_state->wm.skl.optimal;
14480 
14481 	skl_pipe_ddb_get_hw_state(crtc, hw->ddb_y, hw->ddb_uv);
14482 
14483 	hw_enabled_slices = intel_enabled_dbuf_slices_mask(dev_priv);
14484 
14485 	if (INTEL_GEN(dev_priv) >= 11 &&
14486 	    hw_enabled_slices != dev_priv->dbuf.enabled_slices)
14487 		drm_err(&dev_priv->drm,
14488 			"mismatch in DBUF Slices (expected 0x%x, got 0x%x)\n",
14489 			dev_priv->dbuf.enabled_slices,
14490 			hw_enabled_slices);
14491 
14492 	/* planes */
14493 	for_each_universal_plane(dev_priv, pipe, plane) {
14494 		struct skl_plane_wm *hw_plane_wm, *sw_plane_wm;
14495 
14496 		hw_plane_wm = &hw->wm.planes[plane];
14497 		sw_plane_wm = &sw_wm->planes[plane];
14498 
14499 		/* Watermarks */
14500 		for (level = 0; level <= max_level; level++) {
14501 			if (skl_wm_level_equals(&hw_plane_wm->wm[level],
14502 						&sw_plane_wm->wm[level]) ||
14503 			    (level == 0 && skl_wm_level_equals(&hw_plane_wm->wm[level],
14504 							       &sw_plane_wm->sagv_wm0)))
14505 				continue;
14506 
14507 			drm_err(&dev_priv->drm,
14508 				"mismatch in WM pipe %c plane %d level %d (expected e=%d b=%u l=%u, got e=%d b=%u l=%u)\n",
14509 				pipe_name(pipe), plane + 1, level,
14510 				sw_plane_wm->wm[level].plane_en,
14511 				sw_plane_wm->wm[level].plane_res_b,
14512 				sw_plane_wm->wm[level].plane_res_l,
14513 				hw_plane_wm->wm[level].plane_en,
14514 				hw_plane_wm->wm[level].plane_res_b,
14515 				hw_plane_wm->wm[level].plane_res_l);
14516 		}
14517 
14518 		if (!skl_wm_level_equals(&hw_plane_wm->trans_wm,
14519 					 &sw_plane_wm->trans_wm)) {
14520 			drm_err(&dev_priv->drm,
14521 				"mismatch in trans WM pipe %c plane %d (expected e=%d b=%u l=%u, got e=%d b=%u l=%u)\n",
14522 				pipe_name(pipe), plane + 1,
14523 				sw_plane_wm->trans_wm.plane_en,
14524 				sw_plane_wm->trans_wm.plane_res_b,
14525 				sw_plane_wm->trans_wm.plane_res_l,
14526 				hw_plane_wm->trans_wm.plane_en,
14527 				hw_plane_wm->trans_wm.plane_res_b,
14528 				hw_plane_wm->trans_wm.plane_res_l);
14529 		}
14530 
14531 		/* DDB */
14532 		hw_ddb_entry = &hw->ddb_y[plane];
14533 		sw_ddb_entry = &new_crtc_state->wm.skl.plane_ddb_y[plane];
14534 
14535 		if (!skl_ddb_entry_equal(hw_ddb_entry, sw_ddb_entry)) {
14536 			drm_err(&dev_priv->drm,
14537 				"mismatch in DDB state pipe %c plane %d (expected (%u,%u), found (%u,%u))\n",
14538 				pipe_name(pipe), plane + 1,
14539 				sw_ddb_entry->start, sw_ddb_entry->end,
14540 				hw_ddb_entry->start, hw_ddb_entry->end);
14541 		}
14542 	}
14543 
14544 	/*
14545 	 * cursor
14546 	 * If the cursor plane isn't active, we may not have updated it's ddb
14547 	 * allocation. In that case since the ddb allocation will be updated
14548 	 * once the plane becomes visible, we can skip this check
14549 	 */
14550 	if (1) {
14551 		struct skl_plane_wm *hw_plane_wm, *sw_plane_wm;
14552 
14553 		hw_plane_wm = &hw->wm.planes[PLANE_CURSOR];
14554 		sw_plane_wm = &sw_wm->planes[PLANE_CURSOR];
14555 
14556 		/* Watermarks */
14557 		for (level = 0; level <= max_level; level++) {
14558 			if (skl_wm_level_equals(&hw_plane_wm->wm[level],
14559 						&sw_plane_wm->wm[level]) ||
14560 			    (level == 0 && skl_wm_level_equals(&hw_plane_wm->wm[level],
14561 							       &sw_plane_wm->sagv_wm0)))
14562 				continue;
14563 
14564 			drm_err(&dev_priv->drm,
14565 				"mismatch in WM pipe %c cursor level %d (expected e=%d b=%u l=%u, got e=%d b=%u l=%u)\n",
14566 				pipe_name(pipe), level,
14567 				sw_plane_wm->wm[level].plane_en,
14568 				sw_plane_wm->wm[level].plane_res_b,
14569 				sw_plane_wm->wm[level].plane_res_l,
14570 				hw_plane_wm->wm[level].plane_en,
14571 				hw_plane_wm->wm[level].plane_res_b,
14572 				hw_plane_wm->wm[level].plane_res_l);
14573 		}
14574 
14575 		if (!skl_wm_level_equals(&hw_plane_wm->trans_wm,
14576 					 &sw_plane_wm->trans_wm)) {
14577 			drm_err(&dev_priv->drm,
14578 				"mismatch in trans WM pipe %c cursor (expected e=%d b=%u l=%u, got e=%d b=%u l=%u)\n",
14579 				pipe_name(pipe),
14580 				sw_plane_wm->trans_wm.plane_en,
14581 				sw_plane_wm->trans_wm.plane_res_b,
14582 				sw_plane_wm->trans_wm.plane_res_l,
14583 				hw_plane_wm->trans_wm.plane_en,
14584 				hw_plane_wm->trans_wm.plane_res_b,
14585 				hw_plane_wm->trans_wm.plane_res_l);
14586 		}
14587 
14588 		/* DDB */
14589 		hw_ddb_entry = &hw->ddb_y[PLANE_CURSOR];
14590 		sw_ddb_entry = &new_crtc_state->wm.skl.plane_ddb_y[PLANE_CURSOR];
14591 
14592 		if (!skl_ddb_entry_equal(hw_ddb_entry, sw_ddb_entry)) {
14593 			drm_err(&dev_priv->drm,
14594 				"mismatch in DDB state pipe %c cursor (expected (%u,%u), found (%u,%u))\n",
14595 				pipe_name(pipe),
14596 				sw_ddb_entry->start, sw_ddb_entry->end,
14597 				hw_ddb_entry->start, hw_ddb_entry->end);
14598 		}
14599 	}
14600 
14601 	kfree(hw);
14602 }
14603 
14604 static void
14605 verify_connector_state(struct intel_atomic_state *state,
14606 		       struct intel_crtc *crtc)
14607 {
14608 	struct drm_connector *connector;
14609 	struct drm_connector_state *new_conn_state;
14610 	int i;
14611 
14612 	for_each_new_connector_in_state(&state->base, connector, new_conn_state, i) {
14613 		struct drm_encoder *encoder = connector->encoder;
14614 		struct intel_crtc_state *crtc_state = NULL;
14615 
14616 		if (new_conn_state->crtc != &crtc->base)
14617 			continue;
14618 
14619 		if (crtc)
14620 			crtc_state = intel_atomic_get_new_crtc_state(state, crtc);
14621 
14622 		intel_connector_verify_state(crtc_state, new_conn_state);
14623 
14624 		I915_STATE_WARN(new_conn_state->best_encoder != encoder,
14625 		     "connector's atomic encoder doesn't match legacy encoder\n");
14626 	}
14627 }
14628 
14629 static void
14630 verify_encoder_state(struct drm_i915_private *dev_priv, struct intel_atomic_state *state)
14631 {
14632 	struct intel_encoder *encoder;
14633 	struct drm_connector *connector;
14634 	struct drm_connector_state *old_conn_state, *new_conn_state;
14635 	int i;
14636 
14637 	for_each_intel_encoder(&dev_priv->drm, encoder) {
14638 		bool enabled = false, found = false;
14639 		enum pipe pipe;
14640 
14641 		drm_dbg_kms(&dev_priv->drm, "[ENCODER:%d:%s]\n",
14642 			    encoder->base.base.id,
14643 			    encoder->base.name);
14644 
14645 		for_each_oldnew_connector_in_state(&state->base, connector, old_conn_state,
14646 						   new_conn_state, i) {
14647 			if (old_conn_state->best_encoder == &encoder->base)
14648 				found = true;
14649 
14650 			if (new_conn_state->best_encoder != &encoder->base)
14651 				continue;
14652 			found = enabled = true;
14653 
14654 			I915_STATE_WARN(new_conn_state->crtc !=
14655 					encoder->base.crtc,
14656 			     "connector's crtc doesn't match encoder crtc\n");
14657 		}
14658 
14659 		if (!found)
14660 			continue;
14661 
14662 		I915_STATE_WARN(!!encoder->base.crtc != enabled,
14663 		     "encoder's enabled state mismatch "
14664 		     "(expected %i, found %i)\n",
14665 		     !!encoder->base.crtc, enabled);
14666 
14667 		if (!encoder->base.crtc) {
14668 			bool active;
14669 
14670 			active = encoder->get_hw_state(encoder, &pipe);
14671 			I915_STATE_WARN(active,
14672 			     "encoder detached but still enabled on pipe %c.\n",
14673 			     pipe_name(pipe));
14674 		}
14675 	}
14676 }
14677 
14678 static void
14679 verify_crtc_state(struct intel_crtc *crtc,
14680 		  struct intel_crtc_state *old_crtc_state,
14681 		  struct intel_crtc_state *new_crtc_state)
14682 {
14683 	struct drm_device *dev = crtc->base.dev;
14684 	struct drm_i915_private *dev_priv = to_i915(dev);
14685 	struct intel_encoder *encoder;
14686 	struct intel_crtc_state *pipe_config = old_crtc_state;
14687 	struct drm_atomic_state *state = old_crtc_state->uapi.state;
14688 	struct intel_crtc *master = crtc;
14689 
14690 	__drm_atomic_helper_crtc_destroy_state(&old_crtc_state->uapi);
14691 	intel_crtc_free_hw_state(old_crtc_state);
14692 	intel_crtc_state_reset(old_crtc_state, crtc);
14693 	old_crtc_state->uapi.state = state;
14694 
14695 	drm_dbg_kms(&dev_priv->drm, "[CRTC:%d:%s]\n", crtc->base.base.id,
14696 		    crtc->base.name);
14697 
14698 	pipe_config->hw.enable = new_crtc_state->hw.enable;
14699 
14700 	intel_crtc_get_pipe_config(pipe_config);
14701 
14702 	/* we keep both pipes enabled on 830 */
14703 	if (IS_I830(dev_priv) && pipe_config->hw.active)
14704 		pipe_config->hw.active = new_crtc_state->hw.active;
14705 
14706 	I915_STATE_WARN(new_crtc_state->hw.active != pipe_config->hw.active,
14707 			"crtc active state doesn't match with hw state "
14708 			"(expected %i, found %i)\n",
14709 			new_crtc_state->hw.active, pipe_config->hw.active);
14710 
14711 	I915_STATE_WARN(crtc->active != new_crtc_state->hw.active,
14712 			"transitional active state does not match atomic hw state "
14713 			"(expected %i, found %i)\n",
14714 			new_crtc_state->hw.active, crtc->active);
14715 
14716 	if (new_crtc_state->bigjoiner_slave)
14717 		master = new_crtc_state->bigjoiner_linked_crtc;
14718 
14719 	for_each_encoder_on_crtc(dev, &master->base, encoder) {
14720 		enum pipe pipe;
14721 		bool active;
14722 
14723 		active = encoder->get_hw_state(encoder, &pipe);
14724 		I915_STATE_WARN(active != new_crtc_state->hw.active,
14725 				"[ENCODER:%i] active %i with crtc active %i\n",
14726 				encoder->base.base.id, active,
14727 				new_crtc_state->hw.active);
14728 
14729 		I915_STATE_WARN(active && master->pipe != pipe,
14730 				"Encoder connected to wrong pipe %c\n",
14731 				pipe_name(pipe));
14732 
14733 		if (active)
14734 			intel_encoder_get_config(encoder, pipe_config);
14735 	}
14736 
14737 	if (!new_crtc_state->hw.active)
14738 		return;
14739 
14740 	intel_pipe_config_sanity_check(dev_priv, pipe_config);
14741 
14742 	if (!intel_pipe_config_compare(new_crtc_state,
14743 				       pipe_config, false)) {
14744 		I915_STATE_WARN(1, "pipe state doesn't match!\n");
14745 		intel_dump_pipe_config(pipe_config, NULL, "[hw state]");
14746 		intel_dump_pipe_config(new_crtc_state, NULL, "[sw state]");
14747 	}
14748 }
14749 
14750 static void
14751 intel_verify_planes(struct intel_atomic_state *state)
14752 {
14753 	struct intel_plane *plane;
14754 	const struct intel_plane_state *plane_state;
14755 	int i;
14756 
14757 	for_each_new_intel_plane_in_state(state, plane,
14758 					  plane_state, i)
14759 		assert_plane(plane, plane_state->planar_slave ||
14760 			     plane_state->uapi.visible);
14761 }
14762 
14763 static void
14764 verify_single_dpll_state(struct drm_i915_private *dev_priv,
14765 			 struct intel_shared_dpll *pll,
14766 			 struct intel_crtc *crtc,
14767 			 struct intel_crtc_state *new_crtc_state)
14768 {
14769 	struct intel_dpll_hw_state dpll_hw_state;
14770 	unsigned int crtc_mask;
14771 	bool active;
14772 
14773 	memset(&dpll_hw_state, 0, sizeof(dpll_hw_state));
14774 
14775 	drm_dbg_kms(&dev_priv->drm, "%s\n", pll->info->name);
14776 
14777 	active = intel_dpll_get_hw_state(dev_priv, pll, &dpll_hw_state);
14778 
14779 	if (!(pll->info->flags & INTEL_DPLL_ALWAYS_ON)) {
14780 		I915_STATE_WARN(!pll->on && pll->active_mask,
14781 		     "pll in active use but not on in sw tracking\n");
14782 		I915_STATE_WARN(pll->on && !pll->active_mask,
14783 		     "pll is on but not used by any active crtc\n");
14784 		I915_STATE_WARN(pll->on != active,
14785 		     "pll on state mismatch (expected %i, found %i)\n",
14786 		     pll->on, active);
14787 	}
14788 
14789 	if (!crtc) {
14790 		I915_STATE_WARN(pll->active_mask & ~pll->state.crtc_mask,
14791 				"more active pll users than references: %x vs %x\n",
14792 				pll->active_mask, pll->state.crtc_mask);
14793 
14794 		return;
14795 	}
14796 
14797 	crtc_mask = drm_crtc_mask(&crtc->base);
14798 
14799 	if (new_crtc_state->hw.active)
14800 		I915_STATE_WARN(!(pll->active_mask & crtc_mask),
14801 				"pll active mismatch (expected pipe %c in active mask 0x%02x)\n",
14802 				pipe_name(crtc->pipe), pll->active_mask);
14803 	else
14804 		I915_STATE_WARN(pll->active_mask & crtc_mask,
14805 				"pll active mismatch (didn't expect pipe %c in active mask 0x%02x)\n",
14806 				pipe_name(crtc->pipe), pll->active_mask);
14807 
14808 	I915_STATE_WARN(!(pll->state.crtc_mask & crtc_mask),
14809 			"pll enabled crtcs mismatch (expected 0x%x in 0x%02x)\n",
14810 			crtc_mask, pll->state.crtc_mask);
14811 
14812 	I915_STATE_WARN(pll->on && memcmp(&pll->state.hw_state,
14813 					  &dpll_hw_state,
14814 					  sizeof(dpll_hw_state)),
14815 			"pll hw state mismatch\n");
14816 }
14817 
14818 static void
14819 verify_shared_dpll_state(struct intel_crtc *crtc,
14820 			 struct intel_crtc_state *old_crtc_state,
14821 			 struct intel_crtc_state *new_crtc_state)
14822 {
14823 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
14824 
14825 	if (new_crtc_state->shared_dpll)
14826 		verify_single_dpll_state(dev_priv, new_crtc_state->shared_dpll, crtc, new_crtc_state);
14827 
14828 	if (old_crtc_state->shared_dpll &&
14829 	    old_crtc_state->shared_dpll != new_crtc_state->shared_dpll) {
14830 		unsigned int crtc_mask = drm_crtc_mask(&crtc->base);
14831 		struct intel_shared_dpll *pll = old_crtc_state->shared_dpll;
14832 
14833 		I915_STATE_WARN(pll->active_mask & crtc_mask,
14834 				"pll active mismatch (didn't expect pipe %c in active mask)\n",
14835 				pipe_name(crtc->pipe));
14836 		I915_STATE_WARN(pll->state.crtc_mask & crtc_mask,
14837 				"pll enabled crtcs mismatch (found %x in enabled mask)\n",
14838 				pipe_name(crtc->pipe));
14839 	}
14840 }
14841 
14842 static void
14843 intel_modeset_verify_crtc(struct intel_crtc *crtc,
14844 			  struct intel_atomic_state *state,
14845 			  struct intel_crtc_state *old_crtc_state,
14846 			  struct intel_crtc_state *new_crtc_state)
14847 {
14848 	if (!needs_modeset(new_crtc_state) && !new_crtc_state->update_pipe)
14849 		return;
14850 
14851 	verify_wm_state(crtc, new_crtc_state);
14852 	verify_connector_state(state, crtc);
14853 	verify_crtc_state(crtc, old_crtc_state, new_crtc_state);
14854 	verify_shared_dpll_state(crtc, old_crtc_state, new_crtc_state);
14855 }
14856 
14857 static void
14858 verify_disabled_dpll_state(struct drm_i915_private *dev_priv)
14859 {
14860 	int i;
14861 
14862 	for (i = 0; i < dev_priv->dpll.num_shared_dpll; i++)
14863 		verify_single_dpll_state(dev_priv,
14864 					 &dev_priv->dpll.shared_dplls[i],
14865 					 NULL, NULL);
14866 }
14867 
14868 static void
14869 intel_modeset_verify_disabled(struct drm_i915_private *dev_priv,
14870 			      struct intel_atomic_state *state)
14871 {
14872 	verify_encoder_state(dev_priv, state);
14873 	verify_connector_state(state, NULL);
14874 	verify_disabled_dpll_state(dev_priv);
14875 }
14876 
14877 static void
14878 intel_crtc_update_active_timings(const struct intel_crtc_state *crtc_state)
14879 {
14880 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
14881 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
14882 	const struct drm_display_mode *adjusted_mode =
14883 		&crtc_state->hw.adjusted_mode;
14884 
14885 	drm_calc_timestamping_constants(&crtc->base, adjusted_mode);
14886 
14887 	crtc->mode_flags = crtc_state->mode_flags;
14888 
14889 	/*
14890 	 * The scanline counter increments at the leading edge of hsync.
14891 	 *
14892 	 * On most platforms it starts counting from vtotal-1 on the
14893 	 * first active line. That means the scanline counter value is
14894 	 * always one less than what we would expect. Ie. just after
14895 	 * start of vblank, which also occurs at start of hsync (on the
14896 	 * last active line), the scanline counter will read vblank_start-1.
14897 	 *
14898 	 * On gen2 the scanline counter starts counting from 1 instead
14899 	 * of vtotal-1, so we have to subtract one (or rather add vtotal-1
14900 	 * to keep the value positive), instead of adding one.
14901 	 *
14902 	 * On HSW+ the behaviour of the scanline counter depends on the output
14903 	 * type. For DP ports it behaves like most other platforms, but on HDMI
14904 	 * there's an extra 1 line difference. So we need to add two instead of
14905 	 * one to the value.
14906 	 *
14907 	 * On VLV/CHV DSI the scanline counter would appear to increment
14908 	 * approx. 1/3 of a scanline before start of vblank. Unfortunately
14909 	 * that means we can't tell whether we're in vblank or not while
14910 	 * we're on that particular line. We must still set scanline_offset
14911 	 * to 1 so that the vblank timestamps come out correct when we query
14912 	 * the scanline counter from within the vblank interrupt handler.
14913 	 * However if queried just before the start of vblank we'll get an
14914 	 * answer that's slightly in the future.
14915 	 */
14916 	if (IS_GEN(dev_priv, 2)) {
14917 		int vtotal;
14918 
14919 		vtotal = adjusted_mode->crtc_vtotal;
14920 		if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
14921 			vtotal /= 2;
14922 
14923 		crtc->scanline_offset = vtotal - 1;
14924 	} else if (HAS_DDI(dev_priv) &&
14925 		   intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
14926 		crtc->scanline_offset = 2;
14927 	} else {
14928 		crtc->scanline_offset = 1;
14929 	}
14930 }
14931 
14932 static void intel_modeset_clear_plls(struct intel_atomic_state *state)
14933 {
14934 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
14935 	struct intel_crtc_state *new_crtc_state;
14936 	struct intel_crtc *crtc;
14937 	int i;
14938 
14939 	if (!dev_priv->display.crtc_compute_clock)
14940 		return;
14941 
14942 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
14943 		if (!needs_modeset(new_crtc_state))
14944 			continue;
14945 
14946 		intel_release_shared_dplls(state, crtc);
14947 	}
14948 }
14949 
14950 /*
14951  * This implements the workaround described in the "notes" section of the mode
14952  * set sequence documentation. When going from no pipes or single pipe to
14953  * multiple pipes, and planes are enabled after the pipe, we need to wait at
14954  * least 2 vblanks on the first pipe before enabling planes on the second pipe.
14955  */
14956 static int hsw_mode_set_planes_workaround(struct intel_atomic_state *state)
14957 {
14958 	struct intel_crtc_state *crtc_state;
14959 	struct intel_crtc *crtc;
14960 	struct intel_crtc_state *first_crtc_state = NULL;
14961 	struct intel_crtc_state *other_crtc_state = NULL;
14962 	enum pipe first_pipe = INVALID_PIPE, enabled_pipe = INVALID_PIPE;
14963 	int i;
14964 
14965 	/* look at all crtc's that are going to be enabled in during modeset */
14966 	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
14967 		if (!crtc_state->hw.active ||
14968 		    !needs_modeset(crtc_state))
14969 			continue;
14970 
14971 		if (first_crtc_state) {
14972 			other_crtc_state = crtc_state;
14973 			break;
14974 		} else {
14975 			first_crtc_state = crtc_state;
14976 			first_pipe = crtc->pipe;
14977 		}
14978 	}
14979 
14980 	/* No workaround needed? */
14981 	if (!first_crtc_state)
14982 		return 0;
14983 
14984 	/* w/a possibly needed, check how many crtc's are already enabled. */
14985 	for_each_intel_crtc(state->base.dev, crtc) {
14986 		crtc_state = intel_atomic_get_crtc_state(&state->base, crtc);
14987 		if (IS_ERR(crtc_state))
14988 			return PTR_ERR(crtc_state);
14989 
14990 		crtc_state->hsw_workaround_pipe = INVALID_PIPE;
14991 
14992 		if (!crtc_state->hw.active ||
14993 		    needs_modeset(crtc_state))
14994 			continue;
14995 
14996 		/* 2 or more enabled crtcs means no need for w/a */
14997 		if (enabled_pipe != INVALID_PIPE)
14998 			return 0;
14999 
15000 		enabled_pipe = crtc->pipe;
15001 	}
15002 
15003 	if (enabled_pipe != INVALID_PIPE)
15004 		first_crtc_state->hsw_workaround_pipe = enabled_pipe;
15005 	else if (other_crtc_state)
15006 		other_crtc_state->hsw_workaround_pipe = first_pipe;
15007 
15008 	return 0;
15009 }
15010 
15011 u8 intel_calc_active_pipes(struct intel_atomic_state *state,
15012 			   u8 active_pipes)
15013 {
15014 	const struct intel_crtc_state *crtc_state;
15015 	struct intel_crtc *crtc;
15016 	int i;
15017 
15018 	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
15019 		if (crtc_state->hw.active)
15020 			active_pipes |= BIT(crtc->pipe);
15021 		else
15022 			active_pipes &= ~BIT(crtc->pipe);
15023 	}
15024 
15025 	return active_pipes;
15026 }
15027 
15028 static int intel_modeset_checks(struct intel_atomic_state *state)
15029 {
15030 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
15031 
15032 	state->modeset = true;
15033 
15034 	if (IS_HASWELL(dev_priv))
15035 		return hsw_mode_set_planes_workaround(state);
15036 
15037 	return 0;
15038 }
15039 
15040 /*
15041  * Handle calculation of various watermark data at the end of the atomic check
15042  * phase.  The code here should be run after the per-crtc and per-plane 'check'
15043  * handlers to ensure that all derived state has been updated.
15044  */
15045 static int calc_watermark_data(struct intel_atomic_state *state)
15046 {
15047 	struct drm_device *dev = state->base.dev;
15048 	struct drm_i915_private *dev_priv = to_i915(dev);
15049 
15050 	/* Is there platform-specific watermark information to calculate? */
15051 	if (dev_priv->display.compute_global_watermarks)
15052 		return dev_priv->display.compute_global_watermarks(state);
15053 
15054 	return 0;
15055 }
15056 
15057 static void intel_crtc_check_fastset(const struct intel_crtc_state *old_crtc_state,
15058 				     struct intel_crtc_state *new_crtc_state)
15059 {
15060 	if (!intel_pipe_config_compare(old_crtc_state, new_crtc_state, true))
15061 		return;
15062 
15063 	new_crtc_state->uapi.mode_changed = false;
15064 	new_crtc_state->update_pipe = true;
15065 }
15066 
15067 static void intel_crtc_copy_fastset(const struct intel_crtc_state *old_crtc_state,
15068 				    struct intel_crtc_state *new_crtc_state)
15069 {
15070 	/*
15071 	 * If we're not doing the full modeset we want to
15072 	 * keep the current M/N values as they may be
15073 	 * sufficiently different to the computed values
15074 	 * to cause problems.
15075 	 *
15076 	 * FIXME: should really copy more fuzzy state here
15077 	 */
15078 	new_crtc_state->fdi_m_n = old_crtc_state->fdi_m_n;
15079 	new_crtc_state->dp_m_n = old_crtc_state->dp_m_n;
15080 	new_crtc_state->dp_m2_n2 = old_crtc_state->dp_m2_n2;
15081 	new_crtc_state->has_drrs = old_crtc_state->has_drrs;
15082 }
15083 
15084 static int intel_crtc_add_planes_to_state(struct intel_atomic_state *state,
15085 					  struct intel_crtc *crtc,
15086 					  u8 plane_ids_mask)
15087 {
15088 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
15089 	struct intel_plane *plane;
15090 
15091 	for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, plane) {
15092 		struct intel_plane_state *plane_state;
15093 
15094 		if ((plane_ids_mask & BIT(plane->id)) == 0)
15095 			continue;
15096 
15097 		plane_state = intel_atomic_get_plane_state(state, plane);
15098 		if (IS_ERR(plane_state))
15099 			return PTR_ERR(plane_state);
15100 	}
15101 
15102 	return 0;
15103 }
15104 
15105 static bool active_planes_affects_min_cdclk(struct drm_i915_private *dev_priv)
15106 {
15107 	/* See {hsw,vlv,ivb}_plane_ratio() */
15108 	return IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv) ||
15109 		IS_CHERRYVIEW(dev_priv) || IS_VALLEYVIEW(dev_priv) ||
15110 		IS_IVYBRIDGE(dev_priv) || (INTEL_GEN(dev_priv) >= 11);
15111 }
15112 
15113 static int intel_crtc_add_bigjoiner_planes(struct intel_atomic_state *state,
15114 					   struct intel_crtc *crtc,
15115 					   struct intel_crtc *other)
15116 {
15117 	const struct intel_plane_state *plane_state;
15118 	struct intel_plane *plane;
15119 	u8 plane_ids = 0;
15120 	int i;
15121 
15122 	for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
15123 		if (plane->pipe == crtc->pipe)
15124 			plane_ids |= BIT(plane->id);
15125 	}
15126 
15127 	return intel_crtc_add_planes_to_state(state, other, plane_ids);
15128 }
15129 
15130 static int intel_bigjoiner_add_affected_planes(struct intel_atomic_state *state)
15131 {
15132 	const struct intel_crtc_state *crtc_state;
15133 	struct intel_crtc *crtc;
15134 	int i;
15135 
15136 	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
15137 		int ret;
15138 
15139 		if (!crtc_state->bigjoiner)
15140 			continue;
15141 
15142 		ret = intel_crtc_add_bigjoiner_planes(state, crtc,
15143 						      crtc_state->bigjoiner_linked_crtc);
15144 		if (ret)
15145 			return ret;
15146 	}
15147 
15148 	return 0;
15149 }
15150 
15151 static int intel_atomic_check_planes(struct intel_atomic_state *state)
15152 {
15153 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
15154 	struct intel_crtc_state *old_crtc_state, *new_crtc_state;
15155 	struct intel_plane_state *plane_state;
15156 	struct intel_plane *plane;
15157 	struct intel_crtc *crtc;
15158 	int i, ret;
15159 
15160 	ret = icl_add_linked_planes(state);
15161 	if (ret)
15162 		return ret;
15163 
15164 	ret = intel_bigjoiner_add_affected_planes(state);
15165 	if (ret)
15166 		return ret;
15167 
15168 	for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
15169 		ret = intel_plane_atomic_check(state, plane);
15170 		if (ret) {
15171 			drm_dbg_atomic(&dev_priv->drm,
15172 				       "[PLANE:%d:%s] atomic driver check failed\n",
15173 				       plane->base.base.id, plane->base.name);
15174 			return ret;
15175 		}
15176 	}
15177 
15178 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
15179 					    new_crtc_state, i) {
15180 		u8 old_active_planes, new_active_planes;
15181 
15182 		ret = icl_check_nv12_planes(new_crtc_state);
15183 		if (ret)
15184 			return ret;
15185 
15186 		/*
15187 		 * On some platforms the number of active planes affects
15188 		 * the planes' minimum cdclk calculation. Add such planes
15189 		 * to the state before we compute the minimum cdclk.
15190 		 */
15191 		if (!active_planes_affects_min_cdclk(dev_priv))
15192 			continue;
15193 
15194 		old_active_planes = old_crtc_state->active_planes & ~BIT(PLANE_CURSOR);
15195 		new_active_planes = new_crtc_state->active_planes & ~BIT(PLANE_CURSOR);
15196 
15197 		/*
15198 		 * Not only the number of planes, but if the plane configuration had
15199 		 * changed might already mean we need to recompute min CDCLK,
15200 		 * because different planes might consume different amount of Dbuf bandwidth
15201 		 * according to formula: Bw per plane = Pixel rate * bpp * pipe/plane scale factor
15202 		 */
15203 		if (old_active_planes == new_active_planes)
15204 			continue;
15205 
15206 		ret = intel_crtc_add_planes_to_state(state, crtc, new_active_planes);
15207 		if (ret)
15208 			return ret;
15209 	}
15210 
15211 	return 0;
15212 }
15213 
15214 static int intel_atomic_check_cdclk(struct intel_atomic_state *state,
15215 				    bool *need_cdclk_calc)
15216 {
15217 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
15218 	const struct intel_cdclk_state *old_cdclk_state;
15219 	const struct intel_cdclk_state *new_cdclk_state;
15220 	struct intel_plane_state *plane_state;
15221 	struct intel_bw_state *new_bw_state;
15222 	struct intel_plane *plane;
15223 	int min_cdclk = 0;
15224 	enum pipe pipe;
15225 	int ret;
15226 	int i;
15227 	/*
15228 	 * active_planes bitmask has been updated, and potentially
15229 	 * affected planes are part of the state. We can now
15230 	 * compute the minimum cdclk for each plane.
15231 	 */
15232 	for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
15233 		ret = intel_plane_calc_min_cdclk(state, plane, need_cdclk_calc);
15234 		if (ret)
15235 			return ret;
15236 	}
15237 
15238 	old_cdclk_state = intel_atomic_get_old_cdclk_state(state);
15239 	new_cdclk_state = intel_atomic_get_new_cdclk_state(state);
15240 
15241 	if (new_cdclk_state &&
15242 	    old_cdclk_state->force_min_cdclk != new_cdclk_state->force_min_cdclk)
15243 		*need_cdclk_calc = true;
15244 
15245 	ret = dev_priv->display.bw_calc_min_cdclk(state);
15246 	if (ret)
15247 		return ret;
15248 
15249 	new_bw_state = intel_atomic_get_new_bw_state(state);
15250 
15251 	if (!new_cdclk_state || !new_bw_state)
15252 		return 0;
15253 
15254 	for_each_pipe(dev_priv, pipe) {
15255 		min_cdclk = max(new_cdclk_state->min_cdclk[pipe], min_cdclk);
15256 
15257 		/*
15258 		 * Currently do this change only if we need to increase
15259 		 */
15260 		if (new_bw_state->min_cdclk > min_cdclk)
15261 			*need_cdclk_calc = true;
15262 	}
15263 
15264 	return 0;
15265 }
15266 
15267 static int intel_atomic_check_crtcs(struct intel_atomic_state *state)
15268 {
15269 	struct intel_crtc_state *crtc_state;
15270 	struct intel_crtc *crtc;
15271 	int i;
15272 
15273 	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
15274 		struct drm_i915_private *i915 = to_i915(crtc->base.dev);
15275 		int ret;
15276 
15277 		ret = intel_crtc_atomic_check(state, crtc);
15278 		if (ret) {
15279 			drm_dbg_atomic(&i915->drm,
15280 				       "[CRTC:%d:%s] atomic driver check failed\n",
15281 				       crtc->base.base.id, crtc->base.name);
15282 			return ret;
15283 		}
15284 	}
15285 
15286 	return 0;
15287 }
15288 
15289 static bool intel_cpu_transcoders_need_modeset(struct intel_atomic_state *state,
15290 					       u8 transcoders)
15291 {
15292 	const struct intel_crtc_state *new_crtc_state;
15293 	struct intel_crtc *crtc;
15294 	int i;
15295 
15296 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
15297 		if (new_crtc_state->hw.enable &&
15298 		    transcoders & BIT(new_crtc_state->cpu_transcoder) &&
15299 		    needs_modeset(new_crtc_state))
15300 			return true;
15301 	}
15302 
15303 	return false;
15304 }
15305 
15306 static int intel_atomic_check_bigjoiner(struct intel_atomic_state *state,
15307 					struct intel_crtc *crtc,
15308 					struct intel_crtc_state *old_crtc_state,
15309 					struct intel_crtc_state *new_crtc_state)
15310 {
15311 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
15312 	struct intel_crtc_state *slave_crtc_state, *master_crtc_state;
15313 	struct intel_crtc *slave, *master;
15314 
15315 	/* slave being enabled, is master is still claiming this crtc? */
15316 	if (old_crtc_state->bigjoiner_slave) {
15317 		slave = crtc;
15318 		master = old_crtc_state->bigjoiner_linked_crtc;
15319 		master_crtc_state = intel_atomic_get_new_crtc_state(state, master);
15320 		if (!master_crtc_state || !needs_modeset(master_crtc_state))
15321 			goto claimed;
15322 	}
15323 
15324 	if (!new_crtc_state->bigjoiner)
15325 		return 0;
15326 
15327 	if (1 + crtc->pipe >= INTEL_NUM_PIPES(dev_priv)) {
15328 		DRM_DEBUG_KMS("[CRTC:%d:%s] Big joiner configuration requires "
15329 			      "CRTC + 1 to be used, doesn't exist\n",
15330 			      crtc->base.base.id, crtc->base.name);
15331 		return -EINVAL;
15332 	}
15333 
15334 	slave = new_crtc_state->bigjoiner_linked_crtc =
15335 		intel_get_crtc_for_pipe(dev_priv, crtc->pipe + 1);
15336 	slave_crtc_state = intel_atomic_get_crtc_state(&state->base, slave);
15337 	master = crtc;
15338 	if (IS_ERR(slave_crtc_state))
15339 		return PTR_ERR(slave_crtc_state);
15340 
15341 	/* master being enabled, slave was already configured? */
15342 	if (slave_crtc_state->uapi.enable)
15343 		goto claimed;
15344 
15345 	DRM_DEBUG_KMS("[CRTC:%d:%s] Used as slave for big joiner\n",
15346 		      slave->base.base.id, slave->base.name);
15347 
15348 	return copy_bigjoiner_crtc_state(slave_crtc_state, new_crtc_state);
15349 
15350 claimed:
15351 	DRM_DEBUG_KMS("[CRTC:%d:%s] Slave is enabled as normal CRTC, but "
15352 		      "[CRTC:%d:%s] claiming this CRTC for bigjoiner.\n",
15353 		      slave->base.base.id, slave->base.name,
15354 		      master->base.base.id, master->base.name);
15355 	return -EINVAL;
15356 }
15357 
15358 static int kill_bigjoiner_slave(struct intel_atomic_state *state,
15359 				struct intel_crtc_state *master_crtc_state)
15360 {
15361 	struct intel_crtc_state *slave_crtc_state =
15362 		intel_atomic_get_crtc_state(&state->base,
15363 					    master_crtc_state->bigjoiner_linked_crtc);
15364 
15365 	if (IS_ERR(slave_crtc_state))
15366 		return PTR_ERR(slave_crtc_state);
15367 
15368 	slave_crtc_state->bigjoiner = master_crtc_state->bigjoiner = false;
15369 	slave_crtc_state->bigjoiner_slave = master_crtc_state->bigjoiner_slave = false;
15370 	slave_crtc_state->bigjoiner_linked_crtc = master_crtc_state->bigjoiner_linked_crtc = NULL;
15371 	intel_crtc_copy_uapi_to_hw_state(state, slave_crtc_state);
15372 	return 0;
15373 }
15374 
15375 /**
15376  * DOC: asynchronous flip implementation
15377  *
15378  * Asynchronous page flip is the implementation for the DRM_MODE_PAGE_FLIP_ASYNC
15379  * flag. Currently async flip is only supported via the drmModePageFlip IOCTL.
15380  * Correspondingly, support is currently added for primary plane only.
15381  *
15382  * Async flip can only change the plane surface address, so anything else
15383  * changing is rejected from the intel_atomic_check_async() function.
15384  * Once this check is cleared, flip done interrupt is enabled using
15385  * the skl_enable_flip_done() function.
15386  *
15387  * As soon as the surface address register is written, flip done interrupt is
15388  * generated and the requested events are sent to the usersapce in the interrupt
15389  * handler itself. The timestamp and sequence sent during the flip done event
15390  * correspond to the last vblank and have no relation to the actual time when
15391  * the flip done event was sent.
15392  */
15393 static int intel_atomic_check_async(struct intel_atomic_state *state)
15394 {
15395 	struct drm_i915_private *i915 = to_i915(state->base.dev);
15396 	const struct intel_crtc_state *old_crtc_state, *new_crtc_state;
15397 	const struct intel_plane_state *new_plane_state, *old_plane_state;
15398 	struct intel_crtc *crtc;
15399 	struct intel_plane *plane;
15400 	int i;
15401 
15402 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
15403 					    new_crtc_state, i) {
15404 		if (needs_modeset(new_crtc_state)) {
15405 			drm_dbg_kms(&i915->drm, "Modeset Required. Async flip not supported\n");
15406 			return -EINVAL;
15407 		}
15408 
15409 		if (!new_crtc_state->hw.active) {
15410 			drm_dbg_kms(&i915->drm, "CRTC inactive\n");
15411 			return -EINVAL;
15412 		}
15413 		if (old_crtc_state->active_planes != new_crtc_state->active_planes) {
15414 			drm_dbg_kms(&i915->drm,
15415 				    "Active planes cannot be changed during async flip\n");
15416 			return -EINVAL;
15417 		}
15418 	}
15419 
15420 	for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
15421 					     new_plane_state, i) {
15422 		/*
15423 		 * TODO: Async flip is only supported through the page flip IOCTL
15424 		 * as of now. So support currently added for primary plane only.
15425 		 * Support for other planes on platforms on which supports
15426 		 * this(vlv/chv and icl+) should be added when async flip is
15427 		 * enabled in the atomic IOCTL path.
15428 		 */
15429 		if (plane->id != PLANE_PRIMARY)
15430 			return -EINVAL;
15431 
15432 		/*
15433 		 * FIXME: This check is kept generic for all platforms.
15434 		 * Need to verify this for all gen9 and gen10 platforms to enable
15435 		 * this selectively if required.
15436 		 */
15437 		switch (new_plane_state->hw.fb->modifier) {
15438 		case I915_FORMAT_MOD_X_TILED:
15439 		case I915_FORMAT_MOD_Y_TILED:
15440 		case I915_FORMAT_MOD_Yf_TILED:
15441 			break;
15442 		default:
15443 			drm_dbg_kms(&i915->drm,
15444 				    "Linear memory/CCS does not support async flips\n");
15445 			return -EINVAL;
15446 		}
15447 
15448 		if (old_plane_state->color_plane[0].stride !=
15449 		    new_plane_state->color_plane[0].stride) {
15450 			drm_dbg_kms(&i915->drm, "Stride cannot be changed in async flip\n");
15451 			return -EINVAL;
15452 		}
15453 
15454 		if (old_plane_state->hw.fb->modifier !=
15455 		    new_plane_state->hw.fb->modifier) {
15456 			drm_dbg_kms(&i915->drm,
15457 				    "Framebuffer modifiers cannot be changed in async flip\n");
15458 			return -EINVAL;
15459 		}
15460 
15461 		if (old_plane_state->hw.fb->format !=
15462 		    new_plane_state->hw.fb->format) {
15463 			drm_dbg_kms(&i915->drm,
15464 				    "Framebuffer format cannot be changed in async flip\n");
15465 			return -EINVAL;
15466 		}
15467 
15468 		if (old_plane_state->hw.rotation !=
15469 		    new_plane_state->hw.rotation) {
15470 			drm_dbg_kms(&i915->drm, "Rotation cannot be changed in async flip\n");
15471 			return -EINVAL;
15472 		}
15473 
15474 		if (!drm_rect_equals(&old_plane_state->uapi.src, &new_plane_state->uapi.src) ||
15475 		    !drm_rect_equals(&old_plane_state->uapi.dst, &new_plane_state->uapi.dst)) {
15476 			drm_dbg_kms(&i915->drm,
15477 				    "Plane size/co-ordinates cannot be changed in async flip\n");
15478 			return -EINVAL;
15479 		}
15480 
15481 		if (old_plane_state->hw.alpha != new_plane_state->hw.alpha) {
15482 			drm_dbg_kms(&i915->drm, "Alpha value cannot be changed in async flip\n");
15483 			return -EINVAL;
15484 		}
15485 
15486 		if (old_plane_state->hw.pixel_blend_mode !=
15487 		    new_plane_state->hw.pixel_blend_mode) {
15488 			drm_dbg_kms(&i915->drm,
15489 				    "Pixel blend mode cannot be changed in async flip\n");
15490 			return -EINVAL;
15491 		}
15492 
15493 		if (old_plane_state->hw.color_encoding != new_plane_state->hw.color_encoding) {
15494 			drm_dbg_kms(&i915->drm,
15495 				    "Color encoding cannot be changed in async flip\n");
15496 			return -EINVAL;
15497 		}
15498 
15499 		if (old_plane_state->hw.color_range != new_plane_state->hw.color_range) {
15500 			drm_dbg_kms(&i915->drm, "Color range cannot be changed in async flip\n");
15501 			return -EINVAL;
15502 		}
15503 	}
15504 
15505 	return 0;
15506 }
15507 
15508 static int intel_bigjoiner_add_affected_crtcs(struct intel_atomic_state *state)
15509 {
15510 	const struct intel_crtc_state *crtc_state;
15511 	struct intel_crtc *crtc;
15512 	int i;
15513 
15514 	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
15515 		struct intel_crtc_state *linked_crtc_state;
15516 
15517 		if (!crtc_state->bigjoiner)
15518 			continue;
15519 
15520 		linked_crtc_state = intel_atomic_get_crtc_state(&state->base,
15521 								crtc_state->bigjoiner_linked_crtc);
15522 		if (IS_ERR(linked_crtc_state))
15523 			return PTR_ERR(linked_crtc_state);
15524 	}
15525 
15526 	return 0;
15527 }
15528 
15529 /**
15530  * intel_atomic_check - validate state object
15531  * @dev: drm device
15532  * @_state: state to validate
15533  */
15534 static int intel_atomic_check(struct drm_device *dev,
15535 			      struct drm_atomic_state *_state)
15536 {
15537 	struct drm_i915_private *dev_priv = to_i915(dev);
15538 	struct intel_atomic_state *state = to_intel_atomic_state(_state);
15539 	struct intel_crtc_state *old_crtc_state, *new_crtc_state;
15540 	struct intel_crtc *crtc;
15541 	int ret, i;
15542 	bool any_ms = false;
15543 
15544 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
15545 					    new_crtc_state, i) {
15546 		if (new_crtc_state->inherited != old_crtc_state->inherited)
15547 			new_crtc_state->uapi.mode_changed = true;
15548 	}
15549 
15550 	ret = drm_atomic_helper_check_modeset(dev, &state->base);
15551 	if (ret)
15552 		goto fail;
15553 
15554 	ret = intel_bigjoiner_add_affected_crtcs(state);
15555 	if (ret)
15556 		goto fail;
15557 
15558 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
15559 					    new_crtc_state, i) {
15560 		if (!needs_modeset(new_crtc_state)) {
15561 			/* Light copy */
15562 			intel_crtc_copy_uapi_to_hw_state_nomodeset(state, new_crtc_state);
15563 
15564 			continue;
15565 		}
15566 
15567 		/* Kill old bigjoiner link, we may re-establish afterwards */
15568 		if (old_crtc_state->bigjoiner && !old_crtc_state->bigjoiner_slave) {
15569 			ret = kill_bigjoiner_slave(state, new_crtc_state);
15570 			if (ret)
15571 				goto fail;
15572 		}
15573 
15574 		if (!new_crtc_state->uapi.enable) {
15575 			if (!new_crtc_state->bigjoiner_slave) {
15576 				intel_crtc_copy_uapi_to_hw_state(state, new_crtc_state);
15577 				any_ms = true;
15578 			}
15579 			continue;
15580 		}
15581 
15582 		ret = intel_crtc_prepare_cleared_state(state, new_crtc_state);
15583 		if (ret)
15584 			goto fail;
15585 
15586 		ret = intel_modeset_pipe_config(state, new_crtc_state);
15587 		if (ret)
15588 			goto fail;
15589 
15590 		ret = intel_atomic_check_bigjoiner(state, crtc, old_crtc_state,
15591 						   new_crtc_state);
15592 		if (ret)
15593 			goto fail;
15594 	}
15595 
15596 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
15597 					    new_crtc_state, i) {
15598 		if (!needs_modeset(new_crtc_state))
15599 			continue;
15600 
15601 		ret = intel_modeset_pipe_config_late(new_crtc_state);
15602 		if (ret)
15603 			goto fail;
15604 
15605 		intel_crtc_check_fastset(old_crtc_state, new_crtc_state);
15606 	}
15607 
15608 	/**
15609 	 * Check if fastset is allowed by external dependencies like other
15610 	 * pipes and transcoders.
15611 	 *
15612 	 * Right now it only forces a fullmodeset when the MST master
15613 	 * transcoder did not changed but the pipe of the master transcoder
15614 	 * needs a fullmodeset so all slaves also needs to do a fullmodeset or
15615 	 * in case of port synced crtcs, if one of the synced crtcs
15616 	 * needs a full modeset, all other synced crtcs should be
15617 	 * forced a full modeset.
15618 	 */
15619 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
15620 		if (!new_crtc_state->hw.enable || needs_modeset(new_crtc_state))
15621 			continue;
15622 
15623 		if (intel_dp_mst_is_slave_trans(new_crtc_state)) {
15624 			enum transcoder master = new_crtc_state->mst_master_transcoder;
15625 
15626 			if (intel_cpu_transcoders_need_modeset(state, BIT(master))) {
15627 				new_crtc_state->uapi.mode_changed = true;
15628 				new_crtc_state->update_pipe = false;
15629 			}
15630 		}
15631 
15632 		if (is_trans_port_sync_mode(new_crtc_state)) {
15633 			u8 trans = new_crtc_state->sync_mode_slaves_mask;
15634 
15635 			if (new_crtc_state->master_transcoder != INVALID_TRANSCODER)
15636 				trans |= BIT(new_crtc_state->master_transcoder);
15637 
15638 			if (intel_cpu_transcoders_need_modeset(state, trans)) {
15639 				new_crtc_state->uapi.mode_changed = true;
15640 				new_crtc_state->update_pipe = false;
15641 			}
15642 		}
15643 	}
15644 
15645 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
15646 					    new_crtc_state, i) {
15647 		if (needs_modeset(new_crtc_state)) {
15648 			any_ms = true;
15649 			continue;
15650 		}
15651 
15652 		if (!new_crtc_state->update_pipe)
15653 			continue;
15654 
15655 		intel_crtc_copy_fastset(old_crtc_state, new_crtc_state);
15656 	}
15657 
15658 	if (any_ms && !check_digital_port_conflicts(state)) {
15659 		drm_dbg_kms(&dev_priv->drm,
15660 			    "rejecting conflicting digital port configuration\n");
15661 		ret = -EINVAL;
15662 		goto fail;
15663 	}
15664 
15665 	ret = drm_dp_mst_atomic_check(&state->base);
15666 	if (ret)
15667 		goto fail;
15668 
15669 	ret = intel_atomic_check_planes(state);
15670 	if (ret)
15671 		goto fail;
15672 
15673 	/*
15674 	 * distrust_bios_wm will force a full dbuf recomputation
15675 	 * but the hardware state will only get updated accordingly
15676 	 * if state->modeset==true. Hence distrust_bios_wm==true &&
15677 	 * state->modeset==false is an invalid combination which
15678 	 * would cause the hardware and software dbuf state to get
15679 	 * out of sync. We must prevent that.
15680 	 *
15681 	 * FIXME clean up this mess and introduce better
15682 	 * state tracking for dbuf.
15683 	 */
15684 	if (dev_priv->wm.distrust_bios_wm)
15685 		any_ms = true;
15686 
15687 	intel_fbc_choose_crtc(dev_priv, state);
15688 	ret = calc_watermark_data(state);
15689 	if (ret)
15690 		goto fail;
15691 
15692 	ret = intel_bw_atomic_check(state);
15693 	if (ret)
15694 		goto fail;
15695 
15696 	ret = intel_atomic_check_cdclk(state, &any_ms);
15697 	if (ret)
15698 		goto fail;
15699 
15700 	if (any_ms) {
15701 		ret = intel_modeset_checks(state);
15702 		if (ret)
15703 			goto fail;
15704 
15705 		ret = intel_modeset_calc_cdclk(state);
15706 		if (ret)
15707 			return ret;
15708 
15709 		intel_modeset_clear_plls(state);
15710 	}
15711 
15712 	ret = intel_atomic_check_crtcs(state);
15713 	if (ret)
15714 		goto fail;
15715 
15716 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
15717 					    new_crtc_state, i) {
15718 		if (new_crtc_state->uapi.async_flip) {
15719 			ret = intel_atomic_check_async(state);
15720 			if (ret)
15721 				goto fail;
15722 		}
15723 
15724 		if (!needs_modeset(new_crtc_state) &&
15725 		    !new_crtc_state->update_pipe)
15726 			continue;
15727 
15728 		intel_dump_pipe_config(new_crtc_state, state,
15729 				       needs_modeset(new_crtc_state) ?
15730 				       "[modeset]" : "[fastset]");
15731 	}
15732 
15733 	return 0;
15734 
15735  fail:
15736 	if (ret == -EDEADLK)
15737 		return ret;
15738 
15739 	/*
15740 	 * FIXME would probably be nice to know which crtc specifically
15741 	 * caused the failure, in cases where we can pinpoint it.
15742 	 */
15743 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
15744 					    new_crtc_state, i)
15745 		intel_dump_pipe_config(new_crtc_state, state, "[failed]");
15746 
15747 	return ret;
15748 }
15749 
15750 static int intel_atomic_prepare_commit(struct intel_atomic_state *state)
15751 {
15752 	struct intel_crtc_state *crtc_state;
15753 	struct intel_crtc *crtc;
15754 	int i, ret;
15755 
15756 	ret = drm_atomic_helper_prepare_planes(state->base.dev, &state->base);
15757 	if (ret < 0)
15758 		return ret;
15759 
15760 	for_each_new_intel_crtc_in_state(state, crtc, crtc_state, i) {
15761 		bool mode_changed = needs_modeset(crtc_state);
15762 
15763 		if (mode_changed || crtc_state->update_pipe ||
15764 		    crtc_state->uapi.color_mgmt_changed) {
15765 			intel_dsb_prepare(crtc_state);
15766 		}
15767 	}
15768 
15769 	return 0;
15770 }
15771 
15772 u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc)
15773 {
15774 	struct drm_device *dev = crtc->base.dev;
15775 	struct drm_vblank_crtc *vblank = &dev->vblank[drm_crtc_index(&crtc->base)];
15776 
15777 	if (!vblank->max_vblank_count)
15778 		return (u32)drm_crtc_accurate_vblank_count(&crtc->base);
15779 
15780 	return crtc->base.funcs->get_vblank_counter(&crtc->base);
15781 }
15782 
15783 void intel_crtc_arm_fifo_underrun(struct intel_crtc *crtc,
15784 				  struct intel_crtc_state *crtc_state)
15785 {
15786 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
15787 
15788 	if (!IS_GEN(dev_priv, 2) || crtc_state->active_planes)
15789 		intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, true);
15790 
15791 	if (crtc_state->has_pch_encoder) {
15792 		enum pipe pch_transcoder =
15793 			intel_crtc_pch_transcoder(crtc);
15794 
15795 		intel_set_pch_fifo_underrun_reporting(dev_priv, pch_transcoder, true);
15796 	}
15797 }
15798 
15799 static void intel_pipe_fastset(const struct intel_crtc_state *old_crtc_state,
15800 			       const struct intel_crtc_state *new_crtc_state)
15801 {
15802 	struct intel_crtc *crtc = to_intel_crtc(new_crtc_state->uapi.crtc);
15803 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
15804 
15805 	/*
15806 	 * Update pipe size and adjust fitter if needed: the reason for this is
15807 	 * that in compute_mode_changes we check the native mode (not the pfit
15808 	 * mode) to see if we can flip rather than do a full mode set. In the
15809 	 * fastboot case, we'll flip, but if we don't update the pipesrc and
15810 	 * pfit state, we'll end up with a big fb scanned out into the wrong
15811 	 * sized surface.
15812 	 */
15813 	intel_set_pipe_src_size(new_crtc_state);
15814 
15815 	/* on skylake this is done by detaching scalers */
15816 	if (INTEL_GEN(dev_priv) >= 9) {
15817 		skl_detach_scalers(new_crtc_state);
15818 
15819 		if (new_crtc_state->pch_pfit.enabled)
15820 			skl_pfit_enable(new_crtc_state);
15821 	} else if (HAS_PCH_SPLIT(dev_priv)) {
15822 		if (new_crtc_state->pch_pfit.enabled)
15823 			ilk_pfit_enable(new_crtc_state);
15824 		else if (old_crtc_state->pch_pfit.enabled)
15825 			ilk_pfit_disable(old_crtc_state);
15826 	}
15827 
15828 	/*
15829 	 * The register is supposedly single buffered so perhaps
15830 	 * not 100% correct to do this here. But SKL+ calculate
15831 	 * this based on the adjust pixel rate so pfit changes do
15832 	 * affect it and so it must be updated for fastsets.
15833 	 * HSW/BDW only really need this here for fastboot, after
15834 	 * that the value should not change without a full modeset.
15835 	 */
15836 	if (INTEL_GEN(dev_priv) >= 9 ||
15837 	    IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
15838 		hsw_set_linetime_wm(new_crtc_state);
15839 
15840 	if (INTEL_GEN(dev_priv) >= 11)
15841 		icl_set_pipe_chicken(crtc);
15842 }
15843 
15844 static void commit_pipe_config(struct intel_atomic_state *state,
15845 			       struct intel_crtc *crtc)
15846 {
15847 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
15848 	const struct intel_crtc_state *old_crtc_state =
15849 		intel_atomic_get_old_crtc_state(state, crtc);
15850 	const struct intel_crtc_state *new_crtc_state =
15851 		intel_atomic_get_new_crtc_state(state, crtc);
15852 	bool modeset = needs_modeset(new_crtc_state);
15853 
15854 	/*
15855 	 * During modesets pipe configuration was programmed as the
15856 	 * CRTC was enabled.
15857 	 */
15858 	if (!modeset) {
15859 		if (new_crtc_state->uapi.color_mgmt_changed ||
15860 		    new_crtc_state->update_pipe)
15861 			intel_color_commit(new_crtc_state);
15862 
15863 		if (INTEL_GEN(dev_priv) >= 9)
15864 			skl_detach_scalers(new_crtc_state);
15865 
15866 		if (INTEL_GEN(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
15867 			bdw_set_pipemisc(new_crtc_state);
15868 
15869 		if (new_crtc_state->update_pipe)
15870 			intel_pipe_fastset(old_crtc_state, new_crtc_state);
15871 
15872 		intel_psr2_program_trans_man_trk_ctl(new_crtc_state);
15873 	}
15874 
15875 	if (dev_priv->display.atomic_update_watermarks)
15876 		dev_priv->display.atomic_update_watermarks(state, crtc);
15877 }
15878 
15879 static void intel_enable_crtc(struct intel_atomic_state *state,
15880 			      struct intel_crtc *crtc)
15881 {
15882 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
15883 	const struct intel_crtc_state *new_crtc_state =
15884 		intel_atomic_get_new_crtc_state(state, crtc);
15885 
15886 	if (!needs_modeset(new_crtc_state))
15887 		return;
15888 
15889 	intel_crtc_update_active_timings(new_crtc_state);
15890 
15891 	dev_priv->display.crtc_enable(state, crtc);
15892 
15893 	if (new_crtc_state->bigjoiner_slave)
15894 		return;
15895 
15896 	/* vblanks work again, re-enable pipe CRC. */
15897 	intel_crtc_enable_pipe_crc(crtc);
15898 }
15899 
15900 static void intel_update_crtc(struct intel_atomic_state *state,
15901 			      struct intel_crtc *crtc)
15902 {
15903 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
15904 	const struct intel_crtc_state *old_crtc_state =
15905 		intel_atomic_get_old_crtc_state(state, crtc);
15906 	struct intel_crtc_state *new_crtc_state =
15907 		intel_atomic_get_new_crtc_state(state, crtc);
15908 	bool modeset = needs_modeset(new_crtc_state);
15909 
15910 	if (!modeset) {
15911 		if (new_crtc_state->preload_luts &&
15912 		    (new_crtc_state->uapi.color_mgmt_changed ||
15913 		     new_crtc_state->update_pipe))
15914 			intel_color_load_luts(new_crtc_state);
15915 
15916 		intel_pre_plane_update(state, crtc);
15917 
15918 		if (new_crtc_state->update_pipe)
15919 			intel_encoders_update_pipe(state, crtc);
15920 	}
15921 
15922 	if (new_crtc_state->update_pipe && !new_crtc_state->enable_fbc)
15923 		intel_fbc_disable(crtc);
15924 	else
15925 		intel_fbc_enable(state, crtc);
15926 
15927 	/* Perform vblank evasion around commit operation */
15928 	intel_pipe_update_start(new_crtc_state);
15929 
15930 	commit_pipe_config(state, crtc);
15931 
15932 	if (INTEL_GEN(dev_priv) >= 9)
15933 		skl_update_planes_on_crtc(state, crtc);
15934 	else
15935 		i9xx_update_planes_on_crtc(state, crtc);
15936 
15937 	intel_pipe_update_end(new_crtc_state);
15938 
15939 	/*
15940 	 * We usually enable FIFO underrun interrupts as part of the
15941 	 * CRTC enable sequence during modesets.  But when we inherit a
15942 	 * valid pipe configuration from the BIOS we need to take care
15943 	 * of enabling them on the CRTC's first fastset.
15944 	 */
15945 	if (new_crtc_state->update_pipe && !modeset &&
15946 	    old_crtc_state->inherited)
15947 		intel_crtc_arm_fifo_underrun(crtc, new_crtc_state);
15948 }
15949 
15950 static void intel_old_crtc_state_disables(struct intel_atomic_state *state,
15951 					  struct intel_crtc_state *old_crtc_state,
15952 					  struct intel_crtc_state *new_crtc_state,
15953 					  struct intel_crtc *crtc)
15954 {
15955 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
15956 
15957 	drm_WARN_ON(&dev_priv->drm, old_crtc_state->bigjoiner_slave);
15958 
15959 	intel_crtc_disable_planes(state, crtc);
15960 
15961 	/*
15962 	 * We still need special handling for disabling bigjoiner master
15963 	 * and slaves since for slave we do not have encoder or plls
15964 	 * so we dont need to disable those.
15965 	 */
15966 	if (old_crtc_state->bigjoiner) {
15967 		intel_crtc_disable_planes(state,
15968 					  old_crtc_state->bigjoiner_linked_crtc);
15969 		old_crtc_state->bigjoiner_linked_crtc->active = false;
15970 	}
15971 
15972 	/*
15973 	 * We need to disable pipe CRC before disabling the pipe,
15974 	 * or we race against vblank off.
15975 	 */
15976 	intel_crtc_disable_pipe_crc(crtc);
15977 
15978 	dev_priv->display.crtc_disable(state, crtc);
15979 	crtc->active = false;
15980 	intel_fbc_disable(crtc);
15981 	intel_disable_shared_dpll(old_crtc_state);
15982 
15983 	/* FIXME unify this for all platforms */
15984 	if (!new_crtc_state->hw.active &&
15985 	    !HAS_GMCH(dev_priv) &&
15986 	    dev_priv->display.initial_watermarks)
15987 		dev_priv->display.initial_watermarks(state, crtc);
15988 }
15989 
15990 static void intel_commit_modeset_disables(struct intel_atomic_state *state)
15991 {
15992 	struct intel_crtc_state *new_crtc_state, *old_crtc_state;
15993 	struct intel_crtc *crtc;
15994 	u32 handled = 0;
15995 	int i;
15996 
15997 	/* Only disable port sync and MST slaves */
15998 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
15999 					    new_crtc_state, i) {
16000 		if (!needs_modeset(new_crtc_state) || old_crtc_state->bigjoiner)
16001 			continue;
16002 
16003 		if (!old_crtc_state->hw.active)
16004 			continue;
16005 
16006 		/* In case of Transcoder port Sync master slave CRTCs can be
16007 		 * assigned in any order and we need to make sure that
16008 		 * slave CRTCs are disabled first and then master CRTC since
16009 		 * Slave vblanks are masked till Master Vblanks.
16010 		 */
16011 		if (!is_trans_port_sync_slave(old_crtc_state) &&
16012 		    !intel_dp_mst_is_slave_trans(old_crtc_state))
16013 			continue;
16014 
16015 		intel_pre_plane_update(state, crtc);
16016 		intel_old_crtc_state_disables(state, old_crtc_state,
16017 					      new_crtc_state, crtc);
16018 		handled |= BIT(crtc->pipe);
16019 	}
16020 
16021 	/* Disable everything else left on */
16022 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
16023 					    new_crtc_state, i) {
16024 		if (!needs_modeset(new_crtc_state) ||
16025 		    (handled & BIT(crtc->pipe)) ||
16026 		    old_crtc_state->bigjoiner_slave)
16027 			continue;
16028 
16029 		intel_pre_plane_update(state, crtc);
16030 		if (old_crtc_state->bigjoiner) {
16031 			struct intel_crtc *slave =
16032 				old_crtc_state->bigjoiner_linked_crtc;
16033 
16034 			intel_pre_plane_update(state, slave);
16035 		}
16036 
16037 		if (old_crtc_state->hw.active)
16038 			intel_old_crtc_state_disables(state, old_crtc_state,
16039 						      new_crtc_state, crtc);
16040 	}
16041 }
16042 
16043 static void intel_commit_modeset_enables(struct intel_atomic_state *state)
16044 {
16045 	struct intel_crtc_state *new_crtc_state;
16046 	struct intel_crtc *crtc;
16047 	int i;
16048 
16049 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
16050 		if (!new_crtc_state->hw.active)
16051 			continue;
16052 
16053 		intel_enable_crtc(state, crtc);
16054 		intel_update_crtc(state, crtc);
16055 	}
16056 }
16057 
16058 static void skl_commit_modeset_enables(struct intel_atomic_state *state)
16059 {
16060 	struct drm_i915_private *dev_priv = to_i915(state->base.dev);
16061 	struct intel_crtc *crtc;
16062 	struct intel_crtc_state *old_crtc_state, *new_crtc_state;
16063 	struct skl_ddb_entry entries[I915_MAX_PIPES] = {};
16064 	u8 update_pipes = 0, modeset_pipes = 0;
16065 	int i;
16066 
16067 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
16068 		enum pipe pipe = crtc->pipe;
16069 
16070 		if (!new_crtc_state->hw.active)
16071 			continue;
16072 
16073 		/* ignore allocations for crtc's that have been turned off. */
16074 		if (!needs_modeset(new_crtc_state)) {
16075 			entries[pipe] = old_crtc_state->wm.skl.ddb;
16076 			update_pipes |= BIT(pipe);
16077 		} else {
16078 			modeset_pipes |= BIT(pipe);
16079 		}
16080 	}
16081 
16082 	/*
16083 	 * Whenever the number of active pipes changes, we need to make sure we
16084 	 * update the pipes in the right order so that their ddb allocations
16085 	 * never overlap with each other between CRTC updates. Otherwise we'll
16086 	 * cause pipe underruns and other bad stuff.
16087 	 *
16088 	 * So first lets enable all pipes that do not need a fullmodeset as
16089 	 * those don't have any external dependency.
16090 	 */
16091 	while (update_pipes) {
16092 		for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
16093 						    new_crtc_state, i) {
16094 			enum pipe pipe = crtc->pipe;
16095 
16096 			if ((update_pipes & BIT(pipe)) == 0)
16097 				continue;
16098 
16099 			if (skl_ddb_allocation_overlaps(&new_crtc_state->wm.skl.ddb,
16100 							entries, I915_MAX_PIPES, pipe))
16101 				continue;
16102 
16103 			entries[pipe] = new_crtc_state->wm.skl.ddb;
16104 			update_pipes &= ~BIT(pipe);
16105 
16106 			intel_update_crtc(state, crtc);
16107 
16108 			/*
16109 			 * If this is an already active pipe, it's DDB changed,
16110 			 * and this isn't the last pipe that needs updating
16111 			 * then we need to wait for a vblank to pass for the
16112 			 * new ddb allocation to take effect.
16113 			 */
16114 			if (!skl_ddb_entry_equal(&new_crtc_state->wm.skl.ddb,
16115 						 &old_crtc_state->wm.skl.ddb) &&
16116 			    (update_pipes | modeset_pipes))
16117 				intel_wait_for_vblank(dev_priv, pipe);
16118 		}
16119 	}
16120 
16121 	update_pipes = modeset_pipes;
16122 
16123 	/*
16124 	 * Enable all pipes that needs a modeset and do not depends on other
16125 	 * pipes
16126 	 */
16127 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
16128 		enum pipe pipe = crtc->pipe;
16129 
16130 		if ((modeset_pipes & BIT(pipe)) == 0)
16131 			continue;
16132 
16133 		if (intel_dp_mst_is_slave_trans(new_crtc_state) ||
16134 		    is_trans_port_sync_master(new_crtc_state) ||
16135 		    (new_crtc_state->bigjoiner && !new_crtc_state->bigjoiner_slave))
16136 			continue;
16137 
16138 		modeset_pipes &= ~BIT(pipe);
16139 
16140 		intel_enable_crtc(state, crtc);
16141 	}
16142 
16143 	/*
16144 	 * Then we enable all remaining pipes that depend on other
16145 	 * pipes: MST slaves and port sync masters, big joiner master
16146 	 */
16147 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
16148 		enum pipe pipe = crtc->pipe;
16149 
16150 		if ((modeset_pipes & BIT(pipe)) == 0)
16151 			continue;
16152 
16153 		modeset_pipes &= ~BIT(pipe);
16154 
16155 		intel_enable_crtc(state, crtc);
16156 	}
16157 
16158 	/*
16159 	 * Finally we do the plane updates/etc. for all pipes that got enabled.
16160 	 */
16161 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
16162 		enum pipe pipe = crtc->pipe;
16163 
16164 		if ((update_pipes & BIT(pipe)) == 0)
16165 			continue;
16166 
16167 		drm_WARN_ON(&dev_priv->drm, skl_ddb_allocation_overlaps(&new_crtc_state->wm.skl.ddb,
16168 									entries, I915_MAX_PIPES, pipe));
16169 
16170 		entries[pipe] = new_crtc_state->wm.skl.ddb;
16171 		update_pipes &= ~BIT(pipe);
16172 
16173 		intel_update_crtc(state, crtc);
16174 	}
16175 
16176 	drm_WARN_ON(&dev_priv->drm, modeset_pipes);
16177 	drm_WARN_ON(&dev_priv->drm, update_pipes);
16178 }
16179 
16180 static void intel_atomic_helper_free_state(struct drm_i915_private *dev_priv)
16181 {
16182 	struct intel_atomic_state *state, *next;
16183 	struct llist_node *freed;
16184 
16185 	freed = llist_del_all(&dev_priv->atomic_helper.free_list);
16186 	llist_for_each_entry_safe(state, next, freed, freed)
16187 		drm_atomic_state_put(&state->base);
16188 }
16189 
16190 static void intel_atomic_helper_free_state_worker(struct work_struct *work)
16191 {
16192 	struct drm_i915_private *dev_priv =
16193 		container_of(work, typeof(*dev_priv), atomic_helper.free_work);
16194 
16195 	intel_atomic_helper_free_state(dev_priv);
16196 }
16197 
16198 static void intel_atomic_commit_fence_wait(struct intel_atomic_state *intel_state)
16199 {
16200 	struct wait_queue_entry wait_fence, wait_reset;
16201 	struct drm_i915_private *dev_priv = to_i915(intel_state->base.dev);
16202 
16203 	init_wait_entry(&wait_fence, 0);
16204 	init_wait_entry(&wait_reset, 0);
16205 	for (;;) {
16206 		prepare_to_wait(&intel_state->commit_ready.wait,
16207 				&wait_fence, TASK_UNINTERRUPTIBLE);
16208 		prepare_to_wait(bit_waitqueue(&dev_priv->gt.reset.flags,
16209 					      I915_RESET_MODESET),
16210 				&wait_reset, TASK_UNINTERRUPTIBLE);
16211 
16212 
16213 		if (i915_sw_fence_done(&intel_state->commit_ready) ||
16214 		    test_bit(I915_RESET_MODESET, &dev_priv->gt.reset.flags))
16215 			break;
16216 
16217 		schedule();
16218 	}
16219 	finish_wait(&intel_state->commit_ready.wait, &wait_fence);
16220 	finish_wait(bit_waitqueue(&dev_priv->gt.reset.flags,
16221 				  I915_RESET_MODESET),
16222 		    &wait_reset);
16223 }
16224 
16225 static void intel_cleanup_dsbs(struct intel_atomic_state *state)
16226 {
16227 	struct intel_crtc_state *old_crtc_state, *new_crtc_state;
16228 	struct intel_crtc *crtc;
16229 	int i;
16230 
16231 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
16232 					    new_crtc_state, i)
16233 		intel_dsb_cleanup(old_crtc_state);
16234 }
16235 
16236 static void intel_atomic_cleanup_work(struct work_struct *work)
16237 {
16238 	struct intel_atomic_state *state =
16239 		container_of(work, struct intel_atomic_state, base.commit_work);
16240 	struct drm_i915_private *i915 = to_i915(state->base.dev);
16241 
16242 	intel_cleanup_dsbs(state);
16243 	drm_atomic_helper_cleanup_planes(&i915->drm, &state->base);
16244 	drm_atomic_helper_commit_cleanup_done(&state->base);
16245 	drm_atomic_state_put(&state->base);
16246 
16247 	intel_atomic_helper_free_state(i915);
16248 }
16249 
16250 static void intel_atomic_commit_tail(struct intel_atomic_state *state)
16251 {
16252 	struct drm_device *dev = state->base.dev;
16253 	struct drm_i915_private *dev_priv = to_i915(dev);
16254 	struct intel_crtc_state *new_crtc_state, *old_crtc_state;
16255 	struct intel_crtc *crtc;
16256 	u64 put_domains[I915_MAX_PIPES] = {};
16257 	intel_wakeref_t wakeref = 0;
16258 	int i;
16259 
16260 	intel_atomic_commit_fence_wait(state);
16261 
16262 	drm_atomic_helper_wait_for_dependencies(&state->base);
16263 
16264 	if (state->modeset)
16265 		wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_MODESET);
16266 
16267 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
16268 					    new_crtc_state, i) {
16269 		if (needs_modeset(new_crtc_state) ||
16270 		    new_crtc_state->update_pipe) {
16271 
16272 			put_domains[crtc->pipe] =
16273 				modeset_get_crtc_power_domains(new_crtc_state);
16274 		}
16275 	}
16276 
16277 	intel_commit_modeset_disables(state);
16278 
16279 	/* FIXME: Eventually get rid of our crtc->config pointer */
16280 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i)
16281 		crtc->config = new_crtc_state;
16282 
16283 	if (state->modeset) {
16284 		drm_atomic_helper_update_legacy_modeset_state(dev, &state->base);
16285 
16286 		intel_set_cdclk_pre_plane_update(state);
16287 
16288 		intel_modeset_verify_disabled(dev_priv, state);
16289 	}
16290 
16291 	intel_sagv_pre_plane_update(state);
16292 
16293 	/* Complete the events for pipes that have now been disabled */
16294 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
16295 		bool modeset = needs_modeset(new_crtc_state);
16296 
16297 		/* Complete events for now disable pipes here. */
16298 		if (modeset && !new_crtc_state->hw.active && new_crtc_state->uapi.event) {
16299 			spin_lock_irq(&dev->event_lock);
16300 			drm_crtc_send_vblank_event(&crtc->base,
16301 						   new_crtc_state->uapi.event);
16302 			spin_unlock_irq(&dev->event_lock);
16303 
16304 			new_crtc_state->uapi.event = NULL;
16305 		}
16306 	}
16307 
16308 	if (state->modeset)
16309 		intel_encoders_update_prepare(state);
16310 
16311 	intel_dbuf_pre_plane_update(state);
16312 
16313 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
16314 		if (new_crtc_state->uapi.async_flip)
16315 			skl_enable_flip_done(crtc);
16316 	}
16317 
16318 	/* Now enable the clocks, plane, pipe, and connectors that we set up. */
16319 	dev_priv->display.commit_modeset_enables(state);
16320 
16321 	if (state->modeset) {
16322 		intel_encoders_update_complete(state);
16323 
16324 		intel_set_cdclk_post_plane_update(state);
16325 	}
16326 
16327 	/* FIXME: We should call drm_atomic_helper_commit_hw_done() here
16328 	 * already, but still need the state for the delayed optimization. To
16329 	 * fix this:
16330 	 * - wrap the optimization/post_plane_update stuff into a per-crtc work.
16331 	 * - schedule that vblank worker _before_ calling hw_done
16332 	 * - at the start of commit_tail, cancel it _synchrously
16333 	 * - switch over to the vblank wait helper in the core after that since
16334 	 *   we don't need out special handling any more.
16335 	 */
16336 	drm_atomic_helper_wait_for_flip_done(dev, &state->base);
16337 
16338 	for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
16339 		if (new_crtc_state->uapi.async_flip)
16340 			skl_disable_flip_done(crtc);
16341 
16342 		if (new_crtc_state->hw.active &&
16343 		    !needs_modeset(new_crtc_state) &&
16344 		    !new_crtc_state->preload_luts &&
16345 		    (new_crtc_state->uapi.color_mgmt_changed ||
16346 		     new_crtc_state->update_pipe))
16347 			intel_color_load_luts(new_crtc_state);
16348 	}
16349 
16350 	/*
16351 	 * Now that the vblank has passed, we can go ahead and program the
16352 	 * optimal watermarks on platforms that need two-step watermark
16353 	 * programming.
16354 	 *
16355 	 * TODO: Move this (and other cleanup) to an async worker eventually.
16356 	 */
16357 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
16358 					    new_crtc_state, i) {
16359 		/*
16360 		 * Gen2 reports pipe underruns whenever all planes are disabled.
16361 		 * So re-enable underrun reporting after some planes get enabled.
16362 		 *
16363 		 * We do this before .optimize_watermarks() so that we have a
16364 		 * chance of catching underruns with the intermediate watermarks
16365 		 * vs. the new plane configuration.
16366 		 */
16367 		if (IS_GEN(dev_priv, 2) && planes_enabling(old_crtc_state, new_crtc_state))
16368 			intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, true);
16369 
16370 		if (dev_priv->display.optimize_watermarks)
16371 			dev_priv->display.optimize_watermarks(state, crtc);
16372 	}
16373 
16374 	intel_dbuf_post_plane_update(state);
16375 
16376 	for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
16377 		intel_post_plane_update(state, crtc);
16378 
16379 		if (put_domains[i])
16380 			modeset_put_power_domains(dev_priv, put_domains[i]);
16381 
16382 		intel_modeset_verify_crtc(crtc, state, old_crtc_state, new_crtc_state);
16383 
16384 		/*
16385 		 * DSB cleanup is done in cleanup_work aligning with framebuffer
16386 		 * cleanup. So copy and reset the dsb structure to sync with
16387 		 * commit_done and later do dsb cleanup in cleanup_work.
16388 		 */
16389 		old_crtc_state->dsb = fetch_and_zero(&new_crtc_state->dsb);
16390 	}
16391 
16392 	/* Underruns don't always raise interrupts, so check manually */
16393 	intel_check_cpu_fifo_underruns(dev_priv);
16394 	intel_check_pch_fifo_underruns(dev_priv);
16395 
16396 	if (state->modeset)
16397 		intel_verify_planes(state);
16398 
16399 	intel_sagv_post_plane_update(state);
16400 
16401 	drm_atomic_helper_commit_hw_done(&state->base);
16402 
16403 	if (state->modeset) {
16404 		/* As one of the primary mmio accessors, KMS has a high
16405 		 * likelihood of triggering bugs in unclaimed access. After we
16406 		 * finish modesetting, see if an error has been flagged, and if
16407 		 * so enable debugging for the next modeset - and hope we catch
16408 		 * the culprit.
16409 		 */
16410 		intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore);
16411 		intel_display_power_put(dev_priv, POWER_DOMAIN_MODESET, wakeref);
16412 	}
16413 	intel_runtime_pm_put(&dev_priv->runtime_pm, state->wakeref);
16414 
16415 	/*
16416 	 * Defer the cleanup of the old state to a separate worker to not
16417 	 * impede the current task (userspace for blocking modesets) that
16418 	 * are executed inline. For out-of-line asynchronous modesets/flips,
16419 	 * deferring to a new worker seems overkill, but we would place a
16420 	 * schedule point (cond_resched()) here anyway to keep latencies
16421 	 * down.
16422 	 */
16423 	INIT_WORK(&state->base.commit_work, intel_atomic_cleanup_work);
16424 	queue_work(system_highpri_wq, &state->base.commit_work);
16425 }
16426 
16427 static void intel_atomic_commit_work(struct work_struct *work)
16428 {
16429 	struct intel_atomic_state *state =
16430 		container_of(work, struct intel_atomic_state, base.commit_work);
16431 
16432 	intel_atomic_commit_tail(state);
16433 }
16434 
16435 static int __i915_sw_fence_call
16436 intel_atomic_commit_ready(struct i915_sw_fence *fence,
16437 			  enum i915_sw_fence_notify notify)
16438 {
16439 	struct intel_atomic_state *state =
16440 		container_of(fence, struct intel_atomic_state, commit_ready);
16441 
16442 	switch (notify) {
16443 	case FENCE_COMPLETE:
16444 		/* we do blocking waits in the worker, nothing to do here */
16445 		break;
16446 	case FENCE_FREE:
16447 		{
16448 			struct intel_atomic_helper *helper =
16449 				&to_i915(state->base.dev)->atomic_helper;
16450 
16451 			if (llist_add(&state->freed, &helper->free_list))
16452 				schedule_work(&helper->free_work);
16453 			break;
16454 		}
16455 	}
16456 
16457 	return NOTIFY_DONE;
16458 }
16459 
16460 static void intel_atomic_track_fbs(struct intel_atomic_state *state)
16461 {
16462 	struct intel_plane_state *old_plane_state, *new_plane_state;
16463 	struct intel_plane *plane;
16464 	int i;
16465 
16466 	for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
16467 					     new_plane_state, i)
16468 		intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb),
16469 					to_intel_frontbuffer(new_plane_state->hw.fb),
16470 					plane->frontbuffer_bit);
16471 }
16472 
16473 static int intel_atomic_commit(struct drm_device *dev,
16474 			       struct drm_atomic_state *_state,
16475 			       bool nonblock)
16476 {
16477 	struct intel_atomic_state *state = to_intel_atomic_state(_state);
16478 	struct drm_i915_private *dev_priv = to_i915(dev);
16479 	int ret = 0;
16480 
16481 	state->wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
16482 
16483 	drm_atomic_state_get(&state->base);
16484 	i915_sw_fence_init(&state->commit_ready,
16485 			   intel_atomic_commit_ready);
16486 
16487 	/*
16488 	 * The intel_legacy_cursor_update() fast path takes care
16489 	 * of avoiding the vblank waits for simple cursor
16490 	 * movement and flips. For cursor on/off and size changes,
16491 	 * we want to perform the vblank waits so that watermark
16492 	 * updates happen during the correct frames. Gen9+ have
16493 	 * double buffered watermarks and so shouldn't need this.
16494 	 *
16495 	 * Unset state->legacy_cursor_update before the call to
16496 	 * drm_atomic_helper_setup_commit() because otherwise
16497 	 * drm_atomic_helper_wait_for_flip_done() is a noop and
16498 	 * we get FIFO underruns because we didn't wait
16499 	 * for vblank.
16500 	 *
16501 	 * FIXME doing watermarks and fb cleanup from a vblank worker
16502 	 * (assuming we had any) would solve these problems.
16503 	 */
16504 	if (INTEL_GEN(dev_priv) < 9 && state->base.legacy_cursor_update) {
16505 		struct intel_crtc_state *new_crtc_state;
16506 		struct intel_crtc *crtc;
16507 		int i;
16508 
16509 		for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i)
16510 			if (new_crtc_state->wm.need_postvbl_update ||
16511 			    new_crtc_state->update_wm_post)
16512 				state->base.legacy_cursor_update = false;
16513 	}
16514 
16515 	ret = intel_atomic_prepare_commit(state);
16516 	if (ret) {
16517 		drm_dbg_atomic(&dev_priv->drm,
16518 			       "Preparing state failed with %i\n", ret);
16519 		i915_sw_fence_commit(&state->commit_ready);
16520 		intel_runtime_pm_put(&dev_priv->runtime_pm, state->wakeref);
16521 		return ret;
16522 	}
16523 
16524 	ret = drm_atomic_helper_setup_commit(&state->base, nonblock);
16525 	if (!ret)
16526 		ret = drm_atomic_helper_swap_state(&state->base, true);
16527 	if (!ret)
16528 		intel_atomic_swap_global_state(state);
16529 
16530 	if (ret) {
16531 		struct intel_crtc_state *new_crtc_state;
16532 		struct intel_crtc *crtc;
16533 		int i;
16534 
16535 		i915_sw_fence_commit(&state->commit_ready);
16536 
16537 		for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i)
16538 			intel_dsb_cleanup(new_crtc_state);
16539 
16540 		drm_atomic_helper_cleanup_planes(dev, &state->base);
16541 		intel_runtime_pm_put(&dev_priv->runtime_pm, state->wakeref);
16542 		return ret;
16543 	}
16544 	dev_priv->wm.distrust_bios_wm = false;
16545 	intel_shared_dpll_swap_state(state);
16546 	intel_atomic_track_fbs(state);
16547 
16548 	drm_atomic_state_get(&state->base);
16549 	INIT_WORK(&state->base.commit_work, intel_atomic_commit_work);
16550 
16551 	i915_sw_fence_commit(&state->commit_ready);
16552 	if (nonblock && state->modeset) {
16553 		queue_work(dev_priv->modeset_wq, &state->base.commit_work);
16554 	} else if (nonblock) {
16555 		queue_work(dev_priv->flip_wq, &state->base.commit_work);
16556 	} else {
16557 		if (state->modeset)
16558 			flush_workqueue(dev_priv->modeset_wq);
16559 		intel_atomic_commit_tail(state);
16560 	}
16561 
16562 	return 0;
16563 }
16564 
16565 struct wait_rps_boost {
16566 	struct wait_queue_entry wait;
16567 
16568 	struct drm_crtc *crtc;
16569 	struct i915_request *request;
16570 };
16571 
16572 static int do_rps_boost(struct wait_queue_entry *_wait,
16573 			unsigned mode, int sync, void *key)
16574 {
16575 	struct wait_rps_boost *wait = container_of(_wait, typeof(*wait), wait);
16576 	struct i915_request *rq = wait->request;
16577 
16578 	/*
16579 	 * If we missed the vblank, but the request is already running it
16580 	 * is reasonable to assume that it will complete before the next
16581 	 * vblank without our intervention, so leave RPS alone.
16582 	 */
16583 	if (!i915_request_started(rq))
16584 		intel_rps_boost(rq);
16585 	i915_request_put(rq);
16586 
16587 	drm_crtc_vblank_put(wait->crtc);
16588 
16589 	list_del(&wait->wait.entry);
16590 	kfree(wait);
16591 	return 1;
16592 }
16593 
16594 static void add_rps_boost_after_vblank(struct drm_crtc *crtc,
16595 				       struct dma_fence *fence)
16596 {
16597 	struct wait_rps_boost *wait;
16598 
16599 	if (!dma_fence_is_i915(fence))
16600 		return;
16601 
16602 	if (INTEL_GEN(to_i915(crtc->dev)) < 6)
16603 		return;
16604 
16605 	if (drm_crtc_vblank_get(crtc))
16606 		return;
16607 
16608 	wait = kmalloc(sizeof(*wait), GFP_KERNEL);
16609 	if (!wait) {
16610 		drm_crtc_vblank_put(crtc);
16611 		return;
16612 	}
16613 
16614 	wait->request = to_request(dma_fence_get(fence));
16615 	wait->crtc = crtc;
16616 
16617 	wait->wait.func = do_rps_boost;
16618 	wait->wait.flags = 0;
16619 
16620 	add_wait_queue(drm_crtc_vblank_waitqueue(crtc), &wait->wait);
16621 }
16622 
16623 static int intel_plane_pin_fb(struct intel_plane_state *plane_state)
16624 {
16625 	struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
16626 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
16627 	struct drm_framebuffer *fb = plane_state->hw.fb;
16628 	struct i915_vma *vma;
16629 
16630 	if (plane->id == PLANE_CURSOR &&
16631 	    INTEL_INFO(dev_priv)->display.cursor_needs_physical) {
16632 		struct drm_i915_gem_object *obj = intel_fb_obj(fb);
16633 		const int align = intel_cursor_alignment(dev_priv);
16634 		int err;
16635 
16636 		err = i915_gem_object_attach_phys(obj, align);
16637 		if (err)
16638 			return err;
16639 	}
16640 
16641 	vma = intel_pin_and_fence_fb_obj(fb,
16642 					 &plane_state->view,
16643 					 intel_plane_uses_fence(plane_state),
16644 					 &plane_state->flags);
16645 	if (IS_ERR(vma))
16646 		return PTR_ERR(vma);
16647 
16648 	plane_state->vma = vma;
16649 
16650 	return 0;
16651 }
16652 
16653 static void intel_plane_unpin_fb(struct intel_plane_state *old_plane_state)
16654 {
16655 	struct i915_vma *vma;
16656 
16657 	vma = fetch_and_zero(&old_plane_state->vma);
16658 	if (vma)
16659 		intel_unpin_fb_vma(vma, old_plane_state->flags);
16660 }
16661 
16662 static void fb_obj_bump_render_priority(struct drm_i915_gem_object *obj)
16663 {
16664 	struct i915_sched_attr attr = {
16665 		.priority = I915_USER_PRIORITY(I915_PRIORITY_DISPLAY),
16666 	};
16667 
16668 	i915_gem_object_wait_priority(obj, 0, &attr);
16669 }
16670 
16671 /**
16672  * intel_prepare_plane_fb - Prepare fb for usage on plane
16673  * @_plane: drm plane to prepare for
16674  * @_new_plane_state: the plane state being prepared
16675  *
16676  * Prepares a framebuffer for usage on a display plane.  Generally this
16677  * involves pinning the underlying object and updating the frontbuffer tracking
16678  * bits.  Some older platforms need special physical address handling for
16679  * cursor planes.
16680  *
16681  * Returns 0 on success, negative error code on failure.
16682  */
16683 int
16684 intel_prepare_plane_fb(struct drm_plane *_plane,
16685 		       struct drm_plane_state *_new_plane_state)
16686 {
16687 	struct intel_plane *plane = to_intel_plane(_plane);
16688 	struct intel_plane_state *new_plane_state =
16689 		to_intel_plane_state(_new_plane_state);
16690 	struct intel_atomic_state *state =
16691 		to_intel_atomic_state(new_plane_state->uapi.state);
16692 	struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
16693 	const struct intel_plane_state *old_plane_state =
16694 		intel_atomic_get_old_plane_state(state, plane);
16695 	struct drm_i915_gem_object *obj = intel_fb_obj(new_plane_state->hw.fb);
16696 	struct drm_i915_gem_object *old_obj = intel_fb_obj(old_plane_state->hw.fb);
16697 	int ret;
16698 
16699 	if (old_obj) {
16700 		const struct intel_crtc_state *crtc_state =
16701 			intel_atomic_get_new_crtc_state(state,
16702 							to_intel_crtc(old_plane_state->hw.crtc));
16703 
16704 		/* Big Hammer, we also need to ensure that any pending
16705 		 * MI_WAIT_FOR_EVENT inside a user batch buffer on the
16706 		 * current scanout is retired before unpinning the old
16707 		 * framebuffer. Note that we rely on userspace rendering
16708 		 * into the buffer attached to the pipe they are waiting
16709 		 * on. If not, userspace generates a GPU hang with IPEHR
16710 		 * point to the MI_WAIT_FOR_EVENT.
16711 		 *
16712 		 * This should only fail upon a hung GPU, in which case we
16713 		 * can safely continue.
16714 		 */
16715 		if (needs_modeset(crtc_state)) {
16716 			ret = i915_sw_fence_await_reservation(&state->commit_ready,
16717 							      old_obj->base.resv, NULL,
16718 							      false, 0,
16719 							      GFP_KERNEL);
16720 			if (ret < 0)
16721 				return ret;
16722 		}
16723 	}
16724 
16725 	if (new_plane_state->uapi.fence) { /* explicit fencing */
16726 		ret = i915_sw_fence_await_dma_fence(&state->commit_ready,
16727 						    new_plane_state->uapi.fence,
16728 						    i915_fence_timeout(dev_priv),
16729 						    GFP_KERNEL);
16730 		if (ret < 0)
16731 			return ret;
16732 	}
16733 
16734 	if (!obj)
16735 		return 0;
16736 
16737 	ret = i915_gem_object_pin_pages(obj);
16738 	if (ret)
16739 		return ret;
16740 
16741 	ret = intel_plane_pin_fb(new_plane_state);
16742 
16743 	i915_gem_object_unpin_pages(obj);
16744 	if (ret)
16745 		return ret;
16746 
16747 	fb_obj_bump_render_priority(obj);
16748 	i915_gem_object_flush_frontbuffer(obj, ORIGIN_DIRTYFB);
16749 
16750 	if (!new_plane_state->uapi.fence) { /* implicit fencing */
16751 		struct dma_fence *fence;
16752 
16753 		ret = i915_sw_fence_await_reservation(&state->commit_ready,
16754 						      obj->base.resv, NULL,
16755 						      false,
16756 						      i915_fence_timeout(dev_priv),
16757 						      GFP_KERNEL);
16758 		if (ret < 0)
16759 			goto unpin_fb;
16760 
16761 		fence = dma_resv_get_excl_rcu(obj->base.resv);
16762 		if (fence) {
16763 			add_rps_boost_after_vblank(new_plane_state->hw.crtc,
16764 						   fence);
16765 			dma_fence_put(fence);
16766 		}
16767 	} else {
16768 		add_rps_boost_after_vblank(new_plane_state->hw.crtc,
16769 					   new_plane_state->uapi.fence);
16770 	}
16771 
16772 	/*
16773 	 * We declare pageflips to be interactive and so merit a small bias
16774 	 * towards upclocking to deliver the frame on time. By only changing
16775 	 * the RPS thresholds to sample more regularly and aim for higher
16776 	 * clocks we can hopefully deliver low power workloads (like kodi)
16777 	 * that are not quite steady state without resorting to forcing
16778 	 * maximum clocks following a vblank miss (see do_rps_boost()).
16779 	 */
16780 	if (!state->rps_interactive) {
16781 		intel_rps_mark_interactive(&dev_priv->gt.rps, true);
16782 		state->rps_interactive = true;
16783 	}
16784 
16785 	return 0;
16786 
16787 unpin_fb:
16788 	intel_plane_unpin_fb(new_plane_state);
16789 
16790 	return ret;
16791 }
16792 
16793 /**
16794  * intel_cleanup_plane_fb - Cleans up an fb after plane use
16795  * @plane: drm plane to clean up for
16796  * @_old_plane_state: the state from the previous modeset
16797  *
16798  * Cleans up a framebuffer that has just been removed from a plane.
16799  */
16800 void
16801 intel_cleanup_plane_fb(struct drm_plane *plane,
16802 		       struct drm_plane_state *_old_plane_state)
16803 {
16804 	struct intel_plane_state *old_plane_state =
16805 		to_intel_plane_state(_old_plane_state);
16806 	struct intel_atomic_state *state =
16807 		to_intel_atomic_state(old_plane_state->uapi.state);
16808 	struct drm_i915_private *dev_priv = to_i915(plane->dev);
16809 	struct drm_i915_gem_object *obj = intel_fb_obj(old_plane_state->hw.fb);
16810 
16811 	if (!obj)
16812 		return;
16813 
16814 	if (state->rps_interactive) {
16815 		intel_rps_mark_interactive(&dev_priv->gt.rps, false);
16816 		state->rps_interactive = false;
16817 	}
16818 
16819 	/* Should only be called after a successful intel_prepare_plane_fb()! */
16820 	intel_plane_unpin_fb(old_plane_state);
16821 }
16822 
16823 /**
16824  * intel_plane_destroy - destroy a plane
16825  * @plane: plane to destroy
16826  *
16827  * Common destruction function for all types of planes (primary, cursor,
16828  * sprite).
16829  */
16830 void intel_plane_destroy(struct drm_plane *plane)
16831 {
16832 	drm_plane_cleanup(plane);
16833 	kfree(to_intel_plane(plane));
16834 }
16835 
16836 static bool i8xx_plane_format_mod_supported(struct drm_plane *_plane,
16837 					    u32 format, u64 modifier)
16838 {
16839 	switch (modifier) {
16840 	case DRM_FORMAT_MOD_LINEAR:
16841 	case I915_FORMAT_MOD_X_TILED:
16842 		break;
16843 	default:
16844 		return false;
16845 	}
16846 
16847 	switch (format) {
16848 	case DRM_FORMAT_C8:
16849 	case DRM_FORMAT_RGB565:
16850 	case DRM_FORMAT_XRGB1555:
16851 	case DRM_FORMAT_XRGB8888:
16852 		return modifier == DRM_FORMAT_MOD_LINEAR ||
16853 			modifier == I915_FORMAT_MOD_X_TILED;
16854 	default:
16855 		return false;
16856 	}
16857 }
16858 
16859 static bool i965_plane_format_mod_supported(struct drm_plane *_plane,
16860 					    u32 format, u64 modifier)
16861 {
16862 	switch (modifier) {
16863 	case DRM_FORMAT_MOD_LINEAR:
16864 	case I915_FORMAT_MOD_X_TILED:
16865 		break;
16866 	default:
16867 		return false;
16868 	}
16869 
16870 	switch (format) {
16871 	case DRM_FORMAT_C8:
16872 	case DRM_FORMAT_RGB565:
16873 	case DRM_FORMAT_XRGB8888:
16874 	case DRM_FORMAT_XBGR8888:
16875 	case DRM_FORMAT_ARGB8888:
16876 	case DRM_FORMAT_ABGR8888:
16877 	case DRM_FORMAT_XRGB2101010:
16878 	case DRM_FORMAT_XBGR2101010:
16879 	case DRM_FORMAT_ARGB2101010:
16880 	case DRM_FORMAT_ABGR2101010:
16881 	case DRM_FORMAT_XBGR16161616F:
16882 		return modifier == DRM_FORMAT_MOD_LINEAR ||
16883 			modifier == I915_FORMAT_MOD_X_TILED;
16884 	default:
16885 		return false;
16886 	}
16887 }
16888 
16889 static bool intel_cursor_format_mod_supported(struct drm_plane *_plane,
16890 					      u32 format, u64 modifier)
16891 {
16892 	return modifier == DRM_FORMAT_MOD_LINEAR &&
16893 		format == DRM_FORMAT_ARGB8888;
16894 }
16895 
16896 static const struct drm_plane_funcs i965_plane_funcs = {
16897 	.update_plane = drm_atomic_helper_update_plane,
16898 	.disable_plane = drm_atomic_helper_disable_plane,
16899 	.destroy = intel_plane_destroy,
16900 	.atomic_duplicate_state = intel_plane_duplicate_state,
16901 	.atomic_destroy_state = intel_plane_destroy_state,
16902 	.format_mod_supported = i965_plane_format_mod_supported,
16903 };
16904 
16905 static const struct drm_plane_funcs i8xx_plane_funcs = {
16906 	.update_plane = drm_atomic_helper_update_plane,
16907 	.disable_plane = drm_atomic_helper_disable_plane,
16908 	.destroy = intel_plane_destroy,
16909 	.atomic_duplicate_state = intel_plane_duplicate_state,
16910 	.atomic_destroy_state = intel_plane_destroy_state,
16911 	.format_mod_supported = i8xx_plane_format_mod_supported,
16912 };
16913 
16914 static int
16915 intel_legacy_cursor_update(struct drm_plane *_plane,
16916 			   struct drm_crtc *_crtc,
16917 			   struct drm_framebuffer *fb,
16918 			   int crtc_x, int crtc_y,
16919 			   unsigned int crtc_w, unsigned int crtc_h,
16920 			   u32 src_x, u32 src_y,
16921 			   u32 src_w, u32 src_h,
16922 			   struct drm_modeset_acquire_ctx *ctx)
16923 {
16924 	struct intel_plane *plane = to_intel_plane(_plane);
16925 	struct intel_crtc *crtc = to_intel_crtc(_crtc);
16926 	struct intel_plane_state *old_plane_state =
16927 		to_intel_plane_state(plane->base.state);
16928 	struct intel_plane_state *new_plane_state;
16929 	struct intel_crtc_state *crtc_state =
16930 		to_intel_crtc_state(crtc->base.state);
16931 	struct intel_crtc_state *new_crtc_state;
16932 	int ret;
16933 
16934 	/*
16935 	 * When crtc is inactive or there is a modeset pending,
16936 	 * wait for it to complete in the slowpath
16937 	 *
16938 	 * FIXME bigjoiner fastpath would be good
16939 	 */
16940 	if (!crtc_state->hw.active || needs_modeset(crtc_state) ||
16941 	    crtc_state->update_pipe || crtc_state->bigjoiner)
16942 		goto slow;
16943 
16944 	/*
16945 	 * Don't do an async update if there is an outstanding commit modifying
16946 	 * the plane.  This prevents our async update's changes from getting
16947 	 * overridden by a previous synchronous update's state.
16948 	 */
16949 	if (old_plane_state->uapi.commit &&
16950 	    !try_wait_for_completion(&old_plane_state->uapi.commit->hw_done))
16951 		goto slow;
16952 
16953 	/*
16954 	 * If any parameters change that may affect watermarks,
16955 	 * take the slowpath. Only changing fb or position should be
16956 	 * in the fastpath.
16957 	 */
16958 	if (old_plane_state->uapi.crtc != &crtc->base ||
16959 	    old_plane_state->uapi.src_w != src_w ||
16960 	    old_plane_state->uapi.src_h != src_h ||
16961 	    old_plane_state->uapi.crtc_w != crtc_w ||
16962 	    old_plane_state->uapi.crtc_h != crtc_h ||
16963 	    !old_plane_state->uapi.fb != !fb)
16964 		goto slow;
16965 
16966 	new_plane_state = to_intel_plane_state(intel_plane_duplicate_state(&plane->base));
16967 	if (!new_plane_state)
16968 		return -ENOMEM;
16969 
16970 	new_crtc_state = to_intel_crtc_state(intel_crtc_duplicate_state(&crtc->base));
16971 	if (!new_crtc_state) {
16972 		ret = -ENOMEM;
16973 		goto out_free;
16974 	}
16975 
16976 	drm_atomic_set_fb_for_plane(&new_plane_state->uapi, fb);
16977 
16978 	new_plane_state->uapi.src_x = src_x;
16979 	new_plane_state->uapi.src_y = src_y;
16980 	new_plane_state->uapi.src_w = src_w;
16981 	new_plane_state->uapi.src_h = src_h;
16982 	new_plane_state->uapi.crtc_x = crtc_x;
16983 	new_plane_state->uapi.crtc_y = crtc_y;
16984 	new_plane_state->uapi.crtc_w = crtc_w;
16985 	new_plane_state->uapi.crtc_h = crtc_h;
16986 
16987 	intel_plane_copy_uapi_to_hw_state(new_plane_state, new_plane_state, crtc);
16988 
16989 	ret = intel_plane_atomic_check_with_state(crtc_state, new_crtc_state,
16990 						  old_plane_state, new_plane_state);
16991 	if (ret)
16992 		goto out_free;
16993 
16994 	ret = intel_plane_pin_fb(new_plane_state);
16995 	if (ret)
16996 		goto out_free;
16997 
16998 	intel_frontbuffer_flush(to_intel_frontbuffer(new_plane_state->hw.fb),
16999 				ORIGIN_FLIP);
17000 	intel_frontbuffer_track(to_intel_frontbuffer(old_plane_state->hw.fb),
17001 				to_intel_frontbuffer(new_plane_state->hw.fb),
17002 				plane->frontbuffer_bit);
17003 
17004 	/* Swap plane state */
17005 	plane->base.state = &new_plane_state->uapi;
17006 
17007 	/*
17008 	 * We cannot swap crtc_state as it may be in use by an atomic commit or
17009 	 * page flip that's running simultaneously. If we swap crtc_state and
17010 	 * destroy the old state, we will cause a use-after-free there.
17011 	 *
17012 	 * Only update active_planes, which is needed for our internal
17013 	 * bookkeeping. Either value will do the right thing when updating
17014 	 * planes atomically. If the cursor was part of the atomic update then
17015 	 * we would have taken the slowpath.
17016 	 */
17017 	crtc_state->active_planes = new_crtc_state->active_planes;
17018 
17019 	if (new_plane_state->uapi.visible)
17020 		intel_update_plane(plane, crtc_state, new_plane_state);
17021 	else
17022 		intel_disable_plane(plane, crtc_state);
17023 
17024 	intel_plane_unpin_fb(old_plane_state);
17025 
17026 out_free:
17027 	if (new_crtc_state)
17028 		intel_crtc_destroy_state(&crtc->base, &new_crtc_state->uapi);
17029 	if (ret)
17030 		intel_plane_destroy_state(&plane->base, &new_plane_state->uapi);
17031 	else
17032 		intel_plane_destroy_state(&plane->base, &old_plane_state->uapi);
17033 	return ret;
17034 
17035 slow:
17036 	return drm_atomic_helper_update_plane(&plane->base, &crtc->base, fb,
17037 					      crtc_x, crtc_y, crtc_w, crtc_h,
17038 					      src_x, src_y, src_w, src_h, ctx);
17039 }
17040 
17041 static const struct drm_plane_funcs intel_cursor_plane_funcs = {
17042 	.update_plane = intel_legacy_cursor_update,
17043 	.disable_plane = drm_atomic_helper_disable_plane,
17044 	.destroy = intel_plane_destroy,
17045 	.atomic_duplicate_state = intel_plane_duplicate_state,
17046 	.atomic_destroy_state = intel_plane_destroy_state,
17047 	.format_mod_supported = intel_cursor_format_mod_supported,
17048 };
17049 
17050 static bool i9xx_plane_has_fbc(struct drm_i915_private *dev_priv,
17051 			       enum i9xx_plane_id i9xx_plane)
17052 {
17053 	if (!HAS_FBC(dev_priv))
17054 		return false;
17055 
17056 	if (IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
17057 		return i9xx_plane == PLANE_A; /* tied to pipe A */
17058 	else if (IS_IVYBRIDGE(dev_priv))
17059 		return i9xx_plane == PLANE_A || i9xx_plane == PLANE_B ||
17060 			i9xx_plane == PLANE_C;
17061 	else if (INTEL_GEN(dev_priv) >= 4)
17062 		return i9xx_plane == PLANE_A || i9xx_plane == PLANE_B;
17063 	else
17064 		return i9xx_plane == PLANE_A;
17065 }
17066 
17067 static struct intel_plane *
17068 intel_primary_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
17069 {
17070 	struct intel_plane *plane;
17071 	const struct drm_plane_funcs *plane_funcs;
17072 	unsigned int supported_rotations;
17073 	const u32 *formats;
17074 	int num_formats;
17075 	int ret, zpos;
17076 
17077 	if (INTEL_GEN(dev_priv) >= 9)
17078 		return skl_universal_plane_create(dev_priv, pipe,
17079 						  PLANE_PRIMARY);
17080 
17081 	plane = intel_plane_alloc();
17082 	if (IS_ERR(plane))
17083 		return plane;
17084 
17085 	plane->pipe = pipe;
17086 	/*
17087 	 * On gen2/3 only plane A can do FBC, but the panel fitter and LVDS
17088 	 * port is hooked to pipe B. Hence we want plane A feeding pipe B.
17089 	 */
17090 	if (HAS_FBC(dev_priv) && INTEL_GEN(dev_priv) < 4 &&
17091 	    INTEL_NUM_PIPES(dev_priv) == 2)
17092 		plane->i9xx_plane = (enum i9xx_plane_id) !pipe;
17093 	else
17094 		plane->i9xx_plane = (enum i9xx_plane_id) pipe;
17095 	plane->id = PLANE_PRIMARY;
17096 	plane->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, plane->id);
17097 
17098 	plane->has_fbc = i9xx_plane_has_fbc(dev_priv, plane->i9xx_plane);
17099 	if (plane->has_fbc) {
17100 		struct intel_fbc *fbc = &dev_priv->fbc;
17101 
17102 		fbc->possible_framebuffer_bits |= plane->frontbuffer_bit;
17103 	}
17104 
17105 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
17106 		formats = vlv_primary_formats;
17107 		num_formats = ARRAY_SIZE(vlv_primary_formats);
17108 	} else if (INTEL_GEN(dev_priv) >= 4) {
17109 		/*
17110 		 * WaFP16GammaEnabling:ivb
17111 		 * "Workaround : When using the 64-bit format, the plane
17112 		 *  output on each color channel has one quarter amplitude.
17113 		 *  It can be brought up to full amplitude by using pipe
17114 		 *  gamma correction or pipe color space conversion to
17115 		 *  multiply the plane output by four."
17116 		 *
17117 		 * There is no dedicated plane gamma for the primary plane,
17118 		 * and using the pipe gamma/csc could conflict with other
17119 		 * planes, so we choose not to expose fp16 on IVB primary
17120 		 * planes. HSW primary planes no longer have this problem.
17121 		 */
17122 		if (IS_IVYBRIDGE(dev_priv)) {
17123 			formats = ivb_primary_formats;
17124 			num_formats = ARRAY_SIZE(ivb_primary_formats);
17125 		} else {
17126 			formats = i965_primary_formats;
17127 			num_formats = ARRAY_SIZE(i965_primary_formats);
17128 		}
17129 	} else {
17130 		formats = i8xx_primary_formats;
17131 		num_formats = ARRAY_SIZE(i8xx_primary_formats);
17132 	}
17133 
17134 	if (INTEL_GEN(dev_priv) >= 4)
17135 		plane_funcs = &i965_plane_funcs;
17136 	else
17137 		plane_funcs = &i8xx_plane_funcs;
17138 
17139 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
17140 		plane->min_cdclk = vlv_plane_min_cdclk;
17141 	else if (IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv))
17142 		plane->min_cdclk = hsw_plane_min_cdclk;
17143 	else if (IS_IVYBRIDGE(dev_priv))
17144 		plane->min_cdclk = ivb_plane_min_cdclk;
17145 	else
17146 		plane->min_cdclk = i9xx_plane_min_cdclk;
17147 
17148 	plane->max_stride = i9xx_plane_max_stride;
17149 	plane->update_plane = i9xx_update_plane;
17150 	plane->disable_plane = i9xx_disable_plane;
17151 	plane->get_hw_state = i9xx_plane_get_hw_state;
17152 	plane->check_plane = i9xx_plane_check;
17153 
17154 	if (INTEL_GEN(dev_priv) >= 5 || IS_G4X(dev_priv))
17155 		ret = drm_universal_plane_init(&dev_priv->drm, &plane->base,
17156 					       0, plane_funcs,
17157 					       formats, num_formats,
17158 					       i9xx_format_modifiers,
17159 					       DRM_PLANE_TYPE_PRIMARY,
17160 					       "primary %c", pipe_name(pipe));
17161 	else
17162 		ret = drm_universal_plane_init(&dev_priv->drm, &plane->base,
17163 					       0, plane_funcs,
17164 					       formats, num_formats,
17165 					       i9xx_format_modifiers,
17166 					       DRM_PLANE_TYPE_PRIMARY,
17167 					       "plane %c",
17168 					       plane_name(plane->i9xx_plane));
17169 	if (ret)
17170 		goto fail;
17171 
17172 	if (IS_CHERRYVIEW(dev_priv) && pipe == PIPE_B) {
17173 		supported_rotations =
17174 			DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180 |
17175 			DRM_MODE_REFLECT_X;
17176 	} else if (INTEL_GEN(dev_priv) >= 4) {
17177 		supported_rotations =
17178 			DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_180;
17179 	} else {
17180 		supported_rotations = DRM_MODE_ROTATE_0;
17181 	}
17182 
17183 	if (INTEL_GEN(dev_priv) >= 4)
17184 		drm_plane_create_rotation_property(&plane->base,
17185 						   DRM_MODE_ROTATE_0,
17186 						   supported_rotations);
17187 
17188 	zpos = 0;
17189 	drm_plane_create_zpos_immutable_property(&plane->base, zpos);
17190 
17191 	drm_plane_helper_add(&plane->base, &intel_plane_helper_funcs);
17192 
17193 	return plane;
17194 
17195 fail:
17196 	intel_plane_free(plane);
17197 
17198 	return ERR_PTR(ret);
17199 }
17200 
17201 static struct intel_plane *
17202 intel_cursor_plane_create(struct drm_i915_private *dev_priv,
17203 			  enum pipe pipe)
17204 {
17205 	struct intel_plane *cursor;
17206 	int ret, zpos;
17207 
17208 	cursor = intel_plane_alloc();
17209 	if (IS_ERR(cursor))
17210 		return cursor;
17211 
17212 	cursor->pipe = pipe;
17213 	cursor->i9xx_plane = (enum i9xx_plane_id) pipe;
17214 	cursor->id = PLANE_CURSOR;
17215 	cursor->frontbuffer_bit = INTEL_FRONTBUFFER(pipe, cursor->id);
17216 
17217 	if (IS_I845G(dev_priv) || IS_I865G(dev_priv)) {
17218 		cursor->max_stride = i845_cursor_max_stride;
17219 		cursor->update_plane = i845_update_cursor;
17220 		cursor->disable_plane = i845_disable_cursor;
17221 		cursor->get_hw_state = i845_cursor_get_hw_state;
17222 		cursor->check_plane = i845_check_cursor;
17223 	} else {
17224 		cursor->max_stride = i9xx_cursor_max_stride;
17225 		cursor->update_plane = i9xx_update_cursor;
17226 		cursor->disable_plane = i9xx_disable_cursor;
17227 		cursor->get_hw_state = i9xx_cursor_get_hw_state;
17228 		cursor->check_plane = i9xx_check_cursor;
17229 	}
17230 
17231 	cursor->cursor.base = ~0;
17232 	cursor->cursor.cntl = ~0;
17233 
17234 	if (IS_I845G(dev_priv) || IS_I865G(dev_priv) || HAS_CUR_FBC(dev_priv))
17235 		cursor->cursor.size = ~0;
17236 
17237 	ret = drm_universal_plane_init(&dev_priv->drm, &cursor->base,
17238 				       0, &intel_cursor_plane_funcs,
17239 				       intel_cursor_formats,
17240 				       ARRAY_SIZE(intel_cursor_formats),
17241 				       cursor_format_modifiers,
17242 				       DRM_PLANE_TYPE_CURSOR,
17243 				       "cursor %c", pipe_name(pipe));
17244 	if (ret)
17245 		goto fail;
17246 
17247 	if (INTEL_GEN(dev_priv) >= 4)
17248 		drm_plane_create_rotation_property(&cursor->base,
17249 						   DRM_MODE_ROTATE_0,
17250 						   DRM_MODE_ROTATE_0 |
17251 						   DRM_MODE_ROTATE_180);
17252 
17253 	zpos = RUNTIME_INFO(dev_priv)->num_sprites[pipe] + 1;
17254 	drm_plane_create_zpos_immutable_property(&cursor->base, zpos);
17255 
17256 	if (INTEL_GEN(dev_priv) >= 12)
17257 		drm_plane_enable_fb_damage_clips(&cursor->base);
17258 
17259 	drm_plane_helper_add(&cursor->base, &intel_plane_helper_funcs);
17260 
17261 	return cursor;
17262 
17263 fail:
17264 	intel_plane_free(cursor);
17265 
17266 	return ERR_PTR(ret);
17267 }
17268 
17269 #define INTEL_CRTC_FUNCS \
17270 	.gamma_set = drm_atomic_helper_legacy_gamma_set, \
17271 	.set_config = drm_atomic_helper_set_config, \
17272 	.destroy = intel_crtc_destroy, \
17273 	.page_flip = drm_atomic_helper_page_flip, \
17274 	.atomic_duplicate_state = intel_crtc_duplicate_state, \
17275 	.atomic_destroy_state = intel_crtc_destroy_state, \
17276 	.set_crc_source = intel_crtc_set_crc_source, \
17277 	.verify_crc_source = intel_crtc_verify_crc_source, \
17278 	.get_crc_sources = intel_crtc_get_crc_sources
17279 
17280 static const struct drm_crtc_funcs bdw_crtc_funcs = {
17281 	INTEL_CRTC_FUNCS,
17282 
17283 	.get_vblank_counter = g4x_get_vblank_counter,
17284 	.enable_vblank = bdw_enable_vblank,
17285 	.disable_vblank = bdw_disable_vblank,
17286 	.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
17287 };
17288 
17289 static const struct drm_crtc_funcs ilk_crtc_funcs = {
17290 	INTEL_CRTC_FUNCS,
17291 
17292 	.get_vblank_counter = g4x_get_vblank_counter,
17293 	.enable_vblank = ilk_enable_vblank,
17294 	.disable_vblank = ilk_disable_vblank,
17295 	.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
17296 };
17297 
17298 static const struct drm_crtc_funcs g4x_crtc_funcs = {
17299 	INTEL_CRTC_FUNCS,
17300 
17301 	.get_vblank_counter = g4x_get_vblank_counter,
17302 	.enable_vblank = i965_enable_vblank,
17303 	.disable_vblank = i965_disable_vblank,
17304 	.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
17305 };
17306 
17307 static const struct drm_crtc_funcs i965_crtc_funcs = {
17308 	INTEL_CRTC_FUNCS,
17309 
17310 	.get_vblank_counter = i915_get_vblank_counter,
17311 	.enable_vblank = i965_enable_vblank,
17312 	.disable_vblank = i965_disable_vblank,
17313 	.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
17314 };
17315 
17316 static const struct drm_crtc_funcs i915gm_crtc_funcs = {
17317 	INTEL_CRTC_FUNCS,
17318 
17319 	.get_vblank_counter = i915_get_vblank_counter,
17320 	.enable_vblank = i915gm_enable_vblank,
17321 	.disable_vblank = i915gm_disable_vblank,
17322 	.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
17323 };
17324 
17325 static const struct drm_crtc_funcs i915_crtc_funcs = {
17326 	INTEL_CRTC_FUNCS,
17327 
17328 	.get_vblank_counter = i915_get_vblank_counter,
17329 	.enable_vblank = i8xx_enable_vblank,
17330 	.disable_vblank = i8xx_disable_vblank,
17331 	.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
17332 };
17333 
17334 static const struct drm_crtc_funcs i8xx_crtc_funcs = {
17335 	INTEL_CRTC_FUNCS,
17336 
17337 	/* no hw vblank counter */
17338 	.enable_vblank = i8xx_enable_vblank,
17339 	.disable_vblank = i8xx_disable_vblank,
17340 	.get_vblank_timestamp = intel_crtc_get_vblank_timestamp,
17341 };
17342 
17343 static struct intel_crtc *intel_crtc_alloc(void)
17344 {
17345 	struct intel_crtc_state *crtc_state;
17346 	struct intel_crtc *crtc;
17347 
17348 	crtc = kzalloc(sizeof(*crtc), GFP_KERNEL);
17349 	if (!crtc)
17350 		return ERR_PTR(-ENOMEM);
17351 
17352 	crtc_state = intel_crtc_state_alloc(crtc);
17353 	if (!crtc_state) {
17354 		kfree(crtc);
17355 		return ERR_PTR(-ENOMEM);
17356 	}
17357 
17358 	crtc->base.state = &crtc_state->uapi;
17359 	crtc->config = crtc_state;
17360 
17361 	return crtc;
17362 }
17363 
17364 static void intel_crtc_free(struct intel_crtc *crtc)
17365 {
17366 	intel_crtc_destroy_state(&crtc->base, crtc->base.state);
17367 	kfree(crtc);
17368 }
17369 
17370 static void intel_plane_possible_crtcs_init(struct drm_i915_private *dev_priv)
17371 {
17372 	struct intel_plane *plane;
17373 
17374 	for_each_intel_plane(&dev_priv->drm, plane) {
17375 		struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv,
17376 								  plane->pipe);
17377 
17378 		plane->base.possible_crtcs = drm_crtc_mask(&crtc->base);
17379 	}
17380 }
17381 
17382 static int intel_crtc_init(struct drm_i915_private *dev_priv, enum pipe pipe)
17383 {
17384 	struct intel_plane *primary, *cursor;
17385 	const struct drm_crtc_funcs *funcs;
17386 	struct intel_crtc *crtc;
17387 	int sprite, ret;
17388 
17389 	crtc = intel_crtc_alloc();
17390 	if (IS_ERR(crtc))
17391 		return PTR_ERR(crtc);
17392 
17393 	crtc->pipe = pipe;
17394 	crtc->num_scalers = RUNTIME_INFO(dev_priv)->num_scalers[pipe];
17395 
17396 	primary = intel_primary_plane_create(dev_priv, pipe);
17397 	if (IS_ERR(primary)) {
17398 		ret = PTR_ERR(primary);
17399 		goto fail;
17400 	}
17401 	crtc->plane_ids_mask |= BIT(primary->id);
17402 
17403 	for_each_sprite(dev_priv, pipe, sprite) {
17404 		struct intel_plane *plane;
17405 
17406 		plane = intel_sprite_plane_create(dev_priv, pipe, sprite);
17407 		if (IS_ERR(plane)) {
17408 			ret = PTR_ERR(plane);
17409 			goto fail;
17410 		}
17411 		crtc->plane_ids_mask |= BIT(plane->id);
17412 	}
17413 
17414 	cursor = intel_cursor_plane_create(dev_priv, pipe);
17415 	if (IS_ERR(cursor)) {
17416 		ret = PTR_ERR(cursor);
17417 		goto fail;
17418 	}
17419 	crtc->plane_ids_mask |= BIT(cursor->id);
17420 
17421 	if (HAS_GMCH(dev_priv)) {
17422 		if (IS_CHERRYVIEW(dev_priv) ||
17423 		    IS_VALLEYVIEW(dev_priv) || IS_G4X(dev_priv))
17424 			funcs = &g4x_crtc_funcs;
17425 		else if (IS_GEN(dev_priv, 4))
17426 			funcs = &i965_crtc_funcs;
17427 		else if (IS_I945GM(dev_priv) || IS_I915GM(dev_priv))
17428 			funcs = &i915gm_crtc_funcs;
17429 		else if (IS_GEN(dev_priv, 3))
17430 			funcs = &i915_crtc_funcs;
17431 		else
17432 			funcs = &i8xx_crtc_funcs;
17433 	} else {
17434 		if (INTEL_GEN(dev_priv) >= 8)
17435 			funcs = &bdw_crtc_funcs;
17436 		else
17437 			funcs = &ilk_crtc_funcs;
17438 	}
17439 
17440 	ret = drm_crtc_init_with_planes(&dev_priv->drm, &crtc->base,
17441 					&primary->base, &cursor->base,
17442 					funcs, "pipe %c", pipe_name(pipe));
17443 	if (ret)
17444 		goto fail;
17445 
17446 	BUG_ON(pipe >= ARRAY_SIZE(dev_priv->pipe_to_crtc_mapping) ||
17447 	       dev_priv->pipe_to_crtc_mapping[pipe] != NULL);
17448 	dev_priv->pipe_to_crtc_mapping[pipe] = crtc;
17449 
17450 	if (INTEL_GEN(dev_priv) < 9) {
17451 		enum i9xx_plane_id i9xx_plane = primary->i9xx_plane;
17452 
17453 		BUG_ON(i9xx_plane >= ARRAY_SIZE(dev_priv->plane_to_crtc_mapping) ||
17454 		       dev_priv->plane_to_crtc_mapping[i9xx_plane] != NULL);
17455 		dev_priv->plane_to_crtc_mapping[i9xx_plane] = crtc;
17456 	}
17457 
17458 	if (INTEL_GEN(dev_priv) >= 10)
17459 		drm_crtc_create_scaling_filter_property(&crtc->base,
17460 						BIT(DRM_SCALING_FILTER_DEFAULT) |
17461 						BIT(DRM_SCALING_FILTER_NEAREST_NEIGHBOR));
17462 
17463 	intel_color_init(crtc);
17464 
17465 	intel_crtc_crc_init(crtc);
17466 
17467 	drm_WARN_ON(&dev_priv->drm, drm_crtc_index(&crtc->base) != crtc->pipe);
17468 
17469 	return 0;
17470 
17471 fail:
17472 	intel_crtc_free(crtc);
17473 
17474 	return ret;
17475 }
17476 
17477 int intel_get_pipe_from_crtc_id_ioctl(struct drm_device *dev, void *data,
17478 				      struct drm_file *file)
17479 {
17480 	struct drm_i915_get_pipe_from_crtc_id *pipe_from_crtc_id = data;
17481 	struct drm_crtc *drmmode_crtc;
17482 	struct intel_crtc *crtc;
17483 
17484 	drmmode_crtc = drm_crtc_find(dev, file, pipe_from_crtc_id->crtc_id);
17485 	if (!drmmode_crtc)
17486 		return -ENOENT;
17487 
17488 	crtc = to_intel_crtc(drmmode_crtc);
17489 	pipe_from_crtc_id->pipe = crtc->pipe;
17490 
17491 	return 0;
17492 }
17493 
17494 static u32 intel_encoder_possible_clones(struct intel_encoder *encoder)
17495 {
17496 	struct drm_device *dev = encoder->base.dev;
17497 	struct intel_encoder *source_encoder;
17498 	u32 possible_clones = 0;
17499 
17500 	for_each_intel_encoder(dev, source_encoder) {
17501 		if (encoders_cloneable(encoder, source_encoder))
17502 			possible_clones |= drm_encoder_mask(&source_encoder->base);
17503 	}
17504 
17505 	return possible_clones;
17506 }
17507 
17508 static u32 intel_encoder_possible_crtcs(struct intel_encoder *encoder)
17509 {
17510 	struct drm_device *dev = encoder->base.dev;
17511 	struct intel_crtc *crtc;
17512 	u32 possible_crtcs = 0;
17513 
17514 	for_each_intel_crtc(dev, crtc) {
17515 		if (encoder->pipe_mask & BIT(crtc->pipe))
17516 			possible_crtcs |= drm_crtc_mask(&crtc->base);
17517 	}
17518 
17519 	return possible_crtcs;
17520 }
17521 
17522 static bool ilk_has_edp_a(struct drm_i915_private *dev_priv)
17523 {
17524 	if (!IS_MOBILE(dev_priv))
17525 		return false;
17526 
17527 	if ((intel_de_read(dev_priv, DP_A) & DP_DETECTED) == 0)
17528 		return false;
17529 
17530 	if (IS_GEN(dev_priv, 5) && (intel_de_read(dev_priv, FUSE_STRAP) & ILK_eDP_A_DISABLE))
17531 		return false;
17532 
17533 	return true;
17534 }
17535 
17536 static bool intel_ddi_crt_present(struct drm_i915_private *dev_priv)
17537 {
17538 	if (INTEL_GEN(dev_priv) >= 9)
17539 		return false;
17540 
17541 	if (IS_HSW_ULT(dev_priv) || IS_BDW_ULT(dev_priv))
17542 		return false;
17543 
17544 	if (HAS_PCH_LPT_H(dev_priv) &&
17545 	    intel_de_read(dev_priv, SFUSE_STRAP) & SFUSE_STRAP_CRT_DISABLED)
17546 		return false;
17547 
17548 	/* DDI E can't be used if DDI A requires 4 lanes */
17549 	if (intel_de_read(dev_priv, DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES)
17550 		return false;
17551 
17552 	if (!dev_priv->vbt.int_crt_support)
17553 		return false;
17554 
17555 	return true;
17556 }
17557 
17558 void intel_pps_unlock_regs_wa(struct drm_i915_private *dev_priv)
17559 {
17560 	int pps_num;
17561 	int pps_idx;
17562 
17563 	if (HAS_DDI(dev_priv))
17564 		return;
17565 	/*
17566 	 * This w/a is needed at least on CPT/PPT, but to be sure apply it
17567 	 * everywhere where registers can be write protected.
17568 	 */
17569 	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
17570 		pps_num = 2;
17571 	else
17572 		pps_num = 1;
17573 
17574 	for (pps_idx = 0; pps_idx < pps_num; pps_idx++) {
17575 		u32 val = intel_de_read(dev_priv, PP_CONTROL(pps_idx));
17576 
17577 		val = (val & ~PANEL_UNLOCK_MASK) | PANEL_UNLOCK_REGS;
17578 		intel_de_write(dev_priv, PP_CONTROL(pps_idx), val);
17579 	}
17580 }
17581 
17582 static void intel_pps_init(struct drm_i915_private *dev_priv)
17583 {
17584 	if (HAS_PCH_SPLIT(dev_priv) || IS_GEN9_LP(dev_priv))
17585 		dev_priv->pps_mmio_base = PCH_PPS_BASE;
17586 	else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
17587 		dev_priv->pps_mmio_base = VLV_PPS_BASE;
17588 	else
17589 		dev_priv->pps_mmio_base = PPS_BASE;
17590 
17591 	intel_pps_unlock_regs_wa(dev_priv);
17592 }
17593 
17594 static void intel_setup_outputs(struct drm_i915_private *dev_priv)
17595 {
17596 	struct intel_encoder *encoder;
17597 	bool dpd_is_edp = false;
17598 
17599 	intel_pps_init(dev_priv);
17600 
17601 	if (!HAS_DISPLAY(dev_priv))
17602 		return;
17603 
17604 	if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv)) {
17605 		intel_ddi_init(dev_priv, PORT_A);
17606 		intel_ddi_init(dev_priv, PORT_B);
17607 		intel_ddi_init(dev_priv, PORT_TC1);
17608 		intel_ddi_init(dev_priv, PORT_TC2);
17609 	} else if (INTEL_GEN(dev_priv) >= 12) {
17610 		intel_ddi_init(dev_priv, PORT_A);
17611 		intel_ddi_init(dev_priv, PORT_B);
17612 		intel_ddi_init(dev_priv, PORT_TC1);
17613 		intel_ddi_init(dev_priv, PORT_TC2);
17614 		intel_ddi_init(dev_priv, PORT_TC3);
17615 		intel_ddi_init(dev_priv, PORT_TC4);
17616 		intel_ddi_init(dev_priv, PORT_TC5);
17617 		intel_ddi_init(dev_priv, PORT_TC6);
17618 		icl_dsi_init(dev_priv);
17619 	} else if (IS_JSL_EHL(dev_priv)) {
17620 		intel_ddi_init(dev_priv, PORT_A);
17621 		intel_ddi_init(dev_priv, PORT_B);
17622 		intel_ddi_init(dev_priv, PORT_C);
17623 		intel_ddi_init(dev_priv, PORT_D);
17624 		icl_dsi_init(dev_priv);
17625 	} else if (IS_GEN(dev_priv, 11)) {
17626 		intel_ddi_init(dev_priv, PORT_A);
17627 		intel_ddi_init(dev_priv, PORT_B);
17628 		intel_ddi_init(dev_priv, PORT_C);
17629 		intel_ddi_init(dev_priv, PORT_D);
17630 		intel_ddi_init(dev_priv, PORT_E);
17631 		/*
17632 		 * On some ICL SKUs port F is not present. No strap bits for
17633 		 * this, so rely on VBT.
17634 		 * Work around broken VBTs on SKUs known to have no port F.
17635 		 */
17636 		if (IS_ICL_WITH_PORT_F(dev_priv) &&
17637 		    intel_bios_is_port_present(dev_priv, PORT_F))
17638 			intel_ddi_init(dev_priv, PORT_F);
17639 
17640 		icl_dsi_init(dev_priv);
17641 	} else if (IS_GEN9_LP(dev_priv)) {
17642 		/*
17643 		 * FIXME: Broxton doesn't support port detection via the
17644 		 * DDI_BUF_CTL_A or SFUSE_STRAP registers, find another way to
17645 		 * detect the ports.
17646 		 */
17647 		intel_ddi_init(dev_priv, PORT_A);
17648 		intel_ddi_init(dev_priv, PORT_B);
17649 		intel_ddi_init(dev_priv, PORT_C);
17650 
17651 		vlv_dsi_init(dev_priv);
17652 	} else if (HAS_DDI(dev_priv)) {
17653 		int found;
17654 
17655 		if (intel_ddi_crt_present(dev_priv))
17656 			intel_crt_init(dev_priv);
17657 
17658 		/*
17659 		 * Haswell uses DDI functions to detect digital outputs.
17660 		 * On SKL pre-D0 the strap isn't connected, so we assume
17661 		 * it's there.
17662 		 */
17663 		found = intel_de_read(dev_priv, DDI_BUF_CTL(PORT_A)) & DDI_INIT_DISPLAY_DETECTED;
17664 		/* WaIgnoreDDIAStrap: skl */
17665 		if (found || IS_GEN9_BC(dev_priv))
17666 			intel_ddi_init(dev_priv, PORT_A);
17667 
17668 		/* DDI B, C, D, and F detection is indicated by the SFUSE_STRAP
17669 		 * register */
17670 		found = intel_de_read(dev_priv, SFUSE_STRAP);
17671 
17672 		if (found & SFUSE_STRAP_DDIB_DETECTED)
17673 			intel_ddi_init(dev_priv, PORT_B);
17674 		if (found & SFUSE_STRAP_DDIC_DETECTED)
17675 			intel_ddi_init(dev_priv, PORT_C);
17676 		if (found & SFUSE_STRAP_DDID_DETECTED)
17677 			intel_ddi_init(dev_priv, PORT_D);
17678 		if (found & SFUSE_STRAP_DDIF_DETECTED)
17679 			intel_ddi_init(dev_priv, PORT_F);
17680 		/*
17681 		 * On SKL we don't have a way to detect DDI-E so we rely on VBT.
17682 		 */
17683 		if (IS_GEN9_BC(dev_priv) &&
17684 		    intel_bios_is_port_present(dev_priv, PORT_E))
17685 			intel_ddi_init(dev_priv, PORT_E);
17686 
17687 	} else if (HAS_PCH_SPLIT(dev_priv)) {
17688 		int found;
17689 
17690 		/*
17691 		 * intel_edp_init_connector() depends on this completing first,
17692 		 * to prevent the registration of both eDP and LVDS and the
17693 		 * incorrect sharing of the PPS.
17694 		 */
17695 		intel_lvds_init(dev_priv);
17696 		intel_crt_init(dev_priv);
17697 
17698 		dpd_is_edp = intel_dp_is_port_edp(dev_priv, PORT_D);
17699 
17700 		if (ilk_has_edp_a(dev_priv))
17701 			intel_dp_init(dev_priv, DP_A, PORT_A);
17702 
17703 		if (intel_de_read(dev_priv, PCH_HDMIB) & SDVO_DETECTED) {
17704 			/* PCH SDVOB multiplex with HDMIB */
17705 			found = intel_sdvo_init(dev_priv, PCH_SDVOB, PORT_B);
17706 			if (!found)
17707 				intel_hdmi_init(dev_priv, PCH_HDMIB, PORT_B);
17708 			if (!found && (intel_de_read(dev_priv, PCH_DP_B) & DP_DETECTED))
17709 				intel_dp_init(dev_priv, PCH_DP_B, PORT_B);
17710 		}
17711 
17712 		if (intel_de_read(dev_priv, PCH_HDMIC) & SDVO_DETECTED)
17713 			intel_hdmi_init(dev_priv, PCH_HDMIC, PORT_C);
17714 
17715 		if (!dpd_is_edp && intel_de_read(dev_priv, PCH_HDMID) & SDVO_DETECTED)
17716 			intel_hdmi_init(dev_priv, PCH_HDMID, PORT_D);
17717 
17718 		if (intel_de_read(dev_priv, PCH_DP_C) & DP_DETECTED)
17719 			intel_dp_init(dev_priv, PCH_DP_C, PORT_C);
17720 
17721 		if (intel_de_read(dev_priv, PCH_DP_D) & DP_DETECTED)
17722 			intel_dp_init(dev_priv, PCH_DP_D, PORT_D);
17723 	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
17724 		bool has_edp, has_port;
17725 
17726 		if (IS_VALLEYVIEW(dev_priv) && dev_priv->vbt.int_crt_support)
17727 			intel_crt_init(dev_priv);
17728 
17729 		/*
17730 		 * The DP_DETECTED bit is the latched state of the DDC
17731 		 * SDA pin at boot. However since eDP doesn't require DDC
17732 		 * (no way to plug in a DP->HDMI dongle) the DDC pins for
17733 		 * eDP ports may have been muxed to an alternate function.
17734 		 * Thus we can't rely on the DP_DETECTED bit alone to detect
17735 		 * eDP ports. Consult the VBT as well as DP_DETECTED to
17736 		 * detect eDP ports.
17737 		 *
17738 		 * Sadly the straps seem to be missing sometimes even for HDMI
17739 		 * ports (eg. on Voyo V3 - CHT x7-Z8700), so check both strap
17740 		 * and VBT for the presence of the port. Additionally we can't
17741 		 * trust the port type the VBT declares as we've seen at least
17742 		 * HDMI ports that the VBT claim are DP or eDP.
17743 		 */
17744 		has_edp = intel_dp_is_port_edp(dev_priv, PORT_B);
17745 		has_port = intel_bios_is_port_present(dev_priv, PORT_B);
17746 		if (intel_de_read(dev_priv, VLV_DP_B) & DP_DETECTED || has_port)
17747 			has_edp &= intel_dp_init(dev_priv, VLV_DP_B, PORT_B);
17748 		if ((intel_de_read(dev_priv, VLV_HDMIB) & SDVO_DETECTED || has_port) && !has_edp)
17749 			intel_hdmi_init(dev_priv, VLV_HDMIB, PORT_B);
17750 
17751 		has_edp = intel_dp_is_port_edp(dev_priv, PORT_C);
17752 		has_port = intel_bios_is_port_present(dev_priv, PORT_C);
17753 		if (intel_de_read(dev_priv, VLV_DP_C) & DP_DETECTED || has_port)
17754 			has_edp &= intel_dp_init(dev_priv, VLV_DP_C, PORT_C);
17755 		if ((intel_de_read(dev_priv, VLV_HDMIC) & SDVO_DETECTED || has_port) && !has_edp)
17756 			intel_hdmi_init(dev_priv, VLV_HDMIC, PORT_C);
17757 
17758 		if (IS_CHERRYVIEW(dev_priv)) {
17759 			/*
17760 			 * eDP not supported on port D,
17761 			 * so no need to worry about it
17762 			 */
17763 			has_port = intel_bios_is_port_present(dev_priv, PORT_D);
17764 			if (intel_de_read(dev_priv, CHV_DP_D) & DP_DETECTED || has_port)
17765 				intel_dp_init(dev_priv, CHV_DP_D, PORT_D);
17766 			if (intel_de_read(dev_priv, CHV_HDMID) & SDVO_DETECTED || has_port)
17767 				intel_hdmi_init(dev_priv, CHV_HDMID, PORT_D);
17768 		}
17769 
17770 		vlv_dsi_init(dev_priv);
17771 	} else if (IS_PINEVIEW(dev_priv)) {
17772 		intel_lvds_init(dev_priv);
17773 		intel_crt_init(dev_priv);
17774 	} else if (IS_GEN_RANGE(dev_priv, 3, 4)) {
17775 		bool found = false;
17776 
17777 		if (IS_MOBILE(dev_priv))
17778 			intel_lvds_init(dev_priv);
17779 
17780 		intel_crt_init(dev_priv);
17781 
17782 		if (intel_de_read(dev_priv, GEN3_SDVOB) & SDVO_DETECTED) {
17783 			drm_dbg_kms(&dev_priv->drm, "probing SDVOB\n");
17784 			found = intel_sdvo_init(dev_priv, GEN3_SDVOB, PORT_B);
17785 			if (!found && IS_G4X(dev_priv)) {
17786 				drm_dbg_kms(&dev_priv->drm,
17787 					    "probing HDMI on SDVOB\n");
17788 				intel_hdmi_init(dev_priv, GEN4_HDMIB, PORT_B);
17789 			}
17790 
17791 			if (!found && IS_G4X(dev_priv))
17792 				intel_dp_init(dev_priv, DP_B, PORT_B);
17793 		}
17794 
17795 		/* Before G4X SDVOC doesn't have its own detect register */
17796 
17797 		if (intel_de_read(dev_priv, GEN3_SDVOB) & SDVO_DETECTED) {
17798 			drm_dbg_kms(&dev_priv->drm, "probing SDVOC\n");
17799 			found = intel_sdvo_init(dev_priv, GEN3_SDVOC, PORT_C);
17800 		}
17801 
17802 		if (!found && (intel_de_read(dev_priv, GEN3_SDVOC) & SDVO_DETECTED)) {
17803 
17804 			if (IS_G4X(dev_priv)) {
17805 				drm_dbg_kms(&dev_priv->drm,
17806 					    "probing HDMI on SDVOC\n");
17807 				intel_hdmi_init(dev_priv, GEN4_HDMIC, PORT_C);
17808 			}
17809 			if (IS_G4X(dev_priv))
17810 				intel_dp_init(dev_priv, DP_C, PORT_C);
17811 		}
17812 
17813 		if (IS_G4X(dev_priv) && (intel_de_read(dev_priv, DP_D) & DP_DETECTED))
17814 			intel_dp_init(dev_priv, DP_D, PORT_D);
17815 
17816 		if (SUPPORTS_TV(dev_priv))
17817 			intel_tv_init(dev_priv);
17818 	} else if (IS_GEN(dev_priv, 2)) {
17819 		if (IS_I85X(dev_priv))
17820 			intel_lvds_init(dev_priv);
17821 
17822 		intel_crt_init(dev_priv);
17823 		intel_dvo_init(dev_priv);
17824 	}
17825 
17826 	intel_psr_init(dev_priv);
17827 
17828 	for_each_intel_encoder(&dev_priv->drm, encoder) {
17829 		encoder->base.possible_crtcs =
17830 			intel_encoder_possible_crtcs(encoder);
17831 		encoder->base.possible_clones =
17832 			intel_encoder_possible_clones(encoder);
17833 	}
17834 
17835 	intel_init_pch_refclk(dev_priv);
17836 
17837 	drm_helper_move_panel_connectors_to_head(&dev_priv->drm);
17838 }
17839 
17840 static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
17841 {
17842 	struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
17843 
17844 	drm_framebuffer_cleanup(fb);
17845 	intel_frontbuffer_put(intel_fb->frontbuffer);
17846 
17847 	kfree(intel_fb);
17848 }
17849 
17850 static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb,
17851 						struct drm_file *file,
17852 						unsigned int *handle)
17853 {
17854 	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
17855 	struct drm_i915_private *i915 = to_i915(obj->base.dev);
17856 
17857 	if (obj->userptr.mm) {
17858 		drm_dbg(&i915->drm,
17859 			"attempting to use a userptr for a framebuffer, denied\n");
17860 		return -EINVAL;
17861 	}
17862 
17863 	return drm_gem_handle_create(file, &obj->base, handle);
17864 }
17865 
17866 static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb,
17867 					struct drm_file *file,
17868 					unsigned flags, unsigned color,
17869 					struct drm_clip_rect *clips,
17870 					unsigned num_clips)
17871 {
17872 	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
17873 
17874 	i915_gem_object_flush_if_display(obj);
17875 	intel_frontbuffer_flush(to_intel_frontbuffer(fb), ORIGIN_DIRTYFB);
17876 
17877 	return 0;
17878 }
17879 
17880 static const struct drm_framebuffer_funcs intel_fb_funcs = {
17881 	.destroy = intel_user_framebuffer_destroy,
17882 	.create_handle = intel_user_framebuffer_create_handle,
17883 	.dirty = intel_user_framebuffer_dirty,
17884 };
17885 
17886 static int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
17887 				  struct drm_i915_gem_object *obj,
17888 				  struct drm_mode_fb_cmd2 *mode_cmd)
17889 {
17890 	struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
17891 	struct drm_framebuffer *fb = &intel_fb->base;
17892 	u32 max_stride;
17893 	unsigned int tiling, stride;
17894 	int ret = -EINVAL;
17895 	int i;
17896 
17897 	intel_fb->frontbuffer = intel_frontbuffer_get(obj);
17898 	if (!intel_fb->frontbuffer)
17899 		return -ENOMEM;
17900 
17901 	i915_gem_object_lock(obj, NULL);
17902 	tiling = i915_gem_object_get_tiling(obj);
17903 	stride = i915_gem_object_get_stride(obj);
17904 	i915_gem_object_unlock(obj);
17905 
17906 	if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) {
17907 		/*
17908 		 * If there's a fence, enforce that
17909 		 * the fb modifier and tiling mode match.
17910 		 */
17911 		if (tiling != I915_TILING_NONE &&
17912 		    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
17913 			drm_dbg_kms(&dev_priv->drm,
17914 				    "tiling_mode doesn't match fb modifier\n");
17915 			goto err;
17916 		}
17917 	} else {
17918 		if (tiling == I915_TILING_X) {
17919 			mode_cmd->modifier[0] = I915_FORMAT_MOD_X_TILED;
17920 		} else if (tiling == I915_TILING_Y) {
17921 			drm_dbg_kms(&dev_priv->drm,
17922 				    "No Y tiling for legacy addfb\n");
17923 			goto err;
17924 		}
17925 	}
17926 
17927 	if (!drm_any_plane_has_format(&dev_priv->drm,
17928 				      mode_cmd->pixel_format,
17929 				      mode_cmd->modifier[0])) {
17930 		struct drm_format_name_buf format_name;
17931 
17932 		drm_dbg_kms(&dev_priv->drm,
17933 			    "unsupported pixel format %s / modifier 0x%llx\n",
17934 			    drm_get_format_name(mode_cmd->pixel_format,
17935 						&format_name),
17936 			    mode_cmd->modifier[0]);
17937 		goto err;
17938 	}
17939 
17940 	/*
17941 	 * gen2/3 display engine uses the fence if present,
17942 	 * so the tiling mode must match the fb modifier exactly.
17943 	 */
17944 	if (INTEL_GEN(dev_priv) < 4 &&
17945 	    tiling != intel_fb_modifier_to_tiling(mode_cmd->modifier[0])) {
17946 		drm_dbg_kms(&dev_priv->drm,
17947 			    "tiling_mode must match fb modifier exactly on gen2/3\n");
17948 		goto err;
17949 	}
17950 
17951 	max_stride = intel_fb_max_stride(dev_priv, mode_cmd->pixel_format,
17952 					 mode_cmd->modifier[0]);
17953 	if (mode_cmd->pitches[0] > max_stride) {
17954 		drm_dbg_kms(&dev_priv->drm,
17955 			    "%s pitch (%u) must be at most %d\n",
17956 			    mode_cmd->modifier[0] != DRM_FORMAT_MOD_LINEAR ?
17957 			    "tiled" : "linear",
17958 			    mode_cmd->pitches[0], max_stride);
17959 		goto err;
17960 	}
17961 
17962 	/*
17963 	 * If there's a fence, enforce that
17964 	 * the fb pitch and fence stride match.
17965 	 */
17966 	if (tiling != I915_TILING_NONE && mode_cmd->pitches[0] != stride) {
17967 		drm_dbg_kms(&dev_priv->drm,
17968 			    "pitch (%d) must match tiling stride (%d)\n",
17969 			    mode_cmd->pitches[0], stride);
17970 		goto err;
17971 	}
17972 
17973 	/* FIXME need to adjust LINOFF/TILEOFF accordingly. */
17974 	if (mode_cmd->offsets[0] != 0) {
17975 		drm_dbg_kms(&dev_priv->drm,
17976 			    "plane 0 offset (0x%08x) must be 0\n",
17977 			    mode_cmd->offsets[0]);
17978 		goto err;
17979 	}
17980 
17981 	drm_helper_mode_fill_fb_struct(&dev_priv->drm, fb, mode_cmd);
17982 
17983 	for (i = 0; i < fb->format->num_planes; i++) {
17984 		u32 stride_alignment;
17985 
17986 		if (mode_cmd->handles[i] != mode_cmd->handles[0]) {
17987 			drm_dbg_kms(&dev_priv->drm, "bad plane %d handle\n",
17988 				    i);
17989 			goto err;
17990 		}
17991 
17992 		stride_alignment = intel_fb_stride_alignment(fb, i);
17993 		if (fb->pitches[i] & (stride_alignment - 1)) {
17994 			drm_dbg_kms(&dev_priv->drm,
17995 				    "plane %d pitch (%d) must be at least %u byte aligned\n",
17996 				    i, fb->pitches[i], stride_alignment);
17997 			goto err;
17998 		}
17999 
18000 		if (is_gen12_ccs_plane(fb, i)) {
18001 			int ccs_aux_stride = gen12_ccs_aux_stride(fb, i);
18002 
18003 			if (fb->pitches[i] != ccs_aux_stride) {
18004 				drm_dbg_kms(&dev_priv->drm,
18005 					    "ccs aux plane %d pitch (%d) must be %d\n",
18006 					    i,
18007 					    fb->pitches[i], ccs_aux_stride);
18008 				goto err;
18009 			}
18010 		}
18011 
18012 		fb->obj[i] = &obj->base;
18013 	}
18014 
18015 	ret = intel_fill_fb_info(dev_priv, fb);
18016 	if (ret)
18017 		goto err;
18018 
18019 	ret = drm_framebuffer_init(&dev_priv->drm, fb, &intel_fb_funcs);
18020 	if (ret) {
18021 		drm_err(&dev_priv->drm, "framebuffer init failed %d\n", ret);
18022 		goto err;
18023 	}
18024 
18025 	return 0;
18026 
18027 err:
18028 	intel_frontbuffer_put(intel_fb->frontbuffer);
18029 	return ret;
18030 }
18031 
18032 static struct drm_framebuffer *
18033 intel_user_framebuffer_create(struct drm_device *dev,
18034 			      struct drm_file *filp,
18035 			      const struct drm_mode_fb_cmd2 *user_mode_cmd)
18036 {
18037 	struct drm_framebuffer *fb;
18038 	struct drm_i915_gem_object *obj;
18039 	struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
18040 
18041 	obj = i915_gem_object_lookup(filp, mode_cmd.handles[0]);
18042 	if (!obj)
18043 		return ERR_PTR(-ENOENT);
18044 
18045 	fb = intel_framebuffer_create(obj, &mode_cmd);
18046 	i915_gem_object_put(obj);
18047 
18048 	return fb;
18049 }
18050 
18051 static enum drm_mode_status
18052 intel_mode_valid(struct drm_device *dev,
18053 		 const struct drm_display_mode *mode)
18054 {
18055 	struct drm_i915_private *dev_priv = to_i915(dev);
18056 	int hdisplay_max, htotal_max;
18057 	int vdisplay_max, vtotal_max;
18058 
18059 	/*
18060 	 * Can't reject DBLSCAN here because Xorg ddxen can add piles
18061 	 * of DBLSCAN modes to the output's mode list when they detect
18062 	 * the scaling mode property on the connector. And they don't
18063 	 * ask the kernel to validate those modes in any way until
18064 	 * modeset time at which point the client gets a protocol error.
18065 	 * So in order to not upset those clients we silently ignore the
18066 	 * DBLSCAN flag on such connectors. For other connectors we will
18067 	 * reject modes with the DBLSCAN flag in encoder->compute_config().
18068 	 * And we always reject DBLSCAN modes in connector->mode_valid()
18069 	 * as we never want such modes on the connector's mode list.
18070 	 */
18071 
18072 	if (mode->vscan > 1)
18073 		return MODE_NO_VSCAN;
18074 
18075 	if (mode->flags & DRM_MODE_FLAG_HSKEW)
18076 		return MODE_H_ILLEGAL;
18077 
18078 	if (mode->flags & (DRM_MODE_FLAG_CSYNC |
18079 			   DRM_MODE_FLAG_NCSYNC |
18080 			   DRM_MODE_FLAG_PCSYNC))
18081 		return MODE_HSYNC;
18082 
18083 	if (mode->flags & (DRM_MODE_FLAG_BCAST |
18084 			   DRM_MODE_FLAG_PIXMUX |
18085 			   DRM_MODE_FLAG_CLKDIV2))
18086 		return MODE_BAD;
18087 
18088 	/* Transcoder timing limits */
18089 	if (INTEL_GEN(dev_priv) >= 11) {
18090 		hdisplay_max = 16384;
18091 		vdisplay_max = 8192;
18092 		htotal_max = 16384;
18093 		vtotal_max = 8192;
18094 	} else if (INTEL_GEN(dev_priv) >= 9 ||
18095 		   IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) {
18096 		hdisplay_max = 8192; /* FDI max 4096 handled elsewhere */
18097 		vdisplay_max = 4096;
18098 		htotal_max = 8192;
18099 		vtotal_max = 8192;
18100 	} else if (INTEL_GEN(dev_priv) >= 3) {
18101 		hdisplay_max = 4096;
18102 		vdisplay_max = 4096;
18103 		htotal_max = 8192;
18104 		vtotal_max = 8192;
18105 	} else {
18106 		hdisplay_max = 2048;
18107 		vdisplay_max = 2048;
18108 		htotal_max = 4096;
18109 		vtotal_max = 4096;
18110 	}
18111 
18112 	if (mode->hdisplay > hdisplay_max ||
18113 	    mode->hsync_start > htotal_max ||
18114 	    mode->hsync_end > htotal_max ||
18115 	    mode->htotal > htotal_max)
18116 		return MODE_H_ILLEGAL;
18117 
18118 	if (mode->vdisplay > vdisplay_max ||
18119 	    mode->vsync_start > vtotal_max ||
18120 	    mode->vsync_end > vtotal_max ||
18121 	    mode->vtotal > vtotal_max)
18122 		return MODE_V_ILLEGAL;
18123 
18124 	if (INTEL_GEN(dev_priv) >= 5) {
18125 		if (mode->hdisplay < 64 ||
18126 		    mode->htotal - mode->hdisplay < 32)
18127 			return MODE_H_ILLEGAL;
18128 
18129 		if (mode->vtotal - mode->vdisplay < 5)
18130 			return MODE_V_ILLEGAL;
18131 	} else {
18132 		if (mode->htotal - mode->hdisplay < 32)
18133 			return MODE_H_ILLEGAL;
18134 
18135 		if (mode->vtotal - mode->vdisplay < 3)
18136 			return MODE_V_ILLEGAL;
18137 	}
18138 
18139 	return MODE_OK;
18140 }
18141 
18142 enum drm_mode_status
18143 intel_mode_valid_max_plane_size(struct drm_i915_private *dev_priv,
18144 				const struct drm_display_mode *mode,
18145 				bool bigjoiner)
18146 {
18147 	int plane_width_max, plane_height_max;
18148 
18149 	/*
18150 	 * intel_mode_valid() should be
18151 	 * sufficient on older platforms.
18152 	 */
18153 	if (INTEL_GEN(dev_priv) < 9)
18154 		return MODE_OK;
18155 
18156 	/*
18157 	 * Most people will probably want a fullscreen
18158 	 * plane so let's not advertize modes that are
18159 	 * too big for that.
18160 	 */
18161 	if (INTEL_GEN(dev_priv) >= 11) {
18162 		plane_width_max = 5120 << bigjoiner;
18163 		plane_height_max = 4320;
18164 	} else {
18165 		plane_width_max = 5120;
18166 		plane_height_max = 4096;
18167 	}
18168 
18169 	if (mode->hdisplay > plane_width_max)
18170 		return MODE_H_ILLEGAL;
18171 
18172 	if (mode->vdisplay > plane_height_max)
18173 		return MODE_V_ILLEGAL;
18174 
18175 	return MODE_OK;
18176 }
18177 
18178 static const struct drm_mode_config_funcs intel_mode_funcs = {
18179 	.fb_create = intel_user_framebuffer_create,
18180 	.get_format_info = intel_get_format_info,
18181 	.output_poll_changed = intel_fbdev_output_poll_changed,
18182 	.mode_valid = intel_mode_valid,
18183 	.atomic_check = intel_atomic_check,
18184 	.atomic_commit = intel_atomic_commit,
18185 	.atomic_state_alloc = intel_atomic_state_alloc,
18186 	.atomic_state_clear = intel_atomic_state_clear,
18187 	.atomic_state_free = intel_atomic_state_free,
18188 };
18189 
18190 /**
18191  * intel_init_display_hooks - initialize the display modesetting hooks
18192  * @dev_priv: device private
18193  */
18194 void intel_init_display_hooks(struct drm_i915_private *dev_priv)
18195 {
18196 	intel_init_cdclk_hooks(dev_priv);
18197 
18198 	if (INTEL_GEN(dev_priv) >= 9) {
18199 		dev_priv->display.get_pipe_config = hsw_get_pipe_config;
18200 		dev_priv->display.get_initial_plane_config =
18201 			skl_get_initial_plane_config;
18202 		dev_priv->display.crtc_compute_clock = hsw_crtc_compute_clock;
18203 		dev_priv->display.crtc_enable = hsw_crtc_enable;
18204 		dev_priv->display.crtc_disable = hsw_crtc_disable;
18205 	} else if (HAS_DDI(dev_priv)) {
18206 		dev_priv->display.get_pipe_config = hsw_get_pipe_config;
18207 		dev_priv->display.get_initial_plane_config =
18208 			i9xx_get_initial_plane_config;
18209 		dev_priv->display.crtc_compute_clock =
18210 			hsw_crtc_compute_clock;
18211 		dev_priv->display.crtc_enable = hsw_crtc_enable;
18212 		dev_priv->display.crtc_disable = hsw_crtc_disable;
18213 	} else if (HAS_PCH_SPLIT(dev_priv)) {
18214 		dev_priv->display.get_pipe_config = ilk_get_pipe_config;
18215 		dev_priv->display.get_initial_plane_config =
18216 			i9xx_get_initial_plane_config;
18217 		dev_priv->display.crtc_compute_clock =
18218 			ilk_crtc_compute_clock;
18219 		dev_priv->display.crtc_enable = ilk_crtc_enable;
18220 		dev_priv->display.crtc_disable = ilk_crtc_disable;
18221 	} else if (IS_CHERRYVIEW(dev_priv)) {
18222 		dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
18223 		dev_priv->display.get_initial_plane_config =
18224 			i9xx_get_initial_plane_config;
18225 		dev_priv->display.crtc_compute_clock = chv_crtc_compute_clock;
18226 		dev_priv->display.crtc_enable = valleyview_crtc_enable;
18227 		dev_priv->display.crtc_disable = i9xx_crtc_disable;
18228 	} else if (IS_VALLEYVIEW(dev_priv)) {
18229 		dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
18230 		dev_priv->display.get_initial_plane_config =
18231 			i9xx_get_initial_plane_config;
18232 		dev_priv->display.crtc_compute_clock = vlv_crtc_compute_clock;
18233 		dev_priv->display.crtc_enable = valleyview_crtc_enable;
18234 		dev_priv->display.crtc_disable = i9xx_crtc_disable;
18235 	} else if (IS_G4X(dev_priv)) {
18236 		dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
18237 		dev_priv->display.get_initial_plane_config =
18238 			i9xx_get_initial_plane_config;
18239 		dev_priv->display.crtc_compute_clock = g4x_crtc_compute_clock;
18240 		dev_priv->display.crtc_enable = i9xx_crtc_enable;
18241 		dev_priv->display.crtc_disable = i9xx_crtc_disable;
18242 	} else if (IS_PINEVIEW(dev_priv)) {
18243 		dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
18244 		dev_priv->display.get_initial_plane_config =
18245 			i9xx_get_initial_plane_config;
18246 		dev_priv->display.crtc_compute_clock = pnv_crtc_compute_clock;
18247 		dev_priv->display.crtc_enable = i9xx_crtc_enable;
18248 		dev_priv->display.crtc_disable = i9xx_crtc_disable;
18249 	} else if (!IS_GEN(dev_priv, 2)) {
18250 		dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
18251 		dev_priv->display.get_initial_plane_config =
18252 			i9xx_get_initial_plane_config;
18253 		dev_priv->display.crtc_compute_clock = i9xx_crtc_compute_clock;
18254 		dev_priv->display.crtc_enable = i9xx_crtc_enable;
18255 		dev_priv->display.crtc_disable = i9xx_crtc_disable;
18256 	} else {
18257 		dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
18258 		dev_priv->display.get_initial_plane_config =
18259 			i9xx_get_initial_plane_config;
18260 		dev_priv->display.crtc_compute_clock = i8xx_crtc_compute_clock;
18261 		dev_priv->display.crtc_enable = i9xx_crtc_enable;
18262 		dev_priv->display.crtc_disable = i9xx_crtc_disable;
18263 	}
18264 
18265 	if (IS_GEN(dev_priv, 5)) {
18266 		dev_priv->display.fdi_link_train = ilk_fdi_link_train;
18267 	} else if (IS_GEN(dev_priv, 6)) {
18268 		dev_priv->display.fdi_link_train = gen6_fdi_link_train;
18269 	} else if (IS_IVYBRIDGE(dev_priv)) {
18270 		/* FIXME: detect B0+ stepping and use auto training */
18271 		dev_priv->display.fdi_link_train = ivb_manual_fdi_link_train;
18272 	}
18273 
18274 	if (INTEL_GEN(dev_priv) >= 9)
18275 		dev_priv->display.commit_modeset_enables = skl_commit_modeset_enables;
18276 	else
18277 		dev_priv->display.commit_modeset_enables = intel_commit_modeset_enables;
18278 
18279 }
18280 
18281 void intel_modeset_init_hw(struct drm_i915_private *i915)
18282 {
18283 	struct intel_cdclk_state *cdclk_state =
18284 		to_intel_cdclk_state(i915->cdclk.obj.state);
18285 	struct intel_dbuf_state *dbuf_state =
18286 		to_intel_dbuf_state(i915->dbuf.obj.state);
18287 
18288 	intel_update_cdclk(i915);
18289 	intel_dump_cdclk_config(&i915->cdclk.hw, "Current CDCLK");
18290 	cdclk_state->logical = cdclk_state->actual = i915->cdclk.hw;
18291 
18292 	dbuf_state->enabled_slices = i915->dbuf.enabled_slices;
18293 }
18294 
18295 static int sanitize_watermarks_add_affected(struct drm_atomic_state *state)
18296 {
18297 	struct drm_plane *plane;
18298 	struct intel_crtc *crtc;
18299 
18300 	for_each_intel_crtc(state->dev, crtc) {
18301 		struct intel_crtc_state *crtc_state;
18302 
18303 		crtc_state = intel_atomic_get_crtc_state(state, crtc);
18304 		if (IS_ERR(crtc_state))
18305 			return PTR_ERR(crtc_state);
18306 
18307 		if (crtc_state->hw.active) {
18308 			/*
18309 			 * Preserve the inherited flag to avoid
18310 			 * taking the full modeset path.
18311 			 */
18312 			crtc_state->inherited = true;
18313 		}
18314 	}
18315 
18316 	drm_for_each_plane(plane, state->dev) {
18317 		struct drm_plane_state *plane_state;
18318 
18319 		plane_state = drm_atomic_get_plane_state(state, plane);
18320 		if (IS_ERR(plane_state))
18321 			return PTR_ERR(plane_state);
18322 	}
18323 
18324 	return 0;
18325 }
18326 
18327 /*
18328  * Calculate what we think the watermarks should be for the state we've read
18329  * out of the hardware and then immediately program those watermarks so that
18330  * we ensure the hardware settings match our internal state.
18331  *
18332  * We can calculate what we think WM's should be by creating a duplicate of the
18333  * current state (which was constructed during hardware readout) and running it
18334  * through the atomic check code to calculate new watermark values in the
18335  * state object.
18336  */
18337 static void sanitize_watermarks(struct drm_i915_private *dev_priv)
18338 {
18339 	struct drm_atomic_state *state;
18340 	struct intel_atomic_state *intel_state;
18341 	struct intel_crtc *crtc;
18342 	struct intel_crtc_state *crtc_state;
18343 	struct drm_modeset_acquire_ctx ctx;
18344 	int ret;
18345 	int i;
18346 
18347 	/* Only supported on platforms that use atomic watermark design */
18348 	if (!dev_priv->display.optimize_watermarks)
18349 		return;
18350 
18351 	state = drm_atomic_state_alloc(&dev_priv->drm);
18352 	if (drm_WARN_ON(&dev_priv->drm, !state))
18353 		return;
18354 
18355 	intel_state = to_intel_atomic_state(state);
18356 
18357 	drm_modeset_acquire_init(&ctx, 0);
18358 
18359 retry:
18360 	state->acquire_ctx = &ctx;
18361 
18362 	/*
18363 	 * Hardware readout is the only time we don't want to calculate
18364 	 * intermediate watermarks (since we don't trust the current
18365 	 * watermarks).
18366 	 */
18367 	if (!HAS_GMCH(dev_priv))
18368 		intel_state->skip_intermediate_wm = true;
18369 
18370 	ret = sanitize_watermarks_add_affected(state);
18371 	if (ret)
18372 		goto fail;
18373 
18374 	ret = intel_atomic_check(&dev_priv->drm, state);
18375 	if (ret)
18376 		goto fail;
18377 
18378 	/* Write calculated watermark values back */
18379 	for_each_new_intel_crtc_in_state(intel_state, crtc, crtc_state, i) {
18380 		crtc_state->wm.need_postvbl_update = true;
18381 		dev_priv->display.optimize_watermarks(intel_state, crtc);
18382 
18383 		to_intel_crtc_state(crtc->base.state)->wm = crtc_state->wm;
18384 	}
18385 
18386 fail:
18387 	if (ret == -EDEADLK) {
18388 		drm_atomic_state_clear(state);
18389 		drm_modeset_backoff(&ctx);
18390 		goto retry;
18391 	}
18392 
18393 	/*
18394 	 * If we fail here, it means that the hardware appears to be
18395 	 * programmed in a way that shouldn't be possible, given our
18396 	 * understanding of watermark requirements.  This might mean a
18397 	 * mistake in the hardware readout code or a mistake in the
18398 	 * watermark calculations for a given platform.  Raise a WARN
18399 	 * so that this is noticeable.
18400 	 *
18401 	 * If this actually happens, we'll have to just leave the
18402 	 * BIOS-programmed watermarks untouched and hope for the best.
18403 	 */
18404 	drm_WARN(&dev_priv->drm, ret,
18405 		 "Could not determine valid watermarks for inherited state\n");
18406 
18407 	drm_atomic_state_put(state);
18408 
18409 	drm_modeset_drop_locks(&ctx);
18410 	drm_modeset_acquire_fini(&ctx);
18411 }
18412 
18413 static void intel_update_fdi_pll_freq(struct drm_i915_private *dev_priv)
18414 {
18415 	if (IS_GEN(dev_priv, 5)) {
18416 		u32 fdi_pll_clk =
18417 			intel_de_read(dev_priv, FDI_PLL_BIOS_0) & FDI_PLL_FB_CLOCK_MASK;
18418 
18419 		dev_priv->fdi_pll_freq = (fdi_pll_clk + 2) * 10000;
18420 	} else if (IS_GEN(dev_priv, 6) || IS_IVYBRIDGE(dev_priv)) {
18421 		dev_priv->fdi_pll_freq = 270000;
18422 	} else {
18423 		return;
18424 	}
18425 
18426 	drm_dbg(&dev_priv->drm, "FDI PLL freq=%d\n", dev_priv->fdi_pll_freq);
18427 }
18428 
18429 static int intel_initial_commit(struct drm_device *dev)
18430 {
18431 	struct drm_atomic_state *state = NULL;
18432 	struct drm_modeset_acquire_ctx ctx;
18433 	struct intel_crtc *crtc;
18434 	int ret = 0;
18435 
18436 	state = drm_atomic_state_alloc(dev);
18437 	if (!state)
18438 		return -ENOMEM;
18439 
18440 	drm_modeset_acquire_init(&ctx, 0);
18441 
18442 retry:
18443 	state->acquire_ctx = &ctx;
18444 
18445 	for_each_intel_crtc(dev, crtc) {
18446 		struct intel_crtc_state *crtc_state =
18447 			intel_atomic_get_crtc_state(state, crtc);
18448 
18449 		if (IS_ERR(crtc_state)) {
18450 			ret = PTR_ERR(crtc_state);
18451 			goto out;
18452 		}
18453 
18454 		if (crtc_state->hw.active) {
18455 			struct intel_encoder *encoder;
18456 
18457 			/*
18458 			 * We've not yet detected sink capabilities
18459 			 * (audio,infoframes,etc.) and thus we don't want to
18460 			 * force a full state recomputation yet. We want that to
18461 			 * happen only for the first real commit from userspace.
18462 			 * So preserve the inherited flag for the time being.
18463 			 */
18464 			crtc_state->inherited = true;
18465 
18466 			ret = drm_atomic_add_affected_planes(state, &crtc->base);
18467 			if (ret)
18468 				goto out;
18469 
18470 			/*
18471 			 * FIXME hack to force a LUT update to avoid the
18472 			 * plane update forcing the pipe gamma on without
18473 			 * having a proper LUT loaded. Remove once we
18474 			 * have readout for pipe gamma enable.
18475 			 */
18476 			crtc_state->uapi.color_mgmt_changed = true;
18477 
18478 			for_each_intel_encoder_mask(dev, encoder,
18479 						    crtc_state->uapi.encoder_mask) {
18480 				if (encoder->initial_fastset_check &&
18481 				    !encoder->initial_fastset_check(encoder, crtc_state)) {
18482 					ret = drm_atomic_add_affected_connectors(state,
18483 										 &crtc->base);
18484 					if (ret)
18485 						goto out;
18486 				}
18487 			}
18488 		}
18489 	}
18490 
18491 	ret = drm_atomic_commit(state);
18492 
18493 out:
18494 	if (ret == -EDEADLK) {
18495 		drm_atomic_state_clear(state);
18496 		drm_modeset_backoff(&ctx);
18497 		goto retry;
18498 	}
18499 
18500 	drm_atomic_state_put(state);
18501 
18502 	drm_modeset_drop_locks(&ctx);
18503 	drm_modeset_acquire_fini(&ctx);
18504 
18505 	return ret;
18506 }
18507 
18508 static void intel_mode_config_init(struct drm_i915_private *i915)
18509 {
18510 	struct drm_mode_config *mode_config = &i915->drm.mode_config;
18511 
18512 	drm_mode_config_init(&i915->drm);
18513 	INIT_LIST_HEAD(&i915->global_obj_list);
18514 
18515 	mode_config->min_width = 0;
18516 	mode_config->min_height = 0;
18517 
18518 	mode_config->preferred_depth = 24;
18519 	mode_config->prefer_shadow = 1;
18520 
18521 	mode_config->allow_fb_modifiers = true;
18522 
18523 	mode_config->funcs = &intel_mode_funcs;
18524 
18525 	if (INTEL_GEN(i915) >= 9)
18526 		mode_config->async_page_flip = true;
18527 
18528 	/*
18529 	 * Maximum framebuffer dimensions, chosen to match
18530 	 * the maximum render engine surface size on gen4+.
18531 	 */
18532 	if (INTEL_GEN(i915) >= 7) {
18533 		mode_config->max_width = 16384;
18534 		mode_config->max_height = 16384;
18535 	} else if (INTEL_GEN(i915) >= 4) {
18536 		mode_config->max_width = 8192;
18537 		mode_config->max_height = 8192;
18538 	} else if (IS_GEN(i915, 3)) {
18539 		mode_config->max_width = 4096;
18540 		mode_config->max_height = 4096;
18541 	} else {
18542 		mode_config->max_width = 2048;
18543 		mode_config->max_height = 2048;
18544 	}
18545 
18546 	if (IS_I845G(i915) || IS_I865G(i915)) {
18547 		mode_config->cursor_width = IS_I845G(i915) ? 64 : 512;
18548 		mode_config->cursor_height = 1023;
18549 	} else if (IS_I830(i915) || IS_I85X(i915) ||
18550 		   IS_I915G(i915) || IS_I915GM(i915)) {
18551 		mode_config->cursor_width = 64;
18552 		mode_config->cursor_height = 64;
18553 	} else {
18554 		mode_config->cursor_width = 256;
18555 		mode_config->cursor_height = 256;
18556 	}
18557 }
18558 
18559 static void intel_mode_config_cleanup(struct drm_i915_private *i915)
18560 {
18561 	intel_atomic_global_obj_cleanup(i915);
18562 	drm_mode_config_cleanup(&i915->drm);
18563 }
18564 
18565 static void plane_config_fini(struct intel_initial_plane_config *plane_config)
18566 {
18567 	if (plane_config->fb) {
18568 		struct drm_framebuffer *fb = &plane_config->fb->base;
18569 
18570 		/* We may only have the stub and not a full framebuffer */
18571 		if (drm_framebuffer_read_refcount(fb))
18572 			drm_framebuffer_put(fb);
18573 		else
18574 			kfree(fb);
18575 	}
18576 
18577 	if (plane_config->vma)
18578 		i915_vma_put(plane_config->vma);
18579 }
18580 
18581 /* part #1: call before irq install */
18582 int intel_modeset_init_noirq(struct drm_i915_private *i915)
18583 {
18584 	int ret;
18585 
18586 	if (i915_inject_probe_failure(i915))
18587 		return -ENODEV;
18588 
18589 	if (HAS_DISPLAY(i915)) {
18590 		ret = drm_vblank_init(&i915->drm,
18591 				      INTEL_NUM_PIPES(i915));
18592 		if (ret)
18593 			return ret;
18594 	}
18595 
18596 	intel_bios_init(i915);
18597 
18598 	ret = intel_vga_register(i915);
18599 	if (ret)
18600 		goto cleanup_bios;
18601 
18602 	/* FIXME: completely on the wrong abstraction layer */
18603 	intel_power_domains_init_hw(i915, false);
18604 
18605 	intel_csr_ucode_init(i915);
18606 
18607 	i915->modeset_wq = alloc_ordered_workqueue("i915_modeset", 0);
18608 	i915->flip_wq = alloc_workqueue("i915_flip", WQ_HIGHPRI |
18609 					WQ_UNBOUND, WQ_UNBOUND_MAX_ACTIVE);
18610 
18611 	intel_mode_config_init(i915);
18612 
18613 	ret = intel_cdclk_init(i915);
18614 	if (ret)
18615 		goto cleanup_vga_client_pw_domain_csr;
18616 
18617 	ret = intel_dbuf_init(i915);
18618 	if (ret)
18619 		goto cleanup_vga_client_pw_domain_csr;
18620 
18621 	ret = intel_bw_init(i915);
18622 	if (ret)
18623 		goto cleanup_vga_client_pw_domain_csr;
18624 
18625 	init_llist_head(&i915->atomic_helper.free_list);
18626 	INIT_WORK(&i915->atomic_helper.free_work,
18627 		  intel_atomic_helper_free_state_worker);
18628 
18629 	intel_init_quirks(i915);
18630 
18631 	intel_fbc_init(i915);
18632 
18633 	return 0;
18634 
18635 cleanup_vga_client_pw_domain_csr:
18636 	intel_csr_ucode_fini(i915);
18637 	intel_power_domains_driver_remove(i915);
18638 	intel_vga_unregister(i915);
18639 cleanup_bios:
18640 	intel_bios_driver_remove(i915);
18641 
18642 	return ret;
18643 }
18644 
18645 /* part #2: call after irq install, but before gem init */
18646 int intel_modeset_init_nogem(struct drm_i915_private *i915)
18647 {
18648 	struct drm_device *dev = &i915->drm;
18649 	enum pipe pipe;
18650 	struct intel_crtc *crtc;
18651 	int ret;
18652 
18653 	intel_init_pm(i915);
18654 
18655 	intel_panel_sanitize_ssc(i915);
18656 
18657 	intel_gmbus_setup(i915);
18658 
18659 	drm_dbg_kms(&i915->drm, "%d display pipe%s available.\n",
18660 		    INTEL_NUM_PIPES(i915),
18661 		    INTEL_NUM_PIPES(i915) > 1 ? "s" : "");
18662 
18663 	if (HAS_DISPLAY(i915)) {
18664 		for_each_pipe(i915, pipe) {
18665 			ret = intel_crtc_init(i915, pipe);
18666 			if (ret) {
18667 				intel_mode_config_cleanup(i915);
18668 				return ret;
18669 			}
18670 		}
18671 	}
18672 
18673 	intel_plane_possible_crtcs_init(i915);
18674 	intel_shared_dpll_init(dev);
18675 	intel_update_fdi_pll_freq(i915);
18676 
18677 	intel_update_czclk(i915);
18678 	intel_modeset_init_hw(i915);
18679 
18680 	intel_hdcp_component_init(i915);
18681 
18682 	if (i915->max_cdclk_freq == 0)
18683 		intel_update_max_cdclk(i915);
18684 
18685 	/*
18686 	 * If the platform has HTI, we need to find out whether it has reserved
18687 	 * any display resources before we create our display outputs.
18688 	 */
18689 	if (INTEL_INFO(i915)->display.has_hti)
18690 		i915->hti_state = intel_de_read(i915, HDPORT_STATE);
18691 
18692 	/* Just disable it once at startup */
18693 	intel_vga_disable(i915);
18694 	intel_setup_outputs(i915);
18695 
18696 	drm_modeset_lock_all(dev);
18697 	intel_modeset_setup_hw_state(dev, dev->mode_config.acquire_ctx);
18698 	drm_modeset_unlock_all(dev);
18699 
18700 	for_each_intel_crtc(dev, crtc) {
18701 		struct intel_initial_plane_config plane_config = {};
18702 
18703 		if (!to_intel_crtc_state(crtc->base.state)->uapi.active)
18704 			continue;
18705 
18706 		/*
18707 		 * Note that reserving the BIOS fb up front prevents us
18708 		 * from stuffing other stolen allocations like the ring
18709 		 * on top.  This prevents some ugliness at boot time, and
18710 		 * can even allow for smooth boot transitions if the BIOS
18711 		 * fb is large enough for the active pipe configuration.
18712 		 */
18713 		i915->display.get_initial_plane_config(crtc, &plane_config);
18714 
18715 		/*
18716 		 * If the fb is shared between multiple heads, we'll
18717 		 * just get the first one.
18718 		 */
18719 		intel_find_initial_plane_obj(crtc, &plane_config);
18720 
18721 		plane_config_fini(&plane_config);
18722 	}
18723 
18724 	/*
18725 	 * Make sure hardware watermarks really match the state we read out.
18726 	 * Note that we need to do this after reconstructing the BIOS fb's
18727 	 * since the watermark calculation done here will use pstate->fb.
18728 	 */
18729 	if (!HAS_GMCH(i915))
18730 		sanitize_watermarks(i915);
18731 
18732 	return 0;
18733 }
18734 
18735 /* part #3: call after gem init */
18736 int intel_modeset_init(struct drm_i915_private *i915)
18737 {
18738 	int ret;
18739 
18740 	if (!HAS_DISPLAY(i915))
18741 		return 0;
18742 
18743 	/*
18744 	 * Force all active planes to recompute their states. So that on
18745 	 * mode_setcrtc after probe, all the intel_plane_state variables
18746 	 * are already calculated and there is no assert_plane warnings
18747 	 * during bootup.
18748 	 */
18749 	ret = intel_initial_commit(&i915->drm);
18750 	if (ret)
18751 		drm_dbg_kms(&i915->drm, "Initial modeset failed, %d\n", ret);
18752 
18753 	intel_overlay_setup(i915);
18754 
18755 	ret = intel_fbdev_init(&i915->drm);
18756 	if (ret)
18757 		return ret;
18758 
18759 	/* Only enable hotplug handling once the fbdev is fully set up. */
18760 	intel_hpd_init(i915);
18761 	intel_hpd_poll_disable(i915);
18762 
18763 	intel_init_ipc(i915);
18764 
18765 	return 0;
18766 }
18767 
18768 void i830_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe)
18769 {
18770 	struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
18771 	/* 640x480@60Hz, ~25175 kHz */
18772 	struct dpll clock = {
18773 		.m1 = 18,
18774 		.m2 = 7,
18775 		.p1 = 13,
18776 		.p2 = 4,
18777 		.n = 2,
18778 	};
18779 	u32 dpll, fp;
18780 	int i;
18781 
18782 	drm_WARN_ON(&dev_priv->drm,
18783 		    i9xx_calc_dpll_params(48000, &clock) != 25154);
18784 
18785 	drm_dbg_kms(&dev_priv->drm,
18786 		    "enabling pipe %c due to force quirk (vco=%d dot=%d)\n",
18787 		    pipe_name(pipe), clock.vco, clock.dot);
18788 
18789 	fp = i9xx_dpll_compute_fp(&clock);
18790 	dpll = DPLL_DVO_2X_MODE |
18791 		DPLL_VGA_MODE_DIS |
18792 		((clock.p1 - 2) << DPLL_FPA01_P1_POST_DIV_SHIFT) |
18793 		PLL_P2_DIVIDE_BY_4 |
18794 		PLL_REF_INPUT_DREFCLK |
18795 		DPLL_VCO_ENABLE;
18796 
18797 	intel_de_write(dev_priv, FP0(pipe), fp);
18798 	intel_de_write(dev_priv, FP1(pipe), fp);
18799 
18800 	intel_de_write(dev_priv, HTOTAL(pipe), (640 - 1) | ((800 - 1) << 16));
18801 	intel_de_write(dev_priv, HBLANK(pipe), (640 - 1) | ((800 - 1) << 16));
18802 	intel_de_write(dev_priv, HSYNC(pipe), (656 - 1) | ((752 - 1) << 16));
18803 	intel_de_write(dev_priv, VTOTAL(pipe), (480 - 1) | ((525 - 1) << 16));
18804 	intel_de_write(dev_priv, VBLANK(pipe), (480 - 1) | ((525 - 1) << 16));
18805 	intel_de_write(dev_priv, VSYNC(pipe), (490 - 1) | ((492 - 1) << 16));
18806 	intel_de_write(dev_priv, PIPESRC(pipe), ((640 - 1) << 16) | (480 - 1));
18807 
18808 	/*
18809 	 * Apparently we need to have VGA mode enabled prior to changing
18810 	 * the P1/P2 dividers. Otherwise the DPLL will keep using the old
18811 	 * dividers, even though the register value does change.
18812 	 */
18813 	intel_de_write(dev_priv, DPLL(pipe), dpll & ~DPLL_VGA_MODE_DIS);
18814 	intel_de_write(dev_priv, DPLL(pipe), dpll);
18815 
18816 	/* Wait for the clocks to stabilize. */
18817 	intel_de_posting_read(dev_priv, DPLL(pipe));
18818 	udelay(150);
18819 
18820 	/* The pixel multiplier can only be updated once the
18821 	 * DPLL is enabled and the clocks are stable.
18822 	 *
18823 	 * So write it again.
18824 	 */
18825 	intel_de_write(dev_priv, DPLL(pipe), dpll);
18826 
18827 	/* We do this three times for luck */
18828 	for (i = 0; i < 3 ; i++) {
18829 		intel_de_write(dev_priv, DPLL(pipe), dpll);
18830 		intel_de_posting_read(dev_priv, DPLL(pipe));
18831 		udelay(150); /* wait for warmup */
18832 	}
18833 
18834 	intel_de_write(dev_priv, PIPECONF(pipe),
18835 		       PIPECONF_ENABLE | PIPECONF_PROGRESSIVE);
18836 	intel_de_posting_read(dev_priv, PIPECONF(pipe));
18837 
18838 	intel_wait_for_pipe_scanline_moving(crtc);
18839 }
18840 
18841 void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe)
18842 {
18843 	struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
18844 
18845 	drm_dbg_kms(&dev_priv->drm, "disabling pipe %c due to force quirk\n",
18846 		    pipe_name(pipe));
18847 
18848 	drm_WARN_ON(&dev_priv->drm,
18849 		    intel_de_read(dev_priv, DSPCNTR(PLANE_A)) &
18850 		    DISPLAY_PLANE_ENABLE);
18851 	drm_WARN_ON(&dev_priv->drm,
18852 		    intel_de_read(dev_priv, DSPCNTR(PLANE_B)) &
18853 		    DISPLAY_PLANE_ENABLE);
18854 	drm_WARN_ON(&dev_priv->drm,
18855 		    intel_de_read(dev_priv, DSPCNTR(PLANE_C)) &
18856 		    DISPLAY_PLANE_ENABLE);
18857 	drm_WARN_ON(&dev_priv->drm,
18858 		    intel_de_read(dev_priv, CURCNTR(PIPE_A)) & MCURSOR_MODE);
18859 	drm_WARN_ON(&dev_priv->drm,
18860 		    intel_de_read(dev_priv, CURCNTR(PIPE_B)) & MCURSOR_MODE);
18861 
18862 	intel_de_write(dev_priv, PIPECONF(pipe), 0);
18863 	intel_de_posting_read(dev_priv, PIPECONF(pipe));
18864 
18865 	intel_wait_for_pipe_scanline_stopped(crtc);
18866 
18867 	intel_de_write(dev_priv, DPLL(pipe), DPLL_VGA_MODE_DIS);
18868 	intel_de_posting_read(dev_priv, DPLL(pipe));
18869 }
18870 
18871 static void
18872 intel_sanitize_plane_mapping(struct drm_i915_private *dev_priv)
18873 {
18874 	struct intel_crtc *crtc;
18875 
18876 	if (INTEL_GEN(dev_priv) >= 4)
18877 		return;
18878 
18879 	for_each_intel_crtc(&dev_priv->drm, crtc) {
18880 		struct intel_plane *plane =
18881 			to_intel_plane(crtc->base.primary);
18882 		struct intel_crtc *plane_crtc;
18883 		enum pipe pipe;
18884 
18885 		if (!plane->get_hw_state(plane, &pipe))
18886 			continue;
18887 
18888 		if (pipe == crtc->pipe)
18889 			continue;
18890 
18891 		drm_dbg_kms(&dev_priv->drm,
18892 			    "[PLANE:%d:%s] attached to the wrong pipe, disabling plane\n",
18893 			    plane->base.base.id, plane->base.name);
18894 
18895 		plane_crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
18896 		intel_plane_disable_noatomic(plane_crtc, plane);
18897 	}
18898 }
18899 
18900 static bool intel_crtc_has_encoders(struct intel_crtc *crtc)
18901 {
18902 	struct drm_device *dev = crtc->base.dev;
18903 	struct intel_encoder *encoder;
18904 
18905 	for_each_encoder_on_crtc(dev, &crtc->base, encoder)
18906 		return true;
18907 
18908 	return false;
18909 }
18910 
18911 static struct intel_connector *intel_encoder_find_connector(struct intel_encoder *encoder)
18912 {
18913 	struct drm_device *dev = encoder->base.dev;
18914 	struct intel_connector *connector;
18915 
18916 	for_each_connector_on_encoder(dev, &encoder->base, connector)
18917 		return connector;
18918 
18919 	return NULL;
18920 }
18921 
18922 static bool has_pch_trancoder(struct drm_i915_private *dev_priv,
18923 			      enum pipe pch_transcoder)
18924 {
18925 	return HAS_PCH_IBX(dev_priv) || HAS_PCH_CPT(dev_priv) ||
18926 		(HAS_PCH_LPT_H(dev_priv) && pch_transcoder == PIPE_A);
18927 }
18928 
18929 static void intel_sanitize_frame_start_delay(const struct intel_crtc_state *crtc_state)
18930 {
18931 	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
18932 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
18933 	enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
18934 
18935 	if (INTEL_GEN(dev_priv) >= 9 ||
18936 	    IS_BROADWELL(dev_priv) || IS_HASWELL(dev_priv)) {
18937 		i915_reg_t reg = CHICKEN_TRANS(cpu_transcoder);
18938 		u32 val;
18939 
18940 		if (transcoder_is_dsi(cpu_transcoder))
18941 			return;
18942 
18943 		val = intel_de_read(dev_priv, reg);
18944 		val &= ~HSW_FRAME_START_DELAY_MASK;
18945 		val |= HSW_FRAME_START_DELAY(0);
18946 		intel_de_write(dev_priv, reg, val);
18947 	} else {
18948 		i915_reg_t reg = PIPECONF(cpu_transcoder);
18949 		u32 val;
18950 
18951 		val = intel_de_read(dev_priv, reg);
18952 		val &= ~PIPECONF_FRAME_START_DELAY_MASK;
18953 		val |= PIPECONF_FRAME_START_DELAY(0);
18954 		intel_de_write(dev_priv, reg, val);
18955 	}
18956 
18957 	if (!crtc_state->has_pch_encoder)
18958 		return;
18959 
18960 	if (HAS_PCH_IBX(dev_priv)) {
18961 		i915_reg_t reg = PCH_TRANSCONF(crtc->pipe);
18962 		u32 val;
18963 
18964 		val = intel_de_read(dev_priv, reg);
18965 		val &= ~TRANS_FRAME_START_DELAY_MASK;
18966 		val |= TRANS_FRAME_START_DELAY(0);
18967 		intel_de_write(dev_priv, reg, val);
18968 	} else {
18969 		enum pipe pch_transcoder = intel_crtc_pch_transcoder(crtc);
18970 		i915_reg_t reg = TRANS_CHICKEN2(pch_transcoder);
18971 		u32 val;
18972 
18973 		val = intel_de_read(dev_priv, reg);
18974 		val &= ~TRANS_CHICKEN2_FRAME_START_DELAY_MASK;
18975 		val |= TRANS_CHICKEN2_FRAME_START_DELAY(0);
18976 		intel_de_write(dev_priv, reg, val);
18977 	}
18978 }
18979 
18980 static void intel_sanitize_crtc(struct intel_crtc *crtc,
18981 				struct drm_modeset_acquire_ctx *ctx)
18982 {
18983 	struct drm_device *dev = crtc->base.dev;
18984 	struct drm_i915_private *dev_priv = to_i915(dev);
18985 	struct intel_crtc_state *crtc_state = to_intel_crtc_state(crtc->base.state);
18986 
18987 	if (crtc_state->hw.active) {
18988 		struct intel_plane *plane;
18989 
18990 		/* Clear any frame start delays used for debugging left by the BIOS */
18991 		intel_sanitize_frame_start_delay(crtc_state);
18992 
18993 		/* Disable everything but the primary plane */
18994 		for_each_intel_plane_on_crtc(dev, crtc, plane) {
18995 			const struct intel_plane_state *plane_state =
18996 				to_intel_plane_state(plane->base.state);
18997 
18998 			if (plane_state->uapi.visible &&
18999 			    plane->base.type != DRM_PLANE_TYPE_PRIMARY)
19000 				intel_plane_disable_noatomic(crtc, plane);
19001 		}
19002 
19003 		/*
19004 		 * Disable any background color set by the BIOS, but enable the
19005 		 * gamma and CSC to match how we program our planes.
19006 		 */
19007 		if (INTEL_GEN(dev_priv) >= 9)
19008 			intel_de_write(dev_priv, SKL_BOTTOM_COLOR(crtc->pipe),
19009 				       SKL_BOTTOM_COLOR_GAMMA_ENABLE | SKL_BOTTOM_COLOR_CSC_ENABLE);
19010 	}
19011 
19012 	/* Adjust the state of the output pipe according to whether we
19013 	 * have active connectors/encoders. */
19014 	if (crtc_state->hw.active && !intel_crtc_has_encoders(crtc) &&
19015 	    !crtc_state->bigjoiner_slave)
19016 		intel_crtc_disable_noatomic(crtc, ctx);
19017 
19018 	if (crtc_state->hw.active || HAS_GMCH(dev_priv)) {
19019 		/*
19020 		 * We start out with underrun reporting disabled to avoid races.
19021 		 * For correct bookkeeping mark this on active crtcs.
19022 		 *
19023 		 * Also on gmch platforms we dont have any hardware bits to
19024 		 * disable the underrun reporting. Which means we need to start
19025 		 * out with underrun reporting disabled also on inactive pipes,
19026 		 * since otherwise we'll complain about the garbage we read when
19027 		 * e.g. coming up after runtime pm.
19028 		 *
19029 		 * No protection against concurrent access is required - at
19030 		 * worst a fifo underrun happens which also sets this to false.
19031 		 */
19032 		crtc->cpu_fifo_underrun_disabled = true;
19033 		/*
19034 		 * We track the PCH trancoder underrun reporting state
19035 		 * within the crtc. With crtc for pipe A housing the underrun
19036 		 * reporting state for PCH transcoder A, crtc for pipe B housing
19037 		 * it for PCH transcoder B, etc. LPT-H has only PCH transcoder A,
19038 		 * and marking underrun reporting as disabled for the non-existing
19039 		 * PCH transcoders B and C would prevent enabling the south
19040 		 * error interrupt (see cpt_can_enable_serr_int()).
19041 		 */
19042 		if (has_pch_trancoder(dev_priv, crtc->pipe))
19043 			crtc->pch_fifo_underrun_disabled = true;
19044 	}
19045 }
19046 
19047 static bool has_bogus_dpll_config(const struct intel_crtc_state *crtc_state)
19048 {
19049 	struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
19050 
19051 	/*
19052 	 * Some SNB BIOSen (eg. ASUS K53SV) are known to misprogram
19053 	 * the hardware when a high res displays plugged in. DPLL P
19054 	 * divider is zero, and the pipe timings are bonkers. We'll
19055 	 * try to disable everything in that case.
19056 	 *
19057 	 * FIXME would be nice to be able to sanitize this state
19058 	 * without several WARNs, but for now let's take the easy
19059 	 * road.
19060 	 */
19061 	return IS_GEN(dev_priv, 6) &&
19062 		crtc_state->hw.active &&
19063 		crtc_state->shared_dpll &&
19064 		crtc_state->port_clock == 0;
19065 }
19066 
19067 static void intel_sanitize_encoder(struct intel_encoder *encoder)
19068 {
19069 	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
19070 	struct intel_connector *connector;
19071 	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
19072 	struct intel_crtc_state *crtc_state = crtc ?
19073 		to_intel_crtc_state(crtc->base.state) : NULL;
19074 
19075 	/* We need to check both for a crtc link (meaning that the
19076 	 * encoder is active and trying to read from a pipe) and the
19077 	 * pipe itself being active. */
19078 	bool has_active_crtc = crtc_state &&
19079 		crtc_state->hw.active;
19080 
19081 	if (crtc_state && has_bogus_dpll_config(crtc_state)) {
19082 		drm_dbg_kms(&dev_priv->drm,
19083 			    "BIOS has misprogrammed the hardware. Disabling pipe %c\n",
19084 			    pipe_name(crtc->pipe));
19085 		has_active_crtc = false;
19086 	}
19087 
19088 	connector = intel_encoder_find_connector(encoder);
19089 	if (connector && !has_active_crtc) {
19090 		drm_dbg_kms(&dev_priv->drm,
19091 			    "[ENCODER:%d:%s] has active connectors but no active pipe!\n",
19092 			    encoder->base.base.id,
19093 			    encoder->base.name);
19094 
19095 		/* Connector is active, but has no active pipe. This is
19096 		 * fallout from our resume register restoring. Disable
19097 		 * the encoder manually again. */
19098 		if (crtc_state) {
19099 			struct drm_encoder *best_encoder;
19100 
19101 			drm_dbg_kms(&dev_priv->drm,
19102 				    "[ENCODER:%d:%s] manually disabled\n",
19103 				    encoder->base.base.id,
19104 				    encoder->base.name);
19105 
19106 			/* avoid oopsing in case the hooks consult best_encoder */
19107 			best_encoder = connector->base.state->best_encoder;
19108 			connector->base.state->best_encoder = &encoder->base;
19109 
19110 			/* FIXME NULL atomic state passed! */
19111 			if (encoder->disable)
19112 				encoder->disable(NULL, encoder, crtc_state,
19113 						 connector->base.state);
19114 			if (encoder->post_disable)
19115 				encoder->post_disable(NULL, encoder, crtc_state,
19116 						      connector->base.state);
19117 
19118 			connector->base.state->best_encoder = best_encoder;
19119 		}
19120 		encoder->base.crtc = NULL;
19121 
19122 		/* Inconsistent output/port/pipe state happens presumably due to
19123 		 * a bug in one of the get_hw_state functions. Or someplace else
19124 		 * in our code, like the register restore mess on resume. Clamp
19125 		 * things to off as a safer default. */
19126 
19127 		connector->base.dpms = DRM_MODE_DPMS_OFF;
19128 		connector->base.encoder = NULL;
19129 	}
19130 
19131 	/* notify opregion of the sanitized encoder state */
19132 	intel_opregion_notify_encoder(encoder, connector && has_active_crtc);
19133 
19134 	if (INTEL_GEN(dev_priv) >= 11)
19135 		icl_sanitize_encoder_pll_mapping(encoder);
19136 }
19137 
19138 /* FIXME read out full plane state for all planes */
19139 static void readout_plane_state(struct drm_i915_private *dev_priv)
19140 {
19141 	struct intel_plane *plane;
19142 	struct intel_crtc *crtc;
19143 
19144 	for_each_intel_plane(&dev_priv->drm, plane) {
19145 		struct intel_plane_state *plane_state =
19146 			to_intel_plane_state(plane->base.state);
19147 		struct intel_crtc_state *crtc_state;
19148 		enum pipe pipe = PIPE_A;
19149 		bool visible;
19150 
19151 		visible = plane->get_hw_state(plane, &pipe);
19152 
19153 		crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
19154 		crtc_state = to_intel_crtc_state(crtc->base.state);
19155 
19156 		intel_set_plane_visible(crtc_state, plane_state, visible);
19157 
19158 		drm_dbg_kms(&dev_priv->drm,
19159 			    "[PLANE:%d:%s] hw state readout: %s, pipe %c\n",
19160 			    plane->base.base.id, plane->base.name,
19161 			    enableddisabled(visible), pipe_name(pipe));
19162 	}
19163 
19164 	for_each_intel_crtc(&dev_priv->drm, crtc) {
19165 		struct intel_crtc_state *crtc_state =
19166 			to_intel_crtc_state(crtc->base.state);
19167 
19168 		fixup_active_planes(crtc_state);
19169 	}
19170 }
19171 
19172 static void intel_modeset_readout_hw_state(struct drm_device *dev)
19173 {
19174 	struct drm_i915_private *dev_priv = to_i915(dev);
19175 	struct intel_cdclk_state *cdclk_state =
19176 		to_intel_cdclk_state(dev_priv->cdclk.obj.state);
19177 	struct intel_dbuf_state *dbuf_state =
19178 		to_intel_dbuf_state(dev_priv->dbuf.obj.state);
19179 	enum pipe pipe;
19180 	struct intel_crtc *crtc;
19181 	struct intel_encoder *encoder;
19182 	struct intel_connector *connector;
19183 	struct drm_connector_list_iter conn_iter;
19184 	u8 active_pipes = 0;
19185 
19186 	for_each_intel_crtc(dev, crtc) {
19187 		struct intel_crtc_state *crtc_state =
19188 			to_intel_crtc_state(crtc->base.state);
19189 
19190 		__drm_atomic_helper_crtc_destroy_state(&crtc_state->uapi);
19191 		intel_crtc_free_hw_state(crtc_state);
19192 		intel_crtc_state_reset(crtc_state, crtc);
19193 
19194 		intel_crtc_get_pipe_config(crtc_state);
19195 
19196 		crtc_state->hw.enable = crtc_state->hw.active;
19197 
19198 		crtc->base.enabled = crtc_state->hw.enable;
19199 		crtc->active = crtc_state->hw.active;
19200 
19201 		if (crtc_state->hw.active)
19202 			active_pipes |= BIT(crtc->pipe);
19203 
19204 		drm_dbg_kms(&dev_priv->drm,
19205 			    "[CRTC:%d:%s] hw state readout: %s\n",
19206 			    crtc->base.base.id, crtc->base.name,
19207 			    enableddisabled(crtc_state->hw.active));
19208 	}
19209 
19210 	dev_priv->active_pipes = cdclk_state->active_pipes =
19211 		dbuf_state->active_pipes = active_pipes;
19212 
19213 	readout_plane_state(dev_priv);
19214 
19215 	intel_dpll_readout_hw_state(dev_priv);
19216 
19217 	for_each_intel_encoder(dev, encoder) {
19218 		pipe = 0;
19219 
19220 		if (encoder->get_hw_state(encoder, &pipe)) {
19221 			struct intel_crtc_state *crtc_state;
19222 
19223 			crtc = intel_get_crtc_for_pipe(dev_priv, pipe);
19224 			crtc_state = to_intel_crtc_state(crtc->base.state);
19225 
19226 			encoder->base.crtc = &crtc->base;
19227 			intel_encoder_get_config(encoder, crtc_state);
19228 			if (encoder->sync_state)
19229 				encoder->sync_state(encoder, crtc_state);
19230 
19231 			/* read out to slave crtc as well for bigjoiner */
19232 			if (crtc_state->bigjoiner) {
19233 				/* encoder should read be linked to bigjoiner master */
19234 				WARN_ON(crtc_state->bigjoiner_slave);
19235 
19236 				crtc = crtc_state->bigjoiner_linked_crtc;
19237 				crtc_state = to_intel_crtc_state(crtc->base.state);
19238 				intel_encoder_get_config(encoder, crtc_state);
19239 			}
19240 		} else {
19241 			encoder->base.crtc = NULL;
19242 		}
19243 
19244 		drm_dbg_kms(&dev_priv->drm,
19245 			    "[ENCODER:%d:%s] hw state readout: %s, pipe %c\n",
19246 			    encoder->base.base.id, encoder->base.name,
19247 			    enableddisabled(encoder->base.crtc),
19248 			    pipe_name(pipe));
19249 	}
19250 
19251 	drm_connector_list_iter_begin(dev, &conn_iter);
19252 	for_each_intel_connector_iter(connector, &conn_iter) {
19253 		if (connector->get_hw_state(connector)) {
19254 			struct intel_crtc_state *crtc_state;
19255 			struct intel_crtc *crtc;
19256 
19257 			connector->base.dpms = DRM_MODE_DPMS_ON;
19258 
19259 			encoder = intel_attached_encoder(connector);
19260 			connector->base.encoder = &encoder->base;
19261 
19262 			crtc = to_intel_crtc(encoder->base.crtc);
19263 			crtc_state = crtc ? to_intel_crtc_state(crtc->base.state) : NULL;
19264 
19265 			if (crtc_state && crtc_state->hw.active) {
19266 				/*
19267 				 * This has to be done during hardware readout
19268 				 * because anything calling .crtc_disable may
19269 				 * rely on the connector_mask being accurate.
19270 				 */
19271 				crtc_state->uapi.connector_mask |=
19272 					drm_connector_mask(&connector->base);
19273 				crtc_state->uapi.encoder_mask |=
19274 					drm_encoder_mask(&encoder->base);
19275 			}
19276 		} else {
19277 			connector->base.dpms = DRM_MODE_DPMS_OFF;
19278 			connector->base.encoder = NULL;
19279 		}
19280 		drm_dbg_kms(&dev_priv->drm,
19281 			    "[CONNECTOR:%d:%s] hw state readout: %s\n",
19282 			    connector->base.base.id, connector->base.name,
19283 			    enableddisabled(connector->base.encoder));
19284 	}
19285 	drm_connector_list_iter_end(&conn_iter);
19286 
19287 	for_each_intel_crtc(dev, crtc) {
19288 		struct intel_bw_state *bw_state =
19289 			to_intel_bw_state(dev_priv->bw_obj.state);
19290 		struct intel_crtc_state *crtc_state =
19291 			to_intel_crtc_state(crtc->base.state);
19292 		struct intel_plane *plane;
19293 		int min_cdclk = 0;
19294 
19295 		if (crtc_state->bigjoiner_slave)
19296 			continue;
19297 
19298 		if (crtc_state->hw.active) {
19299 			/*
19300 			 * The initial mode needs to be set in order to keep
19301 			 * the atomic core happy. It wants a valid mode if the
19302 			 * crtc's enabled, so we do the above call.
19303 			 *
19304 			 * But we don't set all the derived state fully, hence
19305 			 * set a flag to indicate that a full recalculation is
19306 			 * needed on the next commit.
19307 			 */
19308 			crtc_state->inherited = true;
19309 
19310 			intel_crtc_update_active_timings(crtc_state);
19311 
19312 			intel_crtc_copy_hw_to_uapi_state(crtc_state);
19313 		}
19314 
19315 		for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, plane) {
19316 			const struct intel_plane_state *plane_state =
19317 				to_intel_plane_state(plane->base.state);
19318 
19319 			/*
19320 			 * FIXME don't have the fb yet, so can't
19321 			 * use intel_plane_data_rate() :(
19322 			 */
19323 			if (plane_state->uapi.visible)
19324 				crtc_state->data_rate[plane->id] =
19325 					4 * crtc_state->pixel_rate;
19326 			/*
19327 			 * FIXME don't have the fb yet, so can't
19328 			 * use plane->min_cdclk() :(
19329 			 */
19330 			if (plane_state->uapi.visible && plane->min_cdclk) {
19331 				if (crtc_state->double_wide ||
19332 				    INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))
19333 					crtc_state->min_cdclk[plane->id] =
19334 						DIV_ROUND_UP(crtc_state->pixel_rate, 2);
19335 				else
19336 					crtc_state->min_cdclk[plane->id] =
19337 						crtc_state->pixel_rate;
19338 			}
19339 			drm_dbg_kms(&dev_priv->drm,
19340 				    "[PLANE:%d:%s] min_cdclk %d kHz\n",
19341 				    plane->base.base.id, plane->base.name,
19342 				    crtc_state->min_cdclk[plane->id]);
19343 		}
19344 
19345 		if (crtc_state->hw.active) {
19346 			min_cdclk = intel_crtc_compute_min_cdclk(crtc_state);
19347 			if (drm_WARN_ON(dev, min_cdclk < 0))
19348 				min_cdclk = 0;
19349 		}
19350 
19351 		cdclk_state->min_cdclk[crtc->pipe] = min_cdclk;
19352 		cdclk_state->min_voltage_level[crtc->pipe] =
19353 			crtc_state->min_voltage_level;
19354 
19355 		intel_bw_crtc_update(bw_state, crtc_state);
19356 
19357 		intel_pipe_config_sanity_check(dev_priv, crtc_state);
19358 
19359 		/* discard our incomplete slave state, copy it from master */
19360 		if (crtc_state->bigjoiner && crtc_state->hw.active) {
19361 			struct intel_crtc *slave = crtc_state->bigjoiner_linked_crtc;
19362 			struct intel_crtc_state *slave_crtc_state =
19363 				to_intel_crtc_state(slave->base.state);
19364 
19365 			copy_bigjoiner_crtc_state(slave_crtc_state, crtc_state);
19366 			slave->base.mode = crtc->base.mode;
19367 
19368 			cdclk_state->min_cdclk[slave->pipe] = min_cdclk;
19369 			cdclk_state->min_voltage_level[slave->pipe] =
19370 				crtc_state->min_voltage_level;
19371 
19372 			for_each_intel_plane_on_crtc(&dev_priv->drm, slave, plane) {
19373 				const struct intel_plane_state *plane_state =
19374 					to_intel_plane_state(plane->base.state);
19375 
19376 				/*
19377 				 * FIXME don't have the fb yet, so can't
19378 				 * use intel_plane_data_rate() :(
19379 				 */
19380 				if (plane_state->uapi.visible)
19381 					crtc_state->data_rate[plane->id] =
19382 						4 * crtc_state->pixel_rate;
19383 				else
19384 					crtc_state->data_rate[plane->id] = 0;
19385 			}
19386 
19387 			intel_bw_crtc_update(bw_state, slave_crtc_state);
19388 			drm_calc_timestamping_constants(&slave->base,
19389 							&slave_crtc_state->hw.adjusted_mode);
19390 		}
19391 	}
19392 }
19393 
19394 static void
19395 get_encoder_power_domains(struct drm_i915_private *dev_priv)
19396 {
19397 	struct intel_encoder *encoder;
19398 
19399 	for_each_intel_encoder(&dev_priv->drm, encoder) {
19400 		struct intel_crtc_state *crtc_state;
19401 
19402 		if (!encoder->get_power_domains)
19403 			continue;
19404 
19405 		/*
19406 		 * MST-primary and inactive encoders don't have a crtc state
19407 		 * and neither of these require any power domain references.
19408 		 */
19409 		if (!encoder->base.crtc)
19410 			continue;
19411 
19412 		crtc_state = to_intel_crtc_state(encoder->base.crtc->state);
19413 		encoder->get_power_domains(encoder, crtc_state);
19414 	}
19415 }
19416 
19417 static void intel_early_display_was(struct drm_i915_private *dev_priv)
19418 {
19419 	/*
19420 	 * Display WA #1185 WaDisableDARBFClkGating:cnl,glk,icl,ehl,tgl
19421 	 * Also known as Wa_14010480278.
19422 	 */
19423 	if (IS_GEN_RANGE(dev_priv, 10, 12) || IS_GEMINILAKE(dev_priv))
19424 		intel_de_write(dev_priv, GEN9_CLKGATE_DIS_0,
19425 			       intel_de_read(dev_priv, GEN9_CLKGATE_DIS_0) | DARBF_GATING_DIS);
19426 
19427 	if (IS_HASWELL(dev_priv)) {
19428 		/*
19429 		 * WaRsPkgCStateDisplayPMReq:hsw
19430 		 * System hang if this isn't done before disabling all planes!
19431 		 */
19432 		intel_de_write(dev_priv, CHICKEN_PAR1_1,
19433 			       intel_de_read(dev_priv, CHICKEN_PAR1_1) | FORCE_ARB_IDLE_PLANES);
19434 	}
19435 
19436 	if (IS_KABYLAKE(dev_priv) || IS_COFFEELAKE(dev_priv) || IS_COMETLAKE(dev_priv)) {
19437 		/* Display WA #1142:kbl,cfl,cml */
19438 		intel_de_rmw(dev_priv, CHICKEN_PAR1_1,
19439 			     KBL_ARB_FILL_SPARE_22, KBL_ARB_FILL_SPARE_22);
19440 		intel_de_rmw(dev_priv, CHICKEN_MISC_2,
19441 			     KBL_ARB_FILL_SPARE_13 | KBL_ARB_FILL_SPARE_14,
19442 			     KBL_ARB_FILL_SPARE_14);
19443 	}
19444 }
19445 
19446 static void ibx_sanitize_pch_hdmi_port(struct drm_i915_private *dev_priv,
19447 				       enum port port, i915_reg_t hdmi_reg)
19448 {
19449 	u32 val = intel_de_read(dev_priv, hdmi_reg);
19450 
19451 	if (val & SDVO_ENABLE ||
19452 	    (val & SDVO_PIPE_SEL_MASK) == SDVO_PIPE_SEL(PIPE_A))
19453 		return;
19454 
19455 	drm_dbg_kms(&dev_priv->drm,
19456 		    "Sanitizing transcoder select for HDMI %c\n",
19457 		    port_name(port));
19458 
19459 	val &= ~SDVO_PIPE_SEL_MASK;
19460 	val |= SDVO_PIPE_SEL(PIPE_A);
19461 
19462 	intel_de_write(dev_priv, hdmi_reg, val);
19463 }
19464 
19465 static void ibx_sanitize_pch_dp_port(struct drm_i915_private *dev_priv,
19466 				     enum port port, i915_reg_t dp_reg)
19467 {
19468 	u32 val = intel_de_read(dev_priv, dp_reg);
19469 
19470 	if (val & DP_PORT_EN ||
19471 	    (val & DP_PIPE_SEL_MASK) == DP_PIPE_SEL(PIPE_A))
19472 		return;
19473 
19474 	drm_dbg_kms(&dev_priv->drm,
19475 		    "Sanitizing transcoder select for DP %c\n",
19476 		    port_name(port));
19477 
19478 	val &= ~DP_PIPE_SEL_MASK;
19479 	val |= DP_PIPE_SEL(PIPE_A);
19480 
19481 	intel_de_write(dev_priv, dp_reg, val);
19482 }
19483 
19484 static void ibx_sanitize_pch_ports(struct drm_i915_private *dev_priv)
19485 {
19486 	/*
19487 	 * The BIOS may select transcoder B on some of the PCH
19488 	 * ports even it doesn't enable the port. This would trip
19489 	 * assert_pch_dp_disabled() and assert_pch_hdmi_disabled().
19490 	 * Sanitize the transcoder select bits to prevent that. We
19491 	 * assume that the BIOS never actually enabled the port,
19492 	 * because if it did we'd actually have to toggle the port
19493 	 * on and back off to make the transcoder A select stick
19494 	 * (see. intel_dp_link_down(), intel_disable_hdmi(),
19495 	 * intel_disable_sdvo()).
19496 	 */
19497 	ibx_sanitize_pch_dp_port(dev_priv, PORT_B, PCH_DP_B);
19498 	ibx_sanitize_pch_dp_port(dev_priv, PORT_C, PCH_DP_C);
19499 	ibx_sanitize_pch_dp_port(dev_priv, PORT_D, PCH_DP_D);
19500 
19501 	/* PCH SDVOB multiplex with HDMIB */
19502 	ibx_sanitize_pch_hdmi_port(dev_priv, PORT_B, PCH_HDMIB);
19503 	ibx_sanitize_pch_hdmi_port(dev_priv, PORT_C, PCH_HDMIC);
19504 	ibx_sanitize_pch_hdmi_port(dev_priv, PORT_D, PCH_HDMID);
19505 }
19506 
19507 /* Scan out the current hw modeset state,
19508  * and sanitizes it to the current state
19509  */
19510 static void
19511 intel_modeset_setup_hw_state(struct drm_device *dev,
19512 			     struct drm_modeset_acquire_ctx *ctx)
19513 {
19514 	struct drm_i915_private *dev_priv = to_i915(dev);
19515 	struct intel_encoder *encoder;
19516 	struct intel_crtc *crtc;
19517 	intel_wakeref_t wakeref;
19518 
19519 	wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
19520 
19521 	intel_early_display_was(dev_priv);
19522 	intel_modeset_readout_hw_state(dev);
19523 
19524 	/* HW state is read out, now we need to sanitize this mess. */
19525 
19526 	/* Sanitize the TypeC port mode upfront, encoders depend on this */
19527 	for_each_intel_encoder(dev, encoder) {
19528 		enum phy phy = intel_port_to_phy(dev_priv, encoder->port);
19529 
19530 		/* We need to sanitize only the MST primary port. */
19531 		if (encoder->type != INTEL_OUTPUT_DP_MST &&
19532 		    intel_phy_is_tc(dev_priv, phy))
19533 			intel_tc_port_sanitize(enc_to_dig_port(encoder));
19534 	}
19535 
19536 	get_encoder_power_domains(dev_priv);
19537 
19538 	if (HAS_PCH_IBX(dev_priv))
19539 		ibx_sanitize_pch_ports(dev_priv);
19540 
19541 	/*
19542 	 * intel_sanitize_plane_mapping() may need to do vblank
19543 	 * waits, so we need vblank interrupts restored beforehand.
19544 	 */
19545 	for_each_intel_crtc(&dev_priv->drm, crtc) {
19546 		struct intel_crtc_state *crtc_state =
19547 			to_intel_crtc_state(crtc->base.state);
19548 
19549 		drm_crtc_vblank_reset(&crtc->base);
19550 
19551 		if (crtc_state->hw.active)
19552 			intel_crtc_vblank_on(crtc_state);
19553 	}
19554 
19555 	intel_sanitize_plane_mapping(dev_priv);
19556 
19557 	for_each_intel_encoder(dev, encoder)
19558 		intel_sanitize_encoder(encoder);
19559 
19560 	for_each_intel_crtc(&dev_priv->drm, crtc) {
19561 		struct intel_crtc_state *crtc_state =
19562 			to_intel_crtc_state(crtc->base.state);
19563 
19564 		intel_sanitize_crtc(crtc, ctx);
19565 		intel_dump_pipe_config(crtc_state, NULL, "[setup_hw_state]");
19566 	}
19567 
19568 	intel_modeset_update_connector_atomic_state(dev);
19569 
19570 	intel_dpll_sanitize_state(dev_priv);
19571 
19572 	if (IS_G4X(dev_priv)) {
19573 		g4x_wm_get_hw_state(dev_priv);
19574 		g4x_wm_sanitize(dev_priv);
19575 	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
19576 		vlv_wm_get_hw_state(dev_priv);
19577 		vlv_wm_sanitize(dev_priv);
19578 	} else if (INTEL_GEN(dev_priv) >= 9) {
19579 		skl_wm_get_hw_state(dev_priv);
19580 	} else if (HAS_PCH_SPLIT(dev_priv)) {
19581 		ilk_wm_get_hw_state(dev_priv);
19582 	}
19583 
19584 	for_each_intel_crtc(dev, crtc) {
19585 		struct intel_crtc_state *crtc_state =
19586 			to_intel_crtc_state(crtc->base.state);
19587 		u64 put_domains;
19588 
19589 		put_domains = modeset_get_crtc_power_domains(crtc_state);
19590 		if (drm_WARN_ON(dev, put_domains))
19591 			modeset_put_power_domains(dev_priv, put_domains);
19592 	}
19593 
19594 	intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, wakeref);
19595 }
19596 
19597 void intel_display_resume(struct drm_device *dev)
19598 {
19599 	struct drm_i915_private *dev_priv = to_i915(dev);
19600 	struct drm_atomic_state *state = dev_priv->modeset_restore_state;
19601 	struct drm_modeset_acquire_ctx ctx;
19602 	int ret;
19603 
19604 	dev_priv->modeset_restore_state = NULL;
19605 	if (state)
19606 		state->acquire_ctx = &ctx;
19607 
19608 	drm_modeset_acquire_init(&ctx, 0);
19609 
19610 	while (1) {
19611 		ret = drm_modeset_lock_all_ctx(dev, &ctx);
19612 		if (ret != -EDEADLK)
19613 			break;
19614 
19615 		drm_modeset_backoff(&ctx);
19616 	}
19617 
19618 	if (!ret)
19619 		ret = __intel_display_resume(dev, state, &ctx);
19620 
19621 	intel_enable_ipc(dev_priv);
19622 	drm_modeset_drop_locks(&ctx);
19623 	drm_modeset_acquire_fini(&ctx);
19624 
19625 	if (ret)
19626 		drm_err(&dev_priv->drm,
19627 			"Restoring old state failed with %i\n", ret);
19628 	if (state)
19629 		drm_atomic_state_put(state);
19630 }
19631 
19632 static void intel_hpd_poll_fini(struct drm_i915_private *i915)
19633 {
19634 	struct intel_connector *connector;
19635 	struct drm_connector_list_iter conn_iter;
19636 
19637 	/* Kill all the work that may have been queued by hpd. */
19638 	drm_connector_list_iter_begin(&i915->drm, &conn_iter);
19639 	for_each_intel_connector_iter(connector, &conn_iter) {
19640 		if (connector->modeset_retry_work.func)
19641 			cancel_work_sync(&connector->modeset_retry_work);
19642 		if (connector->hdcp.shim) {
19643 			cancel_delayed_work_sync(&connector->hdcp.check_work);
19644 			cancel_work_sync(&connector->hdcp.prop_work);
19645 		}
19646 	}
19647 	drm_connector_list_iter_end(&conn_iter);
19648 }
19649 
19650 /* part #1: call before irq uninstall */
19651 void intel_modeset_driver_remove(struct drm_i915_private *i915)
19652 {
19653 	flush_workqueue(i915->flip_wq);
19654 	flush_workqueue(i915->modeset_wq);
19655 
19656 	flush_work(&i915->atomic_helper.free_work);
19657 	drm_WARN_ON(&i915->drm, !llist_empty(&i915->atomic_helper.free_list));
19658 }
19659 
19660 /* part #2: call after irq uninstall */
19661 void intel_modeset_driver_remove_noirq(struct drm_i915_private *i915)
19662 {
19663 	/*
19664 	 * Due to the hpd irq storm handling the hotplug work can re-arm the
19665 	 * poll handlers. Hence disable polling after hpd handling is shut down.
19666 	 */
19667 	intel_hpd_poll_fini(i915);
19668 
19669 	/*
19670 	 * MST topology needs to be suspended so we don't have any calls to
19671 	 * fbdev after it's finalized. MST will be destroyed later as part of
19672 	 * drm_mode_config_cleanup()
19673 	 */
19674 	intel_dp_mst_suspend(i915);
19675 
19676 	/* poll work can call into fbdev, hence clean that up afterwards */
19677 	intel_fbdev_fini(i915);
19678 
19679 	intel_unregister_dsm_handler();
19680 
19681 	intel_fbc_global_disable(i915);
19682 
19683 	/* flush any delayed tasks or pending work */
19684 	flush_scheduled_work();
19685 
19686 	intel_hdcp_component_fini(i915);
19687 
19688 	intel_mode_config_cleanup(i915);
19689 
19690 	intel_overlay_cleanup(i915);
19691 
19692 	intel_gmbus_teardown(i915);
19693 
19694 	destroy_workqueue(i915->flip_wq);
19695 	destroy_workqueue(i915->modeset_wq);
19696 
19697 	intel_fbc_cleanup_cfb(i915);
19698 }
19699 
19700 /* part #3: call after gem init */
19701 void intel_modeset_driver_remove_nogem(struct drm_i915_private *i915)
19702 {
19703 	intel_csr_ucode_fini(i915);
19704 
19705 	intel_power_domains_driver_remove(i915);
19706 
19707 	intel_vga_unregister(i915);
19708 
19709 	intel_bios_driver_remove(i915);
19710 }
19711 
19712 #if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
19713 
19714 struct intel_display_error_state {
19715 
19716 	u32 power_well_driver;
19717 
19718 	struct intel_cursor_error_state {
19719 		u32 control;
19720 		u32 position;
19721 		u32 base;
19722 		u32 size;
19723 	} cursor[I915_MAX_PIPES];
19724 
19725 	struct intel_pipe_error_state {
19726 		bool power_domain_on;
19727 		u32 source;
19728 		u32 stat;
19729 	} pipe[I915_MAX_PIPES];
19730 
19731 	struct intel_plane_error_state {
19732 		u32 control;
19733 		u32 stride;
19734 		u32 size;
19735 		u32 pos;
19736 		u32 addr;
19737 		u32 surface;
19738 		u32 tile_offset;
19739 	} plane[I915_MAX_PIPES];
19740 
19741 	struct intel_transcoder_error_state {
19742 		bool available;
19743 		bool power_domain_on;
19744 		enum transcoder cpu_transcoder;
19745 
19746 		u32 conf;
19747 
19748 		u32 htotal;
19749 		u32 hblank;
19750 		u32 hsync;
19751 		u32 vtotal;
19752 		u32 vblank;
19753 		u32 vsync;
19754 	} transcoder[5];
19755 };
19756 
19757 struct intel_display_error_state *
19758 intel_display_capture_error_state(struct drm_i915_private *dev_priv)
19759 {
19760 	struct intel_display_error_state *error;
19761 	int transcoders[] = {
19762 		TRANSCODER_A,
19763 		TRANSCODER_B,
19764 		TRANSCODER_C,
19765 		TRANSCODER_D,
19766 		TRANSCODER_EDP,
19767 	};
19768 	int i;
19769 
19770 	BUILD_BUG_ON(ARRAY_SIZE(transcoders) != ARRAY_SIZE(error->transcoder));
19771 
19772 	if (!HAS_DISPLAY(dev_priv))
19773 		return NULL;
19774 
19775 	error = kzalloc(sizeof(*error), GFP_ATOMIC);
19776 	if (error == NULL)
19777 		return NULL;
19778 
19779 	if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
19780 		error->power_well_driver = intel_de_read(dev_priv,
19781 							 HSW_PWR_WELL_CTL2);
19782 
19783 	for_each_pipe(dev_priv, i) {
19784 		error->pipe[i].power_domain_on =
19785 			__intel_display_power_is_enabled(dev_priv,
19786 							 POWER_DOMAIN_PIPE(i));
19787 		if (!error->pipe[i].power_domain_on)
19788 			continue;
19789 
19790 		error->cursor[i].control = intel_de_read(dev_priv, CURCNTR(i));
19791 		error->cursor[i].position = intel_de_read(dev_priv, CURPOS(i));
19792 		error->cursor[i].base = intel_de_read(dev_priv, CURBASE(i));
19793 
19794 		error->plane[i].control = intel_de_read(dev_priv, DSPCNTR(i));
19795 		error->plane[i].stride = intel_de_read(dev_priv, DSPSTRIDE(i));
19796 		if (INTEL_GEN(dev_priv) <= 3) {
19797 			error->plane[i].size = intel_de_read(dev_priv,
19798 							     DSPSIZE(i));
19799 			error->plane[i].pos = intel_de_read(dev_priv,
19800 							    DSPPOS(i));
19801 		}
19802 		if (INTEL_GEN(dev_priv) <= 7 && !IS_HASWELL(dev_priv))
19803 			error->plane[i].addr = intel_de_read(dev_priv,
19804 							     DSPADDR(i));
19805 		if (INTEL_GEN(dev_priv) >= 4) {
19806 			error->plane[i].surface = intel_de_read(dev_priv,
19807 								DSPSURF(i));
19808 			error->plane[i].tile_offset = intel_de_read(dev_priv,
19809 								    DSPTILEOFF(i));
19810 		}
19811 
19812 		error->pipe[i].source = intel_de_read(dev_priv, PIPESRC(i));
19813 
19814 		if (HAS_GMCH(dev_priv))
19815 			error->pipe[i].stat = intel_de_read(dev_priv,
19816 							    PIPESTAT(i));
19817 	}
19818 
19819 	for (i = 0; i < ARRAY_SIZE(error->transcoder); i++) {
19820 		enum transcoder cpu_transcoder = transcoders[i];
19821 
19822 		if (!HAS_TRANSCODER(dev_priv, cpu_transcoder))
19823 			continue;
19824 
19825 		error->transcoder[i].available = true;
19826 		error->transcoder[i].power_domain_on =
19827 			__intel_display_power_is_enabled(dev_priv,
19828 				POWER_DOMAIN_TRANSCODER(cpu_transcoder));
19829 		if (!error->transcoder[i].power_domain_on)
19830 			continue;
19831 
19832 		error->transcoder[i].cpu_transcoder = cpu_transcoder;
19833 
19834 		error->transcoder[i].conf = intel_de_read(dev_priv,
19835 							  PIPECONF(cpu_transcoder));
19836 		error->transcoder[i].htotal = intel_de_read(dev_priv,
19837 							    HTOTAL(cpu_transcoder));
19838 		error->transcoder[i].hblank = intel_de_read(dev_priv,
19839 							    HBLANK(cpu_transcoder));
19840 		error->transcoder[i].hsync = intel_de_read(dev_priv,
19841 							   HSYNC(cpu_transcoder));
19842 		error->transcoder[i].vtotal = intel_de_read(dev_priv,
19843 							    VTOTAL(cpu_transcoder));
19844 		error->transcoder[i].vblank = intel_de_read(dev_priv,
19845 							    VBLANK(cpu_transcoder));
19846 		error->transcoder[i].vsync = intel_de_read(dev_priv,
19847 							   VSYNC(cpu_transcoder));
19848 	}
19849 
19850 	return error;
19851 }
19852 
19853 #define err_printf(e, ...) i915_error_printf(e, __VA_ARGS__)
19854 
19855 void
19856 intel_display_print_error_state(struct drm_i915_error_state_buf *m,
19857 				struct intel_display_error_state *error)
19858 {
19859 	struct drm_i915_private *dev_priv = m->i915;
19860 	int i;
19861 
19862 	if (!error)
19863 		return;
19864 
19865 	err_printf(m, "Num Pipes: %d\n", INTEL_NUM_PIPES(dev_priv));
19866 	if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
19867 		err_printf(m, "PWR_WELL_CTL2: %08x\n",
19868 			   error->power_well_driver);
19869 	for_each_pipe(dev_priv, i) {
19870 		err_printf(m, "Pipe [%d]:\n", i);
19871 		err_printf(m, "  Power: %s\n",
19872 			   onoff(error->pipe[i].power_domain_on));
19873 		err_printf(m, "  SRC: %08x\n", error->pipe[i].source);
19874 		err_printf(m, "  STAT: %08x\n", error->pipe[i].stat);
19875 
19876 		err_printf(m, "Plane [%d]:\n", i);
19877 		err_printf(m, "  CNTR: %08x\n", error->plane[i].control);
19878 		err_printf(m, "  STRIDE: %08x\n", error->plane[i].stride);
19879 		if (INTEL_GEN(dev_priv) <= 3) {
19880 			err_printf(m, "  SIZE: %08x\n", error->plane[i].size);
19881 			err_printf(m, "  POS: %08x\n", error->plane[i].pos);
19882 		}
19883 		if (INTEL_GEN(dev_priv) <= 7 && !IS_HASWELL(dev_priv))
19884 			err_printf(m, "  ADDR: %08x\n", error->plane[i].addr);
19885 		if (INTEL_GEN(dev_priv) >= 4) {
19886 			err_printf(m, "  SURF: %08x\n", error->plane[i].surface);
19887 			err_printf(m, "  TILEOFF: %08x\n", error->plane[i].tile_offset);
19888 		}
19889 
19890 		err_printf(m, "Cursor [%d]:\n", i);
19891 		err_printf(m, "  CNTR: %08x\n", error->cursor[i].control);
19892 		err_printf(m, "  POS: %08x\n", error->cursor[i].position);
19893 		err_printf(m, "  BASE: %08x\n", error->cursor[i].base);
19894 	}
19895 
19896 	for (i = 0; i < ARRAY_SIZE(error->transcoder); i++) {
19897 		if (!error->transcoder[i].available)
19898 			continue;
19899 
19900 		err_printf(m, "CPU transcoder: %s\n",
19901 			   transcoder_name(error->transcoder[i].cpu_transcoder));
19902 		err_printf(m, "  Power: %s\n",
19903 			   onoff(error->transcoder[i].power_domain_on));
19904 		err_printf(m, "  CONF: %08x\n", error->transcoder[i].conf);
19905 		err_printf(m, "  HTOTAL: %08x\n", error->transcoder[i].htotal);
19906 		err_printf(m, "  HBLANK: %08x\n", error->transcoder[i].hblank);
19907 		err_printf(m, "  HSYNC: %08x\n", error->transcoder[i].hsync);
19908 		err_printf(m, "  VTOTAL: %08x\n", error->transcoder[i].vtotal);
19909 		err_printf(m, "  VBLANK: %08x\n", error->transcoder[i].vblank);
19910 		err_printf(m, "  VSYNC: %08x\n", error->transcoder[i].vsync);
19911 	}
19912 }
19913 
19914 #endif
19915